mirror of
https://github.com/holub/mame
synced 2025-04-16 21:44:32 +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/includes/suprslam.h",
|
||||||
MAME_DIR .. "src/mame/video/suprslam.cpp",
|
MAME_DIR .. "src/mame/video/suprslam.cpp",
|
||||||
MAME_DIR .. "src/mame/drivers/tail2nos.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/drivers/taotaido.cpp",
|
||||||
MAME_DIR .. "src/mame/includes/taotaido.h",
|
MAME_DIR .. "src/mame/includes/taotaido.h",
|
||||||
MAME_DIR .. "src/mame/video/taotaido.cpp",
|
MAME_DIR .. "src/mame/video/taotaido.cpp",
|
||||||
|
@ -1229,17 +1229,6 @@ static INPUT_PORTS_START( wbbc97 )
|
|||||||
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_SERVICE1 )
|
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_SERVICE1 )
|
||||||
INPUT_PORTS_END
|
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 =
|
static const gfx_layout aerofgt_charlayout =
|
||||||
{
|
{
|
||||||
8,8,
|
8,8,
|
||||||
@ -1390,7 +1379,7 @@ static const gfx_layout kickball_spritelayout =
|
|||||||
};
|
};
|
||||||
|
|
||||||
static GFXDECODE_START( gfx_pspikes )
|
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_ENTRY( "gfx2", 0, pspikes_spritelayout, 1024, 64 ) /* colors 1024-2047 in 4 banks */
|
||||||
GFXDECODE_END
|
GFXDECODE_END
|
||||||
|
|
||||||
@ -1405,13 +1394,13 @@ static GFXDECODE_START( gfx_spikes91 )
|
|||||||
GFXDECODE_END
|
GFXDECODE_END
|
||||||
|
|
||||||
static GFXDECODE_START( gfx_kickball )
|
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_ENTRY( "gfx2", 0, kickball_spritelayout, 1024, 64 ) /* colors 1024-2047 in 4 banks */
|
||||||
GFXDECODE_END
|
GFXDECODE_END
|
||||||
|
|
||||||
static GFXDECODE_START( gfx_turbofrc )
|
static GFXDECODE_START( gfx_turbofrc )
|
||||||
GFXDECODE_ENTRY( "gfx1", 0, pspikes_charlayout, 0, 16 )
|
GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_packed_lsb, 0, 16 )
|
||||||
GFXDECODE_ENTRY( "gfx2", 0, pspikes_charlayout, 256, 16 )
|
GFXDECODE_ENTRY( "gfx2", 0, gfx_8x8x4_packed_lsb, 256, 16 )
|
||||||
GFXDECODE_ENTRY( "spritegfx", 0, pspikes_spritelayout, 512, 16 )
|
GFXDECODE_ENTRY( "spritegfx", 0, pspikes_spritelayout, 512, 16 )
|
||||||
GFXDECODE_ENTRY( "gfx4", 0, pspikes_spritelayout, 768, 16 )
|
GFXDECODE_ENTRY( "gfx4", 0, pspikes_spritelayout, 768, 16 )
|
||||||
GFXDECODE_END
|
GFXDECODE_END
|
||||||
@ -1437,7 +1426,7 @@ static GFXDECODE_START( gfx_aerfboo2 )
|
|||||||
GFXDECODE_END
|
GFXDECODE_END
|
||||||
|
|
||||||
static GFXDECODE_START( gfx_wbbc97 )
|
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_ENTRY( "gfx2", 0, wbbc97_spritelayout, 1024, 64 ) /* colors 1024-2047 in 4 banks */
|
||||||
GFXDECODE_END
|
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 =
|
static const gfx_layout tilelayout =
|
||||||
{
|
{
|
||||||
8,8,
|
8,8,
|
||||||
@ -418,9 +407,9 @@ static const gfx_layout spritelayout =
|
|||||||
};
|
};
|
||||||
|
|
||||||
static GFXDECODE_START( gfx_cop01 )
|
static GFXDECODE_START( gfx_cop01 )
|
||||||
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 1 )
|
GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_packed_lsb, 0, 1 )
|
||||||
GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 16, 8 )
|
GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 16, 8 )
|
||||||
GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 16+8*16, 16 )
|
GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 16+8*16, 16 )
|
||||||
GFXDECODE_END
|
GFXDECODE_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -547,39 +547,16 @@ static INPUT_PORTS_START( itaten )
|
|||||||
PORT_DIPSETTING( 0x80, DEF_STR( Cocktail ) )
|
PORT_DIPSETTING( 0x80, DEF_STR( Cocktail ) )
|
||||||
INPUT_PORTS_END
|
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 )
|
static GFXDECODE_START( gfx_dacholer )
|
||||||
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0x00, 1 )
|
GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_packed_lsb, 0x00, 1 )
|
||||||
GFXDECODE_ENTRY( "gfx2", 0, charlayout, 0x10, 1 )
|
GFXDECODE_ENTRY( "gfx2", 0, gfx_8x8x4_packed_lsb, 0x10, 1 )
|
||||||
GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 0x10, 1 )
|
GFXDECODE_ENTRY( "gfx3", 0, gfx_16x16x4_packed_lsb, 0x10, 1 )
|
||||||
GFXDECODE_END
|
GFXDECODE_END
|
||||||
|
|
||||||
static GFXDECODE_START( gfx_itaten )
|
static GFXDECODE_START( gfx_itaten )
|
||||||
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0x00, 1 )
|
GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_packed_lsb, 0x00, 1 )
|
||||||
GFXDECODE_ENTRY( "gfx2", 0, charlayout, 0x00, 1 )
|
GFXDECODE_ENTRY( "gfx2", 0, gfx_8x8x4_packed_lsb, 0x00, 1 )
|
||||||
GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 0x10, 1 )
|
GFXDECODE_ENTRY( "gfx3", 0, gfx_16x16x4_packed_lsb, 0x10, 1 )
|
||||||
GFXDECODE_END
|
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 =
|
static const gfx_layout spritelayout =
|
||||||
{
|
{
|
||||||
16,16,
|
16,16,
|
||||||
@ -375,15 +352,15 @@ static const gfx_layout spritelayout =
|
|||||||
};
|
};
|
||||||
|
|
||||||
static GFXDECODE_START( gfx_galivan )
|
static GFXDECODE_START( gfx_galivan )
|
||||||
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 16 )
|
GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_packed_lsb, 0, 16 )
|
||||||
GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 16*16, 16 )
|
GFXDECODE_ENTRY( "gfx2", 0, gfx_16x16x4_packed_lsb, 16*16, 16 )
|
||||||
GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 16*16+16*16, 256 )
|
GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 16*16+16*16, 256 )
|
||||||
GFXDECODE_END
|
GFXDECODE_END
|
||||||
|
|
||||||
static GFXDECODE_START( gfx_ninjemak )
|
static GFXDECODE_START( gfx_ninjemak )
|
||||||
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 8 )
|
GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_packed_lsb, 0, 8 )
|
||||||
GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 8*16, 16 )
|
GFXDECODE_ENTRY( "gfx2", 0, gfx_16x16x4_packed_lsb, 8*16, 16 )
|
||||||
GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 8*16+16*16, 256 )
|
GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 8*16+16*16, 256 )
|
||||||
GFXDECODE_END
|
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-20296.10", 0x000000, 0x400000, CRC(072d8a5e) SHA1(7f69c90dd3c3e6e522d1065b3c4b09434cb4e634) )
|
||||||
ROM_LOAD32_WORD("mpr-20297.11", 0x000002, 0x400000, CRC(ba6a825b) SHA1(670a86c3a1a78550c760cc66c0a6181928fb9054) )
|
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-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)
|
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_LOAD32_WORD( "mpr-17755.29", 0x000002, 0x200000, CRC(2a6e7da4) SHA1(e60803ae951489fe47d66731d15c32249ca547b4) )
|
||||||
|
|
||||||
ROM_REGION( 0x010000, "drivecpu", 0 ) // Drive I/O program
|
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-17182.ic12", 0x000000, 0x010000, CRC(08d3db42) SHA1(57d902a835f4f738b9383760073193d206cf6343) )
|
||||||
ROM_LOAD( "epr-17891.ic12", 0x000000, 0x010000, CRC(9a33b437) SHA1(3e8f210aa5159e78f640126cb5ce7f05f22560f2) ) /* REMOVE when EPR-17762 is dumped & added */
|
|
||||||
|
|
||||||
ROM_REGION( 0x2000000, "polygons", 0 ) // Models
|
ROM_REGION( 0x2000000, "polygons", 0 ) // Models
|
||||||
ROM_LOAD32_WORD( "mpr-17748.16", 0x000000, 0x200000, CRC(3148a2b2) SHA1(283cc49bfb6c6381a7ead9273fd097dca5b981b6) )
|
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_LOAD32_WORD( "mpr-17755.29", 0x000002, 0x200000, CRC(2a6e7da4) SHA1(e60803ae951489fe47d66731d15c32249ca547b4) ) //
|
||||||
|
|
||||||
ROM_REGION( 0x010000, "drivecpu", 0 ) // Drive I/O program
|
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-17182.ic12", 0x000000, 0x010000, CRC(08d3db42) SHA1(57d902a835f4f738b9383760073193d206cf6343) )
|
||||||
ROM_LOAD( "epr-17891.ic12", 0x000000, 0x010000, CRC(9a33b437) SHA1(3e8f210aa5159e78f640126cb5ce7f05f22560f2) ) /* REMOVE when EPR-17762 is dumped & added */
|
|
||||||
|
|
||||||
ROM_REGION( 0x2000000, "polygons", 0 ) // Models
|
ROM_REGION( 0x2000000, "polygons", 0 ) // Models
|
||||||
ROM_LOAD32_WORD( "mpr-17748.16", 0x000000, 0x200000, CRC(3148a2b2) SHA1(283cc49bfb6c6381a7ead9273fd097dca5b981b6) )
|
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_REGION32_LE( 0x2400000, "main_data", 0 ) // Data
|
||||||
ROM_LOAD32_WORD( "mpr-18751.10", 0x000000, 0x200000, CRC(773ad43d) SHA1(4d1601dc08a08b724e33e7cd90a4f22e18cfed9c) )
|
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-18752.11", 0x000002, 0x200000, CRC(4da3719e) SHA1(24007e4ae3ba1a06321328d14e2bd6002fa1936e) )
|
||||||
ROM_LOAD32_WORD( "mpr-18749.8", 0x400000, 0x200000, CRC(c3fe0eea) SHA1(ada21405a136935ac4da1a3535c25fccf903f2d1) )
|
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-18750.9", 0x400002, 0x200000, CRC(40b55494) SHA1(d98ae5518c5d31b155b1a7c4f7d9d67f44d7beae) )
|
||||||
ROM_LOAD32_WORD( "mpr-18747.6", 0x800000, 0x200000, CRC(a65ec1e8) SHA1(92636bdff0ae4cdb43dfc2986fad2d1b59469323) )
|
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( "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-18862.4", 0xc00000, 0x080000, CRC(9adc3a30) SHA1(029db946338f8e0eccace8590082cc96bdf13e31) )
|
||||||
ROM_LOAD32_WORD( "epr-18863.5", 0xc00002, 0x080000, CRC(603742e9) SHA1(f78a5f7e582d313880c734158bb0fa68b256a58a) )
|
ROM_LOAD32_WORD( "epr-18863.5", 0xc00002, 0x080000, CRC(603742e9) SHA1(f78a5f7e582d313880c734158bb0fa68b256a58a) )
|
||||||
ROM_COPY( "main_data", 0xc00000, 0xd00000, 0x100000 )
|
ROM_COPY( "main_data", 0xc00000, 0xd00000, 0x100000 )
|
||||||
ROM_COPY( "main_data", 0xc00000, 0xe00000, 0x100000 )
|
ROM_COPY( "main_data", 0xc00000, 0xe00000, 0x100000 )
|
||||||
ROM_COPY( "main_data", 0xc00000, 0xf00000, 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_LOAD32_WORD( "epr-18825c.15", 0x040002, 0x020000, CRC(f88b036c) SHA1(f6196e8da5e6579fe3fa5c24ab9538964c98e267) )
|
||||||
|
|
||||||
ROM_REGION32_LE( 0x2400000, "main_data", 0 ) // Data
|
ROM_REGION32_LE( 0x2400000, "main_data", 0 ) // Data
|
||||||
ROM_LOAD32_WORD( "mpr-18751.10", 0x000000, 0x200000, CRC(773ad43d) SHA1(4d1601dc08a08b724e33e7cd90a4f22e18cfed9c) )
|
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-18752.11", 0x000002, 0x200000, CRC(4da3719e) SHA1(24007e4ae3ba1a06321328d14e2bd6002fa1936e) )
|
||||||
ROM_LOAD32_WORD( "mpr-18749.8", 0x400000, 0x200000, CRC(c3fe0eea) SHA1(ada21405a136935ac4da1a3535c25fccf903f2d1) )
|
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-18750.9", 0x400002, 0x200000, CRC(40b55494) SHA1(d98ae5518c5d31b155b1a7c4f7d9d67f44d7beae) )
|
||||||
ROM_LOAD32_WORD( "mpr-18747.6", 0x800000, 0x200000, CRC(a65ec1e8) SHA1(92636bdff0ae4cdb43dfc2986fad2d1b59469323) )
|
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( "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-18862.4", 0xc00000, 0x080000, CRC(9adc3a30) SHA1(029db946338f8e0eccace8590082cc96bdf13e31) )
|
||||||
ROM_LOAD32_WORD( "epr-18863.5", 0xc00002, 0x080000, CRC(603742e9) SHA1(f78a5f7e582d313880c734158bb0fa68b256a58a) )
|
ROM_LOAD32_WORD( "epr-18863.5", 0xc00002, 0x080000, CRC(603742e9) SHA1(f78a5f7e582d313880c734158bb0fa68b256a58a) )
|
||||||
ROM_COPY( "main_data", 0xc00000, 0xd00000, 0x100000 )
|
ROM_COPY( "main_data", 0xc00000, 0xd00000, 0x100000 )
|
||||||
ROM_COPY( "main_data", 0xc00000, 0xe00000, 0x100000 )
|
ROM_COPY( "main_data", 0xc00000, 0xe00000, 0x100000 )
|
||||||
ROM_COPY( "main_data", 0xc00000, 0xf00000, 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-20952.15 epr-20956.15 epr-20981.15 epr-20948.15
|
||||||
epr-20953.16 epr-20957.16 epr-20982.16 epr-20949.16
|
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
|
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.
|
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_REGION( 0x200000, "maincpu", 0 ) // i960 program
|
||||||
ROM_LOAD32_WORD("epr-20930.12", 0x000000, 0x080000, CRC(b8fc8ff7) SHA1(53b0f9dc8494effa077170ddced2d95f43a5f134) )
|
ROM_LOAD32_WORD("epr-20930.12", 0x000000, 0x080000, CRC(b8fc8ff7) SHA1(53b0f9dc8494effa077170ddced2d95f43a5f134) )
|
||||||
ROM_LOAD32_WORD("epr-20931.13", 0x000002, 0x080000, CRC(89d13f88) SHA1(5e266b5e153a0d9a57360cfd1af81e3a58a2fb7d) )
|
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_PARAMETER( ":315_5881:key", "2c2a4a93" )
|
||||||
ROM_END
|
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_REGION( 0x200000, "maincpu", 0 ) // i960 program
|
||||||
ROM_LOAD32_WORD("epr-20922.12", 0x000000, 0x080000, CRC(0a8b5604) SHA1(4076998fc600c1df3bb5ef48d42681c01e651495) )
|
ROM_LOAD32_WORD("epr-20922.12", 0x000000, 0x080000, CRC(0a8b5604) SHA1(4076998fc600c1df3bb5ef48d42681c01e651495) )
|
||||||
ROM_LOAD32_WORD("epr-20923.13", 0x000002, 0x080000, CRC(83be73d4) SHA1(1404a9c79cd2bae13f60e5e008307417324c3666) )
|
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
|
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_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_LOAD32_WORD("epr-19311a.13", 0x000002, 0x080000, CRC(1be62912) SHA1(dcc2df8e28e1a107867f74248e6ffcac83afe7c0) )
|
||||||
|
|
||||||
ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data
|
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
|
MODEL2A_VID_BOARD
|
||||||
ROM_END
|
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_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_LOAD32_WORD("epr-19384a.13", 0x000002, 0x080000, CRC(034a3ab9) SHA1(a01d2f0a4accfdf892228b65c25e2ad9144ecf59) )
|
||||||
|
|
||||||
ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data
|
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_START( doa ) /* Dead or Alive Jan 10 1997, probably Revision C, Model 2B, 837-12880 security board */
|
||||||
ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program
|
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
|
// 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_LOAD32_WORD("epr-19380c.16", 0x000002, 0x080000, CRC(58cfeaa9) SHA1(4319c22b8ebcff152676b62b5b1d4c1c7ce64fa6) )
|
||||||
|
|
||||||
ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data
|
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_LOAD16_WORD_SWAP("mpr-19332.34", 0x600000, 0x200000, CRC(2877f96f) SHA1(00e5677da30527b862e238f10762a5cbfbabde2b) )
|
||||||
ROM_END
|
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_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_LOAD32_WORD("epr-19380b.16", 0x000002, 0x080000, CRC(766c1ec8) SHA1(49250886f66db9fd37d88bc22c8f22046f74f043) )
|
||||||
|
|
||||||
ROM_REGION32_LE( 0x2000000, "main_data", 0 ) // Data
|
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 )
|
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START2 )
|
||||||
INPUT_PORTS_END
|
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 )
|
static GFXDECODE_START( gfx_pzletime )
|
||||||
GFXDECODE_ENTRY( "gfx1", 0, layout8x8, 0x100, 0x10 )
|
GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_packed_lsb, 0x100, 0x10 )
|
||||||
GFXDECODE_ENTRY( "gfx2", 0, layout16x16, 0x200, 0x10 )
|
GFXDECODE_ENTRY( "gfx2", 0, gfx_8x8x4_col_2x2_group_packed_lsb, 0x200, 0x10 )
|
||||||
GFXDECODE_ENTRY( "gfx3", 0, layout16x16, 0x000, 0x10 )
|
GFXDECODE_ENTRY( "gfx3", 0, gfx_8x8x4_col_2x2_group_packed_lsb, 0x000, 0x10 )
|
||||||
GFXDECODE_END
|
GFXDECODE_END
|
||||||
|
|
||||||
void pzletime_state::machine_start()
|
void pzletime_state::machine_start()
|
||||||
|
@ -6,7 +6,7 @@ Quiz Punch II (C)1989 Space Computer
|
|||||||
|
|
||||||
Driver by Luca Elia
|
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
|
the address to jump to (same as mosaic.cpp) and handles the EEPROM
|
||||||
|
|
||||||
PCB Layout
|
PCB Layout
|
||||||
@ -97,6 +97,19 @@ Notes:
|
|||||||
#include "speaker.h"
|
#include "speaker.h"
|
||||||
#include "tilemap.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
|
class quizpun2_state : public driver_device
|
||||||
{
|
{
|
||||||
@ -110,7 +123,8 @@ public:
|
|||||||
m_soundlatch(*this, "soundlatch"),
|
m_soundlatch(*this, "soundlatch"),
|
||||||
m_eeprom(*this, "eeprom"),
|
m_eeprom(*this, "eeprom"),
|
||||||
m_fg_ram(*this, "fg_ram"),
|
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);
|
void quizpun2_base(machine_config &config);
|
||||||
@ -131,6 +145,7 @@ private:
|
|||||||
required_device<eeprom_serial_93cxx_device> m_eeprom;
|
required_device<eeprom_serial_93cxx_device> m_eeprom;
|
||||||
required_shared_ptr<uint8_t> m_fg_ram;
|
required_shared_ptr<uint8_t> m_fg_ram;
|
||||||
required_shared_ptr<uint8_t> m_bg_ram;
|
required_shared_ptr<uint8_t> m_bg_ram;
|
||||||
|
required_memory_bank m_mainbank;
|
||||||
|
|
||||||
tilemap_t *m_bg_tmap;
|
tilemap_t *m_bg_tmap;
|
||||||
tilemap_t *m_fg_tmap;
|
tilemap_t *m_fg_tmap;
|
||||||
@ -150,8 +165,10 @@ private:
|
|||||||
void rombank_w(uint8_t data);
|
void rombank_w(uint8_t data);
|
||||||
void irq_ack(uint8_t data);
|
void irq_ack(uint8_t data);
|
||||||
void soundlatch_w(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
|
// quizpun2
|
||||||
void cop_d_w(uint8_t data);
|
void cop_d_w(uint8_t data);
|
||||||
@ -170,14 +187,11 @@ private:
|
|||||||
uint8_t quizpun_68705_port_c_r();
|
uint8_t quizpun_68705_port_c_r();
|
||||||
void quizpun_68705_port_c_w(uint8_t data);
|
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_cop_map(address_map &map);
|
||||||
void quizpun2_io_map(address_map &map);
|
void io_map(address_map &map);
|
||||||
void quizpun2_map(address_map &map);
|
void main_map(address_map &map);
|
||||||
void quizpun2_sound_io_map(address_map &map);
|
void sound_io_map(address_map &map);
|
||||||
void quizpun2_sound_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)
|
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));
|
tileinfo.set(0, code, code >> 12, TILE_FLIPXY((code & 0x800) >> 11));
|
||||||
}
|
}
|
||||||
|
|
||||||
TILE_GET_INFO_MEMBER(quizpun2_state::get_fg_tile_info)
|
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*/;
|
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 ];
|
uint8_t color = m_fg_ram[tile_index * 4 + 2];
|
||||||
tileinfo.set(1, code, color / 2, 0);
|
tileinfo.set(1, code, color / 2, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void quizpun2_state::bg_ram_w(offs_t offset, uint8_t data)
|
void quizpun2_state::bg_ram_w(offs_t offset, uint8_t data)
|
||||||
{
|
{
|
||||||
m_bg_ram[offset] = 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)
|
void quizpun2_state::fg_ram_w(offs_t offset, uint8_t data)
|
||||||
{
|
{
|
||||||
m_fg_ram[offset] = 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)
|
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()
|
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_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_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_bg_tmap->set_transparent_pen(0);
|
||||||
m_fg_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;
|
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);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -266,12 +282,18 @@ uint32_t quizpun2_state::screen_update_quizpun2(screen_device &screen, bitmap_in
|
|||||||
void quizpun2_state::machine_start()
|
void quizpun2_state::machine_start()
|
||||||
{
|
{
|
||||||
uint8_t *ROM = memregion("maincpu")->base();
|
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()
|
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
|
// 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);
|
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)
|
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)
|
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);
|
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(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(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("bg_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(0xd000, 0xd3ff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette");
|
||||||
map(0xe000, 0xffff).ram();
|
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.global_mask(0xff);
|
||||||
map(0x40, 0x40).w(FUNC(quizpun2_state::irq_ack));
|
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(0x80, 0x80).portr("DSW");
|
||||||
map(0x90, 0x90).portr("IN0");
|
map(0x90, 0x90).portr("IN0");
|
||||||
map(0xa0, 0xa0).portr("IN1");
|
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)
|
void quizpun2_state::quizpun2_cop_map(address_map &map)
|
||||||
@ -365,19 +387,19 @@ void quizpun2_state::quizpun2_cop_map(address_map &map)
|
|||||||
|
|
||||||
// quizpun
|
// 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?
|
and explicitly un-stalls the z80. Is this possible under the current MAME architecture?
|
||||||
|
|
||||||
** ghastly hack **
|
** ghastly hack **
|
||||||
|
|
||||||
The first read stalls the main cpu and triggers the mcu, it returns an incorrect value.
|
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.
|
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
|
When the MCU un-stalls the Z80, the read happens again, returning the correct MCU-provided value this time
|
||||||
*/
|
*/
|
||||||
if (m_mcu_repeat)
|
if (m_mcu_repeat)
|
||||||
{
|
{
|
||||||
@ -397,9 +419,9 @@ uint8_t quizpun2_state::quizpun_protection_r()
|
|||||||
return m_mcu_data_port;
|
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_data_port = data;
|
||||||
m_mcu_pending = true;
|
m_mcu_pending = true;
|
||||||
m_mcu_written = true;
|
m_mcu_written = true;
|
||||||
@ -411,27 +433,27 @@ void quizpun2_state::quizpun_protection_w(uint8_t data)
|
|||||||
Memory Maps - MCU
|
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()
|
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;
|
return m_mcu_data_port;
|
||||||
}
|
}
|
||||||
|
|
||||||
void quizpun2_state::quizpun_68705_port_a_w(uint8_t data)
|
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;
|
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()
|
uint8_t quizpun2_state::quizpun_68705_port_b_r()
|
||||||
{
|
{
|
||||||
// bit 3: 0 = pending
|
// bit 3: 0 = pending
|
||||||
// bit 1: 0 = main cpu has written
|
// bit 1: 0 = main CPU has written
|
||||||
// bit 0: 0 = main cpu is reading
|
// bit 0: 0 = main CPU is reading
|
||||||
|
|
||||||
uint8_t const ret =
|
uint8_t const ret =
|
||||||
0xf4 |
|
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 << 1)) |
|
||||||
((m_mcu_pending && !m_mcu_written) ? 0 : (1 << 0));
|
((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;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void quizpun2_state::quizpun_68705_port_b_w(uint8_t data)
|
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))
|
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 quizpun2_state::quizpun_68705_port_c_r()
|
||||||
{
|
{
|
||||||
uint8_t const ret = 0xf7 | (m_eeprom->do_read() ? 0x08 : 0x00);
|
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;
|
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
|
// clock line asserted: write latch or select next bit to read
|
||||||
m_eeprom->clk_write(BIT(data, 0) ? ASSERT_LINE : CLEAR_LINE);
|
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
|
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(0x0000, 0xf7ff).rom();
|
||||||
map(0xf800, 0xffff).ram();
|
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.global_mask(0xff);
|
||||||
map(0x00, 0x00).nopw(); // IRQ end
|
map(0x00, 0x00).nopw(); // IRQ end
|
||||||
@ -582,33 +604,33 @@ GFXDECODE_END
|
|||||||
|
|
||||||
void quizpun2_state::quizpun2_base(machine_config &config)
|
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
|
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_PROGRAM, &quizpun2_state::main_map);
|
||||||
m_maincpu->set_addrmap(AS_IO, &quizpun2_state::quizpun2_io_map);
|
m_maincpu->set_addrmap(AS_IO, &quizpun2_state::io_map);
|
||||||
m_maincpu->set_vblank_int("screen", FUNC(quizpun2_state::irq0_line_hold));
|
m_maincpu->set_vblank_int("screen", FUNC(quizpun2_state::irq0_line_hold));
|
||||||
|
|
||||||
Z80(config, m_audiocpu, XTAL(8'000'000) / 2); // 4 MHz
|
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_PROGRAM, &quizpun2_state::sound_map);
|
||||||
m_audiocpu->set_addrmap(AS_IO, &quizpun2_state::quizpun2_sound_io_map);
|
m_audiocpu->set_addrmap(AS_IO, &quizpun2_state::sound_io_map);
|
||||||
m_audiocpu->set_vblank_int("screen", FUNC(quizpun2_state::irq0_line_hold));
|
m_audiocpu->set_vblank_int("screen", FUNC(quizpun2_state::irq0_line_hold));
|
||||||
// NMI generated by main CPU
|
// NMI generated by main CPU
|
||||||
|
|
||||||
EEPROM_93C46_16BIT(config, "eeprom");
|
EEPROM_93C46_16BIT(config, "eeprom");
|
||||||
|
|
||||||
/* video hardware */
|
// video hardware
|
||||||
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
||||||
screen.set_refresh_hz(60);
|
screen.set_refresh_hz(60);
|
||||||
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
|
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
|
||||||
screen.set_size(384, 256);
|
screen.set_size(384, 256);
|
||||||
screen.set_visarea(0, 384-1, 0, 256-1);
|
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);
|
screen.set_palette(m_palette);
|
||||||
|
|
||||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_quizpun2);
|
GFXDECODE(config, m_gfxdecode, m_palette, gfx_quizpun2);
|
||||||
PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 0x200);
|
PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 0x200);
|
||||||
|
|
||||||
/* sound hardware */
|
// sound hardware
|
||||||
SPEAKER(config, "mono").front_center();
|
SPEAKER(config, "mono").front_center();
|
||||||
|
|
||||||
GENERIC_LATCH_8(config, m_soundlatch);
|
GENERIC_LATCH_8(config, m_soundlatch);
|
||||||
@ -655,7 +677,7 @@ ROM_START( quizpun2 )
|
|||||||
ROM_REGION( 0x50000, "maincpu", 0 )
|
ROM_REGION( 0x50000, "maincpu", 0 )
|
||||||
ROM_LOAD( "u111", 0x00000, 0x08000, CRC(14bdaffc) SHA1(7fb5988ea565d7cbe3c8e2cdb9402d3cf81507d7) )
|
ROM_LOAD( "u111", 0x00000, 0x08000, CRC(14bdaffc) SHA1(7fb5988ea565d7cbe3c8e2cdb9402d3cf81507d7) )
|
||||||
ROM_LOAD( "u117", 0x10000, 0x10000, CRC(e9d1d05e) SHA1(c24104e023d12db8c9199d3e18750414aa511e40) )
|
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( "u119", 0x30000, 0x10000, CRC(c73b82f7) SHA1(d5c683440e9db46dd5859b519b3f32da80352626) )
|
||||||
ROM_LOAD( "u120", 0x40000, 0x10000, CRC(700648b8) SHA1(dfa824166dfe7361d7c2ab0d8aa1ada882916cb9) )
|
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_LOAD( "02.u2", 0x10000, 0x10000, CRC(9294a19c) SHA1(cd7109262e5f68b946c84aa390108bcc47ee1300) )
|
||||||
ROM_END
|
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 )
|
} // anonymous namespace
|
||||||
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 )
|
|
||||||
|
|
||||||
|
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.
|
keep pressed F1 during POST to see ROM/RAM/GFX tests.
|
||||||
|
|
||||||
The "Country" DIP switch is intended to select the game's title.
|
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
|
However, the program code in all but one of the known sets forces it to
|
||||||
the other whenever it reads it outside of service mode.
|
one value or the other whenever it reads it outside of service mode.
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "includes/tail2nos.h"
|
|
||||||
|
#include "video/k051316.h"
|
||||||
|
#include "video/vsystem_gga.h"
|
||||||
|
|
||||||
#include "cpu/m68000/m68000.h"
|
#include "cpu/m68000/m68000.h"
|
||||||
#include "cpu/z80/z80.h"
|
#include "cpu/z80/z80.h"
|
||||||
|
#include "machine/6850acia.h"
|
||||||
|
#include "machine/gen_latch.h"
|
||||||
#include "sound/ymopn.h"
|
#include "sound/ymopn.h"
|
||||||
#include "video/vsystem_gga.h"
|
|
||||||
|
#include "emupal.h"
|
||||||
#include "screen.h"
|
#include "screen.h"
|
||||||
#include "speaker.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()
|
uint8_t tail2nos_state::sound_semaphore_r()
|
||||||
{
|
{
|
||||||
return m_soundlatch->pending_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)
|
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)
|
void tail2nos_state::main_map(address_map &map)
|
||||||
{
|
{
|
||||||
map(0x000000, 0x03ffff).rom();
|
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(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(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(0x510000, 0x51001f).w(m_k051316, FUNC(k051316_device::ctrl_w)).umask16(0x00ff);
|
||||||
map(0xff8000, 0xffbfff).ram(); /* work RAM */
|
map(0xff8000, 0xffbfff).ram(); // work RAM
|
||||||
map(0xffc000, 0xffc2ff).ram().share("spriteram");
|
map(0xffc000, 0xffc2ff).ram().share(m_spriteram);
|
||||||
map(0xffc300, 0xffcfff).ram();
|
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(0xffe000, 0xffefff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
|
||||||
map(0xfff000, 0xfff001).portr("IN0");
|
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(0xfff002, 0xfff003).portr("IN1");
|
||||||
map(0xfff004, 0xfff005).portr("DSW");
|
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);
|
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(0x0000, 0x77ff).rom();
|
||||||
map(0x7800, 0x7fff).ram();
|
map(0x7800, 0x7fff).ram();
|
||||||
map(0x8000, 0xffff).bankr("bank3");
|
map(0x8000, 0xffff).bankr(m_soundbank);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tail2nos_state::sound_port_map(address_map &map)
|
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( 0x000d, "5 Coins/6 Credits" )
|
||||||
PORT_DIPSETTING( 0x000e, DEF_STR( 4C_5C ) )
|
PORT_DIPSETTING( 0x000e, DEF_STR( 4C_5C ) )
|
||||||
PORT_DIPSETTING( 0x000a, DEF_STR( 2C_3C ) )
|
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( 0x0001, DEF_STR( 1C_2C ) )
|
||||||
PORT_DIPSETTING( 0x0002, DEF_STR( 1C_3C ) )
|
PORT_DIPSETTING( 0x0002, DEF_STR( 1C_3C ) )
|
||||||
PORT_DIPSETTING( 0x0003, DEF_STR( 1C_4C ) )
|
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( 0x00d0, "5 Coins/6 Credits" )
|
||||||
PORT_DIPSETTING( 0x00e0, DEF_STR( 4C_5C ) )
|
PORT_DIPSETTING( 0x00e0, DEF_STR( 4C_5C ) )
|
||||||
PORT_DIPSETTING( 0x00a0, DEF_STR( 2C_3C ) )
|
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( 0x0010, DEF_STR( 1C_2C ) )
|
||||||
PORT_DIPSETTING( 0x0020, DEF_STR( 1C_3C ) )
|
PORT_DIPSETTING( 0x0020, DEF_STR( 1C_3C ) )
|
||||||
PORT_DIPSETTING( 0x0030, DEF_STR( 1C_4C ) )
|
PORT_DIPSETTING( 0x0030, DEF_STR( 1C_4C ) )
|
||||||
@ -183,18 +427,6 @@ static INPUT_PORTS_START( sformula )
|
|||||||
INPUT_PORTS_END
|
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 =
|
static const gfx_layout tail2nos_spritelayout =
|
||||||
{
|
{
|
||||||
16,32,
|
16,32,
|
||||||
@ -211,8 +443,8 @@ static const gfx_layout tail2nos_spritelayout =
|
|||||||
};
|
};
|
||||||
|
|
||||||
static GFXDECODE_START( gfx_tail2nos )
|
static GFXDECODE_START( gfx_tail2nos )
|
||||||
GFXDECODE_ENTRY( "gfx1", 0, tail2nos_charlayout, 0, 128 )
|
GFXDECODE_ENTRY( "chars", 0, gfx_8x8x4_packed_lsb, 0, 128 )
|
||||||
GFXDECODE_ENTRY( "gfx2", 0, tail2nos_spritelayout, 0, 128 )
|
GFXDECODE_ENTRY( "sprites", 0, tail2nos_spritelayout, 0, 128 )
|
||||||
GFXDECODE_END
|
GFXDECODE_END
|
||||||
|
|
||||||
|
|
||||||
@ -220,8 +452,8 @@ void tail2nos_state::machine_start()
|
|||||||
{
|
{
|
||||||
uint8_t *ROM = memregion("audiocpu")->base();
|
uint8_t *ROM = memregion("audiocpu")->base();
|
||||||
|
|
||||||
membank("bank3")->configure_entries(0, 2, &ROM[0x10000], 0x8000);
|
m_soundbank->configure_entries(0, 2, &ROM[0x10000], 0x8000);
|
||||||
membank("bank3")->set_entry(0);
|
m_soundbank->set_entry(0);
|
||||||
|
|
||||||
m_acia->write_cts(0);
|
m_acia->write_cts(0);
|
||||||
m_acia->write_dcd(0);
|
m_acia->write_dcd(0);
|
||||||
@ -237,34 +469,31 @@ void tail2nos_state::machine_start()
|
|||||||
save_item(NAME(m_flip_screen));
|
save_item(NAME(m_flip_screen));
|
||||||
}
|
}
|
||||||
|
|
||||||
void tail2nos_state::machine_reset()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void tail2nos_state::tail2nos(machine_config &config)
|
void tail2nos_state::tail2nos(machine_config &config)
|
||||||
{
|
{
|
||||||
/* basic machine hardware */
|
// basic machine hardware
|
||||||
M68000(config, m_maincpu, XTAL(20'000'000)/2); /* verified on pcb */
|
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_addrmap(AS_PROGRAM, &tail2nos_state::main_map);
|
||||||
m_maincpu->set_vblank_int("screen", FUNC(tail2nos_state::irq6_line_hold));
|
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_PROGRAM, &tail2nos_state::sound_map);
|
||||||
m_audiocpu->set_addrmap(AS_IO, &tail2nos_state::sound_port_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);
|
ACIA6850(config, m_acia, 0);
|
||||||
m_acia->irq_handler().set_inputline("maincpu", M68K_IRQ_3);
|
m_acia->irq_handler().set_inputline("maincpu", M68K_IRQ_3);
|
||||||
//m_acia->txd_handler().set("link", FUNC(rs232_port_device::write_txd));
|
//m_acia->txd_handler().set("link", FUNC(rs232_port_device::write_txd));
|
||||||
//m_acia->rts_handler().set("link", FUNC(rs232_port_device::write_rts));
|
//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_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
||||||
screen.set_refresh_hz(60);
|
screen.set_refresh_hz(60);
|
||||||
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
|
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
|
||||||
screen.set_size(64*8, 32*8);
|
screen.set_size(64*8, 32*8);
|
||||||
screen.set_visarea(0*8, 40*8-1, 1*8, 31*8-1);
|
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);
|
screen.set_palette(m_palette);
|
||||||
|
|
||||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_tail2nos);
|
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
|
VSYSTEM_GGA(config, "gga", XTAL(14'318'181) / 2); // divider not verified
|
||||||
|
|
||||||
/* sound hardware */
|
// sound hardware
|
||||||
SPEAKER(config, "lspeaker").front_left();
|
SPEAKER(config, "lspeaker").front_left();
|
||||||
SPEAKER(config, "rspeaker").front_right();
|
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->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI);
|
||||||
m_soundlatch->set_separate_acknowledge(true);
|
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.irq_handler().set_inputline(m_audiocpu, 0);
|
||||||
ymsnd.port_b_write_callback().set(FUNC(tail2nos_state::sound_bankswitch_w));
|
ymsnd.port_b_write_callback().set(FUNC(tail2nos_state::sound_bankswitch_w));
|
||||||
ymsnd.add_route(0, "lspeaker", 0.25);
|
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_REGION16_BE( 0x80000, "user1", 0 ) // extra ROM mapped at 200000
|
||||||
ROM_LOAD16_WORD_SWAP( "a23.ic96", 0x00000, 0x80000, CRC(d851cf04) SHA1(ac5b366b686c5a037b127d223dc6fe90985eb160) )
|
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_REGION16_BE( 0x20000, "user2", 0 ) // extra ROM mapped at 2c0000
|
||||||
ROM_LOAD16_BYTE( "v5.ic119", 0x00000, 0x10000, CRC(a9fe15a1) SHA1(d90bf40c610ea7daaa338f83f82cdffbae7da08e) )
|
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( "v2.ic125", 0x00000, 0x08000, CRC(920d8920) SHA1(b8d30903248fee6f985af7fafbe534cfc8c6e829) )
|
||||||
ROM_LOAD( "v1.ic137", 0x10000, 0x10000, CRC(bf35c1a4) SHA1(a838740e023dc3344dc528324a8dbc48bb98b574) )
|
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( "a24.ic34", 0x00000, 0x80000, CRC(b1e9de43) SHA1(0144252dd9ed561fbebd4994cccf11f6c87e1825) )
|
||||||
ROM_LOAD( "o1s.ic18", 0x80000, 0x40000, CRC(e27a8eb4) SHA1(4fcadabf42a1c3deeb6d74d75cdbee802cf16db5) )
|
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( "oj1.ic93", 0x000000, 0x40000, CRC(39c36b35) SHA1(a97480696bf6d81bf415737e03cc5324d439ab84) )
|
||||||
ROM_LOAD( "oj2.ic79", 0x040000, 0x40000, CRC(77ccaea2) SHA1(e38175859c75c6d0f2f01752fad6e167608c4662) )
|
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_LOAD( "osb.ic127", 0x00000, 0x20000, CRC(d49ab2f5) SHA1(92f7f6c8f35ac39910879dd88d2cfb6db7c848c9) )
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
@ -338,7 +567,7 @@ ROM_START( tail2nosa )
|
|||||||
|
|
||||||
ROM_REGION16_BE( 0x80000, "user1", 0 ) // extra ROM mapped at 200000
|
ROM_REGION16_BE( 0x80000, "user1", 0 ) // extra ROM mapped at 200000
|
||||||
ROM_LOAD16_WORD_SWAP( "a23.ic96", 0x00000, 0x80000, CRC(d851cf04) SHA1(ac5b366b686c5a037b127d223dc6fe90985eb160) )
|
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_REGION16_BE( 0x20000, "user2", 0 ) // extra ROM mapped at 2c0000
|
||||||
ROM_LOAD16_BYTE( "v5.ic119", 0x00000, 0x10000, CRC(a9fe15a1) SHA1(d90bf40c610ea7daaa338f83f82cdffbae7da08e) )
|
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( "v2.ic125", 0x00000, 0x08000, CRC(920d8920) SHA1(b8d30903248fee6f985af7fafbe534cfc8c6e829) )
|
||||||
ROM_LOAD( "v1.ic137", 0x10000, 0x10000, CRC(bf35c1a4) SHA1(a838740e023dc3344dc528324a8dbc48bb98b574) )
|
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( "a24.ic34", 0x00000, 0x80000, CRC(b1e9de43) SHA1(0144252dd9ed561fbebd4994cccf11f6c87e1825) )
|
||||||
ROM_LOAD( "o1s.ic18", 0x80000, 0x40000, CRC(e27a8eb4) SHA1(4fcadabf42a1c3deeb6d74d75cdbee802cf16db5) )
|
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( "oj1.ic93", 0x000000, 0x40000, CRC(39c36b35) SHA1(a97480696bf6d81bf415737e03cc5324d439ab84) )
|
||||||
ROM_LOAD( "oj2.ic79", 0x040000, 0x40000, CRC(77ccaea2) SHA1(e38175859c75c6d0f2f01752fad6e167608c4662) )
|
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_LOAD( "osb.ic127", 0x00000, 0x20000, CRC(d49ab2f5) SHA1(92f7f6c8f35ac39910879dd88d2cfb6db7c848c9) )
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
@ -369,7 +598,7 @@ ROM_START( sformula )
|
|||||||
|
|
||||||
ROM_REGION16_BE( 0x80000, "user1", 0 ) // extra ROM mapped at 200000
|
ROM_REGION16_BE( 0x80000, "user1", 0 ) // extra ROM mapped at 200000
|
||||||
ROM_LOAD16_WORD_SWAP( "a23.ic96", 0x00000, 0x80000, CRC(d851cf04) SHA1(ac5b366b686c5a037b127d223dc6fe90985eb160) )
|
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_REGION16_BE( 0x20000, "user2", 0 ) // extra ROM mapped at 2c0000
|
||||||
ROM_LOAD16_BYTE( "v5.ic119", 0x00000, 0x10000, CRC(a9fe15a1) SHA1(d90bf40c610ea7daaa338f83f82cdffbae7da08e) )
|
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( "v2.ic125", 0x00000, 0x08000, CRC(920d8920) SHA1(b8d30903248fee6f985af7fafbe534cfc8c6e829) )
|
||||||
ROM_LOAD( "v1.ic137", 0x10000, 0x10000, CRC(bf35c1a4) SHA1(a838740e023dc3344dc528324a8dbc48bb98b574) )
|
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( "a24.ic34", 0x00000, 0x80000, CRC(b1e9de43) SHA1(0144252dd9ed561fbebd4994cccf11f6c87e1825) )
|
||||||
ROM_LOAD( "o1s.ic18", 0x80000, 0x40000, CRC(e27a8eb4) SHA1(4fcadabf42a1c3deeb6d74d75cdbee802cf16db5) )
|
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( "oj1.ic93", 0x000000, 0x40000, CRC(39c36b35) SHA1(a97480696bf6d81bf415737e03cc5324d439ab84) )
|
||||||
ROM_LOAD( "oj2.ic79", 0x040000, 0x40000, CRC(77ccaea2) SHA1(e38175859c75c6d0f2f01752fad6e167608c4662) )
|
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_LOAD( "osb.ic127", 0x00000, 0x20000, CRC(d49ab2f5) SHA1(92f7f6c8f35ac39910879dd88d2cfb6db7c848c9) )
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
@ -401,7 +630,7 @@ ROM_START( sformulaa )
|
|||||||
|
|
||||||
ROM_REGION16_BE( 0x80000, "user1", 0 ) // extra ROM mapped at 200000
|
ROM_REGION16_BE( 0x80000, "user1", 0 ) // extra ROM mapped at 200000
|
||||||
ROM_LOAD16_WORD_SWAP( "a23.ic96", 0x00000, 0x80000, CRC(d851cf04) SHA1(ac5b366b686c5a037b127d223dc6fe90985eb160) )
|
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_REGION16_BE( 0x20000, "user2", 0 ) // extra ROM mapped at 2c0000
|
||||||
ROM_LOAD16_BYTE( "v5.ic119", 0x00000, 0x10000, CRC(a9fe15a1) SHA1(d90bf40c610ea7daaa338f83f82cdffbae7da08e) )
|
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( "v2.ic125", 0x00000, 0x08000, CRC(920d8920) SHA1(b8d30903248fee6f985af7fafbe534cfc8c6e829) )
|
||||||
ROM_LOAD( "v1.ic137", 0x10000, 0x10000, CRC(bf35c1a4) SHA1(a838740e023dc3344dc528324a8dbc48bb98b574) )
|
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( "a24.ic34", 0x00000, 0x80000, CRC(b1e9de43) SHA1(0144252dd9ed561fbebd4994cccf11f6c87e1825) )
|
||||||
ROM_LOAD( "o1s.ic18", 0x80000, 0x40000, CRC(e27a8eb4) SHA1(4fcadabf42a1c3deeb6d74d75cdbee802cf16db5) )
|
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( "oj1.ic93", 0x000000, 0x40000, CRC(39c36b35) SHA1(a97480696bf6d81bf415737e03cc5324d439ab84) )
|
||||||
ROM_LOAD( "oj2.ic79", 0x040000, 0x40000, CRC(77ccaea2) SHA1(e38175859c75c6d0f2f01752fad6e167608c4662) )
|
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_LOAD( "osb.ic127", 0x00000, 0x20000, CRC(d49ab2f5) SHA1(92f7f6c8f35ac39910879dd88d2cfb6db7c848c9) )
|
||||||
ROM_END
|
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, 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, 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
|
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 =
|
static const gfx_layout charlayout2 =
|
||||||
{
|
{
|
||||||
4,4,
|
4,4,
|
||||||
@ -486,10 +475,10 @@ static const gfx_layout charlayout2 =
|
|||||||
|
|
||||||
|
|
||||||
static GFXDECODE_START( gfx_taxidriv )
|
static GFXDECODE_START( gfx_taxidriv )
|
||||||
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 1 )
|
GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_packed_lsb, 0, 1 )
|
||||||
GFXDECODE_ENTRY( "gfx2", 0, charlayout, 0, 1 )
|
GFXDECODE_ENTRY( "gfx2", 0, gfx_8x8x4_packed_lsb, 0, 1 )
|
||||||
GFXDECODE_ENTRY( "gfx3", 0, charlayout, 0, 1 )
|
GFXDECODE_ENTRY( "gfx3", 0, gfx_8x8x4_packed_lsb, 0, 1 )
|
||||||
GFXDECODE_ENTRY( "gfx4", 0, charlayout, 0, 1 )
|
GFXDECODE_ENTRY( "gfx4", 0, gfx_8x8x4_packed_lsb, 0, 1 )
|
||||||
GFXDECODE_ENTRY( "gfx5", 0, charlayout2, 0, 1 )
|
GFXDECODE_ENTRY( "gfx5", 0, charlayout2, 0, 1 )
|
||||||
GFXDECODE_END
|
GFXDECODE_END
|
||||||
|
|
||||||
|
@ -409,7 +409,7 @@ static INPUT_PORTS_START( horekid )
|
|||||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
static INPUT_PORTS_START( horekidb2 )
|
static INPUT_PORTS_START( horekidb2 )
|
||||||
PORT_INCLUDE(horekid)
|
PORT_INCLUDE(horekid)
|
||||||
|
|
||||||
PORT_MODIFY("IN1")
|
PORT_MODIFY("IN1")
|
||||||
@ -418,17 +418,6 @@ static INPUT_PORTS_START( horekidb2 )
|
|||||||
INPUT_PORTS_END
|
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 =
|
static const gfx_layout tile_layout =
|
||||||
{
|
{
|
||||||
16,16,
|
16,16,
|
||||||
@ -466,7 +455,7 @@ static const gfx_layout sprite_layout =
|
|||||||
};
|
};
|
||||||
|
|
||||||
static GFXDECODE_START( gfx_terracre )
|
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( "gfx2", 0, tile_layout, 1*16, 16 )
|
||||||
GFXDECODE_ENTRY( "gfx3", 0, sprite_layout, 1*16+16*16, 256 )
|
GFXDECODE_ENTRY( "gfx3", 0, sprite_layout, 1*16+16*16, 256 )
|
||||||
GFXDECODE_END
|
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 =
|
static const gfx_layout spritelayout =
|
||||||
{
|
{
|
||||||
@ -811,7 +801,7 @@ static const gfx_layout spritelayout =
|
|||||||
};
|
};
|
||||||
|
|
||||||
static GFXDECODE_START( gfx_welltris )
|
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_ENTRY( "sprites", 0, spritelayout, 16*96, 2*16 )
|
||||||
GFXDECODE_END
|
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