|
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 - 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 => ┆