From 6dc7a5c5d555f37a67f302298fad8b4bc1871a3a Mon Sep 17 00:00:00 2001 From: stainless <> Date: Sat, 8 Sep 2001 02:28:25 +0000 Subject: [PATCH] Replaced all the slow 'loop' instructions. --- zsnes/src/gui/gui.asm | 106 ++++++++++++++++++++++++++++--------- zsnes/src/gui/guicheat.inc | 52 +++++++++++++----- zsnes/src/gui/guicombo.inc | 20 +++++-- zsnes/src/gui/guikeys.inc | 16 ++++-- zsnes/src/gui/guiload.inc | 12 +++-- zsnes/src/gui/guimisc.inc | 12 +++-- zsnes/src/gui/guimouse.inc | 32 ++++++++--- zsnes/src/gui/guinetpl.inc | 36 +++++++++---- zsnes/src/gui/guiwindp.inc | 16 ++++-- zsnes/src/gui/menu.asm | 28 +++++++--- 10 files changed, 248 insertions(+), 82 deletions(-) diff --git a/zsnes/src/gui/gui.asm b/zsnes/src/gui/gui.asm index e314563b..bf82f5cb 100644 --- a/zsnes/src/gui/gui.asm +++ b/zsnes/src/gui/gui.asm @@ -774,7 +774,9 @@ clearsram: .loop mov byte[eax],0FFh inc eax - loop .loop +; loop .loop + dec ecx + jnz .loop cmp byte[SFXSRAM],0 je .nosfxsram mov eax,[sfxramdata] @@ -782,7 +784,9 @@ clearsram: .loop2 mov byte[eax],0FFh inc eax - loop .loop2 +; loop .loop2 + dec ecx + jnz .loop2 .nosfxsram cmp byte[SA1Enable],1 jne .nosa1 @@ -791,7 +795,9 @@ clearsram: .loop3 mov byte[eax],0FFh inc eax - loop .loop3 +; loop .loop3 + dec ecx + jnz .loop3 .nosa1 pop ecx pop eax @@ -886,7 +892,9 @@ CalcChecksum: mov bl,[eax] add edx,ebx inc eax - loop .loop +; loop .loop + dec ecx + jnz .loop mov ebx,edx xor bx,1011001011101101b xor eax,eax @@ -1020,7 +1028,9 @@ NEWSYM ExecGUISaveVars .loopa mov [esi],al inc esi - loop .loopa +; loop .loopa + dec ecx + jnz .loopa %endmacro %macro GUIDeInitIRQs 0 @@ -1288,7 +1298,9 @@ DrawSnow: .transp inc esi inc edx - loop .sloop +; loop .sloop + dec ecx + jnz .sloop add esi,272 dec ebx jnz .sloop2 @@ -1315,7 +1327,9 @@ DrawSnow: mov byte[esi+eax],bl .nosnow inc edx - loop .loop +; loop .loop + dec ecx + jnz .loop ; Change Snow Displacement Values .next cmp dword[SnowMover],0 @@ -1377,7 +1391,9 @@ ProcessSnowVelocity: or byte[SnowVelDist+edx*2],8 .nosdata inc edx - loop .loop +; loop .loop + dec ecx + jnz .loop ret OkaySC db 0 @@ -1530,7 +1546,9 @@ NEWSYM StartGUI .slloop mov dword[eax],0 add eax,4 - loop .slloop +; loop .slloop + dec ecx + jnz .slloop cmp byte[OldWinPos],0 jne .okayow xor esi,esi @@ -1541,7 +1559,9 @@ NEWSYM StartGUI mov eax,[GUIwinposy2+esi*4] mov [GUIwinposy+esi*4],eax inc esi - loop .nextow +; loop .nextow + dec ecx + jnz .nextow mov byte[OldWinPos],1 mov eax,[pl1p209b] mov [pl1p209],eax @@ -1588,6 +1608,8 @@ NEWSYM StartGUI inc eax dec bl jnz .convlfnlp2b +; loop .convlfnlp + dec ecx loop .convlfnlp .noconvertlfqm @@ -1643,7 +1665,9 @@ NEWSYM StartGUI .loop mov dword[eax],0 add eax,4 - loop .loop +; loop .loop + dec ecx + jnz .loop .nong mov byte[ShowTimer],1 call Get_Date @@ -1700,7 +1724,9 @@ NEWSYM StartGUI .pclear mov dword[esi],0 add esi,4 - loop .pclear +; loop .pclear + dec ecx + jnz .pclear mov byte[pressed+1],2 mov byte[GUIescpress],1 @@ -2278,7 +2304,9 @@ NEWSYM StartGUI .loop20 mov byte[eax],0 inc eax - loop .loop20 +; loop .loop20 + dec ecx + jnz .loop20 mov al,[Latency] mov [LatencyLeft],al mov byte[NetSwap],0 @@ -2297,7 +2325,9 @@ NEWSYM StartGUI add al,[ebx] adc ah,0 inc ebx - loop .csumloop +; loop .csumloop + dec ecx + jnz .csumloop .nocsumloop mov [CheckSumVal],eax @@ -2406,7 +2436,9 @@ NEWSYM StartGUI mov [eax],edx add ebx,4 add eax,4 - loop .loopcr +; loop .loopcr + dec ecx + jnz .loopcr .nocopyram cmp byte[CheatWinMode],2 @@ -2438,7 +2470,9 @@ NEWSYM StartGUI .loopcl mov dword[eax],0 add eax,4 - loop .loopcl +; loop .loopcl + dec ecx + jnz .loopcl mov al,[cfgsoundon] mov [soundon],al @@ -2488,7 +2522,9 @@ guifirsttimemsg: .a mov byte[pressed+ebx],0 inc ebx - loop .a +; loop .a + dec ecx + jnz .a mov byte[pressed+2Ch],0 .again GUIBox 43,75,213,163,160 @@ -2555,7 +2591,9 @@ guimustrestartmsg: mov byte[pressed+ebx],2 .npr1 inc ebx - loop .a +; loop .a + dec ecx + jnz .a mov byte[pressed+2Ch],0 .again GUIBox 43,87,213,151,160 @@ -2588,7 +2626,9 @@ guimustrestartmsg: cmp byte[pressed+ebx],1 je .pressedokay inc ebx - loop .b +; loop .b + dec ecx + jnz .b jmp .again .pressedokay .again2 @@ -2620,7 +2660,9 @@ guiprevideo: .a mov byte[pressed+ebx],0 inc ebx - loop .a +; loop .a + dec ecx + jnz .a call GUIUnBuffer call DisplayBoxes call DisplayMenu @@ -2653,7 +2695,9 @@ guiprevideo: cmp byte[pressed+ebx],0 jne .pressedokay inc ebx - loop .b +; loop .b + dec ecx + jnz .b cmp byte[MouseDis],1 je .mousedis call Get_MouseData @@ -2692,14 +2736,18 @@ guipostvideo: .loop mov dword[eax],0FFFFFFFFh add eax,4 - loop .loop +; loop .loop + dec ecx + jnz .loop xor ebx,ebx mov ecx,256 .a mov byte[pressed+ebx],0 inc ebx - loop .a +; loop .a + dec ecx + jnz .a mov dword[GUIkeydelay],36*10 .pressedfail @@ -2725,7 +2773,9 @@ guipostvideo: cmp byte[pressed+ebx],0 jne near .pressedfail inc ebx - loop .b2 +; loop .b2 + dec ecx + jnz .b2 cmp byte[MouseDis],1 je .mousedis3 call Get_MouseData @@ -2741,7 +2791,9 @@ guipostvideo: cmp byte[pressed+ebx],0 jne .pressedokay inc ebx - loop .b +; loop .b + dec ecx + jnz .b cmp byte[MouseDis],1 je .mousedis call Get_MouseData @@ -2830,7 +2882,9 @@ guipostvideofail: .a mov byte[pressed+ebx],0 inc ebx - loop .a +; loop .a + dec ecx + jnz .a call GUIUnBuffer call DisplayBoxes call DisplayMenu diff --git a/zsnes/src/gui/guicheat.inc b/zsnes/src/gui/guicheat.inc index 401e4239..a07c554b 100644 --- a/zsnes/src/gui/guicheat.inc +++ b/zsnes/src/gui/guicheat.inc @@ -106,7 +106,9 @@ AddCSCheatCode: inc eax %%noinceax rol dl,1 - loop %%searchloop +; loop %%searchloop + dec ecx + jnz %%searchloop %endmacro %macro SearchMacroB 1 @@ -183,7 +185,9 @@ CheatCodeSearchProcess: rol bl,1 rol bh,1 inc esi - loop .exactloop +; loop .exactloop + dec ecx + jnz .exactloop ; CSCurValue dd 0 mov byte[CopyRamToggle],1 mov byte[CheatSearchStatus],1 @@ -239,7 +243,9 @@ CheatCodeSearchInit: mov [eax],edx add ebx,4 add eax,4 - loop .loop +; loop .loop + dec ecx + jnz .loop ; fill searched buffer with 0xFF mov eax,dword[vidbuffer] add eax,129600+65536*2 @@ -247,7 +253,9 @@ CheatCodeSearchInit: .loop2 mov dword[eax],0FFFFFFFFh add eax,4 - loop .loop2 +; loop .loop2 + dec ecx + jnz .loop2 cmp byte[CheatSrcSearchType],1 jne .nottype1 mov byte[CheatSearchStatus],1 @@ -670,7 +678,9 @@ AddCheatCode: mov [eax+18*2+2],dl inc ebx inc eax - loop .dloop +; loop .dloop + dec ecx + jnz .dloop pop edx pop ebx pop eax @@ -727,7 +737,9 @@ ProcessCheatCode: mov [eax+18*2+2],dl inc ebx inc eax - loop .dloop +; loop .dloop + dec ecx + jnz .dloop ; determine whether it is gamegenie, par, or GF ; uppercase all codes if necessary mov eax,GUICheatText9 @@ -742,7 +754,9 @@ ProcessCheatCode: mov [eax],bl .nolower inc eax - loop .loop +; loop .loop + dec ecx + jnz .loop mov byte[guicheatvalrep],0 xor eax,eax mov al,[GUICheatPosA] @@ -776,7 +790,9 @@ ProcessCheatCode: ja .invalidpar .okaypar inc eax - loop .looppar +; loop .looppar + dec ecx + jnz .looppar jmp decodepar .invalidgg jmp guicheaterror @@ -803,7 +819,9 @@ ProcessCheatCode: ja .invalidgg .okaygg inc eax - loop .loopgg +; loop .loopgg + dec ecx + jnz .loopgg jmp decodegg ret .invalidgf @@ -824,7 +842,9 @@ ProcessCheatCode: ja .invalidgf .okaygf inc eax - loop .loopgf +; loop .loopgf + dec ecx + jnz .loopgf mov eax,GUICheatText9+5 mov ecx,6 .loopgf2 @@ -841,7 +861,9 @@ ProcessCheatCode: ja near .invalidgf .okaygf2 inc eax - loop .loopgf2 +; loop .loopgf2 + dec ecx + jnz .loopgf2 mov bl,[GUICheatText9+13] cmp bl,'0' je .okaygf3 @@ -1276,7 +1298,9 @@ guicheaterror: .a mov byte[pressed+ebx],0 inc ebx - loop .a +; loop .a + dec ecx + jnz .a .again call GUIUnBuffer call DisplayBoxes @@ -1304,7 +1328,9 @@ guicheaterror: cmp byte[pressed+ebx],0 jne .pressedokay inc ebx - loop .b +; loop .b + dec ecx + jnz .b cmp byte[MouseDis],1 je .mousedis call Get_MouseData diff --git a/zsnes/src/gui/guicombo.inc b/zsnes/src/gui/guicombo.inc index d3d712f9..5ce9a49a 100644 --- a/zsnes/src/gui/guicombo.inc +++ b/zsnes/src/gui/guicombo.inc @@ -59,7 +59,9 @@ ComboAdder: mov [eax],dl inc ebx inc eax - loop .loop +; loop .loop + dec ecx + jnz .loop mov ecx,42 ; copy combination code mov ebx,GUIComboData .loop2 @@ -67,7 +69,9 @@ ComboAdder: mov [eax],dl inc ebx inc eax - loop .loop2 +; loop .loop2 + dec ecx + jnz .loop2 mov dx,[GUIComboKey] mov [eax],dx mov dl,[GUIComboPNum] @@ -118,7 +122,9 @@ ComboReplace: mov [eax],dl inc ebx inc eax - loop .loop +; loop .loop + dec ecx + jnz .loop mov ecx,42 ; copy combination code mov ebx,GUIComboData .loop2 @@ -126,7 +132,9 @@ ComboReplace: mov [eax],dl inc ebx inc eax - loop .loop2 +; loop .loop2 + dec ecx + jnz .loop2 mov dx,[GUIComboKey] mov [eax],dx mov dl,[GUIComboPNum] @@ -161,7 +169,9 @@ ComboRemoval: inc eax dec ebx jnz .loop - loop .loop2 +; loop .loop2 + dec ecx + jnz .loop2 .nomove dec dword[NumCombo] mov eax,[NumCombo] diff --git a/zsnes/src/gui/guikeys.inc b/zsnes/src/gui/guikeys.inc index 1ee5b74f..ebcb86e0 100644 --- a/zsnes/src/gui/guikeys.inc +++ b/zsnes/src/gui/guikeys.inc @@ -1109,7 +1109,9 @@ GUIVideoKeys: .fsloop mov dword[eax],0 add eax,4 - loop .fsloop +; loop .fsloop + dec ecx + jnz .fsloop pop ecx pop eax .nofullscreen @@ -1130,7 +1132,9 @@ GUIVideoKeys: .ssloop mov dword[eax],0 add eax,4 - loop .ssloop +; loop .ssloop + dec ecx + jnz .ssloop pop ecx pop eax .nosmallscreen @@ -2932,7 +2936,9 @@ WaitForKey: cmp byte[pressed+ebx],0 jne near .again3 inc ebx - loop .b2 +; loop .b2 + dec ecx + jnz .b2 dec edx jnz near .again4 .again @@ -2955,7 +2961,9 @@ WaitForKey: cmp byte[pressed+ebx],0 jne .pressedokay inc ebx - loop .b +; loop .b + dec ecx + jnz .b jmp .again .pressedokay .again2 diff --git a/zsnes/src/gui/guiload.inc b/zsnes/src/gui/guiload.inc index ca29bca4..c061b19c 100644 --- a/zsnes/src/gui/guiload.inc +++ b/zsnes/src/gui/guiload.inc @@ -359,7 +359,9 @@ GUIloadfilename: mov [ebx],dl inc ebx inc eax - loop .rbackupl +; loop .rbackupl + dec ecx + jnz .rbackupl cmp byte[yesoutofmemory],1 jne .noout call outofmemfix @@ -514,7 +516,9 @@ GUILoadData: mov [ebx],al inc edx inc ebx - loop .loopfnc +; loop .loopfnc + dec ecx + jnz .loopfnc ; get Drive/Dir mov ebx,prevloaddnamel+1 @@ -998,7 +1002,9 @@ GetLoadHeader: sub al,'a'-'A' .nocap mov [edi],al - loop .loop4 +; loop .loop4 + dec ecx + jnz .loop4 pop ecx pop edi add esi,14 diff --git a/zsnes/src/gui/guimisc.inc b/zsnes/src/gui/guimisc.inc index 5b0ac7e7..36ef4733 100644 --- a/zsnes/src/gui/guimisc.inc +++ b/zsnes/src/gui/guimisc.inc @@ -146,7 +146,9 @@ CalibrateDispA: .a mov byte[pressed+ebx],0 inc ebx - loop .a +; loop .a + dec ecx + jnz .a call GUIUnBuffer call DisplayBoxes call DisplayMenu @@ -171,7 +173,9 @@ CalibrateDispB: .a mov byte[pressed+ebx],0 inc ebx - loop .a +; loop .a + dec ecx + jnz .a call GUIUnBuffer call DisplayBoxes call DisplayMenu @@ -207,7 +211,9 @@ SetAllKeys: .a mov byte[pressed+ebx],0 inc ebx - loop .a +; loop .a + dec ecx + jnz .a mov byte[GUICBHold],0 mov edi,pl1selk diff --git a/zsnes/src/gui/guimouse.inc b/zsnes/src/gui/guimouse.inc index 419e5ca5..7103b801 100644 --- a/zsnes/src/gui/guimouse.inc +++ b/zsnes/src/gui/guimouse.inc @@ -858,7 +858,9 @@ NEWSYM SwitchFullScreen .loop mov dword[eax],0FEFEFEFEh add eax,4 - loop .loop +; loop .loop + dec ecx + jnz .loop xor eax,eax mov al,[cvidmode] @@ -1149,7 +1151,9 @@ GUIWinClicked: %%loop mov dword[eax],0 add eax,4 - loop %%loop +; loop %%loop + dec ecx + jnz %%loop pop ecx pop eax ret @@ -1198,7 +1202,9 @@ GUIWinClicked: %%loop mov dword[eax],0 add eax,4 - loop %%loop +; loop %%loop + dec ecx + jnz %%loop pop ecx pop eax %%clear @@ -2523,7 +2529,9 @@ guipresstest: .a mov byte[pressed+ebx],0 inc ebx - loop .a +; loop .a + dec ecx + jnz .a call GUIUnBuffer call DisplayBoxes call DisplayMenu @@ -2551,7 +2559,9 @@ guipresstest: cmp byte[pressed+ebx],0 jne .pressedokay inc ebx - loop .b +; loop .b + dec ecx + jnz .b jmp .again .pressedokay push ebx @@ -2563,7 +2573,9 @@ guipresstest: mov byte[pressed+ebx],2 .pressedokayb inc ebx - loop .a2 +; loop .a2 + dec ecx + jnz .a2 pop ebx .again2 call Check_Key @@ -2612,7 +2624,9 @@ guipresstestb: cmp byte[pressed+ebx],0 jne .tryagain inc ebx - loop .b2 +; loop .b2 + dec ecx + jnz .b2 .again call JoyRead @@ -2627,7 +2641,9 @@ guipresstestb: cmp byte[pressed+ebx],0 jne .pressedokay inc ebx - loop .b +; loop .b + dec ecx + jnz .b jmp .again .pressedokay .again2 diff --git a/zsnes/src/gui/guinetpl.inc b/zsnes/src/gui/guinetpl.inc index 59fa62c5..d8f70d62 100644 --- a/zsnes/src/gui/guinetpl.inc +++ b/zsnes/src/gui/guinetpl.inc @@ -38,7 +38,9 @@ ProcessModem: .clooptcpip mov byte[eax],0 inc eax - loop .clooptcpip +; loop .clooptcpip + dec ecx + jnz .clooptcpip mov dword[CCursLoc],0 mov dword[CViewLoc],0 mov dword[NViewLoc],0 @@ -96,7 +98,9 @@ ProcessModem: .clooptcpip2 mov byte[eax],0 inc eax - loop .clooptcpip2 +; loop .clooptcpip2 + dec ecx + jnz .clooptcpip2 mov dword[CCursLoc],0 mov dword[CViewLoc],0 mov dword[NViewLoc],0 @@ -235,7 +239,9 @@ ProcessModem: .cloopipx mov byte[eax],0 inc eax - loop .cloopipx +; loop .cloopipx + dec ecx + jnz .cloopipx mov dword[CCursLoc],0 mov dword[CViewLoc],0 mov dword[NViewLoc],0 @@ -307,7 +313,9 @@ ProcessModem: .cloop mov byte[eax],0 inc eax - loop .cloop +; loop .cloop + dec ecx + jnz .cloop mov dword[CCursLoc],0 mov dword[CViewLoc],0 mov dword[NViewLoc],0 @@ -688,7 +696,9 @@ ProcessModem: .cloop2 mov byte[eax],0 inc eax - loop .cloop2 +; loop .cloop2 + dec ecx + jnz .cloop2 mov dword[CCursLoc],0 mov dword[CViewLoc],0 mov dword[NViewLoc],0 @@ -1445,7 +1455,9 @@ transfersram: pop ebx inc esi inc ebx - loop .loop +; loop .loop + dec ecx + jnz .loop mov byte[sramsavedis],0 ret @@ -1477,7 +1489,9 @@ transfersram: je .getnext mov [ebx],dl inc ebx - loop .loopb +; loop .loopb + dec ecx + jnz .loopb ret NEWSYM RemoteSendEAX @@ -1681,7 +1695,9 @@ loadstatesend: pop ecx pop edx inc edx - loop .loop +; loop .loop + dec ecx + jnz .loop call SendPacket cmp dword[NetStateSize],0 jne .notzero @@ -1748,7 +1764,9 @@ loadstaterecv: pop edx mov [edx],al inc edx - loop .loop +; loop .loop + dec ecx + jnz .loop pop ecx mov bx,[NetLoadHandle] mov edx,NetStateBuffer diff --git a/zsnes/src/gui/guiwindp.inc b/zsnes/src/gui/guiwindp.inc index 59f93957..a5b6b7f8 100644 --- a/zsnes/src/gui/guiwindp.inc +++ b/zsnes/src/gui/guiwindp.inc @@ -2428,7 +2428,9 @@ DisplayGUICheatConv: mov [edx],bl add edx,2 dec eax - loop .loop +; loop .loop + dec ecx + jnz .loop mov eax,[ccheatnpos] inc eax mov edx,GUICheatTextB+7 @@ -2487,7 +2489,9 @@ DisplayGUICheatConv: mov [edx],bl inc eax inc edx - loop .loop2 +; loop .loop2 + dec ecx + jnz .loop2 ret %macro GUIOuttextwin2cheat 2 @@ -2993,7 +2997,9 @@ FindChtSrcRes: dec dh jnz .sloop2 inc eax - loop .searchloop +; loop .searchloop + dec ecx + jnz .searchloop mov eax,ebx ret .found @@ -5488,7 +5494,9 @@ DisplayGUICombo: jz .donecomp inc esi inc edi - loop .comploop +; loop .comploop + dec ecx + jnz .comploop .donecomp call ComboClip mov edi,[GUIccombcursloc] diff --git a/zsnes/src/gui/menu.asm b/zsnes/src/gui/menu.asm index 4cdb2b0c..33742441 100644 --- a/zsnes/src/gui/menu.asm +++ b/zsnes/src/gui/menu.asm @@ -411,7 +411,9 @@ NEWSYM showmenu mov byte[eax],2 .notpr inc eax - loop .looppr +; loop .looppr + dec ecx + jnz .looppr ; mov byte[pressed+1],2 ; cmp byte[pressed+59],1 ; jne .not59 @@ -447,7 +449,9 @@ NEWSYM menudrawbox8b .loop mov byte[esi],144 inc esi - loop .loop +; loop .loop + dec ecx + jnz .loop add esi,288-150 dec al mov ecx,150 @@ -562,7 +566,9 @@ NEWSYM menudrawcursor8b .loop mov byte[esi],160 inc esi - loop .loop +; loop .loop + dec ecx + jnz .loop add esi,288-148 dec al mov ecx,148 @@ -589,7 +595,9 @@ NEWSYM menudrawbox16b shr dx,1 mov [esi],dx add esi,2 - loop .loop16b2 +; loop .loop16b2 + dec ecx + jnz .loop16b2 add esi,288*2-150*2 dec al mov ecx,150 @@ -623,7 +631,9 @@ NEWSYM menudrawbox16b .loop16b mov [esi],dx add esi,2 - loop .loop16b +; loop .loop16b + dec ecx + jnz .loop16b add esi,288*2-150*2 dec ah jnz .nocolinc16b @@ -739,7 +749,9 @@ NEWSYM menudrawcursor16b .loop mov [esi],bx add esi,2 - loop .loop +; loop .loop + dec ecx + jnz .loop add esi,288*2-148*2 dec al mov ecx,148 @@ -838,7 +850,9 @@ NEWSYM savespcdata mov [edi],al inc esi inc edi - loop .romloop +; loop .romloop + dec ecx + jnz .romloop ; Copy Date of spc dumped call Get_Date mov [ssdatst+09Eh],dl