summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Patrick Mackinlay <pmackinlay@hotmail.com>2019-06-10 18:58:21 +0700
committer Patrick Mackinlay <pmackinlay@hotmail.com>2019-06-10 18:58:21 +0700
commit32b655b292c44017581813c1ac3e5225f0781309 (patch)
treef36838e7997a0cc8bae030cf07dd7b982e8bc6c8
parentcf1b3e6136f7ecbe9e75dddc0ff0a13bcbd2dff3 (diff)
mips: machines promoted to working
(nw)While still requiring a few workarounds, RC2030/RS2030 can now be considered to be working, RC3230/RS3230 will hopefully follow shortly. A first draft of instructions for use are here: https://wiki.mamedev.org/index.php/Driver:MIPS
-rw-r--r--src/mame/drivers/mips.cpp33
1 files changed, 19 insertions, 14 deletions
diff --git a/src/mame/drivers/mips.cpp b/src/mame/drivers/mips.cpp
index 3d64a1a9f12..aab011df6af 100644
--- a/src/mame/drivers/mips.cpp
+++ b/src/mame/drivers/mips.cpp
@@ -42,10 +42,6 @@
* http://www.prumpleffer.de/~miod/machineroom/machines/mips/magnum/index.html
* https://web.archive.org/web/20140518203135/http://no-l.org/pages/riscos.html
*
- * TODO (rx2030)
- * - keyboard controller and keyboard
- * - buzzer
- *
* TODO (rx3230)
* - verify/complete address maps
* - keyboard controller and interrupts
@@ -312,7 +308,14 @@ void rx2030_state::iop_io_map(address_map &map)
map(0x0080, 0x0083).rw(m_scsi, FUNC(aic6250_device::read), FUNC(aic6250_device::write)).umask16(0xff);
- map(0x00c0, 0x00c1).rw(m_kbdc, FUNC(at_keyboard_controller_device::data_r), FUNC(at_keyboard_controller_device::data_w)).umask16(0xff);
+ /*
+ * HACK: Substitute the keyboard "set defaults" command for the "reset"
+ * command to avoid an issue where the keyboard is still busy performing
+ * the reset and does not accept commands being sent to it to change the
+ * scan code set. Possibly caused by imperfect V50 timing and/or memory
+ * wait states that make the IOP code execute more slowly than emulated.
+ */
+ map(0x00c0, 0x00c1).lrw8("kbdc_data", [this]() { return m_kbdc->data_r(); }, [this](u8 data) { m_kbdc->data_w(data == 0xff ? 0xf6 : data); }).umask16(0xff);
map(0x00c4, 0x00c5).rw(m_kbdc, FUNC(at_keyboard_controller_device::status_r), FUNC(at_keyboard_controller_device::command_w)).umask16(0xff);
map(0x0100, 0x0107).rw(m_scc, FUNC(z80scc_device::ba_cd_inv_r), FUNC(z80scc_device::ba_cd_inv_w)).umask16(0xff);
@@ -844,17 +847,19 @@ void rx3230_state::rx3230(machine_config &config)
//m_fdc->drq_wr_callback().set();
FLOPPY_CONNECTOR(config, "fdc:0", "35hd", FLOPPY_35_HD, true, mips_floppy_formats).enable_sound(false);
- // keyboard
- pc_kbdc_device &kbdc(PC_KBDC(config, "pc_kbdc", 0));
- kbdc.out_clock_cb().set(m_kbdc, FUNC(at_keyboard_controller_device::kbd_clk_w));
- kbdc.out_data_cb().set(m_kbdc, FUNC(at_keyboard_controller_device::kbd_data_w));
+ // keyboard connector
+ pc_kbdc_device &kbd_con(PC_KBDC(config, "kbd_con", 0));
+ kbd_con.out_clock_cb().set(m_kbdc, FUNC(at_keyboard_controller_device::kbd_clk_w));
+ kbd_con.out_data_cb().set(m_kbdc, FUNC(at_keyboard_controller_device::kbd_data_w));
+ // keyboard port
PC_KBDC_SLOT(config, m_kbd, pc_at_keyboards, nullptr);
- m_kbd->set_pc_kbdc_slot(&kbdc);
+ m_kbd->set_pc_kbdc_slot(&kbd_con);
+ // keyboard controller
AT_KEYBOARD_CONTROLLER(config, m_kbdc, 12_MHz_XTAL); // TODO: confirm
- m_kbdc->kbd_clk().set(kbdc, FUNC(pc_kbdc_device::clock_write_from_mb));
- m_kbdc->kbd_data().set(kbdc, FUNC(pc_kbdc_device::data_write_from_mb));
+ m_kbdc->kbd_clk().set(kbd_con, FUNC(pc_kbdc_device::clock_write_from_mb));
+ m_kbdc->kbd_data().set(kbd_con, FUNC(pc_kbdc_device::data_write_from_mb));
//m_kbdc->kbd_irq().set(FUNC(rx3230_state::irq_w<INT_KBD>));
// buzzer
@@ -1026,7 +1031,7 @@ ROM_END
#define rom_rs3230 rom_rx3230
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
-COMP(1989, rc2030, 0, 0, rc2030, 0, rx2030_state, rx2030_init, "MIPS", "RC2030", MACHINE_NOT_WORKING)
-COMP(1989, rs2030, 0, 0, rs2030, 0, rx2030_state, rx2030_init, "MIPS", "RS2030", MACHINE_NOT_WORKING)
+COMP(1989, rc2030, 0, 0, rc2030, 0, rx2030_state, rx2030_init, "MIPS", "RC2030", 0)
+COMP(1989, rs2030, 0, 0, rs2030, 0, rx2030_state, rx2030_init, "MIPS", "RS2030", 0)
COMP(1990, rc3230, 0, 0, rc3230, 0, rx3230_state, rx3230_init, "MIPS", "RC3230", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
COMP(1990, rs3230, 0, 0, rs3230, 0, rx3230_state, rx3230_init, "MIPS", "Magnum 3000", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)