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