KO Punch boxer graphics had to be doubled. Evidence:

http://www.retro-gaming.it/videogiochi_img/magazine_videogiochi/videogiochi2/videogiochi_2_54.jpg
http://www.retro-gaming.it/videogiochi_img/magazine_videogiochi/videogiochi2/videogiochi_2_55.jpg
(these are two halves of the same shot).
The shot is clearly from some other version of the game since the graphics are different, however it's clear that the boxer is supposed to fill the screen.
This commit is contained in:
Nicola Salmoria 2008-08-11 16:50:55 +00:00
parent d099ba2be0
commit 241e19186c
2 changed files with 28 additions and 59 deletions

View File

@ -156,16 +156,27 @@ static const gfx_layout charlayout =
8*8 8*8
}; };
static const gfx_layout charlayoutbig =
{
16,16,
RGN_FRAC(1,3),
3,
{ RGN_FRAC(2,3), RGN_FRAC(1,3), RGN_FRAC(0,3) },
{ 7,7, 6,6, 5,5, 4,4, 3,3, 2,2, 1,1, 0,0 },
{ 0*8,0*8, 1*8,1*8, 2*8,2*8, 3*8,3*8, 4*8,4*8, 5*8,5*8, 6*8,6*8, 7*8,7*8 },
8*8
};
static GFXDECODE_START( kopunch ) static GFXDECODE_START( kopunch )
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 1 ) GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 1 )
GFXDECODE_ENTRY( "gfx2", 0, charlayout, 0, 1 ) GFXDECODE_ENTRY( "gfx2", 0, charlayoutbig, 0, 1 )
GFXDECODE_END GFXDECODE_END
static MACHINE_DRIVER_START( kopunch ) static MACHINE_DRIVER_START( kopunch )
/* basic machine hardware */ /* basic machine hardware */
MDRV_CPU_ADD("main", 8080, 4000000) /* 4 MHz ???? appears to use 8080 instructions, not z80 */ MDRV_CPU_ADD("main", 8080, 4000000) /* 4 MHz ???? uses 8080 instructions, not z80 */
MDRV_CPU_PROGRAM_MAP(kopunch_map,0) MDRV_CPU_PROGRAM_MAP(kopunch_map,0)
MDRV_CPU_IO_MAP(kopunch_io_map,0) MDRV_CPU_IO_MAP(kopunch_io_map,0)
MDRV_CPU_VBLANK_INT_HACK(kopunch_interrupt,4) /* ??? */ MDRV_CPU_VBLANK_INT_HACK(kopunch_interrupt,4) /* ??? */
@ -219,24 +230,4 @@ ROM_START( kopunch )
ROM_LOAD( "epr1100", 0x0040, 0x0020, CRC(bedb66b1) SHA1(8e78bb205d900075b761e1baa5f5813174ff28ba) ) /* unknown */ ROM_LOAD( "epr1100", 0x0040, 0x0020, CRC(bedb66b1) SHA1(8e78bb205d900075b761e1baa5f5813174ff28ba) ) /* unknown */
ROM_END ROM_END
GAME( 1981, kopunch, 0, kopunch, kopunch, 0, ROT270, "Sega", "KO Punch", GAME_NO_SOUND | GAME_NOT_WORKING)
static DRIVER_INIT( kopunch )
{
// UINT8 *rom = memory_region(machine, "main");
/* It looks like there is a security chip, that changes instruction of the form:
0334: 3E 0C ld a,$0C
0336: 30 FB jr nc,$0333
into something else (maybe just a nop) with the effect of resuming execution
from the operand of the JR NC instruction (in the example above, 0337).
For now, I'm just patching the affected instructions. */
/* rom[0x119] = 0;
rom[0x336] = 0;
rom[0x381] = 0;
rom[0xf0b] = 0;
rom[0xf33] = 0;*/
}
GAME( 1981, kopunch, 0, kopunch, kopunch, kopunch, ROT270, "Sega", "KO Punch", GAME_NO_SOUND | GAME_NOT_WORKING)

View File

@ -2,8 +2,7 @@
UINT8 *kopunch_videoram2; UINT8 *kopunch_videoram2;
static INT8 scroll[2]; // REMOVE static int gfxbank;
static int gfxbank, gfxflip;
static tilemap *bg_tilemap, *fg_tilemap; static tilemap *bg_tilemap, *fg_tilemap;
@ -40,25 +39,23 @@ PALETTE_INIT( kopunch )
WRITE8_HANDLER( kopunch_videoram_w ) WRITE8_HANDLER( kopunch_videoram_w )
{ {
videoram[offset] = data; videoram[offset] = data;
tilemap_mark_tile_dirty(bg_tilemap, offset); tilemap_mark_tile_dirty(fg_tilemap, offset);
} }
WRITE8_HANDLER( kopunch_videoram2_w ) WRITE8_HANDLER( kopunch_videoram2_w )
{ {
kopunch_videoram2[offset] = data; kopunch_videoram2[offset] = data;
tilemap_mark_tile_dirty(fg_tilemap, offset); tilemap_mark_tile_dirty(bg_tilemap, offset);
} }
WRITE8_HANDLER( kopunch_scroll_x_w ) WRITE8_HANDLER( kopunch_scroll_x_w )
{ {
scroll[0] = data; // REMOVE tilemap_set_scrollx(bg_tilemap, 0, data);
tilemap_set_scrollx(fg_tilemap, 0, data);
} }
WRITE8_HANDLER( kopunch_scroll_y_w ) WRITE8_HANDLER( kopunch_scroll_y_w )
{ {
scroll[1] = data; // REMOVE tilemap_set_scrolly(bg_tilemap, 0, data);
tilemap_set_scrolly(fg_tilemap, 0, data);
} }
WRITE8_HANDLER( kopunch_gfxbank_w ) WRITE8_HANDLER( kopunch_gfxbank_w )
@ -66,22 +63,20 @@ WRITE8_HANDLER( kopunch_gfxbank_w )
if (gfxbank != (data & 0x07)) if (gfxbank != (data & 0x07))
{ {
gfxbank = data & 0x07; gfxbank = data & 0x07;
tilemap_mark_all_tiles_dirty(fg_tilemap); tilemap_mark_all_tiles_dirty(bg_tilemap);
} }
gfxflip = data & 0x08; // REMOVE tilemap_set_flip(bg_tilemap, (data & 0x08) ? TILEMAP_FLIPY : 0);
tilemap_set_flip(fg_tilemap, (data & 0x08) ? TILEMAP_FLIPY : 0);
} }
static TILE_GET_INFO( get_bg_tile_info ) static TILE_GET_INFO( get_fg_tile_info )
{ {
int code = videoram[tile_index]; int code = videoram[tile_index];
SET_TILE_INFO(0, code, 0, 0); SET_TILE_INFO(0, code, 0, 0);
} }
static TILE_GET_INFO( get_fg_tile_info ) static TILE_GET_INFO( get_bg_tile_info )
{ {
int code = (kopunch_videoram2[tile_index] & 0x7f) + 128 * gfxbank; int code = (kopunch_videoram2[tile_index] & 0x7f) + 128 * gfxbank;
@ -90,35 +85,18 @@ static TILE_GET_INFO( get_fg_tile_info )
VIDEO_START( kopunch ) VIDEO_START( kopunch )
{ {
bg_tilemap = tilemap_create(get_bg_tile_info, tilemap_scan_rows, fg_tilemap = tilemap_create(get_fg_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
8, 8, 32, 32); bg_tilemap = tilemap_create(get_bg_tile_info, tilemap_scan_rows, 16, 16, 16, 16);
fg_tilemap = tilemap_create(get_fg_tile_info, tilemap_scan_rows,
8, 8, 16, 16);
tilemap_set_transparent_pen(fg_tilemap, 0); tilemap_set_transparent_pen(fg_tilemap, 0);
tilemap_set_scrolldx(bg_tilemap, 16, 16);
} }
VIDEO_UPDATE( kopunch ) VIDEO_UPDATE( kopunch )
{ {
int offs;
tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0); tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0);
//tilemap_draw(bitmap, cliprect, fg_tilemap, 0, 0); tilemap_draw(bitmap, cliprect, fg_tilemap, 0, 0);
for (offs = 1023;offs >= 0;offs--)
{
int sx,sy;
sx = offs % 16;
sy = offs / 16;
drawgfx(bitmap,screen->machine->gfx[1],
(kopunch_videoram2[offs] & 0x7f) + 128 * gfxbank,
0,
0,gfxflip,
8*(sx+8)+scroll[0],8*(8+(gfxflip ? 15-sy : sy))+scroll[1],
cliprect,TRANSPARENCY_PEN,0);
}
return 0; return 0;
} }