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 driver by Tomasz Slanina
TODO: TODO:
- colors
- correct communication between main and the sound cpu - correct communication between main and the sound cpu
- DAC - DAC
- sprite glitches (sometimes) .. missing vertical flip flag? - 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(0xa807, 0xa807) AM_READNOP /* watchdog ? */
AM_RANGE(0xa808, 0xa808) AM_WRITE(bank_select_w) 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(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 ADDRESS_MAP_END
static ADDRESS_MAP_START( soundcpu_map, ADDRESS_SPACE_PROGRAM, 8 ) static ADDRESS_MAP_START( soundcpu_map, ADDRESS_SPACE_PROGRAM, 8 )
@ -235,7 +234,7 @@ static const gfx_layout spritelayout =
static GFXDECODE_START( ksayakyu ) static GFXDECODE_START( ksayakyu )
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 16 ) 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_ENTRY( "gfx2", 0, spritelayout, 0, 16 )
GFXDECODE_END GFXDECODE_END
@ -244,7 +243,7 @@ static MACHINE_DRIVER_START( ksayakyu )
MDRV_CPU_PROGRAM_MAP(maincpu_map) MDRV_CPU_PROGRAM_MAP(maincpu_map)
MDRV_CPU_VBLANK_INT("screen", irq0_line_hold) 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_PROGRAM_MAP(soundcpu_map)
MDRV_CPU_VBLANK_INT_HACK(irq0_line_hold,4) MDRV_CPU_VBLANK_INT_HACK(irq0_line_hold,4)
@ -322,4 +321,4 @@ static DRIVER_INIT( ksayakyu )
sound_status = 0xff; 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,24 +25,27 @@ WRITE8_HANDLER(ksayakyu_videoctrl_w)
*/ */
video_ctrl=data; video_ctrl=data;
flipscreen = (data&4)?(TILEMAP_FLIPX|TILEMAP_FLIPY):0; flipscreen = data & 4;
tilemap_set_flip_all( space->machine,flipscreen ); flip_screen_set( space->machine,flipscreen );
tilemap_set_scrolly( ksayakyu_tilemap, 0, (data&0xe0)<<3 ); 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 ) PALETTE_INIT( ksayakyu )
{ {
int i,j,b1,b2;
const UINT8 *prom = memory_region(machine, "proms"); const UINT8 *prom = memory_region(machine, "proms");
int r,g,b,i;
for(j=0;j<16;j++) for (i=0;i<0x100;i++)
for(i=0;i<8;i++)
{ {
b1=prom[j*16+i]; r = (prom[i] & 0x07) >> 0;
b2=prom[j*16+i+8]; g = (prom[i] & 0x38) >> 3;
b = (prom[i] & 0xc0) >> 6;
b1=b2|(b1<<8); palette_set_color_rgb(machine,i,pal3bit(r),pal3bit(g),pal2bit(b));
palette_set_color_rgb(machine,j*8+i,pal5bit(b1 >> 10),pal5bit(b1 >> 0),pal5bit(b1 >> 5));
} }
} }
@ -51,20 +54,34 @@ static TILE_GET_INFO( get_ksayakyu_tile_info )
int code = memory_region(machine, "user1")[tile_index]; int code = memory_region(machine, "user1")[tile_index];
int attr = memory_region(machine, "user1")[tile_index+0x2000]; int attr = memory_region(machine, "user1")[tile_index+0x2000];
code+=(attr&3)<<8; 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 ) static TILE_GET_INFO( get_text_tile_info )
{ {
int code = machine->generic.videoram.u8[tile_index*2+1]; int code = machine->generic.videoram.u8[tile_index*2+1];
int attr = machine->generic.videoram.u8[tile_index*2]; 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; 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 ) 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; 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, drawgfx_transpen(bitmap,cliprect,gfx,
tile&0x7f, tile&0x7f,
(attributes) & 7, (attributes & 0x78) >> 3,
flipx,flipy, flipx,flipy,
sx,sy,0 ); sx,sy,0 );