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