diff --git a/src/devices/cpu/ks0164/ks0164.cpp b/src/devices/cpu/ks0164/ks0164.cpp index de36d230dfc..966d037d1a9 100644 --- a/src/devices/cpu/ks0164/ks0164.cpp +++ b/src/devices/cpu/ks0164/ks0164.cpp @@ -287,7 +287,7 @@ void ks0164_cpu_device::execute_run() // ALU functions with other register // 10ff frrr Ssss w100 u16 rv = m_r[(opcode >> 4) & 7]; - u16 v = opcode & 0x0004 ? rv : opcode & 0x0080 ? s8(rv) : u8(rv); + u16 v = opcode & 0x0008 ? rv : opcode & 0x0080 ? s8(rv) : u8(rv); do_alu(opcode, v); break; @@ -298,7 +298,7 @@ void ks0164_cpu_device::execute_run() // 10ff frrr S... w101 u16 rv = m_program_cache->read_word(m_r[R_PC]); m_r[R_PC] += 2; - u16 v = opcode & 0x0004 ? rv : opcode & 0x0080 ? s8(rv) : u8(rv); + u16 v = opcode & 0x0008 ? rv : opcode & 0x0080 ? s8(rv) : u8(rv); do_alu(opcode, v); break; @@ -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 & 0x0004 ? 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); @@ -320,7 +320,7 @@ void ks0164_cpu_device::execute_run() // 10ff frrr Ssss w111 u16 a = m_r[(opcode >> 4) & 7] + m_program_cache->read_word(m_r[R_PC]); m_r[R_PC] += 2; - u16 v = opcode & 0x0004 ? 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); diff --git a/src/devices/sound/ks0164.cpp b/src/devices/sound/ks0164.cpp index a7877338ba1..56e116c5c21 100644 --- a/src/devices/sound/ks0164.cpp +++ b/src/devices/sound/ks0164.cpp @@ -63,6 +63,8 @@ void ks0164_device::device_reset() memset(m_sregs, 0, sizeof(m_sregs)); m_unk60 = 0; m_voice_select = 0; + m_irqen_76 = 0; + m_irqen_77 = 0; } u16 ks0164_device::vec_r(offs_t offset, u16 mem_mask) @@ -128,6 +130,28 @@ void ks0164_device::voice_w(offs_t offset, u16 data, u16 mem_mask) logerror("voice %02x.%02x = %04x (%04x)\n", m_voice_select & 0x1f, offset, m_sregs[m_voice_select & 0x1f][offset], m_cpu->pc()); } +u8 ks0164_device::irqen_76_r() +{ + return m_irqen_76; +} + +void ks0164_device::irqen_76_w(u8 data) +{ + m_irqen_76 = data; + logerror("irqen_76 = %02x (%04x)\n", m_irqen_76, m_cpu->pc()); +} + +u8 ks0164_device::irqen_77_r() +{ + return m_irqen_77; +} + +void ks0164_device::irqen_77_w(u8 data) +{ + m_irqen_77 = data; + logerror("irqen_77 = %02x (%04x)\n", m_irqen_77, m_cpu->pc()); +} + u8 ks0164_device::unk60_r() { return m_unk60; @@ -160,6 +184,9 @@ void ks0164_device::cpu_map(address_map &map) map(0x0062, 0x0063).rw(FUNC(ks0164_device::bank1_select_r), FUNC(ks0164_device::bank1_select_w)); map(0x0064, 0x0065).rw(FUNC(ks0164_device::bank2_select_r), FUNC(ks0164_device::bank2_select_w)); + map(0x0076, 0x0076).rw(FUNC(ks0164_device::irqen_76_r), FUNC(ks0164_device::irqen_76_w)); + map(0x0077, 0x0077).rw(FUNC(ks0164_device::irqen_77_r), FUNC(ks0164_device::irqen_77_w)); + map(0x0080, 0x3fff).r(FUNC(ks0164_device::rom_r)); map(0x4000, 0x7fff).rw(FUNC(ks0164_device::bank1_r), FUNC(ks0164_device::bank1_w)); map(0x8000, 0xbfff).rw(FUNC(ks0164_device::bank2_r), FUNC(ks0164_device::bank2_w)); diff --git a/src/devices/sound/ks0164.h b/src/devices/sound/ks0164.h index 399a0e8f39a..a1367df125e 100644 --- a/src/devices/sound/ks0164.h +++ b/src/devices/sound/ks0164.h @@ -41,6 +41,7 @@ private: u8 m_unk60; u8 m_voice_select; + u8 m_irqen_76, m_irqen_77; void cpu_map(address_map &map); @@ -55,6 +56,10 @@ private: u16 bank2_select_r(); void bank2_select_w(offs_t, u16 data, u16 mem_mask); + u8 irqen_76_r(); + void irqen_76_w(u8 data); + u8 irqen_77_r(); + void irqen_77_w(u8 data); u8 unk60_r(); void unk60_w(u8 data); u8 voice_select_r();