1
0
This commit is contained in:
otya128
2016-12-16 20:18:47 +09:00
parent 66dad65ab7
commit aedb1ffd4e
2 changed files with 17 additions and 4 deletions

View File

@@ -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*/)

View File

@@ -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();