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