diff options
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 |
commit | 32b655b292c44017581813c1ac3e5225f0781309 (patch) | |
tree | f36838e7997a0cc8bae030cf07dd7b982e8bc6c8 | |
parent | cf1b3e6136f7ecbe9e75dddc0ff0a13bcbd2dff3 (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.cpp | 33 |
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) |