diff -ur dosbox_org/include/cpu.h dosbox/include/cpu.h --- dosbox_org/include/cpu.h 2004-04-24 11:17:00.000000000 +0200 +++ dosbox/include/cpu.h 2004-07-15 10:57:54.000000000 +0200 @@ -27,6 +27,7 @@ extern Bits CPU_Cycles; extern Bits CPU_CycleLeft; extern Bits CPU_CycleMax; +extern bool CPU_TimeSynched; /* Some common Defines */ /* A CPU Handler */ diff -ur dosbox_org/include/mapper.h dosbox/include/mapper.h --- dosbox_org/include/mapper.h 2004-06-30 16:40:08.000000000 +0200 +++ dosbox/include/mapper.h 2004-07-15 10:57:54.000000000 +0200 @@ -21,7 +21,7 @@ enum MapKeys { MK_f1,MK_f2,MK_f3,MK_f4,MK_f5,MK_f6,MK_f7,MK_f8,MK_f9,MK_f10,MK_f11,MK_f12, - MK_return,MK_kpminus,MK_scrolllock,MK_printscreen,MK_pause, + MK_return,MK_kpminus,MK_equals,MK_scrolllock,MK_printscreen,MK_pause, }; diff -ur dosbox_org/src/cpu/cpu.cpp dosbox/src/cpu/cpu.cpp --- dosbox_org/src/cpu/cpu.cpp 2004-07-12 14:42:20.000000000 +0200 +++ dosbox/src/cpu/cpu.cpp 2004-07-15 11:04:10.000000000 +0200 @@ -44,6 +44,7 @@ Bits CPU_CycleMax = 2500; Bits CPU_CycleUp = 0; Bits CPU_CycleDown = 0; +bool CPU_TimeSynched = false; CPU_Decoder * cpudecoder; void CPU_Core_Full_Init(void); @@ -1317,6 +1318,11 @@ GFX_SetTitle(CPU_CycleMax,-1,false); } +static void CPU_ToggleTimeSynch(void) { + CPU_TimeSynched = ! CPU_TimeSynched; + GFX_SetTitle(CPU_CycleMax,-1,false); +} + void CPU_Init(Section* sec) { Section_prop * section=static_cast(sec); reg_eax=0; @@ -1352,10 +1358,12 @@ #endif MAPPER_AddHandler(CPU_CycleDecrease,MK_f11,MMOD1,"cycledown","Dec Cycles"); MAPPER_AddHandler(CPU_CycleIncrease,MK_f12,MMOD1,"cycleup" ,"Inc Cycles"); + MAPPER_AddHandler(CPU_ToggleTimeSynch,MK_equals,MMOD1,"timesynched" ,"Tog. TimeSynch"); CPU_Cycles=0; CPU_CycleMax=section->Get_int("cycles");; CPU_CycleUp=section->Get_int("cycleup"); CPU_CycleDown=section->Get_int("cycledown"); + CPU_TimeSynched=section->Get_bool("timesynched"); const char * core=section->Get_string("core"); cpudecoder=&CPU_Core_Normal_Run; if (!strcasecmp(core,"normal")) { diff -ur dosbox_org/src/dos/drive_cache.cpp dosbox/src/dos/drive_cache.cpp --- dosbox_org/src/dos/drive_cache.cpp 2004-04-13 15:35:48.000000000 +0200 +++ dosbox/src/dos/drive_cache.cpp 2004-07-15 10:57:54.000000000 +0200 @@ -248,6 +248,10 @@ } // LOG_DEBUG("DIR: Caching out %s : dir %s",expand,dir->orgname); + //clear cache first? + for(Bit32u i=0; ifileList.size(); i++) { if (dirSearch[srchNr]==dir->fileList[i]) dirSearch[srchNr] = 0; diff -ur dosbox_org/src/dosbox.cpp dosbox/src/dosbox.cpp --- dosbox_org/src/dosbox.cpp 2004-07-04 22:59:38.000000000 +0200 +++ dosbox/src/dosbox.cpp 2004-07-15 10:57:54.000000000 +0200 @@ -109,6 +109,10 @@ Bits ret,NewTicks; while (1) { if (PIC_RunQueue()) { + if (CPU_TimeSynched) { + Bits current_tick = GetTicks(); + if (current_tick != LastTicks) CPU_Cycles = 0; + } ret=(*cpudecoder)(); if (ret<0) return 1; if (ret>0) { @@ -231,6 +235,7 @@ secprop->Add_int("cycles",2500); secprop->Add_int("cycleup",500); secprop->Add_int("cycledown",20); + secprop->Add_bool("timesynched",false); MSG_Add("CPU_CONFIGFILE_HELP", "core -- CPU Core used in emulation: normal,full" #if (C_DYNAMIC_X86) diff -ur dosbox_org/src/gui/sdl_mapper.cpp dosbox/src/gui/sdl_mapper.cpp --- dosbox_org/src/gui/sdl_mapper.cpp 2004-06-30 16:40:08.000000000 +0200 +++ dosbox/src/gui/sdl_mapper.cpp 2004-07-15 10:57:54.000000000 +0200 @@ -719,6 +719,9 @@ case MK_kpminus: key=SDLK_KP_MINUS; break; + case MK_equals: + key=SDLK_EQUALS; + break; case MK_scrolllock: key=SDLK_SCROLLOCK; break; @@ -1103,7 +1106,7 @@ } void MAPPER_AddHandler(MAPPER_Handler * handler,MapKeys key,Bitu mods,char * eventname,char * buttonname) { - char tempname[17]; + char tempname[99]; strcpy(tempname,"hand_"); strcat(tempname,eventname); new CHandlerEvent(tempname,handler,key,mods,buttonname); diff -ur dosbox_org/src/gui/sdlmain.cpp dosbox/src/gui/sdlmain.cpp --- dosbox_org/src/gui/sdlmain.cpp 2004-07-12 14:42:20.000000000 +0200 +++ dosbox/src/gui/sdlmain.cpp 2004-07-15 11:01:49.000000000 +0200 @@ -166,6 +166,9 @@ static void CaptureMouse(void); extern char * RunningProgram; + +#include "cpu.h" + void GFX_SetTitle(Bits cycles,Bits frameskip,bool paused){ char title[200]={0}; static Bits internal_cycles=0; @@ -173,9 +176,9 @@ if(cycles != -1) internal_cycles = cycles; if(frameskip != -1) internal_frameskip = frameskip; if(paused) - sprintf(title,"DOSBox %s,Cpu Cycles: %8d, Frameskip %2d, Program: %8s PAUSED",VERSION,internal_cycles,internal_frameskip,RunningProgram); + sprintf(title,"DOSBox %s,Cpu Cycles %c%8d, Frameskip %2d, Program: %8s PAUSED",VERSION,CPU_TimeSynched ? '<' : '=',internal_cycles,internal_frameskip,RunningProgram); else - sprintf(title,"DOSBox %s,Cpu Cycles: %8d, Frameskip %2d, Program: %8s",VERSION,internal_cycles,internal_frameskip,RunningProgram); + sprintf(title,"DOSBox %s,Cpu Cycles %c%8d, Frameskip %2d, Program: %8s",VERSION,CPU_TimeSynched ? '<' : '=',internal_cycles,internal_frameskip,RunningProgram); SDL_WM_SetCaption(title,VERSION); }