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