Kusayakyuu: fixed color prom hook-up, tilemap color offsets and tilemap flipping [Angelo Salese]

This commit is contained in:
Angelo Salese 2009-11-30 19:09:20 +00:00
parent b5c3081f3e
commit 6caf4d0608
2 changed files with 36 additions and 20 deletions

View File

@ -5,7 +5,6 @@ Kusayakyuu (Sandlot Baseball)
driver by Tomasz Slanina
TODO:
- colors
- correct communication between main and the sound cpu
- DAC
- sprite glitches (sometimes) .. missing vertical flip flag?
@ -120,7 +119,7 @@ static ADDRESS_MAP_START( maincpu_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xa807, 0xa807) AM_READNOP /* watchdog ? */
AM_RANGE(0xa808, 0xa808) AM_WRITE(bank_select_w)
AM_RANGE(0xb000, 0xb7ff) AM_RAM_WRITE(ksayakyu_videoram_w) AM_BASE_GENERIC(videoram)
AM_RANGE(0xb800, 0xbfff) AM_RAM_WRITE(SMH_RAM) AM_BASE_SIZE_GENERIC(spriteram)
AM_RANGE(0xb800, 0xbfff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
ADDRESS_MAP_END
static ADDRESS_MAP_START( soundcpu_map, ADDRESS_SPACE_PROGRAM, 8 )
@ -235,7 +234,7 @@ static const gfx_layout spritelayout =
static GFXDECODE_START( ksayakyu )
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 16 )
GFXDECODE_ENTRY( "gfx3", 0, charlayout2, 16*4, 32 )
GFXDECODE_ENTRY( "gfx3", 0, charlayout2, 0x80, 32 )
GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 0, 16 )
GFXDECODE_END
@ -244,7 +243,7 @@ static MACHINE_DRIVER_START( ksayakyu )
MDRV_CPU_PROGRAM_MAP(maincpu_map)
MDRV_CPU_VBLANK_INT("screen", irq0_line_hold)
MDRV_CPU_ADD("audiocpu", Z80, 80000000/2)
MDRV_CPU_ADD("audiocpu", Z80, 8000000/2)
MDRV_CPU_PROGRAM_MAP(soundcpu_map)
MDRV_CPU_VBLANK_INT_HACK(irq0_line_hold,4)
@ -322,4 +321,4 @@ static DRIVER_INIT( ksayakyu )
sound_status = 0xff;
}
GAME( 1985, ksayakyu, 0, ksayakyu, ksayakyu, ksayakyu, ORIENTATION_FLIP_Y, "Taito Corporation", "Kusayakyuu",GAME_IMPERFECT_SOUND|GAME_WRONG_COLORS )
GAME( 1985, ksayakyu, 0, ksayakyu, ksayakyu, ksayakyu, ORIENTATION_FLIP_Y, "Taito Corporation", "Kusayakyuu",GAME_IMPERFECT_SOUND )

View File

@ -25,25 +25,28 @@ WRITE8_HANDLER(ksayakyu_videoctrl_w)
*/
video_ctrl=data;
flipscreen = (data&4)?(TILEMAP_FLIPX|TILEMAP_FLIPY):0;
tilemap_set_flip_all( space->machine,flipscreen );
flipscreen = data & 4;
flip_screen_set( space->machine,flipscreen );
tilemap_set_scrolly( ksayakyu_tilemap, 0, (data&0xe0)<<3 );
if(flipscreen)
tilemap_set_flip( ksayakyu_tilemap, (data & 2) ? TILEMAP_FLIPY : TILEMAP_FLIPX | TILEMAP_FLIPY);
else
tilemap_set_flip( ksayakyu_tilemap, (data & 2) ? TILEMAP_FLIPX : 0);
}
PALETTE_INIT( ksayakyu )
{
int i,j,b1,b2;
const UINT8 *prom = memory_region(machine, "proms");
int r,g,b,i;
for(j=0;j<16;j++)
for(i=0;i<8;i++)
{
b1=prom[j*16+i];
b2=prom[j*16+i+8];
for (i=0;i<0x100;i++)
{
r = (prom[i] & 0x07) >> 0;
g = (prom[i] & 0x38) >> 3;
b = (prom[i] & 0xc0) >> 6;
b1=b2|(b1<<8);
palette_set_color_rgb(machine,j*8+i,pal5bit(b1 >> 10),pal5bit(b1 >> 0),pal5bit(b1 >> 5));
}
palette_set_color_rgb(machine,i,pal3bit(r),pal3bit(g),pal2bit(b));
}
}
static TILE_GET_INFO( get_ksayakyu_tile_info )
@ -51,20 +54,34 @@ static TILE_GET_INFO( get_ksayakyu_tile_info )
int code = memory_region(machine, "user1")[tile_index];
int attr = memory_region(machine, "user1")[tile_index+0x2000];
code+=(attr&3)<<8;
SET_TILE_INFO(1,code,((attr>>2)&0x07)*2,(attr&0x80) ? TILE_FLIPX : 0);
SET_TILE_INFO(1,code,((attr>>2)&0x0f)*2,(attr&0x80) ? TILE_FLIPX : 0);
}
/*
xy-- ---- flip bits
--cc cc-- color
---- --bb bank select
*/
static TILE_GET_INFO( get_text_tile_info )
{
int code = machine->generic.videoram.u8[tile_index*2+1];
int attr = machine->generic.videoram.u8[tile_index*2];
int flags=((attr&0x80) ? TILE_FLIPX : 0) | ((attr&0x40) ? TILE_FLIPY : 0);
int flags=((attr&0x80) ? TILE_FLIPX : 0) | ((attr&0x40) ? TILE_FLIPY : 0);
int color = (attr & 0x3c) >> 2;
code|=(attr&3)<<8;
SET_TILE_INFO(0,code,((attr>>2)&7),flags);
SET_TILE_INFO(0,code,color,flags);
}
/*
[0] X--- ---- flip x
-ttt tttt tile number
[1] yyyy yyyy Y offset
[2] xxxx xxxx X offset
[3]
*/
static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect )
{
const UINT8 *source = machine->generic.spriteram.u8+machine->generic.spriteram_size-4;
@ -91,7 +108,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
drawgfx_transpen(bitmap,cliprect,gfx,
tile&0x7f,
(attributes) & 7,
(attributes & 0x78) >> 3,
flipx,flipy,
sx,sy,0 );