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