mirror of
https://github.com/holub/mame
synced 2025-07-03 00:56:03 +03:00
Bad cpu bug (nw)
This commit is contained in:
parent
d82a8abff9
commit
89d4403dcb
@ -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);
|
||||
|
@ -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));
|
||||
|
@ -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();
|
||||
|
Loading…
Reference in New Issue
Block a user