home *** CD-ROM | disk | FTP | other *** search
- TITLE MACHIO - Machine-dependent I/O support for MOUSETST
- PAGE 56,132
-
- ;=============================================================================
- ;
- ; funcsubs.asm
- ;
- ; Module for mouse test utility
- ;
- ; Copyright (c) 1988-1989, Microsoft Corporation. All rights reserved.
- ;
- ; This program contains the machine-specific I/O functions
- ; needed to support the SETUP program.
- ;
- ;=============================================================================
-
- ;
- ; I N C L U D E S
- ;
-
- INCLUDE ASM.INC
-
- ;
- ; S T R U C T U R E S
- ;
-
- parms struc
-
- parm_bp dw ?
- parm_ip dw ?
-
- if @codesize
- parm_cs dw ?
- endif ; @codesize
-
- if @datasize
- parm_1 dd ?
- parm_2 dd ?
- parm_3 dd ?
- parm_4 dd ?
- parm_5 dd ?
- parm_6 dd ?
- else ; NOT @datasize
- parm_1 dw ?
- parm_2 dw ?
- parm_3 dw ?
- parm_4 dw ?
- parm_5 dw ?
- parm_6 dw ?
- endif ; NOT @datasize
-
- parms ends
-
- PUBLIC _Function12, _Function12Info, _getchnowait
- PUBLIC _ReadLightPenPosition, _PrintString
-
- ASSUME CS:@curseg, DS:DGROUP, ES:DGROUP, SS:DGROUP
-
- conditionMask DW 0
- buttonState DW 0
- horizCursorCoordinate DW 0
- vertCursorCoordinate DW 0
- horizMouseCounts DW 0
- vertMouseCounts DW 0
-
- ASSUME CS:@curseg, DS:NOTHING, ES:NOTHING, SS:NOTHING
-
- _Function12 PROC FAR
-
- MOV [conditionMask],AX
- MOV [buttonState],BX
- MOV [horizCursorCoordinate],CX
- MOV [vertCursorCoordinate],DX
- MOV [horizMouseCounts],SI
- MOV [vertMouseCounts],DI
- ret ; Return to caller
-
- _Function12 ENDP
-
- ASSUME CS:@curseg, DS:DGROUP, ES:DGROUP, SS:DGROUP
-
- _Function12Info PROC
-
- C_ENTRY
- MOV AX,[conditionMask]
-
- if @datasize
- PUSH DS
- LDS DI,[BP].parm_1
- ASSUME DS:NOTHING
- MOV DS:[DI],AX
- MOV AX,[buttonState]
- LDS DI,[BP].parm_2
- ASSUME DS:NOTHING
- MOV DS:[DI],AX
- MOV AX,[horizCursorCoordinate]
- LDS DI,[BP].parm_3
- ASSUME DS:NOTHING
- MOV DS:[DI],AX
- MOV AX,[vertCursorCoordinate]
- LDS DI,[BP].parm_4
- ASSUME DS:NOTHING
- MOV DS:[DI],AX
- MOV AX,[horizMouseCounts]
- LDS DI,[BP].parm_5
- ASSUME DS:NOTHING
- MOV DS:[DI],AX
- MOV AX,[vertMouseCounts]
- LDS DI,[BP].parm_6
- ASSUME DS:NOTHING
- MOV DS:[DI],AX
- POP DS
- ASSUME DS:DGROUP
- else ; NOT @datasize
- MOV DI,[BP].parm_1
- MOV DGROUP:[DI],AX
- MOV AX,[buttonState]
- MOV DI,[BP].parm_2
- MOV DGROUP:[DI],AX
- MOV AX,[horizCursorCoordinate]
- MOV DI,[BP].parm_3
- MOV DGROUP:[DI],AX
- MOV AX,[vertCursorCoordinate]
- MOV DI,[BP].parm_4
- MOV DGROUP:[DI],AX
- MOV AX,[horizMouseCounts]
- MOV DI,[BP].parm_5
- MOV DGROUP:[DI],AX
- MOV AX,[vertMouseCounts]
- MOV DI,[BP].parm_6
- MOV DGROUP:[DI],AX
- endif ; NOT @datasize
-
- C_EXIT
- ret ; Return to caller
-
- _Function12Info ENDP
-
- ASSUME CS:@curseg, DS:DGROUP, ES:DGROUP, SS:DGROUP
-
- _getchnowait PROC
-
- MOV AH,1
- INT 16H
- MOV AX,0
- JZ getchnowaitdone
- INT 16H
-
- getchnowaitdone:
- ret ; Return to caller
-
- _getchnowait ENDP
-
- ASSUME CS:@curseg, DS:DGROUP, ES:DGROUP, SS:DGROUP
-
- _ReadLightPenPosition PROC
-
- MOV AH,4
- INT 10H
- XOR AL,AL
- OR AH,AH
- JZ ReadLightPenPositionDone
- C_ENTRY
- MOV AX,BX
-
- if @datasize
- PUSH DS
- LDS DI,[BP].parm_1
- ASSUME DS:NOTHING
- MOV DS:[DI],AX
- LDS DI,[BP].parm_2
- ASSUME DS:NOTHING
- MOV DS:[DI],CX
- XOR AX,AX
- MOV AL,DH
- LDS DI,[BP].parm_3
- ASSUME DS:NOTHING
- MOV DS:[DI],AX
- MOV AL,DL
- LDS DI,[BP].parm_4
- ASSUME DS:NOTHING
- MOV DS:[DI],AX
- POP DS
- ASSUME DS:DGROUP
- else ; NOT @datasize
- MOV DI,[BP].parm_1
- MOV DGROUP:[DI],AX
- MOV DI,[BP].parm_2
- MOV DGROUP:[DI],CX
- XOR AX,AX
- MOV AL,DH
- MOV DI,[BP].parm_3
- MOV DGROUP:[DI],AX
- MOV AL,DL
- MOV DI,[BP].parm_4
- MOV DGROUP:[DI],AX
- endif ; NOT @datasize
-
- INC AX ; Return non zero
- C_EXIT
-
- ReadLightPenPositionDone:
- ret ; Return to caller
-
- _ReadLightPenPosition ENDP
-
- ASSUME CS:@curseg, DS:DGROUP, ES:DGROUP, SS:DGROUP
-
- _PrintString PROC
-
- C_ENTRY
- PUSH DS
-
- if @datasize
- LDS DI,[BP].parm_2
- ASSUME DS:NOTHING
- MOV DX,DS:[DI]
- LDS DI,[BP].parm_1
- ASSUME DS:NOTHING
- MOV DS,DS:[DI]
- ASSUME DS:NOTHING
- else ; NOT @datasize
- MOV DI,[BP].parm_2
- MOV DX,DGROUP:[DI]
- MOV DI,[BP].parm_1
- MOV DS,DGROUP:[DI]
- ASSUME DS:NOTHING
- endif ; NOT @datasize
-
- MOV AH,9
- INT 21H
- POP DS
- ASSUME DS:DGROUP
- C_EXIT
-
- _PrintString ENDP
-
- END
-