|
|
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: 22528 (0x5800)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Bus, package body Init, seg_00f4d4
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦5a81ac88f⟧ »Space Info Vol 1«
└─⟦this⟧
with Z80_Defs;
with Z80;
with Memoire;
with Text_Io;
with Adresse;
with Mot;
with Octet;
with Z_Debug;
use Z_Debug;
package body Bus is
-- CONSTANTES -----------------------------------------------------------
Taille_Bloc_Mem : constant Positive := 2048;
Nb_De_Blocs : constant Natural := 32;
Nb_Periph_Max : constant Integer := 20;
-- TYPES -----------------------------------------------------------------
type T_It_Connectee is (Int, Nmi, Busrq, Rien);
type T_Descripteur_Periph is
record
Ad_Debut : Adresse.T_Adresse;
Ad_Fin : Adresse.T_Adresse;
Id_Periph : Integer;
It_Connectee : T_It_Connectee;
It_Demandee : Boolean;
end record;
type T_Mem is (Rien, Ram, Rom);
subtype Num_Bloc is Natural range 0 .. (Nb_De_Blocs - 1);
type T_Descripteur_Memoire is
record
Bloc_Physique : Num_Bloc := 0;
Type_De_Mem : T_Mem := Rien;
end record;
-- VARIABLES -------------------------------------------------------------
Adresse_Donnee : Adresse.T_Adresse;
Donnee : Octet.T_Octet;
Operation : Z80.T_Operation;
Descr_Memoire : array (Num_Bloc) of T_Descripteur_Memoire;
Descr_Periph : array (1 .. Nb_Periph_Max) of T_Descripteur_Periph;
La_Fin : Boolean := False;
-- PAQUETAGES ------------------------------------------------------------
package Init is
procedure Initialisation (Nom_De_Fichier : String);
end Init;
package body Init is separate;
-- PROCEDURES ------------------------------------------------------------
procedure Lecture_Donnee (Ad : Adresse.T_Adresse;
Un_Octet : in out Octet.T_Octet);
procedure Ecriture_Donnee (Ad : Adresse.T_Adresse; Donnee : Octet.T_Octet);
-- TACHES ----------------------------------------------------------------
task body T_Bus is
use Z80;
begin
while (not La_Fin) loop
select
---------------------------------
accept Reset do
Init.Initialisation ("Toto");
end Reset;
---------------------------------
or
accept Afficher do
[statement]
end Afficher;
---------------------------------
or
accept Acces_Octet (Quelle_Operation : T_Operation;
Ad : Adresse.T_Adresse;
Donnee : in out Octet.T_Octet) do
Operation := Quelle_Operation;
case Quelle_Operation is
when Fetch | Memory_Read =>
--Text_Io.Put_Line
-- ("debut acces_octet en lecture de bus");
-- Tache_Memoire.Acces_Octet
-- (Memoire.Lire, Ad, Donnee);
Lecture_Donnee (Ad, Donnee); -- MY
-- Text_Io.Put_Line
-- ("fin acces_octet en lecture de bus");
when Memory_Write =>
-- Text_Io.Put_Line
-- ("debut acces_octet en ecriture de bus");
-- Tache_Memoire.Acces_Octet
-- (Memoire.Ecrire, Ad, Donnee);
Ecriture_Donnee (Ad, Donnee); -- MY
-- Text_Io.Put_Line
-- ("fin acces_octet en ecriture de bus");
when Io_Read =>
[statement]
when Io_Write =>
[statement]
end case;
end Acces_Octet;
---------------------------------
or
accept Acces_Mot (Quelle_Operation : Z80.T_Operation;
Ad : Adresse.T_Adresse;
Donnee : in out Mot.T_Mot) do
Operation := Quelle_Operation;
case Quelle_Operation is
when Fetch | Memory_Read =>
Text_Io.Put_Line
("debut acces_mot en lecture de bus");
Tache_Memoire.Acces_Mot (Memoire.Lire, Ad, Donnee);
Text_Io.Put_Line
("fin acces_mot en lecture de bus");
when Memory_Write =>
Text_Io.Put_Line
("debut acces_mot en ecriture de bus");
Tache_Memoire.Acces_Mot
(Memoire.Ecrire, Ad, Donnee);
Text_Io.Put_Line
("fin acces_mot en ecriture de bus");
when Io_Read =>
[statement]
when Io_Write =>
[statement]
end case;
end Acces_Mot;
---------------------------------
or
accept Signal_Periph (Periph_Id : Integer;
Signal : Z80_Defs.Signaux_Periph) do
[statement]
end Signal_Periph;
---------------------------------
or
accept Signal_Z80 (Signal : Z80_Defs.Signaux_Z80) do
[statement]
end Signal_Z80;
---------------------------------
or
accept
Deposer_Vecteur_It (Vecteur : Octet.T_Octet) do
[statement]
end Deposer_Vecteur_It;
---------------------------------
or
accept Lire_Vecteur_It (Vecteur : in out Octet.T_Octet) do
[statement]
end Lire_Vecteur_It;
---------------------------------
or
accept Fin do
La_Fin := True;
end Fin;
end select;
end loop;
end T_Bus;
-- PROCEDURES ---------------------------------------------
-- PROCEDURES POUR LECTURE ECRITURE MEMOIRE ---------------
procedure Decode_Adresse (Ad : in out Adresse.T_Adresse; Mem : out T_Mem) is
Bloc_Log, Bloc_Phy : Num_Bloc := 0;
Offset : Adresse.T_Adresse := 0;
begin
Bloc_Log := Ad / Taille_Bloc_Mem;
Bloc_Phy := Descr_Memoire (Bloc_Log).Bloc_Physique;
Mem := Descr_Memoire (Bloc_Phy).Type_De_Mem;
Offset := Ad mod Taille_Bloc_Mem;
Ad := Bloc_Phy * Taille_Bloc_Mem + Offset;
end Decode_Adresse;
-----------------------------------------------------------
procedure Lecture_Donnee (Ad : Adresse.T_Adresse;
Un_Octet : in out Octet.T_Octet) is
Ad_Donnee : Adresse.T_Adresse := Ad;
Mem : T_Mem := Rien;
begin
Decode_Adresse (Ad_Donnee, Mem);
case Mem is
when Ram | Rom =>
Tache_Memoire.Acces_Octet (Memoire.Lire, Ad_Donnee, Un_Octet);
when Rien =>
Un_Octet := 255;
-- Lecture a un emplacement vide !!!!
Text_Io.Put_Line ("LECTURE A UN EMPLACEMENT NON DECLARE");
end case;
end Lecture_Donnee;
-----------------------------------------------------------
procedure Ecriture_Donnee (Ad : Adresse.T_Adresse;
Donnee : Octet.T_Octet) is
Un_Octet : Octet.T_Octet := Donnee;
Ad_Donnee : Adresse.T_Adresse := Ad;
Mem : T_Mem := Rien;
begin
Decode_Adresse (Ad_Donnee, Mem);
case Mem is
when Ram =>
Tache_Memoire.Acces_Octet (Memoire.Ecrire, Ad_Donnee, Un_Octet);
when Rom =>
-- Ecriture en ROM !!!
Text_Io.Put_Line (" ECRITURE EN ROM !!!!");
null;
when Rien =>
-- Ecriture a un emplacement vide !!!!
Text_Io.Put_Line ("ECRITURE A UN EMPLACEMENT VIDE");
null;
end case;
end Ecriture_Donnee;
end Bus;
nblk1=15
nid=6
hdr6=14
[0x00] rec0=2d rec1=00 rec2=01 rec3=032
[0x01] rec0=20 rec1=00 rec2=0a rec3=03a
[0x02] rec0=23 rec1=00 rec2=05 rec3=05c
[0x03] rec0=19 rec1=00 rec2=09 rec3=026
[0x04] rec0=11 rec1=00 rec2=08 rec3=050
[0x05] rec0=18 rec1=00 rec2=02 rec3=074
[0x06] rec0=20 rec1=00 rec2=0c rec3=008
[0x07] rec0=25 rec1=00 rec2=03 rec3=03c
[0x08] rec0=1d rec1=00 rec2=0b rec3=05c
[0x09] rec0=0a rec1=00 rec2=04 rec3=000
[0x0a] rec0=0a rec1=00 rec2=04 rec3=000
[0x0b] rec0=18 rec1=00 rec2=08 rec3=056
[0x0c] rec0=1a rec1=00 rec2=05 rec3=024
[0x0d] rec0=01 rec1=00 rec2=06 rec3=050
[0x0e] rec0=18 rec1=00 rec2=02 rec3=074
[0x0f] rec0=20 rec1=00 rec2=03 rec3=008
[0x10] rec0=27 rec1=00 rec2=0c rec3=038
[0x11] rec0=1e rec1=00 rec2=0b rec3=05c
[0x12] rec0=06 rec1=00 rec2=04 rec3=000
[0x13] rec0=00 rec1=00 rec2=00 rec3=000
[0x14] rec0=00 rec1=00 rec2=00 rec3=000
tail 0x2150b562a822b4fe40540 0x42a00088462060003
Free Block Chain:
0x6: 0000 00 07 01 b2 80 37 20 20 61 63 63 65 70 74 20 41 ┆ 7 accept A┆
0x7: 0000 00 0d 03 fc 80 30 20 20 20 20 20 20 20 20 43 61 ┆ 0 Ca┆
0xd: 0000 00 0e 03 fc 80 24 20 20 20 20 20 20 20 20 20 20 ┆ $ ┆
0xe: 0000 00 0f 03 fc 80 39 3a 3d 20 48 65 78 61 20 2a 20 ┆ 9:= Hexa * ┆
0xf: 0000 00 10 03 fc 80 2d 20 20 20 20 20 20 20 20 20 20 ┆ - ┆
0x10: 0000 00 11 03 fc 00 12 20 20 20 20 20 20 20 20 20 20 ┆ ┆
0x11: 0000 00 15 03 fb 80 1c 20 20 54 65 78 74 5f 49 6f 2e ┆ Text_Io.┆
0x15: 0000 00 12 03 fc 80 16 64 65 5f 41 5f 45 78 65 63 75 ┆ de_A_Execu┆
0x12: 0000 00 14 03 fc 80 19 65 78 61 5f 32 2c 20 4c 69 72 ┆ exa_2, Lir┆
0x14: 0000 00 13 00 0a 80 07 61 5f 32 2c 20 4c 69 07 4c 69 ┆ a_2, Li Li┆
0x13: 0000 00 00 00 f9 80 11 28 6e 6f 74 20 4c 61 5f 46 69 ┆ (not La_Fi┆