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: 9982 (0x26fe) 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 Ihm, Bus, Memoire, Z80, Erreur, Z80_Scr, Z80_Defs, Verif_Input, Text_Io; with Acia_Pack, Ppi_Pack, Ptm_Pack, Point_D_Arret, Mot; package body Simu is Err_Badvalue : constant Natural := 2; --TYPES--------- type T_Kind_Win is (Z80_Main, Acia, Ppi, Ptm, Mem, None); type Win is record Kind_Win : T_Kind_Win := None; No : Natural := 0; end record; --VARIABLES----- Main_Wid : Ihm.Window_Id; Fin : Boolean := False; Tab_Win : array (1 .. Ihm.Window.Nb_Wid) of Win; Win_Mem_Open : Boolean := False; --PROCEDURES------- procedure Pushbutton is Wid : Ihm.Window_Id; begin if Ihm.Event.Get_Field (Main_Wid) = "Quit" then Z80.Detruire; Bus.Detruire; Memoire.Detruire; Fin := True; elsif Ihm.Event.Get_Field (Main_Wid) = "Stop" then Z80.Stopper; elsif Ihm.Event.Get_Field (Main_Wid) = "Reset" then Z80.Reset; elsif Ihm.Event.Get_Field (Main_Wid) = "Go" then Z80.Lancer; elsif Ihm.Event.Get_Field (Main_Wid) = "Step" then Z80.Pas_A_Pas; elsif Ihm.Event.Get_Field (Main_Wid) = "Memory" then if not Win_Mem_Open then Win_Mem_Open := True; Wid := Ihm.Window.Open ("MEM"); Memoire.Open_Window (Wid); Tab_Win (Wid).Kind_Win := Mem; Tab_Win (Wid).No := 0; else Ihm.Window.Put_Field (Main_Wid, "MW.BB.Message", "MEMORY ERROR : Memory already opened"); end if; elsif Ihm.Event.Get_Field (Main_Wid) = "DeleteAllBrk" then Point_D_Arret.Reset; else Text_Io.Put_Line ("ERROR Pushbutton invalid"); end if; end Pushbutton; procedure Close_Periph_Window is begin for I in Tab_Win'Range loop if Tab_Win (I).Kind_Win in Acia .. Ptm then Ihm.Window.Close (I); Tab_Win (I).Kind_Win := None; end if; end loop; end Close_Periph_Window; procedure Fieldenter is Wid : Ihm.Window_Id; Int : Integer; begin if Ihm.Event.Get_Field (Main_Wid) = "ConfigFile" then Z80.Stopper; Close_Periph_Window; Bus.Initialisation (Ihm.Event.Get_Value (Main_Wid)); if not Erreur.Presente then Ihm.Window.Put_Field (Main_Wid, "MW.BB.Message", "Config File loaded"); end if; elsif Ihm.Event.Get_Field (Main_Wid) = "LoadFile" then Z80.Stopper; Memoire.Charger_Fichier (Ihm.Event.Get_Value (Main_Wid)); if not Erreur.Presente then Ihm.Window.Put_Field (Main_Wid, "MW.BB.Message", "Executable File loaded"); Z80_Scr.Afficher_Ecran_Reg (Z80_Defs.Pc); end if; elsif Ihm.Event.Get_Field (Main_Wid) = "ACIA_Number" then if Verif_Input.Is_Digit (Ihm.Event.Get_Value (Main_Wid)) then Int := Natural'Value (Ihm.Event.Get_Value (Main_Wid)); if Acia_Pack.Open_Window (Int) then Wid := Ihm.Window.Open ("ACIA"); Acia_Pack.Open_Window (Int, Wid); Tab_Win (Wid).Kind_Win := Acia; Tab_Win (Wid).No := Int; end if; else Erreur.Detectee (Err_Badvalue); end if; elsif Ihm.Event.Get_Field (Main_Wid) = "PPI_Number" then if Verif_Input.Is_Digit (Ihm.Event.Get_Value (Main_Wid)) then Int := Natural'Value (Ihm.Event.Get_Value (Main_Wid)); if Ppi_Pack.Open_Window (Int) then Wid := Ihm.Window.Open ("PPI"); Ppi_Pack.Open_Window (Int, Wid); Tab_Win (Wid).Kind_Win := Ppi; Tab_Win (Wid).No := Int; end if; else Erreur.Detectee (Err_Badvalue); end if; elsif Ihm.Event.Get_Field (Main_Wid) = "TIMER_Number" then if Verif_Input.Is_Digit (Ihm.Event.Get_Value (Main_Wid)) then Int := Natural'Value (Ihm.Event.Get_Value (Main_Wid)); if Ptm_Pack.Open_Window (Int) then Wid := Ihm.Window.Open ("PTM"); Ptm_Pack.Open_Window (Int, Wid); Tab_Win (Wid).Kind_Win := Ptm; Tab_Win (Wid).No := Int; end if; else Erreur.Detectee (Err_Badvalue); end if; elsif Ihm.Event.Get_Field (Main_Wid) = "AddBrk" then Point_D_Arret.Set (Mot.Convert_String_Mot (Ihm.Event.Get_Value (Main_Wid))); elsif Ihm.Event.Get_Field (Main_Wid) = "DeleteBrk" then Point_D_Arret.Remove (Mot.Convert_String_Mot (Ihm.Event.Get_Value (Main_Wid))); else Z80_Scr.Lecture_Ecran_Reg (Ihm.Event.Get_Field (Main_Wid), Ihm.Event.Get_Value (Main_Wid)); end if; end Fieldenter; procedure Lancer is begin Main_Wid := Ihm.Window.Open ("Z80"); Tab_Win (Main_Wid).Kind_Win := Z80_Main; Tab_Win (Main_Wid).No := 1; Memoire.Creer; Bus.Creer; Z80.Creer (Main_Wid); Ihm.Window.Put_Field (Main_Wid, "MW.BB.Message", "Simulateur Z80, Copyright BMS Avril 1993, Release 1.1"); while not Fin loop delay (Duration'Small); Ihm.Xt.Process_Event; for I in Tab_Win'Range loop if not Ihm.Event.Empty (I) then if Ihm.Event."=" (Ihm.Event.Get_Event (I), Ihm.Event.Putfield) then Ihm.Window.Display_Field (I, Ihm.Event.Get_Field (I), Ihm.Event.Get_Value (I)); else case Tab_Win (I).Kind_Win is when Z80_Main => case Ihm.Event.Get_Event (I) is when Ihm.Event.Pushbutton => Pushbutton; when Ihm.Event.Fieldenter => Fieldenter; when others => Text_Io.Put_Line ("*** Event received is unknown"); end case; when Acia => Acia_Pack.Dispatch_Event (Tab_Win (I).No, Ihm.Event.Get_Event (I), Ihm.Event.Get_Field (I), Ihm.Event.Get_Value (I)); if Ihm.Event."=" (Ihm.Event.Get_Event (I), Ihm.Event.Pushbutton) and then Ihm.Event.Get_Field (I) = "Cancel" then Ihm.Window.Close (I); Tab_Win (I).Kind_Win := None; end if; when Ppi => Ppi_Pack.Dispatch_Event (Tab_Win (I).No, Ihm.Event.Get_Event (I), Ihm.Event.Get_Field (I), Ihm.Event.Get_Value (I)); if Ihm.Event."=" (Ihm.Event.Get_Event (I), Ihm.Event.Pushbutton) and then Ihm.Event.Get_Field (I) = "Cancel" then Ihm.Window.Close (I); Tab_Win (I).Kind_Win := None; end if; when Ptm => Ptm_Pack.Dispatch_Event (Tab_Win (I).No, Ihm.Event.Get_Event (I), Ihm.Event.Get_Field (I), Ihm.Event.Get_Value (I)); if Ihm.Event."=" (Ihm.Event.Get_Event (I), Ihm.Event.Pushbutton) and then Ihm.Event.Get_Field (I) = "Cancel" then Ihm.Window.Close (I); Tab_Win (I).Kind_Win := None; end if; when Mem => Memoire.Dispatch_Event (Ihm.Event.Get_Event (I), Ihm.Event.Get_Field (I), Ihm.Event.Get_Value (I)); if Ihm.Event."=" (Ihm.Event.Get_Event (I), Ihm.Event.Pushbutton) and then Ihm.Event.Get_Field (I) = "Cancel" then Ihm.Window.Close (I); Tab_Win (I).Kind_Win := None; Win_Mem_Open := False; end if; when None => Text_Io.Put_Line ("*** Event received apart to none window"); end case; end if; Ihm.Event.Next (I); end if; end loop; end loop; end Lancer; end Simu;