diff options
Diffstat (limited to 'src/mame/drivers/rohga.cpp')
-rw-r--r-- | src/mame/drivers/rohga.cpp | 207 |
1 files changed, 76 insertions, 131 deletions
diff --git a/src/mame/drivers/rohga.cpp b/src/mame/drivers/rohga.cpp index b97ba1f3a02..2f15b703ceb 100644 --- a/src/mame/drivers/rohga.cpp +++ b/src/mame/drivers/rohga.cpp @@ -14,9 +14,6 @@ Todo: Sprite priority errors in Nitro Ball. - Todo: There is some kind of full-screen flash in Rohga when you die, - not emulated. - Schmeiser Robo runs on a slightly modified Rohga pcb. Emulation by Bryan McPhail, mish@tendril.co.uk @@ -116,11 +113,10 @@ #include "cpu/m68000/m68000.h" #include "cpu/h6280/h6280.h" #include "machine/decocrpt.h" -#include "machine/gen_latch.h" #include "sound/ym2151.h" -#include "sound/okim6295.h" #include "screen.h" #include "speaker.h" +#include <algorithm> READ16_MEMBER(rohga_state::rohga_irq_ack_r) @@ -139,13 +135,31 @@ WRITE16_MEMBER(rohga_state::wizdfire_irq_ack_w) /**********************************************************************************/ +READ16_MEMBER( rohga_state::ioprot_r ) +{ + int real_address = 0 + (offset *2); + int deco146_addr = bitswap<32>(real_address, /* NC */31,30,29,28,27,26,25,24,23,22,21,20,19,18, 13,12,11,/**/ 17,16,15,14, 10,9,8, 7,6,5,4, 3,2,1,0) & 0x7fff; + uint8_t cs = 0; + uint16_t data = m_ioprot->read_data( deco146_addr, mem_mask, cs ); + return data; +} + +WRITE16_MEMBER( rohga_state::ioprot_w ) +{ + int real_address = 0 + (offset *2); + int deco146_addr = bitswap<32>(real_address, /* NC */31,30,29,28,27,26,25,24,23,22,21,20,19,18, 13,12,11,/**/ 17,16,15,14, 10,9,8, 7,6,5,4, 3,2,1,0) & 0x7fff; + uint8_t cs = 0; + m_ioprot->write_data( space, deco146_addr, data, mem_mask, cs ); +} + + ADDRESS_MAP_START(rohga_state::rohga_map) AM_RANGE(0x000000, 0x1fffff) AM_ROM AM_RANGE(0x200000, 0x20000f) AM_DEVWRITE("tilegen1", deco16ic_device, pf_control_w) AM_RANGE(0x240000, 0x24000f) AM_DEVWRITE("tilegen2", deco16ic_device, pf_control_w) - AM_RANGE(0x280000, 0x283fff) AM_READWRITE(wf_protection_region_0_104_r,wf_protection_region_0_104_w) AM_SHARE("prot16ram") /* Protection device */ + AM_RANGE(0x280000, 0x283fff) AM_READWRITE(ioprot_r,ioprot_w) AM_SHARE("prot16ram") /* Protection device */ AM_RANGE(0x2c0000, 0x2c0001) AM_READ_PORT("DSW3") @@ -166,28 +180,11 @@ ADDRESS_MAP_START(rohga_state::rohga_map) AM_RANGE(0x3cc000, 0x3ccfff) AM_MIRROR(0x1000) AM_RAM AM_SHARE("pf3_rowscroll") AM_RANGE(0x3ce000, 0x3cefff) AM_MIRROR(0x1000) AM_RAM AM_SHARE("pf4_rowscroll") - AM_RANGE(0x3d0000, 0x3d07ff) AM_RAM AM_SHARE("spriteram") + AM_RANGE(0x3d0000, 0x3d07ff) AM_RAM AM_SHARE("spriteram1") AM_RANGE(0x3e0000, 0x3e1fff) AM_RAM_DEVWRITE("deco_common", decocomn_device, buffered_palette_w) AM_SHARE("paletteram") AM_RANGE(0x3f0000, 0x3f3fff) AM_RAM /* Main ram */ ADDRESS_MAP_END -READ16_MEMBER( rohga_state::wf_protection_region_0_104_r ) -{ - int real_address = 0 + (offset *2); - int deco146_addr = bitswap<32>(real_address, /* NC */31,30,29,28,27,26,25,24,23,22,21,20,19,18, 13,12,11,/**/ 17,16,15,14, 10,9,8, 7,6,5,4, 3,2,1,0) & 0x7fff; - uint8_t cs = 0; - uint16_t data = m_deco104->read_data( deco146_addr, mem_mask, cs ); - return data; -} - -WRITE16_MEMBER( rohga_state::wf_protection_region_0_104_w ) -{ - int real_address = 0 + (offset *2); - int deco146_addr = bitswap<32>(real_address, /* NC */31,30,29,28,27,26,25,24,23,22,21,20,19,18, 13,12,11,/**/ 17,16,15,14, 10,9,8, 7,6,5,4, 3,2,1,0) & 0x7fff; - uint8_t cs = 0; - m_deco104->write_data( space, deco146_addr, data, mem_mask, cs ); -} - ADDRESS_MAP_START(rohga_state::wizdfire_map) AM_RANGE(0x000000, 0x1fffff) AM_ROM @@ -208,8 +205,8 @@ ADDRESS_MAP_START(rohga_state::wizdfire_map) AM_RANGE(0x320002, 0x320003) AM_WRITENOP /* ? */ AM_RANGE(0x320004, 0x320005) AM_WRITE(wizdfire_irq_ack_w) /* VBL IRQ ack */ - AM_RANGE(0x340000, 0x3407ff) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x350000, 0x350001) AM_DEVWRITE("spriteram", buffered_spriteram16_device, write) /* Triggers DMA for spriteram */ + AM_RANGE(0x340000, 0x3407ff) AM_RAM AM_SHARE("spriteram1") + AM_RANGE(0x350000, 0x350001) AM_DEVWRITE("spriteram1", buffered_spriteram16_device, write) /* Triggers DMA for spriteram */ AM_RANGE(0x360000, 0x3607ff) AM_RAM AM_SHARE("spriteram2") AM_RANGE(0x370000, 0x370001) AM_DEVWRITE("spriteram2", buffered_spriteram16_device, write) /* Triggers DMA for spriteram */ @@ -217,28 +214,10 @@ ADDRESS_MAP_START(rohga_state::wizdfire_map) AM_RANGE(0x390008, 0x390009) AM_DEVWRITE("deco_common", decocomn_device, palette_dma_w) AM_RANGE(0xfdc000, 0xffffff) AM_RAM - AM_RANGE(0xfe4000, 0xfe7fff) AM_READWRITE(wf_protection_region_0_104_r,wf_protection_region_0_104_w) AM_SHARE("prot16ram") /* Protection device */ + AM_RANGE(0xfe4000, 0xfe7fff) AM_READWRITE(ioprot_r,ioprot_w) AM_SHARE("prot16ram") /* Protection device */ ADDRESS_MAP_END -READ16_MEMBER( rohga_state::nb_protection_region_0_146_r ) -{ - int real_address = 0 + (offset *2); - int deco146_addr = bitswap<32>(real_address, /* NC */31,30,29,28,27,26,25,24,23,22,21,20,19,18, 13,12,11,/**/ 17,16,15,14, 10,9,8, 7,6,5,4, 3,2,1,0) & 0x7fff; - uint8_t cs = 0; - uint16_t data = m_deco146->read_data( deco146_addr, mem_mask, cs ); - return data; -} - -WRITE16_MEMBER( rohga_state::nb_protection_region_0_146_w ) -{ - int real_address = 0 + (offset *2); - int deco146_addr = bitswap<32>(real_address, /* NC */31,30,29,28,27,26,25,24,23,22,21,20,19,18, 13,12,11,/**/ 17,16,15,14, 10,9,8, 7,6,5,4, 3,2,1,0) & 0x7fff; - uint8_t cs = 0; - m_deco146->write_data( space, deco146_addr, data, mem_mask, cs ); -} - - ADDRESS_MAP_START(rohga_state::nitrobal_map) AM_RANGE(0x000000, 0x1fffff) AM_ROM @@ -259,8 +238,8 @@ ADDRESS_MAP_START(rohga_state::nitrobal_map) AM_RANGE(0x320002, 0x320003) AM_WRITENOP /* ? */ AM_RANGE(0x320004, 0x320005) AM_WRITE(wizdfire_irq_ack_w) /* VBL IRQ ack */ - AM_RANGE(0x340000, 0x3407ff) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x350000, 0x350001) AM_DEVWRITE("spriteram", buffered_spriteram16_device, write) /* Triggers DMA for spriteram */ + AM_RANGE(0x340000, 0x3407ff) AM_RAM AM_SHARE("spriteram1") + AM_RANGE(0x350000, 0x350001) AM_DEVWRITE("spriteram1", buffered_spriteram16_device, write) /* Triggers DMA for spriteram */ AM_RANGE(0x360000, 0x3607ff) AM_RAM AM_SHARE("spriteram2") AM_RANGE(0x370000, 0x370001) AM_DEVWRITE("spriteram2", buffered_spriteram16_device, write) /* Triggers DMA for spriteram */ @@ -268,16 +247,17 @@ ADDRESS_MAP_START(rohga_state::nitrobal_map) AM_RANGE(0x390008, 0x390009) AM_DEVWRITE("deco_common", decocomn_device, palette_dma_w) AM_RANGE(0xfec000, 0xff3fff) AM_RAM - AM_RANGE(0xff4000, 0xff7fff) AM_READWRITE(nb_protection_region_0_146_r,nb_protection_region_0_146_w) AM_SHARE("prot16ram") /* Protection device */ + AM_RANGE(0xff4000, 0xff7fff) AM_READWRITE(ioprot_r,ioprot_w) AM_SHARE("prot16ram") /* Protection device */ -AM_RANGE(0xff8000, 0xffffff) AM_RAM + AM_RANGE(0xff8000, 0xffffff) AM_RAM ADDRESS_MAP_END + ADDRESS_MAP_START(rohga_state::hotb_base_map) AM_RANGE(0x000000, 0x0fffff) AM_ROM AM_RANGE(0x200000, 0x20000f) AM_DEVWRITE("tilegen1", deco16ic_device, pf_control_w) AM_RANGE(0x240000, 0x24000f) AM_DEVWRITE("tilegen2", deco16ic_device, pf_control_w) - AM_RANGE(0x280000, 0x283fff) AM_READWRITE(wf_protection_region_0_104_r,wf_protection_region_0_104_w) AM_SHARE("prot16ram") /* Protection device */ + AM_RANGE(0x280000, 0x283fff) AM_READWRITE(ioprot_r,ioprot_w) AM_SHARE("prot16ram") /* Protection device */ AM_RANGE(0x2c0000, 0x2c0001) AM_READ_PORT("DSW3") AM_RANGE(0x300000, 0x300001) AM_READ_PORT("DSW3") AM_WRITE(rohga_buffer_spriteram16_w) /* write 1 for sprite dma */ @@ -297,7 +277,7 @@ ADDRESS_MAP_START(rohga_state::hotb_base_map) AM_RANGE(0x3cc000, 0x3ccfff) AM_MIRROR(0x1000) AM_RAM AM_SHARE("pf3_rowscroll") AM_RANGE(0x3ce000, 0x3cefff) AM_MIRROR(0x1000) AM_RAM AM_SHARE("pf4_rowscroll") - AM_RANGE(0x3d0000, 0x3d07ff) AM_RAM AM_SHARE("spriteram") + AM_RANGE(0x3d0000, 0x3d07ff) AM_RAM AM_SHARE("spriteram1") AM_RANGE(0x3e0000, 0x3e1fff) AM_MIRROR(0x2000) AM_RAM_DEVWRITE("deco_common", decocomn_device, buffered_palette_w) AM_SHARE("paletteram") ADDRESS_MAP_END @@ -306,8 +286,6 @@ ADDRESS_MAP_START(rohga_state::schmeisr_map) AM_RANGE(0xff0000, 0xff7fff) AM_RAM /* Main ram */ ADDRESS_MAP_END - - ADDRESS_MAP_START(rohga_state::hangzo_map) AM_IMPORT_FROM(hotb_base_map) AM_RANGE(0x3f0000, 0x3f3fff) AM_RAM /* Main ram */ @@ -315,26 +293,14 @@ ADDRESS_MAP_END /******************************************************************************/ -ADDRESS_MAP_START(rohga_state::rohga_sound_map) - AM_RANGE(0x000000, 0x00ffff) AM_ROM - AM_RANGE(0x100000, 0x100001) AM_NOP - AM_RANGE(0x110000, 0x110001) AM_DEVREADWRITE("ymsnd", ym2151_device,read,write) - AM_RANGE(0x120000, 0x120001) AM_DEVREADWRITE("oki1", okim6295_device, read, write) - AM_RANGE(0x130000, 0x130001) AM_DEVREADWRITE("oki2", okim6295_device, read, write) - AM_RANGE(0x140000, 0x140000) AM_DEVREAD("ioprot104", deco104_device, soundlatch_r) - AM_RANGE(0x1f0000, 0x1f1fff) AM_RAMBANK("bank8") - AM_RANGE(0x1fec00, 0x1fec01) AM_DEVWRITE("audiocpu", h6280_device, timer_w) - AM_RANGE(0x1ff400, 0x1ff403) AM_DEVWRITE("audiocpu", h6280_device, irq_status_w) -ADDRESS_MAP_END - -ADDRESS_MAP_START(rohga_state::nitrobal_sound_map) +ADDRESS_MAP_START(rohga_state::sound_map) AM_RANGE(0x000000, 0x00ffff) AM_ROM AM_RANGE(0x100000, 0x100001) AM_NOP AM_RANGE(0x110000, 0x110001) AM_DEVREADWRITE("ymsnd", ym2151_device,read,write) AM_RANGE(0x120000, 0x120001) AM_DEVREADWRITE("oki1", okim6295_device, read, write) AM_RANGE(0x130000, 0x130001) AM_DEVREADWRITE("oki2", okim6295_device, read, write) - AM_RANGE(0x140000, 0x140000) AM_DEVREAD("ioprot", deco146_device, soundlatch_r) - AM_RANGE(0x1f0000, 0x1f1fff) AM_RAMBANK("bank8") + AM_RANGE(0x140000, 0x140000) AM_DEVREAD("ioprot", deco_146_base_device, soundlatch_r) + AM_RANGE(0x1f0000, 0x1f1fff) AM_RAM AM_RANGE(0x1fec00, 0x1fec01) AM_DEVWRITE("audiocpu", h6280_device, timer_w) AM_RANGE(0x1ff400, 0x1ff403) AM_DEVWRITE("audiocpu", h6280_device, irq_status_w) ADDRESS_MAP_END @@ -792,9 +758,9 @@ static const gfx_layout charlayout = RGN_FRAC(1,2), 4, { RGN_FRAC(1,2)+8, RGN_FRAC(1,2), 8, 0 }, - { 0, 1, 2, 3, 4, 5, 6, 7 }, - { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 }, - 16*8 /* every char takes 8 consecutive bytes */ + { STEP8(0,1) }, + { STEP8(0,8*2) }, + 8*8*2 /* every char takes 16 consecutive bytes */ }; static const gfx_layout spritelayout = @@ -803,11 +769,9 @@ static const gfx_layout spritelayout = RGN_FRAC(1,1), 4, { 16, 0, 24, 8 }, - { 64*8+0, 64*8+1, 64*8+2, 64*8+3, 64*8+4, 64*8+5, 64*8+6, 64*8+7, - 0, 1, 2, 3, 4, 5, 6, 7 }, - { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32, - 8*32, 9*32, 10*32, 11*32, 12*32, 13*32, 14*32, 15*32 }, - 128*8 + { STEP16(16*8*4,1), STEP8(0,1) }, + { STEP16(0,8*4) }, + 16*16*4 }; static const gfx_layout spritelayout_6bpp = @@ -816,22 +780,9 @@ static const gfx_layout spritelayout_6bpp = 4096*8, 6, { 0x400000*8+8, 0x400000*8, 0x200000*8+8, 0x200000*8, 8, 0 }, - { 32*8+0, 32*8+1, 32*8+2, 32*8+3, 32*8+4, 32*8+5, 32*8+6, 32*8+7, 0,1,2,3,4,5,6,7 }, - { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16, - 8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 }, - 64*8 -}; - -static const gfx_layout spritelayout2 = -{ - 16,16, - 4096*8, - 4, - { 0x200000*8+8, 0x200000*8, 8, 0 }, - { 32*8+0, 32*8+1, 32*8+2, 32*8+3, 32*8+4, 32*8+5, 32*8+6, 32*8+7, 0,1,2,3,4,5,6,7 }, - { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16, - 8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 }, - 64*8 + { STEP16(16*8*2,1), STEP8(0,1) }, + { STEP16(0,8*2) }, + 16*16*2 }; static const gfx_layout tilelayout = @@ -840,11 +791,9 @@ static const gfx_layout tilelayout = RGN_FRAC(1,2), 4, { RGN_FRAC(1,2)+8, RGN_FRAC(1,2), 8, 0 }, - { 32*8+0, 32*8+1, 32*8+2, 32*8+3, 32*8+4, 32*8+5, 32*8+6, 32*8+7, - 0, 1, 2, 3, 4, 5, 6, 7 }, - { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16, - 8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 }, - 64*8 + { STEP16(16*8*2,1), STEP8(0,1) }, + { STEP16(0,8*2) }, + 16*16*2 }; static GFXDECODE_START( rohga ) @@ -866,15 +815,15 @@ static GFXDECODE_START( schmeisr ) GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 32 ) /* Characters 8x8 */ GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 32 ) /* Tiles 16x16 */ GFXDECODE_ENTRY( "gfx3", 0, tilelayout, 512, 32 ) /* Tiles 16x16 */ - GFXDECODE_ENTRY( "gfx4", 0, spritelayout2, 1024, 64 ) /* Sprites 16x16 */ + GFXDECODE_ENTRY( "gfx4", 0, spritelayout, 1024, 64 ) /* Sprites 16x16 */ GFXDECODE_END /**********************************************************************************/ WRITE8_MEMBER(rohga_state::sound_bankswitch_w) { - m_oki1->set_rom_bank(BIT(data, 0)); - m_oki2->set_rom_bank(BIT(data, 1)); + m_oki[0]->set_rom_bank(BIT(data, 0)); + m_oki[1]->set_rom_bank(BIT(data, 1)); } /**********************************************************************************/ @@ -919,10 +868,10 @@ MACHINE_CONFIG_START(rohga_state::rohga) MCFG_CPU_VBLANK_INT_DRIVER("screen", rohga_state, irq6_line_assert) MCFG_CPU_ADD("audiocpu", H6280, 32220000/4/3) /* verified on pcb (8.050Mhz is XIN on pin 10 of H6280 */ - MCFG_CPU_PROGRAM_MAP(rohga_sound_map) + MCFG_CPU_PROGRAM_MAP(sound_map) /* video hardware */ - MCFG_BUFFERED_SPRITERAM16_ADD("spriteram") + MCFG_BUFFERED_SPRITERAM16_ADD("spriteram1") MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(58) @@ -976,7 +925,7 @@ MACHINE_CONFIG_START(rohga_state::rohga) MCFG_DECO_SPRITE_GFX_REGION(3) MCFG_DECO_SPRITE_GFXDECODE("gfxdecode") - MCFG_DECO104_ADD("ioprot104") + MCFG_DECO104_ADD("ioprot") MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS")) MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM")) MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW")) @@ -1008,10 +957,10 @@ MACHINE_CONFIG_START(rohga_state::wizdfire) MCFG_CPU_VBLANK_INT_DRIVER("screen", rohga_state, irq6_line_assert) MCFG_CPU_ADD("audiocpu", H6280,32220000/4/3) /* verified on pcb (8.050Mhz is XIN on pin 10 of H6280 */ - MCFG_CPU_PROGRAM_MAP(rohga_sound_map) + MCFG_CPU_PROGRAM_MAP(sound_map) /* video hardware */ - MCFG_BUFFERED_SPRITERAM16_ADD("spriteram") + MCFG_BUFFERED_SPRITERAM16_ADD("spriteram1") MCFG_BUFFERED_SPRITERAM16_ADD("spriteram2") MCFG_SCREEN_ADD("screen", RASTER) @@ -1067,7 +1016,7 @@ MACHINE_CONFIG_START(rohga_state::wizdfire) MCFG_DECO_SPRITE_GFX_REGION(4) MCFG_DECO_SPRITE_GFXDECODE("gfxdecode") - MCFG_DECO104_ADD("ioprot104") + MCFG_DECO104_ADD("ioprot") MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS")) MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM")) MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW")) @@ -1102,10 +1051,10 @@ MACHINE_CONFIG_START(rohga_state::nitrobal) MCFG_CPU_VBLANK_INT_DRIVER("screen", rohga_state, irq6_line_assert) MCFG_CPU_ADD("audiocpu", H6280,32220000/4/3) /* verified on pcb (8.050Mhz is XIN on pin 10 of H6280 */ - MCFG_CPU_PROGRAM_MAP(nitrobal_sound_map) + MCFG_CPU_PROGRAM_MAP(sound_map) /* video hardware */ - MCFG_BUFFERED_SPRITERAM16_ADD("spriteram") + MCFG_BUFFERED_SPRITERAM16_ADD("spriteram1") MCFG_BUFFERED_SPRITERAM16_ADD("spriteram2") MCFG_SCREEN_ADD("screen", RASTER) @@ -1197,10 +1146,10 @@ MACHINE_CONFIG_START(rohga_state::schmeisr) MCFG_CPU_VBLANK_INT_DRIVER("screen", rohga_state, irq6_line_assert) MCFG_CPU_ADD("audiocpu", H6280,32220000/4/3) /* verified on pcb (8.050Mhz is XIN on pin 10 of H6280 */ - MCFG_CPU_PROGRAM_MAP(rohga_sound_map) + MCFG_CPU_PROGRAM_MAP(sound_map) /* video hardware */ - MCFG_BUFFERED_SPRITERAM16_ADD("spriteram") + MCFG_BUFFERED_SPRITERAM16_ADD("spriteram1") MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(58) @@ -1254,7 +1203,7 @@ MACHINE_CONFIG_START(rohga_state::schmeisr) MCFG_DECO_SPRITE_GFX_REGION(3) MCFG_DECO_SPRITE_GFXDECODE("gfxdecode") - MCFG_DECO104_ADD("ioprot104") + MCFG_DECO104_ADD("ioprot") MCFG_DECO146_IN_PORTA_CB(IOPORT("INPUTS")) MCFG_DECO146_IN_PORTB_CB(IOPORT("SYSTEM")) MCFG_DECO146_IN_PORTC_CB(IOPORT("DSW")) @@ -1851,10 +1800,10 @@ ROM_START( schmeisr ) ROM_LOAD( "sr008.18d", 0x100000, 0x100000, CRC(a74cbc90) SHA1(1aabfec7cd64e7097aa55f0ddc5a2c9e1e25618a) ) ROM_REGION( 0x400000, "gfx4", 0 ) - ROM_LOAD( "sr004.19a", 0x000000, 0x100000, CRC(e25434a1) SHA1(136ebb36e9b6caeac885423e8f365008ddcea778) ) - ROM_LOAD( "sr005.20a", 0x100000, 0x100000, CRC(1630033b) SHA1(e2a5fd7f8839db9d5b41d3cada598a6c07a97368) ) - ROM_LOAD( "sr009.19d", 0x200000, 0x100000, CRC(7b9d982f) SHA1(55d89ee68ceaf3ca8059177721b6c9a16103b1b4) ) - ROM_LOAD( "sr010.20d", 0x300000, 0x100000, CRC(6e9e5352) SHA1(357659ff5ab9ce94df3313e9a60125769c7fe10a) ) + ROM_LOAD16_BYTE( "sr004.19a", 0x000001, 0x100000, CRC(e25434a1) SHA1(136ebb36e9b6caeac885423e8f365008ddcea778) ) + ROM_LOAD16_BYTE( "sr005.20a", 0x200001, 0x100000, CRC(1630033b) SHA1(e2a5fd7f8839db9d5b41d3cada598a6c07a97368) ) + ROM_LOAD16_BYTE( "sr009.19d", 0x000000, 0x100000, CRC(7b9d982f) SHA1(55d89ee68ceaf3ca8059177721b6c9a16103b1b4) ) + ROM_LOAD16_BYTE( "sr010.20d", 0x200000, 0x100000, CRC(6e9e5352) SHA1(357659ff5ab9ce94df3313e9a60125769c7fe10a) ) ROM_REGION(0x80000, "oki2", 0 ) /* Oki samples */ ROM_LOAD( "sr011.14p", 0x00000, 0x80000, CRC(81805616) SHA1(cdca2eb6d12924b9b578b4ce95d5816c7d82f345) ) @@ -1891,10 +1840,10 @@ ROM_START( hangzo ) /* Found on a Data East DE-0353-3 PCB */ ROM_LOAD( "BK23H 12.10.18D.574200", 0x100000, 0x080000, CRC(6a725fb2) SHA1(f4da4da62eb7e3ec2f1a54b57eaf94dc748dec68) ) ROM_REGION( 0x400000, "gfx4", 0 ) - ROM_LOAD( "OBJ01L 12.10.19A.27C4000", 0x000000, 0x080000, CRC(c141e310) SHA1(81eb0b977aaf44a110a663416e385ca617de8f28) ) /* 6bpp sprites */ - ROM_LOAD( "OBJ01H 12.10.20A.27C4000", 0x100000, 0x080000, CRC(6a7b4252) SHA1(4bd588bc96c07cc9367afdeab4976af6f8dcc823) ) - ROM_LOAD( "OBJ23L 12.10.19D.27C4000", 0x200000, 0x080000, CRC(0db6df6c) SHA1(fe7ef7b5a279656d9e46334c4833ab8911caa5db) ) - ROM_LOAD( "OBJ23H 12.10.20D.27C4000", 0x300000, 0x080000, CRC(165031a1) SHA1(0e88fe45fd78d352fdbd398c1d98feefe1b43917) ) + ROM_LOAD16_BYTE( "OBJ01L 12.10.19A.27C4000", 0x000001, 0x080000, CRC(c141e310) SHA1(81eb0b977aaf44a110a663416e385ca617de8f28) ) /* 4bpp sprites */ + ROM_LOAD16_BYTE( "OBJ01H 12.10.20A.27C4000", 0x200001, 0x080000, CRC(6a7b4252) SHA1(4bd588bc96c07cc9367afdeab4976af6f8dcc823) ) + ROM_LOAD16_BYTE( "OBJ23L 12.10.19D.27C4000", 0x000000, 0x080000, CRC(0db6df6c) SHA1(fe7ef7b5a279656d9e46334c4833ab8911caa5db) ) + ROM_LOAD16_BYTE( "OBJ23H 12.10.20D.27C4000", 0x200000, 0x080000, CRC(165031a1) SHA1(0e88fe45fd78d352fdbd398c1d98feefe1b43917) ) ROM_REGION(0x80000, "oki2", 0 ) /* Oki samples */ ROM_LOAD( "PCM16K 11.5.14P.574000", 0x00000, 0x80000, CRC(5b95c6c7) SHA1(587e7f87d085af3a5d24f317fffc1716c8027e43) ) @@ -1931,25 +1880,21 @@ DRIVER_INIT_MEMBER(rohga_state,nitrobal) deco74_decrypt_gfx(machine(), "gfx3"); } -DRIVER_INIT_MEMBER(rohga_state,schmeisr) +DRIVER_INIT_MEMBER(rohga_state,hangzo) { const uint8_t *src = memregion("gfx2")->base(); uint8_t *dst = memregion("gfx1")->base(); - - memcpy(dst, src, 0x20000); - memcpy(dst + 0x20000, src + 0x80000, 0x20000); - - deco74_decrypt_gfx(machine(), "gfx1"); - deco74_decrypt_gfx(machine(), "gfx2"); + + std::copy(&src[0], &src[0x20000], &dst[0]); + std::copy(&src[0x80000], &src[0xa0000], &dst[0x20000]); } -DRIVER_INIT_MEMBER(rohga_state,hangzo) +DRIVER_INIT_MEMBER(rohga_state,schmeisr) { - const uint8_t *src = memregion("gfx2")->base(); - uint8_t *dst = memregion("gfx1")->base(); + DRIVER_INIT_CALL(hangzo); - memcpy(dst, src, 0x20000); - memcpy(dst + 0x20000, src + 0x80000, 0x20000); + deco74_decrypt_gfx(machine(), "gfx1"); + deco74_decrypt_gfx(machine(), "gfx2"); } GAME( 1991, rohga, 0, rohga, rohga, rohga_state, rohga, ROT0, "Data East Corporation", "Rohga Armor Force (Asia/Europe v5.0)", MACHINE_SUPPORTS_SAVE ) |