|
|
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: 12288 (0x3000)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Alu_16_Bit, seg_00fa00, seg_020ed4, seg_021d18, seg_0274ff, seg_027e61
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦5a81ac88f⟧ »Space Info Vol 1«
└─⟦this⟧
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦this⟧
with Binaire;
with Registres;
with Z80_Defs;
package body Alu_16_Bit is
-- TYPES -------------------------------------------------------
package Bin_8 is new Binaire (Nb_De_Bit => 8);
subtype T_Bit_Octet is Bin_8.Val_Binaire;
use Bin_8;
package Bin_16 is new Binaire (Nb_De_Bit => 16);
subtype T_Bit_Mot is Bin_16.Val_Binaire;
use Bin_16;
-- PROCEDURES --------------------------------------------------
procedure Add_F;
procedure Adc_F;
procedure Sbc_F;
procedure Inc_F;
procedure Dec_F;
-- VARIABLES --------------------------------------------------
Mot_Bit_1, Mot_Bit_2 : T_Bit_Mot;
Flag : T_Bit_Octet;
---------------------------------------------------------------
-- INTERFACE
---------------------------------------------------------------
function Executer (Operation : T_Operation) return Mot.T_Mot is
use Registres;
begin
Flag := Convert_Bit (Lire_Simple (Le_Registre => Z80_Defs.F));
case Operation is
when Desassembleur.Inc =>
Inc_F;
when Desassembleur.Dec =>
Dec_F;
when Desassembleur.Add =>
Add_F;
when Desassembleur.Adc =>
Adc_F;
when Desassembleur.Sbc =>
Sbc_F;
end case;
Ecrire_Simple (Le_Registre => Z80_Defs.F,
Un_Octet => Convert_Val (Flag));
return Convert_Val (La_Valeur_Binaire => Mot_Bit_1);
end Executer;
procedure Fournir_Operande_1 (Op_1 : Mot.T_Mot) is
begin
Mot_Bit_1 := Convert_Bit (La_Valeur => Op_1);
end Fournir_Operande_1;
procedure Fournir_Operande_2 (Op_2 : Mot.T_Mot) is
begin
Mot_Bit_2 := Convert_Bit (La_Valeur => Op_2);
end Fournir_Operande_2;
--------------------------------------------------
-- PROCEDURES INTERNES (privees)
--------------------------------------------------
procedure Adc (Le_Bit_Mot_1 : in out T_Bit_Mot;
Le_Bit_Mot_2 : T_Bit_Mot;
C : in out Boolean) is
H, V : Boolean;
begin
Add_H_V_C (Le_Bit_Mot_1, Le_Bit_Mot_2, H, V, C);
end Adc;
--------------------------------------------------
procedure Add (Le_Bit_Mot_1 : in out T_Bit_Mot; Le_Bit_Mot_2 : T_Bit_Mot) is
H, V : Boolean;
C : Boolean := False;
begin
Add_H_V_C (Le_Bit_Mot_1, Le_Bit_Mot_2, H, V, C);
end Add;
--------------------------------------------------
procedure Inc (Le_Bit_Mot : in out T_Bit_Mot) is
Un : T_Bit_Mot := (True, False, False, False, False, False,
False, False, False, False, False,
False, False, False, False, False);
begin
Add (Le_Bit_Mot, Un);
end Inc;
--------------------------------------------------
procedure Dec (Le_Bit_Mot : in out T_Bit_Mot) is
Moins_Un : T_Bit_Mot := (others => True);
begin
Add (Le_Bit_Mot, Moins_Un);
end Dec;
--------------------------------------------------
procedure Sbc (Le_Bit_Mot_1 : in out T_Bit_Mot;
Le_Bit_Mot_2 : T_Bit_Mot;
C : in out Boolean;
V : out Boolean) is
Le_Bit_Mot : T_Bit_Mot := Le_Bit_Mot_2;
Zero : T_Bit_Mot := (others => False);
H : Boolean;
begin
Adc (Le_Bit_Mot, Zero, C);
Le_Bit_Mot := not Le_Bit_Mot;
Inc (Le_Bit_Mot);
C := False;
Add_H_V_C (Le_Bit_Mot_1, Le_Bit_Mot, H, V, C);
C := not C;
end Sbc;
--------------------------------------------------
--------------------------------------------------
procedure Positionne_Flag_S_Z is
begin
Positionne_Flag (Mot_Bit_1, S => Flag (7), Z => Flag (6));
end Positionne_Flag_S_Z;
--------------------------------------------------
procedure Add_F is
C : Boolean := False;
V : Boolean;
begin
Add_H_V_C (Mot_Bit_1, Mot_Bit_2, H => Flag (4), V => V, C => C);
----------------------- Half Carry modifiee
Flag (1) := False; -- N = 0
Flag (0) := C; -- Carry modifiee
end Add_F;
--------------------------------------------------
procedure Adc_F is
begin
Add_H_V_C (Mot_Bit_1, Mot_Bit_2,
H => Flag (4),
V => Flag (2),
C => Flag (0));
------------------------- Carry ,Half Carry et Overflow modifies
Flag (1) := False; -- N = 0
Positionne_Flag_S_Z; -- S et Z modifies
end Adc_F;
--------------------------------------------------
procedure Sbc_F is
begin
Sbc (Mot_Bit_1, Mot_Bit_2, C => Flag (0), V => Flag (2));
-------------------------- Carry et Overflow modifies
Flag (1) := True; -- N = 1
Positionne_Flag_S_Z; -- S et Z modifoes
end Sbc_F;
--------------------------------------------------
procedure Inc_F is
begin
Inc (Mot_Bit_1); -- Aucun flag de modifie
end Inc_F;
--------------------------------------------------
procedure Dec_F is
begin
Dec (Mot_Bit_1); -- Aucun flag de modifie
end Dec_F;
end Alu_16_Bit;
nblk1=b
nid=4
hdr6=10
[0x00] rec0=2c rec1=00 rec2=01 rec3=028
[0x01] rec0=27 rec1=00 rec2=07 rec3=01e
[0x02] rec0=1e rec1=00 rec2=02 rec3=07c
[0x03] rec0=07 rec1=00 rec2=09 rec3=030
[0x04] rec0=26 rec1=00 rec2=06 rec3=008
[0x05] rec0=00 rec1=00 rec2=03 rec3=028
[0x06] rec0=29 rec1=00 rec2=05 rec3=064
[0x07] rec0=17 rec1=00 rec2=0a rec3=000
[0x08] rec0=26 rec1=00 rec2=07 rec3=01e
[0x09] rec0=13 rec1=00 rec2=0a rec3=001
[0x0a] rec0=b9 rec1=70 rec2=00 rec3=000
tail 0x2150b7fd2822c665c039b 0x42a00088462060003
Free Block Chain:
0x4: 0000 00 0b 03 fc 80 01 65 01 00 09 20 20 20 20 62 65 ┆ e be┆
0xb: 0000 00 08 01 21 80 17 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ┆ ! ----------┆
0x8: 0000 00 00 01 1b 80 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ┆ #----------┆