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