mirror of
https://github.com/holub/mame
synced 2025-04-22 00:11:58 +03:00
dkong.c:
* remove usage of video/generic spriteram, videoram & flip_screen
This commit is contained in:
parent
4a7301495b
commit
ee93a91551
@ -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 */
|
||||
|
@ -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];
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user