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