summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/video/argus.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/video/argus.c')
-rw-r--r--src/mame/video/argus.c156
1 files changed, 75 insertions, 81 deletions
diff --git a/src/mame/video/argus.c b/src/mame/video/argus.c
index 6a4761a08ad..395d8fba4ea 100644
--- a/src/mame/video/argus.c
+++ b/src/mame/video/argus.c
@@ -89,7 +89,7 @@ Video effect RAM ( $C30C )
-----------------------------------------------------------------------------
+0
---- ---x = BG enable bit
- ---- --x- = gray scale effect or tile bank select.
+ ---- --x- = grey scale effect or tile bank select.
Flip screen controller
@@ -109,7 +109,7 @@ BG0 palette intensity ( $C47F, $C4FF )
(*) Things which are not emulated.
- Color $000 - 00f, $01e, $02e ... are half transparent color.
- Sprite priority bit may be present in Butasan. But I don't know
- what is happened when it is set.
+ what happens when it is set.
***************************************************************************/
@@ -272,6 +272,13 @@ VIDEO_START_MEMBER(argus_state,argus)
m_dummy_bg0ram = auto_alloc_array(machine(), UINT8, 0x800);
jal_blend_init(machine(), 1);
+
+ save_item(NAME(m_bg_status));
+ save_item(NAME(m_flipscreen));
+ save_item(NAME(m_palette_intensity));
+ save_pointer(NAME(m_dummy_bg0ram), 0x800);
+ save_item(NAME(m_lowbitscroll));
+ save_item(NAME(m_prvscrollx));
}
VIDEO_RESET_MEMBER(argus_state,argus)
@@ -295,6 +302,13 @@ VIDEO_START_MEMBER(argus_state,valtric)
m_screen->register_screen_bitmap(m_mosaicbitmap);
jal_blend_init(machine(), 1);
+
+ save_item(NAME(m_bg_status));
+ save_item(NAME(m_flipscreen));
+ save_item(NAME(m_palette_intensity));
+ save_item(NAME(m_valtric_mosaic));
+ save_item(NAME(m_valtric_unknown));
+ save_item(NAME(m_mosaic));
}
VIDEO_RESET_MEMBER(argus_state,valtric)
@@ -322,6 +336,15 @@ VIDEO_START_MEMBER(argus_state,butasan)
m_butasan_txbackram = &m_butasan_pagedram[1][0x800];
jal_blend_init(machine(), 1);
+
+ save_item(NAME(m_bg_status));
+ save_item(NAME(m_flipscreen));
+ save_item(NAME(m_palette_intensity));
+ save_pointer(NAME(m_butasan_pagedram[0]), 0x1000);
+ save_pointer(NAME(m_butasan_pagedram[1]), 0x1000);
+ save_item(NAME(m_butasan_page_latch));
+ save_item(NAME(m_butasan_bg1_status));
+ save_item(NAME(m_butasan_unknown));
}
VIDEO_RESET_MEMBER(argus_state,butasan)
@@ -363,7 +386,7 @@ void argus_state::argus_write_dummy_rams(int dramoffs, int vromoffs)
}
}
-void argus_state::argus_change_palette(int color, int lo_offs, int hi_offs)
+void argus_state::change_palette(int color, int lo_offs, int hi_offs)
{
UINT8 lo = m_paletteram[lo_offs];
UINT8 hi = m_paletteram[hi_offs];
@@ -371,7 +394,7 @@ void argus_state::argus_change_palette(int color, int lo_offs, int hi_offs)
m_palette->set_pen_color(color, pal4bit(lo >> 4), pal4bit(lo), pal4bit(hi >> 4));
}
-void argus_state::argus_change_bg_palette(int color, int lo_offs, int hi_offs)
+void argus_state::change_bg_palette(int color, int lo_offs, int hi_offs)
{
UINT8 r,g,b,lo,hi,ir,ig,ib,ix;
rgb_t rgb,irgb;
@@ -418,23 +441,13 @@ WRITE8_MEMBER(argus_state::valtric_mosaic_w)
m_valtric_mosaic = data;
}
-READ8_MEMBER(argus_state::argus_txram_r)
-{
- return m_txram[offset];
-}
-
-WRITE8_MEMBER(argus_state::argus_txram_w)
+WRITE8_MEMBER(argus_state::txram_w)
{
m_txram[offset] = data;
m_tx_tilemap->mark_tile_dirty(offset >> 1);
}
-READ8_MEMBER(argus_state::argus_bg1ram_r)
-{
- return m_bg1ram[offset];
-}
-
-WRITE8_MEMBER(argus_state::argus_bg1ram_w)
+WRITE8_MEMBER(argus_state::bg1ram_w)
{
m_bg1ram[offset] = data;
m_bg1_tilemap->mark_tile_dirty(offset >> 1);
@@ -453,7 +466,7 @@ WRITE8_MEMBER(argus_state::argus_bg_status_w)
for (offs = 0x400; offs < 0x500; offs++)
{
- argus_change_bg_palette((offs - 0x400) + 0x080, offs, offs + 0x400);
+ change_bg_palette((offs - 0x400) + 0x080, offs, offs + 0x400);
}
}
}
@@ -472,7 +485,7 @@ WRITE8_MEMBER(argus_state::valtric_bg_status_w)
for (offs = 0x400; offs < 0x600; offs += 2)
{
- argus_change_bg_palette(((offs - 0x400) >> 1) + 0x100, offs & ~1, offs | 1);
+ change_bg_palette(((offs - 0x400) >> 1) + 0x100, offs & ~1, offs | 1);
}
}
}
@@ -494,16 +507,11 @@ WRITE8_MEMBER(argus_state::butasan_bg1_status_w)
}
}
-WRITE8_MEMBER(argus_state::argus_flipscreen_w)
+WRITE8_MEMBER(argus_state::flipscreen_w)
{
m_flipscreen = data & 0x80;
}
-READ8_MEMBER(argus_state::argus_paletteram_r)
-{
- return m_paletteram[offset];
-}
-
WRITE8_MEMBER(argus_state::argus_paletteram_w)
{
int offs;
@@ -514,14 +522,14 @@ WRITE8_MEMBER(argus_state::argus_paletteram_w)
{
offset &= 0x07f;
- argus_change_palette(offset, offset, offset + 0x080);
+ change_palette(offset, offset, offset + 0x080);
if (offset == 0x07f || offset == 0x0ff)
{
m_palette_intensity = m_paletteram[0x0ff] | (m_paletteram[0x07f] << 8);
for (offs = 0x400; offs < 0x500; offs++)
- argus_change_bg_palette((offs & 0xff) + 0x080, offs, offs + 0x400);
+ change_bg_palette((offs & 0xff) + 0x080, offs, offs + 0x400);
}
}
else if ((offset >= 0x400 && offset <= 0x4ff) ||
@@ -530,7 +538,7 @@ WRITE8_MEMBER(argus_state::argus_paletteram_w)
offs = offset & 0xff;
offset = offs | 0x400;
- argus_change_bg_palette(offs + 0x080, offset, offset + 0x400);
+ change_bg_palette(offs + 0x080, offset, offset + 0x400);
}
else if ((offset >= 0x500 && offset <= 0x5ff) ||
(offset >= 0x900 && offset <= 0x9ff)) /* BG1 color */
@@ -538,7 +546,7 @@ WRITE8_MEMBER(argus_state::argus_paletteram_w)
offs = offset & 0xff;
offset = offs | 0x500;
- argus_change_palette(offs + 0x180, offset, offset + 0x400);
+ change_palette(offs + 0x180, offset, offset + 0x400);
}
else if ((offset >= 0x700 && offset <= 0x7ff) ||
(offset >= 0xb00 && offset <= 0xbff)) /* text color */
@@ -546,7 +554,7 @@ WRITE8_MEMBER(argus_state::argus_paletteram_w)
offs = offset & 0xff;
offset = offs | 0x700;
- argus_change_palette(offs + 0x280, offset, offset + 0x400);
+ change_palette(offs + 0x280, offset, offset + 0x400);
}
}
@@ -556,7 +564,7 @@ WRITE8_MEMBER(argus_state::valtric_paletteram_w)
if (offset <= 0x1ff) /* Sprite color */
{
- argus_change_palette(offset >> 1, offset & ~1, offset | 1);
+ change_palette(offset >> 1, offset & ~1, offset | 1);
if (offset == 0x1fe || offset == 0x1ff)
{
@@ -565,16 +573,16 @@ WRITE8_MEMBER(argus_state::valtric_paletteram_w)
m_palette_intensity = m_paletteram[0x1ff] | (m_paletteram[0x1fe] << 8);
for (offs = 0x400; offs < 0x600; offs += 2)
- argus_change_bg_palette(((offs & 0x1ff) >> 1) + 0x100, offs & ~1, offs | 1);
+ change_bg_palette(((offs & 0x1ff) >> 1) + 0x100, offs & ~1, offs | 1);
}
}
else if (offset >= 0x400 && offset <= 0x5ff) /* BG color */
{
- argus_change_bg_palette(((offset & 0x1ff) >> 1) + 0x100, offset & ~1, offset | 1);
+ change_bg_palette(((offset & 0x1ff) >> 1) + 0x100, offset & ~1, offset | 1);
}
else if (offset >= 0x600 && offset <= 0x7ff) /* Text color */
{
- argus_change_palette(((offset & 0x1ff) >> 1) + 0x200, offset & ~1, offset | 1);
+ change_palette(((offset & 0x1ff) >> 1) + 0x200, offset & ~1, offset | 1);
}
}
@@ -584,36 +592,31 @@ WRITE8_MEMBER(argus_state::butasan_paletteram_w)
if (offset <= 0x1ff) /* BG0 color */
{
- argus_change_palette((offset >> 1) + 0x100, offset & ~1, offset | 1);
+ change_palette((offset >> 1) + 0x100, offset & ~1, offset | 1);
}
else if (offset <= 0x23f) /* BG1 color */
{
- argus_change_palette(((offset & 0x3f) >> 1) + 0x0c0, offset & ~1, offset | 1);
+ change_palette(((offset & 0x3f) >> 1) + 0x0c0, offset & ~1, offset | 1);
}
else if (offset >= 0x400 && offset <= 0x47f) /* Sprite color */
{ /* 16 colors */
- argus_change_palette((offset & 0x7f) >> 1, offset & ~1, offset | 1);
+ change_palette((offset & 0x7f) >> 1, offset & ~1, offset | 1);
}
else if (offset >= 0x480 && offset <= 0x4ff) /* Sprite color */
{ /* 8 colors */
int offs = (offset & 0x070) | ((offset & 0x00f) >> 1);
- argus_change_palette(offs + 0x040, offset & ~1, offset | 1);
- argus_change_palette(offs + 0x048, offset & ~1, offset | 1);
+ change_palette(offs + 0x040, offset & ~1, offset | 1);
+ change_palette(offs + 0x048, offset & ~1, offset | 1);
}
else if (offset >= 0x600 && offset <= 0x7ff) /* Text color */
{
- argus_change_palette(((offset & 0x1ff) >> 1) + 0x200, offset & ~1, offset | 1);
+ change_palette(((offset & 0x1ff) >> 1) + 0x200, offset & ~1, offset | 1);
}
else if (offset >= 0x240 && offset <= 0x25f) // dummy
- argus_change_palette(((offset & 0x1f) >> 1) + 0xe0, offset & ~1, offset | 1);
+ change_palette(((offset & 0x1f) >> 1) + 0xe0, offset & ~1, offset | 1);
else if (offset >= 0x500 && offset <= 0x51f) // dummy
- argus_change_palette(((offset & 0x1f) >> 1) + 0xf0, offset & ~1, offset | 1);
-}
-
-READ8_MEMBER(argus_state::butasan_bg1ram_r)
-{
- return m_butasan_bg1ram[offset];
+ change_palette(((offset & 0x1f) >> 1) + 0xf0, offset & ~1, offset | 1);
}
WRITE8_MEMBER(argus_state::butasan_bg1ram_w)
@@ -804,24 +807,21 @@ void argus_state::argus_bg0_scroll_handle()
void argus_state::argus_draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect, int priority)
{
- UINT8 *spriteram = m_spriteram;
- int offs;
-
/* Draw the sprites */
- for (offs = 0; offs < m_spriteram.bytes(); offs += 16)
+ for (int offs = 0; offs < m_spriteram.bytes(); offs += 16)
{
- if (!(spriteram[offs+15] == 0 && spriteram[offs+11] == 0xf0))
+ if (!(m_spriteram[offs+15] == 0 && m_spriteram[offs+11] == 0xf0))
{
int sx, sy, tile, flipx, flipy, color, pri;
- sx = spriteram[offs+12]; if (spriteram[offs+13] & 0x01) sx -= 256;
- sy = spriteram[offs+11]; if (!(spriteram[offs+13] & 0x02)) sy -= 256;
+ sx = m_spriteram[offs+12]; if (m_spriteram[offs+13] & 0x01) sx -= 256;
+ sy = m_spriteram[offs+11]; if (!(m_spriteram[offs+13] & 0x02)) sy -= 256;
- tile = spriteram[offs+14] | ((spriteram[offs+13] & 0xc0) << 2);
- flipx = spriteram[offs+13] & 0x10;
- flipy = spriteram[offs+13] & 0x20;
- color = spriteram[offs+15] & 0x07;
- pri = (spriteram[offs+15] & 0x08) >> 3;
+ tile = m_spriteram[offs+14] | ((m_spriteram[offs+13] & 0xc0) << 2);
+ flipx = m_spriteram[offs+13] & 0x10;
+ flipy = m_spriteram[offs+13] & 0x20;
+ color = m_spriteram[offs+15] & 0x07;
+ pri = (m_spriteram[offs+15] & 0x08) >> 3;
if (m_flipscreen)
{
@@ -933,23 +933,20 @@ void argus_state::valtric_draw_mosaic(screen_device &screen, bitmap_rgb32 &bitma
void argus_state::valtric_draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
- UINT8 *spriteram = m_spriteram;
- int offs;
-
/* Draw the sprites */
- for (offs = 0; offs < m_spriteram.bytes(); offs += 16)
+ for (int offs = 0; offs < m_spriteram.bytes(); offs += 16)
{
- if (!(spriteram[offs+15] == 0 && spriteram[offs+11] == 0xf0))
+ if (!(m_spriteram[offs+15] == 0 && m_spriteram[offs+11] == 0xf0))
{
int sx, sy, tile, flipx, flipy, color;
- sx = spriteram[offs+12]; if (spriteram[offs+13] & 0x01) sx -= 256;
- sy = spriteram[offs+11]; if (!(spriteram[offs+13] & 0x02)) sy -= 256;
+ sx = m_spriteram[offs+12]; if (m_spriteram[offs+13] & 0x01) sx -= 256;
+ sy = m_spriteram[offs+11]; if (!(m_spriteram[offs+13] & 0x02)) sy -= 256;
- tile = spriteram[offs+14] | ((spriteram[offs+13] & 0xc0) << 2);
- flipx = spriteram[offs+13] & 0x10;
- flipy = spriteram[offs+13] & 0x20;
- color = spriteram[offs+15] & 0x0f;
+ tile = m_spriteram[offs+14] | ((m_spriteram[offs+13] & 0xc0) << 2);
+ flipx = m_spriteram[offs+13] & 0x10;
+ flipy = m_spriteram[offs+13] & 0x20;
+ color = m_spriteram[offs+15] & 0x0f;
if (m_flipscreen)
{
@@ -972,25 +969,22 @@ void argus_state::valtric_draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cl
void argus_state::butasan_draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
- UINT8 *spriteram = m_spriteram;
- int offs;
-
/* Draw the sprites */
- for (offs = 0; offs < m_spriteram.bytes(); offs += 16)
+ for (int offs = 0; offs < m_spriteram.bytes(); offs += 16)
{
int sx, sy, tile, flipx, flipy, color;
int fx, fy;
- tile = spriteram[offs+14] | ((spriteram[offs+15] & 0x0f) << 8);
- flipx = spriteram[offs+8] & 0x01;
- flipy = spriteram[offs+8] & 0x04;
- color = spriteram[offs+9] & 0x0f;
+ tile = m_spriteram[offs+14] | ((m_spriteram[offs+15] & 0x0f) << 8);
+ flipx = m_spriteram[offs+8] & 0x01;
+ flipy = m_spriteram[offs+8] & 0x04;
+ color = m_spriteram[offs+9] & 0x0f;
- sx = spriteram[offs+10];
- sy = spriteram[offs+12];
+ sx = m_spriteram[offs+10];
+ sy = m_spriteram[offs+12];
- if (spriteram[offs+11] & 0x01) sx-=256;
- if (spriteram[offs+13] & 0x01) sy-=256;
+ if (m_spriteram[offs+11] & 0x01) sx-=256;
+ if (m_spriteram[offs+13] & 0x01) sy-=256;
sy = 240 - sy;