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