diff options
Diffstat (limited to 'src/devices/cpu/ks0164/ks0164.cpp')
-rw-r--r-- | src/devices/cpu/ks0164/ks0164.cpp | 78 |
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; } |