DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ B T ┃
Length: 7875 (0x1ec3) Types: TextFile Names: »B«
└─⟦149519bd4⟧ Bits:30000546 8mm tape, Rational 1000, !projects 93-07-13 └─ ⟦124ff5788⟧ »DATA« └─⟦this⟧ └─⟦a7d1ea751⟧ Bits:30000550 8mm tape, Rational 1000, !users!projects 94_04_11 └─ ⟦129cab021⟧ »DATA« └─⟦this⟧ └─⟦f64eaa120⟧ Bits:30000752 8mm tape, Rational 1000, !projects 93 02 16 └─ ⟦6f12a12be⟧ »DATA« └─⟦this⟧ └─⟦2f6cfab89⟧ Bits:30000547 8mm tape, Rational 1000, !projects 94-01-04 └─ ⟦d65440be7⟧ »DATA« └─⟦this⟧
with Z80_Defs; with Z80; with Memoire; with Text_Io; with Adresse; with Mot; with Octet; with Z_Debug; with Erreur; use Z_Debug; package body Bus is -- CONSTANTES ----------------------------------------------------------- Taille_Bloc_Mem : constant Positive := 256; Nb_De_Blocs : constant Natural := 256; 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; task type T_Bus is pragma Os_Task (0); entry Afficher; entry Acces_Octet (Quelle_Operation : Z80.T_Operation; Ad : Adresse.T_Adresse; Donnee : in out Octet.T_Octet); entry Signal_Periph (Periph_Id : Integer; Signal : Z80_Defs.Signaux_Periph); entry Signal_Z80 (Signal : Z80_Defs.Signaux_Z80); entry Deposer_Vecteur_It (Vecteur : Octet.T_Octet); entry Lire_Vecteur_It (Vecteur : in out Octet.T_Octet); end T_Bus; type Pt_Tache_Bus is access T_Bus; -- 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; Tache_Bus : Pt_Tache_Bus; -- PAQUETAGES ------------------------------------------------------------ package Init is procedure Initialisation (Nom_De_Fichier : String); end Init; package body Init is separate; -- PROCEDURES ------------------------------------------------------------ procedure Creer is begin Tache_Bus := new T_Bus; end Creer; ------------------------------------ procedure Initialisation (Nom_Fichier : String) is begin Init.Initialisation (Nom_Fichier); end Initialisation; ------------------------------------ procedure Afficher is begin Tache_Bus.Afficher; end Afficher; ------------------------------------ procedure Acces_Octet (Quelle_Operation : Z80.T_Operation; Ad : Adresse.T_Adresse; Donnee : in out Octet.T_Octet) is begin Tache_Bus.Acces_Octet (Quelle_Operation, Ad, Donnee); end Acces_Octet; ------------------------------------ procedure Signal_Periph (Periph_Id : Integer; Signal : Z80_Defs.Signaux_Periph) is begin Tache_Bus.Signal_Periph (Periph_Id, Signal); end Signal_Periph; ------------------------------------ procedure Signal_Z80 (Signal : Z80_Defs.Signaux_Z80) is begin Tache_Bus.Signal_Z80 (Signal); end Signal_Z80; ------------------------------------ procedure Deposer_Vecteur_It (Vecteur : Octet.T_Octet) is begin Tache_Bus.Deposer_Vecteur_It (Vecteur); end Deposer_Vecteur_It; ------------------------------------ procedure Lire_Vecteur_It (Vecteur : in out Octet.T_Octet) is begin Tache_Bus.Lire_Vecteur_It (Vecteur); end Lire_Vecteur_It; ------------------------------------ procedure Detruire is begin abort Tache_Bus.all; end Detruire; -- 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 => Memoire.Acces_Octet (Memoire.Lire, Ad_Donnee, Un_Octet); when Rien => --Erreur: Lecture a un emplacement memoire non defini !!! Erreur.Detectee (3); Memoire.Acces_Octet (Memoire.Lire, Ad_Donnee, Un_Octet); 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 => Memoire.Acces_Octet (Memoire.Ecrire, Ad_Donnee, Un_Octet); when Rom => --Erreur: Ecriture en ROM !!! Erreur.Detectee (1); when Rien => --Erreur: Ecriture a un emplacement memoire non defini !!! Erreur.Detectee (2); end case; end Ecriture_Donnee; -- TACHES ---------------------------------------------------------------- task body T_Bus is use Z80; begin while True loop select accept Afficher do null; 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 => Lecture_Donnee (Ad, Donnee); -- MY when Memory_Write => Ecriture_Donnee (Ad, Donnee); -- MY when Io_Read => null; when Io_Write => null; end case; end Acces_Octet; --------------------------------- or accept Signal_Periph (Periph_Id : Integer; Signal : Z80_Defs.Signaux_Periph) do null; end Signal_Periph; --------------------------------- or accept Signal_Z80 (Signal : Z80_Defs.Signaux_Z80) do null; end Signal_Z80; --------------------------------- or accept Deposer_Vecteur_It (Vecteur : Octet.T_Octet) do null; end Deposer_Vecteur_It; --------------------------------- or accept Lire_Vecteur_It (Vecteur : in out Octet.T_Octet) do null; end Lire_Vecteur_It; end select; end loop; end T_Bus; end Bus;