From a7225d8818310f30372fd471355a46a9457bdb61 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Sat, 12 Mar 2022 08:10:34 +0100 Subject: - model2.cpp: dumped IO board ROM for srallycdx [Guru] - quizpun2.cpp, tail2nos.cpp: used finder for memory bank, small cleanups - aerofgt.cpp, cop01.cpp, dacholer.cpp, galivan.cpp, pzletime.cpp, taxidriv.cpp, terracre.cpp, welltris.cpp: removed some custom GFX decodes in favor of the ones provided in emu/video/generic.cpp --- scripts/target/mame/arcade.lua | 2 - src/mame/drivers/aerofgt.cpp | 21 +-- src/mame/drivers/cop01.cpp | 17 +- src/mame/drivers/dacholer.cpp | 35 +---- src/mame/drivers/galivan.cpp | 35 +---- src/mame/drivers/model2.cpp | 56 ++++--- src/mame/drivers/pzletime.cpp | 27 +--- src/mame/drivers/quizpun2.cpp | 145 ++++++++++------- src/mame/drivers/tail2nos.cpp | 348 ++++++++++++++++++++++++++++++++++------- src/mame/drivers/taxidriv.cpp | 19 +-- src/mame/drivers/terracre.cpp | 15 +- src/mame/drivers/welltris.cpp | 12 +- src/mame/includes/tail2nos.h | 84 ---------- src/mame/video/tail2nos.cpp | 177 --------------------- 14 files changed, 432 insertions(+), 561 deletions(-) delete mode 100644 src/mame/includes/tail2nos.h delete mode 100644 src/mame/video/tail2nos.cpp diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua index c5285f120ad..21fca0fd82f 100644 --- a/scripts/target/mame/arcade.lua +++ b/scripts/target/mame/arcade.lua @@ -4575,8 +4575,6 @@ files { MAME_DIR .. "src/mame/includes/suprslam.h", MAME_DIR .. "src/mame/video/suprslam.cpp", MAME_DIR .. "src/mame/drivers/tail2nos.cpp", - MAME_DIR .. "src/mame/includes/tail2nos.h", - MAME_DIR .. "src/mame/video/tail2nos.cpp", MAME_DIR .. "src/mame/drivers/taotaido.cpp", MAME_DIR .. "src/mame/includes/taotaido.h", MAME_DIR .. "src/mame/video/taotaido.cpp", diff --git a/src/mame/drivers/aerofgt.cpp b/src/mame/drivers/aerofgt.cpp index ebad14451eb..9c01b7cfaca 100644 --- a/src/mame/drivers/aerofgt.cpp +++ b/src/mame/drivers/aerofgt.cpp @@ -1229,17 +1229,6 @@ static INPUT_PORTS_START( wbbc97 ) PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_SERVICE1 ) INPUT_PORTS_END -static const gfx_layout pspikes_charlayout = -{ - 8,8, - RGN_FRAC(1,1), - 4, - { 0, 1, 2, 3 }, - { 1*4, 0*4, 3*4, 2*4, 5*4, 4*4, 7*4, 6*4 }, - { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 }, - 32*8 -}; - static const gfx_layout aerofgt_charlayout = { 8,8, @@ -1390,7 +1379,7 @@ static const gfx_layout kickball_spritelayout = }; static GFXDECODE_START( gfx_pspikes ) - GFXDECODE_ENTRY( "gfx1", 0, pspikes_charlayout, 0, 64 ) /* colors 0-1023 in 8 banks */ + GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_packed_lsb, 0, 64 ) /* colors 0-1023 in 8 banks */ GFXDECODE_ENTRY( "gfx2", 0, pspikes_spritelayout, 1024, 64 ) /* colors 1024-2047 in 4 banks */ GFXDECODE_END @@ -1405,13 +1394,13 @@ static GFXDECODE_START( gfx_spikes91 ) GFXDECODE_END static GFXDECODE_START( gfx_kickball ) - GFXDECODE_ENTRY( "gfx1", 0, pspikes_charlayout, 0, 64 ) /* colors 0-1023 in 8 banks */ + GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_packed_lsb, 0, 64 ) /* colors 0-1023 in 8 banks */ GFXDECODE_ENTRY( "gfx2", 0, kickball_spritelayout, 1024, 64 ) /* colors 1024-2047 in 4 banks */ GFXDECODE_END static GFXDECODE_START( gfx_turbofrc ) - GFXDECODE_ENTRY( "gfx1", 0, pspikes_charlayout, 0, 16 ) - GFXDECODE_ENTRY( "gfx2", 0, pspikes_charlayout, 256, 16 ) + GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_packed_lsb, 0, 16 ) + GFXDECODE_ENTRY( "gfx2", 0, gfx_8x8x4_packed_lsb, 256, 16 ) GFXDECODE_ENTRY( "spritegfx", 0, pspikes_spritelayout, 512, 16 ) GFXDECODE_ENTRY( "gfx4", 0, pspikes_spritelayout, 768, 16 ) GFXDECODE_END @@ -1437,7 +1426,7 @@ static GFXDECODE_START( gfx_aerfboo2 ) GFXDECODE_END static GFXDECODE_START( gfx_wbbc97 ) - GFXDECODE_ENTRY( "gfx1", 0, pspikes_charlayout, 0, 64 ) /* colors 0-1023 in 8 banks */ + GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_packed_lsb, 0, 64 ) /* colors 0-1023 in 8 banks */ GFXDECODE_ENTRY( "gfx2", 0, wbbc97_spritelayout, 1024, 64 ) /* colors 1024-2047 in 4 banks */ GFXDECODE_END diff --git a/src/mame/drivers/cop01.cpp b/src/mame/drivers/cop01.cpp index abeb582fc7d..e3ab4f4a5f8 100644 --- a/src/mame/drivers/cop01.cpp +++ b/src/mame/drivers/cop01.cpp @@ -376,17 +376,6 @@ INPUT_PORTS_END * *************************************/ -static const gfx_layout charlayout = -{ - 8,8, - RGN_FRAC(1,1), - 4, - { 0, 1, 2, 3 }, - { 1*4, 0*4, 3*4, 2*4, 5*4, 4*4, 7*4, 6*4 }, - { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 }, - 32*8 -}; - static const gfx_layout tilelayout = { 8,8, @@ -418,9 +407,9 @@ static const gfx_layout spritelayout = }; static GFXDECODE_START( gfx_cop01 ) - GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 1 ) - GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 16, 8 ) - GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 16+8*16, 16 ) + GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_packed_lsb, 0, 1 ) + GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 16, 8 ) + GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 16+8*16, 16 ) GFXDECODE_END diff --git a/src/mame/drivers/dacholer.cpp b/src/mame/drivers/dacholer.cpp index 455484c29fb..47e3dbbdde4 100644 --- a/src/mame/drivers/dacholer.cpp +++ b/src/mame/drivers/dacholer.cpp @@ -547,39 +547,16 @@ static INPUT_PORTS_START( itaten ) PORT_DIPSETTING( 0x80, DEF_STR( Cocktail ) ) INPUT_PORTS_END -static const gfx_layout charlayout = -{ - 8,8, - RGN_FRAC(1,1), - 4, - { 0, 1, 2, 3 }, - { 1*4, 0*4, 3*4, 2*4, 5*4, 4*4, 7*4, 6*4 }, - { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 }, - 32*8 -}; - -static const gfx_layout spritelayout = -{ - 16,16, - RGN_FRAC(1,1), - 4, - { 0, 1, 2, 3 }, - { 4,0,12,8,20,16,28,24,36,32,44,40,52,48,60,56 }, - { 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64, - 8*64, 9*64, 10*64, 11*64, 12*64, 13*64, 14*64, 15*64 }, - 16*16*4 -}; - static GFXDECODE_START( gfx_dacholer ) - GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0x00, 1 ) - GFXDECODE_ENTRY( "gfx2", 0, charlayout, 0x10, 1 ) - GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 0x10, 1 ) + GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_packed_lsb, 0x00, 1 ) + GFXDECODE_ENTRY( "gfx2", 0, gfx_8x8x4_packed_lsb, 0x10, 1 ) + GFXDECODE_ENTRY( "gfx3", 0, gfx_16x16x4_packed_lsb, 0x10, 1 ) GFXDECODE_END static GFXDECODE_START( gfx_itaten ) - GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0x00, 1 ) - GFXDECODE_ENTRY( "gfx2", 0, charlayout, 0x00, 1 ) - GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 0x10, 1 ) + GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_packed_lsb, 0x00, 1 ) + GFXDECODE_ENTRY( "gfx2", 0, gfx_8x8x4_packed_lsb, 0x00, 1 ) + GFXDECODE_ENTRY( "gfx3", 0, gfx_16x16x4_packed_lsb, 0x10, 1 ) GFXDECODE_END diff --git a/src/mame/drivers/galivan.cpp b/src/mame/drivers/galivan.cpp index d1427c45bad..f5f25ba76c0 100644 --- a/src/mame/drivers/galivan.cpp +++ b/src/mame/drivers/galivan.cpp @@ -338,29 +338,6 @@ INPUT_PORTS_END -static const gfx_layout charlayout = -{ - 8,8, - RGN_FRAC(1,1), - 4, - { 0, 1, 2, 3 }, - { 1*4, 0*4, 3*4, 2*4, 5*4, 4*4, 7*4, 6*4 }, - { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 }, - 32*8 -}; - -static const gfx_layout tilelayout = -{ - 16,16, - RGN_FRAC(1,1), - 4, - { 0, 1, 2, 3 }, - { 4,0,12,8,20,16,28,24,36,32,44,40,52,48,60,56 }, - { 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64, - 8*64, 9*64, 10*64, 11*64, 12*64, 13*64, 14*64, 15*64 }, - 16*16*4 -}; - static const gfx_layout spritelayout = { 16,16, @@ -375,15 +352,15 @@ static const gfx_layout spritelayout = }; static GFXDECODE_START( gfx_galivan ) - GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 16 ) - GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 16*16, 16 ) - GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 16*16+16*16, 256 ) + GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_packed_lsb, 0, 16 ) + GFXDECODE_ENTRY( "gfx2", 0, gfx_16x16x4_packed_lsb, 16*16, 16 ) + GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 16*16+16*16, 256 ) GFXDECODE_END static GFXDECODE_START( gfx_ninjemak ) - GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 8 ) - GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 8*16, 16 ) - GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 8*16+16*16, 256 ) + GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_packed_lsb, 0, 8 ) + GFXDECODE_ENTRY( "gfx2", 0, gfx_16x16x4_packed_lsb, 8*16, 16 ) + GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 8*16+16*16, 256 ) GFXDECODE_END diff --git a/src/mame/drivers/model2.cpp b/src/mame/drivers/model2.cpp index b83b50c76ac..698012e0d80 100644 --- a/src/mame/drivers/model2.cpp +++ b/src/mame/drivers/model2.cpp @@ -3128,7 +3128,7 @@ ROM_START( zeroguna ) /* Zero Gunner (Export), Model 2A */ ROM_LOAD32_WORD("mpr-20296.10", 0x000000, 0x400000, CRC(072d8a5e) SHA1(7f69c90dd3c3e6e522d1065b3c4b09434cb4e634) ) ROM_LOAD32_WORD("mpr-20297.11", 0x000002, 0x400000, CRC(ba6a825b) SHA1(670a86c3a1a78550c760cc66c0a6181928fb9054) ) ROM_LOAD32_WORD("mpr-20294.8", 0x800000, 0x400000, CRC(a0bd1474) SHA1(c0c032adac69bd545e3aab481878b08f3c3edab8) ) - ROM_LOAD32_WORD("mpr-20295.9", 0x800002, 0x400000, CRC(c548cced) SHA1(d34f2fc9b4481c75a6824aa4bdd3f1884188d35b) ) + ROM_LOAD32_WORD("mpr-20295.9", 0x800002, 0x400000, CRC(c548cced) SHA1(d34f2fc9b4481c75a6824aa4bdd3f1884188d35b) ) ROM_REGION32_LE( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) (COPRO socket) @@ -3664,8 +3664,7 @@ ROM_START( srallycdx ) /* Sega Rally Championship DX Revision A, Model 2A - Sing ROM_LOAD32_WORD( "mpr-17755.29", 0x000002, 0x200000, CRC(2a6e7da4) SHA1(e60803ae951489fe47d66731d15c32249ca547b4) ) ROM_REGION( 0x010000, "drivecpu", 0 ) // Drive I/O program - ROM_LOAD( "epr-17762.ic12", 0x000000, 0x010000, NO_DUMP ) /* Need to verify actual EPR-xxxx number, might be EPR-17759 */ - ROM_LOAD( "epr-17891.ic12", 0x000000, 0x010000, CRC(9a33b437) SHA1(3e8f210aa5159e78f640126cb5ce7f05f22560f2) ) /* REMOVE when EPR-17762 is dumped & added */ + ROM_LOAD( "epr-17182.ic12", 0x000000, 0x010000, CRC(08d3db42) SHA1(57d902a835f4f738b9383760073193d206cf6343) ) ROM_REGION( 0x2000000, "polygons", 0 ) // Models ROM_LOAD32_WORD( "mpr-17748.16", 0x000000, 0x200000, CRC(3148a2b2) SHA1(283cc49bfb6c6381a7ead9273fd097dca5b981b6) ) @@ -3711,8 +3710,7 @@ ROM_START( srallycdxa ) // Sega Rally Championship DX, Model 2A? - Single player ROM_LOAD32_WORD( "mpr-17755.29", 0x000002, 0x200000, CRC(2a6e7da4) SHA1(e60803ae951489fe47d66731d15c32249ca547b4) ) // ROM_REGION( 0x010000, "drivecpu", 0 ) // Drive I/O program - ROM_LOAD( "epr-17762.ic12", 0x000000, 0x010000, NO_DUMP ) /* Need to verify actual EPR-xxxx number, might be EPR-17759 */ - ROM_LOAD( "epr-17891.ic12", 0x000000, 0x010000, CRC(9a33b437) SHA1(3e8f210aa5159e78f640126cb5ce7f05f22560f2) ) /* REMOVE when EPR-17762 is dumped & added */ + ROM_LOAD( "epr-17182.ic12", 0x000000, 0x010000, CRC(08d3db42) SHA1(57d902a835f4f738b9383760073193d206cf6343) ) ROM_REGION( 0x2000000, "polygons", 0 ) // Models ROM_LOAD32_WORD( "mpr-17748.16", 0x000000, 0x200000, CRC(3148a2b2) SHA1(283cc49bfb6c6381a7ead9273fd097dca5b981b6) ) @@ -3786,12 +3784,12 @@ ROM_START( manxtt ) /* Manx TT Superbike Twin Revision D, Model 2A - Can be set ROM_REGION32_LE( 0x2400000, "main_data", 0 ) // Data ROM_LOAD32_WORD( "mpr-18751.10", 0x000000, 0x200000, CRC(773ad43d) SHA1(4d1601dc08a08b724e33e7cd90a4f22e18cfed9c) ) ROM_LOAD32_WORD( "mpr-18752.11", 0x000002, 0x200000, CRC(4da3719e) SHA1(24007e4ae3ba1a06321328d14e2bd6002fa1936e) ) - ROM_LOAD32_WORD( "mpr-18749.8", 0x400000, 0x200000, CRC(c3fe0eea) SHA1(ada21405a136935ac4da1a3535c25fccf903f2d1) ) - ROM_LOAD32_WORD( "mpr-18750.9", 0x400002, 0x200000, CRC(40b55494) SHA1(d98ae5518c5d31b155b1a7c4f7d9d67f44d7beae) ) - ROM_LOAD32_WORD( "mpr-18747.6", 0x800000, 0x200000, CRC(a65ec1e8) SHA1(92636bdff0ae4cdb43dfc2986fad2d1b59469323) ) - ROM_LOAD32_WORD( "mpr-18748.7", 0x800002, 0x200000, CRC(375e3748) SHA1(6c2e903dd073b130bcabb347631b876dc868b494) ) - ROM_LOAD32_WORD( "epr-18862.4", 0xc00000, 0x080000, CRC(9adc3a30) SHA1(029db946338f8e0eccace8590082cc96bdf13e31) ) - ROM_LOAD32_WORD( "epr-18863.5", 0xc00002, 0x080000, CRC(603742e9) SHA1(f78a5f7e582d313880c734158bb0fa68b256a58a) ) + ROM_LOAD32_WORD( "mpr-18749.8", 0x400000, 0x200000, CRC(c3fe0eea) SHA1(ada21405a136935ac4da1a3535c25fccf903f2d1) ) + ROM_LOAD32_WORD( "mpr-18750.9", 0x400002, 0x200000, CRC(40b55494) SHA1(d98ae5518c5d31b155b1a7c4f7d9d67f44d7beae) ) + ROM_LOAD32_WORD( "mpr-18747.6", 0x800000, 0x200000, CRC(a65ec1e8) SHA1(92636bdff0ae4cdb43dfc2986fad2d1b59469323) ) + ROM_LOAD32_WORD( "mpr-18748.7", 0x800002, 0x200000, CRC(375e3748) SHA1(6c2e903dd073b130bcabb347631b876dc868b494) ) + ROM_LOAD32_WORD( "epr-18862.4", 0xc00000, 0x080000, CRC(9adc3a30) SHA1(029db946338f8e0eccace8590082cc96bdf13e31) ) + ROM_LOAD32_WORD( "epr-18863.5", 0xc00002, 0x080000, CRC(603742e9) SHA1(f78a5f7e582d313880c734158bb0fa68b256a58a) ) ROM_COPY( "main_data", 0xc00000, 0xd00000, 0x100000 ) ROM_COPY( "main_data", 0xc00000, 0xe00000, 0x100000 ) ROM_COPY( "main_data", 0xc00000, 0xf00000, 0x100000 ) @@ -3844,14 +3842,14 @@ ROM_START( manxttc ) /* Manx TT Superbike Twin Revision C, Model 2A */ ROM_LOAD32_WORD( "epr-18825c.15", 0x040002, 0x020000, CRC(f88b036c) SHA1(f6196e8da5e6579fe3fa5c24ab9538964c98e267) ) ROM_REGION32_LE( 0x2400000, "main_data", 0 ) // Data - ROM_LOAD32_WORD( "mpr-18751.10", 0x000000, 0x200000, CRC(773ad43d) SHA1(4d1601dc08a08b724e33e7cd90a4f22e18cfed9c) ) - ROM_LOAD32_WORD( "mpr-18752.11", 0x000002, 0x200000, CRC(4da3719e) SHA1(24007e4ae3ba1a06321328d14e2bd6002fa1936e) ) - ROM_LOAD32_WORD( "mpr-18749.8", 0x400000, 0x200000, CRC(c3fe0eea) SHA1(ada21405a136935ac4da1a3535c25fccf903f2d1) ) - ROM_LOAD32_WORD( "mpr-18750.9", 0x400002, 0x200000, CRC(40b55494) SHA1(d98ae5518c5d31b155b1a7c4f7d9d67f44d7beae) ) - ROM_LOAD32_WORD( "mpr-18747.6", 0x800000, 0x200000, CRC(a65ec1e8) SHA1(92636bdff0ae4cdb43dfc2986fad2d1b59469323) ) - ROM_LOAD32_WORD( "mpr-18748.7", 0x800002, 0x200000, CRC(375e3748) SHA1(6c2e903dd073b130bcabb347631b876dc868b494) ) - ROM_LOAD32_WORD( "epr-18862.4", 0xc00000, 0x080000, CRC(9adc3a30) SHA1(029db946338f8e0eccace8590082cc96bdf13e31) ) - ROM_LOAD32_WORD( "epr-18863.5", 0xc00002, 0x080000, CRC(603742e9) SHA1(f78a5f7e582d313880c734158bb0fa68b256a58a) ) + ROM_LOAD32_WORD( "mpr-18751.10", 0x000000, 0x200000, CRC(773ad43d) SHA1(4d1601dc08a08b724e33e7cd90a4f22e18cfed9c) ) + ROM_LOAD32_WORD( "mpr-18752.11", 0x000002, 0x200000, CRC(4da3719e) SHA1(24007e4ae3ba1a06321328d14e2bd6002fa1936e) ) + ROM_LOAD32_WORD( "mpr-18749.8", 0x400000, 0x200000, CRC(c3fe0eea) SHA1(ada21405a136935ac4da1a3535c25fccf903f2d1) ) + ROM_LOAD32_WORD( "mpr-18750.9", 0x400002, 0x200000, CRC(40b55494) SHA1(d98ae5518c5d31b155b1a7c4f7d9d67f44d7beae) ) + ROM_LOAD32_WORD( "mpr-18747.6", 0x800000, 0x200000, CRC(a65ec1e8) SHA1(92636bdff0ae4cdb43dfc2986fad2d1b59469323) ) + ROM_LOAD32_WORD( "mpr-18748.7", 0x800002, 0x200000, CRC(375e3748) SHA1(6c2e903dd073b130bcabb347631b876dc868b494) ) + ROM_LOAD32_WORD( "epr-18862.4", 0xc00000, 0x080000, CRC(9adc3a30) SHA1(029db946338f8e0eccace8590082cc96bdf13e31) ) + ROM_LOAD32_WORD( "epr-18863.5", 0xc00002, 0x080000, CRC(603742e9) SHA1(f78a5f7e582d313880c734158bb0fa68b256a58a) ) ROM_COPY( "main_data", 0xc00000, 0xd00000, 0x100000 ) ROM_COPY( "main_data", 0xc00000, 0xe00000, 0x100000 ) ROM_COPY( "main_data", 0xc00000, 0xf00000, 0x100000 ) @@ -4114,14 +4112,14 @@ Model2c: epr-20952.15 epr-20956.15 epr-20981.15 epr-20948.15 epr-20953.16 epr-20957.16 epr-20982.16 epr-20949.16 -* The numbers for the Japan sets were not listed, but are shown for comparision +* The numbers for the Japan sets were not listed, but are shown for comparison In Dynamite Deka 2 manual 420-6406-01 it states there are C-CRX versions of the USA, Export and Korea versions as well as the Japan version. */ -ROM_START( dynamcop ) /* Dynamite Cop (Export), Model 2A, Sega Game ID# 833-11341, ROM board ID# 834-11342 */ +ROM_START( dynamcop ) /* Dynamite Cop (Export), Model 2A, Sega Game ID# 833-13461-02 DYNAMITE COP A-CRX EXP, ROM board ID# 834-13462-02 */ ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program ROM_LOAD32_WORD("epr-20930.12", 0x000000, 0x080000, CRC(b8fc8ff7) SHA1(53b0f9dc8494effa077170ddced2d95f43a5f134) ) ROM_LOAD32_WORD("epr-20931.13", 0x000002, 0x080000, CRC(89d13f88) SHA1(5e266b5e153a0d9a57360cfd1af81e3a58a2fb7d) ) @@ -4172,7 +4170,7 @@ ROM_START( dynamcop ) /* Dynamite Cop (Export), Model 2A, Sega Game ID# 833-1134 ROM_PARAMETER( ":315_5881:key", "2c2a4a93" ) ROM_END -ROM_START( dyndeka2 ) /* Dynamite Deka 2 (Japan), Model 2A, Sega Game ID# 833-13461 DYNAMITE DEKA 2 A-CRX */ +ROM_START( dyndeka2 ) /* Dynamite Deka 2 (Japan), Model 2A, Sega Game ID# 833-13461 DYNAMITE DEKA 2 A-CRX, ROM board ID# 834-13462 */ ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program ROM_LOAD32_WORD("epr-20922.12", 0x000000, 0x080000, CRC(0a8b5604) SHA1(4076998fc600c1df3bb5ef48d42681c01e651495) ) ROM_LOAD32_WORD("epr-20923.13", 0x000002, 0x080000, CRC(83be73d4) SHA1(1404a9c79cd2bae13f60e5e008307417324c3666) ) @@ -5722,9 +5720,9 @@ The Dead or Alive set below is also known to have genuine Tecmo labels: Sega ID# 836-12884 DEAD OR ALIVE */ -ROM_START( doaa ) /* Dead or Alive Revision A, Model 2A, Sega Game ID# 833-11341, ROM board ID# 834-11342, 837-12880 security board */ +ROM_START( doaa ) /* Dead or Alive Revision A, Model 2A, Sega Game ID# 836-12884 DEAD OR ALIVE, ROM board ID# 838-12885, 837-12880 security board */ ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program - ROM_LOAD32_WORD("epr-19310a.12", 0x000000, 0x080000, CRC(06486f7a) SHA1(b3e14103570e5f45aed16e1c158e469bc85002ae) ) + ROM_LOAD32_WORD("epr-19310a.12", 0x000000, 0x080000, CRC(06486f7a) SHA1(b3e14103570e5f45aed16e1c158e469bc85002ae) ) // Game Mode Settings : Nation : defaults to Japan, can select Japan, U.S.A. & Export ROM_LOAD32_WORD("epr-19311a.13", 0x000002, 0x080000, CRC(1be62912) SHA1(dcc2df8e28e1a107867f74248e6ffcac83afe7c0) ) ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data @@ -5765,9 +5763,9 @@ ROM_START( doaa ) /* Dead or Alive Revision A, Model 2A, Sega Game ID# 833-11341 MODEL2A_VID_BOARD ROM_END -ROM_START( doaab ) /* Dead or Alive Revision A, Model 2A, Sega Game ID# 833-?????, ROM board ID# 838-12885-02, 837-12880 security board, defaults to export and can't be changed in test mode */ +ROM_START( doaab ) /* Dead or Alive Revision A, Model 2A, Sega Game ID# 836-12884-02 DEAD OR ALIVE, ROM board ID# 838-12885-02, 837-12880 security board */ ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program - ROM_LOAD32_WORD("epr-19383a.12", 0x000000, 0x080000, CRC(42e61481) SHA1(ecee88b17d60924c63d01ff72acb186350265e0a) ) + ROM_LOAD32_WORD("epr-19383a.12", 0x000000, 0x080000, CRC(42e61481) SHA1(ecee88b17d60924c63d01ff72acb186350265e0a) ) // Game Mode Settings : Nation : defaults to Export and can't be changed in test mode ROM_LOAD32_WORD("epr-19384a.13", 0x000002, 0x080000, CRC(034a3ab9) SHA1(a01d2f0a4accfdf892228b65c25e2ad9144ecf59) ) ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data @@ -5811,7 +5809,7 @@ ROM_END ROM_START( doa ) /* Dead or Alive Jan 10 1997, probably Revision C, Model 2B, 837-12880 security board */ ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program // ROMs have hand written labels - "EPR-19379B / EPR-19380B, 96/12/6", probably was reused and reprogrammed to newer revision - ROM_LOAD32_WORD("epr-19379c.15", 0x000000, 0x080000, CRC(5cc62fbe) SHA1(a1489b92f32bcd16cca10017975beb62fc27a060) ) + ROM_LOAD32_WORD("epr-19379c.15", 0x000000, 0x080000, CRC(5cc62fbe) SHA1(a1489b92f32bcd16cca10017975beb62fc27a060) ) // Game Mode Settings : Nation : defaults to Japan, can select Japan, U.S.A. & Export ROM_LOAD32_WORD("epr-19380c.16", 0x000002, 0x080000, CRC(58cfeaa9) SHA1(4319c22b8ebcff152676b62b5b1d4c1c7ce64fa6) ) ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data @@ -5849,9 +5847,9 @@ ROM_START( doa ) /* Dead or Alive Jan 10 1997, probably Revision C, Model 2B, 83 ROM_LOAD16_WORD_SWAP("mpr-19332.34", 0x600000, 0x200000, CRC(2877f96f) SHA1(00e5677da30527b862e238f10762a5cbfbabde2b) ) ROM_END -ROM_START( doab ) /* Dead or Alive Revision B, Model 2B, 837-12880 security board */ +ROM_START( doab ) /* Dead or Alive Dec 6 1996, Revision B, Model 2B, 837-12880 security board */ ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program - ROM_LOAD32_WORD("epr-19379b.15", 0x000000, 0x080000, CRC(8a10a944) SHA1(c675a344f74d0118907fb5292495883c0c30c719) ) + ROM_LOAD32_WORD("epr-19379b.15", 0x000000, 0x080000, CRC(8a10a944) SHA1(c675a344f74d0118907fb5292495883c0c30c719) ) // Game Mode Settings : Nation : defaults to Japan, can select Japan, U.S.A. & Export ROM_LOAD32_WORD("epr-19380b.16", 0x000002, 0x080000, CRC(766c1ec8) SHA1(49250886f66db9fd37d88bc22c8f22046f74f043) ) ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data diff --git a/src/mame/drivers/pzletime.cpp b/src/mame/drivers/pzletime.cpp index 60c7cbc6caa..f602c28a581 100644 --- a/src/mame/drivers/pzletime.cpp +++ b/src/mame/drivers/pzletime.cpp @@ -266,32 +266,11 @@ static INPUT_PORTS_START( pzletime ) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START2 ) INPUT_PORTS_END -static const gfx_layout layout8x8 = -{ - 8,8, - RGN_FRAC(1,1), - 4, - { 0, 1, 2, 3 }, - { 1*4, 0*4, 3*4, 2*4, 5*4, 4*4, 7*4, 6*4 }, - { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 }, - 32*8 -}; - -static const gfx_layout layout16x16 = -{ - 16,16, - RGN_FRAC(1,1), - 4, - { 0, 1, 2, 3 }, - { 4, 0, 12, 8, 20, 16, 28, 24, 16*32+4, 16*32+0, 16*32+12, 16*32+8, 16*32+20, 16*32+16, 16*32+28, 16*32+24 }, - { 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 }, - 32*32 -}; static GFXDECODE_START( gfx_pzletime ) - GFXDECODE_ENTRY( "gfx1", 0, layout8x8, 0x100, 0x10 ) - GFXDECODE_ENTRY( "gfx2", 0, layout16x16, 0x200, 0x10 ) - GFXDECODE_ENTRY( "gfx3", 0, layout16x16, 0x000, 0x10 ) + GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_packed_lsb, 0x100, 0x10 ) + GFXDECODE_ENTRY( "gfx2", 0, gfx_8x8x4_col_2x2_group_packed_lsb, 0x200, 0x10 ) + GFXDECODE_ENTRY( "gfx3", 0, gfx_8x8x4_col_2x2_group_packed_lsb, 0x000, 0x10 ) GFXDECODE_END void pzletime_state::machine_start() diff --git a/src/mame/drivers/quizpun2.cpp b/src/mame/drivers/quizpun2.cpp index 805eb85698a..e68823671f7 100644 --- a/src/mame/drivers/quizpun2.cpp +++ b/src/mame/drivers/quizpun2.cpp @@ -6,7 +6,7 @@ Quiz Punch II (C)1989 Space Computer Driver by Luca Elia -- It uses an unknown DIP40 device for protection, that supplies +- It uses a COP MCU for protection, that supplies the address to jump to (same as mosaic.cpp) and handles the EEPROM PCB Layout @@ -97,6 +97,19 @@ Notes: #include "speaker.h" #include "tilemap.h" +// configurable logging +#define LOG_SCROLL (1U << 1) +#define LOG_MCU (1U << 2) + +//#define VERBOSE (LOG_GENERAL | LOG_SCROLL | LOG_MCU) + +#include "logmacro.h" + +#define LOGSCROLL(...) LOGMASKED(LOG_SCROLL, __VA_ARGS__) +#define LOGMCU(...) LOGMASKED(LOG_MCU, __VA_ARGS__) + + +namespace { class quizpun2_state : public driver_device { @@ -110,7 +123,8 @@ public: m_soundlatch(*this, "soundlatch"), m_eeprom(*this, "eeprom"), m_fg_ram(*this, "fg_ram"), - m_bg_ram(*this, "bg_ram") + m_bg_ram(*this, "bg_ram"), + m_mainbank(*this, "mainbank") { } void quizpun2_base(machine_config &config); @@ -131,6 +145,7 @@ private: required_device m_eeprom; required_shared_ptr m_fg_ram; required_shared_ptr m_bg_ram; + required_memory_bank m_mainbank; tilemap_t *m_bg_tmap; tilemap_t *m_fg_tmap; @@ -150,8 +165,10 @@ private: void rombank_w(uint8_t data); void irq_ack(uint8_t data); void soundlatch_w(uint8_t data); + uint8_t protection_r(); + void protection_w(uint8_t data); - uint32_t screen_update_quizpun2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); // quizpun2 void cop_d_w(uint8_t data); @@ -170,14 +187,11 @@ private: uint8_t quizpun_68705_port_c_r(); void quizpun_68705_port_c_w(uint8_t data); - uint8_t quizpun_protection_r(); - void quizpun_protection_w(uint8_t data); - void quizpun2_cop_map(address_map &map); - void quizpun2_io_map(address_map &map); - void quizpun2_map(address_map &map); - void quizpun2_sound_io_map(address_map &map); - void quizpun2_sound_map(address_map &map); + void io_map(address_map &map); + void main_map(address_map &map); + void sound_io_map(address_map &map); + void sound_map(address_map &map); }; /*************************************************************************** @@ -186,27 +200,27 @@ private: TILE_GET_INFO_MEMBER(quizpun2_state::get_bg_tile_info) { - uint16_t code = m_bg_ram[ tile_index * 2 ] + m_bg_ram[ tile_index * 2 + 1 ] * 256; + uint16_t code = m_bg_ram[tile_index * 2] + m_bg_ram[tile_index * 2 + 1] * 256; tileinfo.set(0, code, code >> 12, TILE_FLIPXY((code & 0x800) >> 11)); } TILE_GET_INFO_MEMBER(quizpun2_state::get_fg_tile_info) { - uint16_t code = m_fg_ram[ tile_index * 4 ]/* + m_fg_ram[ tile_index * 4 + 1 ] * 256*/; - uint8_t color = m_fg_ram[ tile_index * 4 + 2 ]; + uint16_t code = m_fg_ram[tile_index * 4]; // + m_fg_ram[tile_index * 4 + 1] * 256 + uint8_t color = m_fg_ram[tile_index * 4 + 2]; tileinfo.set(1, code, color / 2, 0); } void quizpun2_state::bg_ram_w(offs_t offset, uint8_t data) { m_bg_ram[offset] = data; - m_bg_tmap->mark_tile_dirty(offset/2); + m_bg_tmap->mark_tile_dirty(offset / 2); } void quizpun2_state::fg_ram_w(offs_t offset, uint8_t data) { m_fg_ram[offset] = data; - m_fg_tmap->mark_tile_dirty(offset/4); + m_fg_tmap->mark_tile_dirty(offset / 4); } void quizpun2_state::scroll_w(uint8_t data) @@ -216,14 +230,16 @@ void quizpun2_state::scroll_w(uint8_t data) void quizpun2_state::video_start() { - m_bg_tmap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(quizpun2_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS,16,16,0x20,0x40); - m_fg_tmap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(quizpun2_state::get_fg_tile_info)), TILEMAP_SCAN_ROWS,16,16,0x20,0x40); + m_bg_tmap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(quizpun2_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 16, 16, 0x20, 0x40); + m_fg_tmap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(quizpun2_state::get_fg_tile_info)), TILEMAP_SCAN_ROWS, 16, 16, 0x20, 0x40); m_bg_tmap->set_transparent_pen(0); m_fg_tmap->set_transparent_pen(0); + + save_item(NAME(m_scroll)); } -uint32_t quizpun2_state::screen_update_quizpun2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +uint32_t quizpun2_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { int layers_ctrl = -1; @@ -248,7 +264,7 @@ uint32_t quizpun2_state::screen_update_quizpun2(screen_device &screen, bitmap_in if (layers_ctrl & 2) m_fg_tmap->draw(screen, bitmap, cliprect, 0, 0); -// popmessage("BG: %x FG: %x", bg_scroll, fg_scroll); + LOGSCROLL("BG: %x FG: %x", bg_scroll, fg_scroll); return 0; } @@ -266,12 +282,18 @@ uint32_t quizpun2_state::screen_update_quizpun2(screen_device &screen, bitmap_in void quizpun2_state::machine_start() { uint8_t *ROM = memregion("maincpu")->base(); - membank("bank1")->configure_entries(0, 0x20, &ROM[0x10000], 0x2000); + m_mainbank->configure_entries(0, 0x20, &ROM[0x10000], 0x2000); + + save_item(NAME(m_mcu_data_port)); + save_item(NAME(m_mcu_control_port)); + save_item(NAME(m_mcu_pending)); + save_item(NAME(m_mcu_repeat)); + save_item(NAME(m_mcu_written)); } void quizpun2_state::machine_reset() { - membank("bank1")->set_entry(0); + m_mainbank->set_entry(0); // quizpun2 service mode needs this to fix a race condition since the MCU takes a while to start up m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); @@ -319,7 +341,7 @@ uint8_t quizpun2_state::cop_in_r() void quizpun2_state::rombank_w(uint8_t data) { - membank("bank1")->set_entry(data & 0x1f); + m_mainbank->set_entry(data & 0x1f); } void quizpun2_state::irq_ack(uint8_t data) @@ -333,19 +355,19 @@ void quizpun2_state::soundlatch_w(uint8_t data) m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } -void quizpun2_state::quizpun2_map(address_map &map) +void quizpun2_state::main_map(address_map &map) { map(0x0000, 0x7fff).rom(); - map(0x8000, 0x9fff).bankr("bank1"); + map(0x8000, 0x9fff).bankr(m_mainbank); - map(0xa000, 0xbfff).ram().w(FUNC(quizpun2_state::fg_ram_w)).share("fg_ram"); - map(0xc000, 0xcfff).ram().w(FUNC(quizpun2_state::bg_ram_w)).share("bg_ram"); + map(0xa000, 0xbfff).ram().w(FUNC(quizpun2_state::fg_ram_w)).share(m_fg_ram); + map(0xc000, 0xcfff).ram().w(FUNC(quizpun2_state::bg_ram_w)).share(m_bg_ram); map(0xd000, 0xd3ff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette"); map(0xe000, 0xffff).ram(); } -void quizpun2_state::quizpun2_io_map(address_map &map) +void quizpun2_state::io_map(address_map &map) { map.global_mask(0xff); map(0x40, 0x40).w(FUNC(quizpun2_state::irq_ack)); @@ -355,7 +377,7 @@ void quizpun2_state::quizpun2_io_map(address_map &map) map(0x80, 0x80).portr("DSW"); map(0x90, 0x90).portr("IN0"); map(0xa0, 0xa0).portr("IN1"); - map(0xe0, 0xe0).rw(FUNC(quizpun2_state::quizpun_protection_r), FUNC(quizpun2_state::quizpun_protection_w)); + map(0xe0, 0xe0).rw(FUNC(quizpun2_state::protection_r), FUNC(quizpun2_state::protection_w)); } void quizpun2_state::quizpun2_cop_map(address_map &map) @@ -365,19 +387,19 @@ void quizpun2_state::quizpun2_cop_map(address_map &map) // quizpun -uint8_t quizpun2_state::quizpun_protection_r() +uint8_t quizpun2_state::protection_r() { -// logerror("%s: port A read %02x\n", machine().describe_context(), m_mcu_data_port); + LOGMCU("%s: port A read %02x\n", machine().describe_context(), m_mcu_data_port); /* - Upon reading this port the main cpu is stalled until the mcu provides the value to read + Upon reading this port the main CPU is stalled until the MCU provides the value to read and explicitly un-stalls the z80. Is this possible under the current MAME architecture? ** ghastly hack ** - The first read stalls the main cpu and triggers the mcu, it returns an incorrect value. - It also decrements the main cpu PC back to the start of the read instruction. - When the mcu un-stalls the Z80, the read happens again, returning the correct mcu-provided value this time + The first read stalls the main CPU and triggers the MCU, it returns an incorrect value. + It also decrements the main CPU PC back to the start of the read instruction. + When the MCU un-stalls the Z80, the read happens again, returning the correct MCU-provided value this time */ if (m_mcu_repeat) { @@ -397,9 +419,9 @@ uint8_t quizpun2_state::quizpun_protection_r() return m_mcu_data_port; } -void quizpun2_state::quizpun_protection_w(uint8_t data) +void quizpun2_state::protection_w(uint8_t data) { -// logerror("%s: port A write %02x\n", machine().describe_context(), data); + LOGMCU("%s: port A write %02x\n", machine().describe_context(), data); m_mcu_data_port = data; m_mcu_pending = true; m_mcu_written = true; @@ -411,27 +433,27 @@ void quizpun2_state::quizpun_protection_w(uint8_t data) Memory Maps - MCU ***************************************************************************/ -// Port A - I/O with main cpu (data) +// Port A - I/O with main CPU (data) uint8_t quizpun2_state::quizpun_68705_port_a_r() { -// logerror("%s: port A read %02x\n", machine().describe_context(), m_mcu_data_port); + LOGMCU("%s: port A read %02x\n", machine().describe_context(), m_mcu_data_port); return m_mcu_data_port; } void quizpun2_state::quizpun_68705_port_a_w(uint8_t data) { -// logerror("%s: port A write %02x\n", machine().describe_context(), data); + LOGMCU("%s: port A write %02x\n", machine().describe_context(), data); m_mcu_data_port = data; } -// Port B - I/O with main cpu (status) +// Port B - I/O with main CPU (status) uint8_t quizpun2_state::quizpun_68705_port_b_r() { // bit 3: 0 = pending - // bit 1: 0 = main cpu has written - // bit 0: 0 = main cpu is reading + // bit 1: 0 = main CPU has written + // bit 0: 0 = main CPU is reading uint8_t const ret = 0xf4 | @@ -439,15 +461,15 @@ uint8_t quizpun2_state::quizpun_68705_port_b_r() ((m_mcu_pending && m_mcu_written) ? 0 : (1 << 1)) | ((m_mcu_pending && !m_mcu_written) ? 0 : (1 << 0)); -// logerror("%s: port B read %02x\n", machine().describe_context(), ret); + LOGMCU("%s: port B read %02x\n", machine().describe_context(), ret); return ret; } void quizpun2_state::quizpun_68705_port_b_w(uint8_t data) { -// logerror("%s: port B write %02x\n", machine().describe_context(), data); + LOGMCU("%s: port B write %02x\n", machine().describe_context(), data); - // bit 2: 0->1 run main cpu + // bit 2: 0->1 run main CPU if (!BIT(m_mcu_control_port, 2) && BIT(data, 2)) { @@ -462,7 +484,7 @@ void quizpun2_state::quizpun_68705_port_b_w(uint8_t data) uint8_t quizpun2_state::quizpun_68705_port_c_r() { uint8_t const ret = 0xf7 | (m_eeprom->do_read() ? 0x08 : 0x00); -// logerror("%s: port C read %02x\n", machine().describe_context(), ret); + LOGMCU("%s: port C read %02x\n", machine().describe_context(), ret); return ret; } @@ -477,20 +499,20 @@ void quizpun2_state::quizpun_68705_port_c_w(uint8_t data) // clock line asserted: write latch or select next bit to read m_eeprom->clk_write(BIT(data, 0) ? ASSERT_LINE : CLEAR_LINE); -// logerror("%s: port C write %02x\n", machine().describe_context(), data); + LOGMCU("%s: port C write %02x\n", machine().describe_context(), data); } /*************************************************************************** Memory Maps - Sound CPU ***************************************************************************/ -void quizpun2_state::quizpun2_sound_map(address_map &map) +void quizpun2_state::sound_map(address_map &map) { map(0x0000, 0xf7ff).rom(); map(0xf800, 0xffff).ram(); } -void quizpun2_state::quizpun2_sound_io_map(address_map &map) +void quizpun2_state::sound_io_map(address_map &map) { map.global_mask(0xff); map(0x00, 0x00).nopw(); // IRQ end @@ -582,33 +604,33 @@ GFXDECODE_END void quizpun2_state::quizpun2_base(machine_config &config) { - /* basic machine hardware */ + // basic machine hardware Z80(config, m_maincpu, XTAL(8'000'000) / 2); // 4 MHz - m_maincpu->set_addrmap(AS_PROGRAM, &quizpun2_state::quizpun2_map); - m_maincpu->set_addrmap(AS_IO, &quizpun2_state::quizpun2_io_map); + m_maincpu->set_addrmap(AS_PROGRAM, &quizpun2_state::main_map); + m_maincpu->set_addrmap(AS_IO, &quizpun2_state::io_map); m_maincpu->set_vblank_int("screen", FUNC(quizpun2_state::irq0_line_hold)); Z80(config, m_audiocpu, XTAL(8'000'000) / 2); // 4 MHz - m_audiocpu->set_addrmap(AS_PROGRAM, &quizpun2_state::quizpun2_sound_map); - m_audiocpu->set_addrmap(AS_IO, &quizpun2_state::quizpun2_sound_io_map); + m_audiocpu->set_addrmap(AS_PROGRAM, &quizpun2_state::sound_map); + m_audiocpu->set_addrmap(AS_IO, &quizpun2_state::sound_io_map); m_audiocpu->set_vblank_int("screen", FUNC(quizpun2_state::irq0_line_hold)); // NMI generated by main CPU EEPROM_93C46_16BIT(config, "eeprom"); - /* video hardware */ + // video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(60); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_size(384, 256); screen.set_visarea(0, 384-1, 0, 256-1); - screen.set_screen_update(FUNC(quizpun2_state::screen_update_quizpun2)); + screen.set_screen_update(FUNC(quizpun2_state::screen_update)); screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_quizpun2); PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 0x200); - /* sound hardware */ + // sound hardware SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch); @@ -655,7 +677,7 @@ ROM_START( quizpun2 ) ROM_REGION( 0x50000, "maincpu", 0 ) ROM_LOAD( "u111", 0x00000, 0x08000, CRC(14bdaffc) SHA1(7fb5988ea565d7cbe3c8e2cdb9402d3cf81507d7) ) ROM_LOAD( "u117", 0x10000, 0x10000, CRC(e9d1d05e) SHA1(c24104e023d12db8c9199d3e18750414aa511e40) ) - ROM_LOAD( "u118", 0x20000, 0x10000, CRC(1f232707) SHA1(3f5f44611f25c556521333f15daf3e2128cc1538) BAD_DUMP ) // fails rom check + ROM_LOAD( "u118", 0x20000, 0x10000, CRC(1f232707) SHA1(3f5f44611f25c556521333f15daf3e2128cc1538) BAD_DUMP ) // fails ROM check ROM_LOAD( "u119", 0x30000, 0x10000, CRC(c73b82f7) SHA1(d5c683440e9db46dd5859b519b3f32da80352626) ) ROM_LOAD( "u120", 0x40000, 0x10000, CRC(700648b8) SHA1(dfa824166dfe7361d7c2ab0d8aa1ada882916cb9) ) @@ -718,5 +740,8 @@ ROM_START( quizpun ) ROM_LOAD( "02.u2", 0x10000, 0x10000, CRC(9294a19c) SHA1(cd7109262e5f68b946c84aa390108bcc47ee1300) ) ROM_END -GAME( 1988, quizpun, 0, quizpun, quizpun2, quizpun2_state, empty_init, ROT270, "Space Computer", "Quiz Punch", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) -GAME( 1989, quizpun2, 0, quizpun2, quizpun2, quizpun2_state, empty_init, ROT270, "Space Computer", "Quiz Punch II", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) +} // anonymous namespace + + +GAME( 1988, quizpun, 0, quizpun, quizpun2, quizpun2_state, empty_init, ROT270, "Space Computer", "Quiz Punch", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1989, quizpun2, 0, quizpun2, quizpun2, quizpun2_state, empty_init, ROT270, "Space Computer", "Quiz Punch II", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/tail2nos.cpp b/src/mame/drivers/tail2nos.cpp index 4daf77f0b74..c753a932849 100644 --- a/src/mame/drivers/tail2nos.cpp +++ b/src/mame/drivers/tail2nos.cpp @@ -9,21 +9,265 @@ keep pressed F1 during POST to see ROM/RAM/GFX tests. The "Country" DIP switch is intended to select the game's title. - However, the program code in all known sets forces it to one value or - the other whenever it reads it outside of service mode. + However, the program code in all but one of the known sets forces it to + one value or the other whenever it reads it outside of service mode. ***************************************************************************/ #include "emu.h" -#include "includes/tail2nos.h" + +#include "video/k051316.h" +#include "video/vsystem_gga.h" #include "cpu/m68000/m68000.h" #include "cpu/z80/z80.h" +#include "machine/6850acia.h" +#include "machine/gen_latch.h" #include "sound/ymopn.h" -#include "video/vsystem_gga.h" + +#include "emupal.h" #include "screen.h" #include "speaker.h" +#include "tilemap.h" + + +namespace { + +class tail2nos_state : public driver_device +{ +public: + tail2nos_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_txvideoram(*this, "txvideoram"), + m_spriteram(*this, "spriteram"), + m_zoomram(*this, "k051316"), + m_soundbank(*this, "soundbank"), + m_maincpu(*this, "maincpu"), + m_audiocpu(*this, "audiocpu"), + m_k051316(*this, "k051316"), + m_gfxdecode(*this, "gfxdecode"), + m_palette(*this, "palette"), + m_soundlatch(*this, "soundlatch"), + m_acia(*this, "acia"), + m_analog(*this, "AN%u", 0U) + { } + + void tail2nos(machine_config &config); + + template DECLARE_CUSTOM_INPUT_MEMBER(analog_in_r); + +protected: + virtual void machine_start() override; + virtual void video_start() override; + +private: + // memory pointers + required_shared_ptr m_txvideoram; + required_shared_ptr m_spriteram; + required_shared_ptr m_zoomram; + required_memory_bank m_soundbank; + + // video-related + tilemap_t *m_tx_tilemap; + uint8_t m_txbank; + uint8_t m_txpalette; + bool m_video_enable; + bool m_flip_screen; + + // devices + required_device m_maincpu; + required_device m_audiocpu; + required_device m_k051316; + required_device m_gfxdecode; + required_device m_palette; + required_device m_soundlatch; + required_device m_acia; + required_ioport_array<2> m_analog; + + void txvideoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + void zoomdata_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + void gfxbank_w(uint8_t data); + void sound_bankswitch_w(uint8_t data); + uint8_t sound_semaphore_r(); + TILE_GET_INFO_MEMBER(get_tile_info); + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + void postload(); + void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); + K051316_CB_MEMBER(zoom_callback); + void main_map(address_map &map); + void sound_map(address_map &map); + void sound_port_map(address_map &map); +}; + + +// video +/*************************************************************************** + + Callbacks for the TileMap code + +***************************************************************************/ + +TILE_GET_INFO_MEMBER(tail2nos_state::get_tile_info) +{ + uint16_t code = m_txvideoram[tile_index]; + tileinfo.set(0, + (code & 0x1fff) + (m_txbank << 13), + ((code & 0xe000) >> 13) + m_txpalette * 16, + 0); +} + + +/*************************************************************************** + + Callbacks for the K051316 + +***************************************************************************/ + +K051316_CB_MEMBER(tail2nos_state::zoom_callback) +{ + *code |= ((*color & 0x03) << 8); + *color = 32 + ((*color & 0x38) >> 3); +} + +/*************************************************************************** + + Start the video hardware emulation. + +***************************************************************************/ + +void tail2nos_state::postload() +{ + m_tx_tilemap->mark_all_dirty(); + + m_k051316->gfx(0)->mark_all_dirty(); +} + +void tail2nos_state::video_start() +{ + m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(tail2nos_state::get_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32); + + m_tx_tilemap->set_transparent_pen(15); + + machine().save().register_postload(save_prepost_delegate(FUNC(tail2nos_state::postload), this)); +} + + + +/*************************************************************************** + + Memory handlers + +***************************************************************************/ + +void tail2nos_state::txvideoram_w(offs_t offset, uint16_t data, uint16_t mem_mask) +{ + COMBINE_DATA(&m_txvideoram[offset]); + m_tx_tilemap->mark_tile_dirty(offset); +} + +void tail2nos_state::zoomdata_w(offs_t offset, uint16_t data, uint16_t mem_mask) +{ + int oldword = m_zoomram[offset]; + COMBINE_DATA(&m_zoomram[offset]); + // tell the K051316 device the data changed + if (oldword != m_zoomram[offset]) + m_k051316->mark_gfx_dirty(offset * 2); +} + +void tail2nos_state::gfxbank_w(uint8_t data) +{ + // -------- --pe-b-b + // p = palette bank + // b = tile bank + // e = video enable + + // bits 0 and 2 select char bank + int bank = 0; + if (data & 0x04) bank |= 2; + if (data & 0x01) bank |= 1; + + if (m_txbank != bank) + { + m_txbank = bank; + m_tx_tilemap->mark_all_dirty(); + } + + // bit 5 seems to select palette bank (used on startup) + if (data & 0x20) + bank = 7; + else + bank = 3; + + if (m_txpalette != bank) + { + m_txpalette = bank; + m_tx_tilemap->mark_all_dirty(); + } + + // bit 4 seems to be video enable + m_video_enable = BIT(data, 4); + + // bit 7 is flip screen + m_flip_screen = BIT(data, 7); + m_tx_tilemap->set_flip(m_flip_screen ? TILEMAP_FLIPX | TILEMAP_FLIPY : 0); + m_tx_tilemap->set_scrolly(m_flip_screen ? -8 : 0); +} + + +/*************************************************************************** + + Display Refresh + +***************************************************************************/ + +void tail2nos_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ) +{ + for (int offs = 0; offs < m_spriteram.bytes() / 2; offs += 4) + { + int sx = m_spriteram[offs + 1]; + if (sx >= 0x8000) + sx -= 0x10000; + int sy = 0x10000 - m_spriteram[offs + 0]; + if (sy >= 0x8000) + sy -= 0x10000; + int code = m_spriteram[offs + 2] & 0x07ff; + int color = (m_spriteram[offs + 2] & 0xe000) >> 13; + int flipx = m_spriteram[offs + 2] & 0x1000; + int flipy = m_spriteram[offs + 2] & 0x0800; + if (m_flip_screen) + { + flipx = !flipx; + flipy = !flipy; + sx = 302 - sx; + sy = 216 - sy; + } + + m_gfxdecode->gfx(1)->transpen(bitmap, // placement relative to zoom layer verified on the real thing + cliprect, + code, + 40 + color, + flipx, flipy, + sx + 3, sy + 1, 15); + } +} + +uint32_t tail2nos_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + if (m_video_enable) + { + m_k051316->zoom_draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); + draw_sprites(bitmap, cliprect); + m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0); + } + else + bitmap.fill(0, cliprect); + + return 0; +} + + +// machine uint8_t tail2nos_state::sound_semaphore_r() { @@ -32,24 +276,24 @@ uint8_t tail2nos_state::sound_semaphore_r() void tail2nos_state::sound_bankswitch_w(uint8_t data) { - membank("bank3")->set_entry(data & 0x01); + m_soundbank->set_entry(data & 0x01); } void tail2nos_state::main_map(address_map &map) { map(0x000000, 0x03ffff).rom(); - map(0x200000, 0x27ffff).rom().region("user1", 0); /* extra ROM */ + map(0x200000, 0x27ffff).rom().region("user1", 0); // extra ROM map(0x2c0000, 0x2dffff).rom().region("user2", 0); - map(0x400000, 0x41ffff).ram().w(FUNC(tail2nos_state::tail2nos_zoomdata_w)).share("k051316"); + map(0x400000, 0x41ffff).ram().w(FUNC(tail2nos_state::zoomdata_w)).share(m_zoomram); map(0x500000, 0x500fff).rw(m_k051316, FUNC(k051316_device::read), FUNC(k051316_device::write)).umask16(0x00ff); map(0x510000, 0x51001f).w(m_k051316, FUNC(k051316_device::ctrl_w)).umask16(0x00ff); - map(0xff8000, 0xffbfff).ram(); /* work RAM */ - map(0xffc000, 0xffc2ff).ram().share("spriteram"); + map(0xff8000, 0xffbfff).ram(); // work RAM + map(0xffc000, 0xffc2ff).ram().share(m_spriteram); map(0xffc300, 0xffcfff).ram(); - map(0xffd000, 0xffdfff).ram().w(FUNC(tail2nos_state::tail2nos_txvideoram_w)).share("txvideoram"); + map(0xffd000, 0xffdfff).ram().w(FUNC(tail2nos_state::txvideoram_w)).share(m_txvideoram); map(0xffe000, 0xffefff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0xfff000, 0xfff001).portr("IN0"); - map(0xfff001, 0xfff001).w(FUNC(tail2nos_state::tail2nos_gfxbank_w)); + map(0xfff001, 0xfff001).w(FUNC(tail2nos_state::gfxbank_w)); map(0xfff002, 0xfff003).portr("IN1"); map(0xfff004, 0xfff005).portr("DSW"); map(0xfff009, 0xfff009).r(FUNC(tail2nos_state::sound_semaphore_r)).w(m_soundlatch, FUNC(generic_latch_8_device::write)).umask16(0x00ff); @@ -61,7 +305,7 @@ void tail2nos_state::sound_map(address_map &map) { map(0x0000, 0x77ff).rom(); map(0x7800, 0x7fff).ram(); - map(0x8000, 0xffff).bankr("bank3"); + map(0x8000, 0xffff).bankr(m_soundbank); } void tail2nos_state::sound_port_map(address_map &map) @@ -127,7 +371,7 @@ static INPUT_PORTS_START( tail2nos ) PORT_DIPSETTING( 0x000d, "5 Coins/6 Credits" ) PORT_DIPSETTING( 0x000e, DEF_STR( 4C_5C ) ) PORT_DIPSETTING( 0x000a, DEF_STR( 2C_3C ) ) -// PORT_DIPSETTING( 0x000f, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x000f, DEF_STR( 2C_3C ) ) PORT_DIPSETTING( 0x0001, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x0002, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x0003, DEF_STR( 1C_4C ) ) @@ -144,7 +388,7 @@ static INPUT_PORTS_START( tail2nos ) PORT_DIPSETTING( 0x00d0, "5 Coins/6 Credits" ) PORT_DIPSETTING( 0x00e0, DEF_STR( 4C_5C ) ) PORT_DIPSETTING( 0x00a0, DEF_STR( 2C_3C ) ) -// PORT_DIPSETTING( 0x00f0, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x00f0, DEF_STR( 2C_3C ) ) PORT_DIPSETTING( 0x0010, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0x0020, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x0030, DEF_STR( 1C_4C ) ) @@ -183,18 +427,6 @@ static INPUT_PORTS_START( sformula ) INPUT_PORTS_END - -static const gfx_layout tail2nos_charlayout = -{ - 8,8, - RGN_FRAC(1,1), - 4, - { 0, 1, 2, 3 }, - { 1*4, 0*4, 3*4, 2*4, 5*4, 4*4, 7*4, 6*4 }, - { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 }, - 32*8 -}; - static const gfx_layout tail2nos_spritelayout = { 16,32, @@ -211,8 +443,8 @@ static const gfx_layout tail2nos_spritelayout = }; static GFXDECODE_START( gfx_tail2nos ) - GFXDECODE_ENTRY( "gfx1", 0, tail2nos_charlayout, 0, 128 ) - GFXDECODE_ENTRY( "gfx2", 0, tail2nos_spritelayout, 0, 128 ) + GFXDECODE_ENTRY( "chars", 0, gfx_8x8x4_packed_lsb, 0, 128 ) + GFXDECODE_ENTRY( "sprites", 0, tail2nos_spritelayout, 0, 128 ) GFXDECODE_END @@ -220,8 +452,8 @@ void tail2nos_state::machine_start() { uint8_t *ROM = memregion("audiocpu")->base(); - membank("bank3")->configure_entries(0, 2, &ROM[0x10000], 0x8000); - membank("bank3")->set_entry(0); + m_soundbank->configure_entries(0, 2, &ROM[0x10000], 0x8000); + m_soundbank->set_entry(0); m_acia->write_cts(0); m_acia->write_dcd(0); @@ -237,34 +469,31 @@ void tail2nos_state::machine_start() save_item(NAME(m_flip_screen)); } -void tail2nos_state::machine_reset() -{ -} void tail2nos_state::tail2nos(machine_config &config) { - /* basic machine hardware */ - M68000(config, m_maincpu, XTAL(20'000'000)/2); /* verified on pcb */ + // basic machine hardware + M68000(config, m_maincpu, XTAL(20'000'000) / 2); // verified on PCB m_maincpu->set_addrmap(AS_PROGRAM, &tail2nos_state::main_map); m_maincpu->set_vblank_int("screen", FUNC(tail2nos_state::irq6_line_hold)); - Z80(config, m_audiocpu, XTAL(20'000'000)/4); /* verified on pcb */ + Z80(config, m_audiocpu, XTAL(20'000'000) / 4); // verified on PCB m_audiocpu->set_addrmap(AS_PROGRAM, &tail2nos_state::sound_map); m_audiocpu->set_addrmap(AS_IO, &tail2nos_state::sound_port_map); - /* IRQs are triggered by the YM2608 */ + // IRQs are triggered by the YM2608 ACIA6850(config, m_acia, 0); m_acia->irq_handler().set_inputline("maincpu", M68K_IRQ_3); //m_acia->txd_handler().set("link", FUNC(rs232_port_device::write_txd)); //m_acia->rts_handler().set("link", FUNC(rs232_port_device::write_rts)); - /* video hardware */ + // video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(60); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_size(64*8, 32*8); screen.set_visarea(0*8, 40*8-1, 1*8, 31*8-1); - screen.set_screen_update(FUNC(tail2nos_state::screen_update_tail2nos)); + screen.set_screen_update(FUNC(tail2nos_state::screen_update)); screen.set_palette(m_palette); GFXDECODE(config, m_gfxdecode, m_palette, gfx_tail2nos); @@ -279,7 +508,7 @@ void tail2nos_state::tail2nos(machine_config &config) VSYSTEM_GGA(config, "gga", XTAL(14'318'181) / 2); // divider not verified - /* sound hardware */ + // sound hardware SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); @@ -287,7 +516,7 @@ void tail2nos_state::tail2nos(machine_config &config) m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI); m_soundlatch->set_separate_acknowledge(true); - ym2608_device &ymsnd(YM2608(config, "ymsnd", XTAL(8'000'000))); /* verified on pcb */ + ym2608_device &ymsnd(YM2608(config, "ymsnd", XTAL(8'000'000))); // verified on PCB ymsnd.irq_handler().set_inputline(m_audiocpu, 0); ymsnd.port_b_write_callback().set(FUNC(tail2nos_state::sound_bankswitch_w)); ymsnd.add_route(0, "lspeaker", 0.25); @@ -307,7 +536,7 @@ ROM_START( tail2nos ) ROM_REGION16_BE( 0x80000, "user1", 0 ) // extra ROM mapped at 200000 ROM_LOAD16_WORD_SWAP( "a23.ic96", 0x00000, 0x80000, CRC(d851cf04) SHA1(ac5b366b686c5a037b127d223dc6fe90985eb160) ) - /* unpopulated 4M mask ROM socket at IC105 */ + // unpopulated 4M mask ROM socket at IC105 ROM_REGION16_BE( 0x20000, "user2", 0 ) // extra ROM mapped at 2c0000 ROM_LOAD16_BYTE( "v5.ic119", 0x00000, 0x10000, CRC(a9fe15a1) SHA1(d90bf40c610ea7daaa338f83f82cdffbae7da08e) ) @@ -317,15 +546,15 @@ ROM_START( tail2nos ) ROM_LOAD( "v2.ic125", 0x00000, 0x08000, CRC(920d8920) SHA1(b8d30903248fee6f985af7fafbe534cfc8c6e829) ) ROM_LOAD( "v1.ic137", 0x10000, 0x10000, CRC(bf35c1a4) SHA1(a838740e023dc3344dc528324a8dbc48bb98b574) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "chars", 0 ) ROM_LOAD( "a24.ic34", 0x00000, 0x80000, CRC(b1e9de43) SHA1(0144252dd9ed561fbebd4994cccf11f6c87e1825) ) ROM_LOAD( "o1s.ic18", 0x80000, 0x40000, CRC(e27a8eb4) SHA1(4fcadabf42a1c3deeb6d74d75cdbee802cf16db5) ) - ROM_REGION( 0x080000, "gfx2", 0 ) + ROM_REGION( 0x080000, "sprites", 0 ) ROM_LOAD( "oj1.ic93", 0x000000, 0x40000, CRC(39c36b35) SHA1(a97480696bf6d81bf415737e03cc5324d439ab84) ) ROM_LOAD( "oj2.ic79", 0x040000, 0x40000, CRC(77ccaea2) SHA1(e38175859c75c6d0f2f01752fad6e167608c4662) ) - ROM_REGION( 0x20000, "ymsnd", 0 ) // sound samples + ROM_REGION( 0x20000, "ymsnd", 0 ) ROM_LOAD( "osb.ic127", 0x00000, 0x20000, CRC(d49ab2f5) SHA1(92f7f6c8f35ac39910879dd88d2cfb6db7c848c9) ) ROM_END @@ -338,7 +567,7 @@ ROM_START( tail2nosa ) ROM_REGION16_BE( 0x80000, "user1", 0 ) // extra ROM mapped at 200000 ROM_LOAD16_WORD_SWAP( "a23.ic96", 0x00000, 0x80000, CRC(d851cf04) SHA1(ac5b366b686c5a037b127d223dc6fe90985eb160) ) - /* unpopulated 4M mask ROM socket at IC105 */ + // unpopulated 4M mask ROM socket at IC105 ROM_REGION16_BE( 0x20000, "user2", 0 ) // extra ROM mapped at 2c0000 ROM_LOAD16_BYTE( "v5.ic119", 0x00000, 0x10000, CRC(a9fe15a1) SHA1(d90bf40c610ea7daaa338f83f82cdffbae7da08e) ) @@ -348,15 +577,15 @@ ROM_START( tail2nosa ) ROM_LOAD( "v2.ic125", 0x00000, 0x08000, CRC(920d8920) SHA1(b8d30903248fee6f985af7fafbe534cfc8c6e829) ) ROM_LOAD( "v1.ic137", 0x10000, 0x10000, CRC(bf35c1a4) SHA1(a838740e023dc3344dc528324a8dbc48bb98b574) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "chars", 0 ) ROM_LOAD( "a24.ic34", 0x00000, 0x80000, CRC(b1e9de43) SHA1(0144252dd9ed561fbebd4994cccf11f6c87e1825) ) ROM_LOAD( "o1s.ic18", 0x80000, 0x40000, CRC(e27a8eb4) SHA1(4fcadabf42a1c3deeb6d74d75cdbee802cf16db5) ) - ROM_REGION( 0x080000, "gfx2", 0 ) + ROM_REGION( 0x080000, "sprites", 0 ) ROM_LOAD( "oj1.ic93", 0x000000, 0x40000, CRC(39c36b35) SHA1(a97480696bf6d81bf415737e03cc5324d439ab84) ) ROM_LOAD( "oj2.ic79", 0x040000, 0x40000, CRC(77ccaea2) SHA1(e38175859c75c6d0f2f01752fad6e167608c4662) ) - ROM_REGION( 0x20000, "ymsnd", 0 ) // sound samples + ROM_REGION( 0x20000, "ymsnd", 0 ) ROM_LOAD( "osb.ic127", 0x00000, 0x20000, CRC(d49ab2f5) SHA1(92f7f6c8f35ac39910879dd88d2cfb6db7c848c9) ) ROM_END @@ -369,7 +598,7 @@ ROM_START( sformula ) ROM_REGION16_BE( 0x80000, "user1", 0 ) // extra ROM mapped at 200000 ROM_LOAD16_WORD_SWAP( "a23.ic96", 0x00000, 0x80000, CRC(d851cf04) SHA1(ac5b366b686c5a037b127d223dc6fe90985eb160) ) - /* unpopulated 4M mask ROM socket at IC105 */ + // unpopulated 4M mask ROM socket at IC105 ROM_REGION16_BE( 0x20000, "user2", 0 ) // extra ROM mapped at 2c0000 ROM_LOAD16_BYTE( "v5.ic119", 0x00000, 0x10000, CRC(a9fe15a1) SHA1(d90bf40c610ea7daaa338f83f82cdffbae7da08e) ) @@ -379,15 +608,15 @@ ROM_START( sformula ) ROM_LOAD( "v2.ic125", 0x00000, 0x08000, CRC(920d8920) SHA1(b8d30903248fee6f985af7fafbe534cfc8c6e829) ) ROM_LOAD( "v1.ic137", 0x10000, 0x10000, CRC(bf35c1a4) SHA1(a838740e023dc3344dc528324a8dbc48bb98b574) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "chars", 0 ) ROM_LOAD( "a24.ic34", 0x00000, 0x80000, CRC(b1e9de43) SHA1(0144252dd9ed561fbebd4994cccf11f6c87e1825) ) ROM_LOAD( "o1s.ic18", 0x80000, 0x40000, CRC(e27a8eb4) SHA1(4fcadabf42a1c3deeb6d74d75cdbee802cf16db5) ) - ROM_REGION( 0x080000, "gfx2", 0 ) + ROM_REGION( 0x080000, "sprites", 0 ) ROM_LOAD( "oj1.ic93", 0x000000, 0x40000, CRC(39c36b35) SHA1(a97480696bf6d81bf415737e03cc5324d439ab84) ) ROM_LOAD( "oj2.ic79", 0x040000, 0x40000, CRC(77ccaea2) SHA1(e38175859c75c6d0f2f01752fad6e167608c4662) ) - ROM_REGION( 0x20000, "ymsnd", 0 ) // sound samples + ROM_REGION( 0x20000, "ymsnd", 0 ) ROM_LOAD( "osb.ic127", 0x00000, 0x20000, CRC(d49ab2f5) SHA1(92f7f6c8f35ac39910879dd88d2cfb6db7c848c9) ) ROM_END @@ -401,7 +630,7 @@ ROM_START( sformulaa ) ROM_REGION16_BE( 0x80000, "user1", 0 ) // extra ROM mapped at 200000 ROM_LOAD16_WORD_SWAP( "a23.ic96", 0x00000, 0x80000, CRC(d851cf04) SHA1(ac5b366b686c5a037b127d223dc6fe90985eb160) ) - /* unpopulated 4M mask ROM socket at IC105 */ + // unpopulated 4M mask ROM socket at IC105 ROM_REGION16_BE( 0x20000, "user2", 0 ) // extra ROM mapped at 2c0000 ROM_LOAD16_BYTE( "v5.ic119", 0x00000, 0x10000, CRC(a9fe15a1) SHA1(d90bf40c610ea7daaa338f83f82cdffbae7da08e) ) @@ -411,19 +640,22 @@ ROM_START( sformulaa ) ROM_LOAD( "v2.ic125", 0x00000, 0x08000, CRC(920d8920) SHA1(b8d30903248fee6f985af7fafbe534cfc8c6e829) ) ROM_LOAD( "v1.ic137", 0x10000, 0x10000, CRC(bf35c1a4) SHA1(a838740e023dc3344dc528324a8dbc48bb98b574) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "chars", 0 ) ROM_LOAD( "a24.ic34", 0x00000, 0x80000, CRC(b1e9de43) SHA1(0144252dd9ed561fbebd4994cccf11f6c87e1825) ) ROM_LOAD( "o1s.ic18", 0x80000, 0x40000, CRC(e27a8eb4) SHA1(4fcadabf42a1c3deeb6d74d75cdbee802cf16db5) ) - ROM_LOAD( "9.ic3", 0xc0000, 0x08000, CRC(c76edc0a) SHA1(2c6c21f8d1f3bcb0f65ba5a779fe479783271e0b) ) // present on this PCB, contains Japanese text + same font as in above roms, where does it map? is there another layer? + ROM_LOAD( "9.ic3", 0xc0000, 0x08000, CRC(c76edc0a) SHA1(2c6c21f8d1f3bcb0f65ba5a779fe479783271e0b) ) // present on this PCB, contains Japanese text + same font as in above ROMs, where does it map? is there another layer? - ROM_REGION( 0x080000, "gfx2", 0 ) + ROM_REGION( 0x080000, "sprites", 0 ) ROM_LOAD( "oj1.ic93", 0x000000, 0x40000, CRC(39c36b35) SHA1(a97480696bf6d81bf415737e03cc5324d439ab84) ) ROM_LOAD( "oj2.ic79", 0x040000, 0x40000, CRC(77ccaea2) SHA1(e38175859c75c6d0f2f01752fad6e167608c4662) ) - ROM_REGION( 0x20000, "ymsnd", 0 ) // sound samples + ROM_REGION( 0x20000, "ymsnd", 0 ) ROM_LOAD( "osb.ic127", 0x00000, 0x20000, CRC(d49ab2f5) SHA1(92f7f6c8f35ac39910879dd88d2cfb6db7c848c9) ) ROM_END +} // anonymous namespace + + GAME( 1989, tail2nos, 0, tail2nos, tail2nos, tail2nos_state, empty_init, ROT90, "V-System Co.", "Tail to Nose - Great Championship / Super Formula", MACHINE_NODEVICE_LAN | MACHINE_SUPPORTS_SAVE ) // Only set that's affected by the Country dipswitch GAME( 1989, tail2nosa, tail2nos, tail2nos, tail2nos, tail2nos_state, empty_init, ROT90, "V-System Co.", "Tail to Nose - Great Championship", MACHINE_NODEVICE_LAN | MACHINE_SUPPORTS_SAVE ) GAME( 1989, sformula, tail2nos, tail2nos, sformula, tail2nos_state, empty_init, ROT90, "V-System Co.", "Super Formula (Japan, set 1)", MACHINE_NODEVICE_LAN | MACHINE_SUPPORTS_SAVE ) // For Use in Japan... warning diff --git a/src/mame/drivers/taxidriv.cpp b/src/mame/drivers/taxidriv.cpp index d17a623a01a..bb5297f847a 100644 --- a/src/mame/drivers/taxidriv.cpp +++ b/src/mame/drivers/taxidriv.cpp @@ -462,17 +462,6 @@ INPUT_PORTS_END -static const gfx_layout charlayout = -{ - 8,8, - RGN_FRAC(1,1), - 4, - { 0, 1, 2, 3 }, - { 1*4, 0*4, 3*4, 2*4, 5*4, 4*4, 7*4, 6*4 }, - { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 }, - 32*8 -}; - static const gfx_layout charlayout2 = { 4,4, @@ -486,10 +475,10 @@ static const gfx_layout charlayout2 = static GFXDECODE_START( gfx_taxidriv ) - GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 1 ) - GFXDECODE_ENTRY( "gfx2", 0, charlayout, 0, 1 ) - GFXDECODE_ENTRY( "gfx3", 0, charlayout, 0, 1 ) - GFXDECODE_ENTRY( "gfx4", 0, charlayout, 0, 1 ) + GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_packed_lsb, 0, 1 ) + GFXDECODE_ENTRY( "gfx2", 0, gfx_8x8x4_packed_lsb, 0, 1 ) + GFXDECODE_ENTRY( "gfx3", 0, gfx_8x8x4_packed_lsb, 0, 1 ) + GFXDECODE_ENTRY( "gfx4", 0, gfx_8x8x4_packed_lsb, 0, 1 ) GFXDECODE_ENTRY( "gfx5", 0, charlayout2, 0, 1 ) GFXDECODE_END diff --git a/src/mame/drivers/terracre.cpp b/src/mame/drivers/terracre.cpp index a22e2b9f1eb..842ac824016 100644 --- a/src/mame/drivers/terracre.cpp +++ b/src/mame/drivers/terracre.cpp @@ -409,7 +409,7 @@ static INPUT_PORTS_START( horekid ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) INPUT_PORTS_END -static INPUT_PORTS_START( horekidb2 ) +static INPUT_PORTS_START( horekidb2 ) PORT_INCLUDE(horekid) PORT_MODIFY("IN1") @@ -418,17 +418,6 @@ static INPUT_PORTS_START( horekidb2 ) INPUT_PORTS_END -static const gfx_layout char_layout = -{ - 8,8, - RGN_FRAC(1,1), - 4, - { 0, 1, 2, 3 }, - { 1*4, 0*4, 3*4, 2*4, 5*4, 4*4, 7*4, 6*4 }, - { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 }, - 32*8 -}; - static const gfx_layout tile_layout = { 16,16, @@ -466,7 +455,7 @@ static const gfx_layout sprite_layout = }; static GFXDECODE_START( gfx_terracre ) - GFXDECODE_ENTRY( "gfx1", 0, char_layout, 0, 1 ) + GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_packed_lsb, 0, 1 ) GFXDECODE_ENTRY( "gfx2", 0, tile_layout, 1*16, 16 ) GFXDECODE_ENTRY( "gfx3", 0, sprite_layout, 1*16+16*16, 256 ) GFXDECODE_END diff --git a/src/mame/drivers/welltris.cpp b/src/mame/drivers/welltris.cpp index d3acdc930be..a5d4f7062b9 100644 --- a/src/mame/drivers/welltris.cpp +++ b/src/mame/drivers/welltris.cpp @@ -786,16 +786,6 @@ INPUT_PORTS_END -static const gfx_layout charlayout = -{ - 8,8, - RGN_FRAC(1,1), - 4, - { 0, 1, 2, 3 }, - { 1*4, 0*4, 3*4, 2*4, 5*4, 4*4, 7*4, 6*4 }, - { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 }, - 32*8 -}; static const gfx_layout spritelayout = { @@ -811,7 +801,7 @@ static const gfx_layout spritelayout = }; static GFXDECODE_START( gfx_welltris ) - GFXDECODE_ENTRY( "chars", 0, charlayout, 16* 0, 4*16 ) + GFXDECODE_ENTRY( "chars", 0, gfx_8x8x4_packed_lsb, 16* 0, 4*16 ) GFXDECODE_ENTRY( "sprites", 0, spritelayout, 16*96, 2*16 ) GFXDECODE_END diff --git a/src/mame/includes/tail2nos.h b/src/mame/includes/tail2nos.h deleted file mode 100644 index 9256a15a1a1..00000000000 --- a/src/mame/includes/tail2nos.h +++ /dev/null @@ -1,84 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Nicola Salmoria -/************************************************************************* - - Tail to Nose / Super Formula - -*************************************************************************/ -#ifndef MAME_INCLUDES_TAIL2NOS_H -#define MAME_INCLUDES_TAIL2NOS_H - -#pragma once - -#include "machine/6850acia.h" -#include "machine/gen_latch.h" -#include "video/k051316.h" -#include "emupal.h" -#include "tilemap.h" - -class tail2nos_state : public driver_device -{ -public: - tail2nos_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_txvideoram(*this, "txvideoram"), - m_spriteram(*this, "spriteram"), - m_zoomram(*this, "k051316"), - m_maincpu(*this, "maincpu"), - m_audiocpu(*this, "audiocpu"), - m_k051316(*this, "k051316"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette"), - m_soundlatch(*this, "soundlatch"), - m_acia(*this, "acia"), - m_analog(*this, "AN%u", 0U) - { } - - void tail2nos(machine_config &config); - - template DECLARE_CUSTOM_INPUT_MEMBER(analog_in_r); - -protected: - virtual void machine_start() override; - virtual void machine_reset() override; - virtual void video_start() override; - -private: - /* memory pointers */ - required_shared_ptr m_txvideoram; - required_shared_ptr m_spriteram; - required_shared_ptr m_zoomram; - - /* video-related */ - tilemap_t *m_tx_tilemap; - int m_txbank; - int m_txpalette; - bool m_video_enable; - bool m_flip_screen; - - /* devices */ - required_device m_maincpu; - required_device m_audiocpu; - required_device m_k051316; - required_device m_gfxdecode; - required_device m_palette; - required_device m_soundlatch; - required_device m_acia; - required_ioport_array<2> m_analog; - - void tail2nos_txvideoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - void tail2nos_zoomdata_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - void tail2nos_gfxbank_w(uint8_t data); - void sound_bankswitch_w(uint8_t data); - uint8_t sound_semaphore_r(); - TILE_GET_INFO_MEMBER(get_tile_info); - uint32_t screen_update_tail2nos(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void tail2nos_postload(); - void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); - K051316_CB_MEMBER(zoom_callback); - void main_map(address_map &map); - void sound_map(address_map &map); - void sound_port_map(address_map &map); -}; - -#endif // MAME_INCLUDES_TAIL2NOS_H diff --git a/src/mame/video/tail2nos.cpp b/src/mame/video/tail2nos.cpp deleted file mode 100644 index da07206b9d5..00000000000 --- a/src/mame/video/tail2nos.cpp +++ /dev/null @@ -1,177 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Nicola Salmoria -#include "emu.h" -#include "includes/tail2nos.h" - - -#define TOTAL_CHARS 0x400 - -/*************************************************************************** - - Callbacks for the TileMap code - -***************************************************************************/ - -TILE_GET_INFO_MEMBER(tail2nos_state::get_tile_info) -{ - uint16_t code = m_txvideoram[tile_index]; - tileinfo.set(0, - (code & 0x1fff) + (m_txbank << 13), - ((code & 0xe000) >> 13) + m_txpalette * 16, - 0); -} - - -/*************************************************************************** - - Callbacks for the K051316 - -***************************************************************************/ - -K051316_CB_MEMBER(tail2nos_state::zoom_callback) -{ - *code |= ((*color & 0x03) << 8); - *color = 32 + ((*color & 0x38) >> 3); -} - -/*************************************************************************** - - Start the video hardware emulation. - -***************************************************************************/ - -void tail2nos_state::tail2nos_postload() -{ - m_tx_tilemap->mark_all_dirty(); - - m_k051316->gfx(0)->mark_all_dirty(); -} - -void tail2nos_state::video_start() -{ - m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(tail2nos_state::get_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32); - - m_tx_tilemap->set_transparent_pen(15); - - machine().save().register_postload(save_prepost_delegate(FUNC(tail2nos_state::tail2nos_postload), this)); -} - - - -/*************************************************************************** - - Memory handlers - -***************************************************************************/ - -void tail2nos_state::tail2nos_txvideoram_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - COMBINE_DATA(&m_txvideoram[offset]); - m_tx_tilemap->mark_tile_dirty(offset); -} - -void tail2nos_state::tail2nos_zoomdata_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - int oldword = m_zoomram[offset]; - COMBINE_DATA(&m_zoomram[offset]); - // tell the K051316 device the data changed - if (oldword != m_zoomram[offset]) - m_k051316->mark_gfx_dirty(offset * 2); -} - -void tail2nos_state::tail2nos_gfxbank_w(uint8_t data) -{ - // -------- --pe-b-b - // p = palette bank - // b = tile bank - // e = video enable - - // bits 0 and 2 select char bank - int bank = 0; - if (data & 0x04) bank |= 2; - if (data & 0x01) bank |= 1; - - if (m_txbank != bank) - { - m_txbank = bank; - m_tx_tilemap->mark_all_dirty(); - } - - // bit 5 seems to select palette bank (used on startup) - if (data & 0x20) - bank = 7; - else - bank = 3; - - if (m_txpalette != bank) - { - m_txpalette = bank; - m_tx_tilemap->mark_all_dirty(); - } - - // bit 4 seems to be video enable - m_video_enable = BIT(data, 4); - - // bit 7 is flip screen - m_flip_screen = BIT(data, 7); - m_tx_tilemap->set_flip(m_flip_screen ? TILEMAP_FLIPX | TILEMAP_FLIPY : 0); - m_tx_tilemap->set_scrolly(m_flip_screen ? -8 : 0); -} - - -/*************************************************************************** - - Display Refresh - -***************************************************************************/ - -void tail2nos_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ) -{ - uint16_t *spriteram = m_spriteram; - int offs; - - - for (offs = 0; offs < m_spriteram.bytes() / 2; offs += 4) - { - int sx, sy, flipx, flipy, code, color; - - sx = spriteram[offs + 1]; - if (sx >= 0x8000) - sx -= 0x10000; - sy = 0x10000 - spriteram[offs + 0]; - if (sy >= 0x8000) - sy -= 0x10000; - code = spriteram[offs + 2] & 0x07ff; - color = (spriteram[offs + 2] & 0xe000) >> 13; - flipx = spriteram[offs + 2] & 0x1000; - flipy = spriteram[offs + 2] & 0x0800; - if (m_flip_screen) - { - flipx = !flipx; - flipy = !flipy; - sx = 302 - sx; - sy = 216 - sy; - } - - m_gfxdecode->gfx(1)->transpen(bitmap,/* placement relative to zoom layer verified on the real thing */ - cliprect, - code, - 40 + color, - flipx,flipy, - sx+3,sy+1,15); - } -} - -uint32_t tail2nos_state::screen_update_tail2nos(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - if (m_video_enable) - { - m_k051316->zoom_draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0); - draw_sprites(bitmap, cliprect); - m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0); - } - else - bitmap.fill(0, cliprect); - - return 0; -} -- cgit v1.2.3