diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mame/drivers/vendetta.cpp | 96 | ||||
-rw-r--r-- | src/mame/includes/vendetta.h | 16 |
2 files changed, 50 insertions, 62 deletions
diff --git a/src/mame/drivers/vendetta.cpp b/src/mame/drivers/vendetta.cpp index 228ce7af46a..da15f8789c8 100644 --- a/src/mame/drivers/vendetta.cpp +++ b/src/mame/drivers/vendetta.cpp @@ -24,7 +24,7 @@ ***** NOTES ***** ------- - 1) ESCAPE KIDS uses 053246's unknown function. (see video/konamiic.c) + 1) ESCAPE KIDS uses 053246's unknown function. (see video/k053246_k053247_k055673.cpp) (053246 register #5 UnKnown Bit #5, #3, #2 always set "1") @@ -35,8 +35,8 @@ 2) "xxxx: read from unknown 052109 address yyyy" 3) "xxxx: write zz to unknown 052109 address yyyy" - These are video/konamiic.c's message. - "video/konamiic.c" checks 052109 RAM area access. + These are video/k052109.cpp's message. + "video/k052109.cpp" checks 052109 RAM area access. If accessed over 0x1800 (0x3800), logged 2) or 3) messages. Escape Kids use 0x1800-0x19ff and 0x3800-0x39ff area. @@ -125,7 +125,8 @@ WRITE8_MEMBER(vendetta_state::eeprom_w) m_irq_enabled = (data >> 6) & 1; - vendetta_video_banking(data & 1); + m_videobank0->set_bank(BIT(data, 0)); + m_videobank1->set_bank(BIT(data, 0)); } /********************************************/ @@ -147,24 +148,6 @@ WRITE8_MEMBER(vendetta_state::K052109_w) } -void vendetta_state::vendetta_video_banking( int select ) -{ - address_space &space = m_maincpu->space(AS_PROGRAM); - - if (select & 1) - { - space.install_read_bank(m_video_banking_base + 0x2000, m_video_banking_base + 0x2fff, "bank4" ); - space.install_write_handler(m_video_banking_base + 0x2000, m_video_banking_base + 0x2fff, write8_delegate(FUNC(palette_device::write), m_palette.target()) ); - space.install_readwrite_handler(m_video_banking_base + 0x0000, m_video_banking_base + 0x0fff, read8_delegate(FUNC(k053247_device::k053247_r), (k053247_device*)m_k053246), write8_delegate(FUNC(k053247_device::k053247_w), (k053247_device*)m_k053246) ); - membank("bank4")->set_base(&m_paletteram[0]); - } - else - { - space.install_readwrite_handler(m_video_banking_base + 0x2000, m_video_banking_base + 0x2fff, read8_delegate(FUNC(vendetta_state::K052109_r),this), write8_delegate(FUNC(vendetta_state::K052109_w),this) ); - space.install_readwrite_handler(m_video_banking_base + 0x0000, m_video_banking_base + 0x0fff, read8_delegate(FUNC(k052109_device::read), (k052109_device*)m_k052109), write8_delegate(FUNC(k052109_device::write), (k052109_device*)m_k052109)); - } -} - WRITE8_MEMBER(vendetta_state::_5fe0_w) { /* bit 0,1 coin counters */ @@ -233,8 +216,8 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, vendetta_state ) AM_RANGE(0x5fe8, 0x5fe9) AM_DEVREAD("k053246", k053247_device, k053246_r) AM_RANGE(0x5fea, 0x5fea) AM_DEVREAD("watchdog", watchdog_timer_device, reset_r) /* what is the desired effect of overlapping these memory regions anyway? */ - AM_RANGE(0x4000, 0x4fff) AM_RAMBANK("bank3") - AM_RANGE(0x6000, 0x6fff) AM_RAMBANK("bank2") + AM_RANGE(0x4000, 0x4fff) AM_DEVICE("videobank0", address_map_bank_device, amap8) + AM_RANGE(0x6000, 0x6fff) AM_DEVICE("videobank1", address_map_bank_device, amap8) AM_RANGE(0x4000, 0x7fff) AM_DEVREADWRITE("k052109", k052109_device, read, write) AM_RANGE(0x8000, 0xffff) AM_ROM AM_REGION("maincpu", 0x38000) ADDRESS_MAP_END @@ -257,13 +240,22 @@ static ADDRESS_MAP_START( esckids_map, AS_PROGRAM, 8, vendetta_state ) AM_RANGE(0x3fd8, 0x3fd9) AM_DEVREAD("k053246", k053247_device, k053246_r) // 053246 (Sprite) AM_RANGE(0x3fda, 0x3fda) AM_WRITENOP // Not Emulated (Watchdog ???) /* what is the desired effect of overlapping these memory regions anyway? */ - AM_RANGE(0x2000, 0x2fff) AM_RAMBANK("bank3") // 052109 (Tilemap) 0x0000-0x0fff - AM_RANGE(0x4000, 0x4fff) AM_RAMBANK("bank2") // 052109 (Tilemap) 0x2000-0x3fff, Tilemap MASK-ROM bank selector (MASK-ROM Test) + AM_RANGE(0x2000, 0x2fff) AM_DEVICE("videobank0", address_map_bank_device, amap8) // 052109 (Tilemap) 0x0000-0x0fff - 052109 (Tilemap) + AM_RANGE(0x4000, 0x4fff) AM_DEVICE("videobank1", address_map_bank_device, amap8) // 0x2000-0x3fff, Tilemap MASK-ROM bank selector (MASK-ROM Test) AM_RANGE(0x2000, 0x5fff) AM_DEVREADWRITE("k052109", k052109_device, read, write) // 052109 (Tilemap) AM_RANGE(0x6000, 0x7fff) AM_ROMBANK("bank1") // 053248 '975r01' 1M ROM (Banked) AM_RANGE(0x8000, 0xffff) AM_ROM AM_REGION("maincpu", 0x18000) // 053248 '975r01' 1M ROM (0x18000-0x1ffff) ADDRESS_MAP_END +static ADDRESS_MAP_START( videobank0_map, AS_PROGRAM, 8, vendetta_state ) + AM_RANGE(0x0000, 0x0fff) AM_DEVREADWRITE("k052109", k052109_device, read, write) + AM_RANGE(0x1000, 0x1fff) AM_DEVREADWRITE("k053246", k053247_device, k053247_r, k053247_w) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( videobank1_map, AS_PROGRAM, 8, vendetta_state ) + AM_RANGE(0x0000, 0x0fff) AM_READWRITE(K052109_r, K052109_w) + AM_RANGE(0x1000, 0x1fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") +ADDRESS_MAP_END static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, vendetta_state ) AM_RANGE(0x0000, 0xefff) AM_ROM @@ -399,10 +391,6 @@ void vendetta_state::machine_start() membank("bank1")->configure_entries(0, 28, memregion("maincpu")->base(), 0x2000); membank("bank1")->set_entry(0); - m_paletteram.resize(0x1000); - m_palette->basemem().set(m_paletteram, ENDIANNESS_BIG, 2); - - save_item(NAME(m_paletteram)); save_item(NAME(m_irq_enabled)); save_item(NAME(m_sprite_colorbase)); save_item(NAME(m_layer_colorbase)); @@ -419,9 +407,6 @@ void vendetta_state::machine_reset() m_sprite_colorbase = 0; m_irq_enabled = 0; - - /* init banks */ - vendetta_video_banking(0); } WRITE8_MEMBER( vendetta_state::banking_callback ) @@ -440,6 +425,20 @@ static MACHINE_CONFIG_START( vendetta, vendetta_state ) MCFG_CPU_VBLANK_INT_DRIVER("screen", vendetta_state, irq) MCFG_KONAMICPU_LINE_CB(WRITE8(vendetta_state, banking_callback)) + MCFG_DEVICE_ADD("videobank0", ADDRESS_MAP_BANK, 0) + MCFG_DEVICE_PROGRAM_MAP(videobank0_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("videobank1", ADDRESS_MAP_BANK, 0) + MCFG_DEVICE_PROGRAM_MAP(videobank1_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_CPU_ADD("audiocpu", Z80, XTAL_3_579545MHz) /* verified with PCB */ MCFG_CPU_PROGRAM_MAP(sound_map) /* interrupts are triggered by the main CPU */ @@ -771,25 +770,14 @@ ROM_END ***************************************************************************/ -DRIVER_INIT_MEMBER(vendetta_state,vendetta) -{ - m_video_banking_base = 0x4000; -} - -DRIVER_INIT_MEMBER(vendetta_state,esckids) -{ - m_video_banking_base = 0x2000; -} - - -GAME( 1991, vendetta, 0, vendetta, vendet4p, vendetta_state, vendetta, ROT0, "Konami", "Vendetta (World, 4 Players, ver. T)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, vendettar, vendetta, vendetta, vendet4p, vendetta_state, vendetta, ROT0, "Konami", "Vendetta (US, 4 Players, ver. R)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, vendettaz, vendetta, vendetta, vendet4p, vendetta_state, vendetta, ROT0, "Konami", "Vendetta (Asia, 4 Players, ver. Z)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, vendetta2p, vendetta, vendetta, vendetta, vendetta_state, vendetta, ROT0, "Konami", "Vendetta (World, 2 Players, ver. W)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, vendetta2peba,vendetta,vendetta, vendetta, vendetta_state, vendetta, ROT0, "Konami", "Vendetta (World, 2 Players, ver. EB-A?)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, vendetta2pu, vendetta, vendetta, vendetta, vendetta_state, vendetta, ROT0, "Konami", "Vendetta (Asia, 2 Players, ver. U)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, vendetta2pd, vendetta, vendetta, vendetta, vendetta_state, vendetta, ROT0, "Konami", "Vendetta (Asia, 2 Players, ver. D)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, vendettaj, vendetta, vendetta, vendetta, vendetta_state, vendetta, ROT0, "Konami", "Crime Fighters 2 (Japan, 2 Players, ver. P)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, esckids, 0, esckids, esckids, vendetta_state, esckids, ROT0, "Konami", "Escape Kids (Asia, 4 Players)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, esckidsj, esckids, esckids, esckidsj, vendetta_state, esckids, ROT0, "Konami", "Escape Kids (Japan, 2 Players)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, vendetta, 0, vendetta, vendet4p, driver_device, 0, ROT0, "Konami", "Vendetta (World, 4 Players, ver. T)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, vendettar, vendetta, vendetta, vendet4p, driver_device, 0, ROT0, "Konami", "Vendetta (US, 4 Players, ver. R)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, vendettaz, vendetta, vendetta, vendet4p, driver_device, 0, ROT0, "Konami", "Vendetta (Asia, 4 Players, ver. Z)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, vendetta2p, vendetta, vendetta, vendetta, driver_device, 0, ROT0, "Konami", "Vendetta (World, 2 Players, ver. W)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, vendetta2peba,vendetta,vendetta, vendetta, driver_device, 0, ROT0, "Konami", "Vendetta (World, 2 Players, ver. EB-A?)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, vendetta2pu, vendetta, vendetta, vendetta, driver_device, 0, ROT0, "Konami", "Vendetta (Asia, 2 Players, ver. U)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, vendetta2pd, vendetta, vendetta, vendetta, driver_device, 0, ROT0, "Konami", "Vendetta (Asia, 2 Players, ver. D)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, vendettaj, vendetta, vendetta, vendetta, driver_device, 0, ROT0, "Konami", "Crime Fighters 2 (Japan, 2 Players, ver. P)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, esckids, 0, esckids, esckids, driver_device, 0, ROT0, "Konami", "Escape Kids (Asia, 4 Players)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, esckidsj, esckids, esckids, esckidsj, driver_device, 0, ROT0, "Konami", "Escape Kids (Japan, 2 Players)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/vendetta.h b/src/mame/includes/vendetta.h index d126f9c70ae..497db3c2886 100644 --- a/src/mame/includes/vendetta.h +++ b/src/mame/includes/vendetta.h @@ -5,6 +5,7 @@ Vendetta *************************************************************************/ +#include "machine/bankdev.h" #include "machine/k053252.h" #include "video/k053246_k053247_k055673.h" #include "video/k054000.h" @@ -29,11 +30,11 @@ public: m_k053251(*this, "k053251"), m_k053252(*this, "k053252"), m_k054000(*this, "k054000"), - m_palette(*this, "palette") { } - - /* memory pointers */ - std::vector<UINT8> m_paletteram; + m_palette(*this, "palette"), + m_videobank0(*this, "videobank0"), + m_videobank1(*this, "videobank1") { } + /* video-related */ int m_layer_colorbase[3]; int m_sprite_colorbase; @@ -41,7 +42,6 @@ public: /* misc */ int m_irq_enabled; - offs_t m_video_banking_base; /* devices */ required_device<cpu_device> m_maincpu; @@ -53,6 +53,9 @@ public: optional_device<k054000_device> m_k054000; required_device<palette_device> m_palette; + required_device<address_map_bank_device> m_videobank0; + required_device<address_map_bank_device> m_videobank1; + DECLARE_WRITE8_MEMBER(eeprom_w); DECLARE_READ8_MEMBER(K052109_r); DECLARE_WRITE8_MEMBER(K052109_w); @@ -61,8 +64,6 @@ public: DECLARE_WRITE8_MEMBER(z80_irq_w); DECLARE_READ8_MEMBER(z80_irq_r); - DECLARE_DRIVER_INIT(vendetta); - DECLARE_DRIVER_INIT(esckids); virtual void machine_start() override; virtual void machine_reset() override; @@ -70,7 +71,6 @@ public: INTERRUPT_GEN_MEMBER(irq); - void vendetta_video_banking( int select ); K052109_CB_MEMBER(vendetta_tile_callback); K052109_CB_MEMBER(esckids_tile_callback); DECLARE_WRITE8_MEMBER(banking_callback); |