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