diff options
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 ); +} |