DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦938bc46ba⟧ Ada Source

    Length: 8192 (0x2000)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Z80, seg_020f1d

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦5a81ac88f⟧ »Space Info Vol 1« 
        └─⟦this⟧ 

E3 Source Code



with Adresse;
with Gui_Interface;
with Registres;
with Sequenceur;
with Point_D_Arret;
with Erreur;
with Z_Debug;

package body Z80 is

    -- TYPES -----------------------------------------------------------------

    task type T_Z80 is
        pragma Os_Task (0);  
        entry Etat (Son_Etat : out T_Etat);
        entry Reset;
        entry Afficher;  
        entry Signaler (Le_Signal : Z80_Defs.Signaux_Periph);
        entry Lancer;  
        entry Pas_A_Pas;
        entry Stopper;
    end T_Z80;


    type Pt_Tache_Z80 is access T_Z80;


    -- VARIABLES -------------------------------------------------------------


    Tache_Z80 : Pt_Tache_Z80;


    -- PROCEDURES ------------------------------------------------------------

    function Etat return T_Etat is
        Son_Etat : T_Etat;
    begin  
        Tache_Z80.Etat (Son_Etat);
        return Son_Etat;
    end Etat;

    ----------------------------------------------

    procedure Creer is
    begin
        Tache_Z80 := new T_Z80;
    end Creer;

    ----------------------------------------------
    procedure Reset is
    begin
        Tache_Z80.Reset;
    end Reset;

    ----------------------------------------------

    procedure Afficher is
    begin
        Tache_Z80.Afficher;
    end Afficher;

    ----------------------------------------------

    procedure Signaler (Le_Signal : Z80_Defs.Signaux_Periph) is
    begin
        Tache_Z80.Signaler (Le_Signal);
    end Signaler;

    ----------------------------------------------

    procedure Lancer is
    begin
        Tache_Z80.Lancer;
    end Lancer;

    ----------------------------------------------

    procedure Pas_A_Pas is
    begin
        Tache_Z80.Pas_A_Pas;
    end Pas_A_Pas;

    ----------------------------------------------

    procedure Stopper is
    begin
        Tache_Z80.Stopper;
    end Stopper;
    ----------------------------------------------

    procedure Detruire is
    begin
        abort Tache_Z80.all;
    end Detruire;


    -- TACHES ----------------------------------------------------------------

    task body T_Z80 is

        Etat_Z80 : T_Etat := Endormi;
        Reg_Pc : Adresse.T_Adresse;

    begin
        loop
            select

                ---------------------------------

                accept Etat (Son_Etat : out T_Etat) do
                    Son_Etat := Etat_Z80;
                end Etat;

            or
                ---------------------------------

                accept Reset do
                    Registres.Reset;
                    Halt := False;
                    Son_Mode := 0;
                    Iff_1 := False;
                    Iff_2 := False;  
                    Etat_Z80 := Actif;
                end Reset;

                ---------------------------------
            or
                accept Afficher do
                    if Etat_Z80 = Actif then
                        null;
                        --Gui_Interface.Set_Message (Message => "Actif");
                    else
                        null;
                        --Gui_Interface.Set_Message (Message => "Endormi");
                    end if;
                end Afficher;

                ---------------------------------
            or

                accept Signaler (Le_Signal : Z80_Defs.Signaux_Periph) do
                    null;
                end Signaler;

                ---------------------------------

            or
                accept Lancer do
                    Sequenceur.Lancer;
                    Etat_Z80 := Actif;
                end Lancer;

                ---------------------------------

            or
                accept Pas_A_Pas do  
                    Sequenceur.Lancer;
                end Pas_A_Pas;

                ---------------------------------
            or  
                accept Stopper do
                    Etat_Z80 := Endormi;
                end Stopper;


                ---------------------------------

            else
                if Etat_Z80 = Actif then  
                    Reg_Pc := Registres.Lire_Double (Z80_Defs.Pc);
                    if (Erreur.Presente or else
                        Point_D_Arret.Present (Reg_Pc)) then

                        Etat_Z80 := Endormi;

                    else
                        Sequenceur.Lancer;
                    end if;  
                end if;

            end select;

        end loop;

    end T_Z80;

end Z80;

E3 Meta Data

    nblk1=7
    nid=3
    hdr6=c
        [0x00] rec0=2c rec1=00 rec2=01 rec3=048
        [0x01] rec0=00 rec1=00 rec2=02 rec3=01c
        [0x02] rec0=2f rec1=00 rec2=05 rec3=000
        [0x03] rec0=27 rec1=00 rec2=07 rec3=016
        [0x04] rec0=1f rec1=00 rec2=06 rec3=03c
        [0x05] rec0=1f rec1=00 rec2=04 rec3=000
        [0x06] rec0=00 rec1=3b rec2=41 rec3=055
    tail 0x2150d0280823d48099b0d 0x42a00088462060003
Free Block Chain:
  0x3: 0000  00 00 01 60 80 21 75 62 6c 65 20 28 5a 38 30 5f  ┆   ` !uble (Z80_┆