diff --git a/src/emu/cpu/m6502/m4510.c b/src/emu/cpu/m6502/m4510.c index 65c59280b29..2a7eb10ee1e 100644 --- a/src/emu/cpu/m6502/m4510.c +++ b/src/emu/cpu/m6502/m4510.c @@ -95,12 +95,12 @@ m4510_device::mi_4510_nd::mi_4510_nd(m4510_device *_base) : mi_4510_normal(_base UINT8 m4510_device::mi_4510_nd::read_sync(UINT16 adr) { - return program->read_byte(base->map(adr)); + return sprogram->read_byte(base->map(adr)); } UINT8 m4510_device::mi_4510_nd::read_arg(UINT16 adr) { - return sprogram->read_byte(base->map(adr)); + return program->read_byte(base->map(adr)); } #include "cpu/m6502/m4510.inc" diff --git a/src/mame/drivers/mitchell.c b/src/mame/drivers/mitchell.c index aac45ebe430..432166aa12c 100644 --- a/src/mame/drivers/mitchell.c +++ b/src/mame/drivers/mitchell.c @@ -278,12 +278,13 @@ static ADDRESS_MAP_START( mitchell_map, AS_PROGRAM, 8, mitchell_state ) AM_RANGE(0xc000, 0xc7ff) AM_READWRITE(pang_paletteram_r,pang_paletteram_w) /* Banked palette RAM */ AM_RANGE(0xc800, 0xcfff) AM_READWRITE(pang_colorram_r,pang_colorram_w) AM_SHARE("colorram") /* Attribute RAM */ AM_RANGE(0xd000, 0xdfff) AM_READWRITE(pang_videoram_r,pang_videoram_w) AM_SHARE("videoram")/* Banked char / OBJ RAM */ - AM_RANGE(0xe000, 0xffff) AM_RAM /* Work RAM */ + AM_RANGE(0xe000, 0xffff) AM_RAM AM_SHARE("ram") /* Work RAM */ ADDRESS_MAP_END static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, mitchell_state ) AM_RANGE(0x0000, 0x7fff) AM_ROMBANK("bank0d") AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1d") + AM_RANGE(0xe000, 0xffff) AM_RAM AM_SHARE("ram") /* Work RAM */ ADDRESS_MAP_END static ADDRESS_MAP_START( mitchell_io_map, AS_IO, 8, mitchell_state ) diff --git a/src/mame/drivers/suna8.c b/src/mame/drivers/suna8.c index 2761d97955b..6c587027dae 100644 --- a/src/mame/drivers/suna8.c +++ b/src/mame/drivers/suna8.c @@ -73,16 +73,15 @@ DRIVER_INIT_MEMBER(suna8_state,hardhead) rom[i] = BITSWAP8(rom[i], 7,6,5,3,4,2,1,0) ^ 0x58; } - membank("bank0d")->set_base(memregion("maincpu")->base()); - membank("bank1")->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000); - membank("bank1d")->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000); + m_bank0d->set_base(memregion("maincpu")->base()); + m_bank1->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000); } /* Non encrypted bootleg */ DRIVER_INIT_MEMBER(suna8_state,hardhedb) { - membank("bank0d")->set_base(memregion("maincpu")->base() + 0x48000); - membank("bank1")->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000); + m_bank0d->set_base(memregion("maincpu")->base() + 0x48000); + m_bank1->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000); } /*************************************************************************** @@ -138,13 +137,13 @@ DRIVER_INIT_MEMBER(suna8_state, brickzn_common) m_decrypt = brickzn_decrypt(); // Non-banked opcodes - membank("bank0d")->set_base(m_decrypt); + m_bank0d->set_base(m_decrypt); // Data banks: 00-0f normal data decryption, 10-1f alternate data decryption: - membank("bank1")->configure_entries(0, 16*2, memregion("maincpu")->base() + 0x10000, 0x4000); + m_bank1->configure_entries(0, 16*2, memregion("maincpu")->base() + 0x10000, 0x4000); // Opcode banks: 00-1f normal opcode decryption: - membank("bank1d")->configure_entries(0, 16, m_decrypt + 0x10000, 0x4000); - membank("bank1d")->configure_entries(16, 16, m_decrypt + 0x10000, 0x4000); + m_bank1d->configure_entries(0, 16, m_decrypt + 0x10000, 0x4000); + m_bank1d->configure_entries(16, 16, m_decrypt + 0x10000, 0x4000); } DRIVER_INIT_MEMBER(suna8_state,brickzn) @@ -203,14 +202,7 @@ DRIVER_INIT_MEMBER(suna8_state,brickznv4) DRIVER_INIT_MEMBER(suna8_state,brickzn11) { - // No encryption - UINT8 *decrypt = memregion("maincpu")->base(); - - // Data banks: 00-0f normal data decryption, 10-1f alternate data decryption: - membank("bank1")->configure_entries(0, 16*2, memregion("maincpu")->base() + 0x10000, 0x4000); - // Opcode banks: 00-1f normal opcode decryption: - membank("bank1d")->configure_entries(0, 16, decrypt + 0x10000, 0x4000); - membank("bank1d")->configure_entries(16, 16, decrypt + 0x10000, 0x4000); + m_bank1->configure_entries(0, 16*2, memregion("maincpu")->base() + 0x10000, 0x4000); } @@ -226,7 +218,7 @@ DRIVER_INIT_MEMBER(suna8_state,hardhea2) UINT8 x; int i; - membank("bank0d")->set_base(decrypt); + m_bank0d->set_base(decrypt); /* Address lines scrambling */ memcpy(decrypt, RAM, size); @@ -295,7 +287,7 @@ rom13: 0?, 1y, 2n, 3n ?,?,?,? (palettes) RAM[i] = BITSWAP8(RAM[i], 5,6,7,4,3,2,1,0) ^ 0x41; } - membank("bank1")->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000); + m_bank1->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000); membank("bank2")->configure_entries(0, 2, auto_alloc_array(machine(), UINT8, 0x2000 * 2), 0x2000); } @@ -312,7 +304,7 @@ DRIVER_INIT_MEMBER(suna8_state,starfigh) UINT8 x; int i; - membank("bank0d")->set_base(decrypt); + m_bank0d->set_base(decrypt); /* Address lines scrambling */ memcpy(decrypt, RAM, size); @@ -381,7 +373,7 @@ DRIVER_INIT_MEMBER(suna8_state,starfigh) decrypt[0x2696] = 0xc9; // work ram writes disable, corrupt next routine decrypt[0x4e9a] = 0x00; // work ram writes disable, flip background sprite - membank("bank1")->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000); + m_bank1->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000); } @@ -397,7 +389,7 @@ DRIVER_INIT_MEMBER(suna8_state,sparkman) UINT8 x; int i; - membank("bank0d")->set_base(decrypt); + m_bank0d->set_base(decrypt); /* Address lines scrambling */ memcpy(decrypt, RAM, size); @@ -464,7 +456,7 @@ DRIVER_INIT_MEMBER(suna8_state,sparkman) decrypt[0x1ac4] = 0x00; decrypt[0x1ac5] = 0x00; - membank("bank1")->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000); + m_bank1->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000); } /*************************************************************************** @@ -535,8 +527,7 @@ WRITE8_MEMBER(suna8_state::hardhead_bankswitch_w) int bank = data & 0x0f; if (data & ~0xef) logerror("CPU #0 - PC %04X: unknown bank bits: %02X\n",space.device().safe_pc(),data); - membank("bank1")->set_entry(bank); - membank("bank1d")->set_entry(bank); + m_bank1->set_entry(bank); } @@ -569,11 +560,6 @@ static ADDRESS_MAP_START( hardhead_map, AS_PROGRAM, 8, suna8_state ) AM_RANGE(0xe000, 0xffff) AM_RAM_WRITE(suna8_spriteram_w) AM_SHARE("spriteram") // Sprites ADDRESS_MAP_END -static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, suna8_state ) - AM_RANGE(0x0000, 0x7fff) AM_ROMBANK("bank0d") - AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1d") -ADDRESS_MAP_END - static ADDRESS_MAP_START( hardhead_io_map, AS_IO, 8, suna8_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x00, 0x00) AM_READNOP // ? IRQ Ack @@ -597,8 +583,7 @@ WRITE8_MEMBER(suna8_state::rranger_bankswitch_w) if (data & ~0xf7) logerror("CPU #0 - PC %04X: unknown bank bits: %02X\n",space.device().safe_pc(),data); - membank("bank1")->set_entry(bank); - membank("bank1d")->set_entry(bank); + m_bank1->set_entry(bank); flip_screen_set(data & 0x20); coin_lockout_w ( machine(), 0, data & 0x40); @@ -697,8 +682,9 @@ WRITE8_MEMBER(suna8_state::brickzn_rombank_w) if (data & ~0x0f) logerror("CPU #0 - PC %04X: unknown rom bank bits: %02X\n",space.device().safe_pc(),data); - membank("bank1")->set_entry(bank + (membank("bank1")->entry() & 0x10)); - membank("bank1d")->set_entry(membank("bank1")->entry()); + m_bank1->set_entry(bank + (m_bank1->entry() & 0x10)); + if(m_bank1d) + m_bank1d->set_entry(m_bank1->entry()); m_rombank = data; } @@ -816,11 +802,11 @@ WRITE8_MEMBER(suna8_state::brickzn_multi_w) if (m_prot_opcode_toggle == 0) { - membank("bank0d")->set_base(m_decrypt); + m_bank0d->set_base(m_decrypt); } else { - membank("bank0d")->set_base(memregion("maincpu")->base()); + m_bank0d->set_base(memregion("maincpu")->base()); } } } @@ -840,8 +826,9 @@ WRITE8_MEMBER(suna8_state::brickzn_prot2_w) m_remap_sound = ((m_prot2 ^ data) == 0xf8) ? 1 : 0; // Select alternate data decryption, see code at 787e: - membank("bank1")->set_entry((membank("bank1")->entry() & 0x0f) + ((m_prot2 == (data | 0xdc)) ? 0x10 : 0)); - membank("bank1d")->set_entry(membank("bank1")->entry()); + m_bank1->set_entry((m_bank1->entry() & 0x0f) + ((m_prot2 == (data | 0xdc)) ? 0x10 : 0)); + if(m_bank1d) + m_bank1d->set_entry(m_bank1->entry()); m_prot2_prev = m_prot2; m_prot2 = data; @@ -888,6 +875,11 @@ static ADDRESS_MAP_START( brickzn_map, AS_PROGRAM, 8, suna8_state ) AM_RANGE(0xe000, 0xffff) AM_READWRITE(suna8_banked_spriteram_r, suna8_banked_spriteram_w) // Sprites (Banked) ADDRESS_MAP_END +static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, suna8_state ) + AM_RANGE(0x0000, 0x7fff) AM_ROMBANK("bank0d") + AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1d") +ADDRESS_MAP_END + static ADDRESS_MAP_START( brickzn_io_map, AS_IO, 8, suna8_state ) AM_RANGE(0x0000, 0x0000) AM_WRITE(brickzn_disab_palram_w ) // Disable Palette RAM AM_RANGE(0x00a1, 0x00a1) AM_WRITE(brickzn_enab_palram_w ) // Enable Palette RAM @@ -943,8 +935,7 @@ WRITE8_MEMBER(suna8_state::hardhea2_rombank_w) if (data & ~0x0f) logerror("CPU #0 - PC %04X: unknown rom bank bits: %02X\n",space.device().safe_pc(),data); - membank("bank1")->set_entry(bank); - membank("bank1d")->set_entry(bank); + m_bank1->set_entry(bank); m_rombank = data; } @@ -1083,8 +1074,7 @@ WRITE8_MEMBER(suna8_state::starfigh_leds_w) int bank = m_rombank_latch & 0x0f; - membank("bank1")->set_entry(bank); - membank("bank1d")->set_entry(bank); + m_bank1->set_entry(bank); m_rombank = m_rombank_latch; logerror("CPU #0 - PC %04X: rom bank = %02X\n",space.device().safe_pc(), m_rombank); @@ -1197,8 +1187,7 @@ WRITE8_MEMBER(suna8_state::sparkman_rombank_w) int bank = m_rombank_latch & 0x0f; - membank("bank1")->set_entry(bank); - membank("bank1d")->set_entry(bank); + m_bank1->set_entry(bank); m_rombank = m_rombank_latch; logerror("CPU #0 - PC %04X: rom bank = %02X\n",space.device().safe_pc(), m_rombank); @@ -1929,7 +1918,7 @@ static MACHINE_CONFIG_START( rranger, suna8_state ) MCFG_CPU_ADD("maincpu", Z80, SUNA8_MASTER_CLOCK / 4) /* ? */ MCFG_CPU_PROGRAM_MAP(rranger_map) MCFG_CPU_IO_MAP(rranger_io_map) - MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map) +// MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", suna8_state, irq0_line_hold) /* IRQ & NMI ! */ MCFG_CPU_ADD("audiocpu", Z80, SUNA8_MASTER_CLOCK / 8) /* verified on pcb */ @@ -1981,8 +1970,9 @@ MACHINE_RESET_MEMBER(suna8_state,brickzn) m_protection_val = m_prot2 = m_prot2_prev = 0xff; m_paletteram_enab = 1; // for brickzn11 m_remap_sound = 0; - membank("bank1")->set_entry(0); - membank("bank1d")->set_entry(0); + m_bank1->set_entry(0); + if(m_bank1d) + m_bank1d->set_entry(0); } static MACHINE_CONFIG_START( brickzn11, suna8_state ) @@ -1990,7 +1980,6 @@ static MACHINE_CONFIG_START( brickzn11, suna8_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, SUNA8_MASTER_CLOCK / 4) /* SUNA PROTECTION BLOCK */ MCFG_CPU_PROGRAM_MAP(brickzn11_map) - MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", suna8_state, irq0_line_hold) // nmi breaks ramtest but is needed! MCFG_CPU_ADD("audiocpu", Z80, SUNA8_MASTER_CLOCK / 4) /* Z0840006PSC - 6MHz (measured) */ @@ -2045,6 +2034,7 @@ static MACHINE_CONFIG_DERIVED( brickzn, brickzn11 ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(brickzn_map) MCFG_CPU_IO_MAP(brickzn_io_map) + MCFG_CPU_DECRYPTED_OPCODES_MAP(decrypted_opcodes_map) MACHINE_CONFIG_END @@ -2928,7 +2918,7 @@ ROM_END DRIVER_INIT_MEMBER(suna8_state,suna8) { - membank("bank1")->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000); + m_bank1->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000); } GAME( 1988, sranger, 0, rranger, rranger, suna8_state, suna8, ROT0, "SunA", "Super Ranger (v2.0)", 0 ) diff --git a/src/mame/includes/suna8.h b/src/mame/includes/suna8.h index 8b57fd158e3..379250fae09 100644 --- a/src/mame/includes/suna8.h +++ b/src/mame/includes/suna8.h @@ -19,7 +19,9 @@ public: m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), - + m_bank0d(*this, "bank0d"), + m_bank1(*this, "bank1"), + m_bank1d(*this, "bank1d"), m_prot_opcode_toggle(0), m_remap_sound(0) { } @@ -34,6 +36,9 @@ public: required_device m_gfxdecode; required_device m_screen; required_device m_palette; + optional_memory_bank m_bank0d; + required_memory_bank m_bank1; + optional_memory_bank m_bank1d; UINT8 m_rombank; UINT8 m_rombank_latch;