diff options
Diffstat (limited to 'src/mame/drivers/tumbleb.c')
-rw-r--r-- | src/mame/drivers/tumbleb.c | 3716 |
1 files changed, 3716 insertions, 0 deletions
diff --git a/src/mame/drivers/tumbleb.c b/src/mame/drivers/tumbleb.c new file mode 100644 index 00000000000..aeeeb9f371c --- /dev/null +++ b/src/mame/drivers/tumbleb.c @@ -0,0 +1,3716 @@ +/*************************************************************************** + + the following run on hardware which is physically not the same as + Tumble Pop but works in a very similar way. + + Tumblepop (c) 1991 Data East Corporation (Bootleg 1) + Tumblepop (c) 1991 Data East Corporation (Bootleg 2) + Jump Kids (c) 1993 Comad + Metal Saver (c) 1994 First Amusement + Pang Pang (c) 1994 Dong Gue La Mi Ltd. + Super Trio[1] (c) 1994 GameAce + Fancy World (c) 1995 Unico + Choky! Choky! (c) 1995 SemiCom + Hatch Catch (c) 1995 SemiCom + Cookie & Bibi[2] (c) 1995 SemiCom + WonderLeague Star (c) 1995 Mijin (Korea Only) - SemiCom used the name Mijin up to 1995 + WonderLeague '96 (c) 1996 SemiCom (Korea Only) + SD Fighters (c) 1996 SemiCom (Korea Only) + B.C. Story (c) 1997 SemiCom + MuHanSeungBu (c) 1997 SemiCom (Korea Only) + Date Quiz Go Go (c) 1998 SemiCom (Korea Only) + Jumping Pop (c) 2001 ESD + + + [1] has the same sprites as the bootlegs, not much else is the same tho + + [2] test mode crashes the same way on the real board + + Bootleg sound is not quite correct yet (Nothing on bootleg 2). + ** at least one of the bootlegs uses a protected PIC to drive the OKI ** + + If you reset the game while pressing START1 and START2, "VER 0.00 JAPAN" + is put into tile ram then MAME crashes ! + + Sometimes a garbage sprite gets left after the SemiCom logo in Hatch + Catch - other SemiCom games on different hw do this too, might just + be a bug in their code + + Emulation by Bryan McPhail, mish@tendril.co.uk + Jumping Pop sound emulation by R. Belmont + + +Stephh's notes (based on the games M68000 code and some tests) : + +1) 'tumbleb*' and 'jumpkids' + + - I don't understand the interest of the "Remove Monsters" Dip Switch : + as I haven't found a way to "end" a level, I guess that it was used to + test the backgrounds and the "platforms". + + - The "Edit Levels" Dip Switch allows you to add/delete monsters and + change their position. + + Notes (for 'tumbleb*') : + * "worlds" and levels are 0-based (00-09 & 00-09) : + + World Name + 0 America + 1 Brazil + 2 Asia + 3 Soviet + 4 Europe + 5 Egypt + 6 Australia + 7 Antartica + 8 Stratosphere + 9 Space + + * As levels x-9 and 9-x are only constitued of a "big boss", you can't + edit them ! + * All data is stored within the range 0x02b8c8-0x02d2c9, but it should be + extended to 0x02ebeb (and perhaps 0x02ffff). TO BE CONFIRMED ! + * Once your levels are ready, turn the Dip Switch OFF and reset the game. + * Of course, there is no possibility to save the levels when you exit + MAME, nor the way to reload the default ones 8( + + Additional notes (for 'jumpkids') : + * As there are only 9 "worlds", editing "world" 9 ("Space") might cause + unpredictable weird results ! + * The "worlds" names are the same, but the background is different : + + World Name Background + 0 America Stadium + 1 Brazil Beach + 2 Asia Planet + 3 Soviet Prehistoric Ages + 4 Europe Castle + 5 Egypt Pyramids + 6 Australia Lunar base + 7 Antartica Bridge + 8 Stratosphere ??? + 9 Space DOES NOT EXIST ! + + As I'm not sure of the description of the background, feel free to + improve the previous list. + * All data is stored within the range 0x02776e-0x029207, but it should be + extended to 0x02ab29 (and perhaps 0x02ab49). TO BE CONFIRMED ! + + +2) 'metlsavr' + + - It is unknown what's the effect of DSW2-6 and DSW 2-7. + All that can be told is that they related somewhere to DSW 2-5 ("Language") + as they affect in game language (but not the one for explanations in "Test Mode"). + In fact, some values are put to some RAM addresses, but I can't find what they do : + + 2-7 2-6 2-5 0x122eec 0x12021a In game language "Test Mode" explanations + OFF OFF OFF 0x00 0x00 English English + ON OFF OFF 0x00 0x01 English English + OFF ON OFF 0x00 0x01 English English + ON ON OFF 0x01 0x00 Korean English + OFF OFF OFF 0x01 0x00 Korean Korean + ON OFF OFF 0x01 0x01 Korean Korean + OFF ON OFF 0x01 0x01 Korean Korean + ON ON OFF 0x00 0x00 English Korean + + If you have any clue, please let me know ... + + +3) 'htchctch' + + - As I'm too bad at playing such game, I haven't been able to determine + what's the effect of DSW2-2 (which is called "Stage Skip" in "Test Mode"), + nor when it is supposed to be tested. Leftover from another game ? + + - "Difficulty" and "Coinage" Dip Switches aren't visible in "Test Mode". + + +4) 'cookbib' + + - Whatever is written in "Test Mode", Dip Switch bank 1 is unused, so DSW 1-1 + (which is called "Stage Skip") might be a leftover from another game. + + - "Difficulty" and "Coinage" Dip Switches aren't visible in "Test Mode". + + +5) 'fncywrld' + + - I'm not sure about the release date of this game : + * on the title screen, it ALWAYS displays 1996 + * when "Language" Dip Switch is set to "English", there is a (c) 1996 "warning" + screen, but when it is set to "Korean", there is a (c) 1995 "warning" screen ! + + - I don't understand the interest of the "Remove Monsters" Dip Switch : + as I haven't found a way to "end" a level, I guess that it was used to + test the backgrounds and the "platforms". + + - The "Edit Levels" Dip Switch allows you to add/delete monsters and + change their position. + + This needs more investigation to get similar infos to "Tumble Pop" bootlegs/ripoffs. + + +6) 'bcstry*' + + - DSW 2-6 and DSW 2-7 are read once (check code at 0x000628), + but the address where the computed value is stored is NEVER read back ! + I guess this might be a leftover from another game. + + - The "Event Selection" Dip Switch allows you to select your events by + pressing BUTTON1 when the moving "cursor" is on the event you want + + - The "Control Type" Dip Switch only has an effect during the events : + it means that whatever the settings are, you need the joystick and buttons + to select your character, enter your initials and select your events. + + - The "Debug Mode" Dip Switch (known as "Test Mode" ingame) allows you + to select your events by using the joystick then pressing BUTTON1. + This Dip Switch overrides "Event Selection" Dip Switch ! + + +7) 'semibase' + + - I'm completely unsure that there are 4 coin slots for this game, + but pressing ANY of the 4 COIN* buttons as the same effect : + credits are incremented depending on "Coinage" settings. + + - "Free Play" Dip Switch is bogus : you can only start a VS computer game + unless you insert enough credits (see "Full 2 Players Game" Dip Switch). + + - DSW 2-6 and DSW 2-7 are read once (check code at 0x002384), + but the address where the computed value is stored is NEVER read back ! + I guess this might be a leftover from another game. + + - DSW 2-5 is read once (check code at 0x002366), but the computed value + is the same (0x0009) whatever the settings are. So I've marked it as "Unused". + + - The "VS CPU Game Ends" Dip Switch is used when you play a game against the CPU. + If CPU's score is +10 or +7 than player's score, the game ends. + + - The "VS Game" Dip Switch affects single game against CPU or other player + (choices 2 and 3). Once the number of innings is achieved, the player(s) + is (are) proposed to continue, provided they get enough credits. + + - The "Full 2 Players Game" determines how many credits are required + to enlighten the 4th choice (2 players 9 innings match). + + +8) 'dquizgo' + + - "Free Play" Dip Switch is bogus : you can start a game without inserting a coin, + but you can't use any players joystick controls nor buttons. Ingame bug ? + + - "Lives" Dip Switch isn't visible in "Test Mode". + + - I'm unsure about the number of buttons for this game : there are 3 buttons in + "Test Mode", but as far as I can see only 1 seems needed when you play the game + and 2 buttons are required to exit some choices of "Test Mode". + + +9) 'jumppop' + + - It's difficult to find a name for DSW B-3. All I can tell is that, + when it is set to "2", the girls aren't nude, but less dressed ;) + + - The game needs more investigation to get similar infos to "Tumble Pop" bootlegs/ripoffs. + + +10) 'pangpang' + + - The game needs more investigation to get similar infos to "Tumble Pop" bootlegs/ripoffs. + + + MuHanSeungBu + ------------ + + Unfinished Test Mode, Hangs with black screen, same as a real PCB. + + + Jumping Pop + ----------- + + Jumping Pop is a complete rip-off of Tumble Pop, not even the levels have + been changed, it simply has different hardware and new 8bpp backgrounds! + + + Pang Pang + --------- + + You can't select anything except the first stage on the 'select a stage' + screen. + + If you get a high score then your entry in the high-score table will be + corrupt. + + There is a chance that both of these are bugs of the original game, it is + just a cheap hack of Tumble Pop afterall. The board doesn't work so it's + impossible to test. + + The sound is driven by a read-protected PIC, as is the case with the + tumblepb2 bootleg. I've simulated the sound in tumbleb2 and am using + the same simulation code in pangpang, although pangpang has a few extra + sounds which are not mapped. As the board does not work the accuracy + of the sound simulation cannot be verified. + + SD Fighters + ----------- + + "Time" and "Rounds to Win" Dip Switches aren't visible in "Test Mode". + + +***************************************************************************/ + +#include "driver.h" +#include "cpu/h6280/h6280.h" +#include "decocrpt.h" +#include "sound/2151intf.h" +#include "sound/3812intf.h" +#include "sound/okim6295.h" + +#define TUMBLEP_HACK 0 +#define FNCYWLD_HACK 0 + +VIDEO_START( tumblepb ); +VIDEO_START( fncywld ); +VIDEO_START( jumppop ); +VIDEO_START( sdfight ); +VIDEO_UPDATE( tumblep ); +VIDEO_UPDATE( tumblepb ); +VIDEO_UPDATE( jumpkids ); +VIDEO_UPDATE( fncywld ); +VIDEO_UPDATE( jumppop ); +VIDEO_UPDATE( semicom ); +VIDEO_UPDATE( semicom_altoffsets ); +VIDEO_UPDATE( bcstory ); +VIDEO_UPDATE(semibase ); +VIDEO_START( suprtrio ); +VIDEO_UPDATE( suprtrio ); +VIDEO_START( pangpang ); +VIDEO_UPDATE( pangpang ); +VIDEO_UPDATE( sdfight ); + + + +WRITE16_HANDLER( tumblepb_pf1_data_w ); +WRITE16_HANDLER( tumblepb_pf2_data_w ); +WRITE16_HANDLER( fncywld_pf1_data_w ); +WRITE16_HANDLER( fncywld_pf2_data_w ); +WRITE16_HANDLER( tumblepb_control_0_w ); +static WRITE16_HANDLER( semicom_soundcmd_w ); +WRITE16_HANDLER( pangpang_pf1_data_w ); +WRITE16_HANDLER( pangpang_pf2_data_w ); + +extern WRITE16_HANDLER( bcstory_tilebank_w ); +extern WRITE16_HANDLER( suprtrio_tilebank_w ); +extern WRITE16_HANDLER( chokchok_tilebank_w ); +extern WRITE16_HANDLER( wlstar_tilebank_w ); + +extern UINT16 *tumblepb_pf1_data,*tumblepb_pf2_data; +static UINT16* tumblepb_mainram; +UINT16* jumppop_control; +UINT16* suprtrio_control; + +/******************************************************************************/ + +static WRITE16_HANDLER( tumblepb_oki_w ) +{ + + + if (mem_mask==0x0000) + { + OKIM6295_data_0_w(0,data&0xff); + //printf("tumbleb_oki_w %04x %04x\n",data,mem_mask); + } + else + { + OKIM6295_data_0_w(0,(data>>8)&0xff); + //printf("tumbleb_oki_w %04x %04x\n",data,mem_mask); + } + /* STUFF IN OTHER BYTE TOO..*/ +} + +static READ16_HANDLER( tumblepb_prot_r ) +{ + return ~0; +} + +#ifdef UNUSED_FUNCTION +static WRITE16_HANDLER( tumblepb_sound_w ) +{ + soundlatch_w(0,data & 0xff); + cpunum_set_input_line(1,0,HOLD_LINE); +} +#endif + +static WRITE16_HANDLER( jumppop_sound_w ) +{ + soundlatch_w(0,data & 0xff); + cpunum_set_input_line( 1, 0, ASSERT_LINE ); +} + +/******************************************************************************/ + +static READ16_HANDLER( tumblepopb_controls_r ) +{ + switch (offset<<1) + { + case 0: /* Player 1 & Player 2 joysticks & fire buttons */ + return (readinputport(0) + (readinputport(1) << 8)); + case 2: /* Dips */ + return (readinputport(3) + (readinputport(4) << 8)); + case 8: /* Credits */ + return readinputport(2); + case 10: /* ? */ + case 12: + return 0; + } + + return -0; +} + +/******************************************************************************/ + +/* Tumble Pop Bootleg Sound Simulation + Notes + tumblepb2 uses a PIC for the sound cpu, this is read protected, so we have to simulate it + +1-11 are instruments +12 - enemy bounce off sides +13 - collect coin/item +14 - ?? +15 - suck clown +16 - suck man +17 - power up item +18 - general suck +19 - another suck? or unused? +1a - world 1 clown boss bomb explode (maybe).. +1b - brazil boss, fire from ground +1c - pop? +1d - world 1 clown boss hit +1e - america, turtle spit +1f - man spitting fire +20 - france boss die (maybe) / antartica boss land +21 - france boss being hit +22 - taken too long +23 - used for brazil music? +24 - used for brazil music? +25 - egypt world genie boss sound +26 - final boss +27 - bag explode warning +28 - Let's Clean Up +29 - Tumble Pop! (between levels..) +2a - You Did It! +2b - Death +2c - france world boss arms / snowman fire in antartica +2d - space enemy fire +2e - egypt world genie appear +2f - coin +30 - france cannon fire +31 - giant vacuum? (i got this once on antartica..) +32 - world 1 clown boss bomb bounce +33 - end level +34 - end world? + +*/ + +/* music + +command 1 - stop? + + 4 - map screen + 5 - america + 6 - asia + 7 - egypt + 8 - antartica + 9 - brazil + a - japan + b - australia + c - france + d - how to play + + + f - stage clear + 10 - boss stage + 12 - between levels + + -- there are more tunes than we have music banks.. + i guess some get repeated +*/ + + + +static int tumblep_music_command; +static int tumblep_music_bank; +static int tumbleb2_music_is_playing; + +static void tumbleb2_playmusic(void) +{ + int status = OKIM6295_status_0_r(0); + + if (tumbleb2_music_is_playing) + { + if ((status&0x08)==0x00) + { + OKIM6295_data_0_w(0,0x80|tumblep_music_command); + OKIM6295_data_0_w(0,0x00|0x82); + } + } +} + + +static INTERRUPT_GEN( tumbleb2_interrupt ) +{ + cpunum_set_input_line(0, 6, HOLD_LINE); + tumbleb2_playmusic(); +} + +static int tumbleb_sound_lookup[256] = { + /*0 1 2 3 4 5 6 7 8 9 a b c d e f*/ + 0x00, -2, 0x00, 0x00, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, 0x00, -2, /* 0 */ + -2, 0x00, -2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 1 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, /* 2 */ + 0x19, 0x00, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 3 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, /* 4 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 5 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 6 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 8 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 9 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* a */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* b */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* c */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* d */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* e */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* f */ +}; + +/* we use channels 1,2,3 for sound effects, and channel 4 for music */ +static void tumbleb2_set_music_bank(int bank) +{ + UINT8 *oki = memory_region(REGION_SOUND1); + memcpy(&oki[0x38000], &oki[0x80000+0x38000+0x8000*bank],0x8000); +} + +static void tumbleb2_play_sound (int data) +{ + int status = OKIM6295_status_0_r(0); + + if ((status&0x01)==0x00) + { + OKIM6295_data_0_w(0,0x80|data); + OKIM6295_data_0_w(0,0x00|0x12); + } + else if ((status&0x02)==0x00) + { + OKIM6295_data_0_w(0,0x80|data); + OKIM6295_data_0_w(0,0x00|0x22); + } + else if ((status&0x04)==0x00) + { + OKIM6295_data_0_w(0,0x80|data); + OKIM6295_data_0_w(0,0x00|0x42); + } +} + +/* yay for terrible looped music .. there aren't even enough songs for all the levels */ +// bank 0 - tune 1 = end of level +// bank 0 - tune 2 = end of stage? +// bank 1 = map screen +// bank 2 = asia +// bank 3 = antartica? +// bank 4 = south america +// bank 5 = australia +// bank 6 = america?? or europe? +// bank 7 = how to play? +// bank 8 = boss??? + +static void process_tumbleb2_music_command(int data) +{ + int status = OKIM6295_status_0_r(0); + + if (data == 1) // stop? + { + if ((status&0x08)==0x08) + { + OKIM6295_data_0_w(0,0x40); /* Stop playing music */ + tumbleb2_music_is_playing = 0; + } + } + else + { + if (tumbleb2_music_is_playing != data) + { + tumbleb2_music_is_playing = data; + OKIM6295_data_0_w(0,0x40); // stop the current music + switch (data) + { + case 0x04: // map screen + tumblep_music_bank = 1; + tumblep_music_command = 0x38; + break; + + case 0x05: // america + tumblep_music_bank = 6; + tumblep_music_command = 0x38; + break; + + case 0x06: // asia + tumblep_music_bank = 2; + tumblep_music_command = 0x38; + break; + + case 0x07: // africa/egypt -- don't seem to have a tune for this one + tumblep_music_bank = 4; + tumblep_music_command = 0x38; + break; + + case 0x08: // antartica + tumblep_music_bank = 3; + tumblep_music_command = 0x38; + break; + + case 0x09: // brazil / south america + tumblep_music_bank = 4; + tumblep_music_command = 0x38; + break; + + case 0x0a: // japan -- don't seem to have a tune + tumblep_music_bank = 2; + tumblep_music_command = 0x38; + break; + + case 0x0b: // australia + tumblep_music_bank = 5; + tumblep_music_command = 0x38; + break; + + case 0x0c: // france/europe + tumblep_music_bank = 6; + tumblep_music_command = 0x38; + break; + + case 0x0d: // how to play + tumblep_music_bank = 7; + tumblep_music_command = 0x38; + break; + + case 0x0f: // stage clear + tumblep_music_bank = 0; + tumblep_music_command = 0x33; + break; + + case 0x10: // boss stage + tumblep_music_bank = 8; + tumblep_music_command = 0x38; + break; + + case 0x12: // world clear + tumblep_music_bank = 0; + tumblep_music_command = 0x34; + break; + + default: // anything else.. + tumblep_music_bank = 8; + tumblep_music_command = 0x38; + break; + } + tumbleb2_set_music_bank(tumblep_music_bank); + tumbleb2_playmusic(); + + } + + + } +} + + +static WRITE16_HANDLER(tumbleb2_soundmcu_w) +{ + int sound; + + sound = tumbleb_sound_lookup[data&0xff]; + + if (sound == 0x00) + { + /* pangpang has more commands than tumbleb2, extra sounds */ + //mame_printf_debug("Command %04x\n",data); + } + else if (sound == -2) + { + process_tumbleb2_music_command(data); + } + else + { + tumbleb2_play_sound(sound); + } +} + +/******************************************************************************/ + +static ADDRESS_MAP_START( tumblepopb_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_READ(MRA16_ROM) + AM_RANGE(0x100000, 0x100001) AM_READ(tumblepb_prot_r) + AM_RANGE(0x120000, 0x123fff) AM_READ(MRA16_RAM) + AM_RANGE(0x140000, 0x1407ff) AM_READ(MRA16_RAM) + AM_RANGE(0x160000, 0x1607ff) AM_READ(MRA16_RAM) + AM_RANGE(0x180000, 0x18000f) AM_READ(tumblepopb_controls_r) + AM_RANGE(0x1a0000, 0x1a07ff) AM_READ(MRA16_RAM) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( tumblepopb_writemem, ADDRESS_SPACE_PROGRAM, 16 ) +#if TUMBLEP_HACK + AM_RANGE(0x000000, 0x07ffff) AM_WRITE(MWA16_RAM) // To write levels modifications +#else + AM_RANGE(0x000000, 0x07ffff) AM_WRITE(MWA16_ROM) +#endif + AM_RANGE(0x100000, 0x100001) AM_WRITE(tumblepb_oki_w) + AM_RANGE(0x120000, 0x123fff) AM_WRITE(MWA16_RAM) AM_BASE(&tumblepb_mainram) + AM_RANGE(0x140000, 0x1407ff) AM_WRITE(paletteram16_xxxxBBBBGGGGRRRR_word_w) AM_BASE(&paletteram16) + AM_RANGE(0x160000, 0x1607ff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) /* Bootleg sprite buffer */ + AM_RANGE(0x160800, 0x160807) AM_WRITE(MWA16_RAM) // writes past the end of spriteram + AM_RANGE(0x18000c, 0x18000d) AM_WRITE(MWA16_NOP) + AM_RANGE(0x1a0000, 0x1a07ff) AM_WRITE(MWA16_RAM) + AM_RANGE(0x300000, 0x30000f) AM_WRITE(tumblepb_control_0_w) + AM_RANGE(0x320000, 0x320fff) AM_WRITE(tumblepb_pf1_data_w) AM_BASE(&tumblepb_pf1_data) + AM_RANGE(0x322000, 0x322fff) AM_WRITE(tumblepb_pf2_data_w) AM_BASE(&tumblepb_pf2_data) + AM_RANGE(0x340000, 0x3401ff) AM_WRITE(MWA16_NOP) /* Unused row scroll */ + AM_RANGE(0x340400, 0x34047f) AM_WRITE(MWA16_NOP) /* Unused col scroll */ + AM_RANGE(0x342000, 0x3421ff) AM_WRITE(MWA16_NOP) + AM_RANGE(0x342400, 0x34247f) AM_WRITE(MWA16_NOP) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( fncywld_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x0fffff) AM_READ(MRA16_ROM) + AM_RANGE(0x100000, 0x100001) AM_READ(YM2151_status_port_0_lsb_r) + AM_RANGE(0x100002, 0x100003) AM_READ(MRA16_NOP) // ym? + AM_RANGE(0x100004, 0x100005) AM_READ(OKIM6295_status_0_lsb_r) + AM_RANGE(0x140000, 0x140fff) AM_READ(MRA16_RAM) + AM_RANGE(0x160000, 0x1607ff) AM_READ(MRA16_RAM) + AM_RANGE(0x180000, 0x18000f) AM_READ(tumblepopb_controls_r) + AM_RANGE(0x320000, 0x321fff) AM_READ(MRA16_RAM) + AM_RANGE(0x322000, 0x323fff) AM_READ(MRA16_RAM) + AM_RANGE(0x1a0000, 0x1a07ff) AM_READ(MRA16_RAM) + AM_RANGE(0xff0000, 0xffffff) AM_READ(MRA16_RAM) // RAM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( fncywld_writemem, ADDRESS_SPACE_PROGRAM, 16 ) +#if FNCYWLD_HACK + AM_RANGE(0x000000, 0x0fffff) AM_WRITE(MWA16_RAM) // To write levels modifications +#else + AM_RANGE(0x000000, 0x0fffff) AM_WRITE(MWA16_ROM) +#endif + AM_RANGE(0x100000, 0x100001) AM_WRITE(YM2151_register_port_0_lsb_w) + AM_RANGE(0x100002, 0x100003) AM_WRITE(YM2151_data_port_0_lsb_w) + AM_RANGE(0x100004, 0x100005) AM_WRITE(OKIM6295_data_0_lsb_w) + AM_RANGE(0x140000, 0x140fff) AM_WRITE(paletteram16_xxxxRRRRGGGGBBBB_word_w) AM_BASE(&paletteram16) + AM_RANGE(0x160000, 0x1607ff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) /* sprites */ + AM_RANGE(0x160800, 0x16080f) AM_WRITE(MWA16_RAM) /* goes slightly past the end of spriteram? */ + AM_RANGE(0x18000c, 0x18000d) AM_WRITE(MWA16_NOP) + AM_RANGE(0x1a0000, 0x1a07ff) AM_WRITE(MWA16_RAM) + AM_RANGE(0x300000, 0x30000f) AM_WRITE(tumblepb_control_0_w) + AM_RANGE(0x320000, 0x321fff) AM_WRITE(fncywld_pf1_data_w) AM_BASE(&tumblepb_pf1_data) + AM_RANGE(0x322000, 0x323fff) AM_WRITE(fncywld_pf2_data_w) AM_BASE(&tumblepb_pf2_data) + AM_RANGE(0x340000, 0x3401ff) AM_WRITE(MWA16_NOP) /* Unused row scroll */ + AM_RANGE(0x340400, 0x34047f) AM_WRITE(MWA16_NOP) /* Unused col scroll */ + AM_RANGE(0x342000, 0x3421ff) AM_WRITE(MWA16_NOP) + AM_RANGE(0x342400, 0x34247f) AM_WRITE(MWA16_NOP) + AM_RANGE(0xff0000, 0xffffff) AM_WRITE(MWA16_RAM) // RAM +ADDRESS_MAP_END + + +static READ16_HANDLER( semibase_unknown_r ) +{ + return mame_rand(Machine); +} +static ADDRESS_MAP_START( htchctch_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x0fffff) AM_READ(MRA16_ROM) + AM_RANGE(0x100000, 0x10000f) AM_READ(semibase_unknown_r) + AM_RANGE(0x120000, 0x123fff) AM_READ(MRA16_RAM) + AM_RANGE(0x140000, 0x1407ff) AM_READ(MRA16_RAM) + AM_RANGE(0x160000, 0x160fff) AM_READ(MRA16_RAM) + AM_RANGE(0x180000, 0x18000f) AM_READ(tumblepopb_controls_r) + AM_RANGE(0x1a0000, 0x1a0fff) AM_READ(MRA16_RAM) + AM_RANGE(0x341000, 0x342fff) AM_READ(MRA16_RAM) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( htchctch_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x0fffff) AM_WRITE(MWA16_ROM) + AM_RANGE(0x100000, 0x100001) AM_WRITE(semicom_soundcmd_w) + AM_RANGE(0x100002, 0x100003) AM_WRITE(bcstory_tilebank_w) + AM_RANGE(0x120000, 0x123fff) AM_WRITE(MWA16_RAM) AM_BASE(&tumblepb_mainram) + AM_RANGE(0x140000, 0x1407ff) AM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE(&paletteram16) + AM_RANGE(0x160000, 0x160fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) /* Bootleg sprite buffer */ + AM_RANGE(0x18000c, 0x18000d) AM_WRITE(MWA16_NOP) + AM_RANGE(0x1a0000, 0x1a0fff) AM_WRITE(MWA16_RAM) + AM_RANGE(0x300000, 0x30000f) AM_WRITE(tumblepb_control_0_w) + AM_RANGE(0x320000, 0x321fff) AM_WRITE(tumblepb_pf1_data_w) AM_BASE(&tumblepb_pf1_data) + AM_RANGE(0x322000, 0x322fff) AM_WRITE(tumblepb_pf2_data_w) AM_BASE(&tumblepb_pf2_data) + AM_RANGE(0x341000, 0x342fff) AM_WRITE(MWA16_RAM) // extra ram? +ADDRESS_MAP_END + + +static ADDRESS_MAP_START( jumppop_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_READ(MRA16_ROM) + AM_RANGE(0x120000, 0x123fff) AM_READ(MRA16_RAM) + AM_RANGE(0x140000, 0x1407ff) AM_READ(MRA16_RAM) + AM_RANGE(0x160000, 0x160fff) AM_READ(MRA16_RAM) + + AM_RANGE(0x180002, 0x180003) AM_READ(input_port_0_word_r) + AM_RANGE(0x180004, 0x180005) AM_READ(input_port_1_word_r) + AM_RANGE(0x180006, 0x180007) AM_READ(input_port_2_word_r) + + AM_RANGE(0x1a0000, 0x1a7fff) AM_READ(MRA16_RAM) + + AM_RANGE(0x300000, 0x303fff) AM_READ(MRA16_RAM) + AM_RANGE(0x320000, 0x323fff) AM_READ(MRA16_RAM) +ADDRESS_MAP_END + +static WRITE16_HANDLER( jumpkids_sound_w ) +{ + soundlatch_w(0,data & 0xff); + cpunum_set_input_line(1,0,HOLD_LINE); +} + + +static ADDRESS_MAP_START( jumppop_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_WRITE(MWA16_ROM) + AM_RANGE(0x120000, 0x123fff) AM_WRITE(MWA16_RAM) AM_BASE(&tumblepb_mainram) + AM_RANGE(0x140000, 0x1407ff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16) + AM_RANGE(0x160000, 0x160fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) /* Bootleg sprite buffer */ + AM_RANGE(0x180000, 0x180001) AM_NOP /* IRQ ack? */ + AM_RANGE(0x18000c, 0x18000d) AM_WRITE(jumppop_sound_w) + AM_RANGE(0x1a0000, 0x1a7fff) AM_WRITE(MWA16_RAM) + + AM_RANGE(0x300000, 0x303fff) AM_WRITE(tumblepb_pf2_data_w) AM_BASE(&tumblepb_pf2_data) + AM_RANGE(0x320000, 0x323fff) AM_WRITE(tumblepb_pf1_data_w) AM_BASE(&tumblepb_pf1_data) +// AM_RANGE(0x300000, 0x303fff) AM_WRITE(MWA16_RAM) +// AM_RANGE(0x320000, 0x323fff) AM_WRITE(MWA16_RAM) + AM_RANGE(0x380000, 0x38000f) AM_WRITE(MWA16_RAM) AM_BASE(&jumppop_control) + +ADDRESS_MAP_END + + +static ADDRESS_MAP_START( suprtrio_main_cpu, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_ROM + AM_RANGE(0x700000, 0x700fff) AM_RAM AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) + AM_RANGE(0xa00000, 0xa0000f) AM_RAM AM_BASE(&suprtrio_control) + AM_RANGE(0xa20000, 0xa20fff) AM_RAM AM_WRITE(tumblepb_pf1_data_w) AM_BASE(&tumblepb_pf1_data) + AM_RANGE(0xa22000, 0xa22fff) AM_RAM AM_WRITE(tumblepb_pf2_data_w) AM_BASE(&tumblepb_pf2_data) + AM_RANGE(0xcf0000, 0xcf05ff) AM_RAM AM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE(&paletteram16) + + AM_RANGE(0xe00000, 0xe00001) AM_READ(input_port_0_word_r) AM_WRITE(suprtrio_tilebank_w) + + AM_RANGE(0xe40000, 0xe40001) AM_READ(input_port_1_word_r) + AM_RANGE(0xe80002, 0xe80003) AM_READ(input_port_2_word_r) + AM_RANGE(0xec0000, 0xec0001) AM_WRITE(semicom_soundcmd_w) + AM_RANGE(0xf00000, 0xf07fff) AM_RAM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( pangpang_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_READ(MRA16_ROM) + AM_RANGE(0x120000, 0x123fff) AM_READ(MRA16_RAM) + AM_RANGE(0x140000, 0x1407ff) AM_READ(MRA16_RAM) + AM_RANGE(0x160000, 0x1607ff) AM_READ(MRA16_RAM) + AM_RANGE(0x180000, 0x18000f) AM_READ(tumblepopb_controls_r) + AM_RANGE(0x1a0000, 0x1a07ff) AM_READ(MRA16_RAM) + AM_RANGE(0x320000, 0x321fff) AM_READ(MRA16_RAM) + AM_RANGE(0x340000, 0x341fff) AM_READ(MRA16_RAM) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( pangpang_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_WRITE(MWA16_ROM) + AM_RANGE(0x120000, 0x123fff) AM_WRITE(MWA16_RAM) AM_BASE(&tumblepb_mainram) + AM_RANGE(0x140000, 0x1407ff) AM_WRITE(paletteram16_xxxxBBBBGGGGRRRR_word_w) AM_BASE(&paletteram16) + AM_RANGE(0x160000, 0x1607ff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) /* Bootleg sprite buffer */ + AM_RANGE(0x160800, 0x160807) AM_WRITE(MWA16_RAM) // writes past the end of spriteram + AM_RANGE(0x1a0000, 0x1a07ff) AM_WRITE(MWA16_RAM) + AM_RANGE(0x300000, 0x30000f) AM_WRITE(tumblepb_control_0_w) + AM_RANGE(0x320000, 0x321fff) AM_WRITE(pangpang_pf1_data_w) AM_BASE(&tumblepb_pf1_data) + AM_RANGE(0x340000, 0x341fff) AM_WRITE(pangpang_pf2_data_w) AM_BASE(&tumblepb_pf2_data) +ADDRESS_MAP_END + + +/******************************************************************************/ + +#ifdef UNUSED_FUNCTION +static WRITE8_HANDLER( YM2151_w ) +{ + switch (offset) { + case 0: + YM2151_register_port_0_w(0,data); + break; + case 1: + YM2151_data_port_0_w(0,data); + break; + } +} +#endif + +static WRITE16_HANDLER( semicom_soundcmd_w ) +{ + if (ACCESSING_LSB) + { + soundlatch_w(0,data & 0xff); + // needed for Super Trio which reads the sound with polling +// cpu_spinuntil_time(ATTOTIME_IN_USEC(100)); + cpu_boost_interleave(attotime_zero, ATTOTIME_IN_USEC(20)); + + } +} + +static WRITE8_HANDLER( oki_sound_bank_w ) +{ + UINT8 *oki = memory_region(REGION_SOUND1); + memcpy(&oki[0x30000], &oki[(data * 0x10000) + 0x40000], 0x10000); +} + +static ADDRESS_MAP_START( semicom_sound_readmem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0xcfff) AM_READ(MRA8_ROM) + AM_RANGE(0xd000, 0xd7ff) AM_READ(MRA8_RAM) + AM_RANGE(0xf001, 0xf001) AM_READ(YM2151_status_port_0_r) + AM_RANGE(0xf002, 0xf002) AM_READ(OKIM6295_status_0_r) + AM_RANGE(0xf008, 0xf008) AM_READ(soundlatch_r) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( semicom_sound_writemem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0xcfff) AM_WRITE(MWA8_ROM) + AM_RANGE(0xd000, 0xd7ff) AM_WRITE(MWA8_RAM) + AM_RANGE(0xf000, 0xf000) AM_WRITE(YM2151_register_port_0_w) + AM_RANGE(0xf001, 0xf001) AM_WRITE(YM2151_data_port_0_w) + AM_RANGE(0xf002, 0xf002) AM_WRITE(OKIM6295_data_0_w) +// AM_RANGE(0xf006, 0xf006) ?? + AM_RANGE(0xf00e, 0xf00e) AM_WRITE(oki_sound_bank_w) +ADDRESS_MAP_END + +static WRITE8_HANDLER(jumppop_z80_bank_w) +{ + memory_set_bankptr(1, memory_region(REGION_CPU2) + 0x10000 + (0x4000 * data)); +} + +static ADDRESS_MAP_START( jumppop_sound_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x2fff) AM_ROM + AM_RANGE(0x8000, 0xbfff) AM_READ(MRA8_BANK1) + AM_RANGE(0xf800, 0xffff) AM_RAM +ADDRESS_MAP_END + +static READ8_HANDLER(jumppop_z80latch_r) +{ + cpunum_set_input_line(1, 0, CLEAR_LINE); + return soundlatch_r(0); +} + +static ADDRESS_MAP_START( jumppop_sound_io_map, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE(0x00, 0x00) AM_WRITE(YM3812_control_port_0_w) + AM_RANGE(0x01, 0x01) AM_WRITE(YM3812_write_port_0_w) + AM_RANGE(0x02, 0x02) AM_READWRITE(OKIM6295_status_0_r, OKIM6295_data_0_w) + AM_RANGE(0x03, 0x03) AM_READ(jumppop_z80latch_r) + AM_RANGE(0x04, 0x04) AM_NOP + AM_RANGE(0x05, 0x05) AM_WRITE(jumppop_z80_bank_w) + AM_RANGE(0x06, 0x06) AM_NOP +ADDRESS_MAP_END + +/* Jump Kids */ + +static ADDRESS_MAP_START( jumpkids_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_READ(MRA16_ROM) + AM_RANGE(0x120000, 0x123fff) AM_READ(MRA16_RAM) + AM_RANGE(0x140000, 0x1407ff) AM_READ(MRA16_RAM) + AM_RANGE(0x160000, 0x1607ff) AM_READ(MRA16_RAM) + AM_RANGE(0x180000, 0x18000f) AM_READ(tumblepopb_controls_r) + AM_RANGE(0x1a0000, 0x1a07ff) AM_READ(MRA16_RAM) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( jumpkids_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x07ffff) AM_WRITE(MWA16_ROM) + AM_RANGE(0x100000, 0x100001) AM_WRITE(jumpkids_sound_w) + AM_RANGE(0x120000, 0x123fff) AM_WRITE(MWA16_RAM) AM_BASE(&tumblepb_mainram) + AM_RANGE(0x140000, 0x1407ff) AM_WRITE(paletteram16_xxxxBBBBGGGGRRRR_word_w) AM_BASE(&paletteram16) + AM_RANGE(0x160000, 0x1607ff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) /* Bootleg sprite buffer */ + AM_RANGE(0x160800, 0x160807) AM_WRITE(MWA16_RAM) // writes past the end of spriteram + AM_RANGE(0x18000c, 0x18000d) AM_WRITE(MWA16_NOP) + AM_RANGE(0x1a0000, 0x1a07ff) AM_WRITE(MWA16_RAM) + AM_RANGE(0x300000, 0x30000f) AM_WRITE(tumblepb_control_0_w) + AM_RANGE(0x320000, 0x320fff) AM_WRITE(tumblepb_pf1_data_w) AM_BASE(&tumblepb_pf1_data) + AM_RANGE(0x322000, 0x322fff) AM_WRITE(tumblepb_pf2_data_w) AM_BASE(&tumblepb_pf2_data) + AM_RANGE(0x340000, 0x3401ff) AM_WRITE(MWA16_NOP) /* Unused row scroll */ + AM_RANGE(0x340400, 0x34047f) AM_WRITE(MWA16_NOP) /* Unused col scroll */ + AM_RANGE(0x342000, 0x3421ff) AM_WRITE(MWA16_NOP) + AM_RANGE(0x342400, 0x34247f) AM_WRITE(MWA16_NOP) +ADDRESS_MAP_END + +static WRITE8_HANDLER( jumpkids_oki_bank_w ) +{ + UINT8* sound1 = memory_region(REGION_SOUND1); + UINT8* sound2 = memory_region(REGION_SOUND2); + int bank = data & 0x03; + + memcpy (sound1+0x20000, sound2+bank*0x20000, 0x20000); +} + +static ADDRESS_MAP_START( jumpkids_sound_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x0fff) AM_ROM + AM_RANGE(0x8000, 0x87ff) AM_RAM + AM_RANGE(0x9000, 0x9000) AM_WRITE(jumpkids_oki_bank_w) + AM_RANGE(0x9800, 0x9800) AM_READWRITE(OKIM6295_status_0_r, OKIM6295_data_0_w) + AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_r) +ADDRESS_MAP_END + +/******************************************************************************/ + +static INPUT_PORTS_START( tumblepb ) + PORT_START /* Player 1 controls */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* button 3 - unused */ + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) + + PORT_START /* Player 2 controls */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* button 3 - unused */ + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) + + PORT_START /* Credits */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_VBLANK ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START /* Dip switch bank 1 */ + PORT_DIPNAME( 0xe0, 0xe0, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x80, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0xe0, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x60, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0xa0, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0xc0, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x40, DEF_STR( 1C_6C ) ) + PORT_DIPNAME( 0x1c, 0x1c, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x1c, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0c, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x14, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x18, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x08, DEF_STR( 1C_6C ) ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x01, 0x01, "2 Coins to Start, 1 to Continue" ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START /* Dip switch bank 2 */ + PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x80, "1" ) + PORT_DIPSETTING( 0x00, "2" ) + PORT_DIPSETTING( 0xc0, "3" ) + PORT_DIPSETTING( 0x40, "4" ) + PORT_DIPNAME( 0x30, 0x30, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x30, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) +#if TUMBLEP_HACK + PORT_DIPNAME( 0x08, 0x08, "Remove Monsters" ) +#else + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unused ) ) // See notes +#endif + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +#if TUMBLEP_HACK + PORT_DIPNAME( 0x04, 0x04, "Edit Levels" ) +#else + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unused ) ) // See notes +#endif + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Allow_Continue ) ) + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( metlsavr ) + PORT_START /* Player 1 controls */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) + + PORT_START /* Player 2 controls */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) + + PORT_START /* Credits */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_VBLANK ) // to be confirmed + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("DSW1") /* Dip switch bank 1 */ + PORT_DIPUNUSED_DIPLOC( 0x01, IP_ACTIVE_LOW, "SW1:8" ) + PORT_DIPUNUSED_DIPLOC( 0x02, IP_ACTIVE_LOW, "SW1:7" ) + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:6,5") + PORT_DIPSETTING( 0x00, "2" ) + PORT_DIPSETTING( 0x0c, "3" ) + PORT_DIPSETTING( 0x08, "4" ) + PORT_DIPSETTING( 0x04, "5" ) + PORT_DIPNAME( 0x70, 0x70, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:4,3,2") + PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x30, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x70, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x60, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x50, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x40, DEF_STR( 1C_5C ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:1") + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) + + PORT_START_TAG("DSW2") /* Dip switch bank 2 */ + PORT_SERVICE_DIPLOC( 0x01, IP_ACTIVE_LOW, "SW2:8" ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:7") // See notes + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:6") // See notes + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Language ) ) PORT_DIPLOCATION("SW2:5") + PORT_DIPSETTING( 0x08, DEF_STR( English ) ) + PORT_DIPSETTING( 0x00, "Korean" ) + PORT_DIPNAME( 0x30, 0x30, "Life Meter" ) PORT_DIPLOCATION("SW2:4,3") + PORT_DIPSETTING( 0x00, "66%" ) + PORT_DIPSETTING( 0x30, "100%" ) + PORT_DIPSETTING( 0x20, "133%" ) + PORT_DIPSETTING( 0x10, "166%" ) + PORT_DIPNAME( 0xc0, 0xc0, "Time" ) PORT_DIPLOCATION("SW2:2,1") + PORT_DIPSETTING( 0x40, "30 Seconds" ) + PORT_DIPSETTING( 0x80, "40 Seconds" ) + PORT_DIPSETTING( 0xc0, "60 Seconds" ) + PORT_DIPSETTING( 0x00, "80 Seconds" ) +INPUT_PORTS_END + +static INPUT_PORTS_START( suprtrio ) + PORT_START + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START2 ) + + PORT_START + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0xfffe, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START + PORT_DIPNAME( 0x0007, 0x0000, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW:8,7,6") + PORT_DIPSETTING( 0x0006, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0x0005, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0003, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0007, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x0018, 0x0010, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW:5,4") + PORT_DIPSETTING( 0x0000, "1" ) + PORT_DIPSETTING( 0x0008, "2" ) + PORT_DIPSETTING( 0x0010, "3" ) + PORT_DIPSETTING( 0x0018, "5" ) + PORT_DIPNAME( 0x0020, 0x0000, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW:3") + PORT_DIPSETTING( 0x0000, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Hard ) ) + PORT_DIPNAME( 0x0040, 0x0000, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW:2") + PORT_DIPSETTING( 0x0000, "50000" ) + PORT_DIPSETTING( 0x0040, "60000" ) + PORT_SERVICE_DIPLOC( 0x80, IP_ACTIVE_HIGH, "SW:1" ) + PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED ) +INPUT_PORTS_END + +static INPUT_PORTS_START( htchctch ) + PORT_START /* Player 1 controls */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* button 3 - unused */ + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) + + PORT_START /* Player 2 controls */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* button 3 - unused */ + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) + + PORT_START /* Credits */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_VBLANK ) // to be confirmed + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("DSW1") /* Dip switch bank 1 */ + PORT_DIPUNUSED_DIPLOC( 0x01, IP_ACTIVE_LOW, "SW1:8" ) + PORT_DIPUNUSED_DIPLOC( 0x02, IP_ACTIVE_LOW, "SW1:7" ) + PORT_DIPUNUSED_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW1:6" ) + PORT_DIPUNUSED_DIPLOC( 0x08, IP_ACTIVE_LOW, "SW1:5" ) + PORT_DIPUNUSED_DIPLOC( 0x10, IP_ACTIVE_LOW, "SW1:4" ) + PORT_DIPUNUSED_DIPLOC( 0x20, IP_ACTIVE_LOW, "SW1:3" ) + PORT_DIPUNUSED_DIPLOC( 0x40, IP_ACTIVE_LOW, "SW1:2" ) + PORT_DIPUNUSED_DIPLOC( 0x80, IP_ACTIVE_LOW, "SW1:1" ) + + PORT_START_TAG("DSW2") /* Dip switch bank 2 */ + PORT_SERVICE_DIPLOC( 0x01, IP_ACTIVE_LOW, "SW2:8" ) + PORT_DIPNAME( 0x06, 0x06, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:7,6") + PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x06, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Very_Hard ) ) + PORT_DIPNAME( 0x38, 0x38, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW2:5,4,3") + PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x30, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x38, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x28, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x18, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x08, DEF_STR( 1C_3C ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:2") // See notes + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:1") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( cookbib ) + PORT_START /* Player 1 controls */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* button 3 - unused */ + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) + + PORT_START /* Player 2 controls */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* button 3 - unused */ + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) + + PORT_START /* Credits */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_VBLANK ) // to be confirmed + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("DSW1") /* Dip switch bank 1 */ + PORT_DIPUNUSED_DIPLOC( 0x01, IP_ACTIVE_LOW, "SW1:8" ) + PORT_DIPUNUSED_DIPLOC( 0x02, IP_ACTIVE_LOW, "SW1:7" ) + PORT_DIPUNUSED_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW1:6" ) + PORT_DIPUNUSED_DIPLOC( 0x08, IP_ACTIVE_LOW, "SW1:5" ) + PORT_DIPUNUSED_DIPLOC( 0x10, IP_ACTIVE_LOW, "SW1:4" ) + PORT_DIPUNUSED_DIPLOC( 0x20, IP_ACTIVE_LOW, "SW1:3" ) + PORT_DIPUNUSED_DIPLOC( 0x40, IP_ACTIVE_LOW, "SW1:2" ) + PORT_DIPUNUSED_DIPLOC( 0x80, IP_ACTIVE_LOW, "SW1:1" ) + + PORT_START_TAG("DSW2") /* Dip switch bank 2 */ + PORT_SERVICE_DIPLOC( 0x01, IP_ACTIVE_LOW, "SW2:8" ) + PORT_DIPNAME( 0x06, 0x06, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:7,6") + PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x06, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Very_Hard ) ) + PORT_DIPNAME( 0x38, 0x38, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW2:5,4,3") + PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x30, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x38, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x28, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x18, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x08, DEF_STR( 1C_3C ) ) + PORT_DIPNAME( 0x40, 0x40, "Winning Rounds (VS Mode)" ) PORT_DIPLOCATION("SW2:2") + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x40, "2" ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:1") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_SERVICE( 0x01, IP_ACTIVE_LOW ) +INPUT_PORTS_END + +static INPUT_PORTS_START( chokchok ) + PORT_START /* Player 1 controls */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* button 3 - unused */ + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) + + PORT_START /* Player 2 controls */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* button 3 - unused */ + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) + + PORT_START /* Credits */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_VBLANK ) // to be confirmed + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("DSW1") /* Dip switch bank 1 */ + PORT_DIPNAME( 0x01, 0x01, "Winning Rounds" ) PORT_DIPLOCATION("SW1:8") + PORT_DIPSETTING( 0x00, "2" ) + PORT_DIPSETTING( 0x01, "3" ) + PORT_DIPNAME( 0x06, 0x06, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:7,6") + PORT_DIPSETTING( 0x06, "0" ) + PORT_DIPSETTING( 0x02, "1" ) + PORT_DIPSETTING( 0x04, "2" ) + PORT_DIPSETTING( 0x00, "3" ) + PORT_DIPNAME( 0x18, 0x18, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5,4") + PORT_DIPSETTING( 0x18, "0" ) + PORT_DIPSETTING( 0x08, "1" ) + PORT_DIPSETTING( 0x10, "2" ) + PORT_DIPSETTING( 0x00, "3" ) + PORT_DIPNAME( 0x20, 0x20, "Time" ) PORT_DIPLOCATION("SW1:3") + PORT_DIPSETTING( 0x20, "60 Seconds" ) + PORT_DIPSETTING( 0x00, "90 Seconds" ) + PORT_DIPNAME( 0xc0, 0xc0, "Starting Balls" ) PORT_DIPLOCATION("SW1:1,2") + PORT_DIPSETTING( 0x00, "3" ) + PORT_DIPSETTING( 0xc0, "4" ) + PORT_DIPSETTING( 0x40, "5" ) + PORT_DIPSETTING( 0x80, "6" ) + + PORT_START_TAG("DSW2") /* Dip switch bank 2 */ + PORT_SERVICE_DIPLOC( 0x01, IP_ACTIVE_LOW, "SW2:8" ) + PORT_DIPNAME( 0x06, 0x06, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:7,6") + PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x06, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Very_Hard ) ) + PORT_DIPNAME( 0x38, 0x38, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW2:5,4,3") + PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x30, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x38, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x28, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x18, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x08, DEF_STR( 1C_3C ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:2") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:1") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( fncywld ) + PORT_START /* Player 1 controls */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) + + PORT_START /* Player 2 controls */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) + + PORT_START /* Credits */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_VBLANK ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START /* Dip switch bank 1 */ + PORT_DIPNAME( 0xe0, 0xe0, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x40, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x60, DEF_STR( 2C_1C ) ) +// PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) ) // duplicated setting + PORT_DIPSETTING( 0xe0, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0xc0, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0xa0, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x80, DEF_STR( 1C_4C ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Allow_Continue ) ) + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Language ) ) // only seems to the title screen + PORT_DIPSETTING( 0x04, DEF_STR( English ) ) + PORT_DIPSETTING( 0x00, "Korean" ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x01, 0x01, "2 Coins to Start, 1 to Continue" ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START /* Dip switch bank 2 */ + PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x80, "1" ) + PORT_DIPSETTING( 0x00, "2" ) + PORT_DIPSETTING( 0xc0, "3" ) + PORT_DIPSETTING( 0x40, "4" ) + PORT_DIPNAME( 0x30, 0x30, DEF_STR( Difficulty ) ) // to be confirmed + PORT_DIPSETTING( 0x30, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) + +#if FNCYWLD_HACK + PORT_DIPNAME( 0x08, 0x08, "Remove Monsters" ) +#else + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unused ) ) // See notes +#endif + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +#if FNCYWLD_HACK + PORT_DIPNAME( 0x04, 0x04, "Edit Levels" ) +#else + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unused ) ) // See notes +#endif + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x01, 0x01, "Freeze" ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( bcstory ) + PORT_START /* Player 1 controls */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) + + PORT_START /* Player 2 controls */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) + + PORT_START /* Credits */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_VBLANK ) // to be confirmed + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("DSW1") /* Dip switch bank 1 */ + PORT_SERVICE_DIPLOC( 0x01, IP_ACTIVE_LOW, "SW1:8" ) + PORT_DIPNAME( 0x0e, 0x0e, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:7,6,5") + PORT_DIPSETTING( 0x04, "Level 1" ) + PORT_DIPSETTING( 0x08, "Level 2" ) + PORT_DIPSETTING( 0x00, "Level 3" ) + PORT_DIPSETTING( 0x0e, "Level 4" ) + PORT_DIPSETTING( 0x06, "Level 5" ) + PORT_DIPSETTING( 0x0a, "Level 6" ) + PORT_DIPSETTING( 0x02, "Level 7" ) + PORT_DIPSETTING( 0x0c, "Level 8" ) + PORT_DIPNAME( 0x70, 0x70, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:4,3,2") + PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0x40, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x60, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x70, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x50, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x30, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 1C_3C ) ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:1") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START_TAG("DSW2") /* Dip switch bank 2 */ + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW2:8") + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPUNUSED_DIPLOC( 0x02, IP_ACTIVE_LOW, "SW2:7" ) // See notes + PORT_DIPUNUSED_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW2:6" ) // See notes + PORT_DIPUNUSED_DIPLOC( 0x08, IP_ACTIVE_LOW, "SW2:5" ) + PORT_DIPUNUSED_DIPLOC( 0x10, IP_ACTIVE_LOW, "SW2:4" ) + PORT_DIPNAME( 0x20, 0x00, "Event Selection" ) PORT_DIPLOCATION("SW2:3") // See notes + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, "Control Type" ) PORT_DIPLOCATION("SW2:2") // See notes + PORT_DIPSETTING( 0x40, "Joystick + Buttons" ) + PORT_DIPSETTING( 0x00, "Buttons Only" ) + PORT_DIPNAME( 0x80, 0x80, "Debug Mode" ) PORT_DIPLOCATION("SW2:1") // See notes + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( semibase ) + PORT_START /* Player 1 controls */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) + + PORT_START /* Player 2 controls */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) + + PORT_START /* Credits */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) // See notes + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN4 ) // See notes + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("DSW1") /* Dip switch bank 1 */ + PORT_SERVICE_DIPLOC( 0x01, IP_ACTIVE_LOW, "SW1:8" ) + PORT_DIPNAME( 0x0e, 0x0e, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:7,6,5") + PORT_DIPSETTING( 0x04, "Level 1" ) + PORT_DIPSETTING( 0x08, "Level 2" ) + PORT_DIPSETTING( 0x00, "Level 3" ) + PORT_DIPSETTING( 0x0e, "Level 4" ) + PORT_DIPSETTING( 0x06, "Level 5" ) + PORT_DIPSETTING( 0x0a, "Level 6" ) + PORT_DIPSETTING( 0x02, "Level 7" ) + PORT_DIPSETTING( 0x0c, "Level 8" ) + PORT_DIPNAME( 0x70, 0x70, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:4,3,2") + PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0x40, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x60, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x70, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x50, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x30, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 1C_3C ) ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:1") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START_TAG("DSW2") /* Dip switch bank 2 */ + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW2:8") + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPUNUSED_DIPLOC( 0x02, IP_ACTIVE_LOW, "SW2:7" ) // See notes + PORT_DIPUNUSED_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW2:6" ) // See notes + PORT_DIPUNUSED_DIPLOC( 0x08, IP_ACTIVE_LOW, "SW2:5" ) + PORT_DIPUNUSED_DIPLOC( 0x10, IP_ACTIVE_LOW, "SW2:4" ) // See notes + PORT_DIPNAME( 0x20, 0x20, "VS CPU Game Ends" ) PORT_DIPLOCATION("SW2:3") // See notes + PORT_DIPSETTING( 0x20, "+10" ) + PORT_DIPSETTING( 0x00, "+7" ) + PORT_DIPNAME( 0x40, 0x40, "VS Game" ) PORT_DIPLOCATION("SW2:2") // See notes + PORT_DIPSETTING( 0x40, "1 Credit / 2 Innings" ) + PORT_DIPSETTING( 0x00, "1 Credit / 3 Innings" ) + PORT_DIPNAME( 0x80, 0x80, "Full 2 Players Game" ) PORT_DIPLOCATION("SW2:1") // See notes + PORT_DIPSETTING( 0x00, "4 Credits" ) + PORT_DIPSETTING( 0x80, "6 Credits" ) +INPUT_PORTS_END + +static INPUT_PORTS_START( sdfight ) + PORT_START /* Player 1 controls */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) + + PORT_START /* Player 2 controls */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) + + PORT_START /* Credits */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_VBLANK ) // to be confirmed + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("DSW1") /* Dip switch bank 1 */ + PORT_SERVICE_DIPLOC( 0x01, IP_ACTIVE_LOW, "SW1:8" ) /* These dips were done from the Test mode screens */ + PORT_DIPNAME( 0x0e, 0x0e, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:7,6,5") + PORT_DIPSETTING( 0x04, "Level 1" ) + PORT_DIPSETTING( 0x08, "Level 2" ) + PORT_DIPSETTING( 0x00, "Level 3" ) + PORT_DIPSETTING( 0x0e, "Level 4" ) + PORT_DIPSETTING( 0x06, "Level 5" ) + PORT_DIPSETTING( 0x0a, "Level 6" ) + PORT_DIPSETTING( 0x02, "Level 7" ) + PORT_DIPSETTING( 0x0c, "Level 8" ) + PORT_DIPNAME( 0x70, 0x70, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:4,3,2") + PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0x40, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x60, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x70, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x50, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x30, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 1C_3C ) ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:1") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START_TAG("DSW2") /* Dip switch bank 2 */ + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW2:8") /* Only Free Play shows in Test Mode */ + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:7") + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:6") + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, "Rounds to Win" ) PORT_DIPLOCATION("SW2:5") /* Does not show up in Test Mode screen */ + PORT_DIPSETTING( 0x08, "2 Rounds" ) + PORT_DIPSETTING( 0x00, "3 Rounds" ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:4") + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:3") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0xc0, 0xc0, "Time" ) PORT_DIPLOCATION("SW2:2,1") /* Does not show up in Test Mode screen */ + PORT_DIPSETTING( 0x40, "30" ) + PORT_DIPSETTING( 0x80, "50" ) + PORT_DIPSETTING( 0xc0, "70" ) + PORT_DIPSETTING( 0x00, "90" ) +INPUT_PORTS_END + +static INPUT_PORTS_START( wlstar ) + PORT_START /* Player 1 controls */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) + + PORT_START /* Player 2 controls */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) + + PORT_START /* Credits */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_VBLANK ) // to be confirmed + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("DSW1") /* Dip switch bank 1 */ + PORT_SERVICE_DIPLOC( 0x01, IP_ACTIVE_LOW, "SW1:8" ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START_TAG("DSW2") /* Dip switch bank 2 */ + PORT_DIPNAME( 0x01, 0x01, "0" ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( dquizgo ) + PORT_START /* Player 1 controls */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) + + PORT_START /* Player 2 controls */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) + + PORT_START /* Credits */ + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_VBLANK ) // to be confirmed + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("DSW1") /* Dip switch bank 1 */ + PORT_SERVICE_DIPLOC( 0x01, IP_ACTIVE_LOW, "SW1:8" ) + PORT_DIPNAME( 0x0e, 0x0e, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:7,6,5") + PORT_DIPSETTING( 0x04, "Level 1" ) + PORT_DIPSETTING( 0x08, "Level 2" ) + PORT_DIPSETTING( 0x00, "Level 3" ) + PORT_DIPSETTING( 0x0e, "Level 4" ) + PORT_DIPSETTING( 0x06, "Level 5" ) + PORT_DIPSETTING( 0x0a, "Level 6" ) + PORT_DIPSETTING( 0x02, "Level 7" ) + PORT_DIPSETTING( 0x0c, "Level 8" ) + PORT_DIPNAME( 0x70, 0x70, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:4,3,2") +// PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) ) +// PORT_DIPSETTING( 0x20, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x40, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x60, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x70, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x50, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x30, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 1C_3C ) ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:1") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START_TAG("DSW2") /* Dip switch bank 2 */ + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW2:8") // See notes + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPUNUSED_DIPLOC( 0x02, IP_ACTIVE_LOW, "SW2:7" ) + PORT_DIPUNUSED_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW2:6" ) + PORT_DIPUNUSED_DIPLOC( 0x08, IP_ACTIVE_LOW, "SW2:5" ) + PORT_DIPUNUSED_DIPLOC( 0x10, IP_ACTIVE_LOW, "SW2:4" ) + PORT_DIPUNUSED_DIPLOC( 0x20, IP_ACTIVE_LOW, "SW2:3" ) + PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:2,1") // See notes + PORT_DIPSETTING( 0x00, "2" ) + PORT_DIPSETTING( 0xc0, "3" ) + PORT_DIPSETTING( 0x40, "4" ) + PORT_DIPSETTING( 0x80, "5" ) +INPUT_PORTS_END + +static INPUT_PORTS_START( jumppop ) + PORT_START /* Controls */ + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START /* Coins / Start Buttons */ + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0xfff0, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START /* DSW */ + PORT_SERVICE_DIPLOC( 0x0001, IP_ACTIVE_LOW, "SWA:1" ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SWA:2") + PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x001c, 0x001c, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SWA:3,4,5") + PORT_DIPSETTING( 0x0000, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x001c, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x000c, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0014, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0018, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( 1C_6C ) ) + PORT_DIPNAME( 0x00e0, 0x00e0, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SWA:6,7,8") + PORT_DIPSETTING( 0x0000, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00e0, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0060, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x00a0, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x00c0, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( 1C_6C ) ) + PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SWB:1") + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SWB:2") + PORT_DIPSETTING( 0x0000, DEF_STR( No ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x0400, 0x0400, "Picture Viewer" ) PORT_DIPLOCATION("SWB:3") + PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0800, 0x0800, "BG Type" ) PORT_DIPLOCATION("SWB:4") // See notes + PORT_DIPSETTING( 0x0800, "1" ) + PORT_DIPSETTING( 0x0000, "2" ) + PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWB:5,6") + PORT_DIPSETTING( 0x2000, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x3000, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0xc000, 0xc000, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWB:7,8") + PORT_DIPSETTING( 0x8000, "1" ) + PORT_DIPSETTING( 0x0000, "2" ) + PORT_DIPSETTING( 0xc000, "3" ) + PORT_DIPSETTING( 0x4000, "4" ) +INPUT_PORTS_END + +/******************************************************************************/ + +static const gfx_layout tcharlayout = +{ + 8,8, + RGN_FRAC(1,2), + 4, + { RGN_FRAC(1,2)+8, RGN_FRAC(1,2)+0, 8, 0 }, + { 0, 1, 2, 3, 4, 5, 6, 7 }, + { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 }, + 16*8 +}; + +static const gfx_layout jumppop_tcharlayout = +{ + 8,8, + RGN_FRAC(1,2), + 8, + { 0,1,2,3,4,5,6,7 }, + {RGN_FRAC(1,2)+0,RGN_FRAC(1,2)+8,0,8,RGN_FRAC(1,2)+16,RGN_FRAC(1,2)+24,16,24 }, + { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 }, + 32*8 +}; + +static const gfx_layout tlayout = +{ + 16,16, + RGN_FRAC(1,2), + 4, + { RGN_FRAC(1,2)+8, RGN_FRAC(1,2)+0, 8, 0 }, + { 32*8+0, 32*8+1, 32*8+2, 32*8+3, 32*8+4, 32*8+5, 32*8+6, 32*8+7, + 0, 1, 2, 3, 4, 5, 6, 7 }, + { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16, + 8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 }, + 64*8 +}; + +static const gfx_layout suprtrio_tlayout = +{ + 16,16, + RGN_FRAC(1,4), + 4, + { RGN_FRAC(2,4),RGN_FRAC(0,4), RGN_FRAC(3,4), RGN_FRAC(1,4) }, + + { 0, 1, 2, 3, 4, 5, 6, 7,16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6,16*8+7 }, + { 1*8, 0*8, 2*8, 3*8, 5*8, 4*8, 6*8, 7*8, + 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 }, + 32*8 +}; + + +static const gfx_layout jumpop_tlayout = +{ + 16,16, + RGN_FRAC(1,2), + 8, + { 0,1,2,3,4,5,6,7 }, + {RGN_FRAC(1,2)+0,RGN_FRAC(1,2)+8,0,8,RGN_FRAC(1,2)+16,RGN_FRAC(1,2)+24,16,24, + 256+RGN_FRAC(1,2)+0,256+RGN_FRAC(1,2)+8,256+0,256+8,256+RGN_FRAC(1,2)+16,256+RGN_FRAC(1,2)+24,256+16,256+24 + }, + { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32, + 512+0*32, 512+1*32, 512+2*32, 512+3*32, 512+4*32, 512+5*32, 512+6*32, 512+7*32 + }, + 128*8 +}; + + + +static GFXDECODE_START( tumbleb ) + GFXDECODE_ENTRY( REGION_GFX1, 0, tcharlayout, 256, 16 ) /* Characters 8x8 */ + GFXDECODE_ENTRY( REGION_GFX1, 0, tlayout, 512, 16 ) /* Tiles 16x16 */ + GFXDECODE_ENTRY( REGION_GFX1, 0, tlayout, 256, 16 ) /* Tiles 16x16 */ + GFXDECODE_ENTRY( REGION_GFX2, 0, tlayout, 0, 16 ) /* Sprites 16x16 */ +GFXDECODE_END + +static GFXDECODE_START( suprtrio ) + GFXDECODE_ENTRY( REGION_GFX1, 0, tcharlayout, 256, 16 ) /* Characters 8x8 */ + GFXDECODE_ENTRY( REGION_GFX1, 0, suprtrio_tlayout, 512, 16 ) /* Tiles 16x16 */ + GFXDECODE_ENTRY( REGION_GFX1, 0, suprtrio_tlayout, 256, 16 ) /* Tiles 16x16 */ + GFXDECODE_ENTRY( REGION_GFX2, 0, tlayout, 0, 16 ) /* Sprites 16x16 */ +GFXDECODE_END + +static GFXDECODE_START( fncywld ) + GFXDECODE_ENTRY( REGION_GFX1, 0, tcharlayout, 0x400, 0x40 ) /* Characters 8x8 */ + GFXDECODE_ENTRY( REGION_GFX1, 0, tlayout, 0x400, 0x40 ) /* Tiles 16x16 */ + GFXDECODE_ENTRY( REGION_GFX1, 0, tlayout, 0x200, 0x40 ) /* Tiles 16x16 */ + GFXDECODE_ENTRY( REGION_GFX2, 0, tlayout, 0, 0x40 ) /* Sprites 16x16 */ +GFXDECODE_END + +static GFXDECODE_START( jumppop ) + GFXDECODE_ENTRY( REGION_GFX1, 0, jumppop_tcharlayout, 0x100, 0x40 ) /* Characters 8x8 */ + GFXDECODE_ENTRY( REGION_GFX1, 0, jumpop_tlayout, 0x100, 0x40 ) /* Tiles 16x16 */ + GFXDECODE_ENTRY( REGION_GFX1, 0, jumpop_tlayout, 0x100, 0x40 ) /* Tiles 16x16 */ + GFXDECODE_ENTRY( REGION_GFX2, 0, tlayout, 0, 0x40 ) /* Sprites 16x16 */ +GFXDECODE_END + + +/******************************************************************************/ + + +static MACHINE_DRIVER_START( tumblepb ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 14000000) + MDRV_CPU_PROGRAM_MAP(tumblepopb_readmem,tumblepopb_writemem) + MDRV_CPU_VBLANK_INT(irq6_line_hold,1) + + MDRV_SCREEN_REFRESH_RATE(58) + MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529)) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(40*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(tumbleb) + MDRV_PALETTE_LENGTH(1024) + + MDRV_VIDEO_START(tumblepb) + MDRV_VIDEO_UPDATE(tumblepb) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(OKIM6295, 8000000/10) + MDRV_SOUND_CONFIG(okim6295_interface_region_1_pin7high) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.70) +MACHINE_DRIVER_END + + +static MACHINE_DRIVER_START( tumbleb2 ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 14000000) + MDRV_CPU_PROGRAM_MAP(tumblepopb_readmem,tumblepopb_writemem) + MDRV_CPU_VBLANK_INT(tumbleb2_interrupt,1) + + MDRV_SCREEN_REFRESH_RATE(58) + MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529)) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(40*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(tumbleb) + MDRV_PALETTE_LENGTH(1024) + + MDRV_VIDEO_START(tumblepb) + MDRV_VIDEO_UPDATE(tumblepb) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(OKIM6295, 8000000/10) + MDRV_SOUND_CONFIG(okim6295_interface_region_1_pin7high) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.70) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( jumpkids ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 12000000) + MDRV_CPU_PROGRAM_MAP(jumpkids_readmem,jumpkids_writemem) + MDRV_CPU_VBLANK_INT(irq6_line_hold,1) + + /* z80? */ + MDRV_CPU_ADD( Z80, 8000000/2) + MDRV_CPU_PROGRAM_MAP(jumpkids_sound_map,0) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529)) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(40*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(tumbleb) + MDRV_PALETTE_LENGTH(1024) + + MDRV_VIDEO_START(tumblepb) + MDRV_VIDEO_UPDATE(jumpkids) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(OKIM6295, 8000000/8) + MDRV_SOUND_CONFIG(okim6295_interface_region_1_pin7high) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.70) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( fncywld ) + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 12000000) + MDRV_CPU_PROGRAM_MAP(fncywld_readmem,fncywld_writemem) + MDRV_CPU_VBLANK_INT(irq6_line_hold,1) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529)) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(40*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(fncywld) + MDRV_PALETTE_LENGTH(0x800) + + MDRV_VIDEO_START(fncywld) + MDRV_VIDEO_UPDATE(fncywld) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(YM2151, 32220000/9) + MDRV_SOUND_ROUTE(0, "left", 0.20) + MDRV_SOUND_ROUTE(1, "right", 0.20) + + MDRV_SOUND_ADD(OKIM6295, 1023924) + MDRV_SOUND_CONFIG(okim6295_interface_region_1_pin7high) // clock frequency & pin 7 not verified + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 1.0) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 1.0) +MACHINE_DRIVER_END + + + +static void semicom_irqhandler(int irq) +{ + cpunum_set_input_line(1,0,irq ? ASSERT_LINE : CLEAR_LINE); +} + + +static struct YM2151interface semicom_ym2151_interface = +{ + semicom_irqhandler +}; + +static MACHINE_RESET (htchctch) +{ + /* copy protection data every reset */ + + UINT16 *PROTDATA = (UINT16*)memory_region(REGION_USER1); + int i; + + for (i = 0;i < memory_region_length( REGION_USER1 )/2;i++) + tumblepb_mainram[0x000/2 + i] = PROTDATA[i]; + +} + +static MACHINE_DRIVER_START( htchctch ) + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 15000000) /* verified */ + MDRV_CPU_PROGRAM_MAP(htchctch_readmem,htchctch_writemem) + MDRV_CPU_VBLANK_INT(irq6_line_hold,1) + + MDRV_CPU_ADD( Z80, 15000000/4) /* verified on dquizgo */ + + /* audio CPU */ + MDRV_CPU_PROGRAM_MAP(semicom_sound_readmem,semicom_sound_writemem) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2400)) // ?? cookbib needs it above ~2400 or the Joystick on the How to Play screen is the wrong colour?! + + MDRV_MACHINE_RESET ( htchctch ) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(40*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(tumbleb) + MDRV_PALETTE_LENGTH(1024) + + MDRV_VIDEO_START(tumblepb) + MDRV_VIDEO_UPDATE(semicom) + + /* sound hardware - same as hyperpac */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD_TAG("ym2151", YM2151, 3427190) + MDRV_SOUND_CONFIG(semicom_ym2151_interface) + MDRV_SOUND_ROUTE(0, "left", 0.10) + MDRV_SOUND_ROUTE(1, "right", 0.10) + + MDRV_SOUND_ADD(OKIM6295, 1024000) + MDRV_SOUND_CONFIG(okim6295_interface_region_1_pin7high) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 1.0) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 1.0) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( cookbib ) + MDRV_IMPORT_FROM(htchctch) + MDRV_VIDEO_UPDATE( semicom_altoffsets ) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( bcstory ) + MDRV_IMPORT_FROM(htchctch) + MDRV_VIDEO_UPDATE( bcstory ) + + MDRV_SOUND_REPLACE("ym2151", YM2151, 3427190) + MDRV_SOUND_CONFIG(semicom_ym2151_interface) + MDRV_SOUND_ROUTE(0, "left", 0.10) + MDRV_SOUND_ROUTE(1, "right", 0.10) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( semibase ) + MDRV_IMPORT_FROM(bcstory) + MDRV_VIDEO_UPDATE(semibase ) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( sdfight ) + MDRV_IMPORT_FROM(bcstory) + MDRV_VIDEO_START(sdfight) + MDRV_VIDEO_UPDATE(sdfight) +MACHINE_DRIVER_END + + +static MACHINE_DRIVER_START( metlsavr ) + MDRV_IMPORT_FROM(cookbib) + + MDRV_SOUND_REPLACE("ym2151", YM2151, 3427190) + MDRV_SOUND_CONFIG(semicom_ym2151_interface) + MDRV_SOUND_ROUTE(0, "left", 0.10) + MDRV_SOUND_ROUTE(1, "right", 0.10) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( jumppop ) + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 16000000) + MDRV_CPU_PROGRAM_MAP(jumppop_readmem,jumppop_writemem) + MDRV_CPU_VBLANK_INT(irq6_line_hold,1) + + MDRV_CPU_ADD(Z80, 3500000) /* verified */ + /* audio CPU */ + MDRV_CPU_PROGRAM_MAP(jumppop_sound_map, 0) + MDRV_CPU_IO_MAP(jumppop_sound_io_map, 0) + MDRV_CPU_PERIODIC_INT(nmi_line_pulse, 1953) /* measured */ + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529)) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(40*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(jumppop) + MDRV_PALETTE_LENGTH(1024) + + MDRV_VIDEO_START(jumppop) + MDRV_VIDEO_UPDATE(jumppop) + + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(YM3812, 3500000) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 0.70) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 0.70) + + MDRV_SOUND_ADD(OKIM6295, 875000) + MDRV_SOUND_CONFIG(okim6295_interface_region_1_pin7high) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 0.50) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 0.50) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( suprtrio ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 14000000) /* 14mhz should be correct, but lots of sprite flicker later in game */ + MDRV_CPU_PROGRAM_MAP(suprtrio_main_cpu,0) + MDRV_CPU_VBLANK_INT(irq6_line_hold,1) + + MDRV_CPU_ADD(Z80, 8000000) + /* audio CPU */ + MDRV_CPU_PROGRAM_MAP(semicom_sound_readmem,semicom_sound_writemem) + + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(529)) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(40*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8-1, 31*8-2) + MDRV_GFXDECODE(suprtrio) + MDRV_PALETTE_LENGTH(1024) + + MDRV_VIDEO_START(suprtrio) + MDRV_VIDEO_UPDATE(suprtrio) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(OKIM6295, 875000) + MDRV_SOUND_CONFIG(okim6295_interface_region_1_pin7high) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 0.50) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 0.50) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( pangpang ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000, 14000000) + MDRV_CPU_PROGRAM_MAP(pangpang_readmem,pangpang_writemem) + MDRV_CPU_VBLANK_INT(tumbleb2_interrupt,1) + + MDRV_SCREEN_REFRESH_RATE(58) + MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(1529)) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(40*8, 32*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 1*8, 31*8-1) + MDRV_GFXDECODE(tumbleb) + MDRV_PALETTE_LENGTH(1024) + + MDRV_VIDEO_START(pangpang) + MDRV_VIDEO_UPDATE(pangpang) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(OKIM6295, 8000000/10) + MDRV_SOUND_CONFIG(okim6295_interface_region_1_pin7high) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.70) +MACHINE_DRIVER_END + +/******************************************************************************/ + +ROM_START( tumbleb ) + ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 code */ + ROM_LOAD16_BYTE ("thumbpop.12", 0x00000, 0x40000, CRC(0c984703) SHA1(588d2b2464e0027c8d0703a2b62ebda225ba4276) ) + ROM_LOAD16_BYTE( "thumbpop.13", 0x00001, 0x40000, CRC(864c4053) SHA1(013eb35e79aa7a7cd1a8061c4b75b37a8bfb10c6) ) + + ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD16_BYTE( "thumbpop.19", 0x00000, 0x40000, CRC(0795aab4) SHA1(85b38804446f6b0b4d8c3a59a8958d520c567a4e) ) + ROM_LOAD16_BYTE( "thumbpop.18", 0x00001, 0x40000, CRC(ad58df43) SHA1(2e562bfffb42543af767dd9e82a1d2465dfcd8b8) ) + + ROM_REGION( 0x100000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "map-01.rom", 0x00000, 0x80000, CRC(e81ffa09) SHA1(01ada9557ead91eb76cf00db118d6c432104a398) ) + ROM_LOAD( "map-00.rom", 0x80000, 0x80000, CRC(8c879cfe) SHA1(a53ef7811f14a8b105749b1cf29fe8a3a33bab5e) ) + + ROM_REGION( 0x80000, REGION_SOUND1, 0 ) /* Oki samples */ + ROM_LOAD( "thumbpop.snd", 0x00000, 0x80000, CRC(fabbf15d) SHA1(de60be43a5cd1d4b93c142bde6cbfc48a25545a3) ) +ROM_END + +ROM_START( tumbleb2 ) + ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 code */ + ROM_LOAD16_BYTE ("thumbpop.2", 0x00000, 0x40000, CRC(34b016e1) SHA1(b4c496358d48469d170a69e8bba58e0ea919b418) ) + ROM_LOAD16_BYTE( "thumbpop.3", 0x00001, 0x40000, CRC(89501c71) SHA1(2c202218934b845fdf7c99eaf280dccad90767f2) ) + + ROM_REGION( 0x2d4c, REGION_CPU2, 0 ) /* PIC16c57 */ + ROM_LOAD( "pic_16c57", 0x00000, 0x2d4c, NO_DUMP ) // protected + + ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD16_BYTE( "thumbpop.19", 0x00000, 0x40000, CRC(0795aab4) SHA1(85b38804446f6b0b4d8c3a59a8958d520c567a4e) ) + ROM_LOAD16_BYTE( "thumbpop.18", 0x00001, 0x40000, CRC(ad58df43) SHA1(2e562bfffb42543af767dd9e82a1d2465dfcd8b8) ) + + ROM_REGION( 0x100000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "map-01.rom", 0x00000, 0x80000, CRC(e81ffa09) SHA1(01ada9557ead91eb76cf00db118d6c432104a398) ) + ROM_LOAD( "map-00.rom", 0x80000, 0x80000, CRC(8c879cfe) SHA1(a53ef7811f14a8b105749b1cf29fe8a3a33bab5e) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Oki samples */ + ROM_LOAD( "thumbpop.snd", 0x00000, 0x80000, CRC(fabbf15d) SHA1(de60be43a5cd1d4b93c142bde6cbfc48a25545a3) ) + ROM_RELOAD(0x80000,0x80000) +ROM_END + +/* + +CPU +1x MC68000P10 (main) +1x Z8400APS (sound) +1x OKI M6295 (sound) +1x oscillator 12.000MHz (close to main) +1x oscillator 8.000MHz (close to Z80 and Oki) +1x oscillator 14.31818 (far from everything) + +ROMs +1x 27C040 (21) +1x 27C1000 (ic18) +1x 27C256 (22) +8x 27C020 (23-30) + +Note +1x JAMMA edge connector +1x trimmer (volume) +2x 8 switches dip + +*/ + +ROM_START( jumpkids ) + ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "23-ic29.15c", 0x00000, 0x40000, CRC(6ba11e91) SHA1(9f83ef79beb97af1625e7b46858d6f0681dafb23) ) + ROM_LOAD16_BYTE( "24-ic30.17c", 0x00001, 0x40000, CRC(5795d98b) SHA1(d1435f0b79a4fa45770c56b91f078c1885fbd048) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "22-ic19.3c", 0x00000, 0x08000, CRC(bd619530) SHA1(b4c050012b0f1c31877b3d489a68389be93cc82c) ) + + ROM_REGION( 0x80000, REGION_GFX1, ROMREGION_DISPOSE ) /* GFX */ + ROM_LOAD16_BYTE( "30-ic125.15j", 0x00000, 0x40000, CRC(44b9a089) SHA1(b6f99b0b597d540b375616dad4354fc9dbb75a21) ) + ROM_LOAD16_BYTE( "29-ic124.13j", 0x00001, 0x40000, CRC(3f98ec69) SHA1(f09a62d9bd7ab7681436a1f2f450565573927165) ) + + ROM_REGION( 0x100000, REGION_GFX2, ROMREGION_DISPOSE ) /* GFX */ + ROM_LOAD16_BYTE( "25-ic69.1g", 0x00000, 0x40000, CRC(176ae857) SHA1(e3178d2a15452a36eb94caf5e5ff3a561783a5f4) ) + ROM_LOAD16_BYTE( "28-ic131.1l", 0x00001, 0x40000, CRC(ed837757) SHA1(27a35e47e1b627270f4b0e4319ec330a6cad5ed1) ) + ROM_LOAD16_BYTE( "26-ic70.2g", 0x80000, 0x40000, CRC(e8b34980) SHA1(edbf5517c6c9c9c3344d11eabb4a58da87386725) ) + ROM_LOAD16_BYTE( "27-ic100.1j", 0x80001, 0x40000, CRC(3918dda3) SHA1(9409b5a5dc4c44c1ddcb77278541d012b5d8e052) ) + + ROM_REGION( 0x80000, REGION_SOUND2, 0 ) /* More Samples */ + ROM_LOAD( "21-ic17.1c", 0x00000, 0x80000, CRC(e5094f75) SHA1(578f32d4e4212c6cfdef186c2a6dc1d9408e8dfc) ) + + ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "ic18.2c", 0x00000, 0x20000, CRC(a63736c3) SHA1(fca413c04026ecb60a6025a117fea2b5404ac058) ) +ROM_END + +ROM_START( fncywld ) + ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "01_fw02.bin", 0x000000, 0x080000, CRC(ecb978c1) SHA1(68fbf93a81875f744c6f9820dc4c7d88e912e0a0) ) + ROM_LOAD16_BYTE( "02_fw03.bin", 0x000001, 0x080000, CRC(2d233b42) SHA1(aebeb5d3e06e73d14f713f201b25466bcac97a68) ) + + ROM_REGION( 0x100000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD16_BYTE( "05_fw06.bin", 0x00000, 0x40000, CRC(e141ecdc) SHA1(fd656ceb2baccefadfa1e9f6932b1e0f0ec0a189) ) + ROM_LOAD16_BYTE( "06_fw07.bin", 0x00001, 0x40000, CRC(0058a812) SHA1(fc6101a11af63536d0a345c820bcd234bb4ce91a) ) + ROM_LOAD16_BYTE( "03_fw04.bin", 0x80000, 0x40000, CRC(6ad38c14) SHA1(a9951432c2ec5e07ed2ee5faac3f2558242438f2) ) + ROM_LOAD16_BYTE( "04_fw05.bin", 0x80001, 0x40000, CRC(b8d079a6) SHA1(8ad63fba26f7588a9764a0585c159fb57cb8c7ed) ) + + ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD16_BYTE( "08_fw09.bin", 0x00000, 0x40000, CRC(a4a00de9) SHA1(65f03a65569f70fb6f3a0fc7caf038bb44a7f503) ) + ROM_LOAD16_BYTE( "07_fw08.bin", 0x00001, 0x40000, CRC(b48cd1d4) SHA1(a95eeba38ae1ce0a2086edb767f636a9cdbd0176) ) + ROM_LOAD16_BYTE( "10_fw11.bin", 0x80000, 0x40000, CRC(f21bab48) SHA1(84371b31487ca5abcbf57152a64f384959d19209) ) + ROM_LOAD16_BYTE( "09_fw10.bin", 0x80001, 0x40000, CRC(6aea8e0f) SHA1(91e2eeef001351c73b1bfbc1a7840e37d3f89900) ) + + ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "00_fw01.bin", 0x000000, 0x040000, CRC(b395fe01) SHA1(ac7f2e21413658f8d2a1abf3a76b7817a4e050c9) ) +ROM_END + +ROM_START( suprtrio ) + ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68k */ + ROM_LOAD16_BYTE( "rom2", 0x00000, 0x40000, CRC(4102e59d) SHA1(f06f1273dbbb91fa61d84541aa124d9c88ee94c1) ) + ROM_LOAD16_BYTE( "rom1", 0x00001, 0x40000, CRC(cc3a83c3) SHA1(6f8b1b6b666ce11c02e9defcba751d88621e572d) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 */ + ROM_LOAD( "rom4l", 0x000000, 0x10000, CRC(466aa96d) SHA1(37f1ba148dbad27ed8e71a0b3434ff970fcb519f) ) + + ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* bg tiles */ + ROM_LOAD( "rom4", 0x00000, 0x20000, CRC(cd2dfae4) SHA1(1d872b5abaf72d34bd4a45f6be69aa6474887b4b) ) + ROM_CONTINUE( 0x40000, 0x20000 ) + ROM_CONTINUE( 0x20000, 0x20000 ) + ROM_CONTINUE( 0x60000, 0x20000 ) + ROM_LOAD( "rom5", 0x80000, 0x20000, CRC(4e64da64) SHA1(f2518b3d83d7fd46000ca982b2d91ce75034b411) ) + ROM_CONTINUE( 0xc0000, 0x20000 ) + ROM_CONTINUE( 0xa0000, 0x20000 ) + ROM_CONTINUE( 0xe0000, 0x20000 ) + + ROM_REGION( 0x100000, REGION_GFX2, ROMREGION_DISPOSE ) /* sprites */ + ROM_LOAD16_BYTE( "rom9l", 0x00000, 0x40000, CRC(cc45f437) SHA1(fa735c3b3f96266ddfb611af6908abe72d5ae9d9) ) + ROM_LOAD16_BYTE( "rom8l", 0x00001, 0x40000, CRC(9bc90169) SHA1(3bc0d34911f063ff79c529346f41695376428f75) ) + ROM_LOAD16_BYTE( "rom7l", 0x80000, 0x40000, CRC(bfc7c756) SHA1(e533f633dec63c27ac78f170e222e590e815a022) ) + ROM_LOAD16_BYTE( "rom6l", 0x80001, 0x40000, CRC(bb3499af) SHA1(1a0a6a63227e8ad28aa23afc6d076037518b4802) ) + + ROM_REGION( 0xb0000, REGION_SOUND1, 0 ) /* samples */ + ROM_LOAD( "rom3h", 0x00000, 0x30000, CRC(34ea7ec9) SHA1(1f80a2c7ed4fb13610731732b11268d1d7be5bb2) ) + ROM_CONTINUE( 0x40000, 0x50000 ) + ROM_LOAD( "rom3l", 0x90000, 0x20000, CRC(1b73233b) SHA1(5d82bbdc31d99f8d77bdb5c2f6e5e23037b4bca0) ) +ROM_END + +/* + +1x MC68000P10 (main) +1x PIC16C57 +1x OKI M6295 +1x oscillator 8.000MHz (close to OKI) +1x oscillator 14.000MHz +1x oscillator 12.000000MHz + +*/ + +ROM_START( pangpang ) + ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 code */ + ROM_LOAD16_BYTE ("2.bin", 0x00000, 0x40000, CRC(45436666) SHA1(a319d27320d74266b5e5af7eb1452ecc0b158318) ) + ROM_LOAD16_BYTE( "3.bin", 0x00001, 0x40000, CRC(2725cbe7) SHA1(3ce2d8b1460a26ac0d982103d8796cdc296a64e1) ) + + ROM_REGION( 0x2d4c, REGION_CPU2, 0 ) /* PIC16c57 */ + ROM_LOAD( "pic_16c57", 0x00000, 0x2d4c, BAD_DUMP CRC(1ca515b4) SHA1(b2d302a7e45ac5b783d408584b93b534eaee6523) ) // protected :-( + + ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) // PF1 tilemap + ROM_LOAD16_BYTE( "11.bin", 0x00000, 0x20000, CRC(a2b9fec8) SHA1(121771466c288e132cdcf6abdc3bbe2578de9260) ) + ROM_CONTINUE(0x80000,0x20000) + ROM_LOAD16_BYTE( "10.bin", 0x00001, 0x20000, CRC(4f59d7b9) SHA1(a0eabb44ecb6922f656a5032c0ab757813b9cc13) ) + ROM_CONTINUE(0x80001,0x20000) + ROM_LOAD16_BYTE( "6.bin", 0x40000, 0x20000, CRC(1ebbc4f1) SHA1(6fb745ebe7ee8ecf5036ac0c4a5dda71cbb40063) ) + ROM_CONTINUE(0xc0000,0x20000) + ROM_LOAD16_BYTE( "7.bin", 0x40001, 0x20000, CRC(cd544173) SHA1(b929d771040a48356b449458d3125142b9bfc365) ) + ROM_CONTINUE(0xc0001,0x20000) + + ROM_REGION( 0x100000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD16_BYTE( "8.bin", 0x00000, 0x40000, CRC(ea0fa1e0) SHA1(1f2f6264097d15339782c2e399d125c3835fd852) ) + ROM_LOAD16_BYTE( "9.bin", 0x00001, 0x40000, CRC(1da5fe49) SHA1(338be1a9f8c42e685e1cefb12b2d169b7560e5f7) ) + ROM_LOAD16_BYTE( "4.bin", 0x80000, 0x40000, CRC(4f282eb1) SHA1(3731045a500082d37588edf7cbb0c0ebae566aab) ) + ROM_LOAD16_BYTE( "5.bin", 0x80001, 0x40000, CRC(00694df9) SHA1(f07373c7ef379daa4e788c169579e23a1133d884) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Oki samples */ + ROM_LOAD( "1.bin", 0x00000, 0x80000, CRC(e722bb02) SHA1(ebb8c87d32dccbebf6d8a47703ac12be984f4a3d) ) + ROM_RELOAD(0x80000,0x80000) +ROM_END + +/* + +Jumping Pop +ESD, 2001 + +PCB Layout +---------- + +|------------------------------------------------------| +| TDA1519A 62256 PAL | +| SAMPLES.BIN YM3014 62256 BG0.BIN | +| YM3812 |---------| BG1.BIN | +|6295 Z80 6116 | | | +| Z80_PRG.BIN |A40MX04 |PAL | +| | | | +|J | | | +|A PAL |---------| | +|M 6116 | +|M 6116 | +|A 14MHz 6116 | +| 16MHz 6116|---------| | +| 68K_PRG.BIN PAL | | | +| PAL |A40MX04 | | +| |-----| PAL | | SP0.BIN | +| 62256 |68000| | | SP1.BIN | +|DIP1 62256 | | |---------| | +| PAL |-----| 6116 6116 | +|DIP2 PAL 6116 6116 | +|------------------------------------------------------| +Notes: + 68000 - Motorola MC68EC000FU10, running at 16.000MHz (QFP64) + YM3812 - Yamaha YM3812, running at 3.500MHz [14 / 4] (DIP24) + YM3012 - Yamaha YM3012 16bit Serial DAC (DIP8) + Z80 - Zilog Z84C0006FEC, running at 3.500MHz [14 / 4] (QFP44) + 6295 - Oki M6295, running at 875kHz [14 / 16], samples rate 6.628787879kHz [875000 /132] (QFP44) + A40MX04 - Actel A40MX04-F FPGA (x2, PLCC84) + TDA1519A- Philips TDA1519A Dual 6W Power Amplifier + DIP1/2 - 8 Position Dip Switch + 62256 - 8K x8 SRAM (x4, DIP28) + 6116 - 2K x8 SRAM (x9, DIP24) + VSync - 60Hz + + ROMs - + Filename Type Use + --------------------------------------------------------------------------- + 68K_PRG.BIN Hitachi HN27C4096 256K x16 EPROM 68000 Program + Z80_PRG.BIN Atmel AT27C020 256K x8 OTP MASKROM Z80 Program + SAMPLES.BIN Atmel AT27C020 256K x8 OTP MASKROM Oki M6295 Samples + BG0/1.BIN Macronix 29F8100MC 1M x8 SOP44 FlashROM Background Graphics + SP0/1.BIN Macronix 29F8100MC 1M x8 SOP44 FlashROM Sprite Graphics + + Note there are no IC locations on the PCB, so the extension of the ROMs is just 'BIN' + +*/ + +ROM_START( jumppop ) + ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 code */ + ROM_LOAD16_WORD_SWAP ("68k_prg.bin", 0x00000, 0x80000, CRC(123536b9) SHA1(3597dec81e98d7bdf4ea9053983e62f127defcb7) ) + + ROM_REGION( 0x80000, REGION_CPU2, 0 ) /* Z80 code */ + ROM_LOAD( "z80_prg.bin", 0x00000, 0x40000, CRC(a88d4424) SHA1(eefb5ac79632931a36f360713c482cd079891f91) ) + ROM_RELOAD( 0x10000, 0x40000) + + ROM_REGION( 0x200000, REGION_GFX1, ROMREGION_DISPOSE ) + ROM_LOAD( "bg0.bin", 0x000000, 0x100000, CRC(35a1363d) SHA1(66c550b0bdea7c8b079f186f5e044f731d31bc58) ) + ROM_LOAD( "bg1.bin", 0x100000, 0x100000, CRC(5b37f943) SHA1(fe73b839f29d4c32823418711b22f85a5f583ec2) ) + + ROM_REGION( 0x200000, REGION_GFX2, ROMREGION_DISPOSE ) + ROM_LOAD( "sp0.bin", 0x000000, 0x100000, CRC(7c5d0633) SHA1(1fba60073d1d5d4dbd217fde181fa73a9d92bdc6) ) + ROM_LOAD( "sp1.bin", 0x100000, 0x100000, CRC(7eae782e) SHA1(a33c544ad9516ec409c209968e72f63e7cdb934b) ) + + ROM_REGION( 0x80000, REGION_SOUND1, 0 ) /* Oki samples */ + ROM_LOAD( "samples.bin", 0x00000, 0x40000, CRC(066f30a7) SHA1(6bdd0210001c597819f7132ffa1dc1b1d55b4e0a) ) +ROM_END + +/************************************** + + SemiCom Games + + Uses simular hardware with 87c52 MCU for protection + + SemiCom used the name "Mijin" in 1995 + + +**************************************/ + + +/* + +Metal Saver By First Amusement (1994) + +The pcb is identical to Final Tetris pcb + (strange, final tetris is based on snowbros logic) + +1x 68k +1x z80 +1x CA101 (compatible to YM2151) +1x Oki 6295 +1x OSC 14mhz (near 68k) +1x OSC 3.579545 (near z80) +1x FPGA Actel 1020A PL84C +1x 87c52 based MCU (very similar to tyical SemiCom mcu) +2x banks of Dipswitch + +First Amusement logo is almost identical to SemiCom logo. + +There is a PC version of Metal Saver, so did SemiCom do +the arcade version on SemiCom type hardware? + +*/ + +ROM_START( metlsavr ) + ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "first-3.ub18", 0x00001, 0x40000, CRC(87bf4ed2) SHA1(ee1a23232bc37d95dca6d612b4e22ed2b723bd01) ) + ROM_LOAD16_BYTE( "first-4.ub17", 0x00000, 0x40000, CRC(667a494d) SHA1(282391ed7fa994ec51d39c6b086a808ee43e8af1) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "first-2.ua7", 0x00000, 0x10000, CRC(49505edf) SHA1(ea3007f1adbe8e2597ee6201bbd5d07fa9f7c733) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* Intel 87C52 MCU Code */ + ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */ + + ROM_REGION16_BE( 0x200, REGION_USER1, 0 ) /* Data from Shared RAM */ + /* this is not a real rom but instead the data extracted from shared ram, the MCU puts it there */ + ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200 , CRC(17aa17a9) SHA1(5b83159c62473f79e7fced0d86acfaf697ad5537) ) + + ROM_REGION( 0x040000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "first-1.uc1", 0x00000, 0x40000, CRC(e943dacb) SHA1(65a786467fc9efe503aad4e183df352e52143fc2) ) + + ROM_REGION( 0x80000, REGION_GFX1, 0 ) /* tiles */ + ROM_LOAD16_BYTE( "first-5.rom5", 0x00001, 0x40000, CRC(dd4af746) SHA1(185a8080173b3c05fcc5f5ee2f71606987826e79) ) + ROM_LOAD16_BYTE( "first-6.rom6", 0x00000, 0x40000, CRC(808b0e0b) SHA1(f4913e135986b28b4e56bdcc4fd7dd5aad9aa467) ) + + ROM_REGION( 0x200000, REGION_GFX2, ROMREGION_DISPOSE ) /* sprites */ + ROM_LOAD16_BYTE( "first-7.uor1", 0x000000, 0x80000, CRC(a6816747) SHA1(0ec288a1e23bb78de0e284b759a5e83304744960) ) + ROM_LOAD16_BYTE( "first-8.uor2", 0x000001, 0x80000, CRC(377020e5) SHA1(490dd2383a49554f2c5d65df798a3933f5c5a62e) ) + ROM_LOAD16_BYTE( "first-9.uor3", 0x100000, 0x80000, CRC(fccf1bb7) SHA1(12cb397fd6438068558ec4d64298cfbe4f9e0e7e) ) + ROM_LOAD16_BYTE( "first-10.uor4", 0x100001, 0x80000, CRC(a22b587b) SHA1(e2f6785eb17f66a8b4fc102524b5013e72f1a0f3) ) +ROM_END + +/* BC Story */ + +ROM_START( bcstry ) + ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "bcstry_u.35", 0x40001, 0x20000, CRC(d25b80a4) SHA1(6ea1c28cf508b856e93a06063e634a09291cb32c) ) + ROM_CONTINUE ( 0x00001, 0x20000) + ROM_LOAD16_BYTE( "bcstry_u.62", 0x40000, 0x20000, CRC(7f7aa244) SHA1(ee9bb2bf22d16f06d7935168e2bd09296fba3abc) ) + ROM_CONTINUE ( 0x00000, 0x20000) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "bcstry_u.21", 0x04000, 0x4000 , CRC(3ba072d4) SHA1(8b64d3ab4c63132f2f77b2cf38a88eea1a8f11e0) ) + ROM_CONTINUE( 0x0000, 0x4000 ) + ROM_CONTINUE( 0xc000, 0x4000 ) + ROM_CONTINUE( 0x8000, 0x4000 ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* Intel 87C52 MCU Code */ + ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */ + + ROM_REGION16_BE( 0x200, REGION_USER1, 0 ) /* Data from Shared RAM */ + /* this is not a real rom but instead the data extracted from shared ram, the MCU puts it there */ + /* taken from other set, check... */ + ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200 , CRC(e84e328c) SHA1(ce21988980654acb573bfb7396fd2f536204ecf0) ) + + ROM_REGION( 0x040000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "bcstry_u.64", 0x00000, 0x40000, CRC(23f0e0fe) SHA1(a8c3cbb6378797db353ca2873e73ff157a6f8a3c) ) + + ROM_REGION( 0x200000, REGION_GFX1, 0 ) /* Tiles */ + ROM_LOAD16_BYTE( "bcstry_u.109", 0x000000, 0x20000, CRC(eb04d37a) SHA1(818dc7aafac577920d94c65e47d965dc0474d92c) ) // tiles a plane 0 + ROM_CONTINUE ( 0x100000,0x20000) // tiles a plane 1 + ROM_CONTINUE ( 0x040000,0x20000) // tiles b plane 0 + ROM_CONTINUE ( 0x140000,0x20000) // tiles b plane 1 + ROM_LOAD16_BYTE( "bcstry_u.113", 0x000001, 0x20000, CRC(746ecdd7) SHA1(afb6dbc0fb94e7ce96a9b219f5f7cd3721d1c1c4) ) // tiles a plane 2 + ROM_CONTINUE ( 0x100001,0x20000) // tiles a plane 3 + ROM_CONTINUE ( 0x040001,0x20000) // tiles b plane 2 + ROM_CONTINUE ( 0x140001,0x20000) // tiles b plane 3 + ROM_LOAD16_BYTE( "bcstry_u.110", 0x080000, 0x20000, CRC(1bfe65c3) SHA1(27dec16b271866ff336d8b25d352977ca80c35bf) ) // tiles c plane 0 + ROM_CONTINUE ( 0x180000,0x20000) // tiles c plane 1 + ROM_CONTINUE ( 0x0c0000,0x20000) // tiles d plane 0 + ROM_CONTINUE ( 0x1c0000,0x20000) // tiles d plane 1 + ROM_LOAD16_BYTE( "bcstry_u.111", 0x080001, 0x20000, CRC(c8bf3a3c) SHA1(604fc57c4d3a581016aa2516236c568488d23c77) ) // tiles c plane 2 + ROM_CONTINUE ( 0x180001,0x20000) // tiles c plane 3 + ROM_CONTINUE ( 0x0c0001,0x20000) // tiles d plane 2 + ROM_CONTINUE ( 0x1c0001,0x20000) // tiles d plane 3 + + ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD16_BYTE( "bcstry_u.100", 0x000000, 0x80000, CRC(8c11cbed) SHA1(e04e53af4fe732bf9d20a9ae5c2a90b576ee0b83) ) // b + ROM_LOAD16_BYTE( "bcstry_u.106", 0x000001, 0x80000, CRC(5219bcbf) SHA1(4b88eab7ffc2dc1de451ae4ee52f1536e179ea13) ) // b + ROM_LOAD16_BYTE( "bcstry_u.99", 0x100000, 0x80000, CRC(cdb1af87) SHA1(df1fbda5c7ce4fbd64d6db9eb80946e06119f096) ) // a + ROM_LOAD16_BYTE( "bcstry_u.105", 0x100001, 0x80000, CRC(8166b596) SHA1(cbf6f5cec5f6991bb1d4ec0ea03cd617ff38fc3b) ) // a + ROM_LOAD16_BYTE( "bcstry_u.104", 0x200000, 0x80000, CRC(377c0c71) SHA1(77efa9530b1c311d93c84dd8452701414f740269) ) // b + ROM_LOAD16_BYTE( "bcstry_u.108", 0x200001, 0x80000, CRC(442307ed) SHA1(71b7f19af64d9961f0f9205b86b4b0ebc13fddda) ) // b + ROM_LOAD16_BYTE( "bcstry_u.102", 0x300000, 0x80000, CRC(71b40ece) SHA1(1a13dfd7615a6f61851897ebcb10fa69bc8ae525) ) // a + ROM_LOAD16_BYTE( "bcstry_u.107", 0x300001, 0x80000, CRC(ab3c923a) SHA1(aaca1d2ed7b53e0933e0bd94a19458dd1598f204) ) // a +ROM_END + +ROM_START( bcstrya ) + ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "prg1.ic35", 0x40001, 0x20000, CRC(2c55100a) SHA1(bc98a0015c99ef84ebd3fc3f7b7a3bdfd700e1da) ) + ROM_CONTINUE ( 0x00001, 0x20000) + ROM_LOAD16_BYTE( "prg2.ic62", 0x40000, 0x20000, CRC(f54c0a96) SHA1(79a3635792a23f47fc914d1d5e118b5a643ca100) ) + ROM_CONTINUE ( 0x00000, 0x20000) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "bcstry_u.21", 0x04000, 0x4000 , CRC(3ba072d4) SHA1(8b64d3ab4c63132f2f77b2cf38a88eea1a8f11e0) ) + ROM_CONTINUE( 0x0000, 0x4000 ) + ROM_CONTINUE( 0xc000, 0x4000 ) + ROM_CONTINUE( 0x8000, 0x4000 ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* Intel 87C52 MCU Code */ + ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */ + + ROM_REGION16_BE( 0x200, REGION_USER1, 0 ) /* Data from Shared RAM */ + /* this is not a real rom but instead the data extracted from shared ram, the MCU puts it there */ + ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200 , CRC(e84e328c) SHA1(ce21988980654acb573bfb7396fd2f536204ecf0) ) + + ROM_REGION( 0x040000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "bcstry_u.64", 0x00000, 0x40000, CRC(23f0e0fe) SHA1(a8c3cbb6378797db353ca2873e73ff157a6f8a3c) ) + + ROM_REGION( 0x200000, REGION_GFX1, 0 ) /* Tiles */ + ROM_LOAD16_BYTE( "bcstry_u.109", 0x000000, 0x20000, CRC(eb04d37a) SHA1(818dc7aafac577920d94c65e47d965dc0474d92c) ) // tiles a plane 0 + ROM_CONTINUE ( 0x100000,0x20000) // tiles a plane 1 + ROM_CONTINUE ( 0x040000,0x20000) // tiles b plane 0 + ROM_CONTINUE ( 0x140000,0x20000) // tiles b plane 1 + ROM_LOAD16_BYTE( "bcstry_u.113", 0x000001, 0x20000, CRC(746ecdd7) SHA1(afb6dbc0fb94e7ce96a9b219f5f7cd3721d1c1c4) ) // tiles a plane 2 + ROM_CONTINUE ( 0x100001,0x20000) // tiles a plane 3 + ROM_CONTINUE ( 0x040001,0x20000) // tiles b plane 2 + ROM_CONTINUE ( 0x140001,0x20000) // tiles b plane 3 + ROM_LOAD16_BYTE( "bcstry_u.110", 0x080000, 0x20000, CRC(1bfe65c3) SHA1(27dec16b271866ff336d8b25d352977ca80c35bf) ) // tiles c plane 0 + ROM_CONTINUE ( 0x180000,0x20000) // tiles c plane 1 + ROM_CONTINUE ( 0x0c0000,0x20000) // tiles d plane 0 + ROM_CONTINUE ( 0x1c0000,0x20000) // tiles d plane 1 + ROM_LOAD16_BYTE( "bcstry_u.111", 0x080001, 0x20000, CRC(c8bf3a3c) SHA1(604fc57c4d3a581016aa2516236c568488d23c77) ) // tiles c plane 2 + ROM_CONTINUE ( 0x180001,0x20000) // tiles c plane 3 + ROM_CONTINUE ( 0x0c0001,0x20000) // tiles d plane 2 + ROM_CONTINUE ( 0x1c0001,0x20000) // tiles d plane 3 + + ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD16_BYTE( "bcstry_u.100", 0x000000, 0x80000, CRC(8c11cbed) SHA1(e04e53af4fe732bf9d20a9ae5c2a90b576ee0b83) ) // b + ROM_LOAD16_BYTE( "bcstry_u.106", 0x000001, 0x80000, CRC(5219bcbf) SHA1(4b88eab7ffc2dc1de451ae4ee52f1536e179ea13) ) // b + ROM_LOAD16_BYTE( "bcstry_u.99", 0x100000, 0x80000, CRC(cdb1af87) SHA1(df1fbda5c7ce4fbd64d6db9eb80946e06119f096) ) // a + ROM_LOAD16_BYTE( "bcstry_u.105", 0x100001, 0x80000, CRC(8166b596) SHA1(cbf6f5cec5f6991bb1d4ec0ea03cd617ff38fc3b) ) // a + ROM_LOAD16_BYTE( "bcstry_u.104", 0x200000, 0x80000, CRC(377c0c71) SHA1(77efa9530b1c311d93c84dd8452701414f740269) ) // b + ROM_LOAD16_BYTE( "bcstry_u.108", 0x200001, 0x80000, CRC(442307ed) SHA1(71b7f19af64d9961f0f9205b86b4b0ebc13fddda) ) // b + ROM_LOAD16_BYTE( "bcstry_u.102", 0x300000, 0x80000, CRC(71b40ece) SHA1(1a13dfd7615a6f61851897ebcb10fa69bc8ae525) ) // a + ROM_LOAD16_BYTE( "bcstry_u.107", 0x300001, 0x80000, CRC(ab3c923a) SHA1(aaca1d2ed7b53e0933e0bd94a19458dd1598f204) ) // a +ROM_END + +/* + +Hatch Catch +SemiCom, 1995 + +PCB Layout +---------- + +|---------------------------------------------| +| M6295 0.UC1 4.096MHz PAL 6.OR1| +|YM3016 YM2151 6116 7.OR2| +|uPC1241H PAL 1.UA7 8.OR3| +| Z80B 6116 9.OR4| +| 6116 6116 | +| PAL 6116 | +|J PAL PAL | +|A PAL | +|M 6116 PAL| +|M 6116 | +|A PAL PAL | +| PAL 4.M5 | +|DSW1 5.M6 | +| 15MHz | +|DSW2 62256 6264 | +| 62256 6264 ACTEL | +| 68000 2.B16 PAL A1020B | +|87C52 3.B17 (PLCC84)| +|---------------------------------------------| + +Notes: + 68k clock: 15MHz + Z80 clock: 3.42719MHz <-- strange clock, but verified correct. + M6295 clock: 1.024MHz, sample rate = /132 + 87C52 clock: 15MHz + YM2151 clock: 3.42719MHz + VSync: 60Hz + +Interrupts: + +Lev 1 0x64 0000 00c0 <- just reset .. not used +Lev 2 0x68 0000 00c0 "" +Lev 3 0x6c 0000 00c0 "" +Lev 4 0x70 0000 00c0 "" +Lev 5 0x74 0000 00c0 "" +Lev 6 0x78 0012 0000 <- RAM shared with protection device (first 0x200 bytes?) + +*/ + +ROM_START( htchctch ) + ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "p03.b16", 0x00001, 0x20000, CRC(eff14c40) SHA1(8fdda1fb859546c16f940e51f7e126768205154c) ) + ROM_LOAD16_BYTE( "p04.b17", 0x00000, 0x20000, CRC(6991483a) SHA1(c8d868ef1f87655c37f0b1efdbb71cd26918f270) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "p02.b5", 0x00000, 0x10000 , CRC(c5a03186) SHA1(42561ab36e6d7a43828d3094e64bd1229ab893ba) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* Intel 87C52 MCU Code */ + ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */ + + ROM_REGION16_BE( 0x200, REGION_USER1, 0 ) /* Data from Shared RAM */ + /* this is not a real rom but instead the data extracted from shared ram, the MCU puts it there */ + ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200 , CRC(5b27adb6) SHA1(a0821093d8c73765ff15767bdfc0afa95aa1371d) ) + + ROM_REGION( 0x020000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "p01.c1", 0x00000, 0x20000, CRC(18c06829) SHA1(46b180319ed33abeaba70d2cc61f17639e59bfdb) ) + + ROM_REGION( 0x80000, REGION_GFX1, 0 ) /* Sprites */ + ROM_LOAD16_BYTE( "p06srom5.bin", 0x00001, 0x40000, CRC(3d2cbb0d) SHA1(bc80be594a40989e3c23539fc2021de65a2444c5) ) + ROM_LOAD16_BYTE( "p07srom6.bin", 0x00000, 0x40000, CRC(0207949c) SHA1(84b4dcd27fe89a5350b6642ef99719bb85514174) ) + + ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE ) /* GFX */ + ROM_LOAD16_BYTE( "p08uor1.bin", 0x00000, 0x20000, CRC(6811e7b6) SHA1(8157f92a3168ffbac86cd8c6294b9c0f3ee0835d) ) + ROM_LOAD16_BYTE( "p09uor2.bin", 0x00001, 0x20000, CRC(1c6549cf) SHA1(c05aba9b744144db4537e472842b0d53325aa78f) ) + ROM_LOAD16_BYTE( "p10uor3.bin", 0x40000, 0x20000, CRC(6462e6e0) SHA1(0d107214dfb257e15931701bad6b42c6aadd8a18) ) + ROM_LOAD16_BYTE( "p11uor4.bin", 0x40001, 0x20000, CRC(9c511d98) SHA1(6615cbb125bd1e1b4da400ec4c4a0f4df8f6fa75) ) +ROM_END + +/* Cookie & Bibi */ + +ROM_START( cookbib ) + ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "prg1.ub16", 0x00001, 0x20000, CRC(cda6335f) SHA1(34a57785a458d3e9a66c91734b4511fbc9f3455c) ) + ROM_LOAD16_BYTE( "prg2.ub17", 0x00000, 0x20000, CRC(2664a335) SHA1(8d1c4825720a09db6156599ab905292640b04cba) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "prg-s.ub5", 0x00000, 0x10000 , CRC(547d6ea3) SHA1(42929e453c4f1c90c29197a9bed953139cfe2873) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* Intel 87C52 MCU Code */ + ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */ + + ROM_REGION16_BE( 0x200, REGION_USER1, 0 ) /* Data from Shared RAM */ + /* this is not a real rom but instead the data extracted from shared ram, the MCU puts it there */ + ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200 , CRC(a77d13f4) SHA1(13db72f5b171b0c1226e97ea98d9edd7144d56d9) ) + + ROM_REGION( 0x020000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "sound.uc1", 0x00000, 0x20000, CRC(545e19b6) SHA1(ef518bbe44b22e7ef77ee6af337ebcad9b2674e0) ) + + ROM_REGION( 0x80000, REGION_GFX1, 0 ) /* */ + ROM_LOAD16_BYTE( "srom5.bin", 0x00001, 0x40000, CRC(73a46e43) SHA1(054fac2dc5dffcbb9d81600689c07774d2e200b6) ) + ROM_LOAD16_BYTE( "srom6.bin", 0x00000, 0x40000, CRC(ade2dbec) SHA1(12d385d22307d8251e711788dff2e503c8f8ca7c) ) + + ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE ) /* GFX */ + ROM_LOAD16_BYTE( "uor1.bin", 0x00000, 0x20000, CRC(a7d91f23) SHA1(eb9694e05b8a04ed1cdbb834e1bf745a2b0260be) ) + ROM_LOAD16_BYTE( "uor2.bin", 0x00001, 0x20000, CRC(9aacbec2) SHA1(c1cfe243a7d51c950785073f235d72cc01724cdb) ) + ROM_LOAD16_BYTE( "uor3.bin", 0x40000, 0x20000, CRC(3fee0c3c) SHA1(c71439ba8033c549e40522db5270caf4a297fb99) ) + ROM_LOAD16_BYTE( "uor4.bin", 0x40001, 0x20000, CRC(bed9ed2d) SHA1(7103b99cd0d54df864ea4a0f269011e30ad29ed7) ) +ROM_END + +/* Choky Choky */ + +ROM_START( chokchok ) + ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "ub18.bin", 0x00001, 0x40000, CRC(b183852a) SHA1(fd50c6d91dba64b936ac367e5e5235d09ed60fdd) ) + ROM_LOAD16_BYTE( "ub17.bin", 0x00000, 0x40000, CRC(ecdb45ca) SHA1(03eb2d27ae4de25aa15477135d3b4de8b3b7f7f0) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "ub5.bin", 0x00000, 0x10000 , CRC(30c2171d) SHA1(3954e286d57b955af6ba9b1a0b49c442d7f295ae) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* Intel 87C52 MCU Code */ + ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */ + + ROM_REGION16_BE( 0x200, REGION_USER1, 0 ) /* Data from Shared RAM */ + /* this is not a real rom but instead the data extracted from shared ram, the MCU puts it there */ + ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200 , CRC(0bd39834) SHA1(2860c2b7fcb74546afde11a59d4b359612ab6e68) ) + + ROM_REGION( 0x040000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "uc1.bin", 0x00000, 0x40000, CRC(f3f57abd) SHA1(601dc669020ef9156fa221e768be9b88454e3f55) ) + + ROM_REGION( 0x200000, REGION_GFX1, 0 ) /* tiles */ + ROM_LOAD16_BYTE( "srom5.bin", 0x00001, 0x20000, CRC(836608b8) SHA1(7aa624274efee0a7affb6a1a417752b5ce116c04) ) + ROM_CONTINUE ( 0x100001,0x20000) + ROM_CONTINUE ( 0x040001,0x20000) + ROM_CONTINUE ( 0x140001,0x20000) + ROM_LOAD16_BYTE( "srom6.bin", 0x00000, 0x20000, CRC(31d5715d) SHA1(32612464124290b273c4b1a8b571291f9aeff01c) ) + ROM_CONTINUE ( 0x100000,0x20000) + ROM_CONTINUE ( 0x040000,0x20000) + ROM_CONTINUE ( 0x140000,0x20000) + + ROM_REGION( 0x200000, REGION_GFX2, ROMREGION_DISPOSE ) /* sprites */ + ROM_LOAD16_BYTE( "uor1.bin", 0x000000, 0x80000, CRC(ded6642a) SHA1(357c836ebe62e0f7f9e7afdf7428f42d827ede06) ) + ROM_LOAD16_BYTE( "uor2.bin", 0x000001, 0x80000, CRC(493f9516) SHA1(2e1d38493558dc79cd4d232ac421cd5649f4119a) ) + ROM_LOAD16_BYTE( "uor3.bin", 0x100000, 0x80000, CRC(e2dc3e12) SHA1(9e2571f93d27b9048fe8e42d3f13a8e509b3adca) ) + ROM_LOAD16_BYTE( "uor4.bin", 0x100001, 0x80000, CRC(6f377530) SHA1(1367987e3af0baa8e22f09d1b40ad838f33371bc) ) +ROM_END + +/* Date Quiz Go Go */ + +ROM_START( dquizgo ) + ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "ub18", 0x00001, 0x80000, CRC(07f869f2) SHA1(1e69f8a6ce3bcf0feaeb43cc7c0fc3fa324466b2) ) + ROM_LOAD16_BYTE( "ub17", 0x00000, 0x80000, CRC(0b96ab14) SHA1(fc132118eaa938c85d210713320b0a04425f48de) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "ub5", 0x00000, 0x10000, CRC(e40481da) SHA1(1c1fabcb67693235eaa6ff59ae12a35854b5564a) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* Intel 87C52 MCU Code */ + ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */ + + ROM_REGION16_BE( 0x400, REGION_USER1, ROMREGION_ERASE00 ) /* Data from Shared RAM */ + /* this is not a real rom but instead the data extracted from shared ram, the MCU puts it there */ + /* It seems to put some data at 0x000-0x1ff too, but it looks like garbage, and doesn't appear to be used */ + ROM_LOAD16_WORD( "protdata.bin", 0x200, 0x200 , CRC(6064b9e0) SHA1(546bd8f9201427118940de2d1916b258b60710c6) ) + + ROM_REGION( 0x040000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "uc1", 0x00000, 0x40000, CRC(d0f4c4ba) SHA1(669a04a977e98d8a594cc1621cbb9526c9081ec0) ) + + ROM_REGION( 0x80000, REGION_GFX1, 0 ) /* tiles */ + ROM_LOAD16_BYTE( "srom5", 0x00001, 0x40000, CRC(f1cdd21d) SHA1(0bfc09abce40712c4e95f13ad0d4b78684e44630) ) + ROM_IGNORE(0x40000) + ROM_LOAD16_BYTE( "srom6", 0x00000, 0x40000, CRC(f848939e) SHA1(bf5e62300dd13a37f4715c67a2eec88034a94311) ) + ROM_IGNORE(0x40000) + + ROM_REGION( 0x200000, REGION_GFX2, ROMREGION_DISPOSE ) /* sprites */ + ROM_LOAD16_BYTE( "uor1", 0x000000, 0x80000, CRC(b4912bf6) SHA1(ef827adba58470a201f3c1ecc3286d728a753eff) ) + ROM_LOAD16_BYTE( "uor2", 0x000001, 0x80000, CRC(b011cf93) SHA1(b993df91511ac17d5bf8e688333f2953b87d5be4) ) + ROM_LOAD16_BYTE( "uor3", 0x100000, 0x80000, CRC(d96c3582) SHA1(6b313462fd8985fae60bc59cd9c99c97ab70fdcc) ) + ROM_LOAD16_BYTE( "uor4", 0x100001, 0x80000, CRC(77ff23eb) SHA1(7fc891810591458fd62f3d4b9b4c966662e90403) ) +ROM_END + +/* + +SD Fighters (c) 1996 SemiCom + +Game released 1996-09-13 + +PCB Layout +---------- + +YMET 961023 + ++------------------------------------------+ +| M6295 UC1 | +| 5.uj2 11.uk2| +| YM3012 YM2151 6.uj3 12.uk3| +|4.096MHZ Z80 UA7 pLSI1032 7.uj4 13.uk4| +|J 8.uj5 14.uk5| +|A | +|M pLSI1032 9.uj2 15.uk2| +|M 10.uj2 16.uk2| +|A 68000 UM61256 UM6164 | +|DSW1 U818 | +| 87C52 UM61256 UM6164 | +|DSW2 U817 | +| 15.00MHz | ++------------------------------------------+ + +Motorola MC68000P10 +ZiLOG Z0840006PSC +Intel P87C52 MCU + +Lattice pLSI 1032 (x2) +Yamaha YM2151 & YM3012 (badged as BS901 & KA12) +OKI M6295 (badged as AD-65) + +OSC: 4.096MHz, 15.000MHz + +*/ + +ROM_START( sdfight ) + ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "u818", 0xc0001, 0x20000, CRC(a60e5b22) SHA1(eda1a5de881718f78a45720c3ca43a6288a0e65d) ) + ROM_CONTINUE( 0x80001, 0x20000) + ROM_CONTINUE( 0x40001, 0x20000) + ROM_CONTINUE( 0x00001, 0x20000) + ROM_LOAD16_BYTE( "u817", 0xc0000, 0x20000, CRC(9f284f4d) SHA1(f4a471fb09c2fd73692ddaa03083644493256aae) ) + ROM_CONTINUE( 0x80000, 0x20000) + ROM_CONTINUE( 0x40000, 0x20000) + ROM_CONTINUE( 0x00000, 0x20000) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "ua7", 0x00000, 0x10000 , CRC(c3d36da4) SHA1(7290a977bfa9a3d5e0c98a0f589d877e38aa10a1) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* Intel 87C52 MCU Code */ + ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */ + + ROM_REGION16_BE( 0x200, REGION_USER1, ROMREGION_ERASE00 ) /* Data from Shared RAM */ + /* this is not a real rom but instead the data extracted from shared ram, the MCU puts it there */ + ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200 , CRC(efb8b822) SHA1(139c39771c057ae322d3601f7e0a58b43fa8860a) ) + + ROM_REGION( 0x040000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "uc1", 0x00000, 0x40000, CRC(535cae2c) SHA1(e9d59ab23cbbc0375987ea68e170ddb1cc75cff8) ) + + ROM_REGION( 0x200000, REGION_GFX1, 0 ) /* Tiles */ + ROM_LOAD16_BYTE( "9.ug11", 0x000001, 0x20000, CRC(bf809ccd) SHA1(4d648d7cdeb5ce4a918b8372dbd33c2fbf307dc0) ) // tiles a plane 0 + ROM_CONTINUE ( 0x100001,0x20000) // tiles a plane 1 + ROM_CONTINUE ( 0x040001,0x20000) // tiles b plane 0 + ROM_CONTINUE ( 0x140001,0x20000) // tiles b plane 1 + ROM_LOAD16_BYTE( "10.ug12", 0x000000, 0x20000, CRC(a5a3bfa2) SHA1(9b0d791f80f4cba14b7fab1aa7550784d6c4c4f7) ) // tiles a plane 2 + ROM_CONTINUE ( 0x100000,0x20000) // tiles a plane 3 + ROM_CONTINUE ( 0x040000,0x20000) // tiles b plane 2 + ROM_CONTINUE ( 0x140000,0x20000) // tiles b plane 3 + ROM_LOAD16_BYTE( "15.ui11", 0x080001, 0x20000, CRC(3bc8aa6d) SHA1(a8983957da5e286ec437f2fc83dfabf81fe56ca2) ) // tiles c plane 0 + ROM_CONTINUE ( 0x180001,0x20000) // tiles c plane 1 + ROM_CONTINUE ( 0x0c0001,0x20000) // tiles d plane 0 + ROM_CONTINUE ( 0x1c0001,0x20000) // tiles d plane 1 + ROM_LOAD16_BYTE( "16.ui12", 0x080000, 0x20000, CRC(71e6b78d) SHA1(a676395b2357093c4800d8520df10f7ef17cb3ee) ) // tiles c plane 2 + ROM_CONTINUE ( 0x180000,0x20000) // tiles c plane 3 + ROM_CONTINUE ( 0x0c0000,0x20000) // tiles d plane 2 + ROM_CONTINUE ( 0x1c0000,0x20000) // tiles d plane 3 + + ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD16_BYTE( "11.uk2", 0x000000, 0x80000, CRC(d006fadc) SHA1(79014bc0c7909763829ba02d5434d4543b4b80e5) ) // b + ROM_LOAD16_BYTE( "12.uk3", 0x000001, 0x80000, CRC(2a2f4153) SHA1(d86692ee17ad052fdd8fccded57e3e30012026f6) ) // b + ROM_LOAD16_BYTE( "5.uj2", 0x100000, 0x80000, CRC(f1246cbf) SHA1(de80a8f0d29ee76e11f38d9982ffcb4fd228153a) ) // b + ROM_LOAD16_BYTE( "6.uj3", 0x100001, 0x80000, CRC(d346878c) SHA1(93174f6f6cc797323c5e429bf324d4ffe081f072) ) // b + ROM_LOAD16_BYTE( "13.uk4", 0x200000, 0x80000, CRC(9bc40774) SHA1(b56c57258ec9c07c7efff9c0c632390d2d5ce4e2) ) // a + ROM_LOAD16_BYTE( "14.uk5", 0x200001, 0x80000, CRC(a1e61674) SHA1(a5a50f479a019b39082429fa3425a95480838f84) ) // a + ROM_LOAD16_BYTE( "7.uj4", 0x300000, 0x80000, CRC(dbdece8a) SHA1(20199cc915a1f8088372682c054cac69bc3b4918) ) // a + ROM_LOAD16_BYTE( "8.uj5", 0x300001, 0x80000, CRC(60be7dd1) SHA1(d212dee3acf696cac0843e968a71ec1fb9b16dc9) ) // a +ROM_END + +/* + +Wonderleague Star (c) 1995 Mijin (SemiCom traded under the Mijin name until 1995) + +Game released 1995-07-07 + +PCB Layout +---------- + +950522 + ++------------------------------------------+ +| M6295 UC1 4.096MHz | +| UDR1 | +| YM3012 YM2151 UA7 UDR2 | +| Z80 UDR3 | +|J UDR4 | +|A | +|M | +|M 15.000MHz SROM5 | +|A DSW1 SROM6 | +| 68000 HY62256 HY6284A | +| DSW2 HY62256 HY6284A | +| U818 | +| 87C52 U817 TCP1020AFN| ++------------------------------------------+ + +Motorola MC68000P10 +ZiLOG Z0840006PSC +Philips P87C52IBPN MCU + +TI TPC1020AFN-084C +Yamaha YM2151 & YM3012 (badged as BS901 & BS902) +OKI M6295 (badged AD-65) + +OSC: 4.096MHz, 15.000MHz + +Second in a series of Baseball games: + +1. Magicball Fighting (1994) +2. Wonder League Star (1995) +3. Wonder League 96 (1996) +4. MuHanSeungBu (1997) + +*/ + +ROM_START( wlstar ) + ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "n-3.u818", 0x00001, 0x40000, CRC(f01bc623) SHA1(ef9d32071bd259fad8243ff4622a82062e67c196) ) + ROM_LOAD16_BYTE( "n-4.u817", 0x00000, 0x40000, CRC(fc3e829b) SHA1(736835766f2b534c4ea3081f7a715a09a068a9f6) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "ua7", 0x00000, 0x10000, CRC(90cafa5f) SHA1(2d2ba8e395544e49899cac662d87585592b12040) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* Intel 87C52 MCU Code */ + ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */ + + ROM_REGION16_BE( 0x400, REGION_USER1, ROMREGION_ERASE00 ) /* Data from Shared RAM */ + /* this is not a real rom but instead the data extracted from shared ram, the MCU puts it there */ + ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200 , CRC(b7ffde5b) SHA1(6c370199e5df9c2e03293d0259612c5c4a9061cf) ) + + ROM_REGION( 0x040000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "ua1", 0x00000, 0x40000, CRC(de217d30) SHA1(5d7a6f82b106dd1185c7dcde193177cc46c4782f) ) + + ROM_REGION( 0x200000, REGION_GFX1, 0 ) /* tiles */ + ROM_LOAD16_BYTE( "5.srom5", 0x00001, 0x20000, CRC(f7f8c859) SHA1(28b21abfaff2b0502459d1e219c4397ca78a1495) ) + ROM_CONTINUE ( 0x100001,0x20000) + ROM_CONTINUE ( 0x040001,0x20000) + ROM_CONTINUE ( 0x140001,0x20000) + ROM_LOAD16_BYTE( "6.srom6", 0x00000, 0x20000, CRC(34ace2a8) SHA1(f4ab3eceaacf65b5417edbb74b719f2993fa53ef) ) + ROM_CONTINUE ( 0x100000,0x20000) + ROM_CONTINUE ( 0x040000,0x20000) + ROM_CONTINUE ( 0x140000,0x20000) + + ROM_REGION( 0x200000, REGION_GFX2, ROMREGION_DISPOSE ) /* sprites */ + ROM_LOAD16_BYTE( "7.udr1", 0x000000, 0x80000, CRC(6e47c31d) SHA1(c9c2d798197e6fc16d7750391c13506a87f8a49b) ) + ROM_LOAD16_BYTE( "8.udr2", 0x000001, 0x80000, CRC(09c5d57c) SHA1(0c53b90be28636008fa3f590b6a851022316f2e8) ) + ROM_LOAD16_BYTE( "9.udr3", 0x100000, 0x80000, CRC(3ec064f0) SHA1(642c49acfe8388717666d423ae94789eb61105a6) ) + ROM_LOAD16_BYTE( "10.udr4", 0x100001, 0x80000, CRC(b4693cdd) SHA1(031290586321b95436b30a3339a10dd8df12b245) ) +ROM_END + +/* Wonderleague '96 */ + +ROM_START( wondl96 ) + ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "ub17.bin", 0x00000, 0x40000, CRC(41d8e03c) SHA1(a3ff92ac2ef9b829cf89ceff606f8dd913025bef) ) + ROM_LOAD16_BYTE( "ub18.bin", 0x00001, 0x40000, CRC(0e4963af) SHA1(6c0607541ca0e5dd8aa4f8138d71150b1ab066cd) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "ub5.bin", 0x00000, 0x10000, CRC(d99d19c4) SHA1(a7fae11275bb156cdbf2805fcc3aec44892d0817) ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* Intel 87C52 MCU Code */ + ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */ + + ROM_REGION16_BE( 0x400, REGION_USER1, ROMREGION_ERASE00 ) /* Data from Shared RAM */ + /* this is not a real rom but instead the data extracted from shared ram, the MCU puts it there */ + //ROM_LOAD16_WORD( "protdata.bin", 0x00200, 0x200 , CRC(b7ffde5b) SHA1(6c370199e5df9c2e03293d0259612c5c4a9061cf) ) // from wlstar, doesn't work propely with wl96 + + ROM_REGION( 0x040000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "uc1.bin", 0x00000, 0x40000, CRC(0e7913e6) SHA1(9a44bd7ca4030627a26010583216ce1c8032ee1b) ) + + ROM_REGION( 0x200000, REGION_GFX1, 0 ) /* tiles */ + ROM_LOAD16_BYTE( "srom5.bin", 0x00001, 0x20000, CRC(db8010c3) SHA1(db43d894d545a72e8da16555c54dcdbd89d87e3d) ) + ROM_CONTINUE ( 0x100001,0x20000) + ROM_CONTINUE ( 0x040001,0x20000) + ROM_CONTINUE ( 0x140001,0x20000) + ROM_LOAD16_BYTE( "srom6.bin", 0x00000, 0x20000, CRC(2f364e54) SHA1(b0d3581567bd46565e9422f6bfb11273fc760fda) ) + ROM_CONTINUE ( 0x100000,0x20000) + ROM_CONTINUE ( 0x040000,0x20000) + ROM_CONTINUE ( 0x140000,0x20000) + + ROM_REGION( 0x200000, REGION_GFX2, ROMREGION_DISPOSE ) /* sprites */ + ROM_LOAD16_BYTE( "uor1.bin", 0x000000, 0x80000, CRC(e1e9eebb) SHA1(c92ca988a988c6c5f574654f263e239c2aea9f32) ) + ROM_LOAD16_BYTE( "uor2.bin", 0x000001, 0x80000, CRC(ddebfe83) SHA1(94e7ed19b9fb87fd7733b832d668449ab0442587) ) + ROM_LOAD16_BYTE( "uor3.bin", 0x100000, 0x80000, CRC(7efe4d67) SHA1(b96d42cbb9c62502aac6aad9122b44c165149707) ) + ROM_LOAD16_BYTE( "uor4.bin", 0x100001, 0x80000, CRC(7b1596d1) SHA1(2fab7d6c82318aa335a82af50835139f61e04a3d) ) +ROM_END + + +/* + +SemiCom Baseball (MuHanSeungBu) + +PCB Layout +---------- + ++----------------------------------+ +| 65728 4.096MHz M6295 ic99 | +| ic2 ic100| +| YM3012 Z80 ic64 ic102| +| YM2151 5814 ic104| +|J 5814 ic105| +|A 6264 QL2007 ic106| +|M 65728 6264 ic107| +|M 65728 ic108| +|A DSW1 ic109| +| 87c52 65728 ic110| +| DSW2 65728 ic111| +| ic35 ic62 68000 ic113| +| 62256 62256 15MHz | ++----------------------------------+ + +Motorola MC68HC000P10 +Goldstar Z8400B PS +Philips P87C52EBPN MCU + +QuickLogic QL2007-XPQ208C +Yamaha YM2151 & YM3012 (badged as BS901 & BS902) +OKI M6295 (badged AD-65) + +OSC: 4.096MHz, 15.000MHz + +Ram: + UM62256E-70LL x 2 (by 68000) + HY6264A LP-70 x 2 (by QuickLogic QL2007) + Temic HM3-65728BK-5 (by Z80) + Temic HM3-65728BK-5 x 2 + Sony CXK5814P-35L x 2 + +No roms had any labels, the IC position and +logical use (IE:z80 for the Z80 program rom) + +Fourth in a series of Baseball games: + +1. Magicball Fighting (1994) +2. Wonder League Star (1995) +3. Wonder League 96 (1996) +4. MuHanSeungBu (1997) + +*/ + +ROM_START( semibase ) + ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "ic35.68k", 0x40001, 0x20000, CRC(d2249605) SHA1(ab3faa832f14f799e4a975673495d30160c6eae5) ) + ROM_CONTINUE ( 0x00001, 0x20000) + ROM_LOAD16_BYTE( "ic62.68k", 0x40000, 0x20000, CRC(85ea81c3) SHA1(7e97316f5f373b98fa4063acd74f784b312a1cc4) ) + ROM_CONTINUE ( 0x00000, 0x20000) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "ic21.z80", 0x04000, 0x4000 , CRC(d95c64d0) SHA1(1b239e8b23b820610dbf67cbd525d4a6c956ba35) ) + ROM_CONTINUE( 0x0000, 0x4000 ) + ROM_CONTINUE( 0xc000, 0x4000 ) + ROM_CONTINUE( 0x8000, 0x4000 ) + + ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* Intel 87C52 MCU Code */ + ROM_LOAD( "87c52.mcu", 0x00000, 0x10000 , NO_DUMP ) /* can't be dumped */ + + ROM_REGION16_BE( 0x200, REGION_USER1, 0 ) /* Data from Shared RAM */ + /* this is not a real rom but instead the data extracted from shared ram, the MCU puts it there */ + /* once the game has decrypted this it's almost identical to bcstory with several ram addresses being 0x4 higher than in bcstory + and 1200FE: andi.b #$f, D1 instead of #$3 (unless bcstory data is wrong?) */ + ROM_LOAD16_WORD( "protdata.bin", 0x00000, 0x200 , CRC(ecbf2163) SHA1(634b366a8c4ba8699851861bf935b55850f93a7f) ) + + ROM_REGION( 0x040000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "ic64.snd", 0x00000, 0x40000, CRC(8a60649c) SHA1(aeb266436f6af4173b84dbb19362563b6c5db507) ) + + ROM_REGION( 0x200000, REGION_GFX1, 0 ) /* Tiles */ + ROM_LOAD16_BYTE( "ic109.gfx", 0x000000, 0x20000, CRC(2b86e983) SHA1(f625da05d68c78173e346f9c60ab4b0672b9f357) ) // tiles a plane 0 + ROM_CONTINUE ( 0x100000,0x20000) // tiles a plane 1 + ROM_CONTINUE ( 0x040000,0x20000) // tiles b plane 0 + ROM_CONTINUE ( 0x140000,0x20000) // tiles b plane 1 + ROM_LOAD16_BYTE( "ic113.gfx", 0x000001, 0x20000, CRC(e39b6610) SHA1(604f876f0bf9ed70f627944397e78ee16869d0ba) ) // tiles a plane 2 + ROM_CONTINUE ( 0x100001,0x20000) // tiles a plane 3 + ROM_CONTINUE ( 0x040001,0x20000) // tiles b plane 2 + ROM_CONTINUE ( 0x140001,0x20000) // tiles b plane 3 + ROM_LOAD16_BYTE( "ic110.gfx", 0x080000, 0x20000, CRC(bba4a015) SHA1(4e03585ff493148b9eeaaabb8d37630962ab6c74) ) // tiles c plane 0 + ROM_CONTINUE ( 0x180000,0x20000) // tiles c plane 1 + ROM_CONTINUE ( 0x0c0000,0x20000) // tiles d plane 0 + ROM_CONTINUE ( 0x1c0000,0x20000) // tiles d plane 1 + ROM_LOAD16_BYTE( "ic111.gfx", 0x080001, 0x20000, CRC(61133b63) SHA1(8820c88297fbcf5e1102c01245391f49a9c63186) ) // tiles c plane 2 + ROM_CONTINUE ( 0x180001,0x20000) // tiles c plane 3 + ROM_CONTINUE ( 0x0c0001,0x20000) // tiles d plane 2 + ROM_CONTINUE ( 0x1c0001,0x20000) // tiles d plane 3 + + ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) /* Sprites */ + ROM_LOAD16_BYTE( "ic100.gfx", 0x000000, 0x80000, CRC(01c3d12a) SHA1(128c21b18f73445a8e77fe5dd3072c1b1e20c47a) ) // b + ROM_LOAD16_BYTE( "ic106.gfx", 0x000001, 0x80000, CRC(db282ac2) SHA1(127637967e7620cd7e81aff268fb776d0211e58a) ) // b + ROM_LOAD16_BYTE( "ic99.gfx", 0x100000, 0x80000, CRC(349df821) SHA1(34af8b748aad5807300f8e76eb8a99366878004b) ) // a + ROM_LOAD16_BYTE( "ic105.gfx", 0x100001, 0x80000, CRC(f7caa81c) SHA1(2270d133c7b116d66581fc688086dd331b811478) ) // a + ROM_LOAD16_BYTE( "ic104.gfx", 0x200000, 0x80000, CRC(51a5d38a) SHA1(0258ae29779f7f1246845622a579d37dca64fb2f) ) // b + ROM_LOAD16_BYTE( "ic108.gfx", 0x200001, 0x80000, CRC(b253d60e) SHA1(aca2f6c2233372841908377407068c5d45f5f9c4) ) // b + ROM_LOAD16_BYTE( "ic102.gfx", 0x300000, 0x80000, CRC(3caefe97) SHA1(e60c6ef9e1dd6abdd763648dbcebefa4f19364c4) ) // a + ROM_LOAD16_BYTE( "ic107.gfx", 0x300001, 0x80000, CRC(68109898) SHA1(dbc0d431da33e22b8d0f918b9c8a3c1667bc4f8e) ) // a +ROM_END + + +/******************************************************************************/ + +#if TUMBLEP_HACK +void tumblepb_patch_code(UINT16 offset) +{ + /* A hack which enables all Dip Switches effects */ + UINT16 *RAM = (UINT16 *)memory_region(REGION_CPU1); + RAM[(offset + 0)/2] = 0x0240; + RAM[(offset + 2)/2] = 0xffff; // andi.w #$f3ff, D0 +} +#endif + + +static void tumblepb_gfx1_rearrange(void) +{ + UINT8 *rom = memory_region(REGION_GFX1); + int len = memory_region_length(REGION_GFX1); + int i; + + /* gfx data is in the wrong order */ + for (i = 0;i < len;i++) + { + if ((i & 0x20) == 0) + { + int t = rom[i]; rom[i] = rom[i + 0x20]; rom[i + 0x20] = t; + } + } + /* low/high half are also swapped */ + for (i = 0;i < len/2;i++) + { + int t = rom[i]; rom[i] = rom[i + len/2]; rom[i + len/2] = t; + } +} + +static DRIVER_INIT( tumblepb ) +{ + tumblepb_gfx1_rearrange(); + + #if TUMBLEP_HACK + tumblepb_patch_code(0x000132); + #endif +} + +static DRIVER_INIT( tumbleb2 ) +{ + tumblepb_gfx1_rearrange(); + + #if TUMBLEP_HACK + tumblepb_patch_code(0x000132); + #endif + + memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x100000, 0x100001, 0, 0, tumbleb2_soundmcu_w ); + +} + +static DRIVER_INIT( jumpkids ) +{ + tumblepb_gfx1_rearrange(); + + #if TUMBLEP_HACK + tumblepb_patch_code(0x00013a); + #endif +} + +static DRIVER_INIT( fncywld ) +{ + #if FNCYWLD_HACK + /* This is a hack to allow you to use the extra features + of the 2 first "Unused" Dip Switch (see notes above). */ + UINT16 *RAM = (UINT16 *)memory_region(REGION_CPU1); + RAM[0x0005fa/2] = 0x4e71; + RAM[0x00060a/2] = 0x4e71; + #endif + + tumblepb_gfx1_rearrange(); +} + + +static READ16_HANDLER( bcstory_1a0_read ) +{ +// mame_printf_debug("bcstory_io %06x\n",activecpu_get_pc()); + if (activecpu_get_pc()==0x0560) return 0x1a0; + else return readinputport(2); +} + +static DRIVER_INIT ( bcstory ) +{ + tumblepb_gfx1_rearrange(); + memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x180008, 0x180009, 0, 0, bcstory_1a0_read ); // io should be here?? +} + + + +static DRIVER_INIT( htchctch ) +{ + +// UINT16 *HCROM = (UINT16*)memory_region(REGION_CPU1); + UINT16 *PROTDATA = (UINT16*)memory_region(REGION_USER1); + int i; + /* simulate RAM initialization done by the protection MCU */ + /* verified on real hardware */ +// static UINT16 htchctch_mcu68k[] = +// { +// /* moved to protdata.bin file .. */ +// }; + + +// for (i = 0;i < sizeof(htchctch_mcu68k)/sizeof(htchctch_mcu68k[0]);i++) +// tumblepb_mainram[0x000/2 + i] = htchctch_mcu68k[i]; + + for (i = 0;i < memory_region_length( REGION_USER1 )/2;i++) + tumblepb_mainram[0x000/2 + i] = PROTDATA[i]; + + + + tumblepb_gfx1_rearrange(); + +/* trojan.. */ +#if 0 + /* patch the irq 6 vector */ + HCROM[0x00078/2] = 0x0001; + HCROM[0x0007a/2] = 0xe000; + + /* our new interrupt code */ + + /* put registers on stack */ + HCROM[0x1e000/2] = 0x48e7; + HCROM[0x1e002/2] = 0xfffe; + + /* put the address we want to copy FROM in A0 */ + HCROM[0x1e004/2] = 0x41f9; + HCROM[0x1e006/2] = 0x0012; + HCROM[0x1e008/2] = 0x0000; + + /* put the address we want to copy TO in A1 */ + HCROM[0x1e00a/2] = 0x43f9; + HCROM[0x1e00c/2] = 0x0012; + HCROM[0x1e00e/2] = 0x2000; + + /* put the number of words we want to copy into D0 */ + HCROM[0x1e010/2] = 0x203c; + HCROM[0x1e012/2] = 0x0000; + HCROM[0x1e014/2] = 0x0100; + + /* copy a word */ + HCROM[0x1e016/2] = 0x32d8; + + /* decrease counter d0 */ + HCROM[0x1e018/2] = 0x5380; + + /* compare d0 to 0 */ + HCROM[0x1e01a/2] = 0x0c80; + HCROM[0x1e01c/2] = 0x0000; + HCROM[0x1e01e/2] = 0x0000; + + /* if its not 0 then branch back */ + HCROM[0x1e020/2] = 0x66f4; + + + + + /* jump to drawing subroutine */ + HCROM[0x1e022/2] = 0x4eb9; + HCROM[0x1e024/2] = 0x0001; + HCROM[0x1e026/2] = 0xe100; + + /* get back registers from stack*/ + HCROM[0x1e028/2] = 0x4cdf; + HCROM[0x1e02a/2] = 0x7fff; + + /* jump to where the interrupt vector was copied to */ + HCROM[0x1e02c/2] = 0x4ef9; + HCROM[0x1e02e/2] = 0x0012; + HCROM[0x1e030/2] = 0x2000; + /* we're back in the game code */ + + + /* these subroutines are called from the new interrupt code above, i use them to draw */ + + /* DRAWING SUBROUTINE */ + + /* put the address we want to write to in A0 */ + HCROM[0x1e100/2] = 0x41f9; + HCROM[0x1e102/2] = 0x0032; + HCROM[0x1e104/2] = 0x0104; + + /* put the character we want to draw into D0 */ + /* this bit isn't needed .. we end up using d4 then copying it over */ + HCROM[0x1e106/2] = 0x203c; + HCROM[0x1e108/2] = 0x0000; + HCROM[0x1e10a/2] = 0x0007; + + /* put the address we to read to in A2 */ + HCROM[0x1e10c/2] = 0x45f9; + HCROM[0x1e10e/2] = 0x0012; +// HCROM[0x1e110/2] = 0x2000; + HCROM[0x1e110/2] = 0x2000+0x60+0x60+0x60+0x60+0x60; + + /* put the number of rows into D3 */ + HCROM[0x1e112/2] = 0x263c; + HCROM[0x1e114/2] = 0x0000; + HCROM[0x1e116/2] = 0x000c; + + /* put the number of bytes per row into D2 */ + HCROM[0x1e118/2] = 0x243c; + HCROM[0x1e11a/2] = 0x0000; + HCROM[0x1e11c/2] = 0x0008; + + + // move content of a2 to d4 (byte) + HCROM[0x1e11e/2] = 0x1812; + + HCROM[0x1e120/2] = 0xe84c; // shift d4 right by 4 + + HCROM[0x1e122/2] = 0x0244; // mask with 0x000f + HCROM[0x1e124/2] = 0x000f; // + + HCROM[0x1e126/2] = 0x3004; // d4 -> d0 + + /* jump to character draw to draw first bit */ + HCROM[0x1e128/2] = 0x4eb9; + HCROM[0x1e12a/2] = 0x0001; + HCROM[0x1e12c/2] = 0xe200; + + /* add 2 to draw address a0 */ + HCROM[0x1e12e/2] = 0xd1fc; + HCROM[0x1e130/2] = 0x0000; + HCROM[0x1e132/2] = 0x0002; + + + // move content of a2 to d4 (byte) + HCROM[0x1e134/2] = 0x1812; + + HCROM[0x1e136/2] = 0x0244; // mask with 0x000f + HCROM[0x1e138/2] = 0x000f; // + + HCROM[0x1e13a/2] = 0x3004; // d4 -> d0 + + /* jump to character draw to draw second bit */ + HCROM[0x1e13c/2] = 0x4eb9; + HCROM[0x1e13e/2] = 0x0001; + HCROM[0x1e140/2] = 0xe200; + + /* add 2 to draw address a0 */ + HCROM[0x1e142/2] = 0xd1fc; + HCROM[0x1e144/2] = 0x0000; + HCROM[0x1e146/2] = 0x0002; + + /* add 1 to read address a2 */ + HCROM[0x1e148/2] = 0xd5fc; + HCROM[0x1e14a/2] = 0x0000; + HCROM[0x1e14c/2] = 0x0001; + +// brr + /* decrease counter d2 */ + HCROM[0x1e14e/2] = 0x5382; + + /* compare d2 to 0 */ + HCROM[0x1e150/2] = 0x0c82; + HCROM[0x1e152/2] = 0x0000; + HCROM[0x1e154/2] = 0x0000; + + /* if its not 0 then branch back */ + HCROM[0x1e156/2] = 0x66c6; + + /* add 0xe0 to draw address a0 (0x100-0x20) */ + HCROM[0x1e158/2] = 0xd1fc; + HCROM[0x1e15a/2] = 0x0000; + HCROM[0x1e15c/2] = 0x00e0; + + /* decrease counter d2 */ + HCROM[0x1e15e/2] = 0x5383; + + /* compare d2 to 0 */ + HCROM[0x1e160/2] = 0x0c83; + HCROM[0x1e162/2] = 0x0000; + HCROM[0x1e164/2] = 0x0000; + + /* if its not 0 then branch back */ + HCROM[0x1e166/2] = 0x66b0; + + HCROM[0x1e168/2] = 0x4e75; // rts + + /* DRAW CHARACTER SUBROUTINE, note, this won't restore a1,d1, don't other places! */ + + /* move address into A0->A1 for use by this subroutine */ + HCROM[0x1e200/2] = 0x2248; + + /* move address into D0->D1 for top half of character */ + HCROM[0x1e202/2] = 0x2200; + + /* add 0x30 to d1 to get the REAL tile code */ + HCROM[0x1e204/2] = 0x0681; + HCROM[0x1e206/2] = 0x0000; + HCROM[0x1e208/2] = 0x0030; + + /* or with 0xf000 to add the tile attribute */ + HCROM[0x1e20a/2] = 0x0081; + HCROM[0x1e20c/2] = 0x0000; + HCROM[0x1e20e/2] = 0xf000; + + /* write d1 -> a1 for TOP half */ + HCROM[0x1e210/2] = 0x32c1; // not ideal .. we don't need to increase a1 + + /* move address into A0->A1 for use by this subroutine */ + HCROM[0x1e212/2] = 0x2248; + + /* add 0x80 to the address so we have the bottom location */ + HCROM[0x1e214/2] = 0xd2fc; + HCROM[0x1e216/2] = 0x0080; + + /* move address into D0->D1 for bottom half of character */ + HCROM[0x1e218/2] = 0x2200; + + /* add 0x54 to d1 to get the REAL tile code for bottom half */ + HCROM[0x1e21a/2] = 0x0681; + HCROM[0x1e21c/2] = 0x0000; + HCROM[0x1e21e/2] = 0x0054; + + /* or with 0xf000 to add the tile attribute */ + HCROM[0x1e220/2] = 0x0081; + HCROM[0x1e222/2] = 0x0000; + HCROM[0x1e224/2] = 0xf000; + + /* write d1 -> a1 for BOTTOM half */ + HCROM[0x1e226/2] = 0x32c1; // not ideal .. we don't need to increase a1 + + + HCROM[0x1e228/2] = 0x4e75; + + memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x140000, 0x1407ff, 0, 0, MWA16_NOP ); // kill palette writes as the interrupt code we don't have controls them + + + { + FILE *fp; + + fp=fopen("hcatch", "w+b"); + if (fp) + { + fwrite(HCROM, 0x40000, 1, fp); + fclose(fp); + } + } +#endif + +} + + +static void suprtrio_decrypt_code(void) +{ + UINT16 *rom = (UINT16 *)memory_region(REGION_CPU1); + UINT16 *buf = malloc_or_die(0x80000); + int i; + + /* decrypt main ROMs */ + { + memcpy(buf,rom,0x80000); + for (i = 0;i < 0x40000;i++) + { + int j = i ^ 0x06; + if ((i & 1) == 0) j ^= 0x02; + if ((i & 3) == 0) j ^= 0x08; + rom[i] = buf[j]; + } + free(buf); + } +} + +static void suprtrio_decrypt_gfx(void) +{ + UINT16 *rom = (UINT16 *)memory_region(REGION_GFX1); + UINT16 *buf = malloc_or_die(0x100000); + int i; + + /* decrypt tiles */ + memcpy(buf,rom,0x100000); + for (i = 0;i < 0x80000;i++) + { + int j = i ^ 0x02; + if (i & 1) j ^= 0x04; + rom[i] = buf[j]; + } + free(buf); +} + +static DRIVER_INIT( suprtrio ) +{ + suprtrio_decrypt_code(); + suprtrio_decrypt_gfx(); +} + +static DRIVER_INIT( chokchok ) +{ + driver_init_htchctch(machine); + + /* different palette format, closer to tumblep -- is this controlled by a register? the palette was right with the hatch catch trojan */ + memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x140000, 0x140fff, 0, 0, paletteram16_xxxxBBBBGGGGRRRR_word_w); + + /* slightly different banking */ + memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x100002, 0x100003, 0, 0, chokchok_tilebank_w); +} + +static DRIVER_INIT( wlstar ) +{ + driver_init_htchctch(machine); + + /* slightly different banking */ + memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x100002, 0x100003, 0, 0, wlstar_tilebank_w); +} + +static DRIVER_INIT ( dquizgo ) +{ + tumblepb_gfx1_rearrange(); +} + + +/******************************************************************************/ + +GAME( 1991, tumbleb, tumblep, tumblepb, tumblepb, tumblepb, ROT0, "bootleg", "Tumble Pop (bootleg set 1)", GAME_IMPERFECT_SOUND ) +GAME( 1991, tumbleb2, tumblep, tumbleb2, tumblepb, tumbleb2, ROT0, "bootleg", "Tumble Pop (bootleg set 2)", GAME_IMPERFECT_SOUND ) // PIC is protected, sound simulation not 100% +GAME( 1993, jumpkids, 0, jumpkids, tumblepb, jumpkids, ROT0, "Comad", "Jump Kids", 0 ) +GAME( 1994, metlsavr, 0, metlsavr, metlsavr, chokchok, ROT0, "First Amusement", "Metal Saver", 0 ) +GAME( 1994, pangpang, 0, pangpang, tumblepb, tumbleb2, ROT0, "Dong Gue La Mi Ltd.", "Pang Pang", GAME_IMPERFECT_SOUND ) // PIC is protected, sound simulation not 100% +GAME( 1994, suprtrio, 0, suprtrio, suprtrio, suprtrio, ROT0, "Gameace", "Super Trio", 0 ) +// Should also be 'Magicball Fighting' (c)1994 see http://kmrb.or.kr/Game_Image/1999/%EC%A0%9C1248%ED%98%B8.jpg +GAME( 1995, htchctch, 0, htchctch, htchctch, htchctch, ROT0, "SemiCom", "Hatch Catch" , 0 ) // not 100% sure about gfx offsets +GAME( 1995, cookbib, 0, cookbib, cookbib, htchctch, ROT0, "SemiCom", "Cookie & Bibi" , 0 ) // not 100% sure about gfx offsets +GAME( 1995, chokchok, 0, cookbib, chokchok, chokchok, ROT0, "SemiCom", "Choky! Choky!", GAME_IMPERFECT_GRAPHICS ) // corruption during attract mode (tmap disable?) +GAME( 1995, wlstar, 0, cookbib, wlstar, wlstar, ROT0, "Mijin", "Wonder League Star - Sok-Magicball Fighting (Korea)", 0) // translates to 'Wonder League Star - Return of Magicball Fighting' +GAME( 1996, wondl96, 0, cookbib, wlstar, wlstar, ROT0, "SemiCom", "Wonder League '96 (Korea)", GAME_NOT_WORKING) +GAME( 1996, fncywld, 0, fncywld, fncywld, fncywld, ROT0, "Unico", "Fancy World - Earth of Crisis" , 0 ) // game says 1996, testmode 1995? +GAME( 1996, sdfight, 0, sdfight, sdfight, bcstory, ROT0, "SemiCom", "SD Fighters (Korea)", 0) +GAME( 1997, bcstry, 0, bcstory, bcstory, bcstory, ROT0, "SemiCom", "B.C. Story (set 1)", GAME_IMPERFECT_GRAPHICS) // gfx offsets? +GAME( 1997, bcstrya, bcstry, bcstory, bcstory, bcstory, ROT0, "SemiCom", "B.C. Story (set 2)", GAME_IMPERFECT_GRAPHICS) // gfx offsets? +GAME( 1997, semibase, 0, semibase, semibase, bcstory, ROT0, "SemiCom", "MuHanSeungBu (SemiCom Baseball) (Korea)", GAME_IMPERFECT_GRAPHICS)// sprite offsets.. +GAME( 1998, dquizgo, 0, cookbib, chokchok, dquizgo, ROT0, "SemiCom", "Date Quiz Go Go (Korea)", GAME_IMPERFECT_GRAPHICS) // check layer offsets +GAME( 2001, jumppop, 0, jumppop, jumppop, 0, ORIENTATION_FLIP_X, "ESD", "Jumping Pop", 0 ) |