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

📄 gui.asm

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 ASM
📖 第 1 页 / 共 5 页
字号:
    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 + -