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