mirror of
https://github.com/holub/mame
synced 2025-04-16 13:34:55 +03:00
- 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
This commit is contained in:
parent
f29cd1988c
commit
a7225d8818
@ -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",
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
|
@ -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<eeprom_serial_93cxx_device> m_eeprom;
|
||||
required_shared_ptr<uint8_t> m_fg_ram;
|
||||
required_shared_ptr<uint8_t> 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 )
|
||||
|
@ -9,22 +9,266 @@
|
||||
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 <int N> DECLARE_CUSTOM_INPUT_MEMBER(analog_in_r);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void video_start() override;
|
||||
|
||||
private:
|
||||
// memory pointers
|
||||
required_shared_ptr<uint16_t> m_txvideoram;
|
||||
required_shared_ptr<uint16_t> m_spriteram;
|
||||
required_shared_ptr<uint16_t> 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<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_audiocpu;
|
||||
required_device<k051316_device> m_k051316;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<generic_latch_8_device> m_soundlatch;
|
||||
required_device<acia6850_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()
|
||||
{
|
||||
return m_soundlatch->pending_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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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 <int N> 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<uint16_t> m_txvideoram;
|
||||
required_shared_ptr<uint16_t> m_spriteram;
|
||||
required_shared_ptr<uint16_t> 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<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_audiocpu;
|
||||
required_device<k051316_device> m_k051316;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<generic_latch_8_device> m_soundlatch;
|
||||
required_device<acia6850_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
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user