|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 10240 (0x2800)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Periph, seg_025b83
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦this⟧
with Octet, Mot, Acia_Pack, Erreur, Ppi_Pack, Ptm_Pack;
package body Periph is
Not_Available : constant Natural := 20;
Unknown_Periph : constant Natural := 21;
Unknown_Id : constant Natural := 22;
type Tperipheral is (Acia, Ppi, Ptm, Unknown);
type Object is
record
Kind : Tperipheral;
Number : T_Periph_Number;
end record;
type Object_Table is array (T_Periph_Number) of Object;
type Object_Manager is
record
Table : Object_Table;
Last : T_Periph_Number := T_Periph_Number'First;
end record;
Periph_Manager : Object_Manager;
procedure Init (Periph_Type : String;
It_Vector : Octet.T_Octet;
Basic_Address : Mot.T_Mot;
Memory_Mapped : Boolean;
It_Connected : Boolean;
Number_Of_Register : out Natural;
Identifier : out T_Periph_Number) is
Periph_Number : T_Periph_Number;
Kind : Tperipheral;
begin
Identifier := 0;
Number_Of_Register := 0;
if Periph_Manager.Last = T_Periph_Number'Last then
Erreur.Detectee (Not_Available);
else
if Periph_Type = "ACIA" then
Kind := Acia;
Acia_Pack.Init (Periph_Manager.Last + 1, It_Vector,
Basic_Address, Memory_Mapped, It_Connected,
Number_Of_Register, Periph_Number);
elsif Periph_Type = "PPI" then
Kind := Ppi;
Ppi_Pack.Init (Periph_Manager.Last + 1, It_Vector,
Basic_Address, Memory_Mapped, It_Connected,
Number_Of_Register, Periph_Number);
elsif Periph_Type = "PTM" then
Kind := Ptm;
Ptm_Pack.Init (Periph_Manager.Last + 1, It_Vector,
Basic_Address, Memory_Mapped, It_Connected,
Number_Of_Register, Periph_Number);
else
Periph_Number := T_Periph_Number'First;
Erreur.Detectee (Unknown_Periph);
end if;
if Periph_Number /= T_Periph_Number'First then
Periph_Manager.Last := Periph_Manager.Last + 1;
Periph_Manager.Table (Periph_Manager.Last).Kind := Kind;
Periph_Manager.Table (Periph_Manager.Last).Number :=
Periph_Number;
Identifier := Periph_Manager.Last;
end if;
end if;
end Init;
procedure Put_Register (Identifier : T_Periph_Number;
Register_Number : Natural;
Value : Octet.T_Octet) is
begin
if Identifier > Periph_Manager.Last or
Identifier = T_Periph_Number'First then
Erreur.Detectee (Unknown_Id);
else
case Periph_Manager.Table (Identifier).Kind is
when Acia =>
Acia_Pack.Put_Register
(Periph_Manager.Table (Identifier).Number,
Register_Number, Value);
when Ppi =>
Ppi_Pack.Put_Register
(Periph_Manager.Table (Identifier).Number,
Register_Number, Value);
when Ptm =>
Ptm_Pack.Put_Register
(Periph_Manager.Table (Identifier).Number,
Register_Number, Value);
when others =>
Erreur.Detectee (Unknown_Id);
end case;
end if;
end Put_Register;
function Get_Register (Identifier : T_Periph_Number;
Register_Number : Natural) return Octet.T_Octet is
Value : Octet.T_Octet;
begin
if Identifier > Periph_Manager.Last or
Identifier = T_Periph_Number'First then
Erreur.Detectee (Unknown_Id);
else
case Periph_Manager.Table (Identifier).Kind is
when Acia =>
Value := Acia_Pack.Get_Register
(Periph_Manager.Table (Identifier).Number,
Register_Number);
when Ppi =>
Value := Ppi_Pack.Get_Register
(Periph_Manager.Table (Identifier).Number,
Register_Number);
when Ptm =>
Value := Ptm_Pack.Get_Register
(Periph_Manager.Table (Identifier).Number,
Register_Number);
when others =>
Erreur.Detectee (Unknown_Id);
end case;
return Value;
end if;
end Get_Register;
procedure Reset is
begin
for I in 1 .. Periph_Manager.Last loop
case Periph_Manager.Table (I).Kind is
when Acia =>
Acia_Pack.Reset (Periph_Manager.Table (I).Number);
when Ppi =>
Ppi_Pack.Reset (Periph_Manager.Table (I).Number);
when Ptm =>
Ptm_Pack.Reset (Periph_Manager.Table (I).Number);
when others =>
Erreur.Detectee (Unknown_Id);
end case;
end loop;
end Reset;
procedure Kill is
begin
Acia_Pack.Kill;
Ppi_Pack.Kill;
Ptm_Pack.Kill;
Periph_Manager.Last := T_Periph_Number'First;
end Kill;
end Periph;
nblk1=9
nid=6
hdr6=c
[0x00] rec0=1e rec1=00 rec2=01 rec3=028
[0x01] rec0=15 rec1=00 rec2=09 rec3=060
[0x02] rec0=17 rec1=00 rec2=07 rec3=04a
[0x03] rec0=19 rec1=00 rec2=04 rec3=004
[0x04] rec0=16 rec1=00 rec2=08 rec3=004
[0x05] rec0=1d rec1=00 rec2=03 rec3=000
[0x06] rec0=21 rec1=00 rec2=03 rec3=008
[0x07] rec0=02 rec1=00 rec2=06 rec3=000
[0x08] rec0=ec rec1=3f rec2=80 rec3=002
tail 0x2151fd08e83a37a0967bc 0x42a00088462060003
Free Block Chain:
0x6: 0000 00 02 00 1d 80 09 65 6e 64 20 4b 69 6c 6c 3b 09 ┆ end Kill; ┆
0x2: 0000 00 05 03 fc 80 22 65 6e 74 69 66 69 65 72 20 3a ┆ "entifier :┆
0x5: 0000 00 00 01 54 80 08 6e 20 50 70 69 20 3d 3e 08 00 ┆ T n Ppi => ┆