summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/welltris.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/welltris.cpp')
-rw-r--r--src/mame/drivers/welltris.cpp814
1 files changed, 0 insertions, 814 deletions
diff --git a/src/mame/drivers/welltris.cpp b/src/mame/drivers/welltris.cpp
deleted file mode 100644
index b62ff069796..00000000000
--- a/src/mame/drivers/welltris.cpp
+++ /dev/null
@@ -1,814 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:David Haywood
-/*******************************************************************************
- Welltris (c)1991 Video System
-
-********************************************************************************
- hardware is similar to aerofgt.cpp 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.cpp and fromance.cpp 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
-
-********************************************************************************
-
- it's 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 subtracted, and you'll start a game with player 1 ...
- - When it's ON, 1 credit will be automatically subtracted, 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.
-
-*******************************************************************************/
-
-#include "emu.h"
-#include "includes/welltris.h"
-
-#include "cpu/m68000/m68000.h"
-#include "cpu/z80/z80.h"
-#include "sound/2610intf.h"
-#include "video/vsystem_gga.h"
-#include "emupal.h"
-#include "screen.h"
-#include "speaker.h"
-
-
-#define WELLTRIS_4P_HACK 0
-
-
-WRITE8_MEMBER(welltris_state::sound_bankswitch_w)
-{
- membank("soundbank")->set_entry(data & 0x03);
-}
-
-
-void welltris_state::main_map(address_map &map)
-{
- map(0x000000, 0x03ffff).rom();
- map(0x100000, 0x17ffff).rom();
- map(0x800000, 0x81ffff).ram().share("pixelram"); /* Graph_1 & 2*/
- map(0xff8000, 0xffbfff).ram(); /* work */
- map(0xffc000, 0xffc3ff).ram().share("spriteram"); /* Sprite */
- map(0xffd000, 0xffdfff).ram().w(FUNC(welltris_state::charvideoram_w)).share("charvideoram"); /* Char */
- map(0xffe000, 0xffefff).ram().w("palette", FUNC(palette_device::write16)).share("palette"); /* Palette */
- map(0xfff000, 0xfff001).portr("P1"); /* Bottom Controls */
- map(0xfff000, 0xfff001).w(FUNC(welltris_state::palette_bank_w));
- map(0xfff002, 0xfff003).portr("P2"); /* Top Controls */
- map(0xfff002, 0xfff003).w(FUNC(welltris_state::gfxbank_w));
- map(0xfff004, 0xfff005).portr("P3"); /* Left Side Ctrls */
- map(0xfff004, 0xfff007).w(FUNC(welltris_state::scrollreg_w));
- map(0xfff006, 0xfff007).portr("P4"); /* Right Side Ctrls */
- map(0xfff008, 0xfff009).portr("SYSTEM"); /* Bit 5 Tested at start of irq 1 */
- map(0xfff009, 0xfff009).w(m_soundlatch, FUNC(generic_latch_8_device::write));
- map(0xfff00a, 0xfff00b).portr("EXTRA"); /* P3+P4 Coin + Start Buttons */
- map(0xfff00c, 0xfff00d).portr("DSW1");
- map(0xfff00e, 0xfff00f).portr("DSW2");
- map(0xfff00c, 0xfff00f).w("gga", FUNC(vsystem_gga_device::write)).umask16(0x00ff);
-}
-
-void welltris_state::sound_map(address_map &map)
-{
- map(0x0000, 0x77ff).rom();
- map(0x7800, 0x7fff).ram();
- map(0x8000, 0xffff).bankr("soundbank");
-}
-
-void welltris_state::sound_port_map(address_map &map)
-{
- map.global_mask(0xff);
- map(0x00, 0x00).w(FUNC(welltris_state::sound_bankswitch_w));
- map(0x08, 0x0b).rw("ymsnd", FUNC(ym2610_device::read), FUNC(ym2610_device::write));
- map(0x10, 0x10).r(m_soundlatch, FUNC(generic_latch_8_device::read));
- map(0x18, 0x18).w(m_soundlatch, FUNC(generic_latch_8_device::acknowledge_w));
-}
-
-static INPUT_PORTS_START( welltris )
- PORT_START("SYSTEM")
- 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_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("soundlatch", generic_latch_8_device, pending_r) /* pending sound command */
-
- PORT_START("P1")
- 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("P2")
- 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("P3")
- 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("P4")
- 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("P3")
- 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("P4")
- 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("EXTRA")
- 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("DSW1")
- 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("DSW2")
- 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("SYSTEM")
- 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_CUSTOM ) /* pending sound command */
-
- PORT_START("P1")
- 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("P2")
- 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("P3")
- PORT_BIT (0xff, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("P4")
- PORT_BIT (0xff, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("EXTRA")
- PORT_BIT (0xff, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("DSW1")
- 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("DSW2")
- 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 charlayout =
-{
- 8,8,
- RGN_FRAC(1,1),
- 4,
- { 0, 1, 2, 3 },
- { 1*4, 0*4, 3*4, 2*4, 5*4, 4*4, 7*4, 6*4 },
- { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
- 32*8
-};
-
-static const gfx_layout spritelayout =
-{
- 16,16,
- RGN_FRAC(1,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( gfx_welltris )
- GFXDECODE_ENTRY( "gfx1", 0, charlayout, 16* 0, 4*16 )
- GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 16*96, 2*16 )
-GFXDECODE_END
-
-
-void welltris_state::init_welltris()
-{
-#if WELLTRIS_4P_HACK
- /* A Hack which shows 4 player mode in code which is disabled */
- uint16_t *RAM = (uint16_t *)memregion("maincpu")->base();
- RAM[0xB91C/2] = 0x4e71;
- RAM[0xB91E/2] = 0x4e71;
-#endif
-}
-
-void welltris_state::machine_start()
-{
- membank("soundbank")->configure_entries(0, 4, memregion("audiocpu")->base(), 0x8000);
-}
-
-void welltris_state::welltris(machine_config &config)
-{
- /* basic machine hardware */
- M68000(config, m_maincpu, 20000000/2); /* 10 MHz */
- m_maincpu->set_addrmap(AS_PROGRAM, &welltris_state::main_map);
- m_maincpu->set_vblank_int("screen", FUNC(welltris_state::irq1_line_hold));
-
- Z80(config, m_audiocpu, 8000000/2); /* 4 MHz ??? */
- m_audiocpu->set_addrmap(AS_PROGRAM, &welltris_state::sound_map);
- m_audiocpu->set_addrmap(AS_IO, &welltris_state::sound_port_map); /* IRQs are triggered by the YM2610 */
-
- /* video hardware */
- SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
- m_screen->set_refresh_hz(60);
- m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
- m_screen->set_size(512, 256);
- m_screen->set_visarea(15, 367-1, 8, 248-1);
- m_screen->set_screen_update(FUNC(welltris_state::screen_update));
- m_screen->set_palette("palette");
-
- GFXDECODE(config, m_gfxdecode, "palette", gfx_welltris);
- PALETTE(config, "palette").set_format(palette_device::xRGB_555, 2048);
-
- VSYSTEM_GGA(config, "gga", XTAL(14'318'181) / 2); // divider not verified
-
- VSYSTEM_SPR2(config, m_spr_old, 0);
- m_spr_old->set_gfx_region(1);
- m_spr_old->set_pritype(-1);
- m_spr_old->set_gfxdecode_tag(m_gfxdecode);
-
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
-
- GENERIC_LATCH_8(config, m_soundlatch);
- m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI);
- m_soundlatch->set_separate_acknowledge(true);
-
- ym2610_device &ymsnd(YM2610(config, "ymsnd", 8000000));
- ymsnd.irq_handler().set_inputline(m_audiocpu, 0);
- ymsnd.add_route(0, "mono", 0.25);
- ymsnd.add_route(1, "mono", 0.75);
- ymsnd.add_route(2, "mono", 0.75);
-}
-
-void welltris_state::quiz18k(machine_config &config)
-{
- welltris(config);
-
- /* basic machine hardware */
- m_screen->set_visarea(15, 335-1, 0, 224-1);
-
- m_spr_old->set_offsets(6, 1);
-}
-
-
-
-ROM_START( welltris )
- ROM_REGION( 0x180000, "maincpu", 0 ) /* 68000 code */
- ROM_LOAD16_BYTE( "j2u.8", 0x000000, 0x20000, CRC(7488fe94) SHA1(41874366e2ab763cd827ff712b76ea2da0f9af6a) )
- ROM_LOAD16_BYTE( "j1u.7", 0x000001, 0x20000, CRC(571413ac) SHA1(5eb9387efb9c1597005abff4d79f4b32aa7c93b2) )
- /* 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( 0x20000, "audiocpu", 0 ) /* 128k for the audio CPU + banks */
- ROM_LOAD( "3.144", 0x00000, 0x20000, CRC(ae8f763e) SHA1(255419e02189c2e156c1fbcb0cd4aedd14ed8ffa) )
-
- ROM_REGION( 0x0a0000, "gfx1", 0 ) /* CHAR Tiles */
- ROM_LOAD( "lh534j12.77", 0x000000, 0x80000, CRC(b61a8b74) SHA1(e17f7355375bdc166ef8131f7de9dbda5453f570) )
-
- ROM_REGION( 0x80000, "gfx2", 0 ) /* 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, "ymsnd.deltat", 0 ) /* sound samples */
- ROM_LOAD( "lh534j11.126", 0x00000, 0x80000, CRC(bf85fb0d) SHA1(358f91bbff2d3260f83b5a0422c0d985d1735cef) )
-
- ROM_REGION( 0x100000, "ymsnd", 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( welltrisj )
- ROM_REGION( 0x180000, "maincpu", 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( 0x20000, "audiocpu", 0 ) /* 128k for the audio CPU + banks */
- ROM_LOAD( "3.144", 0x00000, 0x20000, CRC(ae8f763e) SHA1(255419e02189c2e156c1fbcb0cd4aedd14ed8ffa) )
-
- ROM_REGION( 0x0a0000, "gfx1", 0 ) /* CHAR Tiles */
- ROM_LOAD( "lh534j12.77", 0x000000, 0x80000, CRC(b61a8b74) SHA1(e17f7355375bdc166ef8131f7de9dbda5453f570) )
-
- ROM_REGION( 0x80000, "gfx2", 0 ) /* 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, "ymsnd.deltat", 0 ) /* sound samples */
- ROM_LOAD( "lh534j11.126", 0x00000, 0x80000, CRC(bf85fb0d) SHA1(358f91bbff2d3260f83b5a0422c0d985d1735cef) )
-
- ROM_REGION( 0x100000, "ymsnd", 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, "maincpu", 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( 0x20000, "audiocpu", 0 ) /* 128k for the audio CPU + banks */
- ROM_LOAD( "3-ic144.bin", 0x00000, 0x20000, CRC(72d372e3) SHA1(d077e34947de1050b68d76506cc8926b06a94a76) )
-
- ROM_REGION( 0x180000, "gfx1", 0 ) /* 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, "gfx2", 0 ) /* 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, "ymsnd.deltat", 0 ) /* sound samples */
- ROM_LOAD( "ic126.bin", 0x00000, 0x40000, CRC(7a92fbc9) SHA1(c13be1e84fc8e74c85d25d3357e078bc9e264682) )
-
- ROM_REGION( 0x140000, "ymsnd", 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_state, init_welltris, ROT0, "Video System Co.", "Welltris (World?, 2 players)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
-GAME( 1991, welltrisj, welltris, welltris, welltris, welltris_state, init_welltris, ROT0, "Video System Co.", "Welltris (Japan, 2 players)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
-GAME( 1992, quiz18k, 0, quiz18k, quiz18k, welltris_state, empty_init, ROT0, "EIM", "Miyasu Nonki no Quiz 18-Kin", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )