|
|
1.1 root 1: ; JSTICK.ASM
2: ;
3: ; by Les Bird for Witchaven
4: ;
5: ; Copyright (c) 1995 IntraCorp, Inc.
6: ;
7: ; ***********************************************************************
8: ; * void jstick() - this 'C' callable routine reads the position *
9: ; * of joystick #1 attached to a game-port (0x201)*
10: ; * and returns the X position in variable _joyx *
11: ; * and the Y position in variable _joyy and the *
12: ; * button status in variable _joyb *
13: ; * *
14: ; * _joyb - xxxx.0000 *
15: ; * || *
16: ; * |`-- 0 if joystick #1, button #1 pressed *
17: ; * `--- 0 if joystick #1, button #2 pressed *
18: ; * *
19: ; * 'C' example: *
20: ; * *
21: ; * extern *
22: ; * int joyb,joyx,joyy; *
23: ; * *
24: ; * void *
25: ; * main(void) *
26: ; * { *
27: ; * jstick(); *
28: ; * printf("Joystick X position = %d",joyx); *
29: ; * printf("Joystick Y position = %d",joyy); *
30: ; * printf("Joystick button stat= %d",joyb); *
31: ; * } *
32: ; * *
33: ; ***********************************************************************
34: ;
35: .386p
36: ;
37: JOYPORT equ 201H ; game-port I/O address
38: ;
39: _DATA SEGMENT DWORD PUBLIC 'DATA'
40: ;
41: EXTRN _joyb:BYTE ; db 0 ; joystick button status
42: EXTRN _joyx:WORD ; dw 0 ; joystick X position
43: EXTRN _joyy:WORD ; dw 0 ; joystick Y position
44: joydn db ? ; internal compare value
45: joycr dw ? ; internal counter
46: ;
47: _DATA ENDS
48: ;
49: _TEXT SEGMENT BYTE PUBLIC 'CODE'
50: ASSUME cs:_TEXT, ds:_DATA
51: ;
52: PUBLIC jstick_
53: jstick_ PROC near
54: ;
55: pushf
56: push ebp
57: cli
58: mov bx,0
59: mov cx,800h
60: mov joycr,cx
61: xor cx,cx
62: mov dx,JOYPORT
63: in al,dx
64: mov _joyb,al
65: and al,0fh
66: mov joydn,al
67: out dx,al
68: jloop: in al,dx
69: push ax
70: and al,0fh
71: cmp al,joydn
72: pop ax
73: jz jretrn
74: dec joycr
75: jz jretrn
76: push ax
77: and al,1
78: pop ax
79: jz jupdy
80: inc bx
81: jupdy: and al,2
82: jz jloop
83: inc cx
84: jmp jloop
85: jretrn: mov _joyx,bx
86: mov _joyy,cx
87: pop ebp
88: popf
89: ret
90: ;
91: jstick_ ENDP
92: ;
93: _TEXT ENDS
94: ;
95: END
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.