summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/devices/machine/pci-ide.cpp5
-rw-r--r--src/devices/machine/pci-ide.h6
-rw-r--r--src/mame/drivers/cps2.cpp37
-rw-r--r--src/mame/drivers/epos.cpp12
-rw-r--r--src/mame/drivers/royalmah.cpp337
-rw-r--r--src/mame/mame.lst1
6 files changed, 240 insertions, 158 deletions
diff --git a/src/devices/machine/pci-ide.cpp b/src/devices/machine/pci-ide.cpp
index bac97798949..98ec5180b46 100644
--- a/src/devices/machine/pci-ide.cpp
+++ b/src/devices/machine/pci-ide.cpp
@@ -11,7 +11,8 @@ ide_pci_device::ide_pci_device(const machine_config &mconfig, const char *tag, d
m_ide2(*this, "ide2"),
m_irq_num(-1),
m_irq_handler(*this),
- m_legacy_top(0x000)
+ m_legacy_top(0x000),
+ m_pif(0x8a)
{
}
@@ -106,7 +107,7 @@ void ide_pci_device::device_reset()
bank_infos[2].adr = (m_legacy_top << 20) | 0x170;
bank_infos[3].adr = (m_legacy_top << 20) | 0x374;
bank_infos[4].adr = 0xf00;
- pclass = 0x01018a;
+ pclass = 0x010100 | m_pif;
remap_cb();
// PCI0646U allow BAR
diff --git a/src/devices/machine/pci-ide.h b/src/devices/machine/pci-ide.h
index d9200898b4e..f3849fb1515 100644
--- a/src/devices/machine/pci-ide.h
+++ b/src/devices/machine/pci-ide.h
@@ -33,6 +33,10 @@ TODO:
#define MCFG_IDE_PCI_SET_LEGACY_TOP(_val) \
downcast<ide_pci_device *>(device)->set_legacy_top(_val);
+// Sets the default Programming Interface (PIF) register
+#define MCFG_IDE_PCI_SET_PIF(_val) \
+ downcast<ide_pci_device *>(device)->set_pif(_val);
+
class ide_pci_device : public pci_device {
public:
ide_pci_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
@@ -47,6 +51,7 @@ public:
void set_irq_info(const char *tag, const int irq_num);
template <class Object> static devcb_base &set_irq_handler(device_t &device, Object &&cb) { return downcast<ide_pci_device &>(device).m_irq_handler.set_callback(std::forward<Object>(cb)); }
void set_legacy_top(int val) { m_legacy_top = val & 0xfff; };
+ void set_pif(int val) { m_pif = val & 0xff; };
protected:
virtual void device_start() override;
@@ -63,6 +68,7 @@ private:
uint32_t pci_bar[6];
// Bits 31-20 for legacy mode hack
uint32_t m_legacy_top;
+ uint32_t m_pif;
uint32_t m_config_data[0x10];
DECLARE_ADDRESS_MAP(chan1_data_command_map, 32);
diff --git a/src/mame/drivers/cps2.cpp b/src/mame/drivers/cps2.cpp
index 3b305d72538..6b608b988bd 100644
--- a/src/mame/drivers/cps2.cpp
+++ b/src/mame/drivers/cps2.cpp
@@ -8182,6 +8182,42 @@ ROM_START( ssf2tbj1 )
ROM_LOAD( "ssf2tbj.key", 0x000000, 0x000014, CRC(bcc2e017) SHA1(9c375eeffa599be4994e8efd7dee9d0e67613a13) )
ROM_END
+ROM_START( ssf2tba )
+ ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */
+ ROM_LOAD16_WORD_SWAP( "ssfa.03tb", 0x000000, 0x80000, CRC(8de631d2) SHA1(e9249413149c6799faaece09226cdd37906b1a63) )
+ ROM_LOAD16_WORD_SWAP( "ssfa.04ta", 0x080000, 0x80000, CRC(abef3042) SHA1(71062765bd1337780fb347d277ebeca5d7f91c05) )
+ ROM_LOAD16_WORD_SWAP( "ssfa.05t", 0x100000, 0x80000, CRC(edfa018f) SHA1(61f80f3a1674c900df34095601db92d98bb28096) )
+ ROM_LOAD16_WORD_SWAP( "ssfa.06tb", 0x180000, 0x80000, CRC(2b9d1dbc) SHA1(e7136c2269c54f1fdfcdefdefc5dce0a63f38960) )
+ ROM_LOAD16_WORD_SWAP( "ssfa.07t", 0x200000, 0x80000, CRC(f4a25159) SHA1(83967820a82a20030ddb1404e73b73e20605e907) )
+
+ ROM_REGION( 0xc00000, "gfx", 0 )
+ ROMX_LOAD( "ssf.13m", 0x000000, 0x200000, CRC(cf94d275) SHA1(bf2a6d98a656d1cb5734da7836686242d3211137) , ROM_GROUPWORD | ROM_SKIP(6) )
+ ROMX_LOAD( "ssf.15m", 0x000002, 0x200000, CRC(5eb703af) SHA1(4b302dbb66e8a5c2ad92798699391e981bada427) , ROM_GROUPWORD | ROM_SKIP(6) )
+ ROMX_LOAD( "ssf.17m", 0x000004, 0x200000, CRC(ffa60e0f) SHA1(b21b1c749a8241440879bf8e7cb33968ccef97e5) , ROM_GROUPWORD | ROM_SKIP(6) )
+ ROMX_LOAD( "ssf.19m", 0x000006, 0x200000, CRC(34e825c5) SHA1(4d320fc96d1ef0b9928a8ce801734245a4c097a5) , ROM_GROUPWORD | ROM_SKIP(6) )
+ ROMX_LOAD( "ssf.14m", 0x800000, 0x100000, CRC(b7cc32e7) SHA1(0f4d26af338dab5dce5b7b34d32ad0c573434ace) , ROM_GROUPWORD | ROM_SKIP(6) )
+ ROMX_LOAD( "ssf.16m", 0x800002, 0x100000, CRC(8376ad18) SHA1(f4456833fb396e6501f4174c0fe5fd63ea40a188) , ROM_GROUPWORD | ROM_SKIP(6) )
+ ROMX_LOAD( "ssf.18m", 0x800004, 0x100000, CRC(f5b1b336) SHA1(4b060501e56b9d61294748da5387cdae5280ec4d) , ROM_GROUPWORD | ROM_SKIP(6) )
+ ROMX_LOAD( "ssf.20m", 0x800006, 0x100000, CRC(459d5c6b) SHA1(32b11ba7a12004aff810d719bff7508204c7b7c0) , ROM_GROUPWORD | ROM_SKIP(6) )
+
+ ROM_REGION( QSOUND_SIZE, "audiocpu", 0 ) /* 64k for the audio CPU (+banks) */
+ ROM_LOAD( "ssf-01a", 0x00000, 0x08000, CRC(71fcdfc9) SHA1(c816f47ce10b8e85504638ada9117ec26ddaab77) )
+ ROM_CONTINUE( 0x10000, 0x18000 )
+
+ ROM_REGION( 0x400000, "qsound", 0 ) /* QSound samples */
+ ROM_LOAD( "ssf.q01", 0x000000, 0x080000, CRC(a6f9da5c) SHA1(6d19f83a01bd25b838d5c2871f7964529d926c98) )
+ ROM_LOAD( "ssf.q02", 0x080000, 0x080000, CRC(8c66ae26) SHA1(32a82aee6ed4480e5a990f9af161734c7c0a1403) )
+ ROM_LOAD( "ssf.q03", 0x100000, 0x080000, CRC(695cc2ca) SHA1(c2675f0233608b76de528d2a6ef19846d1348060) )
+ ROM_LOAD( "ssf.q04", 0x180000, 0x080000, CRC(9d9ebe32) SHA1(9b26329370041374f1a90b479a172d2bc2801c4d) )
+ ROM_LOAD( "ssf.q05", 0x200000, 0x080000, CRC(4770e7b7) SHA1(0e764f0befb9227b0b36508d8ca8ec9be31bcb05) )
+ ROM_LOAD( "ssf.q06", 0x280000, 0x080000, CRC(4e79c951) SHA1(1144781d7dc57ef8a6458d982f5c91548ff59e27) )
+ ROM_LOAD( "ssf.q07", 0x300000, 0x080000, CRC(cdd14313) SHA1(ebe767a9d4b51dba4282fa0a36a546a88620dd59) )
+ ROM_LOAD( "ssf.q08", 0x380000, 0x080000, CRC(6f5a088c) SHA1(6c0b4690479647a99d76335f174be8455b4ff118) )
+
+ ROM_REGION( 0x20, "key", 0 )
+ ROM_LOAD( "ssf2tba.key", 0x000000, 0x000014, CRC(8d2740ed) SHA1(a211373e6f45ef073f36bda2d6fbfc2cd5c7866b) )
+ROM_END
+
ROM_START( ssf2tbh )
ROM_REGION( CODE_SIZE, "maincpu", 0 ) /* 68000 code */
ROM_LOAD16_WORD_SWAP( "ssfh.03tb", 0x000000, 0x80000, CRC(6db7d28b) SHA1(b37f3287c51564ee0fdab499787b37166d1eb76d) )
@@ -9869,6 +9905,7 @@ GAME( 1993, ssf2tb, ssf2, cps2, cps2_2p6b, cps_state, ssf2tb, ROT0,
GAME( 1993, ssf2tbr1, ssf2, cps2, cps2_2p6b, cps_state, ssf2tb, ROT0, "Capcom", "Super Street Fighter II: The Tournament Battle (World 930911)", MACHINE_SUPPORTS_SAVE ) // works, but not in tournament mode
GAME( 1993, ssf2tbj, ssf2, cps2, cps2_2p6b, cps_state, ssf2tb, ROT0, "Capcom", "Super Street Fighter II: The Tournament Battle (Japan 931005)", MACHINE_SUPPORTS_SAVE ) // works, but not in tournament mode
GAME( 1993, ssf2tbj1, ssf2, cps2, cps2_2p6b, cps_state, ssf2tb, ROT0, "Capcom", "Super Street Fighter II: The Tournament Battle (Japan 930911)", MACHINE_SUPPORTS_SAVE ) // works, but not in tournament mode
+GAME( 1993, ssf2tba, ssf2, cps2, cps2_2p6b, cps_state, ssf2tb, ROT0, "Capcom", "Super Street Fighter II: The Tournament Battle (Asia 931005)", MACHINE_SUPPORTS_SAVE ) // works, but not in tournament mode
GAME( 1993, ssf2tbh, ssf2, cps2, cps2_2p6b, cps_state, ssf2tb, ROT0, "Capcom", "Super Street Fighter II: The Tournament Battle (Hispanic 931005)", MACHINE_SUPPORTS_SAVE ) // works, but not in tournament mode
GAME( 1993, ecofghtr, 0, cps2, ecofghtr, cps_state, ecofghtr, ROT0, "Capcom", "Eco Fighters (World 931203)", MACHINE_SUPPORTS_SAVE )
GAME( 1993, ecofghtru, ecofghtr, cps2, ecofghtr, cps_state, ecofghtr, ROT0, "Capcom", "Eco Fighters (USA 940215)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/epos.cpp b/src/mame/drivers/epos.cpp
index c00fa6f54fa..f03eb0c3068 100644
--- a/src/mame/drivers/epos.cpp
+++ b/src/mame/drivers/epos.cpp
@@ -13,11 +13,15 @@
- Super Glob seems like a later revision of The Glob, the most obvious
difference being an updated service mode.
- These games don't have cocktail mode.
- - The divisor 4 was derived using the timing loop used to split the screen
- in the middle. This loop takes roughly 24200 cycles, giving
+ - The CPU clock divisor 4 was derived using the timing loop used to split
+ the screen in the middle. This loop takes roughly 24200 cycles, giving
2500 + (24200 - 2500) * 2 * 60 = 2754000 = 2.75MHz for the CPU speed,
assuming 60 fps and a 2500 cycle VBLANK period.
- This should be easy to check since the schematics are available, .
+ This also matches the IGMO schematic, as it is the /CLK signal, which is
+ derived from the 11MHz xtal by dividing it down by two 74LS193 chips, one
+ (U92) dividing the clock by 2, and another (U91) having 3 taps, further
+ dividing the already divided clock by 2 (/CLK), 4 (/PLOAD) and 8 (CLOCK).
+ The CLOCK signal drives the AY.
- I think theglob2 is earlier than theglob. They only differ in one routine,
but it appears to be a bug fix. Also, theglob3 appears to be even older.
@@ -472,7 +476,7 @@ static MACHINE_CONFIG_START( epos ) /* EPOS TRISTAR 8000 PCB */
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
- MCFG_SOUND_ADD("aysnd", AY8912, XTAL_11MHz/16) /* 0.6875 MHz??? - clock not confirmed (similar to the clock listed below) */
+ MCFG_SOUND_ADD("aysnd", AY8912, XTAL_11MHz/16) /* 0.6875 MHz, confirmed from schematics */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/royalmah.cpp b/src/mame/drivers/royalmah.cpp
index ab299f04e75..fe8093b0479 100644
--- a/src/mame/drivers/royalmah.cpp
+++ b/src/mame/drivers/royalmah.cpp
@@ -50,6 +50,7 @@ TODO:
- mjtensin: random crashes, interrupts related
+- convert the remaining set_base calls to configured banking and enable save state support
Stephh's notes (based on the games Z80 code and some tests) :
@@ -111,51 +112,43 @@ public:
royalmah_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this,"maincpu"),
+ m_ay(*this, "aysnd"),
m_videoram(*this, "videoram"),
m_audiocpu(*this, "audiocpu"),
m_rtc(*this, "rtc"),
m_soundlatch(*this, "soundlatch") { }
+
- required_device<cpu_device> m_maincpu;
- required_shared_ptr<uint8_t> m_videoram;
- optional_device<cpu_device> m_audiocpu;
- optional_device<msm6242_device> m_rtc;
- optional_device<generic_latch_8_device> m_soundlatch;
-
- uint8_t m_input_port_select;
- uint8_t m_dsw_select;
- uint8_t m_rombank;
- int m_palette_base;
- std::unique_ptr<uint8_t[]> m_janptr96_nvram;
- uint8_t m_suzume_bank;
- uint8_t m_gfx_adr_l;
- uint8_t m_gfx_adr_m;
- uint8_t m_gfx_adr_h;
- uint32_t m_gfx_adr;
- uint8_t m_gfxdata0;
- uint8_t m_gfxdata1;
- uint8_t m_jansou_colortable[16];
- uint8_t m_mjifb_rom_enable;
- uint8_t m_flip_screen;
+ DECLARE_READ8_MEMBER(player_1_port_r);
+ DECLARE_READ8_MEMBER(player_2_port_r);
+ DECLARE_WRITE8_MEMBER(input_port_select_w);
DECLARE_WRITE8_MEMBER(royalmah_palbank_w);
- DECLARE_WRITE8_MEMBER(royalmah_rom_w);
+
DECLARE_WRITE8_MEMBER(tahjong_bank_w);
+
DECLARE_WRITE8_MEMBER(mjderngr_coin_w);
DECLARE_WRITE8_MEMBER(mjderngr_palbank_w);
- DECLARE_WRITE8_MEMBER(input_port_select_w);
+
DECLARE_READ8_MEMBER(majs101b_dsw_r);
+
DECLARE_READ8_MEMBER(suzume_dsw_r);
DECLARE_WRITE8_MEMBER(suzume_bank_w);
+
DECLARE_WRITE8_MEMBER(mjapinky_bank_w);
DECLARE_WRITE8_MEMBER(mjapinky_palbank_w);
DECLARE_READ8_MEMBER(mjapinky_dsw_r);
+
DECLARE_WRITE8_MEMBER(tontonb_bank_w);
+
DECLARE_WRITE8_MEMBER(dynax_bank_w);
+
DECLARE_READ8_MEMBER(daisyari_dsw_r);
DECLARE_WRITE8_MEMBER(daisyari_bank_w);
+
DECLARE_READ8_MEMBER(mjclub_dsw_r);
DECLARE_WRITE8_MEMBER(mjclub_bank_w);
+
DECLARE_WRITE8_MEMBER(jansou_dsw_sel_w);
DECLARE_READ8_MEMBER(jansou_dsw_r);
DECLARE_WRITE8_MEMBER(jansou_colortable_w);
@@ -166,6 +159,7 @@ public:
DECLARE_READ8_MEMBER(jansou_6404_r);
DECLARE_READ8_MEMBER(jansou_6405_r);
DECLARE_WRITE8_MEMBER(jansou_sound_w);
+
DECLARE_WRITE8_MEMBER(janptr96_dswsel_w);
DECLARE_READ8_MEMBER(janptr96_dswsel_r);
DECLARE_READ8_MEMBER(janptr96_dsw_r);
@@ -173,6 +167,8 @@ public:
DECLARE_WRITE8_MEMBER(janptr96_rambank_w);
DECLARE_READ8_MEMBER(janptr96_unknown_r);
DECLARE_WRITE8_MEMBER(janptr96_coin_counter_w);
+ DECLARE_WRITE_LINE_MEMBER(janptr96_rtc_irq);
+
DECLARE_WRITE8_MEMBER(mjifb_coin_counter_w);
DECLARE_READ8_MEMBER(mjifb_rom_io_r);
DECLARE_WRITE8_MEMBER(mjifb_rom_io_w);
@@ -185,17 +181,21 @@ public:
DECLARE_WRITE8_MEMBER(mjifb_p3_w);
DECLARE_WRITE8_MEMBER(mjifb_p4_w);
DECLARE_WRITE8_MEMBER(mjifb_p8_w);
+
DECLARE_READ8_MEMBER(mjdejavu_rom_io_r);
DECLARE_WRITE8_MEMBER(mjdejavu_rom_io_w);
+
DECLARE_READ8_MEMBER(mjtensin_p3_r);
DECLARE_WRITE8_MEMBER(mjtensin_p4_w);
DECLARE_WRITE8_MEMBER(mjtensin_6ff3_w);
+
DECLARE_WRITE8_MEMBER(cafetime_p4_w);
DECLARE_WRITE8_MEMBER(cafetime_p3_w);
DECLARE_WRITE8_MEMBER(cafetime_dsw_w);
DECLARE_READ8_MEMBER(cafetime_dsw_r);
DECLARE_READ8_MEMBER(cafetime_7fe4_r);
DECLARE_WRITE8_MEMBER(cafetime_7fe3_w);
+
DECLARE_WRITE8_MEMBER(mjvegasa_p4_w);
DECLARE_WRITE8_MEMBER(mjvegasa_p3_w);
DECLARE_WRITE8_MEMBER(mjvegasa_rombank_w);
@@ -204,24 +204,72 @@ public:
DECLARE_WRITE8_MEMBER(mjvegasa_coin_counter_w);
DECLARE_WRITE8_MEMBER(mjvegasa_12400_w);
DECLARE_READ8_MEMBER(mjvegasa_12500_r);
- DECLARE_READ8_MEMBER(royalmah_player_1_port_r);
- DECLARE_READ8_MEMBER(royalmah_player_2_port_r);
- DECLARE_WRITE_LINE_MEMBER(janptr96_rtc_irq);
+
DECLARE_WRITE_LINE_MEMBER(mjtensin_rtc_irq);
- DECLARE_DRIVER_INIT(janptr96);
+
+ DECLARE_DRIVER_INIT(tahjong);
+ DECLARE_DRIVER_INIT(dynax);
+ DECLARE_DRIVER_INIT(jansou);
+ DECLARE_DRIVER_INIT(suzume);
DECLARE_DRIVER_INIT(ippatsu);
+ DECLARE_DRIVER_INIT(mjifb);
+ DECLARE_DRIVER_INIT(tontonb);
+ DECLARE_DRIVER_INIT(janptr96);
DECLARE_PALETTE_INIT(royalmah);
DECLARE_PALETTE_INIT(mjderngr);
+
uint32_t screen_update_royalmah(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
INTERRUPT_GEN_MEMBER(suzume_irq);
INTERRUPT_GEN_MEMBER(mjtensin_interrupt);
TIMER_DEVICE_CALLBACK_MEMBER(janptr96_interrupt);
+
+protected:
+ virtual void machine_start() override;
+
+private:
+ required_device<cpu_device> m_maincpu;
+ required_device<ay8910_device> m_ay;
+ required_shared_ptr<uint8_t> m_videoram;
+ optional_device<cpu_device> m_audiocpu;
+ optional_device<msm6242_device> m_rtc;
+ optional_device<generic_latch_8_device> m_soundlatch;
+
+ // used by most games
+ uint8_t m_input_port_select;
+ uint8_t m_dsw_select;
+ uint8_t m_rombank;
+ uint8_t m_palette_base;
+ uint8_t m_flip_screen;
+
+ // game specific
+ std::unique_ptr<uint8_t[]> m_janptr96_nvram;
+
+ uint8_t m_suzume_bank;
+
+ uint8_t m_gfx_adr_l;
+ uint8_t m_gfx_adr_m;
+ uint8_t m_gfx_adr_h;
+ uint32_t m_gfx_adr;
+ uint8_t m_gfxdata0;
+ uint8_t m_gfxdata1;
+ uint8_t m_jansou_colortable[16];
+
+ uint8_t m_mjifb_rom_enable;
+
void mjtensin_update_rombank();
void cafetime_update_rombank();
};
-
+void royalmah_state::machine_start()
+{
+ save_item(NAME(m_input_port_select));
+ save_item(NAME(m_dsw_select));
+ save_item(NAME(m_rombank));
+ save_item(NAME(m_palette_base));
+ save_item(NAME(m_flip_screen));
+}
PALETTE_INIT_MEMBER(royalmah_state, royalmah)
{
@@ -308,21 +356,15 @@ WRITE8_MEMBER(royalmah_state::mjderngr_palbank_w)
uint32_t royalmah_state::screen_update_royalmah(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- uint8_t *videoram = m_videoram;
-
- offs_t offs;
-
- for (offs = 0; offs < 0x4000; offs++)
+ for (offs_t offs = 0; offs < 0x4000; offs++)
{
- int i;
-
- uint8_t data1 = videoram[offs + 0x0000];
- uint8_t data2 = videoram[offs + 0x4000];
+ uint8_t data1 = m_videoram[offs + 0x0000];
+ uint8_t data2 = m_videoram[offs + 0x4000];
uint8_t y = (m_flip_screen) ? 255 - (offs >> 6) : (offs >> 6);
uint8_t x = (m_flip_screen) ? 255 - (offs << 2) : (offs << 2);
- for (i = 0; i < 4; i++)
+ for (int i = 0; i < 4; i++)
{
uint8_t pen = ((data2 >> 1) & 0x08) | ((data2 << 2) & 0x04) | ((data1 >> 3) & 0x02) | ((data1 >> 0) & 0x01);
@@ -337,23 +379,12 @@ uint32_t royalmah_state::screen_update_royalmah(screen_device &screen, bitmap_in
return 0;
}
-
-
-
-
-WRITE8_MEMBER(royalmah_state::royalmah_rom_w)
-{
- /* using this handler will avoid all the entries in the error log that are the result of
- the RLD and RRD instructions this games uses to print text on the screen */
-}
-
-
WRITE8_MEMBER(royalmah_state::input_port_select_w)
{
m_input_port_select = data;
}
-READ8_MEMBER(royalmah_state::royalmah_player_1_port_r)
+READ8_MEMBER(royalmah_state::player_1_port_r)
{
int ret = (ioport("KEY0")->read() & 0xc0) | 0x3f;
@@ -366,7 +397,7 @@ READ8_MEMBER(royalmah_state::royalmah_player_1_port_r)
return ret;
}
-READ8_MEMBER(royalmah_state::royalmah_player_2_port_r)
+READ8_MEMBER(royalmah_state::player_2_port_r)
{
int ret = (ioport("KEY5")->read() & 0xc0) | 0x3f;
@@ -414,40 +445,27 @@ READ8_MEMBER(royalmah_state::suzume_dsw_r)
WRITE8_MEMBER(royalmah_state::tahjong_bank_w)
{
- uint8_t *rom = memregion("maincpu")->base();
- int address;
-
-logerror("%04x: bank %02x\n",space.device().safe_pc(),data);
-
- data &= 0x01;
-
- address = 0x10000 + data * 0x4000;
-
- membank("bank1")->set_base(&rom[address]);
+ membank("mainbank")->set_entry(data & 0x01);
}
WRITE8_MEMBER(royalmah_state::suzume_bank_w)
{
- uint8_t *rom = memregion("maincpu")->base();
- int address;
-
m_suzume_bank = data;
-logerror("%04x: bank %02x\n",space.device().safe_pc(),data);
+ logerror("%04x: bank %02x\n",space.device().safe_pc(),data);
/* bits 6, 4 and 3 used for something input related? */
- address = 0x10000 + (data & 0x07) * 0x8000;
- membank("bank1")->set_base(&rom[address]);
+ membank("mainbank")->set_entry(data & 0x07);
}
WRITE8_MEMBER(royalmah_state::mjapinky_bank_w)
{
- uint8_t *ROM = memregion("maincpu")->base();
m_rombank = data;
- membank("bank1")->set_base(ROM + 0x10000 + 0x8000 * data);
+
+ membank("mainbank")->set_entry(data & 0x0f);
}
WRITE8_MEMBER(royalmah_state::mjapinky_palbank_w)
@@ -466,36 +484,22 @@ READ8_MEMBER(royalmah_state::mjapinky_dsw_r)
WRITE8_MEMBER(royalmah_state::tontonb_bank_w)
{
- uint8_t *rom = memregion("maincpu")->base();
- int address;
-
-logerror("%04x: bank %02x\n",space.device().safe_pc(),data);
+ logerror("%04x: bank %02x\n",space.device().safe_pc(),data);
if (data == 0) return; // tontonb fix?
- data &= 0x0f;
-
- address = 0x10000 + data * 0x8000;
-
- membank("bank1")->set_base(&rom[address]);
+ membank("mainbank")->set_entry(data & 0x0f);
}
/* bits 5 and 6 seem to affect which Dip Switch to read in 'majs101b' */
WRITE8_MEMBER(royalmah_state::dynax_bank_w)
{
- uint8_t *rom = memregion("maincpu")->base();
- int address;
-
//logerror("%04x: bank %02x\n",space.device().safe_pc(),data);
m_dsw_select = data & 0x60;
- data &= 0x1f;
-
- address = 0x10000 + data * 0x8000;
-
- membank("bank1")->set_base(&rom[address]);
+ membank("mainbank")->set_entry(data & 0x1f);
}
READ8_MEMBER(royalmah_state::daisyari_dsw_r)
@@ -521,7 +525,7 @@ WRITE8_MEMBER(royalmah_state::daisyari_bank_w)
address = 0x10000 + ((data & 0x30)>>4) * 0x10000 + (data & 0x1) * 0x8000;
// printf("%08x %02x\n",address,data);
- membank("bank1")->set_base(&rom[address]);
+ membank("mainbank")->set_base(&rom[address]);
/* bit 1 used too but unknown purpose. */
}
@@ -541,41 +545,33 @@ READ8_MEMBER(royalmah_state::mjclub_dsw_r)
WRITE8_MEMBER(royalmah_state::mjclub_bank_w)
{
- uint8_t *rom = memregion("maincpu")->base();
- int address;
-
m_dsw_select = data & 0xc0;
- data &= 0x0f;
-
- address = 0x10000 + data * 0x8000;
-// printf("%08x\n",address);
-
- membank("bank1")->set_base(&rom[address]);
+ membank("mainbank")->set_entry(data & 0x0f);
/* bit 5 used too but unknown purpose. */
}
static ADDRESS_MAP_START( royalmah_map, AS_PROGRAM, 8, royalmah_state )
- AM_RANGE( 0x0000, 0x6fff ) AM_ROM AM_WRITE(royalmah_rom_w )
+ AM_RANGE( 0x0000, 0x6fff ) AM_ROM
AM_RANGE( 0x7000, 0x7fff ) AM_RAM AM_SHARE("nvram")
- AM_RANGE( 0x8000, 0xffff ) AM_ROMBANK( "bank1" ) // banked ROMs not present in royalmah
+ AM_RANGE( 0x8000, 0xffff ) AM_ROMBANK( "mainbank" ) // banked ROMs not present in royalmah
AM_RANGE( 0x8000, 0xffff ) AM_WRITEONLY AM_SHARE("videoram")
ADDRESS_MAP_END
static ADDRESS_MAP_START( mjapinky_map, AS_PROGRAM, 8, royalmah_state )
- AM_RANGE( 0x0000, 0x6fff ) AM_ROM AM_WRITE(royalmah_rom_w )
+ AM_RANGE( 0x0000, 0x6fff ) AM_ROM
AM_RANGE( 0x7000, 0x77ff ) AM_RAM AM_SHARE("nvram")
AM_RANGE( 0x7800, 0x7fff ) AM_RAM
AM_RANGE( 0x8000, 0x8000 ) AM_READ(mjapinky_dsw_r )
- AM_RANGE( 0x8000, 0xffff ) AM_ROMBANK( "bank1" )
+ AM_RANGE( 0x8000, 0xffff ) AM_ROMBANK( "mainbank" )
AM_RANGE( 0x8000, 0xffff ) AM_WRITEONLY AM_SHARE("videoram")
ADDRESS_MAP_END
static ADDRESS_MAP_START( tahjong_map, AS_PROGRAM, 8, royalmah_state )
- AM_RANGE( 0x0000, 0x3fff ) AM_ROM AM_WRITE(royalmah_rom_w )
- AM_RANGE( 0x4000, 0x6fff ) AM_ROMBANK( "bank1" ) AM_WRITE(royalmah_rom_w )
+ AM_RANGE( 0x0000, 0x3fff ) AM_ROM
+ AM_RANGE( 0x4000, 0x6fff ) AM_ROMBANK("mainbank")
AM_RANGE( 0x7000, 0x7fff ) AM_RAM AM_SHARE("nvram")
AM_RANGE( 0x8000, 0xffff ) AM_WRITEONLY AM_SHARE("videoram")
ADDRESS_MAP_END
@@ -725,7 +721,7 @@ static ADDRESS_MAP_START( mjapinky_iomap, AS_IO, 8, royalmah_state )
ADDRESS_MAP_END
static ADDRESS_MAP_START( janoh_map, AS_PROGRAM, 8, royalmah_state )
- AM_RANGE( 0x0000, 0x6fff ) AM_ROM AM_WRITE(royalmah_rom_w )
+ AM_RANGE( 0x0000, 0x6fff ) AM_ROM
AM_RANGE( 0x7000, 0x7fff ) AM_RAM AM_SHARE("nvram")
AM_RANGE( 0x8000, 0xffff ) AM_WRITEONLY AM_SHARE("videoram")
ADDRESS_MAP_END
@@ -864,8 +860,8 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( janptr96_map, AS_PROGRAM, 8, royalmah_state )
AM_RANGE( 0x0000, 0x5fff ) AM_ROM
AM_RANGE( 0x6000, 0x6fff ) AM_RAMBANK("bank3") AM_SHARE("nvram") // nvram
- AM_RANGE( 0x7000, 0x7fff ) AM_RAMBANK("bank2") // banked nvram
- AM_RANGE( 0x8000, 0xffff ) AM_ROMBANK("bank1")
+ AM_RANGE( 0x7000, 0x7fff ) AM_RAMBANK("rambank") // banked nvram
+ AM_RANGE( 0x8000, 0xffff ) AM_ROMBANK("mainbank")
AM_RANGE( 0x8000, 0xffff ) AM_WRITEONLY AM_SHARE("videoram")
ADDRESS_MAP_END
@@ -893,13 +889,12 @@ READ8_MEMBER(royalmah_state::janptr96_dsw_r)
WRITE8_MEMBER(royalmah_state::janptr96_rombank_w)
{
- uint8_t *ROM = memregion("maincpu")->base();
- membank("bank1")->set_base(ROM + 0x10000 + 0x8000 * data);
+ membank("mainbank")->set_entry(data & 0x3f);
}
WRITE8_MEMBER(royalmah_state::janptr96_rambank_w)
{
- membank("bank2")->set_base(m_janptr96_nvram.get() + 0x1000 + 0x1000 * data);
+ membank("rambank")->set_entry(data & 0x07);
}
READ8_MEMBER(royalmah_state::janptr96_unknown_r)
@@ -953,7 +948,7 @@ READ8_MEMBER(royalmah_state::mjifb_rom_io_r)
{
case 0x8000: return ioport("DSW4")->read(); // dsw 4
case 0x8200: return ioport("DSW3")->read(); // dsw 3
- case 0x9001: return machine().device<ay8910_device>("aysnd")->data_r(space, 0); // inputs
+ case 0x9001: return m_ay->data_r(space, 0); // inputs
case 0x9011: return ioport("SYSTEM")->read();
}
@@ -963,10 +958,9 @@ READ8_MEMBER(royalmah_state::mjifb_rom_io_r)
WRITE8_MEMBER(royalmah_state::mjifb_rom_io_w)
{
- uint8_t *videoram = m_videoram;
if (m_mjifb_rom_enable)
{
- videoram[offset] = data;
+ m_videoram[offset] = data;
return;
}
@@ -975,8 +969,8 @@ WRITE8_MEMBER(royalmah_state::mjifb_rom_io_w)
switch(offset)
{
case 0x8e00: m_palette_base = data & 0x1f; return;
- case 0x9002: machine().device<ay8910_device>("aysnd")->data_w(space,0,data); return;
- case 0x9003: machine().device<ay8910_device>("aysnd")->address_w(space,0,data); return;
+ case 0x9002: m_ay->data_w(space,0,data); return;
+ case 0x9003: m_ay->address_w(space,0,data); return;
case 0x9010:
mjifb_coin_counter_w(space,0,data);
return;
@@ -991,8 +985,7 @@ WRITE8_MEMBER(royalmah_state::mjifb_rom_io_w)
WRITE8_MEMBER(royalmah_state::mjifb_videoram_w)
{
- uint8_t *videoram = m_videoram;
- videoram[offset + 0x4000] = data;
+ m_videoram[offset + 0x4000] = data;
}
static ADDRESS_MAP_START( mjifb_map, AS_PROGRAM, 8, royalmah_state )
@@ -1062,7 +1055,7 @@ READ8_MEMBER(royalmah_state::mjdejavu_rom_io_r)
{
case 0x8000: return ioport("DSW2")->read(); // dsw 2
case 0x8001: return ioport("DSW1")->read(); // dsw 1
- case 0x9001: return machine().device<ay8910_device>("aysnd")->data_r(space, 0); // inputs
+ case 0x9001: return m_ay->data_r(space, 0); // inputs
case 0x9011: return ioport("SYSTEM")->read();
}
@@ -1072,10 +1065,9 @@ READ8_MEMBER(royalmah_state::mjdejavu_rom_io_r)
WRITE8_MEMBER(royalmah_state::mjdejavu_rom_io_w)
{
- uint8_t *videoram = m_videoram;
if (m_mjifb_rom_enable)
{
- videoram[offset] = data;
+ m_videoram[offset] = data;
return;
}
@@ -1083,8 +1075,8 @@ WRITE8_MEMBER(royalmah_state::mjdejavu_rom_io_w)
switch(offset)
{
case 0x8802: m_palette_base = data & 0x1f; return;
- case 0x9002: machine().device<ay8910_device>("aysnd")->data_w(space,0,data); return;
- case 0x9003: machine().device<ay8910_device>("aysnd")->address_w(space,0,data); return;
+ case 0x9002: m_ay->data_w(space,0,data); return;
+ case 0x9003: m_ay->address_w(space,0,data); return;
case 0x9010: janptr96_coin_counter_w(space,0,data); return;
case 0x9011: input_port_select_w(space,0,data); return;
case 0x9013:
@@ -1114,7 +1106,7 @@ READ8_MEMBER(royalmah_state::mjtensin_p3_r)
void royalmah_state::mjtensin_update_rombank()
{
- membank("bank1")->set_base(memregion("maincpu")->base() + 0x10000 + m_rombank * 0x8000 );
+ membank("mainbank")->set_base(memregion("maincpu")->base() + 0x10000 + m_rombank * 0x8000 );
}
WRITE8_MEMBER(royalmah_state::mjtensin_p4_w)
{
@@ -1139,7 +1131,7 @@ static ADDRESS_MAP_START( mjtensin_map, AS_PROGRAM, 8, royalmah_state )
AM_RANGE( 0x6ff1, 0x6ff1 ) AM_WRITE(mjderngr_palbank_w )
AM_RANGE( 0x6ff3, 0x6ff3 ) AM_WRITE(mjtensin_6ff3_w )
AM_RANGE( 0x7000, 0x7fff ) AM_RAM AM_SHARE("nvram")
- AM_RANGE( 0x8000, 0xffff ) AM_ROMBANK( "bank1" )
+ AM_RANGE( 0x8000, 0xffff ) AM_ROMBANK( "mainbank" )
AM_RANGE( 0x8000, 0xffff ) AM_WRITEONLY AM_SHARE("videoram")
ADDRESS_MAP_END
@@ -1155,7 +1147,7 @@ ADDRESS_MAP_END
void royalmah_state::cafetime_update_rombank()
{
- membank("bank1")->set_base(memregion("maincpu")->base() + 0x10000 + m_rombank * 0x8000 );
+ membank("mainbank")->set_base(memregion("maincpu")->base() + 0x10000 + m_rombank * 0x8000 );
}
WRITE8_MEMBER(royalmah_state::cafetime_p4_w)
{
@@ -1209,7 +1201,7 @@ static ADDRESS_MAP_START( cafetime_map, AS_PROGRAM, 8, royalmah_state )
AM_RANGE( 0x7fe3, 0x7fe3 ) AM_WRITE(cafetime_7fe3_w )
AM_RANGE( 0x7fe4, 0x7fe4 ) AM_READ(cafetime_7fe4_r )
AM_RANGE( 0x7ff0, 0x7fff ) AM_DEVREADWRITE("rtc", msm6242_device, read, write)
- AM_RANGE( 0x8000, 0xffff ) AM_ROMBANK( "bank1" )
+ AM_RANGE( 0x8000, 0xffff ) AM_ROMBANK( "mainbank" )
AM_RANGE( 0x8000, 0xffff ) AM_WRITEONLY AM_SHARE("videoram")
ADDRESS_MAP_END
@@ -1255,10 +1247,9 @@ READ8_MEMBER(royalmah_state::mjvegasa_rom_io_r)
WRITE8_MEMBER(royalmah_state::mjvegasa_rom_io_w)
{
- uint8_t *videoram = m_videoram;
if ((m_rombank & 0x70) != 0x70)
{
- videoram[offset] = data;
+ m_videoram[offset] = data;
return;
}
@@ -3368,8 +3359,8 @@ static MACHINE_CONFIG_START( royalmah )
MCFG_SPEAKER_STANDARD_MONO("speaker")
MCFG_SOUND_ADD("aysnd", AY8910, 18432000/12)
- MCFG_AY8910_PORT_A_READ_CB(READ8(royalmah_state, royalmah_player_1_port_r))
- MCFG_AY8910_PORT_B_READ_CB(READ8(royalmah_state, royalmah_player_2_port_r))
+ MCFG_AY8910_PORT_A_READ_CB(READ8(royalmah_state, player_1_port_r))
+ MCFG_AY8910_PORT_B_READ_CB(READ8(royalmah_state, player_2_port_r))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.33)
MACHINE_CONFIG_END
@@ -4978,6 +4969,7 @@ ROM_START( jangtaku )
/*this is just a z80 Voice Player (and latches port I/O $00 with the main CPU)*/
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "1.a3", 0x00000, 0x8000, CRC(745162d3) SHA1(145269c60c87e772e6cbca40213d286ec05c9134) )
+ // THE Jantaku Voice Ver 1.0 (C) Copy Right 1986 DYNA Computer Service CO.,LTD. By Satoshi Kato
ROM_REGION( 0x0020, "proms", 0 )
ROM_LOAD( "82s123a.6k", 0x0000, 0x0020, CRC(e9598146) SHA1(619e7eb76cc3e882b5b3e55cdd23fe00b0a1fe45) )
@@ -5002,16 +4994,57 @@ ROM_START( rkjanoh2 )
ROM_LOAD( "82s123", 0x000, 0x020, CRC(74a53e94) SHA1(ca9114bd9b2b07f5abe82616b41ae9fdb9537a4f) )
ROM_END
-DRIVER_INIT_MEMBER(royalmah_state,ippatsu)
+DRIVER_INIT_MEMBER(royalmah_state, tahjong)
+{
+ membank("mainbank")->configure_entries(0, 2, memregion("maincpu")->base() + 0x10000, 0x4000);
+}
+
+DRIVER_INIT_MEMBER(royalmah_state, jansou)
{
- membank("bank1")->set_base(memregion("maincpu")->base() + 0x8000 );
+ save_item(NAME(m_gfx_adr_l));
+ save_item(NAME(m_gfx_adr_m));
+ save_item(NAME(m_gfx_adr_h));
+ save_item(NAME(m_gfx_adr));
+ save_item(NAME(m_gfxdata0));
+ save_item(NAME(m_gfxdata1));
+ save_item(NAME(m_jansou_colortable));
}
-DRIVER_INIT_MEMBER(royalmah_state,janptr96)
+DRIVER_INIT_MEMBER(royalmah_state, dynax)
{
+ membank("mainbank")->configure_entries(0, 32, memregion("maincpu")->base() + 0x10000, 0x8000);
+}
+
+DRIVER_INIT_MEMBER(royalmah_state, ippatsu)
+{
+ membank("mainbank")->set_base(memregion("maincpu")->base() + 0x8000 );
+}
+
+DRIVER_INIT_MEMBER(royalmah_state, suzume)
+{
+ membank("mainbank")->configure_entries(0, 8, memregion("maincpu")->base() + 0x10000, 0x8000);
+
+ save_item(NAME(m_suzume_bank));
+}
+
+DRIVER_INIT_MEMBER(royalmah_state, mjifb)
+{
+ save_item(NAME(m_mjifb_rom_enable));
+}
+
+DRIVER_INIT_MEMBER(royalmah_state, tontonb)
+{
+ membank("mainbank")->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x8000);
+}
+
+DRIVER_INIT_MEMBER(royalmah_state, janptr96)
+{
+ membank("mainbank")->configure_entries(0, 64, memregion("maincpu")->base() + 0x10000, 0x8000);
+
m_janptr96_nvram = std::make_unique<uint8_t[]>(0x1000 * 9);
membank("bank3")->set_base(m_janptr96_nvram.get());
machine().device<nvram_device>("nvram")->set_base(m_janptr96_nvram.get(), 0x1000 * 9);
+ membank("rambank")->configure_entries(0, 8, m_janptr96_nvram.get() + 0x1000, 0x1000);
}
@@ -5021,40 +5054,40 @@ GAME( 1981, royalmj, 0, royalmah, royalmah, royalmah_state, 0, R
GAME( 1981?, openmj, royalmj, royalmah, royalmah, royalmah_state, 0, ROT0, "Sapporo Mechanic", "Open Mahjong [BET] (Japan)", 0 )
GAME( 1982, royalmah, royalmj, royalmah, royalmah, royalmah_state, 0, ROT0, "bootleg", "Royal Mahjong (Falcon bootleg, v1.01)", 0 )
GAME( 1983, janyoup2, royalmj, ippatsu, janyoup2, royalmah_state, 0, ROT0, "Cosmo Denshi", "Janyou Part II (ver 7.03, July 1 1983)",0 )
-GAME( 1985, tahjong, royalmj, tahjong, tahjong, royalmah_state, 0, ROT0, "Bally Pond / Nasco", "Tahjong Yakitori (ver. 2-1)", 0 ) // 1985 Jun. 17
+GAME( 1985, tahjong, royalmj, tahjong, tahjong, royalmah_state, tahjong, ROT0, "Bally Pond / Nasco", "Tahjong Yakitori (ver. 2-1)", 0 ) // 1985 Jun. 17
GAME( 1981, janputer, 0, royalmah, royalmah, royalmah_state, 0, ROT0, "bootleg (Paradise Denshi Ltd. / Mes)", "New Double Bet Mahjong (bootleg of Royal Mahjong) [BET]", 0 ) // MT #05392
GAME( 1984, rkjanoh2, 0, royalmah, royalmah, royalmah_state, 0, ROT0, "SNK / Dyna", "Royal King Jang Oh 2 (v4.00 1984 Jun 10th)", MACHINE_NOT_WORKING )
GAME( 1984, janoh, 0, royalmah, royalmah, royalmah_state, 0, ROT0, "Toaplan", "Jan Oh (set 1)", MACHINE_NOT_WORKING )
GAME( 1984, janoha, janoh, janoh, royalmah, royalmah_state, 0, ROT0, "Toaplan", "Jan Oh (set 2)", MACHINE_NOT_WORKING ) // this one is complete?
-GAME( 1985, jansou, 0, jansou, jansou, royalmah_state, 0, ROT0, "Dyna Computer", "Jansou (set 1)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND )
-GAME( 1985, jansoua, jansou, jansou, jansou, royalmah_state, 0, ROT0, "Dyna Computer", "Jansou (V 1.1)", 0 )
-GAME( 1986, jangtaku, 0, jansou, jansou, royalmah_state, 0, ROT0, "Dyna Computer", "Jang Taku (V 1.3)", 0 )
-GAME( 1986, dondenmj, 0, dondenmj, majs101b, royalmah_state, 0, ROT0, "Dyna Electronics", "Don Den Mahjong [BET] (Japan)", 0 )
+GAME( 1985, jansou, 0, jansou, jansou, royalmah_state, jansou, ROT0, "Dyna Computer", "Jansou (set 1)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND )
+GAME( 1985, jansoua, jansou, jansou, jansou, royalmah_state, jansou, ROT0, "Dyna Computer", "Jansou (V 1.1)", 0 )
+GAME( 1986, jangtaku, 0, jansou, jansou, royalmah_state, jansou, ROT0, "Dyna Computer", "Jang Taku (V 1.3)", 0 )
+GAME( 1986, dondenmj, 0, dondenmj, majs101b, royalmah_state, dynax, ROT0, "Dyna Electronics", "Don Den Mahjong [BET] (Japan)", 0 )
GAME( 1986, ippatsu, 0, ippatsu, ippatsu, royalmah_state, ippatsu, ROT0, "Public Software / Paradais", "Ippatsu Gyakuten [BET] (Japan)", 0 )
-GAME( 1986, suzume, 0, suzume, suzume, royalmah_state, 0, ROT0, "Dyna Electronics", "Watashiha Suzumechan (Japan)", 0 )
+GAME( 1986, suzume, 0, suzume, suzume, royalmah_state, suzume, ROT0, "Dyna Electronics", "Watashiha Suzumechan (Japan)", 0 )
GAME( 1986, mjsiyoub, 0, royalmah, royalmah, royalmah_state, 0, ROT0, "Visco", "Mahjong Shiyou (Japan)", MACHINE_NOT_WORKING )
GAME( 1986, mjsenka, 0, royalmah, royalmah, royalmah_state, 0, ROT0, "Visco", "Mahjong Senka (Japan)", MACHINE_NOT_WORKING )
GAME( 1986, mjyarou, 0, mjyarou, mjyarou, royalmah_state, 0, ROT0, "Visco / Video System", "Mahjong Yarou [BET] (Japan, set 1)", MACHINE_IMPERFECT_GRAPHICS ) // girls aren't shown
GAME( 1986, mjyarou2, mjyarou, mjyarou, mjyarou, royalmah_state, 0, ROT0, "Visco / Video System", "Mahjong Yarou [BET] (Japan, set 2)", MACHINE_IMPERFECT_GRAPHICS ) // girls aren't shown
-GAME( 1986?, mjclub, 0, mjclub, mjclub, royalmah_state, 0, ROT0, "Xex", "Mahjong Club [BET] (Japan)", 0 )
-GAME( 1987, mjdiplob, 0, mjdiplob, mjdiplob, royalmah_state, 0, ROT0, "Dynax", "Mahjong Diplomat [BET] (Japan)", 0 )
-GAME( 1987, tontonb, 0, tontonb, tontonb, royalmah_state, 0, ROT0, "Dynax", "Tonton [BET] (Japan, set 1)", 0 )
-GAME( 1987, makaijan, 0, makaijan, makaijan, royalmah_state, 0, ROT0, "Dynax", "Makaijan [BET] (Japan)", 0 )
-GAME( 1988, majs101b, 0, majs101b, majs101b, royalmah_state, 0, ROT0, "Dynax", "Mahjong Studio 101 [BET] (Japan)", 0 )
-GAME( 1988, mjapinky, 0, mjapinky, mjapinky, royalmah_state, 0, ROT0, "Dynax", "Almond Pinky [BET] (Japan)", 0 )
-GAME( 1989, mjdejavu, 0, mjdejavu, mjdejavu, royalmah_state, 0, ROT0, "Dynax", "Mahjong Shinkirou Deja Vu (Japan)", MACHINE_NOT_WORKING ) // MT #00964
-GAME( 1989, mjdejav2, mjdejavu, mjdejavu, mjdejavu, royalmah_state, 0, ROT0, "Dynax", "Mahjong Shinkirou Deja Vu 2 (Japan)", MACHINE_NOT_WORKING )
-GAME( 1989, mjderngr, 0, mjderngr, mjderngr, royalmah_state, 0, ROT0, "Dynax", "Mahjong Derringer (Japan)", 0 )
+GAME( 1986?, mjclub, 0, mjclub, mjclub, royalmah_state, tontonb, ROT0, "Xex", "Mahjong Club [BET] (Japan)", 0 )
+GAME( 1987, mjdiplob, 0, mjdiplob, mjdiplob, royalmah_state, tontonb, ROT0, "Dynax", "Mahjong Diplomat [BET] (Japan)", 0 )
+GAME( 1987, tontonb, 0, tontonb, tontonb, royalmah_state, tontonb, ROT0, "Dynax", "Tonton [BET] (Japan, set 1)", 0 )
+GAME( 1987, makaijan, 0, makaijan, makaijan, royalmah_state, dynax, ROT0, "Dynax", "Makaijan [BET] (Japan)", 0 )
+GAME( 1988, majs101b, 0, majs101b, majs101b, royalmah_state, dynax, ROT0, "Dynax", "Mahjong Studio 101 [BET] (Japan)", 0 )
+GAME( 1988, mjapinky, 0, mjapinky, mjapinky, royalmah_state, tontonb, ROT0, "Dynax", "Almond Pinky [BET] (Japan)", 0 )
+GAME( 1989, mjdejavu, 0, mjdejavu, mjdejavu, royalmah_state, mjifb, ROT0, "Dynax", "Mahjong Shinkirou Deja Vu (Japan)", MACHINE_NOT_WORKING ) // MT #00964
+GAME( 1989, mjdejav2, mjdejavu, mjdejavu, mjdejavu, royalmah_state, mjifb, ROT0, "Dynax", "Mahjong Shinkirou Deja Vu 2 (Japan)", MACHINE_NOT_WORKING )
+GAME( 1989, mjderngr, 0, mjderngr, mjderngr, royalmah_state, dynax, ROT0, "Dynax", "Mahjong Derringer (Japan)", 0 )
GAME( 1989, daisyari, 0, daisyari, daisyari, royalmah_state, 0, ROT0, "Best System", "Daisyarin [BET] (Japan)", 0 )
-GAME( 1990, mjifb, 0, mjifb, mjifb, royalmah_state, 0, ROT0, "Dynax", "Mahjong If...? [BET]", 0 )
-GAME( 1990, mjifb2, mjifb, mjifb, mjifb, royalmah_state, 0, ROT0, "Dynax", "Mahjong If...? [BET](2921)", 0 )
-GAME( 1990, mjifb3, mjifb, mjifb, mjifb, royalmah_state, 0, ROT0, "Dynax", "Mahjong If...? [BET](2931)", 0 )
+GAME( 1990, mjifb, 0, mjifb, mjifb, royalmah_state, mjifb, ROT0, "Dynax", "Mahjong If...? [BET]", 0 )
+GAME( 1990, mjifb2, mjifb, mjifb, mjifb, royalmah_state, mjifb, ROT0, "Dynax", "Mahjong If...? [BET](2921)", 0 )
+GAME( 1990, mjifb3, mjifb, mjifb, mjifb, royalmah_state, mjifb, ROT0, "Dynax", "Mahjong If...? [BET](2931)", 0 )
GAME( 1991, mjvegasa, 0, mjvegasa, mjvegasa, royalmah_state, 0, ROT0, "Dynax", "Mahjong Vegas (Japan, unprotected)", 0 )
GAME( 1991, mjvegas, mjvegasa, mjvegasa, mjvegasa, royalmah_state, 0, ROT0, "Dynax", "Mahjong Vegas (Japan)", MACHINE_NOT_WORKING )
GAME( 1992, cafetime, 0, cafetime, cafetime, royalmah_state, 0, ROT0, "Dynax", "Mahjong Cafe Time", 0 )
-GAME( 1993, cafedoll, 0, mjifb, mjifb, royalmah_state, 0, ROT0, "Dynax", "Mahjong Cafe Doll (Japan)", MACHINE_NOT_WORKING )
+GAME( 1993, cafedoll, 0, mjifb, mjifb, royalmah_state, mjifb, ROT0, "Dynax", "Mahjong Cafe Doll (Japan)", MACHINE_NOT_WORKING )
GAME( 1995, mjtensin, 0, mjtensin, mjtensin, royalmah_state, 0, ROT0, "Dynax", "Mahjong Tensinhai (Japan)", MACHINE_NOT_WORKING )
GAME( 1996, janptr96, 0, janptr96, janptr96, royalmah_state, janptr96, ROT0, "Dynax", "Janputer '96 (Japan)", 0 )
GAME( 1997, janptrsp, 0, janptr96, janptr96, royalmah_state, janptr96, ROT0, "Dynax", "Janputer Special (Japan)", 0 )
-GAME( 1999, cafebrk, 0, mjifb, mjifb, royalmah_state, 0, ROT0, "Nakanihon / Dynax", "Mahjong Cafe Break", MACHINE_NOT_WORKING )
-GAME( 1999, cafepara, 0, mjifb, mjifb, royalmah_state, 0, ROT0, "Techno-Top", "Mahjong Cafe Paradise", MACHINE_NOT_WORKING )
+GAME( 1999, cafebrk, 0, mjifb, mjifb, royalmah_state, mjifb, ROT0, "Nakanihon / Dynax", "Mahjong Cafe Break", MACHINE_NOT_WORKING )
+GAME( 1999, cafepara, 0, mjifb, mjifb, royalmah_state, mjifb, ROT0, "Techno-Top", "Mahjong Cafe Paradise", MACHINE_NOT_WORKING )
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index c6209e2506b..07b296ce621 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -10328,6 +10328,7 @@ ssf2t // 23/02/1994 (c) 1994 (World)
ssf2ta // 23/02/1994 (c) 1994 (Asia)
ssf2tad //
ssf2tb // 19/11/1993 (c) 1993 (World)
+ssf2tba // 05/10/1993 (c) 1993 (Asia)
ssf2tbd //
ssf2tbh // 05/10/1993 (c) 1993 (Hispanic)
ssf2tbj // 05/10/1993 (c) 1993 (Japan)