konami cpu: set EXG/TFR reg A high byte to 0x10

This commit is contained in:
hap 2025-04-03 19:10:07 +02:00
parent b1c09f02b4
commit 950b396e53
2 changed files with 4 additions and 12 deletions

View File

@ -442,7 +442,7 @@ inline void hd6309_device::bittest_set(bool result)
inline uint16_t hd6309_device::read_exgtfr_register(uint8_t reg)
{
uint16_t result;
uint16_t result = 0;
switch(reg & 0x0F)
{
@ -462,8 +462,6 @@ inline uint16_t hd6309_device::read_exgtfr_register(uint8_t reg)
case 13: result = 0; break; // 0
case 14: result = ((uint16_t) m_q.r.e) << 8 | m_q.r.e; break; // E
case 15: result = ((uint16_t) m_q.r.f) << 8 | m_q.r.f; break; // F
default:
fatalerror("Should not reach here");
}
return result;
@ -495,8 +493,6 @@ inline void hd6309_device::write_exgtfr_register(uint8_t reg, uint16_t value)
case 13: break; // 0
case 14: m_q.r.e = (uint8_t) (value >> 8); break; // E
case 15: m_q.r.f = (uint8_t) (value >> 0); break; // F
default:
fatalerror("Should not reach here");
}
}
@ -601,8 +597,6 @@ void hd6309_device::register_register_op()
case 13: if (promote) set_regop16(m_temp); else set_regop8(m_temp.b.l); break; // 0
case 14: if (promote) set_regop16(m_q.p.w); else set_regop8(m_q.r.e); break; // E
case 15: if (promote) set_regop16(m_q.p.w); else set_regop8(m_q.r.f); break; // F
default:
fatalerror("Should not reach here");
}
// set source
@ -624,8 +618,6 @@ void hd6309_device::register_register_op()
case 13: m_addressing_mode = ADDRESSING_MODE_ZERO; break; // 0
case 14: m_addressing_mode = promote ? ADDRESSING_MODE_REGISTER_W : ADDRESSING_MODE_REGISTER_E; break; // E
case 15: m_addressing_mode = promote ? ADDRESSING_MODE_REGISTER_W : ADDRESSING_MODE_REGISTER_F; break; // F
default:
fatalerror("Should not reach here");
}
// eat a single CPU cycle

View File

@ -206,12 +206,12 @@ inline uint16_t &konami_cpu_device::ireg()
inline uint16_t konami_cpu_device::read_exgtfr_register(uint8_t reg)
{
uint16_t result = 0x00FF;
uint16_t result = 0;
switch(reg & 0x07)
{
case 0: result = m_q.r.a; break; // A
case 1: result = m_q.r.d; break; // D
case 0: result = m_q.r.a | 0x1000; break; // A (high byte is always 0x10)
case 1: result = m_q.r.d; break; // D!
case 2: result = m_x.w; break; // X
case 3: result = m_y.w; break; // Y
case 4: logerror("EXG/TFR unemulated DP reg\n"); break; // DP