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