From 4eef78968448d0e63ac2f9ce09264325501af37f Mon Sep 17 00:00:00 2001 From: dinkc64 <12570148+dinkc64@users.noreply.github.com> Date: Sat, 23 Jun 2018 03:39:43 +0000 Subject: [PATCH] d_mystwarr: deal with picky game. grr --- src/burn/drv/konami/d_mystwarr.cpp | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/burn/drv/konami/d_mystwarr.cpp b/src/burn/drv/konami/d_mystwarr.cpp index 16f45d6ba..06c105373 100644 --- a/src/burn/drv/konami/d_mystwarr.cpp +++ b/src/burn/drv/konami/d_mystwarr.cpp @@ -2844,8 +2844,10 @@ static INT32 DrvFrame() ZetNewFrame(); INT32 nInterleave = 60; + //INT32 nCyclesTotal[2] = { 16000000 / 60, 8000000 / 60 }; INT32 nCyclesTotal[2] = { (INT32)((double)16000000 / 59.185606), (INT32)((double)8000000 / 59.185606) }; INT32 nCyclesDone[2] = { 0, 0 }; + INT32 drawn = 0; SekOpen(0); ZetOpen(0); @@ -2857,17 +2859,12 @@ static INT32 DrvFrame() { if (i == 0) SekSetIRQLine(4, CPU_IRQSTATUS_AUTO); - - if (i == ((nInterleave * 240)/256)) { + // note: mystwarr is really picky. + // draw @ vbl: weird flickers between scene transitions in attract sequence, so we draw at end of frame instead. + if (i == ((nInterleave * (240+10))/256)) { // +10 otherwise flickers on char.selection screen (mystwarr) SekSetIRQLine(2, CPU_IRQSTATUS_AUTO); } } - - if (i == ((nInterleave * 240)/256)) { - if (pBurnDraw) { - DrvDraw(); - } - } } if (nGame == 2 || nGame == 3) @@ -2883,7 +2880,9 @@ static INT32 DrvFrame() SekSetIRQLine(5, CPU_IRQSTATUS_AUTO); if (pBurnDraw) { + // draw here to fix flickery and missing text in service mode DrvDraw(); + drawn = 1; } } } @@ -2902,6 +2901,7 @@ static INT32 DrvFrame() if (i == ((nInterleave * 247) / 256)) { if (pBurnDraw) { DrvDraw(); + drawn = 1; } } } @@ -2913,6 +2913,7 @@ static INT32 DrvFrame() if (pBurnDraw) { DrvDraw(); + drawn = 1; } } } @@ -2934,6 +2935,12 @@ static INT32 DrvFrame() ZetClose(); SekClose(); + if (!drawn) { + if (pBurnDraw) { + DrvDraw(); + } + } + return 0; }