aboutsummaryrefslogtreecommitdiff
path: root/demo
diff options
context:
space:
mode:
authorUri Shaked2019-11-25 22:03:40 +0200
committerUri Shaked2019-11-25 22:03:40 +0200
commit9b399811c07cc2ab881abacf6ca35107fc6bc658 (patch)
tree4200735eeec384baae148c37cca8d0438e274a67 /demo
parentdoc: README for demo, explain about running tests (diff)
downloadavr8js-9b399811c07cc2ab881abacf6ca35107fc6bc658.tar.gz
avr8js-9b399811c07cc2ab881abacf6ca35107fc6bc658.tar.bz2
avr8js-9b399811c07cc2ab881abacf6ca35107fc6bc658.zip
feat: GPIO peripheral implementation
Add new AVRIOPort class, implements GPIO output logic
Diffstat (limited to '')
-rw-r--r--demo/src/execute.ts17
-rw-r--r--demo/src/index.ts11
2 files changed, 20 insertions, 8 deletions
diff --git a/demo/src/execute.ts b/demo/src/execute.ts
index 96a0411..4568839 100644
--- a/demo/src/execute.ts
+++ b/demo/src/execute.ts
@@ -1,4 +1,13 @@
-import { avrInstruction, AVRTimer, CPU, timer0Config } from 'avr8js';
+import {
+ avrInstruction,
+ AVRTimer,
+ CPU,
+ timer0Config,
+ AVRIOPort,
+ portBConfig,
+ portCConfig,
+ portDConfig
+} from 'avr8js';
import { loadHex } from './intelhex';
// ATmega328p params
@@ -8,6 +17,9 @@ export class AVRRunner {
readonly program = new Uint16Array(FLASH);
readonly cpu: CPU;
readonly timer: AVRTimer;
+ readonly portB: AVRIOPort;
+ readonly portC: AVRIOPort;
+ readonly portD: AVRIOPort;
private stopped = false;
@@ -15,6 +27,9 @@ export class AVRRunner {
loadHex(hex, new Uint8Array(this.program.buffer));
this.cpu = new CPU(this.program);
this.timer = new AVRTimer(this.cpu, timer0Config);
+ this.portB = new AVRIOPort(this.cpu, portBConfig);
+ this.portC = new AVRIOPort(this.cpu, portCConfig);
+ this.portD = new AVRIOPort(this.cpu, portDConfig);
}
async execute(callback: (cpu: CPU) => void) {
diff --git a/demo/src/index.ts b/demo/src/index.ts
index 22e8143..e51cbbc 100644
--- a/demo/src/index.ts
+++ b/demo/src/index.ts
@@ -1,7 +1,7 @@
import { buildHex } from './compile';
-import './index.css';
import { AVRRunner } from './execute';
import { formatTime } from './format-time';
+import './index.css';
import { LED } from './led';
let editor: any;
@@ -55,16 +55,13 @@ function executeProgram(hex: string) {
runner = new AVRRunner(hex);
const MHZ = 16000000;
- // Hook to PORTB output
- runner.cpu.writeHooks[0x25] = (value: number) => {
- const DDRB = runner.cpu.data[0x24];
- value &= DDRB;
+ // Hook to PORTB register
+ runner.portB.addListener((value) => {
const D12bit = 1 << 4;
const D13bit = 1 << 5;
led12.value = value & D12bit ? true : false;
led13.value = value & D13bit ? true : false;
- };
-
+ });
runner.execute((cpu) => {
const time = formatTime(cpu.cycles / MHZ);
statusLabel.textContent = 'Simulation time: ' + time;