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