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