parodius.c: convert to bankdev [Alex Jackson]

This commit is contained in:
Alex W. Jackson 2014-03-01 23:20:32 +00:00
parent 0b68bb860d
commit e06e426d2a
4 changed files with 67 additions and 90 deletions

View File

@ -550,6 +550,7 @@ static MACHINE_CONFIG_START( lethalen, lethal_state )
MCFG_DEVICE_PROGRAM_MAP(bank4800_map)
MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG)
MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8)
MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(15)
MCFG_ADDRESS_MAP_BANK_STRIDE(0x3800)
MCFG_EEPROM_SERIAL_ER5911_8BIT_ADD("eeprom")

View File

@ -25,57 +25,21 @@ INTERRUPT_GEN_MEMBER(parodius_state::parodius_interrupt)
device.execute().set_input_line(0, HOLD_LINE);
}
READ8_MEMBER(parodius_state::bankedram_r)
{
if (m_videobank & 0x01)
{
if (m_videobank & 0x04)
return m_generic_paletteram_8[offset + 0x0800];
else
return m_generic_paletteram_8[offset];
}
else
return m_ram[offset];
}
WRITE8_MEMBER(parodius_state::bankedram_w)
{
if (m_videobank & 0x01)
{
if (m_videobank & 0x04)
m_palette->write(space, offset + 0x0800, data);
else
m_palette->write(space, offset, data);
}
else
m_ram[offset] = data;
}
READ8_MEMBER(parodius_state::parodius_052109_053245_r)
{
if (m_videobank & 0x02)
return m_k053245->k053245_r(space, offset);
else
return m_k052109->read(space, offset);
}
WRITE8_MEMBER(parodius_state::parodius_052109_053245_w)
{
if (m_videobank & 0x02)
m_k053245->k053245_w(space, offset, data);
else
m_k052109->write(space, offset, data);
}
WRITE8_MEMBER(parodius_state::parodius_videobank_w)
{
if (m_videobank & 0xf8)
if (data & 0xf8)
logerror("%04x: videobank = %02x\n",space.device().safe_pc(),data);
/* bit 0 = select palette or work RAM at 0000-07ff */
/* bit 1 = select 052109 or 053245 at 2000-27ff */
/* bit 2 = select palette bank 0 or 1 */
m_videobank = data;
if (data & 1)
m_bank0000->set_bank(2 + ((data & 4) >> 2));
else
m_bank0000->set_bank(0);
m_bank2000->set_bank((data & 2) >> 1);
}
WRITE8_MEMBER(parodius_state::parodius_3fc0_w)
@ -104,7 +68,6 @@ WRITE8_MEMBER(parodius_state::parodius_sh_irqtrigger_w)
}
#if 0
void parodius_state::sound_nmi_callback( int param )
{
m_audiocpu->set_input_line(INPUT_LINE_NMI, ( m_nmi_enabled ) ? CLEAR_LINE : ASSERT_LINE );
@ -134,7 +97,7 @@ WRITE8_MEMBER(parodius_state::sound_arm_nmi_w)
/********************************************/
static ADDRESS_MAP_START( parodius_map, AS_PROGRAM, 8, parodius_state )
AM_RANGE(0x0000, 0x07ff) AM_READWRITE(bankedram_r, bankedram_w) AM_SHARE("ram")
AM_RANGE(0x0000, 0x07ff) AM_DEVICE("bank0000", address_map_bank_device, amap8)
AM_RANGE(0x0800, 0x1fff) AM_RAM
AM_RANGE(0x3f8c, 0x3f8c) AM_READ_PORT("P1")
AM_RANGE(0x3f8d, 0x3f8d) AM_READ_PORT("P2")
@ -147,10 +110,20 @@ static ADDRESS_MAP_START( parodius_map, AS_PROGRAM, 8, parodius_state )
AM_RANGE(0x3fc4, 0x3fc4) AM_WRITE(parodius_videobank_w)
AM_RANGE(0x3fc8, 0x3fc8) AM_WRITE(parodius_sh_irqtrigger_w)
AM_RANGE(0x3fcc, 0x3fcd) AM_READ(parodius_sound_r) AM_DEVWRITE("k053260", k053260_device, k053260_w) /* K053260 */
AM_RANGE(0x2000, 0x27ff) AM_READWRITE(parodius_052109_053245_r, parodius_052109_053245_w)
AM_RANGE(0x2000, 0x27ff) AM_DEVICE("bank2000", address_map_bank_device, amap8)
AM_RANGE(0x2000, 0x5fff) AM_DEVREADWRITE("k052109", k052109_device, read, write)
AM_RANGE(0x6000, 0x9fff) AM_ROMBANK("bank1") /* banked ROM */
AM_RANGE(0xa000, 0xffff) AM_ROM /* ROM */
AM_RANGE(0xa000, 0xffff) AM_ROM AM_REGION("maincpu", 0x3a000)
ADDRESS_MAP_END
static ADDRESS_MAP_START( bank0000_map, AS_PROGRAM, 8, parodius_state )
AM_RANGE(0x0000, 0x07ff) AM_RAM
AM_RANGE(0x1000, 0x1fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
ADDRESS_MAP_END
static ADDRESS_MAP_START( bank2000_map, AS_PROGRAM, 8, parodius_state )
AM_RANGE(0x0000, 0x07ff) AM_DEVREADWRITE("k052109", k052109_device, read, write)
AM_RANGE(0x0800, 0x0fff) AM_DEVREADWRITE("k053245", k05324x_device, k053245_r, k053245_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( parodius_sound_map, AS_PROGRAM, 8, parodius_state )
@ -244,15 +217,9 @@ static const k05324x_interface parodius_k05324x_intf =
void parodius_state::machine_start()
{
UINT8 *ROM = memregion("maincpu")->base();
membank("bank1")->configure_entries(0, 14, &ROM[0x10000], 0x4000);
membank("bank1")->configure_entries(14, 2, &ROM[0x08000], 0x4000);
membank("bank1")->configure_entries(0, 16, memregion("maincpu")->base(), 0x4000);
membank("bank1")->set_entry(0);
m_generic_paletteram_8.allocate(0x1000);
save_item(NAME(m_videobank));
save_item(NAME(m_sprite_colorbase));
save_item(NAME(m_layer_colorbase));
save_item(NAME(m_layerpri));
@ -271,7 +238,8 @@ void parodius_state::machine_reset()
}
m_sprite_colorbase = 0;
m_videobank = 0;
m_bank0000->set_bank(0);
m_bank2000->set_bank(0);
}
static MACHINE_CONFIG_START( parodius, parodius_state )
@ -285,6 +253,20 @@ static MACHINE_CONFIG_START( parodius, parodius_state )
MCFG_CPU_PROGRAM_MAP(parodius_sound_map)
/* NMIs are triggered by the 053260 */
MCFG_DEVICE_ADD("bank0000", ADDRESS_MAP_BANK, 0)
MCFG_DEVICE_PROGRAM_MAP(bank0000_map)
MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG)
MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8)
MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(13)
MCFG_ADDRESS_MAP_BANK_STRIDE(0x0800)
MCFG_DEVICE_ADD("bank2000", ADDRESS_MAP_BANK, 0)
MCFG_DEVICE_PROGRAM_MAP(bank2000_map)
MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG)
MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8)
MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(12)
MCFG_ADDRESS_MAP_BANK_STRIDE(0x0800)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
@ -325,19 +307,18 @@ MACHINE_CONFIG_END
***************************************************************************/
ROM_START( parodius )
ROM_REGION( 0x48000, "maincpu", 0 ) /* code + banked roms + palette RAM */
ROM_LOAD( "955l01.f5", 0x10000, 0x20000, CRC(49a658eb) SHA1(dd53060c4da99b8e1f896ebfec572296ef2b5665) )
ROM_LOAD( "955l02.h5", 0x30000, 0x18000, CRC(161d7322) SHA1(a752f28c19c58263680221ad1119f2fd57df4723) )
ROM_CONTINUE( 0x08000, 0x08000 )
ROM_REGION( 0x40000, "maincpu", 0 ) /* code + banked roms */
ROM_LOAD( "955l01.f5", 0x00000, 0x20000, CRC(49a658eb) SHA1(dd53060c4da99b8e1f896ebfec572296ef2b5665) )
ROM_LOAD( "955l02.h5", 0x20000, 0x20000, CRC(161d7322) SHA1(a752f28c19c58263680221ad1119f2fd57df4723) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for the sound CPU */
ROM_LOAD( "955e03.d14", 0x0000, 0x10000, CRC(940aa356) SHA1(e7466f049be48861fd2d929eed786bd48782b5bb) )
ROM_REGION( 0x100000, "gfx1", 0 ) /* graphics ( don't dispose as the program can read them, 0 ) */
ROM_REGION( 0x100000, "gfx1", 0 ) /* graphics */
ROM_LOAD( "955d07.k19", 0x000000, 0x080000, CRC(89473fec) SHA1(0da18c4b078c3a30233a6f5c2b90032168136f58) ) /* characters */
ROM_LOAD( "955d08.k24", 0x080000, 0x080000, CRC(43d5cda1) SHA1(2c51bad4857d1d31456c6dc1e7d41326ea35468b) ) /* characters */
ROM_REGION( 0x100000, "gfx2", 0 ) /* graphics ( don't dispose as the program can read them, 0 ) */
ROM_REGION( 0x100000, "gfx2", 0 ) /* graphics */
ROM_LOAD( "955d05.k13", 0x000000, 0x080000, CRC(7a1e55e0) SHA1(7a0e04ebde28d1e7b60aef3de926dc0e78662b1e) ) /* sprites */
ROM_LOAD( "955d06.k8", 0x080000, 0x080000, CRC(f4252875) SHA1(490f2e19b30cf8724e4b03b8d9f089c470ec13bd) ) /* sprites */
@ -346,19 +327,18 @@ ROM_START( parodius )
ROM_END
ROM_START( parodiuse ) /* Earlier version? */
ROM_REGION( 0x48000, "maincpu", 0 ) /* code + banked roms + palette RAM */
ROM_LOAD( "2.f5", 0x10000, 0x20000, CRC(26a6410b) SHA1(06de782f593ab0da6d65376b66e273d6410c6c56) )
ROM_LOAD( "3.h5", 0x30000, 0x18000, CRC(9410dbf2) SHA1(1c4d9317f83c33bace929a841ff4093d7178c428) )
ROM_CONTINUE( 0x08000, 0x08000 )
ROM_REGION( 0x40000, "maincpu", 0 ) /* code + banked roms */
ROM_LOAD( "2.f5", 0x00000, 0x20000, CRC(26a6410b) SHA1(06de782f593ab0da6d65376b66e273d6410c6c56) )
ROM_LOAD( "3.h5", 0x20000, 0x20000, CRC(9410dbf2) SHA1(1c4d9317f83c33bace929a841ff4093d7178c428) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for the sound CPU */
ROM_LOAD( "955e03.d14", 0x0000, 0x10000, CRC(940aa356) SHA1(e7466f049be48861fd2d929eed786bd48782b5bb) )
ROM_REGION( 0x100000, "gfx1", 0 ) /* graphics ( don't dispose as the program can read them, 0 ) */
ROM_REGION( 0x100000, "gfx1", 0 ) /* graphics */
ROM_LOAD( "955d07.k19", 0x000000, 0x080000, CRC(89473fec) SHA1(0da18c4b078c3a30233a6f5c2b90032168136f58) ) /* characters */
ROM_LOAD( "955d08.k24", 0x080000, 0x080000, CRC(43d5cda1) SHA1(2c51bad4857d1d31456c6dc1e7d41326ea35468b) ) /* characters */
ROM_REGION( 0x100000, "gfx2", 0 ) /* graphics ( don't dispose as the program can read them, 0 ) */
ROM_REGION( 0x100000, "gfx2", 0 ) /* graphics */
ROM_LOAD( "955d05.k13", 0x000000, 0x080000, CRC(7a1e55e0) SHA1(7a0e04ebde28d1e7b60aef3de926dc0e78662b1e) ) /* sprites */
ROM_LOAD( "955d06.k8", 0x080000, 0x080000, CRC(f4252875) SHA1(490f2e19b30cf8724e4b03b8d9f089c470ec13bd) ) /* sprites */
@ -367,19 +347,18 @@ ROM_START( parodiuse ) /* Earlier version? */
ROM_END
ROM_START( parodiusj )
ROM_REGION( 0x48000, "maincpu", 0 ) /* code + banked roms + palette RAM */
ROM_LOAD( "955e01.f5", 0x10000, 0x20000, CRC(49baa334) SHA1(8902fbb2228111b15de6537bd168241933df134d) )
ROM_LOAD( "955e02.h5", 0x30000, 0x18000, CRC(14010d6f) SHA1(69fe162ea08c3bd4b3e78e9d10d278bd15444af4) )
ROM_CONTINUE( 0x08000, 0x08000 )
ROM_REGION( 0x40000, "maincpu", 0 ) /* code + banked roms */
ROM_LOAD( "955e01.f5", 0x00000, 0x20000, CRC(49baa334) SHA1(8902fbb2228111b15de6537bd168241933df134d) )
ROM_LOAD( "955e02.h5", 0x20000, 0x20000, CRC(14010d6f) SHA1(69fe162ea08c3bd4b3e78e9d10d278bd15444af4) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for the sound CPU */
ROM_LOAD( "955e03.d14", 0x0000, 0x10000, CRC(940aa356) SHA1(e7466f049be48861fd2d929eed786bd48782b5bb) )
ROM_REGION( 0x100000, "gfx1", 0 ) /* graphics ( don't dispose as the program can read them, 0 ) */
ROM_REGION( 0x100000, "gfx1", 0 ) /* graphics */
ROM_LOAD( "955d07.k19", 0x000000, 0x080000, CRC(89473fec) SHA1(0da18c4b078c3a30233a6f5c2b90032168136f58) ) /* characters */
ROM_LOAD( "955d08.k24", 0x080000, 0x080000, CRC(43d5cda1) SHA1(2c51bad4857d1d31456c6dc1e7d41326ea35468b) ) /* characters */
ROM_REGION( 0x100000, "gfx2", 0 ) /* graphics ( don't dispose as the program can read them, 0 ) */
ROM_REGION( 0x100000, "gfx2", 0 ) /* graphics */
ROM_LOAD( "955d05.k13", 0x000000, 0x080000, CRC(7a1e55e0) SHA1(7a0e04ebde28d1e7b60aef3de926dc0e78662b1e) ) /* sprites */
ROM_LOAD( "955d06.k8", 0x080000, 0x080000, CRC(f4252875) SHA1(490f2e19b30cf8724e4b03b8d9f089c470ec13bd) ) /* sprites */
@ -388,19 +367,18 @@ ROM_START( parodiusj )
ROM_END
ROM_START( parodiusa )
ROM_REGION( 0x48000, "maincpu", 0 ) /* code + banked roms + palette RAM */
ROM_LOAD( "b-18.f5", 0x10000, 0x20000, CRC(006356cd) SHA1(795011233059472c841c30831442a71579dff2b9) )
ROM_LOAD( "b-19.h5", 0x30000, 0x18000, CRC(e5a16417) SHA1(a49567817fd4948e33913fab66106b8e16100b6a) )
ROM_CONTINUE( 0x08000, 0x08000 )
ROM_REGION( 0x40000, "maincpu", 0 ) /* code + banked roms */
ROM_LOAD( "b-18.f5", 0x00000, 0x20000, CRC(006356cd) SHA1(795011233059472c841c30831442a71579dff2b9) )
ROM_LOAD( "b-19.h5", 0x20000, 0x20000, CRC(e5a16417) SHA1(a49567817fd4948e33913fab66106b8e16100b6a) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for the sound CPU */
ROM_LOAD( "955e03.d14", 0x0000, 0x10000, CRC(940aa356) SHA1(e7466f049be48861fd2d929eed786bd48782b5bb) ) /* Labeled as D-20 */
ROM_REGION( 0x100000, "gfx1", 0 ) /* graphics ( don't dispose as the program can read them, 0 ) */
ROM_REGION( 0x100000, "gfx1", 0 ) /* graphics */
ROM_LOAD( "955d07.k19", 0x000000, 0x080000, CRC(89473fec) SHA1(0da18c4b078c3a30233a6f5c2b90032168136f58) ) /* characters */
ROM_LOAD( "955d08.k24", 0x080000, 0x080000, CRC(43d5cda1) SHA1(2c51bad4857d1d31456c6dc1e7d41326ea35468b) ) /* characters */
ROM_REGION( 0x100000, "gfx2", 0 ) /* graphics ( don't dispose as the program can read them, 0 ) */
ROM_REGION( 0x100000, "gfx2", 0 ) /* graphics */
ROM_LOAD( "955d05.k13", 0x000000, 0x080000, CRC(7a1e55e0) SHA1(7a0e04ebde28d1e7b60aef3de926dc0e78662b1e) ) /* sprites */
ROM_LOAD( "955d06.k8", 0x080000, 0x080000, CRC(f4252875) SHA1(490f2e19b30cf8724e4b03b8d9f089c470ec13bd) ) /* sprites */

View File

@ -345,12 +345,14 @@ static MACHINE_CONFIG_START( simpsons, simpsons_state )
MCFG_DEVICE_PROGRAM_MAP(bank0000_map)
MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG)
MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8)
MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(13)
MCFG_ADDRESS_MAP_BANK_STRIDE(0x1000)
MCFG_DEVICE_ADD("bank2000", ADDRESS_MAP_BANK, 0)
MCFG_DEVICE_PROGRAM_MAP(bank2000_map)
MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG)
MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8)
MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(14)
MCFG_ADDRESS_MAP_BANK_STRIDE(0x2000)
MCFG_EEPROM_SERIAL_ER5911_8BIT_ADD("eeprom")

View File

@ -3,6 +3,8 @@
Parodius
*************************************************************************/
#include "machine/bankdev.h"
#include "sound/k053260.h"
#include "video/k053244_k053245.h"
#include "video/k052109.h"
@ -19,38 +21,32 @@ public:
parodius_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_ram(*this, "ram"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_bank0000(*this, "bank0000"),
m_bank2000(*this, "bank2000"),
m_k053260(*this, "k053260"),
m_k052109(*this, "k052109"),
m_k053245(*this, "k053245"),
m_k053251(*this, "k053251") { }
/* memory pointers */
required_shared_ptr<UINT8> m_ram;
// UINT8 * m_paletteram; // currently this uses generic palette handling
/* video-related */
int m_layer_colorbase[3];
int m_sprite_colorbase;
int m_layerpri[3];
/* misc */
int m_videobank;
//int m_nmi_enabled;
/* devices */
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<address_map_bank_device> m_bank0000;
required_device<address_map_bank_device> m_bank2000;
required_device<k053260_device> m_k053260;
required_device<k052109_device> m_k052109;
required_device<k05324x_device> m_k053245;
required_device<k053251_device> m_k053251;
DECLARE_READ8_MEMBER(bankedram_r);
DECLARE_WRITE8_MEMBER(bankedram_w);
DECLARE_READ8_MEMBER(parodius_052109_053245_r);
DECLARE_WRITE8_MEMBER(parodius_052109_053245_w);
DECLARE_WRITE8_MEMBER(parodius_videobank_w);
DECLARE_WRITE8_MEMBER(parodius_3fc0_w);
DECLARE_WRITE8_MEMBER(parodius_sh_irqtrigger_w);