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