diff options
| author | lironh | 2020-03-21 09:52:53 +0200 |
|---|---|---|
| committer | lironh | 2020-03-22 21:08:30 +0200 |
| commit | 8934a7566a038a74464d3d8df9d04fd875e5b1d7 (patch) | |
| tree | e131c263938081e6c89f39f141f3f20f6da8f851 /src/cpu.ts | |
| parent | Merge pull request #19 from gfeun/main-execute-loop-optimization (diff) | |
| download | avr8js-8934a7566a038a74464d3d8df9d04fd875e5b1d7.tar.gz avr8js-8934a7566a038a74464d3d8df9d04fd875e5b1d7.tar.bz2 avr8js-8934a7566a038a74464d3d8df9d04fd875e5b1d7.zip | |
refactor: added peripherals and cpu feature folders
Diffstat (limited to 'src/cpu.ts')
| -rw-r--r-- | src/cpu.ts | 78 |
1 files changed, 0 insertions, 78 deletions
diff --git a/src/cpu.ts b/src/cpu.ts deleted file mode 100644 index 4288285..0000000 --- a/src/cpu.ts +++ /dev/null @@ -1,78 +0,0 @@ -/** - * AVR 8 CPU data structures - * Part of AVR8js - * - * Copyright (C) 2019, Uri Shaked - */ - -import { u16, u8 } from './types'; - -const registerSpace = 0x100; - -// eslint-disable-next-line @typescript-eslint/interface-name-prefix -export interface ICPU { - readonly data: Uint8Array; - readonly dataView: DataView; - readonly progMem: Uint16Array; - readonly progBytes: Uint8Array; - pc: u16; - cycles: number; - - readData(addr: u16): u8; - writeData(addr: u16, value: u8): void; -} - -export type CPUMemoryHook = (value: u8, oldValue: u8, addr: u16) => boolean | void; -export interface CPUMemoryHooks { - [key: number]: CPUMemoryHook; -} - -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 writeHooks: CPUMemoryHooks = []; - - pc = 0; - cycles = 0; - - constructor(public progMem: Uint16Array, private sramBytes = 8192) { - this.reset(); - } - - reset() { - this.data.fill(0); - this.SP = this.data.length - 1; - } - - readData(addr: number) { - return this.data[addr]; - } - - writeData(addr: number, value: number) { - const hook = this.writeHooks[addr]; - if (hook) { - if (hook(value, this.data[addr], addr)) { - return; - } - } - this.data[addr] = value; - } - - get SP() { - return this.dataView.getUint16(93, true); - } - - set SP(value: number) { - this.dataView.setUint16(93, value, true); - } - - get SREG() { - return this.data[95]; - } - - get interruptsEnabled() { - return this.SREG & 0x80 ? true : false; - } -} |
