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