bool EMSCRIPTEN_KEEPALIVE sendCSC(uint8_t csc) { uint8_t flags = mem_peek_byte(CE_kbdFlags); if (flags & CE_kbdSCR) { return false; } mem_poke_byte(CE_kbdScanCode, csc); mem_poke_byte(CE_kbdFlags, flags | CE_kbdSCR); return true; }
bool EMSCRIPTEN_KEEPALIVE sendKey(uint16_t key) { uint8_t flags = mem_peek_byte(CE_graphFlags2); if (flags & CE_keyReady) { return false; } if (key < 0x100) { key <<= 8; } mem_poke_byte(CE_kbdKey, (uint8_t)(key >> 8)); mem_poke_byte(CE_keyExtend, (uint8_t)(key & 0xFF)); mem_poke_byte(CE_graphFlags2, flags | CE_keyReady); return true; }
uint8_t debug_peek_byte(uint32_t address) { uint8_t value = mem_peek_byte(address), debugData; if ((debugData = debugger.data.block[address])) { disasmHighlight.hit_read_watchpoint |= debugData & DBG_READ_WATCHPOINT; disasmHighlight.hit_write_watchpoint |= debugData & DBG_WRITE_WATCHPOINT; disasmHighlight.hit_exec_breakpoint |= debugData & DBG_EXEC_BREAKPOINT; if (debugData & DBG_INST_START_MARKER && disasmHighlight.inst_address < 0) { disasmHighlight.inst_address = address; } } if (cpu.registers.PC == address) { disasmHighlight.hit_pc = true; } return value; }