diff options
Diffstat (limited to 'src/mame/drivers/welltris.c')
-rw-r--r-- | src/mame/drivers/welltris.c | 882 |
1 files changed, 882 insertions, 0 deletions
diff --git a/src/mame/drivers/welltris.c b/src/mame/drivers/welltris.c new file mode 100644 index 00000000000..b6c651f6c54 --- /dev/null +++ b/src/mame/drivers/welltris.c @@ -0,0 +1,882 @@ +/******************************************************************************* + Welltris (c)1991 Video System + +******************************************************************************** + hardware is similar to aerofgt.c but with slightly different sprites, sound, + and an additional 'pixel' layer used for the backdrops + + Driver by David Haywood, with help from Steph from The Ultimate Patchers + Thanks to the authors of aerofgt.c and fromance.c on which most of this is + based +******************************************************************************** +OW-13 CPU + +CPU : MC68000P10 +Sound: Z80 YM2610 YM3016 +OSC : 14.31818MHz (X1), 12.000MHz (X2), + 8.000MHz (X3), 20.0000MHz (OSC1) + +ROMs: +j1.7 - Main programs (271000 compatible onetime) +j2.8 / + +lh532j11.9 - Data +lh532j10.10 / + +3.144 - Sound program (27c1000) + +lh534j09.123 - Samples +lh534j10.124 | +lh534j11.126 / + +lh534j12.77 - BG chr. + +046.93 - OBJ chr. +048.94 / + +PALs (16L8): +ow13-1.1 +ow13-2.2 +ow13-3.97 +ow13-4.115 + +Custom chips: +V-SYSTEM C7-01 GGA +VS8905 6620 9039 ABBA +V-SYSTEM VS8904 GGB +V-SYSTEM VS8803 6082 9040 EBBB + +******************************************************************************** + + its impossible to know what some of the video registers do due to lack of + evidence (bg palette has a selector, but i'm not sure which ... test mode + colours use different palette on rgb test + +******************************************************************************** + + Info from Steph (a lot of thanks to him for looking at this) + --------------- + + +The main thing is that, as in 'ridleofp', there is some code that could be used +if there was no "brute hack" in the code to never use it ... + +The "brute hack" is there : + +00B91C: 0000 0030 ori.b #$30, D0 + +Replace with 0x4e714e71 and you'll be able to test the "hidden features" . +* See #define in driver, maybe there are other versions of the game?.. + +Dip Switch 1 is read from $f00d and is stored at $8802, while Switch 2 is read from +$f00f and is stored at $8803 ... + +"DIPSW 2-5" (bit 4 of DSW2) is tested at address 0x007a18 : + +00A718: 0838 0004 8803 btst #$4, $8803.w + +I haven't been able to figure out what this Dip Switch does as I haven't found a way +to call the routine that seems to start at 0x00a710 8( If you find ANY infos, please +let me know ... + +"DIPSW 2-6" (bit 5 of DSW2) is probably one of the most "important" Dip Switch, as +it sets the maximum player from 2 (when OFF) to 4 (when ON) ... Watch the "attract +mode" to see how the game looks like ... + + +Differences between 2 players and 4 players mode : + +1) 2 players mode (DIPSW 2-5 is OFF) + +There are 2 coin slots (each one has its own coinage), there are only 2 "Start" buttons +and 2 sets of controls : + + 1 "P1 Start" + 2 "P2 Start" + 3 no effect + 4 no effect + 5 "Coin 1" (reads "DIPSW 1-1" to "DIPSW 1-4") + 6 "Coin 2" (reads "DIPSW 1-5" to "DIPSW 1-8") + 7 no effect (in fact, calls the routine (see below) but doesn't add credits) + 8 no effect + 0 "Service" (adds 1 credit) + + P1 and P2 controls are OK, while P3 and P4 controls have no effect (and you can't + even test them !) ... + +In a 2 players game, the players can move their pieces on the following walls : + + P1 West and South walls + P2 East and North walls + +"DIPSW 2-3" determines how many credits are needed for a 2 players game : + + ON 2 (this should be the default value) + OFF 1 + +Note that in a 2 players game, "PLAYER 1" is displayed twice ... + +2) 4 players mode (DIPSW 2-5 is ON) + +There are 4 coin slots (each one using the SAME coinage), there are 4 "Start" buttons +and 4 sets of controls : + + 1 used only in "test mode" + 2 used only in "test mode" + 3 used only in "test mode" + 4 used only in "test mode" + 5 "Coin 1" (reads "DIPSW 1-1" to "DIPSW 1-4") + 6 "Coin 2" (reads "DIPSW 1-1" to "DIPSW 1-4") + 7 "Coin 3" (reads "DIPSW 1-1" to "DIPSW 1-4") + 8 "Coin 4" (reads "DIPSW 1-1" to "DIPSW 1-4") + 0 "Service" (adds 1 credit) + + P1 to P4 controls are OK ... + +You can test ALL these inputs when you are in the "test mode" : even if you don't see +the ones for players 3 and 4 when you reboot, they will "appear" once you press the key ! +However "DISPW 2-4" and ""DISPW 2-5" will still display "N.C." ("Not Connected" ?) +followed by OFF or ON ... + +While in the "test mode", the controls will be shown with an arrow : + + MAME key player 3 display player 4 display + + Up Right Left + Down Left Right + Left Up Down + Right Down Up + +Note that I haven't been able to find where the "Tilt" key was mapped ... + +In a 4 players game, each player can move his pieces on ONE following wall : + + P1 North wall + P2 East wall + P3 South wall + P4 West wall + +When 1 credit is inserted, a timer appears to wait for players to enter the game, and +it's IMPOSSIBLE to start a DEF_STR( Normal ) 1 player game (with the 4 walls) ... + +To select a player, press one of his 2 buttons ... + +"DIPSW 2-3" is VERY important here : + + - When it's OFF, only player 1 can play, the number of credits is decremented when + you press the player buttons ... If you wait until timer reaches 0 without selecting + a player, 1 credit will be substracted, and you'll start a game with player 1 ... + - When it's ON, 1 credit will be automatically substracted, then the 4 players can + play by pressing one of their buttons ... If you wait until timer reaches 0 without + selecting a player, you'll start a game with player 1 ... + +"Unfortunately", it's an endless game, has you have NO penalty when a piece can't be +placed 8( Also note that there is NO possibility to "join in" once the game has started ... + + +Some useful addresses : + + 0xff803a ($803a) : credits + +Even if display is limited to 9, there doesn't seem to be any limit to the real number +of credits ... + + 0xff803b ($803b) : credits that will be added to $803a when you press '6' + 0xff803c ($803c) : credits that will be added to $803a when you press '7' + 0xff803d ($803d) : credits that will be added to $803a when you press '8' + 0xff803e ($803e) : credits that will be added to $803a when you press '0' + +These credits will be added by routine described below ... + + 0xff8959 ($8959) : "handicap" for player 1 (in a 1 or 2 players game) + 0xff89d9 ($89d9) : "handicap" for player 2 (in a 2 players game only) + +"Handicap" range is 0x00 (piece fall from the top of the well) to 0x0c (when the game +is over) ... To end a game quickly for a player, set his value to 0x0b and wait until +a piece can't be placed ... + + +Some useful routines : + + $b080 : initialisation + +When this routine is called with A4 = $400 (at $2466), it determines which routine will +be called when a coin is inserted ... It stores 0x0490 at 0xff8026 ($8026), then it +calls routine at $414 which tests "DIPSW 2-5" ... If it's ON, it stores 0x04a2 ... + +Then it stores addresses of routines to add credits according to "DIPSW 1-1" to +"DIPSW 1-4" (stored at 0xff802a ($802a)), and to "DIPSW 1-5" to "DIPSW 1-8" (stored at +0xff802e ($802e)) ... + + $490 : reads coins inputs ("2 players mode") + +This routines reads "Coin 1" status, and adds credits according to routine stored at +0xff802a ($802a) ... Then it reads "Coin 2" status, and adds credits according to +routine stored at 0xff802e ($802e) ... + + $4a2 : reads coins inputs ("4 players mode") + +This routines reads status of the 4 "Coin", and adds credits according to routine +stored at 0xff802a ($802a) ... + + $50c : read status of a "Coin" button + +This routines checks if value is <> 0x00 ... If this is the case, the routine that adds +credits is called, and the value is reset to 0x00 ... + + $ba36 : determines "Coin" status + +This routines splits the inputs into consecutive addresses : if the button is pressed, +0x01 will be added : + + - status of "Coin 1" is stored at address 0xff8030 ($8030) + - status of "Coin 2" is stored at address 0xff8031 ($8031) + - status of "Coin 3" is stored at address 0xff8032 ($8032) + - status of "Coin 4" is stored at address 0xff8033 ($8033) + - status of "Service" is stored at address 0xff8034 ($8034) + + $9002 : checks "1 Player Start" and "2 Players Start" buttons + + $9018 : "1 Player Start" button is pressed + +If enough credits, the number of credits is decremented by 1 ... + + $9056 : "2 Player Start" button is pressed + +If enough credits, the number of credits is decremented by 1 or 2, depending of +"DIPSW 2-3" ... + + $90ce : reads status of "DIPSW 2-3" Dip Switch + +This routine determines how many credits (1 or 2) are needed for a 2 players game ... + + $b908 : stores Dip Switches in memory + + $b91c : "brute hack" to disable "4 players mode" features + + $b924 : reads status of "DIPSW 2-7" Dip Switch for "screen flipping" support ... + + $9962 : reads status of "DIPSW 2-4" Dip Switch for "demo sounds" support ... + + $cf70 : sound routine + +There are read/writes on bit 7 of 0xfff009 ($f009) ... + +*/ +/******************************************************************************* + + Miyasu Nonki no Quiz 18-Kin (Japan) + (c)1992 EIM + + Added by Takahiro Nogi <nogi@kt.rim.or.jp> 2003/08/15 - + + +Board: OW-13 CPU +CPU: 68000-10 + Z80-B +Sound: YM2610 +OSC: 20.00000MHz + 14.31818MHz + 12.000MHz + 8.000MHz +Custom: C7-01 GGA + VS8803 + VS8904 + VS8905 + + +1-IC8.BIN main prg. +2-IC7.BIN +IC10.BIN +IC9.BIN + +3-IC144.BIN sound prg. + +IC123.BIN samples +IC124.BIN +IC126.BIN + +IC77.BIN BG chr. +IC78.BIN +IC79.BIN + +IC93.BIN OBJ chr. +IC94.BIN + + +TODO: + +- Couldn't figure out sprite table initialize routine, so I initialize it manually. + +*******************************************************************************/ + +#define WELLTRIS_4P_HACK 0 + +#include "driver.h" +#include "sound/2610intf.h" + +UINT16 *welltris_spriteram; +//size_t welltris_spriteram_size; +UINT16 *welltris_pixelram; +UINT16 *welltris_charvideoram; + +READ16_HANDLER( welltris_spriteram_r ); +WRITE16_HANDLER( welltris_spriteram_w ); +WRITE16_HANDLER( welltris_palette_bank_w ); +WRITE16_HANDLER( welltris_gfxbank_w ); +WRITE16_HANDLER( welltris_charvideoram_w ); +WRITE16_HANDLER( welltris_scrollreg_w ); +VIDEO_START( welltris ); +VIDEO_UPDATE( welltris ); + + + +static WRITE8_HANDLER( welltris_sh_bankswitch_w ) +{ + UINT8 *rom = memory_region(REGION_CPU2) + 0x10000; + + memory_set_bankptr(1,rom + (data & 0x03) * 0x8000); +} + + +static int pending_command; + +static WRITE16_HANDLER( sound_command_w ) +{ + if (ACCESSING_LSB) + { + pending_command = 1; + soundlatch_w(0, data & 0xff); + cpunum_set_input_line(1, INPUT_LINE_NMI, PULSE_LINE); + } +} + +static READ16_HANDLER( in0_r ) +{ + return readinputport(0) | (pending_command ? 0x80 : 0); +} + +static WRITE8_HANDLER( pending_command_clear_w ) +{ + pending_command = 0; +} + + +static ADDRESS_MAP_START( welltris_readmem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x03ffff) AM_READ(MRA16_ROM) + AM_RANGE(0x100000, 0x17ffff) AM_READ(MRA16_ROM) + AM_RANGE(0x800000, 0x81ffff) AM_READ(MRA16_RAM) /* Graph_1 & 2*/ + AM_RANGE(0xff8000, 0xffbfff) AM_READ(MRA16_RAM) /* Work */ + AM_RANGE(0xffc000, 0xffc3ff) AM_READ(MRA16_RAM) /* Sprite */ + AM_RANGE(0xffd000, 0xffdfff) AM_READ(MRA16_RAM) /* Char */ + AM_RANGE(0xffe000, 0xffefff) AM_READ(MRA16_RAM) /* Palette */ + + AM_RANGE(0xfff000, 0xfff001) AM_READ(input_port_1_word_r) /* Bottom Controls */ + AM_RANGE(0xfff002, 0xfff003) AM_READ(input_port_2_word_r) /* Top Controls */ + AM_RANGE(0xfff004, 0xfff005) AM_READ(input_port_3_word_r) /* Left Side Ctrls */ + AM_RANGE(0xfff006, 0xfff007) AM_READ(input_port_4_word_r) /* Right Side Ctrls */ + + AM_RANGE(0xfff008, 0xfff009) AM_READ(in0_r) /* Coinage, Start Buttons, pending sound command etc. */ /* Bit 5 Tested at start of irq 1 */ + AM_RANGE(0xfff00a, 0xfff00b) AM_READ(input_port_5_word_r) /* P3+P4 Coin + Start Buttons */ + AM_RANGE(0xfff00c, 0xfff00d) AM_READ(input_port_6_word_r) /* DSW0 Coinage */ + AM_RANGE(0xfff00e, 0xfff00f) AM_READ(input_port_7_word_r) /* DSW1 Game Options */ +ADDRESS_MAP_END + +static ADDRESS_MAP_START( welltris_writemem, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x03ffff) AM_WRITE(MWA16_ROM) + AM_RANGE(0x100000, 0x17ffff) AM_WRITE(MWA16_ROM) + AM_RANGE(0x800000, 0x81ffff) AM_WRITE(MWA16_RAM) AM_BASE(&welltris_pixelram) + AM_RANGE(0xff8000, 0xffbfff) AM_WRITE(MWA16_RAM) + + AM_RANGE(0xffc000, 0xffc3ff) AM_WRITE(welltris_spriteram_w) AM_BASE(&welltris_spriteram) + AM_RANGE(0xffd000, 0xffdfff) AM_WRITE(welltris_charvideoram_w) AM_BASE(&welltris_charvideoram) + AM_RANGE(0xffe000, 0xffefff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16) + + AM_RANGE(0xfff000, 0xfff001) AM_WRITE(welltris_palette_bank_w) + AM_RANGE(0xfff002, 0xfff003) AM_WRITE(welltris_gfxbank_w) + AM_RANGE(0xfff004, 0xfff007) AM_WRITE(welltris_scrollreg_w) + AM_RANGE(0xfff008, 0xfff009) AM_WRITE(sound_command_w) + AM_RANGE(0xfff00c, 0xfff00d) AM_WRITE(MWA16_NOP) // ?? + AM_RANGE(0xfff00e, 0xfff00f) AM_WRITE(MWA16_NOP) // ?? +ADDRESS_MAP_END + +static ADDRESS_MAP_START( sound_readmem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x77ff) AM_READ(MRA8_ROM) + AM_RANGE(0x7800, 0x7fff) AM_READ(MRA8_RAM) + AM_RANGE(0x8000, 0xffff) AM_READ(MRA8_BANK1) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( sound_writemem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x77ff) AM_WRITE(MWA8_ROM) + AM_RANGE(0x7800, 0x7fff) AM_WRITE(MWA8_RAM) + AM_RANGE(0x8000, 0xffff) AM_WRITE(MWA8_ROM) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( sound_readport, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE(0x08, 0x08) AM_READ(YM2610_status_port_0_A_r) + AM_RANGE(0x0a, 0x0a) AM_READ(YM2610_status_port_0_B_r) + AM_RANGE(0x10, 0x10) AM_READ(soundlatch_r) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( sound_writeport, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE(0x00, 0x00) AM_WRITE(welltris_sh_bankswitch_w) + AM_RANGE(0x08, 0x08) AM_WRITE(YM2610_control_port_0_A_w) + AM_RANGE(0x09, 0x09) AM_WRITE(YM2610_data_port_0_A_w) + AM_RANGE(0x0a, 0x0a) AM_WRITE(YM2610_control_port_0_B_w) + AM_RANGE(0x0b, 0x0b) AM_WRITE(YM2610_data_port_0_B_w) + AM_RANGE(0x18, 0x18) AM_WRITE(pending_command_clear_w) +ADDRESS_MAP_END + + + +static INPUT_PORTS_START( welltris ) + PORT_START + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE2 ) /* Test (used to go through tests in service mode) */ + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_TILT ) /* Tested at start of irq 1 */ + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) /* Service (adds a coin) */ + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* pending sound command */ + + PORT_START + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START + 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 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + +#if WELLTRIS_4P_HACK + /* These can actually be read in the test mode even if they're not used by the game without patching the code + might be useful if a real 4 player version ever turns up if it was ever produced */ + PORT_START + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(4) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(4) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(4) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(4) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) +#else + PORT_START + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) +#endif + + PORT_START + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN3 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN4 ) +#if WELLTRIS_4P_HACK + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START3 ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START4 ) +#else + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) +#endif + 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 + PORT_DIPNAME( 0x000f, 0x000f, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0006, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0x0007, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0009, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0004, "2-1, 4-2, 5-3, 6-4" ) + PORT_DIPSETTING( 0x0003, "2-1, 4-3" ) + PORT_DIPSETTING( 0x000f, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0001, "1-1, 2-2, 3-3, 4-5" ) + PORT_DIPSETTING( 0x0002, "1-1, 2-2, 3-3, 4-4, 5-6" ) + PORT_DIPSETTING( 0x0000, "1-1, 2-3" ) + PORT_DIPSETTING( 0x0005, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x000e, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x000d, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x000c, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x000b, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x000a, DEF_STR( 1C_6C ) ) + PORT_DIPNAME( 0x00f0, 0x00f0, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x0060, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0x0070, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0090, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0040, "2-1, 4-2, 5-3, 6-4" ) + PORT_DIPSETTING( 0x0030, "2-1, 4-3" ) + PORT_DIPSETTING( 0x00f0, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0010, "1-1, 2-2, 3-3, 4-5" ) + PORT_DIPSETTING( 0x0020, "1-1, 2-2, 3-3, 4-4, 5-6" ) + PORT_DIPSETTING( 0x0000, "1-1, 2-3" ) + PORT_DIPSETTING( 0x0050, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x00e0, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x00d0, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x00c0, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x00b0, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x00a0, DEF_STR( 1C_6C ) ) + + PORT_START + PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0003, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) // "Super" in test mode + PORT_DIPNAME( 0x0004, 0x0000, "Coin Mode" ) + PORT_DIPSETTING( 0x0004, "Mono Player" ) + PORT_DIPSETTING( 0x0000, "Many Player" ) + PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( On ) ) +#if WELLTRIS_4P_HACK + /* again might be handy if a real 4 player version shows up */ + PORT_DIPNAME( 0x0010, 0x0010, "DIPSW 2-5 (see notes)" ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, "4 Players Mode (see notes)" ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) +#else + PORT_DIPNAME( 0x0010, 0x0010, "DIPSW 2-5 (unused)" ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, "DIPSW 2-6 (unused)" ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) +#endif + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Flip_Screen ) ) /* Flip Screen Not Currently Supported */ + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_SERVICE( 0x0080, IP_ACTIVE_LOW ) +INPUT_PORTS_END + +static INPUT_PORTS_START( quiz18k ) + PORT_START + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* pending sound command */ + + PORT_START + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) 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_UNUSED ) + + PORT_START + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) 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_UNUSED ) + + PORT_START + PORT_BIT (0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START + PORT_BIT (0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START + PORT_BIT (0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START + PORT_DIPNAME( 0x01, 0x01, "DIPSW 1-1" ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, "DIPSW 1-2" ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, "DIPSW 1-3" ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, "DIPSW 1-4" ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, "DIPSW 1-5" ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, "DIPSW 1-6" ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, "DIPSW 1-7" ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "DIPSW 1-8" ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Flip_Screen ) ) /* Flip Screen Not Currently Supported */ + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, "DIPSW 2-3" ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, "DIPSW 2-4" ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, "DIPSW 2-5" ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, "Title Logo Type" ) + PORT_DIPSETTING( 0x20, "1" ) + PORT_DIPSETTING( 0x00, "2" ) + PORT_DIPNAME( 0x40, 0x40, "DIPSW 2-7" ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_SERVICE( 0x80, IP_ACTIVE_LOW ) +INPUT_PORTS_END + + + +static const gfx_layout welltris_charlayout = +{ + 8,8, + RGN_FRAC(1,1), + 4, + { 0, 1, 2, 3 }, + { 1*4, 0*4, 3*4, 2*4, 5*4, 4*4, 7*4, 6*4 }, + { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 }, + 32*8 +}; + +static const gfx_layout welltris_spritelayout = +{ + 16,16, + RGN_FRAC(1,2), + 4, + { 0, 1, 2, 3 }, + { 1*4, 0*4, 3*4, 2*4, RGN_FRAC(1,2)+1*4, RGN_FRAC(1,2)+0*4, RGN_FRAC(1,2)+3*4, RGN_FRAC(1,2)+2*4, + 5*4, 4*4, 7*4, 6*4, RGN_FRAC(1,2)+5*4, RGN_FRAC(1,2)+4*4, RGN_FRAC(1,2)+7*4, RGN_FRAC(1,2)+6*4 }, + { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32, + 8*32, 9*32, 10*32, 11*32, 12*32, 13*32, 14*32, 15*32 }, + 64*8 +}; + +static GFXDECODE_START( welltris ) + GFXDECODE_ENTRY( REGION_GFX1, 0, welltris_charlayout, 16* 0, 4*16 ) + GFXDECODE_ENTRY( REGION_GFX2, 0, welltris_spritelayout, 16*96, 2*16 ) +GFXDECODE_END + + + +static void irqhandler(int irq) +{ + cpunum_set_input_line(1, 0, irq ? ASSERT_LINE : CLEAR_LINE); +} + +static struct YM2610interface ym2610_interface = +{ + irqhandler, + REGION_SOUND1, + REGION_SOUND2 +}; + + + +static DRIVER_INIT( welltris ) +{ +#if WELLTRIS_4P_HACK + /* A Hack which shows 4 player mode in code which is disabled */ + UINT16 *RAM = (UINT16 *)memory_region(REGION_CPU1); + RAM[0xB91C/2] = 0x4e71; + RAM[0xB91E/2] = 0x4e71; +#endif +} + +static DRIVER_INIT( quiz18k ) +{ + ; +} + + + +static MACHINE_DRIVER_START( welltris ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000,20000000/2) /* 10 MHz */ + MDRV_CPU_PROGRAM_MAP(welltris_readmem,welltris_writemem) + MDRV_CPU_VBLANK_INT(irq1_line_hold,1) + + MDRV_CPU_ADD(Z80,8000000/2) /* 4 MHz ??? */ + /* audio CPU */ + MDRV_CPU_PROGRAM_MAP(sound_readmem,sound_writemem) + MDRV_CPU_IO_MAP(sound_readport,sound_writeport) + /* IRQs are triggered by the YM2610 */ + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(512, 256) + MDRV_SCREEN_VISIBLE_AREA(15, 367-1, 8, 248-1) + MDRV_GFXDECODE(welltris) + MDRV_PALETTE_LENGTH(2048) + + MDRV_VIDEO_START(welltris) + MDRV_VIDEO_UPDATE(welltris) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(YM2610, 8000000) + MDRV_SOUND_CONFIG(ym2610_interface) + MDRV_SOUND_ROUTE(0, "mono", 0.25) + MDRV_SOUND_ROUTE(1, "mono", 0.75) + MDRV_SOUND_ROUTE(2, "mono", 0.75) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( quiz18k ) + + /* basic machine hardware */ + MDRV_IMPORT_FROM( welltris ) + + MDRV_SCREEN_VISIBLE_AREA(15, 335-1, 0, 224-1) +MACHINE_DRIVER_END + + + +ROM_START( welltris ) + ROM_REGION( 0x180000, REGION_CPU1, 0 ) /* 68000 code */ + ROM_LOAD16_BYTE( "j2u.8", 0x000000, 0x20000, BAD_DUMP CRC(00a382a4) SHA1(b6a7e1b360e3cefc582983c8dff6aa28a7c77124) ) + ROM_LOAD16_BYTE( "j1u.7", 0x000001, 0x20000, BAD_DUMP CRC(abcb008b) SHA1(c71ed431cbd8aea0b4396029203a7b735a8fdac3) ) + /* Space */ + ROM_LOAD16_BYTE( "lh532j10.10", 0x100000, 0x40000, CRC(1187c665) SHA1(c6c55016e46805694348b386e521a3ef1a443621) ) + ROM_LOAD16_BYTE( "lh532j11.9", 0x100001, 0x40000, CRC(18eda9e5) SHA1(c01d1dc6bfde29797918490947c89440b58d5372) ) + + ROM_REGION( 0x30000, REGION_CPU2, 0 ) /* 64k for the audio CPU + banks */ + ROM_LOAD( "3.144", 0x00000, 0x20000, CRC(ae8f763e) SHA1(255419e02189c2e156c1fbcb0cd4aedd14ed8ffa) ) + ROM_RELOAD( 0x10000, 0x20000 ) + + ROM_REGION( 0x0a0000, REGION_GFX1, ROMREGION_DISPOSE ) /* CHAR Tiles */ + ROM_LOAD( "lh534j12.77", 0x000000, 0x80000, CRC(b61a8b74) SHA1(e17f7355375bdc166ef8131f7de9dbda5453f570) ) + + ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE ) /* SPRITE Tiles */ + ROM_LOAD( "046.93", 0x000000, 0x40000, CRC(31d96d77) SHA1(5613ef9e9e38406b4e64fc8983ea50b57613923e) ) + ROM_LOAD( "048.94", 0x040000, 0x40000, CRC(bb4643da) SHA1(38d54f8c3dba09b528df05d748ab5bdf5d028453) ) + + ROM_REGION( 0x080000, REGION_SOUND1, 0 ) /* sound samples */ + ROM_LOAD( "lh534j11.126", 0x00000, 0x80000, CRC(bf85fb0d) SHA1(358f91bbff2d3260f83b5a0422c0d985d1735cef) ) + + ROM_REGION( 0x100000, REGION_SOUND2, 0 ) /* sound samples */ + ROM_LOAD( "lh534j09.123", 0x00000, 0x80000, CRC(6c2ce9a5) SHA1(a4011ecfb505191c9934ba374933cd11b331d55a) ) + ROM_LOAD( "lh534j10.124", 0x80000, 0x80000, CRC(e3682221) SHA1(3e1cda07cf451955dc473eabe007854e5148ae27) ) +ROM_END + +ROM_START( welltrij ) + ROM_REGION( 0x180000, REGION_CPU1, 0 ) /* 68000 code */ + ROM_LOAD16_BYTE( "j2.8", 0x000000, 0x20000, CRC(68ec5691) SHA1(8615415c5c98aa9caa0878a8251da7985f050f94) ) + ROM_LOAD16_BYTE( "j1.7", 0x000001, 0x20000, CRC(1598ea2c) SHA1(e9150c3ab9b5c0eb9a5fee3e071358f92a005078) ) + /* Space */ + ROM_LOAD16_BYTE( "lh532j10.10", 0x100000, 0x40000, CRC(1187c665) SHA1(c6c55016e46805694348b386e521a3ef1a443621) ) + ROM_LOAD16_BYTE( "lh532j11.9", 0x100001, 0x40000, CRC(18eda9e5) SHA1(c01d1dc6bfde29797918490947c89440b58d5372) ) + + ROM_REGION( 0x30000, REGION_CPU2, 0 ) /* 64k for the audio CPU + banks */ + ROM_LOAD( "3.144", 0x00000, 0x20000, CRC(ae8f763e) SHA1(255419e02189c2e156c1fbcb0cd4aedd14ed8ffa) ) + ROM_RELOAD( 0x10000, 0x20000 ) + + ROM_REGION( 0x0a0000, REGION_GFX1, ROMREGION_DISPOSE ) /* CHAR Tiles */ + ROM_LOAD( "lh534j12.77", 0x000000, 0x80000, CRC(b61a8b74) SHA1(e17f7355375bdc166ef8131f7de9dbda5453f570) ) + + ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE ) /* SPRITE Tiles */ + ROM_LOAD( "046.93", 0x000000, 0x40000, CRC(31d96d77) SHA1(5613ef9e9e38406b4e64fc8983ea50b57613923e) ) + ROM_LOAD( "048.94", 0x040000, 0x40000, CRC(bb4643da) SHA1(38d54f8c3dba09b528df05d748ab5bdf5d028453) ) + + ROM_REGION( 0x080000, REGION_SOUND1, 0 ) /* sound samples */ + ROM_LOAD( "lh534j11.126", 0x00000, 0x80000, CRC(bf85fb0d) SHA1(358f91bbff2d3260f83b5a0422c0d985d1735cef) ) + + ROM_REGION( 0x100000, REGION_SOUND2, 0 ) /* sound samples */ + ROM_LOAD( "lh534j09.123", 0x00000, 0x80000, CRC(6c2ce9a5) SHA1(a4011ecfb505191c9934ba374933cd11b331d55a) ) + ROM_LOAD( "lh534j10.124", 0x80000, 0x80000, CRC(e3682221) SHA1(3e1cda07cf451955dc473eabe007854e5148ae27) ) +ROM_END + +ROM_START( quiz18k ) + ROM_REGION( 0x180000, REGION_CPU1, 0 ) /* 68000 code */ + ROM_LOAD16_BYTE( "1-ic8.bin", 0x000000, 0x20000, CRC(10a64336) SHA1(d63c0752385e1d66b09a7197e267dcd0e5e93be8) ) + ROM_LOAD16_BYTE( "2-ic7.bin", 0x000001, 0x20000, CRC(8b21b431) SHA1(278238ab4a5d11577c5ab3c7462b429f510a1d50) ) + /* Space */ + ROM_LOAD16_BYTE( "ic10.bin", 0x100000, 0x40000, CRC(501453a3) SHA1(d127f417f1c52333e478ac397fbe8a2f223b1ce7) ) + ROM_LOAD16_BYTE( "ic9.bin", 0x100001, 0x40000, CRC(99b6840f) SHA1(8409a33c64729066bfed6e49dcd84f30906274cb) ) + + ROM_REGION( 0x30000, REGION_CPU2, 0 ) /* 64k for the audio CPU + banks */ + ROM_LOAD( "3-ic144.bin", 0x00000, 0x20000, CRC(72d372e3) SHA1(d077e34947de1050b68d76506cc8926b06a94a76) ) + ROM_RELOAD( 0x10000, 0x20000 ) + + ROM_REGION( 0x180000, REGION_GFX1, ROMREGION_DISPOSE ) /* CHAR Tiles */ + ROM_LOAD( "ic77.bin", 0x000000, 0x80000, CRC(af3b6fd1) SHA1(d22f7cf62a94ae3a2dcb0236630e9ac88d5e528b) ) + ROM_LOAD( "ic78.bin", 0x080000, 0x80000, CRC(44bbdef3) SHA1(cd91eaf98602ef3448f49c8287591aa845afb874) ) + ROM_LOAD( "ic79.bin", 0x100000, 0x80000, CRC(d721e169) SHA1(33ec819c4e7b4dbab41756af9eca857107d96c8b) ) + + ROM_REGION( 0x100000, REGION_GFX2, ROMREGION_DISPOSE ) /* SPRITE Tiles */ + ROM_LOAD( "ic93.bin", 0x000000, 0x80000, CRC(4d387c5e) SHA1(e77aea06b9b2dc8ada5618aaf83bb80f63670363) ) + ROM_LOAD( "ic94.bin", 0x080000, 0x80000, CRC(6be2f164) SHA1(6a3ca63d6238d587a50718d2a6c76f01932c76c3) ) + + ROM_REGION( 0x040000, REGION_SOUND1, 0 ) /* sound samples */ + ROM_LOAD( "ic126.bin", 0x00000, 0x40000, CRC(7a92fbc9) SHA1(c13be1e84fc8e74c85d25d3357e078bc9e264682) ) + + ROM_REGION( 0x140000, REGION_SOUND2, 0 ) /* sound samples */ + ROM_LOAD( "ic123.bin", 0x00000, 0x80000, CRC(ee4995cf) SHA1(1b47938ddc87709f8d118b86fe62602972c77ced) ) + ROM_LOAD( "ic124.bin", 0x80000, 0x40000, CRC(076f58c3) SHA1(bd78f39b85b2697e733896705355e21b8d2a141d) ) +ROM_END + + + +GAME( 1991, welltris, 0, welltris, welltris, welltris, ROT0, "Video System Co.", "Welltris (World?, 2 players)", GAME_NO_COCKTAIL ) +GAME( 1991, welltrij, welltris, welltris, welltris, welltris, ROT0, "Video System Co.", "Welltris (Japan, 2 players)", GAME_NO_COCKTAIL ) +GAME( 1992, quiz18k, 0, quiz18k, quiz18k, quiz18k, ROT0, "EIM", "Miyasu Nonki no Quiz 18-Kin", GAME_NO_COCKTAIL ) |