3769 lines
89 KiB
NASM
3769 lines
89 KiB
NASM
;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,antienab
|
|
EXTSYM soundon,StereoSound,SoundQuality,MusicRelVol,endprog
|
|
EXTSYM continueprog,spcBuffera,cbitmode,t1cc
|
|
EXTSYM romloadskip,romdata,init65816,current_zst
|
|
EXTSYM procexecloop,SPCRAM,spcPCRam,spcS,spcRamDP,spcA,spcX,spcY,spcP,spcNZ
|
|
EXTSYM Voice0Status,Voice1Status,Voice2Status,Voice3Status,Voice4Status
|
|
EXTSYM Voice5Status,Voice6Status,Voice7Status,statesaver,loadstate2
|
|
EXTSYM vidbuffer,ASCII2Font,hirestiledat,showallext,scanlines
|
|
EXTSYM sprlefttot,spritetablea,KeyRTRCycle
|
|
EXTSYM cgram,tempco0,prevbright,maxbr,prevpal,coladdr,coladdg
|
|
EXTSYM coladdb,scaddtype,initvideo,pressed,UpdateDevices,memtabler8
|
|
EXTSYM memtablew8,writeon,JoyRead,SetInputDevice,delay,FPSOn,RevStereo,WDSPReg0C
|
|
EXTSYM WDSPReg1C,pl12s34,resolutn,Makemode7Table,vidbufferofsb,wramdata,bgfixer
|
|
EXTSYM videotroub,CheatCodeSave,CheatCodeLoad,LoadCheatSearchFile
|
|
EXTSYM SaveCheatSearchFile,Get_Date,Check_Key,Get_Key,sram
|
|
EXTSYM TripBufAvail,ResetTripleBuf,ScanCodeListing
|
|
EXTSYM AdjustFrequency,GUISaveVars,Init_Mouse,Get_MouseData,Set_MouseXMax
|
|
EXTSYM Set_MouseYMax,Set_MousePosition,Get_MousePositionDisplacement,GUIInit
|
|
EXTSYM GUIDeInit,SpecialLine,DrawWater,DrawBurn,DrawSmoke
|
|
EXTSYM GetDate,horizon_get,ErrorPointer,MessageOn,GetTime
|
|
EXTSYM GetScreen,Clear2xSaIBuffer,MouseWindow,ExitFromGUI
|
|
EXTSYM newgfx16b,NumVideoModes,MusicVol,DSPMem,NumInputDevices
|
|
EXTSYM GUIInputNames,GUIVideoModeNames,GameSpecificInput,device1,device2,TwelveHourClock
|
|
EXTSYM GUIM7VID,GUINTVID,GUIHQ2X,RawDumpInProgress
|
|
EXTSYM MultiTap,SFXEnable,RestoreSystemVars
|
|
EXTSYM nssdip1,nssdip2,nssdip3,nssdip4,nssdip5,nssdip6
|
|
EXTSYM SkipMovie,MovieStop,MoviePlay,MovieRecord
|
|
EXTSYM MovieInsertChapter,MovieSeekAhead,MovieSeekBehind,ResetDuringMovie
|
|
EXTSYM MovieDumpRaw,MovieAppend,AutoLoadCht,GUIQuickLoadUpdate,GUILoadData
|
|
|
|
EXTSYM GUIwinposx,GUIwinposy,maxskip,GUIEffect,hqFilter,En2xSaI,NTSCFilter
|
|
EXTSYM NTSCBlend,NTSCHue,NTSCSat,NTSCCont,NTSCBright,NTSCSharp,NTSCRef
|
|
EXTSYM NTSCGamma,NTSCRes,NTSCArt,NTSCFringe,NTSCBleed,NTSCWarp
|
|
EXTSYM LowPassFilterType,MovieStartMethod,MovieDisplayFrame,savewinpos
|
|
EXTSYM SnapPath,SPCPath,BSXPath,SGPath,STPath,GNextPath,FEOEZPath,SJNSPath
|
|
EXTSYM MDHPath,SPL4Path,SRAMPath,CheatSrcByteSize,prevloadfnamel
|
|
EXTSYM prevloadiname,prevloaddnamel,prevlfreeze,FirstTimeData,MMXSupport
|
|
EXTSYM GUIRAdd,GUIGAdd,GUIBAdd,GUITRAdd,GUITGAdd,GUITBAdd,GUIWRAdd
|
|
EXTSYM GUIWGAdd,GUIWBAdd,GUIloadfntype,SoundInterpType
|
|
EXTSYM CheatSrcByteBase,CheatSrcSearchType,CheatUpperByteOnly,GUIComboGameSpec
|
|
EXTSYM KeyStateSlc0,KeyStateSlc1,KeyStateSlc2,KeyStateSlc3,KeyStateSlc4
|
|
EXTSYM KeyStateSlc5,KeyStateSlc6,KeyStateSlc7,KeyStateSlc8,KeyStateSlc9
|
|
EXTSYM RewindStates,RewindFrames,PauseRewind,PauseLoad,SRAMState,AutoState
|
|
EXTSYM LatestSave,SRAMSave5Sec,AutoIncSaveSlot,KeyUsePlayer1234
|
|
EXTSYM pl1contrl,pl1selk,pl1startk,pl1upk,pl1downk,pl1leftk,pl1rightk,pl1Xk
|
|
EXTSYM pl1Ak,pl1Lk,pl1Yk,pl1Bk,pl1Rk,pl1Xtk,pl1Ytk,pl1Atk,pl1Btk,pl1Ltk,pl1Rtk
|
|
EXTSYM pl1ULk,pl1URk,pl1DLk,pl1DRk,pl2contrl,pl2selk,pl2startk,pl2upk,pl2downk
|
|
EXTSYM pl2leftk,pl2rightk,pl2Xk,pl2Ak,pl2Lk,pl2Yk,pl2Bk,pl2Rk,pl2Xtk,pl2Ytk
|
|
EXTSYM pl2Atk,pl2Btk,pl2Ltk,pl2Rtk,pl2ULk,pl2URk,pl2DLk,pl2DRk,pl3contrl,pl3selk
|
|
EXTSYM pl3startk,pl3upk,pl3downk,pl3leftk,pl3rightk,pl3Xk,pl3Ak,pl3Lk,pl3Yk
|
|
EXTSYM pl3Bk,pl3Rk,pl3Xtk,pl3Ytk,pl3Atk,pl3Btk,pl3Ltk,pl3Rtk,pl3ULk,pl3URk
|
|
EXTSYM pl3DLk,pl3DRk,pl4contrl,pl4selk,pl4startk,pl4upk,pl4downk,pl4leftk
|
|
EXTSYM pl4rightk,pl4Xk,pl4Ak,pl4Lk,pl4Yk,pl4Bk,pl4Rk,pl4Xtk,pl4Ytk,pl4Atk,pl4Btk
|
|
EXTSYM pl4Ltk,pl4Rtk,pl4ULk,pl4URk,pl4DLk,pl4DRk,pl5contrl,pl5selk,pl5startk
|
|
EXTSYM pl5upk,pl5downk,pl5leftk,pl5rightk,pl5Xk,pl5Ak,pl5Lk,pl5Yk,pl5Bk,pl5Rk
|
|
EXTSYM pl5Xtk,pl5Ytk,pl5Atk,pl5Btk,pl5Ltk,pl5Rtk,pl5ULk,pl5URk,pl5DLk,pl5DRk
|
|
EXTSYM KeyResetAll,KeyExtraEnab1,KeyExtraEnab2,KeyVolDown,KeyVolUp
|
|
EXTSYM KeyBGDisble0,KeyBGDisble1,KeyBGDisble2,KeyBGDisble3,KeySprDisble
|
|
EXTSYM KeyDisableSC0,KeyDisableSC1,KeyDisableSC2,KeyDisableSC3,KeyQuickSnapShot
|
|
EXTSYM KeyDisableSC4,KeyDisableSC5,KeyDisableSC6,KeyDisableSC7,KeyQuickSaveSPC
|
|
EXTSYM KeyQuickLoad,KeyQuickRst,KeyQuickExit,KeyQuickClock,KeyQuickChat
|
|
EXTSYM KeyInsrtChap,KeyPrevChap,KeyNextChap,KeyDisplayFPS,KeyNewGfxSwt
|
|
EXTSYM KeyIncStateSlot,KeyDecStateSlot,KeySaveState,KeyLoadState,KeyStateSelct
|
|
EXTSYM KeyRewind,KeyEmuSpeedUp,KeyEmuSpeedDown,KeyFRateUp,KeyFRateDown
|
|
EXTSYM KeyFastFrwrd,KeySlowDown,KeyResetSpeed,EMUPauseKey,INCRFrameKey
|
|
EXTSYM KeyWinDisble,KeyOffsetMSw,JoyPad1Move,init_save_paths,loadquickfname
|
|
EXTSYM mousewrap,GUIRClick,SaveSramData,SwapMouseButtons
|
|
EXTSYM FPSAtStart,Turbo30hz,TimerEnable,SmallMsgText,mouse1lh,mouse2lh
|
|
EXTSYM AutoPatch,RomInfo,AllowUDLR,GrayscaleMode,GUIMovieForcedText
|
|
EXTSYM Mode7HiRes16b,FFRatio,SDRatio,EmuSpeed,mouseshad,MovieForcedLengthEnabled
|
|
EXTSYM esctomenu,GUILoadKeysJumpTo,lhguimouse,MZTForceRTR,GetMovieForcedLength
|
|
EXTSYM GUIEnableTransp,FilteredGUI,Surround,SPCDisable,nosaveSRAM
|
|
EXTSYM FastFwdToggle,gui_key,gui_key_extended,GUILoadKeysNavigate
|
|
EXTSYM KeyDisplayBatt,KeyIncreaseGamma,KeyDecreaseGamma
|
|
EXTSYM MovieVideoMode,MovieAudio,MovieVideoAudio,MovieAudioCompress,newfont
|
|
EXTSYM d_names,selected_names,GUIfileentries,GUIdirentries,GUIcurrentdirviewloc
|
|
EXTSYM GUIcurrentfilewin,GUIcurrentcursloc,GUIcurrentviewloc,SetMovieForcedLength
|
|
EXTSYM GUIcurrentdircursloc,GetLoadData,ZRomPath,SaveSecondState,ClockBox,DisplayInfo
|
|
EXTSYM GUIJT_currentviewloc,GUIJT_currentcursloc,GUIJT_entries,ScreenShotFormat
|
|
EXTSYM GUIJT_offset,GUIJT_viewable,GUIGenericJumpTo,SSAutoFire,SSPause
|
|
|
|
%ifdef __UNIXSDL__
|
|
EXTSYM numlockptr
|
|
%elifdef __WIN32__
|
|
EXTSYM initDirectDraw,reInitSound,CheckAlwaysOnTop,CheckPriority,AlwaysOnTop
|
|
EXTSYM CheckScreenSaver,MouseWheel,TrapMouseCursor,AllowMultipleInst,TripleBufferWin
|
|
EXTSYM HighPriority,DisableScreenSaver,SaveMainWindowPos,PrimaryBuffer
|
|
EXTSYM CBBuffer,CBLength,PasteClipBoard,ctrlptr,PauseFocusChange
|
|
%elifdef __MSDOS__
|
|
EXTSYM dssel,SetInputDevice209,initvideo2,Force8b,SBHDMA,vibracard,smallscreenon
|
|
EXTSYM pl1p209,pl2p209,pl3p209,pl4p209,pl5p209,SidewinderFix,Triplebufen,ScreenScale
|
|
EXTSYM GUIEAVID,GUIFSVID,GUIWSVID,GUISSVID,GUITBVID,GUISLVID,GUIHSVID,GUI2xVID
|
|
EXTSYM JoyMinX209,JoyMaxX209,JoyMinY209,JoyMaxY209,DOSClearScreen,dosmakepal
|
|
%endif
|
|
|
|
%ifndef __MSDOS__
|
|
EXTSYM ZsnesPage,DocsPage,GUICustomX,GUICustomY,GetCustomXY,SetCustomXY,initwinvideo
|
|
EXTSYM Keep4_3Ratio,PrevFSMode,PrevWinMode,NTSCFilterInit,hqFilterlevel
|
|
EXTSYM 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 = Speed
|
|
|
|
SECTION .data
|
|
|
|
;The first byte is the number of fields on the right not including the seperators
|
|
MenuDat1 db 12, 3,1,1,1,1,1,1,1,1,1,0,1,2,0
|
|
MenuDat2 db 8, 3,1,1,0,1,1,1,0,2,0
|
|
MenuDat3 db 10, 3,0,1,1,0,1,1,1,1,1,2,0
|
|
MenuDat4 db 2, 3,1,2,0
|
|
%ifndef __MSDOS__
|
|
MenuDat5 db 0, 2,0,0
|
|
%else
|
|
MenuDat5 db 1, 3,2,0
|
|
%endif
|
|
MenuDat6 db 6, 3,1,1,1,1,0,2,0
|
|
|
|
NEWSYM 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 ',0
|
|
GUIGameMenuData:
|
|
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 ',0
|
|
GUIConfigMenuData:
|
|
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 ',0
|
|
GUICheatMenuData:
|
|
db 1,'ADD CODE ',0
|
|
db 1,'BROWSE ',0
|
|
db 1,'SEARCH ',0
|
|
GUINetPlayMenuData:
|
|
%ifndef __MSDOS__
|
|
db 1,'INTERNET ',0
|
|
db 0,'------------',0
|
|
%else
|
|
db 1,'MODEM ',0
|
|
db 1,'IPX ',0
|
|
%endif
|
|
GUIMiscMenuData:
|
|
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 SPED
|
|
GUIwinposxo dd 0,6 ,65 ,33 ,42 ,5 ,34 ,6 ,64 ,8 ,5 ,33 ,56 ,64 ,56 ,5 ,3 ,28 ,48 ,6 ,28 ,53
|
|
GUIwinposyo dd 0,20 ,70 ,20 ,20 ,20 ,20 ,20 ,30 ,30 ,20 ,20 ,60 ,30 ,60 ,20 ,20 ,60 ,60 ,20 ,30 ,20
|
|
GUIwinsizex dd 0,244 ,126 ,205 ,180 ,245 ,188 ,244 ,128 ,240 ,245 ,190 ,144 ,128 ,144 ,246 ,250 ,200 ,160 ,244 ,200 ,150
|
|
GUIwinsizey dd 0,190 ,68 ,192 ,190 ,190 ,188 ,191 ,40 ,170 ,150 ,190 ,42 ,40 ,42 ,190 ,190 ,120 ,100 ,190 ,168 ,180
|
|
NEWSYM GUIwinptr, db 0
|
|
|
|
NEWSYM WaterOn, db 1
|
|
NEWSYM ForceROMTiming, db 0
|
|
NEWSYM ForceHiLoROM, db 0
|
|
NEWSYM CalibXmin, dd 0
|
|
NEWSYM CalibXmax, dd 0
|
|
NEWSYM CalibYmin, dd 0
|
|
NEWSYM CalibYmax, dd 0
|
|
NEWSYM CalibXmin209, dd 0
|
|
NEWSYM CalibXmax209, dd 0
|
|
NEWSYM CalibYmin209, dd 0
|
|
NEWSYM CalibYmax209, dd 0
|
|
|
|
EEgg db 0
|
|
RestoreValues db 0
|
|
NEWSYM numdrives, dd 26
|
|
SubPalTable times 256 db 1 ; Corresponding Gray Scale Color
|
|
|
|
SECTION .bss
|
|
NEWSYM CombinDataGlob, resb 3300 ; 20-name, 42-combo, 2-key#, 1-P#, 1-ff
|
|
NEWSYM CombinDataLocl, resb 3300
|
|
|
|
NEWSYM GUIwinorder, resb 22
|
|
GUIwinpos resb 22
|
|
NEWSYM GUIwinactiv, resb 22
|
|
ViewBuffer resb 50*32
|
|
|
|
GUItextcolor resb 5
|
|
NEWSYM GUIcmenupos, resb 1
|
|
GUIescpress resb 1
|
|
GUIcwinpress resb 1
|
|
NEWSYM GUIpmenupos, resb 1
|
|
GUIcrowpos resd 1
|
|
GUIpclicked resb 1
|
|
GUImouseposx resd 1
|
|
GUImouseposy resd 1
|
|
GUICYLocPtr resd 1
|
|
GUIMenuL resd 1
|
|
GUIMenuR resd 1
|
|
GUIMenuD resd 1
|
|
GUIOnMenuItm resb 1
|
|
NEWSYM GUIQuit, resb 1
|
|
GUIHold resb 1
|
|
GUIHoldx resd 1
|
|
GUIHoldy resd 1
|
|
GUIHoldxm resd 1
|
|
GUIHoldym resd 1
|
|
GUIcolscaleval resd 1
|
|
cwindrawn resb 1
|
|
GUIWincol resd 1
|
|
GUIWincoladd resd 1
|
|
GUITemp resd 1
|
|
GUIHoldXlimL resd 1
|
|
GUIHoldXlimR resd 1
|
|
GUIHoldYlim resd 1
|
|
GUIHoldYlimR resd 1
|
|
cloadnpos resd 1
|
|
cloadnposb resd 1
|
|
cloadmaxlen resd 1
|
|
cloadnleft resd 1
|
|
cplayernum resb 1
|
|
vbuflimtop resd 1
|
|
vbuflimbot resd 1
|
|
GUIScrolTim1 resd 1
|
|
GUIScrolTim2 resd 1
|
|
BlankVar resb 1
|
|
GUICHold resd 1
|
|
NEWSYM GUICBHold, resd 1
|
|
GUICBHold2 resd 1
|
|
GUIDClickTL resd 1
|
|
GUIDClCWin resd 1
|
|
GUIDClCEntry resd 1
|
|
GUICResetPos resd 1
|
|
GUICStatePos resd 1
|
|
GUICCFlash resb 1
|
|
GUILDFlash resb 1
|
|
GUIPalConv resd 1
|
|
PrevResoln resw 1
|
|
SnowMover resd 1
|
|
keycontrolval resd 1
|
|
NEWSYM CheatBDoor, resb 1
|
|
NEWSYM ShowTimer, resb 1
|
|
NEWSYM MousePRClick, resb 1
|
|
NEWSYM MouseDis, resb 1
|
|
|
|
NEWSYM CheatOn, resd 1
|
|
NEWSYM NumCheats, resd 1
|
|
NEWSYM cheatdataprev, resb 28 ; leave contents blank
|
|
NEWSYM cheatdata, resb 28*255+56 ; toggle, value, address, pvalue, name(22)
|
|
|
|
curgsval resb 1
|
|
|
|
NEWSYM GUICMessage, resd 1
|
|
NEWSYM GUICTimer, resd 1
|
|
NEWSYM GUIOn, resb 1
|
|
NEWSYM GUIOn2, resb 1
|
|
NEWSYM GUIReset, resb 1
|
|
NEWSYM CurPalSelect, resb 1
|
|
NEWSYM MotionBlur, resb 1
|
|
|
|
NEWSYM StartLL, resd 1
|
|
NEWSYM StartLR, resd 1
|
|
|
|
NEWSYM TRVal, resw 1
|
|
NEWSYM TGVal, resw 1
|
|
NEWSYM TBVal, resw 1
|
|
NEWSYM TRVali, resw 1
|
|
NEWSYM TGVali, resw 1
|
|
NEWSYM TBVali, resw 1
|
|
NEWSYM TRVal2, resw 1
|
|
NEWSYM TGVal2, resw 1
|
|
NEWSYM TBVal2, resw 1
|
|
|
|
SECTION .data
|
|
NEWSYM ComboHeader, db 'Key Combination File',26,1,0
|
|
NEWSYM ComboBlHeader, times 23 db 0
|
|
|
|
SECTION .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
|
|
%endmacro
|
|
|
|
SECTION .data
|
|
NEWSYM GUIoldhand9o, dd 0
|
|
NEWSYM GUIoldhand9s, dw 0
|
|
NEWSYM GUIoldhand8o, dd 0
|
|
NEWSYM GUIoldhand8s, dw 0
|
|
GUIt1cc dd 0
|
|
GUIt1ccSwap db 0
|
|
GUIskipnextkey42 db 0
|
|
|
|
SECTION .text
|
|
NEWSYM GUIinit18_2hz
|
|
mov al,00110110b
|
|
out 43h,al
|
|
mov ax,0
|
|
out 40h,al
|
|
mov al,ah
|
|
out 40h,al
|
|
ret
|
|
|
|
NEWSYM GUIinit36_4hz
|
|
mov al,00110110b
|
|
out 43h,al
|
|
mov ax,32768
|
|
out 40h,al
|
|
mov al,ah
|
|
out 40h,al
|
|
ret
|
|
|
|
NEWSYM 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
|
|
iretd
|
|
|
|
NEWSYM 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
|
|
%endmacro
|
|
|
|
loadnetopen:
|
|
loadmenuopen 8
|
|
ret
|
|
|
|
SECTION .bss
|
|
MouseInitOkay resb 1
|
|
SECTION .text
|
|
|
|
LoadDetermine:
|
|
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
|
|
%ifdef __MSDOS__
|
|
mov byte[GUINetPlayMenuData+14],2
|
|
%endif
|
|
cmp byte[romloadskip],0
|
|
je .noromloaded
|
|
mov byte[GUIGameMenuData+14],2
|
|
mov byte[GUIGameMenuData+14*2],2
|
|
mov byte[GUIGameMenuData+14*4],2
|
|
mov byte[GUIGameMenuData+14*5],2
|
|
mov byte[GUIGameMenuData+14*6],2
|
|
mov byte[GUICheatMenuData],2
|
|
mov byte[GUICheatMenuData+14],2
|
|
mov byte[GUICheatMenuData+14*2],2
|
|
mov byte[GUIMiscMenuData+14*2],2
|
|
.noromloaded
|
|
ret
|
|
|
|
SECTION .data
|
|
SantaData:
|
|
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
db 0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0
|
|
db 0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0
|
|
db 1,0,0,1,0,0,1,0,0,0,1,1,1,0,1,1
|
|
db 1,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1
|
|
db 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1
|
|
db 1,1,0,1,1,0,1,1,0,0,1,1,1,1,1,1
|
|
|
|
SantaPos dd 272
|
|
SantaNextT dd 36*15
|
|
NEWSYM NumSnow, dd 0
|
|
NEWSYM SnowTimer, dd 36*30
|
|
MsgGiftLeft dd 0
|
|
SECTION .text
|
|
|
|
DrawSnow:
|
|
cmp byte[OkaySC],0
|
|
je near .nosanta
|
|
cmp dword[MsgGiftLeft],0
|
|
je .nodec
|
|
mov edx,20
|
|
mov ebx,210
|
|
mov byte[GUItextcolor],228
|
|
GUIOuttextwin .giftmsg
|
|
.nodec
|
|
mov esi,[vidbuffer]
|
|
add esi,[SantaPos]
|
|
add esi,60*288
|
|
mov edx,SantaData
|
|
mov ebx,8
|
|
.sloop2
|
|
mov ecx,16
|
|
.sloop
|
|
cmp byte[edx],0
|
|
je .transp
|
|
mov byte[esi],0
|
|
.transp
|
|
inc esi
|
|
inc edx
|
|
dec ecx
|
|
jnz .sloop
|
|
add esi,272
|
|
dec ebx
|
|
jnz .sloop2
|
|
.nosanta
|
|
mov esi,[vidbuffer]
|
|
mov ecx,200
|
|
xor edx,edx
|
|
.loop
|
|
xor eax,eax
|
|
mov al,[SnowData+edx*4+3]
|
|
mov ebx,eax
|
|
shl eax,8
|
|
shl ebx,5
|
|
add eax,ebx
|
|
xor ebx,ebx
|
|
mov bl,[SnowData+edx*4+1]
|
|
add eax,ebx
|
|
add eax,16
|
|
mov bl,[SnowVelDist+edx*2]
|
|
and bl,03h
|
|
add bl,228
|
|
test byte[SnowVelDist+edx*2],8
|
|
jz .nosnow
|
|
mov [esi+eax],bl
|
|
.nosnow
|
|
inc edx
|
|
dec ecx
|
|
jnz .loop
|
|
; Change Snow Displacement Values
|
|
.next
|
|
cmp dword[SnowMover],0
|
|
je .nomore
|
|
call ProcessSnowVelocity
|
|
dec dword[SnowMover]
|
|
jmp .next
|
|
.nomore
|
|
ret
|
|
|
|
SECTION .data
|
|
.giftmsg db 'A GIFT TO YOU IN THE OPTIONS!',0
|
|
SECTION .text
|
|
|
|
ProcessSnowVelocity:
|
|
cmp dword[MsgGiftLeft],0
|
|
je .nodec
|
|
dec dword[MsgGiftLeft]
|
|
.nodec
|
|
cmp dword[NumSnow],200
|
|
jne .snowincr
|
|
cmp dword[SantaNextT],0
|
|
je .skip
|
|
dec dword[SantaNextT]
|
|
jmp .notsreset
|
|
.skip
|
|
dec dword[SantaPos]
|
|
cmp dword[SantaPos],0
|
|
jne .notsreset
|
|
mov dword[SantaPos],272
|
|
mov dword[SantaNextT],36*60
|
|
jmp .notsreset
|
|
.snowincr
|
|
dec dword[SnowTimer]
|
|
jnz .notsreset
|
|
inc dword[NumSnow]
|
|
mov dword[SnowTimer],18
|
|
.notsreset
|
|
|
|
mov ecx,[NumSnow]
|
|
cmp ecx,0
|
|
jne .okay
|
|
ret
|
|
.okay
|
|
xor edx,edx
|
|
.loop
|
|
xor eax,eax
|
|
mov al,[SnowVelDist+edx*2]
|
|
mov ebx,100
|
|
sub bl,[MusicRelVol]
|
|
add bx,bx
|
|
add ax,bx
|
|
add ax,bx
|
|
add word[SnowData+edx*4],ax
|
|
xor eax,eax
|
|
mov al,[SnowVelDist+edx*2+1]
|
|
add ax,256
|
|
add word[SnowData+edx*4+2],ax
|
|
cmp word[SnowData+edx*4+2],200h
|
|
ja .nosdata
|
|
or byte[SnowVelDist+edx*2],8
|
|
.nosdata
|
|
inc edx
|
|
dec ecx
|
|
jnz .loop
|
|
ret
|
|
|
|
SECTION .bss
|
|
OkaySC resb 1
|
|
|
|
%macro ProcessOneDigit 1
|
|
cmp dl,9
|
|
jbe %%notover
|
|
add dl,65-48-10
|
|
%%notover
|
|
add dl,48
|
|
mov [.message+%1],dl
|
|
xor edx,edx
|
|
div ebx
|
|
%endmacro
|
|
|
|
SECTION .data
|
|
.message db 0,0,0,0,' ',0,0,0,0,0,0,0
|
|
SECTION .text
|
|
|
|
NEWSYM StartGUI
|
|
%ifdef __OPENGL__
|
|
cmp byte[BilinearFilter],1
|
|
jne near .skipbl
|
|
mov byte[blinit],1
|
|
.skipbl
|
|
%endif
|
|
mov byte[GUILoadPos],0
|
|
cmp byte[TripBufAvail],0
|
|
jne .notexttb
|
|
%ifdef __MSDOS__
|
|
mov byte[Triplebufen],0
|
|
%endif
|
|
.notexttb
|
|
cmp byte[MMXSupport],1
|
|
jne .2xSaIdis
|
|
cmp byte[newgfx16b],0
|
|
je .2xSaIdis
|
|
jmp .no2xSaIdis
|
|
.2xSaIdis
|
|
mov byte[En2xSaI],0
|
|
mov byte[hqFilter],0
|
|
.no2xSaIdis
|
|
cmp byte[En2xSaI],0
|
|
je .no2xsaien
|
|
%ifdef __MSDOS__
|
|
mov byte[Triplebufen],0
|
|
%endif
|
|
mov byte[hqFilter],0
|
|
mov byte[scanlines],0
|
|
mov byte[antienab],0
|
|
.no2xsaien
|
|
cmp byte[hqFilter],0
|
|
je .nohqen
|
|
mov byte[En2xSaI],0
|
|
mov byte[scanlines],0
|
|
mov byte[antienab],0
|
|
.nohqen
|
|
|
|
mov ecx,64
|
|
mov eax,SpecialLine
|
|
.slloop
|
|
mov dword[eax],0
|
|
add eax,4
|
|
dec ecx
|
|
jnz .slloop
|
|
.okayow
|
|
|
|
mov byte[GUIOn],1
|
|
mov byte[GUIOn2],1
|
|
mov eax,[NumComboLocl]
|
|
cmp byte[GUIComboGameSpec],0
|
|
jne .local
|
|
mov eax,[NumComboGlob]
|
|
.local
|
|
mov [NumCombo],eax
|
|
call ResetTripleBuf
|
|
|
|
cmp dword[GUIwinposx+16*4],0
|
|
jne .notzero
|
|
mov dword[GUIwinposx+16*4],3
|
|
mov dword[GUIwinposy+16*4],22
|
|
.notzero
|
|
|
|
mov dword[GUICTimer],0
|
|
; Initialize volume
|
|
xor eax,eax
|
|
xor edx,edx
|
|
mov al,[MusicRelVol]
|
|
shl eax,7
|
|
mov ebx,100
|
|
div ebx
|
|
cmp al,127
|
|
jb .noofb
|
|
mov al,127
|
|
.noofb
|
|
mov [MusicVol],al
|
|
mov byte[CheatSearchStatus],0
|
|
cmp byte[newgfx16b],0
|
|
je .nong
|
|
mov ecx,256*144
|
|
mov eax,[vidbufferofsb]
|
|
.loop
|
|
mov dword[eax],0
|
|
add eax,4
|
|
dec ecx
|
|
jnz .loop
|
|
.nong
|
|
mov byte[ShowTimer],1
|
|
call Get_Date
|
|
cmp dh,12
|
|
jne .noxmas
|
|
cmp dl,25
|
|
jne .noxmas
|
|
mov byte[OkaySC],1
|
|
.noxmas
|
|
mov byte[lastmouseholded],1
|
|
cmp dword[GUIwinposx+15*4],0
|
|
jne .nomoviemenufix
|
|
mov dword[GUIwinposx+15*4],50
|
|
mov dword[GUIwinposy+15*4],50
|
|
.nomoviemenufix
|
|
mov ax,[resolutn]
|
|
mov [PrevResoln],ax
|
|
mov word[resolutn],224
|
|
|
|
mov byte[GUIPalConv],0
|
|
mov byte[MousePRClick],1
|
|
|
|
pushad
|
|
cmp byte[MouseInitOkay],1
|
|
je near .mousedone
|
|
mov byte[MouseInitOkay],1
|
|
cmp byte[MouseDis],1
|
|
je .mousedone
|
|
call Init_Mouse
|
|
cmp ax,0
|
|
jne .mousedone
|
|
mov byte[MouseDis],1
|
|
.mousedone
|
|
popad
|
|
|
|
mov eax,[KeyQuickLoad]
|
|
test byte[pressed+eax],1
|
|
jz near .noquickload
|
|
mov byte[GUIcmenupos],0
|
|
loadmenuopen 1
|
|
.noquickload
|
|
mov esi,pressed
|
|
mov ecx,64+32+8
|
|
.pclear
|
|
mov dword[esi],0
|
|
add esi,4
|
|
dec ecx
|
|
jnz .pclear
|
|
mov byte[pressed+1],2
|
|
mov byte[GUIescpress],1
|
|
|
|
; set Video cursor location
|
|
xor eax,eax
|
|
mov al,[cvidmode]
|
|
mov [GUIcurrentvideocursloc],eax
|
|
mov ebx,[NumVideoModes]
|
|
cmp ebx,20
|
|
ja .viewloc
|
|
mov dword[GUIcurrentvideoviewloc],0
|
|
jmp .skip
|
|
.viewloc
|
|
sub ebx,20
|
|
cmp eax,ebx
|
|
jbe .noof
|
|
mov eax,ebx
|
|
.noof
|
|
mov [GUIcurrentvideoviewloc],eax
|
|
.skip
|
|
|
|
pushad
|
|
call SaveSramData
|
|
call GUIQuickLoadUpdate
|
|
popad
|
|
|
|
call LoadDetermine
|
|
|
|
cmp byte[AutoState],0
|
|
je .noautostate
|
|
cmp byte[romloadskip],0
|
|
jne .noautostate
|
|
pushad
|
|
call SaveSecondState
|
|
popad
|
|
.noautostate
|
|
|
|
GUIInitIRQs
|
|
|
|
cmp byte[GUIwinptr],0
|
|
jne .nomenuopen
|
|
cmp byte[esctomenu],0
|
|
je .nomenuchange
|
|
mov byte[GUIcmenupos],2
|
|
mov byte[GUIcrowpos],0
|
|
mov dword[GUICYLocPtr],MenuDat2
|
|
cmp byte[esctomenu],1
|
|
je .nomenuchange
|
|
.nomenuopen
|
|
mov byte[GUIcmenupos],0
|
|
.nomenuchange
|
|
cmp byte[GUIwinactiv+1],0
|
|
je .noloadrefresh
|
|
mov dword[GUIcurrentfilewin],0
|
|
call GetLoadData
|
|
.noloadrefresh
|
|
mov byte[GUIHold],0
|
|
; clear 256 bytes from hirestiledat
|
|
mov esi,hirestiledat
|
|
mov ecx,256
|
|
.loophires
|
|
mov byte[esi],0
|
|
inc esi
|
|
dec ecx
|
|
jnz .loophires
|
|
mov byte[curblank],00h
|
|
call InitGUI
|
|
|
|
cmp byte[CheatWinMode],0
|
|
je near .csskip
|
|
|
|
; Load Cheat Search File
|
|
pushad
|
|
call LoadCheatSearchFile
|
|
popad
|
|
|
|
.csskip
|
|
|
|
mov byte[GUIQuit],0
|
|
.nokey
|
|
cmp byte[GUIQuit],2
|
|
je near .exit
|
|
cmp byte[GUIQuit],1
|
|
je near .exitgui
|
|
mov byte[GUIQuit],0
|
|
cmp byte[MouseDis],1
|
|
je .mousedis2
|
|
call ProcessMouse
|
|
cmp byte[videotroub],1
|
|
jne .notrouble
|
|
ret
|
|
.notrouble
|
|
.mousedis2
|
|
call GUIUnBuffer
|
|
cmp byte[GUIEffect],1
|
|
jne .nosnow
|
|
call DrawSnow
|
|
.nosnow
|
|
cmp byte[GUIEffect],2
|
|
jne .nowater
|
|
call DrawWater
|
|
.nowater
|
|
cmp byte[GUIEffect],3
|
|
jne .nowater2
|
|
call DrawWater
|
|
.nowater2
|
|
cmp byte[GUIEffect],4
|
|
jne .noburn
|
|
call DrawBurn
|
|
.noburn
|
|
cmp byte[GUIEffect],5
|
|
jne .nosmoke
|
|
call DrawSmoke
|
|
.nosmoke
|
|
|
|
cmp dword[GUIEditStringcWin],0
|
|
je .noblink
|
|
cmp dword[GUIEditStringcLen],0
|
|
je .noblink
|
|
mov eax,[GUIEditStringcLen]
|
|
cmp dword[GUIEditStringLTxt],8
|
|
jb .noblinka
|
|
mov byte[eax],'_'
|
|
mov byte[eax+1],0
|
|
mov dword[GUIEditStringLstb],1
|
|
.noblinka
|
|
cmp dword[GUIEditStringLTxt],0
|
|
jne .noblink
|
|
mov dword[GUIEditStringLTxt],16
|
|
.noblink
|
|
|
|
call DisplayBoxes
|
|
|
|
cmp dword[GUIEditStringLstb],1
|
|
jne .notblinked
|
|
mov dword[GUIEditStringLstb],0
|
|
mov eax,[GUIEditStringcLen]
|
|
mov byte[eax],0
|
|
.notblinked
|
|
|
|
call DisplayMenu
|
|
cmp byte[MouseDis],1
|
|
je .mousedis3
|
|
call DrawMouse
|
|
.mousedis3
|
|
cmp byte[FirstTimeData],0
|
|
jne .nofirsttime
|
|
call guifirsttimemsg
|
|
mov byte[FirstTimeData],1
|
|
.nofirsttime
|
|
cmp byte[guimsgptr],0
|
|
jne .nohorizon
|
|
pushad
|
|
call GetDate
|
|
cmp ax,1025
|
|
popad
|
|
jne .nohorizon
|
|
pushad
|
|
call GetTime
|
|
push eax
|
|
call horizon_get
|
|
mov [guimsgptr],eax
|
|
popad
|
|
call horizonfixmsg
|
|
.nohorizon
|
|
cmp dword[GUICTimer],0
|
|
je .notimer
|
|
GUIOuttext 21,211,[GUICMessage],50
|
|
GUIOuttext 20,210,[GUICMessage],63
|
|
.notimer
|
|
call vidpastecopyscr
|
|
call GUIgetcurrentinput
|
|
jmp .nokey
|
|
.exitgui
|
|
GUIDeInitIRQs
|
|
|
|
mov ax,[PrevResoln]
|
|
mov [resolutn],ax
|
|
jmp endprog
|
|
.exit
|
|
mov edi,[spcBuffera]
|
|
mov ecx,65536
|
|
xor eax,eax
|
|
rep stosd
|
|
GUIDeInitIRQs
|
|
%ifdef __MSDOS__
|
|
call DOSClearScreen
|
|
cmp byte[cbitmode],0
|
|
jne .nomakepal
|
|
call dosmakepal
|
|
.nomakepal
|
|
%endif
|
|
mov word[t1cc],1
|
|
|
|
pushad
|
|
call GUISaveVars
|
|
popad
|
|
|
|
mov byte[MousePRClick],1
|
|
mov byte[prevbright],0
|
|
mov ax,[PrevResoln]
|
|
mov [resolutn],ax
|
|
|
|
mov byte[CheatOn],0
|
|
cmp dword[NumCheats],0
|
|
je .nocheats
|
|
mov byte[CheatOn],1
|
|
.nocheats
|
|
|
|
cmp byte[CopyRamToggle],1
|
|
jne .nocopyram
|
|
mov byte[CopyRamToggle],0
|
|
mov eax,[vidbuffer]
|
|
add eax,129600
|
|
; copy 128k ram
|
|
mov ebx,[wramdata]
|
|
mov ecx,32768
|
|
.loopcr
|
|
mov edx,[ebx]
|
|
mov [eax],edx
|
|
add ebx,4
|
|
add eax,4
|
|
dec ecx
|
|
jnz .loopcr
|
|
.nocopyram
|
|
|
|
cmp byte[CheatWinMode],2
|
|
jne .notview
|
|
mov byte[CheatWinMode],1
|
|
.notview
|
|
|
|
cmp byte[CheatWinMode],0
|
|
je .csskip2
|
|
;Save Cheat Search File
|
|
pushad
|
|
call SaveCheatSearchFile
|
|
popad
|
|
.csskip2
|
|
|
|
mov edi,[vidbuffer]
|
|
mov ecx,288*120
|
|
xor eax,eax
|
|
rep stosd
|
|
|
|
mov ecx,256*144
|
|
mov eax,[vidbufferofsb]
|
|
.loopcl
|
|
mov dword[eax],0
|
|
add eax,4
|
|
dec ecx
|
|
jnz .loopcl
|
|
|
|
call AdjustFrequency
|
|
mov byte[GUIOn],0
|
|
mov byte[GUIOn2],0
|
|
mov byte[GUIReset],0
|
|
mov dword[StartLL],0
|
|
mov dword[StartLR],0
|
|
jmp continueprog
|
|
|
|
guimencodermsg:
|
|
xor ebx,ebx
|
|
mov ecx,256
|
|
.a
|
|
mov byte[pressed+ebx],0
|
|
inc ebx
|
|
dec ecx
|
|
jnz .a
|
|
mov byte[pressed+2Ch],0
|
|
.again
|
|
GUIBox 43,75,213,163,160
|
|
GUIBox 43,75,213,75,162
|
|
GUIBox 43,75,43,163,161
|
|
GUIBox 213,75,213,163,159
|
|
GUIBox 43,163,213,163,158
|
|
GUIOuttext 52,96,guimencodert1,220-15
|
|
GUIOuttext 51,95,guimencodert1,220
|
|
GUIOuttext 52,134,guimencodert2,220-15
|
|
GUIOuttext 51,133,guimencodert2,220
|
|
call vidpastecopyscr
|
|
call GUIUnBuffer
|
|
call DisplayBoxes
|
|
call DisplayMenu
|
|
call JoyRead
|
|
cmp byte[pressed+39h],0
|
|
jne .pressedokay
|
|
jmp .again
|
|
.pressedokay
|
|
ret
|
|
|
|
guilamemsg:
|
|
xor ebx,ebx
|
|
mov ecx,256
|
|
.a
|
|
mov byte[pressed+ebx],0
|
|
inc ebx
|
|
dec ecx
|
|
jnz .a
|
|
mov byte[pressed+2Ch],0
|
|
.again
|
|
GUIBox 43,75,213,163,160
|
|
GUIBox 43,75,213,75,162
|
|
GUIBox 43,75,43,163,161
|
|
GUIBox 213,75,213,163,159
|
|
GUIBox 43,163,213,163,158
|
|
GUIOuttext 52,96,guilamet1,220-15
|
|
GUIOuttext 51,95,guilamet1,220
|
|
GUIOuttext 52,134,guilamet2,220-15
|
|
GUIOuttext 51,133,guilamet2,220
|
|
call vidpastecopyscr
|
|
call GUIUnBuffer
|
|
call DisplayBoxes
|
|
call DisplayMenu
|
|
call JoyRead
|
|
cmp byte[pressed+39h],0
|
|
jne .pressedokay
|
|
jmp .again
|
|
.pressedokay
|
|
ret
|
|
|
|
SECTION .data
|
|
guimencodert1 db ' MENCODER IS MISSING: ',0
|
|
guimencodert2 db 'PRESS SPACE TO PROCEED',0
|
|
guilamet1 db ' LAME IS MISSING: ',0
|
|
guilamet2 db 'PRESS SPACE TO PROCEED',0
|
|
|
|
SECTION .text
|
|
|
|
guifirsttimemsg:
|
|
xor ebx,ebx
|
|
mov ecx,256
|
|
.a
|
|
mov byte[pressed+ebx],0
|
|
inc ebx
|
|
dec ecx
|
|
jnz .a
|
|
mov byte[pressed+2Ch],0
|
|
.again
|
|
GUIBox 43,75,213,163,160
|
|
GUIBox 43,75,213,75,162
|
|
GUIBox 43,75,43,163,161
|
|
GUIBox 213,75,213,163,159
|
|
GUIBox 43,163,213,163,158
|
|
GUIOuttext 52,81,guiftimemsg1,220-15
|
|
GUIOuttext 51,80,guiftimemsg1,220
|
|
GUIOuttext 52,96,guiftimemsg2,220-15
|
|
GUIOuttext 51,95,guiftimemsg2,220
|
|
GUIOuttext 52,104,guiftimemsg3,220-15
|
|
GUIOuttext 51,103,guiftimemsg3,220
|
|
GUIOuttext 52,112,guiftimemsg4,220-15
|
|
GUIOuttext 51,111,guiftimemsg4,220
|
|
GUIOuttext 52,120,guiftimemsg5,220-15
|
|
GUIOuttext 51,119,guiftimemsg5,220
|
|
GUIOuttext 52,128,guiftimemsg6,220-15
|
|
GUIOuttext 51,127,guiftimemsg6,220
|
|
GUIOuttext 52,136,guiftimemsg7,220-15
|
|
GUIOuttext 51,135,guiftimemsg7,220
|
|
GUIOuttext 52,151,guiftimemsg8,220-15
|
|
GUIOuttext 51,150,guiftimemsg8,220
|
|
call vidpastecopyscr
|
|
call GUIUnBuffer
|
|
call DisplayBoxes
|
|
call DisplayMenu
|
|
call JoyRead
|
|
cmp byte[pressed+39h],0
|
|
jne .pressedokay
|
|
jmp .again
|
|
.pressedokay
|
|
ret
|
|
|
|
SECTION .data
|
|
guiftimemsg1 db ' ONE-TIME USER REMINDER : ',0
|
|
guiftimemsg2 db ' PLEASE BE SURE TO READ ',0
|
|
guiftimemsg3 db 'THE DOCUMENTATION INCLUDED',0
|
|
guiftimemsg4 db ' WITH ZSNES FOR IMPORTANT',0
|
|
guiftimemsg5 db ' INFORMATION AND ANSWERS',0
|
|
guiftimemsg6 db ' TO COMMON PROBLEMS',0
|
|
guiftimemsg7 db ' AND QUESTIONS.',0
|
|
guiftimemsg8 db 'PRESS SPACEBAR TO PROCEED.',0
|
|
SECTION .text
|
|
|
|
horizonfixmsg:
|
|
xor ebx,ebx
|
|
mov ecx,256
|
|
.a
|
|
mov byte[pressed+ebx],0
|
|
inc ebx
|
|
dec ecx
|
|
jnz .a
|
|
mov byte[pressed+2Ch],0
|
|
.again
|
|
GUIBox 43,75,213,163,160
|
|
GUIBox 43,75,213,75,162
|
|
GUIBox 43,75,43,163,161
|
|
GUIBox 213,75,213,163,159
|
|
GUIBox 43,163,213,163,158
|
|
GUIOuttext 52,81,guimsgmsg,220-15
|
|
GUIOuttext 51,80,guimsgmsg,220
|
|
GUIOuttext 52,96,[guimsgptr],220-15
|
|
GUIOuttext 51,95,[guimsgptr],220
|
|
add dword[guimsgptr],32
|
|
GUIOuttext 52,104,[guimsgptr],220-15
|
|
GUIOuttext 51,103,[guimsgptr],220
|
|
add dword[guimsgptr],32
|
|
GUIOuttext 52,112,[guimsgptr],220-15
|
|
GUIOuttext 51,111,[guimsgptr],220
|
|
add dword[guimsgptr],32
|
|
GUIOuttext 52,120,[guimsgptr],220-15
|
|
GUIOuttext 51,119,[guimsgptr],220
|
|
sub dword[guimsgptr],96
|
|
GUIOuttext 52,151,guiftimemsg8,220-15
|
|
GUIOuttext 51,150,guiftimemsg8,220
|
|
call vidpastecopyscr
|
|
call GUIUnBuffer
|
|
call DisplayBoxes
|
|
call DisplayMenu
|
|
call JoyRead
|
|
cmp byte[pressed+39h],0
|
|
jne .pressedokay
|
|
jmp .again
|
|
.pressedokay
|
|
ret
|
|
|
|
SECTION .data
|
|
guimsgptr dd 0
|
|
guimsgmsg db ' WELCOME TO ZSNES',0
|
|
SECTION .text
|
|
|
|
guiprevideo:
|
|
xor ebx,ebx
|
|
mov ecx,256
|
|
.a
|
|
mov byte[pressed+ebx],0
|
|
inc ebx
|
|
dec ecx
|
|
jnz .a
|
|
call GUIUnBuffer
|
|
call DisplayBoxes
|
|
call DisplayMenu
|
|
GUIBox 43,90,213,163,160
|
|
GUIBox 43,90,213,90,162
|
|
GUIBox 43,90,43,163,161
|
|
GUIBox 213,90,213,163,159
|
|
GUIBox 43,163,213,163,158
|
|
GUIOuttext 56,96,guiprevidmsg1,220-15
|
|
GUIOuttext 55,95,guiprevidmsg1,220
|
|
GUIOuttext 56,104,guiprevidmsg2,220-15
|
|
GUIOuttext 55,103,guiprevidmsg2,220
|
|
GUIOuttext 56,112,guiprevidmsg3,220-15
|
|
GUIOuttext 55,111,guiprevidmsg3,220
|
|
GUIOuttext 56,120,guiprevidmsg4,220-15
|
|
GUIOuttext 55,119,guiprevidmsg4,220
|
|
GUIOuttext 56,128,guiprevidmsg5,220-15
|
|
GUIOuttext 55,127,guiprevidmsg5,220
|
|
GUIOuttext 56,136,guiprevidmsg6,220-15
|
|
GUIOuttext 55,135,guiprevidmsg6,220
|
|
GUIOuttext 56,151,guiprevidmsg7,220-15
|
|
GUIOuttext 55,150,guiprevidmsg7,220
|
|
call vidpastecopyscr
|
|
mov byte[pressed+2Ch],0
|
|
.again
|
|
call JoyRead
|
|
xor ebx,ebx
|
|
mov ecx,256+128+64
|
|
.b
|
|
cmp byte[pressed+ebx],0
|
|
jne .pressedkey
|
|
inc ebx
|
|
dec ecx
|
|
jnz .b
|
|
cmp byte[MouseDis],1
|
|
je .again
|
|
call Get_MouseData
|
|
cmp byte[lhguimouse],1
|
|
jne .notlefthanded
|
|
call SwapMouseButtons
|
|
.notlefthanded
|
|
test bx,01h
|
|
jnz .pressedokay
|
|
jmp .again
|
|
.pressedkey
|
|
mov byte[pressed+ebx],0
|
|
.pressedokay
|
|
ret
|
|
|
|
SECTION .data
|
|
guiprevidmsg1 db 'ZSNES WILL NOW ATTEMPT',0
|
|
guiprevidmsg2 db ' TO CHANGE YOUR VIDEO',0
|
|
guiprevidmsg3 db ' MODE. IF THE CHANGE',0
|
|
guiprevidmsg4 db 'IS UNSUCCESSFUL, WAIT',0
|
|
guiprevidmsg5 db ' 10 SECONDS AND VIDEO',0
|
|
guiprevidmsg6 db 'MODE WILL BE RESTORED.',0
|
|
guiprevidmsg7 db ' PRESS ANY KEY.',0
|
|
SECTION .text
|
|
|
|
guipostvideo:
|
|
mov ecx,256*144
|
|
mov eax,[vidbufferofsb]
|
|
.loop
|
|
mov dword[eax],0FFFFFFFFh
|
|
add eax,4
|
|
dec ecx
|
|
jnz .loop
|
|
|
|
mov dword[GUIkeydelay],36*10
|
|
|
|
.pressedfail
|
|
call GUIUnBuffer
|
|
call DisplayBoxes
|
|
call DisplayMenu
|
|
GUIBox 43,90,213,163,160
|
|
GUIBox 43,90,213,90,162
|
|
GUIBox 43,90,43,163,161
|
|
GUIBox 213,90,213,163,159
|
|
GUIBox 43,163,213,163,158
|
|
GUIOuttext 56,96,guipostvidmsg1,220-15
|
|
GUIOuttext 55,95,guipostvidmsg1,220
|
|
GUIOuttext 56,151,guipostvidmsg2,220-15
|
|
GUIOuttext 55,150,guipostvidmsg2,220
|
|
call vidpastecopyscr
|
|
; Wait for all mouse and input data to be 0
|
|
|
|
cmp dword[GUIkeydelay],0
|
|
je .pressedokay
|
|
|
|
;This is to make all ports not register space bar from being pressed earlier
|
|
mov byte[pressed+2Ch],0
|
|
|
|
call JoyRead
|
|
|
|
cmp byte[pressed+39h],0
|
|
jne .pressedokay
|
|
jmp .pressedfail
|
|
.pressedokay
|
|
mov byte[GUIpclicked],1
|
|
ret
|
|
|
|
SECTION .data
|
|
guipostvidmsg1 db 'VIDEO MODE CHANGED.',0
|
|
guipostvidmsg2 db ' PRESS SPACEBAR.',0
|
|
SECTION .text
|
|
|
|
guipostvideofail:
|
|
mov dword[guipostvidptr],guipostvidmsg3b
|
|
mov byte[guipostvidmsg3b],0
|
|
mov byte[guipostvidmsg4b],0
|
|
mov byte[guipostvidmsg5b],0
|
|
mov eax,[ErrorPointer]
|
|
mov ebx,eax
|
|
.loop
|
|
cmp byte[ebx],0
|
|
je .found
|
|
cmp byte[ebx],'$'
|
|
je .found
|
|
inc ebx
|
|
jmp .loop
|
|
.found
|
|
mov edx,ebx
|
|
sub edx,eax
|
|
.detnext
|
|
or edx,edx
|
|
jz .notext
|
|
cmp edx,25
|
|
jbe .copytext
|
|
.nospace
|
|
dec edx
|
|
cmp byte[eax+edx],32
|
|
jne .nospace
|
|
jmp .detnext
|
|
.copytext
|
|
push ebx
|
|
mov ecx,[guipostvidptr]
|
|
.copytextloop
|
|
mov bl,[eax]
|
|
cmp bl,'$'
|
|
jne .notdol
|
|
mov bl,0
|
|
.notdol
|
|
mov [ecx],bl
|
|
inc eax
|
|
inc ecx
|
|
dec edx
|
|
jnz .copytextloop
|
|
mov byte[ecx],0
|
|
pop ebx
|
|
add dword[guipostvidptr],26
|
|
cmp byte[eax],0
|
|
je .notext
|
|
cmp byte[eax],'$'
|
|
je .notext
|
|
inc eax
|
|
jmp .found
|
|
.notext
|
|
|
|
xor ebx,ebx
|
|
mov ecx,256
|
|
.a
|
|
mov byte[pressed+ebx],0
|
|
inc ebx
|
|
dec ecx
|
|
jnz .a
|
|
call GUIUnBuffer
|
|
call DisplayBoxes
|
|
call DisplayMenu
|
|
GUIBox 43,90,213,163,160
|
|
GUIBox 43,90,213,90,162
|
|
GUIBox 43,90,43,163,161
|
|
GUIBox 213,90,213,163,159
|
|
GUIBox 43,163,213,163,158
|
|
GUIOuttext 56,96,guipostvidmsg1b,220-15
|
|
GUIOuttext 55,95,guipostvidmsg1b,220
|
|
GUIOuttext 56,108,guipostvidmsg2b,220-15
|
|
GUIOuttext 55,107,guipostvidmsg2b,220
|
|
GUIOuttext 56,119,guipostvidmsg3b,220-15
|
|
GUIOuttext 55,118,guipostvidmsg3b,220
|
|
GUIOuttext 56,129,guipostvidmsg4b,220-15
|
|
GUIOuttext 55,128,guipostvidmsg4b,220
|
|
GUIOuttext 56,139,guipostvidmsg5b,220-15
|
|
GUIOuttext 55,138,guipostvidmsg5b,220
|
|
GUIOuttext 56,152,guipostvidmsg8b,220-15
|
|
GUIOuttext 55,151,guipostvidmsg8b,220
|
|
call vidpastecopyscr
|
|
call GUIUnBuffer
|
|
call DisplayBoxes
|
|
call DisplayMenu
|
|
%ifndef __UNIXSDL__
|
|
mov dword[GUIkeydelay],0FFFFFFFFh
|
|
%else
|
|
mov dword[GUIkeydelay],0x0
|
|
%endif
|
|
jmp guipostvideo.pressedfail
|
|
|
|
SECTION .data
|
|
guipostvidmsg1b db 'VIDEO MODE CHANGE FAILED.',0
|
|
guipostvidmsg2b db 'UNABLE TO INIT VESA2:',0
|
|
guipostvidmsg3b db 'AAAAAAAAAAAAAAAAAAAAAAAAA',0
|
|
guipostvidmsg4b db 'AAAAAAAAAAAAAAAAAAAAAAAAA',0
|
|
guipostvidmsg5b db 'AAAAAAAAAAAAAAAAAAAAAAAAA',0
|
|
guipostvidmsg8b db 'PRESS ANY KEY',0
|
|
SECTION .bss
|
|
guipostvidptr resd 1
|
|
SECTION .text
|
|
|
|
NEWSYM guicheaterror
|
|
xor ebx,ebx
|
|
mov ecx,256+128+64
|
|
.a
|
|
mov byte[pressed+ebx],0
|
|
inc ebx
|
|
dec ecx
|
|
jnz .a
|
|
.again
|
|
call GUIUnBuffer
|
|
call DisplayBoxes
|
|
call DisplayMenu
|
|
GUIBox 75,95,192,143,160
|
|
GUIBox 75,95,192,95,162
|
|
GUIBox 75,95,75,143,161
|
|
GUIBox 192,95,192,143,159
|
|
GUIBox 75,143,192,143,158
|
|
GUIOuttext 81,101,guicheaterror1,220-15
|
|
GUIOuttext 80,100,guicheaterror1,220
|
|
GUIOuttext 81,109,guicheaterror2,220-15
|
|
GUIOuttext 80,108,guicheaterror2,220
|
|
GUIOuttext 81,117,guicheaterror3,220-15
|
|
GUIOuttext 80,116,guicheaterror3,220
|
|
GUIOuttext 81,125,guicheaterror4,220-15
|
|
GUIOuttext 80,124,guicheaterror4,220
|
|
GUIOuttext 81,135,guicheaterror5,220-15
|
|
GUIOuttext 80,134,guicheaterror5,220
|
|
call vidpastecopyscr
|
|
call JoyRead
|
|
xor ebx,ebx
|
|
mov ecx,256+128+64
|
|
.b
|
|
cmp byte[pressed+ebx],0
|
|
jne .pressedokay
|
|
inc ebx
|
|
dec ecx
|
|
jnz .b
|
|
cmp byte[MouseDis],1
|
|
je .mousedis
|
|
call Get_MouseData
|
|
cmp byte[lhguimouse],1
|
|
jne .notlefthanded
|
|
call SwapMouseButtons
|
|
.notlefthanded
|
|
test bx,01h
|
|
jnz .pressedokay
|
|
.mousedis
|
|
jmp .again
|
|
.pressedokay
|
|
.again2
|
|
call Check_Key
|
|
or al,al
|
|
jz .nokey
|
|
call Get_Key
|
|
jmp .again2
|
|
.nokey
|
|
cmp byte[MouseDis],1
|
|
je .mousedis2
|
|
push ebx
|
|
; mov eax,0Bh
|
|
; int 33h
|
|
pop ebx
|
|
.mousedis2
|
|
mov dword[GUIcurrentcheatwin],1
|
|
mov byte[GUIpclicked],1
|
|
ret
|
|
|
|
SECTION .data
|
|
guicheaterror1 db 'INVALID CODE! YOU',0
|
|
guicheaterror2 db 'MUST ENTER A VALID',0
|
|
guicheaterror3 db 'GAME GENIE,PAR, OR',0
|
|
guicheaterror4 db 'GOLD FINGER CODE.',0
|
|
guicheaterror5 db 'PRESS ANY KEY.',0
|
|
SECTION .text
|
|
|
|
SECTION .bss
|
|
ManualCPtr resd 1
|
|
ManualStatus resb 1
|
|
NEWSYM Totalbyteloaded, resd 1
|
|
NEWSYM sramsavedis, resb 1
|
|
|
|
SECTION .data
|
|
|
|
SECTION .text
|
|
|
|
CheckMenuItemHelp:
|
|
mov al,[GUIcmenupos]
|
|
mov [GUIpmenupos],al
|
|
mov byte[GUIcmenupos],0
|
|
cmp byte[GUIwinactiv+edx],1
|
|
je .menuontop
|
|
xor eax,eax
|
|
mov al,[GUIwinptr]
|
|
inc byte[GUIwinptr]
|
|
mov [GUIwinorder+eax],dl
|
|
mov byte[GUIwinactiv+edx],1
|
|
cmp byte[savewinpos],0
|
|
jne .nomenuitem
|
|
mov eax,[GUIwinposxo+edx*4]
|
|
mov [GUIwinposx+edx*4],eax
|
|
mov eax,[GUIwinposyo+edx*4]
|
|
mov [GUIwinposy+edx*4],eax
|
|
jmp .nomenuitem
|
|
.menuontop
|
|
xor eax,eax
|
|
; look for match
|
|
.notfoundyet
|
|
mov bl,[GUIwinorder+eax]
|
|
cmp bl,dl
|
|
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
|
|
ret
|
|
|
|
%macro GUICheckMenuItem 2
|
|
mov edx,%1
|
|
cmp byte[GUIcrowpos],%2
|
|
jne near %%nomenuitem
|
|
call CheckMenuItemHelp
|
|
%%nomenuitem
|
|
%endmacro
|
|
|
|
%macro checkqloadvalue 1
|
|
cmp byte[GUIcrowpos],%1
|
|
jne %%skip
|
|
pushad
|
|
push %1
|
|
call loadquickfname
|
|
pop eax
|
|
popad
|
|
ret
|
|
%%skip
|
|
%endmacro
|
|
|
|
GUITryMenuItem: ; Defines which menu item calls what window number
|
|
cmp byte[GUIcmenupos],1
|
|
jne near .noquickload
|
|
checkqloadvalue 0
|
|
checkqloadvalue 1
|
|
checkqloadvalue 2
|
|
checkqloadvalue 3
|
|
checkqloadvalue 4
|
|
checkqloadvalue 5
|
|
checkqloadvalue 6
|
|
checkqloadvalue 7
|
|
checkqloadvalue 8
|
|
checkqloadvalue 9
|
|
cmp byte[GUIcrowpos],11
|
|
jne .skipswitch
|
|
xor byte[prevlfreeze],1
|
|
cmp byte[prevlfreeze],0
|
|
je .off
|
|
mov dword[GUIPrevMenuData+347],' ON '
|
|
jmp .on
|
|
.off
|
|
mov dword[GUIPrevMenuData+347],' OFF'
|
|
.on
|
|
.skipswitch
|
|
cmp byte[GUIcrowpos],12
|
|
jne .skipclear
|
|
cmp byte[prevlfreeze],0
|
|
jne .skipclear
|
|
mov edi,prevloadiname
|
|
mov eax,20202020h
|
|
mov ecx,70
|
|
rep stosd
|
|
mov edi,prevloaddnamel
|
|
xor eax,eax
|
|
mov ecx,1280
|
|
rep stosd
|
|
mov edi,prevloadfnamel
|
|
mov ecx,1280
|
|
rep stosd
|
|
pushad
|
|
call GUIQuickLoadUpdate
|
|
popad
|
|
ret
|
|
.skipclear
|
|
.noquickload
|
|
cmp byte[GUIcmenupos],2
|
|
jne near .nomain
|
|
GUICheckMenuItem 1, 0 ; Load
|
|
cmp byte[GUIcrowpos],0
|
|
jne .noloadrefresh
|
|
mov dword[GUIcurrentfilewin],0
|
|
jmp GetLoadData
|
|
.noloadrefresh
|
|
cmp byte[romloadskip],0
|
|
jne near .noromloaded
|
|
cmp byte[GUIcrowpos],1 ; Run
|
|
jne .norun
|
|
cmp byte[romloadskip],0
|
|
jne .dontquit
|
|
mov byte[GUIQuit],2
|
|
.dontquit
|
|
ret
|
|
.norun
|
|
GUICheckMenuItem 12, 2 ; Reset
|
|
cmp byte[GUIcrowpos],2
|
|
jne .noreset
|
|
mov byte[GUICResetPos],1
|
|
.noreset
|
|
cmp byte[GUIcrowpos],4
|
|
jne .nosavestate
|
|
mov byte[GUIStatesText5],0
|
|
mov byte[GUICStatePos],1
|
|
.nosavestate
|
|
cmp byte[GUIcrowpos],5
|
|
jne .noloadstate
|
|
mov byte[GUIStatesText5],1
|
|
mov byte[GUICStatePos],1
|
|
.noloadstate
|
|
GUICheckMenuItem 14, 4 ; Save State
|
|
GUICheckMenuItem 14, 5 ; Load State
|
|
GUICheckMenuItem 2, 6 ; Select State
|
|
.noromloaded
|
|
cmp byte[GUIcrowpos],8
|
|
jne .noquit
|
|
mov byte[GUIQuit],1
|
|
.noquit
|
|
.nomain
|
|
cmp byte[GUIcmenupos],3
|
|
jne near .noconfig
|
|
;The number on the left is the window to open
|
|
;the number on the right is where in the drop down box we are
|
|
GUICheckMenuItem 3,0 ; Input #1-5
|
|
GUICheckMenuItem 17,2 ; Devices
|
|
GUICheckMenuItem 18,3 ; Chip Config
|
|
GUICheckMenuItem 4,5 ; Options
|
|
cmp byte[GUIcrowpos],6 ; Video
|
|
jne near .novideo
|
|
; set Video cursor location
|
|
xor eax,eax
|
|
mov al,[cvidmode]
|
|
mov [GUIcurrentvideocursloc],eax
|
|
mov edx,[NumVideoModes]
|
|
cmp edx,20
|
|
ja .viewloc
|
|
mov dword[GUIcurrentvideoviewloc],0
|
|
jmp .skip
|
|
.viewloc
|
|
sub edx,20
|
|
cmp eax,edx
|
|
jbe .noof
|
|
mov eax,edx
|
|
.noof
|
|
mov [GUIcurrentvideoviewloc],eax
|
|
.skip
|
|
mov edx,5
|
|
call CheckMenuItemHelp
|
|
.novideo
|
|
GUICheckMenuItem 6,7 ; Sound
|
|
GUICheckMenuItem 19,8 ; Paths
|
|
GUICheckMenuItem 20,9 ; Saves
|
|
GUICheckMenuItem 21,10 ; Speed
|
|
.noconfig
|
|
cmp byte[romloadskip],0
|
|
jne near .nocheat
|
|
cmp byte[GUIcmenupos],4
|
|
jne near .nocheat
|
|
GUICheckMenuItem 7, 0
|
|
GUICheckMenuItem 7, 1
|
|
GUICheckMenuItem 13, 2
|
|
cmp byte[GUIcrowpos],0
|
|
jne .noaddc
|
|
mov dword[GUIcurrentcheatwin],1
|
|
.noaddc
|
|
cmp byte[GUIcrowpos],1
|
|
jne .nobrowsec
|
|
mov dword[GUIcurrentcheatwin],0
|
|
.nobrowsec
|
|
.nocheat
|
|
cmp byte[GUIcmenupos],5
|
|
jne near .nonet
|
|
%ifdef __MSDOS__
|
|
; GUICheckMenuItem 8, 0 ; Disable DOS Netplay Options
|
|
; GUICheckMenuItem 8, 1
|
|
%endif
|
|
; GUICheckMenuItem 8, 0 ; Disable WIN/SDL Internet Option
|
|
cmp byte[GUIcrowpos],0
|
|
jne near .nonet
|
|
.nonet
|
|
cmp byte[GUIcmenupos],6
|
|
jne near .nomisc
|
|
GUICheckMenuItem 9, 0
|
|
GUICheckMenuItem 10, 1
|
|
cmp byte[romloadskip],0
|
|
jne near .nomovie
|
|
GUICheckMenuItem 15, 2
|
|
cmp byte[GUIcrowpos],2
|
|
jne .nomovie
|
|
mov byte[MovieRecordWinVal],0
|
|
.nomovie
|
|
GUICheckMenuItem 16, 3 ; Save Config
|
|
cmp byte[GUIcrowpos],4
|
|
jne .nosavestuff
|
|
|
|
mov byte[savecfgforce],1
|
|
pushad
|
|
call GUISaveVars
|
|
popad
|
|
mov byte[savecfgforce],0
|
|
|
|
call Makemode7Table
|
|
mov dword[GUICMessage],.message1
|
|
mov dword[GUICTimer],50
|
|
.nosavestuff
|
|
GUICheckMenuItem 11, 6
|
|
.nomisc
|
|
ret
|
|
|
|
SECTION .data
|
|
.message1 db 'CONFIGURATION FILES SAVED.',0
|
|
NEWSYM savecfgforce, db 0
|
|
SECTION .text
|
|
|
|
DisplayBoxes: ; Displays window when item is clicked
|
|
xor esi,esi
|
|
.next2
|
|
mov al,[GUIwinorder+esi]
|
|
cmp al,0
|
|
je .done
|
|
inc esi
|
|
jmp .next2
|
|
.done
|
|
mov eax,esi
|
|
dec eax
|
|
mov [cwindrawn],al
|
|
xor eax,eax
|
|
xor esi,esi
|
|
.next
|
|
mov al,[GUIwinorder+esi]
|
|
cmp al,0
|
|
je near .nomore
|
|
push esi
|
|
cmp al,1
|
|
jne .noguiconfirm
|
|
cmp byte[GUIReset],1
|
|
je near .finstuff
|
|
call DisplayGUILoad
|
|
jmp .finstuff
|
|
.noguiconfirm
|
|
cmp al,2
|
|
jne .noguichosesave
|
|
call DisplayGUIChoseSave
|
|
jmp .finstuff
|
|
.noguichosesave
|
|
cmp al,3
|
|
jne .noguiinput
|
|
call DisplayGUIInput
|
|
jmp .finstuff
|
|
.noguiinput
|
|
cmp al,4
|
|
jne .noguioption
|
|
call DisplayGUIOption
|
|
jmp .finstuff
|
|
.noguioption
|
|
cmp al,5
|
|
jne .noguivideo
|
|
call DisplayGUIVideo
|
|
jmp .finstuff
|
|
.noguivideo
|
|
cmp al,6
|
|
jne .noguisound
|
|
call DisplayGUISound
|
|
jmp .finstuff
|
|
.noguisound
|
|
cmp al,7
|
|
jne .noguicheat
|
|
call DisplayGUICheat
|
|
jmp .finstuff
|
|
.noguicheat
|
|
cmp al,8
|
|
jne .noguinet
|
|
call DisplayNetOptns
|
|
jmp .finstuff
|
|
.noguinet
|
|
cmp al,9
|
|
jne .noguigameop
|
|
call DisplayGameOptns
|
|
jmp .finstuff
|
|
.noguigameop
|
|
cmp al,10
|
|
jne .noguiconf
|
|
call DisplayGUIOptns
|
|
%ifdef __WIN32__
|
|
pushad
|
|
call CheckAlwaysOnTop
|
|
popad
|
|
%endif
|
|
jmp .finstuff
|
|
.noguiconf
|
|
cmp al,11
|
|
jne .noguiconf2
|
|
call DisplayGUIAbout
|
|
jmp .finstuff
|
|
.noguiconf2
|
|
cmp al,12
|
|
jne .noguireset
|
|
call DisplayGUIReset
|
|
jmp .finstuff
|
|
.noguireset
|
|
cmp al,13
|
|
jne .noguisearch
|
|
call DisplayGUISearch
|
|
jmp .finstuff
|
|
.noguisearch
|
|
cmp al,14
|
|
jne .noguistates
|
|
call DisplayGUIStates
|
|
jmp .finstuff
|
|
.noguistates
|
|
cmp al,15
|
|
jne .noguimovies
|
|
call DisplayGUIMovies
|
|
jmp .finstuff
|
|
.noguimovies
|
|
cmp al,16
|
|
jne .noguicombo
|
|
call DisplayGUICombo
|
|
jmp .finstuff
|
|
.noguicombo
|
|
cmp al,17
|
|
jne .noaddon
|
|
call DisplayGUIAddOns
|
|
jmp .finstuff
|
|
.noaddon
|
|
cmp al,18
|
|
jne .nochipconfig
|
|
call DisplayGUIChipConfig
|
|
jmp .finstuff
|
|
.nochipconfig
|
|
cmp al,19
|
|
jne .nopaths
|
|
call DisplayGUIPaths
|
|
jmp .finstuff
|
|
.nopaths
|
|
cmp al,20
|
|
jne .nosave
|
|
call DisplayGUISave
|
|
jmp .finstuff
|
|
.nosave
|
|
cmp al,21
|
|
jne .nospeed
|
|
call DisplayGUISpeed
|
|
jmp .finstuff
|
|
.nospeed
|
|
.finstuff
|
|
pop esi
|
|
inc esi
|
|
dec byte[cwindrawn]
|
|
jmp .next
|
|
.nomore
|
|
ret
|
|
|
|
GUIProcStates:
|
|
xor eax,eax
|
|
mov al,[GUIwinptr]
|
|
dec eax
|
|
mov byte[GUIwinactiv+14],0
|
|
mov byte[GUIwinorder+eax],0
|
|
dec byte[GUIwinptr]
|
|
cmp byte[GUICBHold],10
|
|
je .yesstate
|
|
mov byte[GUICBHold],0
|
|
ret
|
|
.yesstate
|
|
mov byte[GUICBHold],0
|
|
cmp byte[GUIStatesText5],1
|
|
je .loadstate
|
|
pushad
|
|
call statesaver
|
|
popad
|
|
jmp .changedir
|
|
.loadstate
|
|
pushad
|
|
call loadstate2
|
|
popad
|
|
.changedir
|
|
ret
|
|
|
|
GUIProcReset:
|
|
cmp byte[GUICBHold],2
|
|
jne .noreset
|
|
pushad
|
|
mov byte[GUIReset],1
|
|
cmp byte[MovieProcessing],2 ;Recording
|
|
jne .nomovierecording
|
|
call ResetDuringMovie
|
|
jmp .movieendif
|
|
.nomovierecording
|
|
call GUIDoReset
|
|
.movieendif
|
|
popad
|
|
.noreset
|
|
mov byte[GUICBHold],0
|
|
xor eax,eax
|
|
mov al,[GUIwinptr]
|
|
dec eax
|
|
mov byte[GUIwinactiv+12],0
|
|
mov byte[GUIwinorder+eax],0
|
|
dec byte[GUIwinptr]
|
|
ret
|
|
|
|
%macro GUIDMHelp 4
|
|
mov byte[GUItextcolor],46
|
|
mov byte[GUItextcolor+1],42
|
|
mov byte[GUItextcolor+2],38
|
|
mov byte[GUItextcolor+3],44
|
|
mov byte[GUItextcolor+4],40
|
|
cmp byte[GUIcmenupos],%4
|
|
jne %%nohighlight
|
|
mov byte[GUItextcolor],38
|
|
mov byte[GUItextcolor+1],40
|
|
mov byte[GUItextcolor+2],46
|
|
mov byte[GUItextcolor+3],40
|
|
mov byte[GUItextcolor+4],44
|
|
%%nohighlight
|
|
GUIBox %1,3,%2,3,[GUItextcolor]
|
|
GUIBox %1,4,%2,12,[GUItextcolor+1]
|
|
GUIBox %1,13,%2,13,[GUItextcolor+2]
|
|
GUIBox %1,3,%1,12,[GUItextcolor+3]
|
|
GUIBox %2,4,%2,13,[GUItextcolor+4]
|
|
GUIOuttext %1+5,7,%3,44
|
|
GUIOuttext %1+4,6,%3,62
|
|
%endmacro
|
|
|
|
%macro GUIDMHelpB 4
|
|
mov byte[GUItextcolor],46
|
|
mov byte[GUItextcolor+1],42
|
|
mov byte[GUItextcolor+2],38
|
|
mov byte[GUItextcolor+3],44
|
|
mov byte[GUItextcolor+4],40
|
|
cmp byte[GUIcwinpress],%4
|
|
jne %%nohighlight
|
|
mov byte[GUItextcolor],38
|
|
mov byte[GUItextcolor+1],40
|
|
mov byte[GUItextcolor+2],46
|
|
mov byte[GUItextcolor+3],40
|
|
mov byte[GUItextcolor+4],44
|
|
%%nohighlight
|
|
GUIBox %1,3,%2,3,[GUItextcolor]
|
|
GUIBox %1,4,%2,13,[GUItextcolor+1]
|
|
GUIBox %1,14,%2,14,[GUItextcolor+2]
|
|
GUIBox %1,3,%1,13,[GUItextcolor+3]
|
|
GUIBox %2,4,%2,14,[GUItextcolor+4]
|
|
GUIOuttext %1+3,7,%3,44
|
|
GUIOuttext %1+2,6,%3,62
|
|
%endmacro
|
|
|
|
%macro GUIDMHelpB2 4
|
|
mov byte[GUItextcolor],46
|
|
mov byte[GUItextcolor+1],42
|
|
mov byte[GUItextcolor+2],38
|
|
mov byte[GUItextcolor+3],44
|
|
mov byte[GUItextcolor+4],40
|
|
cmp byte[GUIcwinpress],%4
|
|
jne %%nohighlight
|
|
mov byte[GUItextcolor],38
|
|
mov byte[GUItextcolor+1],40
|
|
mov byte[GUItextcolor+2],46
|
|
mov byte[GUItextcolor+3],40
|
|
mov byte[GUItextcolor+4],44
|
|
%%nohighlight
|
|
GUIBox %1,3,%2,3,[GUItextcolor]
|
|
GUIBox %1,4,%2,6,[GUItextcolor+1]
|
|
GUIBox %1,7,%2,7,[GUItextcolor+2]
|
|
GUIBox %1,3,%1,6,[GUItextcolor+3]
|
|
GUIBox %2,4,%2,7,[GUItextcolor+4]
|
|
GUIOuttext %1+3,5,%3,44
|
|
GUIOuttext %1+2,4,%3,62
|
|
%endmacro
|
|
|
|
%macro GUIDMHelpB3 4
|
|
mov byte[GUItextcolor],46
|
|
mov byte[GUItextcolor+1],42
|
|
mov byte[GUItextcolor+2],38
|
|
mov byte[GUItextcolor+3],44
|
|
mov byte[GUItextcolor+4],40
|
|
cmp byte[GUIcwinpress],%4
|
|
jne %%nohighlight
|
|
mov byte[GUItextcolor],38
|
|
mov byte[GUItextcolor+1],40
|
|
mov byte[GUItextcolor+2],46
|
|
mov byte[GUItextcolor+3],40
|
|
mov byte[GUItextcolor+4],44
|
|
%%nohighlight
|
|
GUIBox %1,9,%2,9,[GUItextcolor]
|
|
GUIBox %1,10,%2,12,[GUItextcolor+1]
|
|
GUIBox %1,13,%2,13,[GUItextcolor+2]
|
|
GUIBox %1,9,%1,12,[GUItextcolor+3]
|
|
GUIBox %2,10,%2,13,[GUItextcolor+4]
|
|
GUIOuttext %1+3,11,%3,44
|
|
GUIOuttext %1+2,10,%3,62
|
|
%endmacro
|
|
|
|
%macro GUIDrawMenuM 10
|
|
GUIShadow %7,%8,%7+4+%3*6,%8+3+%4*10
|
|
GUIBox %1,%2,%1+4+%3*6,%2+3+%4*10,43
|
|
|
|
mov edi,[GUIcrowpos]
|
|
mov ecx,edi
|
|
shl edi,8
|
|
shl ecx,5
|
|
add edi,ecx
|
|
lea edi,[edi*5]
|
|
shl edi,1
|
|
add edi,[vidbuffer]
|
|
add edi,%1+17+18*288
|
|
mov ecx,6*%3+3
|
|
mov edx,1
|
|
mov al,73
|
|
push edi
|
|
call GUIDrawBox
|
|
pop edi
|
|
add edi,288
|
|
mov ecx,6*%3+3
|
|
mov edx,7
|
|
mov al,72
|
|
push edi
|
|
call GUIDrawBox
|
|
pop edi
|
|
add edi,288*7
|
|
mov ecx,6*%3+3
|
|
mov edx,1
|
|
mov al,73
|
|
call GUIDrawBox
|
|
|
|
GUIBox %1+%10,%2,%1+4+%3*6,%2,47
|
|
GUIBox %1,%2,%1,%9,45
|
|
GUIBox %1,%9,%1+4+%3*6,%9,39
|
|
GUIBox %1+4+%3*6,1+%2,%1+4+%3*6,%9,41
|
|
mov edi,%5
|
|
mov esi,[vidbuffer]
|
|
add esi,16+%6+20*288
|
|
mov ecx,%4
|
|
mov edx,6*%3
|
|
call GUIMenuDisplay
|
|
|
|
mov dword[GUIMenuL],%1+1
|
|
mov dword[GUIMenuR],%1+6*%3+3
|
|
mov dword[GUIMenuD],18+%4*10
|
|
%endmacro
|
|
|
|
DisplayMenu:
|
|
; Draw Shadow
|
|
GUIShadow 5,7,235,21
|
|
; Display Top Border
|
|
GUIBox 0,1,229,1,71
|
|
GUIBox 0,2,229,2,70
|
|
GUIBox 0,3,229,3,69
|
|
GUIBox 0,4,229,4,68
|
|
GUIBox 0,5,229,5,67
|
|
GUIBox 0,6,229,6,66
|
|
GUIBox 0,7,229,7,65
|
|
GUIBox 0,8,229,8,64
|
|
GUIBox 0,9,229,9,65
|
|
GUIBox 0,10,229,10,66
|
|
GUIBox 0,11,229,11,67
|
|
GUIBox 0,12,229,12,68
|
|
GUIBox 0,13,229,13,69
|
|
GUIBox 0,14,229,14,70
|
|
GUIBox 0,15,229,15,71
|
|
|
|
%ifdef __UNIXSDL__
|
|
GUIShadow 238,9,247,20
|
|
GUIShadow 249,9,257,20
|
|
%endif
|
|
%ifdef __WIN32__
|
|
GUIShadow 238,9,247,14
|
|
GUIShadow 238,16,247,20
|
|
GUIShadow 249,9,257,20
|
|
%endif
|
|
.notwinpressa
|
|
|
|
%ifdef __UNIXSDL__
|
|
mov byte[GUIMenuItem+36],247
|
|
GUIDMHelpB 233,242,GUIMenuItem+36,1
|
|
mov byte[GUIMenuItem+36],'x'
|
|
GUIDMHelpB 244,253,GUIMenuItem+36,2
|
|
%endif
|
|
|
|
%ifdef __WIN32__
|
|
mov byte[GUIMenuItem+36],249
|
|
GUIDMHelpB2 233,242,GUIMenuItem+36,1
|
|
mov byte[GUIMenuItem+36],248
|
|
GUIDMHelpB3 233,242,GUIMenuItem+36,3
|
|
mov byte[GUIMenuItem+36],'x'
|
|
GUIDMHelpB 244,253,GUIMenuItem+36,2
|
|
%endif
|
|
.notwinpressb
|
|
|
|
; Display upper-left box
|
|
mov byte[GUIMenuItem+36],25
|
|
GUIDMHelp 4,12,GUIMenuItem+6,1
|
|
GUIOuttext 4+3,7,GUIMenuItem+36,44
|
|
GUIOuttext 4+2,6,GUIMenuItem+36,62
|
|
; Display boxes
|
|
GUIDMHelp 17,47,GUIMenuItem,2
|
|
GUIDMHelp 52,94,GUIMenuItem+7,3
|
|
GUIDMHelp 99,135,GUIMenuItem+14,4
|
|
GUIDMHelp 140,188,GUIMenuItem+21,5
|
|
GUIDMHelp 193,223,GUIMenuItem+29,6
|
|
|
|
mov dword[GUIMenuL],0
|
|
mov dword[GUIMenuR],0
|
|
mov dword[GUIMenuD],0
|
|
|
|
; format : x pos, y pos, #charx, #chary, name, xpos+2, xpos+5,22,
|
|
; 19+#chary*10, length of top menu box
|
|
cmp byte[GUIcmenupos],1
|
|
jne near .nomenu1
|
|
GUIDrawMenuM 4,16,30,13,GUIPrevMenuData,6,9,22,149,8 ;19+13*10
|
|
mov dword[GUICYLocPtr],MenuDat1
|
|
.nomenu1
|
|
cmp byte[GUIcmenupos],2
|
|
jne near .nomenu2
|
|
GUIDrawMenuM 17,16,10,9,GUIGameMenuData,19,22,22,109,30 ;19+9*10
|
|
mov dword[GUICYLocPtr],MenuDat2
|
|
.nomenu2
|
|
cmp byte[GUIcmenupos],3
|
|
jne near .nomenu3
|
|
GUIDrawMenuM 52,16,8,11,GUIConfigMenuData,54,57,22,129,42 ;19+11*10
|
|
mov dword[GUICYLocPtr],MenuDat3
|
|
.nomenu3
|
|
cmp byte[GUIcmenupos],4
|
|
jne near .nomenu4
|
|
GUIDrawMenuM 99,16,8,3,GUICheatMenuData,101,104,22,49,36 ;19+3*10
|
|
mov dword[GUICYLocPtr],MenuDat4
|
|
.nomenu4
|
|
cmp byte[GUIcmenupos],5
|
|
jne near .nomenu5
|
|
%ifdef __MSDOS__
|
|
GUIDrawMenuM 140,16,10,2,GUINetPlayMenuData,142,145,22,39,48 ;19+2*10
|
|
%else
|
|
GUIDrawMenuM 140,16,10,1,GUINetPlayMenuData,142,145,22,29,48 ;19+1*10
|
|
%endif
|
|
mov dword[GUICYLocPtr],MenuDat5
|
|
.nomenu5
|
|
cmp byte[GUIcmenupos],6
|
|
jne near .nomenu6
|
|
GUIDrawMenuM 193,16,9,7,GUIMiscMenuData,195,198,22,89,30 ;19+5*10
|
|
mov dword[GUICYLocPtr],MenuDat6
|
|
.nomenu6
|
|
ret
|
|
|
|
GUIMenuDisplay:
|
|
xor ebx,ebx
|
|
.next
|
|
mov al,[edi]
|
|
push ebx
|
|
push ecx
|
|
push esi
|
|
cmp al,0
|
|
je near .notext
|
|
cmp al,2
|
|
je .darktext
|
|
inc edi
|
|
mov byte[GUItextcolor],44
|
|
cmp byte[GUIcrowpos],bl
|
|
je .nodrawshadow
|
|
push edi
|
|
push esi
|
|
add esi,289
|
|
call GUIOutputString
|
|
pop esi
|
|
pop edi
|
|
.nodrawshadow
|
|
mov byte[GUItextcolor],63
|
|
call GUIOutputString
|
|
inc edi
|
|
jmp .text
|
|
.darktext
|
|
inc edi
|
|
mov byte[GUItextcolor],42
|
|
cmp byte[GUIcrowpos],bl
|
|
je .nodrawshadow2
|
|
push edi
|
|
push esi
|
|
add esi,289
|
|
call GUIOutputString
|
|
pop esi
|
|
pop edi
|
|
.nodrawshadow2
|
|
mov byte[GUItextcolor],57
|
|
call GUIOutputString
|
|
inc edi
|
|
jmp .text
|
|
.notext
|
|
add esi,4*288
|
|
mov ecx,edx
|
|
.loop
|
|
mov byte[esi],45
|
|
mov byte[esi-289],40
|
|
mov byte[esi+289],42
|
|
inc esi
|
|
dec ecx
|
|
jnz .loop
|
|
add edi,14
|
|
.text
|
|
pop esi
|
|
pop ecx
|
|
pop ebx
|
|
add esi,10*288
|
|
inc ebx
|
|
dec ecx
|
|
jnz near .next
|
|
ret
|
|
|
|
InitGUI:
|
|
cmp byte[newengen],0
|
|
je .nong16b
|
|
cmp byte[cbitmode],0
|
|
je .nong16b
|
|
call GetScreen
|
|
.nong16b
|
|
%ifdef __MSDOS__
|
|
call DOSClearScreen
|
|
%endif
|
|
pushad
|
|
call Clear2xSaIBuffer
|
|
popad
|
|
call GUISetPal
|
|
call GUIBufferData
|
|
ret
|
|
|
|
GUISetPal:
|
|
cmp byte[cbitmode],1
|
|
je near GUISetPal16
|
|
; set palette
|
|
; Fixed Color Scale = 0 .. 31
|
|
mov dx,03C8h
|
|
mov al,0
|
|
out dx,al
|
|
inc dx
|
|
out dx,al
|
|
out dx,al
|
|
out dx,al
|
|
|
|
inc al
|
|
mov dx,03C8h
|
|
mov bl,1
|
|
out dx,al
|
|
inc dx
|
|
.loopd
|
|
mov al,bl
|
|
add al,[GUIRAdd]
|
|
out dx,al
|
|
mov al,bl
|
|
add al,[GUIGAdd]
|
|
out dx,al
|
|
mov al,bl
|
|
add al,[GUIBAdd]
|
|
out dx,al
|
|
inc bl
|
|
cmp bl,32
|
|
jne .loopd
|
|
; gray scale = 32 .. 63
|
|
mov dx,03C8h
|
|
mov bl,32
|
|
mov al,32
|
|
out dx,al
|
|
inc dx
|
|
.loopc
|
|
mov al,bl
|
|
add al,al
|
|
out dx,al
|
|
out dx,al
|
|
out dx,al
|
|
inc bl
|
|
cmp bl,64
|
|
jne .loopc
|
|
; shadow = 96 .. 127
|
|
inc al
|
|
mov al,96
|
|
mov dx,03C8h
|
|
mov bl,0
|
|
out dx,al
|
|
inc dx
|
|
.loope
|
|
mov al,bl
|
|
add al,[GUIRAdd]
|
|
mov ah,al
|
|
add al,al
|
|
add al,ah
|
|
shr al,2
|
|
out dx,al
|
|
mov al,bl
|
|
add al,[GUIGAdd]
|
|
mov ah,al
|
|
add al,al
|
|
add al,ah
|
|
shr al,2
|
|
out dx,al
|
|
mov al,bl
|
|
add al,[GUIBAdd]
|
|
mov ah,al
|
|
add al,al
|
|
add al,ah
|
|
shr al,2
|
|
out dx,al
|
|
inc bl
|
|
cmp bl,32
|
|
jne .loope
|
|
|
|
; 0,10,31
|
|
mov al,[GUITRAdd]
|
|
mov [TRVal],al
|
|
mov al,[GUITGAdd]
|
|
mov [TGVal],al
|
|
mov al,[GUITBAdd]
|
|
mov [TBVal],al
|
|
mov ax,[TRVal]
|
|
inc ax
|
|
shr ax,3
|
|
mov [TRVali],ax
|
|
shl ax,3
|
|
add [TRVal],ax
|
|
mov ax,[TGVal]
|
|
inc ax
|
|
shr ax,3
|
|
mov [TGVali],ax
|
|
shl ax,3
|
|
add [TGVal],ax
|
|
mov ax,[TBVal]
|
|
inc ax
|
|
shr ax,3
|
|
mov [TBVali],ax
|
|
shl ax,3
|
|
add [TBVal],ax
|
|
|
|
GUIPal 64,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 65,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 66,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 67,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 68,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 69,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 70,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 71,[TRVal],[TGVal],[TBVal]
|
|
|
|
GUIPal 72,40,0,20
|
|
GUIPal 73,34,0,21
|
|
|
|
GUIPal 80,0,10,28
|
|
GUIPal 81,0,10,27
|
|
GUIPal 82,0,10,25
|
|
GUIPal 83,0,09,24
|
|
GUIPal 84,0,08,22
|
|
GUIPal 85,0,07,20
|
|
GUIPal 86,0,06,18
|
|
GUIPal 87,0,05,15
|
|
GUIPal 88,20,0,10
|
|
GUIPal 89,17,0,10
|
|
|
|
; Orange Scale
|
|
mov dx,03C8h
|
|
mov al,128
|
|
mov cl,20
|
|
out dx,al
|
|
mov bh,0
|
|
mov ah,0
|
|
inc dx
|
|
.loopf
|
|
add bh,2
|
|
inc ah
|
|
mov al,63
|
|
out dx,al
|
|
mov al,bh
|
|
out dx,al
|
|
mov al,ah
|
|
out dx,al
|
|
dec cl
|
|
jnz .loopf
|
|
|
|
; Blue scale = 148 .. 167
|
|
mov al,[GUIWRAdd]
|
|
add al,al
|
|
mov [TRVal],al
|
|
mov al,[GUIWGAdd]
|
|
add al,al
|
|
mov [TGVal],al
|
|
mov al,[GUIWBAdd]
|
|
add al,al
|
|
mov [TBVal],al
|
|
mov byte[TRVali],4
|
|
mov byte[TGVali],4
|
|
mov byte[TBVali],4
|
|
|
|
GUIPal 152,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 151,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 150,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 149,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 148,[TRVal],[TGVal],[TBVal]
|
|
|
|
mov al,[GUIWRAdd]
|
|
add al,al
|
|
mov [TRVal],al
|
|
mov al,[GUIWGAdd]
|
|
add al,al
|
|
mov [TGVal],al
|
|
mov al,[GUIWBAdd]
|
|
add al,al
|
|
mov [TBVal],al
|
|
mov byte[TRVali],4
|
|
mov byte[TGVali],4
|
|
mov byte[TBVali],4
|
|
call DecPalVal
|
|
call DecPalVal
|
|
|
|
GUIPal 157,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 156,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 155,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 154,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 153,[TRVal],[TGVal],[TBVal]
|
|
|
|
mov al,[GUIWRAdd]
|
|
add al,al
|
|
mov [TRVal],al
|
|
mov al,[GUIWGAdd]
|
|
add al,al
|
|
mov [TGVal],al
|
|
mov al,[GUIWBAdd]
|
|
add al,al
|
|
mov [TBVal],al
|
|
mov byte[TRVali],4
|
|
mov byte[TGVali],4
|
|
mov byte[TBVali],4
|
|
call DecPalVal
|
|
call DecPalVal
|
|
call DecPalVal
|
|
call DecPalVal
|
|
|
|
GUIPal 162,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 161,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 160,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 159,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 158,[TRVal],[TGVal],[TBVal]
|
|
|
|
GUIPal 163,40,40,00
|
|
GUIPal 164,30,30,00
|
|
GUIPal 165,50,00,00
|
|
GUIPal 166,35,00,00
|
|
GUIPal 167,00,00,00
|
|
|
|
; Blue scale shadow
|
|
mov al,[GUIWRAdd]
|
|
mov [TRVal],al
|
|
mov al,[GUIWGAdd]
|
|
mov [TGVal],al
|
|
mov al,[GUIWBAdd]
|
|
mov [TBVal],al
|
|
mov byte[TRVali],2
|
|
mov byte[TGVali],2
|
|
mov byte[TBVali],2
|
|
|
|
GUIPal 172,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 171,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 170,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 169,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 168,[TRVal],[TGVal],[TBVal]
|
|
|
|
mov al,[GUIWRAdd]
|
|
mov [TRVal],al
|
|
mov al,[GUIWGAdd]
|
|
mov [TGVal],al
|
|
mov al,[GUIWBAdd]
|
|
mov [TBVal],al
|
|
mov byte[TRVali],2
|
|
mov byte[TGVali],2
|
|
mov byte[TBVali],2
|
|
call DecPalVal
|
|
call DecPalVal
|
|
|
|
GUIPal 177,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 176,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 175,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 174,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 173,[TRVal],[TGVal],[TBVal]
|
|
|
|
mov al,[GUIWRAdd]
|
|
mov [TRVal],al
|
|
mov al,[GUIWGAdd]
|
|
mov [TGVal],al
|
|
mov al,[GUIWBAdd]
|
|
mov [TBVal],al
|
|
mov byte[TRVali],2
|
|
mov byte[TGVali],2
|
|
mov byte[TBVali],2
|
|
call DecPalVal
|
|
call DecPalVal
|
|
call DecPalVal
|
|
call DecPalVal
|
|
|
|
GUIPal 182,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 181,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 180,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 179,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal 178,[TRVal],[TGVal],[TBVal]
|
|
|
|
GUIPal 183,20,20,00
|
|
GUIPal 184,15,15,00
|
|
GUIPal 185,25,00,00
|
|
GUIPal 186,17,00,00
|
|
GUIPal 187,00,00,00
|
|
|
|
; gray scale2 = 189 .. 220
|
|
mov dx,03C8h
|
|
mov al,189
|
|
mov bl,0
|
|
out dx,al
|
|
inc dx
|
|
.loopi
|
|
mov al,bl
|
|
add al,al
|
|
mov ah,bl
|
|
shr ah,1
|
|
sub al,ah
|
|
out dx,al
|
|
out dx,al
|
|
add al,ah
|
|
out dx,al
|
|
inc bl
|
|
cmp bl,64
|
|
jne .loopi
|
|
|
|
GUIPal 221,00,55,00
|
|
GUIPal 222,00,45,00
|
|
GUIPal 223,00,25,00
|
|
|
|
GUIPal 224,40,0,20
|
|
GUIPal 225,32,0,15
|
|
|
|
GUIPal 226,20,0,10
|
|
GUIPal 227,16,0,07
|
|
|
|
GUIPal 228,45,45,50
|
|
GUIPal 229,40,40,45
|
|
GUIPal 230,35,35,40
|
|
GUIPal 231,30,30,35
|
|
|
|
GUIPal 232,35,15,15
|
|
|
|
GUIPal 233,50,12,60
|
|
GUIPal 234,30,14,60
|
|
|
|
cmp byte[GUIPalConv],0
|
|
je .convert
|
|
ret
|
|
.convert
|
|
mov byte[GUIPalConv],1
|
|
|
|
; Convert Image data to Gray Scale
|
|
; Create Palette Table
|
|
call GUIconvpal
|
|
; Convert Current Image in Buffer
|
|
mov esi,[vidbuffer]
|
|
mov ecx,288*240
|
|
xor eax,eax
|
|
.next
|
|
mov al,[esi]
|
|
mov bl,[SubPalTable+eax]
|
|
mov [esi],bl
|
|
inc esi
|
|
dec ecx
|
|
jnz .next
|
|
ret
|
|
|
|
SECTION .bss
|
|
NEWSYM GUICPC, resw 256
|
|
SECTION .text
|
|
|
|
%macro GUIPal16b 4
|
|
mov ax,%2
|
|
shr ax,1
|
|
shl ax,11
|
|
mov bx,%3
|
|
shl bx,5
|
|
or ax,bx
|
|
mov bx,%4
|
|
shr bx,1
|
|
or ax,bx
|
|
mov [GUICPC+%1*2],ax
|
|
%endmacro
|
|
|
|
DecPalVal:
|
|
mov ax,[TRVali]
|
|
sub word[TRVal],ax
|
|
mov ax,[TGVali]
|
|
sub word[TGVal],ax
|
|
mov ax,[TBVali]
|
|
sub word[TBVal],ax
|
|
test word[TRVal],8000h
|
|
jz .notnegr
|
|
mov word[TRVal],0
|
|
.notnegr
|
|
test word[TGVal],8000h
|
|
jz .notnegg
|
|
mov word[TGVal],0
|
|
.notnegg
|
|
test word[TBVal],8000h
|
|
jz .notnegb
|
|
mov word[TBVal],0
|
|
.notnegb
|
|
ret
|
|
|
|
GUISetPal16:
|
|
; set palette
|
|
; Fixed Color Scale = 0 .. 31
|
|
mov word[GUICPC],0
|
|
inc al
|
|
xor ebx,ebx
|
|
mov bl,1
|
|
.loopd
|
|
xor ecx,ecx
|
|
mov cl,bl
|
|
add cl,[GUIRAdd]
|
|
shr cl,1
|
|
shl ecx,11
|
|
xor eax,eax
|
|
mov al,bl
|
|
add al,[GUIGAdd]
|
|
shl eax,5
|
|
or ecx,eax
|
|
xor eax,eax
|
|
mov al,bl
|
|
add al,[GUIBAdd]
|
|
shr eax,1
|
|
or ecx,eax
|
|
mov [GUICPC+ebx*2],cx
|
|
inc bl
|
|
cmp bl,32
|
|
jne .loopd
|
|
|
|
; gray scale = 32 .. 63
|
|
mov bl,32
|
|
mov al,32
|
|
.loopc
|
|
mov al,bl
|
|
add al,al
|
|
xor ecx,ecx
|
|
mov cl,al
|
|
shr ecx,1
|
|
shl ecx,11
|
|
xor edx,edx
|
|
mov dl,al
|
|
shl edx,5
|
|
or ecx,edx
|
|
xor edx,edx
|
|
mov dl,al
|
|
shr edx,1
|
|
or ecx,edx
|
|
mov [GUICPC+ebx*2],cx
|
|
inc bl
|
|
cmp bl,64
|
|
jne .loopc
|
|
|
|
; shadow = 96 .. 127
|
|
xor ebx,ebx
|
|
.loope
|
|
xor ecx,ecx
|
|
mov al,bl
|
|
add al,[GUIRAdd]
|
|
mov ah,al
|
|
add al,al
|
|
add al,ah
|
|
shr al,2
|
|
shr al,1
|
|
or cl,al
|
|
shl ecx,6
|
|
mov al,bl
|
|
add al,[GUIGAdd]
|
|
mov ah,al
|
|
add al,al
|
|
add al,ah
|
|
shr al,2
|
|
or cl,al
|
|
shl ecx,5
|
|
mov al,bl
|
|
add al,[GUIBAdd]
|
|
mov ah,al
|
|
add al,al
|
|
add al,ah
|
|
shr al,2
|
|
shr al,1
|
|
or cl,al
|
|
mov [GUICPC+ebx*2+96*2],cx
|
|
inc bl
|
|
cmp bl,32
|
|
jne .loope
|
|
|
|
; 0,10,31
|
|
mov al,[GUITRAdd]
|
|
mov [TRVal],al
|
|
mov al,[GUITGAdd]
|
|
mov [TGVal],al
|
|
mov al,[GUITBAdd]
|
|
mov [TBVal],al
|
|
mov ax,[TRVal]
|
|
inc ax
|
|
shr ax,3
|
|
mov [TRVali],ax
|
|
shl ax,3
|
|
add [TRVal],ax
|
|
mov ax,[TGVal]
|
|
inc ax
|
|
shr ax,3
|
|
mov [TGVali],ax
|
|
shl ax,3
|
|
add [TGVal],ax
|
|
mov ax,[TBVal]
|
|
inc ax
|
|
shr ax,3
|
|
mov [TBVali],ax
|
|
shl ax,3
|
|
add [TBVal],ax
|
|
|
|
GUIPal16b 64,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 65,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 66,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 67,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 68,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 69,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 70,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 71,[TRVal],[TGVal],[TBVal]
|
|
|
|
GUIPal16b 72,40,0,20
|
|
GUIPal16b 73,34,0,21
|
|
|
|
GUIPal16b 80,0,10,28
|
|
GUIPal16b 81,0,10,27
|
|
GUIPal16b 82,0,10,25
|
|
GUIPal16b 83,0,09,24
|
|
GUIPal16b 84,0,08,22
|
|
GUIPal16b 85,0,07,20
|
|
GUIPal16b 86,0,06,18
|
|
GUIPal16b 87,0,05,15
|
|
GUIPal16b 88,20,0,10
|
|
GUIPal16b 89,17,0,10
|
|
|
|
; Orange Scale
|
|
mov cl,20
|
|
mov bh,0
|
|
mov ah,0
|
|
inc dx
|
|
mov esi,128
|
|
.loopf
|
|
add bh,2
|
|
inc ah
|
|
mov edx,1Fh << 6
|
|
or dl,bh
|
|
shl edx,5
|
|
mov al,ah
|
|
shr al,1
|
|
or dl,al
|
|
mov [GUICPC+esi*2],dx
|
|
inc esi
|
|
dec cl
|
|
jnz .loopf
|
|
|
|
; Blue scale = 148 .. 167
|
|
mov al,[GUIWRAdd]
|
|
add al,al
|
|
mov [TRVal],al
|
|
mov al,[GUIWGAdd]
|
|
add al,al
|
|
mov [TGVal],al
|
|
mov al,[GUIWBAdd]
|
|
add al,al
|
|
mov [TBVal],al
|
|
mov byte[TRVali],4
|
|
mov byte[TGVali],4
|
|
mov byte[TBVali],4
|
|
|
|
GUIPal16b 152,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 151,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 150,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 149,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 148,[TRVal],[TGVal],[TBVal]
|
|
|
|
mov al,[GUIWRAdd]
|
|
add al,al
|
|
mov [TRVal],al
|
|
mov al,[GUIWGAdd]
|
|
add al,al
|
|
mov [TGVal],al
|
|
mov al,[GUIWBAdd]
|
|
add al,al
|
|
mov [TBVal],al
|
|
mov byte[TRVali],4
|
|
mov byte[TGVali],4
|
|
mov byte[TBVali],4
|
|
mov al,[TRVal]
|
|
shr al,2
|
|
sub [TRVal],al
|
|
mov al,[TGVal]
|
|
shr al,2
|
|
sub [TGVal],al
|
|
mov al,[TBVal]
|
|
shr al,2
|
|
sub [TBVal],al
|
|
|
|
GUIPal16b 157,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 156,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 155,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 154,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 153,[TRVal],[TGVal],[TBVal]
|
|
|
|
mov al,[GUIWRAdd]
|
|
add al,al
|
|
mov [TRVal],al
|
|
mov al,[GUIWGAdd]
|
|
add al,al
|
|
mov [TGVal],al
|
|
mov al,[GUIWBAdd]
|
|
add al,al
|
|
mov [TBVal],al
|
|
mov byte[TRVali],4
|
|
mov byte[TGVali],4
|
|
mov byte[TBVali],4
|
|
mov al,[TRVal]
|
|
shr al,1
|
|
sub [TRVal],al
|
|
mov al,[TGVal]
|
|
shr al,1
|
|
sub [TGVal],al
|
|
mov al,[TBVal]
|
|
shr al,1
|
|
sub [TBVal],al
|
|
|
|
GUIPal16b 162,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 161,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 160,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 159,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 158,[TRVal],[TGVal],[TBVal]
|
|
|
|
GUIPal16b 163,40,40,00
|
|
GUIPal16b 164,30,30,00
|
|
GUIPal16b 165,50,00,00
|
|
GUIPal16b 166,35,00,00
|
|
GUIPal16b 167,00,00,00
|
|
|
|
; Blue scale shadow
|
|
mov al,[GUIWRAdd]
|
|
mov [TRVal],al
|
|
mov al,[GUIWGAdd]
|
|
mov [TGVal],al
|
|
mov al,[GUIWBAdd]
|
|
mov [TBVal],al
|
|
mov byte[TRVali],2
|
|
mov byte[TGVali],2
|
|
mov byte[TBVali],2
|
|
|
|
GUIPal16b 172,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 171,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 170,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 169,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 168,[TRVal],[TGVal],[TBVal]
|
|
|
|
mov al,[GUIWRAdd]
|
|
mov [TRVal],al
|
|
mov al,[GUIWGAdd]
|
|
mov [TGVal],al
|
|
mov al,[GUIWBAdd]
|
|
mov [TBVal],al
|
|
mov byte[TRVali],2
|
|
mov byte[TGVali],2
|
|
mov byte[TBVali],2
|
|
call DecPalVal
|
|
call DecPalVal
|
|
|
|
GUIPal16b 177,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 176,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 175,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 174,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 173,[TRVal],[TGVal],[TBVal]
|
|
|
|
mov al,[GUIWRAdd]
|
|
mov [TRVal],al
|
|
mov al,[GUIWGAdd]
|
|
mov [TGVal],al
|
|
mov al,[GUIWBAdd]
|
|
mov [TBVal],al
|
|
mov byte[TRVali],2
|
|
mov byte[TGVali],2
|
|
mov byte[TBVali],2
|
|
call DecPalVal
|
|
call DecPalVal
|
|
call DecPalVal
|
|
call DecPalVal
|
|
|
|
GUIPal16b 182,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 181,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 180,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 179,[TRVal],[TGVal],[TBVal]
|
|
call DecPalVal
|
|
GUIPal16b 178,[TRVal],[TGVal],[TBVal]
|
|
|
|
GUIPal16b 183,20,20,00
|
|
GUIPal16b 184,15,15,00
|
|
GUIPal16b 185,25,00,00
|
|
GUIPal16b 186,17,00,00
|
|
GUIPal16b 187,00,00,00
|
|
|
|
; gray scale2 = 189 .. 220
|
|
mov bl,0
|
|
mov esi,189
|
|
.loopi
|
|
xor edx,edx
|
|
mov al,bl
|
|
add al,al
|
|
mov ah,bl
|
|
shr ah,1
|
|
sub al,ah
|
|
mov dl,al
|
|
shr dl,1
|
|
shl edx,6
|
|
or dl,al
|
|
shl edx,5
|
|
add al,ah
|
|
shr al,1
|
|
or dl,al
|
|
mov [GUICPC+esi*2],dx
|
|
inc esi
|
|
inc bl
|
|
cmp bl,64
|
|
jne .loopi
|
|
|
|
GUIPal16b 221,00,55,00
|
|
GUIPal16b 222,00,45,00
|
|
GUIPal16b 223,00,25,00
|
|
|
|
GUIPal16b 224,40,0,20
|
|
GUIPal16b 225,32,0,15
|
|
|
|
GUIPal16b 226,20,0,10
|
|
GUIPal16b 227,16,0,07
|
|
|
|
GUIPal16b 228,45,45,50
|
|
GUIPal16b 229,40,40,45
|
|
GUIPal16b 230,35,35,40
|
|
GUIPal16b 231,30,30,35
|
|
|
|
GUIPal16b 232,35,15,15
|
|
|
|
GUIPal16b 233,50,12,60
|
|
GUIPal16b 234,30,14,60
|
|
GUIPal16b 235,12,60,25
|
|
GUIPal16b 236,14,42,25
|
|
GUIPal16b 237,60,20,25
|
|
GUIPal16b 238,42,20,25
|
|
|
|
cmp byte[GUIPalConv],0
|
|
je .convert
|
|
ret
|
|
.convert
|
|
mov byte[GUIPalConv],1
|
|
mov esi,[vidbuffer]
|
|
mov edi,288*240
|
|
xor ebx,ebx
|
|
.next
|
|
mov ax,[esi+ebx*2]
|
|
mov ecx,eax
|
|
shr ecx,11
|
|
and ecx,1Fh
|
|
mov edx,eax
|
|
shr edx,6
|
|
and edx,1Fh
|
|
add ecx,edx
|
|
mov edx,eax
|
|
and edx,1Fh
|
|
add ecx,edx
|
|
shr ecx,1
|
|
mov al,[.multab+ecx]
|
|
mov [esi+ebx],al
|
|
inc ebx
|
|
dec edi
|
|
jnz .next
|
|
ret
|
|
|
|
SECTION .data
|
|
.multab db 1,1,1,2,2,3,4,4,5,6,6,7,8,8,9,10,10,11,12,12,13,14,14,15,16,16,
|
|
db 17,18,18,19,20,20,21,22,22,23,24,24,25,26,26,27,28,28,29,30,30,31
|
|
SECTION .text
|
|
|
|
GUIBufferData:
|
|
mov ecx,16384
|
|
cmp byte[cbitmode],1
|
|
jne near .16b
|
|
add ecx,16384
|
|
cmp word[PrevResoln],224
|
|
je .nobufb
|
|
add esi,288*8
|
|
.nobufb
|
|
.16b
|
|
; copy to spritetable
|
|
mov esi,[vidbuffer]
|
|
cmp word[PrevResoln],224
|
|
je .nobufa
|
|
add esi,288*8
|
|
.nobufa
|
|
mov edi,[spritetablea]
|
|
add edi,8*288
|
|
.loop
|
|
mov eax,[esi]
|
|
mov [edi],eax
|
|
add esi,4
|
|
add edi,4
|
|
dec ecx
|
|
jnz .loop
|
|
mov edi,sprlefttot
|
|
mov ecx,64*5
|
|
.a
|
|
mov dword[edi],0
|
|
add edi,4
|
|
dec ecx
|
|
jnz .a
|
|
ret
|
|
|
|
GUIUnBuffer:
|
|
mov ecx,16384
|
|
; copy from spritetable
|
|
mov edi,[vidbuffer]
|
|
mov esi,[spritetablea]
|
|
add esi,8*288
|
|
rep movsd
|
|
mov eax,01010101h
|
|
mov ecx,2*288
|
|
rep stosd
|
|
ret
|
|
|
|
GUIconvpal:
|
|
mov ax,[cgram]
|
|
mov [tempco0],ax
|
|
test byte[scaddtype],00100000b
|
|
jz near .noaddition
|
|
test byte[scaddtype],10000000b
|
|
jnz near .noaddition
|
|
mov cx,[cgram]
|
|
mov ax,cx
|
|
and ax,001Fh
|
|
add al,[coladdr]
|
|
cmp al,01Fh
|
|
jb .noadd
|
|
mov al,01Fh
|
|
.noadd
|
|
mov bx,ax
|
|
mov ax,cx
|
|
shr ax,5
|
|
and ax,001Fh
|
|
add al,[coladdg]
|
|
cmp al,01Fh
|
|
jb .noaddb
|
|
mov al,01Fh
|
|
.noaddb
|
|
shl ax,5
|
|
add bx,ax
|
|
mov ax,cx
|
|
shr ax,10
|
|
and ax,001Fh
|
|
add al,[coladdb]
|
|
cmp al,01Fh
|
|
jb .noaddc
|
|
mov al,01Fh
|
|
.noaddc
|
|
shl ax,10
|
|
add bx,ax
|
|
mov [cgram],bx
|
|
.noaddition
|
|
mov edi,cgram
|
|
mov ebx,prevpal
|
|
xor ah,ah
|
|
.loopa
|
|
mov cx,[edi]
|
|
push eax
|
|
push ebx
|
|
mov [ebx],cx
|
|
mov al,ah
|
|
mov ax,cx
|
|
and al,01Fh
|
|
mov bh,[maxbr]
|
|
mov bl,bh
|
|
mul bl
|
|
mov bl,15
|
|
div bl
|
|
mov [curgsval],al
|
|
mov ax,cx
|
|
shr ax,5
|
|
and al,01Fh
|
|
mov bl,bh
|
|
mul bl
|
|
mov bl,15
|
|
div bl
|
|
add [curgsval],al
|
|
mov ax,cx
|
|
shr ax,10
|
|
and al,01Fh
|
|
mov bl,bh
|
|
mul bl
|
|
mov bl,15
|
|
div bl
|
|
add [curgsval],al
|
|
pop ebx
|
|
pop eax
|
|
add edi,2
|
|
add ebx,2
|
|
push eax
|
|
push ebx
|
|
mov al,ah
|
|
and eax,0FFh
|
|
mov bl,[curgsval]
|
|
push eax
|
|
push ebx
|
|
mov al,bl
|
|
mov bl,3
|
|
xor ah,ah
|
|
div bl
|
|
pop ebx
|
|
mov bl,al
|
|
pop eax
|
|
cmp byte[MessageOn],0
|
|
je .nochange128
|
|
cmp al,128
|
|
jne .nochange128
|
|
mov bl,31
|
|
.nochange128
|
|
or bl,bl
|
|
jnz .noadder
|
|
inc bl
|
|
.noadder
|
|
mov [SubPalTable+eax],bl
|
|
pop ebx
|
|
pop eax
|
|
inc ah
|
|
jnz near .loopa
|
|
mov al,[maxbr]
|
|
mov [prevbright],al
|
|
mov ax,[tempco0]
|
|
mov [cgram],ax
|
|
ret
|
|
|
|
convertnum:
|
|
; process through each digit
|
|
push edx
|
|
push eax
|
|
push ebx
|
|
push cx
|
|
xor edx,edx ; clear high byte
|
|
xor cx,cx ; clear counter variable
|
|
mov ebx,10
|
|
.loopa
|
|
div ebx ; get quotent and remainder
|
|
push edx ; store number to stack
|
|
inc cl
|
|
xor edx,edx
|
|
test eax,0FFFFFFFFh
|
|
jnz .loopa
|
|
.loopb
|
|
pop edx ; get number back from stack
|
|
add dl,30h ; adjust to ASCII value
|
|
mov [esi],dl
|
|
inc esi
|
|
dec cl
|
|
jnz .loopb
|
|
pop cx
|
|
pop ebx
|
|
pop eax
|
|
pop edx
|
|
mov byte[esi],0
|
|
ret
|
|
|
|
; eax = value, ecx = # of bytes
|
|
converthex:
|
|
mov ebx,ecx
|
|
mov ecx,4
|
|
sub ecx,ebx
|
|
shl ecx,3
|
|
shl eax,cl
|
|
mov ecx,ebx
|
|
xor ebx,ebx
|
|
add ecx,ecx
|
|
.loopb
|
|
mov ebx,eax
|
|
and ebx,0F0000000h
|
|
shr ebx,28
|
|
mov dl,[.hexdat+ebx]
|
|
mov [esi],dl
|
|
inc esi
|
|
shl eax,4
|
|
dec ecx
|
|
jnz .loopb
|
|
mov byte[esi],0
|
|
ret
|
|
|
|
SECTION .data
|
|
.hexdat db '0123456789ABCDEF'
|
|
GUIMousePtr:
|
|
db 50,47,45,43,40,0 ,0 ,0
|
|
db 53,52,46,42,0 ,0 ,0 ,0
|
|
db 55,54,54,44,0 ,0 ,0 ,0
|
|
db 57,57,56,52,45,0 ,0 ,0
|
|
db 59,0 ,0 ,55,50,45,0 ,0
|
|
db 0 ,0 ,0 ,0 ,55,50,45,0
|
|
db 0 ,0 ,0 ,0 ,0 ,55,50,47
|
|
db 0 ,0 ,0 ,0 ,0 ,0 ,52,0
|
|
|
|
NEWSYM GUIFontData
|
|
; bitmap 5x5 font; char - offset for ASCII2Font
|
|
db 0,0,0,0,0; empty space 0x0
|
|
db 01110000b,10011000b,10101000b,11001000b,01110000b; 0 0x01
|
|
db 00100000b,01100000b,00100000b,00100000b,01110000b; 1 0x02
|
|
db 01110000b,10001000b,00110000b,01000000b,11111000b; 2 0x03
|
|
db 01110000b,10001000b,00110000b,10001000b,01110000b; 3 0x04
|
|
db 01010000b,10010000b,11111000b,00010000b,00010000b; 4 0x05
|
|
db 11111000b,10000000b,11110000b,00001000b,11110000b; 5 0x06
|
|
db 01110000b,10000000b,11110000b,10001000b,01110000b; 6 0x07
|
|
db 11111000b,00001000b,00010000b,00010000b,00010000b; 7 0x08
|
|
db 01110000b,10001000b,01110000b,10001000b,01110000b; 8 0x09
|
|
db 01110000b,10001000b,01111000b,00001000b,01110000b; 9 0x0A
|
|
db 01110000b,10001000b,11111000b,10001000b,10001000b; A 0x0B
|
|
db 11110000b,10001000b,11110000b,10001000b,11110000b; B 0x0C
|
|
db 01110000b,10001000b,10000000b,10001000b,01110000b; C 0x0D
|
|
db 11110000b,10001000b,10001000b,10001000b,11110000b; D 0x0E
|
|
db 11111000b,10000000b,11110000b,10000000b,11111000b; E 0x0F
|
|
db 11111000b,10000000b,11110000b,10000000b,10000000b; F 0x10
|
|
db 01111000b,10000000b,10011000b,10001000b,01110000b; G 0x11
|
|
db 10001000b,10001000b,11111000b,10001000b,10001000b; H 0x12
|
|
db 11111000b,00100000b,00100000b,00100000b,11111000b; I 0x13
|
|
db 01111000b,00010000b,00010000b,10010000b,01100000b; J 0x14
|
|
db 10010000b,10100000b,11100000b,10010000b,10001000b; K 0x15
|
|
db 10000000b,10000000b,10000000b,10000000b,11111000b; L 0x16
|
|
db 11011000b,10101000b,10101000b,10101000b,10001000b; M 0x17
|
|
db 11001000b,10101000b,10101000b,10101000b,10011000b; N 0x18
|
|
db 01110000b,10001000b,10001000b,10001000b,01110000b; O 0x19
|
|
db 11110000b,10001000b,11110000b,10000000b,10000000b; P 0x1A
|
|
db 01110000b,10001000b,10101000b,10010000b,01101000b; Q 0x1B
|
|
db 11110000b,10001000b,11110000b,10010000b,10001000b; R 0x1C
|
|
db 01111000b,10000000b,01110000b,00001000b,11110000b; S 0x1D
|
|
db 11111000b,00100000b,00100000b,00100000b,00100000b; T 0x1E
|
|
db 10001000b,10001000b,10001000b,10001000b,01110000b; U 0x1F
|
|
db 10001000b,10001000b,01010000b,01010000b,00100000b; V 0x20
|
|
db 10001000b,10101000b,10101000b,10101000b,01010000b; W 0x21
|
|
db 10001000b,01010000b,00100000b,01010000b,10001000b; X 0x22
|
|
db 10001000b,01010000b,00100000b,00100000b,00100000b; Y 0x23
|
|
db 11111000b,00010000b,00100000b,01000000b,11111000b; Z 0x24
|
|
db 00000000b,00000000b,11111000b,00000000b,00000000b; - 0x25
|
|
db 00000000b,00000000b,00000000b,00000000b,11111000b; _ 0x26
|
|
db 01101000b,10010000b,00000000b,00000000b,00000000b; ~ 0x27
|
|
db 00000000b,00000000b,00000000b,00000000b,00100000b; . 0x28
|
|
db 00001000b,00010000b,00100000b,01000000b,10000000b; / 0x29
|
|
db 00010000b,00100000b,01000000b,00100000b,00010000b; < 0x2A
|
|
db 01000000b,00100000b,00010000b,00100000b,01000000b; > 0x2B
|
|
db 01110000b,01000000b,01000000b,01000000b,01110000b; [ 0x2C
|
|
db 01110000b,00010000b,00010000b,00010000b,01110000b; ] 0x2D
|
|
db 00000000b,00100000b,00000000b,00100000b,00000000b; : 0x2E
|
|
db 01100000b,10011000b,01110000b,10011000b,01101000b; & 0x2F
|
|
db 00100000b,00100000b,10101000b,01110000b,00100000b; arrow down 0x30
|
|
db 01010000b,11111000b,01010000b,11111000b,01010000b; # 0x31
|
|
db 00000000b,11111000b,00000000b,11111000b,00000000b; = 0x32
|
|
db 01001000b,10010000b,00000000b,00000000b,00000000b; " 0x33
|
|
db 10000000b,01000000b,00100000b,00010000b,00001000b; \ 0x34
|
|
db 10101000b,01110000b,11111000b,01110000b,10101000b; * 0x35
|
|
db 01110000b,10001000b,00110000b,00000000b,00100000b; ? 0x36
|
|
db 10001000b,00010000b,00100000b,01000000b,10001000b; % 0x37
|
|
db 00100000b,00100000b,11111000b,00100000b,00100000b; + 0x38
|
|
db 00000000b,00000000b,00000000b,00100000b,01000000b; , 0x39
|
|
db 00110000b,01000000b,01000000b,01000000b,00110000b; ( 0x3A
|
|
db 01100000b,00010000b,00010000b,00010000b,01100000b; ) 0x3B
|
|
db 01110000b,10011000b,10111000b,10000000b,01110000b; @ 0x3C
|
|
db 00100000b,01000000b,00000000b,00000000b,00000000b; ' 0x3D
|
|
db 00100000b,00100000b,00100000b,00000000b,00100000b; ! 0x3E
|
|
db 01111000b,10100000b,01110000b,00101000b,11110000b; $ 0x3F
|
|
db 00000000b,00100000b,00000000b,00100000b,01000000b; ; 0x40
|
|
db 01000000b,00100000b,00000000b,00000000b,00000000b; ` 0x41
|
|
db 00100000b,01010000b,00000000b,00000000b,00000000b; ^ 0x42
|
|
db 00110000b,01000000b,11000000b,01000000b,00110000b; { 0x43
|
|
db 01100000b,00010000b,00011000b,00010000b,01100000b; } 0x44
|
|
db 00100000b,00100000b,01110000b,01110000b,11111000b; up 0x45
|
|
db 11111000b,01110000b,01110000b,00100000b,00100000b; down 0x46
|
|
db 00001000b,00111000b,11111000b,00111000b,00001000b; left 0x47
|
|
db 10000000b,11100000b,11111000b,11100000b,10000000b; right 0x48
|
|
db 00100000b,01100000b,11111000b,01100000b,00100000b; arrow left 0x49
|
|
db 00111000b,00100000b,00110000b,00001000b,10110000b; .5 0x4A
|
|
db 11111100b,10000100b,11111100b,00000000b,00000000b; maximize (Win) 0x4B
|
|
db 00000000b,11111100b,00000000b,00000000b,00000000b; minimize (Win) 0x4C
|
|
db 11111000b,10001000b,10001000b,10001000b,11111000b; maximize (SDL) 0x4D
|
|
db 00000000b,00000000b,00100000b,01010000b,00100000b; shw fullstop 0x4E
|
|
db 01110000b,01000000b,01000000b,01000000b,00000000b; shw left bracket 0x4F
|
|
db 00000000b,00010000b,00010000b,00010000b,01110000b; shw right bracket 0x50
|
|
db 00000000b,00000000b,00000000b,01000000b,00100000b; shw comma 0x51
|
|
db 00000000b,00100000b,01110000b,00100000b,00000000b; shw mid-dot 0x52
|
|
db 11111000b,00001000b,11110000b,00100000b,11000000b; shw wo 0x53
|
|
db 00000000b,11111000b,01010000b,01100000b,01000000b; shw mini a 0x54
|
|
db 00000000b,00010000b,00100000b,11100000b,00100000b; shw mini i 0x55
|
|
db 00000000b,00100000b,11111000b,10001000b,00110000b; shw mini u 0x56
|
|
db 00000000b,00000000b,11111000b,00100000b,11111000b; shw mini e 0x57
|
|
db 00000000b,00010000b,11111000b,00110000b,11010000b; shw mini o 0x58
|
|
db 00000000b,01000000b,11111000b,01010000b,01000000b; shw mini ya 0x59
|
|
db 00000000b,00000000b,11110000b,00010000b,11111000b; shw mini yu 0x5A
|
|
db 00000000b,11111000b,00001000b,01111000b,11111000b; shw mini yo 0x5B
|
|
db 00000000b,10101000b,10101000b,00010000b,01100000b; shw mini tsu 0x5C
|
|
db 00000000b,10000000b,01111000b,00000000b,00000000b; shw prolong 0x5D
|
|
db 11111000b,00101000b,00110000b,00100000b,11000000b; shw a 0x5E
|
|
db 00001000b,00110000b,11100000b,00100000b,00100000b; shw i 0x5F
|
|
db 00100000b,11111000b,10001000b,00010000b,01100000b; shw u 0x60
|
|
db 11111000b,00100000b,00100000b,00100000b,11111000b; shw e 0x61
|
|
db 00010000b,11111000b,00110000b,01010000b,10010000b; shw o 0x62
|
|
db 01000000b,11111000b,01001000b,01001000b,10011000b; shw ka 0x63
|
|
db 00100000b,11111000b,00100000b,11111000b,00100000b; shw ki 0x64
|
|
db 01000000b,01111000b,10001000b,00010000b,01100000b; shw ku 0x65
|
|
db 01000000b,01111000b,10010000b,00010000b,01100000b; shw ke 0x66 ^^
|
|
db 11111000b,00001000b,00001000b,00001000b,11111000b; shw ko 0x67
|
|
db 01010000b,11111000b,01010000b,00010000b,01100000b; shw sa 0x68
|
|
db 01000000b,10101000b,01001000b,00010000b,11100000b; shw shi 0x69
|
|
db 11111000b,00001000b,00010000b,00110000b,11001000b; shw su 0x6A
|
|
db 01000000b,11111000b,01010000b,01000000b,00111000b; shw se 0x6B
|
|
db 10001000b,01001000b,00001000b,00010000b,01100000b; shw so 0x6C
|
|
db 01000000b,01111000b,11001000b,00110000b,01100000b; shw ta 0x6D
|
|
db 11111000b,00100000b,11111000b,00100000b,01000000b; shw chi 0x6E
|
|
db 10101000b,10101000b,00001000b,00010000b,01100000b; shw tsu 0x6F
|
|
db 11111000b,00000000b,11111000b,00100000b,11000000b; shw te 0x70
|
|
db 01000000b,01000000b,01100000b,01010000b,01000000b; shw to 0x71
|
|
db 00100000b,11111000b,00100000b,00100000b,01000000b; shw na 0x72
|
|
db 11110000b,00000000b,00000000b,00000000b,11111000b; shw ni 0x73
|
|
db 11111000b,00001000b,00101000b,00010000b,01101000b; shw nu 0x74
|
|
db 00100000b,11111000b,00001000b,01110000b,10101000b; shw ne 0x75
|
|
db 00001000b,00001000b,00001000b,00010000b,01100000b; shw no 0x76
|
|
db 01010000b,01010000b,01010000b,10001000b,10001000b; shw ha 0x77
|
|
db 10000000b,10011000b,11100000b,10000000b,01111000b; shw hi 0x78
|
|
db 11111000b,00001000b,00001000b,00010000b,01100000b; shw hu 0x79
|
|
db 01000000b,10100000b,10010000b,00001000b,00000000b; shw he 0x7A
|
|
db 00100000b,11111000b,01110000b,10101000b,00100000b; shw ho 0x7B
|
|
db 11111000b,00001000b,10010000b,01100000b,00100000b; shw ma 0x7C
|
|
db 11111000b,00000000b,11111000b,00000000b,11111000b; shw mi 0x7D
|
|
db 00100000b,01000000b,01000000b,10010000b,11111000b; shw mu 0x7E
|
|
db 00001000b,01001000b,00110000b,00110000b,11001000b; shw me 0x7F
|
|
db 11111000b,00100000b,11111000b,00100000b,00111000b; shw mo 0x80
|
|
db 01000000b,11111100b,01001000b,00100000b,00100000b; shw ya 0x81
|
|
db 11110000b,00010000b,00010000b,00010000b,11111000b; shw yu 0x82
|
|
db 11111000b,00001000b,11111000b,00001000b,11111000b; shw yo 0x83
|
|
db 11111000b,00000000b,11111000b,00010000b,01100000b; shw ra 0x84
|
|
db 10001000b,10001000b,10001000b,00010000b,01100000b; shw ri 0x85
|
|
db 01100000b,01100000b,01101000b,01101000b,10110000b; shw ru 0x86
|
|
db 10000000b,10000000b,10001000b,10001000b,11110000b; shw re 0x87
|
|
db 11111000b,10001000b,10001000b,10001000b,11111000b; shw ro 0x88
|
|
db 11111000b,10001000b,00001000b,00010000b,01100000b; shw wa 0x89
|
|
db 10000000b,01001000b,00001000b,00010000b,11100000b; shw n 0x8A
|
|
db 10100000b,10100000b,00000000b,00000000b,00000000b; shw voiced 0x8B
|
|
db 01000000b,10100000b,01000000b,00000000b,00000000b; shw halfvoiced 0x8C
|
|
|
|
NEWSYM GUIFontData1, times 705 db 0
|
|
|
|
; 189 .. 220
|
|
GUIIconDataClose:
|
|
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
|
|
db 0 ,216,216,216,216,216,216,216,0 ,0
|
|
db 214,212,202,212,212,212,202,212,210,0
|
|
db 214,212,212,200,212,200,212,212,210,202
|
|
db 214,212,212,212,198,212,212,212,210,202
|
|
db 214,212,212,196,212,196,212,212,210,200
|
|
db 214,212,194,212,212,212,194,212,210,200
|
|
db 0 ,208,208,208,208,208,208,208,198,198
|
|
db 0 ,0 ,198,198,198,198,198,198,198,0
|
|
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
|
|
|
|
GUIIconDataButtonHole:
|
|
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
|
|
db 0 ,0 ,0 ,207,205,207,0 ,0 ,0 ,0
|
|
db 0 ,0 ,207,203,202,203,207,0 ,0 ,0
|
|
db 0 ,207,203,200,198,200,203,207,0 ,0
|
|
db 0 ,207,202,198,197,198,202,207,0 ,0
|
|
db 0 ,207,203,200,198,200,203,207,0 ,0
|
|
db 0 ,0 ,207,203,202,203,207,0 ,0 ,0
|
|
db 0 ,0 ,0 ,207,205,207,0 ,0 ,0 ,0
|
|
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
|
|
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
|
|
|
|
GUIIconDataButtonFill:
|
|
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
|
|
db 0 ,0 ,0 ,207,209,207,0 ,0 ,0 ,0
|
|
db 0 ,0 ,207,211,212,211,207,0 ,0 ,0
|
|
db 0 ,207,211,214,216,214,211,207,0 ,0
|
|
db 0 ,207,212,216,217,216,212,207,0 ,0
|
|
db 0 ,207,211,214,216,214,211,207,0 ,0
|
|
db 0 ,0 ,207,211,212,211,207,0 ,0 ,0
|
|
db 0 ,0 ,0 ,207,209,207,0 ,0 ,0 ,0
|
|
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
|
|
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
|
|
|
|
GUIIconDataSlideBar:
|
|
db 0 ,0 ,0 ,0 ,216,0 ,0 ,0 ,0 ,0
|
|
db 0 ,0 ,0 ,212,216,220,0 ,0 ,0 ,0
|
|
db 0 ,0 ,0 ,212,216,220,202,0 ,0 ,0
|
|
db 0 ,0 ,212,212,216,218,220,0 ,0 ,0
|
|
db 0 ,0 ,212,214,216,218,220,202,0 ,0
|
|
db 0 ,0 ,212,214,216,218,220,202,0 ,0
|
|
db 0 ,0 ,0 ,212,216,220,202,202,0 ,0
|
|
db 0 ,0 ,0 ,212,216,220,202,0 ,0 ,0
|
|
db 0 ,0 ,0 ,0 ,216,202,202,0 ,0 ,0
|
|
db 0 ,0 ,0 ,0 ,0 ,202,0 ,0 ,0 ,0
|
|
|
|
GUIIconDataCheckBoxUC:
|
|
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
|
|
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
|
|
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
|
|
db 0 ,220,219,218,217,216,215,0 ,0 ,0
|
|
db 0 ,219,218,217,216,215,214,202,0 ,0
|
|
db 0 ,218,217,216,215,214,213,202,0 ,0
|
|
db 0 ,217,216,215,214,213,212,202,0 ,0
|
|
db 0 ,216,215,214,213,212,211,202,0 ,0
|
|
db 0 ,215,214,213,212,211,210,202,0 ,0
|
|
db 0 ,0 ,202,202,202,202,202,202,0 ,0
|
|
|
|
GUIIconDataCheckBoxC:
|
|
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,165,0
|
|
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,165,0 ,0
|
|
db 0 ,0 ,0 ,0 ,0 ,0 ,165,0 ,0 ,0
|
|
db 0 ,220,219,218,217,165,215,0 ,0 ,0
|
|
db 0 ,165,165,217,165,165,214,202,0 ,0
|
|
db 0 ,218,165,216,165,214,213,202,0 ,0
|
|
db 0 ,217,165,165,165,213,212,202,0 ,0
|
|
db 0 ,216,215,165,213,212,211,202,0 ,0
|
|
db 0 ,215,214,165,212,211,210,202,0 ,0
|
|
db 0 ,0 ,202,202,202,202,202,202,0 ,0
|
|
|
|
GUIIconDataUpArrow:
|
|
db 201,209,209,209,209,209,209,200,0 ,0
|
|
db 207,205,205,202,203,205,205,203,0 ,0
|
|
db 207,205,201,202,203,202,205,203,0 ,0
|
|
db 207,200,205,202,203,205,201,203,0 ,0
|
|
db 207,205,205,202,203,205,205,203,0 ,0
|
|
db 207,205,205,202,203,205,205,203,0 ,0
|
|
db 207,205,205,202,203,205,205,203,0 ,0
|
|
db 199,201,201,201,201,201,201,198,0 ,0
|
|
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
|
|
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
|
|
|
|
GUIIconDataDownArrow:
|
|
db 201,209,209,209,209,209,209,200,0 ,0
|
|
db 207,205,205,202,203,205,205,203,0 ,0
|
|
db 207,205,205,202,203,205,205,203,0 ,0
|
|
db 207,205,205,202,203,205,205,203,0 ,0
|
|
db 207,200,205,202,203,205,201,203,0 ,0
|
|
db 207,205,201,202,203,202,205,203,0 ,0
|
|
db 207,205,205,202,203,205,205,203,0 ,0
|
|
db 199,201,201,201,201,201,201,198,0 ,0
|
|
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
|
|
db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0
|
|
|
|
NEWSYM SnowData
|
|
dw 161,251,115,211,249,87,128,101,232,176,51,180,108,193,224,112,254,159,102,238
|
|
dw 223,123,218,42,173,160,143,170,64,1,174,29,34,187,194,199,40,89,232,32
|
|
dw 7,195,141,67,216,48,234,1,243,116,164,182,146,136,66,70,36,43,98,208
|
|
dw 63,240,216,253,147,36,33,253,98,80,228,156,73,82,85,1,97,72,187,239
|
|
dw 18,196,127,182,22,22,101,25,124,145,240,213,186,22,7,161,30,98,90,197
|
|
dw 22,205,32,150,59,133,49,140,10,128,142,185,176,142,220,195,100,102,105,194
|
|
dw 43,139,184,153,1,95,176,169,192,201,233,243,73,65,188,14,194,39,251,140
|
|
dw 239,181,142,160,242,248,82,49,9,157,233,162,254,121,112,6,118,24,56,121
|
|
dw 74,209,1,223,145,6,75,73,18,168,194,168,58,39,222,170,214,75,45,218
|
|
dw 39,197,242,98,22,90,255,5,144,244,252,55,98,18,135,101,27,85,215,207
|
|
dw 183,28,201,142,45,122,145,159,41,243,109,29,117,203,7,234,231,214,131,133
|
|
dw 217,8,74,207,130,77,21,229,167,78,218,109,142,58,134,238,29,182,178,14
|
|
dw 144,129,196,219,60,128,30,105,57,53,76,122,242,208,101,241,246,99,248,67
|
|
dw 137,244,70,51,202,94,164,125,115,72,61,72,129,169,155,122,91,154,160,83
|
|
dw 41,102,223,218,140,40,132,16,223,92,50,230,168,47,126,117,242,136,1,245
|
|
dw 171,0,36,98,73,69,14,229,66,177,108,92,39,250,243,161,111,85,211,99
|
|
dw 52,98,121,188,128,201,90,205,223,92,177,19,87,18,75,54,6,81,235,137
|
|
dw 247,66,211,129,247,39,119,206,116,250,113,231,190,196,53,51,34,114,39,22
|
|
dw 192,33,249,151,26,22,139,97,171,238,182,88,22,176,157,255,178,199,138,98
|
|
dw 140,36,112,90,25,245,134,64,48,190,165,113,24,195,84,70,175,9,179,69
|
|
dw 13,26,167,237,163,159,185,128,109,114,86,74,188,103,141,48,188,203,205,191
|
|
dw 215,193,224,4,153,36,108,3,172,235,56,251,211,115,173,216,240,33,78,150
|
|
dw 133,64,51,103,56,26,165,222,70,148,115,119,246,229,181,63,109,49,228,108
|
|
dw 126,10,170,48,87,42,193,24,28,255,176,176,209,181,97,93,61,241,201,137
|
|
dw 129,97,24,159,168,215,61,113,104,143,168,7,196,216,149,239,110,65,75,143
|
|
dw 238,0,37,19,8,56,65,234,228,72,42,5,226,95,243,51,55,231,114,90
|
|
dw 160,141,171,108,218,252,154,64,175,142,214,211,180,129,217,118,33,130,213,2
|
|
dw 73,145,93,21,162,141,97,225,112,253,49,43,113,208,131,104,31,51,192,37
|
|
dw 117,186,16,45,61,114,220,6,89,163,197,203,142,80,89,115,190,190,228,15
|
|
dw 166,145,59,139,120,79,104,252,246,73,113,144,224,65,204,155,221,85,31,99
|
|
dw 48,253,94,159,215,31,123,204,248,153,31,210,174,178,54,146,152,88,56,92
|
|
dw 197,35,124,104,211,118,1,207,108,68,123,161,107,69,143,13,79,170,130,193
|
|
dw 214,153,219,247,227,2,170,208,248,139,118,241,247,183,18,135,246,126,201,46
|
|
dw 70,234,171,72,18,135,236,216,32,178,148,231,161,15,6,254,34,181,5,71
|
|
dw 2,219,71,87,252,16,202,190,180,83,99,209,75,134,78,84,114,32,171,246
|
|
dw 125,11,57,200,102,29,176,26,205,151,152,108,100,146,117,95,71,77,158,207
|
|
dw 60,192,50,135,223,237,231,53,27,195,170,146,155,160,92,224,247,187,14,50
|
|
dw 203,5,153,42,17,75,109,14,78,160,236,114,131,105,189,209,233,135,221,207
|
|
dw 226,119,104,10,178,107,77,160,233,179,120,227,133,241,32,223,63,247,66,157
|
|
dw 140,81,118,81,63,193,173,228,214,78,124,123,222,149,9,242,0,128,194,110
|
|
|
|
NEWSYM SnowVelDist
|
|
db 57,92,100,19,100,184,238,225,55,240,255,221,215,105,226,153,164,41,22,93
|
|
db 176,203,155,199,244,52,233,219,110,227,229,227,152,240,83,248,226,31,163,22
|
|
db 28,156,18,10,248,67,123,167,25,138,90,10,79,107,208,229,248,233,185,10
|
|
db 167,21,19,178,132,154,81,70,20,71,95,147,72,27,91,189,13,189,102,84
|
|
db 195,123,251,93,68,36,178,59,107,99,104,191,76,110,44,206,123,46,98,112
|
|
db 26,50,1,35,150,17,242,208,69,23,202,197,59,80,136,124,40,89,11,40
|
|
db 1,136,90,72,198,83,2,174,174,4,28,205,135,35,194,54,22,40,4,132
|
|
db 191,88,163,66,204,230,35,111,9,177,254,174,163,68,5,88,111,235,58,236
|
|
db 4,248,172,154,101,164,43,223,10,13,210,125,146,73,192,57,117,152,128,36
|
|
db 106,21,253,113,110,133,244,4,150,32,76,71,22,106,210,244,46,128,27,215
|
|
db 231,112,177,196,198,120,196,57,234,74,235,108,64,181,209,188,177,63,197,200
|
|
db 126,164,136,163,48,62,225,223,212,201,195,121,90,7,10,196,88,53,39,249
|
|
db 147,98,65,253,246,3,152,125,242,105,44,129,94,232,13,4,86,220,194,67
|
|
db 186,210,171,197,64,138,89,78,58,150,52,79,138,201,244,111,106,181,192,69
|
|
db 234,253,239,113,98,37,209,151,60,47,241,235,185,52,173,94,172,182,47,150
|
|
db 80,118,10,58,161,237,10,64,238,198,14,74,132,250,234,63,169,86,158,170
|
|
db 76,168,124,133,28,203,246,140,228,77,50,53,115,113,157,218,90,192,28,209
|
|
db 72,117,156,101,226,99,11,245,69,59,17,175,164,59,8,166,163,185,10,60
|
|
db 100,19,26,38,114,232,180,115,238,184,88,103,178,67,212,21,87,64,85,1
|
|
db 62,87,155,62,21,96,205,195,131,97,191,252,218,209,179,201,12,2,234,110
|
|
db 162,14,145,170,156,105,85,132,132,60,239,14,80,129,225,144,149,244,188,8
|
|
db 13,168,181,168,30,142,24,110,26,172,231,182,50,214,66,193,100,45,132,144
|
|
db 205,190,16,133,45,250,83,183,140,229,117,226,68,59,163,96,235,227,25,155
|
|
db 209,105,41,214,30,107,2,85,180,23,241,39,113,63,75,44,107,142,93,29
|
|
db 62,240,235,152,147,52,54,146,109,112,139,162,238,198,201,8,141,115,112,106
|
|
db 4,99,25,155,111,161,114,253,75,100,28,59,101,150,2,122,228,6,12,59
|
|
db 249,181,67,136,227,227,199,46,75,203,50,25,50,61,62,22,238,124,218,134
|
|
db 243,21,243,222,94,138,161,234,133,23,138,45,4,226,154,227,8,84,105,126
|
|
db 200,127,240,144,124,197,102,144,53,29,94,231,108,175,136,37,44,183,178,95
|
|
db 41,196,214,12,42,221,106,225,151,32,53,130,24,211,88,14,135,18,90,219
|
|
db 177,129,90,217,162,181,199,133,116,56,36,100,230,91,220,83,41,65,20,64
|
|
db 177,197,249,24,242,62,26,234,92,44,167,153,243,94,179,163,103,29,220,199
|
|
db 128,94,236,152,53,32,77,78,228,89,124,85,87,50,197,116,179,105,236,139
|
|
db 102,17,159,66,176,27,205,36,113,80,60,6,61,174,254,174,246,72,154,31
|
|
db 97,40,10,8,114,203,238,26,89,51,134,110,118,176,87,32,192,210,146,207
|
|
db 88,45,156,179,61,224,87,107,107,1,252,187,203,100,169,211,205,105,12,231
|
|
db 137,176,166,37,192,241,169,84,32,85,112,168,154,7,247,146,183,225,246,173
|
|
db 57,103,110,236,113,118,203,200,22,87,251,7,138,37,12,84,221,171,51,209
|
|
db 242,37,89,73,151,162,139,189,131,209,221,96,107,144,175,79,199,123,98,138
|
|
db 226,86,221,254,72,14,126,180,200,171,85,94,120,124,196,225,150,57,219,158
|