diff options
Diffstat (limited to 'src/mame/drivers/royalmah.c')
-rw-r--r-- | src/mame/drivers/royalmah.c | 4263 |
1 files changed, 4263 insertions, 0 deletions
diff --git a/src/mame/drivers/royalmah.c b/src/mame/drivers/royalmah.c new file mode 100644 index 00000000000..b9eb50395d0 --- /dev/null +++ b/src/mame/drivers/royalmah.c @@ -0,0 +1,4263 @@ +/**************************************************************************** + +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 / TLCS-90 +Video: Framebuffer +Sound: AY-3-8910 +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 +86 Ippatsu Gyakuten Z80 Public/Paradais +86 Don Den Mahjong D039198L-0 Z80 Dyna Electronics +86 Watashiha Suzumechan Z80 Dyna Electronics +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..? D29? TLCS-90 Dynax Larger palette +91 Mahjong Vegas D5011308L1 + FRM-00 TLCS-90 +92 Mahjong Cafe Time D6310128L1-1 TLCS-90 Dynax Larger palette, RTC +93 Mahjong Cafe Doll D76052208L-2 TLCS-90 Dynax Larger palette, RTC, Undumped internal rom +95 Mahjong Tensinhai D10010318L1 TLCS-90 Dynax Larger palette, RTC +96 Janputer '96 Z80 Dynax 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 + + +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) ? + +- janptr96: in service mode press in sequence N,Ron,Ron,N to access some + hidden options. (thanks bnathan) + +****************************************************************************/ + +#include "driver.h" +#include "cpu/tlcs90/tlcs90.h" +#include "machine/msm6242.h" +#include "sound/ay8910.h" + + +static UINT8 input_port_select, dsw_select, rombank; +static int palette_base; + + +static PALETTE_INIT( royalmah ) +{ + offs_t i; + + for (i = 0; i < memory_region_length(REGION_PROMS); i++) + { + UINT8 bit0, bit1, bit2, r, g, b; + + UINT8 data = memory_region(REGION_PROMS)[i]; + + /* red component */ + bit0 = (data >> 0) & 0x01; + bit1 = (data >> 1) & 0x01; + bit2 = (data >> 2) & 0x01; + r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; + + /* green component */ + bit0 = (data >> 3) & 0x01; + bit1 = (data >> 4) & 0x01; + bit2 = (data >> 5) & 0x01; + g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; + + /* blue component */ + bit0 = 0; + bit1 = (data >> 6) & 0x01; + bit2 = (data >> 7) & 0x01; + b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; + + palette_set_color_rgb(machine,i, r,g,b); + } +} + + +static PALETTE_INIT( mjderngr ) +{ + offs_t i; + + for (i = 0; i < memory_region_length(REGION_PROMS) / 2; i++) + { + UINT16 data = (memory_region(REGION_PROMS)[i] << 8) | memory_region(REGION_PROMS)[i + 0x200]; + + /* the bits are in reverse order */ + UINT8 r = BITSWAP8((data >> 0) & 0x1f,7,6,5,0,1,2,3,4 ); + UINT8 g = BITSWAP8((data >> 5) & 0x1f,7,6,5,0,1,2,3,4 ); + UINT8 b = BITSWAP8((data >> 10) & 0x1f,7,6,5,0,1,2,3,4 ); + + palette_set_color_rgb(machine,i, pal5bit(r), pal5bit(g), pal5bit(b)); + } +} + + +static WRITE8_HANDLER( royalmah_palbank_w ) +{ + /* bit 1 = coin counter */ + coin_counter_w(0,data & 2); + + /* bit 2 always set? */ + + /* bit 3 = palette bank */ + palette_base = (data >> 3) & 0x01; +} + + +static WRITE8_HANDLER( mjderngr_coin_w ) +{ + /* bit 1 = coin counter */ + coin_counter_w(0,data & 2); + + /* bit 2 always set? */ +} + + +static WRITE8_HANDLER( mjderngr_palbank_w ) +{ + palette_base = data; +} + + +static VIDEO_UPDATE( royalmah ) +{ + + offs_t offs; + + for (offs = 0; offs < 0x4000; offs++) + { + int i; + + UINT8 data1 = videoram[offs + 0x0000]; + UINT8 data2 = videoram[offs + 0x4000]; + + UINT8 y = 255 - (offs >> 6); + UINT8 x = 255 - (offs << 2); + + for (i = 0; i < 4; i++) + { + UINT8 pen = ((data2 >> 1) & 0x08) | ((data2 << 2) & 0x04) | ((data1 >> 3) & 0x02) | ((data1 >> 0) & 0x01); + + *BITMAP_ADDR16(bitmap, y, x) = (palette_base << 4) | pen; + + x = x - 1; + data1 = data1 >> 1; + data2 = data2 >> 1; + } + } + + return 0; +} + + + + + +static WRITE8_HANDLER( royalmah_rom_w ) +{ + /* using this handler will avoid all the entries in the error log that are the result of + the RLD and RRD instructions this games uses to print text on the screen */ +} + + +static WRITE8_HANDLER( input_port_select_w ) +{ + input_port_select = data; +} + +static READ8_HANDLER( royalmah_player_1_port_r ) +{ + int ret = (input_port_0_r(offset) & 0xc0) | 0x3f; + + if ((input_port_select & 0x01) == 0) ret &= input_port_0_r(offset); + if ((input_port_select & 0x02) == 0) ret &= input_port_1_r(offset); + if ((input_port_select & 0x04) == 0) ret &= input_port_2_r(offset); + if ((input_port_select & 0x08) == 0) ret &= input_port_3_r(offset); + if ((input_port_select & 0x10) == 0) ret &= input_port_4_r(offset); + + return ret; +} + +static READ8_HANDLER( royalmah_player_2_port_r ) +{ + int ret = (input_port_5_r(offset) & 0xc0) | 0x3f; + + if ((input_port_select & 0x01) == 0) ret &= input_port_5_r(offset); + if ((input_port_select & 0x02) == 0) ret &= input_port_6_r(offset); + if ((input_port_select & 0x04) == 0) ret &= input_port_7_r(offset); + if ((input_port_select & 0x08) == 0) ret &= input_port_8_r(offset); + if ((input_port_select & 0x10) == 0) ret &= input_port_9_r(offset); + + return ret; +} + + + +static READ8_HANDLER ( majs101b_dsw_r ) +{ + switch (dsw_select) + { + case 0x00: return readinputport(13); /* DSW3 */ + case 0x20: return readinputport(14); /* DSW4 */ + case 0x40: return readinputport(12); /* DSW2 */ + } + return 0; +} + + +static UINT8 suzume_bank; + +static READ8_HANDLER ( suzume_dsw_r ) +{ + if (suzume_bank & 0x40) + { + return suzume_bank; + } + else + { + switch (suzume_bank) + { + case 0x08: return readinputport(14); /* DSW4 */ + case 0x10: return readinputport(13); /* DSW3 */ + case 0x18: return readinputport(12); /* DSW2 */ + } + return 0; + } +} + +static WRITE8_HANDLER ( suzume_bank_w ) +{ + UINT8 *rom = memory_region(REGION_CPU1); + int address; + + suzume_bank = data; + +logerror("%04x: bank %02x\n",activecpu_get_pc(),data); + + /* bits 6, 4 and 3 used for something input related? */ + + address = 0x10000 + (data & 0x07) * 0x8000; + memory_set_bankptr(1,&rom[address]); +} + + +static WRITE8_HANDLER ( mjapinky_bank_w ) +{ + UINT8 *ROM = memory_region(REGION_CPU1); + rombank = data; + memory_set_bankptr(1,ROM + 0x10000 + 0x8000 * data); +} + +static WRITE8_HANDLER( mjapinky_palbank_w ) +{ + flip_screen_set(~data & 4); + palette_base = (data >> 3) & 0x01; + coin_counter_w(0,data & 2); // in + coin_counter_w(1,data & 1); // out +} + +static READ8_HANDLER( mjapinky_dsw_r ) +{ + if (rombank == 0x0e) return readinputport(13); + else return *(memory_region(REGION_CPU1) + 0x10000 + 0x8000 * rombank); +} + +static WRITE8_HANDLER ( tontonb_bank_w ) +{ + UINT8 *rom = memory_region(REGION_CPU1); + int address; + +logerror("%04x: bank %02x\n",activecpu_get_pc(),data); + + if (data == 0) return; // tontonb fix? + + data &= 0x0f; + + address = 0x10000 + data * 0x8000; + + memory_set_bankptr(1,&rom[address]); +} + + +/* bits 5 and 6 seem to affect which Dip Switch to read in 'majs101b' */ +static WRITE8_HANDLER ( dynax_bank_w ) +{ + UINT8 *rom = memory_region(REGION_CPU1); + int address; + +//logerror("%04x: bank %02x\n",activecpu_get_pc(),data); + + dsw_select = data & 0x60; + + data &= 0x1f; + + address = 0x10000 + data * 0x8000; + + memory_set_bankptr(1,&rom[address]); +} + + + + + +static ADDRESS_MAP_START( royalmah_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE( 0x0000, 0x6fff ) AM_READWRITE( MRA8_ROM, royalmah_rom_w ) + AM_RANGE( 0x7000, 0x7fff ) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size) + AM_RANGE( 0x8000, 0xffff ) AM_READ( MRA8_BANK1 ) // banked ROMs not present in royalmah + AM_RANGE( 0x8000, 0xffff ) AM_WRITE( MWA8_RAM ) AM_BASE(&videoram) +ADDRESS_MAP_END + + +static ADDRESS_MAP_START( mjapinky_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE( 0x0000, 0x6fff ) AM_READWRITE( MRA8_ROM, royalmah_rom_w ) + AM_RANGE( 0x7000, 0x77ff ) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size) + AM_RANGE( 0x7800, 0x7fff ) AM_RAM + AM_RANGE( 0x8000, 0x8000 ) AM_READ( mjapinky_dsw_r ) + AM_RANGE( 0x8000, 0xffff ) AM_READ( MRA8_BANK1 ) + AM_RANGE( 0x8000, 0xffff ) AM_WRITE( MWA8_RAM ) AM_BASE(&videoram) +ADDRESS_MAP_END + + + + +static ADDRESS_MAP_START( royalmah_iomap, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE( 0x01, 0x01 ) AM_READ( AY8910_read_port_0_r ) + AM_RANGE( 0x02, 0x02 ) AM_WRITE( AY8910_write_port_0_w ) + AM_RANGE( 0x03, 0x03 ) AM_WRITE( AY8910_control_port_0_w ) + AM_RANGE( 0x10, 0x10 ) AM_READWRITE( input_port_11_r, royalmah_palbank_w ) + AM_RANGE( 0x11, 0x11 ) AM_READWRITE( input_port_10_r, input_port_select_w ) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( ippatsu_iomap, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE( 0x01, 0x01 ) AM_READ( AY8910_read_port_0_r ) + AM_RANGE( 0x02, 0x02 ) AM_WRITE( AY8910_write_port_0_w ) + AM_RANGE( 0x03, 0x03 ) AM_WRITE( AY8910_control_port_0_w ) + AM_RANGE( 0x10, 0x10 ) AM_READWRITE( input_port_11_r, royalmah_palbank_w ) + AM_RANGE( 0x11, 0x11 ) AM_READWRITE( input_port_10_r, input_port_select_w ) + AM_RANGE( 0x12, 0x12 ) AM_READ( input_port_12_r ) + AM_RANGE( 0x13, 0x13 ) AM_READ( input_port_13_r ) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( suzume_iomap, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE( 0x01, 0x01 ) AM_READ( AY8910_read_port_0_r ) + AM_RANGE( 0x02, 0x02 ) AM_WRITE( AY8910_write_port_0_w ) + AM_RANGE( 0x03, 0x03 ) AM_WRITE( AY8910_control_port_0_w ) + AM_RANGE( 0x10, 0x10 ) AM_READWRITE( input_port_11_r, royalmah_palbank_w ) + AM_RANGE( 0x11, 0x11 ) AM_READWRITE( input_port_10_r, input_port_select_w ) + AM_RANGE( 0x80, 0x80 ) AM_READ( suzume_dsw_r ) + AM_RANGE( 0x81, 0x81 ) AM_WRITE( suzume_bank_w ) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( dondenmj_iomap, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE( 0x01, 0x01 ) AM_READ( AY8910_read_port_0_r ) + AM_RANGE( 0x02, 0x02 ) AM_WRITE( AY8910_write_port_0_w ) + AM_RANGE( 0x03, 0x03 ) AM_WRITE(AY8910_control_port_0_w) + AM_RANGE( 0x10, 0x10 ) AM_READWRITE( input_port_11_r, royalmah_palbank_w ) + AM_RANGE( 0x11, 0x11 ) AM_READWRITE( input_port_10_r, input_port_select_w ) + AM_RANGE( 0x85, 0x85 ) AM_READ( input_port_12_r ) // DSW2 + AM_RANGE( 0x86, 0x86 ) AM_READ( input_port_13_r ) // DSW3 + AM_RANGE( 0x87, 0x87 ) AM_WRITE( dynax_bank_w ) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( mjdiplob_iomap, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE( 0x01, 0x01 ) AM_READ( AY8910_read_port_0_r ) + AM_RANGE( 0x02, 0x02 ) AM_WRITE( AY8910_write_port_0_w ) + AM_RANGE( 0x03, 0x03 ) AM_WRITE( AY8910_control_port_0_w ) + AM_RANGE( 0x10, 0x10 ) AM_READWRITE( input_port_11_r, royalmah_palbank_w ) + AM_RANGE( 0x11, 0x11 ) AM_READWRITE( input_port_10_r, input_port_select_w ) + AM_RANGE( 0x61, 0x61 ) AM_WRITE(tontonb_bank_w) + AM_RANGE( 0x62, 0x62 ) AM_READ( input_port_12_r ) // DSW2 + AM_RANGE( 0x63, 0x63 ) AM_READ( input_port_13_r ) // DSW3 +ADDRESS_MAP_END + +static ADDRESS_MAP_START( tontonb_iomap, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE( 0x01, 0x01 ) AM_READ( AY8910_read_port_0_r ) + AM_RANGE( 0x02, 0x02 ) AM_WRITE( AY8910_write_port_0_w ) + AM_RANGE( 0x03, 0x03 ) AM_WRITE( AY8910_control_port_0_w ) + AM_RANGE( 0x10, 0x10 ) AM_READWRITE( input_port_11_r, royalmah_palbank_w ) + AM_RANGE( 0x11, 0x11 ) AM_READWRITE( input_port_10_r, input_port_select_w ) + AM_RANGE( 0x44, 0x44 ) AM_WRITE( tontonb_bank_w ) + AM_RANGE( 0x46, 0x46 ) AM_READ( input_port_13_r ) // DSW2 + AM_RANGE( 0x47, 0x47 ) AM_READ( input_port_12_r ) // DSW3 +ADDRESS_MAP_END + +static ADDRESS_MAP_START( majs101b_iomap, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE( 0x01, 0x01 ) AM_READ( AY8910_read_port_0_r ) + AM_RANGE( 0x02, 0x02 ) AM_WRITE( AY8910_write_port_0_w ) + AM_RANGE( 0x03, 0x03 ) AM_WRITE( AY8910_control_port_0_w ) + AM_RANGE( 0x10, 0x10 ) AM_READWRITE( input_port_11_r, royalmah_palbank_w ) + AM_RANGE( 0x11, 0x11 ) AM_READWRITE( input_port_10_r, input_port_select_w ) + AM_RANGE( 0x00, 0x00 ) AM_READWRITE( majs101b_dsw_r, dynax_bank_w ) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( mjderngr_iomap, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE( 0x01, 0x01 ) AM_READ( AY8910_read_port_0_r ) + AM_RANGE( 0x02, 0x02 ) AM_WRITE( AY8910_write_port_0_w ) + AM_RANGE( 0x03, 0x03 ) AM_WRITE( AY8910_control_port_0_w ) +// AM_RANGE( 0x10, 0x10 ) AM_READ( input_port_11_r ) + AM_RANGE( 0x10, 0x10 ) AM_WRITE( mjderngr_coin_w ) // palette bank is set separately + AM_RANGE( 0x11, 0x11 ) AM_READWRITE( input_port_10_r, input_port_select_w ) + AM_RANGE( 0x20, 0x20 ) AM_WRITE( dynax_bank_w ) + AM_RANGE( 0x40, 0x40 ) AM_READ( input_port_13_r ) // DSW2 + AM_RANGE( 0x4c, 0x4c ) AM_READ( input_port_12_r ) // DSW3 + AM_RANGE( 0x60, 0x60 ) AM_WRITE( mjderngr_palbank_w ) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( mjapinky_iomap, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE( 0x00, 0x00 ) AM_WRITE( mjapinky_bank_w ) + AM_RANGE( 0x01, 0x01 ) AM_READ( AY8910_read_port_0_r ) + AM_RANGE( 0x02, 0x02 ) AM_WRITE( AY8910_write_port_0_w ) + AM_RANGE( 0x03, 0x03 ) AM_WRITE( AY8910_control_port_0_w ) + AM_RANGE( 0x04, 0x04 ) AM_READ( input_port_12_r ) + AM_RANGE( 0x10, 0x10 ) AM_READWRITE( input_port_11_r, mjapinky_palbank_w ) + AM_RANGE( 0x11, 0x11 ) AM_READWRITE( input_port_10_r, input_port_select_w ) +ADDRESS_MAP_END + +/**************************************************************************** + Janputer '96 +****************************************************************************/ + +static ADDRESS_MAP_START( janptr96_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE( 0x0000, 0x5fff) AM_ROM + AM_RANGE( 0x6000, 0x6fff ) AM_RAMBANK(3) // nvram + AM_RANGE( 0x7000, 0x7fff ) AM_RAMBANK(2) // banked nvram + AM_RANGE( 0x8000, 0xffff ) AM_READ(MRA8_BANK1) + AM_RANGE( 0x8000, 0xffff ) AM_WRITE(MWA8_RAM) AM_BASE(&videoram) +ADDRESS_MAP_END + +static WRITE8_HANDLER( janptr96_dswsel_w ) +{ + // 0x20 = 0 -> hopper on + // 0x40 ? + dsw_select = data; +} + +static READ8_HANDLER( janptr96_dswsel_r ) +{ + return dsw_select; +} + +static READ8_HANDLER( janptr96_dsw_r ) +{ + if (~dsw_select & 0x01) return readinputportbytag("DSW4"); + if (~dsw_select & 0x02) return readinputportbytag("DSW3"); + if (~dsw_select & 0x04) return readinputportbytag("DSW2"); + if (~dsw_select & 0x08) return readinputportbytag("DSW1"); + if (~dsw_select & 0x10) return readinputportbytag("DSWTOP"); + return 0xff; +} + +static WRITE8_HANDLER( janptr96_rombank_w ) +{ + UINT8 *ROM = memory_region(REGION_CPU1); + memory_set_bankptr(1,ROM + 0x10000 + 0x8000 * data); +} + +static WRITE8_HANDLER( janptr96_rambank_w ) +{ + memory_set_bankptr(2,generic_nvram + 0x1000 + 0x1000 * data); +} + +static READ8_HANDLER( janptr96_unknown_r ) +{ + // 0x08 = 0 makes the game crash (e.g. in the m-ram test: nested interrupts?) + return 0xff; +} + +static WRITE8_HANDLER( janptr96_coin_counter_w ) +{ + flip_screen_set(~data & 4); + coin_counter_w(0,data & 2); // in + coin_counter_w(1,data & 1); // out +} + +static ADDRESS_MAP_START( janptr96_iomap, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE( 0x00, 0x00 ) AM_WRITE( janptr96_rombank_w ) // BANK ROM Select + AM_RANGE( 0x1e, 0x1e ) AM_READWRITE( janptr96_dswsel_r, janptr96_dswsel_w ) + AM_RANGE( 0x1c, 0x1c ) AM_READ( janptr96_dsw_r ) + AM_RANGE( 0x20, 0x20 ) AM_READWRITE( janptr96_unknown_r, janptr96_rambank_w ) + AM_RANGE( 0x50, 0x50 ) AM_WRITE( mjderngr_palbank_w ) + AM_RANGE( 0x60, 0x6f ) AM_READWRITE( msm6242_r, msm6242_w ) + AM_RANGE( 0x81, 0x81 ) AM_READ( AY8910_read_port_0_r ) + AM_RANGE( 0x82, 0x82 ) AM_WRITE( AY8910_write_port_0_w ) + AM_RANGE( 0x83, 0x83 ) AM_WRITE( AY8910_control_port_0_w ) + AM_RANGE( 0x93, 0x93 ) AM_WRITE( input_port_select_w ) + AM_RANGE( 0xd8, 0xd8 ) AM_WRITE( janptr96_coin_counter_w ) + AM_RANGE( 0xd9, 0xd9 ) AM_READ( input_port_10_r ) +ADDRESS_MAP_END + +/**************************************************************************** + Mahjong If +****************************************************************************/ + +static UINT8 mjifb_rom_enable; + +static WRITE8_HANDLER( mjifb_coin_counter_w ) +{ + flip_screen_set( data & 4); + coin_counter_w(0,data & 2); // in + coin_counter_w(1,data & 1); // out +} + +static READ8_HANDLER( mjifb_rom_io_r ) +{ + if (mjifb_rom_enable) + return ((UINT8*)(memory_region(REGION_CPU1) + 0x10000 + rombank * 0x4000))[offset]; + + offset += 0x8000; + + switch(offset) + { + case 0x8000: return readinputport(14); // dsw 4 + case 0x8200: return readinputport(13); // dsw 3 + case 0x9001: return AY8910_read_port_0_r(0); // inputs + case 0x9011: return readinputport(10); + } + + logerror("%04X: unmapped input read at %04X\n", activecpu_get_pc(), offset); + return 0xff; +} + +static WRITE8_HANDLER( mjifb_rom_io_w ) +{ + if (mjifb_rom_enable) + { + videoram[offset] = data; + return; + } + + offset += 0x8000; + + switch(offset) + { + case 0x8e00: palette_base = data & 0x1f; return; + case 0x9002: AY8910_write_port_0_w(0,data); return; + case 0x9003: AY8910_control_port_0_w(0,data); return; + case 0x9010: + mjifb_coin_counter_w(0,data); + return; + case 0x9011: input_port_select_w(0,data); return; + case 0x9013: +// if (data) popmessage("%02x",data); + return; + } + + logerror("%04X: unmapped input write at %04X = %02X\n", activecpu_get_pc(), offset,data); +} + +static WRITE8_HANDLER( mjifb_videoram_w ) +{ + videoram[offset + 0x4000] = data; +} + +static ADDRESS_MAP_START( mjifb_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE( 0x0000, 0x6fff ) AM_ROM + AM_RANGE( 0x7000, 0x7fff ) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size) + AM_RANGE( 0x8000, 0xbfff ) AM_READWRITE(mjifb_rom_io_r, mjifb_rom_io_w) AM_BASE(&videoram) + AM_RANGE( 0xc000, 0xffff ) AM_READWRITE(MRA8_ROM, mjifb_videoram_w) +// AM_RANGE( 0xc000, 0xffff ) AM_READWRITE(MRA8_ROM, MWA8_RAM) This should, but doesn't work +ADDRESS_MAP_END + +static READ8_HANDLER( mjifb_p3_r ) +{ + return readinputport(11) >> 6; +} +static READ8_HANDLER( mjifb_p5_r ) +{ + return readinputport(11); +} +static READ8_HANDLER( mjifb_p6_r ) +{ + return readinputport(12); +} +static READ8_HANDLER( mjifb_p7_r ) +{ + return readinputport(12) >> 4; +} +static READ8_HANDLER( mjifb_p8_r ) +{ + return 0xff; +} + +static WRITE8_HANDLER( mjifb_p3_w ) +{ + rombank = (rombank & 0x0f) | ((data & 0x0c) << 2); +} +static WRITE8_HANDLER( mjifb_p4_w ) +{ + rombank = (rombank & 0xf0) | (data & 0x0f); +} +static WRITE8_HANDLER( mjifb_p8_w ) +{ + mjifb_rom_enable = (data & 0x08); +} + +static ADDRESS_MAP_START( mjifb_iomap, ADDRESS_SPACE_IO, 8 ) + AM_RANGE( T90_P3, T90_P3 ) AM_READWRITE( mjifb_p3_r, mjifb_p3_w ) + AM_RANGE( T90_P4, T90_P4 ) AM_WRITE( mjifb_p4_w ) + AM_RANGE( T90_P5, T90_P5 ) AM_READ ( mjifb_p5_r ) + AM_RANGE( T90_P6, T90_P6 ) AM_READ ( mjifb_p6_r ) + AM_RANGE( T90_P7, T90_P7 ) AM_READ ( mjifb_p7_r ) + AM_RANGE( T90_P8, T90_P8 ) AM_READWRITE( mjifb_p8_r, mjifb_p8_w ) +ADDRESS_MAP_END + + +/**************************************************************************** + Mahjong Shinkirou Deja Vu +****************************************************************************/ + +static READ8_HANDLER( mjdejavu_rom_io_r ) +{ + if (mjifb_rom_enable) + return ((UINT8*)(memory_region(REGION_CPU1) + 0x10000 + rombank * 0x4000))[offset]; + + offset += 0x8000; + + switch(offset) + { + case 0x8000: return readinputport(14); // dsw 2 + case 0x8001: return readinputport(13); // dsw 1 + case 0x9001: return AY8910_read_port_0_r(0); // inputs + case 0x9011: return readinputport(10); + } + + logerror("%04X: unmapped input read at %04X\n", activecpu_get_pc(), offset); + return 0xff; +} + +static WRITE8_HANDLER( mjdejavu_rom_io_w ) +{ + if (mjifb_rom_enable) + { + videoram[offset] = data; + return; + } + + offset += 0x8000; + switch(offset) + { + case 0x8802: palette_base = data & 0x1f; return; + case 0x9002: AY8910_write_port_0_w(0,data); return; + case 0x9003: AY8910_control_port_0_w(0,data); return; + case 0x9010: mjifb_coin_counter_w(0,data); return; + case 0x9011: input_port_select_w(0,data); return; + case 0x9013: +// if (data) popmessage("%02x",data); + return; + } + + logerror("%04X: unmapped input write at %04X = %02X\n", activecpu_get_pc(), offset,data); +} + +static ADDRESS_MAP_START( mjdejavu_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE( 0x0000, 0x6fff ) AM_ROM + AM_RANGE( 0x7000, 0x7fff ) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size) + AM_RANGE( 0x8000, 0xbfff ) AM_READWRITE(mjdejavu_rom_io_r, mjdejavu_rom_io_w) AM_BASE(&videoram) + AM_RANGE( 0xc000, 0xffff ) AM_READWRITE(MRA8_ROM, mjifb_videoram_w) +ADDRESS_MAP_END + + +/**************************************************************************** + Mahjong Tensinhai +****************************************************************************/ + +static READ8_HANDLER( mjtensin_p3_r ) +{ + return 0xff; +} + +static void mjtensin_update_rombank(void) +{ + memory_set_bankptr( 1, memory_region(REGION_CPU1) + 0x10000 + rombank * 0x8000 ); +} +static WRITE8_HANDLER( mjtensin_p4_w ) +{ + rombank = (rombank & 0xf0) | (data & 0x0f); + mjtensin_update_rombank(); +} +static WRITE8_HANDLER( mjtensin_6ff3_w ) +{ + rombank = (data << 4) | (rombank & 0x0f); + mjtensin_update_rombank(); +} + +static ADDRESS_MAP_START( mjtensin_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE( 0x0000, 0x5fff ) AM_ROM + AM_RANGE( 0x6000, 0x6fbf ) AM_RAM + AM_RANGE( 0x6fc1, 0x6fc1 ) AM_READ( AY8910_read_port_0_r ) + AM_RANGE( 0x6fc2, 0x6fc2 ) AM_WRITE( AY8910_write_port_0_w ) + AM_RANGE( 0x6fc3, 0x6fc3 ) AM_WRITE( AY8910_control_port_0_w ) + AM_RANGE( 0x6fd0, 0x6fd0 ) AM_WRITE( janptr96_coin_counter_w ) + AM_RANGE( 0x6fd1, 0x6fd1 ) AM_READWRITE( input_port_10_r, input_port_select_w ) + AM_RANGE( 0x6fe0, 0x6fef ) AM_READWRITE( msm6242_r, msm6242_w ) + AM_RANGE( 0x6ff0, 0x6ff0 ) AM_READWRITE( janptr96_dsw_r, janptr96_dswsel_w ) + AM_RANGE( 0x6ff1, 0x6ff1 ) AM_WRITE( mjderngr_palbank_w ) + AM_RANGE( 0x6ff3, 0x6ff3 ) AM_WRITE( mjtensin_6ff3_w ) + AM_RANGE( 0x7000, 0x7fff ) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size) + AM_RANGE( 0x8000, 0xffff ) AM_READ( MRA8_BANK1 ) + AM_RANGE( 0x8000, 0xffff ) AM_WRITE( MWA8_RAM ) AM_BASE(&videoram) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( mjtensin_iomap, ADDRESS_SPACE_IO, 8 ) + AM_RANGE( T90_P3, T90_P3 ) AM_READ ( mjtensin_p3_r ) + AM_RANGE( T90_P4, T90_P4 ) AM_WRITE( mjtensin_p4_w ) +ADDRESS_MAP_END + + +/**************************************************************************** + Mahjong Cafe Time +****************************************************************************/ + +static void cafetime_update_rombank(void) +{ + memory_set_bankptr( 1, memory_region(REGION_CPU1) + 0x10000 + rombank * 0x8000 ); +} +static WRITE8_HANDLER( cafetime_p4_w ) +{ + rombank = (rombank & 0xf0) | (data & 0x0f); + cafetime_update_rombank(); +} +static WRITE8_HANDLER( cafetime_p3_w ) +{ + rombank = (rombank & 0x0f) | ((data & 0x0c) << 2); + cafetime_update_rombank(); +} + +static WRITE8_HANDLER( cafetime_dsw_w ) +{ + dsw_select = data; +} +static READ8_HANDLER( cafetime_dsw_r ) +{ + switch( dsw_select ) + { + case 0x00: return readinputportbytag("DSW1"); + case 0x01: return readinputportbytag("DSW2"); + case 0x02: return readinputportbytag("DSW3"); + case 0x03: return readinputportbytag("DSW4"); + case 0x04: return readinputportbytag("DSWTOP"); + } + logerror("%04X: unmapped dsw read %02X\n", activecpu_get_pc(), dsw_select); + return 0xff; +} + +static READ8_HANDLER( cafetime_7fe4_r ) +{ + return 0xff; +} +static WRITE8_HANDLER( cafetime_7fe3_w ) +{ +// popmessage("%02x",data); +} + +static ADDRESS_MAP_START( cafetime_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE( 0x0000, 0x5fff ) AM_ROM + AM_RANGE( 0x6000, 0x7eff ) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size) + AM_RANGE( 0x7fc1, 0x7fc1 ) AM_READ( AY8910_read_port_0_r ) + AM_RANGE( 0x7fc2, 0x7fc2 ) AM_WRITE( AY8910_write_port_0_w ) + AM_RANGE( 0x7fc3, 0x7fc3 ) AM_WRITE( AY8910_control_port_0_w ) + AM_RANGE( 0x7fd0, 0x7fd0 ) AM_WRITE( janptr96_coin_counter_w ) + AM_RANGE( 0x7fd1, 0x7fd1 ) AM_READWRITE( input_port_10_r, MWA8_NOP ) + AM_RANGE( 0x7fd3, 0x7fd3 ) AM_WRITE( input_port_select_w ) + AM_RANGE( 0x7fe0, 0x7fe0 ) AM_READ( cafetime_dsw_r ) + AM_RANGE( 0x7fe1, 0x7fe1 ) AM_WRITE( cafetime_dsw_w ) + AM_RANGE( 0x7fe2, 0x7fe2 ) AM_WRITE( mjderngr_palbank_w ) + AM_RANGE( 0x7fe3, 0x7fe3 ) AM_WRITE( cafetime_7fe3_w ) + AM_RANGE( 0x7fe4, 0x7fe4 ) AM_READ( cafetime_7fe4_r ) + AM_RANGE( 0x7ff0, 0x7fff ) AM_READWRITE( msm6242_r, msm6242_w ) + AM_RANGE( 0x8000, 0xffff ) AM_READ( MRA8_BANK1 ) + AM_RANGE( 0x8000, 0xffff ) AM_WRITE( MWA8_RAM ) AM_BASE(&videoram) +ADDRESS_MAP_END + + +static ADDRESS_MAP_START( cafetime_iomap, ADDRESS_SPACE_IO, 8 ) + AM_RANGE( T90_P3, T90_P3 ) AM_WRITE( cafetime_p3_w ) + AM_RANGE( T90_P4, T90_P4 ) AM_WRITE( cafetime_p4_w ) +ADDRESS_MAP_END + + +static INPUT_PORTS_START( royalmah ) + PORT_START /* P1 IN0 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Credit Clear") PORT_CODE(KEYCODE_7) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Credit Clear") PORT_CODE(KEYCODE_8) + + PORT_START /* P1 IN1 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN2 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN3 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN4 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN0 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) // "COIN2" + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) // "COIN1", but not working + + PORT_START /* P2 IN1 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET )PORT_PLAYER(2) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN2 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON )PORT_PLAYER(2) + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN3 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON )PORT_PLAYER(2) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN4 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL )PORT_PLAYER(2) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* IN10 */ + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) /* "Note" ("Paper Money") = 10 Credits */ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SERVICE3 ) /* Memory Reset */ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE2 ) /* Analizer (Statistics) */ + PORT_SERVICE( 0x08, IP_ACTIVE_HIGH ) + PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START /* 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( janyoup2 ) + PORT_START /* P1 IN0 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Credit Clear") PORT_CODE(KEYCODE_7) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Credit Clear") PORT_CODE(KEYCODE_8) + + PORT_START /* P1 IN1 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN2 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN3 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN4 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN0 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) // "COIN2" + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) // "COIN1", but not working + + PORT_START /* P2 IN1 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET )PORT_PLAYER(2) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN2 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON )PORT_PLAYER(2) + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN3 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON )PORT_PLAYER(2) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN4 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL )PORT_PLAYER(2) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* IN10 */ + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) /* "Note" ("Paper Money") = 10 Credits */ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SERVICE3 ) /* Memory Reset */ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE2 ) /* Analizer (Statistics) */ + PORT_SERVICE( 0x08, IP_ACTIVE_HIGH ) + PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START /* 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 ) ) + + PORT_START /* 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 /* 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_START /* P1 IN0 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Payout") PORT_CODE(KEYCODE_7) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN1 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) + PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN2 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) + PORT_BIT(0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN3 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) + PORT_BIT(0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN4 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) + PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN0 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN1 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET )PORT_PLAYER(2) PORT_CODE(KEYCODE_4) + PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN2 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON )PORT_PLAYER(2) + PORT_BIT(0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN3 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON )PORT_PLAYER(2) + PORT_BIT(0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN4 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL )PORT_PLAYER(2) + PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* IN10 */ + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) /* "Note" ("Paper Money") = 10 Credits */ + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_SERVICE3 ) /* Memory Reset */ + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_SERVICE2 ) /* Analizer (Statistics) */ + PORT_SERVICE( 0x08, IP_ACTIVE_HIGH ) + PORT_BIT(0xf0, IP_ACTIVE_HIGH, IPT_UNUSED ) + + 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( tontonb ) + PORT_START /* P1 IN0 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Payout") PORT_CODE(KEYCODE_7) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN1 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN2 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN3 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN4 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN0 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN1 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET )PORT_PLAYER(2) PORT_CODE(KEYCODE_4) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN2 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON )PORT_PLAYER(2) + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN3 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON )PORT_PLAYER(2) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN4 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL )PORT_PLAYER(2) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* IN10 */ + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) /* "Note" ("Paper Money") = 10 Credits */ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SERVICE3 ) /* Memory Reset */ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE2 ) /* Analizer (Statistics) */ + PORT_SERVICE( 0x08, IP_ACTIVE_HIGH ) + PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START /* 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 (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 (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 + +static INPUT_PORTS_START( mjdiplob ) + PORT_START /* P1 IN0 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Payout") PORT_CODE(KEYCODE_7) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN1 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN2 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN3 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN4 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN0 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN1 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET )PORT_PLAYER(2) PORT_CODE(KEYCODE_4) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN2 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON )PORT_PLAYER(2) + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN3 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON )PORT_PLAYER(2) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN4 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL )PORT_PLAYER(2) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* IN10 */ + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) /* "Note" ("Paper Money") = 10 Credits */ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SERVICE3 ) /* Memory Reset */ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE2 ) /* Analizer (Statistics) */ + PORT_SERVICE( 0x08, IP_ACTIVE_HIGH ) + PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START /* DSW1 (inport $10 -> 0x76fa) */ + 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 ?" ) // check code at 0x0b94 and 0x0de2 + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START /* DSW2 (inport $62 -> 0x76fb) */ + PORT_DIPNAME( 0x03, 0x03, "Winnings" ) // 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, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x08, DEF_STR( On ) ) + PORT_DIPNAME( 0x30, 0x30, "Maximum Payout ?" ) // check code at 0x166c + PORT_DIPSETTING( 0x00, "100" ) + PORT_DIPSETTING( 0x10, "200" ) + PORT_DIPSETTING( 0x20, "300" ) + PORT_DIPSETTING( 0x30, "500" ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) // check code at 0x2c64 + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) // check code at 0x2c64 + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) + + PORT_START /* DSW3 (inport $63 -> 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( Unused ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x02, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) // check code at 0x531f and 0x5375 + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) // check code at 0x5240 + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x08, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) // check code at 0x2411 + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) // check code at 0x2411 and 0x4beb + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) // check code at 0x24ff, 0x25f2, 0x3fcf and 0x45d7 + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Full Tests" ) // 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( majs101b ) + PORT_START /* P1 IN0 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Payout") PORT_CODE(KEYCODE_7) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN1 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN2 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN3 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN4 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN0 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN1 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET )PORT_PLAYER(2) PORT_CODE(KEYCODE_4) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN2 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON )PORT_PLAYER(2) + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN3 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON )PORT_PLAYER(2) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN4 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL )PORT_PLAYER(2) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* IN10 */ + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) /* "Note" ("Paper Money") = 10 Credits */ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SERVICE3 ) /* Memory Reset */ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE2 ) /* Analizer (Statistics) */ + PORT_SERVICE( 0x08, IP_ACTIVE_HIGH ) + PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START /* 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 (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 (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 (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_START /* P1 IN0 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Payout") PORT_CODE(KEYCODE_7) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN1 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN2 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN3 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN4 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN0 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN1 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET )PORT_PLAYER(2) PORT_CODE(KEYCODE_4) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN2 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON )PORT_PLAYER(2) + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN3 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON )PORT_PLAYER(2) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN4 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL )PORT_PLAYER(2) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* IN10 */ + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) /* "Note" ("Paper Money") = 10 Credits */ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SERVICE3 ) /* Memory Reset */ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE2 ) /* Analizer (Statistics) */ + PORT_SERVICE( 0x08, IP_ACTIVE_HIGH ) + PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START_TAG("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_TAG("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_TAG("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_START /* P1 IN0 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Credit Clear") PORT_CODE(KEYCODE_7) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Credit Clear") PORT_CODE(KEYCODE_8) + + PORT_START /* P1 IN1 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) + PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN2 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) + PORT_BIT(0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN3 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) + PORT_BIT(0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN4 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) + PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN0 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START /* P2 IN1 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET )PORT_PLAYER(2) + PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN2 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON )PORT_PLAYER(2) + PORT_BIT(0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN3 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON )PORT_PLAYER(2) + PORT_BIT(0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN4 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL )PORT_PLAYER(2) + PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* IN10 */ + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) /* "Note" ("Paper Money") = 10 Credits */ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SERVICE3 ) /* Memory Reset */ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE2 ) /* Analizer (Statistics) */ + PORT_SERVICE( 0x08, IP_ACTIVE_HIGH ) + PORT_BIT(0xf0, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START_TAG("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_TAG("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_TAG("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_TAG("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( 0x00, "20" ) + PORT_DIPSETTING( 0x40, "10" ) + PORT_DIPSETTING( 0x80, "5" ) + PORT_DIPSETTING( 0xc0, "1" ) + + PORT_START_TAG("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_START /* P1 IN0 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Payout") PORT_CODE(KEYCODE_7) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN1 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN2 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN3 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN4 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN0 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN1 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET )PORT_PLAYER(2) PORT_CODE(KEYCODE_4) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN2 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON )PORT_PLAYER(2) + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN3 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON )PORT_PLAYER(2) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN4 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL )PORT_PLAYER(2) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* IN10 */ + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) /* "Note" ("Paper Money") = 10 Credits */ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SERVICE3 ) /* Memory Reset */ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE2 ) /* Analizer (Statistics) */ + PORT_SERVICE( 0x08, IP_ACTIVE_HIGH ) + PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START // IN10 - DSW1 (P3 & P5) + 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, 0x00, "Maximum Bet" ) + PORT_DIPSETTING( 0x30, "1" ) + PORT_DIPSETTING( 0x20, "5" ) + PORT_DIPSETTING( 0x10, "10" ) + PORT_DIPSETTING( 0x00, "20" ) + PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0xc0, "1" ) + PORT_DIPSETTING( 0x80, "2" ) + PORT_DIPSETTING( 0x40, "3" ) + PORT_DIPSETTING( 0x00, "4" ) + + PORT_START // IN11 - DSW2 (P6 & P7) + PORT_DIPNAME( 0x03, 0x03, "Winnings" ) + 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, 0x04, "Credits Per Note" ) + PORT_DIPSETTING( 0x04, "5" ) + PORT_DIPSETTING( 0x00, "10" ) + PORT_DIPNAME( 0x38, 0x38, "YAKUMAN Bonus" ) + PORT_DIPSETTING( 0x38, "Cut" ) + PORT_DIPSETTING( 0x30, "1 T" ) + PORT_DIPSETTING( 0x28, "300" ) + PORT_DIPSETTING( 0x20, "500" ) + PORT_DIPSETTING( 0x18, "700" ) + PORT_DIPSETTING( 0x10, "1000" ) +// PORT_DIPSETTING( 0x08, "1000?" ) +// PORT_DIPSETTING( 0x00, "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" ) + + PORT_START // IN13 - DSW3 ($8200) + 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, "Unknown 3-7" ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START // IN14 - DSW4 ($8000) + 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, "129" ) + PORT_DIPSETTING( 0x00, "212" ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Flip_Screen ) ) + 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 ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( mjtensin ) + PORT_START /* P1 IN0 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Credit Clear") PORT_CODE(KEYCODE_7) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Credit Clear") PORT_CODE(KEYCODE_8) + + PORT_START /* P1 IN1 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) + PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN2 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) + PORT_BIT(0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN3 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) + PORT_BIT(0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN4 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) + PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN0 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START /* P2 IN1 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET )PORT_PLAYER(2) + PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN2 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON )PORT_PLAYER(2) + PORT_BIT(0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN3 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON )PORT_PLAYER(2) + PORT_BIT(0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN4 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL )PORT_PLAYER(2) + PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* IN10 */ + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) /* "Note" ("Paper Money") = 10 Credits */ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SERVICE3 ) /* Memory Reset */ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE2 ) /* Analizer (Statistics) */ + PORT_SERVICE( 0x08, IP_ACTIVE_HIGH ) + PORT_BIT(0xf0, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START_TAG("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_TAG("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_TAG("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_TAG("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_TAG("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 ) + PORT_START /* P1 IN0 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Payout") PORT_CODE(KEYCODE_7) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN1 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN2 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN3 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN4 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN0 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN1 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET )PORT_PLAYER(2) PORT_CODE(KEYCODE_4) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN2 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON )PORT_PLAYER(2) + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN3 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON )PORT_PLAYER(2) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN4 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL )PORT_PLAYER(2) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* IN10 */ + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) /* "Note" ("Paper Money") = 10 Credits */ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SERVICE3 ) /* Memory Reset */ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE2 ) /* Analizer (Statistics) */ + PORT_SERVICE( 0x08, IP_ACTIVE_HIGH ) + PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START_TAG("DSW1") /* IN11 */ + 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, 0x00, "Maximum Bet" ) + PORT_DIPSETTING( 0x30, "1" ) + PORT_DIPSETTING( 0x20, "5" ) + PORT_DIPSETTING( 0x10, "10" ) + PORT_DIPSETTING( 0x00, "20" ) + PORT_DIPNAME( 0xc0, 0xc0, "Unknown 1-6&7" ) + PORT_DIPSETTING( 0xc0, "1" ) + PORT_DIPSETTING( 0x80, "2" ) + PORT_DIPSETTING( 0x40, "3" ) + PORT_DIPSETTING( 0x00, "4" ) + + PORT_START_TAG("DSW2") /* IN12 */ + PORT_DIPNAME( 0x03, 0x03, "Winnings" ) + 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( 0x0c, 0x0c, "Unknown 2-2&3" ) + PORT_DIPSETTING( 0x0c, "1" ) + PORT_DIPSETTING( 0x08, "2" ) + PORT_DIPSETTING( 0x04, "3" ) + PORT_DIPSETTING( 0x00, "5" ) + PORT_DIPNAME( 0x70, 0x70, "Unknown 2-4&5&6" ) + PORT_DIPSETTING( 0x70, "0" ) + PORT_DIPSETTING( 0x60, "1" ) + PORT_DIPSETTING( 0x50, "2" ) + PORT_DIPSETTING( 0x40, "3" ) + PORT_DIPSETTING( 0x30, "4" ) + PORT_DIPSETTING( 0x20, "5" ) + PORT_DIPSETTING( 0x10, "6" ) + PORT_DIPSETTING( 0x00, "7" ) + PORT_DIPNAME( 0x80, 0x80, "Unknown 2-7" ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START_TAG("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, "Unknown 3-7" ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START_TAG("DSW4") /* IN14 */ + 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, 0x00, "Full Test" ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, "Background" ) + PORT_DIPSETTING( 0x20, "Black" ) + PORT_DIPSETTING( 0x00, "Green" ) + PORT_DIPNAME( 0x40, 0x40, "Unknown 4-6" ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Unknown 4-7" ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START_TAG("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, "Unknown 2-8" ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, "Unknown 2-9" ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x30, 0x30, "Unknown 3-8&9" ) + PORT_DIPSETTING( 0x30, "0" ) + PORT_DIPSETTING( 0x20, "1" ) + PORT_DIPSETTING( 0x10, "2" ) + PORT_DIPSETTING( 0x00, "3" ) + PORT_DIPNAME( 0x40, 0x40, "Unknown 4-8" ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Unknown 4-9" ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( ippatsu ) + PORT_START /* P1 IN0 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Credit Clear") PORT_CODE(KEYCODE_7) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Credit Clear") PORT_CODE(KEYCODE_8) + + PORT_START /* P1 IN1 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN2 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN3 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN4 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN0 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) // "COIN2" + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) // "COIN1", but not working + + PORT_START /* P2 IN1 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET )PORT_PLAYER(2) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN2 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON )PORT_PLAYER(2) + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN3 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON )PORT_PLAYER(2) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN4 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL )PORT_PLAYER(2) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* IN10 */ + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) /* "Note" ("Paper Money") = 10 Credits */ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SERVICE3 ) /* Memory Reset */ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE2 ) /* Analizer (Statistics) */ + PORT_SERVICE( 0x08, IP_ACTIVE_HIGH ) + PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START /* 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( 0x10, 0x10, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x60, 0x60, "Maximum Bet" ) + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x20, "5" ) + PORT_DIPSETTING( 0x40, "7" ) + PORT_DIPSETTING( 0x60, "10" ) + PORT_DIPNAME( 0x80, 0x80, "First Chance" ) + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Yes ) ) + + PORT_START /* DSW (inport $12) */ + PORT_DIPNAME( 0x03, 0x03, "Cut" ) + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x02, "2 Bai" ) + PORT_DIPSETTING( 0x01, "3 Bai" ) + PORT_DIPSETTING( 0x03, "Yakuman" ) + PORT_DIPNAME( 0x0c, 0x0c, "Yakuman Bonus" ) + PORT_DIPSETTING( 0x00, "32" ) + PORT_DIPSETTING( 0x04, "100" ) + PORT_DIPSETTING( 0x08, "200" ) + PORT_DIPSETTING( 0x0c, "300" ) + PORT_DIPNAME( 0x30, 0x30, "Unknown 1-4&5*" ) + PORT_DIPSETTING( 0x00, "3" ) + PORT_DIPSETTING( 0x10, "4" ) + PORT_DIPSETTING( 0x20, "5" ) + PORT_DIPSETTING( 0x30, "6" ) + PORT_DIPNAME( 0x40, 0x40, "Unknown 1-6*" ) + PORT_DIPSETTING( 0x00, "3" ) + PORT_DIPSETTING( 0x40, "5" ) + PORT_DIPNAME( 0x80, 0x80, "Unknown 1-7" ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START /* DSW (inport $13) */ + PORT_DIPNAME( 0x01, 0x01, "Unknown 2-0*" ) + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x02, 0x02, "Second Bonus" ) + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x04, 0x04, "Allow Bets" ) + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x08, 0x08, "Unknown 2-2" ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x18, 0x18, "Unknown 2-3&4*" ) + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x18, "2" ) + PORT_DIPSETTING( 0x10, "4" ) + PORT_DIPSETTING( 0x08, "8" ) + PORT_DIPNAME( 0x20, 0x20, "Unknown 2-5" ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, "Unknown 2-6" ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Unknown 2-7" ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( mjdejavu ) + PORT_START /* P1 IN0 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Payout") PORT_CODE(KEYCODE_7) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN1 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN2 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN3 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P1 IN4 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN0 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN1 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET )PORT_PLAYER(2) PORT_CODE(KEYCODE_4) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN2 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON )PORT_PLAYER(2) + PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN3 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON )PORT_PLAYER(2) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* P2 IN4 */ + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE )PORT_PLAYER(2) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE )PORT_PLAYER(2) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP )PORT_PLAYER(2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP )PORT_PLAYER(2) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG )PORT_PLAYER(2) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL )PORT_PLAYER(2) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START /* IN10 */ + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) /* "Note" ("Paper Money") = 10 Credits */ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SERVICE3 ) /* Memory Reset */ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE2 ) /* Analizer (Statistics) */ + PORT_SERVICE( 0x08, IP_ACTIVE_HIGH ) + PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED ) + + PORT_START // 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 // 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 // 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 // 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 struct AY8910interface ay8910_interface = +{ + royalmah_player_1_port_r, + royalmah_player_2_port_r +}; + +static MACHINE_DRIVER_START( royalmah ) + + /* basic machine hardware */ + MDRV_CPU_ADD_TAG("main", Z80, 3000000) /* 3.00 MHz ? */ + MDRV_CPU_PROGRAM_MAP(royalmah_map,0) + MDRV_CPU_IO_MAP(royalmah_iomap,0) + MDRV_CPU_VBLANK_INT(irq0_line_hold,1) + + MDRV_NVRAM_HANDLER(generic_0fill) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_VIDEO_UPDATE(royalmah) + MDRV_PALETTE_LENGTH(16*2) + MDRV_PALETTE_INIT(royalmah) + + MDRV_SCREEN_ADD("main", 0) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(256, 256) + MDRV_SCREEN_VISIBLE_AREA(0, 255, 0, 255) + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(AY8910, 18432000/12) + MDRV_SOUND_CONFIG(ay8910_interface) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.33) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( dondenmj ) + MDRV_IMPORT_FROM(royalmah) + MDRV_CPU_REPLACE("main", Z80, 8000000/2) /* 4 MHz ? */ + MDRV_CPU_IO_MAP(dondenmj_iomap,0) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( ippatsu ) + MDRV_IMPORT_FROM(dondenmj) + MDRV_CPU_MODIFY("main") + MDRV_CPU_IO_MAP(ippatsu_iomap,0) +MACHINE_DRIVER_END + +static void suzume_irq(void) +{ + if ( suzume_bank & 0x40 ) + cpunum_set_input_line(0, INPUT_LINE_NMI, PULSE_LINE); +} + +static MACHINE_DRIVER_START( suzume ) + MDRV_IMPORT_FROM(dondenmj) + MDRV_CPU_MODIFY("main") + MDRV_CPU_IO_MAP(suzume_iomap,0) + MDRV_CPU_VBLANK_INT(suzume_irq,1) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( tontonb ) + MDRV_IMPORT_FROM(dondenmj) + MDRV_CPU_MODIFY("main") + MDRV_CPU_IO_MAP(tontonb_iomap,0) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( mjdiplob ) + MDRV_IMPORT_FROM(dondenmj) + MDRV_CPU_MODIFY("main") + MDRV_CPU_IO_MAP(mjdiplob_iomap,0) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( majs101b ) + MDRV_IMPORT_FROM(dondenmj) + MDRV_CPU_MODIFY("main") + MDRV_CPU_IO_MAP(majs101b_iomap,0) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( mjapinky ) + MDRV_IMPORT_FROM(dondenmj) + MDRV_CPU_MODIFY("main") + MDRV_CPU_PROGRAM_MAP(mjapinky_map,0) + MDRV_CPU_IO_MAP(mjapinky_iomap,0) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( mjderngr ) + MDRV_IMPORT_FROM(dondenmj) + MDRV_CPU_MODIFY("main") + MDRV_CPU_IO_MAP(mjderngr_iomap,0) + + /* video hardware */ + MDRV_PALETTE_LENGTH(16*32) + MDRV_PALETTE_INIT(mjderngr) +MACHINE_DRIVER_END + +/* It runs in IM 2, thus needs a vector on the data bus */ +static INTERRUPT_GEN( janptr96_interrupt ) +{ + switch(cpu_getiloops()) + { + case 0: cpunum_set_input_line_and_vector(0, 0, HOLD_LINE, 0x80); break; // vblank + case 1: cpunum_set_input_line_and_vector(0, 0, HOLD_LINE, 0x82); break; // rtc + default: cpunum_set_input_line_and_vector(0, 0, HOLD_LINE, 0x84); // demo + } +} + +static MACHINE_DRIVER_START( janptr96 ) + MDRV_IMPORT_FROM(mjderngr) + MDRV_CPU_REPLACE("main",Z80,24000000/4) /* 6 MHz? */ + MDRV_CPU_PROGRAM_MAP(janptr96_map,0) + MDRV_CPU_IO_MAP(janptr96_iomap,0) + MDRV_CPU_VBLANK_INT(janptr96_interrupt,3) /* IM 2 needs a vector on the data bus */ + + MDRV_SCREEN_VISIBLE_AREA(0, 255, 9, 255-8) +MACHINE_DRIVER_END + + +static MACHINE_DRIVER_START( mjifb ) + MDRV_IMPORT_FROM(mjderngr) + MDRV_CPU_REPLACE("main",TMP90841, 8000000) /* ? */ + MDRV_CPU_PROGRAM_MAP(mjifb_map,0) + MDRV_CPU_IO_MAP(mjifb_iomap,0) + MDRV_CPU_VBLANK_INT(irq0_line_hold,1) + + MDRV_SCREEN_VISIBLE_AREA(0, 255, 8, 255-8) +MACHINE_DRIVER_END + + +static MACHINE_DRIVER_START( mjdejavu ) + MDRV_IMPORT_FROM(mjderngr) + MDRV_CPU_REPLACE("main",TMP90841, 8000000) /* ? */ + MDRV_CPU_PROGRAM_MAP(mjdejavu_map,0) + MDRV_CPU_IO_MAP(mjifb_iomap,0) + MDRV_CPU_VBLANK_INT(irq0_line_hold,1) + + MDRV_SCREEN_VISIBLE_AREA(0, 255, 8, 255-8) +MACHINE_DRIVER_END + + +static INTERRUPT_GEN( mjtensin_interrupt ) +{ + switch(cpu_getiloops()) + { + case 0: cpunum_set_input_line(0, INPUT_LINE_IRQ0, HOLD_LINE); break; // vblank + case 1: cpunum_set_input_line(0, INPUT_LINE_IRQ1, HOLD_LINE); break; // rtc + } +} + +static MACHINE_DRIVER_START( mjtensin ) + MDRV_IMPORT_FROM(mjderngr) + MDRV_CPU_REPLACE("main",TMP90841, 12000000) /* ? */ + MDRV_CPU_PROGRAM_MAP(mjtensin_map,0) + MDRV_CPU_IO_MAP(mjtensin_iomap,0) + MDRV_CPU_VBLANK_INT( mjtensin_interrupt,2 ) + + MDRV_SCREEN_VISIBLE_AREA(0, 255, 8, 255-8) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( cafetime ) + MDRV_IMPORT_FROM(mjderngr) + MDRV_CPU_REPLACE("main",TMP90841, 12000000) /* ? */ + MDRV_CPU_PROGRAM_MAP(cafetime_map,0) + MDRV_CPU_IO_MAP(cafetime_iomap,0) + MDRV_CPU_VBLANK_INT(mjtensin_interrupt,2) + + MDRV_SCREEN_VISIBLE_AREA(0, 255, 8, 255-8) +MACHINE_DRIVER_END + +/*************************************************************************** + + Game driver(s) + +***************************************************************************/ + +/*************************************************************************** + +Royal Mahjong +(c)1981 Nichibutsu + +CPU: Z80 +Sound: AY-3-8910 +OSC: 18.432MHz + +***************************************************************************/ + +ROM_START( royalmj ) + ROM_REGION( 0x10000, REGION_CPU1, 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, REGION_PROMS, 0 ) + ROM_LOAD( "18s030n.6k", 0x0000, 0x0020, CRC(d3007282) SHA1(e4d863ab193e49208ed0f59dcddb1da0492314f6) ) +ROM_END + +ROM_START( royalmah ) + ROM_REGION( 0x10000, REGION_CPU1, 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, REGION_PROMS, 0 ) + ROM_LOAD( "f-rom.bpr", 0x0000, 0x0020, CRC(d3007282) SHA1(e4d863ab193e49208ed0f59dcddb1da0492314f6) ) +ROM_END + +ROM_START( openmj ) + ROM_REGION( 0x7000, REGION_CPU1, 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, REGION_PROMS, 0 ) + ROM_LOAD( "82s123.prm", 0x00, 0x20, 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, REGION_CPU1, 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, REGION_PROMS, 0 ) + ROM_LOAD( "n82s123n.c98", 0x0000, 0x0020, CRC(d3007282) SHA1(e4d863ab193e49208ed0f59dcddb1da0492314f6) ) +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, REGION_CPU1, 0 ) + ROM_LOAD( "11", 0x0000, 0x8000, CRC(5f563be7) SHA1(2ce486777bd61a2de789683cd0c8abeefe31775b) ) + ROM_LOAD( "12", 0x8000, 0x4000, CRC(a09a43b0) SHA1(da12e669ccd036da817a69bd549e8668e6a45730) ) + ROM_RELOAD( 0xc000, 0x4000 ) + + ROM_REGION( 0x0020, REGION_PROMS, 0 ) + ROM_LOAD( "82s123an", 0x00, 0x20, CRC(3bde1bbd) SHA1(729498483943f960e38c4ada992b099b698b497a) ) +ROM_END + +ROM_START( suzume ) + ROM_REGION( 0x100000, REGION_CPU1, 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, REGION_PROMS, 0 ) + ROM_LOAD( "ic6k.bin", 0x0000, 0x0020, CRC(97e1defe) SHA1(b5002218b2292f7623dd9a205ce183dedeec03f1) ) +ROM_END + +ROM_START( dondenmj ) + ROM_REGION( 0x90000, REGION_CPU1, 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, REGION_PROMS, 0 ) + ROM_LOAD( "ic6k.bin", 0x0000, 0x0020, CRC(97e1defe) SHA1(b5002218b2292f7623dd9a205ce183dedeec03f1) ) +ROM_END + +ROM_START( mjdiplob ) + ROM_REGION( 0x90000, REGION_CPU1, 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, REGION_PROMS, 0 ) + ROM_LOAD( "ic6k.bin", 0x0000, 0x0020, CRC(c1e427df) SHA1(9a9980d93dff4b87a940398b18277acaf946eeab) ) +ROM_END + +ROM_START( tontonb ) + ROM_REGION( 0x90000, REGION_CPU1, 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, REGION_PROMS, 0 ) + ROM_LOAD( "ic6k.bin", 0x0000, 0x0020, CRC(97e1defe) SHA1(b5002218b2292f7623dd9a205ce183dedeec03f1) ) +ROM_END + +ROM_START( majs101b ) + ROM_REGION( 0x90000, REGION_CPU1, 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, REGION_PROMS, 0 ) + ROM_LOAD( "ic6k.bin", 0x0000, 0x0020, CRC(c1e427df) SHA1(9a9980d93dff4b87a940398b18277acaf946eeab) ) +ROM_END + +ROM_START( mjderngr ) + ROM_REGION( 0xb0000, REGION_CPU1, 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, REGION_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, REGION_CPU1, 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, REGION_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 + +/*************************************************************************** + + Colour proms are TBP28S42's + +***************************************************************************/ + +ROM_START( janptr96 ) + ROM_REGION( 0x210000, REGION_CPU1, 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, REGION_PROMS, 0 ) + ROM_LOAD( "ns503b.3h", 0x000, 0x200, CRC(3b2a6b12) SHA1(ebd2929e6acbde989964bfef602b81f2f2fe04eb) ) + ROM_LOAD( "ns503a.3j", 0x200, 0x200, CRC(fe49b2f0) SHA1(a36ca005380cc92dfe473254c26be2cef2ced9b4) ) +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, REGION_CPU1, 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( 0x400, REGION_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 + +/*************************************************************************** + +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 it's 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, REGION_CPU1, 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, REGION_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, REGION_CPU1, 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, REGION_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 it's 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, REGION_CPU1, 0 ) + ROM_LOAD( "76xx.tmp90841", 0x00000, 0x02000, NO_DUMP ) + ROM_LOAD( "7601", 0x000000, 0x80000, CRC(20c80ad9) SHA1(e45edd101c6e26c0fa3c3f15f4a4152a853e41bd) ) + /* bank switched ROMs follow */ + ROM_RELOAD( 0x010000, 0x80000 ) + ROM_LOAD( "7602", 0x090000, 0x80000, CRC(f472960c) SHA1(cc2feb4374ba94035101114c73e1690cfeac9b91) ) + ROM_LOAD( "7603", 0x110000, 0x80000, CRC(c4293019) SHA1(afd717844e9e681ada14e80cd10dce0ed60d4259) ) + + ROM_REGION( 0x400, REGION_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 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 it's 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( 0xd0000, REGION_CPU1, 0 ) + ROM_LOAD( "50xx.tmp90841", 0x00000, 0x02000, NO_DUMP ) + ROM_LOAD( "5001a.1b", 0x00000, 0x20000, CRC(91859a47) SHA1(3c452405bf28f5e7302eaccdf472e91b64629a67) ) + /* bank switched ROMs follow */ + ROM_RELOAD( 0x10000, 0x20000 ) + ROM_LOAD( "5002.1d", 0x30000, 0x80000, CRC(016c0a32) SHA1(5c5fdd631eacb36a0ee7dba9e070c2d3d3d8fd5b) ) + ROM_LOAD( "5003.1e", 0xb0000, 0x20000, CRC(5323cc85) SHA1(58b75ba560f05a0568024f52ee89f54713219452) ) + + ROM_REGION( 0x400, REGION_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 (Toapan) !?) + +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 it's 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, REGION_CPU1, 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, REGION_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, REGION_CPU1, 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, REGION_PROMS, 0 ) + ROM_LOAD( "janho.color", 0x00, 0x20, NO_DUMP ) +ROM_END + + +static DRIVER_INIT( ippatsu ) { memory_set_bankptr(1, memory_region(REGION_CPU1) + 0x8000 ); } + +static DRIVER_INIT( janptr96 ) +{ + generic_nvram_size = 0x1000 * 9; + generic_nvram = auto_malloc( generic_nvram_size ); + + memory_set_bankptr(3,generic_nvram); +} + + +GAME( 1981, royalmj, 0, royalmah, royalmah, 0, ROT0, "Nichibutsu", "Royal Mahjong (Japan, v1.13)", 0 ) +GAME( 1981?, openmj, royalmj, royalmah, royalmah, 0, ROT0, "Sapporo Mechanic", "Open Mahjong [BET] (Japan)", 0 ) +GAME( 1982, royalmah, royalmj, royalmah, royalmah, 0, ROT0, "bootleg", "Royal Mahjong (Falcon bootleg, v1.01)", 0 ) +GAME( 1983, janyoup2, royalmj, ippatsu, janyoup2, 0, ROT0, "Cosmo Denshi", "Janyou Part II (ver 7.03, July 1 1983)",0 ) +GAME( 1984, janoh, 0, royalmah, royalmah, 0, ROT0, "Toaplan", "Jan Oh", GAME_NOT_WORKING ) +GAME( 1986, dondenmj, 0, dondenmj, majs101b, 0, ROT0, "Dyna Electronics", "Don Den Mahjong [BET] (Japan)", 0 ) +GAME( 1986, ippatsu, 0, ippatsu, ippatsu, ippatsu, ROT0, "Public Software / Paradais", "Ippatsu Gyakuten [BET] (Japan)", 0 ) +GAME( 1986, suzume, 0, suzume, suzume, 0, ROT0, "Dyna Electronics", "Watashiha Suzumechan (Japan)", 0 ) +GAME( 1987, mjdiplob, 0, mjdiplob, mjdiplob, 0, ROT0, "Dynax", "Mahjong Diplomat [BET] (Japan)", 0 ) +GAME( 1987, tontonb, 0, tontonb, tontonb, 0, ROT0, "Dynax", "Tonton [BET] (Japan)", 0 ) +GAME( 1988, majs101b, 0, majs101b, majs101b, 0, ROT0, "Dynax", "Mahjong Studio 101 [BET] (Japan)", 0 ) +GAME( 1988, mjapinky, 0, mjapinky, mjapinky, 0, ROT0, "Dynax", "Almond Pinky [BET] (Japan)", 0 ) +GAME( 1989, mjdejavu, 0, mjdejavu, mjdejavu, 0, ROT0, "Dynax", "Mahjong Shinkirou Deja Vu (Japan)", 0 ) +GAME( 1989, mjderngr, 0, mjderngr, majs101b, 0, ROT0, "Dynax", "Mahjong Derringer (Japan)", 0 ) +GAME( 1990, mjifb, 0, mjifb, mjifb, 0, ROT0, "Dynax", "Mahjong If...? [BET]", 0 ) +GAME( 1991, mjvegas, 0, mjifb, mjifb, 0, ROT0, "Dynax", "Mahjong Vegas (Japan)", GAME_NOT_WORKING ) +GAME( 1992, cafetime, 0, cafetime, cafetime, 0, ROT0, "Dynax", "Mahjong Cafe Time", 0 ) +GAME( 1993, cafedoll, 0, mjifb, mjifb, 0, ROT0, "Dynax", "Mahjong Cafe Doll (Japan)", GAME_NOT_WORKING ) +GAME( 1995, mjtensin, 0, mjtensin, mjtensin, 0, ROT0, "Dynax", "Mahjong Tensinhai (Japan)", GAME_NOT_WORKING ) +GAME( 1996, janptr96, 0, janptr96, janptr96, janptr96, ROT0, "Dynax", "Janputer '96 (Japan)", 0 ) |