summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Pavone <pavone@retrodev.com>2017-02-01 21:19:35 -0800
committerMichael Pavone <pavone@retrodev.com>2017-02-01 21:19:35 -0800
commit9a092d2574180542ba322480016f3f7a90d7ebdb (patch)
tree1ff64aedc5039ccaf4d9ef96d09d88603fd158c7
parentf123340cdc3966812468855160b24e0dfcbe9c0e (diff)
Basic implementation of serial IO registers, but without actual serial IO support. Needed to run a certain software check cartridge that is floating around.
-rw-r--r--genesis.c50
-rw-r--r--io.h3
2 files changed, 53 insertions, 0 deletions
diff --git a/genesis.c b/genesis.c
index 09993bc..2d91335 100644
--- a/genesis.c
+++ b/genesis.c
@@ -517,6 +517,29 @@ static m68k_context * io_write(uint32_t location, m68k_context * context, uint8_
case 0x6:
gen->io.ports[2].control = value;
break;
+ case 0x7:
+ gen->io.ports[0].serial_out = value;
+ break;
+ case 0x8:
+ case 0xB:
+ case 0xE:
+ //serial input port is not writeable
+ break;
+ case 0x9:
+ gen->io.ports[0].serial_ctrl = value;
+ break;
+ case 0xA:
+ gen->io.ports[1].serial_out = value;
+ break;
+ case 0xC:
+ gen->io.ports[1].serial_ctrl = value;
+ break;
+ case 0xD:
+ gen->io.ports[2].serial_out = value;
+ break;
+ case 0xF:
+ gen->io.ports[2].serial_ctrl = value;
+ break;
}
} else {
if (location == 0x1100) {
@@ -628,6 +651,33 @@ static uint8_t io_read(uint32_t location, m68k_context * context)
case 0x6:
value = gen->io.ports[2].control;
break;
+ case 0x7:
+ value = gen->io.ports[0].serial_out;
+ break;
+ case 0x8:
+ value = gen->io.ports[0].serial_in;
+ break;
+ case 0x9:
+ value = gen->io.ports[0].serial_ctrl;
+ break;
+ case 0xA:
+ value = gen->io.ports[1].serial_out;
+ break;
+ case 0xB:
+ value = gen->io.ports[1].serial_in;
+ break;
+ case 0xC:
+ value = gen->io.ports[1].serial_ctrl;
+ break;
+ case 0xD:
+ value = gen->io.ports[2].serial_out;
+ break;
+ case 0xE:
+ value = gen->io.ports[2].serial_in;
+ break;
+ case 0xF:
+ value = gen->io.ports[2].serial_ctrl;
+ break;
default:
value = 0xFF;
}
diff --git a/io.h b/io.h
index 8d5b04c..6381794 100644
--- a/io.h
+++ b/io.h
@@ -57,6 +57,9 @@ typedef struct {
uint8_t output;
uint8_t control;
uint8_t input[3];
+ uint8_t serial_out;
+ uint8_t serial_in;
+ uint8_t serial_ctrl;
uint8_t device_type;
} io_port;