Fix WAIT
This commit is contained in:
@@ -283,7 +283,7 @@ class BuiltinFunction
|
|||||||
static void WAIT(PetitComputer p, DefaultValue!int time)
|
static void WAIT(PetitComputer p, DefaultValue!int time)
|
||||||
{
|
{
|
||||||
time.setDefaultValue(1);
|
time.setDefaultValue(1);
|
||||||
p.vsync(cast(int)time);
|
p.wait(cast(int)time);
|
||||||
}
|
}
|
||||||
//TODO:プチコンのCLSには引数の個数制限がない
|
//TODO:プチコンのCLSには引数の個数制限がない
|
||||||
static void CLS(PetitComputer p/*vaarg*/)
|
static void CLS(PetitComputer p/*vaarg*/)
|
||||||
|
|||||||
@@ -321,11 +321,21 @@ class PetitComputer
|
|||||||
SDL_Renderer* renderer;
|
SDL_Renderer* renderer;
|
||||||
int vsyncFrame;
|
int vsyncFrame;
|
||||||
int vsyncCount;
|
int vsyncCount;
|
||||||
|
bool isVSync;
|
||||||
|
bool waitFlag;
|
||||||
void vsync(int f)
|
void vsync(int f)
|
||||||
{
|
{
|
||||||
|
waitFlag = true;
|
||||||
|
isVSync = true;
|
||||||
vsyncCount = 0;
|
vsyncCount = 0;
|
||||||
vsyncFrame = f;
|
vsyncFrame = f;
|
||||||
}
|
}
|
||||||
|
void wait(int f)
|
||||||
|
{
|
||||||
|
waitFlag = true;
|
||||||
|
isVSync = false;
|
||||||
|
vsyncFrame = f;
|
||||||
|
}
|
||||||
Graphic graphic;
|
Graphic graphic;
|
||||||
Mutex keybuffermutex;
|
Mutex keybuffermutex;
|
||||||
int keybufferpos;
|
int keybufferpos;
|
||||||
@@ -1080,7 +1090,7 @@ class PetitComputer
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
for(int i = 0; !quit && maincntRender == oldmaincnt && !vsyncFrame && running; i++)
|
for(int i = 0; !quit && maincntRender == oldmaincnt && !waitFlag && running; i++)
|
||||||
{
|
{
|
||||||
//writefln("%04X:%s", vm.pc, vm.getCurrent);
|
//writefln("%04X:%s", vm.pc, vm.getCurrent);
|
||||||
running = vm.runStep();
|
running = vm.runStep();
|
||||||
@@ -1142,23 +1152,26 @@ class PetitComputer
|
|||||||
{
|
{
|
||||||
maincnt++;
|
maincnt++;
|
||||||
}
|
}
|
||||||
if(vsyncFrame)
|
if(waitFlag)
|
||||||
{
|
{
|
||||||
//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
|
||||||
graphic.updateVM();
|
graphic.updateVM();
|
||||||
auto endmaincnt = maincnt + vsyncFrame;
|
auto endmaincnt = maincnt + vsyncFrame;
|
||||||
|
oldmaincnt = maincntRender;
|
||||||
while (maincnt < endmaincnt && !quit)
|
while (maincnt < endmaincnt && !quit)
|
||||||
{
|
{
|
||||||
oldmaincnt = maincntRender;
|
|
||||||
SDL_Delay(1);
|
SDL_Delay(1);
|
||||||
if (maincntRender != oldmaincnt)
|
if (maincntRender != oldmaincnt)
|
||||||
{
|
{
|
||||||
maincnt++;
|
maincnt++;
|
||||||
|
oldmaincnt = maincntRender;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
vsyncFrame = 0;
|
vsyncFrame = 0;
|
||||||
|
waitFlag = false;
|
||||||
|
isVSync = false;
|
||||||
}
|
}
|
||||||
//maincnt = cast(int)((SDL_GetTicks() - startcnt) / frame);
|
//maincnt = cast(int)((SDL_GetTicks() - startcnt) / frame);
|
||||||
graphic.updateVM();
|
graphic.updateVM();
|
||||||
|
|||||||
Reference in New Issue
Block a user