summaryrefslogtreecommitdiff
path: root/emu/7seg.c
diff options
context:
space:
mode:
Diffstat (limited to 'emu/7seg.c')
-rw-r--r--emu/7seg.c48
1 files changed, 21 insertions, 27 deletions
diff --git a/emu/7seg.c b/emu/7seg.c
index 787b280..d2b2d20 100644
--- a/emu/7seg.c
+++ b/emu/7seg.c
@@ -17,12 +17,11 @@ static device_vtable_t const seg7_vtable = {
seg7_deinit
};
-void seg7_init( seg7_t *seg, uint16_t addr, bool initialize )
+void seg7_init( seg7_t *seg, bool initialize )
{
device_init( &seg->base, "seg7" );
seg->base.vtable = (device_vtable_t *)&seg7_vtable;
- seg->addr = addr;
seg->debug = false;
if( initialize ) {
@@ -33,39 +32,34 @@ void seg7_init( seg7_t *seg, uint16_t addr, bool initialize )
uint8_t seg7_read( void *obj, uint16_t addr )
{
+ // device is a write-only device
return 0;
}
void seg7_write( void *obj, uint16_t addr, uint8_t data )
{
seg7_t *seg = (seg7_t *)obj;
+
+ // address is not relevant, PORTA is connected to our signals
+ // via a databus
- switch( addr - seg->addr ) {
- case DDRA:
- seg->ddr = data;
- break;
-
- case PORTA:
- // write bits from SER into shift register on positive SRCLK
- if( ( seg->ddr | ( SRCLK & SER ) ) && ( data & SRCLK ) ) {
- seg->shift = ( seg->shift << 1 ) | ( data & SER );
- if( seg->debug ) {
- fprintf( stderr, "7seg shifting data, data is now %02X\n", seg->shift );
- }
- }
-
- // copy shift to latch register on positive RCLK
- if( ( seg->ddr | RCLK ) && ( data & RCLK ) ) {
- seg->latch = seg->shift;
- if( seg->debug ) {
- fprintf( stderr, "7seg copying %02X from shift to latch\n", seg->latch );
- }
- }
-
- break;
-
- // ignore writes to other addresses
+ // write bits from SER into shift register on positive SRCLK
+ if( data & SRCLK ) {
+ seg->shift = ( seg->shift << 1 ) | ( data & SER );
+ if( seg->debug ) {
+ fprintf( stderr, "7seg shifting data, data is now %02X\n", seg->shift );
+ }
}
+
+ // copy shift to latch register on positive RCLK
+ if( data & RCLK ) {
+ seg->latch = seg->shift;
+ if( seg->debug ) {
+ fprintf( stderr, "7seg copying %02X from shift to latch\n", seg->latch );
+ }
+ }
+
+ // ignore writes to other addresses
}
#ifdef WITH_GUI