|
|
这是我学习assembly language第一周所写的一份PS/2 for 鼠标测试程序(DOS)。其中Mouse驱动部分我参照网上的一些代码,但已无从知道出处。呵呵,你还能找到这样好的PS/2的代码吗?如能帮助到您,希望您也能共享一些东西让大家分享。。1 A% Z. @! o" w2 t1 O& n
7 o+ d9 u3 @4 s! `5 ~3 M
代码很乱,我不重新排版了。 Download回去,你们自己排!这样也好多看看代码 - ;
! A: E- o6 {# `/ H$ T0 B0 r - ; Ufoit PS2 Mouse test program Ver 0.9. Y. F, f9 t# T
- ; By Bini.Yi 易祝兵
% ]0 P/ D6 O B I S3 r - ; http://www.ufoit.com 计匠网; U8 D% Q$ x+ z! J; G5 T7 W
- ; 2002/04/06 YYYY/MM/DD
# `' m8 g6 {: I6 D - ;
. \) j2 M& C* P3 K - ;
5 M T) H* S8 F - ; This program test the mouse button click and move.
1 {9 O1 ~; a) o - ;% ~; F& a7 Y6 z/ b7 d r
. W' X4 @4 W7 ^" C0 X$ _% h) Q, o- .model tiny& j& U' O1 K8 k- f
- .586
3 M0 i6 l2 ?( O% A; n - .code
Y% d" l4 S8 W' p, e8 I - .stack 100h
; t2 K" c( F- {) x1 o' q& r0 F - .startup5 O* b/ Q, p3 G
- pusha0 P; [6 g- N8 ?$ V* l
- mov ax, 3533h
/ A$ W0 [- R3 [; s7 a) @$ \: O* f - int 21h
' l& f1 E/ ?* S, K - mov word ptr cs:[old331],es
# t5 m- Y: I# V9 j; l% a - mov word ptr cs:[old332],bx
; ]! U1 D/ |, m$ Z- P - mov ax, 3574h
# o0 `/ ~8 t( V4 x - int 21h
+ |$ z, P- C7 w' p - mov word ptr cs:[old741],es
7 I4 W- P" _1 o8 i o - mov word ptr cs:[old742],bx, n8 }+ h5 B: ]
- popa
, L0 t% o) M3 F1 r _# x, _ - call memmouse
% L% z/ p9 E0 ~4 b1 b1 r - mov ah, 00- M: X; X8 h! M& S0 h8 t. z
- mov al, 03
8 l) _2 ^, i3 z4 v( q - int 10h
- B2 P0 I& m/ \! n+ Y7 v8 J. q9 ^ - mov ah, 06- i" O9 }4 o# o7 o/ J5 J6 ?
- mov al, 0) r5 [- S# {9 I0 F, z" q
- mov cx, 0
# x- c+ ^, C* c2 Q+ p `7 M" a. f - mov dh, 24
9 G( G$ {* Q+ c3 `) b) ]5 k+ o - mov dl, 79
' k; L+ p- ]+ `9 X& _ - mov bh, 07h
5 ~. Q/ \+ }) B+ P - int 10h
1 b2 | P& N' A. x9 H8 @8 Y - mov ax, 0000
2 @# K3 _1 k% ^! x0 @1 _ - mov bx, 0002: }: W( ?( P0 t0 s$ q
- int 33h
! [8 W# F+ ?' C! k' j - cmp ax, 0000 ;if no mouse drive install A% N; K! B( D" T t+ b
- je errormsg ;show error MSG. L2 B4 U, n/ ^$ M2 `" ^' [1 B3 E
- mov ah, 02
8 d: O8 ]( Y# U+ C4 [+ S, T$ Y7 { e; s - mov bh, 00
1 k' L# e: C3 @: D" ? t% E6 d. c2 P& X - mov dh, 25 ;Move point out screen3 v" l* _: T1 S
- mov dl, 79. I U3 e- B b$ C& Q5 E
- int 10h
- J, @- W8 m5 Y8 n - call showmsg ;Show info
& I6 W D- g6 G8 p- f - mov ax, 00011 \( m' |% H0 w# U7 R' `" Z
- int 33h, U; C' K9 b1 h" p4 e3 X
- ; mov ax, 000ah8 H( e9 Y- _) m- |* K
- ; mov bx, 0000$ g) y* U( \# N' S
- ; mov cl, 0h
# U* R, z+ s3 A: f0 G6 u. v$ K - ; mov ch, 0F0h
% Y: O; Q6 [8 f( y0 ?; A* L0 ?( y - ; mov dl, 0h
. P- \# f/ ?. ~! l% I - ; mov dh, 0F0h+ X% b$ a5 _. ^) }) O, S
- ; int 33h
0 ^9 n# Z! I2 @) g1 i - mov ax, 0004h
6 \9 l5 e3 j* v* f8 x7 Y i - mov cx, 0319
. U. j1 @' A: Y. n - mov dx, 0103
- K& P6 L: ~5 C0 S - int 33h2 v5 n9 u7 r4 m
- casemo: ;Case button click and point move $ c2 j/ y* c1 A4 i- \
- mov ax, 000bh ;and keyboard press9 t# Z5 J: i+ X: ]
- int 33h. b+ t+ ?( h: v
- cmp cx, 00h ;if point move....X# m, i8 y6 v6 O, P. E; P- Y
- jne xmov
. V+ {$ ]& @) F$ X - cmp dx, 00h ;if point move....Y% j( u3 s+ L* M8 P) j' k9 e- ]' R) h
- jne ymov8 E: Y% P' `0 x# o+ e
- xymovend: ;X.Y move end6 L( l3 N# M) r
- mov ax, 0003
$ D# z7 {5 }' B - int 33h
v& U- F0 B3 X) ^* T - cmp bx, 0001 ;if left button click show ON8 _- ~& z: d8 o9 _9 A& L
- mov si, 1828
1 P1 P. \* G6 ~2 _; g) Y - je listl6 v2 c5 f& X; H w( b- {
- mov si, 18281 ?0 I; P1 z l6 {6 {8 y
- jne nlistl ;if left no click show OFF( N% C3 Z, A+ F/ [
- testr:
" |) z) U, q4 z. K6 H$ n& c - cmp bx, 0002 ;if right button click show ON
% C I2 `1 y3 q0 [4 _ - mov si,1842
5 M; o" t# @( ?! @3 ^ - je listr
6 j3 I& ]& |. {# v. T - mov si,1842 ;if right no click show OFF6 @ O. K+ R" i, p
- jne nlistl* D& N. e; j4 o, Q' O& A
- casekey:$ y- r1 z6 `. C3 O) s3 G
- mov ah, 01 ;if any key press jump check) ?" s# q& [: J* e, W% E# l9 O
- int 16h
5 ] t: I3 D! J+ v5 ~7 m2 H - jne kpress" h! E. I& m9 i3 m) Z7 g" |
- mov al, [chkl] ;check x flag
4 f/ G. h* d! x- f9 j, [( G) B - cmp al, 02h( K8 t' m2 \9 c6 `, _5 z: [# G
- jnb chkok) T3 Z! J! z/ s2 K# f. W
- jmp casemo
& X4 }+ \4 K0 P8 P+ ?6 s - xmov: ;if X moved, get the X flag+1& u7 [! E0 \- K7 v/ A1 x* n7 [
- mov al, [chkl]
; x- k1 [' v% d7 k1 }5 D& X0 B - inc al% H# s7 [% ?9 A& F9 r' j1 g: C2 ~
- mov [chkl], al
5 p; S5 k6 c* G" i, w2 f: U$ V - call passok
0 \+ \, N3 F( H+ w! s5 R - jmp xymovend" X9 p3 w* }: q; ]; F
- ymov: ;if Y moved, get the X flag+18 j0 F! S, q: t# [1 E! y6 [+ }! X
- mov al, [chkr]+ L3 r; d& _$ P9 n: \
- inc al) q- l" n' ]' v0 N! P' x
- mov [chkr], al% w6 U- ]+ C* G4 ^ ~
- call passok3 k: J, i; v5 ? T* P& W' d$ U
- jmp xymovend
6 [# y( k& t6 R* W' O; P& p( G# ^
5 b$ c2 k- ~4 _+ Y( }; {- passok proc near+ r2 `5 N5 r S+ J- K
- mov al, [okcheck]
7 v" X6 J- I- B! B - cmp al, 1
/ W8 _8 f, ^) s - je let05 h+ L! J3 q/ u$ f) h% a3 v8 _
- jmp passret5 ~5 f- p7 O0 u, r+ B# x8 Z
- let0:
) Z' A/ ?- B! G& D" \, F2 \6 y. E - mov [pass], 1
8 s2 e& Q' j; w+ C" |' W# F - passret: S) i* q& b# O4 a
- ret
# O2 J% |% l* s - passok endp + G2 T& |/ F/ E2 b( r
- / {5 Y* s( I. z; a3 e: ~: u7 ^1 M
- chkok: ;if x flag and y flag>=2 and... then PASS* W6 \7 R/ s) l! U
- mov al, [chkr]; _2 u. g5 e* H4 g7 _
- cmp al, 02h& ]: u! I. { l' Y; z* E
- jb casemo
& U6 L2 N! u- J$ K4 l - mov al, [lk]
6 k2 p. F4 j! L% V - cmp al, 1, C, w: N% [3 z+ v3 F& i) P
- jne casemo( @, s- y* N' X
- mov al, [rk]
& n* v( F- f+ g0 D$ ~+ ?* q - cmp al, 1
6 f! ?$ G b4 A - jne casemo8 `% ^" [; ?0 \" u- X* [1 _) n
- mov [okcheck], 1$ k4 g. E m( Z5 t" a
- mov al, [pass]3 a: x ^8 x a
- cmp al, 18 F+ |! r& k5 P q Y: A; c% O
- jne casemo
& f/ W. V# `( W; l& y) D: F - mov ax,0002h/ U- z$ M5 w$ y% y% B& M- m
- int 33h; P4 B' i) e& C" Q4 d
- call cleascr
W: S. i5 o' P( S8 E4 O5 N* D - ' n$ L& ^# J: z/ Y
- call oldint- ^0 ~2 l" v) H3 U# p
- mov ax, 04c00h
/ _" u& p# u4 T3 E( L - int 21h& g3 H3 n) [: f9 Y5 J
- 9 x0 c2 A5 g1 V6 J( J, H
- okexit:
0 x" m; S) `. t2 l. } - mov ah, 4ch- r/ {/ h% {! h
- mov al, 0; W+ P4 L4 k1 x3 l: U
- int 21h% y" b. z0 B2 x* I$ {) i/ p/ ?/ o
- listl: ;Show ON9 F2 J- r+ ` S' G9 {
- pusha$ R* v; M2 Z7 [/ _
- mov ax, 0b800h
' x4 {9 Z1 g @% m) q# s - mov es, ax6 d; y4 M6 K4 b% o2 ^
- mov ah, 47h" u8 U8 f+ T; o/ w. n
- mov al, 20h U1 S0 @( H* K( o, X; E
- mov es:[si], ax
% ]5 c2 `% @" h - add si, 02) z# W0 p4 t! J$ _ }! ~1 ?, ^
- mov al, 4fh5 m9 h$ u! O s0 [; q/ }
- mov es:[si], ax
^7 d) X2 N. \& [ O: M' O4 ?) b - mov al, 4eh. Y7 m4 e7 v" \+ T& x0 _+ Q) q4 X
- add si, 02% v+ ^, q5 H5 _7 z' {
- mov es:[si], ax0 v4 ~" Y( r# k# e! o$ S5 D
- mov [lk], 1
, ]/ k" s3 f7 E& m0 t& l - popa
+ i) r! N) ^$ w8 m" o5 W - jmp testr- ^" b2 l d, a) I: U/ x# S
- listr: ;Show ON
6 y1 K) q/ ^* u( b% E9 r - pusha2 O) w$ w8 s+ _
- mov ax, 0b800h
# f5 E7 l9 g' C) F; ?0 Y - mov es, ax
0 `7 c$ ?, |6 E! |2 Y) |& b" _( j - mov ah, 47h( W% p, ~: b' a3 j
- mov al, 20h
7 L. z7 E2 M% q& Y; a( r0 \ - mov es:[si], ax
0 m! r+ M! y1 o- z - add si, 02 f% o7 w1 \# W* i8 z) V
- mov al, 4fh
6 @- [% G8 ]% ~8 d2 k* w - mov es:[si], ax7 {2 h" [8 N' t8 C
- mov al, 4eh
$ M$ p% O2 V4 Z2 k/ y - add si, 02% L/ D! e- Z3 g4 L7 I e7 ~
- mov es:[si], ax
7 O5 W! x- a& r# d5 ` - mov [rk], 1" M! N3 X" {; ` o4 g8 h
- popa; E# @. A5 U/ ]" J7 m
- jmp casekey
* i! ?! }% _1 L& ~/ \ - 0 R! l) I( }; ]* f" w& q: L4 n
- nlistl: ;Show OFF
% J$ x3 `* n' A$ D w& D, A" L - pusha
1 c1 [4 G W* a- w - mov ax, 0b800h V3 j2 a" ~8 |7 y: y$ L3 \
- mov es, ax
1 N5 X h% i, z8 w4 R1 I4 Z - mov ah, 17h
1 I% V+ c" c. v2 p+ e. T( ] - mov al, 4fh0 z$ ]: h# Z' K, }7 Q9 ~
- mov es:[si], ax3 k: W: T4 a: W
- add si, 020 n" [; e1 C0 H/ [! P; O
- mov al, 46h8 r$ ?( w" K2 _- S# o; S+ d
- mov es:[si], ax) p/ P& _* i* B* k4 K1 g1 R! x
- mov al, 46h
3 b( O9 O' D, G, G4 f; \2 w- v - add si, 023 u' i+ v8 N- T' g
- mov es:[si], ax
& C7 e/ N0 ~) v! L1 v9 D* m - popa2 I c0 ^/ \5 L% i* X1 ^% T2 q
- cmp si, 1840& w- R& F5 x0 M; d n
- jae casekey
; f& M8 f: ?1 _8 C; z" F1 T4 G - jmp testr
* K- q8 l6 N% z9 l0 ^ - $ F6 r% J2 W5 I
- kpress: ;Check key press if press<ESC> then EXIT
* [ a2 M3 y$ X - cmp ah, 01h ;and return a error
/ @6 A' q6 i5 q - je exit14 o3 P6 m" ~" I$ x
- mov ah, 0ch ;if press other key then clear
$ P5 M* B9 o# o x- J! Q# ^ - mov al, 00 ;keyboard buffer1 A4 u u4 c+ G5 @+ r
- int 21h
5 I3 a7 v- L/ J: s - jmp casemo
# y1 c/ p6 ~: d/ V, x9 c
4 b9 f" x8 C% g; a4 V6 F$ l' @- errormsg: ;if mouse driver no install9 B0 |7 S7 u. X- Z7 J' w. e
- call oldint+ U9 A3 A+ P* K3 R# _' l' B
- lea dx, offset emsg
0 y8 V) J( i/ T- T L* C6 J - mov ah, 09h. n$ t& b( X9 F# H5 Q! b
- int 21h8 t. C$ H5 f/ u b' c
- mov ah, 4ch
, B. S3 T, u" F) l1 h/ Y2 J - mov al, 2" U& o4 s2 j# J* v4 r* L
- int 21h
1 M$ f/ U( n3 C5 y
3 I5 n9 ]! ] q# C- exit1: ;error exit
2 Y4 _- N& b1 x" ` - mov ax, 0002h% \; ?( Q$ W# c5 a3 Q
- int 33h
! ^' _" C" ^& Y( P: ~# a8 ~. q' C - call cleascr
2 c$ S) ^8 f1 A( B- O, F1 c+ @1 ^ - call oldint% \/ y l. ?% F
- mov ah, 4ch. C6 ^3 T5 N, T! c. O
- mov al, 01
. G4 Q6 ]# k8 J" j; y7 F - int 21h
: e% K. k8 N" {. b
[7 B" p, v9 `! ^- cleascr proc near ;clear screen. E( q* y, V7 \# r0 J
- pusha
- k f1 H k+ I: p9 i/ q( N9 t - mov ah, 06
+ M9 ?& y& a( w( `1 [ - mov al, 0
3 y2 P/ |1 A5 q1 o0 ]9 B - mov cx, 0
h) e% C* e% e% `5 s! ^& n- n - mov dh, 24. L: [0 P4 J8 [
- mov dl, 793 n8 r" ? r$ g, e+ z& k1 o
- mov bh, 07h
& ]% ~2 F7 c. O- Y - int 10h
$ ^4 c, V a; C0 G/ u% I - mov ah, 021 F4 b1 W; U0 `. C
- mov bh, 00
/ Q6 D/ { k9 a6 W' b { - mov dh, 05 `5 b2 J F: a- w
- mov dl, 00 _6 a5 i! ~$ d. _
- int 10h& v7 G# w; B- ]" L$ t/ u
- popa
+ J, e5 {7 m/ X6 Z0 G9 M - ret
; C5 P5 u6 a1 }0 U- d - cleascr endp. z, K! r" y0 q& H0 |! {: D
6 E( A# J- ?, j$ |( m4 E2 D. V- showmsg proc near ;Show info
2 }$ T* T) s, g5 H# q+ o - pusha
3 Y, |. ]& Z( S5 N1 @ - lea di, offset showms
* O; C* c4 K; L" C6 K0 U7 o - mov ax, 0b800h" ?. u: P& ~* ]9 d$ K6 `, K
- mov es, ax
% L3 Y9 M! L( }. n/ v; }: D - mov si, 0
7 E; ~: i; ~. B7 y, ? - mov cx, 480+ @1 a" q6 B4 n* @5 T7 s' [
- mov ah, 07h/ x( L5 @0 }% |9 p* b3 ^0 Q$ I
- @@:' p/ _" c8 j3 z: b0 [
- mov al, 20h
' c* E4 `1 p0 S4 x g5 ?. \9 J% ]4 D - mov es:[si], ax
3 K, w* B; q& @# {2 f$ `2 _ - add si, 2% S7 u& W% y* S* K( L W2 E
- loop @b3 c, u, S& \+ g! N h& Q6 O# w
- mov cx,8806 g6 k. ]0 O z3 e- z+ H
- @@:2 M/ e0 C9 }, { L
- mov al, [di]6 D9 j2 R" W& j' v9 G; ^& ?
- inc di2 v6 y6 U9 g! C% S7 t/ @0 {
- cmp al,20h
/ h5 l; G1 u' p4 K - je showch1" u: Y0 [ f3 S& u a
- mov ah, 17h
4 i) b! B L8 ~# S0 @0 C" \ ^ - jmp showch3
& B4 O9 o1 y3 h - showch1:8 |6 {: {' H5 N
- mov ah, 07h
4 Q4 `4 F. _2 I: `- @/ v! G - showch3:2 V$ b1 Y% D& S
- mov es:[si], ax6 Q/ `5 d- s; t3 @; l8 p! W
- add si, 2( J+ \' L3 u% f; c
- loop @b$ ^. B, \; w' o
- popa2 K8 A' Q' O7 \2 n' J R) a# s) T
- ret6 n6 l- G# P9 B! r9 i
- showmsg endp
* Q) q" ~) Y- N# L4 n
( k4 }3 v$ p. I6 v0 Y; X: \. y- oldint proc- _5 \" n* u. _1 Z) Z# F* M
- pusha7 j# ]) L9 \ V. e
- mov ds, word ptr cs:[old331]& W! ~) x7 w5 Q! C0 w/ T5 h
- mov dx, word ptr cs:[old332]
# b; L% X$ | Z0 N - mov ax, 2533h
' R6 V f" q; O _1 ` - int 21h
+ n2 Z; N8 c8 p: E0 F' i8 |8 Q - mov ds, word ptr cs:[old741]
3 d: d/ |/ E( r0 E6 K* H$ v - mov dx, word ptr cs:[old742]
0 @7 ~2 }% F& v. W - mov ax, 2574h+ Y( M' q. J& `8 w0 G; w" b% `
- int 21h
0 F" H: \* u- p2 D0 H - popa/ V7 E0 V- }9 e
- ret( a5 o4 ^ r5 k0 m% m* S4 p. l2 |: |
- oldint endp
& W1 `' e) g& ]
0 A8 U+ U& {. \( x# i- memmouse proc
" S) W" [- p8 B+ f - xor ax,ax6 c/ d& d5 @. s5 w5 I/ J
- int 33h
. W/ a5 x( _ B' G9 w - cmp ax,0ffffh
. V; e: M1 c- ^. r1 Q - jne not_loaded8 ^ X" U' D# J$ @- l
- mov [memcopy], 1
4 Z- W0 E8 }( _% Q) F4 s# b - ret& w# b( x/ C7 O6 d! Y) P& N! I# [
-
z3 y' r+ U# k# S - not_loaded:
* S: w$ [9 {3 o' y" a. E: B - 0 i: h4 b5 \8 @% Z' M
- mov ax,2574h/ ?! W8 J* R; c9 g+ q. W
- mov dx,offset new_isr- ]0 x" P* r0 f% k% P8 |/ g2 m
- int 21h
( ~" k' F( N D% N. R
; ?7 u5 W/ \& i, Y- mov ax,2533h% S1 r( f7 R# h$ j
- mov dx,offset new_335 s) U, F6 U$ A$ A' N
- int 21h
- A& G/ O% }9 q6 i. ?+ k; m$ b) N - + h& ^! c9 A: x
- cli8 c# B7 _, O8 A0 T
+ {7 V, g, w& E- mov bl,0a8h% G e$ i; a3 }( E! _8 W; Q
- call keyboard_cmd
9 V8 g( {% q N4 P* m# @5 a1 Y
4 Z& l; A8 k+ v" `- mov bl,20h+ s, c$ T7 X5 H
- call keyboard_cmd, K% F+ `. Y, H8 u: x
- call keyboard_read
$ P' Z& N' A6 m: [/ @ - or al,2& w3 ]! i) w% v
- mov bl,60h
: p& M$ }4 ^+ `1 i - push ax
* H. G8 u/ e- F9 l# G - call keyboard_cmd
J- |1 c$ {# b* z5 | - pop ax, D! M: R$ g) B# D% t$ x( E6 G
- call keyboard_write0 `4 S$ _+ U& X4 ^- \+ R+ }7 R
3 G" b6 r- F. }% P: @; O- mov bl,0d4h# J: r' t$ v7 U! T0 B
- call keyboard_cmd
+ q. B% `: t6 B! Y t6 a' a6 n, g - mov al,0f4h1 g' l5 u% ?% u0 V! U" K5 w
- call keyboard_write A9 E4 v: E: \
8 B6 s& v5 G6 I# q- @' i. o- sti
0 K& j0 m# {6 H8 {! N6 ~ - ret
7 ^) J9 k3 ^4 p& v C m$ d - call_user_isr:8 \4 @. v9 r* N0 ]9 G: q' U
- db 60h
$ w3 n6 J) ~8 |2 r3 p% l1 P - mov cx,cs:[pos_x]5 W( w2 [- \& s6 z T* W+ }9 ?
- mov dx,cs:[pos_y]& B2 t. S/ Y: W# M+ J8 r
- mov di,0 ;cs:[x_move]& \2 o) a. m' A# t3 r
- mov si,0 ;cs:[y_move]$ n3 ~; x$ Q5 n' O9 n, y
- mov word ptr cs:[x_move],0
5 O! w1 \9 G! [: d" ~ - mov word ptr cs:[y_move],0# w0 b4 B* Y6 V
- mov bl,byte ptr cs:[buttons]
* @) F: I/ m" Q- m0 T1 z' s" M - xor bh,bh
, Y5 c7 E- s( Y: J5 Z. j! F - call dword ptr cs:[user_subroutine]
B+ P S/ j% Q5 B, o2 I3 k - db 61h- n/ Z9 h, T* Z2 ?9 N
- ret
4 _- S9 V/ [: G# H/ m0 E - new_isr:( R7 V- d9 _7 n& Q" N( @
- pushf" E; ?$ a9 }( [( z8 w
- cli
# J. Z. i8 \' Y5 [% e - push ax3 O9 B ~" g& y* \! [; U+ Z
- push bx! g5 Q, L' G/ r8 ]6 Q( [& f
- push cx+ {/ y0 e6 t) s1 R" W8 ?
- push dx
/ e2 A3 N. t7 u8 Z6 y" W0 y - push di4 d. z, v/ G- e: @
- push si5 G6 a3 E: q9 |
- push es
, C6 k3 [% J1 D9 P5 _ - push ds8 E: U6 m+ M E0 U
$ ~. G/ _, D' ^/ b: ^- D5 E s- push cs
/ f/ ~0 q) S0 z0 L, j - pop ds8 V+ E' P7 A- @1 p% U% T- \. t2 m
+ ?( t6 [" T9 l& g8 t) r8 x- mov bl,0adh
% }$ \- K! u* ^7 d- w5 c7 p - call keyboard_cmd
4 I( d( P* `; d% b - 0 @) p3 K6 I; U6 n9 O! t3 ?2 X( h
- cmp byte ptr [first_time],0
% N' |% o6 ?) t+ L7 B6 c0 }9 q - je not_first_time/ t$ i" _/ z) w$ ]2 f
- P7 P" g6 V8 Y8 D8 d: f% C. A- mov byte ptr [first_time],0
/ I: s# X3 l4 w: e" F2 M4 |# a - call keyboard_read" \0 Y" @" A; Y& ^7 U
- call keyboard_read
; L% f, s0 p+ R. f3 Q5 x" Q* K - call keyboard_read9 n, l1 d/ U: l8 W. h) t( v1 Y. v
- jmp no_show
5 C, ?8 j! b# D" t; }% }$ l( E, o
) i1 p) @0 e9 B+ f- not_first_time:
6 z P3 Z! n5 g - mov word ptr [temp_mask],0. |* g b2 M, x1 i$ n% c8 s- W
! H5 X- T) T0 B) E- mov cx,[pos_x]
* |" H& P5 N% S) u% l# ^, h - mov dx,[pos_y]
$ U+ ~7 f; c% h7 A
( _" ~2 s. h5 t9 ^* o- call keyboard_read4 c& t$ T8 ]5 a6 ^/ T' g
- and al,7 ;39 U; M1 E/ g$ ` Q# n; }, e( ^, O
- mov ah,[buttons]
/ c* X& |7 R! D - mov [buttons],al. ]. W! T7 ^! P( W
- cmp al,ah+ U# r! _4 c& E
- je no_button_change# U6 `& o5 M$ F% A; t4 R
- and al,3
+ Q- a7 i* @4 v, t, X - and ah,3- U# [3 L: G# A, s2 k" T
- xor al,ah; U& p6 [$ U$ e# ^; s7 x
- xor bx,bx
5 ?/ r- ?$ {& V B& s o - + ]6 Z$ X$ `6 e% j) s, p! C# u
- push ax/ d+ i t/ y( [; W2 J, ]2 R
- test al,2/ D- k2 i% Z' @0 E3 S+ f* k- v$ e
- jz no_right_button_change
1 c i; g* ?# Y2 H9 _2 e - and ah,2, c( L1 ?1 Y; z( X8 s$ F% d: r
- jz right_button_pressed& W: p6 ]7 K( q7 E2 W* x
- or bx,16; s% c1 o! ?# p1 c) X
- jmp no_right_button_change
) ?, c7 r% g) \2 o4 C! ]+ R - right_button_pressed:2 u4 J5 G; G! K- u& C- p; q3 r
- or bx,8
0 f' ^; t; q4 E: ~( M! c1 S* t - no_right_button_change:4 ^9 n9 l1 }$ a# M# {8 u9 V
9 C: l1 f/ G. M: p" P- pop ax" T6 T- M+ W) \7 s6 |& z
# `; b0 m* c8 U1 E- test al,17 h! J: N: O! _* x6 O
- jz no_left_button_change
9 w( l' O1 K/ ]) K$ G* r2 m! W - and ah,1
7 c, n; j# H- V/ E3 x - jz left_button_pressed
8 u6 E. o1 l+ p$ r, V/ v- J - or bx,42 m3 c; }! ]+ P9 _$ U' [
- jmp no_left_button_change
& X9 |5 c. ]( x5 x6 S# g - left_button_pressed:
( f. Y. [5 e S3 ~ - or bx,25 f7 {* c4 F, `1 U
- no_left_button_change:
/ ~; j* S, K/ O- S - - |4 g: V: `( J' G( o
- mov [temp_mask],bx: E( _# P5 z% d1 N
n, t9 N: m7 F0 d2 E7 l9 h9 v- no_button_change: w* }! |" P2 y" m, s* U( @. Y
- call keyboard_read
6 \. u1 r' g# p" s3 h - cbw7 T# k7 I8 S: z% B# w
- add [pos_x],ax
9 X* p2 a- V" x: X- d: | - add [x_move],ax
, c' O5 e% ~& z9 X; R C( I9 @ - mov ax,[x_min]
! O( Z9 C9 k( Z1 a) w - cmp [pos_x],ax, X e/ l5 l! m) P# y7 u5 `
- jg good_hor1
. R" E6 E1 u9 W2 K# N5 W - mov [pos_x],ax2 M* W; @" ~( Z" W) w J
- good_hor1:# k$ q _9 Q8 j6 L- B' E- r" |
- mov ax,[x_max]
- G* y9 O" q) W( J1 R: s' P4 B - cmp [pos_x],ax0 q" Y: T5 r* b& `( a0 ^- W2 a
- jle good_hor2
: q' ^: c9 g; C) @ - mov [pos_x],ax
, z+ A u# x5 ~8 H3 a( U0 A; [ - good_hor2:; n1 ~/ X+ X2 L8 l# ?# S5 s/ _" _
- ' i' S" h" A4 z; ]! o, J2 m
- call keyboard_read
6 {/ L( }$ b$ \& h9 }7 ^% x; q - neg al
* p. y) m# C% X- S! h8 e - cbw" \- b0 ~) n: e9 Z0 v2 Q) H
- add [pos_y],ax
, u7 P) r6 m* p o/ k - add [y_move],ax
5 r: n* `9 w7 y0 y) R* ~ - mov ax,[y_min]
$ O/ Q: y3 S- \( x" m8 \: m/ D' @ - cmp [pos_y],ax
" s, ?7 h( a8 \" p - jg good_ver1
& y: E3 L% |+ K, ?/ k$ X - mov [pos_y],ax" m7 c" z1 W9 q8 W' {+ _0 |
- good_ver1:; ]- s1 e( m! c0 b' k" i
- mov ax,[y_max]
# l4 i2 |9 ]( t' s$ P% N - cmp [pos_y],ax
7 o: J/ K) g; }( L3 i# ] - jle good_ver2
- ~+ T/ b1 c# X/ S6 ` - mov [pos_y],ax& t' W: `) P2 |
- good_ver2:/ e3 s0 [' v$ u0 {$ |# c) l
6 L" l D) c' i1 }6 O- mov ax,[x_move]" |! h' B9 `8 f3 N# L) y W) W
- or ax,[y_move]2 `* F' Y; R0 j: M7 u- K
- or ax,ax
2 {1 G3 \. R- k5 Z4 w - jz no_change_position
+ n& _ p6 a# X5 t7 f - or word ptr [temp_mask],1
; m9 T" m1 `) \3 C& U% e, g - no_change_position:0 {% J4 N# w- L' ` Z1 P( ^ N$ I
- {% u3 S/ j: o* s0 |- mov ax,[temp_mask]
. T7 ^" M7 w7 F" {2 E2 S! W - and ax,[user_mask]
h: S$ J5 L, M2 b0 r _ - jz no_call_user
) r$ H+ [% g" {0 q- y - call call_user_isr
0 B8 h1 D5 T+ h4 v% } - no_call_user:# E9 @' {) T# c! j
- % L/ H( s" v/ Y' Q5 ]8 B. T
- cmp byte ptr [sm_flag],1
7 u, V2 l& h# m+ T% J - jne no_show* g& l# x4 ~8 k5 Y2 U; N
- 1 B( X# y5 V7 [3 N1 T! k' D
- shr cx,3( H K# ^& Z: e3 s$ P; P/ ^
- shr dx,3+ [+ m' x, ^" i) c4 M5 X
- mov ax,80
' i$ h3 g( h, L2 o% j+ A( {3 v4 z1 P1 [ - mul dl0 p6 Y# {6 U4 n2 B3 Y6 V
- add ax,cx1 m" I$ W8 ]+ o1 j3 M- ?" \) I
- shl ax,1
; b6 W) o) H: k6 {+ V$ H - mov di,ax. `/ |5 x5 ]7 b w- i- b/ @
- mov ax,0b800h
' [* [& w+ h! L2 e! Y% G4 O - mov es,ax
9 V5 p' B( e4 |) a - mov ax,[save_char]
0 Z& @1 W) q" d y - stosw
. Q# U" U6 f. z, z- q% G' C" M; R( S
* ` M: V: E; i8 o, o- M$ \' Z- mov cx,[pos_x]: M9 a' J: s, m% D% f2 }5 E
- mov dx,[pos_y]. c/ ?# o) j: o3 d. v$ Y9 `
- shr cx,3
- h! O! J& P( w- E* `2 a3 m - shr dx,36 x+ n/ O! Z4 H% f! ^' `
- mov ax,80
% d/ T! e- K+ Q - mul dl
4 k1 v6 G c+ ?' h - add ax,cx
" N8 `9 b1 y8 }* c) H1 O! n, @6 { - shl ax,1
1 t( `3 w3 ~5 M1 y4 G& q( S) U - mov di,ax' ~/ Q" |% h$ L/ d! g/ @. T9 U' y
- mov ax,0b800h9 M: m0 J. U) Z* B' y% q
- mov es,ax, R$ j/ k# I% ?& k
- mov ax,es:[di]
+ }, M. U+ e3 w0 A0 A- ^3 O: z - mov [save_char],ax: Z; k5 E. g8 {/ U, m
- not ah( M |+ W W/ M
- and ah,7fh9 E9 B8 c, A1 e3 g, }
- stosw: g& Z4 x' n* L2 y
- no_show:
9 a" E" O" C( F* | - mov bl,0aeh+ E; Y' g8 q0 q1 n
- call keyboard_cmd8 V7 [& Y7 z& M6 a' I+ L- E" E
- 1 ?# {9 d& n' c5 R# r' _
- mov al,20h( L& o6 H6 h$ h5 w- r' @6 k
- out 0a0h,al
0 t" A/ k; m: P. Z. X/ \ - out 20h,al; N, a( t% w- W3 x% R
- * K: \3 C* Q6 T. p: B; n. J- w+ j
- pop ds
! s/ B$ W9 l5 [: ?" l) ] - pop es
" m0 A& [! ~2 @3 p% ^" H" J3 b" i - pop si9 x" N- Y/ V; `* ]
- pop di( \9 ^' z1 X/ {3 P: {% J2 b6 N
- pop dx" @! Z0 A% S# o0 K) \( c V0 F
- pop cx7 s: Q6 g$ v* c) q( r6 o/ J2 a; D
- pop bx8 A- M/ f6 a+ R( {9 p
- pop ax
/ \% L, f3 B1 ~4 y; b - popf
8 [7 V" F5 E6 I4 U2 n9 h* i6 I - iret# a% L5 ] m5 }$ y# P. ~0 O- h
- 8 ~: c9 x- r! b
- first_time db 1
1 g1 w# q3 o* h7 @$ } - buttons db 0
2 }1 d) m$ r: D1 s - pos_x dw 0
4 d4 J2 l! [; G8 T - pos_y dw 0
" |* q2 y2 L) s - sm_flag dw 0) T0 w5 X+ u% ]! T/ ?
- save_char dw 05 i2 X2 G& e7 ^' \$ l* u
- x_move dw 0
8 r& N6 x6 Z3 @: p* S( f6 | - y_move dw 0
" T1 w: r, O( Q) f6 J# `. q7 \ - x_max dw 639. W$ J; z$ k& r
- x_min dw 0
+ q- \5 @% Y7 |. h6 x' l5 Q - y_max dw 1991 Q( [& D" ]8 x# v6 v
- y_min dw 0. `" h9 ?% [8 \" ]- b; A. N
- user_subroutine dw 0,0% x1 w9 t7 {9 Y a
- user_mask dw 0
) ^" ]- x( A+ o3 O# }' s. l - temp_mask dw 0
H4 l. h, W$ ` - , Y+ A4 X* X' J$ Y# `+ x" \
- keyboard_read:
& g& {6 G( o1 Y' g - push cx; B* z( T7 \ `0 }
- push dx4 K. e- F% x- ]5 `% _5 s ]
- xor cx,cx
9 {/ _* e, d3 j4 g" M, d - key_read_loop:
; T) Y$ I! }- y, X1 Y9 L P - in al,64h$ t. C2 U) C2 e0 H0 a* y/ M! P
- jmp $+2
2 w4 D" p$ d$ M) h7 D: U) W - jmp $+2
5 F% M; A0 {, ~/ Z9 k9 h - test al,1
6 W( @$ X+ N S) H - jnz key_read_ready, c/ A9 q2 _; {
- loop key_read_loop
7 z0 d: x$ f4 C8 D0 d - mov ah,1
1 o W8 S# ~+ h/ F - jmp key_read_exit3 R+ X5 y; [* Q* ]4 b( x: c* `
- key_read_ready:/ o8 Y$ {0 H v5 o
- push cx2 |6 Y x$ @( x4 k. N) U& {2 C" X8 I
- mov cx,32
, Y7 D3 i; u2 ^' f( p7 J( J6 r - key_read_delay: B X6 ~; T7 K' S
- jmp $+2$ g9 _5 ] B! `* G5 o T; x' ?
- jmp $+2
" j" |7 C) c# L! W* S - loop key_read_delay
# u. w& K* A7 A4 W0 I
3 B/ g0 K6 B# ?- pop cx1 t! l$ l k( L% m# s& y" @
- ; ~: m9 H' X( J9 {2 k
- in al,60h" Q5 ~5 V; h5 Q: q+ f, j J8 H4 S' K' S
- jmp $+2
& Z& ]* T7 R$ m% J - jmp $+2
; `* z6 _/ }8 d/ c7 V3 W! x) D - xor ah,ah9 E& q$ ~4 y' U4 ~
- key_read_exit:. R" n* O: f8 i. n/ ^
- pop dx
2 ]6 b7 o& [% a! S$ G: H: Q - pop cx; q' e" `# i# }9 M' U M2 {- n
- ret# o( H+ X/ Q) r6 m* g4 A4 n
- 5 z$ O* I& n) R* K$ |
- keyboard_write:4 C2 Y' r3 p0 A, e% p+ R# {) h
- push cx5 O& @. j, W5 P! D& J; U: S) H
- push dx% n+ ~' ~+ w$ ?/ g+ n4 ?! P5 \
- mov dl,al8 l$ w. G8 T- J+ u' r; {! Y* ?
- xor cx,cx
- `7 K0 r5 d3 _+ p6 { - kbd_wrt_loop1:: F& B* E; R, B# s. ~
- in al,64h: u6 t$ I- Y) U6 s( t9 G6 ?
- jmp $+2
7 W: `7 I- ]" X# V" r# H; @ i; o - jmp $+2
% t" S' |" i6 E$ |# H; v, R. S - test al,20h
6 x3 T l. |/ |; j - jz kbd_wrt_ok1
1 X/ O! Q* l# k5 K
* B6 t" M j; s- loop kbd_wrt_loop1( f" C( j% k* j7 p1 u0 g! N, ^) I
" d: ~ F ~9 x5 n! C4 F- mov ah,17 t; \9 o& d# s+ _- U6 g2 {
- jmp kbd_wrt_exit( u' k# d* {' ?$ s4 J6 i$ V( J
& D& I: v/ k2 P( S& H4 F" b- kbd_wrt_ok1:
& G) x/ |! i7 s, e% \ c' v* y4 Q - in al,60h
, i" U c, H# D2 O
# R3 m- {& `: v7 q/ I$ h. K+ z- xor cx,cx
+ I6 }3 c! l3 h* h8 |7 w* ? - kbd_wrt_loop:
0 A3 Z1 p4 q. b: U - in al,64h' O6 a3 A0 I/ A/ A: _, |" L3 \. P3 S
- jmp $+22 B' I1 ~ u4 g; `2 I( _
- jmp $+2) z% a9 \# D& O
- test al,2
: m/ n- C0 a, i4 ] - jz kbd_wrt_ok# N" a+ |/ A7 C& S
- . M8 }6 _9 c v2 I
- loop kbd_wrt_loop* [' k- F/ Q: _% L2 o; S" W" H
- 1 v; k5 D) q- d# {
- mov ah,1
7 r- p) E. {% ?4 ?! l" F- _ - jmp kbd_wrt_exit' t: h& j% i2 V0 I$ A" R
- % E$ S% {- V6 Y; g5 M4 }
- kbd_wrt_ok:
# t1 C2 f2 X* D3 h9 Z( e - mov al,dl' D* y/ r# W7 c: O
- out 60h,al
, L4 c) d1 C$ q9 _+ l5 B' j4 y - jmp $+2: N6 f5 ~- f3 H1 _
- jmp $+2
% ~" \1 @4 S5 r+ R" w - ( b" d7 D/ D2 ^2 ^1 V( E
- xor cx,cx9 V3 l9 |& L$ G8 S4 }4 h& T: [
- kbd_wrt_loop3:' ]$ x) w: \' e2 [( Q$ W
- in al,64h
: U1 c0 W$ Y. K. R" m: n7 Q( | - jmp $+2
6 s" H* q d% w) |! o& s - jmp $+2; j4 \4 C+ j. k3 z' }0 A* x4 ^" O
- test al,2' g% }4 E2 F! q4 w
- jz kbd_wrt_ok3; ~+ C- e& g# l/ I, D
, h7 |. _! ^) U x- Q c- loop kbd_wrt_loop3( }; t& @' a# ?0 a# H, S- Y, v1 t
- 6 g' n. Y# E/ V* N& ~% W5 e
- mov ah,1$ p% g% H* ^/ ^) j3 A2 o
- jmp kbd_wrt_exit
" _# m0 I8 e. ^% b
- z4 ]9 K/ g" N' p, n% D$ v- kbd_wrt_ok3:& I/ ?( \. m! B+ x. p; Z* Q
- mov ah,8
4 ^: h* I p( L, I: t8 d4 e - kbd_wrt_loop4:/ c+ u3 E0 s; G+ i! T% e7 P
- xor cx,cx
* k1 U o+ ?" m' Y. }' A - kbd_wrt_loop5:
4 \* Y+ p% L4 y& Z2 D$ r$ Z - in al,64h
B6 c1 A5 M3 O. K7 N - jmp $+2$ K6 u6 z1 i" @; k/ d8 u
- jmp $+20 q8 P# d* C; y6 ?/ }
- test al,1
^$ c1 v+ d9 G) A8 a8 u1 a - jnz kbd_wrt_ok4; f0 ^, q4 t- C8 S! z1 F3 b
" t% ]! L5 t; w- @; q- loop kbd_wrt_loop50 N n t: i4 [* {- A: }
- . X _0 e2 c- J: A+ `/ O# ?
- dec ah
, _7 L/ Q, A" g: R7 \2 A0 U! k# R* Z - jnz kbd_wrt_loop4
9 r9 G" U4 [, X4 w9 V8 r( t6 D6 X
8 G- t4 b) } Q0 E- kbd_wrt_ok4:
0 Q+ C% }# S4 v- Q+ T+ X - xor ah,ah& }7 c+ r& f) \8 z! O2 _# f* a" N8 r
- kbd_wrt_exit:3 J) T: P: {. F! s# ~3 a5 A4 `
- pop dx3 J. L; g4 `6 |. N) b U* F
- pop cx
) s5 }6 N ?* Q( r) V G- ? - ret
; t5 F+ B R! |. ~ - $ I2 y2 o, W( S0 r- I# i
- keyboard_cmd:
* v0 O. s3 q3 w( N) n* v8 N/ j - xor cx,cx
! P Q) f. ]3 K! `/ Z9 ] - cmd_wait:
2 M: \. h! C. ~8 G; d6 A1 F - in al,64h; {' l7 @+ Z4 J- N' e" t9 N* R* t
- jmp $+2: Y: U) h" H1 i5 q7 v* B
- jmp $+2
9 X/ c! Z" p$ X# L) X1 p - test al,2# E/ n P( Z" R' V+ G
- jz cmd_send
& n6 m, d9 Z9 }; F - loop cmd_wait
1 h9 n2 F% E1 Y4 {
2 F7 C9 m: ?2 @* u- jmp cmd_error3 p) m* _/ j" l) z2 w2 L/ z
- : ?; u* ~ K4 r! ^; Y7 v1 y
- cmd_send:
3 [* K7 V; x: _3 k4 | - mov al,bl
' L6 e0 z" h) n( o- k# F$ ~4 A$ j - out 64h,al
$ ^3 X2 s: T b! A0 s; o - jmp $+2
, E9 B$ j8 m9 _$ s5 G - jmp $+28 f4 W6 l% ]7 ^ `: N" f( N% D
- 4 X7 v4 R$ ?* V) C
- xor cx,cx
$ e# N8 i' C1 k9 V- g - cmd_accept:0 e* _! r$ u# }% k' P( M# n
- in al,64h
3 S% U9 a4 H3 N2 V4 T - jmp $+2
8 \1 ^1 C S' j" {" J - jmp $+22 y0 i5 B" ~4 @( D5 Z. h$ l- I+ A
- test al,26 }2 a! x" K; h$ E
- jz cmd_ok2 ~- _; X* i- K4 Z
- loop cmd_accept
) ^" ]9 f+ V, S# T" | - P4 I8 ^' Q' Q( I3 @! T+ j" D+ w
- cmd_error:7 P5 c2 b% s( ^6 D6 M
- mov ah,1
( q) S+ d" {, |; u- l& _ - jmp cmd_exit4 C% F6 |; ]! \' V. y
- cmd_ok:; k; U/ Z6 q0 J# r
- xor ah,ah
! U9 e$ B2 l7 x0 E. l3 c2 S! } - cmd_exit:
+ z1 w8 U* C1 U8 Z3 C2 o2 w/ K - ret/ o# g% l, p2 y; _7 I
; ^/ C; ]4 P1 v- new_33:; ~7 }3 c. @" s) v% y8 P6 G1 `
- cli
9 p( S; b: }. v+ z( a. |; F - cmp al,00 r5 W3 |. E! v7 b
- je reset_mouse
' z, R L. @+ _9 _ - cmp al,1! Q" E4 E% g0 K2 k4 ^! P* ^
- je show_mouse
5 m4 |0 j0 [6 A0 j& V- O' ] - cmp al,2& Z* M7 b0 ^5 |( k0 i7 o1 \3 F2 T7 {
- je hide_mouse. q% C U! f: _
- cmp al,3
: i9 u! \$ n1 X9 s - je get_pos2 Q: }6 R9 I0 |# I0 R; Q6 X1 |5 m
- cmp al,4/ ]' V) Z. s7 n7 n' s' F6 @
- je set_pos0 E6 Y9 D! M# p7 M* b! V
- cmp al,7
* _% y/ I y* ^" W - je set_hor_pos
/ @$ p2 R$ P2 J8 d& U6 Y - cmp al,8# y3 A5 x) N, Y1 o
- je set_ver_pos
# b( s$ F8 a" z6 ? - cmp al,0bh
; g$ y; Q* S! V- U1 I - je get_mouse_movement
- m6 }8 E+ z/ H# r5 s* D - cmp al,0ch
# N3 x& U. E. Q, Q* y: u - je set_subroutines
- O. Y. o& o' d( k1 H6 C - cmp al,14h4 q# V- a4 G7 y) W& D0 G; L
- je swap_subroutines" X K0 S4 s* e8 ^$ M5 z
- iret" c/ ~* T& T/ E5 ~8 K9 t
- Z9 A1 C# O4 x# t" ]2 \" Z
- reset_mouse:
5 T% l) \; L* C - jmp _reset_mouse
Z) e% ^+ B$ ?9 j( g9 A) L4 C7 ?. A - show_mouse:1 ~4 `4 I+ H; d/ E
- jmp _show_mouse
4 p, i' K, b& X. _$ ~ - hide_mouse:
* ~) ^# ~- X) ] - jmp _hide_mouse
2 h% @* Z- n1 I1 J - get_pos:
/ c1 L* `" ]' c4 ~4 g - jmp _get_pos* J- S; y* i8 F) S- c1 P* w# y! m
- set_pos:0 e5 y) j- v7 O Y# y+ U
- jmp _set_pos
2 V2 e5 H) l# R$ H& [, _ - set_hor_pos:5 E @4 S( D8 @: }/ d
- jmp _set_hor_pos
5 R0 E; q4 D7 Y% `5 X, ?( f+ B, x - set_ver_pos:2 i8 L' n7 J) Q$ P/ _
- jmp _set_ver_pos; A8 ^0 [# b8 f& v
- get_mouse_movement:
) j8 e& \2 a: o/ d - jmp _get_mouse_movement
8 n( R& h( M Q. k( M9 M - set_subroutines:* J, v! S" Q. N; n2 E
- jmp _set_subroutines/ f, `6 N3 _# {* E5 j, N+ g
- swap_subroutines:, K x$ [6 b+ G- e/ e9 J
- jmp _swap_subroutines
- `& P | R: W R! | - . b$ ]8 k9 F p* t- P
- _reset_mouse:0 b* ?: A4 p1 G1 C0 Q! A
- mov byte ptr cs:[buttons],0
4 \) g _" Y! B1 x- u5 m% l - mov word ptr cs:[pos_x],0; r) U' W3 g5 S q" k7 j7 A) w
- mov word ptr cs:[pos_y],0
$ j j6 }/ f9 S5 p, b - mov word ptr cs:[x_move],0( `4 Z' a8 z0 L d
- mov word ptr cs:[y_move],0
' ? a1 t! A1 N8 S! p - mov word ptr cs:[x_max],6394 e4 c1 e z& A. a
- mov word ptr cs:[x_min],0
6 \1 R3 @7 F* S9 |# }- L - mov word ptr cs:[y_max],199
7 j5 }$ g+ h3 w/ `3 p. _ - mov word ptr cs:[y_min],0& R6 P4 L5 \) s* o
- mov word ptr cs:[user_mask],02 _8 p7 P; d" r
- mov word ptr cs:[user_subroutine],0; j& Z' m5 O7 ~ r
- mov word ptr cs:[user_subroutine+2],0
; X; s/ K9 e4 B3 z7 n! d - mov ax,0ffffh
9 R$ H9 ^- R. C. p - mov bx,3+ v k- j$ ]8 n" p! o1 ?
- iret
3 l4 ? W$ v8 P( _! X9 p% y
: ^+ a! {' f8 W4 B: N$ s& z* v- _get_pos:1 o3 \, S9 L" Q! X- q2 b0 t' e/ f k
- mov cx,cs:[pos_x]
, H+ g# ]; _9 D# J. x - mov dx,cs:[pos_y]% v7 V: M1 d/ T5 V3 |! @) ^$ u
- mov bx,word ptr cs:[buttons]
+ `; W, [* U1 J7 Z7 _% U/ R - xor bh,bh
9 a& Y9 `* |- t- K+ a8 N - iret
8 f: h2 b1 F+ _3 u7 h" z
A" [9 P3 ]% E7 t. x/ q6 M/ m& m- _get_mouse_movement:
/ f$ W7 o4 @# d* h% ~ - mov cx,cs:[x_move]- U3 s( A P, `$ v& c
- mov dx,cs:[y_move]
. _4 v+ g% I7 M - mov word ptr cs:[x_move],0& Z, [, G, ~ O% W
- mov word ptr cs:[y_move],0! k' `1 C$ u. v5 e( y
- iret
; |9 l' H8 [, @8 G# b - - `- N9 i! s" P, F, c p
- _show_mouse:
, d3 y' {/ ]3 V3 ?" H: ^ - push ax) Y3 T# A2 y# D* O9 o* Q h
- push bx
2 u% m7 L# i8 f$ K( w4 X, e+ b - push di
" u- K% X& U: L: o$ e - push es
1 f1 }2 i: F( o - mov byte ptr cs:[sm_flag],1) P5 Q: ~: G8 j! ]4 E
- mov ax,cs:[pos_y]
( t' y6 Z& Y, t+ @8 O - shr ax,3$ g, J$ }6 A4 Q7 c
- mov bl,80
( P. _- ?1 L- ?' `" }% N - mul bl6 i, U, Q& i y7 t* ?( g4 ^" O
- mov bx,[pos_x]
( O: [6 r; A( x$ l. a: S- y% o - shr bx,39 M6 S( J& \ @7 z
- add ax,bx
, l$ X5 Y" N' K& x - shl ax,1
- j( t! E$ ^' p; H - mov di,ax
9 Y& `( y+ K6 x$ q" i - mov ax,0b800h
/ E* Z# v2 _8 z - mov es,ax
4 X$ k5 G' Q: s - mov ax,es:[di]
( i9 W( X* Q9 n/ e. a: d7 N - mov cs:[save_char],ax& C1 `5 {! u# P& Q6 ? a" s0 M! }( ~5 P' t* b
- not ah
. Z; j: T$ ^0 g. r! A2 r& T - and ah,7fh) l, c) }8 [1 T8 C
- mov es:[di],ax5 |: @8 C* V- X3 T7 e
- pop es
8 Y ~ o* W/ |2 Q$ W& V/ N5 z5 P - pop di
; ]& J. b$ r; a/ n$ M9 z - pop bx2 h4 p; j( X! U. m4 x2 {
- pop ax% w( J/ w, t, l/ O, b
- iret9 b. W5 b+ X6 ?; h- o; t
- - ^. u( e3 D: e
- _hide_mouse:
7 {( B4 @, r2 X/ J1 [ - push ax
0 P5 k |* K* ` q: ~ - push bx5 Y' T4 B; I, x
- push di! r; L! ~: S0 F7 G& o" y
- push es% W# p ?: w9 W' T+ ~* D `$ ?
- mov byte ptr cs:[sm_flag],0& @* I/ X2 r; ?8 z6 }: j4 L& b% ]
- mov ax,cs:[pos_y]) @! g4 s( }- a7 j* a( H
- shr ax,3; ^% B5 F u' k& \" }4 G
- mov bl,80' f; I; t9 M+ f1 m0 E7 d8 F6 K
- mul bl" Y& E, W. u# X+ q5 _2 W
- mov bx,[pos_x]4 d( X" D( b- V$ K" d) G; z
- shr bx,3
6 t$ d, h, }! b - add ax,bx
. \) M* k. o8 R - shl ax,1
! q6 i+ I% ]! d K+ C - mov di,ax
4 _! b8 j* ]- W: n - mov ax,0b800h5 D% g% }1 T/ |; r
- mov es,ax+ M/ ^& t1 {$ l: y2 @
- mov ax,cs:[save_char]
: c% c6 d6 L+ {9 o - mov es:[di],ax
8 \' r* w; p1 E* g9 ]3 | - pop es( F- F0 b1 m3 X W! V4 D+ O
- pop di
; m- q, b) N3 H - pop bx
& D* C$ d* T6 i$ @4 ~0 Q - pop ax) t3 {5 U% P* p- E8 [
- iret7 \; T. e7 Q/ p# u# O, m; o3 m
& M' E# F: j. h% \- _set_pos:! T/ p, R: T0 o% Z+ z0 l
- mov cx,cs:[pos_x]7 V8 O5 l9 K) \5 H0 T
- mov dx,cs:[pos_y]
, N" _5 d ^& p; u - mov word ptr cs:[x_move],03 c4 u$ V3 a' M9 F1 L& U
- mov word ptr cs:[y_move],0
% O" k- \/ e, I/ J/ D - iret
9 ?0 P1 L" h9 i# c0 ]; Q - 2 Z1 z1 t* E) O, R& ^
- _set_hor_pos:
3 R5 W& y7 ~. Q: M, B - call max_min
/ r2 L6 e; e* R) x+ C - mov cs:[x_min],cx
) a# V0 m5 z+ a! ^+ b- o - mov cs:[x_max],dx
! R% Y/ K0 k' t+ I' ? - cmp cs:[pos_x],cx+ a, I. v7 s/ a3 k) M! J% W& \
- jge good_hor_min
6 L1 i; e9 m* V" |' s - mov cs:[pos_x],cx
! Q* ?. t# D9 F0 ? - good_hor_min:
# z: |- f3 Q9 A - cmp cs:[pos_x],dx' P; \& ^- v3 X
- jle good_hor_max
, U& i! E, \6 r% j - mov cs:[pos_x],dx; }1 F; N0 ^8 i! P7 O' w6 J
- good_hor_max:/ I. i# [8 D8 t
- iret; \9 Q/ p) L/ A( _. b$ }$ V$ s+ P
- ; ~( G& U0 n0 _+ D& F7 K2 s
- _set_ver_pos:: M3 M/ V8 `6 m. \- e: R' y
- call max_min) _2 {+ m* a9 x. B* u9 n
- mov cs:[y_min],cx6 i6 K/ o& [, g+ z( j
- mov cs:[y_max],dx
2 h% }; ^& U$ t! e# m& b$ X& u ~ - cmp cs:[pos_y],cx
R [- X& w. W7 e" v& @, E - jge good_ver_min/ H/ _+ W5 o8 H1 P$ d! O/ x. H6 g
- mov cs:[pos_y],cx3 K+ X" D) F& W5 O6 \. {8 e
- good_ver_min:7 L: u. S3 ? s
- cmp cs:[pos_y],dx; f9 ]4 o K) ] B1 x; Q; W" j
- jle good_ver_max4 n! J# o8 z: S
- mov cs:[pos_y],dx
# ]+ B6 f* }/ M. z3 } - good_ver_max:
* P, N* X! I F' O, f* u" b - iret! H9 e2 ^) t: d% w
- ) ^( z* W7 i% h; F6 A
- max_min:' l! O" a# X. ]+ W1 `" V4 h
- cmp cx,dx; n* g2 q3 `1 ]0 s
- jle no_swap% k3 T: q0 ~3 t) p% m! K) I
- xchg cx,dx: a' g% c) v# ~( @
- no_swap:
* f/ Y% r9 `; v. @& y2 [ - ret
1 e" E# ~, W- e* U - " ?1 ^) Z# q: P8 _: W, L9 t
- _set_subroutines:/ _8 }6 x" _+ b3 C% z9 V: {7 p9 L
- mov cs:[user_subroutine],dx# f, u# Y5 B7 i2 {
- mov cs:[user_subroutine+2],es5 R% @8 j( l% Z& Y% @
- mov cs:[user_mask],cx# A( j% f& S% H3 T9 e7 I" E7 O
- iret
9 r( C4 [* ^1 ~. j3 k5 x; V* a
5 C$ O" [7 v# H, _. H# N! d; B- _swap_subroutines:% g& _) G* E P# C' M
- push word ptr cs:[user_mask]
' Y; {+ P8 N- x$ ]$ U8 }8 ~ - push word ptr cs:[user_subroutine+2]
- s0 \! e7 q2 |* R. Z" ^: d - push word ptr cs:[user_subroutine]' d2 }. t5 |, F$ c6 K: f
- mov cs:[user_subroutine],dx1 q& h+ _* M. }1 ^ h% U
- mov cs:[user_subroutine+2],es
8 v) ^% o4 ^9 V: Y8 j/ | - mov cs:[user_mask],cx
# m% Y4 H9 {1 o( p3 q7 J0 \ - pop dx0 N) ?) m: R" q3 f8 j2 x
- pop es
" I- I3 N5 I1 n! u4 V7 X - pop cx
5 @9 ?4 g. p! g* A* U. v5 T - iret# _3 R2 w% X' @* E
- ! z3 w" g: |# }
- memmouse endp
}' H- [. j2 j6 V - ; K( g. n/ t+ z2 N
- endof_start:
! t# p# x b. x9 y
! _$ E9 B7 O, A7 [% F {- emsg db 'No mouse driver install error!$'
% v- g$ {* Q: k4 T# ~% l# W - old331 dw 04 q( j$ p- ^$ ]
- old332 dw 0
+ ^. u/ o' m3 W - old741 dw 0) t* }. E& N6 ~ {3 |
- old742 dw 0. L- Z1 @1 B1 u8 a2 ]2 ~) b Y1 I
- memcopy db 0; E% b3 U6 O! E; P9 M5 P
- okcheck db 0
/ R& Q* w+ p) @+ z; L - pass db 0
0 }. Q2 a% M7 R" H* K( d3 C - chkl db 0( l6 }' r. [6 O/ ?
- lk db 0
3 d7 q& E' P/ w! C J6 S/ V - chkr db 0
9 H9 c0 |. x0 G& j. B! `& ~ - rk db 0
- B7 l/ A+ m7 g; g+ m2 x - showms db ' 赏屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯? '
% }6 c( U$ h: g6 t: ? - db ' ?UfoitmousetestVer0.9Bini.Yi? '
0 Z& V7 B7 d, U$ X1 |1 j - db ' 韧屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯? '( \1 Y1 P0 R5 j
- db ' '
; X5 w# d5 f" U - db ' 赏屯屯簧屯屯突 '
4 n9 P% o# Y! x! B5 \2 |) E - db ' ?OFF汉OFF? '
% M* V; o; g$ D: v7 |; f- @ S - db ' 韧屯屯既屯屯图 ' I F4 X2 [% z
- db ' '
5 d4 W* k+ f0 F( q' J1 @5 l9 }0 O' `+ f - db ' 赏屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯突 '
$ N8 |( ^2 p G - db ' ?IFFail,Press<Esc>toExit? ' ; ~, o7 \" X d
- db ' 韧屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯图 '; |6 g0 E( x. w& ]! ~5 n
) W" ?+ D2 C9 `& _- end
复制代码 |
|