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