mirror of
https://github.com/holub/mame
synced 2025-05-23 22:20:01 +03:00
Improved mgcs. It now runs through attract mode.
[Luca Elia] It still locks up as soon as one coins up though, due to the unemulated IGS029 protection.
This commit is contained in:
parent
a689b835b7
commit
a5d9d44c00
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -1572,7 +1572,7 @@ src/mame/drivers/hyhoo.c svneol=native#text/plain
|
||||
src/mame/drivers/hyperspt.c svneol=native#text/plain
|
||||
src/mame/drivers/hyprduel.c svneol=native#text/plain
|
||||
src/mame/drivers/igs009.c svneol=native#text/plain
|
||||
src/mame/drivers/igs_180.c svneol=native#text/plain
|
||||
src/mame/drivers/igs017.c svneol=native#text/plain
|
||||
src/mame/drivers/igs_blit.c svneol=native#text/plain
|
||||
src/mame/drivers/igs_m027.c svneol=native#text/plain
|
||||
src/mame/drivers/igs_m68.c svneol=native#text/plain
|
||||
|
@ -1,13 +1,18 @@
|
||||
/***************************************************************************
|
||||
/************************************************************************************************************
|
||||
|
||||
-= IGS017 Based Hardware =-
|
||||
|
||||
driver by Pierpaolo Prazzoli, Luca Elia (l.elia@tin.it)
|
||||
|
||||
CPU: Z180 (HD64180)
|
||||
GFX: IGS017 (2 tilemaps, variable size sprites, protection)
|
||||
SOUND: M6295, YM2413
|
||||
OTHER: IGS025
|
||||
IGS017: 2 tilemaps, variable size sprites, protection.
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
Year + Game PCB CPU Sound Custom Other
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
96 Shu Zi Le Yuan N0-0131-4 HD64180 M6295 YM2413 IGS017 8255 Battery
|
||||
97 Mahjong Tian Jiang Shen Bing N0-0157-2 HD64180 M6295 YM2413 IGS017 IGS025 Battery
|
||||
98 Mahjong Man Guan Cai Shen N0-0192-1 M68000 M6295 IGS017 IGS025 IGS029 Battery
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
|
||||
To Do:
|
||||
|
||||
@ -20,10 +25,11 @@ Notes:
|
||||
|
||||
- iqblocka: keep start or test pressed during boot to enter test mode A or B.
|
||||
|
||||
***************************************************************************/
|
||||
************************************************************************************************************/
|
||||
|
||||
#include "driver.h"
|
||||
#include "deprecat.h"
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "cpu/z180/z180.h"
|
||||
#include "machine/8255ppi.h"
|
||||
#include "sound/2413intf.h"
|
||||
@ -56,13 +62,47 @@ static WRITE8_HANDLER( fg_w )
|
||||
fg_videoram[offset] = data;
|
||||
tilemap_mark_tile_dirty(fg_tilemap,offset/4);
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER( bg_w )
|
||||
{
|
||||
bg_videoram[offset] = data;
|
||||
tilemap_mark_tile_dirty(bg_tilemap,offset/4);
|
||||
}
|
||||
|
||||
static VIDEO_START(igs_180)
|
||||
// 16-bit handlers for an 8-bit chip
|
||||
|
||||
static READ16_HANDLER( fg_lsb_r )
|
||||
{
|
||||
return fg_videoram[offset];
|
||||
}
|
||||
static WRITE16_HANDLER( fg_lsb_w )
|
||||
{
|
||||
if (ACCESSING_BITS_0_7)
|
||||
fg_w(space,offset,data);
|
||||
}
|
||||
|
||||
static READ16_HANDLER( bg_lsb_r )
|
||||
{
|
||||
return bg_videoram[offset];
|
||||
}
|
||||
static WRITE16_HANDLER( bg_lsb_w )
|
||||
{
|
||||
if (ACCESSING_BITS_0_7)
|
||||
bg_w(space,offset,data);
|
||||
}
|
||||
|
||||
static READ16_HANDLER( spriteram_lsb_r )
|
||||
{
|
||||
return spriteram[offset];
|
||||
}
|
||||
static WRITE16_HANDLER( spriteram_lsb_w )
|
||||
{
|
||||
if (ACCESSING_BITS_0_7)
|
||||
spriteram[offset] = data;
|
||||
}
|
||||
|
||||
|
||||
static VIDEO_START( igs017 )
|
||||
{
|
||||
fg_tilemap = tilemap_create(machine, get_fg_tile_info,tilemap_scan_rows,8,8,64,32);
|
||||
bg_tilemap = tilemap_create(machine, get_bg_tile_info,tilemap_scan_rows,8,8,64,32);
|
||||
@ -79,8 +119,8 @@ static int sprites_gfx_size;
|
||||
// This routine expands each word into three bytes.
|
||||
static void expand_sprites(running_machine *machine)
|
||||
{
|
||||
UINT8 *rom = memory_region(machine, "gfx1");
|
||||
int size = memory_region_length(machine, "gfx1");
|
||||
UINT8 *rom = memory_region(machine, "sprites");
|
||||
int size = memory_region_length(machine, "sprites");
|
||||
int i;
|
||||
|
||||
sprites_gfx_size = size / 2 * 3;
|
||||
@ -122,7 +162,8 @@ static void expand_sprites(running_machine *machine)
|
||||
|
||||
7.b 765- ---- Color
|
||||
---4 ---- Flip X
|
||||
---- 3210 Code (high)
|
||||
---- 3---
|
||||
---- -210 Code (high)
|
||||
|
||||
Code = ROM Address / 2 = Pixel / 3
|
||||
|
||||
@ -169,7 +210,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan
|
||||
|
||||
y = s[0] + (s[1] << 8);
|
||||
x = s[2] + (s[3] << 8);
|
||||
addr = (s[4] >> 6) | (s[5] << 2) | (s[6] << 10) | ((s[7] & 0x03) << 18);
|
||||
addr = (s[4] >> 6) | (s[5] << 2) | (s[6] << 10) | ((s[7] & 0x07) << 18);
|
||||
addr *= 3;
|
||||
|
||||
flipx = s[7] & 0x10;
|
||||
@ -231,7 +272,7 @@ static int debug_viewer(running_machine *machine, bitmap_t *bitmap,const rectang
|
||||
return 0;
|
||||
}
|
||||
|
||||
static VIDEO_UPDATE(igs_180)
|
||||
static VIDEO_UPDATE( igs017 )
|
||||
{
|
||||
int layers_ctrl = -1;
|
||||
|
||||
@ -363,8 +404,8 @@ static DRIVER_INIT( iqblockf )
|
||||
|
||||
static void tjsb_decrypt_sprites(running_machine *machine)
|
||||
{
|
||||
int length = memory_region_length(machine, "gfx1");
|
||||
UINT8 *rom = memory_region(machine, "gfx1");
|
||||
int length = memory_region_length(machine, "sprites");
|
||||
UINT8 *rom = memory_region(machine, "sprites");
|
||||
UINT8 *tmp = auto_malloc(length);
|
||||
int i;
|
||||
|
||||
@ -406,11 +447,126 @@ static DRIVER_INIT( tjsb )
|
||||
expand_sprites(machine);
|
||||
}
|
||||
|
||||
// mgcs
|
||||
|
||||
static void mgcs_decrypt_program_rom(running_machine *machine)
|
||||
{
|
||||
int i;
|
||||
UINT16 *src = (UINT16 *)memory_region(machine, "main");
|
||||
|
||||
int rom_size = 0x80000;
|
||||
|
||||
for (i=0; i<rom_size/2; i++)
|
||||
{
|
||||
UINT16 x = src[i];
|
||||
|
||||
/* bit 0 xor layer */
|
||||
|
||||
if( i & 0x20/2 )
|
||||
{
|
||||
if( i & 0x02/2 )
|
||||
{
|
||||
x ^= 0x0001;
|
||||
}
|
||||
}
|
||||
|
||||
if( !(i & 0x4000/2) )
|
||||
{
|
||||
if( !(i & 0x300/2) )
|
||||
{
|
||||
x ^= 0x0001;
|
||||
}
|
||||
}
|
||||
|
||||
/* bit 8 xor layer */
|
||||
|
||||
if( (i & 0x2000/2) || !(i & 0x80/2) )
|
||||
{
|
||||
if( i & 0x100/2 )
|
||||
{
|
||||
if( !(i & 0x20/2) || (i & 0x400/2) )
|
||||
{
|
||||
x ^= 0x0100;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
x ^= 0x0100;
|
||||
}
|
||||
|
||||
src[i] = x;
|
||||
}
|
||||
}
|
||||
|
||||
static void mgcs_decrypt_tiles(running_machine *machine)
|
||||
{
|
||||
int length = memory_region_length(machine, "tilemaps");
|
||||
UINT8 *rom = memory_region(machine, "tilemaps");
|
||||
UINT8 *tmp = malloc_or_die(length);
|
||||
int i;
|
||||
|
||||
memcpy(tmp,rom,length);
|
||||
for (i = 0;i < length;i++)
|
||||
{
|
||||
int addr = (i & ~0xffff) | BITSWAP16(i,15,14,13,12,11,10,6,7,8,9,5,4,3,2,1,0);
|
||||
rom[i] = tmp[addr];
|
||||
}
|
||||
|
||||
free(tmp);
|
||||
}
|
||||
|
||||
static void mgcs_flip_sprites(running_machine *machine)
|
||||
{
|
||||
int length = memory_region_length(machine, "sprites");
|
||||
UINT8 *rom = memory_region(machine, "sprites");
|
||||
int i;
|
||||
|
||||
for (i = 0;i < length;i+=2)
|
||||
{
|
||||
UINT16 pixels = (rom[i+1] << 8) | rom[i+0];
|
||||
|
||||
// flip bits
|
||||
pixels = BITSWAP16(pixels,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
|
||||
|
||||
// flip pixels
|
||||
pixels = BITSWAP16(pixels,15, 0,1,2,3,4, 5,6,7,8,9, 10,11,12,13,14);
|
||||
|
||||
rom[i+0] = pixels;
|
||||
rom[i+1] = pixels >> 8;
|
||||
}
|
||||
}
|
||||
|
||||
static void mgcs_patch_rom(running_machine *machine)
|
||||
{
|
||||
UINT16 *rom = (UINT16 *)memory_region(machine, "main");
|
||||
|
||||
rom[0x4e036/2] = 0x6006;
|
||||
|
||||
// IGS029 reads the dips?
|
||||
rom[0x4e00e/2] = 0x4e75;
|
||||
|
||||
rom[0x4dfce/2] = 0x6010; // 04DFCE: 6610 bne $4dfe0
|
||||
rom[0x20666/2] = 0x601e; // 020666: 671E beq $20686 (rom check)
|
||||
}
|
||||
|
||||
static DRIVER_INIT( mgcs )
|
||||
{
|
||||
mgcs_decrypt_program_rom(machine);
|
||||
mgcs_patch_rom(machine);
|
||||
|
||||
mgcs_decrypt_tiles(machine);
|
||||
mgcs_flip_sprites(machine);
|
||||
|
||||
expand_sprites(machine);
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
Memory Maps
|
||||
***************************************************************************/
|
||||
|
||||
static ADDRESS_MAP_START( igs_180_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
static ADDRESS_MAP_START( iqblocka_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE( 0x00000, 0x0dfff ) AM_ROM
|
||||
AM_RANGE( 0x0e000, 0x0efff ) AM_RAM
|
||||
AM_RANGE( 0x0f000, 0x0ffff ) AM_RAM
|
||||
@ -477,7 +633,7 @@ static READ8_HANDLER( input_r )
|
||||
}
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( igs_180_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
static ADDRESS_MAP_START( iqblocka_io, ADDRESS_SPACE_IO, 8 )
|
||||
AM_RANGE( 0x0000, 0x003f ) AM_RAM // internal regs
|
||||
|
||||
AM_RANGE( 0x1000, 0x17ff ) AM_RAM AM_BASE( &spriteram )
|
||||
@ -491,8 +647,8 @@ static ADDRESS_MAP_START( igs_180_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
AM_RANGE( 0x2014, 0x2014 ) AM_WRITE( nmi_enable_w )
|
||||
AM_RANGE( 0x2015, 0x2015 ) AM_WRITE( irq_enable_w )
|
||||
|
||||
AM_RANGE( 0x4000, 0x5fff ) AM_READWRITE( SMH_RAM, fg_w ) AM_BASE( &fg_videoram )
|
||||
AM_RANGE( 0x6000, 0x7fff ) AM_READWRITE( SMH_RAM, bg_w ) AM_BASE( &bg_videoram )
|
||||
AM_RANGE( 0x4000, 0x5fff ) AM_RAM_WRITE( fg_w ) AM_BASE( &fg_videoram )
|
||||
AM_RANGE( 0x6000, 0x7fff ) AM_RAM_WRITE( bg_w ) AM_BASE( &bg_videoram )
|
||||
|
||||
AM_RANGE( 0x8000, 0x8000 ) AM_WRITE( input_select_w )
|
||||
AM_RANGE( 0x8001, 0x8001 ) AM_READ ( input_r )
|
||||
@ -506,6 +662,129 @@ static ADDRESS_MAP_START( igs_180_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
// mgcs
|
||||
|
||||
static UINT16 igs_magic[2];
|
||||
static UINT8 scramble_data;
|
||||
|
||||
static WRITE16_HANDLER( mgcs_magic_w )
|
||||
{
|
||||
COMBINE_DATA(&igs_magic[offset]);
|
||||
|
||||
if (offset == 0)
|
||||
return;
|
||||
|
||||
switch(igs_magic[0])
|
||||
{
|
||||
case 0x00:
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
input_select = data & 0xff;
|
||||
}
|
||||
|
||||
if ( input_select & ~0xfc )
|
||||
logerror("%06x: warning, unknown bits written in input_select = %02x\n", cpu_get_pc(space->cpu), input_select);
|
||||
break;
|
||||
|
||||
case 0x01:
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
scramble_data = data & 0xff;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
logerror("%06x: warning, writing to igs_magic %02x = %02x\n", cpu_get_pc(space->cpu), igs_magic[0], data);
|
||||
}
|
||||
}
|
||||
|
||||
static READ16_HANDLER( mgcs_magic_r )
|
||||
{
|
||||
switch(igs_magic[0])
|
||||
{
|
||||
case 0x01:
|
||||
return BITSWAP8(scramble_data, 4,5,6,7, 0,1,2,3);
|
||||
|
||||
default:
|
||||
logerror("%06x: warning, reading with igs_magic = %02x\n", cpu_get_pc(space->cpu), igs_magic[0]);
|
||||
break;
|
||||
}
|
||||
|
||||
return 0xffff;
|
||||
}
|
||||
|
||||
static READ8_DEVICE_HANDLER( mgcs_keys_r )
|
||||
{
|
||||
if (~input_select & 0x08) return input_port_read(device->machine, "KEY0");
|
||||
if (~input_select & 0x10) return input_port_read(device->machine, "KEY1");
|
||||
if (~input_select & 0x20) return input_port_read(device->machine, "KEY2");
|
||||
if (~input_select & 0x40) return input_port_read(device->machine, "KEY3");
|
||||
if (~input_select & 0x80) return input_port_read(device->machine, "KEY4");
|
||||
|
||||
logerror("%s: warning, reading key with input_select = %02x\n", cpuexec_describe_context(device->machine), input_select);
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
static int irq1_enable;
|
||||
static WRITE16_HANDLER( irq1_enable_w )
|
||||
{
|
||||
if (ACCESSING_BITS_0_7)
|
||||
irq1_enable = data & 1;
|
||||
|
||||
if (data != 0 && data != 0xff)
|
||||
logerror("PC %06X: irq1_enable = %04x\n",cpu_get_pc(space->cpu),data);
|
||||
}
|
||||
|
||||
static int irq2_enable;
|
||||
static WRITE16_HANDLER( irq2_enable_w )
|
||||
{
|
||||
if (ACCESSING_BITS_0_7)
|
||||
irq2_enable = data & 1;
|
||||
|
||||
if (data != 0 && data != 0xff)
|
||||
logerror("PC %06X: irq2_enable = %04x\n",cpu_get_pc(space->cpu),data);
|
||||
}
|
||||
|
||||
static WRITE16_HANDLER( mgcs_paletteram_xRRRRRGGGGGBBBBB_w )
|
||||
{
|
||||
int rgb;
|
||||
|
||||
COMBINE_DATA(&paletteram16[offset]);
|
||||
|
||||
rgb = ((paletteram16[offset/2*2+0] & 0xff) << 8) | (paletteram16[offset/2*2+1] & 0xff);
|
||||
|
||||
// bitswap
|
||||
rgb = BITSWAP16(rgb,7,8,9,2,14,3,13,15,12,11,10,0,1,4,5,6);
|
||||
|
||||
palette_set_color_rgb(space->machine, offset/2, pal5bit(rgb >> 0), pal5bit(rgb >> 5), pal5bit(rgb >> 10));
|
||||
}
|
||||
|
||||
static READ16_DEVICE_HANDLER ( mgcs_ppi8255_r ) { return ppi8255_r(device, offset); }
|
||||
static WRITE16_DEVICE_HANDLER( mgcs_ppi8255_w ) { if (ACCESSING_BITS_0_7) ppi8255_w(device, offset, data); }
|
||||
|
||||
static ADDRESS_MAP_START( mgcs, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE( 0x000000, 0x07ffff ) AM_ROM
|
||||
AM_RANGE( 0x300000, 0x303fff ) AM_RAM
|
||||
|
||||
AM_RANGE( 0x49c000, 0x49c003 ) AM_WRITE( mgcs_magic_w )
|
||||
AM_RANGE( 0x49c002, 0x49c003 ) AM_READ ( mgcs_magic_r )
|
||||
|
||||
AM_RANGE( 0xa02000, 0xa02fff ) AM_READWRITE( spriteram_lsb_r, spriteram_lsb_w ) AM_BASE( (UINT16**)&spriteram )
|
||||
AM_RANGE( 0xa03000, 0xa037ff ) AM_RAM_WRITE( mgcs_paletteram_xRRRRRGGGGGBBBBB_w ) AM_BASE( &paletteram16 )
|
||||
|
||||
AM_RANGE( 0xa04020, 0xa04027 ) AM_DEVREADWRITE(PPI8255, "ppi8255", mgcs_ppi8255_r, mgcs_ppi8255_w)
|
||||
|
||||
AM_RANGE( 0xa04028, 0xa04029 ) AM_WRITE( irq2_enable_w )
|
||||
AM_RANGE( 0xa0402a, 0xa0402b ) AM_WRITE( irq1_enable_w )
|
||||
|
||||
AM_RANGE( 0xa08000, 0xa0bfff ) AM_READWRITE( fg_lsb_r, fg_lsb_w ) AM_BASE( (UINT16**)&fg_videoram )
|
||||
AM_RANGE( 0xa0c000, 0xa0ffff ) AM_READWRITE( bg_lsb_r, bg_lsb_w ) AM_BASE( (UINT16**)&bg_videoram )
|
||||
|
||||
// oki banking?
|
||||
AM_RANGE( 0xa12000, 0xa12001 ) AM_READWRITE( okim6295_status_0_lsb_r, okim6295_data_0_lsb_w )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
Input Ports
|
||||
***************************************************************************/
|
||||
@ -628,6 +907,120 @@ static INPUT_PORTS_START( iqblocka )
|
||||
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( mgcs )
|
||||
|
||||
// DSWs don't work: they are read through a protection device (IGS029? see code at 1CF16)
|
||||
|
||||
PORT_START("DSW1")
|
||||
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) )
|
||||
PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) )
|
||||
PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
|
||||
PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( 1C_4C ) )
|
||||
PORT_DIPNAME( 0x0c, 0x0c, "Credits Per Note" )
|
||||
PORT_DIPSETTING( 0x0c, "10" )
|
||||
PORT_DIPSETTING( 0x08, "20" )
|
||||
PORT_DIPSETTING( 0x04, "50" )
|
||||
PORT_DIPSETTING( 0x00, "100" )
|
||||
PORT_DIPNAME( 0x10, 0x10, "Max Note Credits" )
|
||||
PORT_DIPSETTING( 0x10, "500" )
|
||||
PORT_DIPSETTING( 0x00, "1000" )
|
||||
PORT_DIPNAME( 0x20, 0x20, "Money Type" )
|
||||
PORT_DIPSETTING( 0x20, "Coins" )
|
||||
PORT_DIPSETTING( 0x00, "Notes" )
|
||||
PORT_DIPNAME( 0x40, 0x40, "Pay Out Type" )
|
||||
PORT_DIPSETTING( 0x40, "Coins" )
|
||||
PORT_DIPSETTING( 0x00, "Notes" )
|
||||
PORT_DIPNAME( 0x80, 0x80, "Double Up Limit" )
|
||||
PORT_DIPSETTING( 0x80, "1000" )
|
||||
PORT_DIPSETTING( 0x00, "2000" )
|
||||
|
||||
PORT_START("DSW2")
|
||||
PORT_DIPNAME( 0x03, 0x03, "Min Bet" )
|
||||
PORT_DIPSETTING( 0x03, "1" )
|
||||
PORT_DIPSETTING( 0x02, "2" )
|
||||
PORT_DIPSETTING( 0x01, "3" )
|
||||
PORT_DIPSETTING( 0x00, "5" )
|
||||
PORT_DIPNAME( 0x04, 0x04, "Double Up" )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x10, 0x10, "Double Up Type" )
|
||||
PORT_DIPSETTING( 0x10, "Double" )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Single ) )
|
||||
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Controls ) )
|
||||
PORT_DIPSETTING( 0x20, "Keyboard" )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Joystick ) )
|
||||
PORT_DIPNAME( 0x40, 0x40, "Number Type" )
|
||||
PORT_DIPSETTING( 0x40, "Number" )
|
||||
PORT_DIPSETTING( 0x00, "Tile" )
|
||||
PORT_DIPNAME( 0x80, 0x80, "Bet Number" )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
|
||||
|
||||
// the top 2 bits of COINS and KEYx are read and combined (see code at 1C83A)
|
||||
|
||||
PORT_START("COINS")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE2 ) // ? (shown in service mode)
|
||||
PORT_SERVICE_NO_TOGGLE( 0x02, IP_ACTIVE_LOW ) // service mode (keep pressed during boot too)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Statistics") // press with the above for sound test
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Pay Out") PORT_CODE(KEYCODE_O)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE3 ) // ? (shown in service mode)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
|
||||
PORT_START("KEY0")
|
||||
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_UNKNOWN )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
|
||||
PORT_START("KEY1")
|
||||
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( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
|
||||
PORT_START("KEY2")
|
||||
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( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
|
||||
PORT_START("KEY3")
|
||||
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( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
|
||||
PORT_START("KEY4")
|
||||
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_UNKNOWN )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
Graphics Layout
|
||||
@ -644,8 +1037,23 @@ static const gfx_layout layout_8x8x4 =
|
||||
8*8*4
|
||||
};
|
||||
|
||||
static GFXDECODE_START( igs_180 )
|
||||
GFXDECODE_ENTRY( "gfx2", 0, layout_8x8x4, 0, 16 )
|
||||
static const gfx_layout layout_8x8x4_flipped =
|
||||
{
|
||||
8,8,
|
||||
RGN_FRAC(1,1),
|
||||
4,
|
||||
{ 8*2,8*3,8*0,8*1 },
|
||||
{ STEP8(7, -1) },
|
||||
{ STEP8(0, 8*4) },
|
||||
8*8*4
|
||||
};
|
||||
|
||||
static GFXDECODE_START( igs017_flipped )
|
||||
GFXDECODE_ENTRY( "tilemaps", 0, layout_8x8x4_flipped, 0, 16 )
|
||||
GFXDECODE_END
|
||||
|
||||
static GFXDECODE_START( igs017 )
|
||||
GFXDECODE_ENTRY( "tilemaps", 0, layout_8x8x4, 0, 16 )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
@ -653,7 +1061,7 @@ GFXDECODE_END
|
||||
Machine Drivers
|
||||
***************************************************************************/
|
||||
|
||||
static INTERRUPT_GEN( igs_180_interrupt )
|
||||
static INTERRUPT_GEN( iqblocka_interrupt )
|
||||
{
|
||||
if (cpu_getiloops(device) & 1)
|
||||
{
|
||||
@ -668,33 +1076,34 @@ static INTERRUPT_GEN( igs_180_interrupt )
|
||||
}
|
||||
|
||||
// Dips are read through the 8255
|
||||
static const ppi8255_interface ppi8255_intf =
|
||||
static const ppi8255_interface iqblocka_ppi8255_intf =
|
||||
{
|
||||
DEVICE8_PORT("DSW0"), // Port A read
|
||||
DEVICE8_PORT("DSW1"), // Port B read
|
||||
DEVICE8_PORT("DSW2"), // Port C read
|
||||
|
||||
0, // Port A write
|
||||
0, // Port B write
|
||||
0, // Port C write
|
||||
};
|
||||
|
||||
static MACHINE_RESET( igs_180 )
|
||||
static MACHINE_RESET( iqblocka )
|
||||
{
|
||||
nmi_enable = 0;
|
||||
irq_enable = 0;
|
||||
}
|
||||
|
||||
static MACHINE_DRIVER_START( igs_180 )
|
||||
static MACHINE_DRIVER_START( iqblocka )
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("main", Z180, XTAL_16MHz / 2)
|
||||
MDRV_CPU_PROGRAM_MAP(igs_180_map,0)
|
||||
MDRV_CPU_IO_MAP(igs_180_portmap,0)
|
||||
MDRV_CPU_VBLANK_INT_HACK(igs_180_interrupt,2)
|
||||
MDRV_CPU_PROGRAM_MAP(iqblocka_map,0)
|
||||
MDRV_CPU_IO_MAP(iqblocka_io,0)
|
||||
MDRV_CPU_VBLANK_INT_HACK(iqblocka_interrupt,2)
|
||||
|
||||
MDRV_PPI8255_ADD( "ppi8255", ppi8255_intf )
|
||||
MDRV_PPI8255_ADD( "ppi8255", iqblocka_ppi8255_intf )
|
||||
|
||||
MDRV_MACHINE_RESET(igs_180)
|
||||
MDRV_MACHINE_RESET(iqblocka)
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("main", RASTER)
|
||||
@ -704,11 +1113,11 @@ static MACHINE_DRIVER_START( igs_180 )
|
||||
MDRV_SCREEN_SIZE(512, 256)
|
||||
MDRV_SCREEN_VISIBLE_AREA(0, 512-1, 0, 240-1)
|
||||
|
||||
MDRV_GFXDECODE(igs_180)
|
||||
MDRV_GFXDECODE(igs017)
|
||||
MDRV_PALETTE_LENGTH(0x100*2)
|
||||
|
||||
MDRV_VIDEO_START(igs_180)
|
||||
MDRV_VIDEO_UPDATE(igs_180)
|
||||
MDRV_VIDEO_START(igs017)
|
||||
MDRV_VIDEO_UPDATE(igs017)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
@ -721,6 +1130,75 @@ static MACHINE_DRIVER_START( igs_180 )
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
|
||||
|
||||
// mgcs
|
||||
|
||||
static INTERRUPT_GEN( mgcs_interrupt )
|
||||
{
|
||||
if (cpu_getiloops(device) & 1)
|
||||
{
|
||||
if (irq2_enable)
|
||||
cpu_set_input_line(device, 2, HOLD_LINE);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (irq1_enable)
|
||||
cpu_set_input_line(device, 1, HOLD_LINE);
|
||||
}
|
||||
}
|
||||
|
||||
static MACHINE_RESET( mgcs )
|
||||
{
|
||||
irq1_enable = 0;
|
||||
irq2_enable = 0;
|
||||
}
|
||||
|
||||
static const ppi8255_interface mgcs_ppi8255_intf =
|
||||
{
|
||||
DEVICE8_PORT("COINS"), // Port A read
|
||||
mgcs_keys_r, // Port B read
|
||||
0, // Port C read (see code at 1C83A)
|
||||
|
||||
0, // Port A write
|
||||
0, // Port B write
|
||||
0, // Port C write (with 0/1)
|
||||
};
|
||||
|
||||
static MACHINE_DRIVER_START( mgcs )
|
||||
MDRV_CPU_ADD("main", M68000, XTAL_22MHz / 2)
|
||||
MDRV_CPU_PROGRAM_MAP(mgcs,0)
|
||||
MDRV_CPU_VBLANK_INT_HACK(mgcs_interrupt,2)
|
||||
|
||||
MDRV_MACHINE_RESET(mgcs)
|
||||
|
||||
MDRV_PPI8255_ADD( "ppi8255", mgcs_ppi8255_intf )
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("main", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(60)
|
||||
MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
|
||||
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
|
||||
MDRV_SCREEN_SIZE(512, 256)
|
||||
MDRV_SCREEN_VISIBLE_AREA(0, 512-1, 0, 240-1)
|
||||
|
||||
MDRV_GFXDECODE(igs017_flipped)
|
||||
MDRV_PALETTE_LENGTH(0x100*2)
|
||||
|
||||
MDRV_VIDEO_START(igs017)
|
||||
MDRV_VIDEO_UPDATE(igs017)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
MDRV_SOUND_ADD("oki", OKIM6295, XTAL_8MHz / 8)
|
||||
MDRV_SOUND_CONFIG(okim6295_interface_pin7high)
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5)
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
ROMs Loading
|
||||
***************************************************************************/
|
||||
|
||||
/*
|
||||
|
||||
IQ Block (alt hardware)
|
||||
@ -769,10 +1247,10 @@ ROM_START( iqblocka )
|
||||
ROM_REGION( 0x40000, "main", 0 )
|
||||
ROM_LOAD( "v.u18", 0x00000, 0x40000, CRC(2e2b7d43) SHA1(cc73f4c8f9a6e2219ee04c9910725558a80b4eb2) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", ROMREGION_DISPOSE )
|
||||
ROM_REGION( 0x80000, "sprites", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "cg.u7", 0x000000, 0x080000, CRC(cb48a66e) SHA1(6d597193d1333a97957d5ceec8179a24bedfd928) ) // FIXED BITS (xxxxxxxx0xxxxxxx)
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", ROMREGION_DISPOSE)
|
||||
ROM_REGION( 0x80000, "tilemaps", ROMREGION_DISPOSE)
|
||||
ROM_LOAD( "text.u8", 0x000000, 0x080000, CRC(48c4f4e6) SHA1(b1e1ca62cf6a99c11a5cc56705eef7e22a3b2740) )
|
||||
|
||||
ROM_REGION( 0x40000, "oki", 0 )
|
||||
@ -783,10 +1261,10 @@ ROM_START( iqblockf )
|
||||
ROM_REGION( 0x40000, "main", 0 )
|
||||
ROM_LOAD( "v113fr.u18", 0x00000, 0x40000, CRC(346c68af) SHA1(ceae4c0143c288dc9c1dd1e8a51f1e3371ffa439) )
|
||||
|
||||
ROM_REGION( 0x80000, "gfx1", ROMREGION_DISPOSE )
|
||||
ROM_REGION( 0x80000, "sprites", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "cg.u7", 0x000000, 0x080000, CRC(cb48a66e) SHA1(6d597193d1333a97957d5ceec8179a24bedfd928) ) // FIXED BITS (xxxxxxxx0xxxxxxx)
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", ROMREGION_DISPOSE )
|
||||
ROM_REGION( 0x80000, "tilemaps", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "text.u8", 0x000000, 0x080000, CRC(48c4f4e6) SHA1(b1e1ca62cf6a99c11a5cc56705eef7e22a3b2740) )
|
||||
|
||||
ROM_REGION( 0x40000, "oki", 0 )
|
||||
@ -845,17 +1323,75 @@ ROM_START( tjsb )
|
||||
ROM_REGION( 0x40000, "main", 0 )
|
||||
ROM_LOAD( "p0700.u16", 0x00000, 0x40000,CRC(1b2a50df) SHA1(95a272e624f727df9523667864f933118d9e633c) )
|
||||
|
||||
ROM_REGION( 0x200000, "gfx1", ROMREGION_DISPOSE )
|
||||
ROM_REGION( 0x200000, "sprites", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "a0701.u3", 0x000000, 0x200000, CRC(aa182140) SHA1(37c2053386c183ff726ba417d13f2063cf9a22df) ) // FIXED BITS (xxxxxxxx0xxxxxxx)
|
||||
|
||||
ROM_REGION( 0x80000, "gfx2", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "text.u6", 0x000000, 0x080000, CRC(3be886b8) SHA1(15b3624ed076640c1828d065b01306a8656f5a9b) ) // BADADDR --xxxxxxxxxxxxxxxxx
|
||||
ROM_REGION( 0x80000, "tilemaps", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "text.u6", 0x00000, 0x80000, CRC(3be886b8) SHA1(15b3624ed076640c1828d065b01306a8656f5a9b) ) // BADADDR --xxxxxxxxxxxxxxxxx
|
||||
|
||||
ROM_REGION( 0x80000, "oki", 0 )
|
||||
ROM_LOAD( "s0703.u15", 0x00000, 0x80000, CRC(c6f94d29) SHA1(ec413580240711fc4977dd3c96c288501aa7ef6c) )
|
||||
ROM_END
|
||||
|
||||
/*
|
||||
|
||||
GAME( 1996, iqblocka, iqblock, igs_180, iqblocka, iqblocka, ROT0, "IGS", "Shu Zi Le Yuan (V127M)", GAME_NOT_WORKING )
|
||||
GAME( 1996, iqblockf, iqblock, igs_180, iqblocka, iqblockf, ROT0, "IGS", "Shu Zi Le Yuan (V113FR)", GAME_NOT_WORKING )
|
||||
GAME( 1997, tjsb, 0, igs_180, iqblocka, tjsb, ROT0, "IGS", "Mahjong Tian Jiang Shen Bing", GAME_NOT_WORKING )
|
||||
Mahjong Man Guan Cai Shen
|
||||
IGS, 1998
|
||||
|
||||
|
||||
PCB Layout
|
||||
----------
|
||||
|
||||
IGS PCB NO-0192-1
|
||||
|---------------------------------------|
|
||||
| JAMMA UPC1242 |
|
||||
| |
|
||||
| S1502.U10 |
|
||||
| K668 VOL |
|
||||
| |
|
||||
| |
|
||||
| 22MHz |
|
||||
|1 61256 |
|
||||
|8 |-------| TEXT.U25 |
|
||||
|W PAL | | |
|
||||
|A |IGS017 | |
|
||||
|Y | | M1501.U23|
|
||||
| |-------| |
|
||||
| |-------| |
|
||||
| | | |
|
||||
| |IGS025 | P1500.U8 |
|
||||
| | | PAL 6264 |
|
||||
|1 |-------| |
|
||||
|0 |----| PAL 6264 |
|
||||
|W |IGS | PAL |
|
||||
|A |029 | 8MHz SPDT_SW|
|
||||
|Y |----| 68000 |
|
||||
|T DSW1 DSW2 BATTERY |
|
||||
|---------------------------------------|
|
||||
Notes:
|
||||
Uses JAMMA & common 10-way/18-way Mahjong pinout
|
||||
68000 clock 11.000MHz [22/2]
|
||||
K668 == Oki M6295 (QFP44). Clock 1MHz [8/8]. pin7 = High
|
||||
VSync - 60Hz
|
||||
HSync - 15.3kHz
|
||||
|
||||
*/
|
||||
|
||||
ROM_START( mgcs )
|
||||
ROM_REGION( 0x80000, "main", 0 )
|
||||
ROM_LOAD16_WORD_SWAP( "p1500.u8", 0x00000, 0x80000, CRC(a8cb5905) SHA1(37be7d926a1352869632d43943763accd4dec4b7) )
|
||||
|
||||
ROM_REGION( 0x400000, "sprites", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "m1501.u23", 0x000000, 0x400000, CRC(96fce058) SHA1(6b87f47d646bad9b3061bdc8a9af65467fdbbc9f) ) // FIXED BITS (xxxxxxx0xxxxxxxx)
|
||||
|
||||
ROM_REGION( 0x80000, "tilemaps", ROMREGION_DISPOSE )
|
||||
ROM_LOAD( "text.u25", 0x00000, 0x80000, CRC(a37f9613) SHA1(812f060ca98a34540c48a180c359c3d0f1c0b5bb) )
|
||||
|
||||
ROM_REGION( 0x80000, "oki", 0 )
|
||||
ROM_LOAD( "s1502.u10", 0x00000, 0x80000, CRC(a8a6ba58) SHA1(59276a8ab4a31812600816c2a43b74bd71394419) )
|
||||
ROM_END
|
||||
|
||||
GAME( 1996, iqblocka, iqblock, iqblocka, iqblocka, iqblocka, ROT0, "IGS", "Shu Zi Le Yuan (V127M)", GAME_NOT_WORKING )
|
||||
GAME( 1996, iqblockf, iqblock, iqblocka, iqblocka, iqblockf, ROT0, "IGS", "Shu Zi Le Yuan (V113FR)", GAME_NOT_WORKING )
|
||||
GAME( 1997, tjsb, 0, iqblocka, iqblocka, tjsb, ROT0, "IGS", "Mahjong Tian Jiang Shen Bing", GAME_NOT_WORKING )
|
||||
GAME( 1998, mgcs, 0, mgcs, mgcs, mgcs, ROT0, "IGS", "Mahjong Man Guan Cai Shen (V103CS)", GAME_NOT_WORKING )
|
@ -139,62 +139,6 @@ ROM_START( lhzb2a )
|
||||
ROM_LOAD( "m1103", 0x000000, 0x080000, CRC(4d3776b4) SHA1(fa9b311b1a6ad56e136b66d090bc62ed5003b2f2) )
|
||||
ROM_END
|
||||
|
||||
/*
|
||||
|
||||
Mahjong Man Guan Cai Shen
|
||||
IGS, 1998
|
||||
|
||||
|
||||
PCB Layout
|
||||
----------
|
||||
|
||||
IGS PCB NO-0192-1
|
||||
|---------------------------------------|
|
||||
| JAMMA UPC1242 |
|
||||
| |
|
||||
| S1502.U10 |
|
||||
| K668 VOL |
|
||||
| |
|
||||
| |
|
||||
| 22MHz |
|
||||
|1 61256 |
|
||||
|8 |-------| TEXT.U25 |
|
||||
|W PAL | | |
|
||||
|A |IGS017 | |
|
||||
|Y | | M1501.U23|
|
||||
| |-------| |
|
||||
| |-------| |
|
||||
| | | |
|
||||
| |IGS025 | P1500.U8 |
|
||||
| | | PAL 6264 |
|
||||
|1 |-------| |
|
||||
|0 |----| PAL 6264 |
|
||||
|W |IGS | PAL |
|
||||
|A |029 | 8MHz SPDT_SW|
|
||||
|Y |----| 68000 |
|
||||
|T DSW1 DSW2 BATTERY |
|
||||
|---------------------------------------|
|
||||
Notes:
|
||||
Uses JAMMA & common 10-way/18-way Mahjong pinout
|
||||
68000 clock 11.000MHz [22/2]
|
||||
K668 == Oki M6295 (QFP44). Clock 1MHz [8/8]. pin7 = High
|
||||
VSync - 60Hz
|
||||
HSync - 15.3kHz
|
||||
|
||||
*/
|
||||
|
||||
|
||||
ROM_START( mgcs )
|
||||
ROM_REGION( 0x80000, "main", 0 ) /* 68000 Code */
|
||||
ROM_LOAD16_WORD_SWAP( "p1500.u8", 0x00000, 0x80000, CRC(a8cb5905) SHA1(37be7d926a1352869632d43943763accd4dec4b7) )
|
||||
|
||||
ROM_REGION( 0x80000, "oki", 0 ) /* Samples */
|
||||
ROM_LOAD( "s1502.u10", 0x00000, 0x80000, CRC(a8a6ba58) SHA1(59276a8ab4a31812600816c2a43b74bd71394419) )
|
||||
|
||||
ROM_REGION( 0x200000, "gfx1", 0 )
|
||||
ROM_LOAD( "m1501.u23", 0x000000, 0x200000, CRC(7a876bcc) SHA1(581740f39cfac56324f483a24aece6957645378a) )
|
||||
ROM_LOAD( "text.u25", 0x000000, 0x080000, CRC(a37f9613) SHA1(812f060ca98a34540c48a180c359c3d0f1c0b5bb) )
|
||||
ROM_END
|
||||
|
||||
/*
|
||||
|
||||
@ -460,56 +404,6 @@ static DRIVER_INIT( lhzb2a )
|
||||
|
||||
}
|
||||
|
||||
static DRIVER_INIT( mgcs )
|
||||
{
|
||||
int i;
|
||||
UINT16 *src = (UINT16 *) (memory_region(machine, "main"));
|
||||
|
||||
int rom_size = 0x80000;
|
||||
|
||||
for (i=0; i<rom_size/2; i++)
|
||||
{
|
||||
UINT16 x = src[i];
|
||||
|
||||
/* bit 0 xor layer */
|
||||
|
||||
if( i & 0x20/2 )
|
||||
{
|
||||
if( i & 0x02/2 )
|
||||
{
|
||||
x ^= 0x0001;
|
||||
}
|
||||
}
|
||||
|
||||
if( !(i & 0x4000/2) )
|
||||
{
|
||||
if( !(i & 0x300/2) )
|
||||
{
|
||||
x ^= 0x0001;
|
||||
}
|
||||
}
|
||||
|
||||
/* bit 8 xor layer */
|
||||
|
||||
if( (i & 0x2000/2) || !(i & 0x80/2) )
|
||||
{
|
||||
if( i & 0x100/2 )
|
||||
{
|
||||
if( !(i & 0x20/2) || (i & 0x400/2) )
|
||||
{
|
||||
x ^= 0x0100;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
x ^= 0x0100;
|
||||
}
|
||||
|
||||
src[i] = x;
|
||||
}
|
||||
}
|
||||
|
||||
static DRIVER_INIT( slqz2 )
|
||||
{
|
||||
int i;
|
||||
@ -643,7 +537,6 @@ static DRIVER_INIT( sdmg2 )
|
||||
|
||||
GAME( 1998, lhzb2, 0, igs_m68, igs_m68, lhzb2, ROT0, "IGS", "Mahjong Long Hu Zheng Ba 2 (set 1)", GAME_NOT_WORKING )
|
||||
GAME( 1998, lhzb2a, lhzb2, igs_m68, igs_m68, lhzb2a, ROT0, "IGS", "Mahjong Long Hu Zheng Ba 2 (set 2)", GAME_NOT_WORKING )
|
||||
GAME( 1998, mgcs, 0, igs_m68, igs_m68, mgcs, ROT0, "IGS", "Mahjong Man Guan Cai Shen", GAME_NOT_WORKING )
|
||||
GAME( 1998, slqz2, 0, igs_m68, igs_m68, slqz2, ROT0, "IGS", "Mahjong Shuang Long Qiang Zhu 2", GAME_NOT_WORKING )
|
||||
GAME( 1997, sdmg2, 0, igs_m68, igs_m68, sdmg2, ROT0, "IGS", "Mahjong Super Da Man Guan 2", GAME_NOT_WORKING )
|
||||
|
||||
|
@ -761,7 +761,7 @@ $(MAMEOBJ)/igs.a: \
|
||||
$(DRIVERS)/goldstar.o $(VIDEO)/goldstar.o \
|
||||
$(DRIVERS)/igs009.o \
|
||||
$(DRIVERS)/igs_blit.o \
|
||||
$(DRIVERS)/igs_180.o \
|
||||
$(DRIVERS)/igs017.o \
|
||||
$(DRIVERS)/igs_m027.o \
|
||||
$(DRIVERS)/igs_m68.o \
|
||||
$(DRIVERS)/iqblock.o $(VIDEO)/iqblock.o \
|
||||
|
Loading…
Reference in New Issue
Block a user