mirror of
https://github.com/holub/mame
synced 2025-04-23 08:49:55 +03:00
Merge branch 'master' of https://github.com/mamedev/mame
This commit is contained in:
commit
e5cd96af89
@ -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"
|
||||
|
@ -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 )
|
||||
|
@ -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 )
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user