diff options
Diffstat (limited to 'src/mame/dynax/royalmah.cpp')
-rw-r--r-- | src/mame/dynax/royalmah.cpp | 6340 |
1 files changed, 6340 insertions, 0 deletions
diff --git a/src/mame/dynax/royalmah.cpp b/src/mame/dynax/royalmah.cpp new file mode 100644 index 00000000000..f377d4f3c85 --- /dev/null +++ b/src/mame/dynax/royalmah.cpp @@ -0,0 +1,6340 @@ +// license:BSD-3-Clause +// copyright-holders:Zsolt Vasvari, Nicola Salmoria, Luca Elia +/**************************************************************************** + +Royal Mahjong (c) 1981 Nichibutsu +and many other Dyna/Dynax games running in similar bare-bones hardware + +driver by Zsolt Vasvari, Nicola Salmoria, Luca Elia + +CPU: Z80 or TLCS-90 +Video: Framebuffer +Sound: AY-3-8910 (or YM2149) +OSC: 18.432MHz and 8MHz + +----------------------------------------------------------------------------------------------------------------------- +Year + Game Board(s) CPU Company Notes +----------------------------------------------------------------------------------------------------------------------- +81 Royal Mahjong Z80 Nichibutsu +81? Open Mahjong Z80 Sapporo Mechanic +82 Royal Mahjong ? + FRM-03 Z80 Falcon bootleg +83 Janyou Part II Z80 Cosmo Denshi +84? Jan Oh FRM-00? Z80 Toaplan Incomplete program ROMs +84? Challenge Girl FRM-03 + SK-1B Z80 Paradise Denshi The dumped set is a bootleg by Falcon +86 Ippatsu Gyakuten Z80 Public/Paradais +86 Don Den Mahjong D039198L-0 Z80 Dyna Electronics +86 Jong Shin D8702158L1-0 Z80 Dyna Electronics +86 Watashiha Suzumechan D8803288L1-0 Z80 Dyna Electronics +86 Mahjong Shiyou (BET) S-0086-001-00 Z80 Visco Extra Z80 + MSM5205 +86 Mahjong Yarou FRM-00 (modified) Z80 Visco +86 Mahjong Senka FRM-00? Z80 Visco +87 Mahjong Diplomat D0706088L1-0 Z80 Dynax +87 Mahjong Studio 101 D1708228L1 Z80 Dynax +87 Tonton D0908288L1-0 Z80 Dynax +88 Almond Pinky D1401128L-0 + RM-1D Z80 Dynax +89 Mahjong Shinkirou D210301BL2 + FRM-00? TLCS-90 Dynax +89 Mahjong Derringer D2203018L Z80 Dynax Larger palette +90 Mahjong If..? D2909278L TLCS-90 Dynax Larger palette +91 Mahjong Vegas D5011308L1 + FRM-00 TLCS-90 Dynax Larger palette, RTC +92 Mahjong Cafe Time D6310128L1-1 TLCS-90 Dynax Larger palette, RTC +93 Mahjong Cafe Doll D76052208L-2 TLCS-90 Dynax Larger palette, RTC +93 Ichi Ban Jian MJ911 Z80 Excel Larger palette, additional YM2413 +95 Mahjong Tensinhai D10010318L1 TLCS-90 Dynax Larger palette, RTC +96 Mj Raijinhai (DX) D10010318L1 D10502168 TLCS-90 Dynax Larger palette, RTC +96 Janputer '96 NS503X0727 Z80 Dynax Larger palette, RTC +97 Pong Boo! 2 NEW PONG-BOO Z80(?) OCT OKI M6295, no PROMs +97 Janputer Special CS166P008 + NS5110207 Z80 Dynax Larger palette, RTC +99 Mahjong Cafe Break NS528-9812 TLCS-90 Nakanihon / Dynax Larger palette, RTC +99 Mahjong Cafe Paradise ? + TSS001-0001 TLCS-90 Techno-Top Larger palette, RTC +----------------------------------------------------------------------------------------------------------------------- + +TODO: + +- DIP switches and inputs in dondenmj, suzume, mjderngr... + +- there's something fishy with the bank switching in tontonb/mjdiplob + +- majs101b: service mode doesn't work + +- 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' + + - COIN1 doesn't work correctly, the screen goes black instead of showing the + credits, and you can start a game but the "phantom" credit is not subtracted; + with NVRAM support, this means the game would always boot to a black screen. + - The doesn't seem to be any possibility to play a 2 players game + (but the inputs are mapped so you can test them in the "test mode"). + P1 IN4 doesn't seem to be needed outside the "test mode" either. + +2) 'tontonb' + + - The doesn't seem to be any possibility to play a 2 players game + (but the inputs are mapped so you can test them in the "test mode") + P1 IN4 doesn't seem to be needed outside the "test mode" either. + + - I've DELIBERATELY mapped DSW3 before DSW2 to try to spot the common + things with the other Dynax mahjong games ! Please don't change this ! + + - When "Special Combinations" DIP Switch is ON, there is a marker in + front of a random combination. It's value is *2 then. + +3) 'mjdiplob' + + - The doesn't seem to be any possibility to play a 2 players game + (but the inputs are mapped so you can test them in the "test mode") + P1 IN4 doesn't seem to be needed outside the "test mode" either. + + - When "Special Combinations" DIP Switch is ON, there is a marker in + front of a random combination. It's value remains *1 though. + Could it be a leftover from another game ('tontonb' for exemple) ? + +- cafepara, janptr96, janptrsp: in service mode press in sequence N,Ron,Ron,N to + access some hidden options. (thanks bnathan) + +- cafebrk and cafepara share the same internal TMP91640 code, while + 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" +#include "machine/gen_latch.h" +#include "machine/msm6242.h" +#include "machine/nvram.h" +#include "sound/ay8910.h" +#include "sound/dac.h" +#include "sound/msm5205.h" +#include "sound/okim6295.h" +#include "sound/ymopl.h" +#include "video/mc6845.h" + +#include "emupal.h" +#include "screen.h" +#include "speaker.h" + + +namespace { + +class royalmah_state : public driver_device +{ +public: + royalmah_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_palette(*this, "palette"), + m_ay(*this, "aysnd"), + m_videoram(*this, "videoram"), + m_audiocpu(*this, "audiocpu"), + m_rtc(*this, "rtc"), + m_soundlatch(*this, "soundlatch"), + m_rambank(*this, "rambank"), + m_mainview(*this, "mainview"), + m_key_row(*this, "KEY%u", 0U), + m_dsw(*this, "DSW%u", 1U), + m_dsw_top(*this, "DSWTOP"), + m_gfx_rom(*this, "gfx1") + { } + + void royalmah(machine_config &config) ATTR_COLD; + void janoh(machine_config &config) ATTR_COLD; + void janoha(machine_config &config) ATTR_COLD; + void jansou(machine_config &config) ATTR_COLD; + void ippatsu(machine_config &config) ATTR_COLD; + void janyoup2(machine_config &config) ATTR_COLD; + void seljan(machine_config &config) ATTR_COLD; + + void init_jansou() ATTR_COLD; + +protected: + virtual void machine_start() override ATTR_COLD; + + uint8_t player_1_port_r(); + uint8_t player_2_port_r(); + void input_port_select_w(uint8_t data); + + void royalmah_palbank_w(uint8_t data); + + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + + void royalmah_map(address_map &map) ATTR_COLD; + void royalmah_iomap(address_map &map) ATTR_COLD; + + required_device<cpu_device> m_maincpu; + required_device<palette_device> m_palette; + optional_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; + optional_memory_bank m_rambank; + memory_view m_mainview; + required_ioport_array<10> m_key_row; + optional_ioport_array<4> m_dsw; + optional_ioport m_dsw_top; + optional_region_ptr<uint8_t> m_gfx_rom; + + // used by most games + uint8_t m_dsw_select = 0; + uint8_t m_palette_base = 0; + uint8_t m_flip_screen = 0; + +private: + void jansou_dsw_sel_w(uint8_t data); + uint8_t jansou_dsw_r(); + void jansou_colortable_w(offs_t offset, uint8_t data); + void jansou_6400_w(uint8_t data); + void jansou_6401_w(uint8_t data); + void jansou_6402_w(uint8_t data); + uint8_t jansou_6403_r(); + uint8_t jansou_6404_r(); + uint8_t jansou_6405_r(); + void jansou_sound_w(uint8_t data); + + void royalmah_palette(palette_device &palette) const ATTR_COLD; + + void ippatsu_map(address_map &map) ATTR_COLD; + void seljan_map(address_map &map) ATTR_COLD; + + void ippatsu_iomap(address_map &map) ATTR_COLD; + void janyoup2_iomap(address_map &map) ATTR_COLD; + void seljan_iomap(address_map &map) ATTR_COLD; + + void janoh_map(address_map &map) ATTR_COLD; + void janoh_sub_map(address_map &map) ATTR_COLD; + void janoh_sub_iomap(address_map &map) ATTR_COLD; + + void jansou_map(address_map &map) ATTR_COLD; + void jansou_sub_iomap(address_map &map) ATTR_COLD; + void jansou_sub_map(address_map &map) ATTR_COLD; + + // used by most games + uint8_t m_input_port_select = 0; + + // game-specific + uint8_t m_gfx_adr_l = 0; + uint8_t m_gfx_adr_m = 0; + uint8_t m_gfx_adr_h = 0; + uint32_t m_gfx_adr = 0; + uint8_t m_gfxdata0 = 0; + uint8_t m_gfxdata1 = 0; + uint8_t m_jansou_colortable[16] = { }; +}; + + +class royalmah_prgbank_state : public royalmah_state +{ +public: + royalmah_prgbank_state(const machine_config &mconfig, device_type type, const char *tag) : + royalmah_state(mconfig, type, tag), + m_mainbank(*this, "mainbank"), + m_mainopbank(*this, "mainopbank") + { + } + + void dondenmj(machine_config &config) ATTR_COLD; + void tahjong(machine_config &config) ATTR_COLD; + void makaijan(machine_config &config) ATTR_COLD; + void daisyari(machine_config &config) ATTR_COLD; + void mjclub(machine_config &config) ATTR_COLD; + void chalgirl(machine_config &config) ATTR_COLD; + void rkjanoh2(machine_config &config) ATTR_COLD; + void mjyarou(machine_config &config) ATTR_COLD; + void mjsenka(machine_config &config) ATTR_COLD; + void mjsiyoub(machine_config &config) ATTR_COLD; + void suzume(machine_config &config) ATTR_COLD; + void jongshin(machine_config &config) ATTR_COLD; + void tontonb(machine_config &config) ATTR_COLD; + void mjdiplob(machine_config &config) ATTR_COLD; + void majs101b(machine_config &config) ATTR_COLD; + void mjapinky(machine_config &config) ATTR_COLD; + void mjderngr(machine_config &config) ATTR_COLD; + void janptr96(machine_config &config) ATTR_COLD; + void mjifb(machine_config &config) ATTR_COLD; + void mjdejavu(machine_config &config) ATTR_COLD; + void mjtensin(machine_config &config) ATTR_COLD; + void majrjh(machine_config &config) ATTR_COLD; + void cafedoll(machine_config &config) ATTR_COLD; + void cafepara(machine_config &config) ATTR_COLD; + void cafetime(machine_config &config) ATTR_COLD; + void mjvegas(machine_config &config) ATTR_COLD; + void mjvegasa(machine_config &config) ATTR_COLD; + void ichiban(machine_config &config) ATTR_COLD; + void pongboo2(machine_config &config) ATTR_COLD; + + void init_tahjong() ATTR_COLD; + void init_dynax() ATTR_COLD; + void init_suzume() ATTR_COLD; + 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; + void init_jongshin() ATTR_COLD; + void init_mjifb() ATTR_COLD; + void init_tontonb() ATTR_COLD; + void init_mjsenka() ATTR_COLD; + void init_mjsiyoub() ATTR_COLD; + void init_janptr96() ATTR_COLD; + void init_chalgirl() ATTR_COLD; + void init_ichiban() ATTR_COLD; + void init_pongboo2() ATTR_COLD; + +private: + void tahjong_bank_w(uint8_t data); + + void mjderngr_coin_w(uint8_t data); + void mjderngr_palbank_w(uint8_t data); + + uint8_t majs101b_dsw_r(); + + void chalgirl_bank_w(uint8_t data); + + void mjyarou_bank_w(offs_t offset, uint8_t data); + + uint8_t suzume_dsw_r(); + void suzume_bank_w(uint8_t data); + + void jongshin_bank_w(uint8_t data); + + void mjapinky_bank_w(uint8_t data); + void mjapinky_palbank_w(uint8_t data); + uint8_t mjapinky_dsw_r(); + + void tontonb_bank_w(uint8_t data); + + void dynax_bank_w(uint8_t data); + + uint8_t daisyari_dsw_r(); + void daisyari_bank_w(uint8_t data); + + uint8_t mjclub_dsw_r(); + void mjclub_bank_w(uint8_t data); + + void janptr96_dswsel_w(uint8_t data); + uint8_t janptr96_dsw_r(); + void janptr96_rombank_w(uint8_t data); + void janptr96_rambank_w(uint8_t data); + uint8_t janptr96_unknown_r(); + void janptr96_coin_counter_w(uint8_t data); + + void mjifb_coin_counter_w(uint8_t data); + uint8_t mjifb_p8_r(); + void mjifb_p3_w(uint8_t data); + void mjifb_p4_w(uint8_t data); + void mjifb_p8_w(uint8_t data); + + uint8_t mjtensin_p3_r(); + void mjtensin_p4_w(uint8_t data); + void mjtensin_6ff3_w(uint8_t data); + + void cafetime_p4_w(uint8_t data); + void cafetime_p3_w(uint8_t data); + void cafetime_dsw_w(uint8_t data); + uint8_t cafetime_dsw_r(); + uint8_t cafetime_7fe4_r(); + void cafetime_7fe3_w(uint8_t data); + + void cafedoll_p6_w(uint8_t data); + void cafedoll_p7_w(uint8_t data); + + void mjvegasa_p4_w(uint8_t data); + void mjvegasa_p3_w(uint8_t data); + void mjvegasa_rombank_w(uint8_t data); + uint8_t mjvegasa_rom_io_r(offs_t offset); + void mjvegasa_rom_io_w(offs_t offset, uint8_t data); + void mjvegasa_coin_counter_w(uint8_t data); + void mjvegasa_12400_w(uint8_t data); + uint8_t mjvegasa_12500_r(); + + uint8_t mjvegas_p5_r(); + void mjvegas_p6_w(uint8_t data); + void mjvegas_p7_w(uint8_t data); + + void mjderngr_palette(palette_device &palette) const ATTR_COLD; + + INTERRUPT_GEN_MEMBER(suzume_irq); + + void royalmah_banked_map(address_map &map) ATTR_COLD; + void mjapinky_map(address_map &map) ATTR_COLD; + void tahjong_map(address_map &map) ATTR_COLD; + void chalgirl_map(address_map &map) ATTR_COLD; + void mjsiyoub_map(address_map &map) ATTR_COLD; + void ichiban_map(address_map &map) ATTR_COLD; + void ichiban_opcodes_map(address_map &map) ATTR_COLD; + void pongboo2_map(address_map &map) ATTR_COLD; + void pongboo2_opcodes_map(address_map &map) ATTR_COLD; + void mjsenka_opcodes_map(address_map &map) ATTR_COLD; + void janptr96_map(address_map &map) ATTR_COLD; + void janptr96_iomap(address_map &map) ATTR_COLD; + void mjifb_map(address_map &map) ATTR_COLD; + void mjdejavu_map(address_map &map) ATTR_COLD; + void mjtensin_map(address_map &map) ATTR_COLD; + void majrjh_map(address_map &map) ATTR_COLD; + void mjvegasa_map(address_map &map) ATTR_COLD; + void cafepara_map(address_map &map) ATTR_COLD; + void cafetime_map(address_map &map) ATTR_COLD; + + void chalgirl_iomap(address_map &map) ATTR_COLD; + void tahjong_iomap(address_map &map) ATTR_COLD; + void suzume_iomap(address_map &map) ATTR_COLD; + void jongshin_iomap(address_map &map) ATTR_COLD; + void rkjanoh2_iomap(address_map &map) ATTR_COLD; + void mjyarou_iomap(address_map &map) ATTR_COLD; + void mjsiyoub_iomap(address_map &map) ATTR_COLD; + void ichiban_iomap(address_map &map) ATTR_COLD; + void pongboo2_iomap(address_map &map) ATTR_COLD; + void dondenmj_iomap(address_map &map) ATTR_COLD; + void makaijan_iomap(address_map &map) ATTR_COLD; + void daisyari_iomap(address_map &map) ATTR_COLD; + void mjclub_iomap(address_map &map) ATTR_COLD; + void mjdiplob_iomap(address_map &map) ATTR_COLD; + void tontonb_iomap(address_map &map) ATTR_COLD; + void majs101b_iomap(address_map &map) ATTR_COLD; + void mjderngr_iomap(address_map &map) ATTR_COLD; + void mjapinky_iomap(address_map &map) ATTR_COLD; + + void mjsiyoub_audio_prg_map(address_map &map) ATTR_COLD; + + required_memory_bank m_mainbank; + optional_memory_bank m_mainopbank; + + // used by most games + uint8_t m_rombank = 0; + + // game-specific + std::unique_ptr<uint8_t[]> m_janptr96_nvram; + + uint8_t m_suzume_bank = 0; + uint8_t m_mjyarou_bank = 0; + uint8_t m_mjvegas_p5_val = 0; +}; + + +void royalmah_state::machine_start() +{ + save_item(NAME(m_input_port_select)); + save_item(NAME(m_dsw_select)); + save_item(NAME(m_palette_base)); + save_item(NAME(m_flip_screen)); +} + +void royalmah_state::royalmah_palette(palette_device &palette) const +{ + uint8_t const *const prom = memregion("proms")->base(); + + offs_t const len(memregion("proms")->bytes()); + for (offs_t i = 0; i < len; i++) + { + uint8_t bit0, bit1, bit2; + + uint8_t const data = prom[i]; + + // red component + bit0 = BIT(data, 0); + bit1 = BIT(data, 1); + bit2 = BIT(data, 2); + uint8_t const r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; + + // green component + bit0 = BIT(data, 3); + bit1 = BIT(data, 4); + bit2 = BIT(data, 5); + uint8_t const g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; + + // blue component + bit0 = 0; + bit1 = BIT(data, 6); + bit2 = BIT(data, 7); + uint8_t const b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; + + palette.set_pen_color(i, r, g, b); + } +} + +void royalmah_prgbank_state::mjderngr_palette(palette_device &palette) const +{ + uint8_t const *const prom = memregion("proms")->base(); + + offs_t const len(memregion("proms")->bytes()); + for (offs_t i = 0; i < (len / 2); i++) + { + uint16_t const data = (prom[i] << 8) | prom[i + 0x200]; + + // the bits are in reverse order + uint8_t const r = bitswap<5>((data >> 0) & 0x1f, 0, 1, 2, 3, 4); + uint8_t const g = bitswap<5>((data >> 5) & 0x1f, 0, 1, 2, 3, 4); + uint8_t const b = bitswap<5>((data >> 10) & 0x1f, 0, 1, 2, 3, 4); + + palette.set_pen_color(i, pal5bit(r), pal5bit(g), pal5bit(b)); + } +} + +void royalmah_state::royalmah_palbank_w(uint8_t data) +{ + // bit 1 = coin counter + machine().bookkeeping().coin_counter_w(0, data & 2); + + // bit 2 = flip screen + m_flip_screen = (data & 4) >> 2; + + // bit 3 = palette bank + m_palette_base = (data >> 3) & 0x01; +} + + +void royalmah_prgbank_state::mjderngr_coin_w(uint8_t data) +{ + // bit 1 = coin counter + machine().bookkeeping().coin_counter_w(0, data & 2); + + // bit 2 = flip screen + m_flip_screen = (data & 4) >> 2; +} + + +void royalmah_prgbank_state::mjderngr_palbank_w(uint8_t data) +{ + m_palette_base = data; +} + + +uint32_t royalmah_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + for (offs_t offs = 0; offs < 0x4000; offs++) + { + 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 (int i = 0; i < 4; i++) + { + uint8_t pen = ((data2 >> 1) & 0x08) | ((data2 << 2) & 0x04) | ((data1 >> 3) & 0x02) | ((data1 >> 0) & 0x01); + + bitmap.pix(y, x) = m_palette->pen((m_palette_base << 4) | pen); + + x = (m_flip_screen) ? x - 1 : x + 1; + data1 = data1 >> 1; + data2 = data2 >> 1; + } + } + + return 0; +} + +void royalmah_state::input_port_select_w(uint8_t data) +{ + m_input_port_select = data; +} + +uint8_t royalmah_state::player_1_port_r() +{ + int ret = (m_key_row[0]->read() & 0xc0) | 0x3f; + + if ((m_input_port_select & 0x01) == 0) ret &= m_key_row[0]->read(); + if ((m_input_port_select & 0x02) == 0) ret &= m_key_row[1]->read(); + if ((m_input_port_select & 0x04) == 0) ret &= m_key_row[2]->read(); + if ((m_input_port_select & 0x08) == 0) ret &= m_key_row[3]->read(); + if ((m_input_port_select & 0x10) == 0) ret &= m_key_row[4]->read(); + + return ret; +} + +uint8_t royalmah_state::player_2_port_r() +{ + int ret = (m_key_row[5]->read() & 0xc0) | 0x3f; + + if ((m_input_port_select & 0x01) == 0) ret &= m_key_row[5]->read(); + if ((m_input_port_select & 0x02) == 0) ret &= m_key_row[6]->read(); + if ((m_input_port_select & 0x04) == 0) ret &= m_key_row[7]->read(); + if ((m_input_port_select & 0x08) == 0) ret &= m_key_row[8]->read(); + if ((m_input_port_select & 0x10) == 0) ret &= m_key_row[9]->read(); + + return ret; +} + + + +uint8_t royalmah_prgbank_state::majs101b_dsw_r() +{ + switch (m_dsw_select) + { + case 0x00: return m_dsw[2]->read(); + case 0x20: return m_dsw[3]->read(); + case 0x40: return m_dsw[1]->read(); + } + return 0; +} + + + +uint8_t royalmah_prgbank_state::suzume_dsw_r() +{ + if (m_suzume_bank & 0x40) + { + return m_suzume_bank; + } + else + { + switch (m_suzume_bank) + { + case 0x08: return m_dsw[3]->read(); + case 0x10: return m_dsw[2]->read(); + case 0x18: return m_dsw[1]->read(); + } + return 0; + } +} + +void royalmah_prgbank_state::tahjong_bank_w(uint8_t data) +{ + m_mainbank->set_entry(data & 0x01); +} + +void royalmah_prgbank_state::chalgirl_bank_w(uint8_t data) // TODO: verify behaviour by finishing the game +{ + logerror("chalgirl_bank_w: %02x\n", data); + + // bit 7: only set at start up, then always 0? + // bit 6: always set? + // bit 5, 4: always 0? + // bit 3: always set? + // bit 2, 1, 0: ROM bank? + + m_mainbank->set_entry(data & 0x07); +} + +void royalmah_prgbank_state::mjyarou_bank_w(offs_t offset, uint8_t data) // TODO: taken from jongkyo.cpp, verify +{ + uint8_t mask = 1 << (offset >> 1); + + m_mjyarou_bank &= ~mask; + + if (offset & 1) + m_mjyarou_bank |= mask; + + m_mainbank->set_entry(m_mjyarou_bank); + + if (m_mainopbank) + m_mainopbank->set_entry(m_mjyarou_bank); +} + +void royalmah_prgbank_state::suzume_bank_w(uint8_t data) +{ + m_suzume_bank = data; + + logerror("%04x: bank %02x\n", m_maincpu->pc(), data); + + // bits 6, 4 and 3 used for something input related? + + m_mainbank->set_entry(data & 0x07); +} + +void royalmah_prgbank_state::jongshin_bank_w(uint8_t data) +{ + logerror("%04x: bank %02x\n", m_maincpu->pc(), data); + + m_mainbank->set_entry((data & 0x07) >> 1); +} + +void royalmah_prgbank_state::mjapinky_bank_w(uint8_t data) +{ + m_mainbank->set_entry(data & 0x0f); +} + +void royalmah_prgbank_state::mjapinky_palbank_w(uint8_t data) +{ + m_flip_screen = (data & 4) >> 2; + m_palette_base = (data >> 3) & 0x01; + machine().bookkeeping().coin_counter_w(0, data & 2); // in + machine().bookkeeping().coin_counter_w(1, data & 1); // out +} + +uint8_t royalmah_prgbank_state::mjapinky_dsw_r() +{ + if (m_mainbank->entry() == 0x0e) + return m_dsw[2]->read(); + else + { + uint8_t *ptr = (uint8_t*)(m_mainbank->base()); + return ptr[0]; + } +} + +void royalmah_prgbank_state::tontonb_bank_w(uint8_t data) +{ + logerror("%04x: bank %02x\n", m_maincpu->pc(), data); + + if (data == 0) return; // tontonb fix? + + m_mainbank->set_entry(data & 0x0f); +} + + +// bits 5 and 6 seem to affect which DIP switch to read in 'majs101b' +void royalmah_prgbank_state::dynax_bank_w(uint8_t data) +{ +//logerror("%04x: bank %02x\n", m_maincpu->pc(), data); + + m_dsw_select = data & 0x60; + + m_mainbank->set_entry(data & 0x1f); +} + +uint8_t royalmah_prgbank_state::daisyari_dsw_r() +{ + switch (m_dsw_select) + { + case 0x00: return m_dsw[3]->read(); + case 0x04: return m_dsw[0]->read(); + case 0x08: return m_dsw[1]->read(); + case 0x0c: return m_dsw[2]->read(); + } + + return 0; +} + +void royalmah_prgbank_state::daisyari_bank_w(uint8_t data) +{ + m_dsw_select = (data & 0xc); + + // logerror ("daisyari_bank_w: %08x %02x\n", address, data); + + m_mainbank->set_entry(((data & 0x30) >> 3) | (data & 0x01)); + + // bit 1 used too but unknown purpose. +} + +uint8_t royalmah_prgbank_state::mjclub_dsw_r() +{ + switch (m_dsw_select) + { +// case 0x00: return m_dsw[3]->read(); + case 0x40: return m_dsw[1]->read(); + case 0x80: return m_dsw[2]->read(); + case 0xc0: return m_dsw[3]->read(); + } + + return 0; +} + +void royalmah_prgbank_state::mjclub_bank_w(uint8_t data) +{ + m_dsw_select = data & 0xc0; + + m_mainbank->set_entry(data & 0x0f); + + // bit 5 used too but unknown purpose. +} + + +void royalmah_state::royalmah_map(address_map &map) +{ + map(0x0000, 0x6fff).rom().nopw(); + map(0x7000, 0x7fff).ram().share("nvram"); + map(0x8000, 0xffff).writeonly().share(m_videoram); +} + +void royalmah_prgbank_state::royalmah_banked_map(address_map &map) +{ + royalmah_map(map); + + map(0x8000, 0xffff).bankr(m_mainbank); +} + +void royalmah_prgbank_state::mjapinky_map(address_map &map) +{ + map(0x0000, 0x6fff).rom().nopw(); + map(0x7000, 0x77ff).ram().share("nvram"); + map(0x7800, 0x7fff).ram(); + map(0x8000, 0xffff).bankr(m_mainbank); + map(0x8000, 0xffff).writeonly().share(m_videoram); + map(0x8000, 0x8000).r(FUNC(royalmah_prgbank_state::mjapinky_dsw_r)); +} + +void royalmah_prgbank_state::tahjong_map(address_map &map) +{ + map(0x0000, 0x3fff).rom().nopw(); + map(0x4000, 0x6fff).bankr(m_mainbank); + map(0x7000, 0x7fff).ram().share("nvram"); + map(0x8000, 0xffff).writeonly().share(m_videoram); +} + +void royalmah_prgbank_state::chalgirl_map(address_map &map) // TODO: guesswork, needs verifying +{ + map(0x0000, 0x6bff).rom().nopw(); + map(0x6c00, 0x6fff).bankr(m_mainbank); + map(0x7000, 0x7fff).ram().share("nvram"); + map(0x8000, 0xffff).rom(); + map(0x8000, 0xffff).writeonly().share(m_videoram); +} + +void royalmah_prgbank_state::mjsiyoub_map(address_map &map) +{ + map(0x0000, 0x6bff).rom().nopw(); + map(0x6c00, 0x6fff).bankr(m_mainbank); + map(0x7000, 0x77ff).ram().share("nvram"); + map(0x7800, 0x7fff).rom().nopw(); + map(0x8000, 0xffff).nopr().writeonly().share(m_videoram); +} + +void royalmah_prgbank_state::mjsenka_opcodes_map(address_map &map) +{ + map(0x0000, 0x6bff).rom().region("decrypted", 0); + map(0x6c00, 0x6fff).bankr(m_mainopbank); + map(0x8000, 0xffff).rom().region("maincpu", 0x8000); +} + +void royalmah_state::ippatsu_map(address_map &map) +{ + royalmah_map(map); + + map(0x8000, 0xbfff).mirror(0x4000).rom(); +} + +void royalmah_state::seljan_map(address_map &map) +{ + map(0x0000, 0x8fff).rom().nopw(); + map(0xe000, 0xefff).ram().share("nvram"); +} + +void royalmah_prgbank_state::ichiban_map(address_map &map) +{ + map(0x0000, 0x6fff).rom().region("maincpu", 0x10000); + map(0x7000, 0x7fff).ram().share("nvram"); + map(0x8000, 0xffff).bankr(m_mainbank); + map(0x8000, 0xffff).writeonly().share(m_videoram); +} + +void royalmah_prgbank_state::ichiban_opcodes_map(address_map &map) +{ + map(0x0000, 0x6fff).rom().region("maincpu", 0); + map(0x8000, 0xffff).rom().region("maincpu", 0x8000); +} + +void royalmah_prgbank_state::pongboo2_map(address_map &map) +{ + map(0x0000, 0x6fff).rom().region("maincpu", 0); + map(0x7000, 0x7fff).ram().share("nvram"); + map(0x8000, 0xffff).bankr(m_mainbank); // TODO: proper range for banked ROM + map(0x8000, 0xffff).writeonly().share(m_videoram); +} + +void royalmah_prgbank_state::pongboo2_opcodes_map(address_map &map) +{ + map(0x0000, 0x6fff).rom().region("maincpu", 0x10000); + map(0x7000, 0x7fff).ram().share("nvram"); + map(0x8000, 0xffff).rom().region("maincpu", 0x18000); +} + +void royalmah_state::royalmah_iomap(address_map &map) +{ + map.global_mask(0xff); + map(0x01, 0x01).r(m_ay, FUNC(ay8910_device::data_r)); + map(0x02, 0x03).w(m_ay, FUNC(ay8910_device::data_address_w)); + map(0x10, 0x10).portr("DSW1").w(FUNC(royalmah_state::royalmah_palbank_w)); + map(0x11, 0x11).portr("SYSTEM").w(FUNC(royalmah_state::input_port_select_w)); +} + +void royalmah_state::ippatsu_iomap(address_map &map) +{ + map.global_mask(0xff); + map(0x01, 0x01).r(m_ay, FUNC(ay8910_device::data_r)); + map(0x02, 0x03).w(m_ay, FUNC(ay8910_device::data_address_w)); + map(0x10, 0x10).portr("DSW1").w(FUNC(royalmah_state::royalmah_palbank_w)); + map(0x11, 0x11).portr("SYSTEM").w(FUNC(royalmah_state::input_port_select_w)); + map(0x12, 0x12).portr("DSW2"); + map(0x13, 0x13).portr("DSW3"); +} + +void royalmah_state::janyoup2_iomap(address_map &map) +{ + ippatsu_iomap(map); + + map(0x20, 0x20).w("crtc", FUNC(mc6845_device::address_w)); + map(0x21, 0x21).w("crtc", FUNC(mc6845_device::register_w)); +} + +void royalmah_prgbank_state::chalgirl_iomap(address_map &map) +{ + royalmah_iomap(map); + + map(0x10, 0x10).w(FUNC(royalmah_prgbank_state::mjderngr_coin_w)); + map(0x40, 0x40).w(FUNC(royalmah_prgbank_state::chalgirl_bank_w)); +} + +void royalmah_state::seljan_iomap(address_map &map) +{ + map(0x0001, 0x0001).mirror(0x7f00).r(m_ay, FUNC(ay8910_device::data_r)); + map(0x0002, 0x0003).mirror(0x7f00).w(m_ay, FUNC(ay8910_device::data_address_w)); + map(0x0010, 0x0010).mirror(0x7f00).portr("DSW1").w(FUNC(royalmah_state::royalmah_palbank_w)); + map(0x0011, 0x0011).mirror(0x7f00).portr("SYSTEM").w(FUNC(royalmah_state::input_port_select_w)); + map(0x0012, 0x0012).mirror(0x7f00).portr("DSW2").w("crtc", FUNC(mc6845_device::address_w)); + map(0x0013, 0x0013).mirror(0x7f00).portr("DSW3").w("crtc", FUNC(mc6845_device::register_w)); + + // TODO: following actually starts at 0x8000, needs custom 6845 routine because it uses start address register. + map(0x7e00, 0xffff).ram().share(m_videoram); +} + +void royalmah_prgbank_state::tahjong_iomap(address_map &map) +{ + map.global_mask(0xff); + map(0x01, 0x01).r(m_ay, FUNC(ay8910_device::data_r)); + map(0x02, 0x03).w(m_ay, FUNC(ay8910_device::data_address_w)); + map(0x10, 0x10).portr("DSW1").w(FUNC(royalmah_prgbank_state::royalmah_palbank_w)); + map(0x11, 0x11).portr("SYSTEM").w(FUNC(royalmah_prgbank_state::input_port_select_w)); + map(0x12, 0x12).w(FUNC(royalmah_prgbank_state::tahjong_bank_w)); + map(0x13, 0x13).portr("DSW2"); +} + +void royalmah_prgbank_state::suzume_iomap(address_map &map) +{ + map.global_mask(0xff); + map(0x01, 0x01).r(m_ay, FUNC(ay8910_device::data_r)); + map(0x02, 0x03).w(m_ay, FUNC(ay8910_device::data_address_w)); + map(0x10, 0x10).portr("DSW1").w(FUNC(royalmah_prgbank_state::royalmah_palbank_w)); + map(0x11, 0x11).portr("SYSTEM").w(FUNC(royalmah_prgbank_state::input_port_select_w)); + map(0x80, 0x80).r(FUNC(royalmah_prgbank_state::suzume_dsw_r)); + map(0x81, 0x81).w(FUNC(royalmah_prgbank_state::suzume_bank_w)); +} + +void royalmah_prgbank_state::jongshin_iomap(address_map &map) +{ + map.global_mask(0xff); + map(0x01, 0x01).r(m_ay, FUNC(ay8910_device::data_r)); + map(0x02, 0x03).w(m_ay, FUNC(ay8910_device::data_address_w)); + map(0x10, 0x10).portr("DSW1").w(FUNC(royalmah_prgbank_state::royalmah_palbank_w)); + map(0x11, 0x11).portr("SYSTEM").w(FUNC(royalmah_prgbank_state::input_port_select_w)); + // map(0x80, 0x80).w(FUNC(royalmah_prgbank_state::???)); // set to 1 at start-up, then never changed? + map(0x81, 0x81).portr("DSW2"); + map(0x82, 0x82).portr("DSW3"); + map(0xc0, 0xc0).w(FUNC(royalmah_prgbank_state::jongshin_bank_w)); +} + +void royalmah_prgbank_state::rkjanoh2_iomap(address_map &map) +{ + map.global_mask(0xff); + map(0x01, 0x01).r(m_ay, FUNC(ay8910_device::data_r)); + map(0x02, 0x03).w(m_ay, FUNC(ay8910_device::data_address_w)); + map(0x10, 0x10).portr("DSW1").w(FUNC(royalmah_prgbank_state::mjderngr_coin_w)); + map(0x11, 0x11).portr("SYSTEM").w(FUNC(royalmah_prgbank_state::input_port_select_w)); + map(0x50, 0x55).w(FUNC(royalmah_prgbank_state::mjyarou_bank_w)); +} + +void royalmah_prgbank_state::mjyarou_iomap(address_map &map) +{ + rkjanoh2_iomap(map); + + map(0x12, 0x12).portr("DSW2"); +} + +void royalmah_prgbank_state::mjsiyoub_iomap(address_map &map) +{ + royalmah_iomap(map); + + map(0x13, 0x13).portr("DSW2"); + map(0x40, 0x49).w(FUNC(royalmah_prgbank_state::mjyarou_bank_w)); +} + +void royalmah_prgbank_state::ichiban_iomap(address_map &map) +{ + map.global_mask(0xff); + map(0x01, 0x01).r("aysnd", FUNC(ym2149_device::data_r)); + map(0x02, 0x03).w("aysnd", FUNC(ym2149_device::data_address_w)); + map(0x10, 0x10).portr("DSW-A").w(FUNC(royalmah_prgbank_state::mjderngr_coin_w)); + map(0x11, 0x11).portr("SYSTEM").w(FUNC(royalmah_prgbank_state::input_port_select_w)); + map(0x12, 0x12).portr("DSW-B").lw8(NAME([this] (uint8_t data) { m_mainbank->set_entry(data); })); // TODO: only seems to write 0x00, 0x01, 0x02 and 0x04. How does the banking really work? + map(0x13, 0x13).portr("DSW-C"); + map(0x14, 0x14).portr("DSW-D").lw8(NAME([this] (uint8_t data) { m_palette_base = data & 0x1f; })); // TODO: also uses bits 5 and 6 + map(0x16, 0x17).w("ymsnd", FUNC(ym2413_device::write)); +} + +void royalmah_prgbank_state::pongboo2_iomap(address_map &map) // TODO: banking, inputs +{ + map.global_mask(0xff); + // map(0x50, 0x50) // reads P1 inputs from here, but active high / different from other games? + // map(0x51, 0x51) // reads P2 inputs from here, but active high / different from other games? + // map(0x80, 0x80).w // ?? + map(0x81, 0x81).w(FUNC(royalmah_prgbank_state::input_port_select_w)); // 0x01, 0x02, 0x04, 0x08, 0x10 + // map(0x82, 0x82).w // ?? + // map(0x84, 0x84).w // ?? + // map(0x91, 0x91).r // ?? + map(0x9a, 0x9a).w("oki", FUNC(okim6295_device::write)); + // map(0xa0, 0xbf).w // something similar to jansou_colortable_w ? +} + +void royalmah_prgbank_state::dondenmj_iomap(address_map &map) +{ + map.global_mask(0xff); + map(0x01, 0x01).r(m_ay, FUNC(ay8910_device::data_r)); + map(0x02, 0x03).w(m_ay, FUNC(ay8910_device::data_address_w)); + map(0x10, 0x10).portr("DSW1").w(FUNC(royalmah_prgbank_state::royalmah_palbank_w)); + map(0x11, 0x11).portr("SYSTEM").w(FUNC(royalmah_prgbank_state::input_port_select_w)); + map(0x85, 0x85).portr("DSW2"); + map(0x86, 0x86).portr("DSW3"); + map(0x87, 0x87).w(FUNC(royalmah_prgbank_state::dynax_bank_w)); +} + +void royalmah_prgbank_state::makaijan_iomap(address_map &map) +{ + map.global_mask(0xff); + map(0x01, 0x01).r(m_ay, FUNC(ay8910_device::data_r)); + map(0x02, 0x03).w(m_ay, FUNC(ay8910_device::data_address_w)); + map(0x10, 0x10).portr("DSW1").w(FUNC(royalmah_prgbank_state::royalmah_palbank_w)); + map(0x11, 0x11).portr("SYSTEM").w(FUNC(royalmah_prgbank_state::input_port_select_w)); + map(0x84, 0x84).portr("DSW2"); + map(0x85, 0x85).portr("DSW3"); + map(0x86, 0x86).w(FUNC(royalmah_prgbank_state::dynax_bank_w)); +} + +void royalmah_prgbank_state::daisyari_iomap(address_map &map) +{ + map.global_mask(0xff); + map(0x01, 0x01).r(m_ay, FUNC(ay8910_device::data_r)); + map(0x02, 0x03).w(m_ay, FUNC(ay8910_device::data_address_w)); + map(0x10, 0x10).w(FUNC(royalmah_prgbank_state::royalmah_palbank_w)); + map(0x11, 0x11).portr("SYSTEM").w(FUNC(royalmah_prgbank_state::input_port_select_w)); + map(0xc0, 0xc0).rw(FUNC(royalmah_prgbank_state::daisyari_dsw_r), FUNC(royalmah_prgbank_state::daisyari_bank_w)); +} + +void royalmah_prgbank_state::mjclub_iomap(address_map &map) +{ + map.global_mask(0xff); + map(0x00, 0x00).rw(FUNC(royalmah_prgbank_state::mjclub_dsw_r), FUNC(royalmah_prgbank_state::mjclub_bank_w)); + map(0x01, 0x01).r(m_ay, FUNC(ay8910_device::data_r)); + map(0x02, 0x03).w(m_ay, FUNC(ay8910_device::data_address_w)); + map(0x10, 0x10).portr("DSW1").w(FUNC(royalmah_prgbank_state::royalmah_palbank_w)); + map(0x11, 0x11).portr("SYSTEM").w(FUNC(royalmah_prgbank_state::input_port_select_w)); +} + +void royalmah_prgbank_state::mjdiplob_iomap(address_map &map) +{ + map.global_mask(0xff); + map(0x01, 0x01).r(m_ay, FUNC(ay8910_device::data_r)); + map(0x02, 0x03).w(m_ay, FUNC(ay8910_device::data_address_w)); + map(0x10, 0x10).portr("DSW1").w(FUNC(royalmah_prgbank_state::royalmah_palbank_w)); + map(0x11, 0x11).portr("SYSTEM").w(FUNC(royalmah_prgbank_state::input_port_select_w)); + map(0x61, 0x61).w(FUNC(royalmah_prgbank_state::tontonb_bank_w)); + map(0x62, 0x62).portr("DSW2"); // DSW2 + map(0x63, 0x63).portr("DSW3"); // DSW3 +} + +void royalmah_prgbank_state::tontonb_iomap(address_map &map) +{ + map.global_mask(0xff); + map(0x01, 0x01).r(m_ay, FUNC(ay8910_device::data_r)); + map(0x02, 0x03).w(m_ay, FUNC(ay8910_device::data_address_w)); + map(0x10, 0x10).portr("DSW1").w(FUNC(royalmah_prgbank_state::royalmah_palbank_w)); + map(0x11, 0x11).portr("SYSTEM").w(FUNC(royalmah_prgbank_state::input_port_select_w)); + map(0x44, 0x44).w(FUNC(royalmah_prgbank_state::tontonb_bank_w)); + map(0x46, 0x46).portr("DSW2"); // DSW2 + map(0x47, 0x47).portr("DSW3"); // DSW3 +} + +void royalmah_prgbank_state::majs101b_iomap(address_map &map) +{ + map.global_mask(0xff); + map(0x01, 0x01).r(m_ay, FUNC(ay8910_device::data_r)); + map(0x02, 0x03).w(m_ay, FUNC(ay8910_device::data_address_w)); + map(0x10, 0x10).portr("DSW1").w(FUNC(royalmah_prgbank_state::royalmah_palbank_w)); + map(0x11, 0x11).portr("SYSTEM").w(FUNC(royalmah_prgbank_state::input_port_select_w)); + map(0x00, 0x00).rw(FUNC(royalmah_prgbank_state::majs101b_dsw_r), FUNC(royalmah_prgbank_state::dynax_bank_w)); +} + +void royalmah_prgbank_state::mjderngr_iomap(address_map &map) +{ + map.global_mask(0xff); + map(0x01, 0x01).r(m_ay, FUNC(ay8910_device::data_r)); + map(0x02, 0x03).w(m_ay, FUNC(ay8910_device::data_address_w)); +// map(0x10, 0x10).portr("DSW1"); + map(0x10, 0x10).w(FUNC(royalmah_prgbank_state::mjderngr_coin_w)); // palette bank is set separately + map(0x11, 0x11).portr("SYSTEM").w(FUNC(royalmah_prgbank_state::input_port_select_w)); + map(0x20, 0x20).w(FUNC(royalmah_prgbank_state::dynax_bank_w)); + map(0x40, 0x40).portr("DSW2"); + map(0x4c, 0x4c).portr("DSW1"); + map(0x60, 0x60).w(FUNC(royalmah_prgbank_state::mjderngr_palbank_w)); +} + +void royalmah_prgbank_state::mjapinky_iomap(address_map &map) +{ + map.global_mask(0xff); + map(0x00, 0x00).w(FUNC(royalmah_prgbank_state::mjapinky_bank_w)); + map(0x01, 0x01).r(m_ay, FUNC(ay8910_device::data_r)); + map(0x02, 0x03).w(m_ay, FUNC(ay8910_device::data_address_w)); + map(0x04, 0x04).portr("DSW2"); + map(0x10, 0x10).portr("DSW1").w(FUNC(royalmah_prgbank_state::mjapinky_palbank_w)); + map(0x11, 0x11).portr("SYSTEM").w(FUNC(royalmah_prgbank_state::input_port_select_w)); +} + +void royalmah_state::janoh_map(address_map &map) +{ + map(0x0000, 0x6fff).rom().nopw(); + map(0x7000, 0x7fff).ram().share("nvram"); + map(0x8000, 0xffff).writeonly().share(m_videoram); +} + + +/* this CPU makes little sense - what is it for? why so many addresses accessed? + -- it puts a value in shared ram to allow the main CPU to boot, then.. ? +*/ +void royalmah_state::janoh_sub_map(address_map &map) +{ + map(0x0000, 0x3fff).rom(); + map(0x4100, 0x413f).ram(); + map(0x6000, 0x607f).ram(); + map(0x7000, 0x7000).nopr(); + map(0x7200, 0x7200).nopw(); + map(0xf000, 0xffff).ram().share("nvram"); +} + +void royalmah_state::janoh_sub_iomap(address_map &map) +{ +} + +void royalmah_prgbank_state::mjsiyoub_audio_prg_map(address_map &map) +{ + map(0x0000, 0xbfff).rom(); +} + + +/**************************************************************************** + Jansou +****************************************************************************/ + +void royalmah_state::jansou_dsw_sel_w(uint8_t data) +{ + m_dsw_select = data; +} + +uint8_t royalmah_state::jansou_dsw_r() +{ + switch (m_dsw_select & 7) + { + case 1: return m_dsw[0]->read(); + case 2: return m_dsw[1]->read(); + case 4: return m_dsw[2]->read(); + } + + return 0xff; +} + +void royalmah_state::jansou_colortable_w(offs_t offset, uint8_t data) +{ + m_jansou_colortable[offset] = data; +} + +void royalmah_state::jansou_6400_w(uint8_t data) +{ + m_gfx_adr_l = data; + m_gfx_adr = m_gfx_adr_h * 0x10000 + m_gfx_adr_m * 0x100 + m_gfx_adr_l; +} + +void royalmah_state::jansou_6401_w(uint8_t data) +{ + m_gfx_adr_m = data; + m_gfx_adr = m_gfx_adr_h * 0x10000 + m_gfx_adr_m * 0x100 + m_gfx_adr_l; +} + +void royalmah_state::jansou_6402_w(uint8_t data) +{ + m_gfx_adr_h = data & 1; + m_gfx_adr = m_gfx_adr_h * 0x10000 + m_gfx_adr_m * 0x100 + m_gfx_adr_l; +} + +uint8_t royalmah_state::jansou_6403_r() +{ + int d0 = m_gfx_rom[m_gfx_adr]; + int d1 = m_gfx_rom[m_gfx_adr + 1]; + int c0 = m_jansou_colortable[d1 & 0x0f] & 0x0f; + int c1 = m_jansou_colortable[(d1 & 0xf0) >> 4] >> 4; + int c2 = m_jansou_colortable[d0 & 0x0f] & 0x0f; + int c3 = m_jansou_colortable[(d0 & 0xf0) >> 4] >> 4; + + m_gfx_adr += 2; + + m_gfxdata0 = (c3 & 1) << 0 | ((c2 & 1) << 1) | ((c1 & 1) << 2) | ((c0 & 1) << 3) + | ((c3 & 2) << 3) | ((c2 & 2) << 4) | ((c1 & 2) << 5) | ((c0 & 2) << 6); + m_gfxdata1 = (c3 & 4) >> 2 | ((c2 & 4) >> 1) | (c1 & 4) | ((c0 & 4) << 1) + | ((c3 & 8) << 1) | ((c2 & 8) << 2) | ((c1 & 8) << 3) | ((c0 & 8) << 4); + + return 0xff; +} + +uint8_t royalmah_state::jansou_6404_r() +{ + return m_gfxdata0; +} + +uint8_t royalmah_state::jansou_6405_r() +{ + return m_gfxdata1; +} + +void royalmah_state::jansou_sound_w(uint8_t data) +{ + m_soundlatch->write(data); + m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); +} + +void royalmah_state::jansou_map(address_map &map) +{ + map(0x0000, 0x3fff).rom().nopw(); + + map(0x6000, 0x600f).w(FUNC(royalmah_state::jansou_colortable_w)); + map(0x6400, 0x6400).w(FUNC(royalmah_state::jansou_6400_w)); + map(0x6401, 0x6401).w(FUNC(royalmah_state::jansou_6401_w)); + map(0x6402, 0x6402).w(FUNC(royalmah_state::jansou_6402_w)); + map(0x6403, 0x6403).r(FUNC(royalmah_state::jansou_6403_r)); + map(0x6404, 0x6404).r(FUNC(royalmah_state::jansou_6404_r)); + map(0x6405, 0x6405).r(FUNC(royalmah_state::jansou_6405_r)); + map(0x6406, 0x6406).w(FUNC(royalmah_state::jansou_dsw_sel_w)); + map(0x6407, 0x6407).r(FUNC(royalmah_state::jansou_dsw_r)); + map(0x6800, 0x6800).w(FUNC(royalmah_state::jansou_sound_w)); + + map(0x7000, 0x77ff).ram().share("nvram"); + map(0x8000, 0xffff).writeonly().share(m_videoram); +} + +void royalmah_state::jansou_sub_map(address_map &map) +{ + map(0x0000, 0xffff).rom().nopw(); // tries to write to the stack at irq generation +} + + +void royalmah_state::jansou_sub_iomap(address_map &map) +{ + map.global_mask(0xff); + map(0x00, 0x00).r(m_soundlatch, FUNC(generic_latch_8_device::read)).w("dac", FUNC(dac_byte_interface::data_w)); +} + + +/**************************************************************************** + Janputer '96 +****************************************************************************/ + +void royalmah_prgbank_state::janptr96_map(address_map &map) +{ + map(0x0000, 0x5fff).rom(); + map(0x6000, 0x6fff).bankrw("bank3").share("nvram"); // nvram + map(0x7000, 0x7fff).bankrw(m_rambank); // banked nvram + map(0x8000, 0xffff).bankr(m_mainbank); + map(0x8000, 0xffff).writeonly().share(m_videoram); +} + +void royalmah_prgbank_state::janptr96_dswsel_w(uint8_t data) +{ + // 0x20 = 0 -> hopper on + // 0x40 ? + m_dsw_select = data; +} + +uint8_t royalmah_prgbank_state::janptr96_dsw_r() +{ + uint8_t result = 0xff; + if (~m_dsw_select & 0x01) result &= m_dsw[3]->read(); + if (~m_dsw_select & 0x02) result &= m_dsw[2]->read(); + if (~m_dsw_select & 0x04) result &= m_dsw[1]->read(); + if (~m_dsw_select & 0x08) result &= m_dsw[0]->read(); + if (~m_dsw_select & 0x10) result &= m_dsw_top->read(); + return result; +} + +void royalmah_prgbank_state::janptr96_rombank_w(uint8_t data) +{ + m_mainbank->set_entry(data & 0x3f); +} + +void royalmah_prgbank_state::janptr96_rambank_w(uint8_t data) +{ + m_rambank->set_entry(data & 0x07); +} + +uint8_t royalmah_prgbank_state::janptr96_unknown_r() +{ + // 0x08 = 0 makes the game crash (e.g. in the m-ram test: nested interrupts?) + return 0xff; +} + +void royalmah_prgbank_state::janptr96_coin_counter_w(uint8_t data) +{ + m_flip_screen = (data & 4) >> 2; + machine().bookkeeping().coin_counter_w(0, data & 2); // in + machine().bookkeeping().coin_counter_w(1, data & 1); // out +} + +void royalmah_prgbank_state::janptr96_iomap(address_map &map) +{ + map.global_mask(0xff); + map(0x00, 0x00).w(FUNC(royalmah_prgbank_state::janptr96_rombank_w)); // BANK ROM Select + map(0x20, 0x20).rw(FUNC(royalmah_prgbank_state::janptr96_unknown_r), FUNC(royalmah_prgbank_state::janptr96_rambank_w)); + map(0x50, 0x50).w(FUNC(royalmah_prgbank_state::mjderngr_palbank_w)); + map(0x60, 0x6f).rw(m_rtc, FUNC(msm6242_device::read), FUNC(msm6242_device::write)); + map(0x81, 0x81).r(m_ay, FUNC(ay8910_device::data_r)); + map(0x82, 0x83).w(m_ay, FUNC(ay8910_device::data_address_w)); + map(0x93, 0x93).w(FUNC(royalmah_prgbank_state::input_port_select_w)); + map(0xd8, 0xd8).w(FUNC(royalmah_prgbank_state::janptr96_coin_counter_w)); + map(0xd9, 0xd9).portr("SYSTEM").nopw(); // second input select? +} + + +/**************************************************************************** + Mahjong If +****************************************************************************/ + +void royalmah_prgbank_state::mjifb_coin_counter_w(uint8_t data) +{ + m_flip_screen = ((data & 4) >> 2) ^ 1; + machine().bookkeeping().coin_counter_w(0, data & 2); // in + machine().bookkeeping().coin_counter_w(1, data & 1); // out +} + +void royalmah_prgbank_state::mjifb_map(address_map &map) +{ + map(0x0000, 0x6fff).rom(); + map(0x7000, 0x7fff).ram().share("nvram"); + map(0x8000, 0xffff).writeonly().share(m_videoram); + map(0x8000, 0xbfff).view(m_mainview); + m_mainview[0](0x8000, 0x8000).portr("DSW4"); + m_mainview[0](0x8200, 0x8200).portr("DSW3"); + m_mainview[0](0x8e00, 0x8e00).lw8(NAME([this] (uint8_t data) { m_palette_base = data & 0x1f; })); + m_mainview[0](0x9001, 0x9001).r(m_ay, FUNC(ay8910_device::data_r)); + m_mainview[0](0x9002, 0x9002).w(m_ay, FUNC(ay8910_device::data_w)); + m_mainview[0](0x9003, 0x9003).w(m_ay, FUNC(ay8910_device::address_w)); + m_mainview[0](0x9010, 0x9010).w(FUNC(royalmah_prgbank_state::mjifb_coin_counter_w)); + m_mainview[0](0x9011, 0x9011).portr("SYSTEM").w(FUNC(royalmah_prgbank_state::input_port_select_w)); + m_mainview[1](0x8000, 0xbfff).bankr(m_mainbank).lw8(NAME([this] (offs_t offset, uint8_t data) { m_videoram[offset] = data; })); + map(0xc000, 0xffff).rom(); +} + +uint8_t royalmah_prgbank_state::mjifb_p8_r() +{ + return 0xff; +} + +void royalmah_prgbank_state::mjifb_p3_w(uint8_t data) +{ + m_rombank = (m_rombank & 0x0f) | ((data & 0x0c) << 2); + m_mainbank->set_entry(m_rombank); +} +void royalmah_prgbank_state::mjifb_p4_w(uint8_t data) +{ + m_rombank = (m_rombank & 0xf0) | (data & 0x0f); + m_mainbank->set_entry(m_rombank); +} +void royalmah_prgbank_state::mjifb_p8_w(uint8_t data) +{ + m_mainview.select(BIT(data, 3)); +} + + +/**************************************************************************** + Mahjong Shinkirou Deja Vu +****************************************************************************/ + +void royalmah_prgbank_state::mjdejavu_map(address_map &map) +{ + map(0x0000, 0x6fff).rom(); + map(0x7000, 0x7fff).ram().share("nvram"); + map(0x8000, 0xffff).writeonly().share(m_videoram); + map(0x8000, 0xbfff).view(m_mainview); + m_mainview[0](0x8000, 0x8000).portr("DSW2"); + m_mainview[0](0x8001, 0x8001).portr("DSW1"); + m_mainview[0](0x8802, 0x8802).lw8(NAME([this] (uint8_t data) { m_palette_base = data & 0x1f; })); + m_mainview[0](0x9001, 0x9001).r(m_ay, FUNC(ay8910_device::data_r)); + m_mainview[0](0x9002, 0x9002).w(m_ay, FUNC(ay8910_device::data_w)); + m_mainview[0](0x9003, 0x9003).w(m_ay, FUNC(ay8910_device::address_w)); + m_mainview[0](0x9010, 0x9010).w(FUNC(royalmah_prgbank_state::janptr96_coin_counter_w)); + m_mainview[0](0x9011, 0x9011).portr("SYSTEM").w(FUNC(royalmah_prgbank_state::input_port_select_w)); + m_mainview[1](0x8000, 0xbfff).bankr(m_mainbank).lw8(NAME([this] (offs_t offset, uint8_t data) { m_videoram[offset] = data; })); + map(0xc000, 0xffff).rom(); +} + + +/**************************************************************************** + Mahjong Tensinhai +****************************************************************************/ + +uint8_t royalmah_prgbank_state::mjtensin_p3_r() +{ + return 0xff; +} + +void royalmah_prgbank_state::mjtensin_p4_w(uint8_t data) +{ + m_rombank = (m_rombank & 0xf0) | (data & 0x0f); + m_mainbank->set_entry(m_rombank); +} + +void royalmah_prgbank_state::mjtensin_6ff3_w(uint8_t data) +{ + m_rombank = (data << 4) | (m_rombank & 0x0f); + m_mainbank->set_entry(m_rombank); +} + +void royalmah_prgbank_state::mjtensin_map(address_map &map) +{ + map(0x0000, 0x5fff).rom(); + map(0x6000, 0x6fbf).ram(); + map(0x6fc1, 0x6fc1).r(m_ay, FUNC(ay8910_device::data_r)); + map(0x6fc2, 0x6fc3).w(m_ay, FUNC(ay8910_device::data_address_w)); + map(0x6fd0, 0x6fd0).w(FUNC(royalmah_prgbank_state::janptr96_coin_counter_w)); + map(0x6fd1, 0x6fd1).portr("SYSTEM").w(FUNC(royalmah_prgbank_state::input_port_select_w)); + map(0x6fe0, 0x6fef).rw(m_rtc, FUNC(msm6242_device::read), FUNC(msm6242_device::write)); + map(0x6ff0, 0x6ff0).rw(FUNC(royalmah_prgbank_state::janptr96_dsw_r), FUNC(royalmah_prgbank_state::janptr96_dswsel_w)); + map(0x6ff1, 0x6ff1).w(FUNC(royalmah_prgbank_state::mjderngr_palbank_w)); + map(0x6ff3, 0x6ff3).w(FUNC(royalmah_prgbank_state::mjtensin_6ff3_w)); + map(0x7000, 0x7fff).ram().share("nvram"); + map(0x8000, 0xffff).bankr(m_mainbank); + map(0x8000, 0xffff).writeonly().share(m_videoram); +} + +void royalmah_prgbank_state::majrjh_map(address_map &map) +{ + map(0x0000, 0x5fff).rom(); + map(0x6000, 0x7eff).ram().share("nvram"); + map(0x7fc1, 0x7fc1).r(m_ay, FUNC(ay8910_device::data_r)); + map(0x7fc2, 0x7fc3).w(m_ay, FUNC(ay8910_device::data_address_w)); + map(0x7fd0, 0x7fd0).w(FUNC(royalmah_prgbank_state::janptr96_coin_counter_w)); + map(0x7fd1, 0x7fd1).portr("SYSTEM").w(FUNC(royalmah_prgbank_state::input_port_select_w)); + map(0x7fe0, 0x7fe0).w(FUNC(royalmah_prgbank_state::mjtensin_6ff3_w)); + map(0x7fe2, 0x7fe2).w(FUNC(royalmah_prgbank_state::mjderngr_palbank_w)); + map(0x7fe3, 0x7fe3).rw(FUNC(royalmah_prgbank_state::janptr96_dsw_r), FUNC(royalmah_prgbank_state::janptr96_dswsel_w)); + map(0x7ff0, 0x7fff).rw(m_rtc, FUNC(msm6242_device::read), FUNC(msm6242_device::write)); + map(0x8000, 0xffff).bankr(m_mainbank); + map(0x8000, 0xffff).writeonly().share(m_videoram); +} + +/**************************************************************************** + Mahjong Cafe Time +****************************************************************************/ + +void royalmah_prgbank_state::cafetime_p4_w(uint8_t data) +{ + m_rombank = (m_rombank & 0xf0) | (data & 0x0f); + m_mainbank->set_entry(m_rombank); +} + +void royalmah_prgbank_state::cafetime_p3_w(uint8_t data) +{ + m_rombank = (m_rombank & 0x0f) | ((data & 0x0c) << 2); + m_mainbank->set_entry(m_rombank); +} + +void royalmah_prgbank_state::cafedoll_p6_w(uint8_t data) +{ + m_mjvegas_p5_val &= 0x0f; + + if (data & 0x01) + m_mjvegas_p5_val |= (1 << 4); +} + +void royalmah_prgbank_state::cafedoll_p7_w(uint8_t data) +{ + m_mjvegas_p5_val &= 0xf0; + + if (data & 0x0f) + m_mjvegas_p5_val |= (1 << 3); +} + +void royalmah_prgbank_state::cafetime_dsw_w(uint8_t data) +{ + m_dsw_select = data; +} +uint8_t royalmah_prgbank_state::cafetime_dsw_r() +{ + switch (m_dsw_select) + { + case 0x00: return m_dsw[0]->read(); + case 0x01: return m_dsw[1]->read(); + case 0x02: return m_dsw[2]->read(); + case 0x03: return m_dsw[3]->read(); + case 0x04: return m_dsw_top->read(); + } + logerror("%04X: unmapped dsw read %02X\n", m_maincpu->pc(), m_dsw_select); + return 0xff; +} + +uint8_t royalmah_prgbank_state::cafetime_7fe4_r() +{ + return 0xff; +} +void royalmah_prgbank_state::cafetime_7fe3_w(uint8_t data) +{ +// logerror("7fe3_w: %02x", data); +} + +void royalmah_prgbank_state::cafetime_map(address_map &map) +{ + map(0x0000, 0x5fff).rom(); + map(0x6000, 0x7eff).ram().share("nvram"); + map(0x7fc1, 0x7fc1).r(m_ay, FUNC(ay8910_device::data_r)); + map(0x7fc2, 0x7fc3).w(m_ay, FUNC(ay8910_device::data_address_w)); + map(0x7fd0, 0x7fd0).w(FUNC(royalmah_prgbank_state::janptr96_coin_counter_w)); + map(0x7fd1, 0x7fd1).portr("SYSTEM").nopw(); + map(0x7fd3, 0x7fd3).w(FUNC(royalmah_prgbank_state::input_port_select_w)); + map(0x7fe0, 0x7fe0).r(FUNC(royalmah_prgbank_state::cafetime_dsw_r)); + map(0x7fe1, 0x7fe1).w(FUNC(royalmah_prgbank_state::cafetime_dsw_w)); + map(0x7fe2, 0x7fe2).w(FUNC(royalmah_prgbank_state::mjderngr_palbank_w)); + map(0x7fe3, 0x7fe3).w(FUNC(royalmah_prgbank_state::cafetime_7fe3_w)); + map(0x7fe4, 0x7fe4).r(FUNC(royalmah_prgbank_state::cafetime_7fe4_r)); + map(0x7ff0, 0x7fff).rw(m_rtc, FUNC(msm6242_device::read), FUNC(msm6242_device::write)); + map(0x8000, 0xffff).bankr(m_mainbank); + map(0x8000, 0xffff).writeonly().share(m_videoram); +} + + +/**************************************************************************** + Mahjong Cafe Paradise +****************************************************************************/ + +void royalmah_prgbank_state::cafepara_map(address_map &map) +{ + map(0x0000, 0x5fff).rom(); + 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).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); + map(0x8000, 0xffff).writeonly().share(m_videoram); + map(0xfff0, 0xffff).rw(m_rtc, FUNC(msm6242_device::read), FUNC(msm6242_device::write)); // TODO: this should probably be behind a view +} + + +/**************************************************************************** + Mahjong Vegas +****************************************************************************/ +uint8_t royalmah_prgbank_state::mjvegas_p5_r() +{ + return m_mjvegas_p5_val; +} + +void royalmah_prgbank_state::mjvegas_p6_w(uint8_t data) +{ + m_mjvegas_p5_val &= 0x0f; + + if (data & 0x07) + m_mjvegas_p5_val |= (1 << 4); +} + +void royalmah_prgbank_state::mjvegas_p7_w(uint8_t data) +{ + m_mjvegas_p5_val &= 0xf0; + + if (data & 0x07) + m_mjvegas_p5_val |= (1 << 3); +} +void royalmah_prgbank_state::mjvegasa_p4_w(uint8_t data) +{ + m_rombank = (m_rombank & 0xf8) | ((data & 0x0e) >> 1); + m_mainbank->set_entry(m_rombank); +} +void royalmah_prgbank_state::mjvegasa_p3_w(uint8_t data) +{ + m_rombank = (m_rombank & 0xf7) | ((data & 0x04) << 1); + m_mainbank->set_entry(m_rombank); +} +void royalmah_prgbank_state::mjvegasa_rombank_w(uint8_t data) +{ + m_rombank = (m_rombank & 0x0f) | ((data & 0x0f) << 4); + m_mainbank->set_entry(m_rombank); +} + +uint8_t royalmah_prgbank_state::mjvegasa_rom_io_r(offs_t offset) +{ + if ((m_rombank & 0x70) != 0x70) + { + uint8_t *ptr = (uint8_t*)(m_mainbank->base()); + return ptr[offset]; + } + + return m_rtc->read(offset & 0xf); + + //logerror("mjvegasa_rom_io_r: %04X: unmapped IO read at %04X\n", m_maincpu->pc(), offset); + //return 0xff; +} + +void royalmah_prgbank_state::mjvegasa_rom_io_w(offs_t offset, uint8_t data) +{ + if ((m_rombank & 0x70) != 0x70) + { + m_videoram[offset] = data; + return; + } + + offset += 0x8000; + + if((offset & 0xfff0) == 0x8000) + { + m_rtc->write(offset & 0xf, data); + return; + } + + logerror("mjvegasa_rom_io_w: %04X: unmapped IO write at %04X = %02X\n", m_maincpu->pc(), offset, data); +} + +void royalmah_prgbank_state::mjvegasa_coin_counter_w(uint8_t data) +{ + m_flip_screen = (data & 4) >> 2; + machine().bookkeeping().coin_counter_w(0, data & 2); // in + machine().bookkeeping().coin_counter_w(1, data & 1); // out +} + +// hopper? +void royalmah_prgbank_state::mjvegasa_12400_w(uint8_t data) +{ + // bits 0 & 1 +// logerror("12400_w: %02x", data); +} +uint8_t royalmah_prgbank_state::mjvegasa_12500_r() +{ + // bits 0 & 2 + return 0xff; +} + +void royalmah_prgbank_state::mjvegasa_map(address_map &map) +{ + map(0x00000, 0x05fff).rom(); + map(0x06000, 0x07fff).ram().share("nvram"); + map(0x08000, 0x0ffff).bankr(m_mainbank).w(FUNC(royalmah_prgbank_state::mjvegasa_rom_io_w)).share(m_videoram); + map(0x08000, 0x0800f).r(FUNC(royalmah_prgbank_state::mjvegasa_rom_io_r)); + + map(0x10001, 0x10001).r(m_ay, FUNC(ay8910_device::data_r)); + map(0x10002, 0x10003).w(m_ay, FUNC(ay8910_device::data_address_w)); + map(0x10010, 0x10010).w(FUNC(royalmah_prgbank_state::mjvegasa_coin_counter_w)); + map(0x10011, 0x10011).portr("SYSTEM").w(FUNC(royalmah_prgbank_state::input_port_select_w)); + map(0x10013, 0x10013).w(FUNC(royalmah_prgbank_state::input_port_select_w)); + + map(0x12000, 0x12000).w(FUNC(royalmah_prgbank_state::mjvegasa_rombank_w)); + map(0x12100, 0x12100).r(FUNC(royalmah_prgbank_state::cafetime_dsw_r)); + map(0x12200, 0x12200).w(FUNC(royalmah_prgbank_state::cafetime_dsw_w)); + map(0x12300, 0x12300).w(FUNC(royalmah_prgbank_state::mjderngr_palbank_w)); + map(0x12400, 0x12400).w(FUNC(royalmah_prgbank_state::mjvegasa_12400_w)); + map(0x12500, 0x12500).r(FUNC(royalmah_prgbank_state::mjvegasa_12500_r)); +} + + + +static INPUT_PORTS_START( mjctrl1 ) + 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_MODIFY("KEY2") // P1 IN2 + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_MODIFY("KEY3") // P1 IN3 + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + 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_MODIFY("KEY6") // P2 IN1 + PORT_BIT( 0xc0, 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_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_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 + + +static INPUT_PORTS_START( mjctrl2 ) + PORT_INCLUDE( mjctrl1 ) + + PORT_MODIFY("KEY0") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_CODE(KEYCODE_4) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) +INPUT_PORTS_END + +static INPUT_PORTS_START( royalmah ) + PORT_INCLUDE( mjctrl1 ) + + PORT_MODIFY("KEY5") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) // "COIN2" + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) // "COIN1", but not working + + PORT_START("DSW1") // DSW (inport $10) + PORT_DIPNAME( 0x0f, 0x0f, "Pay Out Rate" ) + 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, 0x30, "Maximum Bet" ) + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x10, "5" ) + PORT_DIPSETTING( 0x20, "10" ) + PORT_DIPSETTING( 0x30, "20" ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( tahjong ) + PORT_INCLUDE( mjctrl1 ) + + PORT_MODIFY("KEY5") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) // "COIN2" + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) // "COIN1", but not working + + PORT_START("DSW1") // port $10 + PORT_DIPNAME( 0x07, 0x07, "SWB:1,2,3" ) PORT_DIPLOCATION("SWB:1,2,3") // only with bets on + PORT_DIPSETTING( 0x00, "0" ) + PORT_DIPSETTING( 0x01, "1" ) + PORT_DIPSETTING( 0x02, "2" ) + PORT_DIPSETTING( 0x03, "3" ) + PORT_DIPSETTING( 0x04, "4" ) + PORT_DIPSETTING( 0x05, "5" ) + PORT_DIPSETTING( 0x06, "5 (6)" ) + PORT_DIPSETTING( 0x07, "5 (7)" ) + PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SWB:4") + PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SWB:5") + PORT_DIPNAME( 0x60, 0x60, "Winnings" ) PORT_DIPLOCATION("SWB:6,7") + PORT_DIPSETTING( 0x40, "30 30 10 10 5 5 1 1" ) + PORT_DIPSETTING( 0x20, "32 24 16 12 8 4 2 1" ) + PORT_DIPSETTING( 0x60, "100 50 30 10 5 4 3 2" ) + PORT_DIPSETTING( 0x00, "200 50 30 10 5 4 3 2" ) + PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SWB:8") + + PORT_START("DSW2") // port $13 + PORT_DIPNAME( 0x07, 0x07, "Pay Out Rate" ) PORT_DIPLOCATION("SWA:1,2,3") + PORT_DIPSETTING( 0x00, "50%" ) + PORT_DIPSETTING( 0x04, "62%" ) + PORT_DIPSETTING( 0x02, "68%" ) + PORT_DIPSETTING( 0x06, "71%" ) + PORT_DIPSETTING( 0x01, "75%" ) + PORT_DIPSETTING( 0x05, "78%" ) + PORT_DIPSETTING( 0x03, "81%" ) + PORT_DIPSETTING( 0x07, "90%" ) + PORT_DIPNAME( 0x18, 0x18, "Maximum Bet" ) PORT_DIPLOCATION("SWA:4,5") + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x08, "5" ) + PORT_DIPSETTING( 0x10, "10" ) + PORT_DIPSETTING( 0x18, "20" ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SWA:6") + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 1C_2C ) ) + PORT_DIPNAME( 0x40, 0x40, "Allow Bets" ) PORT_DIPLOCATION("SWA:7") + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x80, 0x80, "Note Rate" ) PORT_DIPLOCATION("SWA:8") + PORT_DIPSETTING( 0x00, "5" ) + PORT_DIPSETTING( 0x80, "10" ) +INPUT_PORTS_END + +static INPUT_PORTS_START( janyoup2 ) + PORT_INCLUDE( royalmah ) + + PORT_START("DSW2") // DSW (inport $12) + PORT_DIPNAME( 0x01, 0x01, "Unknown 1-0" ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, "Unknown 1-1" ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, "Unknown 1-2" ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, "Unknown 1-3" ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, "Unknown 1-4" ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, "Unknown 1-5" ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, "Unknown 1-6" ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Unknown 1-7" ) + 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( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, "Unknown 2-1" ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, "Unknown 2-2" ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, "Unknown 2-3" ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, "Unknown 2-4" ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + 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 ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( seljan ) + PORT_INCLUDE( royalmah ) + + PORT_START("DSW2") // DSW (inport $12) + PORT_DIPNAME( 0x01, 0x01, "Unknown 1-0" ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, "Unknown 1-1" ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, "Unknown 1-2" ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, "Unknown 1-3" ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, "Unknown 1-4" ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, "Unknown 1-5" ) // these two activate credit analyzer if they are off + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, "Unknown 1-6" ) // ^ + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Unknown 1-7" ) + 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( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, "Unknown 2-1" ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, "Unknown 2-2" ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, "Unknown 2-3" ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, "Unknown 2-4" ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + 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 ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( suzume ) + PORT_INCLUDE( mjctrl2 ) + + PORT_START("DSW1") + PORT_DIPNAME( 0x0f, 0x0f, "Pay Out Rate" ) + PORT_DIPSETTING( 0x00, "50%" ) + PORT_DIPSETTING( 0x01, "53%" ) + PORT_DIPSETTING( 0x02, "56%" ) + PORT_DIPSETTING( 0x03, "59%" ) + PORT_DIPSETTING( 0x04, "62%" ) + PORT_DIPSETTING( 0x05, "65%" ) + PORT_DIPSETTING( 0x06, "68%" ) + PORT_DIPSETTING( 0x07, "71%" ) + PORT_DIPSETTING( 0x08, "75%" ) + PORT_DIPSETTING( 0x09, "78%" ) + PORT_DIPSETTING( 0x0a, "81%" ) + PORT_DIPSETTING( 0x0b, "84%" ) + PORT_DIPSETTING( 0x0c, "87%" ) + PORT_DIPSETTING( 0x0d, "90%" ) + PORT_DIPSETTING( 0x0e, "93%" ) + PORT_DIPSETTING( 0x0f, "96%" ) + PORT_DIPNAME( 0x30, 0x30, "Maximum Bet" ) + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x10, "5" ) + PORT_DIPSETTING( 0x20, "10" ) + PORT_DIPSETTING( 0x30, "20" ) + 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("DSW2") + PORT_DIPNAME( 0x03, 0x03, "Winnings" ) + PORT_DIPSETTING( 0x03, "50 30 15 8 5 3 2 1" ) + PORT_DIPSETTING( 0x00, "50 30 20 15 8 6 3 2" ) + PORT_DIPSETTING( 0x02, "100 50 25 10 5 3 2 1" ) + PORT_DIPSETTING( 0x01, "200 100 50 10 5 3 2 1" ) + 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("DSW3") + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, "2" ) + PORT_DIPSETTING( 0x01, "4" ) + PORT_DIPSETTING( 0x02, "6" ) + PORT_DIPSETTING( 0x03, "8" ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, "Background" ) + PORT_DIPSETTING( 0x08, "Black" ) + PORT_DIPSETTING( 0x00, "Green" ) + 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, "Girls" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) + + PORT_START("DSW4") + 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( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( jongshin ) + PORT_INCLUDE( mjctrl2 ) + + PORT_START("DSW1") + PORT_DIPUNKNOWN_DIPLOC(0x01, 0x00, "SW1:1") + PORT_DIPUNKNOWN_DIPLOC(0x02, 0x00, "SW1:2") + PORT_DIPUNKNOWN_DIPLOC(0x04, 0x00, "SW1:3") + PORT_DIPUNKNOWN_DIPLOC(0x08, 0x00, "SW1:4") + PORT_DIPUNKNOWN_DIPLOC(0x10, 0x00, "SW1:5") + PORT_DIPUNKNOWN_DIPLOC(0x20, 0x00, "SW1:6") + PORT_DIPUNKNOWN_DIPLOC(0x40, 0x00, "SW1:7") + PORT_DIPUNKNOWN_DIPLOC(0x80, 0x00, "SW1:8") + + PORT_START("DSW2") + PORT_DIPUNKNOWN_DIPLOC(0x01, 0x00, "SW2:1") + PORT_DIPUNKNOWN_DIPLOC(0x02, 0x00, "SW2:2") + PORT_DIPUNKNOWN_DIPLOC(0x04, 0x00, "SW2:3") + PORT_DIPUNKNOWN_DIPLOC(0x08, 0x00, "SW2:4") + PORT_DIPUNKNOWN_DIPLOC(0x10, 0x00, "SW2:5") + PORT_DIPUNKNOWN_DIPLOC(0x20, 0x00, "SW2:6") + PORT_DIPUNKNOWN_DIPLOC(0x40, 0x00, "SW2:7") + PORT_DIPUNKNOWN_DIPLOC(0x80, 0x00, "SW2:8") // setting this causes the game to continually reset on title screen + + PORT_START("DSW3") + PORT_DIPUNKNOWN_DIPLOC(0x01, 0x00, "SW3:1") + PORT_DIPUNKNOWN_DIPLOC(0x02, 0x00, "SW3:2") + PORT_DIPUNKNOWN_DIPLOC(0x04, 0x00, "SW3:3") + PORT_DIPUNKNOWN_DIPLOC(0x08, 0x00, "SW3:4") + PORT_DIPUNKNOWN_DIPLOC(0x10, 0x00, "SW3:5") + PORT_DIPUNKNOWN_DIPLOC(0x20, 0x00, "SW3:6") + PORT_DIPUNKNOWN_DIPLOC(0x40, 0x00, "SW3:7") + PORT_DIPUNKNOWN_DIPLOC(0x80, 0x00, "SW3:8") +INPUT_PORTS_END + +static INPUT_PORTS_START( mjyarou ) + PORT_INCLUDE( royalmah ) + + 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( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( tontonb ) + PORT_INCLUDE( mjctrl2 ) + + PORT_START("DSW1") // DSW1 (inport $10 -> 0x73b0) + PORT_DIPNAME( 0x0f, 0x0f, "Pay Out Rate" ) + 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, 0x30, "Maximum Bet" ) + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x10, "5" ) + PORT_DIPSETTING( 0x20, "10" ) + PORT_DIPSETTING( 0x30, "20" ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) // affects videoram - flip screen ? + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Debug Mode ?" ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("DSW3") // DSW3 (inport $47 -> 0x73b1) + PORT_DIPNAME( 0x03, 0x03, "Winnings" ) // check code at 0x0e6d + PORT_DIPSETTING( 0x00, "32 24 16 12 8 4 2 1" ) // table at 0x4e7d + PORT_DIPSETTING( 0x03, "50 30 15 8 5 3 2 1" ) // table at 0x4e4d + PORT_DIPSETTING( 0x02, "100 50 25 10 5 3 2 1" ) // table at 0x4e5d + PORT_DIPSETTING( 0x01, "200 100 50 10 5 3 2 1" ) // table at 0x4e6d + PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) // check code at 0x5184 + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) // stores something at 0x76ff + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x08, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) // check code at 0x1482, 0x18c2, 0x1a1d, 0x1a83, 0x2d2f and 0x2d85 + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x60, 0x60, "Maximum Payout ?" ) // check code at 0x1ab7 + PORT_DIPSETTING( 0x00, "100" ) + PORT_DIPSETTING( 0x20, "200" ) + PORT_DIPSETTING( 0x40, "300" ) + PORT_DIPSETTING( 0x60, "500" ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) // check code at 0x18c2, 0x1a1d, 0x2d2f and 0x2d85 + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) + + PORT_START("DSW2") // DSW2 (inport $46 -> 0x73b2) + PORT_DIPNAME( 0x01, 0x00, "Special Combinations" ) // see notes + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) // check code at 0x07c5 + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x02, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) // check code at 0x5375 + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) // check code at 0x5241 + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x08, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) // untested ? + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) // check code at 0x13aa + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, "Full Tests" ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) +INPUT_PORTS_END + +// TODO: check dip-switches +static INPUT_PORTS_START( makaijan ) + PORT_INCLUDE( mjctrl2 ) + + PORT_START("DSW1") + PORT_DIPNAME( 0x0f, 0x0f, "Pay Out Rate" ) + 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, 0x30, "Maximum Bet" ) + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x10, "5" ) + PORT_DIPSETTING( 0x20, "10" ) + PORT_DIPSETTING( 0x30, "20" ) + PORT_DIPNAME( 0x40, 0x00, "Background Color" ) + PORT_DIPSETTING( 0x00, "Green" ) + PORT_DIPSETTING( 0x40, "Black" ) + PORT_DIPNAME( 0x80, 0x80, "Debug Mode ?" ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("DSW3") + PORT_DIPNAME( 0x01, 0x00, "Special Combinations" ) + 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, "Full Tests" ) + 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("DSW2") + PORT_DIPNAME( 0x01, 0x01, "DSW2" ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + +// TODO: check dip-switches +static INPUT_PORTS_START( daisyari ) + PORT_INCLUDE( mjctrl2 ) + + PORT_START("DSW1") + PORT_DIPNAME( 0x0f, 0x0f, "Pay Out Rate" ) + 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, 0x30, "Maximum Bet" ) + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x10, "5" ) + PORT_DIPSETTING( 0x20, "10" ) + PORT_DIPSETTING( 0x30, "20" ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) + + PORT_START("DSW3") + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x02, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x08, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Full Tests" ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("DSW2") + PORT_DIPNAME( 0x01, 0x00, "DSW2" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x01, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x02, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x08, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) + + PORT_START("DSW4") + PORT_DIPNAME( 0x01, 0x00, "DSW4" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x01, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x02, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x08, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( mjclub ) + PORT_INCLUDE( mjctrl2 ) + + // On the main board + PORT_START("DSW1") + PORT_DIPNAME( 0x0f, 0x08, "Pay Out Rate" ) PORT_DIPLOCATION("SW4: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, 0x20, "Maximum Bet" ) PORT_DIPLOCATION("SW4:5,6") + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x10, "5" ) + PORT_DIPSETTING( 0x20, "10" ) + PORT_DIPSETTING( 0x30, "20" ) + PORT_DIPNAME( 0x40, 0x40, "Note Rate" ) PORT_DIPLOCATION("SW4:7") + PORT_DIPSETTING( 0x00, "5" ) + PORT_DIPSETTING( 0x40, "10" ) + PORT_DIPNAME( 0x80, 0x80, "Data Display" ) PORT_DIPLOCATION("SW4:8") + PORT_DIPSETTING( 0x80, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + + // On the subboard + PORT_START("DSW3") + PORT_DIPNAME( 0x03, 0x00, "Game Type" ) PORT_DIPLOCATION("SW2:1,2") + PORT_DIPSETTING( 0x00, "A" ) + PORT_DIPSETTING( 0x02, "B" ) + PORT_DIPSETTING( 0x01, "C" ) + PORT_DIPSETTING( 0x03, "D" ) + PORT_DIPUNUSED_DIPLOC( 0x0c, 0x08, "SW2:3,4" ) PORT_CONDITION("DSW3", 0x03, EQUALS, 0x00) + PORT_DIPUNUSED_DIPLOC( 0x0c, 0x08, "SW2:3,4" ) PORT_CONDITION("DSW3", 0x03, EQUALS, 0x02) + PORT_DIPNAME( 0x0c, 0x08, "Bonus Rate (3renchan bonus)" ) PORT_DIPLOCATION("SW2:3,4") PORT_CONDITION("DSW3", 0x03, EQUALS, 0x01) + PORT_DIPSETTING( 0x00, "A (1 2 2 3 pts.)" ) + PORT_DIPSETTING( 0x04, "B (1 2 2 5 pts.)" ) + PORT_DIPSETTING( 0x08, "C (1 2 3 6 pts.)" ) + PORT_DIPSETTING( 0x0c, "D (1 2 6 10 pts.)" ) + PORT_DIPNAME( 0x0c, 0x08, "Bonus Rate (5renchan bonus)" ) PORT_DIPLOCATION("SW2:3,4") PORT_CONDITION("DSW3", 0x03, EQUALS, 0x03) + PORT_DIPSETTING( 0x00, "A (5 pts.)" ) + PORT_DIPSETTING( 0x04, "B (10 pts.)" ) + PORT_DIPSETTING( 0x08, "C (15 pts.)" ) + PORT_DIPSETTING( 0x0c, "D (20 pts.)" ) + PORT_DIPNAME( 0x30, 0x00, "CPU Houjuu Pattern" ) PORT_DIPLOCATION("SW2:5,6") + PORT_DIPSETTING( 0x00, "100% Free" ) + PORT_DIPSETTING( 0x10, "75% Free" ) + PORT_DIPSETTING( 0x20, "50% Free" ) + PORT_DIPSETTING( 0x30, "25% Free" ) + PORT_DIPNAME( 0x40, 0x00, "Payout Rate Autochange" ) PORT_DIPLOCATION("SW2:7") + PORT_DIPSETTING( 0x40, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x80, 0x80, "Test Mode" ) PORT_DIPLOCATION("SW2:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + // On the subboard + PORT_START("DSW2") + PORT_DIPNAME( 0x01, 0x00, "Double Odds Bonus" ) PORT_DIPLOCATION("SW3:1") + PORT_DIPSETTING( 0x01, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x02, 0x00, "Extra Bet" ) PORT_DIPLOCATION("SW3:2") + PORT_DIPSETTING( 0x02, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x04, 0x00, "Color Hai Bonus" ) PORT_DIPLOCATION("SW3:3") + PORT_DIPSETTING( 0x04, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x08, 0x00, "Sangenhai Bonus" ) PORT_DIPLOCATION("SW3:4") + PORT_DIPSETTING( 0x08, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + PORT_DIPUNUSED_DIPLOC( 0x70, 0x00, "SW3:5,6,7" ) + PORT_DIPNAME( 0x80, 0x00, "Coin Needed for Last Chance" ) PORT_DIPLOCATION("SW3:8") + PORT_DIPSETTING( 0x80, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + + // On the subboard + PORT_START("DSW4") + PORT_DIPNAME( 0x03, 0x00, "Odds Rate" ) PORT_DIPLOCATION("SW1:1,2") + PORT_DIPSETTING( 0x03, "A (50 30 15 8 5 4 3 2)" ) + PORT_DIPSETTING( 0x02, "B (100 40 20 10 5 4 3 2)" ) + PORT_DIPSETTING( 0x01, "C (150 70 30 10 5 4 3 2)" ) + PORT_DIPSETTING( 0x00, "D (32 24 16 12 8 4 2 1)" ) + PORT_DIPNAME( 0x3c, 0x3c, "Bonus Awarded at:" ) PORT_DIPLOCATION("SW1:3,4,5,6") + PORT_DIPSETTING( 0x00, "1st Time Only" ) + PORT_DIPSETTING( 0x20, "200 Coins" ) + PORT_DIPSETTING( 0x10, "300 Coins" ) + PORT_DIPSETTING( 0x30, "400 Coins" ) + PORT_DIPSETTING( 0x08, "500 Coins" ) + PORT_DIPSETTING( 0x28, "600 Coins" ) + PORT_DIPSETTING( 0x18, "700 Coins" ) + PORT_DIPSETTING( 0x38, "1000 Coins" ) + PORT_DIPSETTING( 0x3c, "Never" ) + PORT_DIPNAME( 0x40, 0x40, "Bonus Occurrence" ) PORT_DIPLOCATION("SW1:7") + PORT_DIPSETTING( 0x00, "Once" ) + PORT_DIPSETTING( 0x40, "Twice" ) + PORT_DIPNAME( 0x80, 0x80, "Background Color" ) PORT_DIPLOCATION("SW1:8") + PORT_DIPSETTING( 0x00, "White" ) // Black according to manual + PORT_DIPSETTING( 0x80, "Green" ) +INPUT_PORTS_END + +static INPUT_PORTS_START( mjdiplob ) + PORT_INCLUDE( mjctrl2 ) + + PORT_START("DSW1") // DSW1 (inport $10 -> 0x76fa) + PORT_DIPNAME( 0x0f, 0x0f, "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, 0x30, "Maximum Bet" ) PORT_DIPLOCATION("SW1:5,6") + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x10, "5" ) + PORT_DIPSETTING( 0x20, "10" ) + PORT_DIPSETTING( 0x30, "20" ) + PORT_DIPNAME( 0x40, 0x00, "Table Color" ) PORT_DIPLOCATION("SW1:7") + PORT_DIPSETTING( 0x00, "Green" ) + PORT_DIPSETTING( 0x40, "Black" ) + PORT_DIPNAME( 0x80, 0x80, "Debug Mode ?" ) PORT_DIPLOCATION("SW1:8") // check code at 0x0b94 and 0x0de2 + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("DSW2") // DSW2 (inport $62 -> 0x76fb) + PORT_DIPNAME( 0x03, 0x03, "Winnings" ) PORT_DIPLOCATION("SW2:1,2") // check code at 0x09cd + PORT_DIPSETTING( 0x00, "32 24 16 12 8 4 2 1" ) // table at 0x4b82 + PORT_DIPSETTING( 0x03, "50 30 15 8 5 3 2 1" ) // table at 0x4b52 + PORT_DIPSETTING( 0x02, "100 50 25 10 5 3 2 1" ) // table at 0x4b62 + PORT_DIPSETTING( 0x01, "200 100 50 10 5 3 2 1" ) // table at 0x4b72 + PORT_DIPNAME( 0x04, 0x00, "Yakuman Bonus" ) PORT_DIPLOCATION("SW2:3") + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, "Yakuman Bonus Period Control" ) PORT_DIPLOCATION("SW2:4") + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPSETTING( 0x08, "First time only" ) + PORT_DIPNAME( 0x30, 0x30, "Yakuman Bonus Timing Control" ) PORT_DIPLOCATION("SW2:5,6") // check code at 0x166c, Yakuman Bonus every x coins in + PORT_DIPSETTING( 0x00, "100" ) + PORT_DIPSETTING( 0x10, "200" ) + PORT_DIPSETTING( 0x20, "300" ) + PORT_DIPSETTING( 0x30, "500" ) + 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 ) + // 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_INCLUDE( mjctrl2 ) + + 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 ) + PORT_INCLUDE( mjctrl2 ) + + PORT_START("DSW1") // DSW1 (inport $10 -> 0x76fd) + PORT_DIPNAME( 0x0f, 0x0f, "Pay Out Rate" ) + 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, 0x30, "Maximum Bet" ) + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x10, "5" ) + PORT_DIPSETTING( 0x20, "10" ) + PORT_DIPSETTING( 0x30, "20" ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Debug Mode ?" ) // check code at 0x1635 + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("DSW2") // DSW2 (inport $00 (after out 0,$40) -> 0x76fa) + PORT_DIPNAME( 0x03, 0x03, "Winnings" ) // check code at 0x14e4 + PORT_DIPSETTING( 0x00, "32 24 16 12 8 4 2 1" ) // table at 0x1539 + PORT_DIPSETTING( 0x03, "50 30 15 8 5 3 2 1" ) // table at 0x1509 + PORT_DIPSETTING( 0x02, "100 50 25 10 5 3 2 1" ) // table at 0x1519 + PORT_DIPSETTING( 0x01, "200 100 50 10 5 3 2 1" ) // table at 0x1529 + PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) // check code at 0x1220, 0x128d, 0x13b1, 0x13cb and 0x2692 + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPNAME( 0x38, 0x00, "Maximum Payout ?" ) // check code at 0x12c1 + PORT_DIPSETTING( 0x20, "200" ) + PORT_DIPSETTING( 0x10, "300" ) + PORT_DIPSETTING( 0x30, "400" ) + PORT_DIPSETTING( 0x08, "500" ) + PORT_DIPSETTING( 0x28, "600" ) + PORT_DIPSETTING( 0x18, "700" ) + PORT_DIPSETTING( 0x00, "1000" ) +// PORT_DIPSETTING( 0x38, "1000" ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) // check code at 0x1333 + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Background" ) + PORT_DIPSETTING( 0x00, "Black" ) + PORT_DIPSETTING( 0x80, "Gray" ) + + PORT_START("DSW3") // DSW3 (inport $00 (after out 0,$00) -> 0x76fc) + PORT_DIPNAME( 0x01, 0x00, "Special Combinations" ) // see notes + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) // check code at 0x1cf9 + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x02, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) // check code at 0x21a9, 0x21dc and 0x2244 + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) // check code at 0x2b7f + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x08, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) // check code at 0x50ba + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) // check code at 0x1f65 + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) // check code at 0x6412 + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) // check code at 0x2cb2 and 0x2d02 + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("DSW4") // DSW4 (inport $00 (after out 0,$20) -> 0x76fb) + PORT_DIPNAME( 0x03, 0x00, DEF_STR( Unknown ) ) // stored at 0x702f - check code at 0x1713, + PORT_DIPSETTING( 0x00, "0" ) // 0x33d1, 0x3408, 0x3415, 0x347c, 0x3492, 0x350d, + PORT_DIPSETTING( 0x01, "1" ) // 0x4af9, 0x4b1f and 0x61f6 + PORT_DIPSETTING( 0x02, "2" ) + PORT_DIPSETTING( 0x03, "3" ) + PORT_DIPNAME( 0x0c, 0x00, "Difficulty ?" ) // check code at 0x4b5c and 0x6d72 + PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) // 0x05 - 0x03, 0x02, 0x02, 0x01 + PORT_DIPSETTING( 0x04, DEF_STR( Normal ) ) // 0x0a - 0x05, 0x02, 0x02, 0x01 + PORT_DIPSETTING( 0x08, DEF_STR( Hard ) ) // 0x0f - 0x06, 0x03, 0x02, 0x01 + PORT_DIPSETTING( 0x0c, DEF_STR( Hardest ) ) // 0x14 - 0x0a, 0x06, 0x02, 0x01 + PORT_DIPNAME( 0x30, 0x00, DEF_STR( Unknown ) ) // check code at 0x228e + PORT_DIPSETTING( 0x00, "0x00" ) + PORT_DIPSETTING( 0x10, "0x10" ) + PORT_DIPSETTING( 0x20, "0x20" ) + PORT_DIPSETTING( 0x30, "0x30" ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) // check code at 0x11e4 + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Full Tests" ) // check code at 0x006d + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( mjapinky ) + PORT_INCLUDE( mjctrl2 ) + + PORT_START("DSW1") // IN11 + PORT_DIPNAME( 0x01, 0x01, "Unknown 1-0" ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, "Unknown 1-1" ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, "Unknown 1-2" ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, "Unknown 1-3" ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x30, 0x30, "Maximum Bet" ) + PORT_DIPSETTING( 0x30, "1" ) + PORT_DIPSETTING( 0x20, "5" ) + PORT_DIPSETTING( 0x10, "10" ) + PORT_DIPSETTING( 0x00, "20" ) + PORT_DIPNAME( 0x40, 0x00, "Background" ) + PORT_DIPSETTING( 0x40, "Black" ) + PORT_DIPSETTING( 0x00, "Green" ) + PORT_DIPNAME( 0x80, 0x80, "Unknown 1-7" ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("DSW2") // IN12 + PORT_DIPNAME( 0x03, 0x03, "Unknown 2-0&1" ) + PORT_DIPSETTING( 0x03, "0" ) + PORT_DIPSETTING( 0x02, "1" ) + PORT_DIPSETTING( 0x01, "2" ) + PORT_DIPSETTING( 0x00, "3" ) + PORT_DIPNAME( 0x04, 0x04, "Unknown 2-2" ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, "Unknown 2-3" ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x30, 0x30, "Unknown 2-4&5" ) + PORT_DIPSETTING( 0x30, "0" ) + PORT_DIPSETTING( 0x20, "1" ) + PORT_DIPSETTING( 0x10, "2" ) + PORT_DIPSETTING( 0x00, "3" ) + PORT_DIPNAME( 0xc0, 0xc0, "Unknown 2-6&7" ) + PORT_DIPSETTING( 0xc0, "0" ) + PORT_DIPSETTING( 0x80, "1" ) + PORT_DIPSETTING( 0x40, "2" ) + PORT_DIPSETTING( 0x00, "3" ) + + PORT_START("DSW3") // IN13 + PORT_DIPNAME( 0x01, 0x01, "Unknown 3-0" ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, "Unknown 3-1" ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, "Unknown 3-2" ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, "Unknown 3-3" ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, "Unknown 3-4" ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, "Unknown 3-5" ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, "Unknown 3-6" ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Full Test" ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( janptr96 ) + PORT_INCLUDE( mjctrl1 ) + + PORT_START("DSW4") // IN11 + PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, "In Game Music" ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, "Girls (Demo)" ) + 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, "Don Den Key" ) + PORT_DIPSETTING( 0x80, "Start" ) + PORT_DIPSETTING( 0x00, "Flip/Flop" ) + + PORT_START("DSW3") // IN12 + PORT_DIPNAME( 0x07, 0x07, "YAKUMAN Bonus" ) + PORT_DIPSETTING( 0x07, "Cut" ) + PORT_DIPSETTING( 0x06, "1 T" ) + PORT_DIPSETTING( 0x05, "300" ) + PORT_DIPSETTING( 0x04, "500" ) + PORT_DIPSETTING( 0x03, "700" ) + PORT_DIPSETTING( 0x02, "1000" ) + PORT_DIPSETTING( 0x01, "1000?" ) + PORT_DIPSETTING( 0x00, "1000?" ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x30, 0x30, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x30, "0" ) + PORT_DIPSETTING( 0x20, "1" ) + PORT_DIPSETTING( 0x10, "2" ) + PORT_DIPSETTING( 0x00, "3" ) + 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("DSW2") // IN13 + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) + 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, "Min Credits To Start" ) + PORT_DIPSETTING( 0x0c, "1" ) + PORT_DIPSETTING( 0x08, "2" ) + PORT_DIPSETTING( 0x04, "3" ) + PORT_DIPSETTING( 0x00, "5" ) + PORT_DIPNAME( 0x30, 0x30, "Payout" ) + PORT_DIPSETTING( 0x30, "300" ) + PORT_DIPSETTING( 0x20, "500" ) + PORT_DIPSETTING( 0x10, "700" ) + PORT_DIPSETTING( 0x00, "1000" ) + PORT_DIPNAME( 0x40, 0x40, "W-BET" ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Last Chance" ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("DSW1") // IN14 + PORT_DIPNAME( 0x0f, 0x0f, "Pay Out Rate" ) + 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, 0x30, "Odds Rate" ) + PORT_DIPSETTING( 0x30, "1 2 4 8 12 16 24 32" ) + PORT_DIPSETTING( 0x00, "1 2 3 5 8 15 30 50" ) + PORT_DIPSETTING( 0x20, "2 3 6 8 12 15 30 50" ) + PORT_DIPSETTING( 0x10, "1 2 3 5 10 25 50 100" ) + PORT_DIPNAME( 0xc0, 0xc0, "Maximum Bet" ) + PORT_DIPSETTING( 0xc0, "1" ) + PORT_DIPSETTING( 0x80, "5" ) + PORT_DIPSETTING( 0x40, "10" ) + PORT_DIPSETTING( 0x00, "20" ) + + PORT_START("DSWTOP") // IN15 + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, "Debug Mode" ) + 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, "Credits Per Note" ) + PORT_DIPSETTING( 0x40, "5" ) + PORT_DIPSETTING( 0x00, "10" ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( mjifb ) + PORT_INCLUDE( mjctrl2 ) + + // Default dip-switch settings taken from manual for "single type" cabinet + // When they differ for "corner type" cabinet, it's noted in a comment near the dip-switch + + PORT_START("PORT3_5") // IN10 - DSW1 (P3 & P5) + PORT_DIPNAME( 0x0f, 0x07, "Pay Out Rate" ) PORT_DIPLOCATION("DSW1: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%" ) // default for "corner type" cabinet + 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, 0x10, "Maximum Bet" ) PORT_DIPLOCATION("DSW1:5,6") + PORT_DIPSETTING( 0x30, "1" ) + PORT_DIPSETTING( 0x20, "5" ) + PORT_DIPSETTING( 0x10, "10" ) + PORT_DIPSETTING( 0x00, "20" ) + PORT_DIPNAME( 0xc0, 0xc0, "Minimum Rate to Play" ) PORT_DIPLOCATION("DSW1:7,8") + PORT_DIPSETTING( 0xc0, "1" ) + PORT_DIPSETTING( 0x80, "2" ) + PORT_DIPSETTING( 0x40, "3" ) + PORT_DIPSETTING( 0x00, "4" ) + + PORT_START("PORT6_7") // IN11 - DSW2 (P6 & P7) + PORT_DIPNAME( 0x03, 0x00, "Winnings" ) PORT_DIPLOCATION("DSW2:1,2") + PORT_DIPSETTING( 0x03, "32 24 16 12 8 4 2 1" ) + PORT_DIPSETTING( 0x00, "50 30 15 8 5 3 2 1" ) + PORT_DIPSETTING( 0x01, "100 50 25 10 5 3 2 1" ) + PORT_DIPSETTING( 0x02, "200 100 50 10 5 3 2 1" ) + PORT_DIPNAME( 0x04, 0x00, "Credits Per Note" ) PORT_DIPLOCATION("DSW2:3") + PORT_DIPSETTING( 0x04, "5" ) + PORT_DIPSETTING( 0x00, "10" ) + PORT_DIPNAME( 0x38, 0x20, "YAKUMAN Bonus" ) PORT_DIPLOCATION("DSW2:4,5,6") + PORT_DIPSETTING( 0x38, "None" ) // default for "corner type" cabinet + PORT_DIPSETTING( 0x30, "Once at start" ) + PORT_DIPSETTING( 0x28, "Every 300 coins" ) + PORT_DIPSETTING( 0x20, "Every 500 coins" ) + PORT_DIPSETTING( 0x18, "Every 700 coins" ) + PORT_DIPSETTING( 0x10, "Every 1000 coins" ) +// PORT_DIPSETTING( 0x08, "Every 1000 coins?" ) +// PORT_DIPSETTING( 0x00, "Every 1000 coins?" ) + PORT_DIPNAME( 0x40, 0x40, "YAKUMAN Bonus Frequency" ) PORT_DIPLOCATION("DSW2:7") + PORT_DIPSETTING( 0x00, "Once" ) + PORT_DIPSETTING( 0x40, "Twice" ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSW2:8") + PORT_DIPSETTING( 0x00, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Hard ) ) + + PORT_START("DSW3") // IN13 - DSW3 ($8200) + PORT_DIPNAME( 0x01, 0x00, "Automatic Rate Change" ) PORT_DIPLOCATION("DSW3:1") + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) // default for "corner type" cabinet + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, "Service Count" ) PORT_DIPLOCATION("DSW3:2") + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) // default for "corner type" cabinet + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, "Renchan Rate" ) PORT_DIPLOCATION("DSW3:3") + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, "W-Bet" ) PORT_DIPLOCATION("DSW3:4") + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x00, "Bye-Bye Bonus" ) PORT_DIPLOCATION("DSW3:5") + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, "Last Chance" ) PORT_DIPLOCATION("DSW3:6") + PORT_DIPSETTING( 0x20, "Free" ) + PORT_DIPSETTING( 0x00, "Charge" ) + PORT_DIPNAME( 0x40, 0x00, "Auto Tsumo" ) PORT_DIPLOCATION("DSW3:7") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, "Background Color" ) PORT_DIPLOCATION("DSW3:8") + PORT_DIPSETTING( 0x80, "Black" ) + PORT_DIPSETTING( 0x00, "Blue" ) // gray according to manual?!?! + + PORT_START("DSW4") // IN14 - DSW4 ($8000) + PORT_DIPNAME( 0x01, 0x00, "Double-tile exchange" ) PORT_DIPLOCATION("DSW4:1") + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, "Double hand-tile game" ) PORT_DIPLOCATION("DSW4:2") + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, "Blind-tile game" ) PORT_DIPLOCATION("DSW4:3") + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, "Don Den Button" ) PORT_DIPLOCATION("DSW4:4") + PORT_DIPSETTING( 0x08, "F/F Button" ) + PORT_DIPSETTING( 0x00, "A Button" ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSW4:5") + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) // default for "corner type" cabinet + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("DSW4:6") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, "Animation" ) PORT_DIPLOCATION("DSW4:7") // marked as "unused" in manual + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Full Tests" ) PORT_DIPLOCATION("DSW4:8") // marked as "unused" in manual + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( mjtensin ) + PORT_INCLUDE( mjctrl1 ) + + PORT_START("DSW4") // IN11 + PORT_DIPNAME( 0x0f, 0x0f, "Pay Out Rate" ) + 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, 0x30, "Odds Rate" ) + PORT_DIPSETTING( 0x30, "1 2 4 8 12 16 24 32" ) + PORT_DIPSETTING( 0x00, "1 2 3 5 8 15 30 50" ) + PORT_DIPSETTING( 0x20, "2 3 6 8 12 15 30 50" ) + PORT_DIPSETTING( 0x10, "1 2 3 5 10 25 50 100" ) + PORT_DIPNAME( 0xc0, 0xc0, "Maximum Bet" ) + PORT_DIPSETTING( 0xc0, "1" ) + PORT_DIPSETTING( 0x80, "5" ) + PORT_DIPSETTING( 0x40, "10" ) + PORT_DIPSETTING( 0x00, "20" ) + + PORT_START("DSW3") // IN12 + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) + 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, "Min Credits To Start" ) + PORT_DIPSETTING( 0x0c, "1" ) + PORT_DIPSETTING( 0x08, "2" ) + PORT_DIPSETTING( 0x04, "3" ) + PORT_DIPSETTING( 0x00, "5" ) + PORT_DIPNAME( 0x30, 0x30, "Payout" ) + PORT_DIPSETTING( 0x30, "300" ) + PORT_DIPSETTING( 0x20, "500" ) + PORT_DIPSETTING( 0x10, "700" ) + PORT_DIPSETTING( 0x00, "1000" ) + PORT_DIPNAME( 0x40, 0x40, "W-BET" ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Last Chance" ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("DSW2") // IN13 + PORT_DIPNAME( 0x03, 0x03, "YAKUMAN Bonus" ) + PORT_DIPSETTING( 0x03, "Cut" ) + PORT_DIPSETTING( 0x02, "500" ) + PORT_DIPSETTING( 0x01, "700" ) + PORT_DIPSETTING( 0x00, "1000" ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x04, "2" ) + PORT_DIPNAME( 0x18, 0x18, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x18, "0" ) + PORT_DIPSETTING( 0x10, "1" ) + PORT_DIPSETTING( 0x80, "2" ) + PORT_DIPSETTING( 0x00, "3" ) + PORT_DIPNAME( 0x60, 0x60, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x60, "0" ) + PORT_DIPSETTING( 0x40, "1" ) + PORT_DIPSETTING( 0x20, "2" ) + PORT_DIPSETTING( 0x00, "3" ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("DSW1") // IN14 + PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, "In Game Music" ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, "Girls (Demo)" ) + 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, "Show Clock" ) + PORT_DIPSETTING( 0x80, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + + PORT_START("DSWTOP") // IN15 + PORT_DIPNAME( 0x01, 0x01, "Credits Per Note" ) + PORT_DIPSETTING( 0x01, "5" ) + PORT_DIPSETTING( 0x00, "10" ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( 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 + 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 + 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 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 + +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_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 ) + PORT_INCLUDE( mjctrl1 ) + + PORT_MODIFY("KEY5") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) // "COIN2" + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) // "COIN1", but not working + + + PORT_START("DSW1") // DSW (inport $10) + 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%" ) + 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( 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, "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_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, "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 ) + PORT_INCLUDE( mjctrl2 ) + + PORT_START("PORT3_5") // IN11 - DSW3 (P3 & P5) + PORT_DIPNAME( 0x03, 0x03, "Unknown 3-0&1*" ) + PORT_DIPSETTING( 0x00, "1 1" ) + PORT_DIPSETTING( 0x02, "3 4" ) + PORT_DIPSETTING( 0x01, "1 2" ) + PORT_DIPSETTING( 0x03, "1 4" ) + PORT_DIPNAME( 0x04, 0x04, "Unknown 3-2" ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, "Unknown 3-3" ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, "Unknown 3-4" ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, "Unknown 3-5" ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, "Unknown 3-6" ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Unknown 3-7" ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("PORT6_7") // IN12 - DSW4 (P6 & P7) + PORT_DIPNAME( 0x01, 0x01, "Unknown 4-0" ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, "Unknown 4-1" ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, "Unknown 4-2" ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, "Unknown 4-3" ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, "Unknown 4-4" ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, "Unknown 4-5" ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, "Unknown 4-6" ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Full Tests" ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("DSW1") // IN13 - DSW1 ($8001) + PORT_DIPNAME( 0x0f, 0x07, "Pay Out Rate" ) + 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, 0x30, "Maximum Bet" ) + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x10, "5" ) + PORT_DIPSETTING( 0x20, "10" ) + PORT_DIPSETTING( 0x30, "20" ) + PORT_DIPNAME( 0x40, 0x40, "Credits Per Note" ) + PORT_DIPSETTING( 0x00, "5" ) + PORT_DIPSETTING( 0x40, "10" ) + PORT_DIPNAME( 0x80, 0x80, "Background" ) + PORT_DIPSETTING( 0x80, "Gray" ) + PORT_DIPSETTING( 0x00, "Black" ) + + PORT_START("DSW2") // IN14 - DSW2 ($8000) + PORT_DIPNAME( 0x03, 0x03, "Winnings" ) + PORT_DIPSETTING( 0x00, "32 24 16 12 8 4 2 1" ) + PORT_DIPSETTING( 0x03, "50 30 15 8 5 3 2 1" ) + PORT_DIPSETTING( 0x02, "100 50 25 10 5 3 2 1" ) + PORT_DIPSETTING( 0x01, "200 100 50 10 5 3 2 1" ) + PORT_DIPNAME( 0x3c, 0x3c, "YAKUMAN Bonus" ) + PORT_DIPSETTING( 0x3c, "Cut" ) + PORT_DIPSETTING( 0x20, "300" ) + PORT_DIPSETTING( 0x10, "500" ) + PORT_DIPSETTING( 0x08, "700" ) + PORT_DIPSETTING( 0x00, "1000" ) +// PORT_DIPSETTING( 0x04, "1000?" ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x40, "2" ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, "1/4" ) + PORT_DIPSETTING( 0x80, "2/4" ) +INPUT_PORTS_END + +static INPUT_PORTS_START( jansou ) + PORT_INCLUDE( mjctrl2 ) + + PORT_START("DSW1") + PORT_DIPNAME( 0x0f, 0x00, "Pay Out Rate" ) PORT_DIPLOCATION("SW1:1,2,3,4") + PORT_DIPSETTING( 0x0f, "50%" ) + PORT_DIPSETTING( 0x0e, "53%" ) + PORT_DIPSETTING( 0x0d, "56%" ) + PORT_DIPSETTING( 0x0c, "59%" ) + PORT_DIPSETTING( 0x0b, "62%" ) + PORT_DIPSETTING( 0x0a, "65%" ) + PORT_DIPSETTING( 0x09, "68%" ) + PORT_DIPSETTING( 0x08, "71%" ) + PORT_DIPSETTING( 0x07, "74%" ) + PORT_DIPSETTING( 0x06, "77%" ) + PORT_DIPSETTING( 0x05, "80%" ) + PORT_DIPSETTING( 0x04, "83%" ) + PORT_DIPSETTING( 0x03, "86%" ) + PORT_DIPSETTING( 0x02, "89%" ) + PORT_DIPSETTING( 0x01, "92%" ) + PORT_DIPSETTING( 0x00, "95%" ) + PORT_DIPNAME( 0x30, 0x00, "Maximum Bet" ) PORT_DIPLOCATION("SW1:5,6") + PORT_DIPSETTING( 0x30, "1" ) + PORT_DIPSETTING( 0x20, "5" ) + PORT_DIPSETTING( 0x10, "10" ) + PORT_DIPSETTING( 0x00, "20" ) + PORT_DIPNAME( 0x40, 0x40, "Unknown 1-7" ) PORT_DIPLOCATION("SW1:7") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Unknown 1-8" ) PORT_DIPLOCATION("SW1:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("DSW2") + PORT_DIPNAME( 0x03, 0x00, "First Chance" ) PORT_DIPLOCATION("SW2:1,2") + PORT_DIPSETTING( 0x03, DEF_STR( None ) ) + PORT_DIPSETTING( 0x02, "3" ) + PORT_DIPSETTING( 0x01, "4" ) + PORT_DIPSETTING( 0x00, "5" ) + PORT_DIPNAME( 0x0c, 0x00, "Last Chance" ) PORT_DIPLOCATION("SW2:3,4") + PORT_DIPSETTING( 0x0c, DEF_STR( None ) ) + PORT_DIPSETTING( 0x08, "3" ) + PORT_DIPSETTING( 0x04, "4" ) + PORT_DIPSETTING( 0x00, "5" ) + PORT_DIPNAME( 0x10, 0x10, "Unknown 2-5" ) PORT_DIPLOCATION("SW2:5") + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, "Unknown 2-6" ) PORT_DIPLOCATION("SW2:6") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, "Unknown 2-7" ) PORT_DIPLOCATION("SW2:7") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, "Middle Chance" ) PORT_DIPLOCATION("SW2:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("DSW3") + PORT_DIPNAME( 0x01, 0x01, "Unknown 3-1" ) PORT_DIPLOCATION("SW3:1") + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, "Unknown 3-2" ) PORT_DIPLOCATION("SW3:2") + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, "Unknown 3-3" ) PORT_DIPLOCATION("SW3:3") + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, "Unknown 3-4" ) PORT_DIPLOCATION("SW3:4") + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, "Unknown 3-5" ) PORT_DIPLOCATION("SW3:5") + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, "Girl" ) PORT_DIPLOCATION("SW3:6") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, "Unknown 3-7" ) PORT_DIPLOCATION("SW3:7") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Unknown 3-8" ) PORT_DIPLOCATION("SW3:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +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 + 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 + 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 Mode" ) PORT_DIPLOCATION("DIP-SW 3:1") + PORT_DIPSETTING( 0x01, "Key-out" ) + PORT_DIPSETTING( 0x00, "Hopper" ) + 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("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("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("DIP-SW 4:4") + PORT_DIPSETTING( 0x08, "Black" ) + PORT_DIPSETTING( 0x00, "Green" ) + 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("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 + 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("DIP-SW 3:10") + PORT_DIPSETTING( 0x00, "5" ) + PORT_DIPSETTING( 0x20, "8" ) + 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 ) + PORT_INCLUDE( mjctrl2 ) + + PORT_MODIFY("SYSTEM") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN2 ) // "Note" ("Paper Money") = 10 Credits + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 ) // Analizer (Statistics). This plus service mode give access to dip page + PORT_SERVICE( 0x08, IP_ACTIVE_LOW ) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("DSW-A") + PORT_DIPNAME( 0x07, 0x07, "Pay Out" ) PORT_DIPLOCATION("DSW-A:1,2,3") + PORT_DIPSETTING( 0x00, "60%" ) + PORT_DIPSETTING( 0x01, "65%" ) + PORT_DIPSETTING( 0x02, "70%" ) + PORT_DIPSETTING( 0x03, "75%" ) + PORT_DIPSETTING( 0x04, "80%" ) + PORT_DIPSETTING( 0x05, "85%" ) + PORT_DIPSETTING( 0x06, "90%" ) + PORT_DIPSETTING( 0x07, "95%" ) + PORT_DIPNAME( 0x18, 0x18, "Wup Level" ) PORT_DIPLOCATION("DSW-A:4,5") + PORT_DIPSETTING( 0x18, "1" ) + PORT_DIPSETTING( 0x10, "2" ) + PORT_DIPSETTING( 0x08, "3" ) + PORT_DIPSETTING( 0x00, "4" ) + PORT_DIPNAME( 0x60, 0x60, "Last Chance" ) PORT_DIPLOCATION("DSW-A:6,7") + PORT_DIPSETTING( 0x60, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, "5" ) + PORT_DIPSETTING( 0x20, "8" ) + PORT_DIPSETTING( 0x00, "10" ) + PORT_DIPNAME( 0x80, 0x80, "Pay Sound" ) PORT_DIPLOCATION("DSW-A:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("DSW-B") + PORT_DIPNAME( 0x03, 0x03, "Odds Type" ) PORT_DIPLOCATION("DSW-B:1,2") + PORT_DIPSETTING( 0x03, "A" ) + PORT_DIPSETTING( 0x02, "B" ) + PORT_DIPSETTING( 0x01, "C" ) + PORT_DIPSETTING( 0x00, "D" ) + PORT_DIPUNUSED_DIPLOC(0x04, 0x04, "DSW-B:3") // 3 and 4 have no apparent effect in 'Analizer 2' page + PORT_DIPUNUSED_DIPLOC(0x08, 0x08, "DSW-B:4") + PORT_DIPNAME( 0x30, 0x30, "Reset" ) PORT_DIPLOCATION("DSW-B:5,6") + PORT_DIPSETTING( 0x30, "100" ) + PORT_DIPSETTING( 0x20, "150" ) + PORT_DIPSETTING( 0x10, "300" ) + PORT_DIPSETTING( 0x00, "500" ) + PORT_DIPNAME( 0x40, 0x40, "Bakaze" ) PORT_DIPLOCATION("DSW-B:7") + PORT_DIPSETTING( 0x40, "Move" ) + PORT_DIPSETTING( 0x00, "No Move" ) + PORT_DIPNAME( 0x80, 0x80, "Pai" ) PORT_DIPLOCATION("DSW-B:8") + PORT_DIPSETTING( 0x80, "Tate" ) + PORT_DIPSETTING( 0x00, DEF_STR( Normal ) ) + + PORT_START("DSW-C") + PORT_DIPNAME( 0x03, 0x03, "China" ) PORT_DIPLOCATION("DSW-C:1,2") + PORT_DIPSETTING( 0x03, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x02, "Hane" ) + PORT_DIPSETTING( 0x01, "Bai" ) + PORT_DIPSETTING( 0x00, "3Bai" ) + PORT_DIPNAME( 0x04, 0x04, "Yaku" ) PORT_DIPLOCATION("DSW-C:3") + PORT_DIPSETTING( 0x04, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x00, "Cut" ) + PORT_DIPNAME( 0x08, 0x08, "3Bai" ) PORT_DIPLOCATION("DSW-C:4") + PORT_DIPSETTING( 0x08, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x00, "Cut" ) + PORT_DIPUNUSED_DIPLOC(0x10, 0x10, "DSW-C:5") // 5 and 6 have no apparent effect in 'Analizer 2' page + PORT_DIPUNUSED_DIPLOC(0x20, 0x20, "DSW-C:6") + PORT_DIPNAME( 0x40, 0x40, "Utidome" ) PORT_DIPLOCATION("DSW-C:7") + PORT_DIPSETTING( 0x40, "Nasi" ) + PORT_DIPSETTING( 0x00, "1000" ) + PORT_DIPNAME( 0x80, 0x80, "Bet Max" ) PORT_DIPLOCATION("DSW-C:8") + PORT_DIPSETTING( 0x80, "10" ) + PORT_DIPSETTING( 0x00, "20" ) + + PORT_START("DSW-D") + PORT_DIPNAME( 0x03, 0x03, "Bet Skip" ) PORT_DIPLOCATION("DSW-D:1,2") + PORT_DIPSETTING( 0x03, "1" ) + PORT_DIPSETTING( 0x02, "2" ) + PORT_DIPSETTING( 0x01, "5" ) + PORT_DIPSETTING( 0x00, "10" ) + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("DSW-D:3,4") + PORT_DIPSETTING( 0x0c, "1" ) + PORT_DIPSETTING( 0x08, "2" ) + PORT_DIPSETTING( 0x04, "5" ) + PORT_DIPSETTING( 0x00, "10" ) + PORT_DIPNAME( 0x70, 0x70, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("DSW-D:5,6,7") // 'Note' + PORT_DIPSETTING( 0x70, "1" ) + PORT_DIPSETTING( 0x60, "2" ) + PORT_DIPSETTING( 0x50, "5" ) + PORT_DIPSETTING( 0x40, "10" ) + PORT_DIPSETTING( 0x30, "20" ) + PORT_DIPSETTING( 0x20, "25" ) + PORT_DIPSETTING( 0x10, "50" ) + PORT_DIPSETTING( 0x00, "100" ) + PORT_DIPUNUSED_DIPLOC(0x80, 0x80, "DSW-D:8") // 8 has no apparent effect in 'Analizer 2' page +INPUT_PORTS_END + + +void royalmah_state::royalmah(machine_config &config) +{ + // basic machine hardware + Z80(config, m_maincpu, 18432000 / 6); // 3.072 MHz + m_maincpu->set_addrmap(AS_PROGRAM, &royalmah_state::royalmah_map); + m_maincpu->set_addrmap(AS_IO, &royalmah_state::royalmah_iomap); + m_maincpu->set_vblank_int("screen", FUNC(royalmah_state::irq0_line_hold)); + + NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); + + // video hardware + PALETTE(config, m_palette, FUNC(royalmah_state::royalmah_palette), 16*4); + + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_size(256, 256); + screen.set_visarea(0, 255, 8, 247); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); // not accurate + screen.set_screen_update(FUNC(royalmah_state::screen_update)); + + // sound hardware + SPEAKER(config, "speaker").front_center(); + + AY8910(config, m_ay, 18432000 / 12); + m_ay->port_a_read_callback().set(FUNC(royalmah_state::player_1_port_r)); + m_ay->port_b_read_callback().set(FUNC(royalmah_state::player_2_port_r)); + m_ay->add_route(ALL_OUTPUTS, "speaker", 0.33); +} + + +void royalmah_state::janoh(machine_config &config) +{ + royalmah(config); + + m_maincpu->set_clock(8000000 / 2); // 4 MHz ? + m_maincpu->set_addrmap(AS_PROGRAM, &royalmah_state::janoh_map); +} + +void royalmah_state::janoha(machine_config &config) +{ + janoh(config); + + z80_device &sub(Z80(config, "sub", 4000000)); // 4 MHz ? + sub.set_addrmap(AS_PROGRAM, &royalmah_state::janoh_sub_map); + sub.set_addrmap(AS_IO, &royalmah_state::janoh_sub_iomap); + sub.set_vblank_int("screen", FUNC(royalmah_state::irq0_line_hold)); +} + +void royalmah_state::jansou(machine_config &config) +{ + royalmah(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &royalmah_state::jansou_map); + m_maincpu->set_addrmap(AS_IO, &royalmah_state::royalmah_iomap); + + Z80(config, m_audiocpu, 4000000); // 4.000 MHz + m_audiocpu->set_addrmap(AS_PROGRAM, &royalmah_state::jansou_sub_map); + m_audiocpu->set_addrmap(AS_IO, &royalmah_state::jansou_sub_iomap); + m_audiocpu->set_periodic_int(FUNC(royalmah_state::irq0_line_hold), attotime::from_hz(4000000 / 512)); + + GENERIC_LATCH_8(config, m_soundlatch); + + DAC_8BIT_R2R(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.25); // unknown DAC +} + +void royalmah_prgbank_state::dondenmj(machine_config &config) +{ + royalmah(config); + + m_maincpu->set_clock(8000000 / 2); // 4 MHz ? + m_maincpu->set_addrmap(AS_PROGRAM, &royalmah_prgbank_state::royalmah_banked_map); + m_maincpu->set_addrmap(AS_IO, &royalmah_prgbank_state::dondenmj_iomap); +} + +void royalmah_prgbank_state::tahjong(machine_config &config) +{ + royalmah(config); + + m_maincpu->set_clock(8000000 / 2); // 4 MHz ? + m_maincpu->set_addrmap(AS_PROGRAM, &royalmah_prgbank_state::tahjong_map); + m_maincpu->set_addrmap(AS_IO, &royalmah_prgbank_state::tahjong_iomap); +} + +void royalmah_prgbank_state::makaijan(machine_config &config) +{ + royalmah(config); + + m_maincpu->set_clock(8000000 / 2); // 4 MHz ? + m_maincpu->set_addrmap(AS_PROGRAM, &royalmah_prgbank_state::royalmah_banked_map); + m_maincpu->set_addrmap(AS_IO, &royalmah_prgbank_state::makaijan_iomap); +} + +void royalmah_prgbank_state::daisyari(machine_config &config) +{ + royalmah(config); + + m_maincpu->set_clock(8000000 / 2); // 4 MHz ? + m_maincpu->set_addrmap(AS_PROGRAM, &royalmah_prgbank_state::royalmah_banked_map); + m_maincpu->set_addrmap(AS_IO, &royalmah_prgbank_state::daisyari_iomap); +} + +void royalmah_prgbank_state::mjclub(machine_config &config) +{ + royalmah(config); + + m_maincpu->set_clock(8000000 / 2); // 4 MHz ? + m_maincpu->set_addrmap(AS_PROGRAM, &royalmah_prgbank_state::royalmah_banked_map); + m_maincpu->set_addrmap(AS_IO, &royalmah_prgbank_state::mjclub_iomap); +} + +void royalmah_prgbank_state::chalgirl(machine_config &config) +{ + royalmah(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &royalmah_prgbank_state::chalgirl_map); + m_maincpu->set_addrmap(AS_IO, &royalmah_prgbank_state::chalgirl_iomap); +} + +void royalmah_prgbank_state::rkjanoh2(machine_config &config) +{ + chalgirl(config); + + m_maincpu->set_addrmap(AS_IO, &royalmah_prgbank_state::rkjanoh2_iomap); +} + +void royalmah_prgbank_state::mjyarou(machine_config &config) +{ + chalgirl(config); + + m_maincpu->set_addrmap(AS_IO, &royalmah_prgbank_state::mjyarou_iomap); +} + +void royalmah_prgbank_state::mjsenka(machine_config &config) +{ + mjyarou(config); + + m_maincpu->set_addrmap(AS_OPCODES, &royalmah_prgbank_state::mjsenka_opcodes_map); +} + +void royalmah_prgbank_state::mjsiyoub(machine_config &config) +{ + royalmah(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &royalmah_prgbank_state::mjsiyoub_map); + m_maincpu->set_addrmap(AS_IO, &royalmah_prgbank_state::mjsiyoub_iomap); + + // TODO: implement extra sound chips. Z80 ROM is scrambled. + Z80(config, m_audiocpu, 18.432_MHz_XTAL / 6); // divider not verified + m_audiocpu->set_addrmap(AS_PROGRAM, &royalmah_prgbank_state::mjsiyoub_audio_prg_map); + m_audiocpu->set_disable(); // until it's decrypted, to avoid clogging the error log + + MSM5205(config, "msm", 400_kHz_XTAL); +} + +void royalmah_state::ippatsu(machine_config &config) +{ + royalmah(config); + + m_maincpu->set_clock(8000000 / 2); // 4 MHz ? + m_maincpu->set_addrmap(AS_PROGRAM, &royalmah_state::ippatsu_map); + m_maincpu->set_addrmap(AS_IO, &royalmah_state::ippatsu_iomap); +} + +void royalmah_state::janyoup2(machine_config &config) +{ + royalmah(config); + + m_maincpu->set_clock(XTAL(18'432'000) / 4); // unknown divider + m_maincpu->set_addrmap(AS_IO, &royalmah_state::janyoup2_iomap); + + hd6845s_device &crtc(HD6845S(config, "crtc", XTAL(18'432'000) / 12)); // unknown divider + crtc.set_screen("screen"); + crtc.set_show_border_area(false); + crtc.set_char_width(4); +} + +void royalmah_state::seljan(machine_config &config) +{ + janyoup2(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &royalmah_state::seljan_map); + m_maincpu->set_addrmap(AS_IO, &royalmah_state::seljan_iomap); +} + +INTERRUPT_GEN_MEMBER(royalmah_prgbank_state::suzume_irq) +{ + if (m_suzume_bank & 0x40) + device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero); +} + +void royalmah_prgbank_state::suzume(machine_config &config) +{ + dondenmj(config); + + m_maincpu->set_addrmap(AS_IO, &royalmah_prgbank_state::suzume_iomap); + m_maincpu->set_vblank_int("screen", FUNC(royalmah_prgbank_state::suzume_irq)); +} + +void royalmah_prgbank_state::jongshin(machine_config &config) +{ + dondenmj(config); + + m_maincpu->set_addrmap(AS_IO, &royalmah_prgbank_state::jongshin_iomap); +} + +void royalmah_prgbank_state::tontonb(machine_config &config) +{ + dondenmj(config); + + m_maincpu->set_addrmap(AS_IO, &royalmah_prgbank_state::tontonb_iomap); +} + +void royalmah_prgbank_state::mjdiplob(machine_config &config) +{ + dondenmj(config); + + m_maincpu->set_addrmap(AS_IO, &royalmah_prgbank_state::mjdiplob_iomap); +} + +void royalmah_prgbank_state::majs101b(machine_config &config) +{ + dondenmj(config); + + m_maincpu->set_addrmap(AS_IO, &royalmah_prgbank_state::majs101b_iomap); +} + +void royalmah_prgbank_state::mjapinky(machine_config &config) +{ + dondenmj(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &royalmah_prgbank_state::mjapinky_map); + m_maincpu->set_addrmap(AS_IO, &royalmah_prgbank_state::mjapinky_iomap); +} + +void royalmah_prgbank_state::mjderngr(machine_config &config) +{ + dondenmj(config); + + m_maincpu->set_addrmap(AS_IO, &royalmah_prgbank_state::mjderngr_iomap); + + // video hardware + m_palette->set_entries(16 * 32); + m_palette->set_init(FUNC(royalmah_prgbank_state::mjderngr_palette)); +} + +void royalmah_prgbank_state::janptr96(machine_config &config) +{ + mjderngr(config); + + tmpz84c015_device &maincpu(TMPZ84C015(config.replace(), "maincpu", XTAL(16'000'000) / 2)); // 8 MHz? + maincpu.set_addrmap(AS_PROGRAM, &royalmah_prgbank_state::janptr96_map); + maincpu.set_addrmap(AS_IO, &royalmah_prgbank_state::janptr96_iomap); + maincpu.in_pa_callback().set(FUNC(royalmah_prgbank_state::janptr96_dsw_r)); + maincpu.out_pb_callback().set(FUNC(royalmah_prgbank_state::janptr96_dswsel_w)); + // internal CTC channels 0 & 1 have falling edge triggers + + screen_device &screen(*subdevice<screen_device>("screen")); + screen.set_visarea(0, 255, 8, 255-8); + screen.screen_vblank().set(m_maincpu, FUNC(tmpz84c015_device::trg0)).invert(); + + // devices + MSM6242(config, m_rtc, 32.768_kHz_XTAL).out_int_handler().set(m_maincpu, FUNC(tmpz84c015_device::trg1)).invert(); +} + + +void royalmah_prgbank_state::mjifb(machine_config &config) +{ + mjderngr(config); + + tmp90841_device &tmp(TMP90841(config.replace(), m_maincpu, 8000000)); // ? + tmp.set_addrmap(AS_PROGRAM, &royalmah_prgbank_state::mjifb_map); + tmp.port_read<3>().set_ioport("PORT3_5").rshift(6); + tmp.port_write<3>().set(FUNC(royalmah_prgbank_state::mjifb_p3_w)); + tmp.port_write<4>().set(FUNC(royalmah_prgbank_state::mjifb_p4_w)); + tmp.port_read<5>().set_ioport("PORT3_5"); + tmp.port_read<6>().set_ioport("PORT6_7"); + tmp.port_read<7>().set_ioport("PORT6_7").rshift(4); + tmp.port_read<8>().set(FUNC(royalmah_prgbank_state::mjifb_p8_r)); + tmp.port_write<8>().set(FUNC(royalmah_prgbank_state::mjifb_p8_w)); + + screen_device &screen(*subdevice<screen_device>("screen")); + screen.set_visarea(0, 255, 8, 255-8); + screen.screen_vblank().set_inputline(m_maincpu, INPUT_LINE_IRQ0); +} + + +void royalmah_prgbank_state::mjdejavu(machine_config &config) +{ + mjderngr(config); + tmp90841_device &tmp(TMP90841(config.replace(), m_maincpu, 8000000)); // ? + tmp.set_addrmap(AS_PROGRAM, &royalmah_prgbank_state::mjdejavu_map); + tmp.port_read<3>().set_ioport("PORT3_5").rshift(6); + tmp.port_write<3>().set(FUNC(royalmah_prgbank_state::mjifb_p3_w)); + tmp.port_write<4>().set(FUNC(royalmah_prgbank_state::mjifb_p4_w)); + tmp.port_read<5>().set_ioport("PORT3_5"); + tmp.port_read<6>().set_ioport("PORT6_7"); + tmp.port_read<7>().set_ioport("PORT6_7").rshift(4); + tmp.port_read<8>().set(FUNC(royalmah_prgbank_state::mjifb_p8_r)); + tmp.port_write<8>().set(FUNC(royalmah_prgbank_state::mjifb_p8_w)); + + screen_device &screen(*subdevice<screen_device>("screen")); + screen.set_visarea(0, 255, 8, 255-8); + screen.screen_vblank().set_inputline(m_maincpu, INPUT_LINE_IRQ0); +} + + +void royalmah_prgbank_state::mjtensin(machine_config &config) +{ + mjderngr(config); + tmp90841_device &tmp(TMP90841(config.replace(), m_maincpu, 12000000)); // ? + tmp.set_addrmap(AS_PROGRAM, &royalmah_prgbank_state::mjtensin_map); + tmp.port_read<3>().set(FUNC(royalmah_prgbank_state::mjtensin_p3_r)); + tmp.port_write<4>().set(FUNC(royalmah_prgbank_state::mjtensin_p4_w)); + + screen_device &screen(*subdevice<screen_device>("screen")); + screen.set_visarea(0, 255, 8, 255-8); + screen.screen_vblank().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + + // devices + MSM6242(config, m_rtc, 32.768_kHz_XTAL).out_int_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ1); +} + +void royalmah_prgbank_state::majrjh(machine_config &config) +{ + mjtensin(config); + tmp91640_device &tmp(TMP91640(config.replace(), m_maincpu, 12_MHz_XTAL)); + tmp.set_addrmap(AS_PROGRAM, &royalmah_prgbank_state::majrjh_map); + tmp.port_read<3>().set(FUNC(royalmah_prgbank_state::mjtensin_p3_r)); + tmp.port_write<4>().set(FUNC(royalmah_prgbank_state::mjtensin_p4_w)); +} + +void royalmah_prgbank_state::cafetime(machine_config &config) +{ + mjderngr(config); + tmp90841_device &tmp(TMP90841(config.replace(), m_maincpu, 12000000)); // ? + tmp.set_addrmap(AS_PROGRAM, &royalmah_prgbank_state::cafetime_map); + tmp.port_write<3>().set(FUNC(royalmah_prgbank_state::cafetime_p3_w)); + tmp.port_write<4>().set(FUNC(royalmah_prgbank_state::cafetime_p4_w)); + + screen_device &screen(*subdevice<screen_device>("screen")); + screen.set_visarea(0, 255, 8, 255-8); + screen.screen_vblank().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + + // devices + MSM6242(config, m_rtc, 32.768_kHz_XTAL).out_int_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ1); +} + +void royalmah_prgbank_state::cafedoll(machine_config &config) +{ + cafetime(config); + tmp90840_device &tmp(TMP90840(config.replace(), m_maincpu, XTAL(8'000'000))); // XTAL is verified, should it be divided? + tmp.set_addrmap(AS_PROGRAM, &royalmah_prgbank_state::cafetime_map); + tmp.port_write<3>().set(FUNC(royalmah_prgbank_state::cafetime_p3_w)); + tmp.port_write<4>().set(FUNC(royalmah_prgbank_state::cafetime_p4_w)); + tmp.port_read<5>().set(FUNC(royalmah_prgbank_state::mjvegas_p5_r)); + tmp.port_write<6>().set(FUNC(royalmah_prgbank_state::cafedoll_p6_w)); + tmp.port_write<7>().set(FUNC(royalmah_prgbank_state::cafedoll_p7_w)); +} + +void royalmah_prgbank_state::cafepara(machine_config &config) +{ + cafetime(config); + tmp91640_device &tmp(TMP91640(config.replace(), m_maincpu, XTAL(8'000'000))); // XTAL is verified, should it be divided? + tmp.set_addrmap(AS_PROGRAM, &royalmah_prgbank_state::cafepara_map); + tmp.port_read<3>().set([this] () { logerror("%s: p3 in\n", machine().describe_context()); return uint8_t(0); }); // read sometimes + tmp.port_read<4>().set([this] () { logerror("%s: p4 in\n", machine().describe_context()); return uint8_t(0); }); // not seen yet + tmp.port_read<5>().set([this] () { logerror("%s: p5 in\n", machine().describe_context()); return uint8_t(0); }); // dips 5-8 for each of the 4 dip banks + dips 9-10 for first and second bank + tmp.port_read<6>().set([this] () { logerror("%s: p6 in\n", machine().describe_context()); return uint8_t(0); }); // dips 1-4 for each of the 4 dip banks + dips 9-10 for third and fourth bank + tmp.port_read<7>().set([this] () { logerror("%s: p7 in\n", machine().describe_context()); return uint8_t(0); }); // not seen yet + tmp.port_read<8>().set([this] () { logerror("%s: p8 in\n", machine().describe_context()); return uint8_t(0); }); + tmp.port_write<3>().set([this] (uint8_t data) { logerror("%s: p3 out %02X\n", machine().describe_context(), data); }); // 0x6c at startup, remnant of older games? + tmp.port_write<4>().set([this] (uint8_t data) { logerror("%s: p4 out %02X\n", machine().describe_context(), data); }); // 0x00 at startup + tmp.port_write<5>().set([this] (uint8_t data) { logerror("%s: p5 out %02X\n", machine().describe_context(), data); }); // not seen yet + tmp.port_write<6>().set([this] (uint8_t data) { logerror("%s: p6 out %02X\n", machine().describe_context(), data); }); // not seen yet + tmp.port_write<7>().set([this] (uint8_t data) { logerror("%s: p7 out %02X\n", machine().describe_context(), data); }); // seen 0x07, 0x0b, 0x0d, 0x0f. DSW select + tmp.port_write<8>().set([this] (uint8_t data) { logerror("%s: p8 out %02X\n", machine().describe_context(), data); }); // 0x00 or 0x08, most probably view but could also have to do with DSW select +} + +void royalmah_prgbank_state::mjvegasa(machine_config &config) +{ + mjderngr(config); + tmp90841_device &tmp(TMP90841(config.replace(), m_maincpu, XTAL(8'000'000))); // ? + tmp.set_addrmap(AS_PROGRAM, &royalmah_prgbank_state::mjvegasa_map); + tmp.port_read<3>().set(FUNC(royalmah_prgbank_state::mjtensin_p3_r)); + tmp.port_write<3>().set(FUNC(royalmah_prgbank_state::mjvegasa_p3_w)); + tmp.port_write<4>().set(FUNC(royalmah_prgbank_state::mjvegasa_p4_w)); + + screen_device &screen(*subdevice<screen_device>("screen")); + screen.set_visarea(0, 255, 8, 255-8); + screen.screen_vblank().set_inputline(m_maincpu, INPUT_LINE_IRQ0); + + // devices + MSM6242(config, m_rtc, 32.768_kHz_XTAL).out_int_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ1); +} + +void royalmah_prgbank_state::mjvegas(machine_config &config) +{ + mjvegasa(config); + + tmp90840_device &tmp(TMP90840(config.replace(), m_maincpu, XTAL(8'000'000))); // XTAL is verified, should it be divided? + tmp.set_addrmap(AS_PROGRAM, &royalmah_prgbank_state::mjvegasa_map); + tmp.port_read<3>().set(FUNC(royalmah_prgbank_state::mjtensin_p3_r)); + tmp.port_write<3>().set(FUNC(royalmah_prgbank_state::mjvegasa_p3_w)); + tmp.port_write<4>().set(FUNC(royalmah_prgbank_state::mjvegasa_p4_w)); + tmp.port_read<5>().set(FUNC(royalmah_prgbank_state::mjvegas_p5_r)); + tmp.port_write<6>().set(FUNC(royalmah_prgbank_state::mjvegas_p6_w)); + tmp.port_write<7>().set(FUNC(royalmah_prgbank_state::mjvegas_p7_w)); +} + +void royalmah_prgbank_state::ichiban(machine_config &config) +{ + // basic machine hardware + Z80(config, m_maincpu, 18.432_MHz_XTAL / 3); + m_maincpu->set_addrmap(AS_PROGRAM, &royalmah_prgbank_state::ichiban_map); + m_maincpu->set_addrmap(AS_IO, &royalmah_prgbank_state::ichiban_iomap); + m_maincpu->set_addrmap(AS_OPCODES, &royalmah_prgbank_state::ichiban_opcodes_map); + m_maincpu->set_vblank_int("screen", FUNC(royalmah_prgbank_state::irq0_line_hold)); + + NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); + + // video hardware + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_size(256, 256); + screen.set_visarea(0, 255, 8, 247); + screen.set_refresh_hz(60.5686); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); + screen.set_screen_update(FUNC(royalmah_prgbank_state::screen_update)); + + PALETTE(config, m_palette, palette_device::RGB_444_PROMS, "proms", 512); + + // sound hardware + SPEAKER(config, "mono").front_center(); + + ym2149_device &ay(YM2149(config, "aysnd", 18.432_MHz_XTAL / 12)); + ay.port_a_read_callback().set(FUNC(royalmah_prgbank_state::player_1_port_r)); + ay.port_b_read_callback().set(FUNC(royalmah_prgbank_state::player_2_port_r)); + ay.add_route(ALL_OUTPUTS, "mono", 0.30); + + YM2413(config, "ymsnd", 18.432_MHz_XTAL / 6).add_route(ALL_OUTPUTS, "mono", 0.5); +} + +void royalmah_prgbank_state::pongboo2(machine_config &config) +{ + // basic machine hardware + Z80(config, m_maincpu, 48_MHz_XTAL / 12); // not a Z80, probably some derived core + m_maincpu->set_addrmap(AS_PROGRAM, &royalmah_prgbank_state::pongboo2_map); + m_maincpu->set_addrmap(AS_IO, &royalmah_prgbank_state::pongboo2_iomap); + m_maincpu->set_addrmap(AS_OPCODES, &royalmah_prgbank_state::pongboo2_opcodes_map); + m_maincpu->set_vblank_int("screen", FUNC(royalmah_prgbank_state::irq0_line_hold)); + + NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); + + // video hardware + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_size(256, 256); + screen.set_visarea(0, 255, 8, 247); + screen.set_refresh_hz(60.5686); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); // not accurate + screen.set_screen_update(FUNC(royalmah_prgbank_state::screen_update)); + + PALETTE(config, m_palette).set_format(palette_device::xRGB_444, 512); // wrong + + // sound hardware + SPEAKER(config, "mono").front_center(); + + OKIM6295(config, "oki", 1'000'000, okim6295_device::PIN7_LOW).add_route(ALL_OUTPUTS, "mono", 0.5); // frequency and pin 7 not verified +} + + +/*************************************************************************** + + Game driver(s) + +***************************************************************************/ + +/*************************************************************************** + +Royal Mahjong +(c)1981 Nichibutsu + +CPU: Z80 +Sound: AY-3-8910 +OSC: 18.432MHz + +***************************************************************************/ + +ROM_START( royalmj ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "1.p1", 0x0000, 0x1000, CRC(549544bb) SHA1(dfb221572c7bfd267a22c0a944830d5f127f9942) ) + ROM_LOAD( "2.p2", 0x1000, 0x1000, CRC(afc8a61e) SHA1(4134f6404f955838fc48fd0f87b83ebc75c1a021) ) + ROM_LOAD( "3.p3", 0x2000, 0x1000, CRC(5d33e54d) SHA1(bf5e0ad5177c086f1cea5c90d7273a841db941bc) ) + ROM_LOAD( "4.p4", 0x3000, 0x1000, CRC(91339560) SHA1(0fb4141e236ab57b3e915dadb982b28ca11d269f) ) + ROM_LOAD( "5.p5", 0x4000, 0x1000, CRC(cc9123a3) SHA1(75276045247a0c9ac5810be01f3b58ad63101f9b) ) + ROM_LOAD( "6.p6", 0x5000, 0x1000, CRC(92150a0f) SHA1(5c97ba5014abdba4afc78e02e7d90e6ca4d777ac) ) + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "18s030n.6k", 0x0000, 0x0020, CRC(d3007282) SHA1(e4d863ab193e49208ed0f59dcddb1da0492314f6) ) // sldh w/tahjong +ROM_END + +ROM_START( royalmah ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "rom1", 0x0000, 0x1000, CRC(69b37a62) SHA1(7792528754b0df4e11f4ebe33380b713ac7351a3) ) + ROM_LOAD( "rom2", 0x1000, 0x1000, CRC(0c8351b6) SHA1(9e6b48fd39dd98478d1e3557df839b09652c4349) ) + ROM_LOAD( "rom3", 0x2000, 0x1000, CRC(b7736596) SHA1(4b8bc175d945e695b767b9fb2227ffc1cd4b0547) ) + ROM_LOAD( "rom4", 0x3000, 0x1000, CRC(e3c7c15c) SHA1(a335374cc0f5b1d8e689cc304d006dd97f3e35e7) ) + ROM_LOAD( "rom5", 0x4000, 0x1000, CRC(16c09c73) SHA1(ea712f9ca3200ca27434e4200187b488e24f4c65) ) + ROM_LOAD( "rom6", 0x5000, 0x1000, CRC(92687327) SHA1(4fafba5881dca2a147616d94dd055eba6aa3c653) ) + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "f-rom.bpr", 0x0000, 0x0020, CRC(d3007282) SHA1(e4d863ab193e49208ed0f59dcddb1da0492314f6) ) +ROM_END + +ROM_START( openmj ) + ROM_REGION( 0x7000, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD( "10", 0x0000, 0x2000, CRC(4042920e) SHA1(19753bcb27ebf391ab824a45c6e41d956826a263) ) + ROM_LOAD( "20", 0x2000, 0x2000, CRC(8fa0f735) SHA1(645154d51c0679b953b9ffc2f1d3b8f2752a0796) ) + ROM_LOAD( "30", 0x4000, 0x2000, CRC(00045cd7) SHA1(0c32995753c1da14dacc8bc6c12dbcbdcae4e1b0) ) + + ROM_REGION( 0x20, "proms", 0 ) + ROM_LOAD( "82s123.prm", 0x00, 0x20, CRC(d3007282) SHA1(e4d863ab193e49208ed0f59dcddb1da0492314f6) ) +ROM_END + +ROM_START( tahjong ) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "p1.bin", 0x00000, 0x1000, CRC(49c922b3) SHA1(6672a4f739d428b722ab22e7ca93064211557abc) ) + ROM_LOAD( "p2.bin", 0x01000, 0x1000, CRC(c33e3cc3) SHA1(707c437f180ddd2916b5806f208e0a478207d528) ) + ROM_LOAD( "p3.bin", 0x02000, 0x1000, CRC(9e741a74) SHA1(6c8e8eb04331d48b72e2be270c13dbf8deb76005) ) + ROM_LOAD( "p4.bin", 0x03000, 0x1000, CRC(dc6ae62b) SHA1(d0c51047f734c885b7f19972c1bf0408199fde51) ) + ROM_LOAD( "p5.bin", 0x04000, 0x1000, CRC(cc9123a3) SHA1(75276045247a0c9ac5810be01f3b58ad63101f9b) ) // same as royalmj (unused) + ROM_LOAD( "p6.bin", 0x05000, 0x1000, CRC(92150a0f) SHA1(5c97ba5014abdba4afc78e02e7d90e6ca4d777ac) ) // "" + + ROM_LOAD( "s1.bin", 0x10000, 0x4000, CRC(beff21af) SHA1(4dc40a1ac4e36401b1ad8ae3954af6e5001e0a67) ) + ROM_LOAD( "s2.bin", 0x14000, 0x4000, CRC(fed42e7c) SHA1(31136dff07bd1883dc2d107823ba83a34abf003d) ) + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "18s030n.6k", 0x0000, 0x0020, CRC(c074c0f0) SHA1(b62519d1496ea366b0ea8ed657bd758ce93875ec) ) // sldh w/royalmj +ROM_END + +ROM_START( janputer ) + ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD( "1.bin", 0x0000, 0x2000, CRC(f36f4222) SHA1(ce18c273a59f86cb17ea6ba8a3daefc3d750df1e) ) + ROM_LOAD( "2.bin", 0x2000, 0x2000, CRC(7d57cb48) SHA1(38b97c5d02e3ab6187e5e0f86c06b8a3747b51a8) ) + ROM_LOAD( "3.bin", 0x4000, 0x2000, CRC(fb481d9a) SHA1(122e2b0d11fe1fe8cf219da9c8f96fe5a1016bb6) ) + ROM_LOAD( "7.bin", 0x6000, 0x1000, CRC(bb00fb9e) SHA1(4d2965a0339328d1700b39c166a5a92a96b05e67) ) + + 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( 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 + +CPU: Z80 +Sound: AY-3-8910 +Video: HD46505SP(HD6845SP) +OSC: 18.432MHz + +ROMs: +1.C110 [36ebb3d0] +2.C109 [324426d4] +3.C108 [e98b6d34] +4.C107 [377b8ce9] + +N82S123N.C98 [d3007282] + + +Others: +Battery +empty socket for MC68705 +***************************************************************************/ + +ROM_START( janyoup2 ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "1.c110", 0x0000, 0x2000, CRC(36ebb3d0) SHA1(39c0cdd1dc5878539768074dad3c39aac4ace8bf) ) + ROM_LOAD( "2.c109", 0x2000, 0x2000, CRC(324426d4) SHA1(409244c8458d9bafa325746c37de9e7b955b3787) ) + ROM_LOAD( "3.c108", 0x4000, 0x2000, CRC(e98b6d34) SHA1(e27ab9a03aff750df78c5db52a112247bdd31328) ) + ROM_LOAD( "4.c107", 0x6000, 0x1000, CRC(377b8ce9) SHA1(a5efc517ae975e54af5325b8b3f4867e9f449d4c) ) + + ROM_REGION( 0x0020, "proms", 0 ) + 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 + ROM_LOAD( "1", 0x2000, 0x2000, CRC(d670d7c3) SHA1(2106ecf6ad675b8fd167f1f21d615afdfb5bca6d) ) + ROM_LOAD( "3", 0x4000, 0x2000, CRC(6c0dfd50) SHA1(1f91ff0ef2f24414888ae8e5ebac72a5bb48780b) ) + ROM_LOAD( "5", 0x6000, 0x2000, CRC(22eb98ee) SHA1(aae0ba5098852e6fef3dd7cc97dfad97ca444bb7) ) + ROM_LOAD( "4", 0x8000, 0x1000, CRC(d41e2a10) SHA1(9c24f89ba877ab599ea89961b5e705fa770867be) ) + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "82s123_1", 0x0000, 0x0020, CRC(f1df0310) SHA1(cc7dd39a0aa10b57039143e587eee02cf5dd2e5c) ) +ROM_END + +/**************************************************************************** + +Ippatsu Gyakuten +(c)1986 Public Software / Paradais + +modified Royal Mahjong hardware + +CPU: Z80 +Sound: AY-3-8910 + +ROMs: +11(27256) +12(27128) +82S123AN + +dumped by sayu + +****************************************************************************/ + +ROM_START( ippatsu ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "11", 0x0000, 0x8000, CRC(5f563be7) SHA1(2ce486777bd61a2de789683cd0c8abeefe31775b) ) + ROM_LOAD( "12", 0x8000, 0x4000, CRC(a09a43b0) SHA1(da12e669ccd036da817a69bd549e8668e6a45730) ) + + ROM_REGION( 0x0020, "proms", 0 ) + 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) ) + ROM_LOAD( "p2.bin", 0x01000, 0x1000, CRC(dd48cd62) SHA1(1ce7b515fabae5054f0ac284a9ed5760f59d18fa) ) + ROM_LOAD( "p3.bin", 0x02000, 0x1000, CRC(10a05c23) SHA1(f13ba660bc5eff9057b1ab46f564f586c76e945d) ) + ROM_LOAD( "p4.bin", 0x03000, 0x1000, CRC(267eaf52) SHA1(56e2f5d7080463dc0f11a2751590ac2b79eb02c5) ) + ROM_LOAD( "p5.bin", 0x04000, 0x1000, CRC(2fde346b) SHA1(7f45aa4427b4cb6bf6cc5919d397b25d53e133f3) ) + ROM_LOAD( "p6.bin", 0x05000, 0x1000, CRC(57f42ac7) SHA1(209b2f62a64ddf544578f144d9ec83478603c8b2) ) + // bank switched ROMs follow + ROM_LOAD( "1.1a", 0x10000, 0x08000, CRC(f670dd47) SHA1(d0236021ae4dd5a10603dde038eb777feeff016f) ) // 0 + ROM_LOAD( "2.1c", 0x18000, 0x08000, CRC(140b11aa) SHA1(6f6a96135434324dcb486596920cb785fe2bf1a2) ) // 1 + ROM_LOAD( "3.1d", 0x20000, 0x08000, CRC(3d437b61) SHA1(175308086e1d7ab566c82dcaeef9f50690edf92a) ) // 2 + ROM_LOAD( "4.1e", 0x28000, 0x08000, CRC(9da8952e) SHA1(956d16b82ff8fe733a7b3135d082e18ea5167dfe) ) // 3 + ROM_LOAD( "5.1h", 0x30000, 0x08000, CRC(04a6f41a) SHA1(37117faf6bc823770413faa7618387ca6f16fa34) ) // 4 + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "ic6k.bin", 0x0000, 0x0020, CRC(97e1defe) SHA1(b5002218b2292f7623dd9a205ce183dedeec03f1) ) +ROM_END + +ROM_START( jongshin ) + ROM_REGION( 0x28000, "maincpu", 0 ) // all 2732 + ROM_LOAD( "js1.p1", 0x00000, 0x1000, CRC(0c33eb1c) SHA1(4258f2df8e9d4d3fd3fd77c555bd36ced601c45f) ) + ROM_LOAD( "js2.p2", 0x01000, 0x1000, CRC(a74bfa19) SHA1(378ec5dcddbe1c1e66b9ec0576b898442e3ba89c) ) + ROM_LOAD( "js3.p3", 0x02000, 0x1000, CRC(7519804f) SHA1(4181e58964ae149e675c2aeb49edee6f5d06f6ed) ) + ROM_LOAD( "js4.p4", 0x03000, 0x1000, CRC(2d6b49bc) SHA1(4e75df252cc3af003a99cc9425980a9d2a457558) ) + ROM_LOAD( "js5.p5", 0x04000, 0x1000, CRC(4631153f) SHA1(d31e15de3d54118905946836e72b4794dae89004) ) + ROM_LOAD( "js6.p6", 0x05000, 0x1000, CRC(ed32bd57) SHA1(6d5d1ae959e07207146197c7c370810306dca462) ) + // bank switched ROMs follow + ROM_LOAD( "dyna 1.8c", 0x10000, 0x08000, CRC(d2cea54a) SHA1(16143974731d3b81ad377ebe58c9253c127e5588) ) // 27256 + ROM_LOAD( "dyna 2.7c", 0x18000, 0x08000, CRC(9d7c62ff) SHA1(92de7bb84f6f64b887b5500a54ff6f0b84e0b07d) ) // 27256 + ROM_LOAD( "dyna 3.6c", 0x20000, 0x04000, CRC(b716f2e1) SHA1(f29617185771a43f057dff062a2493bcf281c85a) ) // 27128 + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "82s123.6k", 0x0000, 0x0020, CRC(faa20ce5) SHA1(408e90c13d5bd5fefdd9767a7643808a3cd9c111) ) +ROM_END + +ROM_START( dondenmj ) + ROM_REGION( 0x90000, "maincpu", 0 ) + ROM_LOAD( "dn5.1h", 0x00000, 0x08000, CRC(3080252e) SHA1(e039087afc36a0c594da093ea599b81a1d757139) ) + // bank switched ROMs follow + ROM_LOAD( "dn1.1e", 0x18000, 0x08000, CRC(1cd9c48a) SHA1(12bc519889dacea59ae49672ad5313fff3a99f12) ) // 1 + ROM_LOAD( "dn2.1d", 0x20000, 0x04000, CRC(7a72929d) SHA1(7955f41883fa53876172bac417955ed0b5eb43f4) ) // 2 + ROM_LOAD( "dn3.2h", 0x30000, 0x08000, CRC(b09d2897) SHA1(0cde3e16ca333be01a5ab3a232f2ea602faec7a2) ) // 4 + ROM_LOAD( "dn4.2e", 0x50000, 0x08000, CRC(67d7dcd6) SHA1(6b708a29de1f4738eb2d4e667327d9433ff7216c) ) // 8 + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "ic6k.bin", 0x0000, 0x0020, CRC(97e1defe) SHA1(b5002218b2292f7623dd9a205ce183dedeec03f1) ) +ROM_END + +ROM_START( mjdiplob ) + ROM_REGION( 0x90000, "maincpu", 0 ) + ROM_LOAD( "071.4l", 0x00000, 0x10000, CRC(81a6d6b0) SHA1(c6169e6d5f35304a0c3efcc2175c3213650f179c) ) + // bank switched ROMs follow + ROM_RELOAD( 0x10000, 0x10000 ) // 0,1 + ROM_LOAD( "072.4k", 0x20000, 0x10000, CRC(a992bb85) SHA1(e60231e04831dac122d1d49a68641ee47b57faaf) ) // 2,3 + ROM_LOAD( "073.4j", 0x30000, 0x10000, CRC(562ed64f) SHA1(42b4a7e5a8de4dde83c12d7b9facf561bc872978) ) // 4,5 + ROM_LOAD( "074.4h", 0x40000, 0x10000, CRC(1eba0140) SHA1(0d0b95be338d7450ad3b24cc47e24e94f86dcefe) ) // 6,7 + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "ic6k.bin", 0x0000, 0x0020, CRC(c1e427df) SHA1(9a9980d93dff4b87a940398b18277acaf946eeab) ) +ROM_END + +ROM_START( tontonb ) + ROM_REGION( 0x90000, "maincpu", 0 ) + ROM_LOAD( "091.5e", 0x00000, 0x10000, CRC(d8d67b59) SHA1(7e7a85df738f80fc031cda8a104ac9c7b3e24785) ) + // bank switched ROMs follow + ROM_RELOAD( 0x10000, 0x10000 ) // 0,1 + /**/ // 2,3 unused + ROM_LOAD( "093.5b", 0x30000, 0x10000, CRC(24b6be55) SHA1(11390d6ed55d7d0b7b84c6d36d4ac5330a06abba) ) // 4,5 + /**/ // 6,7 unused + ROM_LOAD( "092.5c", 0x50000, 0x10000, CRC(7ff2738b) SHA1(89a49f89705f499439dc024fc70c87141a84780b) ) // 8,9 + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "ic6k.bin", 0x0000, 0x0020, CRC(97e1defe) SHA1(b5002218b2292f7623dd9a205ce183dedeec03f1) ) +ROM_END + +/*************************************************************************** + +Makaijan +(c)1987 Dynax + +***************************************************************************/ + +ROM_START( makaijan ) + ROM_REGION( 0x90000, "maincpu", 0 ) + ROM_LOAD( "ic1h.bin", 0x00000, 0x10000, CRC(7448c220) SHA1(ebb6564b83ce4f40a6e50a1be734e2086d97f592) ) + // bank switched ROMs follow + ROM_COPY( "maincpu", 0x08000, 0x10000, 0x8000 ) + ROM_COPY( "maincpu", 0x08000, 0x18000, 0x8000 ) + ROM_LOAD( "052.1e", 0x50000, 0x10000, CRC(a881ca93) SHA1(499e17d2f57caa49c391d57dd737399fe4672f78) ) + ROM_LOAD( "053.1d", 0x30000, 0x10000, CRC(5f1d3e88) SHA1(152fde9f8e506f7f4ca1b2ecf8a828ece0501f78) ) + ROM_LOAD( "054.2h", 0x70000, 0x10000, CRC(ebc387c7) SHA1(7dfc892a5cccde7494ed06bbab88b4ea320dffbc) ) + ROM_LOAD( "055.2e", 0x20000, 0x10000, CRC(e26852ae) SHA1(8f8edefe851fd3641a5b4b227fb4dd976cdfa3e9) ) + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "ic6k.bin", 0x0000, 0x0020, CRC(97e1defe) SHA1(b5002218b2292f7623dd9a205ce183dedeec03f1) ) +ROM_END + +/*************************************************************************** + +Daisyarin +(c)1989 Best System + +***************************************************************************/ + +ROM_START( daisyari ) + ROM_REGION( 0x50000, "maincpu", 0 ) + ROM_LOAD( "1a.bin", 0x00000, 0x10000, CRC(7d14f90c) SHA1(742684d0785a93a45de0467e004db00531d016e2) ) + // bank switched ROMs follow + ROM_COPY( "maincpu", 0x00000, 0x10000, 0x10000 ) + ROM_LOAD( "1c.bin", 0x20000, 0x10000, CRC(edfe52b9) SHA1(704c107fc8b89f561d2031d10468c124ab3d007a) ) // 2 + ROM_LOAD( "1d.bin", 0x30000, 0x10000, CRC(38f54a98) SHA1(d06eb851c75bfb2d8dd99bf5072c7f359f1f17e2) ) // 3 + ROM_LOAD( "1f.bin", 0x40000, 0x10000, CRC(b635f295) SHA1(dba3a59133c33c915dba678c510f00fb476f24da) ) // 4 + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "6k.bin", 0x0000, 0x0020, CRC(c1e427df) SHA1(9a9980d93dff4b87a940398b18277acaf946eeab) ) +ROM_END + +/*************************************************************************** + +Mahjong Club +(c)XEX + +Royal Mahjong subboard + +1 +3 +4 +5 +63s081n + +6116 RAM +surface scratched 40pin DIP (Z80?) +4.000MHz + +***************************************************************************/ + +ROM_START( mjclub ) + ROM_REGION( 0x80000, "maincpu", 0 ) + ROM_LOAD( "5", 0x00000, 0x10000, CRC(cd148465) SHA1(42d1848656e461cfbf3fc0ba88ef8f4e67425f8c) ) + // bank switched ROMs follow + ROM_COPY( "maincpu", 0x00000, 0x10000, 0x10000 ) + ROM_LOAD( "1", 0x50000, 0x10000, CRC(d0131f4b) SHA1(aac40b47b48f0ebfb07aaf17cb2a080fdcaa4697) ) + ROM_LOAD( "3", 0x60000, 0x10000, CRC(25628c38) SHA1(5166934c488c2f91bd6026c7896ad3536727d950) ) + ROM_LOAD( "4", 0x70000, 0x10000, CRC(a6ada333) SHA1(5fd44bf298a6f327118b98641af1aa0910519ded) ) + ROM_COPY( "maincpu", 0x50000, 0x40000, 0x10000 ) // guess + ROM_COPY( "maincpu", 0x60000, 0x30000, 0x10000 ) + ROM_COPY( "maincpu", 0x70000, 0x20000, 0x10000 ) + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "63s081n", 0x0000, 0x0020, CRC(4add90c5) SHA1(de14abcba6eee53e73801ff12c45a75e875e6ca3) ) +ROM_END + +ROM_START( majs101b ) + ROM_REGION( 0x90000, "maincpu", 0 ) + ROM_LOAD( "171.3e", 0x00000, 0x10000, CRC(fa3c553b) SHA1(fda212559c4d55610a12ad2927afe21f9069c7b6) ) + // bank switched ROMs follow + /**/ // 0,1 unused + ROM_RELOAD( 0x20000, 0x10000 ) // 2,3 + ROM_LOAD( "172.3f", 0x30000, 0x20000, CRC(7da39a63) SHA1(34d07978a326c83e5b51ce19619d52a75a501795) ) // 4,5,6,7 + ROM_LOAD( "173.3h", 0x50000, 0x20000, CRC(7a9e71ae) SHA1(ce1bde6e05f81b7dbb14015514397ed72f8dd92a) ) // 8,9,a,b + ROM_LOAD( "174.3j", 0x70000, 0x10000, CRC(972c2cc9) SHA1(ba78d29d1723783dbd0e8c754d2422caad5ab367) ) // c,d + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "ic6k.bin", 0x0000, 0x0020, CRC(c1e427df) SHA1(9a9980d93dff4b87a940398b18277acaf946eeab) ) +ROM_END + +ROM_START( mjderngr ) + ROM_REGION( 0xb0000, "maincpu", 0 ) + ROM_LOAD( "2201.1a", 0x00000, 0x08000, CRC(54ec531d) SHA1(c5d9c575f6bdc499bae35123d7ad5bd4869b6ed9) ) + // bank switched ROMs follow + ROM_CONTINUE( 0x10000, 0x08000 ) // 0 + ROM_LOAD( "2202.1b", 0x30000, 0x10000, CRC(edcf97f2) SHA1(8143f41d511fa01bd86faf829eb2c139292d705f) ) // 4,5 + ROM_LOAD( "2203.1d", 0x50000, 0x10000, CRC(a33368c0) SHA1(e216b65d7ed59d7cbf2b5d078799915d707b5291) ) // 8,9 + ROM_LOAD( "2204.1e", 0x70000, 0x20000, CRC(ed5fde4b) SHA1(d55487ae1007d43b71f06ae5c407c75db7054515) ) // c,d,e,f + ROM_LOAD( "2205.1f", 0x90000, 0x20000, CRC(cfb8075d) SHA1(31f613a1a9b5f4295b552aeeddb760605ce2ac70) ) // 0x10,0x11,0x12,0x13 + + ROM_REGION( 0x400, "proms", 0 ) + ROM_LOAD( "ic3g.bin", 0x000, 0x200, CRC(d43f4c7c) SHA1(117d2e4e8d5bea3e5dc903a4b87bd71786ae009c) ) + ROM_LOAD( "ic4g.bin", 0x200, 0x200, CRC(30cf7831) SHA1(b4593d51c6ceb301279a01a98665e4be8a3c403d) ) +ROM_END + +/*************************************************************************** + +Mahjong If (BET type) +(c)1990 Dynax + +CPU: Unknown 64P(Toshiba TLCS-90 series?) +Sound: AY-3-8910 +OSC: 8.000MHz + 18.432MHz + + +2911.1B prg. +2902.1C +2903.1D +2904.1E +2905.1F +2906.1G + +D29-1.4C color +D29-2.4D + +***************************************************************************/ + +ROM_START( mjifb ) + ROM_REGION( 0xd0000, "maincpu", 0 ) + ROM_LOAD( "2911.1b", 0x00000, 0x10000, CRC(138a31a1) SHA1(7e77c63a968206b8e61aaa423e19a766e4142554) ) + // bank switched ROMs follow + ROM_RELOAD( 0x10000, 0x08000 ) // bank 0 = 8000-bfff + ROM_CONTINUE( 0x10000, 0x08000 ) + ROM_LOAD( "2903.1d", 0x30000, 0x20000, CRC(90c44965) SHA1(6904bfa7475f9de921bc2abcfc337b3daf7e0fad) ) + ROM_LOAD( "2906.1g", 0x50000, 0x20000, CRC(ad469345) SHA1(914ea4c77a540467da779ea78c52e66b05c30475) ) + ROM_LOAD( "2904.1e", 0x70000, 0x20000, CRC(2791abfa) SHA1(a8fd1a7e1cf4441b447a4605ad2f1c13775f92da) ) + ROM_LOAD( "2905.1f", 0x90000, 0x20000, CRC(b7a73cf7) SHA1(d93111e6d5f84e331f8198d8c595e3500abed133) ) + ROM_LOAD( "2902.1c", 0xb0000, 0x10000, CRC(0ce02a98) SHA1(69f6bca9af8548038401839047a304a4aa97cfe6) ) + ROM_RELOAD( 0xc0000, 0x10000 ) + + ROM_REGION( 0x400, "proms", 0 ) + ROM_LOAD( "d29-2.4d", 0x000, 0x200, CRC(78252f6a) SHA1(1869147bc6b7573c2543bdf6b17d6c3c1debdddb) ) + ROM_LOAD( "d29-1.4c", 0x200, 0x200, CRC(4aaec8cf) SHA1(fbe1c3729d078a422ffe68dfde495fcb9f329cdd) ) +ROM_END + +ROM_START( mjifb2 ) + ROM_REGION( 0xd0000, "maincpu", 0 ) + ROM_LOAD( "2921.bin", 0x00000, 0x10000, CRC(9f2bfa4e) SHA1(7d6ca22bf0a91d65fde34ae321054638df705eef) ) + // bank switched ROMs follow + ROM_RELOAD( 0x10000, 0x08000 ) // bank 0 = 8000-bfff + ROM_CONTINUE( 0x10000, 0x08000 ) + ROM_LOAD( "2903.1d", 0x30000, 0x20000, CRC(90c44965) SHA1(6904bfa7475f9de921bc2abcfc337b3daf7e0fad) ) + ROM_LOAD( "2906.1g", 0x50000, 0x20000, CRC(ad469345) SHA1(914ea4c77a540467da779ea78c52e66b05c30475) ) + ROM_LOAD( "2904.1e", 0x70000, 0x20000, CRC(2791abfa) SHA1(a8fd1a7e1cf4441b447a4605ad2f1c13775f92da) ) + ROM_LOAD( "2905.1f", 0x90000, 0x20000, CRC(b7a73cf7) SHA1(d93111e6d5f84e331f8198d8c595e3500abed133) ) + ROM_LOAD( "2902.1c", 0xb0000, 0x10000, CRC(0ce02a98) SHA1(69f6bca9af8548038401839047a304a4aa97cfe6) ) + ROM_RELOAD( 0xc0000, 0x10000 ) + + ROM_REGION( 0x400, "proms", 0 ) + ROM_LOAD( "d29-2.4d", 0x000, 0x200, CRC(78252f6a) SHA1(1869147bc6b7573c2543bdf6b17d6c3c1debdddb) ) + ROM_LOAD( "d29-1.4c", 0x200, 0x200, CRC(4aaec8cf) SHA1(fbe1c3729d078a422ffe68dfde495fcb9f329cdd) ) +ROM_END + +ROM_START( mjifb3 ) + ROM_REGION( 0xd0000, "maincpu", 0 ) + ROM_LOAD( "2931.bin", 0x00000, 0x10000, CRC(2a3133de) SHA1(9fdc8c145d3da17ec5f86810716f1b1a2abd8023) ) + // bank switched ROMs follow + ROM_RELOAD( 0x10000, 0x08000 ) // bank 0 = 8000-bfff + ROM_CONTINUE( 0x10000, 0x08000 ) + ROM_LOAD( "2903.1d", 0x30000, 0x20000, CRC(90c44965) SHA1(6904bfa7475f9de921bc2abcfc337b3daf7e0fad) ) + ROM_LOAD( "2906.1g", 0x50000, 0x20000, CRC(ad469345) SHA1(914ea4c77a540467da779ea78c52e66b05c30475) ) + ROM_LOAD( "2904.1e", 0x70000, 0x20000, CRC(2791abfa) SHA1(a8fd1a7e1cf4441b447a4605ad2f1c13775f92da) ) + ROM_LOAD( "2905.1f", 0x90000, 0x20000, CRC(b7a73cf7) SHA1(d93111e6d5f84e331f8198d8c595e3500abed133) ) + ROM_LOAD( "2902.1c", 0xb0000, 0x10000, CRC(0ce02a98) SHA1(69f6bca9af8548038401839047a304a4aa97cfe6) ) + ROM_RELOAD( 0xc0000, 0x10000 ) + + ROM_REGION( 0x400, "proms", 0 ) + ROM_LOAD( "d29-2.4d", 0x000, 0x200, CRC(78252f6a) SHA1(1869147bc6b7573c2543bdf6b17d6c3c1debdddb) ) + ROM_LOAD( "d29-1.4c", 0x200, 0x200, CRC(4aaec8cf) SHA1(fbe1c3729d078a422ffe68dfde495fcb9f329cdd) ) +ROM_END + +/*************************************************************************** + +Janputer '96 +(c)1996 Dynax + +Colour PROMs are TBP28S42's + +***************************************************************************/ + +ROM_START( janptr96 ) + ROM_REGION( 0x210000, "maincpu", 0 ) + ROM_LOAD( "503x-1.1h", 0x000000, 0x40000, CRC(39914ecd) SHA1(e5796a95a7e3e7b61da63d50fa089be2946ba611) ) + // bank switched ROMs follow + ROM_RELOAD( 0x010000, 0x40000 ) + ROM_RELOAD( 0x050000, 0x40000 ) + ROM_LOAD( "503x-2.1g", 0x090000, 0x80000, CRC(d4b1ed79) SHA1(e1e266339d1d05c0405bfd32b67f215807696c82) ) + ROM_LOAD( "503x-3.1f", 0x110000, 0x80000, CRC(9ba4deb0) SHA1(e9d44a6ed849ff90c0b1f9321cdd62e18c3fd35c) ) + ROM_LOAD( "503x-4.1e", 0x190000, 0x80000, CRC(e266ca0b) SHA1(d84608e7b474061a680510a266842e667bf2eab5) ) + + ROM_REGION( 0x400, "proms", 0 ) + ROM_LOAD( "ns503b.3h", 0x000, 0x200, CRC(3b2a6b12) SHA1(ebd2929e6acbde989964bfef602b81f2f2fe04eb) ) + ROM_LOAD( "ns503a.3j", 0x200, 0x200, CRC(fe49b2f0) SHA1(a36ca005380cc92dfe473254c26be2cef2ced9b4) ) +ROM_END + +/*************************************************************************** + +Janputer Special +(c)1997 Dynax + +Colour PROMs are TBP28642's + +***************************************************************************/ + +ROM_START( janptrsp ) + ROM_REGION( 0x210000, "maincpu", 0 ) + ROM_LOAD( "ns51101.1h", 0x000000, 0x80000, CRC(44492ca1) SHA1(49e3dc9872a26e446599deb47161b8f52e4968c4) ) + // bank switched ROMs follow + ROM_RELOAD( 0x010000, 0x80000 ) + ROM_LOAD( "ns51102.1g", 0x090000, 0x80000, CRC(01e6aa19) SHA1(a761fe69fb69c0bf101033e71813742c9fc2d747) ) + ROM_LOAD( "ns51103.1f", 0x110000, 0x80000, CRC(0fc94805) SHA1(035002e8354673a063faacd3cb91d0512cab677a) ) + ROM_LOAD( "ns51104.1e", 0x190000, 0x80000, CRC(00442508) SHA1(268cc0c76bb9c21213c941952dbc891778ad397e) ) + + ROM_REGION( 0x400, "proms", 0 ) + ROM_LOAD( "ns511b.3h", 0x000, 0x200, CRC(1286434f) SHA1(6818549d0e8b231d7071e67923f47b96fc6e1bb6) ) + ROM_LOAD( "ns511a.3j", 0x200, 0x200, CRC(26b6714c) SHA1(0d110c1e3f7050a3c4ecbed630a0a8b522f1b0b0) ) +ROM_END + +/*************************************************************************** + +Mahjong Tensinhai +Dynax, 1995 + +PCB Layout +---------- + +Top board + +D10010318L1 +|----------------------------------------| +|DSW2(1) DSW4(10) DIP16| +| |---| | +|DSW1(10) DSW3(10)| * | | +| |---| PROM2 | +| | +| PROM1 | +| | +| | +| | +| | +| 1001.5E | +| |-------------| | +| | & | 1002.4E |---|| +| |-------------| | D || +|12MHz 1003.3E | I || +| | P || +|BATTERY 32.768kHz |40 || +| CLOCK 6264 |---|| +|----------------------------------------| +Notes: + Most of the chips have their surface scratched off. + * - Unknown PLCC44 IC. Possibly Mach110 or similar CPLD + & - Unknown SDIP64 IC. Possibly a Toshiba TMP91P640? Clock input 12.000MHz + CLOCK - Some kind of clock IC, like Oki M6242 or similar + PROM1 - 82S147 PROM labelled 'D100-1' + PROM2 - 82S147 PROM labelled 'D100-2' + DIP16 - Socket for cable that joins to lower board + DIP40 - Socket for connector that joins to lower board + + +Bottom board + +|--------------------------------------------------------| +| BATTERY 6116 | +| VOL | +| | +| DIP40 | +| | +| DSW(8) 18.432MHz| +| | +| | +|M DIP16 | +|A 4164 4164 | +|H | +|J 4164 4164 | +|O | +|N 4164 4164 | +|G | +|2 4164 4164 | +|8 AY3-8910 | +| 4164 4164 | +| | +| 4164 4164 | +| | +| 4164 4164 | +| | +| 4164 4164 | +|--------------------------------------------------------| +Notes: + DIP16 - Socket for cable that joins to upper board + DIP40 - Socket for connector that joins to upper board + AY3-8910 clock - 1.536 [18.432/12] + HSync - 15.5kHz + VSync - 60Hz + +***************************************************************************/ + +ROM_START( mjtensin ) + ROM_REGION( 0x290000, "maincpu", 0 ) + ROM_LOAD( "1001.5e", 0x000000, 0x80000, CRC(960e1fe9) SHA1(11f5164b2c75c0e684e910ee8e09de978bdaff2f) ) + // bank switched ROMs follow + ROM_RELOAD( 0x010000, 0x80000 ) + ROM_RELOAD( 0x090000, 0x80000 ) + + ROM_LOAD( "1002.4e", 0x110000, 0x80000, CRC(240eb7af) SHA1(2309e1c251fe55f6e6b97b5db94fa2fe914b88f4) ) + + 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) ) +ROM_END + +/*************************************************************************** + +Mahjong Raijinhai DX +Dynax, 1996 + +PCB Layout +---------- + +Top board + +D10010318L1 +sticker - D10502168 +|----------------------------------------| +|DSW2(1) DSW4(10) DIP16| +| |---| | +|DSW1(10) DSW3(10)| * | | +| |---| PROM2 | +| | +| PROM1 | +| | +| | +| | +| | +| 1051.5E | +| |-------------| | +| | & | 1052.4E |---|| +| |-------------| | D || +|12MHz 1053.3E | I || +| | P || +|BATTERY 32.768kHz |40 || +| CLOCK 6264 |---|| +|----------------------------------------| +Notes: + Most of the chips have their surface scratched off. + * - Unknown PLCC44 IC. Possibly Mach110 or similar CPLD + & - Unknown SDIP64 IC. Probably a Toshiba TMP91P640. Clock input 12.000MHz + Was read as a TMP91P640 and found to be protected. + CLOCK - Some kind of clock IC, like Oki M6242 or similar + PROM1 - TBP28S42 (equivalent to 82S147) PROM labelled 'D105-1' + PROM2 - TBP28S42 (equivalent to 82S147) PROM labelled 'D105-2' + DIP16 - Socket for cable that joins to lower board + DIP40 - Socket for connector that joins to lower board + + +Bottom board + +|--------------------------------------------------------| +| BATTERY 6116 | +| VOL | +| | +| DIP40 | +| | +| DSW(8) 18.432MHz| +| | +| | +|M DIP16 | +|A 4116 4116 | +|H | +|J 4116 4116 | +|O | +|N 4116 4116 | +|G | +|2 4116 4116 | +|8 AY3-8910 | +| 4116 4116 | +| | +| 4116 4116 | +| | +| 4116 4116 | +| | +| 4116 4116 | +|--------------------------------------------------------| +Notes: + DIP16 - Socket for cable that joins to upper board + DIP40 - Socket for connector that joins to upper board + AY3-8910 clock - 1.536 [18.432/12] + HSync - 15.5kHz + VSync - 60Hz + +***************************************************************************/ + +ROM_START( majrjhdx ) // ROM test gives all ok + ROM_REGION( 0x290000, "maincpu", 0 ) + ROM_LOAD( "1051d.5e", 0x00000, 0x40000, CRC(54c31732) SHA1(049e76c42fd248f975c7cce7e74b1f79e2a96bea) ) + ROM_LOAD( "tmp91p640n-10.3c", 0x00000, 0x04000, CRC(129a11c7) SHA1(450a6a7da29c9206937a16701b34075cda338147) ) // dump from majrjh, works fine + ROM_COPY( "maincpu", 0x00000, 0x10000, 0x40000 ) + ROM_COPY( "maincpu", 0x00000, 0x50000, 0x40000 ) + ROM_COPY( "maincpu", 0x10000, 0x90000, 0x80000 ) + ROM_LOAD( "1053d.3e", 0x110000, 0x80000, CRC(10bf7f0f) SHA1(c042240296ac7202da14e809bff36c9b0f97a3df) ) + ROM_LOAD( "1052d.4e", 0x210000, 0x80000, CRC(7200599c) SHA1(32e7caad9a9ea756b699f601fab90a419a437f57) ) + + ROM_REGION( 0x400, "proms", 0 ) // Color PROMs + ROM_LOAD( "d105-2.7e", 0x000, 0x200, CRC(587bca5a) SHA1(327f7bfa035f652bbbfba3f74715515236322c09) ) + ROM_LOAD( "d105-1.6e", 0x200, 0x200, CRC(6d0ce028) SHA1(35f70000a850782356734323fa93b150a77f807c) ) +ROM_END + +ROM_START( majrjh ) // ROM test gives all ok + ROM_REGION( 0x290000, "maincpu", 0 ) + ROM_LOAD( "1051d.5e", 0x000000, 0x80000, CRC(5fdc5f9e) SHA1(4a599f83ee1c8ae41a44e98694b6d5515a29b813) ) // 1ST AND 2ND HALF IDENTICAL, tested as 2MB anyway + ROM_LOAD( "tmp91p640n-10.3c", 0x000000, 0x04000, CRC(129a11c7) SHA1(450a6a7da29c9206937a16701b34075cda338147) ) // MCU has pins 9 to 10 & 12 to 15 stripped out + ROM_COPY( "maincpu", 0x00000, 0x010000, 0x80000 ) + ROM_COPY( "maincpu", 0x00000, 0x090000, 0x80000 ) + ROM_LOAD( "1053d.3e", 0x110000, 0x80000, CRC(e5abd309) SHA1(7d80ab9f7bcc66d7332c60a0d02c123582c31a34) ) + ROM_LOAD( "1052d.4e", 0x210000, 0x80000, CRC(7200599c) SHA1(32e7caad9a9ea756b699f601fab90a419a437f57) ) + + ROM_REGION( 0x400, "proms", 0 ) // Color PROMs + ROM_LOAD( "d105-2.7e", 0x000, 0x200, CRC(587bca5a) SHA1(327f7bfa035f652bbbfba3f74715515236322c09) ) + ROM_LOAD( "d105-1.6e", 0x200, 0x200, CRC(6d0ce028) SHA1(35f70000a850782356734323fa93b150a77f807c) ) +ROM_END + +/*************************************************************************** + +Almond Pinky +Dynax, 1988 + +This game runs on Royal Mahjong hardware. +It appears Royal Mahjong was originally manufactured by Nichibutsu +This PCB says "(C) 1983 Nichibutsu" on it. + +Top PCB +------- +D1401128L-0 +|------------------------------------------| +| |---------| | +|DIP40 | | | +| Z80A | & | | +| |---------| | +| 8MHz DSW1 | +| | +| | +| | +| | +| DSW2 | +| | +| | +| | +|DYNAX DYNAX DYNAX DYNAX DYNAX DYNAX | +| 146 145 144 143 142 141 6116 *| +|------------------------------------------| +Notes: + Every chip has its surface scratched + * - 4 pin power connector joined to main PCB + DSWx - have 8 switches each + DIP40 - Socket joins to main PCB + & - Large Dynax ceramic SIP module (DAC or similar) + Z80 - clock 4MHz [8/2] + All ROMs type 27512 + +Note! On Royal Mahjong-based PCBs where there is a 3 pin RGB connector (3 wires) tied to the main +board and joining to the top board, the color PROM is located on the top daughterboard. Usually that +chip is an 82S123 (32 bytes), 82S129 (256 bytes) or 82S147 (512 bytes). In any case, you can be sure +there is a PROM(s) on the PCB somewhere if the RGB connector cable is present. + + +Main PCB +-------- +RM-1D (C) Nichibutsu 1983 +|------------------------------------------------| +| 6116 DIP24 P6 P5 P4 P3 P2 P1 | +|MB3712 | +| BATTERY | +| DSW(8) DIP40 | +| | +|1 18.432MHz| +|8 TBP18S030.6K | +|W | +|A | +|Y | +| AY3-8910 | +| 4116 4116 | +|1 4116 4116 | +|0 4116 4116 | +|W 4116 4116 | +|A 4116 4116 | +|Y 4116 4116 | +| 4116 4116 | +| 4116 4116 | +|------------------------------------------------| +Notes: + DIP40 - Socket joins to top PCB + DIP24 - Unpopulated DIP24 position (no socket) + TBP18S030.6K - Color PROM (32 bytes) + P1-P6 - Program ROM sockets (DIP24) + +***************************************************************************/ + +ROM_START( mjapinky ) + ROM_REGION( 0x90000, "maincpu", 0 ) + ROM_LOAD( "141.4d", 0x00000, 0x10000, CRC(0c4fb83a) SHA1(5d467e8fae715ca4acf88f8e9437c7cdf9f876bd) ) + // bank switched ROMs follow + ROM_RELOAD( 0x10000, 0x10000 ) + ROM_LOAD( "142.4e", 0x20000, 0x10000, CRC(129806f0) SHA1(d12d2c5bb0c653f2e4974c47004ada128ac30bea) ) + ROM_LOAD( "143.4f", 0x30000, 0x10000, CRC(3d0bc452) SHA1(ad61eaa892121f90f31a6baf83158a11e6051430) ) + ROM_LOAD( "144.4h", 0x40000, 0x10000, CRC(24509a18) SHA1(ab9daed2cbc72d02c2168a4c93f70ebfe3916ea2) ) + ROM_LOAD( "145.4j", 0x50000, 0x10000, CRC(fea3375a) SHA1(cbb89b72cfba9c0448d152dfdbedb20b9896516e) ) + ROM_LOAD( "146.4k", 0x60000, 0x10000, CRC(be27a9b9) SHA1(f12402182f598391e445245b345f49084a69620a) ) + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "18s030n.clr", 0x0000, 0x0020, CRC(5736d0aa) SHA1(298b51340d2697347842cfaa5921f31c7b7f9748) ) +ROM_END + +/*************************************************************************** + +Mahjong Cafe Time +(c)1992 Dynax +Modified Royal Mahjong PCB +D6310128L1-1 (Sub PCB) + +CPU: Z80 +Sound: AY-3-8910 + +ROMs: +6301.2E [1fc10e7c] +6302.3E [02bbdf78] +6303.5E [0e71eea8] +6304.6E [53c581d6] + +D63-1.7F [e7410136] MB7124H +D63-2.8F [af735b42] / + +***************************************************************************/ + +ROM_START( cafetime ) + ROM_REGION( 0x210000, "maincpu", 0 ) + ROM_LOAD( "6301.2e", 0x000000, 0x40000, CRC(1fc10e7c) SHA1(0ed6bfd4cc6fc64bbf55bd3c6bde2d8ba9da2afb) ) + // bank switched ROMs follow + ROM_RELOAD( 0x010000, 0x40000 ) + ROM_RELOAD( 0x050000, 0x40000 ) + ROM_LOAD( "6302.3e", 0x090000, 0x80000, CRC(02bbdf78) SHA1(e1e107541236ed92854fac4e12c9b300dbac9822) ) + ROM_LOAD( "6303.5e", 0x110000, 0x80000, CRC(0e71eea8) SHA1(f95c3b7acee6deabff4aca83b490e255648e2f19) ) + ROM_LOAD( "6304.6e", 0x190000, 0x80000, CRC(53c581d6) SHA1(d9cfda63a8f2e92873f69c673d3efe5c22cfa0de) ) + + ROM_REGION( 0x400, "proms", 0 ) + ROM_LOAD( "d63-2.8f", 0x000, 0x200, CRC(af735b42) SHA1(deddde3e276d5b9de72e267f65399d80783c6244) ) + ROM_LOAD( "d63-1.7f", 0x200, 0x200, CRC(e7410136) SHA1(54d3aec0d11485d4f419e76f9c4071ab9b817937) ) +ROM_END + +/*************************************************************************** + +Mahjong Cafe Doll +Dynax, 1993 + +This game runs on Royal Mahjong hardware. + +Top PCB +------- +D76052208L-2 +|-----------------------------------| +| 7601 6264 RTC BATTERY | +|DIP40 | +| 7602 8MHz | +| PAL PAL | +| 7603 |-----------| | +| | CPU | | +| DIP32 |-----------| | +| | +| | +| | +| | +| | +| 82s147.7F &| +|* DSW3 DSW1 | +| 82S147.9F % DSW4 DSW2 | +|-----------------------------------| +Notes: + Every chip has its surface scratched, except the PROMs + * - Connector joined to main PCB + & - Power input connector + % - RGB Video output + DIP32 - Empty DIP32 socket + DSWx - have 10 switches each + DIP40 - Socket joins to main PCB + CPU - unknown SDIP64 chip. Possibly TMP90P640 or similar TLCS-90 type CPU + + +Main PCB +-------- +no pcb number +|------------------------------------------------| +| 6116 DIP24 DIP24 DIP24 DIP28 DIP28 DIP28 | +| DIP24 | +|HA1368 | +| DIP40 | +| | +| DSW(8) 18.432MHz| +|M | +|A | +|H | +|J | +|O AY3-8910 | +|N 4116 4116 | +|G 4116 4116 | +|2 4116 4116 | +|8 4116 4116 | +| 4116 4116 | +| 4116 4116 | +| 4116 4116 | +| 4116 4116 | +|------------------------------------------------| +Notes: + DIP40 - Sockets joins to top PCB + DIP24/28 - Unpopulated sockets + +***************************************************************************/ + +ROM_START( cafedoll ) + ROM_REGION( 0x190000, "maincpu", 0 ) + ROM_LOAD( "7601", 0x000000, 0x80000, CRC(20c80ad9) SHA1(e45edd101c6e26c0fa3c3f15f4a4152a853e41bd) ) + ROM_LOAD( "76xx.tmp90840", 0x000000, 0x02000, CRC(091a85dc) SHA1(964ccbc13466464c2feee10f807078ec517bed5c) ) // internal ROM, MCU has pins 10 & 12 to 16 stripped out + // bank switched ROMs follow + ROM_COPY( "maincpu", 0x000000, 0x010000, 0x80000 ) + ROM_LOAD( "7602", 0x090000, 0x80000, CRC(f472960c) SHA1(cc2feb4374ba94035101114c73e1690cfeac9b91) ) + ROM_LOAD( "7603", 0x110000, 0x80000, CRC(c4293019) SHA1(afd717844e9e681ada14e80cd10dce0ed60d4259) ) + + 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 + +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 +1999 Techno-Top + +Royal Mahjong board. No ROMs on the base board. + +Top board looks like typical Dynax with scratched SDIP64. +It is marked 'TSS001-0001 - Techno Top Limited' and has just 2 EPROMs and 2 PROMs. +Everything else is scratched but there's a 32.768kHz OSC, RTC and connected battery. +Also, 4 DIP sw each with 10 switches and an 8MHz OSC next to the SDIP64 chip, +and a PLCC68 chip (likely FPGA) + +***************************************************************************/ + +ROM_START( cafepara ) + ROM_REGION( 0x290000, "maincpu", 0 ) + // VIDEO & AM MICRO COMPUTER SYSTEMS 1999 TECHNO-TOP,LIMITED NAGOYA JAPAN MAHJONG CAFE PARADISE TSS001 VER. 1.00 + ROM_LOAD( "00101.1h", 0x000000, 0x080000, CRC(f5917280) SHA1(e6180e36643075ab9fa5bc27baef2a464a23f581) ) // external ROM with first 0x4000 empty + ROM_LOAD( "cafepara.tmp91640", 0x000000, 0x004000, CRC(0575607c) SHA1(e641ffd1bd44f2b4a0cdf72c49990933a0f0ff22) ) // internal ROM + + // bank switched ROMs follow (test mode checks 0x50 banks) + ROM_COPY( "maincpu", 0x000000, 0x010000, 0x080000 ) + ROM_LOAD( "00102.1d", 0x090000, 0x200000, CRC(ed3b5447) SHA1(ac24e9c00c94c35d2b2ec35f0c4262ceeda5408f) ) + + ROM_REGION( 0x400, "proms", 0 ) + ROM_LOAD( "ts001b.4h", 0x000, 0x200, CRC(b0019654) SHA1(78ba9b35744849c430f99137ea0da3d5564cc72a) ) + ROM_LOAD( "ts001a.4j", 0x200, 0x200, CRC(e89d4db0) SHA1(ff191a76fe1144e72a1cf3769f0156adf2d0507f) ) +ROM_END + +/*************************************************************************** + +Mahjong Vegas +Dynax, 199? + +This game runs on Royal Mahjong hardware. + +Top PCB +------- +D5011308L1 +|-----------------------------------| +| DIP32 DIP32 5003 5002 DIP32 5001A| +|DIP40 62XX| +| 32.768kHz | +| RTC | +| |-----------| | +| | CPU | | +| |-----------| | +|DSW4 DSW2 | +| DSW3 DSW1 PAL | +| | +| | +| | +| D50-2 | +|* D50-1 8MHz | +| % & BATTERY | +|-----------------------------------| +Notes: + Every chip has its surface scratched + * - Cable connector joined to main PCB (to original PROM socket on main board) + % - RGB Video output + & - +12V input to top PCB + DIP32 - Empty DIP32 socket + DSWx - have 10 switches each + DIP40 - Socket joins to main PCB + CPU - unknown SDIP64 chip. Possibly TMP90P640 or similar TLCS-90 type CPU + Pins 9-14 have been broken off and removed! + 62XX - 6264 or 62256 SRAM + D50-* - 82S147 color PROMs + + +Main PCB +-------- +FRM-00 (with Falcon Logo.... PCB is made by Falcon) +|------------------------------------------------| +| 6116 DIP24 ROM6 ROM5 ROM4 ROM3 ROM2 ROM1 | +|HA1368 | +| | +| VOL DIP40 | +| | +| DSW(8) 18.432MHz| +|M | +|A | +|H | +|J | +|O AY3-8910 | +|N 4116 4116 | +|G 4116 4116 | +|2 4116 4116 | +|8 4116 4116 | +| 4116 4116 | +| 4116 4116 | +| 4116 4116 | +| 4116 4116 | +|------------------------------------------------| +Notes: + DIP40 - Socket joins to top PCB + DIP24 - Unpopulated socket + AY-3-8910 - clock 1.536MHz (18.432/12] + ROM* - Unpopulated DIP24 sockets + +***************************************************************************/ + +ROM_START( mjvegas ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD( "5001a.1b", 0x00000, 0x20000, CRC(91859a47) SHA1(3c452405bf28f5e7302eaccdf472e91b64629a67) ) // external ROM with first 0x2000 empty + ROM_LOAD( "50xx.tmp90840", 0x00000, 0x02000, CRC(091a85dc) SHA1(964ccbc13466464c2feee10f807078ec517bed5c) ) // internal ROM, MCU has pins 9 to 14 stripped out + + // bank switched ROMs follow + ROM_COPY( "maincpu", 0x000000, 0x070000, 0x020000 ) // 0c-0f + ROM_LOAD( "5002.1d", 0x210000, 0x80000, CRC(016c0a32) SHA1(5c5fdd631eacb36a0ee7dba9e070c2d3d3d8fd5b) ) // 40-4f + ROM_LOAD( "5003.1e", 0x2f0000, 0x20000, CRC(5323cc85) SHA1(58b75ba560f05a0568024f52ee89f54713219452) ) // 5c-5f + + ROM_REGION( 0x400, "proms", 0 ) + ROM_LOAD( "d50-2_82s147.4h", 0x000, 0x200, CRC(3c960ea2) SHA1(65e05e3f129e9e6fcb14b7d44a75a76919c54d52) ) + ROM_LOAD( "d50-1_82s147.4g", 0x200, 0x200, CRC(50c0d0ec) SHA1(222899456cd2e15391d8d0f771bbd5e5333d6ba3) ) +ROM_END + +ROM_START( mjvegasa ) + ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASEFF ) // 100 banks + ROM_LOAD( "5040.1b", 0x00000, 0x20000, CRC(c4f03128) SHA1(758567f74de333207dfe6c1cb72b2afffb0c8f4b) ) + // bank switched ROMs follow + ROM_RELOAD( 0x070000, 0x20000 ) // 0c-0f + ROM_LOAD( "5002.1d", 0x210000, 0x80000, CRC(016c0a32) SHA1(5c5fdd631eacb36a0ee7dba9e070c2d3d3d8fd5b) ) // 40-4f + ROM_LOAD( "5003.1e", 0x2f0000, 0x20000, CRC(5323cc85) SHA1(58b75ba560f05a0568024f52ee89f54713219452) ) // 5c-5f + + ROM_REGION( 0x400, "proms", 0 ) + ROM_LOAD( "d50-2_82s147.4h", 0x000, 0x200, CRC(3c960ea2) SHA1(65e05e3f129e9e6fcb14b7d44a75a76919c54d52) ) + ROM_LOAD( "d50-1_82s147.4g", 0x200, 0x200, CRC(50c0d0ec) SHA1(222899456cd2e15391d8d0f771bbd5e5333d6ba3) ) +ROM_END + +/*************************************************************************** + +Mahjong Shinkirou Deja Vu (+ some ROMs from Jan Oh (Toaplan) !?) + +This game runs on Royal Mahjong hardware. + +Top PCB +------- +D210301BL2 +|-----------------------------------| +| DIP32 DIP32 2104 2103 2102 2101 | +|DIP40 6116| +| | +|DSW3 | +| |-----------| | +| | CPU | | +| |-----------| | +|DSW4 | +| 8MHz | +| DSW2 DSW1| +| | +| | +| | +|* | +| % | +|-----------------------------------| +Notes: + Every chip has its surface scratched + * - Connector joined to main PCB + % - RGB Video output + DIP32 - Empty DIP32 socket + DSWx - have 8 switches each + DIP40 - Socket joins to main PCB + CPU - unknown SDIP64 chip. Possibly TMP90P640 or similar TLCS-90 type CPU + + +Main PCB +-------- +FRM-00 +|------------------------------------------------| +| 6116 DIP24 ROM6 ROM5 ROM4 ROM3 ROM2 ROM1 | +|HA1368 | +| | +| DIP40 | +| | +| DSW(8) 18.432MHz| +|M | +|A | +|H | +|J | +|O AY3-8910 | +|N 4116 4116 | +|G 4116 4116 | +|2 4116 4116 | +|8 4116 4116 | +| 4116 4116 | +| 4116 4116 | +| 4116 4116 | +| 4116 4116 | +|------------------------------------------------| +Notes: + DIP40 - Sockets joins to top PCB + DIP24 - Unpopulated socket + +***************************************************************************/ + +ROM_START( mjdejavu ) + ROM_REGION( 0xd0000, "maincpu", 0 ) + ROM_LOAD( "2101.1b", 0x00000, 0x10000, CRC(b0426ea7) SHA1(ac39cbf5d78acdaa4b01d948917965c3aa2761b8) ) + // bank switched ROMs follow + ROM_RELOAD( 0x10000, 0x08000 ) + ROM_CONTINUE( 0x10000, 0x08000 ) // 0 + // unused + ROM_LOAD( "2103.1d", 0x30000, 0x20000, CRC(ed5fde4b) SHA1(d55487ae1007d43b71f06ae5c407c75db7054515) ) // 8 + // unused + ROM_LOAD( "2104.1e", 0x70000, 0x20000, CRC(cfb8075d) SHA1(31f613a1a9b5f4295b552aeeddb760605ce2ac70) ) // 18 + // unused + ROM_LOAD( "2102.1c", 0xb0000, 0x20000, CRC(f461e422) SHA1(c3505feb32650fdd5c0d7f30faed69b65d94937a) ) // 28 + + ROM_REGION( 0x400, "proms", 0 ) + ROM_LOAD( "82s147.4d", 0x000, 0x200, CRC(d43f4c7c) SHA1(117d2e4e8d5bea3e5dc903a4b87bd71786ae009c) ) + ROM_LOAD( "82s147.4c", 0x200, 0x200, CRC(30cf7831) SHA1(b4593d51c6ceb301279a01a98665e4be8a3c403d) ) +ROM_END + +ROM_START( mjdejav2 ) + ROM_REGION( 0xd0000, "maincpu", 0 ) + ROM_LOAD( "210a.1b", 0x00000, 0x10000, CRC(caa5c267) SHA1(c779f9217f56d9d3b1ee9fadca07f7917d203e8e) ) + // bank switched ROMs follow + ROM_RELOAD( 0x10000, 0x08000 ) + ROM_CONTINUE( 0x10000, 0x08000 ) // 0 + // unused + ROM_LOAD( "2103.1d", 0x30000, 0x20000, CRC(ed5fde4b) SHA1(d55487ae1007d43b71f06ae5c407c75db7054515) ) // 8 + // unused + ROM_LOAD( "2104.1e", 0x70000, 0x20000, CRC(cfb8075d) SHA1(31f613a1a9b5f4295b552aeeddb760605ce2ac70) ) // 18 + // unused + ROM_LOAD( "210b.1c", 0xb0000, 0x20000, CRC(d4383830) SHA1(491333277e5e2341d1c1cc20f8cc32aa6b020b6c) ) // 28 + + ROM_REGION( 0x400, "proms", 0 ) + ROM_LOAD( "82s147.4d", 0x000, 0x200, CRC(d43f4c7c) SHA1(117d2e4e8d5bea3e5dc903a4b87bd71786ae009c) ) + ROM_LOAD( "82s147.4c", 0x200, 0x200, CRC(30cf7831) SHA1(b4593d51c6ceb301279a01a98665e4be8a3c403d) ) +ROM_END + +// Incomplete romset (missing rom7 at $6000): "Jan Oh" by Toaplan, on royalmah hardware (try pc=64f). +ROM_START( janoh ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "rom1.p1", 0x0000, 0x1000, CRC(8fc19963) SHA1(309e941c059a97b117090fd9dd69a00031aa6109) ) // "1984 JAN OH" + ROM_LOAD( "rom2.p12", 0x1000, 0x1000, CRC(e1141ae1) SHA1(38f7a71b367a607bb20a5cbe62e7c87c96c6997c) ) + ROM_LOAD( "rom3.p2", 0x2000, 0x1000, CRC(66e6d2f4) SHA1(d7e00e5bfee60daf844c46d36b1f4860fba70759) ) // "JANOH TOAPLAN 84" + ROM_LOAD( "rom4.p3", 0x3000, 0x1000, CRC(9186f02c) SHA1(b7dc2d6c19e67dd3f841cbb56df9589e3e6941f7) ) + ROM_LOAD( "rom5.p4", 0x4000, 0x1000, CRC(f3c478a8) SHA1(02a8504457cbcdd3e67e7f5ba60fb789f198a51d) ) + ROM_LOAD( "rom6.p5", 0x5000, 0x1000, CRC(92687327) SHA1(4fafba5881dca2a147616d94dd055eba6aa3c653) ) + ROM_LOAD( "rom7.p6", 0x6000, 0x1000, NO_DUMP ) + + ROM_REGION( 0x20, "proms", 0 ) + 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 + +/*************************************************************************** + +Mahjong Cafe Break +Dynax/Nakanihon, 199? + +This game runs on Royal Mahjong hardware with a Nakanihon top board + +Top PCB Layout +-------------- + +NS528-9812 +|-------------------------| +|X NS528A2 | +| NS528B2 PLCC84 528011| +|RGB DIP32| +| 8MHz DIP32| +|DSW4(10) | +|DSW3(10) SDIP64 6264 | +|DSW2(10) | +|DSW1(10) 52802 | +| A3 | +|BATTERY A1 A2 Y A4| +|-------------------------| +Notes: + RGB 3 - wire cable tied to mainboard + X - DIP16 socket with flat cable plugged in coming from main board PROM socket + PLCC84 - unknown PLCC84 in a socket + DIP32 - unpopulated DIP32 socket + SDIP64 - unknown CPU, probably TLCS-90 (TMP91640) + A1 - unknown DIP8 IC, possibly MB3771 reset/watchdog chip + A2/A3 - unknown DIP14 ICs, probably logic + A4 - unknown DIP18 IC, RTC IC + Y - 32.768kHz OSC for RTC + +***************************************************************************/ + +ROM_START( cafebrk ) + ROM_REGION( 0x290000, "maincpu", 0 ) + ROM_LOAD( "528011.1f", 0x000000, 0x080000, CRC(440ae60b) SHA1(c24efd76ba73adcb614b1974e8f92592800ba53c) ) + ROM_LOAD( "528.tmp91640", 0x000000, 0x004000, CRC(0575607c) SHA1(e641ffd1bd44f2b4a0cdf72c49990933a0f0ff22) ) // internal ROM + + // bank switched ROMs follow + ROM_COPY( "maincpu", 0x000000, 0x010000, 0x080000 ) + ROM_LOAD( "52802.1d", 0x090000, 0x200000, CRC(bf4760fc) SHA1(d54ab9e298800a31d95a5f8b98ab9ba5b2866acf) ) + + ROM_REGION( 0x400, "proms", 0 ) + ROM_LOAD( "ns528b2.4h", 0x000, 0x200, CRC(5699e69a) SHA1(fe13b93dd2c4a16865b4edcb0fee1390fdade725) ) + ROM_LOAD( "ns528a2.4j", 0x200, 0x200, CRC(b5a3a569) SHA1(8e31c600ae24b672b614908ee920a333ed600941) ) +ROM_END + +/* + +Janou +(c)1985 Toaplan (distributed by SNK) + +RM-1C (modified Royal Mahjong hardware) + +CPU: Z80x2 (on subboard) +Sound: AY-3-8910 +OSC: 18.432MHz + +ROMs: +JO1 +JO2 +JO3 +JO4 +JO5 +JO6 +JO7 + + +Subboard GX002A +C8 (2764) +18S030.44 +18S030.45 + +HM6116 +MSM2128x4 + + +dumped by sayu +--- Team Japump!!! --- + +*/ + +ROM_START( janoha ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "jo1", 0x0000, 0x1000, CRC(1a7dd28d) SHA1(347085c2b305861e4a4a602c3b3b0c57889f7f45) ) + ROM_LOAD( "jo2", 0x1000, 0x1000, CRC(e92ca79f) SHA1(9714ebee954dd98cf98b340e1dc424a4b2a78c36) ) + ROM_LOAD( "jo3", 0x2000, 0x1000, CRC(8e349cac) SHA1(27442fc97750ceb6e928682ee545a9ebff4511ac) ) + ROM_LOAD( "jo4", 0x3000, 0x1000, CRC(f2bcac9a) SHA1(46eea014edf9f260b35b5f9bd0fd0a0236da16ef) ) + ROM_LOAD( "jo5", 0x4000, 0x1000, CRC(16c09c73) SHA1(ea712f9ca3200ca27434e4200187b488e24f4c65) ) + ROM_LOAD( "jo6", 0x5000, 0x1000, CRC(92687327) SHA1(4fafba5881dca2a147616d94dd055eba6aa3c653) ) + ROM_LOAD( "jo7", 0x6000, 0x1000, CRC(f9a3fea6) SHA1(898c030b34f7432568e080e2814619d836d98a2f) ) + + ROM_REGION( 0x10000, "sub", 0 ) + ROM_LOAD( "c8", 0x0000, 0x2000, CRC(a37ed493) SHA1(a3246c635ee77f96afd96285ef7091f6fc0d7636) ) + + ROM_REGION( 0x0040, "proms", 0 ) + ROM_LOAD( "18s030.44", 0x0000, 0x0020, CRC(d4eabf78) SHA1(f14778b552ff483e36e7c30ee67e8e2075790ea2) ) + ROM_LOAD( "18s030.45", 0x0020, 0x0020, CRC(c6a24ae9) SHA1(ec7a4dee2fec2f7151ddc39e40a3eee6a1c4992d) ) // another color PROM? +ROM_END + +/* + +Mahjong Shiyou (BET type) +(c)1986 Visco + +Board: S-0086-001-00 +CPU: Z80-A x2 +Sound: AY-3-8910 + M5205 +OSC: 18.432MHz + 400KHz + + +1.1K Z80#2 prg. +2.1G + +3.3G Z80#1 prg. +4.3F + +COLOR.BPR color + +*/ + +ROM_START( mjsiyoub ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "3.3g", 0x00000, 0x8000, CRC(47d0f16e) SHA1(a125be052668ba93756bf940af31a10e91a3d307) ) + ROM_LOAD( "4.3f", 0x08000, 0x8000, CRC(6cd6a200) SHA1(1c53e5caacdb9c660bd98f5331bf5354581f74c9) ) + + // encrypted Z80 + ROM_REGION( 0x10000, "audiocpu", 0 ) + ROM_LOAD( "1.1k", 0x00000, 0x8000, CRC(a1083321) SHA1(b36772e90be60270234df16cf92d87f8d950190d) ) + ROM_LOAD( "2.1g", 0x08000, 0x4000, CRC(cfe5de1d) SHA1(4acf9a752aa3c02b0889b0b49d3744359fa24460) ) + + ROM_REGION( 0x20, "proms", 0 ) + ROM_LOAD( "color.bpr", 0x00, 0x20, CRC(d21367e5) SHA1(b28321ac8f99abfebe2ef4da0c751cefe9f3f3b6) ) +ROM_END + +/* + +Mahjong Senka +(c)1986 Visco + +Modified Royal Mahjong Hardware + +CPU: Z80 +Sound: AY-3-8910 +OSC: 18.432MHz +Others: Battery + +ROMs: +1 +2 +3 +4 +1.2L (N82S129N) +2.2K (N82S123N) +3.1D (N82S129N) +4.8K (N82S123N) - color PROM + + +dumped by sayu + +--- Team Japump!!! --- +http://japump.i.am/ + +*/ + +ROM_START( mjsenka ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "3", 0x0000, 0x4000, CRC(b2d8be1f) SHA1(da75e1072d271de2dbd897a551f6c32593f6421b) ) + ROM_LOAD( "4", 0x4000, 0x2000, CRC(e9e84999) SHA1(7b5f0edd92cf3a45e85055460e6cb00b154fd152) ) + ROM_LOAD( "1", 0x6000, 0x2000, CRC(83e943d1) SHA1(c4f9b5036627ccb369e7db03a743e496b149af85) ) + ROM_LOAD( "2", 0x8000, 0x2000, CRC(cdb02fc5) SHA1(5de6b15b79ea7c4246a294b17f166e53be6a4abc) ) + + ROM_REGION( 0x10000, "decrypted", ROMREGION_ERASE00 ) + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "4.8k", 0x0000, 0x0020, CRC(41bd4d69) SHA1(4d2da761b338b62b2ea151c201063a24d6e4cc97) ) + + ROM_REGION( 0x0220, "user1", 0 ) //? + ROM_LOAD( "1.2l", 0x0000, 0x0100, CRC(24599429) SHA1(6c93bb2e7bc9902cace0c9d482fc1584c4c1a114) ) + ROM_LOAD( "3.1d", 0x0100, 0x0100, CRC(86aeafd1) SHA1(c4e5c56ce5baf2be3962675ae333e28bd8108a00) ) + ROM_LOAD( "2.2k", 0x0200, 0x0020, CRC(46014727) SHA1(eec451f292ee319fa6bfbbf223aaa12b231692c1) ) +ROM_END + +/* + +Mahjong Yarou +(c)1986 Visco/Video System + +FRM-00 (modified Royal Mahjong hardware) + +CPU: Z80 (on subboard) +Sound: AY-3-8910 +OSC: 18.432MHz + +ROMs: +1(2732) +2(2732) +3(2732) +4(2732) +5(2732) +6(2732) +4.6K (18S030) - pin14 is connected to subboard's WS + pin9 is not inserted to the socket + +Subboard: +7(2764) +8(2764) +N82S129N.IC4 +N82S123N.IC7 +N82S129N.IC15 + +Connector between mainboard and subboard +sub - main + CK - LS368 (1K) pin12 + HD - LS08 (2E) pin1 + VD - LS08 (2E) pin2 + WS - 18S030(6K) pin14 + () - LS138 (3K) pin13 + + +Mainboard +---------------------------------------------------------- + 1 2 3 4 5 6 7 +A 74LS04 74LS86 74LS153 MB8116 MB8116 74LS157 +B 74LS161 74LS86 74LS153 MB8116 MB8116 74LS95 +C 74LS161 74LS86 74LS153 MB8116 MB8116 74LS157 +D 74LS74 74LS86 74LS153 MB8116 MB8116 74LS95 8 +E 74LS161 74LS08 74LS153 MB8116 MB8116 74LS157 9 +F 74LS161 74LS74 74LS00 MB8116 MB8116 74LS95 1 +H 74LS74 74LS00 74LS175 MB8116 MB8116 74LS157 0 +J 74LS107 74LS32 74LS10 MB8116 MB8116 74LS95 +K 74LS368 74LS241 74LS138 74LS08 74LS174 4.6K +L 18.432MHz 74LS241 74LS138 74LS04 74LS244 74LS174 +M (socket to subbd) 74LS367 74LS08 DIPSW 74LS368 +N (74LS245)74LS138 74LS04 TC40H000P + + 1 2 3 4 5 6 6 B + 1 A + 1 T + 6 T +---------------------------------------------------------- + +Subboard +----------------------------------------------------------- +74LS42(IC21) ?(IC22) ?(IC23) 74LS85(IC24) +74LS125(IC16) 74LS08(IC17) 74LS393(IC9) 82S129N(IC15) +74LS161(IC6) 82S123N(IC7) 74LS161(IC8) 74LS157(IC14) +82S129N(IC4) 74LS259(IC5) 74LS32(IC12) 74LS74(IC13) +7(IC2) PAL20X10(IC19) 74LS00(IC20) +8(IC3) 74LS245(IC18) DIPSW + 74LS32(IC11) +Z80A 74LS04(IC10) + 5pin connector +----------------------------------------------------------- + + +dumped by sayu + +--- Team Japump!!! --- +http://japump.i.am/ + +*/ + +ROM_START( mjyarou ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "1.p1", 0x0000, 0x1000, CRC(312c3b29) SHA1(ec2e14b392cf761f0a7079376994418fd463a06c) ) // on main board + ROM_LOAD( "2.p2", 0x1000, 0x1000, CRC(98f14097) SHA1(cd1f72d6effa50f95386dfc5fa9b5056d83e554f) ) // " + ROM_LOAD( "3.p3", 0x2000, 0x1000, CRC(295dbf40) SHA1(d6ac7bd88da849e418e750e2c91a594f65bdff39) ) // " + ROM_LOAD( "4.p4", 0x3000, 0x1000, CRC(a6a078c8) SHA1(936be36c7c938c705e7054a42c1908bb5a5ee1bb) ) // " + ROM_LOAD( "5.p5", 0x4000, 0x1000, CRC(3179657e) SHA1(703fc57ae71554345754267c31809cf7af7f1639) ) // " + ROM_LOAD( "6.p6", 0x5000, 0x1000, CRC(6ccc05b4) SHA1(6eefba6023673edd86e82a0ad861a4d8f7f6652b) ) // " + ROM_LOAD( "7.ic2", 0x6000, 0x2000, CRC(de6bfdd8) SHA1(dd9727d4d7de4add48cde229b8aa194f0492af7e) ) // on sub board + ROM_LOAD( "8.ic3", 0x8000, 0x2000, CRC(1adef246) SHA1(b5f5598daf71694effffbfb486b03fcda5a593ee) ) // " + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "4.6k", 0x0000, 0x0020, CRC(41bd4d69) SHA1(4d2da761b338b62b2ea151c201063a24d6e4cc97) ) // on main board + + ROM_REGION( 0x0220, "user1", 0 ) //? + ROM_LOAD( "82s129n.ic15", 0x0000, 0x0100, CRC(86aeafd1) SHA1(c4e5c56ce5baf2be3962675ae333e28bd8108a00) ) // on sub board + ROM_LOAD( "82s129n.ic4", 0x0100, 0x0100, CRC(f09d3c4c) SHA1(a9e752d75e7f3ebd05add4ccf2f9f15d8f9a8d15) ) // " + ROM_LOAD( "82s123n.ic7", 0x0200, 0x0020, CRC(46014727) SHA1(eec451f292ee319fa6bfbbf223aaa12b231692c1) ) // on sub board +ROM_END + +ROM_START( mjyarou2 ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "my_1", 0x0000, 0x1000, CRC(c303a013) SHA1(1360aa8657740036f017eba864eed2cbc3c9ad62) ) + ROM_LOAD( "my_2", 0x1000, 0x1000, CRC(0c7f87cc) SHA1(2e56656b2dd860471eab9dfcb1dfd4e0b23a8df9) ) + ROM_LOAD( "my_3", 0x2000, 0x1000, CRC(e94d5f9a) SHA1(c8365991aecf0b1d22c7ce38dd15f6d4a5f70cac) ) + ROM_LOAD( "my_4", 0x3000, 0x1000, CRC(a6a078c8) SHA1(936be36c7c938c705e7054a42c1908bb5a5ee1bb) ) + ROM_LOAD( "my_5", 0x4000, 0x1000, CRC(3179657e) SHA1(703fc57ae71554345754267c31809cf7af7f1639) ) + ROM_LOAD( "my_6", 0x5000, 0x1000, CRC(0ca1cedc) SHA1(bd5d54b185e6ff5633d59df4c06a2094fca9cbf2) ) + ROM_LOAD( "7", 0x6000, 0x2000, CRC(de6bfdd8) SHA1(dd9727d4d7de4add48cde229b8aa194f0492af7e) ) + ROM_LOAD( "8", 0x8000, 0x2000, CRC(1adef246) SHA1(b5f5598daf71694effffbfb486b03fcda5a593ee) ) + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "82s123", 0x0000, 0x0020, CRC(41bd4d69) SHA1(4d2da761b338b62b2ea151c201063a24d6e4cc97) ) + + ROM_REGION( 0x0220, "user1", 0 ) //? + ROM_LOAD( "82s129n.ic15", 0x0000, 0x0100, CRC(86aeafd1) SHA1(c4e5c56ce5baf2be3962675ae333e28bd8108a00) ) // not dumped for this board + ROM_LOAD( "82s129n.ic4", 0x0100, 0x0100, CRC(f09d3c4c) SHA1(a9e752d75e7f3ebd05add4ccf2f9f15d8f9a8d15) ) // not dumped for this board + ROM_LOAD( "82s123n.ic7", 0x0200, 0x0020, CRC(46014727) SHA1(eec451f292ee319fa6bfbbf223aaa12b231692c1) ) // not dumped for this board +ROM_END + +/* + +Jansou +(c)1985 Dyna Industry + +upgrade kit for Royal Mahjong +G85-12-05RL + +CPU: Z80A +OSC: 4.000MHz +Other: surface scratched 40pin DIP device + +ROMs: +1 +2 +3 +4 +5 + +Color PROM: +N82S123AN + + +dumped by sayu +--- Team Japump!!! --- +http://japump.i.am/ + +*/ +/* +Nothing can be done on this one due of missing main program ROM(s) (surface scratched 40pin DIP device). +A string of the current Z80 ROM at offset 0x90 says "THE Janso Voice Version 1.0 (c) Copy Right 1985 Dyna", +so it's just a voice player. +*/ +ROM_START( jansou ) + //Missing main CPU program ROM + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "unk", 0x0000, 0x8000, NO_DUMP ) + + // These probably hook up with the main CPU program, they are standard 4bpp bitmaps. + ROM_REGION( 0x20000, "gfx1", 0 ) + ROM_LOAD( "3", 0x00000, 0x8000, CRC(75a0bef0) SHA1(c2f5b3ddc55b58d3ea784d8b3d0a0f577d313341) ) + ROM_LOAD( "4", 0x08000, 0x8000, CRC(7304899a) SHA1(636b7673563f75ff2ef95eef3b99f80ef0c45fee) ) + ROM_LOAD( "5", 0x10000, 0x8000, CRC(57a4d300) SHA1(35d211d50052cd76721dbd6ad02ec7cb56c475d1) ) + + // 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", 0x00000, 0x8000, CRC(0321ac7e) SHA1(1a0372a25f979461db09cd153c15daaa556c3d1f) ) + ROM_LOAD( "2", 0x08000, 0x8000, CRC(fea7f3c6) SHA1(c196be0030b00cfb747b9dbfa387048d20c70b74) ) + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "n82s123an", 0x0000, 0x0020, CRC(e9598146) SHA1(619e7eb76cc3e882b5b3e55cdd23fe00b0a1fe45) ) +ROM_END + +ROM_START( jansoua ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "1.bin", 0x0000, 0x1000, CRC(aa66a9fc) SHA1(e2a956f17d294e160e16297866cd9be117254ea4) ) + ROM_LOAD( "2.bin", 0x1000, 0x1000, CRC(3b6ef098) SHA1(eda181971153888e63aa14e10b0b199383f2d627) ) + ROM_LOAD( "3.bin", 0x2000, 0x1000, CRC(63070d44) SHA1(c9c08f774a94cfb4e291f3d7ef81b0f0f9f74460) ) + ROM_LOAD( "4.bin", 0x3000, 0x1000, CRC(2b14d3c1) SHA1(210d6f212bda7fb7225e5606b34f674cc5f85150) ) + + ROM_REGION( 0x20000, "gfx1", 0 ) + ROM_LOAD( "3s.bin", 0x00000, 0x8000, CRC(64df20f6) SHA1(6cbe4718d47b52c229863219dba3e1f964ba667a) ) + ROM_LOAD( "4s.bin", 0x08000, 0x8000, CRC(8ddc8258) SHA1(a97a5efd06965a70e34684986dd8538a35e43d31) ) + ROM_LOAD( "5s.bin", 0x10000, 0x8000, CRC(1745c996) SHA1(6905774b4bdd0bfcc34b847efb037f9d92884a6b) ) + + // 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", 0x00000, 0x8000, CRC(0321ac7e) SHA1(1a0372a25f979461db09cd153c15daaa556c3d1f) ) + ROM_LOAD( "2", 0x08000, 0x8000, CRC(fea7f3c6) SHA1(c196be0030b00cfb747b9dbfa387048d20c70b74) ) + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "n82s123an", 0x0000, 0x0020, CRC(e9598146) SHA1(619e7eb76cc3e882b5b3e55cdd23fe00b0a1fe45) ) +ROM_END + +ROM_START( jangtaku ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "v13_rm_1.p1", 0x0000, 0x1000, CRC(fe761b2b) SHA1(7be1dab12295f1fa399e3d618644715f0300391b) ) + ROM_LOAD( "v13_rm_2.p2", 0x1000, 0x1000, CRC(888e97f5) SHA1(cef86f3f108bc40ea18d9b0676940d9340490aa9) ) + ROM_LOAD( "v13_rm_3.p3", 0x2000, 0x1000, CRC(1b428819) SHA1(a419017f9c077c0dd21000b3b9f949c47f20343e) ) + ROM_LOAD( "v13_rm_4.p4", 0x3000, 0x1000, CRC(72d8abdf) SHA1(286a4fe6899c53daeb1a656b94206f9a19ceaee0) ) + + ROM_REGION( 0x20000, "gfx1", 0 ) + ROM_LOAD( "3.d3", 0x00000, 0x8000, CRC(a865ac4c) SHA1(f8bff3b44a229ddb6165a986faa3de058001e285) ) + ROM_LOAD( "4.f3", 0x08000, 0x8000, CRC(7f4c7194) SHA1(f9bf6e12b3a89b3d25ad15a85432e22bf4e10a24) ) + ROM_LOAD( "5.g3", 0x10000, 0x8000, CRC(091df750) SHA1(6b7ad93bdfb6a7e11f923b084de3e713cf4d1dad) ) + + // 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) ) +ROM_END + +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_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) ) + ROM_LOAD( "pf_8", 0x008000, 0x002000, CRC(c789e2b3) SHA1(33b5c8f22a1e337816a61fd2c91bc175a412d10e) ) + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "82s123", 0x000, 0x020, CRC(74a53e94) SHA1(ca9114bd9b2b07f5abe82616b41ae9fdb9537a4f) ) +ROM_END + +// video reference: https://www.youtube.com/watch?v=66KDyKQA1q0 (video of the original, this is a bootleg) +ROM_START( chalgirl ) // TODO: verify ROM load / banking, this is correct for starting the game but it needs finishing the game to check it. + ROM_REGION( 0x10000, "maincpu", 0 ) // the first 6 ROMs are on the FRM-03 board, the following on the SK-1B sub board + ROM_LOAD( "cg_11.o1", 0x0000, 0x1000, CRC(1c064d3e) SHA1(cfe7e536efb377f009d7c9bee5b5a814ad1404ad) ) // 2732 + ROM_LOAD( "cg_22.o2", 0x1000, 0x1000, CRC(3244fe61) SHA1(3163f14b8977fe4b05aa11d332347c5f3cc2fbfa) ) // 2732 + ROM_LOAD( "cg_33.o3", 0x2000, 0x1000, CRC(692ef940) SHA1(c5a54161bedf26695aedad66016b5a789dbe13e5) ) // 2732 + ROM_LOAD( "cg_4.o3", 0x3000, 0x1000, CRC(562aa45f) SHA1(fc052b8f3b2f105c9282468d385a9ad554ec00f5) ) // 2732 + ROM_LOAD( "cg_5.o4", 0x4000, 0x1000, CRC(c0849a41) SHA1(1d901d59248cf0d8beff03207c46e3c50d0011cf) ) // 2732 + ROM_LOAD( "cg_6.o4", 0x5000, 0x1000, CRC(92687327) SHA1(4fafba5881dca2a147616d94dd055eba6aa3c653) ) // 2732 + ROM_LOAD( "7.f1", 0x6000, 0x1000, CRC(465db6e1) SHA1(e08fe431ab8676372fc13c51a2684a0320e01031) ) // 2732 + ROM_LOAD( "10.b1", 0x8000, 0x2000, CRC(04e76413) SHA1(e85db89084a8ae448fde4e202e8516b2e14a8265) ) // 2764 + ROM_LOAD( "8.e1", 0xa000, 0x2000, CRC(42fafb6f) SHA1(32d06ee4fe28033ae04058d806917bf5b5690246) ) // 2764 + ROM_LOAD( "9.c1", 0xc000, 0x2000, CRC(8291e28a) SHA1(9a05cae191babdf3f78a7131985d8c6583f7c973) ) // 2764 + + ROM_REGION( 0x0020, "proms", 0 ) + ROM_LOAD( "f-rom.bpr", 0x0000, 0x0020, BAD_DUMP CRC(d3007282) SHA1(e4d863ab193e49208ed0f59dcddb1da0492314f6) ) // not dumped for this set, using the one from royalmah for now, girl colors don't seem correct +ROM_END + + +/*************************************************************************** + +Ichi Ban Jyan +Excel, 1993 + +PCB Layout +---------- + +MJ911 +|----------------------------------| +|MB3712 DSW-D DSW-C DSW-B DSW-A SW| +| M6378 BATT | +|VOL 6264 3 | +| YM2413 MJB | +|M 1 2 | +|A YM2149 MJG |-------| | +|H |ALTERA | Z80 | +|J MJR |EP1810 | | +|O | | ALTERA | +|N |-------| EP910 | +|G | +| | +| 41464 41464 | +| 41464 41464 18.432MHz| +|----------------------------------| +Notes: +Z80 clock - 6.144MHz [18.432/3] +YM2149 clock - 1.536MHz [18.432/12] +YM2413 clock - 3.072MHz [18.432/6] +M6378 - OKI MSM6378A Voice Synthesis IC with 256Kbit OTP ROM (DIP16) - not populated +VSync - 60.5686Hz +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) ) // 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) + ROM_IGNORE(0x18000) + + // 1.u28 + // 1st 0x8000 contain title screen + // 2nd 0x8000 contain paytable + // 3rd 0x8000 contain in-game background + // 4th 0x8000 contain double up screen + + // 2.u14 + // 1st 0x8000 contain mahjong tiles (resulting in bad GFX for player's hand' tiles) + // 2nd 0x8000 contain mahjong tiles + // 3rd 0x8000 contain reels? + // 4th 0x8000 empty + + + 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( 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 + +PCB is etched +NEW PONG-BOO MADE IN JAPAN +OCT. Co,Ltd. All Rights Reserved + +Main components +- 4x scratched chips. 1 is supposed to be the main CPU, possibly some kind of Z80 or Z180 based SoC? +- 1x 48.000 XTAL +- 1x OKI M6295 sound chip (there's also an unpopulated space marked for a YM2413) +- 1x CY7C185-15PC 8k x8 SRAM +- 1x CY7C199-15PC 32k x8 SRAM +- 1x HM6264ALSP-12 with a battery nearby +- 2x SN74LS174N +- 4x bank of 8 DIP-switches + +This game shares the same programmer / programming team as Ichi Ban Jian by Excel. +It seems to use a similar split opcodes / data ROM arrangement. +*/ + +ROM_START( pongboo2 ) + ROM_REGION( 0x80000, "maincpu", 0 ) + ROM_LOAD( "1a.1.u016", 0x00000, 0x80000, CRC(07a95a99) SHA1(10897f8f0d8799797a577dffc9ba36b8904bb6c4) ) + + ROM_REGION( 0x40000, "oki", 0 ) + ROM_LOAD( "2.u0513", 0x00000, 0x40000, CRC(97bafe5b) SHA1(bff4df17cdb2d3ee63cc88ff486a7f5964182a15) ) +ROM_END + +void royalmah_prgbank_state::init_tahjong() +{ + m_mainbank->configure_entries(0, 2, memregion("maincpu")->base() + 0x10000, 0x4000); +} + +void royalmah_state::init_jansou() +{ + 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)); +} + +void royalmah_prgbank_state::init_dynax() +{ + m_mainbank->configure_entries(0, 32, memregion("maincpu")->base() + 0x10000, 0x8000); +} + +void royalmah_prgbank_state::init_suzume() +{ + m_mainbank->configure_entries(0, 8, memregion("maincpu")->base() + 0x10000, 0x8000); + + save_item(NAME(m_suzume_bank)); +} + +void royalmah_prgbank_state::init_daisyari() +{ + m_mainbank->configure_entries(0, 8, memregion("maincpu")->base() + 0x10000, 0x8000); +} + +void royalmah_prgbank_state::init_mjtensin() +{ + m_mainbank->configure_entries(0, 80, memregion("maincpu")->base() + 0x10000, 0x8000); + + save_item(NAME(m_rombank)); +} + +void royalmah_prgbank_state::init_cafetime() +{ + m_mainbank->configure_entries(0, 64, memregion("maincpu")->base() + 0x10000, 0x8000); + + save_item(NAME(m_rombank)); +} + +void royalmah_prgbank_state::init_cafedoll() +{ + init_cafetime(); + + 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); + + save_item(NAME(m_rombank)); +} + +void royalmah_prgbank_state::init_mjvegas() +{ + init_mjvegasa(); + + save_item(NAME(m_mjvegas_p5_val)); +} + +void royalmah_prgbank_state::init_jongshin() +{ + m_mainbank->configure_entries(0, 3, memregion("maincpu")->base() + 0x10000, 0x8000); +} + +void royalmah_prgbank_state::init_mjifb() +{ + m_mainbank->configure_entries(0, 256, memregion("maincpu")->base() + 0x10000, 0x4000); + + save_item(NAME(m_rombank)); +} + +void royalmah_prgbank_state::init_tontonb() +{ + m_mainbank->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x8000); +} + +void royalmah_prgbank_state::init_janptr96() +{ + m_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()); + 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_mjsenka() +{ + uint8_t *rom = memregion("maincpu")->base(); + uint8_t *decrypted = memregion("decrypted")->base(); + + for (int i = 0x0000; i < 0xa000; i++) + decrypted[i] = rom[i]; + + for (int i = 0x6000; i < 0x8000; i++) + { + switch (i & 0x15) + { + case 0x00: decrypted[i] ^= 0x03; break; + case 0x01: decrypted[i] ^= 0x07; break; + case 0x04: decrypted[i] ^= 0x01; break; + case 0x05: decrypted[i] ^= 0x05; break; + case 0x10: decrypted[i] ^= 0x02; break; + case 0x11: decrypted[i] ^= 0x06; break; + case 0x14: decrypted[i] ^= 0x00; break; + case 0x15: decrypted[i] ^= 0x04; break; + } + + if (i & 0x02) + decrypted[i] ^= 0x80; + + decrypted[i] = bitswap<8>(decrypted[i], 2, 6, 5, 4, 3, 0, 7, 1); + } + + for (int i = 0x6000; i < 0x8000; i++) + { + switch (i & 0x0e) + { + case 0x00: rom[i] ^= 0x01; break; + case 0x02: rom[i] ^= 0x03; break; + case 0x04: rom[i] ^= 0x05; break; + case 0x06: rom[i] ^= 0x07; break; + case 0x08: rom[i] ^= 0x00; break; + case 0x0a: rom[i] ^= 0x02; break; + case 0x0c: rom[i] ^= 0x04; break; + case 0x0e: rom[i] ^= 0x06; break; + } + + if ((i & 0x01) == 0x00) + rom[i] ^= 0x80; + + rom[i] = bitswap<8>(rom[i], 0, 6, 5, 4, 3, 1, 2, 7); + } + + m_mainopbank->configure_entries(0, 8, &decrypted[0x8000], 0x400); + + init_chalgirl(); +} + +void royalmah_prgbank_state::init_mjsiyoub() +{ + m_mainbank->configure_entries(0, 32, memregion("maincpu")->base() + 0x8000, 0x400); + + save_item(NAME(m_mjyarou_bank)); +} + +void royalmah_prgbank_state::init_chalgirl() +{ + m_mainbank->configure_entries(0, 8, memregion("maincpu")->base() + 0x8000, 0x400); + + save_item(NAME(m_mjyarou_bank)); +} + +void royalmah_prgbank_state::init_ichiban() +{ + // TODO: work out banking + m_mainbank->configure_entries(0, 8, memregion("maincpu")->base() + 0x10000, 0x8000); +} + +void royalmah_prgbank_state::init_pongboo2() +{ + // TODO: work out banking + m_mainbank->configure_entry(0, memregion("maincpu")->base() + 0x8000); +} + +} // anonymous namespace + + +// 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 (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 |