summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author mooglyguy <therealmogminer@gmail.com>2018-09-08 23:28:52 +0200
committer mooglyguy <therealmogminer@gmail.com>2018-09-08 23:29:08 +0200
commit8d4d261ee3d81a6c1b2911abdb5d2da47921d537 (patch)
tree9b6eafe0637fb46a952bfe7568acbd34ba573e56
parentf99119e02939db544b52d8903a7b6dbe02afd3e8 (diff)
-sparc: Fixed TBR masking when taking traps and interrupts. [Ryan Holtz]
-rw-r--r--src/devices/cpu/sparc/mb86901.cpp5
-rw-r--r--src/mame/drivers/sun4.cpp4
2 files changed, 5 insertions, 4 deletions
diff --git a/src/devices/cpu/sparc/mb86901.cpp b/src/devices/cpu/sparc/mb86901.cpp
index 977455e72f0..f01e21909f1 100644
--- a/src/devices/cpu/sparc/mb86901.cpp
+++ b/src/devices/cpu/sparc/mb86901.cpp
@@ -11,7 +11,6 @@
// To-Do:
// - Ops: FBFcc, LDF, STF
// - Test: SPARCv8 ops are untested
-// - Test: Traps are untested
// - FPU support
// - Coprocessor support
//
@@ -1337,6 +1336,7 @@ void mb86901_device::execute_saverestore(uint32_t op)
result = rs1 + operand2;
PSR &= ~PSR_CWP_MASK;
PSR |= new_cwp;
+ BREAK_PSR;
}
}
else if (RESTORE)
@@ -1352,6 +1352,7 @@ void mb86901_device::execute_saverestore(uint32_t op)
result = rs1 + operand2;
PSR &= ~PSR_CWP_MASK;
PSR |= new_cwp;
+ BREAK_PSR;
}
}
@@ -2588,7 +2589,7 @@ void mb86901_device::select_trap()
else if (m_interrupt_level > 0)
m_tt = 0x10 | m_interrupt_level;
- TBR |= m_tt << 4;
+ TBR = (TBR & 0xfffff000) | (m_tt << 4);
m_trap = 0;
m_instruction_access_exception = 0;
m_illegal_instruction = 0;
diff --git a/src/mame/drivers/sun4.cpp b/src/mame/drivers/sun4.cpp
index 6658c2629ca..645d056c988 100644
--- a/src/mame/drivers/sun4.cpp
+++ b/src/mame/drivers/sun4.cpp
@@ -2000,12 +2000,12 @@ MACHINE_CONFIG_START(sun4_state::sun4)
MCFG_NSCSI_BUS_ADD("scsibus")
MCFG_NSCSI_ADD("scsibus:0", sun_scsi_devices, "harddisk", false)
- MCFG_NSCSI_ADD("scsibus:1", sun_scsi_devices, "cdrom", false)
+ MCFG_NSCSI_ADD("scsibus:1", sun_scsi_devices, nullptr, false)
MCFG_NSCSI_ADD("scsibus:2", sun_scsi_devices, nullptr, false)
MCFG_NSCSI_ADD("scsibus:3", sun_scsi_devices, nullptr, false)
MCFG_NSCSI_ADD("scsibus:4", sun_scsi_devices, nullptr, false)
MCFG_NSCSI_ADD("scsibus:5", sun_scsi_devices, nullptr, false)
- MCFG_NSCSI_ADD("scsibus:6", sun_scsi_devices, nullptr, false)
+ MCFG_NSCSI_ADD("scsibus:6", sun_scsi_devices, "cdrom", false)
MCFG_NSCSI_ADD("scsibus:7", sun_scsi_devices, "ncr53c90a", true)
MCFG_SLOT_OPTION_MACHINE_CONFIG("ncr53c90a", [this] (device_t *device) { ncr53c90a(device); })
MACHINE_CONFIG_END