diff --git a/src/mame/drivers/mcatadv.cpp b/src/mame/drivers/mcatadv.cpp index 0b638eb06e0..d3126c25f67 100644 --- a/src/mame/drivers/mcatadv.cpp +++ b/src/mame/drivers/mcatadv.cpp @@ -142,6 +142,7 @@ Stephh's notes (based on the games M68000 code and some tests) : #include "cpu/m68000/m68000.h" #include "cpu/z80/z80.h" +#include "machine/gen_latch.h" #include "sound/2610intf.h" #include "screen.h" #include "speaker.h" @@ -149,12 +150,6 @@ Stephh's notes (based on the games M68000 code and some tests) : /*** Main CPU ***/ -WRITE16_MEMBER(mcatadv_state::mcat_soundlatch_w) -{ - m_soundlatch->write(space, 0, data); - m_soundcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); -} - #if 0 // mcat only.. install read handler? WRITE16_MEMBER(mcatadv_state::mcat_coin_w) { @@ -174,6 +169,13 @@ READ16_MEMBER(mcatadv_state::mcat_wd_r) return 0xc00; } +template +WRITE16_MEMBER(mcatadv_state::vram_w) +{ + COMBINE_DATA(&m_vram[Chip][offset]); + m_tilemap[Chip]->mark_tile_dirty(offset / 2); +} + ADDRESS_MAP_START(mcatadv_state::mcatadv_map) AM_RANGE(0x000000, 0x0fffff) AM_ROM @@ -184,8 +186,8 @@ ADDRESS_MAP_START(mcatadv_state::mcatadv_map) AM_RANGE(0x200000, 0x200005) AM_RAM AM_SHARE("scroll1") AM_RANGE(0x300000, 0x300005) AM_RAM AM_SHARE("scroll2") - AM_RANGE(0x400000, 0x401fff) AM_RAM_WRITE(mcatadv_videoram1_w) AM_SHARE("videoram1") // Tilemap 0 - AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(mcatadv_videoram2_w) AM_SHARE("videoram2") // Tilemap 1 + AM_RANGE(0x400000, 0x401fff) AM_RAM_WRITE(vram_w<0>) AM_SHARE("vram_1") // Tilemap 0 + AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(vram_w<1>) AM_SHARE("vram_2") // Tilemap 1 AM_RANGE(0x600000, 0x601fff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette") AM_RANGE(0x602000, 0x602fff) AM_RAM // Bigger than needs to be? @@ -204,20 +206,20 @@ ADDRESS_MAP_START(mcatadv_state::mcatadv_map) AM_RANGE(0xb00018, 0xb00019) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w) // NOST Only AM_RANGE(0xb0001e, 0xb0001f) AM_READ(mcat_wd_r) // MCAT Only AM_RANGE(0xc00000, 0xc00001) AM_DEVREAD8("soundlatch2", generic_latch_8_device, read, 0x00ff) - AM_RANGE(0xc00000, 0xc00001) AM_WRITE(mcat_soundlatch_w) + AM_RANGE(0xc00000, 0xc00001) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff).cswidth(16) ADDRESS_MAP_END /*** Sound ***/ WRITE8_MEMBER(mcatadv_state::mcatadv_sound_bw_w) { - membank("bank1")->set_entry(data); + m_soundbank->set_entry(data); } ADDRESS_MAP_START(mcatadv_state::mcatadv_sound_map) AM_RANGE(0x0000, 0x3fff) AM_ROM // ROM - AM_RANGE(0x4000, 0xbfff) AM_ROMBANK("bank1") // ROM + AM_RANGE(0x4000, 0xbfff) AM_ROMBANK("soundbank") // ROM AM_RANGE(0xc000, 0xdfff) AM_RAM // RAM AM_RANGE(0xe000, 0xe003) AM_DEVREADWRITE("ymsnd", ym2610_device, read, write) AM_RANGE(0xf000, 0xf000) AM_WRITE(mcatadv_sound_bw_w) @@ -231,7 +233,7 @@ ADDRESS_MAP_END ADDRESS_MAP_START(mcatadv_state::nost_sound_map) AM_RANGE(0x0000, 0x7fff) AM_ROM // ROM - AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") // ROM + AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("soundbank") // ROM AM_RANGE(0xc000, 0xdfff) AM_RAM // RAM ADDRESS_MAP_END @@ -400,33 +402,31 @@ INPUT_PORTS_END /*** GFX Decode ***/ -static const gfx_layout mcatadv_tiles16x16x4_layout = +static const gfx_layout layout_16x16x4 = { 16,16, RGN_FRAC(1,1), 4, { STEP4(0,1) }, - { STEP8(0,4), STEP8(32*8,4) }, - { STEP8(0,32), STEP8(64*8,32) }, - 128*8 + { STEP8(0,4), STEP8(4*8*8,4) }, + { STEP8(0,4*8), STEP8(4*8*8*2,4*8) }, + 16*16*4 }; static GFXDECODE_START( mcatadv ) - GFXDECODE_ENTRY( "gfx2", 0, mcatadv_tiles16x16x4_layout, 0, 0x200 ) - GFXDECODE_ENTRY( "gfx3", 0, mcatadv_tiles16x16x4_layout, 0, 0x200 ) + GFXDECODE_ENTRY( "bg0", 0, layout_16x16x4, 0, 0x200 ) + GFXDECODE_ENTRY( "bg1", 0, layout_16x16x4, 0, 0x200 ) GFXDECODE_END void mcatadv_state::machine_start() { - uint8_t *ROM = memregion("soundcpu")->base(); + uint32_t max = memregion("soundcpu")->bytes()/0x4000; - membank("bank1")->configure_entries(0, 8, &ROM[0x10000], 0x4000); - membank("bank1")->set_entry(1); + m_soundbank->configure_entries(0, max, memregion("soundcpu")->base(), 0x4000); + m_soundbank->set_entry(1); - - save_item(NAME(m_palette_bank1)); - save_item(NAME(m_palette_bank2)); + save_item(NAME(m_palette_bank)); } MACHINE_CONFIG_START(mcatadv_state::mcatadv) @@ -460,17 +460,18 @@ MACHINE_CONFIG_START(mcatadv_state::mcatadv) /* sound hardware */ - MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_GENERIC_LATCH_8_ADD("soundlatch") + MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("audiocpu", INPUT_LINE_NMI)) + MCFG_GENERIC_LATCH_8_ADD("soundlatch2") MCFG_SOUND_ADD("ymsnd", YM2610, XTAL(16'000'000)/2) /* verified on pcb */ MCFG_YM2610_IRQ_HANDLER(INPUTLINE("soundcpu", 0)) - MCFG_SOUND_ROUTE(0, "lspeaker", 0.32) - MCFG_SOUND_ROUTE(0, "rspeaker", 0.32) - MCFG_SOUND_ROUTE(1, "lspeaker", 0.5) - MCFG_SOUND_ROUTE(2, "rspeaker", 0.5) + MCFG_SOUND_ROUTE(0, "mono", 0.32) + MCFG_SOUND_ROUTE(1, "mono", 0.5) + MCFG_SOUND_ROUTE(2, "mono", 0.5) MACHINE_CONFIG_END MACHINE_CONFIG_START(mcatadv_state::nost) @@ -480,14 +481,11 @@ MACHINE_CONFIG_START(mcatadv_state::nost) MCFG_CPU_PROGRAM_MAP(nost_sound_map) MCFG_CPU_IO_MAP(nost_sound_io_map) - MCFG_DEVICE_REMOVE("lspeaker") - MCFG_DEVICE_REMOVE("rspeaker") - MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_REPLACE("ymsnd", YM2610, XTAL(16'000'000)/2) /* verified on pcb */ - MCFG_YM2610_IRQ_HANDLER(INPUTLINE("soundcpu", 0)) - MCFG_SOUND_ROUTE(0, "mono", 0.2) - MCFG_SOUND_ROUTE(1, "mono", 0.5) - MCFG_SOUND_ROUTE(2, "mono", 0.5) + MCFG_YM2610_IRQ_HANDLER(INPUTLINE("soundcpu", 0)) + MCFG_SOUND_ROUTE(0, "mono", 0.2) + MCFG_SOUND_ROUTE(1, "mono", 0.5) + MCFG_SOUND_ROUTE(2, "mono", 0.5) MACHINE_CONFIG_END @@ -496,11 +494,10 @@ ROM_START( mcatadv ) ROM_LOAD16_BYTE( "mca-u30e", 0x00000, 0x80000, CRC(c62fbb65) SHA1(39a30a165d4811141db8687a4849626bef8e778e) ) ROM_LOAD16_BYTE( "mca-u29e", 0x00001, 0x80000, CRC(cf21227c) SHA1(4012811ebfe3c709ab49946f8138bc4bad881ef7) ) - ROM_REGION( 0x030000, "soundcpu", 0 ) /* Z80-A */ + ROM_REGION( 0x020000, "soundcpu", 0 ) /* Z80-A */ ROM_LOAD( "u9.bin", 0x00000, 0x20000, CRC(fda05171) SHA1(2c69292573ec35034572fa824c0cae2839d23919) ) - ROM_RELOAD( 0x10000, 0x20000 ) - ROM_REGION( 0x800000, "gfx1", ROMREGION_ERASEFF ) /* Sprites */ + ROM_REGION( 0x800000, "sprdata", ROMREGION_ERASEFF ) /* Sprites */ ROM_LOAD16_BYTE( "mca-u82.bin", 0x000000, 0x100000, CRC(5f01d746) SHA1(11b241456e15299912ee365eedb8f9d5e5ca875d) ) ROM_LOAD16_BYTE( "mca-u83.bin", 0x000001, 0x100000, CRC(4e1be5a6) SHA1(cb19aad42dba54d6a4a33859f27254c2a3271e8c) ) ROM_LOAD16_BYTE( "mca-u84.bin", 0x200000, 0x080000, CRC(df202790) SHA1(f6ae54e799af195860ed0ab3c85138cf2f10efa6) ) @@ -508,15 +505,15 @@ ROM_START( mcatadv ) ROM_LOAD16_BYTE( "mca-u86e", 0x400000, 0x080000, CRC(017bf1da) SHA1(f6446a7219275c0eff62129f59fdfa3a6a3e06c8) ) ROM_LOAD16_BYTE( "mca-u87e", 0x400001, 0x080000, CRC(bc9dc9b9) SHA1(f525c9f994d5107752aa4d3a499ee376ec75f42b) ) - ROM_REGION( 0x080000, "gfx2", 0 ) /* BG0 */ + ROM_REGION( 0x080000, "bg0", 0 ) /* BG0 */ ROM_LOAD( "mca-u58.bin", 0x000000, 0x080000, CRC(3a8186e2) SHA1(129c220d72608a8839f779ce1a6cfec8646dbf23) ) - ROM_REGION( 0x280000, "gfx3", 0 ) /* BG1 */ + ROM_REGION( 0x280000, "bg1", 0 ) /* BG1 */ ROM_LOAD( "mca-u60.bin", 0x000000, 0x100000, CRC(c8942614) SHA1(244fccb9abbb04e33839dd2cd0e2de430819a18c) ) ROM_LOAD( "mca-u61.bin", 0x100000, 0x100000, CRC(51af66c9) SHA1(1055cf78ea286f02003b0d1bf08c2d7829b36f90) ) ROM_LOAD( "mca-u100", 0x200000, 0x080000, CRC(b273f1b0) SHA1(39318fe2aaf2792b85426ec6791b3360ac964de3) ) - ROM_REGION( 0x80000, "ymsnd", 0 ) /* Samples - ADPCM or Delta-T? */ + ROM_REGION( 0x80000, "ymsnd", 0 ) /* Samples */ ROM_LOAD( "mca-u53.bin", 0x00000, 0x80000, CRC(64c76e05) SHA1(379cef5e0cba78d0e886c9cede41985850a3afb7) ) ROM_END @@ -525,11 +522,10 @@ ROM_START( mcatadvj ) ROM_LOAD16_BYTE( "u30.bin", 0x00000, 0x80000, CRC(05762f42) SHA1(3675fb606bf9d7be9462324e68263f4a6c2fea1c) ) ROM_LOAD16_BYTE( "u29.bin", 0x00001, 0x80000, CRC(4c59d648) SHA1(2ab77ea254f2c11fc016078cedcab2fffbe5ee1b) ) - ROM_REGION( 0x030000, "soundcpu", 0 ) /* Z80-A */ + ROM_REGION( 0x020000, "soundcpu", 0 ) /* Z80-A */ ROM_LOAD( "u9.bin", 0x00000, 0x20000, CRC(fda05171) SHA1(2c69292573ec35034572fa824c0cae2839d23919) ) - ROM_RELOAD( 0x10000, 0x20000 ) - ROM_REGION( 0x800000, "gfx1", ROMREGION_ERASEFF ) /* Sprites */ + ROM_REGION( 0x800000, "sprdata", ROMREGION_ERASEFF ) /* Sprites */ ROM_LOAD16_BYTE( "mca-u82.bin", 0x000000, 0x100000, CRC(5f01d746) SHA1(11b241456e15299912ee365eedb8f9d5e5ca875d) ) ROM_LOAD16_BYTE( "mca-u83.bin", 0x000001, 0x100000, CRC(4e1be5a6) SHA1(cb19aad42dba54d6a4a33859f27254c2a3271e8c) ) ROM_LOAD16_BYTE( "mca-u84.bin", 0x200000, 0x080000, CRC(df202790) SHA1(f6ae54e799af195860ed0ab3c85138cf2f10efa6) ) @@ -537,15 +533,15 @@ ROM_START( mcatadvj ) ROM_LOAD16_BYTE( "u86.bin", 0x400000, 0x080000, CRC(2d3725ed) SHA1(8b4c0f280eb901113d842848ffc26371be7b6067) ) ROM_LOAD16_BYTE( "u87.bin", 0x400001, 0x080000, CRC(4ddefe08) SHA1(5ade0a694d73f4f3891c1ab7757e37a88afcbf54) ) - ROM_REGION( 0x080000, "gfx2", 0 ) /* BG0 */ + ROM_REGION( 0x080000, "bg0", 0 ) /* BG0 */ ROM_LOAD( "mca-u58.bin", 0x000000, 0x080000, CRC(3a8186e2) SHA1(129c220d72608a8839f779ce1a6cfec8646dbf23) ) - ROM_REGION( 0x280000, "gfx3", 0 ) /* BG1 */ + ROM_REGION( 0x280000, "bg1", 0 ) /* BG1 */ ROM_LOAD( "mca-u60.bin", 0x000000, 0x100000, CRC(c8942614) SHA1(244fccb9abbb04e33839dd2cd0e2de430819a18c) ) ROM_LOAD( "mca-u61.bin", 0x100000, 0x100000, CRC(51af66c9) SHA1(1055cf78ea286f02003b0d1bf08c2d7829b36f90) ) ROM_LOAD( "u100.bin", 0x200000, 0x080000, CRC(e2c311da) SHA1(cc3217484524de94704869eaa9ce1b90393039d8) ) - ROM_REGION( 0x80000, "ymsnd", 0 ) /* Samples - ADPCM or Delta-T? */ + ROM_REGION( 0x80000, "ymsnd", 0 ) /* Samples */ ROM_LOAD( "mca-u53.bin", 0x00000, 0x80000, CRC(64c76e05) SHA1(379cef5e0cba78d0e886c9cede41985850a3afb7) ) ROM_END @@ -554,11 +550,10 @@ ROM_START( catt ) ROM_LOAD16_BYTE( "catt-u30.bin", 0x00000, 0x80000, CRC(8c921e1e) SHA1(2fdaa9b743e1731f3cfe9d8334f1b759cf46855d) ) ROM_LOAD16_BYTE( "catt-u29.bin", 0x00001, 0x80000, CRC(e725af6d) SHA1(78c08fa5744a6a953e13c0ff39736ccd4875fb72) ) - ROM_REGION( 0x030000, "soundcpu", 0 ) /* Z80-A */ + ROM_REGION( 0x020000, "soundcpu", 0 ) /* Z80-A */ ROM_LOAD( "u9.bin", 0x00000, 0x20000, CRC(fda05171) SHA1(2c69292573ec35034572fa824c0cae2839d23919) ) - ROM_RELOAD( 0x10000, 0x20000 ) - ROM_REGION( 0x800000, "gfx1", ROMREGION_ERASEFF ) /* Sprites */ + ROM_REGION( 0x800000, "sprdata", ROMREGION_ERASEFF ) /* Sprites */ ROM_LOAD16_BYTE( "mca-u82.bin", 0x000000, 0x100000, CRC(5f01d746) SHA1(11b241456e15299912ee365eedb8f9d5e5ca875d) ) ROM_LOAD16_BYTE( "mca-u83.bin", 0x000001, 0x100000, CRC(4e1be5a6) SHA1(cb19aad42dba54d6a4a33859f27254c2a3271e8c) ) ROM_LOAD16_BYTE( "u84.bin", 0x200000, 0x100000, CRC(843fd624) SHA1(2e16d8a909fe9447da37a87428bff0734af59a00) ) @@ -566,15 +561,15 @@ ROM_START( catt ) ROM_LOAD16_BYTE( "mca-u86e", 0x400000, 0x080000, CRC(017bf1da) SHA1(f6446a7219275c0eff62129f59fdfa3a6a3e06c8) ) ROM_LOAD16_BYTE( "mca-u87e", 0x400001, 0x080000, CRC(bc9dc9b9) SHA1(f525c9f994d5107752aa4d3a499ee376ec75f42b) ) - ROM_REGION( 0x100000, "gfx2", 0 ) /* BG0 */ + ROM_REGION( 0x100000, "bg0", 0 ) /* BG0 */ ROM_LOAD( "u58.bin", 0x00000, 0x100000, CRC(73c9343a) SHA1(9efdddbad6244c1ed267bd954563ab43a1017c96) ) - ROM_REGION( 0x280000, "gfx3", 0 ) /* BG1 */ + ROM_REGION( 0x280000, "bg1", 0 ) /* BG1 */ ROM_LOAD( "mca-u60.bin", 0x000000, 0x100000, CRC(c8942614) SHA1(244fccb9abbb04e33839dd2cd0e2de430819a18c) ) ROM_LOAD( "mca-u61.bin", 0x100000, 0x100000, CRC(51af66c9) SHA1(1055cf78ea286f02003b0d1bf08c2d7829b36f90) ) ROM_LOAD( "mca-u100", 0x200000, 0x080000, CRC(b273f1b0) SHA1(39318fe2aaf2792b85426ec6791b3360ac964de3) ) - ROM_REGION( 0x100000, "ymsnd", 0 ) /* Samples - ADPCM or Delta-T? */ + ROM_REGION( 0x100000, "ymsnd", 0 ) /* Samples */ ROM_LOAD( "u53.bin", 0x00000, 0x100000, CRC(99f2a624) SHA1(799e8e40e8bdcc8fa4cd763a366cc32473038a49) ) ROM_REGION( 0x0400, "plds", 0 ) @@ -587,11 +582,10 @@ ROM_START( nost ) ROM_LOAD16_BYTE( "nos-pe-u.bin", 0x00000, 0x80000, CRC(4b080149) SHA1(e1dbbe5bf554c7c5731cc3079850f257417e3caa) ) ROM_LOAD16_BYTE( "nos-po-u.bin", 0x00001, 0x80000, CRC(9e3cd6d9) SHA1(db5351ff9a05f602eceae62c0051c16ae0e4ead9) ) - ROM_REGION( 0x050000, "soundcpu", 0 ) /* Z80-A */ + ROM_REGION( 0x040000, "soundcpu", 0 ) /* Z80-A */ ROM_LOAD( "nos-ps.u9", 0x00000, 0x40000, CRC(832551e9) SHA1(86fc481b1849f378c88593594129197c69ea1359) ) - ROM_RELOAD( 0x10000, 0x40000 ) - ROM_REGION( 0x800000, "gfx1", ROMREGION_ERASEFF ) /* Sprites */ + ROM_REGION( 0x800000, "sprdata", ROMREGION_ERASEFF ) /* Sprites */ ROM_LOAD16_BYTE( "nos-se-0.u82", 0x000000, 0x100000, CRC(9d99108d) SHA1(466540989d7b1b7f6dc7acbae74f6a8201973d45) ) ROM_LOAD16_BYTE( "nos-so-0.u83", 0x000001, 0x100000, CRC(7df0fc7e) SHA1(2e064cb5367b2839d736d339c4f1a44785b4eedf) ) ROM_LOAD16_BYTE( "nos-se-1.u84", 0x200000, 0x100000, CRC(aad07607) SHA1(89c51a9cb6b8d8ed3a357f5d8ac8399ff1c7ad46) ) @@ -599,15 +593,15 @@ ROM_START( nost ) ROM_LOAD16_BYTE( "nos-se-2.u86", 0x400000, 0x080000, CRC(d99e6005) SHA1(49aae72111334ff5cd0fd86500882f559ff921f9) ) ROM_LOAD16_BYTE( "nos-so-2.u87", 0x400001, 0x080000, CRC(f60e8ef3) SHA1(4f7472b5a465e6cc6a5df520ebfe6a544739dd28) ) - ROM_REGION( 0x180000, "gfx2", 0 ) /* BG0 */ + ROM_REGION( 0x180000, "bg0", 0 ) /* BG0 */ ROM_LOAD( "nos-b0-0.u58", 0x000000, 0x100000, CRC(0214b0f2) SHA1(678fa3dc739323bda6d7bbb1c7a573c976d69356) ) ROM_LOAD( "nos-b0-1.u59", 0x100000, 0x080000, CRC(3f8b6b34) SHA1(94c48614782ce6405965bcf6029e3bcc24a6d84f) ) - ROM_REGION( 0x180000, "gfx3", 0 ) /* BG1 */ + ROM_REGION( 0x180000, "bg1", 0 ) /* BG1 */ ROM_LOAD( "nos-b1-0.u60", 0x000000, 0x100000, CRC(ba6fd0c7) SHA1(516d6e0c4dc6fb12ec9f30877ea1c582e7440a19) ) ROM_LOAD( "nos-b1-1.u61", 0x100000, 0x080000, CRC(dabd8009) SHA1(1862645b8d6216c3ec2b8dbf74816b8e29dea14f) ) - ROM_REGION( 0x100000, "ymsnd", 0 ) /* Samples - ADPCM or Delta-T? */ + ROM_REGION( 0x100000, "ymsnd", 0 ) /* Samples */ ROM_LOAD( "nossn-00.u53", 0x00000, 0x100000, CRC(3bd1bcbc) SHA1(1bcad43792e985402db4eca122676c2c555f3313) ) ROM_END @@ -616,11 +610,10 @@ ROM_START( nostj ) ROM_LOAD16_BYTE( "nos-pe-j.u30", 0x00000, 0x80000, CRC(4b080149) SHA1(e1dbbe5bf554c7c5731cc3079850f257417e3caa) ) ROM_LOAD16_BYTE( "nos-po-j.u29", 0x00001, 0x80000, CRC(7fe241de) SHA1(aa4ffd81cb73efc59690c2038ae9375021a775a4) ) - ROM_REGION( 0x050000, "soundcpu", 0 ) /* Z80-A */ + ROM_REGION( 0x040000, "soundcpu", 0 ) /* Z80-A */ ROM_LOAD( "nos-ps.u9", 0x00000, 0x40000, CRC(832551e9) SHA1(86fc481b1849f378c88593594129197c69ea1359) ) - ROM_RELOAD( 0x10000, 0x40000 ) - ROM_REGION( 0x800000, "gfx1", ROMREGION_ERASEFF ) /* Sprites */ + ROM_REGION( 0x800000, "sprdata", ROMREGION_ERASEFF ) /* Sprites */ ROM_LOAD16_BYTE( "nos-se-0.u82", 0x000000, 0x100000, CRC(9d99108d) SHA1(466540989d7b1b7f6dc7acbae74f6a8201973d45) ) ROM_LOAD16_BYTE( "nos-so-0.u83", 0x000001, 0x100000, CRC(7df0fc7e) SHA1(2e064cb5367b2839d736d339c4f1a44785b4eedf) ) ROM_LOAD16_BYTE( "nos-se-1.u84", 0x200000, 0x100000, CRC(aad07607) SHA1(89c51a9cb6b8d8ed3a357f5d8ac8399ff1c7ad46) ) @@ -628,15 +621,15 @@ ROM_START( nostj ) ROM_LOAD16_BYTE( "nos-se-2.u86", 0x400000, 0x080000, CRC(d99e6005) SHA1(49aae72111334ff5cd0fd86500882f559ff921f9) ) ROM_LOAD16_BYTE( "nos-so-2.u87", 0x400001, 0x080000, CRC(f60e8ef3) SHA1(4f7472b5a465e6cc6a5df520ebfe6a544739dd28) ) - ROM_REGION( 0x180000, "gfx2", 0 ) /* BG0 */ + ROM_REGION( 0x180000, "bg0", 0 ) /* BG0 */ ROM_LOAD( "nos-b0-0.u58", 0x000000, 0x100000, CRC(0214b0f2) SHA1(678fa3dc739323bda6d7bbb1c7a573c976d69356) ) ROM_LOAD( "nos-b0-1.u59", 0x100000, 0x080000, CRC(3f8b6b34) SHA1(94c48614782ce6405965bcf6029e3bcc24a6d84f) ) - ROM_REGION( 0x180000, "gfx3", 0 ) /* BG1 */ + ROM_REGION( 0x180000, "bg1", 0 ) /* BG1 */ ROM_LOAD( "nos-b1-0.u60", 0x000000, 0x100000, CRC(ba6fd0c7) SHA1(516d6e0c4dc6fb12ec9f30877ea1c582e7440a19) ) ROM_LOAD( "nos-b1-1.u61", 0x100000, 0x080000, CRC(dabd8009) SHA1(1862645b8d6216c3ec2b8dbf74816b8e29dea14f) ) - ROM_REGION( 0x100000, "ymsnd", 0 ) /* Samples - ADPCM or Delta-T? */ + ROM_REGION( 0x100000, "ymsnd", 0 ) /* Samples */ ROM_LOAD( "nossn-00.u53", 0x00000, 0x100000, CRC(3bd1bcbc) SHA1(1bcad43792e985402db4eca122676c2c555f3313) ) ROM_END @@ -645,11 +638,10 @@ ROM_START( nostk ) ROM_LOAD16_BYTE( "nos-pe-t.u30", 0x00000, 0x80000, CRC(bee5fbc8) SHA1(a8361fa004bb31471f973ece51a9a87b9f3438ab) ) ROM_LOAD16_BYTE( "nos-po-t.u29", 0x00001, 0x80000, CRC(f4736331) SHA1(7a6db2db1a4dbf105c22e15deff6f6032e04609c) ) - ROM_REGION( 0x050000, "soundcpu", 0 ) /* Z80-A */ + ROM_REGION( 0x040000, "soundcpu", 0 ) /* Z80-A */ ROM_LOAD( "nos-ps.u9", 0x00000, 0x40000, CRC(832551e9) SHA1(86fc481b1849f378c88593594129197c69ea1359) ) - ROM_RELOAD( 0x10000, 0x40000 ) - ROM_REGION( 0x800000, "gfx1", ROMREGION_ERASEFF ) /* Sprites */ + ROM_REGION( 0x800000, "sprdata", ROMREGION_ERASEFF ) /* Sprites */ ROM_LOAD16_BYTE( "nos-se-0.u82", 0x000000, 0x100000, CRC(9d99108d) SHA1(466540989d7b1b7f6dc7acbae74f6a8201973d45) ) ROM_LOAD16_BYTE( "nos-so-0.u83", 0x000001, 0x100000, CRC(7df0fc7e) SHA1(2e064cb5367b2839d736d339c4f1a44785b4eedf) ) ROM_LOAD16_BYTE( "nos-se-1.u84", 0x200000, 0x100000, CRC(aad07607) SHA1(89c51a9cb6b8d8ed3a357f5d8ac8399ff1c7ad46) ) @@ -657,15 +649,15 @@ ROM_START( nostk ) ROM_LOAD16_BYTE( "nos-se-2.u86", 0x400000, 0x080000, CRC(d99e6005) SHA1(49aae72111334ff5cd0fd86500882f559ff921f9) ) ROM_LOAD16_BYTE( "nos-so-2.u87", 0x400001, 0x080000, CRC(f60e8ef3) SHA1(4f7472b5a465e6cc6a5df520ebfe6a544739dd28) ) - ROM_REGION( 0x180000, "gfx2", 0 ) /* BG0 */ + ROM_REGION( 0x180000, "bg0", 0 ) /* BG0 */ ROM_LOAD( "nos-b0-0.u58", 0x000000, 0x100000, CRC(0214b0f2) SHA1(678fa3dc739323bda6d7bbb1c7a573c976d69356) ) ROM_LOAD( "nos-b0-1.u59", 0x100000, 0x080000, CRC(3f8b6b34) SHA1(94c48614782ce6405965bcf6029e3bcc24a6d84f) ) - ROM_REGION( 0x180000, "gfx3", 0 ) /* BG1 */ + ROM_REGION( 0x180000, "bg1", 0 ) /* BG1 */ ROM_LOAD( "nos-b1-0.u60", 0x000000, 0x100000, CRC(ba6fd0c7) SHA1(516d6e0c4dc6fb12ec9f30877ea1c582e7440a19) ) ROM_LOAD( "nos-b1-1.u61", 0x100000, 0x080000, CRC(dabd8009) SHA1(1862645b8d6216c3ec2b8dbf74816b8e29dea14f) ) - ROM_REGION( 0x100000, "ymsnd", 0 ) /* Samples - ADPCM or Delta-T? */ + ROM_REGION( 0x100000, "ymsnd", 0 ) /* Samples */ ROM_LOAD( "nossn-00.u53", 0x00000, 0x100000, CRC(3bd1bcbc) SHA1(1bcad43792e985402db4eca122676c2c555f3313) ) ROM_END diff --git a/src/mame/includes/mcatadv.h b/src/mame/includes/mcatadv.h index d243a287734..db8878cebf7 100644 --- a/src/mame/includes/mcatadv.h +++ b/src/mame/includes/mcatadv.h @@ -1,42 +1,40 @@ // license:BSD-3-Clause // copyright-holders:Paul Priest, David Haywood -#include "machine/gen_latch.h" #include "machine/watchdog.h" class mcatadv_state : public driver_device { public: mcatadv_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_videoram1(*this, "videoram1"), - m_videoram2(*this, "videoram2"), - m_scroll1(*this, "scroll1"), - m_scroll2(*this, "scroll2"), - m_spriteram(*this, "spriteram"), - m_vidregs(*this, "vidregs"), - m_maincpu(*this, "maincpu"), - m_soundcpu(*this, "soundcpu"), - m_watchdog(*this, "watchdog"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette"), - m_soundlatch(*this, "soundlatch") { } + : driver_device(mconfig, type, tag) + , m_vram(*this, "vram_%u", 1) + , m_scroll(*this, "scroll%u", 1) + , m_spriteram(*this, "spriteram") + , m_vidregs(*this, "vidregs") + , m_sprdata(*this, "sprdata") + , m_soundbank(*this, "soundbank") + , m_maincpu(*this, "maincpu") + , m_soundcpu(*this, "soundcpu") + , m_watchdog(*this, "watchdog") + , m_gfxdecode(*this, "gfxdecode") + , m_palette(*this, "palette") + { } /* memory pointers */ - required_shared_ptr m_videoram1; - required_shared_ptr m_videoram2; - required_shared_ptr m_scroll1; - required_shared_ptr m_scroll2; + required_shared_ptr_array m_vram; + required_shared_ptr_array m_scroll; required_shared_ptr m_spriteram; - std::unique_ptr m_spriteram_old; + std::unique_ptr m_spriteram_old; required_shared_ptr m_vidregs; - std::unique_ptr m_vidregs_old; + std::unique_ptr m_vidregs_old; + + required_region_ptr m_sprdata; + required_memory_bank m_soundbank; /* video-related */ - tilemap_t *m_tilemap1; - tilemap_t *m_tilemap2; - int m_palette_bank1; - int m_palette_bank2; + tilemap_t *m_tilemap[2]; + int m_palette_bank[2]; /* devices */ required_device m_maincpu; @@ -44,21 +42,17 @@ public: required_device m_watchdog; required_device m_gfxdecode; required_device m_palette; - required_device m_soundlatch; - DECLARE_WRITE16_MEMBER(mcat_soundlatch_w); DECLARE_READ16_MEMBER(mcat_wd_r); DECLARE_WRITE8_MEMBER(mcatadv_sound_bw_w); - DECLARE_WRITE16_MEMBER(mcatadv_videoram1_w); - DECLARE_WRITE16_MEMBER(mcatadv_videoram2_w); - TILE_GET_INFO_MEMBER(get_mcatadv_tile_info1); - TILE_GET_INFO_MEMBER(get_mcatadv_tile_info2); + template DECLARE_WRITE16_MEMBER(vram_w); + template TILE_GET_INFO_MEMBER(get_mcatadv_tile_info); virtual void machine_start() override; virtual void video_start() override; uint32_t screen_update_mcatadv(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); DECLARE_WRITE_LINE_MEMBER(screen_vblank_mcatadv); void draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect ); - void mcatadv_draw_tilemap_part( screen_device &screen, uint16_t* current_scroll, uint16_t* current_videoram1, int i, tilemap_t* current_tilemap, bitmap_ind16 &bitmap, const rectangle &cliprect ); + void mcatadv_draw_tilemap_part( screen_device &screen, int layer, int i, bitmap_ind16 &bitmap, const rectangle &cliprect ); void nost(machine_config &config); void mcatadv(machine_config &config); void mcatadv_map(address_map &map); diff --git a/src/mame/video/mcatadv.cpp b/src/mame/video/mcatadv.cpp index 8cef97d7b4a..db636e1386f 100644 --- a/src/mame/video/mcatadv.cpp +++ b/src/mame/video/mcatadv.cpp @@ -14,42 +14,21 @@ ToDo: Fix Sprites & Rowscroll/Select for Cocktail #include "includes/mcatadv.h" #include "screen.h" -TILE_GET_INFO_MEMBER(mcatadv_state::get_mcatadv_tile_info1) +#include + +template +TILE_GET_INFO_MEMBER(mcatadv_state::get_mcatadv_tile_info) { - int tileno = m_videoram1[tile_index * 2 + 1]; - int colour = (m_videoram1[tile_index * 2] & 0x3f00) >> 8; - int pri = (m_videoram1[tile_index * 2] & 0xc000) >> 14; + int tileno = m_vram[Chip][tile_index * 2 + 1]; + int colour = (m_vram[Chip][tile_index * 2] & 0x3f00) >> 8; + int pri = (m_vram[Chip][tile_index * 2] & 0xc000) >> 14; pri |= 0x8; - SET_TILE_INFO_MEMBER(0,tileno,colour + m_palette_bank1 * 0x40, 0); + SET_TILE_INFO_MEMBER(Chip,tileno,colour + m_palette_bank[Chip] * 0x40, 0); tileinfo.category = pri; } -WRITE16_MEMBER(mcatadv_state::mcatadv_videoram1_w) -{ - COMBINE_DATA(&m_videoram1[offset]); - m_tilemap1->mark_tile_dirty(offset / 2); -} - -TILE_GET_INFO_MEMBER(mcatadv_state::get_mcatadv_tile_info2) -{ - int tileno = m_videoram2[tile_index * 2 + 1]; - int colour = (m_videoram2[tile_index * 2] & 0x3f00) >> 8; - int pri = (m_videoram2[tile_index * 2] & 0xc000) >> 14; - - pri |= 0x8; - - SET_TILE_INFO_MEMBER(1, tileno, colour + m_palette_bank2 * 0x40, 0); - tileinfo.category = pri; -} - -WRITE16_MEMBER(mcatadv_state::mcatadv_videoram2_w) -{ - COMBINE_DATA(&m_videoram2[offset]); - m_tilemap2->mark_tile_dirty(offset / 2); -} - void mcatadv_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect ) { @@ -61,8 +40,7 @@ void mcatadv_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, c uint16_t *destline; uint8_t *priline; - uint8_t *sprdata = memregion("gfx1")->base(); - int sprmask = memregion("gfx1")->bytes()-1; + int sprmask = m_sprdata.bytes()-1; int xstart, xend, xinc; int ystart, yend, yinc; @@ -136,10 +114,9 @@ void mcatadv_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, c { int pridata = priline[drawxpos]; - if (!(pridata & 0x10)) // if we haven't already drawn a sprite pixel here (sprite masking) { - pix = sprdata[(offset / 2)&sprmask]; + pix = m_sprdata[(offset / 2)&sprmask]; if (offset & 1) pix = pix >> 4; @@ -155,7 +132,6 @@ void mcatadv_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, c } } - offset++; } } @@ -169,7 +145,7 @@ void mcatadv_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, c } } -void mcatadv_state::mcatadv_draw_tilemap_part( screen_device &screen, uint16_t* current_scroll, uint16_t* current_videoram1, int i, tilemap_t* current_tilemap, bitmap_ind16 &bitmap, const rectangle &cliprect ) +void mcatadv_state::mcatadv_draw_tilemap_part( screen_device &screen, int layer, int i, bitmap_ind16 &bitmap, const rectangle &cliprect ) { int flip; uint32_t drawline; @@ -185,31 +161,31 @@ void mcatadv_state::mcatadv_draw_tilemap_part( screen_device &screen, uint16_t* clip.min_y = drawline; clip.max_y = drawline; - scrollx = (current_scroll[0] & 0x1ff) - 0x194; - scrolly = (current_scroll[1] & 0x1ff) - 0x1df; + scrollx = (m_scroll[layer][0] & 0x1ff) - 0x194; + scrolly = (m_scroll[layer][1] & 0x1ff) - 0x1df; - if ((current_scroll[1] & 0x4000) == 0x4000) + if ((m_scroll[layer][1] & 0x4000) == 0x4000) { - int rowselect = current_videoram1[0x1000 / 2 + (((drawline + scrolly) & 0x1ff) * 2) + 1]; + int rowselect = m_vram[layer][0x1000 / 2 + (((drawline + scrolly) & 0x1ff) * 2) + 1]; scrolly = rowselect - drawline; } - if ((current_scroll[0] & 0x4000) == 0x4000) + if ((m_scroll[layer][0] & 0x4000) == 0x4000) { - int rowscroll = current_videoram1[0x1000 / 2 + (((drawline + scrolly) & 0x1ff) * 2) + 0]; + int rowscroll = m_vram[layer][0x1000 / 2 + (((drawline + scrolly) & 0x1ff) * 2) + 0]; scrollx += rowscroll; } /* Global Flip */ - if (!(current_scroll[0] & 0x8000)) scrollx -= 0x19; - if (!(current_scroll[1] & 0x8000)) scrolly -= 0x141; - flip = ((current_scroll[0] & 0x8000) ? 0 : TILEMAP_FLIPX) | ((current_scroll[1] & 0x8000) ? 0 : TILEMAP_FLIPY); + if (!(m_scroll[layer][0] & 0x8000)) scrollx -= 0x19; + if (!(m_scroll[layer][1] & 0x8000)) scrolly -= 0x141; + flip = ((m_scroll[layer][0] & 0x8000) ? 0 : TILEMAP_FLIPX) | ((m_scroll[layer][1] & 0x8000) ? 0 : TILEMAP_FLIPY); - current_tilemap->set_scrollx(0, scrollx); - current_tilemap->set_scrolly(0, scrolly); - current_tilemap->set_flip(flip); + m_tilemap[layer]->set_scrollx(0, scrollx); + m_tilemap[layer]->set_scrolly(0, scrolly); + m_tilemap[layer]->set_flip(flip); - current_tilemap->draw(screen, bitmap, clip, i, i); + m_tilemap[layer]->draw(screen, bitmap, clip, i, i); } } @@ -220,16 +196,16 @@ uint32_t mcatadv_state::screen_update_mcatadv(screen_device &screen, bitmap_ind1 bitmap.fill(0x3f0, cliprect); screen.priority().fill(0, cliprect); - if (m_scroll1[2] != m_palette_bank1) + if (m_scroll[0][2] != m_palette_bank[0]) { - m_palette_bank1 = m_scroll1[2]&0xf; - m_tilemap1->mark_all_dirty(); + m_palette_bank[0] = m_scroll[0][2]&0xf; + m_tilemap[0]->mark_all_dirty(); } - if (m_scroll2[2] != m_palette_bank2) + if (m_scroll[1][2] != m_palette_bank[1]) { - m_palette_bank2 = m_scroll2[2]&0xf; - m_tilemap2->mark_all_dirty(); + m_palette_bank[1] = m_scroll[1][2]&0xf; + m_tilemap[1]->mark_all_dirty(); } /* @@ -245,14 +221,14 @@ uint32_t mcatadv_state::screen_update_mcatadv(screen_device &screen, bitmap_ind1 #ifdef MAME_DEBUG if (!machine().input().code_pressed(KEYCODE_Q)) #endif - if (!(m_scroll1[2]&0x10)) - mcatadv_draw_tilemap_part(screen, m_scroll1, m_videoram1, i|0x8, m_tilemap1, bitmap, cliprect); + if (!(m_scroll[0][2]&0x10)) + mcatadv_draw_tilemap_part(screen, 0, i|0x8, bitmap, cliprect); #ifdef MAME_DEBUG if (!machine().input().code_pressed(KEYCODE_W)) #endif - if (!(m_scroll2[2]&0x10)) // tilemap flicker effect on large shadow, nost level 7 - mcatadv_draw_tilemap_part(screen, m_scroll2, m_videoram2, i|0x8, m_tilemap2, bitmap, cliprect); + if (!(m_scroll[1][2]&0x10)) // tilemap flicker effect on large shadow, nost level 7 + mcatadv_draw_tilemap_part(screen, 1, i|0x8, bitmap, cliprect); } g_profiler.start(PROFILER_USER1); @@ -266,20 +242,19 @@ uint32_t mcatadv_state::screen_update_mcatadv(screen_device &screen, bitmap_ind1 void mcatadv_state::video_start() { - m_tilemap1 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(mcatadv_state::get_mcatadv_tile_info1),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); - m_tilemap1->set_transparent_pen(0); + m_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(mcatadv_state::get_mcatadv_tile_info<0>),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); + m_tilemap[0]->set_transparent_pen(0); - m_tilemap2 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(mcatadv_state::get_mcatadv_tile_info2),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); - m_tilemap2->set_transparent_pen(0); + m_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(mcatadv_state::get_mcatadv_tile_info<1>),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); + m_tilemap[1]->set_transparent_pen(0); m_spriteram_old = make_unique_clear(m_spriteram.bytes() / 2); - m_vidregs_old = std::make_unique((0x0f + 1) / 2); + m_vidregs_old = std::make_unique(m_vidregs.bytes() / 2); - m_palette_bank1 = 0; - m_palette_bank2 = 0; + m_palette_bank[0] = m_palette_bank[1] = 0; save_pointer(NAME(m_spriteram_old.get()), m_spriteram.bytes() / 2); - save_pointer(NAME(m_vidregs_old.get()), (0x0f + 1) / 2); + save_pointer(NAME(m_vidregs_old.get()), m_vidregs.bytes() / 2); } WRITE_LINE_MEMBER(mcatadv_state::screen_vblank_mcatadv) @@ -287,7 +262,7 @@ WRITE_LINE_MEMBER(mcatadv_state::screen_vblank_mcatadv) // rising edge if (state) { - memcpy(m_spriteram_old.get(), m_spriteram, m_spriteram.bytes()); - memcpy(m_vidregs_old.get(), m_vidregs, 0xf); + std::copy(&m_spriteram[0], &m_spriteram[m_spriteram.bytes() / 2], &m_spriteram_old[0]); + std::copy(&m_vidregs[0], &m_vidregs[m_vidregs.bytes() / 2], &m_vidregs_old[0]); } }