summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/ks0164/ks0164.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/ks0164/ks0164.cpp')
-rw-r--r--src/devices/cpu/ks0164/ks0164.cpp78
1 files changed, 39 insertions, 39 deletions
diff --git a/src/devices/cpu/ks0164/ks0164.cpp b/src/devices/cpu/ks0164/ks0164.cpp
index d7601831a0d..8bb447993a4 100644
--- a/src/devices/cpu/ks0164/ks0164.cpp
+++ b/src/devices/cpu/ks0164/ks0164.cpp
@@ -23,8 +23,8 @@ ks0164_cpu_device::ks0164_cpu_device(const machine_config &mconfig, const char *
void ks0164_cpu_device::device_start()
{
- m_program = &space(AS_PROGRAM);
- m_program_cache = m_program->cache<1, 0, ENDIANNESS_BIG>();
+ space(AS_PROGRAM).cache(m_program_cache);
+ space(AS_PROGRAM).specific(m_program);
state_add(STATE_GENPC, "GENPC", m_r[R_PC]).callexport().noshow();
state_add(STATE_GENPCBASE, "CURPC", m_r[R_PC]).callexport().noshow();
@@ -115,15 +115,15 @@ void ks0164_cpu_device::handle_irq()
// Normal irq (not reset), save pc and psw
if(m_r[R_PSW] & F_I)
return;
- m_program->write_word(m_r[R_SP] - 2, m_r[R_PC]);
- m_program->write_word(m_r[R_SP] - 4, m_r[R_PSW]);
+ m_program.write_word(m_r[R_SP] - 2, m_r[R_PC]);
+ m_program.write_word(m_r[R_SP] - 4, m_r[R_PSW]);
m_r[R_SP] -= 4;
m_icount -= 2;
} else
m_irq &= 0xfffe;
m_r[R_PSW] = (m_r[R_PSW] & 0xfff0) | (index ? index - 1 : 0);
- m_r[R_PC] = m_program_cache->read_word(index*2);
+ m_r[R_PC] = m_program_cache.read_word(index*2);
m_icount --;
if(index)
standard_irq_callback(0);
@@ -238,7 +238,7 @@ void ks0164_cpu_device::execute_run()
if(m_irq)
handle_irq();
debugger_instruction_hook(m_r[R_PC]);
- u16 opcode = m_program_cache->read_word(m_r[R_PC]);
+ u16 opcode = m_program_cache.read_word(m_r[R_PC]);
m_r[R_PC] += 2;
// First switch level on bits 15-14 and 2-0
@@ -296,7 +296,7 @@ void ks0164_cpu_device::execute_run()
case 0x15: {
// ALU functions with immediate
// 10ff frrr S... w101
- u16 rv = m_program_cache->read_word(m_r[R_PC]);
+ u16 rv = m_program_cache.read_word(m_r[R_PC]);
m_r[R_PC] += 2;
u16 v = opcode & 0x0008 ? rv : opcode & 0x0080 ? s8(rv) : u8(rv);
@@ -308,7 +308,7 @@ void ks0164_cpu_device::execute_run()
// ALU functions from memory indexed
// 10ff frrr Ssss w110
u16 a = m_r[(opcode >> 4) & 7];
- u16 v = opcode & 0x0008 ? m_program->read_word(a) : opcode & 0x0080 ? s8(m_program->read_byte(a)) : u8(m_program->read_byte(a));
+ u16 v = opcode & 0x0008 ? m_program.read_word(a) : opcode & 0x0080 ? s8(m_program.read_byte(a)) : u8(m_program.read_byte(a));
m_icount -= 2;
do_alu(opcode, v);
@@ -318,9 +318,9 @@ void ks0164_cpu_device::execute_run()
case 0x17: {
// ALU functions from memory indexed and offset
// 10ff frrr Ssss w111
- u16 a = m_r[(opcode >> 4) & 7] + m_program_cache->read_word(m_r[R_PC]);
+ u16 a = m_r[(opcode >> 4) & 7] + m_program_cache.read_word(m_r[R_PC]);
m_r[R_PC] += 2;
- u16 v = opcode & 0x0008 ? m_program->read_word(a) : opcode & 0x0080 ? s8(m_program->read_byte(a)) : u8(m_program->read_byte(a));
+ u16 v = opcode & 0x0008 ? m_program.read_word(a) : opcode & 0x0080 ? s8(m_program.read_byte(a)) : u8(m_program.read_byte(a));
m_icount -= 2;
do_alu(opcode, v);
@@ -336,8 +336,8 @@ void ks0164_cpu_device::execute_run()
int r1 = (opcode >> 8) & 7;
int r2 = (opcode >> 4) & 7;
switch(bitswap<3>(opcode, 11, 7, 3)) {
- case 1: m_program->write_word(m_r[r1], m_r[r2]); m_r[r1] += 2; break;
- case 4: m_r[r1] -= 2; m_program->write_word(m_r[r1], m_r[r2]); break;
+ case 1: m_program.write_word(m_r[r1], m_r[r2]); m_r[r1] += 2; break;
+ case 4: m_r[r1] -= 2; m_program.write_word(m_r[r1], m_r[r2]); break;
default: unk(opcode); break;
}
m_icount --;
@@ -348,7 +348,7 @@ void ks0164_cpu_device::execute_run()
// Min/max with immediate
// 1101 Mrrr Ssss 1000
u16 v1 = m_r[(opcode >> 4) & 7];
- u16 v2 = m_program_cache->read_word(m_r[R_PC]);
+ u16 v2 = m_program_cache.read_word(m_r[R_PC]);
m_r[R_PC] += 2;
u16 res;
switch(bitswap<2>(opcode, 11, 7)) {
@@ -385,10 +385,10 @@ void ks0164_cpu_device::execute_run()
// Push all registers
// 1100 .... .... .001
- m_program->write_word(m_r[R_SP] - 2, m_r[0]);
- m_program->write_word(m_r[R_SP] - 4, m_r[1]);
- m_program->write_word(m_r[R_SP] - 6, m_r[2]);
- m_program->write_word(m_r[R_SP] - 8, m_r[3]);
+ m_program.write_word(m_r[R_SP] - 2, m_r[0]);
+ m_program.write_word(m_r[R_SP] - 4, m_r[1]);
+ m_program.write_word(m_r[R_SP] - 6, m_r[2]);
+ m_program.write_word(m_r[R_SP] - 8, m_r[3]);
m_r[R_SP] -= 8;
break;
}
@@ -396,7 +396,7 @@ void ks0164_cpu_device::execute_run()
case 1: {
// Absolute jump
// 1101 .... .... .001
- m_r[R_PC] = m_program->read_word(m_r[R_PC]);
+ m_r[R_PC] = m_program.read_word(m_r[R_PC]);
break;
}
@@ -429,7 +429,7 @@ void ks0164_cpu_device::execute_run()
int r1 = (opcode >> 8) & 7;
int r2 = (opcode >> 4) & 7;
switch(bitswap<3>(opcode, 11, 7, 3)) {
- case 1: m_r[r1] = m_program->read_word(m_r[r2]); m_r[r2] += 2; break;
+ case 1: m_r[r1] = m_program.read_word(m_r[r2]); m_r[r2] += 2; break;
default: unk(opcode); break;
}
m_icount --;
@@ -440,8 +440,8 @@ void ks0164_cpu_device::execute_run()
// Absolute subroutine call
// 1101 .... .... .010
- u16 a = m_program->read_word(m_r[R_PC]);
- m_program->write_word(m_r[R_SP] - 2, m_r[R_PC] + 2);
+ u16 a = m_program.read_word(m_r[R_PC]);
+ m_program.write_word(m_r[R_SP] - 2, m_r[R_PC] + 2);
m_r[R_SP] -= 2;
m_r[R_PC] = a;
m_icount -= 2;
@@ -453,7 +453,7 @@ void ks0164_cpu_device::execute_run()
// 1110 .rrr bbbb w010
u16 a = m_r[(opcode >> 8) & 7];
- u16 v = opcode & 0x0008 ? m_program->read_word(a) : m_program->read_byte(a);
+ u16 v = opcode & 0x0008 ? m_program.read_word(a) : m_program.read_byte(a);
if(v & (1 << ((opcode >> 4) & 0xf)))
m_r[R_PSW] &= ~F_Z;
else
@@ -476,10 +476,10 @@ void ks0164_cpu_device::execute_run()
// Push all registers
// 1100 .... .... .011
- m_r[0] = m_program->read_word(m_r[R_SP] + 6);
- m_r[1] = m_program->read_word(m_r[R_SP] + 4);
- m_r[2] = m_program->read_word(m_r[R_SP] + 2);
- m_r[3] = m_program->read_word(m_r[R_SP] + 0);
+ m_r[0] = m_program.read_word(m_r[R_SP] + 6);
+ m_r[1] = m_program.read_word(m_r[R_SP] + 4);
+ m_r[2] = m_program.read_word(m_r[R_SP] + 2);
+ m_r[3] = m_program.read_word(m_r[R_SP] + 0);
m_r[R_SP] += 8;
break;
}
@@ -488,7 +488,7 @@ void ks0164_cpu_device::execute_run()
// Return from subroutine
// 1101 .... .... .011
- m_r[R_PC] = m_program->read_word(m_r[R_SP]);
+ m_r[R_PC] = m_program.read_word(m_r[R_SP]);
m_r[R_SP] += 2;
m_icount --;
break;
@@ -498,9 +498,9 @@ void ks0164_cpu_device::execute_run()
// Bit test from memory indexed and offset
// 1110 .rrr bbbb w011
- u16 a = m_r[(opcode >> 8) & 7] + m_program_cache->read_word(m_r[R_PC]);
+ u16 a = m_r[(opcode >> 8) & 7] + m_program_cache.read_word(m_r[R_PC]);
m_r[R_PC] += 2;
- u16 v = opcode & 0x0008 ? m_program->read_word(a) : m_program->read_byte(a);
+ u16 v = opcode & 0x0008 ? m_program.read_word(a) : m_program.read_byte(a);
if(v & (1 << ((opcode >> 4) & 0xf)))
m_r[R_PSW] &= ~F_Z;
else
@@ -552,8 +552,8 @@ void ks0164_cpu_device::execute_run()
// Return from interrupt
// 1101 .... .... .100
- m_r[R_PSW] = m_program->read_word(m_r[R_SP] + 0);
- m_r[R_PC] = m_program->read_word(m_r[R_SP] + 2);
+ m_r[R_PSW] = m_program.read_word(m_r[R_SP] + 0);
+ m_r[R_PC] = m_program.read_word(m_r[R_SP] + 2);
m_r[R_SP] += 4;
m_icount -= 2;
break;
@@ -573,7 +573,7 @@ void ks0164_cpu_device::execute_run()
case 3: {
// Decrement and branch
int r = (opcode >> 8) & 7;
- u16 a = m_program_cache->read_word(m_r[R_PC]);
+ u16 a = m_program_cache.read_word(m_r[R_PC]);
m_r[R_PC] += 2;
m_r[r] --;
@@ -638,8 +638,8 @@ void ks0164_cpu_device::execute_run()
// Compare with immediate and branch if equal
// 1111 .rrr .... .101
- u16 v = m_program_cache->read_word(m_r[R_PC]);
- u16 a = m_program_cache->read_word(m_r[R_PC] + 2);
+ u16 v = m_program_cache.read_word(m_r[R_PC]);
+ u16 a = m_program_cache.read_word(m_r[R_PC] + 2);
m_r[R_PC] += 4;
do_alu((opcode & 0x07ff) | 0x1000, v);
@@ -668,9 +668,9 @@ void ks0164_cpu_device::execute_run()
// 1110 .rrr .sss w110
u16 a = m_r[(opcode >> 8) & 7];
if(opcode & 0x0008)
- m_program->write_word(a, m_r[(opcode >> 4) & 7]);
+ m_program.write_word(a, m_r[(opcode >> 4) & 7]);
else
- m_program->write_byte(a, m_r[(opcode >> 4) & 7]);
+ m_program.write_byte(a, m_r[(opcode >> 4) & 7]);
break;
}
@@ -721,12 +721,12 @@ void ks0164_cpu_device::execute_run()
case 2: {
// Write memory indexed and offset
// 1110 .rrr .sss w111
- u16 a = m_r[(opcode >> 8) & 7] + m_program_cache->read_word(m_r[R_PC]);
+ u16 a = m_r[(opcode >> 8) & 7] + m_program_cache.read_word(m_r[R_PC]);
m_r[R_PC] += 2;
if(opcode & 0x0008)
- m_program->write_word(a, m_r[(opcode >> 4) & 7]);
+ m_program.write_word(a, m_r[(opcode >> 4) & 7]);
else
- m_program->write_byte(a, m_r[(opcode >> 4) & 7]);
+ m_program.write_byte(a, m_r[(opcode >> 4) & 7]);
break;
}