|
|
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: 13312 (0x3400)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Z80, seg_027521
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦5a81ac88f⟧ »Space Info Vol 1«
└─⟦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=7
hdr6=e
[0x00] rec0=28 rec1=00 rec2=01 rec3=064
[0x01] rec0=2d rec1=00 rec2=06 rec3=020
[0x02] rec0=07 rec1=00 rec2=05 rec3=00e
[0x03] rec0=1a rec1=00 rec2=0c rec3=006
[0x04] rec0=18 rec1=00 rec2=08 rec3=034
[0x05] rec0=16 rec1=00 rec2=03 rec3=026
[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 0x217210aa083aa7500432d 0x42a00088462060003
Free Block Chain:
0x7: 0000 00 0b 00 eb 80 16 38 30 5f 53 63 72 2e 41 66 66 ┆ 80_Scr.Aff┆
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 (┆