diff options
author | Michael Pavone <pavone@retrodev.com> | 2017-02-01 21:19:35 -0800 |
---|---|---|
committer | Michael Pavone <pavone@retrodev.com> | 2017-02-01 21:19:35 -0800 |
commit | 9a092d2574180542ba322480016f3f7a90d7ebdb (patch) | |
tree | 1ff64aedc5039ccaf4d9ef96d09d88603fd158c7 /genesis.c | |
parent | f123340cdc3966812468855160b24e0dfcbe9c0e (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.
Diffstat (limited to 'genesis.c')
-rw-r--r-- | genesis.c | 50 |
1 files changed, 50 insertions, 0 deletions
@@ -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; } |