.


:




:

































 

 

 

 


4




.7

. .

. .

.

.

 

.

 

.

:

1 ;

45 ;

6-7 -;

8 1, DMA;

9-11 ;

14-15 .

'

:

= 1- '.

( ):

0 ;

1 ;

2 ;

3 ;

5 ;

8 ;

10 ;

: = ;

AL = (1-128);

- (0-1023);

CL = (1-17);

DH = (0-15);

DL= (0 = :, 1= 2- ; $80 = 0, $81 = 1).

:

CF = 0 , = 1 .

2

: = 02;

AL = , , (1-128);

= / (0-1023);

CL = (1-17);

DH = (0-15);

DL = (0 = :, 1= 2- ; $80 0, $81 = 1).

3

:

- 03.

, .

( ):

0 ;

1 ;

2 Shift;

3 ;

5 .

( ):

0 ;

1 ;

2 .

( ):

0 -;

1 /;

3 ;

4 ;

6 .

0

: = 00;

AL = , ;

DX = (0-2).

:

= .

1

:

= 01;

DX = (0-2).

:

= .

( ):

0 ;

1 ;

2 (AT, PS/2);

3 (AT, PS/2);

4 (AT, PS/2);

5 (AT, PS/2).

0

: = 00.

:

AL = , 1, ; = ;

DX = .

55 . CX:DX .

2

: = 02.

:

CF = 0 , = 1 ;

= ;

CL = ;

DH = ;

DL = 1, .

4

: = 04.

:

= (XIX XX);

CL = ;

DH = ;

DL = ;

CF = 0 , = 1 .

 

Paskal intr (x,y) , . var :

var R:Registers;

uses Dos.

.

.

Unit MyMouse;

 

Interface

Var

msActive:Boolean;

msX,msY:Integer;

msButtons:Byte;

 

Procedure msShow;

Procedure msHide;

Procedure msReset;

Procedure msGoto(X,Y:integer);

Procedure msSetRatio(x,y:byte);

Function msPressed:Boolean;

Function msMoved;

 

Implementation

uses Dos;

Var Rg:Registers;

 

Procedure msReset;//

var B:Boolean;

begin

Rg.ax=00

Intr($33,rg);

msActive=(rg.bx=2)or(rg.bx=3);

msSetRatio(8,16)

msGoto(80,25);

msX:=1;

msY:=1;

msButtons:=0;

end;

 

Procedure msSetRatio(x,y:byte);

begin

if msActive then

begin

rg.ax:=$F;

Rg.cx:=X;

Rg.DX:=Y;

Intr($33,rg);

end;

end;

 

Procedure msShow;//

begin

if msActive then

begin

Rg.AX:=01;

Intr($33,rg);

end;

end;

 

Procedure msHide;//

begin

if msActive then

begin

Rg.AX:=02;

Intr($33,rg);

end;

end;

 

Function msPressed:Boolean;//

begin

if msActive then

begin

Rg.AX:=02;

Intr($33,rg);

msButtons:=Rg.BX;

msX:=(Rg.Cx*79)div 632+1;

msY:=(Rg.DX*24)div 192 +1;

end

else msButtons:=0;

msPressed:=(msButtons=1)or(msButtons=2)or(msButtons=3);

end;

 

Function msMoved;//

begin

if msActive then

begin

Rg.AX:=02;

Intr($33,rg);

msButtons:=Rg.BX;

msX:=(Rg.Cx*79)div 632+1;

msY:=(Rg.DX*24)div 192 +1;

end

else

begin

X:=msX;

Y:=msY;

end;

msMoved:=(X<>msX)or(Y<>msY);

msX:=X;

msY:=Y;

end;

 

Procedure msGoto(x,y:integer);//

begin

if msActive then

begin

rg.ax:=4;

Rg.cx:=X;

Rg.DX:=Y;

Intr($33,rg);

end;

end;

 

begin

end.

 

.

1. -.

2. .

3. : ( ).

4. : .

5. .

6. ᒺ ..

7. .

8. -. .

9. . .

10. -. .

11. .

12. (, , ).

13. (, , )..

14. , .

15.

16. .

17. DMA .

18. .

².

.

4 . , .

" " , .

" " .

.

 

.

1. "" " ".

2. " " " ".

3. " "

4. .

5. .

 





:


: 2016-03-25; !; : 500 |


:

:

, .
==> ...

1707 - | 1488 -


© 2015-2024 lektsii.org - -

: 0.038 .