Fix MAINCNT
This commit is contained in:
@@ -854,7 +854,7 @@ class PetitComputer
|
|||||||
long delay = (1000/60) - (cast(long)SDL_GetTicks() - profile);
|
long delay = (1000/60) - (cast(long)SDL_GetTicks() - profile);
|
||||||
if(delay > 0)
|
if(delay > 0)
|
||||||
SDL_Delay(cast(uint)delay);
|
SDL_Delay(cast(uint)delay);
|
||||||
maincnt++;
|
maincntRender++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(Throwable t)
|
catch(Throwable t)
|
||||||
@@ -864,7 +864,7 @@ class PetitComputer
|
|||||||
}
|
}
|
||||||
SDL_Window* window;
|
SDL_Window* window;
|
||||||
otya.smilebasic.vm.VM vm;
|
otya.smilebasic.vm.VM vm;
|
||||||
int maincnt;
|
int maincntRender;
|
||||||
bool running;
|
bool running;
|
||||||
bool stopflg;
|
bool stopflg;
|
||||||
void stop()
|
void stop()
|
||||||
@@ -890,6 +890,7 @@ class PetitComputer
|
|||||||
Slot[] slot;
|
Slot[] slot;
|
||||||
bool isRunningDirectMode = false;
|
bool isRunningDirectMode = false;
|
||||||
GLenum textureScaleMode;
|
GLenum textureScaleMode;
|
||||||
|
int maincnt;
|
||||||
void run(bool nodirectmode = false, string inputfile = "", bool antialiasing = false)
|
void run(bool nodirectmode = false, string inputfile = "", bool antialiasing = false)
|
||||||
{
|
{
|
||||||
if (antialiasing)
|
if (antialiasing)
|
||||||
@@ -1074,12 +1075,12 @@ class PetitComputer
|
|||||||
{
|
{
|
||||||
uint elapse;
|
uint elapse;
|
||||||
startTicks = SDL_GetTicks();
|
startTicks = SDL_GetTicks();
|
||||||
int oldmaincnt = maincnt;
|
int oldmaincnt = maincntRender;
|
||||||
//do
|
//do
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
for(int i = 0; !quit /*&& maincnt == oldmaincnt */&& !vsyncFrame && running; i++)
|
for(int i = 0; !quit && maincntRender == oldmaincnt && !vsyncFrame && running; i++)
|
||||||
{
|
{
|
||||||
//writefln("%04X:%s", vm.pc, vm.getCurrent);
|
//writefln("%04X:%s", vm.pc, vm.getCurrent);
|
||||||
running = vm.runStep();
|
running = vm.runStep();
|
||||||
@@ -1137,16 +1138,25 @@ class PetitComputer
|
|||||||
}
|
}
|
||||||
//elapse = SDL_GetTicks() - startTicks;
|
//elapse = SDL_GetTicks() - startTicks;
|
||||||
} //while(elapse <= 1000 / 60);
|
} //while(elapse <= 1000 / 60);
|
||||||
|
if (maincntRender != oldmaincnt)
|
||||||
|
{
|
||||||
|
maincnt++;
|
||||||
|
}
|
||||||
if(vsyncFrame)
|
if(vsyncFrame)
|
||||||
{
|
{
|
||||||
//FIXME:VSYNC IS NOT WAIT
|
//FIXME:VSYNC IS NOT WAIT
|
||||||
//A=MAINCNT:WAIT 50:A=MAINCNT-A->A=50
|
//A=MAINCNT:WAIT 50:A=MAINCNT-A->A=50
|
||||||
//A=MAINCNT:VSYNC 50:A=MAINCNT-A->A=0~50
|
//A=MAINCNT:VSYNC 50:A=MAINCNT-A->A=0~50
|
||||||
auto endmaincnt = maincnt + vsyncFrame;
|
|
||||||
graphic.updateVM();
|
graphic.updateVM();
|
||||||
|
auto endmaincnt = maincnt + vsyncFrame;
|
||||||
while (maincnt < endmaincnt && !quit)
|
while (maincnt < endmaincnt && !quit)
|
||||||
{
|
{
|
||||||
SDL_Delay(cast(uint)(frame));
|
oldmaincnt = maincntRender;
|
||||||
|
SDL_Delay(1);
|
||||||
|
if (maincntRender != oldmaincnt)
|
||||||
|
{
|
||||||
|
maincnt++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
vsyncFrame = 0;
|
vsyncFrame = 0;
|
||||||
}
|
}
|
||||||
@@ -1184,6 +1194,11 @@ class PetitComputer
|
|||||||
int oldCSRY = this.console.CSRY;
|
int oldCSRY = this.console.CSRY;
|
||||||
int pos;
|
int pos;
|
||||||
int historyIndex = cast(int)inputHistory.length;
|
int historyIndex = cast(int)inputHistory.length;
|
||||||
|
int oldmaincnt = maincntRender;
|
||||||
|
scope (exit)
|
||||||
|
{
|
||||||
|
maincnt += maincntRender - oldmaincnt;
|
||||||
|
}
|
||||||
void setText(wstring text)
|
void setText(wstring text)
|
||||||
{
|
{
|
||||||
console.CSRX = oldCSRX;
|
console.CSRX = oldCSRX;
|
||||||
|
|||||||
Reference in New Issue
Block a user