From b9dfd552a62a46449532d49adc0773589076c808 Mon Sep 17 00:00:00 2001 From: Uri Shaked Date: Thu, 21 Nov 2019 19:40:02 +0200 Subject: feat: add blink demo --- demo/src/execute.ts | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 demo/src/execute.ts (limited to 'demo/src/execute.ts') diff --git a/demo/src/execute.ts b/demo/src/execute.ts new file mode 100644 index 0000000..96a0411 --- /dev/null +++ b/demo/src/execute.ts @@ -0,0 +1,38 @@ +import { avrInstruction, AVRTimer, CPU, timer0Config } from 'avr8js'; +import { loadHex } from './intelhex'; + +// ATmega328p params +const FLASH = 0x8000; + +export class AVRRunner { + readonly program = new Uint16Array(FLASH); + readonly cpu: CPU; + readonly timer: AVRTimer; + + private stopped = false; + + constructor(hex: string) { + loadHex(hex, new Uint8Array(this.program.buffer)); + this.cpu = new CPU(this.program); + this.timer = new AVRTimer(this.cpu, timer0Config); + } + + async execute(callback: (cpu: CPU) => void) { + this.stopped = false; + for (;;) { + avrInstruction(this.cpu); + this.timer.tick(); + if (this.cpu.cycles % 50000 === 0) { + callback(this.cpu); + await new Promise((resolve) => setTimeout(resolve, 0)); + if (this.stopped) { + break; + } + } + } + } + + stop() { + this.stopped = true; + } +} -- cgit v1.2.3