summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Luca Elia <lucaelia@mamedev.org>2009-03-23 21:26:46 +0000
committer Luca Elia <lucaelia@mamedev.org>2009-03-23 21:26:46 +0000
commitc5da27ead915974cd757933097a218730eddff21 (patch)
tree302bfb344d8db540bc6dfd285f9c755f2cb05064
parent818d24a1d207a78f2147e75b1a8d1772a1d7a9b9 (diff)
Fixed pending IRQs handling in the TLCS-90 CPU core [Luca Elia]
New games added or promoted from NOT_WORKING status --------------------------------------------------- Mahjong Vegas (unprotected set) [Luca Elia, Uki]
-rw-r--r--src/emu/cpu/tlcs90/tlcs90.c5
-rw-r--r--src/mame/drivers/royalmah.c302
-rw-r--r--src/mame/mamedriv.c1
3 files changed, 306 insertions, 2 deletions
diff --git a/src/emu/cpu/tlcs90/tlcs90.c b/src/emu/cpu/tlcs90/tlcs90.c
index 70758e7997a..a83d16b7b57 100644
--- a/src/emu/cpu/tlcs90/tlcs90.c
+++ b/src/emu/cpu/tlcs90/tlcs90.c
@@ -1316,8 +1316,13 @@ static void check_interrupts(t90_Regs *cpustate)
return;
for (irq = INT0; irq < INTMAX; irq++)
+ {
if ( cpustate->irq_state & cpustate->irq_mask & (1 << irq) )
+ {
take_interrupt( cpustate, irq );
+ return;
+ }
+ }
}
static void set_irq_line(t90_Regs *cpustate, int irq, int state)
diff --git a/src/mame/drivers/royalmah.c b/src/mame/drivers/royalmah.c
index 241c2119448..932e27cc1a0 100644
--- a/src/mame/drivers/royalmah.c
+++ b/src/mame/drivers/royalmah.c
@@ -28,7 +28,7 @@ Year + Game Board(s) CPU Company Notes
89 Mahjong Shinkirou D210301BL2 + FRM-00? TLCS-90 Dynax
89 Mahjong Derringer D2203018L Z80 Dynax Larger palette
90 Mahjong If..? D2909278L TLCS-90 Dynax Larger palette
-91 Mahjong Vegas D5011308L1 + FRM-00 TLCS-90
+91 Mahjong Vegas D5011308L1 + FRM-00 TLCS-90 Dynax Undumped internal rom (mjvegas set)
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
@@ -1059,6 +1059,140 @@ static ADDRESS_MAP_START( cafetime_iomap, ADDRESS_SPACE_IO, 8 )
ADDRESS_MAP_END
+/****************************************************************************
+ Mahjong Vegas
+****************************************************************************/
+
+static WRITE8_HANDLER( mjvegasa_p4_w )
+{
+ rombank = (rombank & 0xf8) | ((data & 0x0e) >> 1);
+}
+static WRITE8_HANDLER( mjvegasa_p3_w )
+{
+ rombank = (rombank & 0xf7) | ((data & 0x04) << 1);
+}
+static WRITE8_HANDLER( mjvegasa_rombank_w )
+{
+ rombank = (rombank & 0x0f) | ((data & 0x0f) << 4);
+}
+
+static READ8_HANDLER( mjvegasa_rom_io_r )
+{
+ if ((rombank & 0x70) != 0x70)
+ return memory_region(space->machine, "maincpu")[0x10000 + rombank * 0x8000 + offset];
+
+ offset += 0x8000;
+
+ switch(offset)
+ {
+ case 0x8000:
+ case 0x8001:
+ case 0x8002:
+ case 0x8003:
+ case 0x8004:
+ case 0x8005:
+ case 0x8006:
+ case 0x8007:
+ case 0x8008:
+ case 0x8009:
+ case 0x800a:
+ case 0x800b:
+ case 0x800c:
+ case 0x800d:
+ case 0x800e:
+ case 0x800f:
+ {
+ const device_config *rtc = devtag_get_device(space->machine, "rtc");
+ return msm6242_r(rtc, offset-0x8000);
+ }
+ }
+ logerror("%04X: unmapped IO read at %04X\n", cpu_get_pc(space->cpu), offset);
+ return 0xff;
+}
+
+static WRITE8_HANDLER( mjvegasa_rom_io_w )
+{
+ if ((rombank & 0x70) != 0x70)
+ {
+ videoram[offset] = data;
+ return;
+ }
+
+ offset += 0x8000;
+
+ switch(offset)
+ {
+ case 0x8000:
+ case 0x8001:
+ case 0x8002:
+ case 0x8003:
+ case 0x8004:
+ case 0x8005:
+ case 0x8006:
+ case 0x8007:
+ case 0x8008:
+ case 0x8009:
+ case 0x800a:
+ case 0x800b:
+ case 0x800c:
+ case 0x800d:
+ case 0x800e:
+ case 0x800f:
+ {
+ const device_config *rtc = devtag_get_device(space->machine, "rtc");
+ msm6242_w(rtc, offset-0x8000, data);
+ return;
+ }
+ }
+ logerror("%04X: unmapped IO write at %04X = %02X\n", cpu_get_pc(space->cpu), offset,data);
+}
+
+static WRITE8_HANDLER( mjvegasa_coin_counter_w )
+{
+ flip_screen_set(space->machine, data & 4);
+ coin_counter_w(0,data & 2); // in
+ coin_counter_w(1,data & 1); // out
+}
+
+// hopper?
+static WRITE8_HANDLER( mjvegasa_12400_w )
+{
+ // bits 0 & 1
+// popmessage("UNK: %02x",data);
+}
+static READ8_HANDLER( mjvegasa_12500_r )
+{
+ // bits 0 & 2
+ return 0xff;
+}
+
+static ADDRESS_MAP_START( mjvegasa_map, ADDRESS_SPACE_PROGRAM, 8 )
+
+ AM_RANGE( 0x00000, 0x05fff ) AM_ROM
+ AM_RANGE( 0x06000, 0x07fff ) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size)
+ AM_RANGE( 0x08000, 0x0ffff ) AM_READWRITE(mjvegasa_rom_io_r, mjvegasa_rom_io_w) AM_BASE(&videoram)
+
+ AM_RANGE( 0x10001, 0x10001 ) AM_DEVREAD( "ay", ay8910_r )
+ AM_RANGE( 0x10002, 0x10003 ) AM_DEVWRITE( "ay", ay8910_data_address_w )
+ AM_RANGE( 0x10010, 0x10010 ) AM_WRITE( mjvegasa_coin_counter_w )
+ AM_RANGE( 0x10011, 0x10011 ) AM_READ_PORT("SYSTEM") AM_WRITE( input_port_select_w )
+ AM_RANGE( 0x10013, 0x10013 ) AM_WRITE( input_port_select_w )
+
+ AM_RANGE( 0x12000, 0x12000 ) AM_WRITE( mjvegasa_rombank_w )
+ AM_RANGE( 0x12100, 0x12100 ) AM_READ( cafetime_dsw_r )
+ AM_RANGE( 0x12200, 0x12200 ) AM_WRITE( cafetime_dsw_w )
+ AM_RANGE( 0x12300, 0x12300 ) AM_WRITE( mjderngr_palbank_w )
+ AM_RANGE( 0x12400, 0x12400 ) AM_WRITE( mjvegasa_12400_w )
+ AM_RANGE( 0x12500, 0x12500 ) AM_READ ( mjvegasa_12500_r )
+
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( mjvegasa_iomap, ADDRESS_SPACE_IO, 8 )
+ AM_RANGE( T90_P3, T90_P3 ) AM_READWRITE( mjtensin_p3_r, mjvegasa_p3_w )
+ AM_RANGE( T90_P4, T90_P4 ) AM_WRITE( mjvegasa_p4_w )
+ADDRESS_MAP_END
+
+
static INPUT_PORTS_START( mjctrl1 )
PORT_START("KEY0") /* P1 IN0 */
@@ -2816,6 +2950,141 @@ static INPUT_PORTS_START( jansou )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
+static INPUT_PORTS_START( mjvegasa )
+ PORT_INCLUDE( mjctrl2 )
+
+ PORT_START("DSW1") // 6810
+ 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, "Odds Rate" )
+ PORT_DIPSETTING( 0x30, "32 24 16 12 8 4 2 1" )
+ PORT_DIPSETTING( 0x00, "50 30 15 8 5 3 2 1" )
+ PORT_DIPSETTING( 0x10, "100 50 25 10 5 3 2 1" )
+ PORT_DIPSETTING( 0x20, "200 100 50 10 5 3 2 1" )
+ PORT_DIPNAME( 0xc0, 0xc0, "Max Bet" )
+ PORT_DIPSETTING( 0xc0, "1" )
+ PORT_DIPSETTING( 0x80, "5" )
+ PORT_DIPSETTING( 0x40, "10" )
+ PORT_DIPSETTING( 0x00, "20" )
+
+ PORT_START("DSW2") // 6811
+ PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) )
+ PORT_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, "YAKUMAN Times" )
+ PORT_DIPSETTING( 0x0c, "1" )
+ PORT_DIPSETTING( 0x08, "2" )
+ PORT_DIPSETTING( 0x04, "3" )
+ PORT_DIPSETTING( 0x00, "5" )
+ PORT_DIPNAME( 0x70, 0x70, "YAKUMAN Bonus" )
+ PORT_DIPSETTING( 0x70, "Cut" )
+ PORT_DIPSETTING( 0x60, "300" )
+ PORT_DIPSETTING( 0x50, "500" )
+ PORT_DIPSETTING( 0x40, "700" )
+ PORT_DIPSETTING( 0x30, "1000" )
+ PORT_DIPSETTING( 0x20, "1000?" )
+ PORT_DIPSETTING( 0x10, "1000?" )
+ PORT_DIPSETTING( 0x00, "1000?" )
+ PORT_DIPNAME( 0x80, 0x80, "Unknown 2-7" )
+ PORT_DIPSETTING( 0x00, "1" )
+ PORT_DIPSETTING( 0x80, "2" )
+
+ PORT_START("DSW3") // 6812
+ 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, "3 BAI In YAKUMAN Bonus Chance" )
+ 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("DSW4") // 6813
+ 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, 0x00, "Girls" )
+ 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, 0x00, DEF_STR( Demo_Sounds ) )
+ 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, "Unknown 4-7" )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+
+ PORT_START("DSWTOP") // 6814
+ 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( 0x10, 0x10, "Flip-Flop Key" )
+ PORT_DIPSETTING( 0x10, "Flip-Flop" )
+ PORT_DIPSETTING( 0x00, "Start" )
+ PORT_DIPNAME( 0x20, 0x20, "Don Den Times" )
+ PORT_DIPSETTING( 0x20, "5" )
+ PORT_DIPSETTING( 0x00, "8" )
+ PORT_DIPNAME( 0x40, 0x40, "Unknown 4-8" )
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, "Debug Mode" ) // e.g. press start in bet screen
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+INPUT_PORTS_END
+
static const ay8910_interface ay8910_config =
{
@@ -3048,6 +3317,21 @@ static MACHINE_DRIVER_START( cafetime )
MDRV_MSM6242_ADD("rtc")
MACHINE_DRIVER_END
+static MACHINE_DRIVER_START( mjvegasa )
+ MDRV_IMPORT_FROM(mjderngr)
+ MDRV_CPU_REPLACE("maincpu",TMP90841, XTAL_8MHz) /* ? */
+ MDRV_CPU_PROGRAM_MAP(mjvegasa_map,0)
+ MDRV_CPU_IO_MAP(mjvegasa_iomap,0)
+ MDRV_CPU_VBLANK_INT_HACK(mjtensin_interrupt,2)
+
+ MDRV_SCREEN_MODIFY("screen")
+ MDRV_SCREEN_VISIBLE_AREA(0, 255, 8, 255-8)
+
+ /* devices */
+ MDRV_MSM6242_ADD("rtc")
+MACHINE_DRIVER_END
+
+
/***************************************************************************
Game driver(s)
@@ -3818,6 +4102,19 @@ ROM_START( mjvegas )
ROM_LOAD( "d50-1_82s147.4g", 0x200, 0x200, CRC(50c0d0ec) SHA1(222899456cd2e15391d8d0f771bbd5e5333d6ba3) )
ROM_END
+ROM_START( mjvegasa )
+ ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASEFF ) // 100 banks
+ ROM_LOAD( "5040.1b", 0x00000, 0x20000, CRC(c4f03128) SHA1(758567f74de333207dfe6c1cb72b2afffb0c8f4b) )
+ /* bank switched ROMs follow */
+ ROM_RELOAD( 0x070000, 0x20000 ) // 0c-0f
+ ROM_LOAD( "5002.1d", 0x210000, 0x80000, CRC(016c0a32) SHA1(5c5fdd631eacb36a0ee7dba9e070c2d3d3d8fd5b) ) // 40-4f
+ ROM_LOAD( "5003.1e", 0x2f0000, 0x20000, CRC(5323cc85) SHA1(58b75ba560f05a0568024f52ee89f54713219452) ) // 5c-5f
+
+ ROM_REGION( 0x400, "proms", 0 )
+ ROM_LOAD( "d50-2_82s147.4h", 0x000, 0x200, CRC(3c960ea2) SHA1(65e05e3f129e9e6fcb14b7d44a75a76919c54d52) )
+ ROM_LOAD( "d50-1_82s147.4g", 0x200, 0x200, CRC(50c0d0ec) SHA1(222899456cd2e15391d8d0f771bbd5e5333d6ba3) )
+ROM_END
+
/***************************************************************************
Mahjong Shinkirou Deja Vu (+ some roms from Jan Oh (Toapan) !?)
@@ -4338,7 +4635,8 @@ GAME( 1989, daisyari, 0, daisyari, daisyari, 0, ROT0, "Best Sys
GAME( 1990, mjifb, 0, mjifb, mjifb, 0, ROT0, "Dynax", "Mahjong If...? [BET]", 0 )
GAME( 1990, mjifb2, mjifb, mjifb, mjifb, 0, ROT0, "Dynax", "Mahjong If...? [BET](2921)", 0 )
GAME( 1990, mjifb3, mjifb, mjifb, mjifb, 0, ROT0, "Dynax", "Mahjong If...? [BET](2931)", 0 )
-GAME( 1991, mjvegas, 0, mjifb, mjifb, 0, ROT0, "Dynax", "Mahjong Vegas (Japan)", GAME_NOT_WORKING )
+GAME( 1991, mjvegasa, 0, mjvegasa, mjvegasa, 0, ROT0, "Dynax", "Mahjong Vegas (Japan, unprotected)", 0 )
+GAME( 1991, mjvegas, mjvegasa, mjvegasa, mjvegasa, 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 )
diff --git a/src/mame/mamedriv.c b/src/mame/mamedriv.c
index f0f69f0b29b..097f5d8ab86 100644
--- a/src/mame/mamedriv.c
+++ b/src/mame/mamedriv.c
@@ -7719,6 +7719,7 @@ Other Sun games
DRIVER( mjifb2 ) /* "29" 1990 Dynax */
DRIVER( mjifb3 ) /* "29" 1990 Dynax */
DRIVER( mjvegas ) /* 1991 Dynax */
+ DRIVER( mjvegasa ) /* 1991 Dynax */
DRIVER( cafetime ) /* 1992 Dynax */
DRIVER( cafedoll ) /* 1993 Dynax */
DRIVER( janptr96 ) /* 1996 Dynax */