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