summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/video/gstriker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/video/gstriker.cpp')
-rw-r--r--src/mame/video/gstriker.cpp58
1 files changed, 38 insertions, 20 deletions
diff --git a/src/mame/video/gstriker.cpp b/src/mame/video/gstriker.cpp
index 4b6bab05a61..c1919f10727 100644
--- a/src/mame/video/gstriker.cpp
+++ b/src/mame/video/gstriker.cpp
@@ -7,38 +7,56 @@
/*** VIDEO UPDATE/START **********************************************/
+void gstriker_state::video_start()
+{
+ // Initialize the chip for the score plane
+ m_tx->set_transparent_pen(0xf);
+ // Initialize the chip for the screen plane
+ m_bg->set_transparent_pen(0xf);
+
+ m_buffered_spriteram = std::make_unique<uint16_t[]>(0x2000);
+ m_buffered_spriteram2 = std::make_unique<uint16_t[]>(0x2000);
+ save_pointer(NAME(m_buffered_spriteram.get()), 0x2000);
+ save_pointer(NAME(m_buffered_spriteram2.get()), 0x2000);
+}
-uint32_t gstriker_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+WRITE_LINE_MEMBER(gstriker_state::screen_vblank)
{
- bitmap.fill(m_mixerregs1[8]&0x07ff, cliprect); // complete guess, causes green behind test grid in twc94 and blue behind title screen on gstriker
+ // sprites are two frames ahead
+ // TODO: probably all Video System games are (Aero Fighters definitely desyncs wrt background)
+ if(state)
+ {
+ memcpy(m_buffered_spriteram.get(), m_CG10103_m_vram, 0x2000);
+ memcpy(m_buffered_spriteram2.get(), m_buffered_spriteram.get(), 0x2000);
+ }
+}
- popmessage("%04x %04x %04x %04x %04x %04x %04x %04x | %04x %04x %04x %04x %04x %04x %04x %04x", m_mixerregs1[0],m_mixerregs1[1],m_mixerregs1[2],m_mixerregs1[3],m_mixerregs1[4],m_mixerregs1[5],m_mixerregs1[6],m_mixerregs1[7], m_mixerregs1[8],m_mixerregs1[9],m_mixerregs1[10],m_mixerregs1[11],m_mixerregs1[12],m_mixerregs1[13],m_mixerregs1[14],m_mixerregs1[15] );
-// popmessage("%04x %04x %04x %04x %04x %04x %04x %04x | %04x %04x %04x %04x %04x %04x %04x %04x", m_mixerregs2[0],m_mixerregs2[1],m_mixerregs2[2],m_mixerregs2[3],m_mixerregs2[4],m_mixerregs2[5],m_mixerregs2[6],m_mixerregs2[7], m_mixerregs2[8],m_mixerregs2[9],m_mixerregs2[10],m_mixerregs2[11],m_mixerregs2[12],m_mixerregs2[13],m_mixerregs2[14],m_mixerregs2[15] );
- m_spr->set_pal_base( (m_mixerregs1[0]&0xf000)>>8 );
- m_bg->set_pal_base( (m_mixerregs1[1]&0xf000)>>8 );
- m_tx->set_pal_base( (m_mixerregs1[2]&0xf000)>>8 );
+uint32_t gstriker_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+{
+ bitmap.fill(m_mixerregs[8]&0x07ff, cliprect); // complete guess, causes green behind test grid in twc94 and blue behind title screen on gstriker
+
+ /*
+ [4] AAAA BBBB ---- ---- sprite priority number A/B?
+ [5] xxxx ---- ---- ---- background layer priority number?
+ [6] xxxx ---- ---- ---- foreground layer priority number?
+ */
+// popmessage("%04x %04x %04x %04x %04x %04x %04x %04x | %04x %04x %04x %04x %04x %04x %04x %04x", m_mixerregs[0],m_mixerregs[1],m_mixerregs[2],m_mixerregs[3],m_mixerregs[4],m_mixerregs[5],m_mixerregs[6],m_mixerregs[7], m_mixerregs[8],m_mixerregs[9],m_mixerregs[10],m_mixerregs[11],m_mixerregs[12],m_mixerregs[13],m_mixerregs[14],m_mixerregs[15] );
+ m_spr->set_pal_base( (m_mixerregs[0]&0xf000)>>8 );
+ m_bg->set_pal_base( (m_mixerregs[1]&0xf000)>>8 );
+ m_tx->set_pal_base( (m_mixerregs[2]&0xf000)>>8 );
- // Sandwitched screen/sprite0/score/sprite1. Surely wrong, probably
- // needs sprite orthogonality
+
+ // Sandwitched screen/sprite0/score/sprite1. Surely wrong, probably needs sprite orthogonality
m_bg->draw( screen, bitmap,cliprect, 0);
- m_spr->draw_sprites(m_CG10103_m_vram, 0x2000, screen, bitmap, cliprect, 0x2, 0x0);
+ m_spr->draw_sprites(m_buffered_spriteram2.get(), 0x2000, screen, bitmap, cliprect, 0x2, 0x0);
m_tx->draw(screen, bitmap, cliprect, 0);
- m_spr->draw_sprites(m_CG10103_m_vram, 0x2000, screen, bitmap, cliprect, 0x2, 0x2);
+ m_spr->draw_sprites(m_buffered_spriteram2.get(), 0x2000, screen, bitmap, cliprect, 0x2, 0x2);
return 0;
}
-
-void gstriker_state::video_start()
-{
- // Initialize the chip for the score plane
- m_tx->set_transparent_pen(0xf);
-
- // Initialize the chip for the screen plane
- m_bg->set_transparent_pen(0xf);
-}