|
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: 13312 (0x3400) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Z80, seg_027965, seg_027d99, seg_027e83
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« └─⟦this⟧
with Adresse; with Registres; with Sequenceur; with Point_D_Arret; with Erreur, Text_Io, Ihm, Z80_Scr, Bus; package body Z80 is -- TYPES ----------------------------------------------------------------- task type T_Z80 is entry Reset; 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 ------------------------------------------------------------ procedure Creer (Fid : Ihm.Window_Id) is begin Main_Win := Fid; Tache_Z80 := new T_Z80; end Creer; ---------------------------------------------- procedure Reset is begin Tache_Z80.Reset; end Reset; ---------------------------------------------- function Signaler (Le_Signal : Z80_Defs.Signaux_Periph) return Boolean is Ok : Boolean := True; begin --select Tache_Z80.Signaler (Le_Signal); --or --delay 1.0; --Ok := False; --end select; return Ok; 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 Reg_Pc : Adresse.T_Adresse; begin delay (Duration'Small); Registres.Reset; Halt := False; Son_Mode := 0; Iff_1 := False; Iff_2 := False; Z80_Scr.Afficher_Ecran; loop select accept Signaler (Le_Signal : Z80_Defs.Signaux_Periph) do case Le_Signal is when Z80_Defs.Int => Interrupt := True; Z80_Scr.Afficher_Ecran_Reg (Z80_Scr.Int); when others => null; end case; end Signaler; or accept Reset do Registres.Reset; Halt := False; Son_Mode := 0; Iff_1 := False; Iff_2 := False; Interrupt := False; Etat_Z80 := Endormi; Bus.Reset; Ihm.Window.Put_Field (Main_Win, "MW.BB.Message", "Reset CPU OK"); Z80_Scr.Afficher_Ecran; end Reset; or accept Lancer do if Etat_Z80 = Endormi then Ihm.Window.Put_Field (Main_Win, "MW.BB.Message", "Running CPU"); Etat_Z80 := Actif; Sequenceur.Lancer; end if; end Lancer; or accept Pas_A_Pas do if Etat_Z80 = Endormi then Ihm.Window.Put_Field (Main_Win, "MW.BB.Message", "Step CPU"); Sequenceur.Lancer; end if; end Pas_A_Pas; or accept Stopper do if Etat_Z80 = Actif then Ihm.Window.Put_Field (Main_Win, "MW.BB.Message", "Stop CPU"); Etat_Z80 := Endormi; Z80_Scr.Afficher_Ecran; end if; end Stopper; else delay (Duration'Small); -- if Erreur.Presente then -- Ihm.Window.Put_Field -- (Main_Win, "MW.BB.Message", Erreur.Enregistree); -- Etat_Z80 := Endormi; -- end if; -- if Halt then -- Ihm.Window.Put_Field -- (Main_Win, "MW.BB.Message", "CPU is HALTED"); -- Halt := False; -- end if; if Etat_Z80 = Actif then Reg_Pc := Registres.Lire_Double (Z80_Defs.Pc); if Point_D_Arret.Test (Reg_Pc) then Ihm.Window.Put_Field (Main_Win, "MW.BB.Message", "Breakpoint, Stop CPU"); Etat_Z80 := Endormi; Z80_Scr.Afficher_Ecran; else Sequenceur.Lancer; end if; end if; end select; end loop; end T_Z80; end Z80;
nblk1=c nid=5 hdr6=c [0x00] rec0=28 rec1=00 rec2=01 rec3=064 [0x01] rec0=2d rec1=00 rec2=06 rec3=020 [0x02] rec0=1d rec1=00 rec2=0c rec3=01e [0x03] rec0=19 rec1=00 rec2=04 rec3=01a [0x04] rec0=16 rec1=00 rec2=07 rec3=016 [0x05] rec0=0d rec1=00 rec2=03 rec3=000 [0x06] rec0=0a rec1=00 rec2=04 rec3=000 [0x07] rec0=0a rec1=00 rec2=07 rec3=000 [0x08] rec0=16 rec1=00 rec2=07 rec3=04e [0x09] rec0=12 rec1=00 rec2=06 rec3=001 [0x0a] rec0=b9 rec1=70 rec2=00 rec3=000 [0x0b] rec0=00 rec1=80 rec2=00 rec3=000 tail 0x21721bbd083ac6eb50918 0x42a00088462060003 Free Block Chain: 0x5: 0000 00 08 00 0d 80 0a 73 6b 20 62 6f 64 79 20 54 5f ┆ sk body T_┆ 0x8: 0000 00 0b 03 fc 80 28 20 20 20 20 20 20 20 20 20 20 ┆ ( ┆ 0xb: 0000 00 09 03 fc 80 04 74 29 29 3b 04 00 2e 20 20 20 ┆ t)); . ┆ 0x9: 0000 00 02 03 fc 80 2c 20 20 20 20 20 20 55 6e 5f 4f ┆ , Un_O┆ 0x2: 0000 00 0a 00 7e 80 41 20 2d 2d 2d 2d 2d 2d 2d 2d 2d ┆ ~ A ---------┆ 0xa: 0000 00 00 00 11 80 0e 65 5f 44 6f 75 62 6c 65 20 28 ┆ e_Double (┆