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