⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gui.asm

📁 linux下的任天堂模拟器代码。供大家参考。
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;Copyright (C) 1997-2007 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach );;http://www.zsnes.com;http://sourceforge.net/projects/zsnes;https://zsnes.bountysource.com;;This program is free software; you can redistribute it and/or;modify it under the terms of the GNU General Public License;version 2 as published by the Free Software Foundation.;;This program is distributed in the hope that it will be useful,;but WITHOUT ANY WARRANTY; without even the implied warranty of;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the;GNU General Public License for more details.;;You should have received a copy of the GNU General Public License;along with this program; if not, write to the Free Software;Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.; Sorry.  The GUI code is a total mess.  One problem I encountered is that;   there seems to be a bug in nasm with using math calculations combined;   with macros within macros, so in some macro definitions, I had to;   add/subtract extra values in certain macros to get the GUI to align;   correctly.; The GUI is drawn is mostly manually.  What I mean is such as;   coding 5 boxes to represent a shaded box for each box.  Although that;   can be simplified using macros to draw 5 boxes, that unknown bug in nasm;   showed up which prevented me from using macros extensively.  I was;   thinking of changing it to an object-based GUI for easier coding,;   but that was decided far into the development of the GUI itself;   and that I also never expected this code to become open-source, so I;   decided not to proceed with it.; Routine StartGUI is the function called to start the GUI and also;   contains the execution main loop of the GUI.  If you want to completely;   replace the GUI, just add a function call from that function, then;   jump to endprog to exit ZSNES or continueprog to continue with the;   gameplay.  Do not replace StartGUI with a function since it is not;   a function, but rather a label that is being jumped to.%include "macros.mac"EXTSYM curblank,vidpastecopyscr,frameskip,newengen,cvidmode,antienabEXTSYM soundon,StereoSound,SoundQuality,MusicRelVol,endprogEXTSYM continueprog,spcBuffera,cbitmode,t1ccEXTSYM romloadskip,romdata,init65816,current_zstEXTSYM procexecloop,SPCRAM,spcPCRam,spcS,spcRamDP,spcA,spcX,spcY,spcP,spcNZEXTSYM Voice0Status,Voice1Status,Voice2Status,Voice3Status,Voice4StatusEXTSYM Voice5Status,Voice6Status,Voice7Status,statesaver,loadstate2EXTSYM vidbuffer,ASCII2Font,hirestiledat,showallext,scanlinesEXTSYM sprlefttot,spritetablea,KeyRTRCycleEXTSYM cgram,tempco0,prevbright,maxbr,prevpal,coladdr,coladdgEXTSYM coladdb,scaddtype,initvideo,pressed,UpdateDevices,memtabler8EXTSYM memtablew8,writeon,JoyRead,SetInputDevice,delay,FPSOn,RevStereo,WDSPReg0CEXTSYM WDSPReg1C,pl12s34,resolutn,Makemode7Table,vidbufferofsb,wramdata,bgfixerEXTSYM videotroub,CheatCodeSave,CheatCodeLoad,LoadCheatSearchFileEXTSYM SaveCheatSearchFile,Get_Date,Check_Key,Get_Key,sramEXTSYM TripBufAvail,ResetTripleBuf,ScanCodeListingEXTSYM AdjustFrequency,GUISaveVars,Init_Mouse,Get_MouseData,Set_MouseXMaxEXTSYM Set_MouseYMax,Set_MousePosition,Get_MousePositionDisplacement,GUIInitEXTSYM GUIDeInit,SpecialLine,DrawWater,DrawBurn,DrawSmokeEXTSYM GetDate,horizon_get,ErrorPointer,MessageOn,GetTimeEXTSYM GetScreen,Clear2xSaIBuffer,MouseWindow,ExitFromGUIEXTSYM newgfx16b,NumVideoModes,MusicVol,DSPMem,NumInputDevicesEXTSYM GUIInputNames,GUIVideoModeNames,GameSpecificInput,device1,device2,TwelveHourClockEXTSYM GUIM7VID,GUINTVID,GUIHQ2X,RawDumpInProgressEXTSYM MultiTap,SFXEnable,RestoreSystemVarsEXTSYM nssdip1,nssdip2,nssdip3,nssdip4,nssdip5,nssdip6EXTSYM SkipMovie,MovieStop,MoviePlay,MovieRecordEXTSYM MovieInsertChapter,MovieSeekAhead,MovieSeekBehind,ResetDuringMovieEXTSYM MovieDumpRaw,MovieAppend,AutoLoadCht,GUIQuickLoadUpdate,GUILoadDataEXTSYM GUIwinposx,GUIwinposy,maxskip,GUIEffect,hqFilter,En2xSaI,NTSCFilterEXTSYM NTSCBlend,NTSCHue,NTSCSat,NTSCCont,NTSCBright,NTSCSharp,NTSCRefEXTSYM NTSCGamma,NTSCRes,NTSCArt,NTSCFringe,NTSCBleed,NTSCWarpEXTSYM LowPassFilterType,MovieStartMethod,MovieDisplayFrame,savewinposEXTSYM SnapPath,SPCPath,BSXPath,SGPath,STPath,GNextPath,FEOEZPath,SJNSPathEXTSYM MDHPath,SPL4Path,SRAMPath,CheatSrcByteSize,prevloadfnamelEXTSYM prevloadiname,prevloaddnamel,prevlfreeze,FirstTimeData,MMXSupportEXTSYM GUIRAdd,GUIGAdd,GUIBAdd,GUITRAdd,GUITGAdd,GUITBAdd,GUIWRAddEXTSYM GUIWGAdd,GUIWBAdd,GUIloadfntype,SoundInterpTypeEXTSYM CheatSrcByteBase,CheatSrcSearchType,CheatUpperByteOnly,GUIComboGameSpecEXTSYM KeyStateSlc0,KeyStateSlc1,KeyStateSlc2,KeyStateSlc3,KeyStateSlc4EXTSYM KeyStateSlc5,KeyStateSlc6,KeyStateSlc7,KeyStateSlc8,KeyStateSlc9EXTSYM RewindStates,RewindFrames,PauseRewind,PauseLoad,SRAMState,AutoStateEXTSYM LatestSave,SRAMSave5Sec,AutoIncSaveSlot,KeyUsePlayer1234EXTSYM pl1contrl,pl1selk,pl1startk,pl1upk,pl1downk,pl1leftk,pl1rightk,pl1XkEXTSYM pl1Ak,pl1Lk,pl1Yk,pl1Bk,pl1Rk,pl1Xtk,pl1Ytk,pl1Atk,pl1Btk,pl1Ltk,pl1RtkEXTSYM pl1ULk,pl1URk,pl1DLk,pl1DRk,pl2contrl,pl2selk,pl2startk,pl2upk,pl2downkEXTSYM pl2leftk,pl2rightk,pl2Xk,pl2Ak,pl2Lk,pl2Yk,pl2Bk,pl2Rk,pl2Xtk,pl2YtkEXTSYM pl2Atk,pl2Btk,pl2Ltk,pl2Rtk,pl2ULk,pl2URk,pl2DLk,pl2DRk,pl3contrl,pl3selkEXTSYM pl3startk,pl3upk,pl3downk,pl3leftk,pl3rightk,pl3Xk,pl3Ak,pl3Lk,pl3YkEXTSYM pl3Bk,pl3Rk,pl3Xtk,pl3Ytk,pl3Atk,pl3Btk,pl3Ltk,pl3Rtk,pl3ULk,pl3URkEXTSYM pl3DLk,pl3DRk,pl4contrl,pl4selk,pl4startk,pl4upk,pl4downk,pl4leftkEXTSYM pl4rightk,pl4Xk,pl4Ak,pl4Lk,pl4Yk,pl4Bk,pl4Rk,pl4Xtk,pl4Ytk,pl4Atk,pl4BtkEXTSYM pl4Ltk,pl4Rtk,pl4ULk,pl4URk,pl4DLk,pl4DRk,pl5contrl,pl5selk,pl5startkEXTSYM pl5upk,pl5downk,pl5leftk,pl5rightk,pl5Xk,pl5Ak,pl5Lk,pl5Yk,pl5Bk,pl5RkEXTSYM pl5Xtk,pl5Ytk,pl5Atk,pl5Btk,pl5Ltk,pl5Rtk,pl5ULk,pl5URk,pl5DLk,pl5DRkEXTSYM KeyResetAll,KeyExtraEnab1,KeyExtraEnab2,KeyVolDown,KeyVolUpEXTSYM KeyBGDisble0,KeyBGDisble1,KeyBGDisble2,KeyBGDisble3,KeySprDisbleEXTSYM KeyDisableSC0,KeyDisableSC1,KeyDisableSC2,KeyDisableSC3,KeyQuickSnapShotEXTSYM KeyDisableSC4,KeyDisableSC5,KeyDisableSC6,KeyDisableSC7,KeyQuickSaveSPCEXTSYM KeyQuickLoad,KeyQuickRst,KeyQuickExit,KeyQuickClock,KeyQuickChatEXTSYM KeyInsrtChap,KeyPrevChap,KeyNextChap,KeyDisplayFPS,KeyNewGfxSwtEXTSYM KeyIncStateSlot,KeyDecStateSlot,KeySaveState,KeyLoadState,KeyStateSelctEXTSYM KeyRewind,KeyEmuSpeedUp,KeyEmuSpeedDown,KeyFRateUp,KeyFRateDownEXTSYM KeyFastFrwrd,KeySlowDown,KeyResetSpeed,EMUPauseKey,INCRFrameKeyEXTSYM KeyWinDisble,KeyOffsetMSw,JoyPad1Move,init_save_paths,loadquickfnameEXTSYM mousewrap,GUIRClick,SaveSramData,SwapMouseButtonsEXTSYM FPSAtStart,Turbo30hz,TimerEnable,SmallMsgText,mouse1lh,mouse2lhEXTSYM AutoPatch,RomInfo,AllowUDLR,GrayscaleMode,GUIMovieForcedTextEXTSYM Mode7HiRes16b,FFRatio,SDRatio,EmuSpeed,mouseshad,MovieForcedLengthEnabledEXTSYM esctomenu,GUILoadKeysJumpTo,lhguimouse,MZTForceRTR,GetMovieForcedLengthEXTSYM GUIEnableTransp,FilteredGUI,Surround,SPCDisable,nosaveSRAMEXTSYM FastFwdToggle,gui_key,gui_key_extended,GUILoadKeysNavigateEXTSYM KeyDisplayBatt,KeyIncreaseGamma,KeyDecreaseGammaEXTSYM MovieVideoMode,MovieAudio,MovieVideoAudio,MovieAudioCompress,newfontEXTSYM d_names,selected_names,GUIfileentries,GUIdirentries,GUIcurrentdirviewlocEXTSYM GUIcurrentfilewin,GUIcurrentcursloc,GUIcurrentviewloc,SetMovieForcedLengthEXTSYM GUIcurrentdircursloc,GetLoadData,ZRomPath,SaveSecondState,ClockBox,DisplayInfoEXTSYM GUIJT_currentviewloc,GUIJT_currentcursloc,GUIJT_entries,ScreenShotFormatEXTSYM GUIJT_offset,GUIJT_viewable,GUIGenericJumpTo,SSAutoFire,SSPause%ifdef __UNIXSDL__EXTSYM numlockptr%elifdef __WIN32__EXTSYM initDirectDraw,reInitSound,CheckAlwaysOnTop,CheckPriority,AlwaysOnTopEXTSYM CheckScreenSaver,MouseWheel,TrapMouseCursor,AllowMultipleInst,TripleBufferWinEXTSYM HighPriority,DisableScreenSaver,SaveMainWindowPos,PrimaryBufferEXTSYM CBBuffer,CBLength,PasteClipBoard,ctrlptr,PauseFocusChange%elifdef __MSDOS__EXTSYM dssel,SetInputDevice209,initvideo2,Force8b,SBHDMA,vibracard,smallscreenonEXTSYM pl1p209,pl2p209,pl3p209,pl4p209,pl5p209,SidewinderFix,Triplebufen,ScreenScaleEXTSYM GUIEAVID,GUIFSVID,GUIWSVID,GUISSVID,GUITBVID,GUISLVID,GUIHSVID,GUI2xVIDEXTSYM JoyMinX209,JoyMaxX209,JoyMinY209,JoyMaxY209,DOSClearScreen,dosmakepal%endif%ifndef __MSDOS__EXTSYM ZsnesPage,DocsPage,GUICustomX,GUICustomY,GetCustomXY,SetCustomXY,initwinvideoEXTSYM Keep4_3Ratio,PrevFSMode,PrevWinMode,NTSCFilterInit,hqFilterlevelEXTSYM GUIWFVID,GUIDSIZE,GUIHQ3X,GUIHQ4X,GUIKEEP43,Keep43Check,changeRes%endif%ifndef __WIN32__EXTSYM GUII2VID%endif%ifndef __UNIXSDL__EXTSYM vsyncon%endif%ifdef __OPENGL__EXTSYM BilinearFilter,GUIBIFIL,drawscreenwin,blinit%endif%include "gui/guitools.inc"%include "gui/guimisc.inc"%include "gui/guimouse.inc"%include "gui/guiwindp.inc"%include "gui/guikeys.inc"%include "gui/guicheat.inc"%include "gui/guicombo.inc"; Things to do :;; .checkmenuboxclick; gray scale = 32 .. 63; shadow = 96 .. 127; blue scale = 148 .. 167, 168 .. 187; gray scale = 189 .. 220 (32+137); |  Game        Config     Cheat     MultiPlay    Misc;-------------------------------------------------------;    Load        Input      Add Code  Modem        Misc Keys;    Run         -----      Browse    IPX          GUI Opts;    Reset       Devices    Search                 Movie Opt;    -----       Chip Cfg                          Key Comb.;    Save State  -----                             Save Cfg;    Load State  Options                           -----;    Pick State  Video                             About;    -----       Sound;    Quit        Paths;                Saves;                Speed; NetPlay only has "Internet" for Windows/Linux; Windows : 1 = Load;           2 = Chose State;           3 = Input Device Window;           4 = Options;           5 = Video;           6 = Sound;           7 = Cheat;           8 = Net Options;           9 = Game Options;           10 = GUI Options;           11 = About;           12 = Reset Confirmation;           13 = Cheat Search;           14 = SaveState Confirmation;           15 = Movies;           16 = Key Combo;           17 = Devices;           18 = Chip Config;           19 = Paths;           20 = Saves;           21 = SpeedSECTION .data;The first byte is the number of fields on the right not including the seperatorsMenuDat1 db 12, 3,1,1,1,1,1,1,1,1,1,0,1,2,0MenuDat2 db 8,  3,1,1,0,1,1,1,0,2,0MenuDat3 db 10, 3,0,1,1,0,1,1,1,1,1,2,0MenuDat4 db 2,  3,1,2,0%ifndef __MSDOS__MenuDat5 db 0,  2,0,0%elseMenuDat5 db 1,  3,2,0%endifMenuDat6 db 6,  3,1,1,1,1,0,2,0NEWSYM GUIPrevMenuData,  db 1,'1.                            ',0  db 1,'2.                            ',0  db 1,'3.                            ',0  db 1,'4.                            ',0  db 1,'5.                            ',0  db 1,'6.                            ',0  db 1,'7.                            ',0  db 1,'8.                            ',0  db 1,'9.                            ',0  db 1,'0.                            ',0  db 0,'------------',0  db 1,'FREEZE DATA: OFF   ',0  db 1,'CLEAR ALL DATA     ',0GUIGameMenuData:  db 1,'LOAD        ',0  db 1,'RUN  [ESC]  ',0  db 1,'RESET       ',0  db 0,'------------',0  db 1,'SAVE STATE  ',0  db 1,'OPEN STATE  ',0  db 1,'PICK STATE  ',0  db 0,'------------',0  db 1,'QUIT        ',0GUIConfigMenuData:  db 1,'INPUT       ',0  db 0,'------------',0  db 1,'DEVICES     ',0  db 1,'CHIP CFG    ',0  db 0,'------------',0  db 1,'OPTIONS     ',0  db 1,'VIDEO       ',0  db 1,'SOUND       ',0  db 1,'PATHS       ',0  db 1,'SAVES       ',0  db 1,'SPEED       ',0GUICheatMenuData:  db 1,'ADD CODE    ',0  db 1,'BROWSE      ',0  db 1,'SEARCH      ',0GUINetPlayMenuData:%ifndef __MSDOS__  db 1,'INTERNET    ',0  db 0,'------------',0%else  db 1,'MODEM       ',0  db 1,'IPX         ',0%endifGUIMiscMenuData:  db 1,'MISC KEYS   ',0  db 1,'GUI OPTS    ',0  db 1,'MOVIE OPT   ',0  db 1,'KEY COMB.   ',0  db 1,'SAVE CFG    ',0  db 0,'------------',0  db 1,'ABOUT       ',0; Window sizes and positions;                LOAD STAT INPT OPT  VID  SND  CHT  NET  GMKEY GUIOP ABT  RSET SRC  STCN MOVE CMBO ADDO CHIP PATH SAVE SPEDGUIwinposxo dd 0,6   ,65  ,33  ,42  ,5   ,34  ,6   ,64  ,8    ,5    ,33  ,56  ,64  ,56  ,5   ,3   ,28  ,48  ,6    ,28  ,53GUIwinposyo dd 0,20  ,70  ,20  ,20  ,20  ,20  ,20  ,30  ,30   ,20   ,20  ,60  ,30  ,60  ,20  ,20  ,60  ,60  ,20   ,30  ,20GUIwinsizex dd 0,244 ,126 ,205 ,180 ,245 ,188 ,244 ,128 ,240  ,245  ,190 ,144 ,128 ,144 ,246 ,250 ,200 ,160 ,244  ,200 ,150GUIwinsizey dd 0,190 ,68  ,192 ,190 ,190 ,188 ,191 ,40  ,170  ,150  ,190 ,42  ,40  ,42  ,190 ,190 ,120 ,100 ,190  ,168 ,180NEWSYM GUIwinptr, db 0NEWSYM WaterOn,  db 1NEWSYM ForceROMTiming, db 0NEWSYM ForceHiLoROM, db 0NEWSYM CalibXmin, dd 0NEWSYM CalibXmax, dd 0NEWSYM CalibYmin, dd 0NEWSYM CalibYmax, dd 0NEWSYM CalibXmin209, dd 0NEWSYM CalibXmax209, dd 0NEWSYM CalibYmin209, dd 0NEWSYM CalibYmax209, dd 0EEgg db 0RestoreValues db 0NEWSYM numdrives, dd 26SubPalTable times 256 db 1      ; Corresponding Gray Scale ColorSECTION .bssNEWSYM CombinDataGlob, resb 3300 ; 20-name, 42-combo, 2-key#, 1-P#, 1-ffNEWSYM CombinDataLocl, resb 3300NEWSYM GUIwinorder, resb 22GUIwinpos   resb 22NEWSYM GUIwinactiv, resb 22ViewBuffer  resb 50*32GUItextcolor resb 5NEWSYM GUIcmenupos, resb 1GUIescpress  resb 1GUIcwinpress resb 1NEWSYM GUIpmenupos, resb 1GUIcrowpos   resd 1GUIpclicked  resb 1GUImouseposx resd 1GUImouseposy resd 1GUICYLocPtr  resd 1GUIMenuL     resd 1GUIMenuR     resd 1GUIMenuD     resd 1GUIOnMenuItm resb 1NEWSYM GUIQuit, resb 1GUIHold      resb 1GUIHoldx     resd 1GUIHoldy     resd 1GUIHoldxm    resd 1GUIHoldym    resd 1GUIcolscaleval resd 1cwindrawn    resb 1GUIWincol    resd 1GUIWincoladd resd 1GUITemp      resd 1GUIHoldXlimL resd 1GUIHoldXlimR resd 1GUIHoldYlim  resd 1GUIHoldYlimR resd 1cloadnpos    resd 1cloadnposb   resd 1cloadmaxlen  resd 1cloadnleft   resd 1cplayernum   resb 1vbuflimtop   resd 1vbuflimbot   resd 1GUIScrolTim1 resd 1GUIScrolTim2 resd 1BlankVar     resb 1GUICHold     resd 1NEWSYM GUICBHold,    resd 1GUICBHold2   resd 1GUIDClickTL  resd 1GUIDClCWin   resd 1GUIDClCEntry resd 1GUICResetPos resd 1GUICStatePos resd 1GUICCFlash   resb 1GUILDFlash   resb 1GUIPalConv   resd 1PrevResoln   resw 1SnowMover    resd 1keycontrolval resd 1NEWSYM CheatBDoor,   resb 1NEWSYM ShowTimer,    resb 1NEWSYM MousePRClick, resb 1NEWSYM MouseDis, resb 1NEWSYM CheatOn, resd 1NEWSYM NumCheats, resd 1NEWSYM cheatdataprev, resb 28 ; leave contents blankNEWSYM cheatdata, resb 28*255+56 ; toggle, value, address, pvalue, name(22)curgsval resb 1NEWSYM GUICMessage, resd 1NEWSYM GUICTimer,   resd 1NEWSYM GUIOn,       resb 1NEWSYM GUIOn2,      resb 1NEWSYM GUIReset,    resb 1NEWSYM CurPalSelect, resb 1NEWSYM MotionBlur, resb 1NEWSYM StartLL, resd 1NEWSYM StartLR, resd 1NEWSYM TRVal, resw 1NEWSYM TGVal, resw 1NEWSYM TBVal, resw 1NEWSYM TRVali, resw 1NEWSYM TGVali, resw 1NEWSYM TBVali, resw 1NEWSYM TRVal2, resw 1NEWSYM TGVal2, resw 1NEWSYM TBVal2, resw 1SECTION .dataNEWSYM ComboHeader, db 'Key Combination File',26,1,0NEWSYM ComboBlHeader, times 23 db 0SECTION .text%macro GUIInitIRQs 0  call GUIInit  mov esi,pressed  mov ecx,256  mov al,0.loopa  mov [esi],al  inc esi  dec ecx  jnz .loopa%endmacro%macro GUIDeInitIRQs 0  call GUIDeInit%endmacroSECTION .dataNEWSYM GUIoldhand9o, dd 0NEWSYM GUIoldhand9s, dw 0NEWSYM GUIoldhand8o, dd 0NEWSYM GUIoldhand8s, dw 0GUIt1cc dd 0GUIt1ccSwap db 0GUIskipnextkey42 db 0SECTION .textNEWSYM GUIinit18_2hz  mov al,00110110b  out 43h,al  mov ax,0  out 40h,al  mov al,ah  out 40h,al  retNEWSYM GUIinit36_4hz  mov al,00110110b  out 43h,al  mov ax,32768  out 40h,al  mov al,ah  out 40h,al  retNEWSYM GUI36hzcall  inc dword[GUIt1cc]  inc dword[SnowMover]  cmp dword[GUIEditStringLTxt],0  je .nodec  dec dword[GUIEditStringLTxt].nodec  cmp dword[GUIScrolTim1],0  je .nodec4  dec dword[GUIScrolTim1].nodec4  cmp dword[GUIDClickTL],0  je .nodec2  dec dword[GUIDClickTL].nodec2  cmp dword[GUIkeydelay],0  je .nodec3  dec dword[GUIkeydelay].nodec3  cmp dword[GUIkeydelay2],0  je .nodec3b  dec dword[GUIkeydelay2].nodec3b  cmp dword[GUICTimer],0  je .nodec6  dec dword[GUICTimer].nodec6  inc byte[GUICCFlash]  and byte[GUICCFlash],0Fh  inc byte[GUILDFlash]  and byte[GUILDFlash],0Fh  ret%ifdef __MSDOS__NEWSYM GUIhandler8h  cli  push ds  push eax  mov ax,[cs:dssel]  mov ds,ax  call GUI36hzcall  xor byte[GUIt1ccSwap],1  cmp byte[GUIt1ccSwap],0  je .nocall  pushf  call far [GUIoldhand8o].nocall  mov al,20h  out 20h,al  pop eax  pop ds  sti  iretdNEWSYM GUIhandler9h  cli  push ds  push eax  push ebx  mov ax,[cs:dssel]  mov ds,ax  xor ebx,ebx  in al,60h                 ; get keyboard scan code  cmp al,42  jne .no42  cmp byte[GUIskipnextkey42],0  je .no42  mov byte[GUIskipnextkey42],0  jmp .skipkeyrel.no42  cmp al,0E0h  jne .noE0  mov byte[GUIskipnextkey42],1  jmp .skipkeyrel.noE0  mov byte[GUIskipnextkey42],0  mov bl,al  xor bh,bh  test bl,80h               ; check if bit 7 is on (key released)  jnz .keyrel  cmp byte[pressed+ebx],0  jne .skipa  mov byte[pressed+ebx],1        ; if not, set key to pressed.skipa  jmp .skipkeyrel.keyrel  and bl,7Fh  mov byte[pressed+ebx],0        ; if not, set key to pressed.skipkeyrel  mov byte[pressed],0  pushf  call far [GUIoldhand9o]  mov al,20h  out 20h,al  pop ebx  pop eax  pop ds  sti  iretd%endif%macro loadmenuopen 1  mov al,[GUIcmenupos]  mov [GUIpmenupos],al  mov byte[GUIcmenupos],0  cmp byte[GUIwinactiv+%1],1  je %%menuontop  xor eax,eax  mov al,[GUIwinptr]  inc byte[GUIwinptr]  mov byte[GUIwinorder+eax],%1  mov byte[GUIwinactiv+%1],1  cmp byte[savewinpos],0  jne %%nomenuitem  mov eax,[GUIwinposxo+%1*4]  mov [GUIwinposx+%1*4],eax  mov eax,[GUIwinposyo+%1*4]  mov [GUIwinposy+%1*4],eax  jmp %%nomenuitem%%menuontop  xor eax,eax  ; look for match%%notfoundyet  mov bl,[GUIwinorder+eax]  cmp bl,%1  je %%nextfind  inc eax  jmp %%notfoundyet%%nextfind  inc eax  cmp al,[GUIwinptr]  je %%foundend  mov cl,[GUIwinorder+eax]  mov [GUIwinorder+eax-1],cl  jmp %%nextfind%%foundend  mov byte[GUIpclicked],0  mov [GUIwinorder+eax-1],bl%%nomenuitem%endmacroloadnetopen:  loadmenuopen 8  retSECTION .bssMouseInitOkay resb 1SECTION .textLoadDetermine:  mov byte[GUIGameMenuData+14],1  mov byte[GUIGameMenuData+14*2],1  mov byte[GUIGameMenuData+14*4],1  mov byte[GUIGameMenuData+14*5],1  mov byte[GUIGameMenuData+14*6],1  mov byte[GUICheatMenuData],1  mov byte[GUICheatMenuData+14],1  mov byte[GUICheatMenuData+14*2],1  mov byte[GUIMiscMenuData+14*2],1  mov byte[GUINetPlayMenuData],2             ; Gray out Netplay options

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -