diff --git a/src/mame/drivers/4roses.cpp b/src/mame/drivers/4roses.cpp index c78616f59b5..0d78c02d030 100644 --- a/src/mame/drivers/4roses.cpp +++ b/src/mame/drivers/4roses.cpp @@ -200,9 +200,11 @@ public: void _4roses(machine_config &config); void rugby(machine_config &config); private: + DECLARE_READ8_MEMBER(_4roses_opcode_r); DECLARE_READ8_MEMBER(rugby_opcode_r); void _4roses_map(address_map &map); + void _4roses_opcodes_map(address_map &map); void rugby_map(address_map &map); void rugby_opcodes_map(address_map &map); @@ -232,6 +234,22 @@ void _4roses_state::_4roses_map(address_map &map) map(0x6000, 0xffff).rom().region("maincpu", 0x6000); } +READ8_MEMBER(_4roses_state::_4roses_opcode_r) +{ + uint8_t data = m_maincpu->space(AS_PROGRAM).read_byte(offset); + if ((offset & 0x7c00) == 0x6400) + data = bitswap<8>(data ^ 0x3f, 3, 4, 2, 5, 1, 6, 0, 7); + else if ((offset & 0x7c00) == 0x6000) + data = bitswap<8>(data ^ 0x68, 4, 3, 2, 1, 0, 7, 6, 5); + return data; +} + +void _4roses_state::_4roses_opcodes_map(address_map &map) +{ + map(0x0000, 0x7fff).r(this, FUNC(_4roses_state::_4roses_opcode_r)); + map(0x8000, 0xffff).rom().region("maincpu", 0x8000); +} + void _4roses_state::rugby_map(address_map &map) { map(0x0000, 0x07ff).ram(); // AM_SHARE("nvram") @@ -402,6 +420,7 @@ MACHINE_CONFIG_START(_4roses_state::_4roses) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M65C02, MASTER_CLOCK/8) /* 2MHz, guess */ MCFG_CPU_PROGRAM_MAP(_4roses_map) + MCFG_CPU_OPCODES_MAP(_4roses_opcodes_map) // MCFG_NVRAM_ADD_0FILL("nvram")