diff --git a/src/cpu/cpu.cpp b/src/cpu/cpu.cpp index c162cede..8a63b905 100644 --- a/src/cpu/cpu.cpp +++ b/src/cpu/cpu.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: cpu.cpp,v 1.58 2004-06-10 07:13:02 harekiet Exp $ */ +/* $Id: cpu.cpp,v 1.59 2004-07-12 12:42:19 qbix79 Exp $ */ #include #include "dosbox.h" @@ -1290,7 +1290,7 @@ void CPU_ENTER(bool use32,Bitu bytes,Bitu level) { reg_esp=(reg_esp&~cpu.stack.mask)|((sp_index)&cpu.stack.mask); } -extern void GFX_SetTitle(Bits cycles ,Bits frameskip); +extern void GFX_SetTitle(Bits cycles ,Bits frameskip,bool paused); static void CPU_CycleIncrease(void) { Bits old_cycles=CPU_CycleMax; if(CPU_CycleUp < 100){ @@ -1302,7 +1302,7 @@ static void CPU_CycleIncrease(void) { CPU_CycleLeft=0;CPU_Cycles=0; if (CPU_CycleMax==old_cycles) CPU_CycleMax++; LOG_MSG("CPU:%d cycles",CPU_CycleMax); - GFX_SetTitle(CPU_CycleMax,-1); + GFX_SetTitle(CPU_CycleMax,-1,false); } static void CPU_CycleDecrease(void) { @@ -1314,7 +1314,7 @@ static void CPU_CycleDecrease(void) { CPU_CycleLeft=0;CPU_Cycles=0; if (CPU_CycleMax <= 0) CPU_CycleMax=1; LOG_MSG("CPU:%d cycles",CPU_CycleMax); - GFX_SetTitle(CPU_CycleMax,-1); + GFX_SetTitle(CPU_CycleMax,-1,false); } void CPU_Init(Section* sec) { @@ -1377,6 +1377,6 @@ void CPU_Init(Section* sec) { if(!CPU_CycleUp) CPU_CycleUp = 500; if(!CPU_CycleDown) CPU_CycleDown = 20; CPU_CycleLeft=0; - GFX_SetTitle(CPU_CycleMax,-1); + GFX_SetTitle(CPU_CycleMax,-1,false); } diff --git a/src/debug/debug.cpp b/src/debug/debug.cpp index e06baeb0..7528f506 100644 --- a/src/debug/debug.cpp +++ b/src/debug/debug.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: debug.cpp,v 1.55 2004-06-20 19:13:10 qbix79 Exp $ */ +/* $Id: debug.cpp,v 1.56 2004-07-12 12:42:19 qbix79 Exp $ */ #include "programs.h" @@ -1672,7 +1672,7 @@ void DEBUG_Init(Section* sec) { MSG_Add("DEBUG_CONFIGFILE_HELP","Nothing to setup yet!\n"); DEBUG_DrawScreen(); /* Add some keyhandlers */ - MAPPER_AddHandler(DEBUG_Enable,MK_kpminus,0,"debugger","Debugger"); + MAPPER_AddHandler(DEBUG_Enable,MK_pause,0,"debugger","Debugger"); /* Clear the TBreakpoint list */ memset((void*)&codeViewData,0,sizeof(codeViewData)); /* setup debug.com */ diff --git a/src/dos/dos_execute.cpp b/src/dos/dos_execute.cpp index 5ebe6417..0d0622e5 100644 --- a/src/dos/dos_execute.cpp +++ b/src/dos/dos_execute.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: dos_execute.cpp,v 1.42 2004-07-08 20:08:52 qbix79 Exp $ */ +/* $Id: dos_execute.cpp,v 1.43 2004-07-12 12:42:20 qbix79 Exp $ */ #include #include @@ -93,14 +93,14 @@ static void RestoreRegisters(void) { reg_sp+=18; } -extern void GFX_SetTitle(Bits cycles,Bits frameskip); +extern void GFX_SetTitle(Bits cycles,Bits frameskip,bool paused); void DOS_UpdatePSPName(void) { DOS_MCB mcb(dos.psp()-1); static char name[9]; mcb.GetFileName(name); if (!strlen(name)) strcpy(name,"DOSBOX"); RunningProgram=name; - GFX_SetTitle(-1,-1); + GFX_SetTitle(-1,-1,false); } bool DOS_Terminate(bool tsr) { diff --git a/src/gui/render.cpp b/src/gui/render.cpp index 1e1abda6..50bdc749 100644 --- a/src/gui/render.cpp +++ b/src/gui/render.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: render.cpp,v 1.28 2004-07-04 21:18:05 harekiet Exp $ */ +/* $Id: render.cpp,v 1.29 2004-07-12 12:42:20 qbix79 Exp $ */ #include #include @@ -360,17 +360,17 @@ void RENDER_SetSize(Bitu width,Bitu height,Bitu bpp,double ratio,bool dblw,bool RENDER_ReInit(); } -extern void GFX_SetTitle(Bits cycles, Bits frameskip); +extern void GFX_SetTitle(Bits cycles, Bits frameskip,bool paused); static void IncreaseFrameSkip(void) { if (render.frameskip.max<10) render.frameskip.max++; LOG_MSG("Frame Skip at %d",render.frameskip.max); - GFX_SetTitle(-1,render.frameskip.max); + GFX_SetTitle(-1,render.frameskip.max,false); } static void DecreaseFrameSkip(void) { if (render.frameskip.max>0) render.frameskip.max--; LOG_MSG("Frame Skip at %d",render.frameskip.max); - GFX_SetTitle(-1,render.frameskip.max); + GFX_SetTitle(-1,render.frameskip.max,false); } void RENDER_Init(Section * sec) { @@ -404,6 +404,6 @@ void RENDER_Init(Section * sec) { } MAPPER_AddHandler(DecreaseFrameSkip,MK_f7,MMOD1,"decfskip","Dec Fskip"); MAPPER_AddHandler(IncreaseFrameSkip,MK_f8,MMOD1,"incfskip","Inc Fskip"); - GFX_SetTitle(-1,render.frameskip.max); + GFX_SetTitle(-1,render.frameskip.max,false); } diff --git a/src/gui/sdlmain.cpp b/src/gui/sdlmain.cpp index 9171947d..87acd4f2 100644 --- a/src/gui/sdlmain.cpp +++ b/src/gui/sdlmain.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: sdlmain.cpp,v 1.68 2004-07-05 11:54:53 harekiet Exp $ */ +/* $Id: sdlmain.cpp,v 1.69 2004-07-12 12:42:20 qbix79 Exp $ */ #ifndef _GNU_SOURCE #define _GNU_SOURCE @@ -166,16 +166,42 @@ static SDL_Block sdl; static void CaptureMouse(void); extern char * RunningProgram; -void GFX_SetTitle(Bits cycles,Bits frameskip){ +void GFX_SetTitle(Bits cycles,Bits frameskip,bool paused){ char title[200]={0}; static Bits internal_cycles=0; static Bits internal_frameskip=0; if(cycles != -1) internal_cycles = cycles; if(frameskip != -1) internal_frameskip = frameskip; - sprintf(title,"DOSBox %s,Cpu Cycles: %8d, Frameskip %2d, Program: %s",VERSION,internal_cycles,internal_frameskip,RunningProgram); + if(paused) + sprintf(title,"DOSBox %s,Cpu Cycles: %8d, Frameskip %2d, Program: %8s PAUSED",VERSION,internal_cycles,internal_frameskip,RunningProgram); + else + sprintf(title,"DOSBox %s,Cpu Cycles: %8d, Frameskip %2d, Program: %8s",VERSION,internal_cycles,internal_frameskip,RunningProgram); SDL_WM_SetCaption(title,VERSION); } +static void PauseDOSBox(void) { + GFX_SetTitle(-1,-1,true); + bool paused = true; + SDL_Delay(500); + SDL_Event event; + while (SDL_PollEvent(&event)) { + // flush event queue. + } + while (paused) { + SDL_WaitEvent(&event); // since we're not polling, cpu usage drops to 0. + switch (event.type) { + case SDL_KEYDOWN: // Must use Pause/Break Key to resume. + case SDL_KEYUP: + if(event.key.keysym.sym==SDLK_PAUSE){ + paused=false; + GFX_SetTitle(-1,-1,false); + break; + } + } + } +} + + /* Reset the screen with current values in the sdl structure */ Bitu GFX_GetBestMode(Bitu flags) { Bitu testbpp,gotbpp,setflags; @@ -679,6 +705,11 @@ static void GUI_StartUp(Section * sec) { MAPPER_AddHandler(KillSwitch,MK_f9,MMOD1,"shutdown","ShutDown"); MAPPER_AddHandler(CaptureMouse,MK_f10,MMOD1,"capmouse","Cap Mouse"); MAPPER_AddHandler(SwitchFullScreen,MK_return,MMOD2,"fullscr","Fullscreen"); +#if C_DEBUG + /* Pause binds with activate-debugger */ +#else + MAPPER_AddHandler(PauseDOSBox,MK_pause,0,"pause","Pause"); +#endif } void Mouse_AutoLock(bool enable) {