diff options
Diffstat (limited to 'src/mame/video/argus.c')
-rw-r--r-- | src/mame/video/argus.c | 156 |
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; |