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