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