mirror of
https://github.com/libretro/mame2003-plus-libretro.git
synced 2026-11-07 04:16:07 -10:00
Mariner, Triple Punch: AY-8910 clock of current MAME, new clones; Galaxian/Scramble hardware save states
- AY-8910 of the Triple Punch board (Triple Punch, Knock Out!!, Mariner,
800 Fathoms) at 18432000/12 = 1.536 MHz, as current MAME ("verified on
hardware"): the sound was 16.7% too high and too fast. Mariner keeps
GAME_IMPERFECT_SOUND: its discrete sound circuits are not emulated, in
current MAME either; 800 Fathoms gets the flag, as in MAME
- new clones from current MAME: triplepa, knockoutb, knockoutc, 800fatha
(names and manufacturers of the sets as in MAME)
- save states of the Galaxian/Scramble/Frogger hardware (rollback, RunAhead,
netplay diverged):
- Galaxian video: star scroll/blink state, star timer start, flip, graphics
banks, background and bullet colors, rockclim scroll; a postload restores
the tilemap flip, column scroll and tiles
- 7474 flip-flops (machine/7474.c), registered by TTL7474_config
- Scramble sound: the sound CPU RAM (scobra map) in the saved memory, the
AY port B timer computed from the sound CPU cycles as current MAME
(no state, no 32-bit overflow; same values)
- RC filters of the sound streams (streams.c) and the global sound enable
(mixer.c)
- Galaxian sound statics (LFO, noise, tone generator)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01N3fzdsnzkQVtgYtYzqepjX
This commit is contained in:
15 files changed
+244
-43
No files matched your search
@@ -296,6 +296,7 @@ The list of direct contributors to the MAME 2003-Plus github repository can be f
|
||||
|
||||
## New Clones
|
||||
|
||||
* 800 Fathoms (older), Knock Out!! (bootleg, set 2 and set 3), Triple Punch (set 2) - Romsets `800fatha`, `knockoutb`, `knockoutc`, `triplepa`
|
||||
* Asura Buster - Eternal Warriors (USA), (Japan, set 2) and (Japan) (ARCADIA review build) - Romsets `asurabus`, `asurabusja`, `asurabusjr`; the Japan set 1 is now `asurabusj`, as in current MAME
|
||||
* Battle Shark (Japan, Joystick)
|
||||
* Botanic (French version)
|
||||
@@ -599,6 +600,7 @@ The list of direct contributors to the MAME 2003-Plus github repository can be f
|
||||
|
||||
## Games now with improved sound
|
||||
|
||||
* 800 Fathoms, Knock Out!!, Mariner, Triple Punch: AY-8910 clock of current MAME (1.536 MHz, verified on hardware), the sound was 16% too high and too fast
|
||||
* 1945kIII
|
||||
* Air Buster
|
||||
* Ashita no Joe
|
||||
@@ -796,6 +798,7 @@ Notes on this option:
|
||||
|
||||
|
||||
## Misc Changes
|
||||
* Save states (RunAhead, netplay) of the Galaxian/Scramble/Frogger hardware: Galaxian video (stars, flip, banks, background), the 7474 flip-flops, the Scramble sound RAM and timer, the RC filters of the sound streams, the global sound enable
|
||||
* Added HD647180 MCU sound support for Fire Shark and Vimana [arcadez]
|
||||
* Added sound sample support for Cosmic Alien [BritneysPAIRS, arcadez]
|
||||
* Updated sample support for Donkey Kong and Donkey kong JR to MAME87 [BritneysPAIRS, arcadez]
|
||||
|
||||
@@ -2554,6 +2554,7 @@ marineb=Shooter / Flying
|
||||
marinedt=Maze / Escape
|
||||
mariner=Shooter / Misc. Horizontal
|
||||
800fath=Shooter / Misc. Horizontal
|
||||
800fatha=Shooter / Misc. Horizontal
|
||||
mario=Platform / Run Jump
|
||||
marioe=Platform / Run Jump
|
||||
mariof=Platform / Run Jump
|
||||
@@ -4923,7 +4924,10 @@ labyrunk=Shooter / Walking
|
||||
labyrunr=Shooter / Walking
|
||||
triothep=Platform / Fighter Scrolling
|
||||
triplep=Maze / Outline
|
||||
triplepa=Maze / Outline
|
||||
knockout=Maze / Outline
|
||||
knockoutb=Maze / Outline
|
||||
knockoutc=Maze / Outline
|
||||
triplew1=Tabletop / Mahjong * Mature *
|
||||
triplew2=Tabletop / Mahjong * Mature *
|
||||
triplhnt=Shooter / Gun
|
||||
|
||||
@@ -250,9 +250,13 @@ const struct GameDriver *test_drivers[] =
|
||||
DRIVER( froggers ) /* bootleg */
|
||||
DRIVER( amidars ) /* GX337 (c) 1982 Konami */
|
||||
DRIVER( triplep ) /* (c) 1982 KKI */ /* made by Sanritsu? */
|
||||
DRIVER( triplepa ) /* (c) 1982 KKI */
|
||||
DRIVER( knockout ) /* (c) 1982 KKK */
|
||||
DRIVER( knockoutb ) /* bootleg */
|
||||
DRIVER( knockoutc ) /* bootleg (ESG) */
|
||||
DRIVER( mariner ) /* (c) 1981 Amenip */
|
||||
DRIVER( 800fath ) /* (c) 1981 Amenip + U.S. Billiards license */
|
||||
DRIVER( 800fatha ) /* (c) 1981 Amenip + U.S. Billiards license */
|
||||
DRIVER( mars ) /* (c) 1981 Artic */
|
||||
DRIVER( devilfsh ) /* (c) 1982 Artic */
|
||||
DRIVER( newsin7 ) /* (c) 1983 ATW USA, Inc. */
|
||||
|
||||
@@ -212,7 +212,7 @@ MEMORY_END
|
||||
|
||||
MEMORY_WRITE_START( scobra_sound_writemem )
|
||||
{ 0x0000, 0x2fff, MWA_ROM },
|
||||
{ 0x8000, 0x8fff, scobra_soundram_w },
|
||||
{ 0x8000, 0x8fff, scobra_soundram_w, &scobra_soundram }, /* the base puts the RAM in the save states */
|
||||
{ 0x8000, 0x83ff, MWA_NOP, &scobra_soundram }, /* only here to initialize pointer */
|
||||
{ 0x9000, 0x9fff, scramble_filter_w },
|
||||
MEMORY_END
|
||||
|
||||
+123
-4
@@ -719,6 +719,49 @@ INPUT_PORTS_START( triplep )
|
||||
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
|
||||
INPUT_PORTS_END
|
||||
|
||||
/* as Triple Punch, with 1 to 3 lives */
|
||||
INPUT_PORTS_START( knockoutb )
|
||||
PORT_START /* IN0 */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_4WAY | IPF_COCKTAIL )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_4WAY )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
|
||||
|
||||
PORT_START /* IN1 */
|
||||
PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) )
|
||||
PORT_DIPSETTING( 0x00, "1" )
|
||||
PORT_DIPSETTING( 0x01, "2" )
|
||||
PORT_DIPSETTING( 0x02, "3" )
|
||||
PORT_BITX( 0, 0x03, IPT_DIPSWITCH_SETTING | IPF_CHEAT, "256", IP_KEY_NONE, IP_JOY_NONE )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_COCKTAIL )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_4WAY | IPF_COCKTAIL )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
|
||||
|
||||
PORT_START /* IN2 */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_4WAY | IPF_COCKTAIL )
|
||||
PORT_DIPNAME( 0x06, 0x00, DEF_STR( Coinage ) )
|
||||
PORT_DIPSETTING( 0x02, "A 1/2 B 1/1 C 1/2" )
|
||||
PORT_DIPSETTING( 0x04, "A 1/3 B 3/1 C 1/3" )
|
||||
PORT_DIPSETTING( 0x00, "A 1/1 B 2/1 C 1/1" )
|
||||
PORT_DIPSETTING( 0x06, "A 1/4 B 4/1 C 1/4" )
|
||||
PORT_DIPNAME( 0x08, 0x00, DEF_STR( Cabinet ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( Cocktail ) )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_4WAY )
|
||||
PORT_SERVICE( 0x20, IP_ACTIVE_HIGH )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_4WAY )
|
||||
PORT_BITX( 0x80, 0x00, IPT_DIPSWITCH_NAME | IPF_CHEAT, "Rack Test", KEYCODE_F1, IP_JOY_NONE )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
|
||||
INPUT_PORTS_END
|
||||
|
||||
INPUT_PORTS_START( ckongs )
|
||||
PORT_START /* IN0 */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_4WAY | IPF_COCKTAIL )
|
||||
@@ -1314,7 +1357,7 @@ struct GfxDecodeInfo sfx_gfxdecodeinfo[] =
|
||||
static struct AY8910interface triplep_ay8910_interface =
|
||||
{
|
||||
1, /* 1 chip */
|
||||
14318000/8, /* 1.78975 MHz */
|
||||
18432000/12, /* 1.536 MHz, from the main CPU crystal (verified on Triple Punch / Knock Out hardware, as current MAME) */
|
||||
{ 50 },
|
||||
{ 0 },
|
||||
{ 0 },
|
||||
@@ -1830,6 +1873,21 @@ ROM_START( triplep )
|
||||
ROM_LOAD( "tripprom.6e", 0x0000, 0x0020, CRC(624f75df) SHA1(0e9a7c48dd976af1dca1d5351236d4d5bf7a9dc8) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( triplepa )
|
||||
ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code */
|
||||
ROM_LOAD( "td4.2h", 0x0000, 0x1000, CRC(15a6d46a) SHA1(a76d97876268d303bc18bf6f18f05227a6689b9d) )
|
||||
ROM_LOAD( "tc3.2k", 0x1000, 0x1000, CRC(bc26d2c0) SHA1(b9934ddb2918f6c4123dafd07cc39ae31d7e28e9) )
|
||||
ROM_LOAD( "te2.2l", 0x2000, 0x1000, CRC(02025c10) SHA1(16ffc7681d949172034b8c85dc72c1a528309abf) )
|
||||
ROM_LOAD( "td1.2m", 0x3000, 0x1000, CRC(e9abc42b) SHA1(93b9c55a76e273b4709ee65870c0848a0d3db7cc) )
|
||||
|
||||
ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "ta6.5f", 0x0000, 0x0800, CRC(d51cbd6f) SHA1(c3766a69a4599e54b8d7fb893e45802ec8bf6713) )
|
||||
ROM_LOAD( "ta7.5h", 0x0800, 0x0800, CRC(f21c0059) SHA1(b1ba87f13908e3e662de8bf444f59bd5c2009720) )
|
||||
|
||||
ROM_REGION( 0x0020, REGION_PROMS, 0 )
|
||||
ROM_LOAD( "ta.6e", 0x0000, 0x0020, CRC(624f75df) SHA1(0e9a7c48dd976af1dca1d5351236d4d5bf7a9dc8) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( knockout )
|
||||
ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code */
|
||||
ROM_LOAD( "knockout.2h", 0x0000, 0x1000, CRC(eaaa848e) SHA1(661026567db87206200ee610c3d5f5eb725aeec9) )
|
||||
@@ -1845,6 +1903,40 @@ ROM_START( knockout )
|
||||
ROM_LOAD( "tripprom.6e", 0x0000, 0x0020, CRC(624f75df) SHA1(0e9a7c48dd976af1dca1d5351236d4d5bf7a9dc8) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( knockoutb )
|
||||
ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code */
|
||||
ROM_LOAD( "k1-2h.bin", 0x0000, 0x1000, CRC(f16bdd40) SHA1(e14aad2f2820f643f32e1ee4dbb78cd469367498) )
|
||||
ROM_LOAD( "k2-2k.bin", 0x1000, 0x1000, CRC(fa6214ef) SHA1(5e569b2a4eaf5e4f033cf2375d607c54fb96b1f8) )
|
||||
ROM_LOAD( "k3-2l.bin", 0x2000, 0x1000, CRC(9f734d29) SHA1(430c53b9c3fa888fe45f9feeb4ad8f92011adc05) )
|
||||
ROM_LOAD( "k4-2m.bin", 0x3000, 0x1000, CRC(1809ec77) SHA1(97d575f47f861a572a483559790e271c21775ac5) )
|
||||
ROM_LOAD( "k5-2p.bin", 0x6000, 0x0800, CRC(60c1aa52) SHA1(f0598be70cfca8651edb7bb3c58f01368d6965ce) )
|
||||
ROM_CONTINUE( 0x5800, 0x0800 )
|
||||
|
||||
ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "ta6.5f", 0x0000, 0x0800, CRC(d51cbd6f) SHA1(c3766a69a4599e54b8d7fb893e45802ec8bf6713) )
|
||||
ROM_LOAD( "ta7.5h", 0x0800, 0x0800, CRC(f21c0059) SHA1(b1ba87f13908e3e662de8bf444f59bd5c2009720) )
|
||||
|
||||
ROM_REGION( 0x0020, REGION_PROMS, 0 )
|
||||
ROM_LOAD( "ta.6e", 0x0000, 0x0020, CRC(624f75df) SHA1(0e9a7c48dd976af1dca1d5351236d4d5bf7a9dc8) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( knockoutc )
|
||||
ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code */
|
||||
ROM_LOAD( "1.bin", 0x0000, 0x1000, CRC(7c386d1e) SHA1(e846a70bebd41b240758ffb2c7801fa7260b314e) )
|
||||
ROM_LOAD( "2.bin", 0x1000, 0x1000, CRC(85dc1d78) SHA1(61e82cfb5b0f0da6413713293c382ea57074e801) )
|
||||
ROM_LOAD( "3.bin", 0x2000, 0x1000, CRC(9f734d29) SHA1(430c53b9c3fa888fe45f9feeb4ad8f92011adc05) )
|
||||
ROM_LOAD( "4.bin", 0x3000, 0x1000, CRC(48e2d6cd) SHA1(7eea464b8cfef84dbad66e33dffaba9515605da6) )
|
||||
ROM_LOAD( "5.bin", 0x6000, 0x0800, CRC(26ac55ba) SHA1(876b8bf2ddb0ffb6256d1447408c8b7f7d048d9f) )
|
||||
ROM_CONTINUE( 0x5800, 0x0800 )
|
||||
|
||||
ROM_REGION( 0x1000, REGION_GFX1, ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "6.bin", 0x0000, 0x0800, CRC(d51cbd6f) SHA1(c3766a69a4599e54b8d7fb893e45802ec8bf6713) )
|
||||
ROM_LOAD( "7.bin", 0x0800, 0x0800, CRC(f21c0059) SHA1(b1ba87f13908e3e662de8bf444f59bd5c2009720) )
|
||||
|
||||
ROM_REGION( 0x0020, REGION_PROMS, 0 )
|
||||
ROM_LOAD( "ta.6e", 0x0000, 0x0020, CRC(624f75df) SHA1(0e9a7c48dd976af1dca1d5351236d4d5bf7a9dc8) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( mariner )
|
||||
ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for main CPU */
|
||||
ROM_LOAD( "tp1.2h", 0x0000, 0x1000, CRC(dac1dfd0) SHA1(57b9106bb7452640544ba0ab2d2ba290cccb45f0) )
|
||||
@@ -1891,6 +1983,29 @@ ROM_START( 800fath )
|
||||
ROM_LOAD( "t5.7p", 0x0000, 0x0020, CRC(1bd88cff) SHA1(8d1620386ef654d99c51e489c822eeb2e8a4fe76) ) /* char banking and star placement */
|
||||
ROM_END
|
||||
|
||||
ROM_START( 800fatha )
|
||||
ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for main CPU */
|
||||
ROM_LOAD( "tq1.2h", 0x0000, 0x1000, CRC(d858c242) SHA1(3f236ae6ac60067eec4f5df0746435e6dfde0401) ) /* older based on letter revision, Q vs U */
|
||||
ROM_LOAD( "tm2.2k", 0x1000, 0x1000, CRC(efe7ca28) SHA1(496f8eb2ebc9edeed5b19d87f437f23bbeb2a007) )
|
||||
ROM_LOAD( "tm3.2l", 0x2000, 0x1000, CRC(027881a6) SHA1(47953aa5140a157ade484341609d477510e8342b) )
|
||||
ROM_LOAD( "tm4.2m", 0x3000, 0x1000, CRC(a0fde7dc) SHA1(ea6700520b1bd31e6c6bfac6f067bbf652676eef) )
|
||||
ROM_LOAD( "tm5.2p", 0x6000, 0x0800, CRC(d7ebcb8e) SHA1(bddefdc5f04c2f940e08a6968fbd6f930d16b8e4) )
|
||||
ROM_CONTINUE( 0x5800, 0x0800 )
|
||||
|
||||
ROM_REGION( 0x2000, REGION_GFX1, ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "tm8.5f", 0x0000, 0x1000, CRC(70ae611f) SHA1(2686dc6d3910bd58b290d6296f30c552686709f5) )
|
||||
ROM_LOAD( "tm9.5h", 0x1000, 0x1000, CRC(8e4e999e) SHA1(195e6896ca2f3175137d8c92777ba32c41e835d3) )
|
||||
|
||||
ROM_REGION( 0x0020, REGION_PROMS, 0 )
|
||||
ROM_LOAD( "t4.6e", 0x0000, 0x0020, CRC(ca42b6dd) SHA1(d1e224e788e3dcf57249e72f03f9fe3fd71e6c12) )
|
||||
|
||||
ROM_REGION( 0x0100, REGION_USER1, 0 )
|
||||
ROM_LOAD( "t6.6p", 0x0000, 0x0100, CRC(ad208ccc) SHA1(66a4122e46467344a7f3ddcc953a5f7f451411fa) ) /* background color prom */
|
||||
|
||||
ROM_REGION( 0x0020, REGION_USER2, 0 )
|
||||
ROM_LOAD( "t5.7p", 0x0000, 0x0020, CRC(1bd88cff) SHA1(8d1620386ef654d99c51e489c822eeb2e8a4fe76) ) /* char banking and star placement */
|
||||
ROM_END
|
||||
|
||||
ROM_START( ckongs )
|
||||
ROM_REGION( 0x10000, REGION_CPU1, 0 ) /* 64k for code */
|
||||
ROM_LOAD( "vid_2c.bin", 0x0000, 0x1000, CRC(49a8c234) SHA1(91d8da03a76094b6fed4bf1d9a3943dee72bf039) )
|
||||
@@ -2161,10 +2276,14 @@ GAME( 1980, theend, 0, theend, theend, theend, ROT90, "Konami
|
||||
GAME( 1980, theends, theend, theend, theend, theend, ROT90, "[Konami] (Stern license)", "The End (Stern)" )
|
||||
GAME( 1981, froggers, frogger, froggers, froggers, froggers, ROT90, "bootleg", "Frog" )
|
||||
GAME( 1982, amidars, amidar, scramble, amidars, atlantis, ROT90, "Konami", "Amidar (Scramble hardware)" )
|
||||
GAME( 1982, triplep, 0, triplep, triplep, scramble_ppi, ROT90, "KKI", "Triple Punch" )
|
||||
GAME( 1982, knockout, triplep, triplep, triplep, scramble_ppi, ROT90, "KKK", "Knock Out!!" )
|
||||
GAME( 1982, triplep, 0, triplep, triplep, scramble_ppi, ROT90, "K.K. International", "Triple Punch (set 1)" )
|
||||
GAME( 1982, triplepa, triplep, triplep, triplep, scramble_ppi, ROT90, "K.K. International", "Triple Punch (set 2)" )
|
||||
GAME( 1982, knockout, triplep, triplep, triplep, scramble_ppi, ROT90, "bootleg? (KKK)", "Knock Out!! (bootleg, set 1)" )
|
||||
GAME( 1982, knockoutb,triplep, triplep, knockoutb,knockoutb, ROT90, "bootleg", "Knock Out!! (bootleg, set 2)" )
|
||||
GAME( 1982, knockoutc,triplep, triplep, knockoutb,knockoutb, ROT90, "bootleg (ESG)", "Knock Out!! (bootleg, set 3)" ) /* ESG = Elektronik Spiel Gerate */
|
||||
GAMEX(1981, mariner, 0, mariner, scramble, mariner, ROT90, "Amenip", "Mariner", GAME_IMPERFECT_SOUND )
|
||||
GAME( 1981, 800fath, mariner, mariner, scramble, mariner, ROT90, "Amenip (US Billiards Inc. license)", "800 Fathoms" )
|
||||
GAMEX(1981, 800fath, mariner, mariner, scramble, mariner, ROT90, "Amenip (US Billiards Inc. license)", "800 Fathoms", GAME_IMPERFECT_SOUND )
|
||||
GAMEX(1981, 800fatha, mariner, mariner, scramble, mariner, ROT90, "Amenip (US Billiards Inc. license)", "800 Fathoms (older)", GAME_IMPERFECT_SOUND )
|
||||
GAME( 1981, ckongs, ckong, ckongs, ckongs, ckongs, ROT90, "bootleg", "Crazy Kong (Scramble hardware)" )
|
||||
GAME( 1981, mars, 0, mars, mars, mars, ROT90, "Artic", "Mars" )
|
||||
GAME( 1982, devilfsh, 0, devilfsh, devilfsh, devilfsh, ROT90, "Artic", "Devil Fish" )
|
||||
|
||||
@@ -153,6 +153,7 @@ DRIVER_INIT( scrambls );
|
||||
DRIVER_INIT( theend );
|
||||
DRIVER_INIT( ckongs );
|
||||
DRIVER_INIT( mariner );
|
||||
DRIVER_INIT( knockoutb );
|
||||
DRIVER_INIT( mars );
|
||||
DRIVER_INIT( devilfsh );
|
||||
DRIVER_INIT( hotshock );
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
|
||||
#include "driver.h"
|
||||
#include "machine/7474.h"
|
||||
#include "state.h"
|
||||
|
||||
|
||||
#define MAX_TTL7474 12
|
||||
@@ -158,4 +159,16 @@ void TTL7474_config(int which, const struct TTL7474_interface *intf)
|
||||
chips[which].last_clock = 1;
|
||||
chips[which].last_output = -1;
|
||||
chips[which].last_output_comp = -1;
|
||||
|
||||
/* save states (a reset configures the chip again: the entries are
|
||||
registered once, the duplicates are ignored) */
|
||||
state_save_register_INT32("ttl7474", which, "clear", (INT32 *)&chips[which].clear, 1);
|
||||
state_save_register_INT32("ttl7474", which, "preset", (INT32 *)&chips[which].preset, 1);
|
||||
state_save_register_INT32("ttl7474", which, "clock", (INT32 *)&chips[which].clock, 1);
|
||||
state_save_register_INT32("ttl7474", which, "d", (INT32 *)&chips[which].d, 1);
|
||||
state_save_register_INT32("ttl7474", which, "output", (INT32 *)&chips[which].output, 1);
|
||||
state_save_register_INT32("ttl7474", which, "output_comp", (INT32 *)&chips[which].output_comp, 1);
|
||||
state_save_register_INT32("ttl7474", which, "last_clock", (INT32 *)&chips[which].last_clock, 1);
|
||||
state_save_register_INT32("ttl7474", which, "last_output", (INT32 *)&chips[which].last_output, 1);
|
||||
state_save_register_INT32("ttl7474", which, "last_output_comp", (INT32 *)&chips[which].last_output_comp, 1);
|
||||
}
|
||||
@@ -936,6 +936,16 @@ DRIVER_INIT( ckongs )
|
||||
ppi8255_set_portCread(0, ckongs_input_port_2_r);
|
||||
}
|
||||
|
||||
/* Knock Out!! bootlegs: an extra ROM, as Mariner */
|
||||
DRIVER_INIT( knockoutb )
|
||||
{
|
||||
init_scramble_ppi();
|
||||
|
||||
/* extra ROM */
|
||||
install_mem_read_handler (0, 0x5800, 0x67ff, MRA_ROM);
|
||||
install_mem_write_handler(0, 0x5800, 0x67ff, MWA_ROM);
|
||||
}
|
||||
|
||||
DRIVER_INIT( mariner )
|
||||
{
|
||||
init_scramble_ppi();
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "driver.h"
|
||||
#include "state.h"
|
||||
#include <math.h>
|
||||
|
||||
#define NEW_LFO 0
|
||||
@@ -53,6 +54,8 @@ static int last_port2=0;
|
||||
|
||||
static INT8 tonewave[4][TOOTHSAW_LENGTH];
|
||||
static int pitch,vol;
|
||||
static int tone_counter, tone_countdown; /* the tone generator */
|
||||
static int lfobit[4]; /* the LFO frequency bits */
|
||||
|
||||
static INT16 backgroundwave[32] =
|
||||
{
|
||||
@@ -71,7 +74,6 @@ static void tone_update(int ch, INT16 *buffer, int length)
|
||||
{
|
||||
int i,j;
|
||||
INT8 *w = tonewave[vol];
|
||||
static int counter, countdown;
|
||||
|
||||
/* only update if we have non-zero volume and frequency */
|
||||
if( pitch != 0xff )
|
||||
@@ -82,14 +84,14 @@ static void tone_update(int ch, INT16 *buffer, int length)
|
||||
|
||||
for (j = 0;j < STEPS;j++)
|
||||
{
|
||||
if (countdown >= 256)
|
||||
if (tone_countdown >= 256)
|
||||
{
|
||||
counter = (counter + 1) % TOOTHSAW_LENGTH;
|
||||
countdown = pitch;
|
||||
tone_counter = (tone_counter + 1) % TOOTHSAW_LENGTH;
|
||||
tone_countdown = pitch;
|
||||
}
|
||||
countdown++;
|
||||
tone_countdown++;
|
||||
|
||||
mix += w[counter];
|
||||
mix += w[tone_counter];
|
||||
}
|
||||
*buffer++ = (mix << 8) / STEPS;
|
||||
}
|
||||
@@ -485,6 +487,17 @@ static int galaxian_sh_start(const struct MachineSound *msound)
|
||||
noisetimer = timer_alloc(noise_timer_cb);
|
||||
lfotimer = timer_alloc(lfo_timer_cb);
|
||||
|
||||
/* save states (the timers and the mixer channels are saved by the core) */
|
||||
state_save_register_INT32("galaxian_sound", 0, "freq", (INT32 *)&freq, 1);
|
||||
state_save_register_INT32("galaxian_sound", 0, "noisevolume", (INT32 *)&noisevolume, 1);
|
||||
state_save_register_INT32("galaxian_sound", 0, "last_port1", (INT32 *)&last_port1, 1);
|
||||
state_save_register_INT32("galaxian_sound", 0, "last_port2", (INT32 *)&last_port2, 1);
|
||||
state_save_register_INT32("galaxian_sound", 0, "pitch", (INT32 *)&pitch, 1);
|
||||
state_save_register_INT32("galaxian_sound", 0, "vol", (INT32 *)&vol, 1);
|
||||
state_save_register_INT32("galaxian_sound", 0, "tone_counter", (INT32 *)&tone_counter, 1);
|
||||
state_save_register_INT32("galaxian_sound", 0, "tone_countdown",(INT32 *)&tone_countdown, 1);
|
||||
state_save_register_INT32("galaxian_sound", 0, "lfobit", (INT32 *)lfobit, 4);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -515,7 +528,6 @@ static void lfo_timer_cb(int param)
|
||||
WRITE_HANDLER( galaxian_lfo_freq_w )
|
||||
{
|
||||
#if NEW_LFO
|
||||
static int lfobit[4];
|
||||
|
||||
/* R18 1M,R17 470K,R16 220K,R15 100K */
|
||||
const int rv[4] = { 1000000,470000,220000,100000};
|
||||
@@ -566,7 +578,6 @@ WRITE_HANDLER( galaxian_lfo_freq_w )
|
||||
log_cb(RETRO_LOG_DEBUG, LOGPRE "lfo timer bits:%d%d%d%d r1:%d, r2:%d, re: %d, td: %9.2fsec\n", lfobit[0], lfobit[1], lfobit[2], lfobit[3], (int)r1, (int)r2, (int)Re, td);
|
||||
timer_adjust(lfotimer, TIME_IN_SEC(td / (MAXFREQ-MINFREQ)), 0, TIME_IN_SEC(td / (MAXFREQ-MINFREQ)));
|
||||
#else
|
||||
static int lfobit[4];
|
||||
double r0, r1, rx = 100000.0;
|
||||
|
||||
if( (data & 1) == lfobit[offset] )
|
||||
|
||||
@@ -42,20 +42,9 @@ static int scramble_timer[10] =
|
||||
|
||||
READ_HANDLER( scramble_portB_r )
|
||||
{
|
||||
/* need to protect from totalcycles overflow */
|
||||
static int last_totalcycles = 0;
|
||||
|
||||
/* number of Z80 clock cycles to count */
|
||||
static int clock;
|
||||
|
||||
int current_totalcycles;
|
||||
|
||||
current_totalcycles = activecpu_gettotalcycles();
|
||||
clock = (clock + (current_totalcycles-last_totalcycles)) % 5120;
|
||||
|
||||
last_totalcycles = current_totalcycles;
|
||||
|
||||
return scramble_timer[clock/512];
|
||||
/* the count of the sound CPU clock, as current MAME: no state of its own
|
||||
(save states), and no 32-bit overflow */
|
||||
return scramble_timer[(activecpu_gettotalcycles64() / 512) % 10];
|
||||
}
|
||||
|
||||
|
||||
@@ -84,20 +73,9 @@ static int frogger_timer[10] =
|
||||
|
||||
READ_HANDLER( frogger_portB_r )
|
||||
{
|
||||
/* need to protect from totalcycles overflow */
|
||||
static int last_totalcycles = 0;
|
||||
|
||||
/* number of Z80 clock cycles to count */
|
||||
static int clock;
|
||||
|
||||
int current_totalcycles;
|
||||
|
||||
current_totalcycles = activecpu_gettotalcycles();
|
||||
clock = (clock + (current_totalcycles-last_totalcycles)) % 5120;
|
||||
|
||||
last_totalcycles = current_totalcycles;
|
||||
|
||||
return frogger_timer[clock/512];
|
||||
/* the count of the sound CPU clock, as current MAME: no state of its own
|
||||
(save states), and no 32-bit overflow */
|
||||
return frogger_timer[(activecpu_gettotalcycles64() / 512) % 10];
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1276,6 +1276,7 @@ log_cb(RETRO_LOG_ERROR, LOGPRE "Sound #%d wrong ID %d: check enum SOUND_... in s
|
||||
}
|
||||
|
||||
mixer_register_state();
|
||||
streams_register_state();
|
||||
return 0;
|
||||
|
||||
|
||||
|
||||
@@ -190,6 +190,7 @@ void mixer_register_state(void)
|
||||
ss_channels = first_free_channel;
|
||||
state_save_register_UINT32("mixer", 0, "samples this frame", &samples_this_frame, 1);
|
||||
state_save_register_UINT32("mixer", 0, "accum base", &ss_accum_base, 1);
|
||||
state_save_register_INT32("mixer", 0, "sound enabled", (INT32 *)&mixer_sound_enabled, 1);
|
||||
state_save_register_INT32("mixer", 0, "left accum", left_accum, ACCUMULATOR_SAMPLES);
|
||||
state_save_register_INT32("mixer", 0, "right accum", right_accum, ACCUMULATOR_SAMPLES);
|
||||
for (ch = 0; ch < ss_channels; ch++)
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
***************************************************************************/
|
||||
|
||||
#include "driver.h"
|
||||
#include "state.h"
|
||||
#include <math.h>
|
||||
|
||||
|
||||
@@ -80,6 +81,16 @@ void apply_RC_filter(int channel,INT16 *buf,int len,int sample_rate)
|
||||
|
||||
|
||||
|
||||
/* the RC filters set by the drivers, and their last output */
|
||||
void streams_register_state(void)
|
||||
{
|
||||
state_save_register_INT32("streams", 0, "rc memory", (INT32 *)memory, MIXER_MAX_CHANNELS);
|
||||
state_save_register_INT32("streams", 0, "rc r1", (INT32 *)r1, MIXER_MAX_CHANNELS);
|
||||
state_save_register_INT32("streams", 0, "rc r2", (INT32 *)r2, MIXER_MAX_CHANNELS);
|
||||
state_save_register_INT32("streams", 0, "rc r3", (INT32 *)r3, MIXER_MAX_CHANNELS);
|
||||
state_save_register_INT32("streams", 0, "rc c", (INT32 *)c, MIXER_MAX_CHANNELS);
|
||||
}
|
||||
|
||||
int streams_sh_start(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -8,6 +8,7 @@ extern "C" {
|
||||
void set_RC_filter(int channel,int R1,int R2,int R3,int C);
|
||||
|
||||
int streams_sh_start(void);
|
||||
void streams_register_state(void);
|
||||
void streams_sh_stop(void);
|
||||
void streams_sh_update(void);
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
***************************************************************************/
|
||||
|
||||
#include "driver.h"
|
||||
#include "state.h"
|
||||
|
||||
static struct rectangle _spritevisiblearea =
|
||||
{
|
||||
@@ -119,6 +120,10 @@ static void scramble_draw_bullets(struct mame_bitmap *bitmap, int offs, int x, i
|
||||
static void theend_draw_bullets(struct mame_bitmap *bitmap, int offs, int x, int y);
|
||||
static void darkplnt_draw_bullets(struct mame_bitmap *bitmap, int offs, int x, int y);
|
||||
|
||||
/* rockclim scroll */
|
||||
static int rockclim_v=0;
|
||||
static int rockclim_h=0;
|
||||
|
||||
/* background circuit */
|
||||
static int background_enable;
|
||||
static int background_red, background_green, background_blue;
|
||||
@@ -449,6 +454,45 @@ PALETTE_INIT( mariner )
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
/* after a state load: what the hardware writes set beside the RAM (the
|
||||
attributes RAM holds the scroll values as written to the tilemap) */
|
||||
static void galaxian_postload(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
tilemap_set_flip(tilemap, (flip_screen_x ? TILEMAP_FLIPX : 0) | (flip_screen_y ? TILEMAP_FLIPY : 0));
|
||||
if (tilemap_set_scroll)
|
||||
for (i = 0; i < 32; i++)
|
||||
tilemap_set_scroll(tilemap, i, galaxian_attributesram[i << 1]);
|
||||
tilemap_mark_all_tiles_dirty(tilemap);
|
||||
|
||||
if (rockclim_tilemap)
|
||||
{
|
||||
tilemap_set_scrollx(rockclim_tilemap, 0, rockclim_h);
|
||||
tilemap_set_scrolly(rockclim_tilemap, 0, rockclim_v);
|
||||
tilemap_mark_all_tiles_dirty(rockclim_tilemap);
|
||||
}
|
||||
}
|
||||
|
||||
static void galaxian_state_register(void)
|
||||
{
|
||||
state_save_register_INT32("galaxian_video", 0, "gfxbank", (INT32 *)gfxbank, 5);
|
||||
state_save_register_INT32("galaxian_video", 0, "flip_screen_x", (INT32 *)&flip_screen_x, 1);
|
||||
state_save_register_INT32("galaxian_video", 0, "flip_screen_y", (INT32 *)&flip_screen_y, 1);
|
||||
state_save_register_INT32("galaxian_video", 0, "stars_on", (INT32 *)&galaxian_stars_on, 1);
|
||||
state_save_register_INT32("galaxian_video", 0, "stars_scrollpos", (INT32 *)&stars_scrollpos, 1);
|
||||
state_save_register_INT32("galaxian_video", 0, "stars_blink_state",(INT32 *)&stars_blink_state, 1);
|
||||
state_save_register_INT32("galaxian_video", 0, "timer_adjusted", (INT32 *)&timer_adjusted, 1);
|
||||
state_save_register_INT32("galaxian_video", 0, "darkplnt_bullet_color", (INT32 *)&darkplnt_bullet_color, 1);
|
||||
state_save_register_INT32("galaxian_video", 0, "background_enable",(INT32 *)&background_enable, 1);
|
||||
state_save_register_INT32("galaxian_video", 0, "background_red", (INT32 *)&background_red, 1);
|
||||
state_save_register_INT32("galaxian_video", 0, "background_green", (INT32 *)&background_green, 1);
|
||||
state_save_register_INT32("galaxian_video", 0, "background_blue", (INT32 *)&background_blue, 1);
|
||||
state_save_register_INT32("galaxian_video", 0, "rockclim_h", (INT32 *)&rockclim_h, 1);
|
||||
state_save_register_INT32("galaxian_video", 0, "rockclim_v", (INT32 *)&rockclim_v, 1);
|
||||
state_save_register_func_postload(galaxian_postload);
|
||||
}
|
||||
|
||||
static int video_start_common(UINT32 (*get_memory_offset)(UINT32,UINT32,UINT32,UINT32))
|
||||
{
|
||||
tilemap = tilemap_create(get_tile_info,get_memory_offset,TILEMAP_TRANSPARENT,8,8,32,32);
|
||||
@@ -486,6 +530,7 @@ static int video_start_common(UINT32 (*get_memory_offset)(UINT32,UINT32,UINT32,U
|
||||
|
||||
color_mask = (Machine->gfx[0]->color_granularity == 4) ? 7 : 3;
|
||||
|
||||
galaxian_state_register();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -858,6 +903,7 @@ VIDEO_START( drivfrcg )
|
||||
|
||||
color_mask = 0xff;
|
||||
|
||||
galaxian_state_register();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1001,8 +1047,6 @@ WRITE_HANDLER( rockclim_videoram_w )
|
||||
}
|
||||
}
|
||||
|
||||
static int rockclim_v=0;
|
||||
static int rockclim_h=0;
|
||||
|
||||
WRITE_HANDLER( rockclim_scroll_w )
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user