summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/unsp/unsp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/unsp/unsp.cpp')
-rw-r--r--src/devices/cpu/unsp/unsp.cpp37
1 files changed, 21 insertions, 16 deletions
diff --git a/src/devices/cpu/unsp/unsp.cpp b/src/devices/cpu/unsp/unsp.cpp
index 87a95bd900f..a3e783dd6c9 100644
--- a/src/devices/cpu/unsp/unsp.cpp
+++ b/src/devices/cpu/unsp/unsp.cpp
@@ -60,24 +60,28 @@ unsp_device::unsp_device(const machine_config &mconfig, device_type type, const
, m_enable_drc(false)
{
m_iso = 10;
+ m_numregs = 8;
}
unsp_device::unsp_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: unsp_device(mconfig, UNSP, tag, owner, clock, address_map_constructor())
{
m_iso = 10;
+ m_numregs = 8;
}
unsp_11_device::unsp_11_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: unsp_device(mconfig, UNSP_11, tag, owner, clock, address_map_constructor())
{
m_iso = 11;
+ m_numregs = 8;
}
unsp_11_device::unsp_11_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, address_map_constructor internal)
: unsp_device(mconfig, type, tag, owner, clock, internal)
{
m_iso = 11;
+ m_numregs = 8;
}
@@ -85,24 +89,28 @@ unsp_12_device::unsp_12_device(const machine_config &mconfig, const char *tag, d
: unsp_11_device(mconfig, UNSP_12, tag, owner, clock, address_map_constructor())
{
m_iso = 12;
+ m_numregs = 8;
}
unsp_12_device::unsp_12_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, address_map_constructor internal)
: unsp_11_device(mconfig, type, tag, owner, clock, internal)
{
m_iso = 12;
+ m_numregs = 8;
}
unsp_20_device::unsp_20_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: unsp_12_device(mconfig, UNSP_20, tag, owner, clock, address_map_constructor())
{
m_iso = 20;
+ m_numregs = 16;
}
unsp_20_device::unsp_20_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, address_map_constructor internal)
: unsp_12_device(mconfig, type, tag, owner, clock, internal)
{
m_iso = 20;
+ m_numregs = 16;
}
unsp_device::~unsp_device()
@@ -182,9 +190,12 @@ void unsp_device::unimplemented_opcode(uint16_t op, uint16_t ximm, uint16_t ximm
void unsp_device::device_start()
{
+
m_core = (internal_unsp_state *)m_cache.alloc_near(sizeof(internal_unsp_state));
memset(m_core, 0, sizeof(internal_unsp_state));
+ m_core->m_r.resize(m_numregs);
+
#if ENABLE_UNSP_DRC
m_enable_drc = allow_drc() && (m_iso < 12);
#else
@@ -275,21 +286,20 @@ void unsp_20_device::device_start()
int baseindex = UNSP_SB + 1;
#endif
- state_add(baseindex + UNSP20_R8, "R8", m_secondary_r[UNSP20_R8]).formatstr("%04X");
- state_add(baseindex + UNSP20_R9, "R9", m_secondary_r[UNSP20_R9]).formatstr("%04X");
- state_add(baseindex + UNSP20_R10, "R10", m_secondary_r[UNSP20_R10]).formatstr("%04X");
- state_add(baseindex + UNSP20_R11, "R11", m_secondary_r[UNSP20_R11]).formatstr("%04X");
- state_add(baseindex + UNSP20_R12, "R12", m_secondary_r[UNSP20_R12]).formatstr("%04X");
- state_add(baseindex + UNSP20_R13, "R13", m_secondary_r[UNSP20_R13]).formatstr("%04X");
- state_add(baseindex + UNSP20_R14, "R14", m_secondary_r[UNSP20_R14]).formatstr("%04X");
- state_add(baseindex + UNSP20_R15, "R15", m_secondary_r[UNSP20_R15]).formatstr("%04X");
-
- save_item(NAME(m_secondary_r));
+ state_add(baseindex + UNSP20_R8, "R8", m_core->m_r[UNSP20_R8+8]).formatstr("%04X");
+ state_add(baseindex + UNSP20_R9, "R9", m_core->m_r[UNSP20_R9+8]).formatstr("%04X");
+ state_add(baseindex + UNSP20_R10, "R10", m_core->m_r[UNSP20_R10+8]).formatstr("%04X");
+ state_add(baseindex + UNSP20_R11, "R11", m_core->m_r[UNSP20_R11+8]).formatstr("%04X");
+ state_add(baseindex + UNSP20_R12, "R12", m_core->m_r[UNSP20_R12+8]).formatstr("%04X");
+ state_add(baseindex + UNSP20_R13, "R13", m_core->m_r[UNSP20_R13+8]).formatstr("%04X");
+ state_add(baseindex + UNSP20_R14, "R14", m_core->m_r[UNSP20_R14+8]).formatstr("%04X");
+ state_add(baseindex + UNSP20_R15, "R15", m_core->m_r[UNSP20_R15+8]).formatstr("%04X");
}
void unsp_device::device_reset()
{
- memset(m_core->m_r, 0, sizeof(uint32_t) * 8);
+ for (int i = 0; i < m_numregs; i++)
+ m_core->m_r[i] = 0;
m_core->m_r[REG_PC] = read16(0xfff7);
m_core->m_enable_irq = 0;
@@ -301,11 +311,6 @@ void unsp_device::device_reset()
void unsp_20_device::device_reset()
{
unsp_12_device::device_reset();
-
- for (int i = 0; i < 8; i++)
- {
- m_secondary_r[i] = 0;
- }
}
void unsp_device::device_stop()