static bool denise_sprfmode64, denise_bplfmode64;
static int bpldat_fmode;
static int fetchmode_size_denise, fetchmode_mask_denise;
-static int delayed_vblank_ecs;
+static int delayed_vblank_ecs, delayed_pvblank_aga;
static bool denise_hdiw, denise_hblank, denise_phblank, denise_vblank, denise_pvblank;
static bool denise_blank_active, denise_blank_active2, denise_hblank_active, denise_vblank_active;
static bool debug_special_csync, debug_special_hvsync;
bool denise_is_vb(void)
{
- if (delayed_vblank_ecs > 0) {
- return true;
- } else if (delayed_vblank_ecs < 0) {
- return false;
+ if (exthblankon_aga) {
+ if (delayed_pvblank_aga > 0) {
+ return true;
+ } else if (delayed_pvblank_aga < 0) {
+ return false;
+ }
+ } else {
+ if (delayed_vblank_ecs > 0) {
+ return true;
+ } else if (delayed_vblank_ecs < 0) {
+ return false;
+ }
}
return denise_vblank;
}
if (rd->rga == 0x03c && previous_strobe != 0x03c) {
delayed_vblank_ecs = -1;
+ delayed_pvblank_aga = -1;
delayed_sprite_vblank_ecs = -1;
} else if (rd->rga != 0x03c && previous_strobe == 0x03c) {
delayed_vblank_ecs = 1;
+ delayed_pvblank_aga = 1;
delayed_sprite_vblank_ecs = 1;
}
denise_phblank = true;
if (exthblankon_aga) {
hbstrt_offset = internal_pixel_cnt;
- if (delayed_vblank_ecs > 0) {
+ if (delayed_pvblank_aga > 0) {
denise_pvblank = true;
- delayed_vblank_ecs = 0;
+ delayed_pvblank_aga = 0;
denise_vblank_active = denise_pvblank;
denise_blank_active2 = denise_hblank_active || denise_vblank_active;
denise_blank_active = denise_blank_enabled ? denise_blank_active2 : false;
denise_phblank = false;
if (exthblankon_aga) {
hbstop_offset = internal_pixel_cnt;
- if (delayed_vblank_ecs < 0) {
+ if (delayed_pvblank_aga < 0) {
denise_pvblank = false;
- delayed_vblank_ecs = 0;
+ delayed_pvblank_aga = 0;
denise_vblank_active = denise_pvblank;
denise_blank_active2 = denise_hblank_active || denise_vblank_active;
denise_blank_active = denise_blank_enabled ? denise_blank_active2 : false;
if (exthblankon_ecs) {
hbstop_offset = internal_pixel_cnt;
if (delayed_vblank_ecs < 0) {
- denise_pvblank = false;
+ denise_vblank = false;
delayed_vblank_ecs = 0;
denise_vblank_active = denise_pvblank;
denise_blank_active2 = denise_hblank_active || denise_vblank_active;
denise_hblank = true;
do_hb();
} else {
- if (delayed_vblank_ecs > 0) {
+ if (delayed_pvblank_aga > 0) {
denise_pvblank = true;
- delayed_vblank_ecs = 0;
+ delayed_pvblank_aga = 0;
denise_vblank_active = denise_pvblank;
denise_blank_active2 = denise_hblank_active || denise_vblank_active;
denise_blank_active = denise_blank_enabled ? denise_blank_active2 : false;
}
- if (delayed_vblank_ecs < 0) {
+ if (delayed_pvblank_aga < 0) {
denise_pvblank = false;
- delayed_vblank_ecs = 0;
+ delayed_pvblank_aga = 0;
denise_vblank_active = denise_pvblank;
denise_blank_active2 = denise_hblank_active || denise_vblank_active;
denise_blank_active = denise_blank_enabled ? denise_blank_active2 : false;