📄 dosintrf.asm
字号:
.4buttons
mov dword[eax+40],83h
mov dword[eax+36],82h
mov dword[eax+28],85h
mov dword[eax+24],84h
mov dword[eax+8],0CCh
mov dword[eax+12],0CDh
mov dword[eax+16],0CEh
mov dword[eax+20],0CFh
ret
.no4buttons
cmp bl,18
je .6buttons
cmp bl,5
jne near .no6buttons
.6buttons
mov dword[eax+40],83h
mov dword[eax+36],82h
mov dword[eax+28],85h
mov dword[eax+24],84h
mov dword[eax+32],86h
mov dword[eax+44],87h
mov dword[eax+8],0CCh
mov dword[eax+12],0CDh
mov dword[eax+16],0CEh
mov dword[eax+20],0CFh
cmp bl,5
je .skip8b
mov dword[eax+44],86h
mov dword[eax+32],87h
mov dword[eax+4],080h
mov dword[eax],081h
.skip8b
ret
.no6buttons
cmp bl,6
jne near .nosw1
mov dword[eax+0],0C9h
mov dword[eax+4],0C8h
mov dword[eax+8],0D4h
mov dword[eax+12],0D5h
mov dword[eax+16],0D6h
mov dword[eax+20],0D7h
mov dword[eax+24],08Ch
mov dword[eax+28],089h
mov dword[eax+32],08Eh
mov dword[eax+36],08Bh
mov dword[eax+40],088h
mov dword[eax+44],08Fh
ret
.nosw1
cmp bl,7
jne near .nosw2
mov dword[eax+0],0C9h+8
mov dword[eax+4],0C8h+8
mov dword[eax+8],0D4h+8
mov dword[eax+12],0D5h+8
mov dword[eax+16],0D6h+8
mov dword[eax+20],0D7h+8
mov dword[eax+24],08Ch+8
mov dword[eax+28],089h+8
mov dword[eax+32],08Eh+8
mov dword[eax+36],08Bh+8
mov dword[eax+40],088h+8
mov dword[eax+44],08Fh+8
ret
.nosw2
cmp bl,8
jne near .nosw3
mov dword[eax+0],0C9h+8*2
mov dword[eax+4],0C8h+8*2
mov dword[eax+8],0D4h+8*2
mov dword[eax+12],0D5h+8*2
mov dword[eax+16],0D6h+8*2
mov dword[eax+20],0D7h+8*2
mov dword[eax+24],08Ch+8*2
mov dword[eax+28],089h+8*2
mov dword[eax+32],08Eh+8*2
mov dword[eax+36],08Bh+8*2
mov dword[eax+40],088h+8*2
mov dword[eax+44],08Fh+8*2
ret
.nosw3
cmp bl,9
jne near .nosw4
mov dword[eax+0],0C9h+8*3
mov dword[eax+4],0C8h+8*3
mov dword[eax+8],0D4h+8*3
mov dword[eax+12],0D5h+8*3
mov dword[eax+16],0D6h+8*3
mov dword[eax+20],0D7h+8*3
mov dword[eax+24],08Ch+8*3
mov dword[eax+28],089h+8*3
mov dword[eax+32],08Eh+8*3
mov dword[eax+36],08Bh+8*3
mov dword[eax+40],088h+8*3
mov dword[eax+44],08Fh+8*3
ret
.nosw4
cmp bl,10
jne near .nogrip0
mov dword[eax+0],0CAh
mov dword[eax+4],0CBh
mov dword[eax+8],0F0h
mov dword[eax+12],0F1h
mov dword[eax+16],0F2h
mov dword[eax+20],0F3h
mov dword[eax+24],0A9h
mov dword[eax+28],0ABh
mov dword[eax+32],0ACh
mov dword[eax+36],0A8h
mov dword[eax+40],0AAh
mov dword[eax+44],0AEh
ret
.nogrip0
cmp bl,11
jne near .nogrip1
mov dword[eax+0],0CAh+8
mov dword[eax+4],0CBh+8
mov dword[eax+8],0F0h+4
mov dword[eax+12],0F1h+4
mov dword[eax+16],0F2h+4
mov dword[eax+20],0F3h+4
mov dword[eax+24],0A9h+8
mov dword[eax+28],0ABh+8
mov dword[eax+32],0ACh+8
mov dword[eax+36],0A8h+8
mov dword[eax+40],0AAh+8
mov dword[eax+44],0AEh+8
ret
.nogrip1
cmp bl,14
jne near .nopp1
mov dword[eax+40],180h
mov dword[eax+36],181h
mov dword[eax+0],182h
mov dword[eax+4],183h
mov dword[eax+8],184h
mov dword[eax+12],185h
mov dword[eax+16],186h
mov dword[eax+20],187h
mov dword[eax+28],188h
mov dword[eax+24],189h
mov dword[eax+32],18Ah
mov dword[eax+44],18Bh
ret
.nopp1
cmp bl,15
jne near .nopp2
mov dword[eax+40],190h
mov dword[eax+36],191h
mov dword[eax+0],192h
mov dword[eax+4],193h
mov dword[eax+8],194h
mov dword[eax+12],195h
mov dword[eax+16],196h
mov dword[eax+20],197h
mov dword[eax+28],198h
mov dword[eax+24],199h
mov dword[eax+32],19Ah
mov dword[eax+44],19Bh
ret
.nopp2
cmp bl,16
jne near .nopp3
mov dword[eax+40],1A0h
mov dword[eax+36],1A1h
mov dword[eax+0],1A2h
mov dword[eax+4],1A3h
mov dword[eax+8],1A4h
mov dword[eax+12],1A5h
mov dword[eax+16],1A6h
mov dword[eax+20],1A7h
mov dword[eax+28],1A8h
mov dword[eax+24],1A9h
mov dword[eax+32],1AAh
mov dword[eax+44],1ABh
ret
.nopp3
cmp bl,17
jne near .nopp4
mov dword[eax+40],1B0h
mov dword[eax+36],1B1h
mov dword[eax+0],1B2h
mov dword[eax+4],1B3h
mov dword[eax+8],1B4h
mov dword[eax+12],1B5h
mov dword[eax+16],1B6h
mov dword[eax+20],1B7h
mov dword[eax+28],1B8h
mov dword[eax+24],1B9h
mov dword[eax+32],1BAh
mov dword[eax+44],1BBh
ret
.nopp4
.exit
ret
SECTION .data
; Total Number of Input Devices
NEWSYM NumInputDevices, dd 16
; Input Device Names
NEWSYM GUIInputNames
db 'NONE ',0
db 'KEYBOARD ',0
db '2BUTTONJOYSTICK ',0
db '4BUTTONJOYSTICK ',0
db '6BUTTONJOYSTICK ',0
db '8BUTTONJOYSTICK ',0
db 'SIDEWINDERPAD1 ',0
db 'SIDEWINDERPAD2 ',0
db 'SIDEWINDERPAD3 ',0
db 'SIDEWINDERPAD4 ',0
db 'GAMEPAD PRO P0 ',0
db 'GAMEPAD PRO P1 ',0
db 'PARALLEL LPT1 P1',0
db 'PARALLEL LPT1 P2',0
db 'PARALLEL LPT2 P1',0
db 'PARALLEL LPT2 P2',0
; GUI Description codes for each corresponding key pressed value
NEWSYM ScanCodeListing
db '---','ESC',' 1 ',' 2 ',' 3 ',' 4 ',' 5 ',' 6 '
db ' 7 ',' 8 ',' 9 ',' 0 ',' - ',' = ','BKS','TAB'
db ' Q ',' W ',' E ',' R ',' T ',' Y ',' U ',' I '
db ' O ',' P ',' [ ',' ] ','RET','CTL',' A ',' S '
db ' D ',' F ',' G ',' H ',' J ',' K ',' L ',' : '
db ' " ',' ~ ','LSH',' \ ',' Z ',' X ',' C ',' V '
db ' B ',' N ',' M ',' < ',' > ',' / ','RSH',' * '
db 'ALT','SPC','CAP','F1 ','F2 ','F3 ','F4 ','F5 '
db 'F6 ','F7 ','F8 ','F9 ','F10','NUM','SCR','HOM'
db 'UP ','PUP',' - ','LFT',' 5 ','RGT',' + ','END'
db 'DWN','PDN','INS','DEL',' ',' ',' ','F11'
db 'F12',' ',' ',' ',' ',' ',' ',' '
db ' ',' ',' ',' ',' ',' ',' ',' '
db ' ',' ',' ',' ',' ',' ',' ',' '
db ' ',' ',' ',' ',' ',' ',' ',' '
db ' ',' ',' ',' ',' ',' ',' ',' '
; Joystick Stuff, Port 201h (80h)
db 'JB7','JB8','JB1','JB2','JB3','JB4','JB5','JB6'
db 'SWA','SWB','SWC','SWX','SWY','SWZ','SWL','SWR'
db 'S2A','S2B','S2C','S2X','S2Y','S2Z','S2L','S2R'
db 'S3A','S3B','S3C','S3X','S3Y','S3Z','S3L','S3R'
db 'S4A','S4B','S4C','S4X','S4Y','S4Z','S4L','S4R'
db 'GRR','GRB','GRY','GRG','GL1','GL2','GR1','GR2'
db 'G2R','G2B','G2Y','G2G','2L1','2L2','2R1','2R2'
db 'G3R','G3B','G3Y','G3G','3L1','3L2','3R1','3R2'
db 'G4R','G4B','G4Y','G4G','4L1','4L2','4R1','4R2'
db 'SWS','SWM','GSL','GST','JUP','JDN','JLF','JRG'
db 'S2S','S2M','2SL','2ST','SWU','SWD','SWL','SWR'
db 'S3S','S3M','3SL','3ST','S2U','S2D','S2L','S2R'
db 'S4S','S4M','4SL','4ST','S3U','S3D','S3L','S3R'
db 'J2U','J2D','J2L','J2R','S4U','S4D','S4L','S4R'
db 'GRU','GRD','GRL','GRR','G2U','G2D','G2L','G2R'
db 'G3U','G3D','G3L','G3R','G4U','G4D','G4L','G4R'
; Joystick Stuff, Port 209h (100h)
db 'JB7','JB8','JB1','JB2','JB3','JB4','JB5','JB6'
db 'SWA','SWB','SWC','SWX','SWY','SWZ','SWL','SWR'
db 'S2A','S2B','S2C','S2X','S2Y','S2Z','S2L','S2R'
db 'S3A','S3B','S3C','S3X','S3Y','S3Z','S3L','S3R'
db 'S4A','S4B','S4C','S4X','S4Y','S4Z','S4L','S4R'
db 'GRR','GRB','GRY','GRG','GL1','GL2','GR1','GR2'
db 'G2R','G2B','G2Y','G2G','2L1','2L2','2R1','2R2'
db 'G3R','G3B','G3Y','G3G','3L1','3L2','3R1','3R2'
db 'G4R','G4B','G4Y','G4G','4L1','4L2','4R1','4R2'
db 'SWS','SWM','GSL','GST','JUP','JDN','JLF','JRG'
db 'S2S','S2M','2SL','2ST','SWU','SWD','SWL','SWR'
db 'S3S','S3M','3SL','3ST','S2U','S2D','S2L','S2R'
db 'S4S','S4M','4SL','4ST','S3U','S3D','S3L','S3R'
db 'J2U','J2D','J2L','J2R','S4U','S4D','S4L','S4R'
db 'GRU','GRD','GRL','GRR','G2U','G2D','G2L','G2R'
db 'G3U','G3D','G3L','G3R','G4U','G4D','G4L','G4R'
; Extra Stuff (180h) (Parallel Port)
db 'PPB','PPY','PSL','PST','PUP','PDN','PLT','PRT'
db 'PPA','PPX','PPL','PPR',' ',' ',' ',' '
db 'P2B','P2Y','P2S','P2T','P2U','P2D','P2L','P2R'
db 'P2A','P2X','P2L','P2R',' ',' ',' ',' '
db 'PPB','PPY','PSL','PST','PUP','PDN','PLT','PRT'
db 'PPA','PPX','PPL','PPR',' ',' ',' ',' '
db 'P2B','P2Y','P2S','P2T','P2U','P2D','P2L','P2R'
db 'P2A','P2X','P2L','P2R',' ',' ',' ',' '
SECTION .text
SECTION .data
NEWSYM ZSNESBase, dd 0
cpuidfname db 'nocpuzid.dat',0
cpuidtext db 'NOTE: If ZSNES crashes here, then please re-run. ',0
cpuidtext2 db 13,' ',13,0
YesMMX db 'MMX support enabled.',13,10,13,10,0
TempVarSeek dd 0
gotoroot db '\',0
SECTION .text
; ****************************
; Mouse Stuff
; ****************************
NEWSYM Init_Mouse
; return non-zero if successful
mov eax,00h
int 33h
cmp ax,0
je .nomouse
mov eax,07h
mov ecx,0
mov edx,255
int 33h
mov eax,08h
mov ecx,0
mov edx,223
int 33h
mov eax,0Fh
mov ecx,8
mov edx,8
int 33h
mov eax,04h
mov ecx,0
mov edx,0
int 33h
mov ax,1
.nomouse
ret
NEWSYM Get_MouseData ; Returns both pressed and coordinates
mov eax,03h
int 33h
; bx : bit 0 = left button, bit 1 = right button
; cx = Mouse X Position, dx = Mouse Y Position
ret
NEWSYM Set_MouseXMax ; Sets the X boundaries (ecx = left, edx = right)
mov eax,07h
int 33h
ret
NEWSYM Set_MouseYMax ; Sets the Y boundaries (ecx = left, edx = right)
mov eax,08h
int 33h
ret
NEWSYM Set_MousePosition ; Sets Mouse Position (x:cx,y:dx)
mov eax,04h
int 33h
ret
NEWSYM Get_MousePositionDisplacement
; returns x,y displacement in pixel in cx,dx
mov eax,0Bh
int 33h
ret
NEWSYM MouseWindow
ret
; ****************************
; Sound Stuff
; ****************************
NEWSYM StopSound
ret
NEWSYM StartSound
ret
NEWSYM SoundProcess ; This function is called ~60 times/s at full speed
cmp byte[OSPort],1 ; Do not call in the dos port
; ja .notdos
.nosound
ret
.notdos
cmp byte[soundon],0
je .nosound
cmp byte[DSPDisable],1
je .nosound
mov eax,200 ; Size of 32-bit buffer in dwords
add eax,eax
mov dword[BufferSizeW],eax
add eax,eax
mov dword[BufferSizeB],eax
pushad
call ProcessSoundBuffer
popad
; DSPBuffer should contain the processed buffer in the specified size
; You will have to convert/clip it to 16-bit for actual sound process
ret
NEWSYM Check60hz
; Call the timer update function here
ret
; ****************************
; TCP/IP Stuff
; ****************************
; TCPIPPortNum
NEWSYM TCPIPStatus, db 0
NEWSYM PacketSendSize, dd 0
NEWSYM PacketRecvSize, dd 0
NEWSYM PacketRecvPtr, dd 0
NEWSYM PacketSendArray, times 256 db 0
NEWSYM PacketRecvArray, times 256 db 0
NEWSYM IPAddrStr, times 20 db 0
NEWSYM RemoteDisconnect, db 0
NEWSYM TCPIPStartServer
mov dword[PacketSendSize],0
mov dword[PacketRecvSize],0
; call InitTCP
or eax,eax
jnz .failed
mov byte[TCPIPStatus],1
; StartServer(unsigned short port)
mov ax,[TCPIPPortNum]
push ax
; call StartServer
add esp,2
or eax,eax
jnz .noserver
mov byte[TCPIPStatus],2
.noserver
ret
.failed
mov eax,1
ret
NEWSYM TCPIPInitConnectToServer
mov dword[PacketSendSize],0
mov dword[PacketRecvSize],0
; call InitTCP
or eax,eax
jnz .failed
mov byte[TCPIPStatus],1
; Convert GUINetTextk2 to IPAddrStr
mov ebx,GUINetTextk2
mov edx,IPAddrStr
.notend
mov al,[ebx]
cmp al,' '
je .dontinclude
mov [edx],al
inc edx
.dontinclude
inc ebx
cmp al,0
jne .notend
; int ConnectServer(char *servername, unsigned short port)
mov ax,[TCPIPPortNum]
push ax
mov eax,IPAddrStr
push eax
; call ConnectServer
add esp,6
or eax,eax
jnz .noclient
mov byte[TCPIPStatus],3
.noclient
xor eax,eax
ret
.failed
mov eax,1
ret
NEWSYM TCPIPStoreByte
; Store al into the array
cmp dword[PacketSendSize],256
je .packeterror
push ebx
mov ebx,[PacketSendSize]
mov [PacketSendArray+ebx],al
pop ebx
inc dword[PacketSendSize]
ret
.packeterror
jmp OSExit
NEWSYM TCPIPGetByte
; dh = 0 : No bytes in buffer
; dl = resulting character
cmp dword[PacketRecvSize],0
jne .bytereceived
mov dword[PacketRecvPtr],0
call TCPIPRecvPacket
cmp dword[PacketRecvSize],0
jne .bytereceived
xor dh,dh
ret
.bytereceived
push eax
mov eax,[PacketRecvPtr]
mov dl,[PacketRecvArray+eax]
mov dh,1
inc dword[PacketRecvPtr]
mov eax,[PacketRecvPtr]
cmp [PacketRecvSize],eax
jne .notequal
mov dword[PacketRecvSize],0
.notequal
pop eax
ret
NEWSYM TCPIPSendPacket
cmp dword[PacketSendSize],0
je .nopacket
pushad
; Send PacketSendArray with size of PacketSendSize
; SendData(int dsize,char *dptr)
mov eax,PacketSendArray
push eax
mov eax,[PacketSendSize]
push eax
; call SendData
or eax,eax
jnz .failed
add esp,8
popad
.nopacket
ret
.failed
add esp,8
popad
call TCPIPDisconnect
jmp OSExit
NEWSYM TCPIPRecvPacket
pushad
; Store packet to PacketRecvArray, size at PacketRecvSize
; int GetData(int dsize,char *dptr)
mov eax,PacketRecvArray
push eax
mov eax,256
push eax
; call GetData
cmp eax,-1
je .failed
mov [PacketRecvSize],eax
add esp,8
popad
ret
.failed
add esp,8
popad
call TCPIPDisconnect
jmp OSExit
NEWSYM TCPIPDisconnect
; call DeInitTCP
cmp byte[TCPIPStatus],3
jne .notserver
; call StopServer
.notserver
cmp byte[TCPIPStatus],3
jne .notclient
; call Disconnect
.notclient
ret
NEWSYM TCPIPPreparePacket
mov dword[PacketSendSize],0
ret
NEWSYM TCPIPConnectToServer
ret
NEWSYM TCPIPWaitForConnection
ret
NEWSYM TCPIPSendPacketUDP
ret
NEWSYM TCPIPConnectToServerW
ret
NEWSYM GetHostName
ret
NEWSYM hostname
NEWSYM UDPConfig
NEWSYM tcperr, dd 0,0,0,0
NEWSYM ClearUDPStuff
NEWSYM Wait1SecWin
NEWSYM EnableSUDPPacket
NEWSYM DisableSUDPPacket
NEWSYM WinErrorA
NEWSYM WinErrorB
NEWSYM GotoHomepage
ret
NEWSYM GetTimeInSeconds
push es
mov ax,[selc0040]
mov es,ax
mov eax,[es:108]
and eax,0FFFFFFh
xor edx,edx
mov ebx,86400
mul ebx
mov ebx,1573039
div ebx
pop es
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -