summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/hp9k_3xx.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/hp9k_3xx.cpp')
-rw-r--r--src/mame/drivers/hp9k_3xx.cpp32
1 files changed, 5 insertions, 27 deletions
diff --git a/src/mame/drivers/hp9k_3xx.cpp b/src/mame/drivers/hp9k_3xx.cpp
index 042e1585949..e90cf59fa58 100644
--- a/src/mame/drivers/hp9k_3xx.cpp
+++ b/src/mame/drivers/hp9k_3xx.cpp
@@ -116,7 +116,6 @@ public:
private:
bool m_in_buserr;
- uint32_t m_last_buserr_pc;
};
uint32_t hp9k3xx_state::hp_medres_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
@@ -154,6 +153,10 @@ static ADDRESS_MAP_START(hp9k3xx_common, AS_PROGRAM, 32, hp9k3xx_state)
AM_RANGE(0x00510000, 0x00510003) AM_READWRITE(buserror_r, buserror_w) // no "Alpha display"
AM_RANGE(0x00538000, 0x00538003) AM_READWRITE(buserror_r, buserror_w) // no "Graphics"
AM_RANGE(0x005c0000, 0x005c0003) AM_READWRITE(buserror_r, buserror_w) // no add-on FP coprocessor
+
+ AM_RANGE(0x00600000, 0x007fffff) AM_READWRITE(buserror_r, buserror_w) // prevent reading invalid DIO slots
+ AM_RANGE(0x01000000, 0x1fffffff) AM_READWRITE(buserror_r, buserror_w) // prevent reading invalid DIO-II slots
+
AM_RANGE(0x005f8000, 0x005f800f) AM_DEVREADWRITE8(PTM6840_TAG, ptm6840_device, read, write, 0x00ff00ff)
ADDRESS_MAP_END
@@ -166,7 +169,7 @@ static ADDRESS_MAP_START(hp9k310_map, AS_PROGRAM, 16, hp9k3xx_state)
AM_RANGE(0x5c0000, 0x5c0003) AM_READWRITE(buserror16_r, buserror16_w) // no add-on FP coprocessor
AM_RANGE(0x5f8000, 0x5f800f) AM_DEVREADWRITE8(PTM6840_TAG, ptm6840_device, read, write, 0x00ff)
-
+ AM_RANGE(0x600000, 0x7ffffd) AM_READWRITE(buserror16_r, buserror16_w) // prevent reading invalid DIO slots
AM_RANGE(0x700000, 0x7fffff) AM_READWRITE(buserror16_r, buserror16_w)
AM_RANGE(0x800000, 0xffffff) AM_RAM
ADDRESS_MAP_END
@@ -242,76 +245,51 @@ INPUT_PORTS_END
void hp9k3xx_state::machine_reset()
{
m_in_buserr = false;
- m_last_buserr_pc = 0;
}
READ16_MEMBER(hp9k3xx_state::buserror16_r)
{
- if (m_last_buserr_pc == space.device().safe_pc())
- {
- return 0;
- }
-
if (!m_in_buserr)
{
m_in_buserr = true;
m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE);
m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE);
m_in_buserr = false;
- m_last_buserr_pc = space.device().safe_pc();
}
return 0;
}
WRITE16_MEMBER(hp9k3xx_state::buserror16_w)
{
- if (m_last_buserr_pc == space.device().safe_pc())
- {
- return;
- }
-
if (!m_in_buserr)
{
m_in_buserr = true;
m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE);
m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE);
m_in_buserr = false;
- m_last_buserr_pc = space.device().safe_pc();
}
}
READ32_MEMBER(hp9k3xx_state::buserror_r)
{
- if (m_last_buserr_pc == space.device().safe_pc())
- {
- return 0;
- }
-
if (!m_in_buserr)
{
m_in_buserr = true;
m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE);
m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE);
m_in_buserr = false;
- m_last_buserr_pc = space.device().safe_pc();
}
return 0;
}
WRITE32_MEMBER(hp9k3xx_state::buserror_w)
{
- if (m_last_buserr_pc == space.device().safe_pc())
- {
- return;
- }
-
if (!m_in_buserr)
{
m_in_buserr = true;
m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE);
m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE);
m_in_buserr = false;
- m_last_buserr_pc = space.device().safe_pc();
}
}