// license:BSD-3-Clause // copyright-holders:Farfetch'd, David Haywood #include "emu.h" #include "includes/gstriker.h" /*** 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(0x2000); m_buffered_spriteram2 = std::make_unique(0x2000); save_pointer(NAME(m_buffered_spriteram), 0x2000); save_pointer(NAME(m_buffered_spriteram2), 0x2000); } WRITE_LINE_MEMBER(gstriker_state::screen_vblank) { // 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); } } 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 m_bg->draw( screen, bitmap,cliprect, 0); 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_buffered_spriteram2.get(), 0x2000, screen, bitmap, cliprect, 0x2, 0x2); return 0; }