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

📄 dosintrf.asm

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