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