diff options
Diffstat (limited to 'src/mame/drivers/mips.cpp')
-rw-r--r-- | src/mame/drivers/mips.cpp | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/src/mame/drivers/mips.cpp b/src/mame/drivers/mips.cpp index 27afe08ecad..f1b3f833181 100644 --- a/src/mame/drivers/mips.cpp +++ b/src/mame/drivers/mips.cpp @@ -39,6 +39,8 @@ * http://www.umips.net/ * http://www.geekdot.com/the-mips-rs2030/ * http://www.jp.netbsd.org/ports/mipsco/models.html + * 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) * - remaining iop interface @@ -178,6 +180,9 @@ * 3 <- fpu * 4 <- fdc * 5 <- parity error + * + * Keyboard controller output port + * 4: select 1M/4M SIMMs? */ #include "emu.h" @@ -472,8 +477,8 @@ static void mips_scsi_devices(device_slot_interface &device) void rx2030_state::rx2030(machine_config &config) { R2000A(config, m_cpu, 33.333_MHz_XTAL / 2, 32768, 32768); - m_cpu->set_fpurev(0x0315); // 0x0315 == R2010A v1.5 - m_cpu->in_brcond<0>().set([]() { return 1; }); // logerror("brcond0 sampled (%s)\n", machine().describe_context()); + m_cpu->set_fpurev(mips1_device_base::MIPS_R2010A); + m_cpu->in_brcond<0>().set([]() { return 1; }); // writeback complete V50(config, m_iop, 20_MHz_XTAL / 2); m_iop->set_addrmap(AS_PROGRAM, &rx2030_state::iop_program_map); @@ -728,14 +733,31 @@ void rx3230_state::rx3230_init() { // map the configured ram m_cpu->space(0).install_ram(0x00000000, m_ram->mask(), m_ram->pointer()); + + /* + * HACK: the prom bootp code broadcasts to the network address (i.e. the + * host portion is "all zeroes"), instead of to the standard "all ones". + * This makes it very difficult to receive the bootp request in a host OS, + * so this patch changes the code to broadcast to the standard broadcast + * address instead. + * + * 0xbfc1f1b0: addu r6,0,0 + * jal $bfc0be10 # set host portion from r6 + * + * This patch changes the first instruction to one which loads r6 with + * 0xffffffff, which is then or'd into the host part of the address, i.e.: + * + * addiu r6,0,-$1 + */ + m_rom[0x1f1b0 >> 2] = 0x2406ffff; } void rx3230_state::rx3230(machine_config &config) { R3000A(config, m_cpu, 50_MHz_XTAL / 2, 32768, 32768); m_cpu->set_addrmap(AS_PROGRAM, &rx3230_state::rx3230_map); - m_cpu->set_fpurev(0x0340); // 0x0340 == R3010A v4.0? - m_cpu->in_brcond<0>().set([]() { return 1; }); // bus grant? + m_cpu->set_fpurev(mips1_device_base::MIPS_R3010A); + m_cpu->in_brcond<0>().set([]() { return 1; }); // writeback complete // 32 SIMM slots, 8-128MB memory, banks of 8 1MB or 4MB SIMMs RAM(config, m_ram); @@ -748,6 +770,8 @@ void rx3230_state::rx3230(machine_config &config) m_rambo->parity_out().set_inputline(m_cpu, INPUT_LINE_IRQ5); //m_rambo->buzzer_out().set(m_buzzer, FUNC(speaker_sound_device::level_w)); m_rambo->set_ram(m_ram); + m_rambo->dma_r<0>().set("scsi:7:ncr53c94", FUNC(ncr53c94_device::dma_r)); + m_rambo->dma_w<0>().set("scsi:7:ncr53c94", FUNC(ncr53c94_device::dma_w)); // scsi bus and devices NSCSI_BUS(config, m_scsibus, 0); @@ -823,15 +847,15 @@ void rx3230_state::rx3230(machine_config &config) 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_irq().set(FUNC(rx3230_state::irq_w<INT_KBD>)).invert(); + m_kbdc->kbd_irq().set(FUNC(rx3230_state::irq_w<INT_KBD>)); // buzzer SPEAKER(config, "mono").front_center(); SPEAKER_SOUND(config, m_buzzer); m_buzzer->add_route(ALL_OUTPUTS, "mono", 0.50); - // motherboard monochrome video (1152x900 @ 60Hz?) - u32 const pixclock = 62'208'000; + // motherboard monochrome video (1152x900 @ 72Hz) + u32 const pixclock = 74'649'600; SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_raw(pixclock, 1152, 0, 1152, 900, 0, 900); |