summaryrefslogtreecommitdiff
path: root/emu/7seg.c
diff options
context:
space:
mode:
Diffstat (limited to 'emu/7seg.c')
-rw-r--r--emu/7seg.c27
1 files changed, 23 insertions, 4 deletions
diff --git a/emu/7seg.c b/emu/7seg.c
index 1aaf5f9..04a37f5 100644
--- a/emu/7seg.c
+++ b/emu/7seg.c
@@ -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 );
+}