This commit is contained in:
angelosa 2015-06-24 19:56:17 +02:00
commit e5cd96af89
4 changed files with 49 additions and 53 deletions

View File

@ -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"

View File

@ -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 )

View File

@ -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 )

View File

@ -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<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_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;