changeset 1215:cf69a179aeaf

Basic implementation of serial IO registers, but without actual serial IO support. Needed to run a certain software check cartridge that is floating around.
author Michael Pavone <pavone@retrodev.com>
date Wed, 01 Feb 2017 21:19:35 -0800
parents afa3d0a227ae
children 0649cd8ca097
files genesis.c io.h
diffstat 2 files changed, 53 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/genesis.c	Wed Feb 01 19:33:11 2017 -0800
+++ b/genesis.c	Wed Feb 01 21:19:35 2017 -0800
@@ -517,6 +517,29 @@
 			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 @@
 			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;
 			}
--- a/io.h	Wed Feb 01 19:33:11 2017 -0800
+++ b/io.h	Wed Feb 01 21:19:35 2017 -0800
@@ -57,6 +57,9 @@
 	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;