📄 gui.asm
字号:
mov byte[NextLineCache],0
mov byte[DSPMem+08h],0
mov byte[DSPMem+18h],0
mov byte[DSPMem+28h],0
mov byte[DSPMem+38h],0
mov byte[DSPMem+48h],0
mov byte[DSPMem+58h],0
mov byte[DSPMem+68h],0
mov byte[DSPMem+78h],0
mov byte[netdelayed],0
mov dword[cnetptrhead],0
mov dword[cnetptrtail],0
mov dword[prevp1net],0
mov dword[prevp2net],0
mov dword[prevp3net],0
mov dword[prevp4net],0
mov dword[prevp5net],0
mov byte[BackState],1
mov dword[CBackupPos],0
mov dword[PBackupPos],0
mov dword[PPValue],0
mov dword[DPValue],0
mov byte[CurRecv],0
mov dword[NetQuitter],0
mov dword[LatencyV],0
mov dword[LatencyV+4],0
mov dword[LatencyV+8],0
mov dword[LatencyV+12],0
mov dword[LatencyRecvPtr],0
mov dword[LatencySendPtr],0
mov eax,cnetplaybuf
mov ecx,512
.loop20
mov byte[eax],0
inc eax
loop .loop20
mov al,[Latency]
mov [LatencyLeft],al
mov byte[NetSwap],0
mov dword[CBackupPos],0
mov dword[PBackupPos],0
mov ebx,[romdata]
mov ecx,[NumofBanks]
shl ecx,15
xor eax,eax
or ecx,ecx
jz .nocsumloop
.csumloop
add al,[ebx]
adc ah,0
inc ebx
loop .csumloop
.nocsumloop
mov [CheckSumVal],eax
mov ebx,eax
; sync with modem
call PreparePacket
mov al,30
call RemoteSendChar
mov al,230
call RemoteSendChar
mov al,[CheckSumVal]
call RemoteSendChar
mov al,[CheckSumVal+1]
call RemoteSendChar
call SendPacket
.nocharb
pushad
call JoyRead
popad
; cmp byte[pressed+1],1
; je near .faileda
call RemoteGetChar
cmp dh,0
je .nocharb
cmp dl,230
jne .nocharb
.nocharb2
call RemoteGetChar
cmp dh,0
je .nocharb2
cmp dl,[CheckSumVal]
jne .wrongcs
.nocharb3
call RemoteGetChar
cmp dh,0
je .nocharb3
cmp dl,[CheckSumVal+1]
je .okaychat
.wrongcs
mov esi,WrongCheckSum
call WritetochatBuffer
jmp StartGUI
.okaychat
call PreparePacket
mov al,229
call RemoteSendChar
call SendPacket
.nocharb5
pushad
call JoyRead
popad
; cmp byte[pressed+1],1
; je near .failedb
call RemoteGetChar
cmp dh,0
je .nocharb5
cmp dl,229
jne .nocharb5
.nostat20b
call EnableSUDPPacket
mov byte[ChatProgress],0
mov dword[RecvProgress],0
; get LoadDrive/LoadDir
mov ebx,LoadDir
mov edx,LoadDrive
call Get_Dir
; change dir to InitDrive/InitDir
mov dl,[InitDrive]
mov ebx,InitDir
; save config
call Change_Dir
call createnewcfg
call GUISaveVars
; change dir to SRAMDrive/SRAMDir
mov dl,[SRAMDrive]
mov ebx,SRAMDir
call Change_Dir
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,dword[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
loop .loopcr
.nocopyram
cmp byte[CheatWinMode],2
jne .notview
mov byte[CheatWinMode],1
.notview
cmp byte[CheatWinMode],0
je .csskip2
; Save Cheat Search File
mov edx,cstempfname
call Create_File
jc .csskip2
mov bx,ax
mov edx,[vidbuffer]
add edx,129600
mov ecx,65536*2+32768
call Write_File
call Close_File
.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
loop .loopcl
mov al,[cfgsoundon]
mov [soundon],al
mov al,[cfgStereoSound]
mov [StereoSound],al
mov al,[cfgSoundQuality]
mov [SoundQuality],al
call AdjustFrequency
mov byte[GUIOn],0
mov byte[GUIOn2],0
mov dword[StartLL],0
mov dword[StartLR],0
mov byte[NetLoadState],0
jmp continueprog
.faileda
call WinErrorA
jmp continueprog
.failedb
call WinErrorB
jmp continueprog
CheckSumVal dd 0
WrongCheckSum db 10,13,'ROM Data Mismatch',10,13,10,13,0
SRAMDirc:
; get LoadDrive/LoadDir
mov ebx,LoadDir
mov edx,LoadDrive
call Get_Dir
; change to sram dir
mov dl,[SRAMDrive]
mov ebx,SRAMDir
call Change_Dir
ret
LOADDir:
mov dl,[LoadDrive]
mov ebx,LoadDir
call Change_Dir
ret
guifirsttimemsg:
xor ebx,ebx
mov ecx,256
.a
mov byte[pressed+ebx],0
inc ebx
loop .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 56,81,guiftimemsg1,220-15
GUIOuttext 55,80,guiftimemsg1,220
GUIOuttext 56,96,guiftimemsg2,220-15
GUIOuttext 55,95,guiftimemsg2,220
GUIOuttext 56,104,guiftimemsg3,220-15
GUIOuttext 55,103,guiftimemsg3,220
GUIOuttext 56,112,guiftimemsg4,220-15
GUIOuttext 55,111,guiftimemsg4,220
GUIOuttext 56,120,guiftimemsg5,220-15
GUIOuttext 55,119,guiftimemsg5,220
GUIOuttext 56,128,guiftimemsg6,220-15
GUIOuttext 55,127,guiftimemsg6,220
GUIOuttext 56,136,guiftimemsg7,220-15
GUIOuttext 55,135,guiftimemsg7,220
GUIOuttext 56,151,guiftimemsg8,220-15
GUIOuttext 55,150,guiftimemsg8,220
call vidpastecopyscr
call GUIUnBuffer
call DisplayBoxes
call DisplayMenu
call JoyRead
cmp byte[pressed+2Ch],0
jne .pressedokay
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
ret
guiftimemsg1 db 'ONE TIME USER REMINDER :',0
guiftimemsg2 db 'PLEASE BE SURE TO READ',0
guiftimemsg3 db 'GUINOTES.TXT FOR AN',0
guiftimemsg4 db 'IMPORTANT REMINDER.',0
guiftimemsg5 db 'ALSO, WHENEVER YOU HAVE',0
guiftimemsg6 db 'PROBLEMS, BE SURE TO READ',0
guiftimemsg7 db 'ZSNES.FAQ AND README.TXT',0
guiftimemsg8 db 'PRESS "Z" TO CONTINUE.',0
guimustrestartmsg:
xor ebx,ebx
mov ecx,256
.a
cmp byte[pressed+ebx],1
jne .npr1
mov byte[pressed+ebx],2
.npr1
inc ebx
loop .a
mov byte[pressed+2Ch],0
.again
GUIBox 43,87,213,151,160
GUIBox 43,87,213,87,162
GUIBox 43,87,43,151,161
GUIBox 213,87,213,151,159
GUIBox 43,151,213,151,158
GUIOuttext 56,92,guiqtimemsg1,220-15
GUIOuttext 55,91,guiqtimemsg1,220
GUIOuttext 56,100,guiqtimemsg2,220-15
GUIOuttext 55,99,guiqtimemsg2,220
GUIOuttext 56,108,guiqtimemsg3,220-15
GUIOuttext 55,107,guiqtimemsg3,220
GUIOuttext 56,116,guiqtimemsg4,220-15
GUIOuttext 55,115,guiqtimemsg4,220
GUIOuttext 56,139,guiqtimemsg8,220-15
GUIOuttext 55,138,guiqtimemsg8,220
call vidpastecopyscr
call GUIUnBuffer
call DisplayBoxes
call DisplayMenu
call JoyRead
mov byte[pressed+2Ch],0
call JoyRead
xor ebx,ebx
mov ecx,256+128+64
.b
cmp byte[pressed+ebx],1
je .pressedokay
inc ebx
loop .b
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 byte[GUIQuit],1
ret
guiqtimemsg1 db 'ZSNES MUST BE RESTARTED',0
guiqtimemsg2 db 'TO USE THIS OPTION.',0
guiqtimemsg3 db 'THIS PROGRAM WILL NOW',0
guiqtimemsg4 db 'EXIT.',0
guiqtimemsg8 db 'PRESS ANY KEY.',0
guiprevideo:
xor ebx,ebx
mov ecx,256
.a
mov byte[pressed+ebx],0
inc ebx
loop .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 .pressedokay
inc ebx
loop .b
cmp byte[MouseDis],1
je .mousedis
call Get_MouseData
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
ret
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 RESET',0
guiprevidmsg7 db 'PRESS ANY KEY',0
guipostvideo:
mov ecx,255*144
mov eax,[vidbufferofsb]
.loop
mov dword[eax],0FFFFFFFFh
add eax,4
loop .loop
xor ebx,ebx
mov ecx,256
.a
mov byte[pressed+ebx],0
inc ebx
loop .a
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
call JoyRead
xor ebx,ebx
mov ecx,256+128+64
.b2
cmp byte[pressed+ebx],0
jne near .pressedfail
inc ebx
loop .b2
cmp byte[MouseDis],1
je .mousedis3
call Get_MouseData
test bx,01h
jnz near .pressedfail
.mousedis3
.again
call JoyRead
xor ebx,ebx
mov ecx,256+128+64
.b
cmp byte[pressed+ebx],0
jne .pressedokay
inc ebx
loop .b
cmp byte[MouseDis],1
je .mousedis
call Get_MouseData
test bx,01h
jnz .pressedokay
.mousedis
cmp dword[GUIkeydelay],0
je .pressedokay
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 byte[GUIpclicked],1
ret
guipostvidmsg1 db 'VIDEO MODE CHANGED.',0
guipostvidmsg2 db 'PRESS ANY KEY',0
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -