summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/dynax/royalmah.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/dynax/royalmah.cpp')
-rw-r--r--src/mame/dynax/royalmah.cpp1126
1 files changed, 636 insertions, 490 deletions
diff --git a/src/mame/dynax/royalmah.cpp b/src/mame/dynax/royalmah.cpp
index 0dba02f304a..f377d4f3c85 100644
--- a/src/mame/dynax/royalmah.cpp
+++ b/src/mame/dynax/royalmah.cpp
@@ -58,6 +58,9 @@ TODO:
- mjtensin: random crashes, interrupts related
+- janoh, janohb: they do the same bank switching calls as mjsiyoub and kiwako/jongkyo.cpp
+ but there's no ROM to map there. Missing on the dumped PCBs or something else going on?
+
Stephh's notes (based on the games Z80 code and some tests) :
1) 'royalmah'
@@ -95,14 +98,18 @@ Stephh's notes (based on the games Z80 code and some tests) :
access some hidden options. (thanks bnathan)
- cafebrk and cafepara share the same internal TMP91640 code, while
- cafedoll and mjvegas share the same internal TMP90840 code. Curiously,
- cafetime has the same internal TMP90840 code as cafedoll and mjvegas,
- but it's configured to run in external ROM mode.
+ cafedoll, mjvegas and ougonhai (dynax.cpp) share the same internal TMP90840
+ code. Curiously, cafetime has the same internal TMP90840 code as cafedoll
+ and mjvegas, but it's configured to run in external ROM mode.
****************************************************************************/
#include "emu.h"
+#include "mjdipsw.h"
+
+#include "mahjong.h"
+
#include "cpu/tlcs90/tlcs90.h"
#include "cpu/z80/tmpz84c015.h"
#include "cpu/z80/z80.h"
@@ -275,6 +282,7 @@ public:
void init_daisyari() ATTR_COLD;
void init_mjtensin() ATTR_COLD;
void init_cafedoll() ATTR_COLD;
+ void init_cafepara() ATTR_COLD;
void init_cafetime() ATTR_COLD;
void init_mjvegas() ATTR_COLD;
void init_mjvegasa() ATTR_COLD;
@@ -1500,14 +1508,15 @@ void royalmah_prgbank_state::cafetime_map(address_map &map)
void royalmah_prgbank_state::cafepara_map(address_map &map)
{
map(0x0000, 0x5fff).rom();
- map(0x6000, 0x7eff).ram().share("nvram");
+ map(0x6000, 0x6fff).bankrw("bank3").share("nvram"); // nvram
+ map(0x7000, 0x7fff).bankrw(m_rambank); // banked nvram
map(0x7fe1, 0x7fe1).r(m_ay, FUNC(ay8910_device::data_r));
map(0x7fe2, 0x7fe3).w(m_ay, FUNC(ay8910_device::data_address_w));
map(0x7ff0, 0x7ff0).w(FUNC(royalmah_prgbank_state::janptr96_coin_counter_w));
map(0x7ff1, 0x7ff1).portr("SYSTEM").nopw();
map(0x7ff3, 0x7ff3).w(FUNC(royalmah_prgbank_state::input_port_select_w));
map(0x7ff4, 0x7ff4).lw8(NAME([this] (uint8_t data) { m_mainbank->set_entry(data); if (data >= 0x10) logerror("mainbank_w: %02x\n", data); }));
- map(0x7ff5, 0x7ff5).lw8(NAME([this] (uint8_t data) { logerror("0x7ff5 write: %02x\n", data); })); // bit 1 seems coin counter but it's actually at 0x7ff0
+ map(0x7ff5, 0x7ff5).w(FUNC(royalmah_prgbank_state::janptr96_rambank_w));
map(0x7ff6, 0x7ff6).w(FUNC(royalmah_prgbank_state::mjderngr_palbank_w));
map(0x7ff7, 0x7ff7).w(FUNC(royalmah_prgbank_state::cafetime_7fe3_w));
map(0x8000, 0xffff).bankr(m_mainbank);
@@ -1631,97 +1640,45 @@ void royalmah_prgbank_state::mjvegasa_map(address_map &map)
static INPUT_PORTS_START( mjctrl1 )
- PORT_START("KEY0") // P1 IN0
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Credit Clear") PORT_CODE(KEYCODE_O)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Credit Clear") PORT_CODE(KEYCODE_8)
-
- PORT_START("KEY1") // P1 IN1
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET )
+ PORT_INCLUDE(mahjong_matrix_2p_bet_wup)
+
+ PORT_MODIFY("KEY0") // P1 IN0
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Credit Clear") PORT_CODE(KEYCODE_MINUS)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Credit Clear") PORT_CODE(KEYCODE_EQUALS)
+
+ PORT_MODIFY("KEY1") // P1 IN1
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("KEY2") // P1 IN2
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON )
- PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("KEY3") // P1 IN3
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON )
- PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_MODIFY("KEY2") // P1 IN2
+ PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("KEY4") // P1 IN4
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL )
+ PORT_MODIFY("KEY3") // P1 IN3
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("KEY5") // P2 IN0
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_PLAYER(2)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_PLAYER(2)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_PLAYER(2)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_PLAYER(2)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_PLAYER(2)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_MODIFY("KEY4") // P1 IN4
+ PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_MODIFY("KEY5") // P2 IN0
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_START("KEY6") // P2 IN1
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_PLAYER(2)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_PLAYER(2)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_PLAYER(2)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_PLAYER(2)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_PLAYER(2)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) PORT_PLAYER(2)
+ PORT_MODIFY("KEY6") // P2 IN1
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("KEY7") // P2 IN2
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_PLAYER(2)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_PLAYER(2)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_PLAYER(2)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_PLAYER(2)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_PLAYER(2)
- PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("KEY8") // P2 IN3
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_PLAYER(2)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_PLAYER(2)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_PLAYER(2)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_PLAYER(2)
- PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_MODIFY("KEY7") // P2 IN2
+ PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_MODIFY("KEY8") // P2 IN3
+ PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("KEY9") // P2 IN4
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) PORT_PLAYER(2)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) PORT_PLAYER(2)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) PORT_PLAYER(2)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) PORT_PLAYER(2)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) PORT_PLAYER(2)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) PORT_PLAYER(2)
+ PORT_MODIFY("KEY9") // P2 IN4
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("SYSTEM") // IN10
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN2 ) // "Note" ("Paper Money") = 10 Credits
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MEMORY_RESET ) // Memory Reset
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE1 ) // Analizer (Statistics)
- PORT_SERVICE( 0x08, IP_ACTIVE_HIGH )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_GAMBLE_BOOK ) PORT_TOGGLE // Analizer (Statistics)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_TOGGLE PORT_NAME( DEF_STR(Service_Mode) )
PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
@@ -1730,7 +1687,7 @@ static INPUT_PORTS_START( mjctrl2 )
PORT_INCLUDE( mjctrl1 )
PORT_MODIFY("KEY0")
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Payout") PORT_CODE(KEYCODE_O)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
@@ -2547,93 +2504,88 @@ static INPUT_PORTS_START( mjdiplob )
PORT_DIPSETTING( 0x10, "200" )
PORT_DIPSETTING( 0x20, "300" )
PORT_DIPSETTING( 0x30, "500" )
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:7") // check code at 0x2c64, unused according to manual
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x40, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:8") // check code at 0x2c64, unused according to manual
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x80, DEF_STR( On ) )
-
- PORT_START("DSW3") // DSW3 (inport $63 -> 0x76fc), switches 5-7 could do with verifying by someone who understands Japanese and mahjong (see MT05553 for manual)
- PORT_DIPNAME( 0x01, 0x00, "Baibai Bonus" ) PORT_DIPLOCATION("SW3:1") // see notes about 'Special Combinations'
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x00, "Don Den" ) PORT_DIPLOCATION("SW3:2")
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x00, "W-Bet" ) PORT_DIPLOCATION("SW3:3") // check code at 0x531f and 0x5375
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x00, "Last Chance" ) PORT_DIPLOCATION("SW3:4") // check code at 0x5240
- PORT_DIPSETTING( 0x08, "Free" )
- PORT_DIPSETTING( 0x00, "Charge" )
- PORT_DIPNAME( 0x10, 0x00, "Renchan Rate" ) PORT_DIPLOCATION("SW3:5") // check code at 0x2411
- PORT_DIPSETTING( 0x00, "Good" )
- PORT_DIPSETTING( 0x10, DEF_STR( Normal ) )
- PORT_DIPNAME( 0x20, 0x00, "Renchan" ) PORT_DIPLOCATION("SW3:6") // check code at 0x2411 and 0x4beb
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x00, "Auto Tsumo?" ) PORT_DIPLOCATION("SW3:7") // check code at 0x24ff, 0x25f2, 0x3fcf and 0x45d7
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, "Full Tests" ) PORT_DIPLOCATION("SW3:8") // seems to hang after the last animation, unused according to manual
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x00, DEF_STR(Unknown) ) PORT_DIPLOCATION("SW2:7") // O N.固定 (check code at 0x2c64)
+ PORT_DIPSETTING( 0x40, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x00, DEF_STR(On) )
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR(Unknown) ) PORT_DIPLOCATION("SW2:8") // O N.固定 (check code at 0x2c64)
+ PORT_DIPSETTING( 0x80, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x00, DEF_STR(On) )
+
+ PORT_START("DSW3") // DSW3 (inport $63 -> 0x76fc)
+ PORT_DIPNAME( 0x01, 0x00, "Double Bonus" ) PORT_DIPLOCATION("SW3:1") // 倍々ボーナス(ODDS表の※印の付いた箇所は2倍)
+ PORT_DIPSETTING( 0x01, DEF_STR(Off) ) // 無し
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有り
+ PORT_DIPNAME( 0x02, 0x00, "Don Den" ) PORT_DIPLOCATION("SW3:2") // Don Den
+ PORT_DIPSETTING( 0x02, DEF_STR(Off) ) // 無し
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有り
+ PORT_DIPNAME( 0x04, 0x00, "Double Bet" ) PORT_DIPLOCATION("SW3:3") // W-BET (check code at 0x531f and 0x5375)
+ PORT_DIPSETTING( 0x04, DEF_STR(Off) ) // 無し
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有り
+ PORT_DIPNAME( 0x08, 0x00, "Last Chance" ) PORT_DIPLOCATION("SW3:4") // ラストチャンス (check code at 0x5240)
+ PORT_DIPSETTING( 0x08, "Free" ) // 無料
+ PORT_DIPSETTING( 0x00, "Paid" ) // 有料
+ PORT_DIPNAME( 0x10, 0x00, "Renchan Rate" ) PORT_DIPLOCATION("SW3:5") // 連荘レート(配牌時、背牌の色によって連荘条件が変わる) (check code at 0x2411)
+ PORT_DIPSETTING( 0x10, DEF_STR(Normal) ) // 普通
+ PORT_DIPSETTING( 0x00, "Good" ) // 良い
+ PORT_DIPNAME( 0x20, 0x00, "Enable Renchan Rate" ) PORT_DIPLOCATION("SW3:6") // 連荘レート (check code at 0x2411 and 0x4beb)
+ PORT_DIPSETTING( 0x20, DEF_STR(Off) ) // 無し
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有り
+ PORT_DIPNAME( 0x40, 0x00, "Ron Hand Animation" ) PORT_DIPLOCATION("SW3:7") // ゲーム中、当った時 手 のキャラクターが出る。 (check code at 0x24ff, 0x25f2, 0x3fcf and 0x45d7)
+ PORT_DIPSETTING( 0x40, DEF_STR(Off) ) // 無し
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有り
+ PORT_DIPNAME( 0x80, 0x80, "Full Tests" ) PORT_DIPLOCATION("SW3:8") // OFF.固定 (seems to hang after the last animation)
+ PORT_DIPSETTING( 0x80, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x00, DEF_STR(On) )
INPUT_PORTS_END
static INPUT_PORTS_START( mjderngr )
- PORT_INCLUDE( mjctrl2 )
+ // Difficulty is set by the first switch in DIP SW.1 that's on,
+ // the rest of the switches are ignored after finding one on.
+ // All switches off is the same as having the first switch on (easy).
+ // e.g. XXXXXXXX = 1 (easy)
+ // OXXXXXXX = 1 (easy)
+ // OXOXXXXX = 1 (easy)
+ // XOOXXXXX = 2
+ // XXOXXXXX = 3
+ // XXXOXXOX = 4
- PORT_START("DSW1")
- PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coinage ) )
- PORT_DIPSETTING( 0x03, DEF_STR( 4C_1C ) )
- PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) )
- 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, "ROM & Animation Test" )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_INCLUDE( mjctrl2 )
- PORT_START("DSW2")
- PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
- 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 ) )
+ PORT_START("DSW1") // stored at 0x7681
+ PORT_DIPNAME( 0x03, 0x00, DEF_STR(Coinage) ) PORT_DIPLOCATION("DIP SW.2:1,2") // コイン設定
+ PORT_DIPSETTING( 0x03, DEF_STR(4C_1C) ) // 4コイン 1プレイ
+ PORT_DIPSETTING( 0x02, DEF_STR(2C_1C) ) // 2コイン 1プレイ
+ PORT_DIPSETTING( 0x00, DEF_STR(1C_1C) ) // 1コイン 1プレイ
+ PORT_DIPSETTING( 0x01, DEF_STR(1C_2C) ) // 1コイン 2プレイ
+ PORT_DIPNAME( 0x04, 0x00, DEF_STR(Demo_Sounds) ) PORT_DIPLOCATION("DIP SW.2:3") // デモ・サウンド
+ PORT_DIPSETTING( 0x04, DEF_STR(Off) ) // 無し
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有り
+ PORT_DIPNAME( 0x08, 0x08, "Auto Reach" ) PORT_DIPLOCATION("DIP SW.2:4") // オート・ツモ
+ PORT_DIPSETTING( 0x08, DEF_STR(Off) ) // 無し
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有り
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR(Unknown) ) PORT_DIPLOCATION("DIP SW.2:5") // OFF 固定
+ PORT_DIPSETTING( 0x10, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x00, DEF_STR(On) )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR(Unknown) ) PORT_DIPLOCATION("DIP SW.2:6") // OFF 固定
+ PORT_DIPSETTING( 0x20, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x00, DEF_STR(On) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR(Unknown) ) PORT_DIPLOCATION("DIP SW.2:7") // OFF 固定
+ PORT_DIPSETTING( 0x40, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x00, DEF_STR(On) )
+ PORT_DIPNAME( 0x80, 0x80, "ROM & Animation Test" ) PORT_DIPLOCATION("DIP SW.2:8") // OFF 固定
+ PORT_DIPSETTING( 0x80, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x00, DEF_STR(On) )
+
+ PORT_START("DSW2") // stored at 0x7680
+ PORT_DIPNAME( 0xff, 0xef, "Computer Strength" ) PORT_DIPLOCATION("DIP SW.1:1,2,3,4,5,6,7,8") // コンピューターの強さ
+ PORT_DIPSETTING( 0xfe, "1 (Weak)" ) // 弱い
+ PORT_DIPSETTING( 0xfd, "2" )
+ PORT_DIPSETTING( 0xfb, "3" )
+ PORT_DIPSETTING( 0xf7, "4" )
+ PORT_DIPSETTING( 0xef, "5 (Normal)" ) // (標準)
+ PORT_DIPSETTING( 0xdf, "6" )
+ PORT_DIPSETTING( 0xbf, "7" )
+ PORT_DIPSETTING( 0x7f, "8 (Strong)" ) // 強い
INPUT_PORTS_END
static INPUT_PORTS_START( majs101b )
@@ -3200,137 +3152,221 @@ static INPUT_PORTS_START( mjtensin )
INPUT_PORTS_END
static INPUT_PORTS_START( cafetime ) // dips definitions and defaults taken from MT05580, this uses 10 switch dip banks
+ // The manual provides two sets of standard settings:
+ // 標準設定 シングル向け 標準設定 コーナー向け
+ // SW 1 OFF OFF OFF ON ON ON OFF ON ON OFF OFF OFF OFF ON ON ON OFF ON ON OFF
+ // SW 2 OFF OFF OFF OFF ON ON OFF ON ON OFF OFF OFF OFF OFF ON OFF ON ON ON OFF
+ // SW 3 OFF OFF ON ON ON ON ON OFF OFF OFF OFF OFF ON ON ON ON ON OFF OFF OFF
+ // SW 4 OFF ON ON ON ON ON OFF ON OFF OFF ON ON OFF ON ON ON OFF ON OFF OFF
+
PORT_INCLUDE( mjctrl2 )
PORT_START("DSW1") // IN11
- PORT_DIPNAME( 0x0f, 0x07, "Pay Out Rate" ) PORT_DIPLOCATION("SW1:1,2,3,4")
- PORT_DIPSETTING( 0x0f, "96%" )
- PORT_DIPSETTING( 0x0e, "93%" )
- PORT_DIPSETTING( 0x0d, "90%" )
- PORT_DIPSETTING( 0x0c, "87%" )
- PORT_DIPSETTING( 0x0b, "84%" )
- PORT_DIPSETTING( 0x0a, "81%" )
- PORT_DIPSETTING( 0x09, "78%" )
- PORT_DIPSETTING( 0x08, "75%" )
- PORT_DIPSETTING( 0x07, "71%" )
- PORT_DIPSETTING( 0x06, "68%" )
- PORT_DIPSETTING( 0x05, "65%" )
- PORT_DIPSETTING( 0x04, "62%" )
- PORT_DIPSETTING( 0x03, "59%" )
- PORT_DIPSETTING( 0x02, "56%" )
- PORT_DIPSETTING( 0x01, "53%" )
- PORT_DIPSETTING( 0x00, "50%" )
- PORT_DIPNAME( 0x30, 0x00, "Odds Rate" ) PORT_DIPLOCATION("SW1:5,6") // Yakuman - Triple - Double - Haneman - Mangan - 3 Han - 2 Han - 1 Han
- PORT_DIPSETTING( 0x30, "32-24-16-12-8-4-2-1" )
- PORT_DIPSETTING( 0x00, "50-30-15-8-5-3-2-1" )
- PORT_DIPSETTING( 0x10, "100-50-25-10-5-3-2-1" )
- PORT_DIPSETTING( 0x20, "200-100-50-10-5-3-2-1" )
- PORT_DIPNAME( 0xc0, 0x40, "Maximum Bet" ) PORT_DIPLOCATION("SW1:7,8")
+ MAHJONG_PAYOUT_RATE(0, "SW 1:1,2,3,4") // PAY-OUT RATE
+ MAHJONG_ODDS_RATE(4, "SW 1:5,6") // ODDS RATE
+ PORT_DIPNAME( 0xc0, 0x40, "Maximum Bet" ) PORT_DIPLOCATION("SW 1:7,8") // BET-MAX
PORT_DIPSETTING( 0xc0, "1" )
PORT_DIPSETTING( 0x80, "5" )
PORT_DIPSETTING( 0x40, "10" )
PORT_DIPSETTING( 0x00, "20" )
- PORT_START("DSW2") // IN12, defaults for 'single type'
- PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW2:1,2")
- PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x01, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0x00, "1C_10C" )
- PORT_DIPNAME( 0x0c, 0x0c, "Minimum Rate" ) PORT_DIPLOCATION("SW2:3,4")
- PORT_DIPSETTING( 0x0c, "1" )
- PORT_DIPSETTING( 0x08, "2" )
- PORT_DIPSETTING( 0x04, "3" )
- PORT_DIPSETTING( 0x00, "5" )
- PORT_DIPNAME( 0x70, 0x40, "Yakuman Bonus" ) PORT_DIPLOCATION("SW2:5,6,7") // default for 'corner type' would be 0x20
- PORT_DIPSETTING( 0x70, DEF_STR( No ) )
- PORT_DIPSETTING( 0x60, "Once on Start" )
- PORT_DIPSETTING( 0x50, "Every 300 Coins" )
- PORT_DIPSETTING( 0x40, "Every 500 Coins" )
- PORT_DIPSETTING( 0x30, "Every 700 Coins" )
- PORT_DIPSETTING( 0x20, "Every 1000 Coins" )
- PORT_DIPSETTING( 0x10, DEF_STR( Unknown ) ) // not listed on dip sheet
- PORT_DIPSETTING( 0x00, DEF_STR( Unknown ) ) // not listed on dip sheet
- PORT_DIPNAME( 0x80, 0x00, "Yakuman Bonus Cycle" ) PORT_DIPLOCATION("SW2:8")
- PORT_DIPSETTING( 0x00, "Once" )
- PORT_DIPSETTING( 0x80, "Twice" )
+ PORT_START("DSW2") // IN12
+ MAHJONG_COINAGE(0, "SW 2:1,2") // COIN RATE
+ PORT_DIPNAME( 0x0c, 0x0c, "Minimum Bet" ) PORT_DIPLOCATION("SW 2:3,4") // ゲーム・スタート時の最低レート数
+ PORT_DIPSETTING( 0x0c, "1" ) // レート 1
+ PORT_DIPSETTING( 0x08, "2" ) // レート 2
+ PORT_DIPSETTING( 0x04, "3" ) // レート 3
+ PORT_DIPSETTING( 0x00, "5" ) // レート 5
+ MAHJONG_YAKUMAN_BONUS(4, 0x04, "SW 2:5,6,7") // 役満ボーナスの設定周期
+ PORT_DIPNAME( 0x80, 0x00, "Yakuman Bonuses Per Cycle" ) PORT_DIPLOCATION("SW 2:8") // 役満ボーナスの回数設定周期毎に
+ PORT_DIPSETTING( 0x00, "1" ) // 1回
+ PORT_DIPSETTING( 0x80, "2" ) // 2回
PORT_START("DSW3") // IN13
- PORT_DIPNAME( 0x01, 0x01, "Payout Type" ) PORT_DIPLOCATION("SW3:1")
- PORT_DIPSETTING( 0x01, "Credits" )
- PORT_DIPSETTING( 0x00, "Hopper" )
- PORT_DIPNAME( 0x02, 0x02, "Hopper Type" ) PORT_DIPLOCATION("SW3:2")
- PORT_DIPSETTING( 0x02, DEF_STR( Normal ) )
- PORT_DIPSETTING( 0x00, "Reversed" )
- PORT_DIPNAME( 0x04, 0x00, "W-Bet" ) PORT_DIPLOCATION("SW3:3")
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x00, "Renchan Rate" ) PORT_DIPLOCATION("SW3:4")
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x00, "Last Chance" ) PORT_DIPLOCATION("SW3:5")
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x00, "Good Time Timer" ) PORT_DIPLOCATION("SW3:6")
- PORT_DIPSETTING( 0x00, "3 Minutes" )
- PORT_DIPSETTING( 0x20, "5 Minutes" )
- PORT_DIPNAME( 0x40, 0x00, "Quiz Bonus" ) PORT_DIPLOCATION("SW3:7")
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, "Quiz Bonus Points" ) PORT_DIPLOCATION("SW3:8")
- PORT_DIPSETTING( 0x00, "2" )
- PORT_DIPSETTING( 0x80, "3" )
+ PORT_DIPNAME( 0x01, 0x01, "Payout Mode" ) PORT_DIPLOCATION("SW 3:1") // ゲーム・タイプ
+ PORT_DIPSETTING( 0x01, "Key-out" ) // クレジット・タイプ
+ PORT_DIPSETTING( 0x00, "Hopper" ) // ホッパー・タイプ
+ PORT_DIPNAME( 0x02, 0x02, "Hopper Polarity" ) PORT_DIPLOCATION("SW 3:2") // ホッパー・アクティブ
+ PORT_DIPSETTING( 0x02, DEF_STR(Normal) ) // 通常
+ PORT_DIPSETTING( 0x00, "Inverted" ) // 反転
+ PORT_DIPNAME( 0x04, 0x00, "Double Bet" ) PORT_DIPLOCATION("SW 3:3") // W-BET
+ PORT_DIPSETTING( 0x04, DEF_STR(Off) ) // 無
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有
+ PORT_DIPNAME( 0x08, 0x00, "Renchan Rate" ) PORT_DIPLOCATION("SW 3:4") // 連荘レート
+ PORT_DIPSETTING( 0x08, DEF_STR(Off) ) // 無
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有
+ PORT_DIPNAME( 0x10, 0x00, "Last Chance" ) PORT_DIPLOCATION("SW 3:5") // ラスト・チャンス
+ PORT_DIPSETTING( 0x10, DEF_STR(Off) ) // 無
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有
+ PORT_DIPNAME( 0x20, 0x00, "Good Time Duration" ) PORT_DIPLOCATION("SW 3:6") // Good Time の時間
+ PORT_DIPSETTING( 0x00, "3 Minutes" ) // 3分間
+ PORT_DIPSETTING( 0x20, "5 Minutes" ) // 5分間
+ PORT_DIPNAME( 0x40, 0x00, "Quiz Bonus" ) PORT_DIPLOCATION("SW 3:7") // クイズ・ボーナス
+ PORT_DIPSETTING( 0x40, DEF_STR(Off) ) // 無
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有
+ PORT_DIPNAME( 0x80, 0x80, "Quiz Bonus Points" ) PORT_DIPLOCATION("SW 3:8") // クイズ・ボーナスのポイント
+ PORT_DIPSETTING( 0x00, "2" ) // 2点
+ PORT_DIPSETTING( 0x80, "3" ) // 3点
+
+ PORT_START("DSW4") // IN14
+ PORT_DIPNAME( 0x01, 0x00, DEF_STR(Demo_Sounds) ) PORT_DIPLOCATION("SW 4:1") // デモ・サウンド
+ PORT_DIPSETTING( 0x01, DEF_STR(Off) ) // 無
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有
+ PORT_DIPNAME( 0x02, 0x00, "In-Game Music" ) PORT_DIPLOCATION("SW 4:2") // ゲーム・サウンド
+ PORT_DIPSETTING( 0x02, DEF_STR(Off) ) // 無
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有
+ PORT_DIPNAME( 0x04, 0x00, "Don Den Button" ) PORT_DIPLOCATION("SW 4:3") // Don・Den 機能ボタン変更
+ PORT_DIPSETTING( 0x04, "Start" ) // スタート・ボタ
+ PORT_DIPSETTING( 0x00, "Flip Flop" ) // F/F・ボタン
+ PORT_DIPNAME( 0x08, 0x00, "Auto Reach" ) PORT_DIPLOCATION("SW 4:4") // オート・リーチ
+ PORT_DIPSETTING( 0x08, DEF_STR(Off) ) // 無
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有
+ PORT_DIPNAME( 0x10, 0x00, "Show 4-Panel Comics" ) PORT_DIPLOCATION("SW 4:5") // 4コマ・漫画表示
+ PORT_DIPSETTING( 0x10, DEF_STR(Off) ) // 無
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有
+ PORT_DIPNAME( 0x20, 0x00, "Background Color" ) PORT_DIPLOCATION("SW 4:6") // バック・カラー
+ PORT_DIPSETTING( 0x20, "Black" ) // 黒
+ PORT_DIPSETTING( 0x00, "Green" ) // 緑
+ PORT_DIPNAME( 0x40, 0x40, "Stage Select" ) PORT_DIPLOCATION("SW 4:7") // 本(ステージ)セレクト
+ PORT_DIPSETTING( 0x40, DEF_STR(Off) ) // 無
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有
+ PORT_DIPNAME( 0x80, 0x00, "Yakuman Match" ) PORT_DIPLOCATION("SW 4:8") // 役満勝負
+ PORT_DIPSETTING( 0x80, DEF_STR(Off) ) // 無
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有
+
+ PORT_START("DSWTOP") // IN15, actually switches 9-10 of the first 4 banks
+ MAHJONG_NOTE_CREDITS(0, "SW 1:9", "DSW2", 0) // NOTE RATE
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR(Flip_Screen) ) PORT_DIPLOCATION("SW 1:10") // モニター画面反転
+ PORT_DIPSETTING( 0x02, DEF_STR(Off) ) // 通常
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 反転
+ PORT_DIPNAME( 0x04, 0x00, "Computer Strength" ) PORT_DIPLOCATION("SW 2:9") // コンピューターの強さ
+ PORT_DIPSETTING( 0x00, DEF_STR(Normal) ) // 普通
+ PORT_DIPSETTING( 0x04, "Strong" ) // 強い
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR(Unknown) ) PORT_DIPLOCATION("SW 2:10") // OFF固定
+ PORT_DIPSETTING( 0x08, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x00, DEF_STR(On) )
+ PORT_DIPNAME( 0x30, 0x30, "Quiz Questions Table" ) PORT_DIPLOCATION("SW 3:9,10") // クイズ問題テーブル
+ PORT_DIPSETTING( 0x30, "A" ) // テーブル A
+ PORT_DIPSETTING( 0x20, "B" ) // テーブル B
+ PORT_DIPSETTING( 0x10, "C" ) // テーブル C
+ PORT_DIPSETTING( 0x00, "D" ) // テーブル D
+ PORT_DIPNAME( 0x40, 0x40, "Yakuman Match Frequency" ) PORT_DIPLOCATION("SW 4:9") // 役満勝負の頻度
+ PORT_DIPSETTING( 0x00, DEF_STR(Normal) ) // 普通
+ PORT_DIPSETTING( 0x40, "Frequent" ) // よく出る
+ PORT_DIPNAME( 0x80, 0x80, "4-Panel Comic Type" ) PORT_DIPLOCATION("SW 4:10") // 4コマ・漫画 タイプ
+ PORT_DIPSETTING( 0x00, "A" ) // Aタイプ
+ PORT_DIPSETTING( 0x80, "B" ) // Bタイプ
+INPUT_PORTS_END
- PORT_START("DSW4") // IN14, defaults for 'single type'
- PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW4:1") // Should be off for 'single type' and on for 'corner type', left on for easier regression testing
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x00, "BGM during Gameplay" ) PORT_DIPLOCATION("SW4:2")
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x00, "Don Den Button" ) PORT_DIPLOCATION("SW4:3") // Off for 'corner type'
- PORT_DIPSETTING( 0x04, "Start Button" )
- PORT_DIPSETTING( 0x00, "F/F Button" )
- PORT_DIPNAME( 0x08, 0x00, "Auto Reach" ) PORT_DIPLOCATION("SW4:4")
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x00, "Full Test" ) PORT_DIPLOCATION("SW4:5") // 4 koma comic test
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x00, "Background" ) PORT_DIPLOCATION("SW4:6")
- PORT_DIPSETTING( 0x20, "Black" )
- PORT_DIPSETTING( 0x00, "Green" )
- PORT_DIPNAME( 0x40, 0x40, "Book (Stage) Select" ) PORT_DIPLOCATION("SW4:7")
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x00, "Yakuman Match" ) PORT_DIPLOCATION("SW4:8")
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+static INPUT_PORTS_START( cafedoll )
+ // The manual provides three sets of standard settings:
+ // 標準設定 シングル向け 標準設定 メダル コーナー向け 標準設定 アミューズ コーナー向け
+ // SW 1 OFF OFF OFF ON ON ON OFF ON ON OFF OFF OFF OFF ON ON ON OFF ON ON OFF ON OFF OFF ON OFF OFF ON OFF ON OFF
+ // SW 2 OFF OFF OFF OFF ON ON ON ON ON ON OFF OFF OFF OFF ON ON ON ON ON ON OFF OFF OFF OFF ON ON ON ON ON ON
+ // SW 3 ON OFF ON ON ON OFF OFF ON OFF OFF OFF ON ON ON ON OFF OFF ON OFF OFF OFF OFF OFF OFF OFF OFF OFF OFF ON ON
+ // SW 4 OFF ON ON ON ON ON ON ON OFF OFF ON ON ON ON OFF ON ON ON ON OFF ON ON ON ON OFF ON ON ON ON OFF
- PORT_START("DSWTOP") // IN15, actually dips 9-10 of the first 4 banks
- PORT_DIPNAME( 0x01, 0x00, "Credits Per Note" ) PORT_DIPLOCATION("SW1:9")
- PORT_DIPSETTING( 0x01, "5" )
- PORT_DIPSETTING( 0x00, "10" )
- PORT_DIPNAME( 0x02, 0x02, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:10")
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:9")
- PORT_DIPSETTING( 0x00, DEF_STR( Normal ) )
- PORT_DIPSETTING( 0x04, DEF_STR( Hard ) )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW2:10") // listed as Unused OFF
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x30, 0x30, "Quiz Questions Table" ) PORT_DIPLOCATION("SW3:9,10")
- PORT_DIPSETTING( 0x30, "A" )
- PORT_DIPSETTING( 0x20, "B" )
- PORT_DIPSETTING( 0x10, "C" )
- PORT_DIPSETTING( 0x00, "D" )
- PORT_DIPNAME( 0x40, 0x40, "Yakuman Match Frequency" ) PORT_DIPLOCATION("SW4:9")
- PORT_DIPSETTING( 0x00, DEF_STR( Normal ) )
- PORT_DIPSETTING( 0x40, "Often" )
- PORT_DIPNAME( 0x80, 0x80, "4 Koma Comic Type" ) PORT_DIPLOCATION("SW4:10")
- PORT_DIPSETTING( 0x00, "A" )
- PORT_DIPSETTING( 0x80, "B" )
+ PORT_INCLUDE( mjctrl2 )
+
+ PORT_START("DSW1") // IN11
+ MAHJONG_PAYOUT_RATE(0, "SW 1:1,2,3,4") // PAY-OUT RATE
+ MAHJONG_ODDS_RATE(4, "SW 1:5,6") // ODDS RATE
+ PORT_DIPNAME( 0xc0, 0x40, "Maximum Bet" ) PORT_DIPLOCATION("SW 1:7,8") // BET-MAX
+ PORT_DIPSETTING( 0xc0, "1" )
+ PORT_DIPSETTING( 0x80, "5" )
+ PORT_DIPSETTING( 0x40, "10" )
+ PORT_DIPSETTING( 0x00, "20" )
+
+ PORT_START("DSW2") // IN12
+ MAHJONG_COINAGE(0, "SW 2:1,2") // COIN RATE
+ PORT_DIPNAME( 0x0c, 0x0c, "Minimum Bet" ) PORT_DIPLOCATION("SW 2:3,4") // ゲーム・スタート時の最低レート数
+ PORT_DIPSETTING( 0x0c, "1" ) // レート 1
+ PORT_DIPSETTING( 0x08, "2" ) // レート 2
+ PORT_DIPSETTING( 0x04, "3" ) // レート 3
+ PORT_DIPSETTING( 0x00, "5" ) // レート 5
+ PORT_DIPNAME( 0x30, 0x00, "Credit Limit" ) PORT_DIPLOCATION("SW 2:5,6") // クレジット・コインリミット
+ PORT_DIPSETTING( 0x30, "300" )
+ PORT_DIPSETTING( 0x20, "500" )
+ PORT_DIPSETTING( 0x10, "700" )
+ PORT_DIPSETTING( 0x00, "1000" )
+ PORT_DIPNAME( 0x40, 0x00, "Double Bet" ) PORT_DIPLOCATION("SW 2:7") // W-BET機能
+ PORT_DIPSETTING( 0x40, DEF_STR(Off) ) // 無
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有
+ PORT_DIPNAME( 0x80, 0x00, "Renchan Rate" ) PORT_DIPLOCATION("SW 2:8") // 連荘レート
+ PORT_DIPSETTING( 0x80, DEF_STR(Off) ) // 無
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有
+
+ PORT_START("DSW3") // IN13
+ PORT_DIPNAME( 0x03, 0x02, "Bonus Chance Cycle" ) PORT_DIPLOCATION("SW 3:1,2") // ボーナス・チャンスの設定周期
+ PORT_DIPSETTING( 0x03, "First time only" ) // 初回のみ
+ PORT_DIPSETTING( 0x02, "Every 500 coins" ) // 500コイン毎
+ PORT_DIPSETTING( 0x01, "Every 700 coins" ) // 700コイン毎
+ PORT_DIPSETTING( 0x00, "Every 1000 coins" ) // 1000コイン毎
+ PORT_DIPNAME( 0x04, 0x00, "Bonus Chances Per Cycle" ) PORT_DIPLOCATION("SW 3:3") // ボーナス・チャンスの回数設定周期毎に
+ PORT_DIPSETTING( 0x00, "1" ) // 1回
+ PORT_DIPSETTING( 0x04, "2" ) // 2回
+ PORT_DIPNAME( 0x18, 0x00, "Bonus Chance Combination" ) PORT_DIPLOCATION("SW 3:4,5") // ボーナス・チャンスの組みあわせ
+ PORT_DIPSETTING( 0x18, "No Bonus Chance" ) // ボーナス・チャンス無し
+ PORT_DIPSETTING( 0x10, "Yakuman Chance Only" ) // 役満チャンスのみ
+ PORT_DIPSETTING( 0x08, "Renzoku Chance Only" ) // 連続チャンスのみ
+ PORT_DIPSETTING( 0x00, "(A) Yakuman Chance and (B) Renzoku Chance" ) // (A)役満チャンスと(B)連続チャンス
+ PORT_DIPNAME( 0x60, 0x60, "Ratio of (A) and (B) When Combined" ) PORT_DIPLOCATION("SW 3:6,7") // 組み合わせ複合時の(A)(B)の出率
+ PORT_DIPSETTING( 0x60, "Equal" ) // 同等
+ PORT_DIPSETTING( 0x40, "More of (A)" ) // (A)が多い
+ PORT_DIPSETTING( 0x20, "More of (B)" ) // (B)が多い
+ PORT_DIPNAME( 0x80, 0x00, "Renzoku Chance Payout" ) PORT_DIPLOCATION("SW 3:8") // 連続チャンスの配当
+ PORT_DIPSETTING( 0x80, DEF_STR(Low) ) // 小さい
+ PORT_DIPSETTING( 0x00, DEF_STR(Normal) ) // 通常
+
+ PORT_START("DSW4") // IN14
+ PORT_DIPNAME( 0x01, 0x00, DEF_STR(Demo_Sounds) ) PORT_DIPLOCATION("SW 4:1") // デモ・サウンド
+ PORT_DIPSETTING( 0x01, DEF_STR(Off) ) // 無
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有
+ PORT_DIPNAME( 0x02, 0x00, "In-Game Music" ) PORT_DIPLOCATION("SW 4:2") // ゲーム・サウンド
+ PORT_DIPSETTING( 0x02, DEF_STR(Off) ) // 無
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有
+ PORT_DIPNAME( 0x04, 0x00, "Background Color" ) PORT_DIPLOCATION("SW 4:3") // バック・カラー
+ PORT_DIPSETTING( 0x04, "Black" ) // 黒
+ PORT_DIPSETTING( 0x00, "Green" ) // グリーン
+ PORT_DIPNAME( 0x08, 0x00, "Last Chance" ) PORT_DIPLOCATION("SW 4:4") // ラスト・チャンス
+ PORT_DIPSETTING( 0x08, DEF_STR(Off) ) // 無
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有
+ PORT_DIPNAME( 0x10, 0x00, "Don Den Button" ) PORT_DIPLOCATION("SW 4:5") // Don・Den 機能ボタン変更
+ PORT_DIPSETTING( 0x10, "Start" ) // スタート・ボタ
+ PORT_DIPSETTING( 0x00, "Flip Flop" ) // F/F・ボタン
+ PORT_DIPNAME( 0x20, 0x00, "Show 4-Panel Comics" ) PORT_DIPLOCATION("SW 4:6") // 4コマ・漫画表示
+ PORT_DIPSETTING( 0x20, DEF_STR(Off) ) // 無
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有
+ PORT_DIPNAME( 0x40, 0x00, "Quiz Bonus" ) PORT_DIPLOCATION("SW 4:7") // クイズ・ボーナス
+ PORT_DIPSETTING( 0x40, DEF_STR(Off) ) // 無
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有
+ PORT_DIPNAME( 0x80, 0x00, "Mid-Game Bonus Game" ) PORT_DIPLOCATION("SW 4:8") // ゲーム中のボーナス ゲーム
+ PORT_DIPSETTING( 0x80, DEF_STR(Off) ) // 無
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有
+
+ PORT_START("DSWTOP") // IN15, actually switches 9-10 of the first 4 banks
+ MAHJONG_NOTE_CREDITS(0, "SW 1:9", "DSW2", 0) // NOTE RATE
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR(Flip_Screen) ) PORT_DIPLOCATION("SW 1:10") // モニター画面反転
+ PORT_DIPSETTING( 0x02, DEF_STR(Off) ) // 通常
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 反転
+ PORT_DIPNAME( 0x04, 0x00, "Computer Strength" ) PORT_DIPLOCATION("SW 2:9") // コンピューターの強さ
+ PORT_DIPSETTING( 0x00, DEF_STR(Normal) ) // 普通
+ PORT_DIPSETTING( 0x04, "Strong" ) // 強い
+ PORT_DIPNAME( 0x08, 0x00, "Auto Reach" ) PORT_DIPLOCATION("SW 2:10") // オート・リーチ機能
+ PORT_DIPSETTING( 0x08, DEF_STR(Off) ) // 無
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 有
+ PORT_DIPNAME( 0x10, 0x10, "Game Type" ) PORT_DIPLOCATION("SW 3:9") // ゲーム タイプ
+ PORT_DIPSETTING( 0x10, "Credit Type" ) // クレジット タイプ
+ PORT_DIPSETTING( 0x00, "Credit Timer Type" ) // クレジット タイマー タイプ
+ PORT_DIPNAME( 0x20, 0x20, "Game Start Rate 1" ) PORT_DIPLOCATION("SW 3:10") // ゲームスタート レート1
+ PORT_DIPSETTING( 0x20, DEF_STR(Normal) ) // 通常
+ PORT_DIPSETTING( 0x00, "Fixed" ) // 固定
+ PORT_DIPNAME( 0x40, 0x40, "Just Time Bonus Standard Settings" ) PORT_DIPLOCATION("SW 4:9") // ジャスト・タイム・ボーナス 標準設定
+ PORT_DIPSETTING( 0x40, "Single" ) // シングル向け
+ PORT_DIPSETTING( 0x00, "Medal Corner" ) // メダル コーナー向け
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR(Unknown) ) PORT_DIPLOCATION("SW 4:10") // OFF固定
+ PORT_DIPSETTING( 0x80, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x00, DEF_STR(On) )
INPUT_PORTS_END
static INPUT_PORTS_START( ippatsu )
@@ -3342,7 +3378,7 @@ static INPUT_PORTS_START( ippatsu )
PORT_START("DSW1") // DSW (inport $10)
- PORT_DIPNAME( 0x0f, 0x0f, "Pay Out Rate" )
+ PORT_DIPNAME( 0x0f, 0x0f, "Payout Rate" ) PORT_DIPLOCATION("MAIN SW:1,2,3,4") // PAY OUT RATE
PORT_DIPSETTING( 0x0f, "96%" )
PORT_DIPSETTING( 0x0e, "93%" )
PORT_DIPSETTING( 0x0d, "90%" )
@@ -3359,65 +3395,64 @@ static INPUT_PORTS_START( ippatsu )
PORT_DIPSETTING( 0x02, "56%" )
PORT_DIPSETTING( 0x01, "53%" )
PORT_DIPSETTING( 0x00, "50%" )
- PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x60, 0x60, "Maximum Bet" )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR(Unknown) ) PORT_DIPLOCATION("MAIN SW:5")
+ PORT_DIPSETTING( 0x10, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x00, DEF_STR(On) )
+ PORT_DIPNAME( 0x60, 0x60, "Maximum Bet" ) PORT_DIPLOCATION("MAIN SW:6,7") // BET MAX
PORT_DIPSETTING( 0x00, "1" )
PORT_DIPSETTING( 0x20, "5" )
PORT_DIPSETTING( 0x40, "7" )
PORT_DIPSETTING( 0x60, "10" )
- PORT_DIPNAME( 0x80, 0x80, "First Chance" )
- PORT_DIPSETTING( 0x00, DEF_STR( No ) )
- PORT_DIPSETTING( 0x80, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x80, 0x80, "Open Reach" ) PORT_DIPLOCATION("MAIN SW:8") // OPEN リーチ
+ PORT_DIPSETTING( 0x00, DEF_STR(Off) ) // ナシ
+ PORT_DIPSETTING( 0x80, DEF_STR(On) ) // アリ
PORT_START("DSW2") // DSW (inport $12)
- PORT_DIPNAME( 0x03, 0x03, "Cut" )
- PORT_DIPSETTING( 0x00, DEF_STR( No ) )
- PORT_DIPSETTING( 0x02, "2 Bai" )
- PORT_DIPSETTING( 0x01, "3 Bai" )
- PORT_DIPSETTING( 0x03, "Yakuman" )
- PORT_DIPNAME( 0x0c, 0x0c, "Yakuman Bonus" )
- PORT_DIPSETTING( 0x00, "32" )
- PORT_DIPSETTING( 0x04, "100" )
- PORT_DIPSETTING( 0x08, "200" )
- PORT_DIPSETTING( 0x0c, "300" )
- PORT_DIPNAME( 0x30, 0x30, "Unknown 1-4&5*" )
- PORT_DIPSETTING( 0x00, "3" )
- PORT_DIPSETTING( 0x10, "4" )
- PORT_DIPSETTING( 0x20, "5" )
- PORT_DIPSETTING( 0x30, "6" )
- PORT_DIPNAME( 0x40, 0x40, "Unknown 1-6*" )
- PORT_DIPSETTING( 0x00, "3" )
- PORT_DIPSETTING( 0x40, "5" )
- PORT_DIPNAME( 0x80, 0x80, "Unknown 1-7" )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x03, 0x03, "Cut" ) PORT_DIPLOCATION("SUB SW-1:1,2")
+ PORT_DIPSETTING( 0x00, DEF_STR(Off) ) // CUT ナシ
+ PORT_DIPSETTING( 0x01, "Baiman" ) // バイマン      CUT
+ PORT_DIPSETTING( 0x02, "Sanbaiman" ) // 3バイマン     CUT
+ PORT_DIPSETTING( 0x03, "Yakuman" ) // ヤクマン      CUT
+ PORT_DIPNAME( 0x0c, 0x0c, "Yakuman Payout" ) PORT_DIPLOCATION("SUB SW-1:3,4") // ハイトウ
+ PORT_DIPSETTING( 0x00, "32" ) // D    (32)
+ PORT_DIPSETTING( 0x04, "100" ) // C   (100)
+ PORT_DIPSETTING( 0x08, "200" ) // B   (200)
+ PORT_DIPSETTING( 0x0c, "300" ) // A   (300)
+ PORT_DIPNAME( 0x30, 0x30, "Double-Up Count" ) PORT_DIPLOCATION("SUB SW-1:5,6") // ダブル UP
+ PORT_DIPSETTING( 0x00, "3" ) // 3カイ
+ PORT_DIPSETTING( 0x10, "4" ) // 4カイ
+ PORT_DIPSETTING( 0x20, "5" ) // 5カイ
+ PORT_DIPSETTING( 0x30, "6" ) // 6カイ
+ PORT_DIPNAME( 0x40, 0x40, "Last Chance Count" ) PORT_DIPLOCATION("SUB SW-1:7") // ラストチャンス
+ PORT_DIPSETTING( 0x00, "3" ) // 3カイ
+ PORT_DIPSETTING( 0x40, "5" ) // 5カイ
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR(Unknown) ) PORT_DIPLOCATION("SUB SW-1:8") // (未使用)
+ PORT_DIPSETTING( 0x80, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x00, DEF_STR(On) )
PORT_START("DSW3") // DSW (inport $13)
- PORT_DIPNAME( 0x01, 0x01, "Unknown 2-0*" )
- PORT_DIPSETTING( 0x00, DEF_STR( No ) )
- PORT_DIPSETTING( 0x01, DEF_STR( Yes ) )
- PORT_DIPNAME( 0x02, 0x02, "Second Bonus" )
- PORT_DIPSETTING( 0x00, DEF_STR( No ) )
- PORT_DIPSETTING( 0x02, DEF_STR( Yes ) )
- PORT_DIPNAME( 0x04, 0x04, "Allow Bets" )
- PORT_DIPSETTING( 0x00, DEF_STR( No ) )
- PORT_DIPSETTING( 0x04, DEF_STR( Yes ) )
- PORT_DIPNAME( 0x18, 0x18, "Unknown 2-3&4*" )
- PORT_DIPSETTING( 0x00, DEF_STR( No ) )
- PORT_DIPSETTING( 0x18, "2" )
- PORT_DIPSETTING( 0x10, "4" )
- PORT_DIPSETTING( 0x08, "8" )
- PORT_DIPNAME( 0x20, 0x20, "Unknown 2-5" )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, "Unknown 2-6" )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, "Unknown 2-7" )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x01, 0x01, "Double Chance (1/8)" ) PORT_DIPLOCATION("SUB SW-2:1") // DOUBLEチャンス(1/8)
+ PORT_DIPSETTING( 0x00, DEF_STR(Off) ) // ナシ
+ PORT_DIPSETTING( 0x01, DEF_STR(On) ) // アリ
+ PORT_DIPNAME( 0x02, 0x02, "Second Bonus" ) PORT_DIPLOCATION("SUB SW-2:2") // 2nd BONUS
+ PORT_DIPSETTING( 0x00, DEF_STR(Off) ) // ナシ
+ PORT_DIPSETTING( 0x02, DEF_STR(On) ) // アリ
+ PORT_DIPNAME( 0x04, 0x04, "Double Bet" ) PORT_DIPLOCATION("SUB SW-2:3") // DOUBLE BET
+ PORT_DIPSETTING( 0x00, DEF_STR(Off) ) // ナシ
+ PORT_DIPSETTING( 0x04, DEF_STR(On) ) // アリ
+ PORT_DIPNAME( 0x18, 0x18, "Heart Chance" ) PORT_DIPLOCATION("SUB SW-2:4,5")
+ PORT_DIPSETTING( 0x00, DEF_STR(Off) ) // ハートチャンス    ナシ
+ PORT_DIPSETTING( 0x08, "1/8 (12.5%)" ) // 1/8  (12.5%)   アリ
+ PORT_DIPSETTING( 0x10, "1/4 (25%)" ) // 1/4   (25%)   アリ
+ PORT_DIPSETTING( 0x18, "1/2 (50%)" ) // 1/2   (50%)   アリ
+ PORT_DIPNAME( 0x60, 0x60, "Payout Limit" ) PORT_DIPLOCATION("SUB SW-2:6,7") // ウチドメクレジト
+ PORT_DIPSETTING( 0x60, "300" )
+ PORT_DIPSETTING( 0x40, "500" )
+ PORT_DIPSETTING( 0x20, "800" )
+ PORT_DIPSETTING( 0x00, "1000" )
+ PORT_DIPNAME( 0x80, 0x80, "Show Payout Limit" ) PORT_DIPLOCATION("SUB SW-2:8") // メッセージ
+ PORT_DIPSETTING( 0x00, DEF_STR(Off) ) // ナシ
+ PORT_DIPSETTING( 0x80, DEF_STR(On) ) // アリ
INPUT_PORTS_END
static INPUT_PORTS_START( mjdejavu )
@@ -3610,138 +3645,111 @@ static INPUT_PORTS_START( jansou )
INPUT_PORTS_END
static INPUT_PORTS_START( mjvegasa ) // dips definitions and defaults from manual (machine translated)
+ // The manual provides two sets of standard settings:
+ // 標準設定 シングル向け 標準設定 コーナー向け
+ // SW 1 OFF OFF OFF ON ON ON OFF ON ON OFF OFF OFF OFF ON ON ON OFF ON ON OFF
+ // SW 2 OFF OFF OFF OFF OFF OFF ON OFF ON ON OFF OFF OFF OFF OFF OFF OFF OFF ON ON
+ // SW 3
+ // SW 4
+
PORT_INCLUDE( mjctrl2 )
PORT_START("DSW1") // 6810
- PORT_DIPNAME( 0x0f, 0x07, "Pay Out Rate" ) PORT_DIPLOCATION("SW1:1,2,3,4")
- PORT_DIPSETTING( 0x0f, "96%" )
- PORT_DIPSETTING( 0x0e, "93%" )
- PORT_DIPSETTING( 0x0d, "90%" )
- PORT_DIPSETTING( 0x0c, "87%" )
- PORT_DIPSETTING( 0x0b, "84%" )
- PORT_DIPSETTING( 0x0a, "81%" )
- PORT_DIPSETTING( 0x09, "78%" )
- PORT_DIPSETTING( 0x08, "75%" )
- PORT_DIPSETTING( 0x07, "71%" )
- PORT_DIPSETTING( 0x06, "68%" )
- PORT_DIPSETTING( 0x05, "65%" )
- PORT_DIPSETTING( 0x04, "62%" )
- PORT_DIPSETTING( 0x03, "59%" )
- PORT_DIPSETTING( 0x02, "56%" )
- PORT_DIPSETTING( 0x01, "53%" )
- PORT_DIPSETTING( 0x00, "50%" )
- PORT_DIPNAME( 0x30, 0x00, "Odds Rate" ) PORT_DIPLOCATION("SW1:5,6")
- PORT_DIPSETTING( 0x30, "1 2 4 8 12 16 24 32" )
- PORT_DIPSETTING( 0x00, "1 2 3 5 8 15 30 50" )
- PORT_DIPSETTING( 0x10, "1 2 3 5 10 25 50 100" )
- PORT_DIPSETTING( 0x20, "1 2 3 5 10 50 100 200" )
- PORT_DIPNAME( 0xc0, 0x40, "Max Bet" ) PORT_DIPLOCATION("SW1:7,8")
+ MAHJONG_PAYOUT_RATE(0, "DIP-SW 1:1,2,3,4") // PAY-OUT RATE
+ MAHJONG_ODDS_RATE(4, "DIP-SW 1:5,6") // ODDS RATE
+ PORT_DIPNAME( 0xc0, 0x40, "Maximum Bet" ) PORT_DIPLOCATION("DIP-SW 1:7,8") // BET-MAX
PORT_DIPSETTING( 0xc0, "1" )
PORT_DIPSETTING( 0x80, "5" )
PORT_DIPSETTING( 0x40, "10" )
PORT_DIPSETTING( 0x00, "20" )
PORT_START("DSW2") // 6811
- PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW2:1,2")
- PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x01, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0x00, "1 Coin/10 Credits" )
- PORT_DIPNAME( 0x0c, 0x0c, "Minimum Rate" ) PORT_DIPLOCATION("SW2:3,4")
- PORT_DIPSETTING( 0x0c, "1" )
- PORT_DIPSETTING( 0x08, "2" )
- PORT_DIPSETTING( 0x04, "3" )
- PORT_DIPSETTING( 0x00, "5" )
- PORT_DIPNAME( 0x70, 0x70, "YAKUMAN Bonus" ) PORT_DIPLOCATION("SW2:5,6,7") // this is the default for 'corner' machines, for 'single' it's listed as 0x30
- PORT_DIPSETTING( 0x70, DEF_STR( No ) )
- PORT_DIPSETTING( 0x60, "Once on Start" )
- PORT_DIPSETTING( 0x50, "300" )
- PORT_DIPSETTING( 0x40, "500" )
- PORT_DIPSETTING( 0x30, "700" )
- PORT_DIPSETTING( 0x20, "1000" )
- PORT_DIPSETTING( 0x10, "1000" ) // dip combination not listed in the manual
- PORT_DIPSETTING( 0x00, "1000" ) // dip combination not listed in the manual
- PORT_DIPNAME( 0x80, 0x80, "Yakuman Bonus Cycle" ) PORT_DIPLOCATION("SW2:8")
- PORT_DIPSETTING( 0x00, "Once" )
- PORT_DIPSETTING( 0x80, "Twice" )
+ MAHJONG_COINAGE(0, "DIP-SW 2:1,2") // COIN RATE
+ PORT_DIPNAME( 0x0c, 0x0c, "Minimum Bet" ) PORT_DIPLOCATION("DIP-SW 2:3,4") // ゲーム・スタートの最低レート枚数
+ PORT_DIPSETTING( 0x0c, "1" ) // レート 1
+ PORT_DIPSETTING( 0x08, "2" ) // レート 2
+ PORT_DIPSETTING( 0x04, "3" ) // レート 3
+ PORT_DIPSETTING( 0x00, "5" ) // レート 5
+ MAHJONG_YAKUMAN_BONUS(4, 0x03, "DIP-SW 2:5,6,7" ) // 役満ボーナスの設定周期
+ PORT_DIPNAME( 0x80, 0x80, "Yakuman Bonuses Per Cycle" ) PORT_DIPLOCATION("DIP-SW 2:8") // 役満ボーナスの回数設定周期毎に
+ PORT_DIPSETTING( 0x00, "1" ) // 1回
+ PORT_DIPSETTING( 0x80, "2" ) // 2回
PORT_START("DSW3") // 6812
- PORT_DIPNAME( 0x01, 0x01, "Payout Type" ) PORT_DIPLOCATION("SW3:1")
- PORT_DIPSETTING( 0x01, "Credits" )
+ PORT_DIPNAME( 0x01, 0x01, "Payout Mode" ) PORT_DIPLOCATION("DIP-SW 3:1")
+ PORT_DIPSETTING( 0x01, "Key-out" )
PORT_DIPSETTING( 0x00, "Hopper" )
- PORT_DIPNAME( 0x02, 0x02, "Hopper Type" ) PORT_DIPLOCATION("SW3:2")
- PORT_DIPSETTING( 0x02, DEF_STR( Normal ) )
- PORT_DIPSETTING( 0x00, "Reversed" )
- PORT_DIPNAME( 0x04, 0x00, "Service Count" ) PORT_DIPLOCATION("SW3:3")
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x00, "W-Bet" ) PORT_DIPLOCATION("SW3:4")
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x00, "Renchan Rate" ) PORT_DIPLOCATION("SW3:5")
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x00, "Auto Reach" ) PORT_DIPLOCATION("SW3:6")
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, "Auto Tsumo" ) PORT_DIPLOCATION("SW3:7") // machine translated as 'automatic mode'
+ PORT_DIPNAME( 0x02, 0x02, "Hopper Polarity" ) PORT_DIPLOCATION("DIP-SW 3:2")
+ PORT_DIPSETTING( 0x02, DEF_STR(Normal) )
+ PORT_DIPSETTING( 0x00, "Inverted" )
+ PORT_DIPNAME( 0x04, 0x00, "Service Count" ) PORT_DIPLOCATION("DIP-SW 3:3")
+ PORT_DIPSETTING( 0x04, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x00, DEF_STR(On) )
+ PORT_DIPNAME( 0x08, 0x00, "Double Bet" ) PORT_DIPLOCATION("DIP-SW 3:4")
+ PORT_DIPSETTING( 0x08, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x00, DEF_STR(On) )
+ PORT_DIPNAME( 0x10, 0x00, "Renchan Rate" ) PORT_DIPLOCATION("DIP-SW 3:5")
+ PORT_DIPSETTING( 0x10, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x00, DEF_STR(On) )
+ PORT_DIPNAME( 0x20, 0x00, "Auto Reach" ) PORT_DIPLOCATION("DIP-SW 3:6")
+ PORT_DIPSETTING( 0x20, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x00, DEF_STR(On) )
+ PORT_DIPNAME( 0x40, 0x40, "Auto Tsumo" ) PORT_DIPLOCATION("DIP-SW 3:7") // machine translated as 'automatic mode'
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, "Yakuman Match" ) PORT_DIPLOCATION("SW3:8") // machine translated as 'service point'
+ PORT_DIPNAME( 0x80, 0x80, "Yakuman Match" ) PORT_DIPLOCATION("DIP-SW 3:8") // machine translated as 'service point'
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSW4") // 6813
- PORT_DIPNAME( 0x01, 0x00, "Last Chance" ) PORT_DIPLOCATION("SW4:1")
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x00, "Show Clock" ) PORT_DIPLOCATION("SW4:2")
- PORT_DIPSETTING( 0x02, DEF_STR( No ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
- PORT_DIPNAME( 0x04, 0x00, "Girls" ) PORT_DIPLOCATION("SW4:3") // Renshu Gal Display according to machine translation
+ PORT_DIPNAME( 0x01, 0x00, "Last Chance" ) PORT_DIPLOCATION("DIP-SW 4:1")
+ PORT_DIPSETTING( 0x01, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x00, DEF_STR(On) )
+ PORT_DIPNAME( 0x02, 0x00, "Show Clock" ) PORT_DIPLOCATION("DIP-SW 4:2")
+ PORT_DIPSETTING( 0x02, DEF_STR(No) )
+ PORT_DIPSETTING( 0x00, DEF_STR(Yes) )
+ PORT_DIPNAME( 0x04, 0x00, "Girls" ) PORT_DIPLOCATION("DIP-SW 4:3") // Renshu Gal Display according to machine translation
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x00, "Background" ) PORT_DIPLOCATION("SW4:4")
+ PORT_DIPNAME( 0x08, 0x00, "Background" ) PORT_DIPLOCATION("DIP-SW 4:4")
PORT_DIPSETTING( 0x08, "Black" )
PORT_DIPSETTING( 0x00, "Green" )
- PORT_DIPNAME( 0x10, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW4:5") // default off according to manual, but left on for testing convenience
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x00, "In Game Music" ) PORT_DIPLOCATION("SW4:6")
+ PORT_DIPNAME( 0x10, 0x00, DEF_STR(Demo_Sounds) ) PORT_DIPLOCATION("DIP-SW 4:5") // default off according to manual, but left on for testing convenience
+ PORT_DIPSETTING( 0x10, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x00, DEF_STR(On) )
+ PORT_DIPNAME( 0x20, 0x00, "In-Game Music" ) PORT_DIPLOCATION("DIP-SW 4:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x00, "Yakuman Match Frequency" ) PORT_DIPLOCATION("SW4:7") // machine translated as 'time service frequency'
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW4:8") // 'OFF' in manual
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x00, "Yakuman Match Frequency" ) PORT_DIPLOCATION("DIP-SW 4:7") // machine translated as 'time service frequency'
+ PORT_DIPSETTING( 0x40, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x00, DEF_STR(On) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR(Unknown) ) PORT_DIPLOCATION("DIP-SW 4:8") // 'OFF' in manual
+ PORT_DIPSETTING( 0x80, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x00, DEF_STR(On) )
PORT_START("DSWTOP") // 6814
- PORT_DIPNAME( 0x01, 0x01, "Credits Per Note" ) PORT_DIPLOCATION("SW1:9")
- PORT_DIPSETTING( 0x01, "5" )
- PORT_DIPSETTING( 0x00, "10" )
- PORT_DIPNAME( 0x02, 0x02, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:10")
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:9")
- PORT_DIPSETTING( 0x00, DEF_STR( Normal ) )
- PORT_DIPSETTING( 0x04, DEF_STR( Hard ) )
- PORT_DIPNAME( 0x08, 0x00, "Wave of Dividends" ) PORT_DIPLOCATION("SW2:10")
- PORT_DIPSETTING( 0x00, DEF_STR( Normal ) )
- PORT_DIPSETTING( 0x08, DEF_STR( High ) )
- PORT_DIPNAME( 0x10, 0x00, "Don Den Key" ) PORT_DIPLOCATION("SW3:9")
+ MAHJONG_NOTE_CREDITS(0, "DIP-SW 1:9", "DSW2", 0) // NOTE RATE
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR(Flip_Screen) ) PORT_DIPLOCATION("DIP-SW 1:10") // モニター画面反転
+ PORT_DIPSETTING( 0x02, DEF_STR(Off) ) // 通常
+ PORT_DIPSETTING( 0x00, DEF_STR(On) ) // 反転
+ PORT_DIPNAME( 0x04, 0x00, "Computer Strength" ) PORT_DIPLOCATION("DIP-SW 2:9") // コンピューターの強さ
+ PORT_DIPSETTING( 0x00, DEF_STR(Normal) ) // 普通
+ PORT_DIPSETTING( 0x04, "Strong" ) // 強い
+ PORT_DIPNAME( 0x08, 0x00, "Payout Variation" ) PORT_DIPLOCATION("DIP-SW 2:10") // 配当の波
+ PORT_DIPSETTING( 0x00, DEF_STR(Normal) ) // 通常
+ PORT_DIPSETTING( 0x08, "Large" ) // 大きい
+ PORT_DIPNAME( 0x10, 0x00, "Don Den Key" ) PORT_DIPLOCATION("DIP-SW 3:9")
PORT_DIPSETTING( 0x00, "Flip-Flop" )
PORT_DIPSETTING( 0x10, "Start" )
- PORT_DIPNAME( 0x20, 0x00, "Don Den Times" ) PORT_DIPLOCATION("SW3:10")
+ PORT_DIPNAME( 0x20, 0x00, "Don Den Times" ) PORT_DIPLOCATION("DIP-SW 3:10")
PORT_DIPSETTING( 0x00, "5" )
PORT_DIPSETTING( 0x20, "8" )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW4:9") // 'OFF' in manual
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, "Debug Mode" ) PORT_DIPLOCATION("SW4:10") // e.g. press start in bet screen ('OFF' in manual)
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR(Unknown) ) PORT_DIPLOCATION("DIP-SW 4:9") // 'OFF' in manual
+ PORT_DIPSETTING( 0x40, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x00, DEF_STR(On) )
+ PORT_DIPNAME( 0x80, 0x80, "Debug Mode" ) PORT_DIPLOCATION("DIP-SW 4:10") // e.g. press start in bet screen ('OFF' in manual)
+ PORT_DIPSETTING( 0x80, DEF_STR(Off) )
+ PORT_DIPSETTING( 0x00, DEF_STR(On) )
INPUT_PORTS_END
static INPUT_PORTS_START( ichiban )
@@ -4393,6 +4401,21 @@ ROM_START( janputer )
ROM_LOAD( "82s123.prm", 0x00, 0x20, BAD_DUMP CRC(d3007282) SHA1(e4d863ab193e49208ed0f59dcddb1da0492314f6) )
ROM_END
+ROM_START( janputera ) // FRM-03 + PS-101 PCBs
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "1", 0x0000, 0x1000, CRC(84bb36c2) SHA1(9981794deda728494c1112d9a85b4c92edb6b767) )
+ ROM_LOAD( "2", 0x1000, 0x1000, CRC(13bc62bd) SHA1(68645456a249da1de0677ea0785914fd866b86bb) )
+ ROM_LOAD( "3", 0x2000, 0x1000, CRC(61d9caa2) SHA1(96530f28db7e3955bb07ea025eb1df696365051d) )
+ ROM_LOAD( "4", 0x3000, 0x1000, CRC(538cbe03) SHA1(8634332d883033a5800901be664036c08fced61b) )
+ ROM_LOAD( "5", 0x4000, 0x1000, CRC(16c09c73) SHA1(ea712f9ca3200ca27434e4200187b488e24f4c65) )
+ ROM_LOAD( "6.sub", 0x5000, 0x1000, CRC(29a2377d) SHA1(42685519b6022173e4d32341c378da61377ac6d9) )
+ ROM_LOAD( "7.sub", 0x6000, 0x1000, CRC(cc33c951) SHA1(cdf55efe533ea02e606120858970116119b1da2c) )
+
+ ROM_REGION( 0x0020, "proms", 0 )
+ ROM_LOAD( "prom", 0x0000, 0x0020, CRC(d3007282) SHA1(e4d863ab193e49208ed0f59dcddb1da0492314f6) )
+ROM_END
+
+
/***************************************************************************
Janyou Part II
(c)1984 Cosmo Denshi
@@ -4427,6 +4450,29 @@ ROM_START( janyoup2 )
ROM_LOAD( "n82s123n.c98", 0x0000, 0x0020, CRC(d3007282) SHA1(e4d863ab193e49208ed0f59dcddb1da0492314f6) )
ROM_END
+// on an original Cosmo Corporation PCB
+ROM_START( janyoup2a )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "1.110", 0x0000, 0x2000, CRC(83b612d4) SHA1(6627b2bdf9119ed19516c19fc0ea519e1ac78d83) )
+ ROM_LOAD( "2.109", 0x2000, 0x2000, CRC(ddc669cd) SHA1(8611374b03ee836d07a119736c4ca8fc85b26b9d) )
+ ROM_LOAD( "3.108", 0x4000, 0x2000, CRC(e98b6d34) SHA1(e27ab9a03aff750df78c5db52a112247bdd31328) )
+ ROM_LOAD( "4.107", 0x6000, 0x1000, CRC(7c5ae13b) SHA1(4e8d9fd010f30f6bbfce85e5c9ff0406d07188fb) )
+
+ ROM_REGION( 0x0020, "proms", 0 )
+ ROM_LOAD( "n82s123n.c98", 0x0000, 0x0020, CRC(d3007282) SHA1(e4d863ab193e49208ed0f59dcddb1da0492314f6) )
+ROM_END
+
+ROM_START( janyoup2702 )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "1.11a", 0x0000, 0x2000, CRC(d51d8525) SHA1(46a181141c6a64114bf025e6ea5f2e2e23f8ce62) )
+ ROM_LOAD( "2.10a", 0x2000, 0x2000, CRC(324426d4) SHA1(409244c8458d9bafa325746c37de9e7b955b3787) )
+ ROM_LOAD( "3.8a", 0x4000, 0x2000, CRC(cc4fed44) SHA1(11362654f8a40f594f90b84abf24e624c3e83eb0) )
+ ROM_LOAD( "4.7a", 0x6000, 0x1000, CRC(377b8ce9) SHA1(a5efc517ae975e54af5325b8b3f4867e9f449d4c) )
+
+ ROM_REGION( 0x0020, "proms", 0 )
+ ROM_LOAD( "n82s123n.c98", 0x0000, 0x0020, CRC(d3007282) SHA1(e4d863ab193e49208ed0f59dcddb1da0492314f6) )
+ROM_END
+
ROM_START( seljan ) // Z80A + HD46505SP + AY891X (a sticker covers the chip type)
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "2", 0x0000, 0x2000, CRC(8d26d334) SHA1(4ac0f0961f666954caf59336f8389312db9dc263) ) // ok
@@ -4467,6 +4513,19 @@ ROM_START( ippatsu )
ROM_LOAD( "82s123an", 0x00, 0x20, CRC(3bde1bbd) SHA1(729498483943f960e38c4ada992b099b698b497a) )
ROM_END
+// has NEW DOUBLE BET MOJHONG (sic) in ROM but title screen shows 赤麻雀 (Red Mahjong)
+ROM_START( akamj )
+ ROM_REGION( 0x18000, "maincpu", 0 )
+ ROM_LOAD( "b3.bin", 0x00000, 0x8000, CRC(fb2e5a3e) SHA1(6a06b36dd3baa4c0aba339aaf2e00d82d08cbb22) )
+ ROM_LOAD( "bc2.bin", 0x08000, 0x8000, CRC(38d2aa91) SHA1(b0469803265c6359dc5680e669324a41b84548d7) )
+ ROM_LOAD( "bc1.bin", 0x10000, 0x8000, CRC(38d2aa91) SHA1(b0469803265c6359dc5680e669324a41b84548d7) ) // yes, same ROM 2 times
+
+ ROM_REGION( 0x20, "proms", 0 )
+ // taken from Royal Mahjong, might or might not be the same.
+ ROM_LOAD( "82s123.prm", 0x00, 0x20, BAD_DUMP CRC(d3007282) SHA1(e4d863ab193e49208ed0f59dcddb1da0492314f6) )
+ROM_END
+
+
ROM_START( suzume )
ROM_REGION( 0x100000, "maincpu", 0 )
ROM_LOAD( "p1.bin", 0x00000, 0x1000, CRC(e9706967) SHA1(2e3d78178623de6552c9036da90e02f240d94055) )
@@ -4863,6 +4922,9 @@ ROM_START( mjtensin )
ROM_LOAD( "1003.3e", 0x210000, 0x80000, CRC(876081bf) SHA1(fe962cfa9318a9444123bcaf3406e22fb08e8c4e) )
+ ROM_REGION( 0x2000, "internal_rom", 0 ) // the MCU is configured for external ROM usage, but does have the internal ROM. Let's load it for completeness' sake.
+ ROM_LOAD( "mjtensin-mcu.3c", 0x0000, 0x2000, CRC(13804e4f) SHA1(34b5072528ad42c78ecae344da09182b850b4db1) )
+
ROM_REGION( 0x400, "proms", 0 )
ROM_LOAD( "d100-2.7e", 0x000, 0x200, CRC(6edeed23) SHA1(f4420c473ebbe3df92b0f5b1f0e4d5495fcb9fda) )
ROM_LOAD( "d100-1.6e", 0x200, 0x200, CRC(88befd59) SHA1(cbcb437f9f6b5e542dc69f5c9e85ccbae47080af) )
@@ -5187,6 +5249,19 @@ ROM_START( cafedoll )
ROM_LOAD( "d76-1_82s147.7f", 0x200, 0x200, CRC(9a75349c) SHA1(2071132267aafd8facf1d7841093d9a45c30a8d3) )
ROM_END
+ROM_START( cafedollg ) // カフェドール グレート (Cafe Doll Great) sticker on PCB, G appended to the main program ROM, but still boots as standard Cafe Doll?
+ ROM_REGION( 0x190000, "maincpu", 0 )
+ ROM_LOAD( "7601g", 0x000000, 0x080000, CRC(e42779bf) SHA1(0a0d8f74da8c0d3b6349f3528b008642aa3efe9c) )
+ ROM_LOAD( "76xx.tmp90840", 0x000000, 0x002000, BAD_DUMP CRC(091a85dc) SHA1(964ccbc13466464c2feee10f807078ec517bed5c) ) // internal ROM, MCU has pins 10 & 12 to 16 stripped out, not dumped for this set but verified on PCB that it works
+ // bank switched ROMs follow
+ ROM_COPY( "maincpu", 0x000000, 0x010000, 0x080000 )
+ ROM_LOAD( "7602", 0x090000, 0x100000, CRC(23fd53c4) SHA1(af75b6e9bf5efe77574861bfc0595824abe99d18) ) // same data of 7602 + 7603 of the parent set
+
+ ROM_REGION( 0x400, "proms", 0 )
+ ROM_LOAD( "d76-2_82s147.9f", 0x000, 0x200, CRC(9c1d0512) SHA1(3ca82d4271badc890701ecc76b97e80b16509b50) )
+ ROM_LOAD( "d76-1_82s147.7f", 0x200, 0x200, CRC(9a75349c) SHA1(2071132267aafd8facf1d7841093d9a45c30a8d3) )
+ROM_END
+
/***************************************************************************
Mahjong Cafe Paradise
@@ -5432,7 +5507,21 @@ ROM_START( janoh )
ROM_LOAD( "rom7.p6", 0x6000, 0x1000, NO_DUMP )
ROM_REGION( 0x20, "proms", 0 )
- ROM_LOAD( "janho.color", 0x00, 0x20, NO_DUMP )
+ ROM_LOAD( "janoh.color", 0x00, 0x20, NO_DUMP )
+ROM_END
+
+ROM_START( janohb ) // same set was also found with the first 6 ROMs combined in 3 bigger capacity ROMs
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "jo1.1", 0x0000, 0x1000, CRC(8fc19963) SHA1(309e941c059a97b117090fd9dd69a00031aa6109) ) // "1984 JAN OH"
+ ROM_LOAD( "jo2.2", 0x1000, 0x1000, CRC(13b44a7d) SHA1(30ed6bda1597fb123e0e6104ef87cef48f3039a3) )
+ ROM_LOAD( "jo3.3", 0x2000, 0x1000, CRC(6efcaf89) SHA1(e7a8035b1ecd468a6054926a263f22741635e0df) ) // "JANOH TOAPLAN 84"
+ ROM_LOAD( "jo4.4", 0x3000, 0x1000, CRC(9186f02c) SHA1(b7dc2d6c19e67dd3f841cbb56df9589e3e6941f7) )
+ ROM_LOAD( "jo5.5", 0x4000, 0x1000, CRC(3c8d1f2a) SHA1(9e05f310a6d8a485a1005fc35ac2e3a79410a507) )
+ ROM_LOAD( "jo6.6", 0x5000, 0x1000, CRC(92687327) SHA1(4fafba5881dca2a147616d94dd055eba6aa3c653) )
+ ROM_LOAD( "jo7.7", 0x6000, 0x1000, CRC(774cb324) SHA1(930d6643fcd7e479a68811e775144d46f0183636) )
+
+ ROM_REGION( 0x20, "proms", 0 )
+ ROM_LOAD( "janoh.color", 0x00, 0x20, CRC(74a53e94) SHA1(ca9114bd9b2b07f5abe82616b41ae9fdb9537a4f) )
ROM_END
/***************************************************************************
@@ -5838,14 +5927,12 @@ ROM_START( jangtaku )
ROM_LOAD( "82s123a.6k", 0x0000, 0x0020, CRC(e9598146) SHA1(619e7eb76cc3e882b5b3e55cdd23fe00b0a1fe45) )
ROM_END
-ROM_START( rkjanoh2 )
+ROM_START( rkjanoh2 ) // dump confirmed from 2 PCBs, only difference being 0x4b instead of 0x46 at 0x2a22
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "pf_1", 0x000000, 0x001000, CRC(582e7eda) SHA1(96578b6142051d9452f23c8c1b674e2d8a4c3b62) )
ROM_LOAD( "pf_2", 0x001000, 0x001000, CRC(49e7dc40) SHA1(d6232a82b6927c79dd47884e5e2a6589c5524424) )
ROM_LOAD( "pf_3_1", 0x002000, 0x001000, CRC(a1fdc929) SHA1(27cab4da2365bcf311d7f00d75e8db150183b108) )
ROM_LOAD( "pf_4l", 0x003000, 0x001000, CRC(c9ccdfa0) SHA1(ce6f2df7fb6739ddf0529bcae0596e4593ecc3e0) )
- //ROM_LOAD( "pf_4_fewest", 0x003000, 0x001000, CRC(9a1650a0) SHA1(2da5957879d9f207721fc2f0d63dccc32850cbe2) )
- //ROM_LOAD( "pf_4_middle", 0x003000, 0x001000, CRC(b1a721d8) SHA1(de24ec4bac7ec761c7b25a7ba62b850006444bbc) )
ROM_LOAD( "pf_5", 0x004000, 0x001000, CRC(8a858464) SHA1(55c71ce1c30e908dfc8c21237256dfbb75c55363) )
ROM_LOAD( "pf_6", 0x005000, 0x001000, CRC(5b649918) SHA1(191a221a515c261d90d7432443a7fbc8da71e7ac) )
ROM_LOAD( "pf_7", 0x006000, 0x001000, CRC(c4fdd2ac) SHA1(76c5645534b87dde87acfb4140d0f3ba18c95cd2) )
@@ -5911,7 +5998,7 @@ HSync - 15.510kHz
ROM_START( ichiban ) // TODO: how does the banking work?
ROM_REGION( 0x60000, "maincpu", 0 ) // opcodes in first half are mixed with pseudo-random garbage
- ROM_LOAD( "3.u15", 0x00000, 0x20000, CRC(76240568) SHA1(cf055d1eaae25661a49ec4722a2c7caca862e66a) )
+ ROM_LOAD( "3.u15", 0x00000, 0x20000, CRC(76240568) SHA1(cf055d1eaae25661a49ec4722a2c7caca862e66a) ) // at 0x10008 ICHI-BAN-JYAN Ver3.05 1993/02/07 by OCT
ROM_LOAD( "1.u28", 0x20000, 0x08000, CRC(2caa4d3f) SHA1(5e5af164880140b764c097a65388c22ba5ea572b) ) // bank 2 (title screen)
ROM_IGNORE(0x18000)
ROM_LOAD( "2.u14", 0x30000, 0x08000, CRC(b4834d8e) SHA1(836ddf7586dc5440faf88f5ec50a32265e9a0ec8) ) // bank 4 (mahjong tiles)
@@ -5931,11 +6018,49 @@ ROM_START( ichiban ) // TODO: how does the banking work?
ROM_REGION( 0x600, "proms", 0 )
- ROM_LOAD( "mjr.u36", 0x000, 0x200, CRC(31cd7a90) SHA1(1525ad19d748561a52626e4ab13df67d9bedf3b8) )
+ ROM_LOAD( "mjr.u36", 0x000, 0x200, CRC(31cd7a90) SHA1(1525ad19d748561a52626e4ab13df67d9bedf3b8) ) // all 3 BPROMs are AM27S13 or compatible
ROM_LOAD( "mjg.u37", 0x200, 0x200, CRC(5b3562aa) SHA1(ada60d2a5a5a657d7b209d18a23b685305d9ff7b) )
ROM_LOAD( "mjb.u38", 0x400, 0x200, CRC(0ef881cb) SHA1(44b61a443d683f5cb2d1b1a4f74d8a8f41021de5) )
ROM_END
+ROM_START( ichiban235 ) // TODO: how does the banking work?
+ ROM_REGION( 0x60000, "maincpu", 0 ) // opcodes in first half are mixed with pseudo-random garbage
+ ROM_LOAD( "a3.u15", 0x00000, 0x20000, CRC(28e2b636) SHA1(8e813fe1b589f31a3535662b8bfe577b3f862b8c) ) // at 0x10008 ICHI-BAN-JYAN Ver2.35 1992/11/30 by OCT
+ ROM_LOAD( "a1.u28", 0x20000, 0x08000, CRC(2caa4d3f) SHA1(5e5af164880140b764c097a65388c22ba5ea572b) ) // == 1 above, bank 2 (title screen)
+ ROM_IGNORE(0x18000)
+ ROM_LOAD( "a2.u14", 0x30000, 0x08000, CRC(b4834d8e) SHA1(836ddf7586dc5440faf88f5ec50a32265e9a0ec8) ) // == 2 above, bank 4 (mahjong tiles)
+ ROM_IGNORE(0x18000)
+
+ ROM_REGION( 0x600, "proms", 0 )
+ ROM_LOAD( "mjr.u36", 0x000, 0x200, CRC(31cd7a90) SHA1(1525ad19d748561a52626e4ab13df67d9bedf3b8) ) // all 3 BPROMs are AM27S13 or compatible
+ ROM_LOAD( "mjg.u37", 0x200, 0x200, CRC(5b3562aa) SHA1(ada60d2a5a5a657d7b209d18a23b685305d9ff7b) )
+ ROM_LOAD( "mjb.u38", 0x400, 0x200, CRC(0ef881cb) SHA1(44b61a443d683f5cb2d1b1a4f74d8a8f41021de5) )
+ROM_END
+
+ROM_START( dragonmj ) // MJ911 PCB, as ichiban. TODO: how does the banking work?
+ ROM_REGION( 0x60000, "maincpu", 0 ) // opcodes in first half are mixed with pseudo-random garbage
+ ROM_LOAD( "oct3.u15", 0x00000, 0x20000, CRC(87ac834d) SHA1(ab98406a008b566aff95da9ecb11d238e2f472ca) )
+ ROM_LOAD( "oct1.u28", 0x20000, 0x20000, CRC(0142aed1) SHA1(1ee627d6cbddeafbe1407fd569704ec511874c60) )
+ ROM_LOAD( "oct2.u14", 0x40000, 0x20000, CRC(40310894) SHA1(072418ed995e8dda1b47b59483a5139d731ed542) )
+
+ ROM_REGION( 0x600, "proms", 0 )
+ ROM_LOAD( "r.u36", 0x000, 0x200, CRC(1c5d555b) SHA1(cc9bc20d3ef5397acf3f3e195d59c7a633e6500e) )
+ ROM_LOAD( "g.u37", 0x200, 0x200, CRC(eb40711b) SHA1(2ed08fd86dc4f578536ebf65f377c63c8fdc6e07) )
+ ROM_LOAD( "b.u38", 0x400, 0x200, CRC(6b2fa97a) SHA1(7f8e33f2132348eaca1af55062b280e0a9234ac9) )
+ROM_END
+
+ROM_START( dragonmj103 )
+ ROM_REGION( 0x60000, "maincpu", 0 ) // opcodes in first half are mixed with pseudo-random garbage
+ ROM_LOAD( "3_excel.u15", 0x00000, 0x20000, CRC(437a8b32) SHA1(527dbb924fd6844757781e230f34ca1585d269b7) )
+ ROM_LOAD( "oct_no1.u28", 0x20000, 0x20000, CRC(0142aed1) SHA1(1ee627d6cbddeafbe1407fd569704ec511874c60) )
+ ROM_LOAD( "oct_no2.u14", 0x40000, 0x20000, CRC(40310894) SHA1(072418ed995e8dda1b47b59483a5139d731ed542) )
+
+ ROM_REGION( 0x600, "proms", 0 )
+ ROM_LOAD( "r.u36", 0x000, 0x200, CRC(1c5d555b) SHA1(cc9bc20d3ef5397acf3f3e195d59c7a633e6500e) )
+ ROM_LOAD( "g.u37", 0x200, 0x200, CRC(eb40711b) SHA1(2ed08fd86dc4f578536ebf65f377c63c8fdc6e07) )
+ ROM_LOAD( "b.u38", 0x400, 0x200, CRC(6b2fa97a) SHA1(7f8e33f2132348eaca1af55062b280e0a9234ac9) )
+ROM_END
+
/*
Pong Boo! 2 by OCT
@@ -6020,6 +6145,18 @@ void royalmah_prgbank_state::init_cafedoll()
save_item(NAME(m_mjvegas_p5_val));
}
+void royalmah_prgbank_state::init_cafepara()
+{
+ m_mainbank->configure_entries(0, 80, memregion("maincpu")->base() + 0x10000, 0x8000);
+
+ save_item(NAME(m_rombank));
+
+ m_janptr96_nvram = std::make_unique<uint8_t[]>(0x1000 * 9);
+ membank("bank3")->set_base(m_janptr96_nvram.get());
+ subdevice<nvram_device>("nvram")->set_base(m_janptr96_nvram.get(), 0x1000 * 9);
+ m_rambank->configure_entries(0, 8, m_janptr96_nvram.get() + 0x1000, 0x1000);
+}
+
void royalmah_prgbank_state::init_mjvegasa()
{
m_mainbank->configure_entries(0, 128, memregion("maincpu")->base() + 0x10000, 0x8000);
@@ -6144,51 +6281,60 @@ void royalmah_prgbank_state::init_pongboo2()
// the original Janputer (Sanritsu) is not yet dumped, basically Royal Mahjong but non-BET type
-GAME( 1981, royalmj, 0, royalmah, royalmah, royalmah_state, empty_init, ROT0, "Nichibutsu", "Royal Mahjong (Japan, v1.13)", 0 )
-GAME( 1981?, openmj, royalmj, royalmah, royalmah, royalmah_state, empty_init, ROT0, "Sapporo Mechanic", "Open Mahjong [BET] (Japan)", 0 )
-GAME( 1982, royalmah, royalmj, royalmah, royalmah, royalmah_state, empty_init, ROT0, "bootleg", "Royal Mahjong (Falcon bootleg, v1.01)", 0 )
-GAME( 1984?, chalgirl, 0, chalgirl, royalmah, royalmah_prgbank_state, init_chalgirl, ROT0, "bootleg", "Challenge Girl (Falcon bootleg)", MACHINE_WRONG_COLORS | MACHINE_NOT_WORKING ) // verify ROM loading / banking, bad girl colors
-GAME( 1983, seljan, 0, seljan, seljan, royalmah_state, empty_init, ROT0, "Jem / Dyna Corp", "Sel-Jan [BET] (Japan)", 0 )
-GAME( 1983, janyoup2, royalmj, janyoup2, janyoup2, royalmah_state, empty_init, ROT0, "Cosmo Denshi", "Janyou Part II (ver 7.03, July 1 1983)",0 )
-GAME( 1985, tahjong, royalmj, tahjong, tahjong, royalmah_prgbank_state, init_tahjong, ROT0, "Bally Pond / Nasco", "Tahjong Yakitori (ver. 2-1)", 0 ) // 1985 Jun. 17
-GAME( 1981, janputer, 0, royalmah, royalmah, royalmah_state, empty_init, ROT0, "bootleg (Paradise Denshi Ltd. / Mes)", "New Double Bet Mahjong (bootleg of Royal Mahjong) [BET]", 0 ) // MT #05392
-GAME( 1984, rkjanoh2, 0, rkjanoh2, royalmah, royalmah_prgbank_state, init_chalgirl, ROT0, "SNK / Dyna Corp", "Royal King Jang Oh 2 (v4.00 1984 Jun 10th)", MACHINE_WRONG_COLORS | MACHINE_NOT_WORKING ) // never seems to set the palette bank?
-GAME( 1984, janoh, 0, janoh, royalmah, royalmah_state, empty_init, ROT0, "Toaplan", "Jan Oh (set 1)", MACHINE_NOT_WORKING )
-GAME( 1984, janoha, janoh, janoha, royalmah, royalmah_state, empty_init, ROT0, "Toaplan", "Jan Oh (set 2)", MACHINE_NOT_WORKING ) // this one is complete?
-GAME( 1985, jansou, 0, jansou, jansou, royalmah_state, init_jansou, ROT0, "Dyna Computer", "Jansou (set 1)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
-GAME( 1985, jansoua, jansou, jansou, jansou, royalmah_state, init_jansou, ROT0, "Dyna Computer", "Jansou (V 1.1)", 0 )
-GAME( 1986, jangtaku, 0, jansou, jansou, royalmah_state, init_jansou, ROT0, "Dyna Computer", "Jang Taku (V 1.3)", 0 )
-GAME( 1986, dondenmj, 0, dondenmj, majs101b, royalmah_prgbank_state, init_dynax, ROT0, "Dyna Electronics", "Don Den Mahjong [BET] (Japan)", 0 )
-GAME( 1986, ippatsu, 0, ippatsu, ippatsu, royalmah_state, empty_init, ROT0, "Public Software / Paradais", "Ippatsu Gyakuten [BET] (Japan)", 0 )
-GAME( 1986, suzume, 0, suzume, suzume, royalmah_prgbank_state, init_suzume, ROT0, "Dyna Electronics", "Watashiha Suzumechan (Japan)", 0 )
-GAME( 1986, jongshin, 0, jongshin, jongshin, royalmah_prgbank_state, init_jongshin, ROT0, "Dyna Electronics", "Jong Shin (Japan)", 0 )
-GAME( 1986, mjsiyoub, 0, mjsiyoub, mjyarou, royalmah_prgbank_state, init_mjsiyoub, ROT0, "Visco", "Mahjong Shiyou (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_COLORS | MACHINE_NOT_WORKING ) // MSM5205 isn't hooked up, colors need to be verified against original
-GAME( 1986, mjsenka, 0, mjsenka, mjyarou, royalmah_prgbank_state, init_mjsenka, ROT0, "Visco", "Mahjong Senka (Japan)", MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // never seems to set the palette bank?
-GAME( 1986, mjyarou, 0, mjyarou, mjyarou, royalmah_prgbank_state, init_chalgirl, ROT0, "Visco / Video System", "Mahjong Yarou [BET] (Japan, set 1)", MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_GRAPHICS ) // never seems to set the palette bank?
-GAME( 1986, mjyarou2, mjyarou, mjyarou, mjyarou, royalmah_prgbank_state, init_chalgirl, ROT0, "Visco / Video System", "Mahjong Yarou [BET] (Japan, set 2)", MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_GRAPHICS ) // never seems to set the palette bank?
-GAME( 1986?, mjclub, 0, mjclub, mjclub, royalmah_prgbank_state, init_tontonb, ROT0, "Xex", "Mahjong Club [BET] (Japan)", 0 )
-GAME( 1987, mjdiplob, 0, mjdiplob, mjdiplob, royalmah_prgbank_state, init_tontonb, ROT0, "Dynax", "Mahjong Diplomat [BET] (Japan)", 0 )
-GAME( 1987, tontonb, 0, tontonb, tontonb, royalmah_prgbank_state, init_tontonb, ROT0, "Dynax", "Tonton [BET] (Japan, set 1)", 0 )
-GAME( 1987, makaijan, 0, makaijan, makaijan, royalmah_prgbank_state, init_dynax, ROT0, "Dynax", "Makaijan [BET] (Japan)", 0 )
-GAME( 1988, majs101b, 0, majs101b, majs101b, royalmah_prgbank_state, init_dynax, ROT0, "Dynax", "Mahjong Studio 101 [BET] (Japan)", 0 )
-GAME( 1988, mjapinky, 0, mjapinky, mjapinky, royalmah_prgbank_state, init_tontonb, ROT0, "Dynax", "Almond Pinky [BET] (Japan)", 0 )
-GAME( 1989, mjdejavu, 0, mjdejavu, mjdejavu, royalmah_prgbank_state, init_mjifb, ROT0, "Dynax", "Mahjong Shinkirou Deja Vu (Japan)", MACHINE_NOT_WORKING ) // MT #00964
-GAME( 1989, mjdejav2, mjdejavu, mjdejavu, mjdejavu, royalmah_prgbank_state, init_mjifb, ROT0, "Dynax", "Mahjong Shinkirou Deja Vu 2 (Japan)", MACHINE_NOT_WORKING )
-GAME( 1989, mjderngr, 0, mjderngr, mjderngr, royalmah_prgbank_state, init_dynax, ROT0, "Dynax", "Mahjong Derringer (Japan)", 0 )
-GAME( 1989, daisyari, 0, daisyari, daisyari, royalmah_prgbank_state, init_daisyari, ROT0, "Best System", "Daisyarin [BET] (Japan)", 0 )
-GAME( 1990, mjifb, 0, mjifb, mjifb, royalmah_prgbank_state, init_mjifb, ROT0, "Dynax", "Mahjong If...? [BET]", 0 )
-GAME( 1990, mjifb2, mjifb, mjifb, mjifb, royalmah_prgbank_state, init_mjifb, ROT0, "Dynax", "Mahjong If...? [BET](2921)", 0 )
-GAME( 1990, mjifb3, mjifb, mjifb, mjifb, royalmah_prgbank_state, init_mjifb, ROT0, "Dynax", "Mahjong If...? [BET](2931)", 0 )
-GAME( 1991, mjvegasa, 0, mjvegasa, mjvegasa, royalmah_prgbank_state, init_mjvegasa, ROT0, "Dynax", "Mahjong Vegas (Japan, unprotected)", 0 )
-GAME( 1991, mjvegas, mjvegasa, mjvegas, mjvegasa, royalmah_prgbank_state, init_mjvegas, ROT0, "Dynax", "Mahjong Vegas (Japan)", 0 )
-GAME( 1992, cafetime, 0, cafetime, cafetime, royalmah_prgbank_state, init_cafetime, ROT0, "Dynax", "Mahjong Cafe Time", 0 )
-GAME( 1993, cafedoll, 0, cafedoll, cafetime, royalmah_prgbank_state, init_cafedoll, ROT0, "Dynax", "Mahjong Cafe Doll (Japan, Ver. 1.00)", MACHINE_NOT_WORKING ) // fails protection check (at 0x178 it puts 0x55 in 0xFFBF instead of 0x56 like the code expects and chaos ensues)
-GAME( 1993, ichiban, 0, ichiban, ichiban, royalmah_prgbank_state, init_ichiban, ROT0, "Excel", "Ichi Ban Jyan", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) // ROM banking is wrong, causing several GFX problems
-GAME( 1995, mjtensin, 0, mjtensin, mjtensin, royalmah_prgbank_state, init_mjtensin, ROT0, "Dynax", "Mahjong Tensinhai (Japan)", MACHINE_NOT_WORKING )
-GAME( 1996, majrjhdx, 0, majrjh, mjtensin, royalmah_prgbank_state, init_mjtensin, ROT0, "Dynax", "Mahjong Raijinhai DX (Ver. D105)", 0 )
-GAME( 1996, majrjh, majrjhdx, majrjh, mjtensin, royalmah_prgbank_state, init_mjtensin, ROT0, "Dynax", "Mahjong Raijinhai (Ver. D105)", 0 )
-GAME( 1996, janptr96, 0, janptr96, janptr96, royalmah_prgbank_state, init_janptr96, ROT0, "Dynax", "Janputer '96 (Japan)", 0 )
-GAME( 1997, janptrsp, 0, janptr96, janptr96, royalmah_prgbank_state, init_janptr96, ROT0, "Dynax", "Janputer Special (Japan)", 0 )
-GAME( 1997, pongboo2, 0, pongboo2, ichiban, royalmah_prgbank_state, init_pongboo2, ROT0, "OCT", "Pong Boo! 2 (Ver. 1.31)", MACHINE_NOT_WORKING | MACHINE_WRONG_COLORS ) // banking, palette, inputs
-GAME( 1999, cafebrk, 0, cafepara, cafetime, royalmah_prgbank_state, init_mjtensin, ROT0, "Nakanihon / Dynax", "Mahjong Cafe Break (Ver. 1.01J)", MACHINE_NOT_WORKING ) // needs correct banking and / or 1d ROM descrambling
-GAME( 1999, cafepara, 0, cafepara, cafetime, royalmah_prgbank_state, init_mjtensin, ROT0, "Techno-Top", "Mahjong Cafe Paradise (Ver. 1.00)", MACHINE_NOT_WORKING ) // needs correct banking and / or 1d ROM descrambling
+GAME( 1981, royalmj, 0, royalmah, royalmah, royalmah_state, empty_init, ROT0, "Nichibutsu", "Royal Mahjong (Japan, v1.13)", 0 )
+GAME( 1981?, openmj, royalmj, royalmah, royalmah, royalmah_state, empty_init, ROT0, "Sapporo Mechanic", "Open Mahjong (Japan)", 0 )
+GAME( 1982, royalmah, royalmj, royalmah, royalmah, royalmah_state, empty_init, ROT0, "bootleg", "Royal Mahjong (Falcon bootleg, v1.01)", 0 )
+GAME( 1984?, chalgirl, 0, chalgirl, royalmah, royalmah_prgbank_state, init_chalgirl, ROT0, "bootleg", "Challenge Girl (Falcon bootleg)", MACHINE_WRONG_COLORS | MACHINE_NOT_WORKING ) // verify ROM loading / banking, bad girl colors
+GAME( 1983, seljan, 0, seljan, seljan, royalmah_state, empty_init, ROT0, "Jem / Dyna Corp", "Sel-Jan (Japan)", 0 )
+GAME( 1983, janyoup2, royalmj, janyoup2, janyoup2, royalmah_state, empty_init, ROT0, "Cosmo Denshi", "Janyou Part II (ver 7.03, July 1 1983)",0 )
+GAME( 1983, janyoup2a, royalmj, janyoup2, janyoup2, royalmah_state, empty_init, ROT0, "Cosmo Denshi", "Janyou Part II (ver 7.03, July 1 1983, no title screen)",0 )
+GAME( 1983, janyoup2702, royalmj, janyoup2, janyoup2, royalmah_state, empty_init, ROT0, "Cosmo Denshi", "Janyou Part II (ver 7.02, July 1 1983)",0 )
+GAME( 1985, tahjong, royalmj, tahjong, tahjong, royalmah_prgbank_state, init_tahjong, ROT0, "Bally Pond / Nasco", "Tahjong Yakitori (ver. 2-1)", 0 ) // 1985 Jun. 17
+GAME( 1981, janputer, 0, royalmah, royalmah, royalmah_state, empty_init, ROT0, "bootleg (Paradise Denshi Ltd. / Mes)", "New Double Bet Mahjong (bootleg of Royal Mahjong, set 1)", 0 ) // MT #05392
+GAME( 1981, janputera, janputer, royalmah, royalmah, royalmah_state, empty_init, ROT0, "bootleg (Paradise Denshi Ltd. / Ever Denshi)", "New Double Bet Mahjong (bootleg of Royal Mahjong, set 2)", 0 )
+GAME( 1990, akamj, 0, ippatsu, ippatsu, royalmah_state, empty_init, ROT0, "bootleg (Paradise Electronics)", "Aka Mahjong (Double Bet, ver 1 16)", 0 )
+GAME( 1984, rkjanoh2, 0, rkjanoh2, royalmah, royalmah_prgbank_state, init_chalgirl, ROT0, "SNK / Dyna Corp", "Royal King Jang Oh 2 (v4.00 1984 Jun 10th)", MACHINE_WRONG_COLORS | MACHINE_NOT_WORKING ) // never seems to set the palette bank?
+GAME( 1984, janoh, 0, janoh, royalmah, royalmah_state, empty_init, ROT0, "Toaplan", "Jan Oh (set 1)", MACHINE_NOT_WORKING )
+GAME( 1984, janoha, janoh, janoha, royalmah, royalmah_state, empty_init, ROT0, "Toaplan", "Jan Oh (set 2)", MACHINE_NOT_WORKING ) // this one is complete?
+GAME( 1984, janohb, janoh, janoh, royalmah, royalmah_state, empty_init, ROT0, "Toaplan", "Jan Oh (set 3)", MACHINE_NOT_WORKING )
+GAME( 1985, jansou, 0, jansou, jansou, royalmah_state, init_jansou, ROT0, "Dyna Computer", "Jansou (set 1)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+GAME( 1985, jansoua, jansou, jansou, jansou, royalmah_state, init_jansou, ROT0, "Dyna Computer", "Jansou (V 1.1)", 0 )
+GAME( 1986, jangtaku, 0, jansou, jansou, royalmah_state, init_jansou, ROT0, "Dyna Computer", "Jang Taku (V 1.3)", 0 )
+GAME( 1986, dondenmj, 0, dondenmj, majs101b, royalmah_prgbank_state, init_dynax, ROT0, "Dyna Electronics", "Don Den Mahjong (Japan)", 0 )
+GAME( 1986, ippatsu, 0, ippatsu, ippatsu, royalmah_state, empty_init, ROT0, "Public Software / Paradais", "Ippatsu Gyakuten (Japan)", 0 )
+GAME( 1986, suzume, 0, suzume, suzume, royalmah_prgbank_state, init_suzume, ROT0, "Dyna Electronics", "Watashiha Suzumechan (Japan)", 0 )
+GAME( 1986, jongshin, 0, jongshin, jongshin, royalmah_prgbank_state, init_jongshin, ROT0, "Dyna Electronics", "Jong Shin (Japan)", 0 )
+GAME( 1986, mjsiyoub, 0, mjsiyoub, mjyarou, royalmah_prgbank_state, init_mjsiyoub, ROT0, "Visco", "Mahjong Shiyou (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_COLORS | MACHINE_NOT_WORKING ) // MSM5205 isn't hooked up, colors need to be verified against original
+GAME( 1986, mjsenka, 0, mjsenka, mjyarou, royalmah_prgbank_state, init_mjsenka, ROT0, "Visco", "Mahjong Senka (Japan)", MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // never seems to set the palette bank?
+GAME( 1986, mjyarou, 0, mjyarou, mjyarou, royalmah_prgbank_state, init_chalgirl, ROT0, "Visco / Video System", "Mahjong Yarou (Japan, set 1)", MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_GRAPHICS ) // never seems to set the palette bank?
+GAME( 1986, mjyarou2, mjyarou, mjyarou, mjyarou, royalmah_prgbank_state, init_chalgirl, ROT0, "Visco / Video System", "Mahjong Yarou (Japan, set 2)", MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_GRAPHICS ) // never seems to set the palette bank?
+GAME( 1986?, mjclub, 0, mjclub, mjclub, royalmah_prgbank_state, init_tontonb, ROT0, "Xex", "Mahjong Club (Japan)", 0 )
+GAME( 1987, mjdiplob, 0, mjdiplob, mjdiplob, royalmah_prgbank_state, init_tontonb, ROT0, "Dynax", "Mahjong Diplomat (Japan)", 0 )
+GAME( 1987, tontonb, 0, tontonb, tontonb, royalmah_prgbank_state, init_tontonb, ROT0, "Dynax", "Tonton (Japan)", 0 )
+GAME( 1987, makaijan, 0, makaijan, makaijan, royalmah_prgbank_state, init_dynax, ROT0, "Dynax", "Makaijan (Japan)", 0 )
+GAME( 1988, majs101b, 0, majs101b, majs101b, royalmah_prgbank_state, init_dynax, ROT0, "Dynax", "Mahjong Studio 101 (Japan)", 0 )
+GAME( 1988, mjapinky, 0, mjapinky, mjapinky, royalmah_prgbank_state, init_tontonb, ROT0, "Dynax", "Almond Pinky (Japan)", 0 )
+GAME( 1989, mjdejavu, 0, mjdejavu, mjdejavu, royalmah_prgbank_state, init_mjifb, ROT0, "Dynax", "Mahjong Shinkirou Deja Vu (Japan)", MACHINE_NOT_WORKING ) // MT #00964
+GAME( 1989, mjdejav2, mjdejavu, mjdejavu, mjdejavu, royalmah_prgbank_state, init_mjifb, ROT0, "Dynax", "Mahjong Shinkirou Deja Vu 2 (Japan)", MACHINE_NOT_WORKING )
+GAME( 1989, mjderngr, 0, mjderngr, mjderngr, royalmah_prgbank_state, init_dynax, ROT0, "Dynax", "Mahjong Derringer (Japan)", 0 )
+GAME( 1989, daisyari, 0, daisyari, daisyari, royalmah_prgbank_state, init_daisyari, ROT0, "Best System", "Daisyarin (Japan)", 0 )
+GAME( 1990, mjifb, 0, mjifb, mjifb, royalmah_prgbank_state, init_mjifb, ROT0, "Dynax", "Mahjong If...?", 0 )
+GAME( 1990, mjifb2, mjifb, mjifb, mjifb, royalmah_prgbank_state, init_mjifb, ROT0, "Dynax", "Mahjong If...? (2921)", 0 )
+GAME( 1990, mjifb3, mjifb, mjifb, mjifb, royalmah_prgbank_state, init_mjifb, ROT0, "Dynax", "Mahjong If...? (2931)", 0 )
+GAME( 1991, mjvegasa, 0, mjvegasa, mjvegasa, royalmah_prgbank_state, init_mjvegasa, ROT0, "Dynax", "Mahjong Vegas (Japan, unprotected)", 0 )
+GAME( 1991, mjvegas, mjvegasa, mjvegas, mjvegasa, royalmah_prgbank_state, init_mjvegas, ROT0, "Dynax", "Mahjong Vegas (Japan)", 0 )
+GAME( 1992, cafetime, 0, cafetime, cafetime, royalmah_prgbank_state, init_cafetime, ROT0, "Dynax", "Mahjong Cafe Time", 0 )
+GAME( 1993, cafedoll, 0, cafedoll, cafedoll, royalmah_prgbank_state, init_cafedoll, ROT0, "Dynax", "Mahjong Cafe Doll (Japan, Ver. 1.00)", MACHINE_NOT_WORKING ) // fails protection check (at 0x178 it puts 0x55 in 0xFFBF instead of 0x56 like the code expects and chaos ensues)
+GAME( 1993, cafedollg, cafedoll, cafedoll, cafedoll, royalmah_prgbank_state, init_cafedoll, ROT0, "Dynax", "Mahjong Cafe Doll Great (Japan, Ver. 1.00)", MACHINE_NOT_WORKING ) // fails protection check (at 0x178 it puts 0x55 in 0xFFBF instead of 0x56 like the code expects and chaos ensues)
+GAME( 1993, ichiban, 0, ichiban, ichiban, royalmah_prgbank_state, init_ichiban, ROT0, "Excel", "Ichi Ban Jyan (Ver 3.05)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) // ROM banking is wrong, causing several GFX problems
+GAME( 1993, ichiban235, ichiban, ichiban, ichiban, royalmah_prgbank_state, init_ichiban, ROT0, "Excel", "Ichi Ban Jyan (Ver 2.35)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) // ROM banking is wrong, causing several GFX problems
+GAME( 1993, dragonmj, 0, ichiban, ichiban, royalmah_prgbank_state, init_ichiban, ROT0, "OCT", "Dragon Mahjong (Ver 1.20)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) // " - DRAGON Ver1.20 1993/11/09
+GAME( 1993, dragonmj103, dragonmj, ichiban, ichiban, royalmah_prgbank_state, init_ichiban, ROT0, "OCT", "Dragon Mahjong (Ver 1.03)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS ) // " - DRAGON Ver1.03 1993/10/16
+GAME( 1995, mjtensin, 0, mjtensin, mjtensin, royalmah_prgbank_state, init_mjtensin, ROT0, "Dynax", "Mahjong Tensinhai (Japan)", MACHINE_NOT_WORKING )
+GAME( 1996, majrjhdx, 0, majrjh, mjtensin, royalmah_prgbank_state, init_mjtensin, ROT0, "Dynax", "Mahjong Raijinhai DX (Ver. D105)", 0 )
+GAME( 1996, majrjh, majrjhdx, majrjh, mjtensin, royalmah_prgbank_state, init_mjtensin, ROT0, "Dynax", "Mahjong Raijinhai (Ver. D105)", 0 )
+GAME( 1996, janptr96, 0, janptr96, janptr96, royalmah_prgbank_state, init_janptr96, ROT0, "Dynax", "Janputer '96 (Japan)", 0 )
+GAME( 1997, janptrsp, 0, janptr96, janptr96, royalmah_prgbank_state, init_janptr96, ROT0, "Dynax", "Janputer Special (Japan)", 0 )
+GAME( 1997, pongboo2, 0, pongboo2, ichiban, royalmah_prgbank_state, init_pongboo2, ROT0, "OCT", "Pong Boo! 2 (Ver. 1.31)", MACHINE_NOT_WORKING | MACHINE_WRONG_COLORS ) // banking, palette, inputs
+GAME( 1999, cafebrk, 0, cafepara, cafetime, royalmah_prgbank_state, init_cafepara, ROT0, "Nakanihon / Dynax", "Mahjong Cafe Break (Ver. 1.01J)", MACHINE_NOT_WORKING ) // needs correct banking and / or 1d ROM descrambling
+GAME( 1999, cafepara, 0, cafepara, cafetime, royalmah_prgbank_state, init_cafepara, ROT0, "Techno-Top", "Mahjong Cafe Paradise (Ver. 1.00)", MACHINE_NOT_WORKING ) // needs correct banking and / or 1d ROM descrambling