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

⟦ea96326b1⟧ Ada Source

    Length: 7168 (0x1c00)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Z80, seg_00f504

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 Registres;
with Sequenceur;
with Text_Io;

package body Z80 is

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

    type T_Etat is (Inexistant, Pret, Actif, Endormi);

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

    Etat : T_Etat := Inexistant;
    La_Fin : Boolean := False;


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

    task body T_Z80 is
    begin
        while (not La_Fin) loop
            select

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

                when (Etat = Inexistant) =>
                    accept Reset do
                        Registres.Reset;
                        Halt := False;
                        Son_Mode := 0;
                        Iff_1 := False;
                        Iff_2 := False;  
                        Etat := Pret;
                    end Reset;

                    ---------------------------------
            or
                when (Etat = Endormi or Etat = Pret) =>
                    accept Afficher do
                        Text_Io.Put_Line
                           ("== Z80 ==============================");
                        Text_Io.Put_Line ("");
                        Text_Io.Put ("Halt : ");
                        Text_Io.Put_Line (Boolean'Image (Halt));
                        Text_Io.Put ("Mode : ");
                        Text_Io.Put_Line (Z80_Defs.Mode'Image (Son_Mode));
                        Text_Io.Put ("IFF_1 : ");
                        Text_Io.Put_Line (Boolean'Image (Iff_1));
                        Text_Io.Put ("IFF_2 : ");
                        Text_Io.Put_Line (Boolean'Image (Iff_2));
                        Text_Io.Put_Line ("");
                        Registres.Afficher;
                    end Afficher;

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

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

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

            or
                when (Etat = Pret) =>
                    accept Lancer do
                        Etat := Actif;
                    end Lancer;

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

            or
                when (Etat = Endormi or Etat = Pret) =>
                    accept Pas_A_Pas do
                        Sequenceur.Lancer;
                        Registres.Afficher;
                    end Pas_A_Pas;

                    ---------------------------------
            or
                accept Stopper do
                    Etat := Inexistant;
                end Stopper;

                ---------------------------------
            or  
                when (Etat = Actif) =>
                    accept Endormir do
                        Etat := Endormi;
                    end Endormir;

                    ---------------------------------
            or  
                when (Etat = Endormi) =>
                    accept Reveiller do
                        Etat := Actif;
                    end Reveiller;

                    ---------------------------------
            or
                accept Fin do
                    La_Fin := True;
                end Fin;

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

            else
                if Etat = Actif then
                    if (Registres.Lire_Double (Z80_Defs.Pc) = 16#38#) then
                        Etat := Pret;  
                    else
                        Sequenceur.Lancer;
                        Registres.Afficher;
                    end if;  
                end if;

            end select;

        end loop;

    end T_Z80;

end Z80;

E3 Meta Data

    nblk1=6
    nid=5
    hdr6=8
        [0x00] rec0=25 rec1=00 rec2=01 rec3=034
        [0x01] rec0=16 rec1=00 rec2=06 rec3=016
        [0x02] rec0=1f rec1=00 rec2=02 rec3=020
        [0x03] rec0=23 rec1=00 rec2=03 rec3=000
        [0x04] rec0=1a rec1=00 rec2=06 rec3=001
        [0x05] rec0=1f rec1=d0 rec2=21 rec3=300
    tail 0x2150b5706822b50300b77 0x42a00088462060003
Free Block Chain:
  0x5: 0000  00 04 00 09 80 06 2d 2d 2d 2d 2d 2d 06 07 2d 2d  ┆      ------  --┆
  0x4: 0000  00 00 02 ca 80 1e 20 20 20 20 2d 2d 20 20 20 20  ┆          --    ┆