|
|
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: 34816 (0x8800)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Alu_8_Bit, seg_021d2a
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦5a81ac88f⟧ »Space Info Vol 1«
└─⟦this⟧
with Octet;
with Registres;
with Z80_Defs;
package body Alu_8_Bit is
-- CONSTANTES ------------------------------------------------------------
Un : constant Octet.T_Bit_Octet :=
(True, False, False, False, False, False, False, False);
Zero : constant Octet.T_Bit_Octet :=
(False, False, False, False, False, False, False, False);
Moins_Un : constant Octet.T_Bit_Octet :=
(True, True, True, True, True, True, True, True);
-- VARIABLES -------------------------------------------------------------
Operande_1, Operande_2, Flag : Octet.T_Octet := 0;
Bit_Octet_1, Bit_Octet_2, Bit_Flag : Octet.T_Bit_Octet :=
(False, False, False, False, False, False, False, False);
-- PROCEDURES ------------------------------------------------------------
procedure Inc_F (Octet_1, Flag : in out Octet.T_Octet);
procedure Dec_F (Octet_1, Flag : in out Octet.T_Octet);
procedure And_F (Octet_1 : in out Octet.T_Octet;
Octet_2 : Octet.T_Octet;
Flag : in out Octet.T_Octet);
procedure Or_F (Octet_1 : in out Octet.T_Octet;
Octet_2 : Octet.T_Octet;
Flag : in out Octet.T_Octet);
procedure Xor_F (Octet_1 : in out Octet.T_Octet;
Octet_2 : Octet.T_Octet;
Flag : in out Octet.T_Octet);
procedure Neg_F (Octet_1, Flag : in out Octet.T_Octet);
procedure Adc_F (Octet_1 : in out Octet.T_Octet;
Octet_2 : Octet.T_Octet;
Flag : in out Octet.T_Octet);
procedure Add_F (Octet_1 : in out Octet.T_Octet;
Octet_2 : Octet.T_Octet;
Flag : in out Octet.T_Octet);
procedure Sbc_F (Octet_1 : in out Octet.T_Octet;
Octet_2 : Octet.T_Octet;
Flag : in out Octet.T_Octet);
procedure Sub_F (Octet_1 : in out Octet.T_Octet;
Octet_2 : Octet.T_Octet;
Flag : in out Octet.T_Octet);
procedure Cp_F (Octet_1 : Octet.T_Octet;
Octet_2 : Octet.T_Octet;
Flag : in out Octet.T_Octet);
procedure Rl_F (Octet_1 : in out Octet.T_Octet;
Flag : in out Octet.T_Octet;
Flag_P_Z_S_A_Modifier : Boolean);
procedure Rlc_F (Octet_1 : in out Octet.T_Octet;
Flag : in out Octet.T_Octet;
Flag_P_Z_S_A_Modifier : Boolean);
procedure Rr_F (Octet_1 : in out Octet.T_Octet;
Flag : in out Octet.T_Octet;
Flag_P_Z_S_A_Modifier : Boolean);
procedure Rrc_F (Octet_1 : in out Octet.T_Octet;
Flag : in out Octet.T_Octet;
Flag_P_Z_S_A_Modifier : Boolean);
procedure Sla_F (Octet_1 : in out Octet.T_Octet;
Flag : in out Octet.T_Octet);
procedure Sra_F (Octet_1 : in out Octet.T_Octet;
Flag : in out Octet.T_Octet);
procedure Srl_F (Octet_1 : in out Octet.T_Octet;
Flag : in out Octet.T_Octet);
procedure Modif_Flag_Z_S (Bit_Octet : Octet.T_Bit_Octet;
Flag : in out Octet.T_Bit_Octet);
procedure Modif_Flag_P_Z_S (Bit_Octet : Octet.T_Bit_Octet;
Flag : in out Octet.T_Bit_Octet);
procedure Add_8_Bit_C_V_H (Bit_Octet_1 : in out Octet.T_Bit_Octet;
Bit_Octet_2 : Octet.T_Bit_Octet;
Carry : in out Boolean;
Over_Flow : in out Boolean;
Half_Carry : in out Boolean);
--------------------------------------------------------------------------
-- PUBLIC
--------------------------------------------------------------------------
procedure Fournir_Operande_1 (Op_1 : Octet.T_Octet) is
begin
Operande_1 := Op_1;
end Fournir_Operande_1;
--------------------------------------------------------------------------
procedure Fournir_Operande_2 (Op_2 : Octet.T_Octet) is
begin
Operande_2 := Op_2;
end Fournir_Operande_2;
--------------------------------------------------------------------------
function Executer (Operation : T_Operation) return Octet.T_Octet is
begin
Flag := Registres.Lire_Simple (Z80_Defs.F);
case Operation is
when Desassembleur.Inc =>
Inc_F (Operande_1, Flag);
when Desassembleur.Dec =>
Dec_F (Operande_1, Flag);
when Desassembleur.Z80_And =>
And_F (Operande_1, Operande_2, Flag);
when Desassembleur.Z80_Or =>
Or_F (Operande_1, Operande_2, Flag);
when Desassembleur.Z80_Xor =>
Xor_F (Operande_1, Operande_2, Flag);
when Desassembleur.Neg =>
Neg_F (Operande_1, Flag);
when Desassembleur.Adc =>
Adc_F (Operande_1, Operande_2, Flag);
when Desassembleur.Add =>
Add_F (Operande_1, Operande_2, Flag);
when Desassembleur.Sbc =>
Sbc_F (Operande_1, Operande_2, Flag);
when Desassembleur.Sub =>
Sub_F (Operande_1, Operande_2, Flag);
when Desassembleur.Cp =>
Cp_F (Operande_1, Operande_2, Flag);
when Desassembleur.Rl =>
Rl_F (Operande_1, Flag, True);
when Desassembleur.Rla =>
Rl_F (Operande_1, Flag, False);
when Desassembleur.Rlc =>
Rlc_F (Operande_1, Flag, True);
when Desassembleur.Rlca =>
Rlc_F (Operande_1, Flag, False);
when Desassembleur.Rr =>
Rr_F (Operande_1, Flag, True);
when Desassembleur.Rra =>
Rr_F (Operande_1, Flag, False);
when Desassembleur.Rrc =>
Rrc_F (Operande_1, Flag, True);
when Desassembleur.Rrca =>
Rrc_F (Operande_1, Flag, False);
when Desassembleur.Sla =>
Sla_F (Operande_1, Flag);
when Desassembleur.Sra =>
Sra_F (Operande_1, Flag);
when Desassembleur.Srl =>
Srl_F (Operande_1, Flag);
when others =>
null;
end case;
-- sauvegarde flags + retour resultat de l'operation
Registres.Ecrire_Simple (Z80_Defs.F, Flag);
return Operande_1;
end Executer;
--------------------------------------------------------------------------
-- PRIVE
--------------------------------------------------------------------------
procedure Inc_F (Octet_1, Flag : in out Octet.T_Octet) is
Carry : Boolean := False;
begin
Bit_Flag := Octet.Convert_Bit (Flag);
Bit_Octet_1 := Octet.Convert_Bit (Octet_1);
Add_8_Bit_C_V_H (Bit_Octet_1, Un, Carry, Bit_Flag (2), Bit_Flag (4));
Octet_1 := Octet.Convert_Octet (Bit_Octet_1);
-- flag (rq: half_carry et over_flow modifiee par add_8_bit_c_v_h)
Bit_Flag (1) := False;
Modif_Flag_Z_S (Bit_Octet_1, Bit_Flag);
Flag := Octet.Convert_Octet (Bit_Flag);
end Inc_F;
--------------------------------------------------
procedure Dec_F (Octet_1, Flag : in out Octet.T_Octet) is
Carry : Boolean := False;
begin
Bit_Flag := Octet.Convert_Bit (Flag);
Bit_Octet_1 := Octet.Convert_Bit (Octet_1);
Add_8_Bit_C_V_H (Bit_Octet_1, Moins_Un, Carry,
Bit_Flag (2), Bit_Flag (4));
Octet_1 := Octet.Convert_Octet (Bit_Octet_1);
-- flag (rq: half_carry over_flow modifiee par add_8_bit_c_v_h)
Bit_Flag (1) := True;
Bit_Flag (4) := not Bit_Flag (4);
Modif_Flag_Z_S (Bit_Octet_1, Bit_Flag);
Flag := Octet.Convert_Octet (Bit_Flag);
end Dec_F;
--------------------------------------------------
procedure And_F (Octet_1 : in out Octet.T_Octet;
Octet_2 : Octet.T_Octet;
Flag : in out Octet.T_Octet) is
begin
Octet_1 := Octet."and" (Octet_1, Octet_2);
Bit_Flag := Octet.Convert_Bit (Flag);
Bit_Octet_1 := Octet.Convert_Bit (Octet_1);
-- flag
Bit_Flag (0) := False;
Bit_Flag (1) := False;
Bit_Flag (4) := True;
Modif_Flag_P_Z_S (Bit_Octet_1, Bit_Flag);
Flag := Octet.Convert_Octet (Bit_Flag);
end And_F;
--------------------------------------------------
procedure Or_F (Octet_1 : in out Octet.T_Octet;
Octet_2 : Octet.T_Octet;
Flag : in out Octet.T_Octet) is
begin
Octet_1 := Octet."or" (Octet_1, Octet_2);
Bit_Flag := Octet.Convert_Bit (Flag);
Bit_Octet_1 := Octet.Convert_Bit (Octet_1);
-- flag
Bit_Flag (0) := False;
Bit_Flag (1) := False;
Bit_Flag (4) := False;
Modif_Flag_P_Z_S (Bit_Octet_1, Bit_Flag);
Flag := Octet.Convert_Octet (Bit_Flag);
end Or_F;
--------------------------------------------------
procedure Xor_F (Octet_1 : in out Octet.T_Octet;
Octet_2 : Octet.T_Octet;
Flag : in out Octet.T_Octet) is
begin
Octet_1 := Octet."xor" (Octet_1, Octet_2);
Bit_Flag := Octet.Convert_Bit (Flag);
Bit_Octet_1 := Octet.Convert_Bit (Octet_1);
-- flag
Bit_Flag (0) := False;
Bit_Flag (1) := False;
Bit_Flag (4) := False;
Modif_Flag_P_Z_S (Bit_Octet_1, Bit_Flag);
Flag := Octet.Convert_Octet (Bit_Flag);
end Xor_F;
--------------------------------------------------
procedure Neg_F (Octet_1, Flag : in out Octet.T_Octet) is
Carry : Boolean := False;
begin
Octet_1 := Octet."not" (Octet_1);
Bit_Octet_1 := Octet.Convert_Bit (Octet_1);
Bit_Flag := Octet.Convert_Bit (Flag);
Add_8_Bit_C_V_H (Bit_Octet_1, Un, Carry, Bit_Flag (2), Bit_Flag (4));
Octet_1 := Octet.Convert_Octet (Bit_Octet_1);
-- flag rq: carry, half_cary et over_flow modifiees ds add_8_bit_c_v_h
Bit_Flag (0) := not Carry;
Bit_Flag (1) := True;
Bit_Flag (4) := not Bit_Flag (4);
Modif_Flag_Z_S (Bit_Octet_1, Bit_Flag);
Flag := Octet.Convert_Octet (Bit_Flag);
end Neg_F;
--------------------------------------------------
procedure Adc_F (Octet_1 : in out Octet.T_Octet;
Octet_2 : Octet.T_Octet;
Flag : in out Octet.T_Octet) is
begin
Bit_Octet_1 := Octet.Convert_Bit (Octet_1);
Bit_Octet_2 := Octet.Convert_Bit (Octet_2);
Bit_Flag := Octet.Convert_Bit (Flag);
Add_8_Bit_C_V_H (Bit_Octet_1, Bit_Octet_2, Bit_Flag (0),
Bit_Flag (2), Bit_Flag (4));
Octet_1 := Octet.Convert_Octet (Bit_Octet_1);
-- flag rq: carry , half_cary et over_flow modifiees ds add_8_bit_c_v_h
Bit_Flag (1) := False;
Modif_Flag_Z_S (Bit_Octet_1, Bit_Flag);
Flag := Octet.Convert_Octet (Bit_Flag);
end Adc_F;
--------------------------------------------------
procedure Add_F (Octet_1 : in out Octet.T_Octet;
Octet_2 : Octet.T_Octet;
Flag : in out Octet.T_Octet) is
Carry : Boolean := False;
begin
Bit_Octet_1 := Octet.Convert_Bit (Octet_1);
Bit_Octet_2 := Octet.Convert_Bit (Octet_2);
Bit_Flag := Octet.Convert_Bit (Flag);
Add_8_Bit_C_V_H (Bit_Octet_1, Bit_Octet_2, Carry,
Bit_Flag (2), Bit_Flag (4));
Octet_1 := Octet.Convert_Octet (Bit_Octet_1);
-- flag rq: carry et half_cary modifiees ds add_8_bit_c_v_h
Bit_Flag (0) := Carry;
Bit_Flag (1) := False;
Modif_Flag_Z_S (Bit_Octet_1, Bit_Flag);
Flag := Octet.Convert_Octet (Bit_Flag);
end Add_F;
--------------------------------------------------
procedure Sub_F (Octet_1 : in out Octet.T_Octet;
Octet_2 : Octet.T_Octet;
Flag : in out Octet.T_Octet) is
Carry : Boolean := False;
begin
Bit_Octet_1 := Octet.Convert_Bit (Octet_1);
Bit_Octet_2 := Octet.Convert_Bit (Octet_2);
Bit_Flag := Octet.Convert_Bit (Flag);
Bit_Octet_2 := Octet."not" (Bit_Octet_2);
Add_8_Bit_C_V_H (Bit_Octet_2, Un, Carry, Bit_Flag (2), Bit_Flag (4));
Carry := False;
Add_8_Bit_C_V_H (Bit_Octet_1, Bit_Octet_2, Carry,
Bit_Flag (2), Bit_Flag (4));
Octet_1 := Octet.Convert_Octet (Bit_Octet_1);
-- flag rq: carry, half_cary et over_flow modifiees ds add_8_bit_c_v_h
Bit_Flag (0) := not Carry;
Bit_Flag (1) := True;
Bit_Flag (4) := not Bit_Flag (4);
Modif_Flag_Z_S (Bit_Octet_1, Bit_Flag);
Flag := Octet.Convert_Octet (Bit_Flag);
end Sub_F;
------------------------------------------------
procedure Sbc_F (Octet_1 : in out Octet.T_Octet;
Octet_2 : Octet.T_Octet;
Flag : in out Octet.T_Octet) is
Carry : Boolean := False;
begin
Bit_Octet_1 := Octet.Convert_Bit (Octet_1);
Bit_Octet_2 := Octet.Convert_Bit (Octet_2);
Bit_Flag := Octet.Convert_Bit (Flag);
if Bit_Flag (0) then
Add_8_Bit_C_V_H (Bit_Octet_2, Zero, Bit_Flag (0),
Bit_Flag (2), Bit_Flag (4));
end if;
Bit_Octet_2 := Octet."not" (Bit_Octet_2);
Add_8_Bit_C_V_H (Bit_Octet_2, Un, Carry, Bit_Flag (2), Bit_Flag (4));
Bit_Flag (0) := False;
Add_8_Bit_C_V_H (Bit_Octet_1, Bit_Octet_2, Bit_Flag (0),
Bit_Flag (2), Bit_Flag (4));
Octet_1 := Octet.Convert_Octet (Bit_Octet_1);
-- flag rq: carry, half_cary et over_flow modifiees ds add_8_bit_c_v_h
Bit_Flag (0) := not Bit_Flag (0);
Bit_Flag (1) := True;
Bit_Flag (4) := not Bit_Flag (4);
Modif_Flag_Z_S (Bit_Octet_1, Bit_Flag);
Flag := Octet.Convert_Octet (Bit_Flag);
end Sbc_F;
------------------------------------------------
procedure Cp_F (Octet_1 : Octet.T_Octet;
Octet_2 : Octet.T_Octet;
Flag : in out Octet.T_Octet) is
Carry : Boolean := False;
begin
Bit_Octet_1 := Octet.Convert_Bit (Octet_1);
Bit_Octet_2 := Octet.Convert_Bit (Octet_2);
Bit_Flag := Octet.Convert_Bit (Flag);
Bit_Octet_2 := Octet."not" (Bit_Octet_2);
Add_8_Bit_C_V_H (Bit_Octet_2, Un, Carry, Bit_Flag (2), Bit_Flag (4));
Carry := False;
Add_8_Bit_C_V_H (Bit_Octet_1, Bit_Octet_2, Carry,
Bit_Flag (2), Bit_Flag (4));
-- flag rq: carry, half_cary et over_flow modifiees ds add_8_bit_c_v_h
Bit_Flag (0) := Octet_1 < Octet_2;
Bit_Flag (1) := True;
Bit_Flag (4) := not Bit_Flag (4);
Modif_Flag_Z_S (Bit_Octet_1, Bit_Flag);
Flag := Octet.Convert_Octet (Bit_Flag);
end Cp_F;
--------------------------------------------------
-- DECALAGES
--------------------------------------------------
function Modif_Flag_Decalage
(Bit_Octet_1 : Octet.T_Bit_Octet;
Bit_Flag : Octet.T_Bit_Octet;
Flag_P_Z_S_A_Modifier : Boolean) return Octet.T_Octet is
Le_Bit_Flag : Octet.T_Bit_Octet := Bit_Flag;
begin
Le_Bit_Flag (1) := False;
Le_Bit_Flag (4) := False;
if Flag_P_Z_S_A_Modifier then
Modif_Flag_P_Z_S (Bit_Octet_1, Le_Bit_Flag);
end if;
return Octet.Convert_Octet (Le_Bit_Flag);
end Modif_Flag_Decalage;
--------------------------------------------------
procedure Rl_F (Octet_1 : in out Octet.T_Octet;
Flag : in out Octet.T_Octet;
Flag_P_Z_S_A_Modifier : Boolean) is
Sauv_Carry : Boolean;
begin
Bit_Octet_1 := Octet.Convert_Bit (Octet_1);
Bit_Flag := Octet.Convert_Bit (Flag);
Sauv_Carry := Bit_Flag (0);
Bit_Flag (0) := Bit_Octet_1 (7);
for I in reverse 1 .. 7 loop
Bit_Octet_1 (I) := Bit_Octet_1 (I - 1);
end loop;
Bit_Octet_1 (0) := Sauv_Carry;
Octet_1 := Octet.Convert_Octet (Bit_Octet_1);
-- flag (rq carry modifiee ds la boucle)
Flag := Modif_Flag_Decalage
(Bit_Octet_1, Bit_Flag, Flag_P_Z_S_A_Modifier);
end Rl_F;
--------------------------------------------------
procedure Rlc_F (Octet_1 : in out Octet.T_Octet;
Flag : in out Octet.T_Octet;
Flag_P_Z_S_A_Modifier : Boolean) is
begin
Bit_Octet_1 := Octet.Convert_Bit (Octet_1);
Bit_Flag := Octet.Convert_Bit (Flag);
Bit_Flag (0) := Bit_Octet_1 (7);
for I in reverse 1 .. 7 loop
Bit_Octet_1 (I) := Bit_Octet_1 (I - 1);
end loop;
Bit_Octet_1 (0) := Bit_Flag (0);
Octet_1 := Octet.Convert_Octet (Bit_Octet_1);
-- flag (rq carry modifiee ds la boucle)
Flag := Modif_Flag_Decalage
(Bit_Octet_1, Bit_Flag, Flag_P_Z_S_A_Modifier);
end Rlc_F;
--------------------------------------------------
procedure Rr_F (Octet_1 : in out Octet.T_Octet;
Flag : in out Octet.T_Octet;
Flag_P_Z_S_A_Modifier : Boolean) is
Sauv_Carry : Boolean;
begin
Bit_Octet_1 := Octet.Convert_Bit (Octet_1);
Bit_Flag := Octet.Convert_Bit (Flag);
Sauv_Carry := Bit_Flag (0);
Bit_Flag (0) := Bit_Octet_1 (0);
for I in 0 .. 6 loop
Bit_Octet_1 (I) := Bit_Octet_1 (I + 1);
end loop;
Bit_Octet_1 (7) := Sauv_Carry;
Octet_1 := Octet.Convert_Octet (Bit_Octet_1);
-- flag (rq carry modifiee ds la boucle)
Flag := Modif_Flag_Decalage
(Bit_Octet_1, Bit_Flag, Flag_P_Z_S_A_Modifier);
end Rr_F;
--------------------------------------------------
procedure Rrc_F (Octet_1 : in out Octet.T_Octet;
Flag : in out Octet.T_Octet;
Flag_P_Z_S_A_Modifier : Boolean) is
begin
Bit_Octet_1 := Octet.Convert_Bit (Octet_1);
Bit_Flag := Octet.Convert_Bit (Flag);
Bit_Flag (0) := Bit_Octet_1 (0);
for I in 0 .. 6 loop
Bit_Octet_1 (I) := Bit_Octet_1 (I + 1);
end loop;
Bit_Octet_1 (7) := Bit_Flag (0);
Octet_1 := Octet.Convert_Octet (Bit_Octet_1);
-- flag (rq carry modifiee ds la boucle)
Flag := Modif_Flag_Decalage
(Bit_Octet_1, Bit_Flag, Flag_P_Z_S_A_Modifier);
end Rrc_F;
--------------------------------------------------
procedure Sla_F (Octet_1 : in out Octet.T_Octet;
Flag : in out Octet.T_Octet) is
begin
Bit_Octet_1 := Octet.Convert_Bit (Octet_1);
Bit_Flag := Octet.Convert_Bit (Flag);
Bit_Flag (0) := Bit_Octet_1 (7);
for I in reverse 1 .. 7 loop
Bit_Octet_1 (I) := Bit_Octet_1 (I - 1);
end loop;
Bit_Octet_1 (0) := False;
Octet_1 := Octet.Convert_Octet (Bit_Octet_1);
-- flag (rq carry modifiee ds la boucle)
Flag := Modif_Flag_Decalage (Bit_Octet_1, Bit_Flag, True);
end Sla_F;
--------------------------------------------------
procedure Sra_F (Octet_1 : in out Octet.T_Octet;
Flag : in out Octet.T_Octet) is
begin
Bit_Octet_1 := Octet.Convert_Bit (Octet_1);
Bit_Flag := Octet.Convert_Bit (Flag);
Bit_Flag (0) := Bit_Octet_1 (0);
for I in 0 .. 6 loop
Bit_Octet_1 (I) := Bit_Octet_1 (I + 1);
end loop;
Octet_1 := Octet.Convert_Octet (Bit_Octet_1);
-- flag (rq carry modifiee ds la boucle)
Flag := Modif_Flag_Decalage (Bit_Octet_1, Bit_Flag, True);
end Sra_F;
--------------------------------------------------
procedure Srl_F (Octet_1 : in out Octet.T_Octet;
Flag : in out Octet.T_Octet) is
begin
Bit_Octet_1 := Octet.Convert_Bit (Octet_1);
Bit_Flag := Octet.Convert_Bit (Flag);
Bit_Flag (0) := Bit_Octet_1 (0);
for I in 0 .. 6 loop
Bit_Octet_1 (I) := Bit_Octet_1 (I + 1);
end loop;
Bit_Octet_1 (7) := False;
Octet_1 := Octet.Convert_Octet (Bit_Octet_1);
-- flag (rq carry modifiee ds la boucle)
Flag := Modif_Flag_Decalage (Bit_Octet_1, Bit_Flag, True);
end Srl_F;
--------------------------------------------------
-- PROCEDURES INTERNES (privees)
--------------------------------------------------
procedure Add_8_Bit_C_V_H (Bit_Octet_1 : in out Octet.T_Bit_Octet;
Bit_Octet_2 : Octet.T_Bit_Octet;
Carry : in out Boolean;
Over_Flow : in out Boolean;
Half_Carry : in out Boolean) is
-- ajoute 2 octets entre eux en tenant compte de la carry passee
-- en parametre et en modifiant la carry, la half_carry et l'over_flow
-- qui on ete passe en parametre
begin
for I in Octet.Num_Bit loop
Octet.Add_Bit_C (Bit_Octet_1 (I), Bit_Octet_2 (I), Carry);
if I = 3 then
Half_Carry := Carry;
end if;
if I = 6 then
Over_Flow := Carry;
end if;
end loop;
Over_Flow := Over_Flow xor Carry;
end Add_8_Bit_C_V_H;
--------------------------------------------------
procedure Modif_Flag_Z_S (Bit_Octet : Octet.T_Bit_Octet;
Flag : in out Octet.T_Bit_Octet) is
begin
-- flag Z
Flag (6) := True;
for I in Octet.Num_Bit loop
if Bit_Octet (I) then
Flag (6) := False;
exit;
end if;
end loop;
-- flag S
Bit_Flag (7) := Bit_Octet (7);
end Modif_Flag_Z_S;
--------------------------------------------------
procedure Modif_Flag_P_Z_S (Bit_Octet : Octet.T_Bit_Octet;
Flag : in out Octet.T_Bit_Octet) is
Nb_Bit_A_Un : Octet.T_Octet := 0;
begin
-- flag P
for I in Octet.Num_Bit loop
if Bit_Octet (I) then
Nb_Bit_A_Un := Nb_Bit_A_Un + 1;
end if;
end loop;
if (Nb_Bit_A_Un mod 2) = 1 then
Flag (2) := False;
else
Flag (2) := True;
end if;
-- flag Z
Flag (6) := (Nb_Bit_A_Un = 0);
-- flag S
Bit_Flag (7) := Bit_Octet (7);
end Modif_Flag_P_Z_S;
--------------------------------------------------
end Alu_8_Bit;
nblk1=21
nid=21
hdr6=3e
[0x00] rec0=1f rec1=00 rec2=01 rec3=034
[0x01] rec0=00 rec1=00 rec2=14 rec3=012
[0x02] rec0=14 rec1=00 rec2=03 rec3=004
[0x03] rec0=14 rec1=00 rec2=06 rec3=016
[0x04] rec0=06 rec1=00 rec2=1e rec3=022
[0x05] rec0=17 rec1=00 rec2=17 rec3=054
[0x06] rec0=0b rec1=00 rec2=08 rec3=034
[0x07] rec0=20 rec1=00 rec2=0a rec3=064
[0x08] rec0=21 rec1=00 rec2=0b rec3=050
[0x09] rec0=24 rec1=00 rec2=04 rec3=010
[0x0a] rec0=00 rec1=00 rec2=1b rec3=020
[0x0b] rec0=1f rec1=00 rec2=05 rec3=02c
[0x0c] rec0=1e rec1=00 rec2=07 rec3=020
[0x0d] rec0=1f rec1=00 rec2=12 rec3=016
[0x0e] rec0=1b rec1=00 rec2=0c rec3=064
[0x0f] rec0=00 rec1=00 rec2=0d rec3=006
[0x10] rec0=21 rec1=00 rec2=0e rec3=028
[0x11] rec0=1e rec1=00 rec2=0f rec3=02c
[0x12] rec0=1f rec1=00 rec2=1a rec3=07a
[0x13] rec0=22 rec1=00 rec2=09 rec3=004
[0x14] rec0=22 rec1=00 rec2=1c rec3=046
[0x15] rec0=22 rec1=00 rec2=13 rec3=006
[0x16] rec0=1f rec1=00 rec2=20 rec3=056
[0x17] rec0=23 rec1=00 rec2=11 rec3=032
[0x18] rec0=23 rec1=00 rec2=10 rec3=002
[0x19] rec0=21 rec1=00 rec2=15 rec3=050
[0x1a] rec0=19 rec1=00 rec2=16 rec3=040
[0x1b] rec0=1a rec1=00 rec2=18 rec3=076
[0x1c] rec0=01 rec1=00 rec2=1d rec3=002
[0x1d] rec0=29 rec1=00 rec2=02 rec3=020
[0x1e] rec0=0c rec1=00 rec2=19 rec3=000
[0x1f] rec0=0c rec1=00 rec2=19 rec3=000
[0x20] rec0=0c rec1=00 rec2=19 rec3=000
tail 0x2151d19c8838f75846255 0x42a00088462060003
Free Block Chain:
0x21: 0000 00 1f 00 75 80 01 3b 01 00 00 00 00 25 20 20 20 ┆ u ; % ┆
0x1f: 0000 00 00 00 5f 00 36 20 20 20 20 2d 2d 2d 2d 2d 2d ┆ _ 6 ------┆