summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/mips.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/mips.cpp')
-rw-r--r--src/mame/drivers/mips.cpp38
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);