From d394762482b57ec444f398ac307200b9f19c6b59 Mon Sep 17 00:00:00 2001 From: cam900 Date: Thu, 15 Feb 2018 01:01:58 +0900 Subject: dec8 : Cleanup bankswitch initializes, driver_init_members, duplicates (#3203) * dec8 : Cleanup bankswitch initializes, driver_init_members, duplicates Some accurate CPU Type from PCBs, Add notes Convert m_buffered_spriteram16 to unique_ptr * dec8.cpp : Remove defined memory map for If a new dec8.cpp game with a different mapped main CPU ROM is found --- src/mame/drivers/dec8.cpp | 194 +++++++++++++++------------------------------- src/mame/includes/dec8.h | 25 +++--- src/mame/video/dec8.cpp | 65 +++++++++------- 3 files changed, 112 insertions(+), 172 deletions(-) diff --git a/src/mame/drivers/dec8.cpp b/src/mame/drivers/dec8.cpp index 021b461713b..cc18e86d175 100644 --- a/src/mame/drivers/dec8.cpp +++ b/src/mame/drivers/dec8.cpp @@ -348,7 +348,7 @@ WRITE8_MEMBER(dec8_state::csilver_i8751_w) WRITE8_MEMBER(dec8_state::dec8_bank_w) { - membank("bank1")->set_entry(data & 0x0f); + m_mainbank->set_entry(data & 0x0f); } /* Used by Ghostbusters, Meikyuu Hunter G & Gondomania */ @@ -361,7 +361,7 @@ WRITE8_MEMBER(dec8_state::ghostb_bank_w) Bits 4-7: Bank switch */ - membank("bank1")->set_entry(data >> 4); + m_mainbank->set_entry(data >> 4); if ((data&1)==0) m_maincpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); m_nmi_enable = (data & 2) >> 1; @@ -377,7 +377,7 @@ WRITE8_MEMBER(dec8_state::csilver_control_w) Bit 0x40 - Unused. Bit 0x80 - Hold subcpu reset line high if clear, else low? (Not needed anyway) */ - membank("bank1")->set_entry(data & 0x0f); + m_mainbank->set_entry(data & 0x0f); } WRITE8_MEMBER(dec8_state::dec8_sound_w) @@ -410,7 +410,7 @@ WRITE8_MEMBER(dec8_state::csilver_adpcm_data_w) WRITE8_MEMBER(dec8_state::csilver_sound_bank_w) { - membank("bank3")->set_entry((data & 0x08) >> 3); + m_soundbank->set_entry((data & 0x08) >> 3); } /******************************************************************************/ @@ -463,7 +463,6 @@ WRITE8_MEMBER(dec8_state::flip_screen_w){ flip_screen_set(data); } /******************************************************************************/ - ADDRESS_MAP_START(dec8_state::lastmisn_map) AM_RANGE(0x0000, 0x0fff) AM_RAM AM_SHARE("share1") AM_RANGE(0x1000, 0x13ff) AM_RAM_DEVWRITE("palette", deco_rmc3_device, write8) AM_SHARE("palette") @@ -486,7 +485,7 @@ ADDRESS_MAP_START(dec8_state::lastmisn_map) AM_RANGE(0x2800, 0x2fff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x3000, 0x37ff) AM_RAM AM_SHARE("share2") AM_RANGE(0x3800, 0x3fff) AM_READWRITE(dec8_bg_data_r, dec8_bg_data_w) AM_SHARE("bg_data") - AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1") + AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("mainbank") AM_RANGE(0x8000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -530,7 +529,7 @@ ADDRESS_MAP_START(dec8_state::shackled_map) AM_RANGE(0x2800, 0x2fff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x3000, 0x37ff) AM_RAM AM_SHARE("share2") AM_RANGE(0x3800, 0x3fff) AM_READWRITE(dec8_bg_data_r, dec8_bg_data_w) AM_SHARE("bg_data") - AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1") + AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("mainbank") AM_RANGE(0x8000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -578,7 +577,7 @@ ADDRESS_MAP_START(dec8_state::gondo_map) AM_RANGE(0x3838, 0x3838) AM_READ(i8751_h_r) AM_RANGE(0x3839, 0x3839) AM_READ(i8751_l_r) AM_RANGE(0x383a, 0x383b) AM_WRITE(dec8_i8751_w) - AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1") + AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("mainbank") AM_RANGE(0x8000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -600,7 +599,7 @@ ADDRESS_MAP_START(dec8_state::garyoret_map) AM_RANGE(0x3838, 0x3839) AM_WRITE(dec8_i8751_w) AM_RANGE(0x383a, 0x383a) AM_READ(i8751_h_r) AM_RANGE(0x383b, 0x383b) AM_READ(i8751_l_r) - AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1") + AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("mainbank") AM_RANGE(0x8000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -624,7 +623,7 @@ ADDRESS_MAP_START(dec8_state::meikyuh_map) AM_RANGE(0x3840, 0x3840) AM_WRITE(ghostb_bank_w) AM_RANGE(0x3860, 0x3860) AM_READ(i8751_l_r) AM_RANGE(0x3860, 0x3861) AM_WRITE(dec8_i8751_w) - AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1") + AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("mainbank") AM_RANGE(0x8000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -649,7 +648,7 @@ ADDRESS_MAP_START(dec8_state::csilver_map) AM_RANGE(0x2800, 0x2fff) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x3000, 0x37ff) AM_RAM AM_SHARE("share2") AM_RANGE(0x3800, 0x3fff) AM_READWRITE(dec8_bg_data_r, dec8_bg_data_w) AM_SHARE("bg_data") - AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1") + AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("mainbank") AM_RANGE(0x8000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -689,7 +688,7 @@ ADDRESS_MAP_START(dec8_state::oscar_map) AM_RANGE(0x3d80, 0x3d80) AM_WRITE(dec8_sound_w) /* SOUN */ AM_RANGE(0x3e00, 0x3e00) AM_WRITENOP /* COINCL */ AM_RANGE(0x3e80, 0x3e83) AM_WRITE(oscar_int_w) - AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1") + AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("mainbank") AM_RANGE(0x8000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -720,7 +719,7 @@ ADDRESS_MAP_START(dec8_state::srdarwin_map) AM_RANGE(0x3801, 0x3801) AM_READ_PORT("IN0") /* Player 1 */ AM_RANGE(0x3802, 0x3802) AM_READ_PORT("IN1") /* Player 2 (cocktail) + VBL */ AM_RANGE(0x3803, 0x3803) AM_READ_PORT("DSW1") /* Dip 2 */ - AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1") + AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("mainbank") AM_RANGE(0x8000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -745,7 +744,7 @@ ADDRESS_MAP_START(dec8_state::cobra_map) AM_RANGE(0x3c00, 0x3c00) AM_WRITE(dec8_bank_w) AM_RANGE(0x3c02, 0x3c02) AM_WRITE(dec8_mxc06_karn_buffer_spriteram_w) /* DMA */ AM_RANGE(0x3e00, 0x3e00) AM_WRITE(dec8_sound_w) - AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1") + AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("mainbank") AM_RANGE(0x8000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -787,7 +786,7 @@ ADDRESS_MAP_START(dec8_state::csilver_s_map) AM_RANGE(0x2000, 0x2000) AM_WRITE(csilver_sound_bank_w) AM_RANGE(0x3000, 0x3000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_RANGE(0x3400, 0x3400) AM_READ(csilver_adpcm_reset_r) /* ? not sure */ - AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank3") + AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("soundbank") AM_RANGE(0x8000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -1993,7 +1992,7 @@ MACHINE_CONFIG_START(dec8_state::lastmisn) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") - + MCFG_GENERIC_LATCH_8_ADD("soundlatch") MCFG_SOUND_ADD("ym1", YM2203, 1500000) @@ -2064,7 +2063,7 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(dec8_state::gondo) /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", HD6309,3000000*4) /* HD63C09EP */ + MCFG_CPU_ADD("maincpu", HD6309E,3000000) /* HD63C09EP */ MCFG_CPU_PROGRAM_MAP(gondo_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", dec8_state, gondo_interrupt) @@ -2101,7 +2100,7 @@ MACHINE_CONFIG_START(dec8_state::gondo) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") - + MCFG_GENERIC_LATCH_8_ADD("soundlatch") MCFG_SOUND_ADD("ym1", YM2203, 1500000) @@ -2118,7 +2117,7 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(dec8_state::garyoret) /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", HD6309,3000000*4) /* HD63C09EP */ + MCFG_CPU_ADD("maincpu", HD6309E,3000000) /* HD63C09EP */ MCFG_CPU_PROGRAM_MAP(garyoret_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", dec8_state, gondo_interrupt) @@ -2172,7 +2171,7 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(dec8_state::ghostb) /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", HD6309, 3000000*4) + MCFG_CPU_ADD("maincpu", HD6309E, 3000000) /* HD63C09EP */ MCFG_CPU_PROGRAM_MAP(meikyuh_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", dec8_state, gondo_interrupt) @@ -2293,11 +2292,11 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(dec8_state::oscar) /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", HD6309, XTAL(12'000'000)/2) /* verified on pcb */ + MCFG_CPU_ADD("maincpu", HD6309, XTAL(12'000'000)/2) /* PCB seen both HD6309 or MC6809, clock verified on pcb */ MCFG_CPU_PROGRAM_MAP(oscar_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", dec8_state, oscar_interrupt) - MCFG_CPU_ADD("sub", HD6309, XTAL(12'000'000)/2) /* verified on pcb */ + MCFG_CPU_ADD("sub", HD6309, XTAL(12'000'000)/2) /* PCB seen both HD6309 or MC6809, clock verified on pcb */ MCFG_CPU_PROGRAM_MAP(oscar_sub_map) MCFG_CPU_ADD("audiocpu", DECO_222, XTAL(12'000'000)/8) @@ -2334,6 +2333,8 @@ MACHINE_CONFIG_START(dec8_state::oscar) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_GENERIC_LATCH_8_ADD("soundlatch") MCFG_SOUND_ADD("ym1", YM2203, XTAL(12'000'000)/8) /* verified on pcb */ MCFG_SOUND_ROUTE(0, "mono", 0.23) @@ -2341,8 +2342,6 @@ MACHINE_CONFIG_START(dec8_state::oscar) MCFG_SOUND_ROUTE(2, "mono", 0.23) MCFG_SOUND_ROUTE(3, "mono", 0.20) - MCFG_GENERIC_LATCH_8_ADD("soundlatch") - MCFG_SOUND_ADD("ym2", YM3526, XTAL(12'000'000)/4) /* verified on pcb */ MCFG_YM3526_IRQ_HANDLER(INPUTLINE("audiocpu", M6502_IRQ_LINE)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.70) @@ -2401,7 +2400,7 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(dec8_state::cobracom) /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", MC6809E, 2000000) + MCFG_CPU_ADD("maincpu", MC6809E, 2000000) /* MC68B09EP */ MCFG_CPU_PROGRAM_MAP(cobra_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", dec8_state, nmi_line_pulse) @@ -2409,7 +2408,6 @@ MACHINE_CONFIG_START(dec8_state::cobracom) MCFG_CPU_PROGRAM_MAP(dec8_s_map) /* NMIs are caused by the main CPU */ - /* video hardware */ MCFG_BUFFERED_SPRITERAM8_ADD("spriteram") @@ -3215,9 +3213,8 @@ ROM_START( csilver ) ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ ROM_LOAD( "dx04-1.19d", 0x0000, 0x10000, CRC(29432691) SHA1(a76ecd27d217c66a0e43f93e29efe83c657925c3) ) - ROM_REGION( 0x18000, "audiocpu", 0 ) - ROM_LOAD( "dx05.3f", 0x10000, 0x08000, CRC(eb32cf25) SHA1(9390c88033259c65eb15320e31f5d696970987cc) ) - ROM_CONTINUE( 0x08000, 0x08000 ) + ROM_REGION( 0x10000, "audiocpu", 0 ) + ROM_LOAD( "dx05.3f", 0x00000, 0x10000, CRC(eb32cf25) SHA1(9390c88033259c65eb15320e31f5d696970987cc) ) ROM_REGION( 0x1000, "mcu", 0 ) /* ID8751H MCU */ // 017F: B4 4C 0D : cjne a,#$4C,$018F (ID code 0x4c = World version) @@ -3254,9 +3251,8 @@ ROM_START( csilverj ) ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ ROM_LOAD( "dx04-1.a5", 0x0000, 0x10000, CRC(29432691) SHA1(a76ecd27d217c66a0e43f93e29efe83c657925c3) ) - ROM_REGION( 0x18000, "audiocpu", 0 ) - ROM_LOAD( "dx05.a6", 0x10000, 0x08000, CRC(eb32cf25) SHA1(9390c88033259c65eb15320e31f5d696970987cc) ) - ROM_CONTINUE( 0x08000, 0x08000 ) + ROM_REGION( 0x10000, "audiocpu", 0 ) + ROM_LOAD( "dx05.a6", 0x00000, 0x10000, CRC(eb32cf25) SHA1(9390c88033259c65eb15320e31f5d696970987cc) ) ROM_REGION( 0x1000, "mcu", 0 ) /* ID8751H MCU */ ROM_LOAD( "id8751h.mcu", 0x0000, 0x1000, NO_DUMP ) @@ -3293,9 +3289,8 @@ ROM_START( csilverja ) // DE-0250-3 + DE-0251-2 ROM_REGION( 0x10000, "sub", 0 ) /* CPU 2, 1st 16k is empty */ ROM_LOAD( "dx04-1.19d", 0x0000, 0x10000, CRC(29432691) SHA1(a76ecd27d217c66a0e43f93e29efe83c657925c3) ) - ROM_REGION( 0x18000, "audiocpu", 0 ) - ROM_LOAD( "dx05.3f", 0x10000, 0x08000, CRC(eb32cf25) SHA1(9390c88033259c65eb15320e31f5d696970987cc) ) - ROM_CONTINUE( 0x08000, 0x08000 ) + ROM_REGION( 0x10000, "audiocpu", 0 ) + ROM_LOAD( "dx05.3f", 0x00000, 0x10000, CRC(eb32cf25) SHA1(9390c88033259c65eb15320e31f5d696970987cc) ) ROM_REGION( 0x1000, "mcu", 0 ) /* ID8751H MCU */ ROM_LOAD( "id8751h.mcu", 0x0000, 0x1000, NO_DUMP ) @@ -3622,114 +3617,51 @@ ROM_END DRIVER_INIT_MEMBER(dec8_state,dec8) { + if (m_mainbank.found()) + { + uint8_t *ROM = memregion("maincpu")->base(); + uint32_t max_bank = (memregion("maincpu")->bytes() - 0x10000) / 0x4000; + m_mainbank->configure_entries(0, max_bank, &ROM[0x10000], 0x4000); + } m_latch = 0; } -/* Below, I set up the correct number of banks depending on the "maincpu" region size */ -DRIVER_INIT_MEMBER(dec8_state,lastmisn) -{ - uint8_t *ROM = memregion("maincpu")->base(); - membank("bank1")->configure_entries(0, 4, &ROM[0x10000], 0x4000); - DRIVER_INIT_CALL(dec8); -} - -DRIVER_INIT_MEMBER(dec8_state,shackled) -{ - uint8_t *ROM = memregion("maincpu")->base(); - membank("bank1")->configure_entries(0, 16, &ROM[0x10000], 0x4000); - DRIVER_INIT_CALL(dec8); -} - -DRIVER_INIT_MEMBER(dec8_state,gondo) -{ - uint8_t *ROM = memregion("maincpu")->base(); - membank("bank1")->configure_entries(0, 12, &ROM[0x10000], 0x4000); - DRIVER_INIT_CALL(dec8); -} - -DRIVER_INIT_MEMBER(dec8_state,garyoret) -{ - uint8_t *ROM = memregion("maincpu")->base(); - membank("bank1")->configure_entries(0, 16, &ROM[0x10000], 0x4000); - DRIVER_INIT_CALL(dec8); -} - -DRIVER_INIT_MEMBER(dec8_state,ghostb) -{ - uint8_t *ROM = memregion("maincpu")->base(); - - membank("bank1")->configure_entries(0, 16, &ROM[0x10000], 0x4000); - DRIVER_INIT_CALL(dec8); -} - -DRIVER_INIT_MEMBER(dec8_state,meikyuh) -{ - uint8_t *ROM = memregion("maincpu")->base(); - - membank("bank1")->configure_entries(0, 12, &ROM[0x10000], 0x4000); - DRIVER_INIT_CALL(dec8); -} - DRIVER_INIT_MEMBER(dec8_state,csilver) { - uint8_t *ROM = memregion("maincpu")->base(); uint8_t *RAM = memregion("audiocpu")->base(); - - membank("bank1")->configure_entries(0, 14, &ROM[0x10000], 0x4000); - membank("bank3")->configure_entries(0, 2, &RAM[0x10000], 0x4000); - DRIVER_INIT_CALL(dec8); -} - -DRIVER_INIT_MEMBER(dec8_state,oscar) -{ - uint8_t *ROM = memregion("maincpu")->base(); - membank("bank1")->configure_entries(0, 4, &ROM[0x10000], 0x4000); - DRIVER_INIT_CALL(dec8); -} - -DRIVER_INIT_MEMBER(dec8_state,srdarwin) -{ - uint8_t *ROM = memregion("maincpu")->base(); - membank("bank1")->configure_entries(0, 6, &ROM[0x10000], 0x4000); - DRIVER_INIT_CALL(dec8); -} - -DRIVER_INIT_MEMBER(dec8_state,cobracom) -{ - uint8_t *ROM = memregion("maincpu")->base(); - membank("bank1")->configure_entries(0, 8, &ROM[0x10000], 0x4000); + m_soundbank->configure_entries(0, 2, &RAM[0], 0x4000); DRIVER_INIT_CALL(dec8); } /******************************************************************************/ -GAME( 1986, lastmisn, 0, lastmisn, lastmisn, dec8_state, lastmisn, ROT270, "Data East USA", "Last Mission (US revision 6)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, lastmisno, lastmisn, lastmisn, lastmisn, dec8_state, lastmisn, ROT270, "Data East USA", "Last Mission (US revision 5)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, lastmisnj, lastmisn, lastmisn, lastmisnj, dec8_state, lastmisn, ROT270, "Data East Corporation", "Last Mission (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, shackled, 0, shackled, shackled, dec8_state, shackled, ROT0, "Data East USA", "Shackled (US)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, breywood, shackled, shackled, breywood, dec8_state, shackled, ROT0, "Data East Corporation", "Breywood (Japan revision 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, gondo, 0, gondo, gondo, dec8_state, gondo, ROT270, "Data East USA", "Gondomania (US)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, makyosen, gondo, gondo, gondo, dec8_state, gondo, ROT270, "Data East Corporation", "Makyou Senshi (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, garyoret, 0, garyoret, garyoret, dec8_state, garyoret, ROT0, "Data East Corporation", "Garyo Retsuden (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, ghostb, 0, ghostb, ghostb, dec8_state, ghostb, ROT0, "Data East USA", "The Real Ghostbusters (US 2 Players, revision 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, ghostb2a, ghostb, ghostb, ghostb2a, dec8_state, ghostb, ROT0, "Data East USA", "The Real Ghostbusters (US 2 Players)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, ghostb3, ghostb, ghostb, ghostb3, dec8_state, ghostb, ROT0, "Data East USA", "The Real Ghostbusters (US 3 Players)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, ghostb3a, ghostb, ghostb, ghostb3, dec8_state, ghostb, ROT0, "Data East USA", "The Real Ghostbusters (US 3 Players, revision ?)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // ROMs confirmed working on PCB, confirmed problem with the fake MCU ROM -GAME( 1987, meikyuh, ghostb, meikyuh, meikyuh, dec8_state, meikyuh, ROT0, "Data East Corporation", "Meikyuu Hunter G (Japan, set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, meikyuha, ghostb, meikyuh, meikyuh, dec8_state, meikyuh, ROT0, "Data East Corporation", "Meikyuu Hunter G (Japan, set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, csilver, 0, csilver, csilver, dec8_state, csilver, ROT0, "Data East Corporation", "Captain Silver (World)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, csilverj, csilver, csilver, csilverj, dec8_state, csilver, ROT0, "Data East Corporation", "Captain Silver (Japan, revision 3)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, csilverja, csilver, csilver, csilverj, dec8_state, csilver, ROT0, "Data East Corporation", "Captain Silver (Japan, revision 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, oscar, 0, oscar, oscar, dec8_state, oscar, ROT0, "Data East Corporation", "Psycho-Nics Oscar (World revision 0)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, oscaru, oscar, oscar, oscarj, dec8_state, oscar, ROT0, "Data East USA", "Psycho-Nics Oscar (US)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, oscarj1, oscar, oscar, oscarj, dec8_state, oscar, ROT0, "Data East Corporation", "Psycho-Nics Oscar (Japan revision 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, oscarj2, oscar, oscar, oscarj, dec8_state, oscar, ROT0, "Data East Corporation", "Psycho-Nics Oscar (Japan revision 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, srdarwin, 0, srdarwin, srdarwin, dec8_state, srdarwin, ROT270, "Data East Corporation", "Super Real Darwin (World)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, srdarwinj, srdarwin, srdarwin, srdarwinj, dec8_state, srdarwin, ROT270, "Data East Corporation", "Super Real Darwin (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, lastmisn, 0, lastmisn, lastmisn, dec8_state, dec8, ROT270, "Data East USA", "Last Mission (US revision 6)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, lastmisno, lastmisn, lastmisn, lastmisn, dec8_state, dec8, ROT270, "Data East USA", "Last Mission (US revision 5)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, lastmisnj, lastmisn, lastmisn, lastmisnj, dec8_state, dec8, ROT270, "Data East Corporation", "Last Mission (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, shackled, 0, shackled, shackled, dec8_state, dec8, ROT0, "Data East USA", "Shackled (US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, breywood, shackled, shackled, breywood, dec8_state, dec8, ROT0, "Data East Corporation", "Breywood (Japan revision 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, gondo, 0, gondo, gondo, dec8_state, dec8, ROT270, "Data East USA", "Gondomania (US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, makyosen, gondo, gondo, gondo, dec8_state, dec8, ROT270, "Data East Corporation", "Makyou Senshi (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, garyoret, 0, garyoret, garyoret, dec8_state, dec8, ROT0, "Data East Corporation", "Garyo Retsuden (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, ghostb, 0, ghostb, ghostb, dec8_state, dec8, ROT0, "Data East USA", "The Real Ghostbusters (US 2 Players, revision 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, ghostb2a, ghostb, ghostb, ghostb2a, dec8_state, dec8, ROT0, "Data East USA", "The Real Ghostbusters (US 2 Players)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, ghostb3, ghostb, ghostb, ghostb3, dec8_state, dec8, ROT0, "Data East USA", "The Real Ghostbusters (US 3 Players)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, ghostb3a, ghostb, ghostb, ghostb3, dec8_state, dec8, ROT0, "Data East USA", "The Real Ghostbusters (US 3 Players, revision ?)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // ROMs confirmed working on PCB, confirmed problem with the fake MCU ROM +GAME( 1987, meikyuh, ghostb, meikyuh, meikyuh, dec8_state, dec8, ROT0, "Data East Corporation", "Meikyuu Hunter G (Japan, set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, meikyuha, ghostb, meikyuh, meikyuh, dec8_state, dec8, ROT0, "Data East Corporation", "Meikyuu Hunter G (Japan, set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, csilver, 0, csilver, csilver, dec8_state, csilver, ROT0, "Data East Corporation", "Captain Silver (World)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, csilverj, csilver, csilver, csilverj, dec8_state, csilver, ROT0, "Data East Corporation", "Captain Silver (Japan, revision 3)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, csilverja, csilver, csilver, csilverj, dec8_state, csilver, ROT0, "Data East Corporation", "Captain Silver (Japan, revision 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, oscar, 0, oscar, oscar, dec8_state, dec8, ROT0, "Data East Corporation", "Psycho-Nics Oscar (World revision 0)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, oscaru, oscar, oscar, oscarj, dec8_state, dec8, ROT0, "Data East USA", "Psycho-Nics Oscar (US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, oscarj1, oscar, oscar, oscarj, dec8_state, dec8, ROT0, "Data East Corporation", "Psycho-Nics Oscar (Japan revision 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, oscarj2, oscar, oscar, oscarj, dec8_state, dec8, ROT0, "Data East Corporation", "Psycho-Nics Oscar (Japan revision 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, srdarwin, 0, srdarwin, srdarwin, dec8_state, dec8, ROT270, "Data East Corporation", "Super Real Darwin (World)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, srdarwinj, srdarwin, srdarwin, srdarwinj, dec8_state, dec8, ROT270, "Data East Corporation", "Super Real Darwin (Japan)", MACHINE_SUPPORTS_SAVE ) // Unlike most Deco games of this period Cobra Command does not seem to have a Data East USA release. Instead the Data East Corporation release // was used in the US as evidenced by boards with the EL romset bearing AAMA seal stickers (American Amusement Machine Association) -GAME( 1988, cobracom, 0, cobracom, cobracom, dec8_state, cobracom, ROT0, "Data East Corporation", "Cobra-Command (World/US revision 5)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, cobracoma, cobracom, cobracom, cobracom, dec8_state, cobracom, ROT0, "Data East Corporation", "Cobra-Command (World/US revision 4)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, cobracomj, cobracom, cobracom, cobracom, dec8_state, cobracom, ROT0, "Data East Corporation", "Cobra-Command (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, cobracom, 0, cobracom, cobracom, dec8_state, dec8, ROT0, "Data East Corporation", "Cobra-Command (World/US revision 5)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, cobracoma, cobracom, cobracom, cobracom, dec8_state, dec8, ROT0, "Data East Corporation", "Cobra-Command (World/US revision 4)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, cobracomj, cobracom, cobracom, cobracom, dec8_state, dec8, ROT0, "Data East Corporation", "Cobra-Command (Japan)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/dec8.h b/src/mame/includes/dec8.h index 2b7c8bfd018..d6fffc24525 100644 --- a/src/mame/includes/dec8.h +++ b/src/mame/includes/dec8.h @@ -25,8 +25,7 @@ public: m_mcu(*this, "mcu"), m_spriteram(*this, "spriteram") , m_msm(*this, "msm"), - m_tilegen1(*this, "tilegen1"), - m_tilegen2(*this, "tilegen2"), + m_tilegen(*this, "tilegen%u", 1), m_spritegen_krn(*this, "spritegen_krn"), m_spritegen_mxc(*this, "spritegen_mxc"), m_gfxdecode(*this, "gfxdecode"), @@ -34,6 +33,8 @@ public: m_soundlatch(*this, "soundlatch"), m_videoram(*this, "videoram"), m_bg_data(*this, "bg_data"), + m_mainbank(*this, "mainbank"), + m_soundbank(*this, "soundbank"), m_coin_port(*this, "I8751") { } /* devices */ @@ -43,8 +44,7 @@ public: optional_device m_mcu; required_device m_spriteram; optional_device m_msm; - optional_device m_tilegen1; - optional_device m_tilegen2; + optional_device_array m_tilegen; optional_device m_spritegen_krn; optional_device m_spritegen_mxc; required_device m_gfxdecode; @@ -55,9 +55,13 @@ public: required_shared_ptr m_videoram; optional_shared_ptr m_bg_data; + /* memory regions */ + required_memory_bank m_mainbank; + optional_memory_bank m_soundbank; + uint8_t * m_pf1_data; uint8_t * m_row; - uint16_t m_buffered_spriteram16[0x800/2]; // for the mxc06 sprite chip emulation (oscar, cobra) + std::unique_ptr m_buffered_spriteram16; // for the mxc06 sprite chip emulation (oscar, cobra) /* video-related */ tilemap_t *m_bg_tilemap; @@ -127,17 +131,7 @@ public: DECLARE_WRITE8_MEMBER(gondo_scroll_w); DECLARE_READ8_MEMBER(csilver_adpcm_reset_r); DECLARE_DRIVER_INIT(dec8); - DECLARE_DRIVER_INIT(deco222); - DECLARE_DRIVER_INIT(meikyuh); - DECLARE_DRIVER_INIT(garyoret); - DECLARE_DRIVER_INIT(shackled); - DECLARE_DRIVER_INIT(cobracom); DECLARE_DRIVER_INIT(csilver); - DECLARE_DRIVER_INIT(ghostb); - DECLARE_DRIVER_INIT(srdarwin); - DECLARE_DRIVER_INIT(lastmisn); - DECLARE_DRIVER_INIT(gondo); - DECLARE_DRIVER_INIT(oscar); TILE_GET_INFO_MEMBER(get_cobracom_fix_tile_info); TILE_GET_INFO_MEMBER(get_ghostb_fix_tile_info); TILE_GET_INFO_MEMBER(get_oscar_fix_tile_info); @@ -158,6 +152,7 @@ public: DECLARE_VIDEO_START(oscar); DECLARE_VIDEO_START(srdarwin); DECLARE_VIDEO_START(cobracom); + void allocate_buffered_spriteram16(); uint32_t screen_update_lastmisn(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_shackled(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_gondo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); diff --git a/src/mame/video/dec8.cpp b/src/mame/video/dec8.cpp index 6b8a36db728..cdc4d60bb53 100644 --- a/src/mame/video/dec8.cpp +++ b/src/mame/video/dec8.cpp @@ -81,7 +81,7 @@ WRITE8_MEMBER(dec8_state::srdarwin_control_w) switch (offset) { case 0: /* Top 3 bits - bank switch, bottom 4 - scroll MSB */ - membank("bank1")->set_entry((data >> 5)); + m_mainbank->set_entry((data >> 5)); m_scroll2[0] = data & 0xf; return; @@ -100,7 +100,7 @@ WRITE8_MEMBER(dec8_state::lastmisn_control_w) Bit 0x40 - Y scroll MSB Bit 0x80 - Hold subcpu reset line high if clear, else low */ - membank("bank1")->set_entry(data & 0x0f); + m_mainbank->set_entry(data & 0x0f); m_scroll2[0] = (data >> 5) & 1; m_scroll2[2] = (data >> 6) & 1; @@ -114,7 +114,7 @@ WRITE8_MEMBER(dec8_state::lastmisn_control_w) WRITE8_MEMBER(dec8_state::shackled_control_w) { /* Bottom 4 bits - bank switch, Bits 4 & 5 - Scroll MSBs */ - membank("bank1")->set_entry(data & 0x0f); + m_mainbank->set_entry(data & 0x0f); m_scroll2[0] = (data >> 5) & 1; m_scroll2[2] = (data >> 6) & 1; @@ -148,6 +148,12 @@ WRITE8_MEMBER(dec8_state::gondo_scroll_w) } } +void dec8_state::allocate_buffered_spriteram16() +{ + m_buffered_spriteram16 = make_unique_clear(0x800/2); + save_pointer(NAME(m_buffered_spriteram16.get()), 0x800/2); +} + /******************************************************************************/ @@ -203,16 +209,16 @@ void dec8_state::srdarwin_draw_sprites( bitmap_ind16 &bitmap, const rectangle & uint32_t dec8_state::screen_update_cobracom(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - bool flip = m_tilegen1->get_flip_state(); - m_tilegen1->set_flip_screen(flip); - m_tilegen2->set_flip_screen(flip); + bool flip = m_tilegen[0]->get_flip_state(); + m_tilegen[0]->set_flip_screen(flip); + m_tilegen[1]->set_flip_screen(flip); m_spritegen_mxc->set_flip_screen(flip); m_fix_tilemap->set_flip(flip ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0); - m_tilegen1->deco_bac06_pf_draw(bitmap,cliprect,TILEMAP_DRAW_OPAQUE, 0x00, 0x00, 0x00, 0x00); - m_spritegen_mxc->draw_sprites(bitmap, cliprect, m_buffered_spriteram16, 0x04, 0x00, 0x03); - m_tilegen2->deco_bac06_pf_draw(bitmap,cliprect,0, 0x00, 0x00, 0x00, 0x00); - m_spritegen_mxc->draw_sprites(bitmap, cliprect, m_buffered_spriteram16, 0x04, 0x04, 0x03); + m_tilegen[0]->deco_bac06_pf_draw(bitmap,cliprect,TILEMAP_DRAW_OPAQUE, 0x00, 0x00, 0x00, 0x00); + m_spritegen_mxc->draw_sprites(bitmap, cliprect, m_buffered_spriteram16.get(), 0x04, 0x00, 0x03); + m_tilegen[1]->deco_bac06_pf_draw(bitmap,cliprect,0, 0x00, 0x00, 0x00, 0x00); + m_spritegen_mxc->draw_sprites(bitmap, cliprect, m_buffered_spriteram16.get(), 0x04, 0x04, 0x03); m_fix_tilemap->draw(screen, bitmap, cliprect, 0, 0); return 0; } @@ -234,21 +240,22 @@ TILE_GET_INFO_MEMBER(dec8_state::get_cobracom_fix_tile_info) VIDEO_START_MEMBER(dec8_state,cobracom) { + allocate_buffered_spriteram16(); m_fix_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(dec8_state::get_cobracom_fix_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); m_fix_tilemap->set_transparent_pen(0); m_game_uses_priority = 0; - m_tilegen1->set_colmask(0x3); - m_tilegen2->set_colmask(0x3); + m_tilegen[0]->set_colmask(0x3); + m_tilegen[1]->set_colmask(0x3); } /******************************************************************************/ uint32_t dec8_state::screen_update_ghostb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - m_tilegen1->deco_bac06_pf_draw(bitmap,cliprect,TILEMAP_DRAW_OPAQUE, 0x00, 0x00, 0x00, 0x00); - m_spritegen_krn->draw_sprites(bitmap, cliprect, m_buffered_spriteram16, 0x400, 0); + m_tilegen[0]->deco_bac06_pf_draw(bitmap,cliprect,TILEMAP_DRAW_OPAQUE, 0x00, 0x00, 0x00, 0x00); + m_spritegen_krn->draw_sprites(bitmap, cliprect, m_buffered_spriteram16.get(), 0x400, 0); m_fix_tilemap->draw(screen, bitmap, cliprect, 0, 0); return 0; } @@ -267,26 +274,27 @@ TILE_GET_INFO_MEMBER(dec8_state::get_ghostb_fix_tile_info) VIDEO_START_MEMBER(dec8_state,ghostb) { + allocate_buffered_spriteram16(); m_fix_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(dec8_state::get_ghostb_fix_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); m_fix_tilemap->set_transparent_pen(0); m_game_uses_priority = 0; - m_tilegen1->set_colmask(0xf); + m_tilegen[0]->set_colmask(0xf); } /******************************************************************************/ uint32_t dec8_state::screen_update_oscar(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - bool flip = m_tilegen1->get_flip_state(); - m_tilegen1->set_flip_screen(flip); + bool flip = m_tilegen[0]->get_flip_state(); + m_tilegen[0]->set_flip_screen(flip); m_spritegen_mxc->set_flip_screen(flip); m_fix_tilemap->set_flip(flip ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0); // we mimic the priority scheme in dec0.c, this was originally a bit different, so this could be wrong - m_tilegen1->deco_bac06_pf_draw(bitmap,cliprect,TILEMAP_DRAW_OPAQUE, 0x00, 0x00, 0x00, 0x00); - m_spritegen_mxc->draw_sprites(bitmap, cliprect, m_buffered_spriteram16, 0x00, 0x00, 0x0f); - m_tilegen1->deco_bac06_pf_draw(bitmap,cliprect,0, 0x08,0x08,0x08,0x08); + m_tilegen[0]->deco_bac06_pf_draw(bitmap,cliprect,TILEMAP_DRAW_OPAQUE, 0x00, 0x00, 0x00, 0x00); + m_spritegen_mxc->draw_sprites(bitmap, cliprect, m_buffered_spriteram16.get(), 0x00, 0x00, 0x0f); + m_tilegen[0]->deco_bac06_pf_draw(bitmap,cliprect,0, 0x08,0x08,0x08,0x08); m_fix_tilemap->draw(screen, bitmap, cliprect, 0, 0); return 0; } @@ -305,12 +313,13 @@ TILE_GET_INFO_MEMBER(dec8_state::get_oscar_fix_tile_info) VIDEO_START_MEMBER(dec8_state,oscar) { + allocate_buffered_spriteram16(); m_fix_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(dec8_state::get_oscar_fix_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); m_fix_tilemap->set_transparent_pen(0); m_game_uses_priority = 1; - m_tilegen1->set_colmask(0x7); + m_tilegen[0]->set_colmask(0x7); } /******************************************************************************/ @@ -321,7 +330,7 @@ uint32_t dec8_state::screen_update_lastmisn(screen_device &screen, bitmap_ind16 m_bg_tilemap->set_scrolly(0, ((m_scroll2[2] << 8)+ m_scroll2[3])); m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); - m_spritegen_krn->draw_sprites(bitmap, cliprect, m_buffered_spriteram16, 0x400, 0); + m_spritegen_krn->draw_sprites(bitmap, cliprect, m_buffered_spriteram16.get(), 0x400, 0); m_fix_tilemap->draw(screen, bitmap, cliprect, 0, 0); return 0; } @@ -334,7 +343,7 @@ uint32_t dec8_state::screen_update_shackled(screen_device &screen, bitmap_ind16 m_bg_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_LAYER1 | 0, 0); m_bg_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_LAYER1 | 1, 0); m_bg_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_LAYER0 | 0, 0); - m_spritegen_krn->draw_sprites(bitmap, cliprect, m_buffered_spriteram16, 0x400, 0); + m_spritegen_krn->draw_sprites(bitmap, cliprect, m_buffered_spriteram16.get(), 0x400, 0); m_bg_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_LAYER0 | 1, 0); m_fix_tilemap->draw(screen, bitmap, cliprect, 0, 0); return 0; @@ -377,6 +386,7 @@ TILE_GET_INFO_MEMBER(dec8_state::get_lastmisn_fix_tile_info) VIDEO_START_MEMBER(dec8_state,lastmisn) { + allocate_buffered_spriteram16(); m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(dec8_state::get_lastmisn_tile_info),this), tilemap_mapper_delegate(FUNC(dec8_state::lastmisn_scan_rows),this), 16, 16, 32, 32); m_fix_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(dec8_state::get_lastmisn_fix_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); @@ -386,6 +396,7 @@ VIDEO_START_MEMBER(dec8_state,lastmisn) VIDEO_START_MEMBER(dec8_state,shackled) { + allocate_buffered_spriteram16(); m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(dec8_state::get_lastmisn_tile_info),this), tilemap_mapper_delegate(FUNC(dec8_state::lastmisn_scan_rows),this), 16, 16, 32, 32); m_fix_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(dec8_state::get_lastmisn_fix_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); @@ -457,9 +468,9 @@ uint32_t dec8_state::screen_update_gondo(screen_device &screen, bitmap_ind16 &bi m_bg_tilemap->set_scrolly(0, ((m_scroll2[2] << 8) + m_scroll2[3])); m_bg_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_LAYER1, 0); - m_spritegen_krn->draw_sprites(bitmap, cliprect, m_buffered_spriteram16, 0x400, 2); + m_spritegen_krn->draw_sprites(bitmap, cliprect, m_buffered_spriteram16.get(), 0x400, 2); m_bg_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_LAYER0, 0); - m_spritegen_krn->draw_sprites(bitmap, cliprect, m_buffered_spriteram16, 0x400, 1); + m_spritegen_krn->draw_sprites(bitmap, cliprect, m_buffered_spriteram16.get(), 0x400, 1); m_fix_tilemap->draw(screen, bitmap, cliprect, 0, 0); return 0; } @@ -470,7 +481,7 @@ uint32_t dec8_state::screen_update_garyoret(screen_device &screen, bitmap_ind16 m_bg_tilemap->set_scrolly(0, ((m_scroll2[2] << 8) + m_scroll2[3])); m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); - m_spritegen_krn->draw_sprites(bitmap, cliprect, m_buffered_spriteram16, 0x400, 0); + m_spritegen_krn->draw_sprites(bitmap, cliprect, m_buffered_spriteram16.get(), 0x400, 0); m_bg_tilemap->draw(screen, bitmap, cliprect, 1, 0); m_fix_tilemap->draw(screen, bitmap, cliprect, 0, 0); return 0; @@ -507,6 +518,7 @@ TILE_GET_INFO_MEMBER(dec8_state::get_gondo_tile_info) VIDEO_START_MEMBER(dec8_state,gondo) { + allocate_buffered_spriteram16(); m_fix_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(dec8_state::get_gondo_fix_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(dec8_state::get_gondo_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); @@ -517,6 +529,7 @@ VIDEO_START_MEMBER(dec8_state,gondo) VIDEO_START_MEMBER(dec8_state,garyoret) { + allocate_buffered_spriteram16(); m_fix_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(dec8_state::get_gondo_fix_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(dec8_state::get_gondo_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); -- cgit v1.2.3