home *** CD-ROM | disk | FTP | other *** search
/ Intermedia 1998 January / inter1_98.iso / www / rozi / RS.ZIP / RS_ODB_2.PAS < prev    next >
Pascal/Delphi Source File  |  1994-01-31  |  2KB  |  92 lines

  1. {$M 1024,0,0}
  2.  
  3. uses Crt,Dos;
  4.  
  5. const
  6.   rRBR=$3F8;
  7.   rDLL=$3F8;
  8.   rDLM=$3F9;
  9.   rLCR=$3FB;
  10.   rLSR=$3FD;
  11.   rMCR=$3FC;
  12.   rIER=$3F9;
  13.   rIDR=$3FA;
  14.   rIMR=$021;
  15.   rISR=$020;
  16.  
  17.   sEOF=26; { kod koñca pliku }
  18.  
  19. var
  20.   f:file;
  21.   x,y:integer;
  22.  
  23. const nazwa_pliku:string[12]='STANDARD.OUT';
  24.  
  25. procedure Obsluga_0CH; interrupt;
  26. var liczba,nr:integer;
  27.     znak:char;
  28.  
  29. procedure OdbiorKomunikatu;
  30. var znak:char;
  31.     liczba:integer;
  32. begin
  33.   Assign(f,nazwa_pliku);
  34.   Rewrite(f,1);
  35.   repeat
  36.   until (port[rLSR] and $01)=$01;
  37.   liczba:=port[rRBR];
  38.   znak:=chr(liczba);
  39.   BlockWrite(f,znak,SizeOf(znak));
  40.   while liczba<>sEOF do
  41.   begin
  42.     repeat
  43.     until (port[rLSR] and $01)=$01;
  44.     liczba:=port[rRBR];
  45.     znak:=chr(liczba);
  46.     BlockWrite(f,znak,SizeOf(znak));
  47.   end;
  48.   Close(f);
  49. end;
  50.  
  51. begin
  52.   { wyzerowanie bitu IRQ4 w rejestrze obsÆugi ukÆadu 8259 (PIC) }
  53.   port[rISR]:=$64;
  54.   { sprawdzenie, czy przerwanie zostaÆo wygenerowane na skutek
  55.     zapeÆnienia bufora odbiornika }
  56.   if (port[rIDR] and $04)=$04
  57.   then
  58.   begin
  59.     { blokada przerwañ pochodzåcych od ukÆadu 8250 }
  60.     port[rIMR]:=port[rIMR] or $18;
  61.     Sound(2000);
  62.     Delay(1000);
  63.     NoSound;
  64.     OdbiorKomunikatu;
  65.     port[rIMR]:=port[rIMR] and $E7;
  66.   end;
  67.   port[rMCR]:=port[rMCR] or $08;
  68. end;
  69.  
  70. procedure Programowanie_8250;
  71. var rejestry:registers;
  72. begin
  73.   rejestry.AH:=$00;
  74.   rejestry.DX:=$00;
  75.   rejestry.AL:=$67;
  76.   intr($14,rejestry);
  77.   port[rLCR]:=port[rLCR] and $7F;
  78.   port[rMCR]:=port[rMCR] or $08;
  79.   { przerwanie ma byì generowane, gdy sÆowo jest
  80.     skompletowane w buforze odbiornika }
  81.   port[rIER]:=01;
  82. end;
  83.  
  84. BEGIN
  85.   if ParamCount>0 then nazwa_pliku:=ParamStr(1);
  86.   { odblokowanie przerwañ w ukÆadzie kontrolera przerwañ 8259
  87.     pochodzåcych od ukÆadu transmisji 8250 }
  88.   port[rIMR]:=port[rIMR] and $E7;
  89.   SetIntVec($0C,@Obsluga_0CH);
  90.   Keep(0);
  91. END.
  92.