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