From 190760d33736bbf7335261b1962dd922c441117b Mon Sep 17 00:00:00 2001 From: grinvader <> Date: Wed, 18 May 2005 00:36:00 +0000 Subject: [PATCH] EmuSpeed setting saved in config file and bound to current code... fastmotion is a bit overpowered. -_-; --- zsnes/src/cfgload.c | 20 ++++++++-------- zsnes/src/gui/gui.asm | 3 ++- zsnes/src/gui/guiwindp.inc | 49 +++++++++++++++++++------------------- zsnes/src/uic.c | 5 ++-- zsnes/src/vcache.asm | 27 +++++++++++++++------ 5 files changed, 59 insertions(+), 45 deletions(-) diff --git a/zsnes/src/cfgload.c b/zsnes/src/cfgload.c index d1b5dceb..455d57ca 100644 --- a/zsnes/src/cfgload.c +++ b/zsnes/src/cfgload.c @@ -111,7 +111,7 @@ extern unsigned int newengen; extern char SRAMDrive[2]; extern unsigned char DontSavePath; extern unsigned char guioff; -extern unsigned int frameskip; +extern unsigned char frameskip; extern unsigned char enterpress; extern unsigned char cvidmode; extern unsigned char antienab; @@ -362,16 +362,16 @@ void DOScreatenewcfg() { char buffer[4096]; FILE *fp = 0; - + if (cfgdontsave == 1) { return; } -#ifdef __LINUX__ +#ifdef __LINUX__ chdir(zcfgdir); -#endif - +#endif + fp = fopen(CMDLineStr, "wb"); if (!fp) { @@ -490,7 +490,7 @@ void DOScreatenewcfg() WRITE_LINE("; Sound Sampling Rate\r\n"); WRITE_LINE("; 0 = 8,000 Hz, 1 = 11,025 Hz, 2 = 22,050 Hz\r\n"); WRITE_LINE("; 3 = 44,100 Hz, 4 = 16,000 Hz, 5 = 32,000 Hz\r\n"); - WRITE_LINE("; 6 = 48,000 Hz\r\n\r\n"); + WRITE_LINE("; 6 = 48,000 Hz\r\n\r\n"); sprintf(buffer, "SoundRate = %d\r\n\r\n", cfgSoundQuality); SAVE_LINE(buffer); @@ -617,7 +617,7 @@ void getcfg() char temp; unsigned char no_save = 0; _forceauto = 0; - + //open file ZOpenFileName = CMDLineStr; ZOpenMode = 0; @@ -706,7 +706,7 @@ void getcfg() #ifndef __LINUX__ if (temp >= 'a' && temp <= 'z') temp -= ('a' - 'A'); -#endif +#endif _usespace = 1; _stringb[j] = temp; _strlenb++; @@ -1248,7 +1248,7 @@ void getcfg() { if (_strlenb >= 3) { -#ifndef __LINUX__ +#ifndef __LINUX__ if (_stringb[1] == ':' && _stringb[2] == '\\') { cfgloadgdir = 1; @@ -1262,7 +1262,7 @@ void getcfg() strncpy(LoadDir, _stringb, _strlenb); LoadDir[_strlenb] = '\0'; -#endif +#endif strcpy(LoadDirB, LoadDir); #ifndef __LINUX__ } diff --git a/zsnes/src/gui/gui.asm b/zsnes/src/gui/gui.asm index 813087ec..e548d322 100644 --- a/zsnes/src/gui/gui.asm +++ b/zsnes/src/gui/gui.asm @@ -105,7 +105,7 @@ EXTSYM JoyMaxX209,JoyMinY209,JoyMaxY209,GetCoords,GetCoords3,MultiTap,SFXEnable EXTSYM RestoreSystemVars,GUIBIFIL,GUIHQ2X,GUIHQ3X,GUIHQ4X,firstsaveinc,nssdip1 EXTSYM nssdip2,nssdip3,nssdip4,nssdip5,nssdip6,SkipMovie,MovieStop,MoviePlay EXTSYM MovieRecord,MovieInsertChapter,MovieSeekAhead,MovieSeekBehind -EXTSYM ResetDuringMovie,MovieDumpRaw,EmuSpeed +EXTSYM ResetDuringMovie,MovieDumpRaw %ifdef __LINUX__ EXTSYM numlockptr @@ -604,6 +604,7 @@ NEWSYM INCRFrameKey, dd 0 NEWSYM PauseLoad, db 0 NEWSYM PauseRewind, db 0 NEWSYM KeyResetSpeed, dd 0 +NEWSYM EmuSpeed, db 29 ; 29 = 1x, 0 = /30 and 58 = 30x ;end NEWSYM end GUIsave equ $-GUIRAdd diff --git a/zsnes/src/gui/guiwindp.inc b/zsnes/src/gui/guiwindp.inc index 05f4ab65..eb7e0714 100644 --- a/zsnes/src/gui/guiwindp.inc +++ b/zsnes/src/gui/guiwindp.inc @@ -3062,7 +3062,7 @@ DisplayGUISearch: ; ret ;; DrawGUIButton 13,197,30,239,41,GUICSrcText8+2,40,0,0 ; ret - + .startcheat ; Start cmp byte[CheatWinMode],1 ; Determine which CS window we're on je near Incheatmode @@ -3073,8 +3073,8 @@ DisplayGUISearch: mov dword[GUIwinsizex+13*4],170 mov dword[GUIwinsizey+13*4],150 call DrawWindowSearch - - + + mov al,[GUIWincol] ; Yellow Shadow mov byte[GUItextcolor],al GUIOuttextwin2 13,6,16,GUICSrcText1 @@ -3101,28 +3101,28 @@ DisplayGUISearch: TextWindowMacro 13,25,85,GUICSrcText7 TextWindowMacro 13,25,115,GUICSrcText9 TextWindowMacro 13,25,125,GUICSrcTextA - - + + DrawGUIButton 13,95,140,140,152,GUICSrcTextB,50,0,1 ; Button - - + + GUIDisplayButtonHole 13,11,28,byte[CheatSrcByteSize],0 ; Ratio Buttons GUIDisplayButtonHole 13,11,38,byte[CheatSrcByteSize],1 GUIDisplayButtonHole 13,11,48,byte[CheatSrcByteSize],2 GUIDisplayButtonHole 13,11,58,byte[CheatSrcByteSize],3 - + GUIDisplayButtonHole 13,11,73,byte[CheatSrcByteBase],0 GUIDisplayButtonHole 13,11,83,byte[CheatSrcByteBase],1 - + GUIDisplayButtonHole 13,11,113,byte[CheatSrcSearchType],0 GUIDisplayButtonHole 13,11,123,byte[CheatSrcSearchType],1 ret - + Incheatmode: ; Return and Re-search mov dword[GUIwinsizex+13*4],180 mov dword[GUIwinsizey+13*4],150 call DrawWindowSearch - + mov byte[GUItextcolor],217 ; Text And Shadow cmp byte[GUIWincoladd],0 je .zero2 @@ -3135,15 +3135,15 @@ Incheatmode: ; Return and Re-search TextWindowMacro 13,5,40,GUICSrcTextO TextWindowMacro 13,5,50,GUICSrcTextP jmp DisplayChtSrcRes.nosearch - + CheatSearching: ; Exact Value Search cmp byte[CheatSrcSearchType],1 je near CheatSearchingComp TextWindowMacro 13,5,20,GUICSrcTextD ; Text (setup?) - + DrawGUIWinBox 13,10,40,80,47,167 ; Input Box - + mov dword[GUIWincol],148+10 ; Draw border cmp byte[cwindrawn],1 @@ -3178,7 +3178,7 @@ CheatSearching: ; Exact Value Search mov byte[GUItextcolor],202 ; Alt Color .notdark GUIOuttextwin2 13,13,42,CSInputDisplay - + mov byte[GUItextcolor],221 ; Green Text cmp byte[GUIWincoladd],0 je .zero4 @@ -3189,7 +3189,7 @@ CheatSearching: ; Exact Value Search mov byte[GUItextcolor],207 ; Alt Color .notdark2 GUIOuttextwin2 13,12,41,CSInputDisplay - + mov byte[GUItextcolor],217 ; More Text cmp byte[GUIWincoladd],0 je .zero2 @@ -6315,17 +6315,18 @@ DisplayGUISpeed: ;Speed Options mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox GUIDisplayIconWin 21,11,165,[GUITemp] - + mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[FastFwdToggle],0 je .nocheckbox1 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox1 - GUIDisplayIconWin 21,11,175,[GUITemp] + GUIDisplayIconWin 21,11,175,[GUITemp] mov eax,dword[GUIwinposx+21*4] ;Slider mov ebx,dword[GUIwinposy+21*4] + add eax,15 add ebx,31 mov ecx,eax add ecx,116 @@ -6385,11 +6386,11 @@ DisplayGUISpeed: ;Speed Options mov byte[GUItextcolor],222 .zero4 GUIOuttextwin2 21,77,18,[GUITemp] - - + + cmp byte[frameskip],0 ; Determine if AutoFR is enabled je near .auto - + DrawGUIWinBox 21,75,42,93,49,167 ; Frameskip (if not AutoFR) mov al,[frameskip] add al,47 @@ -6409,7 +6410,7 @@ DisplayGUISpeed: ;Speed Options .zero6 DrawGUIButton 21,97,42,105,50,GUISpeedTextY,12,-2,-1 DrawGUIButton 21,108,42,116,50,GUISpeedTextZ,13,-2,-1 - + mov dword[GUIWincol],148+10 ; Draw borders cmp byte[cwindrawn],1 jne .noone2 @@ -6432,7 +6433,7 @@ DisplayGUISpeed: ;Speed Options DrawGUIWinBox 21,95,42,94,49,dl ret - + .auto ; Max Frameskip (if AutoFR) DrawGUIWinBox 21,96,42,114,49,167 mov al,[maxskip] @@ -6453,7 +6454,7 @@ DisplayGUISpeed: ;Speed Options .zero7 DrawGUIButton 21,118,42,126,50,GUISpeedTextY,12,-2,-1 DrawGUIButton 21,129,42,137,50,GUISpeedTextZ,13,-2,-1 - + mov dword[GUIWincol],148+10 ; Draw borders cmp byte[cwindrawn],1 jne .noone3 diff --git a/zsnes/src/uic.c b/zsnes/src/uic.c index e7ae0eda..30a4e6c6 100644 --- a/zsnes/src/uic.c +++ b/zsnes/src/uic.c @@ -136,11 +136,10 @@ unsigned char DisplayS = 0; unsigned char SPC700sh = 0; unsigned char OffBy1Line = 0; unsigned char *spc7110romptr; - + unsigned char MusicRelVol = 75; unsigned char MusicVol = 0; unsigned char MMXextSupport = 0; -unsigned char EmuSpeed = 29; // 29 = 1x, 0 = /30 and 58 = 30x void outofmemory(); void init(); @@ -157,7 +156,7 @@ void *doMemAlloc(size_t size) void *ptr = NULL; ptr = malloc(size); if (!ptr) - { + { asm_call(outofmemory); } return(ptr); diff --git a/zsnes/src/vcache.asm b/zsnes/src/vcache.asm index e3908064..8180e6ae 100644 --- a/zsnes/src/vcache.asm +++ b/zsnes/src/vcache.asm @@ -49,7 +49,7 @@ EXTSYM oamram,objhipr,objptr,objptrn,objsize1,objsize2,spritetablea,sprleftpr EXTSYM sprlefttot,vcache4b,objadds1,objadds2,objmovs1,objmovs2,tltype4b EXTSYM vidmemch4,vram,bgptr,bgptrc,bgptrd,curtileptr,vcache2b,vcache8b,vidmemch8 EXTSYM offsetmshl,NextLineCache,tltype2b,tltype8b,objwlrpos,snesinputdefault -EXTSYM cycleinputdevice,Change_Dir,LoadDrive,LoadDir +EXTSYM cycleinputdevice,Change_Dir,LoadDrive,LoadDir,EmuSpeed ; Process stuff & Cache sprites @@ -303,6 +303,7 @@ NEWSYM cachevideo mov dword[sramb4save],0 .nofocussave + ; fast forward goes over all other throttles cmp byte[FastFwdToggle],0 jne .ffmode2 mov eax,[KeyFastFrwrd] @@ -319,7 +320,7 @@ NEWSYM cachevideo cmp byte[FastForwardLock],1 je near .fastfor .ffskip - + ; next up, check for slowdown cmp byte[FastFwdToggle],0 jne .sdmode2 mov eax,[KeySlowDown] @@ -337,13 +338,25 @@ NEWSYM cachevideo je near .slowdwn jmp .sdskip .slowdwn - mov byte[SloMo],1 ; hardcoded 50% slowdown - jmp .skipnoslowdown + mov byte[SloMo],1 ; hardcoded /2 slowdown (for now) + jmp .throttleskip .sdskip mov byte[SloMo],0 -.skipnoslowdown + ; now we can look at emuspeed + cmp byte[EmuSpeed],30 ; 0-28 slow, 29 normal, 30-58 skip + jb .noskipping + inc byte[frskipper] + push ebx + mov bl,[EmuSpeed] + sub bl,29 ; 30-58 -> 1-29 frames to skip, 2x-30x speed + jmp .fastforb +.noskipping + mov byte[SloMo],29 + mov al,[EmuSpeed] + sub byte[SloMo],al ; 0-29 -> repeat 29-0 times, /30-1x speed +.throttleskip mov ax,[SloMo] - inc ax ; total times frame is drawn + inc ax ; total times frame is drawn cmp byte[frameskip],0 jne near .frameskip @@ -373,7 +386,7 @@ NEWSYM cachevideo .fastfor inc byte[frskipper] push ebx - mov bl,10 ; hardcoded number of frames to skip + mov bl,10 ; hardcoded 11x fastforward (for now) jmp .fastforb .frameskip inc byte[frskipper]