diff options
Diffstat (limited to 'src/cpu/cpu.ts')
| -rw-r--r-- | src/cpu/cpu.ts | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/cpu/cpu.ts b/src/cpu/cpu.ts index 0c60c9e..5663a1c 100644 --- a/src/cpu/cpu.ts +++ b/src/cpu/cpu.ts @@ -40,11 +40,16 @@ export interface CPUMemoryHooks { [key: number]: CPUMemoryHook; } +export type CPUMemoryReadHook = (addr: u16) => u8; +export interface CPUMemoryReadHooks { + [key: number]: CPUMemoryReadHook; +} export class CPU implements ICPU { readonly data: Uint8Array = new Uint8Array(this.sramBytes + registerSpace); readonly data16 = new Uint16Array(this.data.buffer); readonly dataView = new DataView(this.data.buffer); readonly progBytes = new Uint8Array(this.progMem.buffer); + readonly readHooks: CPUMemoryReadHooks = []; readonly writeHooks: CPUMemoryHooks = []; readonly pc22Bits = this.progBytes.length > 0x20000; @@ -61,6 +66,9 @@ export class CPU implements ICPU { } readData(addr: number) { + if (addr >= 32 && this.readHooks[addr]) { + return this.readHooks[addr](addr); + } return this.data[addr]; } |
