home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Intermedia 1998 January
/
inter1_98.iso
/
www
/
rozi
/
RS.ZIP
/
RS_ODB_2.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1994-01-31
|
2KB
|
92 lines
{$M 1024,0,0}
uses Crt,Dos;
const
rRBR=$3F8;
rDLL=$3F8;
rDLM=$3F9;
rLCR=$3FB;
rLSR=$3FD;
rMCR=$3FC;
rIER=$3F9;
rIDR=$3FA;
rIMR=$021;
rISR=$020;
sEOF=26; { kod koñca pliku }
var
f:file;
x,y:integer;
const nazwa_pliku:string[12]='STANDARD.OUT';
procedure Obsluga_0CH; interrupt;
var liczba,nr:integer;
znak:char;
procedure OdbiorKomunikatu;
var znak:char;
liczba:integer;
begin
Assign(f,nazwa_pliku);
Rewrite(f,1);
repeat
until (port[rLSR] and $01)=$01;
liczba:=port[rRBR];
znak:=chr(liczba);
BlockWrite(f,znak,SizeOf(znak));
while liczba<>sEOF do
begin
repeat
until (port[rLSR] and $01)=$01;
liczba:=port[rRBR];
znak:=chr(liczba);
BlockWrite(f,znak,SizeOf(znak));
end;
Close(f);
end;
begin
{ wyzerowanie bitu IRQ4 w rejestrze obsÆugi ukÆadu 8259 (PIC) }
port[rISR]:=$64;
{ sprawdzenie, czy przerwanie zostaÆo wygenerowane na skutek
zapeÆnienia bufora odbiornika }
if (port[rIDR] and $04)=$04
then
begin
{ blokada przerwañ pochodzåcych od ukÆadu 8250 }
port[rIMR]:=port[rIMR] or $18;
Sound(2000);
Delay(1000);
NoSound;
OdbiorKomunikatu;
port[rIMR]:=port[rIMR] and $E7;
end;
port[rMCR]:=port[rMCR] or $08;
end;
procedure Programowanie_8250;
var rejestry:registers;
begin
rejestry.AH:=$00;
rejestry.DX:=$00;
rejestry.AL:=$67;
intr($14,rejestry);
port[rLCR]:=port[rLCR] and $7F;
port[rMCR]:=port[rMCR] or $08;
{ przerwanie ma byì generowane, gdy sÆowo jest
skompletowane w buforze odbiornika }
port[rIER]:=01;
end;
BEGIN
if ParamCount>0 then nazwa_pliku:=ParamStr(1);
{ odblokowanie przerwañ w ukÆadzie kontrolera przerwañ 8259
pochodzåcych od ukÆadu transmisji 8250 }
port[rIMR]:=port[rIMR] and $E7;
SetIntVec($0C,@Obsluga_0CH);
Keep(0);
END.