summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Couriersud <couriersud@users.noreply.github.com>2008-02-24 19:55:52 +0000
committer Couriersud <couriersud@users.noreply.github.com>2008-02-24 19:55:52 +0000
commitee93a9155103cb019aea2c50d3fc5f112062ab50 (patch)
tree0362367ed7b980c70115436139c873f04633c762 /src
parent4a7301495bb8a25458572346ad75a35d5aa2e9a3 (diff)
dkong.c:
* remove usage of video/generic spriteram, videoram & flip_screen
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/dkong.c24
-rw-r--r--src/mame/includes/dkong.h6
-rw-r--r--src/mame/video/dkong.c75
3 files changed, 62 insertions, 43 deletions
diff --git a/src/mame/drivers/dkong.c b/src/mame/drivers/dkong.c
index 4acad8dedf4..b5d7063eaca 100644
--- a/src/mame/drivers/dkong.c
+++ b/src/mame/drivers/dkong.c
@@ -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 */
diff --git a/src/mame/includes/dkong.h b/src/mame/includes/dkong.h
index 3ab056afcdc..a4abda06d47 100644
--- a/src/mame/includes/dkong.h
+++ b/src/mame/includes/dkong.h
@@ -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];
diff --git a/src/mame/video/dkong.c b/src/mame/video/dkong.c
index 5500202baff..9ecbf052dca 100644
--- a/src/mame/video/dkong.c
+++ b/src/mame/video/dkong.c
@@ -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;
}