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