afegit intèrpret ascii, doc d'API i fonts Pascal originals
This commit is contained in:
@@ -0,0 +1,638 @@
|
||||
{Unitat per al teclat, joystick i mouse}
|
||||
{Ultima actualitzacio 19-02-2000}
|
||||
|
||||
unit JInput;
|
||||
|
||||
interface
|
||||
const
|
||||
(*//////////////////////////CONSTANTS DEL TECLAT\\\\\\\\\\\\\\\\\\\\\\\\*)
|
||||
{El codi de SCAN es que s'activa quan es polsa una tecla}
|
||||
keySysReq = $54;
|
||||
keyCapsLock = $3A;
|
||||
keyNumLock = $45;
|
||||
keyScrollLock = $46;
|
||||
keyLeftCtrl = $1D;
|
||||
keyLeftAlt = $38;
|
||||
keyLeftShift = $2A;
|
||||
keyRightCtrl = $9D;
|
||||
keyAltGr = $B8;
|
||||
keyRightShift = $36;
|
||||
keyEsc = $01;
|
||||
keyBackspace = $0E;
|
||||
keyEnter = $1C;
|
||||
keySpace = $39;
|
||||
keyTab = $0F;
|
||||
keyF1 = $3B;
|
||||
keyF2 = $3C;
|
||||
keyF3 = $3D;
|
||||
keyF4 = $3E;
|
||||
keyF5 = $3F;
|
||||
keyF6 = $40;
|
||||
keyF7 = $41;
|
||||
keyF8 = $42;
|
||||
keyF9 = $43;
|
||||
keyF10 = $44;
|
||||
keyF11 = $57;
|
||||
keyF12 = $58;
|
||||
keyA = $1E;
|
||||
keyB = $30;
|
||||
keyC = $2E;
|
||||
keyD = $20;
|
||||
keyE = $12;
|
||||
keyF = $21;
|
||||
keyG = $22;
|
||||
keyH = $23;
|
||||
keyI = $17;
|
||||
keyJ = $24;
|
||||
keyK = $25;
|
||||
keyL = $26;
|
||||
keyM = $32;
|
||||
keyN = $31;
|
||||
keyO = $18;
|
||||
keyP = $19;
|
||||
keyQ = $10;
|
||||
keyR = $13;
|
||||
keyS = $1F;
|
||||
keyT = $14;
|
||||
keyU = $16;
|
||||
keyV = $2F;
|
||||
keyW = $11;
|
||||
keyX = $2D;
|
||||
keyY = $15;
|
||||
keyZ = $2C;
|
||||
key1 = $02;
|
||||
key2 = $03;
|
||||
key3 = $04;
|
||||
key4 = $05;
|
||||
key5 = $06;
|
||||
key6 = $07;
|
||||
key7 = $08;
|
||||
key8 = $09;
|
||||
key9 = $0A;
|
||||
key0 = $0B;
|
||||
keyMinus = $0C;
|
||||
keyEqual = $0D;
|
||||
keyLBracket = $1A;
|
||||
keyRBracket = $1B;
|
||||
keySemicolon = $27;
|
||||
keyTick = $28;
|
||||
keyApostrophe = $29;
|
||||
keyBackslash = $2B;
|
||||
keyComma = $33;
|
||||
keyPeriod = $34;
|
||||
keySlash = $35;
|
||||
keyInsert = $D2;
|
||||
keyDelete = $D3;
|
||||
keyHome = $C7;
|
||||
keyEnd = $CF;
|
||||
keyPageUp = $C9;
|
||||
keyArrowLeft = $CB;
|
||||
keyArrowRight = $CD;
|
||||
keyArrowUp = $C8;
|
||||
keyArrowDown = $D0;
|
||||
keyKeypad0 = $52;
|
||||
keyKeypad1 = $4F;
|
||||
keyKeypad2 = $50;
|
||||
keyKeypad3 = $51;
|
||||
keyKeypad4 = $4B;
|
||||
keyKeypad5 = $4C;
|
||||
keyKeypad6 = $4D;
|
||||
keyKeypad7 = $47;
|
||||
keyKeypad8 = $48;
|
||||
keyKeypad9 = $49;
|
||||
keyKeypadComma = $53;
|
||||
keyKeypadStar = $37;
|
||||
keyKeypadMinus = $4A;
|
||||
keyKeypadPlus = $4E;
|
||||
keyKeypadEnter = $9C;
|
||||
keyCtrlPrtScr = $B7;
|
||||
keyShiftPrtScr = $B7;
|
||||
keyKeypadSlash = $B5;
|
||||
|
||||
{El codi de BREAK es el que s'activa quan es solta una tecla}
|
||||
BREAK_Esc=1+128;
|
||||
BREAK_1=2+128;
|
||||
BREAK_2=3+128;
|
||||
BREAK_3=4+128;
|
||||
BREAK_4=5+128;
|
||||
BREAK_5=6+128;
|
||||
BREAK_6=7+128;
|
||||
BREAK_7=8+128;
|
||||
BREAK_8=9+128;
|
||||
BREAK_9=10+128;
|
||||
BREAK_0=11+128;
|
||||
BREAK_Menos=12+128; {potser este siga l'apostrof}
|
||||
BREAK_Igual=13+128; {potser este siga l'exclamacio}
|
||||
BREAK_Backsp=14+128;
|
||||
BREAK_Tab=15+128;
|
||||
BREAK_Q=16+128;
|
||||
BREAK_W=17+128;
|
||||
BREAK_E=18+128;
|
||||
BREAK_R=19+128;
|
||||
BREAK_T=20+128;
|
||||
BREAK_Y=21+128;
|
||||
BREAK_U=22+128;
|
||||
BREAK_I=23+128;
|
||||
BREAK_O=24+128;
|
||||
BREAK_P=25+128;
|
||||
BREAK_LeftBraket=26+128;
|
||||
BREAK_RightBraket=27+128;
|
||||
BREAK_Enter=28+128;
|
||||
BREAK_Control=29+128;
|
||||
BREAK_A=30+128;
|
||||
BREAK_S=31+128;
|
||||
BREAK_D=32+128;
|
||||
BREAK_F=33+128;
|
||||
BREAK_G=34+128;
|
||||
BREAK_H=35+128;
|
||||
BREAK_J=36+128;
|
||||
BREAK_K=37+128;
|
||||
BREAK_L=38+128;
|
||||
BREAK_SemiColon=39+128;{potser la ¥}
|
||||
BREAK_Apostrof=40+128;{potser }
|
||||
BREAK_Tilde=41+128;{potser ‡}
|
||||
BREAK_LeftShift=42+128;
|
||||
BREAK_Back_Slash=43+128;{potser < }
|
||||
BREAK_Z=44+128;
|
||||
BREAK_X=45+128;
|
||||
BREAK_C=46+128;
|
||||
BREAK_V=47+128;
|
||||
BREAK_B=48+128;
|
||||
BREAK_N=49+128;
|
||||
BREAK_M=50+128;
|
||||
BREAK_Coma=51+128;
|
||||
BREAK_Punt=52+128;
|
||||
BREAK_ForwardSlash=53+128;{potser -}
|
||||
BREAK_RightShift=54+128;
|
||||
BREAK_PrintScrn=55+128;
|
||||
BREAK_Alt=56+128;
|
||||
BREAK_Sp=57+128;
|
||||
BREAK_CapsLock=58+128;
|
||||
BREAK_F1=59+128;
|
||||
BREAK_F2=60+128;
|
||||
BREAK_F3=61+128;
|
||||
BREAK_F4=62+128;
|
||||
BREAK_F5=63+128;
|
||||
BREAK_F6=64+128;
|
||||
BREAK_F7=65+128;
|
||||
BREAK_F8=66+128;
|
||||
BREAK_F9=67+128;
|
||||
BREAK_F10=68+128;
|
||||
BREAK_F11=87+128;
|
||||
BREAK_F12=88+128;
|
||||
BREAK_NumLock=69+128;
|
||||
BREAK_ScrollLock=70+128;
|
||||
BREAK_Home=71+128;
|
||||
BREAK_Up=72+128;
|
||||
BREAK_PgUp=73+128;
|
||||
BREAK_NumMenos=74+128;
|
||||
BREAK_Left=75+128;
|
||||
BREAK_Num5=76+128;
|
||||
BREAK_Right=77+128;
|
||||
BREAK_NumMes=78+128;
|
||||
BREAK_End=79+128;
|
||||
BREAK_Down=80+128;
|
||||
BREAK_PgDn=81+128;
|
||||
BREAK_Ins=82+128;
|
||||
BREAK_Del=83+128;
|
||||
|
||||
{Mascares per a tecles de control cridant a int 16h}
|
||||
SHIFT_R=$0001;
|
||||
SHIFT_L=$0002;
|
||||
CONTROL=$0004;
|
||||
ALT =$0008;
|
||||
SCROLL_LOCK_ON=$0010;
|
||||
NUM_LOCK_ON=$0020;
|
||||
CAPS_LOCK_ON=$0040;
|
||||
INSERT_MODE=$0080;
|
||||
CONTROL_L=$0100;
|
||||
ALT_L=$0200;
|
||||
CONTROL_R=$0400;
|
||||
ALT_R=$0800;
|
||||
SCROLL_LOCK_OFF=$1000;
|
||||
NUM_LOCK_OFF=$2000;
|
||||
CAPS_LOCK_OFF=$4000;
|
||||
SYS_REQ_DWN=$8000;
|
||||
|
||||
KEYBOARD_INT=$09;
|
||||
KEY_BUFFER=$60;
|
||||
KEY_CONTROL=$61;
|
||||
INT_CONTROL=$20;
|
||||
|
||||
NomTECLES:array[1..101] of PChar=
|
||||
{1}('Esc','1','2','3','4','5','6','7','8','9'
|
||||
{11},'0','-','=','Backsp','Tab','Q','W','E','R','T'
|
||||
{21},'Y','U','I','O','P','[',']','Enter','Control','A'
|
||||
{31},'S','D','F','G','H','J','K','L',';','Apostrof'
|
||||
{41},'Tilde','LeftShift','\','Z','X','C','V','B','N','M'
|
||||
{51},',','.','/','RightShift','Print Screen','Alt',' ','CapsLock','F1','F2'
|
||||
{61},'F3','F4','F5','F6','F7','F8','F9','F10','NumLock','ScrollLock'
|
||||
{71},'Home','Up','PgUp','-','Left','Num5','Right','+','End','Down'
|
||||
{81},'Page Down','Insert','Del',nil,nil,nil,'F11','F12',nil,nil
|
||||
{91},nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil);
|
||||
|
||||
(*//////////////////////////CONSTANTS DEL MOUSE\\\\\\\\\\\\\\\\\\\\\\\\*)
|
||||
MBLeft=$01; {Boto esquerre del mouse}
|
||||
MBRight=$02; {Boto dret del mouse}
|
||||
|
||||
(*/////////////////////////CONSTANTS DEL JOYSTICK\\\\\\\\\\\\\\\\\\\\\\\\*)
|
||||
JoyPort=$201; {Port del Joystick}
|
||||
Button1_1=$10; {boto 1 del Joystick 1}
|
||||
Button1_2=$20; {boto 2 del Joystick 1}
|
||||
Button2_1=$40; {boto 1 del Joystick 2}
|
||||
Button2_2=$80; {boto 2 del Joystick 2}
|
||||
Joystick1=$01; {ID del Joystick 1}
|
||||
Joystick2=$02; {ID del Joystick 2}
|
||||
Joystick1_X=$01; {Eix X del Joystick 1}
|
||||
Joystick1_Y=$02; {Eix Y del Joystick 1}
|
||||
Joystick2_X=$04; {Eix X del Joystick 2}
|
||||
Joystick2_Y=$08; {Eix Y del Joystick 2}
|
||||
Joy1_CAL=1; {ID Calibrar Joystick 1}
|
||||
Joy2_CAL=2; {ID Calibrar Joystick 2}
|
||||
|
||||
|
||||
var
|
||||
{ ATENCIO TOTES ESTES VARIABLES SON UNICAMENT DE LECTURA !!}
|
||||
{QUALSEVOL MODIFICACIO SOBRE ELLES POT CAUSAR DESASTRES I FINS I TOT
|
||||
CATASTROFRES MUNDIALS.SI LES MODIFIQUES ES BAIX LA TEUA RESPONASABILITAT}
|
||||
(*/////////////////////////VARIABLES DEL TECLAT\\\\\\\\\\\\\\\\\\\\\\\\*)
|
||||
TECLA:word; {RESERVED}
|
||||
TAULATECLES:array[1..101] of byte;{RESERVED}
|
||||
OLD_KB_ISR:pointer; {Punter al antic vector d'interrupcio}
|
||||
|
||||
(*/////////////////////////VARIABLES DEL JOYSTICK\\\\\\\\\\\\\\\\\\\\\\\\*)
|
||||
{les variables joy* guarden els valors despres de la calibracio}
|
||||
{valors per al JOYSTICK1}
|
||||
joy1_MAX_X, {Valor quan X es maxima DRETA}
|
||||
joy1_MAX_Y, {Valor quan Y es maxima AVALL}
|
||||
joy1_MIN_X, {Valor quan X es minima ESQUERRA}
|
||||
joy1_MIN_Y, {Valor quan Y es minima AMUNT}
|
||||
joy1_cx, {Valor quan X esta centrat}
|
||||
joy1_cy, {Valor quan Y esta centrat}
|
||||
{valors per al JOYSTICK2}
|
||||
joy2_MAX_X, {Valor quan X es maxima DRETA}
|
||||
joy2_MAX_Y, {Valor quan Y es maxima AVALL}
|
||||
joy2_MIN_X, {Valor quan X es minima ESQUERRA}
|
||||
joy2_MIN_Y, {Valor quan Y es minima AMUNT}
|
||||
joy2_cx, {Valor quan X esta centrat}
|
||||
joy2_cy:word; {Valor quan Y esta centrat}
|
||||
|
||||
(*/////////////////////////FUNCIONS DEL TECLAT\\\\\\\\\\\\\\\\\\\\\\\\*)
|
||||
procedure InstalarKB;
|
||||
{Funcio : Activa la nova interrupcio del teclat}
|
||||
procedure DesinstalarKB;
|
||||
{Funcio : Restaura l'antiga interrupcio del teclat}
|
||||
Function TeclaPuls(Key:byte):boolean;
|
||||
{Entrada: Key -> codi SCAN de tecla
|
||||
Eixida : TRUE si esta polsada, FALSE si no
|
||||
Funcio : Saber si una tecla esta siguent polsada}
|
||||
Function QTeclaPuls:boolean;
|
||||
{Eixida : TRUE si hi ha alguna tecla polsada, FALSE si no
|
||||
Funcio : Saber si alguna tecla esta siguent polsada}
|
||||
function AgarrarTecla:byte;
|
||||
{Eixida : Codi SCAN de la tecla que esta siguent polsada
|
||||
Funcio : Tornar el codi SCAN de la tecla que esta siguent polsada}
|
||||
procedure EscriuTecla;
|
||||
{Funcio : Escriure una cadena en pantalla depenent de la tecla}
|
||||
|
||||
(*/////////////////////////FUNCIONS DEL MOUSE\\\\\\\\\\\\\\\\\\\\\\\\*)
|
||||
Function MouseReset:word;
|
||||
{Eixida : 0,Driver instalúlat , $FFFF driver no instalúlat
|
||||
Funcio : intentar activar el mouse}
|
||||
Function NumButtons:word;
|
||||
{Eixida : nombre de botons
|
||||
Funcio : averiguar el nombre de botons del mouse}
|
||||
Procedure ShowMouse;
|
||||
{Funcio : Mostra el mouse en la pantalla}
|
||||
Procedure HideMouse;
|
||||
{Funcio : oculta el mouse}
|
||||
Function GetMouseX:word;
|
||||
{Eixida : Coordenada en l'eix X on es troba el mouse
|
||||
Funcio : Obtindre la coordenada X del Mouse}
|
||||
Function GetMouseY:word;
|
||||
{Eixida : Coordenada en l'eix Y on es troba el mouse
|
||||
Funcio : Obtindre la coordenada Y del Mouse}
|
||||
function EstatBoto(button:word):word;
|
||||
{Entrada: Codi de boto del mouse, definit en les constants
|
||||
Eixida : 0 si no esta polsat, distint en cas contrari
|
||||
Funcio : Saber si hi ha un boto polsat o no}
|
||||
procedure SetMousePos(x,y:word);
|
||||
{Entrada: Coordenada x i y on volem posar el mouse
|
||||
Funcio : Colocar el mouse}
|
||||
procedure SetMouseZone(x0,y0,x1,y1:word);
|
||||
{Entrada: x0 -> x minima per definir la zona
|
||||
y0 -> y minima per definir la zona
|
||||
x1 -> x maxima per definir la zona
|
||||
y1 -> y maxima per definir la zona
|
||||
Funcio : Tancar al mouse dins d'una zona per que no isca}
|
||||
procedure SetMouseInterruptRate(Code:word);
|
||||
{Entrada: Code
|
||||
0 No interrupts
|
||||
1 30 ints per second
|
||||
2 50 ints per second
|
||||
3 100 ints per second
|
||||
4 200 ints per second
|
||||
Funcio : Canviar les peticions d'interrupcio que fa el mouse}
|
||||
procedure SetMouseSensitivity(Xsens,Ysens:word);
|
||||
{Entrada: XSens -> (1..32767)
|
||||
Ysens -> (1..32767)
|
||||
Funcio : Canviar la sensitivitat de mouse}
|
||||
procedure SetMouseDoubleSpeed(Speed:word);
|
||||
{Entrada: Speed -> velocitat en mickeys per segon
|
||||
Funcio : Canviar la velocitat}
|
||||
|
||||
(*/////////////////////////FUNCIONS DEL JOYSTICK\\\\\\\\\\\\\\\\\\\\\\\\*)
|
||||
function JBotons(button:word):word;
|
||||
{Entrada: button -> Codi del boto
|
||||
Eixida : 0, boto no polsat <>0,boto polsat
|
||||
Funcio : Averiguar si un boto esta polsat}
|
||||
function Joystick(stick:word):word;
|
||||
{Entrada: Stick -> JOYSTICK?_? constants dalt definides
|
||||
Eixida : Valor que podem comparar en el valor de les variables de calibracio
|
||||
Funcio : Torna un valor depenent de l'estat de l'eix }
|
||||
Procedure JoyCalibrate(stick:word);
|
||||
{Entrada: stick -> Codi del Joystick (Joy1_CAL o Joy2_CAL)
|
||||
Funcio : Calibrar el joystick}
|
||||
function JoyAvaliable(stick:word):boolean;
|
||||
{Entrada: stick -> Codi del Joystick (Joystick1 o Joystick2)
|
||||
Eixida : FLASE si no hi detecta un joystick
|
||||
Funcio : Averiguar si hi ha un joystick}
|
||||
|
||||
implementation
|
||||
uses dos;
|
||||
|
||||
(*/////////////////////////FUNCIONS DEL TECLAT\\\\\\\\\\\\\\\\\\\\\\\\*)
|
||||
procedure NEWKB;interrupt;assembler;
|
||||
asm
|
||||
cli
|
||||
in al, KEY_BUFFER {obtindre la tecla polsada}
|
||||
xor ah,ah
|
||||
mov TECLA,ax {guardar la tecla}
|
||||
in al,KEY_CONTROL {accedir al registre de control}
|
||||
or al,82h {posar els bits adequats per fer un reset
|
||||
en el biestable del teclat}
|
||||
out KEY_CONTROL,al {enviar les noves dades al registre}
|
||||
and al,7Fh
|
||||
out KEY_CONTROL,al {Fer el reset}
|
||||
|
||||
{Actualitzacio de la taula de tecles}
|
||||
mov bx,tecla
|
||||
cmp bx,128
|
||||
jg @breakcode
|
||||
mov byte ptr TAULATECLES[bx-1],1
|
||||
jmp @end
|
||||
@breakcode:
|
||||
sub bx,128
|
||||
mov byte ptr TAULATECLES[bx-1],0
|
||||
|
||||
@end:
|
||||
mov al,20h
|
||||
out INT_CONTROL,al
|
||||
sti
|
||||
end;
|
||||
|
||||
procedure waitACS;
|
||||
begin
|
||||
asm
|
||||
mov ah,2
|
||||
int 16h
|
||||
and al,00001111b
|
||||
jz @fi
|
||||
@espera:
|
||||
mov ah,2
|
||||
int 16h
|
||||
and al,00001111b {al->bit 7=Insert On
|
||||
6=Caps Lock on
|
||||
5=Num Lock on
|
||||
4=scroll lock on
|
||||
3=Alt key down
|
||||
2=Control key down
|
||||
1=left shift down
|
||||
0=right shift down}
|
||||
jnz @espera
|
||||
@fi:
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure InstalarKB;
|
||||
var i:word;
|
||||
begin
|
||||
waitACS;
|
||||
getintvec(KEYBOARD_INT,Old_KB_ISR);
|
||||
setintvec(KEYBOARD_INT,@NEWKB);
|
||||
Fillchar(TAULATECLES,sizeof(Taulatecles),0);
|
||||
end;
|
||||
|
||||
procedure desinstalarKB;
|
||||
begin
|
||||
setintvec(KEYBOARD_INT,OLD_KB_ISR);
|
||||
end;
|
||||
|
||||
Function TeclaPuls(Key:byte):boolean;
|
||||
begin
|
||||
if TAULATECLES[KEY]=1 then TeclaPuls:=TRUE else TeclaPuls:=FALSE;
|
||||
end;
|
||||
|
||||
Function QTeclaPuls:boolean;
|
||||
begin
|
||||
if tecla>=128 then QTeclaPuls:=false else QTeclaPuls:=true;
|
||||
end;
|
||||
|
||||
function AgarrarTecla:byte;
|
||||
begin
|
||||
if tecla<101 then AgarrarTecla:=tecla;
|
||||
end;
|
||||
|
||||
procedure EscriuTecla;
|
||||
begin
|
||||
if tecla<128 then write(NomTecles[tecla]);
|
||||
end;
|
||||
|
||||
|
||||
(*/////////////////////////FUNCIONS DEL MOUSE\\\\\\\\\\\\\\\\\\\\\\\\*)
|
||||
Function MouseReset:word;assembler;
|
||||
{MouseReset=0 Driver no instalúlat}
|
||||
{MouseReset=65535 Driver instalúlat}
|
||||
asm
|
||||
xor ax,ax
|
||||
int 33h
|
||||
end;
|
||||
|
||||
Function NumButtons:word;assembler;
|
||||
asm
|
||||
xor ax,ax
|
||||
int 33h
|
||||
mov ax,bx
|
||||
end;
|
||||
|
||||
Procedure ShowMouse;assembler;
|
||||
asm
|
||||
mov ax,0001h
|
||||
int 33h
|
||||
end;
|
||||
|
||||
Procedure HideMouse;assembler;
|
||||
asm
|
||||
mov ax,0002h
|
||||
int 33h
|
||||
end;
|
||||
|
||||
Function GetMouseX:word;assembler;
|
||||
{x -> (0..639)}
|
||||
asm
|
||||
mov ax,$0003
|
||||
int 33h
|
||||
mov ax,cx
|
||||
end;
|
||||
|
||||
Function GetMouseY:word;assembler;
|
||||
{y -> (0..199)}
|
||||
asm
|
||||
mov ax,$0003
|
||||
int 33h
|
||||
mov ax,dx
|
||||
end;
|
||||
|
||||
function EstatBoto(button:word):word;assembler;
|
||||
{Torna <>0 si esta polsat}
|
||||
asm
|
||||
mov ax,$0003
|
||||
int 33h
|
||||
mov ax,bx
|
||||
and ax,button
|
||||
end;
|
||||
|
||||
procedure SetMousePos(x,y:word);assembler;
|
||||
asm
|
||||
mov ax,$0004
|
||||
mov cx,x
|
||||
mov dx,y
|
||||
int 33h
|
||||
end;
|
||||
|
||||
procedure SetMouseZone(x0,y0,x1,y1:word);assembler;
|
||||
asm
|
||||
mov ax,$0007
|
||||
mov cx,x0
|
||||
mov dx,x1
|
||||
int 33h
|
||||
mov ax,$0008
|
||||
mov cx,y0
|
||||
mov dx,y1
|
||||
int 33h
|
||||
end;
|
||||
|
||||
procedure SetMouseInterruptRate(Code:word);assembler;
|
||||
{Code
|
||||
0 No interrupts
|
||||
1 30 ints per second
|
||||
2 50 ints per second
|
||||
3 100 ints per second
|
||||
4 200 ints per second
|
||||
}
|
||||
asm
|
||||
mov ax,$001C
|
||||
mov bx,code
|
||||
int 33h
|
||||
end;
|
||||
|
||||
procedure SetMouseSensitivity(Xsens,Ysens:word);assembler;
|
||||
{XSens (1..32767}
|
||||
{Ysens (1..32767}
|
||||
asm
|
||||
mov ax,$000F
|
||||
mov cx,Xsens
|
||||
mov dx,Ysens
|
||||
int 33h
|
||||
end;
|
||||
|
||||
procedure SetMouseDoubleSpeed(Speed:word);assembler;
|
||||
asm
|
||||
mov ax,$0013
|
||||
mov dx,speed
|
||||
int 33h
|
||||
end;
|
||||
|
||||
|
||||
(*/////////////////////////FUNCIONS DEL JOYSTICK\\\\\\\\\\\\\\\\\\\\\\\\*)
|
||||
function JBotons(button:word):word;
|
||||
begin
|
||||
Port[Joyport]:=0;
|
||||
JBotons:=(not Port[Joyport]) and Button;
|
||||
end;
|
||||
|
||||
function Joystick(stick:word):word;assembler;
|
||||
asm
|
||||
cli
|
||||
mov ah,byte ptr stick
|
||||
xor al,al
|
||||
xor cx,cx
|
||||
mov dx,JOYPORT
|
||||
out dx,al
|
||||
|
||||
@discharge:
|
||||
in al,dx
|
||||
test al,ah
|
||||
loopne @discharge
|
||||
|
||||
sti
|
||||
xor ax,ax
|
||||
sub ax,cx
|
||||
end;
|
||||
|
||||
Procedure JoyCalibrate(stick:word);
|
||||
var xnew,ynew:word;
|
||||
begin
|
||||
if (Stick=JOY1_CAL) then
|
||||
begin
|
||||
joy1_MAX_X:=0;
|
||||
joy1_MAX_Y:=0;
|
||||
joy1_MIN_X:=10000;
|
||||
joy1_MIN_Y:=10000;
|
||||
{girar, deixar neutral i polsar un boto}
|
||||
while (JBotons(button1_1) or JBotons(button1_2))=0 do
|
||||
begin
|
||||
xnew:=Joystick(Joystick1_X);
|
||||
ynew:=Joystick(Joystick1_Y);
|
||||
if (xnew>=joy1_Max_x) then joy1_Max_X:=xnew;
|
||||
if (xnew<=joy1_Min_x) then joy1_Min_X:=xnew;
|
||||
if (ynew>=joy1_Max_y) then joy1_Max_y:=ynew;
|
||||
if (ynew<=joy1_Min_y) then joy1_Min_y:=ynew;
|
||||
end;
|
||||
{com l'usuari ha deixat el pad al centre deu estar al centre}
|
||||
Joy1_cx:=xnew;
|
||||
Joy1_cy:=ynew;
|
||||
end
|
||||
else if (stick=JOY2_CAL) then
|
||||
begin
|
||||
joy2_MAX_X:=0;
|
||||
joy2_MAX_Y:=0;
|
||||
joy2_MIN_X:=10000;
|
||||
joy2_MIN_Y:=10000;
|
||||
while (JBotons(button2_1) or JBotons(button2_2))=0 do
|
||||
begin
|
||||
xnew:=Joystick(Joystick2_X);
|
||||
ynew:=Joystick(Joystick2_Y);
|
||||
if (xnew>=joy2_Max_x) then joy2_Max_X:=xnew;
|
||||
if (xnew<=joy2_Min_x) then joy2_Min_X:=xnew;
|
||||
if (ynew>=joy2_Max_y) then joy2_Max_y:=ynew;
|
||||
if (ynew<=joy2_Min_y) then joy2_Max_y:=ynew;
|
||||
end;
|
||||
{com l'usuari ha deixat el pad al centre deu estar al centre}
|
||||
Joy2_cx:=xnew;
|
||||
Joy2_cy:=ynew;
|
||||
end;
|
||||
end;
|
||||
|
||||
function JoyAvaliable(stick:word):boolean;
|
||||
{torna un valor distint de 0 si existeix}
|
||||
begin
|
||||
if (stick=JOYSTICK1) then
|
||||
JoyAvaliable:=(Joystick(Joystick1_X)<>$0000)
|
||||
else if (stick=JOYSTICK2) then
|
||||
JoyAvaliable:=(Joystick(Joystick2_X)<>$0000);
|
||||
end;
|
||||
|
||||
begin
|
||||
tecla:=128;
|
||||
end.
|
||||
Reference in New Issue
Block a user