diff options
Diffstat (limited to 'trunk/src/mame/drivers/igs_m027.c')
-rw-r--r-- | trunk/src/mame/drivers/igs_m027.c | 629 |
1 files changed, 629 insertions, 0 deletions
diff --git a/trunk/src/mame/drivers/igs_m027.c b/trunk/src/mame/drivers/igs_m027.c new file mode 100644 index 00000000000..8076770e61a --- /dev/null +++ b/trunk/src/mame/drivers/igs_m027.c @@ -0,0 +1,629 @@ +/* IGS ARM7 (IGS027A) based Mahjong platform + Driver by Xing Xing + + These games use the IGS027A processor. + + This is an ARM7 with Internal ROM. (Also used on later PGM games) + + In some cases the first part of the Internal ROM is excute only, and + cannot be read out with a trojan. It hasn't been confirmed if these + games make use of that feature. + + To emulate these games the Internal ROM will need dumping + There are at least 5 other games on the platform. + +*/ + +#include "emu.h" +#include "cpu/arm7/arm7.h" +#include "cpu/arm7/arm7core.h" +#include "machine/nvram.h" + + +class igs_m027_state : public driver_device +{ +public: + igs_m027_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) { } + + UINT32 *m_igs_mainram; + UINT32 *m_igs_cg_videoram; + UINT32 *m_igs_tx_videoram; + UINT32 *m_igs_bg_videoram; + UINT32 *m_igs_pallete32; + tilemap_t *m_igs_tx_tilemap; + tilemap_t *m_igs_bg_tilemap; +}; + + + +/*************************************************************************** + + Video + + 0x38001000, 0x380017ff CG_CONTROL,8 byte per object, 0x100 in total + 0x38001800, 0x380019ff PALLETE RAM,2 byte per color, 0x100 in total + 0x38004000, 0x38005FFF TX Video RAM????????1E00??????512x240?????? + 0x38006000, 0x38007FFF BG Video RAM????????1E00??????512x240?????? + + +***************************************************************************/ + + + +/* CGLayer */ +static WRITE32_HANDLER( igs_cg_videoram_w ) +{ + igs_m027_state *state = space->machine().driver_data<igs_m027_state>(); + COMBINE_DATA(&state->m_igs_cg_videoram[offset]); + //if(data!=0) + logerror("PC(%08X) CG @%x = %x!\n",cpu_get_pc(&space->device()),offset ,state->m_igs_cg_videoram[offset]); + + + + + /* + ROM:08020520 DCW 0x3E ddd1 y + ROM:08020522 DCW 0x29 ddd2 x + ROM:08020524 DCD 0x190BB6 ddd3 n + ROM:08020528 DCW 0xC ddd4 Y + ROM:0802052A DCW 0xA6 ddd5 X + + (ddd5+?)??10bit + ddd2??9bit + (ddd4+?)??11bit + ddd1??8bit + ddd3??10bit + + 8060a4a6 2642ed8f + A6A46080 8FED4226 + + XXXX-XXXX + XXxx-xxxx + xxxY-YYYY + YYYY-YYyy + + yyyy-yynn + nnnn-nnnn + + + + */ + + + +} + + +/* TX Layer */ +static WRITE32_HANDLER( igs_tx_videoram_w ) +{ + igs_m027_state *state = space->machine().driver_data<igs_m027_state>(); + COMBINE_DATA(&state->m_igs_tx_videoram[offset]); + tilemap_mark_tile_dirty(state->m_igs_tx_tilemap,offset); + //if(data!=0) + //logerror( "TX VIDEO RAM OFFSET %x ,data %x!\n",offset ,state->m_igs_tx_videoram[offset]); +} + +static TILE_GET_INFO( get_tx_tilemap_tile_info ) +{ + igs_m027_state *state = machine.driver_data<igs_m027_state>(); + //ppppppppNNNNNNNN + int tileno,colour; + tileno = state->m_igs_tx_videoram[tile_index] & 0xffff; + colour = (state->m_igs_tx_videoram[tile_index]>>0x10) & 0xffff; + + SET_TILE_INFO(0,tileno,colour,0); +} + +/* BG Layer */ +static WRITE32_HANDLER( igs_bg_videoram_w ) +{ + igs_m027_state *state = space->machine().driver_data<igs_m027_state>(); + COMBINE_DATA(&state->m_igs_bg_videoram[offset]); + tilemap_mark_tile_dirty(state->m_igs_bg_tilemap,offset); + //if(data!=0) + logerror("BG VIDEO RAM OFFSET %x ,data %x!\n",offset ,state->m_igs_bg_videoram[offset]); +} + +static TILE_GET_INFO( get_bg_tilemap_tile_info ) +{ + igs_m027_state *state = machine.driver_data<igs_m027_state>(); + //ppppppppNNNNNNNN + int tileno,colour; + tileno = state->m_igs_bg_videoram[tile_index] & 0xffff; + colour = (state->m_igs_bg_videoram[tile_index]>>0x10) & 0xffff; + + SET_TILE_INFO(0,tileno,colour,0); +} + + +/* Pallete Layer */ +static WRITE32_HANDLER( igs_pallete32_w ) +{ + igs_m027_state *state = space->machine().driver_data<igs_m027_state>(); + space->machine().generic.paletteram.u16=(UINT16 *)state->m_igs_pallete32; + COMBINE_DATA(&state->m_igs_pallete32[offset]); + //paletteram16_xGGGGGRRRRRBBBBB_word_w(offset*2,space->machine().generic.paletteram.u16[offset*2],0); + //paletteram16_xGGGGGRRRRRBBBBB_word_w(offset*2+1,space->machine().generic.paletteram.u16[offset*2+1],0); + //if(data!=0) + //fprintf(stdout,"PALLETE RAM OFFSET %x ,data %x!\n",offset ,state->m_igs_pallete32[offset]); +} + + + +static VIDEO_START(igs_majhong) +{ + igs_m027_state *state = machine.driver_data<igs_m027_state>(); + state->m_igs_tx_tilemap= tilemap_create(machine, get_tx_tilemap_tile_info,tilemap_scan_rows, 8, 8,64,32); + tilemap_set_transparent_pen(state->m_igs_tx_tilemap,15); + state->m_igs_bg_tilemap= tilemap_create(machine, get_bg_tilemap_tile_info,tilemap_scan_rows, 8, 8,64,32); + //state->m_igs_bg_tilemap= tilemap_create(machine, get_bg_tilemap_tile_info,tilemap_scan_rows, 8, 8,64,32); + //tilemap_set_transparent_pen(state->m_igs_bg_tilemap,15); + logerror("Video START OK!\n"); +} + +static SCREEN_UPDATE(igs_majhong) +{ + igs_m027_state *state = screen->machine().driver_data<igs_m027_state>(); + //?????????? + bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine())); + + //?????? + tilemap_draw(bitmap,cliprect,state->m_igs_bg_tilemap,0,0); + + //CG?????? + + //?????? + tilemap_draw(bitmap,cliprect,state->m_igs_tx_tilemap,0,0); + //fprintf(stdout,"Video UPDATE OK!\n"); + return 0; +} + +/*************************************************************************** + + Blitter + +***************************************************************************/ +/*************************************************************************** + + Memory Maps + +***************************************************************************/ + +static ADDRESS_MAP_START( igs_majhong_map, AS_PROGRAM, 32 ) + AM_RANGE(0x00000000, 0x00003fff) AM_ROM /* Internal ROM */ + AM_RANGE(0x08000000, 0x0807ffff) AM_ROM AM_REGION("user1", 0)/* Game ROM */ + AM_RANGE(0x10000000, 0x100003ff) AM_RAM AM_BASE_MEMBER(igs_m027_state, m_igs_mainram)// main ram for asic? + AM_RANGE(0x18000000, 0x18007fff) AM_RAM + + AM_RANGE(0x38001000, 0x380017ff) AM_RAM_WRITE(igs_cg_videoram_w) AM_BASE_MEMBER(igs_m027_state, m_igs_cg_videoram) //0x200 * 1 CG PALLETE? + AM_RANGE(0x38001800, 0x38001fff) AM_RAM_WRITE(igs_pallete32_w) AM_BASE_MEMBER(igs_m027_state, m_igs_pallete32) //0x200 * 1 + + AM_RANGE(0x38004000, 0x38005FFF) AM_RAM_WRITE(igs_tx_videoram_w) AM_BASE_MEMBER(igs_m027_state, m_igs_tx_videoram) /* Text Layer */ + AM_RANGE(0x38006000, 0x38007FFF) AM_RAM_WRITE(igs_bg_videoram_w) AM_BASE_MEMBER(igs_m027_state, m_igs_bg_videoram) /* CG Layer */ + + + AM_RANGE(0x38002010, 0x38002017) AM_RAM //?????????????? + AM_RANGE(0x38009000, 0x38009003) AM_RAM //?????????????? + AM_RANGE(0x70000200, 0x70000203) AM_RAM //?????????????? + AM_RANGE(0x50000000, 0x500003ff) AM_WRITENOP // uploads xor table to external rom here + AM_RANGE(0xf0000000, 0xF000000f) AM_WRITENOP // magic registers +ADDRESS_MAP_END + + +/*************************************************************************** + + Common functions + +***************************************************************************/ + +/*************************************************************************** + + Code Decryption + +***************************************************************************/ +static const UINT8 sdwx_tab[] = +{ + 0x49,0x47,0x53,0x30,0x30,0x35,0x35,0x52,0x44,0x34,0x30,0x32,0x30,0x36,0x32,0x31, + 0x8A,0xBB,0x20,0x67,0x97,0xA5,0x20,0x45,0x6B,0xC0,0xE8,0x0C,0x80,0xFB,0x49,0xAA, + 0x1E,0xAC,0x29,0xF2,0xB9,0x9F,0x01,0x4A,0x8D,0x5F,0x95,0x96,0x78,0xC3,0xF6,0x65, + 0x17,0xBD,0xB6,0x5B,0x25,0x5F,0x6B,0xDE,0x10,0x2E,0x67,0x05,0xDC,0xAC,0xB6,0xBD, + 0x3D,0x20,0x58,0x3D,0xF0,0xA8,0xC0,0xAD,0x5B,0x82,0x8D,0x12,0x65,0x97,0x87,0x7D, + 0x97,0x49,0xDD,0x74,0x74,0x7E,0x9D,0xA1,0x15,0xED,0x75,0xB9,0x09,0xA8,0xA8,0xB0, + 0x6B,0xEA,0x54,0x1B,0x45,0x23,0xE2,0xE5,0x25,0x42,0xCE,0x36,0xFE,0x42,0x99,0xA0, + 0x41,0xF8,0x0B,0x8C,0x3C,0x1B,0xAE,0xE4,0xB2,0x94,0x87,0x02,0xBC,0x08,0x17,0xD9, + 0xE0,0xA4,0x93,0x63,0x6F,0x28,0x5F,0x4A,0x24,0x36,0xD1,0xDA,0xFA,0xDD,0x23,0x26, + 0x4E,0x61,0xB9,0x7A,0x36,0x4D,0x95,0x01,0x20,0xBC,0x18,0xB7,0xAF,0xE4,0xFB,0x92, + 0xD2,0xE3,0x8E,0xEC,0x26,0xCE,0x2F,0x34,0x8F,0xF7,0x0D,0xD6,0x11,0x7F,0x1F,0x68, + 0xF4,0x1D,0x5F,0x16,0x19,0x2D,0x4C,0x4F,0x96,0xFC,0x9F,0xB0,0x99,0x53,0x4C,0x32, + 0x7B,0x41,0xBC,0x90,0x23,0x2E,0x4A,0xFC,0x9E,0x1D,0xFC,0x02,0xFC,0x41,0x83,0xBC, + 0x6D,0xC4,0x75,0x37,0x9D,0xD3,0xC9,0x26,0x4D,0xED,0x93,0xC6,0x32,0x6D,0x02,0x11, + 0x12,0x56,0x97,0x26,0x1D,0x5F,0xA7,0xF8,0x89,0x3F,0x14,0x36,0x72,0x3B,0x48,0x7B, + 0xF1,0xED,0x72,0xB7,0x7A,0x56,0x05,0xDE,0x7B,0x27,0x6D,0xCF,0x33,0x4C,0x14,0x86, +}; +static void sdwx_decrypt(running_machine &machine) +{ + + int i; + UINT16 *src = (UINT16 *) machine.region("user1")->base(); + + int rom_size = 0x80000; + + for(i=0; i<rom_size/2; i++) { + UINT16 x = src[i]; + + if((i & 0x00480) != 0x00080) + x ^= 0x0001; + + + if((i & 0x004008) == 0x004008) + x ^= 0x0002; + + + // if((i & 0x000030) == 0x000010) + // x ^= 0x0004; + + if((i & 0x000242) != 0x000042) + x ^= 0x0008; + + if((i & 0x08100) == 0x08000) + x ^= 0x0010; + + if((i & 0x022004) != 0x000004) + x ^= 0x0020; + + if((i & 0x11800) != 0x10000) + x ^= 0x0040; + + if((i & 0x004820) == 0x004820) + x ^= 0x0080; + + x ^= sdwx_tab[(i >> 1) & 0xff] << 8; + + src[i] = x; + } +} + + + +static void sdwx_gfx_decrypt(running_machine &machine) +{ + int i; + unsigned rom_size = 0x80000; + UINT8 *src = (UINT8 *) (machine.region("gfx1")->base()); + UINT8 *result_data = auto_alloc_array(machine, UINT8, rom_size); + + for (i=0; i<rom_size; i++) + result_data[i] = src[BITSWAP24(i, 23,22,21,20,19,18,17,16,15,14,13,12,11,8,7,6,10,9,5,4,3,2,1,0)]; + + for (i=0; i<rom_size; i+=0x200) + { + memcpy(src+i+0x000,result_data+i+0x000,0x80); + memcpy(src+i+0x080,result_data+i+0x100,0x80); + memcpy(src+i+0x100,result_data+i+0x080,0x80); + memcpy(src+i+0x180,result_data+i+0x180,0x80); + } + auto_free(machine, result_data); +} + +/*************************************************************************** + + Protection & I/O + +***************************************************************************/ + + + + + + + +/*************************************************************************** + + Input Ports + +***************************************************************************/ + +static INPUT_PORTS_START( sdwx ) +INPUT_PORTS_END + + +/*************************************************************************** + + Machine Drivers + +***************************************************************************/ + + +// for debugging +#if 0 +static const gfx_layout charlayout = +{ + 8,8, /* 8 x 8 chars */ + RGN_FRAC(1,1), + 4, /* 4 bits per pixel */ + { 0, 1, 2, 3 }, /* planes are packed in a nibble */ + { 33*4, 32*4, 49*4, 48*4, 1*4, 0*4, 17*4, 16*4 }, + { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, + 32*8 /* 32 bytes per char */ +}; +#endif + +static const gfx_layout gfxlayout_8x8x4 = +{ + 8,8, + RGN_FRAC(1,1), + 4, + //{ STEP4(0,8) }, + { 24,8,16,0 }, + { STEP8(7,-1) }, + { STEP8(0,4*8) }, + 8*8*4 +}; + +#if 0 +static const gfx_layout gfxlayout_16x16x16 = +{ + 16,16, + RGN_FRAC(1,1), + 16, + { STEP16(0,0) }, // >8planes not supported + { STEP16(15,-1) }, + { STEP16(0,16*1) }, + 16*16*16 +}; +#endif + +static GFXDECODE_START( igs_m027 ) + GFXDECODE_ENTRY( "gfx1", 0, gfxlayout_8x8x4, 0, 16 ) + // GFXDECODE_ENTRY( "gfx2", 0, gfxlayout_16x16x16, 0, 16 ) +GFXDECODE_END + + +static INTERRUPT_GEN( igs_majhong_interrupt ) +{ + generic_pulse_irq_line(device, ARM7_FIRQ_LINE); +} + + +static MACHINE_CONFIG_START( igs_majhong, igs_m027_state ) + MCFG_CPU_ADD("maincpu",ARM7, 20000000) + + MCFG_CPU_PROGRAM_MAP(igs_majhong_map) + + MCFG_CPU_VBLANK_INT("screen", igs_majhong_interrupt) + //MCFG_NVRAM_ADD_0FILL("nvram") + + MCFG_GFXDECODE(igs_m027) + + + MCFG_SCREEN_ADD("screen", RASTER) + MCFG_SCREEN_REFRESH_RATE(60) + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MCFG_SCREEN_SIZE(512, 256) + MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1) + MCFG_SCREEN_UPDATE( igs_majhong ) + + MCFG_PALETTE_LENGTH(0x200) + + MCFG_VIDEO_START( igs_majhong ) + + /* sound hardware */ + +MACHINE_CONFIG_END + + + + +static DRIVER_INIT( sdwx ) +{ + sdwx_decrypt(machine); + sdwx_gfx_decrypt(machine); + logerror("init OK!\n"); +} + + + +/*************************************************************************** + + ROMs Loading + +***************************************************************************/ +ROM_START( sdwx ) + ROM_REGION( 0x04000, "maincpu", 0 ) + /* Internal rom of IGS027A ARM based MCU */ + ROM_LOAD( "sdwx_igs027a", 0x00000, 0x4000, NO_DUMP ) + + ROM_REGION( 0x80000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "prg.u16", 0x000000, 0x80000, CRC(c94ef6a8) SHA1(69f2f356e05206b0866a9020253d9a112b56316c) ) + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD( "text.u24", 0x000000, 0x80000, CRC(60b415ac) SHA1(b4475b0ba1e70504cac9ac05078873df0b16495b) ) + + ROM_REGION( 0x200000, "gfx2", 0 ) + ROM_LOAD( "cg.u25", 0x000000, 0x200000, CRC(709b9a42) SHA1(18c4b8e159b29c168f5cafb437fe6eb123672471) ) + + ROM_REGION( 0x80000, "unknown", 0 ) + ROM_LOAD( "sp.u2", 0x00000, 0x80000, CRC(216b5418) SHA1(b7bc24ced0ccb5476c974420aa506c13b971fc9f) ) +ROM_END + + + + +ROM_START( sddz ) + ROM_REGION( 0x04000, "maincpu", 0 ) + /* Internal rom of IGS027A ARM based MCU */ + ROM_LOAD( "sddz_igs027a", 0x00000, 0x4000, NO_DUMP ) + + ROM_REGION( 0x80000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "ddz_218cn.u17", 0x000000, 0x80000, CRC(3cfe38d5) SHA1(9c7f82ecffbc22879583519d5f753bb35e973ee3) ) + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD( "ddz_text.u27", 0x000000, 0x80000, CRC(520dc392) SHA1(0ab2620f20af8253806b6ff4e1d9d77a694da17c) ) + + ROM_REGION( 0x400000, "gfx2", 0 ) + ROM_LOAD( "ddz_ani.u28", 0x000000, 0x400000, CRC(72487508) SHA1(9f4bbc858960ddaae403e4a3330b2345f6fd6cb3)) + + ROM_REGION( 0x200000, "unknown", 0 ) + ROM_LOAD( "ddz_sp.u4", 0x00000, 0x200000, CRC(7ef65d95) SHA1(345c587cd449d6d06908e9687480be76b2cb2d28) ) +ROM_END + + + +ROM_START( lhzb3 ) + ROM_REGION( 0x04000, "maincpu", 0 ) + /* Internal rom of IGS027A ARM based MCU */ + ROM_LOAD( "lhzb3_igs027a", 0x00000, 0x4000, NO_DUMP ) + + ROM_REGION( 0x80000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "lhzb3_104.u9", 0x000000, 0x80000, CRC(70d61846) SHA1(662b59702ef6f26129de6b16346786df92f99097) ) + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD( "lhzb3_text.u17", 0x000000, 0x80000,CRC(a82398a9) SHA1(4d2987f57096b7f24ce6571ed3be6dcb33bce88d) ) + + ROM_REGION( 0x400000, "gfx2", 0 ) + ROM_LOAD( "m2401.u18", 0x000000, 0x400000, CRC(81428f18) SHA1(9fb19c8a79cc3443642f4b044e04735df2cb45be) ) + + ROM_REGION( 0x200000, "unknown", 0 ) + ROM_LOAD( "s2402.u14", 0x00000, 0x100000, CRC(56083fe2) SHA1(62afd651809bf5e639bfda6e5579dbf4b903b664) ) +ROM_END + + +ROM_START( lhzb4 ) + ROM_REGION( 0x04000, "maincpu", 0 ) + /* Internal rom of IGS027A ARM based MCU */ + ROM_LOAD( "lhzb4_igs027a", 0x00000, 0x4000, NO_DUMP ) + + ROM_REGION( 0x80000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "lhzb4_104.u17", 0x000000, 0x80000, CRC(6f349bbb) SHA1(54cf895889ef0f208637ba732ede696ca3603ee0) ) + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD( "lhzb4_text.u27", 0x000000, 0x80000, CRC(8488b039) SHA1(59bc9eccba810fcac2a53866b2da1e71bfd8a6e7) ) + + ROM_REGION( 0x400000, "gfx2", 0 ) + ROM_LOAD( "a05501.u28", 0x000000, 0x400000, CRC(f78b3714) SHA1(c73d8e50b04126bc4f91783384713624ed133ee2) ) + + ROM_REGION( 0x200000, "unknown", 0 ) + ROM_LOAD( "w05502.u5", 0x00000, 0x200000, CRC(467f677e) SHA1(63927c0d606176c0e22db89ea3a9777ed702abbd) ) +ROM_END + + + +ROM_START( klxyj ) + ROM_REGION( 0x04000, "maincpu", 0 ) + /* Internal rom of IGS027A ARM based MCU */ + ROM_LOAD( "klxyj_igs027a", 0x00000, 0x4000, NO_DUMP ) + + ROM_REGION( 0x80000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "klxyj_104.u16", 0x000000, 0x80000, CRC(8cb9bdc2) SHA1(5a13d0ff6488a938617a9ea89e7cf607539a1f49) ) + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD( "klxyj_text.u24", 0x000000, 0x80000, CRC(22dcebd0) SHA1(0383f017135230d020d12c8c6cc3aeb136fe9106) ) + + ROM_REGION( 0x400000, "gfx2", 0 ) + ROM_LOAD( "a4202.u25", 0x000000, 0x400000, CRC(97a68f85) SHA1(177c8c23fd0d585b24a71359ede005ac9a2e4d4d) ) + + ROM_REGION( 0x200000, "unknown", 0 ) + ROM_LOAD( "w4201.u2", 0x00000, 0x100000, CRC(464f11ab) SHA1(56e45bd31f667fc30387fcd4c940a94819b7ef0f) ) +ROM_END + + +ROM_START( mgfx ) + ROM_REGION( 0x04000, "maincpu", 0 ) + /* Internal rom of IGS027A ARM based MCU */ + ROM_LOAD( "mgfx_igs027a", 0x00000, 0x4000, NO_DUMP ) + + ROM_REGION( 0x80000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "mgfx_101.u10", 0x000000, 0x80000, CRC(897c88a1) SHA1(0f7a7808b9503ff28ad32c0b8e071cb24cff59b1) ) + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD( "mgfx_text.u9", 0x000000, 0x80000, CRC(e41e7768) SHA1(3d0add7c75c23533309e799fd8853c815e6f811c) ) + + ROM_REGION( 0x400000, "gfx2", 0 ) + ROM_LOAD( "mgfx_ani.u17", 0x000000, 0x400000, CRC(9fc75f4d) SHA1(acb600739dcf252a5210e28ec96d749573061b27) ) + + ROM_REGION( 0x200000, "unknown", 0 ) + ROM_LOAD( "mgfx_sp.u14", 0x00000, 0x100000, CRC(9bb28fc8) SHA1(6368753c29607f2d212d68c5cca3f10aa069649b) ) +ROM_END + + +/* + +Big D2 +IGS, 2000 + +PCB Layout +---------- + +IGS PCB NO-0267 +|------------------------------------------| +|M2601.U17 PAL |-------| RESET | +| M2603.U18 | | | +| |IGS027A| | +| | | BATT_3.6V| +| |-------| | +| W24257 | +|J S2602.U14| +|A |-------| | +|M T2604.U9| | | +|M |IGS031 | P2600.U10 | +|A | | M6295 | +| |-------| | +| | +| 22MHz W24257 | +| | +| 8255 VOL | +| DSW1(8) | +| DSW2(8) LM7805 | +| UPC1242H | +|------------------------------------------| +Notes: + W24257 - Winbond 32kx8 SRAM (SOJ28) + Custom ICs - + IGS027A - ARM7/9? based CPU (QFP120, labelled 'J8') + IGS033 - likey GFX processor. Appears to be linked to the 3.6V battery. However, + the battery was dead and the PCB still works, so maybe the battery is not used? (QFP208) + ROMs - + P2600.U10 - 27C4096 EPROM, Main program + M2601.U17 - 32MBit DIP42 MaskROM, read as 27C322, GFX (stamped 'IMAGE') + M2603.U18 - 4MBit DIP40 EPROM, read as 27C4096, GFX (stamped 'IMAGE') + S2602.U14 - 8MBit DIP32 MaskROM, read as MX27C8000, Oki M6295 sound data (stamped 'SPEECH') + T2604.U9 - 4MBit DIP40 MaskROM, read as 27C4096, GFX (stamped 'TEXT') + +*/ + +ROM_START( bigd2 ) + ROM_REGION( 0x04000, "maincpu", 0 ) + /* Internal rom of IGS027A ARM based MCU */ + ROM_LOAD( "bigd2_igs027a", 0x00000, 0x4000, NO_DUMP ) + + ROM_REGION( 0x80000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "p2600.u10", 0x000000, 0x80000, CRC(9ad34135) SHA1(54717753d1296efe49946369fd4a27181f19dbc0) ) + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD( "t2604.u9", 0x000000, 0x80000, CRC(5401a52d) SHA1(05b47a4b39939c1d5904e3fbd5cc56d6ee9b7953) ) + + ROM_REGION( 0x400000, "gfx2", 0 ) + ROM_LOAD( "m2601.u17", 0x000000, 0x400000, CRC(89736e3f) SHA1(6a22e2eb10d2c740cf21640c43a8caf4c72d3be7) ) + ROM_LOAD( "m2603.u18", 0x000000, 0x080000, CRC(fb2e91a8) SHA1(29b2f0ce3749539cbe4cfb5c40b240cc7f6147f1) ) + + ROM_REGION( 0x200000, "unknown", 0 ) + ROM_LOAD( "s2602.u14", 0x00000, 0x100000, CRC(f137028c) SHA1(0e4114222820bca2f7026fa653e2b96a489a0183) ) +ROM_END + + +/*************************************************************************** + + Game Drivers + +***************************************************************************/ + +GAME( 2002, sdwx, 0, igs_majhong, sdwx, sdwx, ROT0, "IGS", "Sheng Dan Wu Xian", GAME_NO_SOUND | GAME_NOT_WORKING ) // aka Christmas 5 Line? +GAME( 200?, sddz, 0, igs_majhong, sdwx, 0, ROT0, "IGS", "Super Dou Di Zhu", GAME_NO_SOUND | GAME_NOT_WORKING ) +GAME( 2000, bigd2,0, igs_majhong, sdwx, 0, ROT0, "IGS", "Big D2", GAME_NO_SOUND | GAME_NOT_WORKING ) +GAME( 200?, lhzb3,0, igs_majhong, sdwx, 0, ROT0, "IGS", "Long Hu Zheng Ba 3", GAME_NO_SOUND | GAME_NOT_WORKING ) // ????????3 +GAME( 200?, lhzb4,0, igs_majhong, sdwx, 0, ROT0, "IGS", "Long Hu Zheng Ba 4", GAME_NO_SOUND | GAME_NOT_WORKING ) // ????????4 +GAME( 200?, klxyj,0, igs_majhong, sdwx, 0, ROT0, "IGS", "Kuai Le Xi You Ji", GAME_NO_SOUND | GAME_NOT_WORKING ) // ?????????? +GAME( 2000, mgfx, 0, igs_majhong, sdwx, 0, ROT0, "IGS", "Man Guan Fu Xing", GAME_NO_SOUND | GAME_NOT_WORKING ) // ???????? |