* remove usage of video/generic spriteram, videoram & flip_screen
This commit is contained in:
Couriersud 2008-02-24 19:55:52 +00:00
parent 4a7301495b
commit ee93a91551
3 changed files with 62 additions and 43 deletions

View File

@ -717,8 +717,10 @@ static WRITE8_HANDLER( dkong3_2a03_reset_w )
static ADDRESS_MAP_START( dkong_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x3fff) AM_ROM
AM_RANGE(0x6000, 0x6bff) AM_RAM
AM_RANGE(0x7000, 0x73ff) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size) /* sprite set 1 */
AM_RANGE(0x7400, 0x77ff) AM_READWRITE(MRA8_RAM, dkong_videoram_w) AM_BASE(&videoram)
AM_RANGE(0x7000, 0x73ff) AM_RAM AM_BASE_MEMBER(dkong_state, sprite_ram)
AM_SIZE_MEMBER(dkong_state, sprite_ram_size) /* sprite set 1 */
AM_RANGE(0x7400, 0x77ff) AM_READWRITE(MRA8_RAM, dkong_videoram_w)
AM_BASE_MEMBER(dkong_state, video_ram)
AM_RANGE(0x7800, 0x780f) AM_READWRITE(dma8257_0_r, dma8257_0_w) /* P8257 control registers */
AM_RANGE(0x7c00, 0x7c00) AM_READ_PORT("IN0") AM_WRITE(dkong_sh_tuneselect_w) /* IN0, sound CPU intf */
AM_RANGE(0x7c80, 0x7c80) AM_READ_PORT("IN1") AM_WRITE(radarscp_grid_color_w) /* IN1 */
@ -737,8 +739,10 @@ static ADDRESS_MAP_START( dkongjr_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x5fff) AM_ROM
AM_RANGE(0x6000, 0x6bff) AM_RAM
AM_RANGE(0x6c00, 0x6fff) AM_RAM /* DK3 bootleg only */
AM_RANGE(0x7000, 0x73ff) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size) /* sprite set 1 */
AM_RANGE(0x7400, 0x77ff) AM_READWRITE(MRA8_RAM, dkong_videoram_w) AM_BASE(&videoram)
AM_RANGE(0x7000, 0x73ff) AM_RAM AM_BASE_MEMBER(dkong_state, sprite_ram)
AM_SIZE_MEMBER(dkong_state, sprite_ram_size) /* sprite set 1 */
AM_RANGE(0x7400, 0x77ff) AM_READWRITE(MRA8_RAM, dkong_videoram_w)
AM_BASE_MEMBER(dkong_state, video_ram)
AM_RANGE(0x7800, 0x780f) AM_READWRITE(dma8257_0_r, dma8257_0_w) /* P8257 control registers */
AM_RANGE(0x7c00, 0x7c00) AM_READ_PORT("IN0") AM_WRITE(dkongjr_sh_tuneselect_w)
AM_RANGE(0x7c80, 0x7c80) AM_READ_PORT("IN1") AM_WRITE(dkongjr_gfxbank_w)
@ -761,8 +765,10 @@ static ADDRESS_MAP_START( dkong3_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x5fff) AM_ROM
AM_RANGE(0x6000, 0x67ff) AM_RAM
AM_RANGE(0x6800, 0x6fff) AM_RAM
AM_RANGE(0x7000, 0x73ff) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size) /* sprite set 1 */
AM_RANGE(0x7400, 0x77ff) AM_READWRITE(MRA8_RAM, dkong_videoram_w) AM_BASE(&videoram)
AM_RANGE(0x7000, 0x73ff) AM_RAM AM_BASE_MEMBER(dkong_state, sprite_ram)
AM_SIZE_MEMBER(dkong_state, sprite_ram_size) /* sprite set 1 */
AM_RANGE(0x7400, 0x77ff) AM_READWRITE(MRA8_RAM, dkong_videoram_w)
AM_BASE_MEMBER(dkong_state, video_ram)
AM_RANGE(0x7c00, 0x7c00) AM_READ_PORT("IN0") AM_WRITE(soundlatch_w)
AM_RANGE(0x7c80, 0x7c80) AM_READ_PORT("IN1") AM_WRITE(soundlatch2_w)
AM_RANGE(0x7d00, 0x7d00) AM_READ_PORT("DSW0") AM_WRITE(soundlatch3_w)
@ -794,7 +800,8 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( hunchbkd_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x0fff) AM_ROM
AM_RANGE(0x1000, 0x13ff) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size) /* 0x7000 */
AM_RANGE(0x1000, 0x13ff) AM_RAM AM_BASE_MEMBER(dkong_state, sprite_ram)
AM_SIZE_MEMBER(dkong_state, sprite_ram_size) /* 0x7000 */
AM_RANGE(0x1400, 0x1400) AM_READ_PORT("IN0") AM_WRITE(dkong_sh_tuneselect_w)
AM_RANGE(0x1480, 0x1480) AM_READ_PORT("IN1")
AM_RANGE(0x1500, 0x1500) AM_READ(dkong_in2_r) /* IN2 */
@ -806,7 +813,8 @@ static ADDRESS_MAP_START( hunchbkd_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x1585, 0x1585) AM_WRITE(p8257_drq_w) /* P8257 ==> /DRQ0 /DRQ1 */
AM_RANGE(0x1586, 0x1587) AM_WRITE(dkong_palettebank_w)
AM_RANGE(0x1600, 0x17ff) AM_RAM /* 0x6400 spriteram location */
AM_RANGE(0x1800, 0x1bff) AM_READWRITE(MRA8_RAM, dkong_videoram_w) AM_BASE(&videoram) /* 0x7400 */
AM_RANGE(0x1800, 0x1bff) AM_READWRITE(MRA8_RAM, dkong_videoram_w)
AM_BASE_MEMBER(dkong_state, video_ram) /* 0x7400 */
AM_RANGE(0x1C00, 0x1f7f) AM_RAM /* 0x6000 */
AM_RANGE(0x1f80, 0x1f8f) AM_READWRITE(dma8257_0_r, dma8257_0_w) /* P8257 control registers */
/* 0x6800 not remapped */

View File

@ -71,6 +71,9 @@ struct _dkong_state
const UINT8 * color_codes;
emu_timer * scanline_timer;
INT8 vidhw; /* Selected video hardware RS Conversion / TKG04 */
UINT8 * video_ram;
UINT8 * sprite_ram;
size_t sprite_ram_size;
/* radar scope */
UINT8 sig30Hz;
@ -93,7 +96,8 @@ struct _dkong_state
UINT16 grid_col;
UINT8 sprite_bank;
UINT8 dma_latch;
UINT8 flip;
/* reverse address lookup map - hunchbkd */
INT16 rev_map[0x200];

View File

@ -448,7 +448,7 @@ PALETTE_INIT( dkong3 )
static TILE_GET_INFO( dkong_bg_tile_info )
{
dkong_state *state = machine->driver_data;
int code = videoram[tile_index] + 256 * state->gfx_bank;
int code = state->video_ram[tile_index] + 256 * state->gfx_bank;
int color = (state->color_codes[tile_index % 32 + 32 * (tile_index / 32 / 4)] & 0x0f) + 0x10 * state->palette_bank;
SET_TILE_INFO(0, code, color, 0);
@ -457,7 +457,7 @@ static TILE_GET_INFO( dkong_bg_tile_info )
static TILE_GET_INFO( radarsc1_bg_tile_info )
{
dkong_state *state = machine->driver_data;
int code = videoram[tile_index] + 256 * state->gfx_bank;
int code = state->video_ram[tile_index] + 256 * state->gfx_bank;
int color = (state->color_codes[tile_index % 32] & 0x0f);
color = color | (state->palette_bank<<4);
@ -474,9 +474,9 @@ WRITE8_HANDLER( dkong_videoram_w )
{
dkong_state *state = Machine->driver_data;
if (videoram[offset] != data)
if (state->video_ram[offset] != data)
{
videoram[offset] = data;
state->video_ram[offset] = data;
tilemap_mark_tile_dirty(state->bg_tilemap, offset);
}
}
@ -553,7 +553,9 @@ WRITE8_HANDLER( radarscp_grid_color_w )
WRITE8_HANDLER( dkong_flipscreen_w )
{
flip_screen_set(~data & 0x01);
dkong_state *state = Machine->driver_data;
state->flip = ~data & 0x01;
}
WRITE8_HANDLER( dkong_spritebank_w )
@ -575,55 +577,55 @@ static void draw_sprites(running_machine *machine, mame_bitmap *bitmap, const re
int offs;
/* Draw the sprites. */
for (offs = state->sprite_bank<<9;offs < (state->sprite_bank<<9) + 0x200 /* spriteram_size */; offs += 4)
for (offs = state->sprite_bank<<9;offs < (state->sprite_bank<<9) + 0x200 /* sprite_ram_size */; offs += 4)
{
if (spriteram[offs])
if (state->sprite_ram[offs])
{
/* spriteram[offs + 2] & 0x40 is used by Donkey Kong 3 only */
/* spriteram[offs + 2] & 0x30 don't seem to be used (they are */
/* sprite_ram[offs + 2] & 0x40 is used by Donkey Kong 3 only */
/* sprite_ram[offs + 2] & 0x30 don't seem to be used (they are */
/* probably not part of the color code, since Mario Bros, which */
/* has similar hardware, uses a memory mapped port to change */
/* palette bank, so it's limited to 16 color codes) */
int x,y;
x = spriteram[offs + 3] - 8;
y = 240 - spriteram[offs] + 7;
x = state->sprite_ram[offs + 3] - 8;
y = 240 - state->sprite_ram[offs] + 7;
if (flip_screen)
if (state->flip)
{
x = 240 - x;
y = VTOTAL - VBEND - y;
y = VTOTAL - VBEND - y - 8;
drawgfx(bitmap,machine->gfx[1],
(spriteram[offs + 1] & 0x7f) + ((spriteram[offs + 2] & mask_bank) << shift_bits),
(spriteram[offs + 2] & 0x0f) + 16 * state->palette_bank,
!(spriteram[offs + 2] & 0x80),!(spriteram[offs + 1] & 0x80),
(state->sprite_ram[offs + 1] & 0x7f) + ((state->sprite_ram[offs + 2] & mask_bank) << shift_bits),
(state->sprite_ram[offs + 2] & 0x0f) + 16 * state->palette_bank,
!(state->sprite_ram[offs + 2] & 0x80),!(state->sprite_ram[offs + 1] & 0x80),
x,y,
cliprect,TRANSPARENCY_PEN,0);
/* draw with wrap around - this fixes the 'beheading' bug */
drawgfx(bitmap,machine->gfx[1],
(spriteram[offs + 1] & 0x7f) + ((spriteram[offs + 2] & mask_bank) << shift_bits),
(spriteram[offs + 2] & 0x0f) + 16 * state->palette_bank,
(spriteram[offs + 2] & 0x80),(spriteram[offs + 1] & 0x80),
(state->sprite_ram[offs + 1] & 0x7f) + ((state->sprite_ram[offs + 2] & mask_bank) << shift_bits),
(state->sprite_ram[offs + 2] & 0x0f) + 16 * state->palette_bank,
(state->sprite_ram[offs + 2] & 0x80),(state->sprite_ram[offs + 1] & 0x80),
x-256,y,
cliprect,TRANSPARENCY_PEN,0);
}
else
{
drawgfx(bitmap,machine->gfx[1],
(spriteram[offs + 1] & 0x7f) + ((spriteram[offs + 2] & mask_bank) << shift_bits),
(spriteram[offs + 2] & 0x0f) + 16 * state->palette_bank,
(spriteram[offs + 2] & 0x80),(spriteram[offs + 1] & 0x80),
(state->sprite_ram[offs + 1] & 0x7f) + ((state->sprite_ram[offs + 2] & mask_bank) << shift_bits),
(state->sprite_ram[offs + 2] & 0x0f) + 16 * state->palette_bank,
(state->sprite_ram[offs + 2] & 0x80),(state->sprite_ram[offs + 1] & 0x80),
x,y,
cliprect,TRANSPARENCY_PEN,0);
/* draw with wrap around - this fixes the 'beheading' bug */
drawgfx(bitmap,machine->gfx[1],
(spriteram[offs + 1] & 0x7f) + ((spriteram[offs + 2] & mask_bank) << shift_bits),
(spriteram[offs + 2] & 0x0f) + 16 * state->palette_bank,
(spriteram[offs + 2] & 0x80),(spriteram[offs + 1] & 0x80),
(state->sprite_ram[offs + 1] & 0x7f) + ((state->sprite_ram[offs + 2] & mask_bank) << shift_bits),
(state->sprite_ram[offs + 2] & 0x0f) + 16 * state->palette_bank,
(state->sprite_ram[offs + 2] & 0x80),(state->sprite_ram[offs + 1] & 0x80),
x+256,y,
cliprect,TRANSPARENCY_PEN,0);
}
@ -804,7 +806,7 @@ static TIMER_CALLBACK( scanline_callback )
radarscp_step(machine, y);
if (y <= machine->screen[0].visarea.min_y || y > machine->screen[0].visarea.max_y)
counter = 0;
offset = ((-flip_screen) ^ state->rflip_sig) ? 0x000 : 0x400;
offset = (state->flip ^ state->rflip_sig) ? 0x000 : 0x400;
x = 0;
while (x < machine->screen[0].width)
{
@ -877,9 +879,10 @@ static VIDEO_START( dkong_base )
state_save_register_global(state->snd02_enable);
state_save_register_global(state->sig_ansn);
state_save_register_global(state->grid_col);
state_save_register_global(state->flip);
/* this must be registered here - hmmm */
state_save_register_global(flip_screen);
//state_save_register_global(flip_screen);
}
@ -919,6 +922,10 @@ VIDEO_UPDATE( dkong )
{
dkong_state *state = machine->driver_data;
tilemap_set_flip(ALL_TILEMAPS, state->flip ? TILEMAP_FLIPX | TILEMAP_FLIPY : 0);
tilemap_set_scrollx(state->bg_tilemap, 0, state->flip ? 0 : 0);
tilemap_set_scrolly(state->bg_tilemap, 0, state->flip ? -8 : 0);
switch (state->hardware_type)
{
case HARDWARE_TKG02:
@ -947,15 +954,15 @@ VIDEO_UPDATE( pestplce )
tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0);
/* Draw the sprites. */
for (offs = 0;offs < spriteram_size;offs += 4)
for (offs = 0;offs < state->sprite_ram_size;offs += 4)
{
if (spriteram[offs])
if (state->sprite_ram[offs])
{
drawgfx(bitmap,machine->gfx[1],
spriteram[offs + 2],
(spriteram[offs + 1] & 0x0f) + 16 * state->palette_bank,
spriteram[offs + 1] & 0x80,spriteram[offs + 1] & 0x40,
spriteram[offs + 3] - 8,240 - spriteram[offs] + 8,
state->sprite_ram[offs + 2],
(state->sprite_ram[offs + 1] & 0x0f) + 16 * state->palette_bank,
state->sprite_ram[offs + 1] & 0x80,state->sprite_ram[offs + 1] & 0x40,
state->sprite_ram[offs + 3] - 8,240 - state->sprite_ram[offs] + 8,
cliprect,TRANSPARENCY_PEN,0);
}
}
@ -968,7 +975,7 @@ VIDEO_UPDATE( spclforc )
tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0);
/* it uses spriteram[offs + 2] & 0x10 for sprite bank */
/* it uses sprite_ram[offs + 2] & 0x10 for sprite bank */
draw_sprites(machine, bitmap, cliprect, 0x10, 3);
return 0;
}