aboutsummaryrefslogtreecommitdiff
path: root/src/cpu.ts
diff options
context:
space:
mode:
authorlironh2020-03-21 09:52:53 +0200
committerlironh2020-03-22 21:08:30 +0200
commit8934a7566a038a74464d3d8df9d04fd875e5b1d7 (patch)
treee131c263938081e6c89f39f141f3f20f6da8f851 /src/cpu.ts
parentMerge pull request #19 from gfeun/main-execute-loop-optimization (diff)
downloadavr8js-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.ts78
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;
- }
-}