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