#include #include #include #include #define PORT 1 #define ZN_X 0x31 #define ZN_Y 0x32 #define ZN_Z 0x33 #define SKX 125/8 #define SKY 125/8 struct pkt { int x; int y; } punkt[200]; int ip; void send(char Rozkaz,char X,char Y); void waitfor(char znak); int przesunX(int IS) { int ilosc_FF; int reszta; int kierunek = 0; if(IS < 0) IS = 0 - IS; else kierunek = 1; ilosc_FF = IS/0xFF; reszta = IS % 0xFF; for(;;) { if(!ilosc_FF) break; send(kierunek,0xFF,0); ilosc_FF--; waitfor(ZN_X); } if(!reszta) return 0; send(kierunek,reszta,0); waitfor(ZN_X); return 0; } int przesunY(int IS) { int ilosc_FF; int reszta; int kierunek = 0; if(IS < 0) IS = 0 - IS; else kierunek = 2; ilosc_FF = IS/0xFF; reszta = IS % 0xFF; for(;;) { if(!ilosc_FF) break; send(kierunek,0,0xFF); ilosc_FF--; waitfor(ZN_Y); } if(!reszta) return 0; send(kierunek,0,reszta); waitfor(ZN_Y); return 0; } void send(char Rozkaz,char X,char Y) { asm mov DX,PORT asm mov AX,0E3h asm int 14h asm mov AH,1h asm mov AL,0EAh // naglowek asm int 14h asm mov AH,1h asm mov AL,Rozkaz // rozkaz asm int 14h asm mov AH,1h asm mov AL,X // Os X asm int 14h asm mov AH,1h asm mov AL,Y // Os Y asm int 14h } void waitfor(char znak) { char a = 0; char b = 0; for(;;) { while(!a) { asm mov DX,PORT asm mov AH,3h asm int 14h asm and AH,1h asm mov a,AH } asm mov DX,PORT asm mov AH,2h asm int 14h asm mov b,AL if(b == znak) return; a = 0; } } void load() { punkt[0].x = 1000; punkt[0].y = 900; punkt[1].x = 1000; punkt[1].y = 1242; punkt[2].x = 1050; punkt[2].y = 2013; punkt[3].x = 1234; punkt[3].y = 1305; ip = 4; } int round(float A) { if((A-floor(A)) >= 0.5) return(ceil(A)); else return(floor(A)); } int pozycja(int pkk) { float temp = pkk; temp = temp * 8 / 125; return(round(temp)); } void main() { int nrpkt; int pozycjaX = 0; int pozycjaY = 0; int nowapozycjaX; int nowapozycjaY; send(0x50,0,0); waitfor(0x35); delay(1000); load(); for(nrpkt = 0;nrpkt < ip;nrpkt++) { nowapozycjaX = pozycja(punkt[nrpkt].x); nowapozycjaY = pozycja(punkt[nrpkt].y); przesunX(nowapozycjaX - pozycjaX); przesunY(nowapozycjaY - pozycjaY); send(4,0,0); // wierc waitfor(ZN_Z); pozycjaX = nowapozycjaX; pozycjaY = nowapozycjaY; } }