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