From f102bc364cc709b95f02532639044e0569f3122a Mon Sep 17 00:00:00 2001 From: ksherlock Date: Sun, 7 Feb 2021 08:22:13 -0500 Subject: apple2gs: add some missing ADB commands. (#7753) --- src/mame/drivers/apple2gs.cpp | 98 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 80 insertions(+), 18 deletions(-) diff --git a/src/mame/drivers/apple2gs.cpp b/src/mame/drivers/apple2gs.cpp index 65135077e9a..08cba6a6b9a 100644 --- a/src/mame/drivers/apple2gs.cpp +++ b/src/mame/drivers/apple2gs.cpp @@ -629,6 +629,7 @@ private: void adb_post_response(const u8 *bytes, size_t length); void adb_post_response_1(u8 b); void adb_post_response_2(u8 b1, u8 b2); + void adb_post_response_3(u8 b1, u8 b2, u8 b3); void adb_do_command(); void adb_write_datareg(u8 data); void adb_write_kmstatus(u8 data); @@ -965,6 +966,15 @@ void apple2gs_state::adb_post_response_2(u8 b1, u8 b2) adb_post_response(b, 2); } +void apple2gs_state::adb_post_response_3(u8 b1, u8 b2, u8 b3) +{ + u8 b[3]; + b[0] = b1; + b[1] = b2; + b[2] = b3; + adb_post_response(b, 3); +} + void apple2gs_state::adb_do_command() { int device; @@ -980,6 +990,12 @@ void apple2gs_state::adb_do_command() case 0x00: /* ??? */ break; + case 0x01: /* abort */ + break; + + case 0x02: /* reset keyboard uC */ + break; + case 0x03: /* flush keyboard buffer */ break; @@ -1011,12 +1027,20 @@ void apple2gs_state::adb_do_command() adb_post_response_1(adb_read_memory(address)); break; - case 0x0a: /* ??? */ - case 0x0b: /* ??? */ + case 0x0a: /* read modes */ + adb_post_response_1(m_adb_mode); + break; + + case 0x0b: /* read config */ + adb_post_response_3(0, 0, 0); /* ignored for now */ + break; + + case 0x0c: /* read adb error */ + adb_post_response_1(0); break; case 0x0d: /* get version */ - adb_post_response_1(0x06); + adb_post_response_1(m_is_rom3 ? 0x06 : 0x05); /* rom0 0x04 */ break; case 0x0e: /* read available charsets */ @@ -1027,10 +1051,25 @@ void apple2gs_state::adb_do_command() adb_post_response_2(0x01, 0x00); break; - case 0x12: /* mystery command 0x12 */ - case 0x13: /* mystery command 0x13 */ + case 0x10: /* reset system */ + break; + + case 0x11: /* send adb keycode */ break; + case 0x12: /* mystery command 0x12 - mouse key parameters */ + case 0x13: /* mystery command 0x13 - disk key parameters */ + break; + + case 0x40: /* reset adb */ + break; + + case 0x49: case 0x4a: case 0x4b: case 0x4c: + case 0x4d: case 0x4e: case 0x4f: + /* transmit adb bytes. first byte is adb device command */ + break; + + case 0x84: // ACS demo disk #2 has a bug and writes this accidentally to $C026 break; @@ -1101,6 +1140,7 @@ void apple2gs_state::adb_write_datareg(u8 data) { case 0x00: /* ??? */ case 0x01: /* abort */ + case 0x02: /* reset keyboard uC */ /* do nothing for now */ break; @@ -1129,30 +1169,52 @@ void apple2gs_state::adb_write_datareg(u8 data) m_adb_command_length = 2; break; - case 0x0a: /* ??? */ - case 0x0b: /* ??? */ - m_adb_command_length = 0; - break; - + case 0x0a: /* read modes */ + case 0x0b: /* read config */ + case 0x0c: /* read adb error */ case 0x0d: /* get version */ - m_adb_command_length = 0; - break; - case 0x0e: /* read available charsets */ + case 0x0f: /* read available layouts */ m_adb_command_length = 0; m_adb_state = ADBSTATE_INCOMMAND; /* HACK */ break; - case 0x0f: /* read available layouts */ - m_adb_command_length = 0; - m_adb_state = ADBSTATE_INCOMMAND; /* HACK */ + case 0x10: /* reset system */ + /* do nothing for now */ break; - case 0x12: /* mystery command 0x12 */ - case 0x13: /* mystery command 0x13 */ + case 0x11: /* send adb keycode */ + m_adb_command_length = 1; + break; + + case 0x12: /* mystery command 0x12 - mouse key parameters? */ + case 0x13: /* mystery command 0x13 - disk eject parameters? */ m_adb_command_length = 2; break; + case 0x40: /* reset ADB */ + break; + + /* 0x49 - 0x4f - transmit ADB bytes where length = command & 0xf - 6*/ + case 0x49: case 0x4a: case 0x4b: case 0x4c: + case 0x4d: case 0x4e: case 0x4f: + m_adb_command_length = (m_adb_command & 0x0f) - 6; + break; + + case 0x50: /* enable SRQ device 0 */ + case 0x51: /* enable SRQ device 1 */ + case 0x52: /* enable SRQ device 2 */ + case 0x53: /* enable SRQ device 3 */ + /* ignore for now */ + break; + + case 0x60: /* flush adb buffer device 0 */ + case 0x61: /* flush adb buffer device 1 */ + case 0x62: /* flush adb buffer device 2 */ + case 0x63: /* flush adb buffer device 3 */ + /* ignore for now */ + break; + case 0x70: /* disable SRQ device 0 */ case 0x71: /* disable SRQ device 1 */ case 0x72: /* disable SRQ device 2 */ -- cgit v1.2.3