diff --git a/.gitattributes b/.gitattributes index 2a4fefb3f32..2d7348551f3 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2147,6 +2147,7 @@ src/mame/drivers/tigeroad.c svneol=native#text/plain src/mame/drivers/timelimt.c svneol=native#text/plain src/mame/drivers/timeplt.c svneol=native#text/plain src/mame/drivers/tmaster.c svneol=native#text/plain +src/mame/drivers/tmmjprd.c svneol=native#text/plain src/mame/drivers/tmnt.c svneol=native#text/plain src/mame/drivers/tnzs.c svneol=native#text/plain src/mame/drivers/toaplan1.c svneol=native#text/plain diff --git a/src/mame/drivers/rabbit.c b/src/mame/drivers/rabbit.c index c1749729718..d3a096b1073 100644 --- a/src/mame/drivers/rabbit.c +++ b/src/mame/drivers/rabbit.c @@ -26,12 +26,8 @@ To Do: - raster effects (rabbit only?, see left side of one of the levels in rabbit) - clean up zoom code and make zoom effect more accurate - sound (adpcm of some kind) - -- tilemap.c can't handle tiles with different transpens so we have to invert - the tilegfx, this means we also have to invert the palette write addresses, - low bits of the palette number for 4bpp tiles, the blitter data as it - is read from the gfx roms, and the data read by the rom test. - +- status bar in rabbit is the wrong colour, timing of blitter / interrupts? +- eeprom hookup seems flakey */ @@ -139,13 +135,15 @@ INLINE void get_rabbit_tilemap_info(running_machine *machine, tile_data *tileinf tileno >>=(1+tilesize*2); colour&=0x0f; colour+=0x20; + tileinfo->group = 1; SET_TILE_INFO(6+tilesize,tileno,colour,TILE_FLIPXY(flipxy)); } else { tileno >>=(0+tilesize*2); + //colour&=0x3f; // fixes status bar.. but breaks other stuff colour+=0x200; - colour ^=0xf; // ^0xf because we've inverted palette writes (see notes in driver init) + tileinfo->group = 0; SET_TILE_INFO(4+tilesize,tileno,colour,TILE_FLIPXY(flipxy)); } } @@ -240,11 +238,10 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta tileno = (source[1]&0x0001ffff); colr = (source[1]&0x0ff00000)>>20; - colr ^= 0xf; if(xpos&0x800)xpos-=0x1000; - drawgfx_transpen(rabbit_sprite_bitmap,&rabbit_sprite_clip,gfx,tileno,colr,!xflip/*wrongdecode?*/,yflip,xpos+0x20-8/*-(rabbit_spriteregs[0]&0x00000fff)*/,ypos-24/*-((rabbit_spriteregs[1]&0x0fff0000)>>16)*/,0); + drawgfx_transpen(rabbit_sprite_bitmap,&rabbit_sprite_clip,gfx,tileno,colr,!xflip/*wrongdecode?*/,yflip,xpos+0x20-8/*-(rabbit_spriteregs[0]&0x00000fff)*/,ypos-24/*-((rabbit_spriteregs[1]&0x0fff0000)>>16)*/,15); // drawgfx_transpen(bitmap,cliprect,gfx,tileno,colr,!xflip/*wrongdecode?*/,yflip,xpos+0xa0-8/*-(rabbit_spriteregs[0]&0x00000fff)*/,ypos-24+0x80/*-((rabbit_spriteregs[1]&0x0fff0000)>>16)*/,0); @@ -348,10 +345,17 @@ static VIDEO_START(rabbit) rabbit_tilemap[1] = tilemap_create(machine, get_rabbit_tilemap1_tile_info,tilemap_scan_rows,16, 16, 128,32); rabbit_tilemap[2] = tilemap_create(machine, get_rabbit_tilemap2_tile_info,tilemap_scan_rows,16, 16, 128,32); rabbit_tilemap[3] = tilemap_create(machine, get_rabbit_tilemap3_tile_info,tilemap_scan_rows, 8, 8, 128,32); - tilemap_set_transparent_pen(rabbit_tilemap[0],0x0); - tilemap_set_transparent_pen(rabbit_tilemap[1],0x0); - tilemap_set_transparent_pen(rabbit_tilemap[2],0x0); - tilemap_set_transparent_pen(rabbit_tilemap[3],0x0); + + /* the tilemaps mix 4bpp and 8bbp tiles, we split these into 2 groups, and set a different transpen for each group */ + tilemap_map_pen_to_layer(rabbit_tilemap[0], 0, 15, TILEMAP_PIXEL_TRANSPARENT); + tilemap_map_pen_to_layer(rabbit_tilemap[0], 1, 255, TILEMAP_PIXEL_TRANSPARENT); + tilemap_map_pen_to_layer(rabbit_tilemap[1], 0, 15, TILEMAP_PIXEL_TRANSPARENT); + tilemap_map_pen_to_layer(rabbit_tilemap[1], 1, 255, TILEMAP_PIXEL_TRANSPARENT); + tilemap_map_pen_to_layer(rabbit_tilemap[2], 0, 15, TILEMAP_PIXEL_TRANSPARENT); + tilemap_map_pen_to_layer(rabbit_tilemap[2], 1, 255, TILEMAP_PIXEL_TRANSPARENT); + tilemap_map_pen_to_layer(rabbit_tilemap[3], 0, 15, TILEMAP_PIXEL_TRANSPARENT); + tilemap_map_pen_to_layer(rabbit_tilemap[3], 1, 255, TILEMAP_PIXEL_TRANSPARENT); + rabbit_sprite_bitmap = auto_bitmap_alloc(machine,0x1000,0x1000,video_screen_get_format(machine->primary_screen)); rabbit_sprite_clip.min_x = 0; rabbit_sprite_clip.max_x = 0x1000-1; @@ -451,7 +455,7 @@ static WRITE32_HANDLER( rabbit_paletteram_dword_w ) r = ((paletteram32[offset] & 0x0000ff00) >>8); g = ((paletteram32[offset] & 0x00ff0000) >>16); - palette_set_color(space->machine,offset^0xff,MAKE_RGB(r,g,b)); + palette_set_color(space->machine,offset,MAKE_RGB(r,g,b)); } static READ32_HANDLER( rabbit_tilemap0_r ) @@ -483,12 +487,16 @@ static READ32_HANDLER( randomrabbits ) static WRITE32_HANDLER ( rabbit_rombank_w ) { UINT8 *dataroms = memory_region(space->machine, "gfx1"); -// int bank; -// mame_printf_debug("rabbit rombank %08x\n",data&0x3ff); -// bank = data & 0x3ff; +#if 0 + int bank; + printf("rabbit rombank %08x\n",data); + bank = data & 0x3ff; -// memory_set_bankptr(space->machine, 1,&dataroms[0x40000*(bank&0x3ff)]); + memory_set_bankptr(space->machine, 1,&dataroms[0x40000*(bank&0x3ff)]); +#else memory_set_bankptr(space->machine, 1,&dataroms[0]); +#endif + } /* @@ -606,8 +614,8 @@ static void rabbit_do_blit(running_machine *machine) while(1) { - int blt_commnd = blt_data[blt_source+1]^0xff; - int blt_amount = blt_data[blt_source+0]^0xff; + int blt_commnd = blt_data[blt_source+1]; + int blt_amount = blt_data[blt_source+0]; int blt_value; int loopcount; int writeoffs; @@ -626,7 +634,7 @@ static void rabbit_do_blit(running_machine *machine) if(BLITLOG) mame_printf_debug("blit copy %02x bytes\n", blt_amount); for (loopcount=0;loopcount>0); - r = ((paletteram32[offset] & 0x0000ff00) >>8); - g = ((paletteram32[offset] & 0x00ff0000) >>16); - - palette_set_color(space->machine,(offset^0xff)+0x2000,MAKE_RGB(r,g,b)); -} - -static ADDRESS_MAP_START( tmmjprd_map, ADDRESS_SPACE_PROGRAM, 32 ) - AM_RANGE(0x000000, 0x1fffff) AM_ROM - AM_RANGE(0x200010, 0x200013) AM_READ(randomrabbits) // gfx chip status? - AM_RANGE(0x200980, 0x200983) AM_READ(randomrabbits) // sound chip status? - AM_RANGE(0x200984, 0x200987) AM_READ(randomrabbits) // sound chip status? - /* check these are used .. */ -// AM_RANGE(0x200010, 0x200013) AM_WRITEONLY AM_BASE( &rabbit_viewregs0 ) - AM_RANGE(0x200100, 0x200117) AM_WRITEONLY AM_BASE( &rabbit_tilemap_regs[0] ) // tilemap regs1 - AM_RANGE(0x200120, 0x200137) AM_WRITEONLY AM_BASE( &rabbit_tilemap_regs[1] ) // tilemap regs2 - AM_RANGE(0x200140, 0x200157) AM_WRITEONLY AM_BASE( &rabbit_tilemap_regs[2] ) // tilemap regs3 - AM_RANGE(0x200160, 0x200177) AM_WRITEONLY AM_BASE( &rabbit_tilemap_regs[3] ) // tilemap regs4 - AM_RANGE(0x200200, 0x20021b) AM_WRITEONLY AM_BASE( &rabbit_spriteregs ) // sprregs? -// AM_RANGE(0x200300, 0x200303) AM_WRITE(rabbit_rombank_w) // used during rom testing, rombank/area select + something else? -// AM_RANGE(0x200400, 0x200413) AM_WRITEONLY AM_BASE( &rabbit_viewregs6 ) // some global controls? (brightness etc.?) -// AM_RANGE(0x200500, 0x200503) AM_WRITEONLY AM_BASE( &rabbit_viewregs7 ) -// AM_RANGE(0x200700, 0x20070f) AM_WRITE(rabbit_blitter_w) AM_BASE( &rabbit_blitterregs ) -// AM_RANGE(0x200800, 0x20080f) AM_WRITEONLY AM_BASE( &rabbit_viewregs9 ) // never changes? -// AM_RANGE(0x200900, 0x20098f) AM_WRITE(rabbit_audio_w) - /* hmm */ -// AM_RANGE(0x279700, 0x279713) AM_WRITEONLY AM_BASE( &rabbit_viewregs10 ) - /* tilemaps */ - AM_RANGE(0x280000, 0x283fff) AM_READWRITE(rabbit_tilemap0_r,rabbit_tilemap0_w) - AM_RANGE(0x284000, 0x287fff) AM_READWRITE(rabbit_tilemap1_r,rabbit_tilemap1_w) - AM_RANGE(0x288000, 0x28bfff) AM_READWRITE(rabbit_tilemap2_r,rabbit_tilemap2_w) - AM_RANGE(0x28c000, 0x28ffff) AM_READWRITE(rabbit_tilemap3_r,rabbit_tilemap3_w) - /* ?? is palette ram shared with sprites in this case or just a different map */ - AM_RANGE(0x290000, 0x29bfff) AM_RAM AM_BASE(&rabbit_spriteram) - AM_RANGE(0x29c000, 0x29ffff) AM_RAM_WRITE(tmmjprd_paletteram_dword_w) AM_BASE(&paletteram32) - - AM_RANGE(0x400000, 0x400003) AM_READ_PORT("INPUTS") AM_WRITE(rabbit_eeprom_write) - AM_RANGE(0xf00000, 0xffffff) AM_RAM -ADDRESS_MAP_END - static INPUT_PORTS_START( rabbit ) PORT_START("INPUTS") @@ -835,59 +796,6 @@ static INPUT_PORTS_START( rabbit ) PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) INPUT_PORTS_END -static INPUT_PORTS_START( tmmjprd ) - PORT_START("INPUTS") - PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_UNKNOWN ) // unlabeled in input test - PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_SERVICE( 0x00000020, IP_ACTIVE_LOW ) - PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x00000080, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(eeprom_bit_r, NULL) // as per code at 778 - PORT_BIT( 0x00000100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x00000200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x00000400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x00000800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x00001000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0x00002000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) - PORT_BIT( 0x00004000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) - PORT_BIT( 0x00008000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) - - PORT_BIT( 0x00010000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x00020000, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x00040000, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x00080000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x00100000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x00200000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_BIT( 0x00400000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) - PORT_BIT( 0x00800000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) - PORT_DIPNAME( 0x01000000, 0x01000000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x01000000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) - PORT_DIPNAME( 0x02000000, 0x02000000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02000000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) - PORT_DIPNAME( 0x04000000, 0x04000000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04000000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) - PORT_DIPNAME( 0x08000000, 0x08000000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08000000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) - PORT_DIPNAME( 0x10000000, 0x10000000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10000000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) - PORT_DIPNAME( 0x20000000, 0x20000000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20000000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) - PORT_DIPNAME( 0x40000000, 0x40000000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40000000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) - PORT_DIPNAME( 0x80000000, 0x80000000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80000000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00000000, DEF_STR( On ) ) -INPUT_PORTS_END - static const gfx_layout rabbit_sprite_8x8x4_layout = { @@ -980,6 +888,7 @@ static const gfx_layout rabbit_16x16x8_layout = }; + static GFXDECODE_START( rabbit ) /* this seems to be sprites */ GFXDECODE_ENTRY( "gfx1", 0, rabbit_sprite_8x8x4_layout, 0x0, 0x1000 ) @@ -1024,21 +933,10 @@ static MACHINE_DRIVER_START( rabbit ) MDRV_CPU_ADD("maincpu",M68EC020,24000000) /* 24 MHz */ MDRV_CPU_PROGRAM_MAP(rabbit_map) MDRV_CPU_VBLANK_INT_HACK(rabbit_interrupts,262) - /* (rabbit) */ -/* lev 1 : 0x64 : 0000 027c - - lev 2 : 0x68 : 0000 3106 - unused? - lev 3 : 0x6c : 0000 3106 - unused? - lev 4 : 0x70 : 0000 0268 - - lev 5 : 0x74 : 0000 0278 - - lev 6 : 0x78 : 0000 0204 - - lev 7 : 0x7c : 0000 3106 - unused? -*/ MDRV_NVRAM_HANDLER(93C46) MDRV_GFXDECODE(rabbit) - - MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) @@ -1049,6 +947,7 @@ static MACHINE_DRIVER_START( rabbit ) // MDRV_SCREEN_VISIBLE_AREA(0*8, 20*16-1, 32*16, 48*16-1) MDRV_PALETTE_LENGTH(0x4000) + MDRV_PALETTE_INIT( all_black ) // the status bar palette doesn't get transfered (or our colour select is wrong).. more obvious when it's black than in 'MAME default' colours MDRV_VIDEO_START(rabbit) MDRV_VIDEO_UPDATE(rabbit) @@ -1056,103 +955,6 @@ MACHINE_DRIVER_END -static TILE_GET_INFO( get_tmmjprd_tilemap0_tile_info ) -{ - get_rabbit_tilemap_info(machine,tileinfo,tile_index,0,0); -} - -static TILE_GET_INFO( get_tmmjprd_tilemap1_tile_info ) -{ - get_rabbit_tilemap_info(machine,tileinfo,tile_index,1,0); -} - -static TILE_GET_INFO( get_tmmjprd_tilemap2_tile_info ) -{ - get_rabbit_tilemap_info(machine,tileinfo,tile_index,2,0); -} - -static TILE_GET_INFO( get_tmmjprd_tilemap3_tile_info ) -{ - get_rabbit_tilemap_info(machine,tileinfo,tile_index,3,0); -} - -static VIDEO_START(tmmjprd) -{ - /* NOTE tilemap sizes are different.. game can also select between 16x16 and 8x8.. it NEEDS this to work */ - - /* the tilemaps are bigger than the regions the cpu can see, need to allocate the ram here */ - /* or maybe not for this game/hw .... */ - rabbit_tilemap_ram[0] = auto_alloc_array_clear(machine, UINT32, 0x20000/4); - rabbit_tilemap_ram[1] = auto_alloc_array_clear(machine, UINT32, 0x20000/4); - rabbit_tilemap_ram[2] = auto_alloc_array_clear(machine, UINT32, 0x20000/4); - rabbit_tilemap_ram[3] = auto_alloc_array_clear(machine, UINT32, 0x20000/4); - - rabbit_tilemap[0] = tilemap_create(machine, get_tmmjprd_tilemap0_tile_info,tilemap_scan_rows, 8, 8, 64, 64); - rabbit_tilemap[1] = tilemap_create(machine, get_tmmjprd_tilemap1_tile_info,tilemap_scan_rows,16, 16, 64, 64); - rabbit_tilemap[2] = tilemap_create(machine, get_tmmjprd_tilemap2_tile_info,tilemap_scan_rows,16, 16, 64, 64); - rabbit_tilemap[3] = tilemap_create(machine, get_tmmjprd_tilemap3_tile_info,tilemap_scan_rows,16, 16, 64, 64); - tilemap_set_transparent_pen(rabbit_tilemap[0],0x0); - tilemap_set_transparent_pen(rabbit_tilemap[1],0x0); - tilemap_set_transparent_pen(rabbit_tilemap[2],0x0); - tilemap_set_transparent_pen(rabbit_tilemap[3],0x0); - rabbit_sprite_bitmap = auto_bitmap_alloc(machine,0x1000,0x1000,video_screen_get_format(machine->primary_screen)); - rabbit_sprite_clip.min_x = 0; - rabbit_sprite_clip.max_x = 0x1000-1; - rabbit_sprite_clip.min_y = 0; - rabbit_sprite_clip.max_y = 0x1000-1; -} - - -static VIDEO_UPDATE( tmmjprd ) -{ - tilemap_set_scrolly(rabbit_tilemap[3], 0, rabbit_tilemap_regs[3][2] >> 20); - tilemap_set_scrolly(rabbit_tilemap[2], 0, rabbit_tilemap_regs[2][2] >> 20); - tilemap_set_scrolly(rabbit_tilemap[1], 0, rabbit_tilemap_regs[1][2] >> 20); - tilemap_set_scrolly(rabbit_tilemap[0], 0, rabbit_tilemap_regs[0][2] >> 20); - -// popmessage("%08x %08x", rabbit_viewregs0[0], rabbit_viewregs0[1]); -// popmessage("%08x %08x %08x %08x %08x %08x", rabbit_tilemap_regs[0][0],rabbit_tilemap_regs[0][1],rabbit_tilemap_regs[0][2],rabbit_tilemap_regs[0][3],rabbit_tilemap_regs[0][4],rabbit_tilemap_regs[0][5]); -// popmessage("%08x %08x %08x %08x %08x %08x", rabbit_tilemap_regs[1][0],rabbit_tilemap_regs[1][1],rabbit_tilemap_regs[1][2],rabbit_tilemap_regs[1][3],rabbit_tilemap_regs[1][4],rabbit_tilemap_regs[1][5]); -// popmessage("%08x %08x %08x %08x %08x %08x", rabbit_tilemap_regs[2][0],rabbit_tilemap_regs[2][1],rabbit_tilemap_regs[2][2],rabbit_tilemap_regs[2][3],rabbit_tilemap_regs[2][4],rabbit_tilemap_regs[2][5]); -// popmessage("%08x %08x %08x %08x %08x %08x", rabbit_tilemap_regs[3][0],rabbit_tilemap_regs[3][1],rabbit_tilemap_regs[3][2],rabbit_tilemap_regs[3][3],rabbit_tilemap_regs[3][4],rabbit_tilemap_regs[3][5]); -// popmessage("%08x %08x %08x %08x %08x %08x %08x", rabbit_spriteregs[0],rabbit_spriteregs[1],rabbit_spriteregs[2],rabbit_spriteregs[3],rabbit_spriteregs[4],rabbit_spriteregs[5], rabbit_spriteregs[6]); -// popmessage("%08x %08x %08x %08x %08x", rabbit_viewregs6[0],rabbit_viewregs6[1],rabbit_viewregs6[2],rabbit_viewregs6[3],rabbit_viewregs6[4]); -// popmessage("%08x", rabbit_viewregs7[0]); -// popmessage("%08x %08x %08x %08x", rabbit_blitterregs[0],rabbit_blitterregs[1],rabbit_blitterregs[2],rabbit_blitterregs[3]); -// popmessage("%08x %08x %08x %08x", rabbit_viewregs9[0],rabbit_viewregs9[1],rabbit_viewregs9[2],rabbit_viewregs9[3]); - -// popmessage("%08x %08x %08x %08x %08x", rabbit_viewregs10[0],rabbit_viewregs10[1],rabbit_viewregs10[2],rabbit_viewregs10[3],rabbit_viewregs10[4]); - - bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine)); - tilemap_draw(bitmap,cliprect,rabbit_tilemap[3],0,0); - tilemap_draw(bitmap,cliprect,rabbit_tilemap[1],0,0); //same as 3? - tilemap_draw(bitmap,cliprect,rabbit_tilemap[2],0,0); - tilemap_draw(bitmap,cliprect,rabbit_tilemap[0],0,0); - - return 0; -} - -static INTERRUPT_GEN( tmmjprd_interrupt ) -{ - int intlevel = 0; - - if (cpu_getiloops(device)==0) - intlevel = 5; - else - intlevel = 3; - - cpu_set_input_line(device, intlevel, HOLD_LINE); -} - -static MACHINE_DRIVER_START( tmmjprd ) - MDRV_IMPORT_FROM(rabbit) - MDRV_CPU_MODIFY("maincpu") - MDRV_CPU_PROGRAM_MAP(tmmjprd_map) - MDRV_CPU_VBLANK_INT_HACK(tmmjprd_interrupt,2) - - MDRV_VIDEO_START(tmmjprd) - MDRV_VIDEO_UPDATE(tmmjprd) -MACHINE_DRIVER_END static DRIVER_INIT(rabbit) @@ -1163,13 +965,6 @@ static DRIVER_INIT(rabbit) /* 5 and 1 are also valid and might be raster related */ } -static DRIVER_INIT(tmmjprd) -{ - rabbit_banking = 0; - rabbit_vblirqlevel = 5; - rabbit_bltirqlevel = 3; // actually palette related? - /* other irqs aren't valid */ -} ROM_START( rabbit ) @@ -1179,25 +974,28 @@ ROM_START( rabbit ) ROM_LOAD32_BYTE( "jpr2.2", 0x000002, 0x080000, CRC(fa3fd91a) SHA1(ac0e658af30b37b752ede833b44ff5423b93bdb1) ) ROM_LOAD32_BYTE( "jpr3.3", 0x000003, 0x080000, CRC(d22727ca) SHA1(8415cb2d3864b11fe5623ac65f2e28fd62c61bd1) ) -// ROM_REGION( 0x9000000, "gfx1", ROMREGION_ERASE ) /* Other Roms probably accessable by cpu / blitter, order is no doubt wrong */ - /* this seems to be how it tests them? weird ... */ -// ROM_LOAD32_WORD( "jfv0.00", 0x0000000, 0x400000, CRC(b2a4d3d3) SHA1(0ab71d82a37ff94442b91712a28d3470619ba575) ) -// ROM_LOAD32_WORD( "jfv1.01", 0x0000002, 0x400000, CRC(83f3926e) SHA1(b1c479e675d35fc08c9a7648ff40348a24654e7e) ) -// ROM_LOAD32_WORD( "jsn0.11", 0x0800002, 0x400000, CRC(e1f726e8) SHA1(598d75f3ff9e43ec8ce6131ed37f4345bf2f2d8e) ) -// ROM_LOAD32_WORD( "jfv2.02", 0x2000000, 0x400000, CRC(b264bfb5) SHA1(8fafedb6af74150465b1773e80aef0edc3da4678) ) -// ROM_LOAD32_WORD( "jfv3.03", 0x2000002, 0x400000, CRC(3e1a9be2) SHA1(2082a4ae8cda84cec5ea0fc08753db387bb70d41) ) -// ROM_LOAD16_BYTE( "jbg0.40", 0x4000001, 0x200000, CRC(89662944) SHA1(ca916ba38480fa588af19fc9682603f5195ad6c7) ) // how should this one be, it won't pass it. -// ROM_LOAD16_BYTE( "jbg1.50", 0x6000000, 0x200000, CRC(1fc7f6e0) SHA1(b36062d2a9683683ffffd3003d5244a185f53280) ) -// ROM_LOAD16_BYTE( "jbg2.60", 0x8000001, 0x200000, CRC(aee265fc) SHA1(ec420ab30b9b5141162223fc1fbf663ad9f211e6) ) - ROM_REGION( 0x1000000, "gfx1", ROMREGION_INVERT ) /* Sprite Roms (and Blitter Data) */ +// the rom test tests as if things were mapped like this (video chip / blitter space?) +#if 0 + ROM_REGION( 0x9000000, "test", ROMREGION_ERASE ) + ROM_LOAD32_WORD( "jfv0.00", 0x0000002, 0x400000, CRC(b2a4d3d3) SHA1(0ab71d82a37ff94442b91712a28d3470619ba575) ) // sprite gfx + ROM_LOAD32_WORD( "jfv1.01", 0x0000000, 0x400000, CRC(83f3926e) SHA1(b1c479e675d35fc08c9a7648ff40348a24654e7e) ) // sprite gfx + ROM_LOAD32_WORD( "jsn0.11", 0x0800002, 0x400000, CRC(e1f726e8) SHA1(598d75f3ff9e43ec8ce6131ed37f4345bf2f2d8e) ) // sound + ROM_LOAD32_WORD( "jfv2.02", 0x2000002, 0x400000, CRC(b264bfb5) SHA1(8fafedb6af74150465b1773e80aef0edc3da4678) ) // sprite gfx + ROM_LOAD32_WORD( "jfv3.03", 0x2000000, 0x400000, CRC(3e1a9be2) SHA1(2082a4ae8cda84cec5ea0fc08753db387bb70d41) ) // sprite gfx + ROM_LOAD16_BYTE( "jbg0.40", 0x4000001, 0x200000, CRC(89662944) SHA1(ca916ba38480fa588af19fc9682603f5195ad6c7) ) // bg gfx (fails check?) + ROM_LOAD16_BYTE( "jbg1.50", 0x6000000, 0x200000, CRC(1fc7f6e0) SHA1(b36062d2a9683683ffffd3003d5244a185f53280) ) // bg gfx + ROM_LOAD16_BYTE( "jbg2.60", 0x8000001, 0x200000, CRC(aee265fc) SHA1(ec420ab30b9b5141162223fc1fbf663ad9f211e6) ) // bg gfx +#endif + + ROM_REGION( 0x1000000, "gfx1", 0 ) /* Sprite Roms (and Blitter Data) */ ROM_LOAD32_WORD( "jfv0.00", 0x0000002, 0x400000, CRC(b2a4d3d3) SHA1(0ab71d82a37ff94442b91712a28d3470619ba575) ) ROM_LOAD32_WORD( "jfv1.01", 0x0000000, 0x400000, CRC(83f3926e) SHA1(b1c479e675d35fc08c9a7648ff40348a24654e7e) ) ROM_LOAD32_WORD( "jfv2.02", 0x0800002, 0x400000, CRC(b264bfb5) SHA1(8fafedb6af74150465b1773e80aef0edc3da4678) ) ROM_LOAD32_WORD( "jfv3.03", 0x0800000, 0x400000, CRC(3e1a9be2) SHA1(2082a4ae8cda84cec5ea0fc08753db387bb70d41) ) - ROM_REGION( 0x600000, "gfx2", ROMREGION_INVERT ) /* BG Roms */ + ROM_REGION( 0x600000, "gfx2", 0 ) /* BG Roms */ ROM_LOAD( "jbg0.40", 0x000000, 0x200000, CRC(89662944) SHA1(ca916ba38480fa588af19fc9682603f5195ad6c7) ) ROM_LOAD( "jbg1.50", 0x200000, 0x200000, CRC(1fc7f6e0) SHA1(b36062d2a9683683ffffd3003d5244a185f53280) ) ROM_LOAD( "jbg2.60", 0x400000, 0x200000, CRC(aee265fc) SHA1(ec420ab30b9b5141162223fc1fbf663ad9f211e6) ) @@ -1207,69 +1005,5 @@ ROM_START( rabbit ) ROM_END -ROM_START( tmmjprd ) - ROM_REGION( 0x200000, "maincpu", 0 ) /* 68020 Code - doesn't seem to dsam quite right, bitswap? */ - ROM_LOAD32_BYTE( "p00.bin", 0x000000, 0x080000, CRC(a1efd960) SHA1(7f41ab58de32777bccbfe28e6e5a1f2dca35bb90) ) - ROM_LOAD32_BYTE( "p01.bin", 0x000001, 0x080000, CRC(9c325374) SHA1(1ddf1c292fc1bcf4dcefb5d4aa3abdeb1489c020) ) - ROM_LOAD32_BYTE( "p02.bin", 0x000002, 0x080000, CRC(729a5f12) SHA1(615704d36afdceb4b1ff2e5dc34856e614181e16) ) - ROM_LOAD32_BYTE( "p03.bin", 0x000003, 0x080000, CRC(595615ab) SHA1(aca746d74aa6e7e856eb5c9b740d884778743b27) ) - - ROM_REGION( 0x2000000, "gfx1", ROMREGION_INVERT ) /* Sprite Roms */ - ROM_LOAD16_WORD_SWAP( "00.bin", 0x1000000, 0x400000, CRC(303e91a1) SHA1(c29a22061ab8af8b72e0e6bdb36915a0cb5b2a5c) ) - ROM_LOAD16_WORD_SWAP( "01.bin", 0x1400000, 0x400000, CRC(3371b775) SHA1(131dd850bd01dac52fa82c41948d900c4833db3c) ) - ROM_LOAD16_WORD_SWAP( "10.bin", 0x1800000, 0x400000, CRC(5ab6af41) SHA1(e29cee23c84e17dd8dabd2ec71e622c25418646e) ) - ROM_LOAD16_WORD_SWAP( "11.bin", 0x1c00000, 0x400000, CRC(1d1fd633) SHA1(655be5b72bb70a90d23e49512ca84d9978d87b0b) ) - ROM_LOAD16_WORD_SWAP( "02.bin", 0x0000000, 0x400000, CRC(4c1e13b9) SHA1(d244eb74f755350604824670db58ab2a56a856cb) ) - ROM_LOAD16_WORD_SWAP( "03.bin", 0x0400000, 0x400000, CRC(9cf86152) SHA1(e27e0d9befb12ad5c2acf547afe80d1c7921a4d1) ) - ROM_LOAD16_WORD_SWAP( "12.bin", 0x0800000, 0x400000, CRC(5b8bb9d6) SHA1(ee93774077d8a2ddcf70869a9c2f4961219a85b4) ) - ROM_LOAD16_WORD_SWAP( "13.bin", 0x0c00000, 0x400000, CRC(d950df0a) SHA1(3b109341ab4ad87005113fb481b5d1ed9a82f50f) ) - - ROM_REGION( 0x2000000, "gfx2", ROMREGION_INVERT ) /* BG Roms */ - ROM_LOAD32_WORD( "40.bin", 0x0000000, 0x400000, CRC(8bedc606) SHA1(7159c8b86e8d7d5ae202c239638483ccdc7dfc25) ) - ROM_LOAD32_WORD( "41.bin", 0x0000002, 0x400000, CRC(e19713dd) SHA1(a8f1b716913f2e391abf277e5bf0e9986cc75898) ) - ROM_LOAD32_WORD( "50.bin", 0x0800000, 0x400000, CRC(85ca9ce9) SHA1(c5a7270507522e11e9485196be325508846fda90) ) - ROM_LOAD32_WORD( "51.bin", 0x0800002, 0x400000, CRC(6ba1d2ec) SHA1(bbe7309b33f213c8cb9ab7adb3221ea79f89e8b0) ) - ROM_LOAD32_WORD( "60.bin", 0x1000000, 0x400000, CRC(7cb132e0) SHA1(f9c366befec46c7f6e307111a62eede029202b16) ) - ROM_LOAD32_WORD( "61.bin", 0x1000002, 0x400000, CRC(caa7e854) SHA1(592867e001abd0781f83a5124bf9aa62ad1aa7f3) ) - ROM_LOAD32_WORD( "70.bin", 0x1800000, 0x400000, CRC(9b737ae4) SHA1(0b62a90d42ace81ee32db073a57731a55a32f989) ) - ROM_LOAD32_WORD( "71.bin", 0x1800002, 0x400000, CRC(189f694e) SHA1(ad0799d4aadade51be38d824910d299257a758a3) ) - - ROM_REGION( 0x800000, "unknown", 0 ) /* Sound Roms? */ - ROM_LOAD16_BYTE( "21.bin", 0x0000001, 0x400000, CRC(bb5fa8da) SHA1(620e609b3e2524d06d58844625f186fd4682205f)) -ROM_END - -ROM_START( tmpdoki ) - ROM_REGION( 0x200000, "maincpu", 0 ) /* 68020 Code - doesn't seem to dsam quite right, bitswap? */ - ROM_LOAD32_BYTE( "u70_p0.bin", 0x000000, 0x080000, CRC(c0ee1942) SHA1(0cebc3e326d84e200c2399208d810c0ac767dbb4) ) - ROM_LOAD32_BYTE( "u72_p1.bin", 0x000001, 0x080000, CRC(3c1bc6f6) SHA1(7b3719d4bb52e45db793564b0ccee067fd7af4e4) ) - ROM_LOAD32_BYTE( "u71_p2.bin", 0x000002, 0x080000, CRC(f2091cce) SHA1(88c6822eb1546e914c2644264367e71fb2a82be3) ) - ROM_LOAD32_BYTE( "u73_p3.bin", 0x000003, 0x080000, CRC(cca8ef13) SHA1(d5b077f3d8d38262e69d058a7d61e4563332abce) ) - - ROM_REGION( 0x2000000, "gfx1", ROMREGION_INVERT ) /* Sprite Roms */ - ROM_LOAD16_WORD_SWAP( "00.bin", 0x1000000, 0x400000, CRC(303e91a1) SHA1(c29a22061ab8af8b72e0e6bdb36915a0cb5b2a5c) ) - ROM_LOAD16_WORD_SWAP( "01.bin", 0x1400000, 0x400000, CRC(3371b775) SHA1(131dd850bd01dac52fa82c41948d900c4833db3c) ) - ROM_LOAD16_WORD_SWAP( "10.bin", 0x1800000, 0x400000, CRC(5ab6af41) SHA1(e29cee23c84e17dd8dabd2ec71e622c25418646e) ) - ROM_LOAD16_WORD_SWAP( "11.bin", 0x1c00000, 0x400000, CRC(1d1fd633) SHA1(655be5b72bb70a90d23e49512ca84d9978d87b0b) ) - ROM_LOAD16_WORD_SWAP( "02.bin", 0x0000000, 0x400000, CRC(4c1e13b9) SHA1(d244eb74f755350604824670db58ab2a56a856cb) ) - ROM_LOAD16_WORD_SWAP( "03.bin", 0x0400000, 0x400000, CRC(9cf86152) SHA1(e27e0d9befb12ad5c2acf547afe80d1c7921a4d1) ) - ROM_LOAD16_WORD_SWAP( "12.bin", 0x0800000, 0x400000, CRC(5b8bb9d6) SHA1(ee93774077d8a2ddcf70869a9c2f4961219a85b4) ) - ROM_LOAD16_WORD_SWAP( "13.bin", 0x0c00000, 0x400000, CRC(d950df0a) SHA1(3b109341ab4ad87005113fb481b5d1ed9a82f50f) ) - - ROM_REGION( 0x2000000, "gfx2", ROMREGION_INVERT ) /* BG Roms */ - ROM_LOAD32_WORD( "40.bin", 0x0000000, 0x400000, CRC(8bedc606) SHA1(7159c8b86e8d7d5ae202c239638483ccdc7dfc25) ) - ROM_LOAD32_WORD( "41.bin", 0x0000002, 0x400000, CRC(e19713dd) SHA1(a8f1b716913f2e391abf277e5bf0e9986cc75898) ) - ROM_LOAD32_WORD( "50.bin", 0x0800000, 0x400000, CRC(85ca9ce9) SHA1(c5a7270507522e11e9485196be325508846fda90) ) - ROM_LOAD32_WORD( "51.bin", 0x0800002, 0x400000, CRC(6ba1d2ec) SHA1(bbe7309b33f213c8cb9ab7adb3221ea79f89e8b0) ) - ROM_LOAD32_WORD( "60.bin", 0x1000000, 0x400000, CRC(7cb132e0) SHA1(f9c366befec46c7f6e307111a62eede029202b16) ) - ROM_LOAD32_WORD( "61.bin", 0x1000002, 0x400000, CRC(caa7e854) SHA1(592867e001abd0781f83a5124bf9aa62ad1aa7f3) ) - ROM_LOAD32_WORD( "70.bin", 0x1800000, 0x400000, CRC(9b737ae4) SHA1(0b62a90d42ace81ee32db073a57731a55a32f989) ) - ROM_LOAD32_WORD( "71.bin", 0x1800002, 0x400000, CRC(189f694e) SHA1(ad0799d4aadade51be38d824910d299257a758a3) ) - - ROM_REGION( 0x800000, "unknown", 0 ) /* Sound Roms? */ - ROM_LOAD16_BYTE( "21.bin", 0x0000001, 0x400000, CRC(bb5fa8da) SHA1(620e609b3e2524d06d58844625f186fd4682205f)) -ROM_END - GAME( 1997, rabbit, 0, rabbit, rabbit, rabbit, ROT0, "Electronic Arts / Aorn", "Rabbit", GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND ) // somewhat playable -GAME( 1997, tmmjprd, 0, tmmjprd, tmmjprd, tmmjprd, ROT0, "Media / Sonnet", "Tokimeki Mahjong Paradise - Dear My Love", GAME_NOT_WORKING | GAME_NO_SOUND ) -GAME( 1998, tmpdoki, tmmjprd, tmmjprd, tmmjprd, tmmjprd, ROT0, "Media / Sonnet", "Tokimeki Mahjong Paradise - Doki Doki Hen", GAME_NOT_WORKING | GAME_NO_SOUND ) diff --git a/src/mame/drivers/tmmjprd.c b/src/mame/drivers/tmmjprd.c new file mode 100644 index 00000000000..6d9dad4242b --- /dev/null +++ b/src/mame/drivers/tmmjprd.c @@ -0,0 +1,758 @@ +/* tmmjprd.c + + - split from rabbit.c (it uses the same GFX chip, but is otherwise a different PCB, and until the methods + of configuring the graphic chip are understood it's easier to work on them here) + + - in 16x16 tile mode, the offset into tileram doesn't neccessarily align to 16x16 tiles! This makes using the + tilemap system excessively difficult, as it expects predecoded tiles which simply isn't possible here. + This is used for the girls in the intro at least, they specify 16x16 tiles on non 16x16 boundaries. + (basically the physical tile rom addressing doesn't change between modes even if the data type does) + (handling this in the tilemap system is very messy, might just be best with custom renderer) + + - Rom Test not hooked up (can read the gfx roms via a BANK + - should hook this up as a test to help determine if the tmpdoki roms should really be different + + - EEPROM might be wrong, pressing what might be coin3 causes the game to hang + (see input ports) + + - Video has a 'blitter' but it isn't used by these games, it is used by Rabbit + + - tmpdoki only ouputs video to a single screen, can dual screen be turned on in service mode? + + - sound (see rabbit.c for preliminary details, not copied here) + + - sprites from one screen are overlapping on the other, probably a way to limit them to a single screen + + - priority is wrong. + +*/ + + +#include "driver.h" +#include "cpu/m68000/m68000.h" +#include "deprecat.h" +#include "machine/eeprom.h" +#include "rendlay.h" + + +static UINT32 *tmmjprd_tilemap_regs[4]; +static UINT32 *tmmjprd_spriteregs; +//static UINT32 *tmmjprd_blitterregs; + +static UINT32 *tmmjprd_tilemap_ram[4]; + +static UINT32 *tmmjprd_spriteram; + +static WRITE32_HANDLER( tmmjprd_tilemap0_w ) +{ + COMBINE_DATA(&tmmjprd_tilemap_ram[0][offset]); +} + + + +static WRITE32_HANDLER( tmmjprd_tilemap1_w ) +{ + COMBINE_DATA(&tmmjprd_tilemap_ram[1][offset]); +} + +static WRITE32_HANDLER( tmmjprd_tilemap2_w ) +{ + COMBINE_DATA(&tmmjprd_tilemap_ram[2][offset]); +} + +static WRITE32_HANDLER( tmmjprd_tilemap3_w ) +{ + COMBINE_DATA(&tmmjprd_tilemap_ram[3][offset]); +} + +static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int xoffs ) +{ + int xpos,ypos,tileno,xflip,yflip, colr; + const gfx_element *gfx = machine->gfx[0]; +// int todraw = (tmmjprd_spriteregs[5]&0x0fff0000)>>16; // how many sprites to draw (start/end reg..) what is the other half? + + +// UINT32 *source = (tmmjprd_spriteram+ (todraw*2))-2; +// UINT32 *finish = tmmjprd_spriteram; + + UINT32 *source = tmmjprd_spriteram+(0xc000/4)-2; + UINT32 *finish = tmmjprd_spriteram; + + + while( source>finish ) + { + + xpos = (source[0]&0x00000fff); + ypos = (source[0]&0x0fff0000)>>16; + + xflip = (source[0]&0x00008000)>>15; + yflip = (source[0]&0x00004000)>>14; + colr = (source[1]&0x0ff00000)>>15; + + + tileno = (source[1]&0x0003ffff); + + // the tiles in this are 8bpp, it can probably do the funky sub-tile addressing for them too tho.. + tileno >>=1; + + colr = (source[1]&0x0ff00000)>>20; + + if(xpos&0x800)xpos-=0x1000; + + // 255 for 8bpp + drawgfx_transpen(bitmap,cliprect,gfx,tileno,colr,!xflip,yflip,(xpos-xoffs)-8,(ypos)-8,255); + + source-=2; + } +} + +static void ttmjprd_draw_tile(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int x,int y,int sizex,int sizey, UINT32 tiledata, UINT8* rom) +{ + /* note, it's tile address _NOT_ tile number, 'sub-tile' access is possible, hence using the custom rendering */ + int tileaddr = (tiledata&0x000fffff)>>0; + int colour = (tiledata&0x0ff00000)>>20; + int depth = (tiledata&0x10000000)>>28; + //int flipxy = (tiledata&0x60000000)>>29; + // 0x80000000 (blank tile like metro.c?) + int drawx,drawy; + int count; + + // entirely off right + if (x > cliprect->max_x) + return; + + // entirely off left + if ((x+sizex) < cliprect->min_x) + return; + + // entirely off bottom + if (y > cliprect->max_y) + return; + + // entirely off bottom + if ((y+sizey) < cliprect->min_y) + return; + + count = 0; + for (drawy=y;drawymax_x) && (drawx > cliprect->min_x) && (drawy < cliprect->max_y) && (drawy > cliprect->min_y)) + { + dat = (rom[(tileaddr*32)+count] & 0xf0)>>4; + if (dat!=15) + { + //dat += (colour<<8); + dst = BITMAP_ADDR16(bitmap, drawy, drawx); + dst[0] = dat; + } + } + drawx++; + if ((drawx < cliprect->max_x) && (drawx > cliprect->min_x) && (drawy < cliprect->max_y) && (drawy > cliprect->min_y)) + { + dat = (rom[(tileaddr*32)+count] & 0x0f); + if (dat!=15) + { + //dat += (colour<<8); + dst = BITMAP_ADDR16(bitmap, drawy, drawx); + dst[0] = dat; + } + } + + count++; + } + else + { + if ((drawx < cliprect->max_x) && (drawx > cliprect->min_x) && (drawy < cliprect->max_y) && (drawy > cliprect->min_y)) + { + dat = (rom[(tileaddr*32)+count] & 0xff); + if (dat!=255) + { + dat += (colour<<8); + dst = BITMAP_ADDR16(bitmap, drawy, drawx); + dst[0] = dat; + } + } + count++; + } + } + } +} + +static void ttmjprd_draw_tilemap(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, UINT32*tileram, UINT32*tileregs, UINT8*rom ) +{ + int y,x; + int count; + + int tilemap_sizex = 64; + int tilemap_sizey = 64; + + int tile_sizex; + int tile_sizey; + + int scrolly, scrollx; + + if (tileregs[0]&0x00400000) + { + tile_sizex = 16; + tile_sizey = 16; + } + else + { + tile_sizex = 8; + tile_sizey = 8; + } + + scrolly = (tileregs[2] & 0xfff00000) >> 20; + scrollx = (tileregs[2] & 0x0000fff0) >> 4; + + count = 0; + for (y=0;ymachine,"gfx2"); + const device_config *left_screen = devtag_get_device(screen->machine, "lscreen"); + const device_config *right_screen = devtag_get_device(screen->machine, "rscreen"); + + bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine)); + + if (screen == left_screen) + { + ttmjprd_draw_tilemap( screen->machine, bitmap, cliprect, tmmjprd_tilemap_ram[3], tmmjprd_tilemap_regs[3], gfxroms ); + draw_sprites(screen->machine,bitmap,cliprect, 320); + ttmjprd_draw_tilemap( screen->machine, bitmap, cliprect, tmmjprd_tilemap_ram[2], tmmjprd_tilemap_regs[2], gfxroms ); + } + if (screen == right_screen) + { + ttmjprd_draw_tilemap( screen->machine, bitmap, cliprect, tmmjprd_tilemap_ram[1], tmmjprd_tilemap_regs[1], gfxroms ); + draw_sprites(screen->machine,bitmap,cliprect, 0); + ttmjprd_draw_tilemap( screen->machine, bitmap, cliprect, tmmjprd_tilemap_ram[0], tmmjprd_tilemap_regs[0], gfxroms ); + } + + /* + popmessage("%08x %08x %08x %08x %08x %08x", + tmmjprd_tilemap_regs[2][0], + tmmjprd_tilemap_regs[2][1], + tmmjprd_tilemap_regs[2][2], + tmmjprd_tilemap_regs[2][3], + tmmjprd_tilemap_regs[2][4], + tmmjprd_tilemap_regs[2][5]); + */ + +/* + popmessage("%08x %08x %08x %08x %08x %08x %08x", + tmmjprd_spriteregs[0], + tmmjprd_spriteregs[1], + tmmjprd_spriteregs[2], + tmmjprd_spriteregs[3], + tmmjprd_spriteregs[4], + tmmjprd_spriteregs[5], + tmmjprd_spriteregs[6]); +*/ + + return 0; +} + +static VIDEO_START(tmmjprd) +{ + /* the tilemaps are bigger than the regions the cpu can see, need to allocate the ram here */ + /* or maybe not for this game/hw .... */ + tmmjprd_tilemap_ram[0] = auto_alloc_array_clear(machine, UINT32, 0x8000); + tmmjprd_tilemap_ram[1] = auto_alloc_array_clear(machine, UINT32, 0x8000); + tmmjprd_tilemap_ram[2] = auto_alloc_array_clear(machine, UINT32, 0x8000); + tmmjprd_tilemap_ram[3] = auto_alloc_array_clear(machine, UINT32, 0x8000); +} + +static READ32_HANDLER( tmmjprd_tilemap0_r ) +{ + return tmmjprd_tilemap_ram[0][offset]; +} + +static READ32_HANDLER( tmmjprd_tilemap1_r ) +{ + return tmmjprd_tilemap_ram[1][offset]; +} + +static READ32_HANDLER( tmmjprd_tilemap2_r ) +{ + return tmmjprd_tilemap_ram[2][offset]; +} + +static READ32_HANDLER( tmmjprd_tilemap3_r ) +{ + return tmmjprd_tilemap_ram[3][offset]; +} + +static READ32_HANDLER( randomtmmjprds ) +{ + return 0x0000;//mame_rand(space->machine); +} + + +#define BLITCMDLOG 0 +#define BLITLOG 0 + +#if 0 +static TIMER_CALLBACK( tmmjprd_blit_done ) +{ + cputag_set_input_line(machine, "maincpu", 3, HOLD_LINE); +} + +static void tmmjprd_do_blit(running_machine *machine) +{ + UINT8 *blt_data = memory_region(machine, "gfx1"); + int blt_source = (tmmjprd_blitterregs[0]&0x000fffff)>>0; + int blt_column = (tmmjprd_blitterregs[1]&0x00ff0000)>>16; + int blt_line = (tmmjprd_blitterregs[1]&0x000000ff); + int blt_tilemp = (tmmjprd_blitterregs[2]&0x0000e000)>>13; + int blt_oddflg = (tmmjprd_blitterregs[2]&0x00000001)>>0; + int mask,shift; + + + if(BLITCMDLOG) mame_printf_debug("BLIT command %08x %08x %08x\n", tmmjprd_blitterregs[0], tmmjprd_blitterregs[1], tmmjprd_blitterregs[2]); + + if (blt_oddflg&1) + { + mask = 0xffff0000; + shift= 0; + } + else + { + mask = 0x0000ffff; + shift= 16; + } + + blt_oddflg>>=1; /* blt_oddflg is now in dword offsets*/ + blt_oddflg+=0x80*blt_line; + + blt_source<<=1; /* blitsource is in word offsets */ + + while(1) + { + int blt_commnd = blt_data[blt_source+1]; + int blt_amount = blt_data[blt_source+0]; + int blt_value; + int loopcount; + int writeoffs; + blt_source+=2; + + switch (blt_commnd) + { + case 0x00: /* copy nn bytes */ + if (!blt_amount) + { + if(BLITLOG) mame_printf_debug("end of blit list\n"); + timer_set(machine, ATTOTIME_IN_USEC(500), NULL,0,tmmjprd_blit_done); + return; + } + + if(BLITLOG) mame_printf_debug("blit copy %02x bytes\n", blt_amount); + for (loopcount=0;loopcount>16; /* --CC---- */ + blt_oddflg+=128; + break; + + default: /* unknown / illegal */ + if(BLITLOG) mame_printf_debug("uknown blit command %02x\n",blt_commnd); + break; + } + } + +} + + + +static WRITE32_HANDLER( tmmjprd_blitter_w ) +{ + COMBINE_DATA(&tmmjprd_blitterregs[offset]); + + if (offset == 0x0c/4) + { + tmmjprd_do_blit(space->machine); + } +} +#endif + +static UINT8 mux_data; + +static WRITE32_HANDLER( tmmjprd_eeprom_write ) +{ + // don't disturb the EEPROM if we're not actually writing to it + // (in particular, data & 0x100 here with mask = ffff00ff looks to be the watchdog) + if (mem_mask == 0x000000ff) + mux_data = (~data & 0xff); + + if (mem_mask == 0xff000000) + { + // latch the bit + eeprom_write_bit(data & 0x01000000); + + // reset line asserted: reset. + eeprom_set_cs_line((data & 0x04000000) ? CLEAR_LINE : ASSERT_LINE ); + + // clock line asserted: write latch or select next bit to read + eeprom_set_clock_line((data & 0x02000000) ? ASSERT_LINE : CLEAR_LINE ); + } +} + +static READ32_HANDLER( tmmjprd_mux_r ) +{ + static UINT8 system_in; + + system_in = input_port_read(space->machine, "SYSTEM"); + + switch(mux_data) + { + case 0x01: return (system_in & 0xff) | (input_port_read(space->machine, "PL1_1")<<8) | (input_port_read(space->machine, "PL2_1")<<16) | 0xff000000; + case 0x02: return (system_in & 0xff) | (input_port_read(space->machine, "PL1_2")<<8) | (input_port_read(space->machine, "PL2_2")<<16) | 0xff000000; + case 0x04: return (system_in & 0xff) | (input_port_read(space->machine, "PL1_3")<<8) | (input_port_read(space->machine, "PL2_3")<<16) | 0xff000000; + case 0x08: return (system_in & 0xff) | (input_port_read(space->machine, "PL1_4")<<8) | (input_port_read(space->machine, "PL2_4")<<16) | 0xff000000; + case 0x10: return (system_in & 0xff) | (input_port_read(space->machine, "PL1_5")<<8) | (input_port_read(space->machine, "PL2_5")<<16) | 0xff000000; + } + + return (system_in & 0xff) | 0xffffff00; +} + +static INPUT_PORTS_START( tmmjprd ) + PORT_START("SYSTEM") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_NAME("Left Screen Coin A") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_NAME("Left Screen Coin B") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) // might actually be coin 3 button.. but hangs the game? (eeprom issue?) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_NAME("Right Screen Coin A") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN4 ) PORT_NAME("Right Screen Coin B") // might actually be service 1 + PORT_SERVICE( 0x20, IP_ACTIVE_LOW ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(eeprom_bit_r, NULL) // CHECK! + + PORT_START("PL1_1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_PLAYER(1) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_PLAYER(1) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("PL1_2") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_PLAYER(1) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_PLAYER(1) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) //bet button + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("PL1_3") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_PLAYER(1) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_PLAYER(1) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("PL1_4") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_PLAYER(1) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_PLAYER(1) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("PL1_5") + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("PL2_1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("PL2_2") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) //bet button + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("PL2_3") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("PL2_4") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_PLAYER(2) + PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("PL2_5") + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) +INPUT_PORTS_END + + +/* tmmjprd has a different memory map */ + +static WRITE32_HANDLER( tmmjprd_paletteram_dword_w ) +{ + int r,g,b; + COMBINE_DATA(&paletteram32[offset]); + + b = ((paletteram32[offset] & 0x000000ff) >>0); + r = ((paletteram32[offset] & 0x0000ff00) >>8); + g = ((paletteram32[offset] & 0x00ff0000) >>16); + + palette_set_color(space->machine,offset,MAKE_RGB(r,g,b)); +} + +static ADDRESS_MAP_START( tmmjprd_map, ADDRESS_SPACE_PROGRAM, 32 ) + AM_RANGE(0x000000, 0x1fffff) AM_ROM + AM_RANGE(0x200010, 0x200013) AM_READ(randomtmmjprds) // gfx chip status? + AM_RANGE(0x200980, 0x200983) AM_READ(randomtmmjprds) // sound chip status? + AM_RANGE(0x200984, 0x200987) AM_READ(randomtmmjprds) // sound chip status? + /* check these are used .. */ +// AM_RANGE(0x200010, 0x200013) AM_WRITEONLY AM_BASE( &tmmjprd_viewregs0 ) + AM_RANGE(0x200100, 0x200117) AM_WRITEONLY AM_BASE( &tmmjprd_tilemap_regs[0] ) // tilemap regs1 + AM_RANGE(0x200120, 0x200137) AM_WRITEONLY AM_BASE( &tmmjprd_tilemap_regs[1] ) // tilemap regs2 + AM_RANGE(0x200140, 0x200157) AM_WRITEONLY AM_BASE( &tmmjprd_tilemap_regs[2] ) // tilemap regs3 + AM_RANGE(0x200160, 0x200177) AM_WRITEONLY AM_BASE( &tmmjprd_tilemap_regs[3] ) // tilemap regs4 + AM_RANGE(0x200200, 0x20021b) AM_WRITEONLY AM_BASE( &tmmjprd_spriteregs ) // sprregs? +// AM_RANGE(0x200300, 0x200303) AM_WRITE(tmmjprd_rombank_w) // used during rom testing, rombank/area select + something else? +// AM_RANGE(0x200400, 0x200413) AM_WRITEONLY AM_BASE( &tmmjprd_viewregs6 ) // some global controls? (brightness etc.?) +// AM_RANGE(0x200500, 0x200503) AM_WRITEONLY AM_BASE( &tmmjprd_viewregs7 ) +// AM_RANGE(0x200700, 0x20070f) AM_WRITE(tmmjprd_blitter_w) AM_BASE( &tmmjprd_blitterregs ) +// AM_RANGE(0x200800, 0x20080f) AM_WRITEONLY AM_BASE( &tmmjprd_viewregs9 ) // never changes? +// AM_RANGE(0x200900, 0x20098f) AM_WRITE(tmmjprd_audio_w) + /* hmm */ +// AM_RANGE(0x279700, 0x279713) AM_WRITEONLY AM_BASE( &tmmjprd_viewregs10 ) + /* tilemaps */ + AM_RANGE(0x280000, 0x283fff) AM_READWRITE(tmmjprd_tilemap0_r,tmmjprd_tilemap0_w) + AM_RANGE(0x284000, 0x287fff) AM_READWRITE(tmmjprd_tilemap1_r,tmmjprd_tilemap1_w) + AM_RANGE(0x288000, 0x28bfff) AM_READWRITE(tmmjprd_tilemap2_r,tmmjprd_tilemap2_w) + AM_RANGE(0x28c000, 0x28ffff) AM_READWRITE(tmmjprd_tilemap3_r,tmmjprd_tilemap3_w) + /* ?? is palette ram shared with sprites in this case or just a different map */ + AM_RANGE(0x290000, 0x29bfff) AM_RAM AM_BASE(&tmmjprd_spriteram) + AM_RANGE(0x29c000, 0x29ffff) AM_RAM_WRITE(tmmjprd_paletteram_dword_w) AM_BASE(&paletteram32) + + AM_RANGE(0x400000, 0x400003) AM_READ(tmmjprd_mux_r) AM_WRITE(tmmjprd_eeprom_write) + AM_RANGE(0xf00000, 0xffffff) AM_RAM +ADDRESS_MAP_END + + + +static const gfx_layout rabbit_sprite_16x16x8_layout = +{ + 16,16, + RGN_FRAC(1,2), + 8, + { 0,1,2,3,4,5,6,7 }, + { + 40, 32, RGN_FRAC(1,2)+40,RGN_FRAC(1,2)+32, + 56, 48,RGN_FRAC(1,2)+56, RGN_FRAC(1,2)+48, + 8, 0,RGN_FRAC(1,2)+8 , RGN_FRAC(1,2)+0, + 24, 16,RGN_FRAC(1,2)+24, RGN_FRAC(1,2)+16, + }, + + + { 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64,8*64,9*64,10*64,11*64,12*64,13*64,14*64,15*64 }, + 16*64 +}; + + +// gfx decoding is ugly.. 16*16 tiles can start at varying different offsets.. +static GFXDECODE_START( tmmjprd ) + /* this seems to be sprites */ +// GFXDECODE_ENTRY( "gfx1", 0, tmmjprd_sprite_8x8x4_layout, 0x0, 0x1000 ) +// GFXDECODE_ENTRY( "gfx1", 0, rabbit_sprite_16x16x4_layout, 0x0, 0x1000 ) +// GFXDECODE_ENTRY( "gfx1", 0, tmmjprd_sprite_8x8x8_layout, 0x0, 0x1000 ) + GFXDECODE_ENTRY( "gfx1", 0, rabbit_sprite_16x16x8_layout, 0x0, 0x1000 ) +GFXDECODE_END + + +static INTERRUPT_GEN( tmmjprd_interrupt ) +{ + int intlevel = 0; + + if (cpu_getiloops(device)==0) + intlevel = 5; + else + intlevel = 3; + + cpu_set_input_line(device, intlevel, HOLD_LINE); +} + +static MACHINE_DRIVER_START( tmmjprd ) + MDRV_CPU_ADD("maincpu",M68EC020,24000000) /* 24 MHz */ + MDRV_CPU_PROGRAM_MAP(tmmjprd_map) + MDRV_CPU_VBLANK_INT_HACK(tmmjprd_interrupt,2) + MDRV_NVRAM_HANDLER(93C46) + + MDRV_GFXDECODE(tmmjprd) + +// MDRV_SCREEN_ADD("screen", RASTER) +// MDRV_SCREEN_REFRESH_RATE(60) +// MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) +// MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) +// MDRV_SCREEN_SIZE(64*16, 64*16) +// MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 28*8-1) + MDRV_PALETTE_LENGTH(0x4000) + + + MDRV_DEFAULT_LAYOUT(layout_dualhsxs) + + MDRV_SCREEN_ADD("lscreen", RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MDRV_SCREEN_SIZE(64*16, 64*16) + MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 28*8-1) + //MDRV_SCREEN_VISIBLE_AREA(0*8, 64*16-1, 0*8, 64*16-1) + + MDRV_SCREEN_ADD("rscreen", RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MDRV_SCREEN_SIZE(64*16, 64*16) + MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 28*8-1) + //MDRV_SCREEN_VISIBLE_AREA(0*8, 64*16-1, 0*8, 64*16-1) + + + MDRV_VIDEO_START(tmmjprd) + MDRV_VIDEO_UPDATE(tmmjprd) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( tmpdoki ) + MDRV_IMPORT_FROM(tmmjprd) + MDRV_DEFAULT_LAYOUT(layout_horizont) +MACHINE_DRIVER_END + + + + +ROM_START( tmmjprd ) + ROM_REGION( 0x200000, "maincpu", 0 ) + ROM_LOAD32_BYTE( "p00.bin", 0x000000, 0x080000, CRC(a1efd960) SHA1(7f41ab58de32777bccbfe28e6e5a1f2dca35bb90) ) + ROM_LOAD32_BYTE( "p01.bin", 0x000001, 0x080000, CRC(9c325374) SHA1(1ddf1c292fc1bcf4dcefb5d4aa3abdeb1489c020) ) + ROM_LOAD32_BYTE( "p02.bin", 0x000002, 0x080000, CRC(729a5f12) SHA1(615704d36afdceb4b1ff2e5dc34856e614181e16) ) + ROM_LOAD32_BYTE( "p03.bin", 0x000003, 0x080000, CRC(595615ab) SHA1(aca746d74aa6e7e856eb5c9b740d884778743b27) ) + + ROM_REGION( 0x2000000, "gfx1", 0 ) /* Sprite Roms */ + ROM_LOAD32_WORD( "00.bin", 0x1000002, 0x400000, CRC(303e91a1) SHA1(c29a22061ab8af8b72e0e6bdb36915a0cb5b2a5c) ) + ROM_LOAD32_WORD( "01.bin", 0x0000002, 0x400000, CRC(3371b775) SHA1(131dd850bd01dac52fa82c41948d900c4833db3c) ) + ROM_LOAD32_WORD( "02.bin", 0x1000000, 0x400000, CRC(4c1e13b9) SHA1(d244eb74f755350604824670db58ab2a56a856cb) ) + ROM_LOAD32_WORD( "03.bin", 0x0000000, 0x400000, CRC(9cf86152) SHA1(e27e0d9befb12ad5c2acf547afe80d1c7921a4d1) ) + ROM_LOAD32_WORD( "10.bin", 0x1800002, 0x400000, CRC(5ab6af41) SHA1(e29cee23c84e17dd8dabd2ec71e622c25418646e) ) + ROM_LOAD32_WORD( "11.bin", 0x0800002, 0x400000, CRC(1d1fd633) SHA1(655be5b72bb70a90d23e49512ca84d9978d87b0b) ) + ROM_LOAD32_WORD( "12.bin", 0x1800000, 0x400000, CRC(5b8bb9d6) SHA1(ee93774077d8a2ddcf70869a9c2f4961219a85b4) ) + ROM_LOAD32_WORD( "13.bin", 0x0800000, 0x400000, CRC(d950df0a) SHA1(3b109341ab4ad87005113fb481b5d1ed9a82f50f) ) + + ROM_REGION( 0x2000000, "gfx2", 0 ) /* BG Roms */ + ROM_LOAD32_WORD( "40.bin", 0x0000000, 0x400000, CRC(8bedc606) SHA1(7159c8b86e8d7d5ae202c239638483ccdc7dfc25) ) + ROM_LOAD32_WORD( "41.bin", 0x0000002, 0x400000, CRC(e19713dd) SHA1(a8f1b716913f2e391abf277e5bf0e9986cc75898) ) + ROM_LOAD32_WORD( "50.bin", 0x0800000, 0x400000, CRC(85ca9ce9) SHA1(c5a7270507522e11e9485196be325508846fda90) ) + ROM_LOAD32_WORD( "51.bin", 0x0800002, 0x400000, CRC(6ba1d2ec) SHA1(bbe7309b33f213c8cb9ab7adb3221ea79f89e8b0) ) + ROM_LOAD32_WORD( "60.bin", 0x1000000, 0x400000, CRC(7cb132e0) SHA1(f9c366befec46c7f6e307111a62eede029202b16) ) + ROM_LOAD32_WORD( "61.bin", 0x1000002, 0x400000, CRC(caa7e854) SHA1(592867e001abd0781f83a5124bf9aa62ad1aa7f3) ) + ROM_LOAD32_WORD( "70.bin", 0x1800000, 0x400000, CRC(9b737ae4) SHA1(0b62a90d42ace81ee32db073a57731a55a32f989) ) + ROM_LOAD32_WORD( "71.bin", 0x1800002, 0x400000, CRC(189f694e) SHA1(ad0799d4aadade51be38d824910d299257a758a3) ) + + ROM_REGION( 0x800000, "unknown", 0 ) /* Sound Roms? */ + ROM_LOAD16_BYTE( "21.bin", 0x0000001, 0x400000, CRC(bb5fa8da) SHA1(620e609b3e2524d06d58844625f186fd4682205f)) +ROM_END + +// single screen? +ROM_START( tmpdoki ) + ROM_REGION( 0x200000, "maincpu", 0 ) + ROM_LOAD32_BYTE( "u70_p0.bin", 0x000000, 0x080000, CRC(c0ee1942) SHA1(0cebc3e326d84e200c2399208d810c0ac767dbb4) ) + ROM_LOAD32_BYTE( "u72_p1.bin", 0x000001, 0x080000, CRC(3c1bc6f6) SHA1(7b3719d4bb52e45db793564b0ccee067fd7af4e4) ) + ROM_LOAD32_BYTE( "u71_p2.bin", 0x000002, 0x080000, CRC(f2091cce) SHA1(88c6822eb1546e914c2644264367e71fb2a82be3) ) + ROM_LOAD32_BYTE( "u73_p3.bin", 0x000003, 0x080000, CRC(cca8ef13) SHA1(d5b077f3d8d38262e69d058a7d61e4563332abce) ) + + ROM_REGION( 0x2000000, "gfx1", 0 ) /* Sprite Roms */ + ROM_LOAD32_WORD( "00.bin", 0x1000002, 0x400000, CRC(303e91a1) SHA1(c29a22061ab8af8b72e0e6bdb36915a0cb5b2a5c) ) + ROM_LOAD32_WORD( "01.bin", 0x0000002, 0x400000, CRC(3371b775) SHA1(131dd850bd01dac52fa82c41948d900c4833db3c) ) + ROM_LOAD32_WORD( "02.bin", 0x1000000, 0x400000, CRC(4c1e13b9) SHA1(d244eb74f755350604824670db58ab2a56a856cb) ) + ROM_LOAD32_WORD( "03.bin", 0x0000000, 0x400000, CRC(9cf86152) SHA1(e27e0d9befb12ad5c2acf547afe80d1c7921a4d1) ) + ROM_LOAD32_WORD( "10.bin", 0x1800002, 0x400000, CRC(5ab6af41) SHA1(e29cee23c84e17dd8dabd2ec71e622c25418646e) ) + ROM_LOAD32_WORD( "11.bin", 0x0800002, 0x400000, CRC(1d1fd633) SHA1(655be5b72bb70a90d23e49512ca84d9978d87b0b) ) + ROM_LOAD32_WORD( "12.bin", 0x1800000, 0x400000, CRC(5b8bb9d6) SHA1(ee93774077d8a2ddcf70869a9c2f4961219a85b4) ) + ROM_LOAD32_WORD( "13.bin", 0x0800000, 0x400000, CRC(d950df0a) SHA1(3b109341ab4ad87005113fb481b5d1ed9a82f50f) ) + + ROM_REGION( 0x2000000, "gfx2", 0 ) /* BG Roms */ + ROM_LOAD32_WORD( "40.bin", 0x0000000, 0x400000, CRC(8bedc606) SHA1(7159c8b86e8d7d5ae202c239638483ccdc7dfc25) ) + ROM_LOAD32_WORD( "41.bin", 0x0000002, 0x400000, CRC(e19713dd) SHA1(a8f1b716913f2e391abf277e5bf0e9986cc75898) ) + ROM_LOAD32_WORD( "50.bin", 0x0800000, 0x400000, CRC(85ca9ce9) SHA1(c5a7270507522e11e9485196be325508846fda90) ) + ROM_LOAD32_WORD( "51.bin", 0x0800002, 0x400000, CRC(6ba1d2ec) SHA1(bbe7309b33f213c8cb9ab7adb3221ea79f89e8b0) ) + + /* I think these should be different, the game attempts to draw tiles from here for the title logo, but + the tiles are empty. Once the ROM check is hooked up this will be easier to confirm */ + ROM_LOAD32_WORD( "60.bin", 0x1000000, 0x400000, BAD_DUMP CRC(7cb132e0) SHA1(f9c366befec46c7f6e307111a62eede029202b16) ) + ROM_LOAD32_WORD( "61.bin", 0x1000002, 0x400000, BAD_DUMP CRC(caa7e854) SHA1(592867e001abd0781f83a5124bf9aa62ad1aa7f3) ) + ROM_LOAD32_WORD( "70.bin", 0x1800000, 0x400000, BAD_DUMP CRC(9b737ae4) SHA1(0b62a90d42ace81ee32db073a57731a55a32f989) ) + ROM_LOAD32_WORD( "71.bin", 0x1800002, 0x400000, BAD_DUMP CRC(189f694e) SHA1(ad0799d4aadade51be38d824910d299257a758a3) ) + + ROM_REGION( 0x800000, "unknown", 0 ) /* Sound Roms? */ + ROM_LOAD16_BYTE( "21.bin", 0x0000001, 0x400000, CRC(bb5fa8da) SHA1(620e609b3e2524d06d58844625f186fd4682205f)) +ROM_END + + +GAME( 1997, tmmjprd, 0, tmmjprd, tmmjprd, 0, ROT0, "Media / Sonnet", "Tokimeki Mahjong Paradise - Dear My Love", GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND ) +GAME( 1998, tmpdoki, tmmjprd, tmpdoki, tmmjprd, 0, ROT0, "Media / Sonnet", "Tokimeki Mahjong Paradise - Doki Doki Hen", GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND ) // missing gfx due to wrong roms? diff --git a/src/mame/mame.mak b/src/mame/mame.mak index 7c244c967fa..62143927743 100644 --- a/src/mame/mame.mak +++ b/src/mame/mame.mak @@ -869,6 +869,7 @@ $(MAMEOBJ)/metro.a: \ $(DRIVERS)/hyprduel.o $(VIDEO)/hyprduel.o \ $(DRIVERS)/metro.o $(VIDEO)/metro.o \ $(DRIVERS)/rabbit.o \ + $(DRIVERS)/tmmjprd.o \ $(MAMEOBJ)/midcoin.a: \ $(DRIVERS)/wallc.o \