mame/src/devices/cpu/v60/am3.hxx
AJR bbb9aba9a3 v60: Code cleanup
- Remove #ifdefs and use attributes instead
- Remove "never reached" return statements
2021-12-01 17:46:55 -05:00

877 lines
23 KiB
C++

// license:BSD-3-Clause
// copyright-holders:Farfetch'd, R. Belmont
// AM3 Functions (for ReadAM)
// **************************
uint32_t v60_device::am3Register()
{
switch (m_moddim)
{
case 0:
SETREG8(m_reg[m_modval & 0x1F], m_modwritevalb);
break;
case 1:
SETREG16(m_reg[m_modval & 0x1F], m_modwritevalh);
break;
case 2:
m_reg[m_modval & 0x1F] = m_modwritevalw;
break;
}
return 1;
}
uint32_t v60_device::am3RegisterIndirect()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_reg[m_modval & 0x1F], m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_reg[m_modval & 0x1F], m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_reg[m_modval & 0x1F], m_modwritevalw);
break;
}
return 1;
}
uint32_t v60_device::am3RegisterIndirectIndexed()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_reg[m_modval2 & 0x1F] + m_reg[m_modval & 0x1F], m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_reg[m_modval2 & 0x1F] + m_reg[m_modval & 0x1F] * 2, m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_reg[m_modval2 & 0x1F] + m_reg[m_modval & 0x1F] * 4, m_modwritevalw);
break;
}
return 2;
}
uint32_t v60_device::am3Autoincrement()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_reg[m_modval & 0x1F], m_modwritevalb);
m_reg[m_modval & 0x1F] += 1;
break;
case 1:
m_program->write_word_unaligned(m_reg[m_modval & 0x1F], m_modwritevalh);
m_reg[m_modval & 0x1F] += 2;
break;
case 2:
m_program->write_dword_unaligned(m_reg[m_modval & 0x1F], m_modwritevalw);
m_reg[m_modval & 0x1F] += 4;
break;
}
return 1;
}
uint32_t v60_device::am3Autodecrement()
{
switch (m_moddim)
{
case 0:
m_reg[m_modval & 0x1F] -= 1;
m_program->write_byte(m_reg[m_modval & 0x1F], m_modwritevalb);
break;
case 1:
m_reg[m_modval & 0x1F] -= 2;
m_program->write_word_unaligned(m_reg[m_modval & 0x1F], m_modwritevalh);
break;
case 2:
m_reg[m_modval & 0x1F] -= 4;
m_program->write_dword_unaligned(m_reg[m_modval & 0x1F], m_modwritevalw);
break;
}
return 1;
}
uint32_t v60_device::am3Displacement8()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_reg[m_modval & 0x1F] + (int8_t)OpRead8(m_modadd + 1), m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_reg[m_modval & 0x1F] + (int8_t)OpRead8(m_modadd + 1), m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_reg[m_modval & 0x1F] + (int8_t)OpRead8(m_modadd + 1), m_modwritevalw);
break;
}
return 2;
}
uint32_t v60_device::am3Displacement16()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_reg[m_modval & 0x1F] + (int16_t)OpRead16(m_modadd + 1), m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_reg[m_modval & 0x1F] + (int16_t)OpRead16(m_modadd + 1), m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_reg[m_modval & 0x1F] + (int16_t)OpRead16(m_modadd + 1), m_modwritevalw);
break;
}
return 3;
}
uint32_t v60_device::am3Displacement32()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_reg[m_modval & 0x1F] + OpRead32(m_modadd + 1), m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_reg[m_modval & 0x1F] + OpRead32(m_modadd + 1), m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_reg[m_modval & 0x1F] + OpRead32(m_modadd + 1), m_modwritevalw);
break;
}
return 5;
}
uint32_t v60_device::am3DisplacementIndexed8()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_reg[m_modval2 & 0x1F] + (int8_t)OpRead8(m_modadd + 2) + m_reg[m_modval & 0x1F], m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_reg[m_modval2 & 0x1F] + (int8_t)OpRead8(m_modadd + 2) + m_reg[m_modval & 0x1F] * 2, m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_reg[m_modval2 & 0x1F] + (int8_t)OpRead8(m_modadd + 2) + m_reg[m_modval & 0x1F] * 4, m_modwritevalw);
break;
}
return 3;
}
uint32_t v60_device::am3DisplacementIndexed16()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_reg[m_modval2 & 0x1F] + (int16_t)OpRead16(m_modadd + 2) + m_reg[m_modval & 0x1F], m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_reg[m_modval2 & 0x1F] + (int16_t)OpRead16(m_modadd + 2) + m_reg[m_modval & 0x1F] * 2, m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_reg[m_modval2 & 0x1F] + (int16_t)OpRead16(m_modadd + 2) + m_reg[m_modval & 0x1F] * 4, m_modwritevalw);
break;
}
return 4;
}
uint32_t v60_device::am3DisplacementIndexed32()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_reg[m_modval2 & 0x1F] + OpRead32(m_modadd + 2) + m_reg[m_modval & 0x1F], m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_reg[m_modval2 & 0x1F] + OpRead32(m_modadd + 2) + m_reg[m_modval & 0x1F] * 2, m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_reg[m_modval2 & 0x1F] + OpRead32(m_modadd + 2) + m_reg[m_modval & 0x1F] * 4, m_modwritevalw);
break;
}
return 6;
}
uint32_t v60_device::am3PCDisplacement8()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(PC + (int8_t)OpRead8(m_modadd + 1), m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(PC + (int8_t)OpRead8(m_modadd + 1), m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(PC + (int8_t)OpRead8(m_modadd + 1), m_modwritevalw);
break;
}
return 2;
}
uint32_t v60_device::am3PCDisplacement16()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(PC + (int16_t)OpRead16(m_modadd + 1), m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(PC + (int16_t)OpRead16(m_modadd + 1), m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(PC + (int16_t)OpRead16(m_modadd + 1), m_modwritevalw);
break;
}
return 3;
}
uint32_t v60_device::am3PCDisplacement32()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(PC + OpRead32(m_modadd + 1), m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(PC + OpRead32(m_modadd + 1), m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(PC + OpRead32(m_modadd + 1), m_modwritevalw);
break;
}
return 5;
}
uint32_t v60_device::am3PCDisplacementIndexed8()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(PC + (int8_t)OpRead8(m_modadd + 2) + m_reg[m_modval & 0x1F], m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(PC + (int8_t)OpRead8(m_modadd + 2) + m_reg[m_modval & 0x1F] * 2, m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(PC + (int8_t)OpRead8(m_modadd + 2) + m_reg[m_modval & 0x1F] * 4, m_modwritevalw);
break;
}
return 3;
}
uint32_t v60_device::am3PCDisplacementIndexed16()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(PC + (int16_t)OpRead16(m_modadd + 2) + m_reg[m_modval & 0x1F], m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(PC + (int16_t)OpRead16(m_modadd + 2) + m_reg[m_modval & 0x1F] * 2, m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(PC + (int16_t)OpRead16(m_modadd + 2) + m_reg[m_modval & 0x1F] * 4, m_modwritevalw);
break;
}
return 4;
}
uint32_t v60_device::am3PCDisplacementIndexed32()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(PC + OpRead32(m_modadd + 2) + m_reg[m_modval & 0x1F], m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(PC + OpRead32(m_modadd + 2) + m_reg[m_modval & 0x1F] * 2, m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(PC + OpRead32(m_modadd + 2) + m_reg[m_modval & 0x1F] * 4, m_modwritevalw);
break;
}
return 6;
}
uint32_t v60_device::am3DisplacementIndirect8()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_program->read_dword_unaligned(m_reg[m_modval & 0x1F] + (int8_t)OpRead8(m_modadd + 1)), m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_program->read_dword_unaligned(m_reg[m_modval & 0x1F] + (int8_t)OpRead8(m_modadd + 1)), m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_program->read_dword_unaligned(m_reg[m_modval & 0x1F] + (int8_t)OpRead8(m_modadd + 1)), m_modwritevalw);
break;
}
return 2;
}
uint32_t v60_device::am3DisplacementIndirect16()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_program->read_dword_unaligned(m_reg[m_modval & 0x1F] + (int16_t)OpRead16(m_modadd + 1)), m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_program->read_dword_unaligned(m_reg[m_modval & 0x1F] + (int16_t)OpRead16(m_modadd + 1)), m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_program->read_dword_unaligned(m_reg[m_modval & 0x1F] + (int16_t)OpRead16(m_modadd + 1)), m_modwritevalw);
break;
}
return 3;
}
uint32_t v60_device::am3DisplacementIndirect32()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_program->read_dword_unaligned(m_reg[m_modval & 0x1F] + OpRead32(m_modadd + 1)), m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_program->read_dword_unaligned(m_reg[m_modval & 0x1F] + OpRead32(m_modadd + 1)), m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_program->read_dword_unaligned(m_reg[m_modval & 0x1F] + OpRead32(m_modadd + 1)), m_modwritevalw);
break;
}
return 5;
}
uint32_t v60_device::am3DisplacementIndirectIndexed8()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_program->read_dword_unaligned(m_reg[m_modval2 & 0x1F] + (int8_t)OpRead8(m_modadd + 2)) + m_reg[m_modval & 0x1F], m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_program->read_dword_unaligned(m_reg[m_modval2 & 0x1F] + (int8_t)OpRead8(m_modadd + 2)) + m_reg[m_modval & 0x1F] * 2, m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_program->read_dword_unaligned(m_reg[m_modval2 & 0x1F] + (int8_t)OpRead8(m_modadd + 2)) + m_reg[m_modval & 0x1F] * 4, m_modwritevalw);
break;
}
return 3;
}
uint32_t v60_device::am3DisplacementIndirectIndexed16()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_program->read_dword_unaligned(m_reg[m_modval2 & 0x1F] + (int16_t)OpRead16(m_modadd + 2)) + m_reg[m_modval & 0x1F], m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_program->read_dword_unaligned(m_reg[m_modval2 & 0x1F] + (int16_t)OpRead16(m_modadd + 2)) + m_reg[m_modval & 0x1F] * 2, m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_program->read_dword_unaligned(m_reg[m_modval2 & 0x1F] + (int16_t)OpRead16(m_modadd + 2)) + m_reg[m_modval & 0x1F] * 4, m_modwritevalw);
break;
}
return 4;
}
uint32_t v60_device::am3DisplacementIndirectIndexed32()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_program->read_dword_unaligned(m_reg[m_modval2 & 0x1F] + OpRead32(m_modadd + 2)) + m_reg[m_modval & 0x1F], m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_program->read_dword_unaligned(m_reg[m_modval2 & 0x1F] + OpRead32(m_modadd + 2)) + m_reg[m_modval & 0x1F] * 2, m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_program->read_dword_unaligned(m_reg[m_modval2 & 0x1F] + OpRead32(m_modadd + 2)) + m_reg[m_modval & 0x1F] * 4, m_modwritevalw);
break;
}
return 6;
}
uint32_t v60_device::am3PCDisplacementIndirect8()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_program->read_dword_unaligned(PC + (int8_t)OpRead8(m_modadd + 1)), m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_program->read_dword_unaligned(PC + (int8_t)OpRead8(m_modadd + 1)), m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_program->read_dword_unaligned(PC + (int8_t)OpRead8(m_modadd + 1)), m_modwritevalw);
break;
}
return 2;
}
uint32_t v60_device::am3PCDisplacementIndirect16()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_program->read_dword_unaligned(PC + (int16_t)OpRead16(m_modadd + 1)), m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_program->read_dword_unaligned(PC + (int16_t)OpRead16(m_modadd + 1)), m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_program->read_dword_unaligned(PC + (int16_t)OpRead16(m_modadd + 1)), m_modwritevalw);
break;
}
return 3;
}
uint32_t v60_device::am3PCDisplacementIndirect32()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_program->read_dword_unaligned(PC + OpRead32(m_modadd + 1)), m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_program->read_dword_unaligned(PC + OpRead32(m_modadd + 1)), m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_program->read_dword_unaligned(PC + OpRead32(m_modadd + 1)), m_modwritevalw);
break;
}
return 5;
}
uint32_t v60_device::am3PCDisplacementIndirectIndexed8()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_program->read_dword_unaligned(PC + (int8_t)OpRead8(m_modadd + 2)) + m_reg[m_modval & 0x1F], m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_program->read_dword_unaligned(PC + (int8_t)OpRead8(m_modadd + 2)) + m_reg[m_modval & 0x1F] * 2, m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_program->read_dword_unaligned(PC + (int8_t)OpRead8(m_modadd + 2)) + m_reg[m_modval & 0x1F] * 4, m_modwritevalw);
break;
}
return 3;
}
uint32_t v60_device::am3PCDisplacementIndirectIndexed16()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_program->read_dword_unaligned(PC + (int16_t)OpRead16(m_modadd + 2)) + m_reg[m_modval & 0x1F], m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_program->read_dword_unaligned(PC + (int16_t)OpRead16(m_modadd + 2)) + m_reg[m_modval & 0x1F] * 2, m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_program->read_dword_unaligned(PC + (int16_t)OpRead16(m_modadd + 2)) + m_reg[m_modval & 0x1F] * 4, m_modwritevalw);
break;
}
return 4;
}
uint32_t v60_device::am3PCDisplacementIndirectIndexed32()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_program->read_dword_unaligned(PC + OpRead32(m_modadd + 2)) + m_reg[m_modval & 0x1F], m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_program->read_dword_unaligned(PC + OpRead32(m_modadd + 2)) + m_reg[m_modval & 0x1F] * 2, m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_program->read_dword_unaligned(PC + OpRead32(m_modadd + 2)) + m_reg[m_modval & 0x1F] * 4, m_modwritevalw);
break;
}
return 6;
}
uint32_t v60_device::am3DoubleDisplacement8()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_program->read_dword_unaligned(m_reg[m_modval & 0x1F] + (int8_t)OpRead8(m_modadd + 1)) + (int8_t)OpRead8(m_modadd + 2), m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_program->read_dword_unaligned(m_reg[m_modval & 0x1F] + (int8_t)OpRead8(m_modadd + 1)) + (int8_t)OpRead8(m_modadd + 2), m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_program->read_dword_unaligned(m_reg[m_modval & 0x1F] + (int8_t)OpRead8(m_modadd + 1)) + (int8_t)OpRead8(m_modadd + 2), m_modwritevalw);
break;
}
return 3;
}
uint32_t v60_device::am3DoubleDisplacement16()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_program->read_dword_unaligned(m_reg[m_modval & 0x1F] + (int16_t)OpRead16(m_modadd + 1)) + (int16_t)OpRead16(m_modadd + 3), m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_program->read_dword_unaligned(m_reg[m_modval & 0x1F] + (int16_t)OpRead16(m_modadd + 1)) + (int16_t)OpRead16(m_modadd + 3), m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_program->read_dword_unaligned(m_reg[m_modval & 0x1F] + (int16_t)OpRead16(m_modadd + 1)) + (int16_t)OpRead16(m_modadd + 3), m_modwritevalw);
break;
}
return 5;
}
uint32_t v60_device::am3DoubleDisplacement32()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_program->read_dword_unaligned(m_reg[m_modval & 0x1F] + OpRead32(m_modadd + 1)) + OpRead32(m_modadd + 5), m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_program->read_dword_unaligned(m_reg[m_modval & 0x1F] + OpRead32(m_modadd + 1)) + OpRead32(m_modadd + 5), m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_program->read_dword_unaligned(m_reg[m_modval & 0x1F] + OpRead32(m_modadd + 1)) + OpRead32(m_modadd + 5), m_modwritevalw);
break;
}
return 9;
}
uint32_t v60_device::am3PCDoubleDisplacement8()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_program->read_dword_unaligned(PC + (int8_t)OpRead8(m_modadd + 1)) + (int8_t)OpRead8(m_modadd + 2), m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_program->read_dword_unaligned(PC + (int8_t)OpRead8(m_modadd + 1)) + (int8_t)OpRead8(m_modadd + 2), m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_program->read_dword_unaligned(PC + (int8_t)OpRead8(m_modadd + 1)) + (int8_t)OpRead8(m_modadd + 2), m_modwritevalw);
break;
}
return 3;
}
uint32_t v60_device::am3PCDoubleDisplacement16()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_program->read_dword_unaligned(PC + (int16_t)OpRead16(m_modadd + 1)) + (int16_t)OpRead16(m_modadd + 3), m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_program->read_dword_unaligned(PC + (int16_t)OpRead16(m_modadd + 1)) + (int16_t)OpRead16(m_modadd + 3), m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_program->read_dword_unaligned(PC + (int16_t)OpRead16(m_modadd + 1)) + (int16_t)OpRead16(m_modadd + 3), m_modwritevalw);
break;
}
return 5;
}
uint32_t v60_device::am3PCDoubleDisplacement32()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_program->read_dword_unaligned(PC + OpRead32(m_modadd + 1)) + OpRead32(m_modadd + 5), m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_program->read_dword_unaligned(PC + OpRead32(m_modadd + 1)) + OpRead32(m_modadd + 5), m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_program->read_dword_unaligned(PC + OpRead32(m_modadd + 1)) + OpRead32(m_modadd + 5), m_modwritevalw);
break;
}
return 9;
}
uint32_t v60_device::am3DirectAddress()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(OpRead32(m_modadd + 1), m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(OpRead32(m_modadd + 1), m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(OpRead32(m_modadd + 1), m_modwritevalw);
break;
}
return 5;
}
uint32_t v60_device::am3DirectAddressIndexed()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(OpRead32(m_modadd + 2) + m_reg[m_modval & 0x1F], m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(OpRead32(m_modadd + 2) + m_reg[m_modval & 0x1F] * 2, m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(OpRead32(m_modadd + 2) + m_reg[m_modval & 0x1F] * 4, m_modwritevalw);
break;
}
return 6;
}
uint32_t v60_device::am3DirectAddressDeferred()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_program->read_dword_unaligned(OpRead32(m_modadd + 1)), m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_program->read_dword_unaligned(OpRead32(m_modadd + 1)), m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_program->read_dword_unaligned(OpRead32(m_modadd + 1)), m_modwritevalw);
break;
}
return 5;
}
uint32_t v60_device::am3DirectAddressDeferredIndexed()
{
switch (m_moddim)
{
case 0:
m_program->write_byte(m_program->read_dword_unaligned(OpRead32(m_modadd + 2)) + m_reg[m_modval & 0x1F], m_modwritevalb);
break;
case 1:
m_program->write_word_unaligned(m_program->read_dword_unaligned(OpRead32(m_modadd + 2)) + m_reg[m_modval & 0x1F], m_modwritevalh);
break;
case 2:
m_program->write_dword_unaligned(m_program->read_dword_unaligned(OpRead32(m_modadd + 2)) + m_reg[m_modval & 0x1F], m_modwritevalw);
break;
}
return 6;
}
uint32_t v60_device::am3Immediate()
{
fatalerror("CPU - AM3 - IMM (PC=%06x)\n", PC);
}
uint32_t v60_device::am3ImmediateQuick()
{
fatalerror("CPU - AM3 - IMMQ (PC=%06x)\n", PC);
}
// AM3 Tables (for ReadAMAddress)
// ******************************
uint32_t v60_device::am3Error1()
{
fatalerror("CPU - AM3 - 1 (PC=%06x)\n", PC);
}
uint32_t v60_device::am3Error2()
{
fatalerror("CPU - AM3 - 2 (PC=%06x)\n", PC);
}
uint32_t v60_device::am3Error3()
{
fatalerror("CPU - AM3 - 3 (PC=%06x)\n", PC);
}
uint32_t v60_device::am3Error4()
{
fatalerror("CPU - AM3 - 4 (PC=%06x)\n", PC);
}
uint32_t v60_device::am3Error5()
{
fatalerror("CPU - AM3 - 5 (PC=%06x)\n", PC);
}
const v60_device::am_func v60_device::s_AMTable3_G7a[16] =
{
&v60_device::am3PCDisplacementIndexed8,
&v60_device::am3PCDisplacementIndexed16,
&v60_device::am3PCDisplacementIndexed32,
&v60_device::am3DirectAddressIndexed,
&v60_device::am3Error5,
&v60_device::am3Error5,
&v60_device::am3Error5,
&v60_device::am3Error5,
&v60_device::am3PCDisplacementIndirectIndexed8,
&v60_device::am3PCDisplacementIndirectIndexed16,
&v60_device::am3PCDisplacementIndirectIndexed32,
&v60_device::am3DirectAddressDeferredIndexed,
&v60_device::am3Error5,
&v60_device::am3Error5,
&v60_device::am3Error5,
&v60_device::am3Error5
};
uint32_t v60_device::am3Group7a()
{
if (!(m_modval2 & 0x10))
return am3Error4();
return (this->*s_AMTable3_G7a[m_modval2 & 0xF])();
}
const v60_device::am_func v60_device::s_AMTable3_G7[32] =
{
&v60_device::am3ImmediateQuick,
&v60_device::am3ImmediateQuick,
&v60_device::am3ImmediateQuick,
&v60_device::am3ImmediateQuick,
&v60_device::am3ImmediateQuick,
&v60_device::am3ImmediateQuick,
&v60_device::am3ImmediateQuick,
&v60_device::am3ImmediateQuick,
&v60_device::am3ImmediateQuick,
&v60_device::am3ImmediateQuick,
&v60_device::am3ImmediateQuick,
&v60_device::am3ImmediateQuick,
&v60_device::am3ImmediateQuick,
&v60_device::am3ImmediateQuick,
&v60_device::am3ImmediateQuick,
&v60_device::am3ImmediateQuick,
&v60_device::am3PCDisplacement8,
&v60_device::am3PCDisplacement16,
&v60_device::am3PCDisplacement32,
&v60_device::am3DirectAddress,
&v60_device::am3Immediate,
&v60_device::am3Error2,
&v60_device::am3Error2,
&v60_device::am3Error2,
&v60_device::am3PCDisplacementIndirect8,
&v60_device::am3PCDisplacementIndirect16,
&v60_device::am3PCDisplacementIndirect32,
&v60_device::am3DirectAddressDeferred,
&v60_device::am3PCDoubleDisplacement8,
&v60_device::am3PCDoubleDisplacement16,
&v60_device::am3PCDoubleDisplacement32,
&v60_device::am3Error2
};
const v60_device::am_func v60_device::s_AMTable3_G6[8] =
{
&v60_device::am3DisplacementIndexed8,
&v60_device::am3DisplacementIndexed16,
&v60_device::am3DisplacementIndexed32,
&v60_device::am3RegisterIndirectIndexed,
&v60_device::am3DisplacementIndirectIndexed8,
&v60_device::am3DisplacementIndirectIndexed16,
&v60_device::am3DisplacementIndirectIndexed32,
&v60_device::am3Group7a
};
uint32_t v60_device::am3Group6()
{
m_modval2 = OpRead8(m_modadd + 1);
return (this->*s_AMTable3_G6[m_modval2 >> 5])();
}
uint32_t v60_device::am3Group7()
{
return (this->*s_AMTable3_G7[m_modval & 0x1F])();
}
const v60_device::am_func v60_device::s_AMTable3[2][8] =
{
{
&v60_device::am3Displacement8,
&v60_device::am3Displacement16,
&v60_device::am3Displacement32,
&v60_device::am3RegisterIndirect,
&v60_device::am3DisplacementIndirect8,
&v60_device::am3DisplacementIndirect16,
&v60_device::am3DisplacementIndirect32,
&v60_device::am3Group7
},
{
&v60_device::am3DoubleDisplacement8,
&v60_device::am3DoubleDisplacement16,
&v60_device::am3DoubleDisplacement32,
&v60_device::am3Register,
&v60_device::am3Autoincrement,
&v60_device::am3Autodecrement,
&v60_device::am3Group6,
&v60_device::am3Error1
}
};