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