Implemented reels in Treasure Island (Subsino), same as goldstar.c [David Haywood]

This commit is contained in:
Angelo Salese 2010-01-31 23:17:47 +00:00
parent 3158642e9b
commit c1ca415fa2

View File

@ -137,7 +137,15 @@
static UINT8 *videoram; static UINT8 *videoram;
static UINT8 *colorram; static UINT8 *colorram;
static tilemap_t *tmap; static tilemap_t *tmap;
static tilemap_t *reel1_tilemap, *reel2_tilemap, *reel3_tilemap;
static int tiles_offset; static int tiles_offset;
static UINT8* reel1_ram;
static UINT8* reel2_ram;
static UINT8* reel3_ram;
static UINT8* reel1_scroll;
static UINT8* reel2_scroll;
static UINT8* reel3_scroll;
static WRITE8_HANDLER( subsino_tiles_offset_w ) static WRITE8_HANDLER( subsino_tiles_offset_w )
{ {
@ -167,6 +175,8 @@ static TILE_GET_INFO( get_tile_info )
SET_TILE_INFO(0, code, color, 0); SET_TILE_INFO(0, code, color, 0);
} }
static VIDEO_START( subsino ) static VIDEO_START( subsino )
{ {
tmap = tilemap_create( machine, get_tile_info, tilemap_scan_rows, 8,8, 0x40,0x20 ); tmap = tilemap_create( machine, get_tile_info, tilemap_scan_rows, 8,8, 0x40,0x20 );
@ -174,6 +184,76 @@ static VIDEO_START( subsino )
tiles_offset = 0; tiles_offset = 0;
} }
WRITE8_HANDLER( subsino_reel1_ram_w )
{
reel1_ram[offset] = data;
tilemap_mark_tile_dirty(reel1_tilemap,offset);
}
static TILE_GET_INFO( get_subsino_reel1_tile_info )
{
int code = reel1_ram[tile_index];
SET_TILE_INFO(
1,
code,
0,
0);
}
WRITE8_HANDLER( subsino_reel2_ram_w )
{
reel2_ram[offset] = data;
tilemap_mark_tile_dirty(reel2_tilemap,offset);
}
static TILE_GET_INFO( get_subsino_reel2_tile_info )
{
int code = reel2_ram[tile_index];
SET_TILE_INFO(
1,
code,
0,
0);
}
WRITE8_HANDLER( subsino_reel3_ram_w )
{
reel3_ram[offset] = data;
tilemap_mark_tile_dirty(reel3_tilemap,offset);
}
static TILE_GET_INFO( get_subsino_reel3_tile_info )
{
int code = reel3_ram[tile_index];
SET_TILE_INFO(
1,
code,
0,
0);
}
static VIDEO_START( subsino_reels )
{
VIDEO_START_CALL( subsino );
reel1_tilemap = tilemap_create(machine,get_subsino_reel1_tile_info,tilemap_scan_rows,8,32, 64, 8);
reel2_tilemap = tilemap_create(machine,get_subsino_reel2_tile_info,tilemap_scan_rows,8,32, 64, 8);
reel3_tilemap = tilemap_create(machine,get_subsino_reel3_tile_info,tilemap_scan_rows,8,32, 64, 8);
tilemap_set_scroll_cols(reel1_tilemap, 64);
tilemap_set_scroll_cols(reel2_tilemap, 64);
tilemap_set_scroll_cols(reel3_tilemap, 64);
}
static VIDEO_UPDATE( subsino ) static VIDEO_UPDATE( subsino )
{ {
bitmap_fill(bitmap,cliprect,0); bitmap_fill(bitmap,cliprect,0);
@ -181,6 +261,31 @@ static VIDEO_UPDATE( subsino )
return 0; return 0;
} }
// are these hardcoded, or registers?
static const rectangle visible1 = { 0*8, (14+48)*8-1, 4*8, (4+7)*8-1 };
static const rectangle visible2 = { 0*8, (14+48)*8-1, 10*8, (10+7)*8-1 };
static const rectangle visible3 = { 0*8, (14+48)*8-1, 18*8, (18+7)*8-1 };
static VIDEO_UPDATE( subsino_reels )
{
int i;
bitmap_fill(bitmap,cliprect,0);
for (i= 0;i < 64;i++)
{
tilemap_set_scrolly(reel1_tilemap, i, reel1_scroll[i]);
tilemap_set_scrolly(reel2_tilemap, i, reel2_scroll[i]);
tilemap_set_scrolly(reel3_tilemap, i, reel3_scroll[i]);
}
tilemap_draw(bitmap, &visible1, reel1_tilemap, 0, 0);
tilemap_draw(bitmap, &visible2, reel2_tilemap, 0, 0);
tilemap_draw(bitmap, &visible3, reel3_tilemap, 0, 0);
tilemap_draw(bitmap,cliprect, tmap, 0, 0);
return 0;
}
static PALETTE_INIT( subsino_2proms ) static PALETTE_INIT( subsino_2proms )
{ {
int i,r,g,b,val; int i,r,g,b,val;
@ -586,7 +691,13 @@ static ADDRESS_MAP_START( tisub_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE( 0x00000, 0x0bfff ) AM_ROM //overlap unmapped regions AM_RANGE( 0x00000, 0x0bfff ) AM_ROM //overlap unmapped regions
AM_RANGE( 0x10000, 0x13fff ) AM_ROM AM_RANGE( 0x10000, 0x13fff ) AM_ROM
AM_RANGE( 0x15000, 0x15dff ) AM_RAM AM_RANGE( 0x150c0, 0x150ff ) AM_RAM AM_BASE(&reel3_scroll)
AM_RANGE( 0x15140, 0x1517f ) AM_RAM AM_BASE(&reel2_scroll)
AM_RANGE( 0x15180, 0x151bf ) AM_RAM AM_BASE(&reel1_scroll)
AM_RANGE( 0x15800, 0x159ff ) AM_RAM_WRITE(subsino_reel1_ram_w) AM_BASE(&reel1_ram)
AM_RANGE( 0x15a00, 0x15bff ) AM_RAM_WRITE(subsino_reel2_ram_w) AM_BASE(&reel2_ram)
AM_RANGE( 0x15c00, 0x15dff ) AM_RAM_WRITE(subsino_reel3_ram_w) AM_BASE(&reel3_ram)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( subsino_iomap, ADDRESS_SPACE_IO, 8 ) static ADDRESS_MAP_START( subsino_iomap, ADDRESS_SPACE_IO, 8 )
@ -1417,10 +1528,10 @@ static MACHINE_DRIVER_START( tisub )
MDRV_GFXDECODE(subsino_depth4_reels) MDRV_GFXDECODE(subsino_depth4_reels)
MDRV_PALETTE_LENGTH(0x100) MDRV_PALETTE_LENGTH(0x100)
MDRV_PALETTE_INIT(subsino_2proms) MDRV_PALETTE_INIT(subsino_3proms)
MDRV_VIDEO_START(subsino) MDRV_VIDEO_START(subsino_reels)
MDRV_VIDEO_UPDATE(subsino) MDRV_VIDEO_UPDATE(subsino_reels)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")
@ -1860,7 +1971,7 @@ ROM_END
/************************ /************************
Treasure Island Treasure Island
-- this probably has an extra layer at least -- this has an extra layer for the reels, exactly the same as goldstar.c
************************/ ************************/
ROM_START( tisub ) ROM_START( tisub )
@ -1880,9 +1991,10 @@ ROM_START( tisub )
ROM_LOAD( "rom_3.bin", 0x4000, 0x4000, CRC(2ad82222) SHA1(68780b9528393b28eaa2f90501efb5a8c39bed63) ) ROM_LOAD( "rom_3.bin", 0x4000, 0x4000, CRC(2ad82222) SHA1(68780b9528393b28eaa2f90501efb5a8c39bed63) )
ROM_IGNORE(0x4000) ROM_IGNORE(0x4000)
ROM_REGION( 0x200, "proms", 0 ) ROM_REGION( 0x300, "proms", 0 )
ROM_LOAD( "prom1", 0x000, 0x100, NO_DUMP ) ROM_LOAD( "n82s129n.u39", 0x000, 0x100, NO_DUMP )
ROM_LOAD( "prom2", 0x100, 0x100, NO_DUMP ) ROM_LOAD( "n82s129n.u40", 0x100, 0x100, NO_DUMP )
ROM_LOAD( "n82s129n.u41", 0x200, 0x100, NO_DUMP )
ROM_END ROM_END
@ -2066,7 +2178,7 @@ static DRIVER_INIT( tisub )
/* YEAR NAME PARENT MACHINE INPUT INIT ROT COMPANY FULLNAME FLAGS LAYOUT */ /* YEAR NAME PARENT MACHINE INPUT INIT ROT COMPANY FULLNAME FLAGS LAYOUT */
GAMEL( 1990, victor21, 0, victor21, victor21, victor21, ROT0, "Subsino / Buffy", "Victor 21", 0, layout_victor21 ) GAMEL( 1990, victor21, 0, victor21, victor21, victor21, ROT0, "Subsino / Buffy", "Victor 21", 0, layout_victor21 )
GAMEL( 1991, victor5, 0, victor5, victor5, victor5, ROT0, "Subsino", "Victor 5", 0, layout_victor5 ) // board sticker says Victor 5, in-game says G.E.A with no manufacturer info? GAMEL( 1991, victor5, 0, victor5, victor5, victor5, ROT0, "Subsino", "Victor 5", 0, layout_victor5 ) // board sticker says Victor 5, in-game says G.E.A with no manufacturer info?
GAME ( 1991, tisub, 0, tisub, crsbingo, tisub, ROT0, "Subsino", "Treasure Island (Subsino)", GAME_NOT_WORKING ) GAME ( 1991, tisub, sharkpy, tisub, crsbingo, tisub, ROT0, "Subsino", "Treasure Island (Subsino)", GAME_NOT_WORKING )
GAMEL( 1991, crsbingo, 0, crsbingo, crsbingo, crsbingo, ROT0, "Subsino", "Poker Carnival", 0, layout_crsbingo ) // alt version of Cross Bingo? GAMEL( 1991, crsbingo, 0, crsbingo, crsbingo, crsbingo, ROT0, "Subsino", "Poker Carnival", 0, layout_crsbingo ) // alt version of Cross Bingo?
GAMEL( 1996, sharkpy, 0, sharkpy, sharkpy, sharkpy, ROT0, "Subsino", "Shark Party (Italy, v1.3)", 0, layout_sharkpy ) // missing POST messages? GAMEL( 1996, sharkpy, 0, sharkpy, sharkpy, sharkpy, ROT0, "Subsino", "Shark Party (Italy, v1.3)", 0, layout_sharkpy ) // missing POST messages?
GAMEL( 1996, sharkpya, sharkpy, sharkpy, sharkpy, sharkpy, ROT0, "Subsino", "Shark Party (Italy, v1.6)", 0, layout_sharkpy ) // missing POST messages? GAMEL( 1996, sharkpya, sharkpy, sharkpy, sharkpy, sharkpy, ROT0, "Subsino", "Shark Party (Italy, v1.6)", 0, layout_sharkpy ) // missing POST messages?