diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2020-11-27 20:04:18 +0100 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2020-11-27 20:04:18 +0100 |
commit | f829f6893d94ed52044bf007bc447526c9d5e653 (patch) | |
tree | c1c98d8b9240b4507719aa8b78eb3ee03dd64ab5 /emu/7seg.c | |
parent | 3d77f3f5ad41e931117425f58c74f49c9503bf7b (diff) | |
download | 6502-f829f6893d94ed52044bf007bc447526c9d5e653.tar.gz 6502-f829f6893d94ed52044bf007bc447526c9d5e653.tar.bz2 |
emulator uses a bus now in the cpu, ROM, RAM and VIA (7-seg) are devices connected to the bus
Diffstat (limited to 'emu/7seg.c')
-rw-r--r-- | emu/7seg.c | 27 |
1 files changed, 23 insertions, 4 deletions
@@ -2,19 +2,31 @@ #include <stdio.h> -void seg7_init( seg7_t *seg ) +static device_vtable_t const seg7_vtable = { + seg7_read, + seg7_write, + seg7_deinit +}; + +void seg7_init( seg7_t *seg, uint16_t addr ) { + device_init( &seg->base, "seg7" ); + seg->base.vtable = (device_vtable_t *)&seg7_vtable; + + seg->addr = addr; seg->debug = false; } -uint8_t seg7_read( seg7_t *seg, uint16_t addr ) +uint8_t seg7_read( void *obj, uint16_t addr ) { return 0; } -void seg7_write( seg7_t *seg, uint16_t addr, uint8_t data ) +void seg7_write( void *obj, uint16_t addr, uint8_t data ) { - switch( addr ) { + seg7_t *seg = (seg7_t *)obj; + + switch( addr - seg->addr ) { case DDRA: seg->ddr = data; break; @@ -41,3 +53,10 @@ void seg7_write( seg7_t *seg, uint16_t addr, uint8_t data ) // ignore writes to other addresses } } + +void seg7_deinit( void *obj ) +{ + seg7_t *seg = (seg7_t *)obj; + + device_deinit( &seg->base ); +} |