diff options
| author | Uri Shaked | 2019-11-21 10:59:01 +0200 |
|---|---|---|
| committer | Uri Shaked | 2019-11-21 10:59:34 +0200 |
| commit | 88674b7a66cfb831d1c50f1970828944246d3259 (patch) | |
| tree | aeba6f18b96680b08ceda4ae975dbb73353b3677 /src/interrupt.ts | |
| parent | test: SWAP, STS (diff) | |
| download | avr8js-88674b7a66cfb831d1c50f1970828944246d3259.tar.gz avr8js-88674b7a66cfb831d1c50f1970828944246d3259.tar.bz2 avr8js-88674b7a66cfb831d1c50f1970828944246d3259.zip | |
feat: implement avrInterrupt()
used to invoke hardware interrupt
Diffstat (limited to '')
| -rw-r--r-- | src/interrupt.ts | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/interrupt.ts b/src/interrupt.ts new file mode 100644 index 0000000..d833a3a --- /dev/null +++ b/src/interrupt.ts @@ -0,0 +1,11 @@ +import { ICPU } from './cpu'; + +export function avrInterrupt(cpu: ICPU, addr: number) { + const sp = cpu.dataView.getUint16(93, true); + cpu.data[sp] = cpu.pc & 0xff; + cpu.data[sp - 1] = (cpu.pc >> 8) & 0xff; + cpu.dataView.setUint16(93, sp - 2, true); + cpu.data[95] &= 0x7f; // clear global interrupt flag + cpu.cycles += 2; + cpu.pc = addr; +} |
