mirror of
https://github.com/holub/mame
synced 2025-05-23 14:19: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/hyperspt.c svneol=native#text/plain
|
||||||
src/mame/drivers/hyprduel.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/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_blit.c svneol=native#text/plain
|
||||||
src/mame/drivers/igs_m027.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
|
src/mame/drivers/igs_m68.c svneol=native#text/plain
|
||||||
|
@ -1,13 +1,18 @@
|
|||||||
/***************************************************************************
|
/************************************************************************************************************
|
||||||
|
|
||||||
-= IGS017 Based Hardware =-
|
-= IGS017 Based Hardware =-
|
||||||
|
|
||||||
driver by Pierpaolo Prazzoli, Luca Elia (l.elia@tin.it)
|
driver by Pierpaolo Prazzoli, Luca Elia (l.elia@tin.it)
|
||||||
|
|
||||||
CPU: Z180 (HD64180)
|
IGS017: 2 tilemaps, variable size sprites, protection.
|
||||||
GFX: IGS017 (2 tilemaps, variable size sprites, protection)
|
|
||||||
SOUND: M6295, YM2413
|
-------------------------------------------------------------------------------------------------------------
|
||||||
OTHER: IGS025
|
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:
|
To Do:
|
||||||
|
|
||||||
@ -20,10 +25,11 @@ Notes:
|
|||||||
|
|
||||||
- iqblocka: keep start or test pressed during boot to enter test mode A or B.
|
- iqblocka: keep start or test pressed during boot to enter test mode A or B.
|
||||||
|
|
||||||
***************************************************************************/
|
************************************************************************************************************/
|
||||||
|
|
||||||
#include "driver.h"
|
#include "driver.h"
|
||||||
#include "deprecat.h"
|
#include "deprecat.h"
|
||||||
|
#include "cpu/m68000/m68000.h"
|
||||||
#include "cpu/z180/z180.h"
|
#include "cpu/z180/z180.h"
|
||||||
#include "machine/8255ppi.h"
|
#include "machine/8255ppi.h"
|
||||||
#include "sound/2413intf.h"
|
#include "sound/2413intf.h"
|
||||||
@ -56,13 +62,47 @@ static WRITE8_HANDLER( fg_w )
|
|||||||
fg_videoram[offset] = data;
|
fg_videoram[offset] = data;
|
||||||
tilemap_mark_tile_dirty(fg_tilemap,offset/4);
|
tilemap_mark_tile_dirty(fg_tilemap,offset/4);
|
||||||
}
|
}
|
||||||
|
|
||||||
static WRITE8_HANDLER( bg_w )
|
static WRITE8_HANDLER( bg_w )
|
||||||
{
|
{
|
||||||
bg_videoram[offset] = data;
|
bg_videoram[offset] = data;
|
||||||
tilemap_mark_tile_dirty(bg_tilemap,offset/4);
|
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);
|
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);
|
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.
|
// This routine expands each word into three bytes.
|
||||||
static void expand_sprites(running_machine *machine)
|
static void expand_sprites(running_machine *machine)
|
||||||
{
|
{
|
||||||
UINT8 *rom = memory_region(machine, "gfx1");
|
UINT8 *rom = memory_region(machine, "sprites");
|
||||||
int size = memory_region_length(machine, "gfx1");
|
int size = memory_region_length(machine, "sprites");
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
sprites_gfx_size = size / 2 * 3;
|
sprites_gfx_size = size / 2 * 3;
|
||||||
@ -122,7 +162,8 @@ static void expand_sprites(running_machine *machine)
|
|||||||
|
|
||||||
7.b 765- ---- Color
|
7.b 765- ---- Color
|
||||||
---4 ---- Flip X
|
---4 ---- Flip X
|
||||||
---- 3210 Code (high)
|
---- 3---
|
||||||
|
---- -210 Code (high)
|
||||||
|
|
||||||
Code = ROM Address / 2 = Pixel / 3
|
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);
|
y = s[0] + (s[1] << 8);
|
||||||
x = s[2] + (s[3] << 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;
|
addr *= 3;
|
||||||
|
|
||||||
flipx = s[7] & 0x10;
|
flipx = s[7] & 0x10;
|
||||||
@ -231,7 +272,7 @@ static int debug_viewer(running_machine *machine, bitmap_t *bitmap,const rectang
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VIDEO_UPDATE(igs_180)
|
static VIDEO_UPDATE( igs017 )
|
||||||
{
|
{
|
||||||
int layers_ctrl = -1;
|
int layers_ctrl = -1;
|
||||||
|
|
||||||
@ -363,8 +404,8 @@ static DRIVER_INIT( iqblockf )
|
|||||||
|
|
||||||
static void tjsb_decrypt_sprites(running_machine *machine)
|
static void tjsb_decrypt_sprites(running_machine *machine)
|
||||||
{
|
{
|
||||||
int length = memory_region_length(machine, "gfx1");
|
int length = memory_region_length(machine, "sprites");
|
||||||
UINT8 *rom = memory_region(machine, "gfx1");
|
UINT8 *rom = memory_region(machine, "sprites");
|
||||||
UINT8 *tmp = auto_malloc(length);
|
UINT8 *tmp = auto_malloc(length);
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -406,11 +447,126 @@ static DRIVER_INIT( tjsb )
|
|||||||
expand_sprites(machine);
|
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
|
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( 0x00000, 0x0dfff ) AM_ROM
|
||||||
AM_RANGE( 0x0e000, 0x0efff ) AM_RAM
|
AM_RANGE( 0x0e000, 0x0efff ) AM_RAM
|
||||||
AM_RANGE( 0x0f000, 0x0ffff ) 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( 0x0000, 0x003f ) AM_RAM // internal regs
|
||||||
|
|
||||||
AM_RANGE( 0x1000, 0x17ff ) AM_RAM AM_BASE( &spriteram )
|
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( 0x2014, 0x2014 ) AM_WRITE( nmi_enable_w )
|
||||||
AM_RANGE( 0x2015, 0x2015 ) AM_WRITE( irq_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( 0x4000, 0x5fff ) AM_RAM_WRITE( fg_w ) AM_BASE( &fg_videoram )
|
||||||
AM_RANGE( 0x6000, 0x7fff ) AM_READWRITE( SMH_RAM, bg_w ) AM_BASE( &bg_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( 0x8000, 0x8000 ) AM_WRITE( input_select_w )
|
||||||
AM_RANGE( 0x8001, 0x8001 ) AM_READ ( input_r )
|
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
|
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
|
Input Ports
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
@ -628,6 +907,120 @@ static INPUT_PORTS_START( iqblocka )
|
|||||||
|
|
||||||
INPUT_PORTS_END
|
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
|
Graphics Layout
|
||||||
@ -644,8 +1037,23 @@ static const gfx_layout layout_8x8x4 =
|
|||||||
8*8*4
|
8*8*4
|
||||||
};
|
};
|
||||||
|
|
||||||
static GFXDECODE_START( igs_180 )
|
static const gfx_layout layout_8x8x4_flipped =
|
||||||
GFXDECODE_ENTRY( "gfx2", 0, layout_8x8x4, 0, 16 )
|
{
|
||||||
|
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
|
GFXDECODE_END
|
||||||
|
|
||||||
|
|
||||||
@ -653,7 +1061,7 @@ GFXDECODE_END
|
|||||||
Machine Drivers
|
Machine Drivers
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
static INTERRUPT_GEN( igs_180_interrupt )
|
static INTERRUPT_GEN( iqblocka_interrupt )
|
||||||
{
|
{
|
||||||
if (cpu_getiloops(device) & 1)
|
if (cpu_getiloops(device) & 1)
|
||||||
{
|
{
|
||||||
@ -668,33 +1076,34 @@ static INTERRUPT_GEN( igs_180_interrupt )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Dips are read through the 8255
|
// 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("DSW0"), // Port A read
|
||||||
DEVICE8_PORT("DSW1"), // Port B read
|
DEVICE8_PORT("DSW1"), // Port B read
|
||||||
DEVICE8_PORT("DSW2"), // Port C read
|
DEVICE8_PORT("DSW2"), // Port C read
|
||||||
0, // Port A write
|
|
||||||
0, // Port B write
|
0, // Port A write
|
||||||
0, // Port C write
|
0, // Port B write
|
||||||
|
0, // Port C write
|
||||||
};
|
};
|
||||||
|
|
||||||
static MACHINE_RESET( igs_180 )
|
static MACHINE_RESET( iqblocka )
|
||||||
{
|
{
|
||||||
nmi_enable = 0;
|
nmi_enable = 0;
|
||||||
irq_enable = 0;
|
irq_enable = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static MACHINE_DRIVER_START( igs_180 )
|
static MACHINE_DRIVER_START( iqblocka )
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MDRV_CPU_ADD("main", Z180, XTAL_16MHz / 2)
|
MDRV_CPU_ADD("main", Z180, XTAL_16MHz / 2)
|
||||||
MDRV_CPU_PROGRAM_MAP(igs_180_map,0)
|
MDRV_CPU_PROGRAM_MAP(iqblocka_map,0)
|
||||||
MDRV_CPU_IO_MAP(igs_180_portmap,0)
|
MDRV_CPU_IO_MAP(iqblocka_io,0)
|
||||||
MDRV_CPU_VBLANK_INT_HACK(igs_180_interrupt,2)
|
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 */
|
/* video hardware */
|
||||||
MDRV_SCREEN_ADD("main", RASTER)
|
MDRV_SCREEN_ADD("main", RASTER)
|
||||||
@ -704,11 +1113,11 @@ static MACHINE_DRIVER_START( igs_180 )
|
|||||||
MDRV_SCREEN_SIZE(512, 256)
|
MDRV_SCREEN_SIZE(512, 256)
|
||||||
MDRV_SCREEN_VISIBLE_AREA(0, 512-1, 0, 240-1)
|
MDRV_SCREEN_VISIBLE_AREA(0, 512-1, 0, 240-1)
|
||||||
|
|
||||||
MDRV_GFXDECODE(igs_180)
|
MDRV_GFXDECODE(igs017)
|
||||||
MDRV_PALETTE_LENGTH(0x100*2)
|
MDRV_PALETTE_LENGTH(0x100*2)
|
||||||
|
|
||||||
MDRV_VIDEO_START(igs_180)
|
MDRV_VIDEO_START(igs017)
|
||||||
MDRV_VIDEO_UPDATE(igs_180)
|
MDRV_VIDEO_UPDATE(igs017)
|
||||||
|
|
||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||||
@ -721,6 +1130,75 @@ static MACHINE_DRIVER_START( igs_180 )
|
|||||||
MACHINE_DRIVER_END
|
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)
|
IQ Block (alt hardware)
|
||||||
@ -769,10 +1247,10 @@ ROM_START( iqblocka )
|
|||||||
ROM_REGION( 0x40000, "main", 0 )
|
ROM_REGION( 0x40000, "main", 0 )
|
||||||
ROM_LOAD( "v.u18", 0x00000, 0x40000, CRC(2e2b7d43) SHA1(cc73f4c8f9a6e2219ee04c9910725558a80b4eb2) )
|
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_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_LOAD( "text.u8", 0x000000, 0x080000, CRC(48c4f4e6) SHA1(b1e1ca62cf6a99c11a5cc56705eef7e22a3b2740) )
|
||||||
|
|
||||||
ROM_REGION( 0x40000, "oki", 0 )
|
ROM_REGION( 0x40000, "oki", 0 )
|
||||||
@ -783,10 +1261,10 @@ ROM_START( iqblockf )
|
|||||||
ROM_REGION( 0x40000, "main", 0 )
|
ROM_REGION( 0x40000, "main", 0 )
|
||||||
ROM_LOAD( "v113fr.u18", 0x00000, 0x40000, CRC(346c68af) SHA1(ceae4c0143c288dc9c1dd1e8a51f1e3371ffa439) )
|
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_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_LOAD( "text.u8", 0x000000, 0x080000, CRC(48c4f4e6) SHA1(b1e1ca62cf6a99c11a5cc56705eef7e22a3b2740) )
|
||||||
|
|
||||||
ROM_REGION( 0x40000, "oki", 0 )
|
ROM_REGION( 0x40000, "oki", 0 )
|
||||||
@ -845,17 +1323,75 @@ ROM_START( tjsb )
|
|||||||
ROM_REGION( 0x40000, "main", 0 )
|
ROM_REGION( 0x40000, "main", 0 )
|
||||||
ROM_LOAD( "p0700.u16", 0x00000, 0x40000,CRC(1b2a50df) SHA1(95a272e624f727df9523667864f933118d9e633c) )
|
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_LOAD( "a0701.u3", 0x000000, 0x200000, CRC(aa182140) SHA1(37c2053386c183ff726ba417d13f2063cf9a22df) ) // FIXED BITS (xxxxxxxx0xxxxxxx)
|
||||||
|
|
||||||
ROM_REGION( 0x80000, "gfx2", ROMREGION_DISPOSE )
|
ROM_REGION( 0x80000, "tilemaps", ROMREGION_DISPOSE )
|
||||||
ROM_LOAD( "text.u6", 0x000000, 0x080000, CRC(3be886b8) SHA1(15b3624ed076640c1828d065b01306a8656f5a9b) ) // BADADDR --xxxxxxxxxxxxxxxxx
|
ROM_LOAD( "text.u6", 0x00000, 0x80000, CRC(3be886b8) SHA1(15b3624ed076640c1828d065b01306a8656f5a9b) ) // BADADDR --xxxxxxxxxxxxxxxxx
|
||||||
|
|
||||||
ROM_REGION( 0x80000, "oki", 0 )
|
ROM_REGION( 0x80000, "oki", 0 )
|
||||||
ROM_LOAD( "s0703.u15", 0x00000, 0x80000, CRC(c6f94d29) SHA1(ec413580240711fc4977dd3c96c288501aa7ef6c) )
|
ROM_LOAD( "s0703.u15", 0x00000, 0x80000, CRC(c6f94d29) SHA1(ec413580240711fc4977dd3c96c288501aa7ef6c) )
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
GAME( 1996, iqblocka, iqblock, igs_180, iqblocka, iqblocka, ROT0, "IGS", "Shu Zi Le Yuan (V127M)", GAME_NOT_WORKING )
|
Mahjong Man Guan Cai Shen
|
||||||
GAME( 1996, iqblockf, iqblock, igs_180, iqblocka, iqblockf, ROT0, "IGS", "Shu Zi Le Yuan (V113FR)", GAME_NOT_WORKING )
|
IGS, 1998
|
||||||
GAME( 1997, tjsb, 0, igs_180, iqblocka, tjsb, ROT0, "IGS", "Mahjong Tian Jiang Shen Bing", GAME_NOT_WORKING )
|
|
||||||
|
|
||||||
|
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_LOAD( "m1103", 0x000000, 0x080000, CRC(4d3776b4) SHA1(fa9b311b1a6ad56e136b66d090bc62ed5003b2f2) )
|
||||||
ROM_END
|
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 )
|
static DRIVER_INIT( slqz2 )
|
||||||
{
|
{
|
||||||
int i;
|
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, 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, 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( 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 )
|
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)/goldstar.o $(VIDEO)/goldstar.o \
|
||||||
$(DRIVERS)/igs009.o \
|
$(DRIVERS)/igs009.o \
|
||||||
$(DRIVERS)/igs_blit.o \
|
$(DRIVERS)/igs_blit.o \
|
||||||
$(DRIVERS)/igs_180.o \
|
$(DRIVERS)/igs017.o \
|
||||||
$(DRIVERS)/igs_m027.o \
|
$(DRIVERS)/igs_m027.o \
|
||||||
$(DRIVERS)/igs_m68.o \
|
$(DRIVERS)/igs_m68.o \
|
||||||
$(DRIVERS)/iqblock.o $(VIDEO)/iqblock.o \
|
$(DRIVERS)/iqblock.o $(VIDEO)/iqblock.o \
|
||||||
|
Loading…
Reference in New Issue
Block a user