|
|
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: 5120 (0x1400)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Timer_68, seg_0505c6
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦5a81ac88f⟧ »Space Info Vol 1«
└─⟦this⟧
package body Timer_68 is
type Byte is new Natural range 0 .. 255;
for Byte'Size use 8;
-- registres Timer : MFP 68901
Reg_Vr : Byte; -- Vector register
Reg_Iera : Byte; -- Interrupt enable register a
Reg_Imra : Byte; -- Interrupt mask register a
Reg_Tadr : Byte; -- Timer A data register
Reg_Tacr : Byte; -- Timer A control register
for Reg_Vr use at System.To_Address (16#0301_000B#);
for Reg_Iera use at System.To_Address (16#0301_0003#);
for Reg_Imra use at System.To_Address (16#0301_0009#);
for Reg_Tadr use at System.To_Address (16#0301_000F#);
for Reg_Tacr use at System.To_Address (16#0301_000C#);
-- registre PICU : 68115
Reg_R0 : Byte; -- pointer register
Reg_R1 : Byte; -- control register
Reg_R3 : Byte; -- local interrupt mask register
Reg_R5 : Byte; -- system bus interrupt mask register
for Reg_R0 use at System.To_Address (16#03010020#);
for Reg_R1 use at System.To_Address (16#03010022#);
for Reg_R3 use at System.To_Address (16#03010026#);
for Reg_R5 use at System.To_Address (16#0301002A#);
Mode_Timer_A : Timer_Mode;
function Ou (B1, B2 : Byte) return Byte is
B11, B22, B3 : Byte;
N : Natural;
begin
B11 := B1;
B22 := B2;
B3 := 0;
for I in 0 .. 7 loop
if (B11 mod 2) = 1 or (B22 mod 2) = 1 then
N := 1;
else
N := 0;
end if;
B3 := B3 + Byte (N * (2 ** I));
B11 := B11 / 2;
B22 := B22 / 2;
end loop;
return B3;
end Ou;
procedure Set (Mode : Timer_Mode; Duration : T_Duration) is
begin
Mode_Timer_A := Mode;
Reg_Tadr := Byte (Duration);
end Set;
procedure Start is
begin
case Mode_Timer_A is
when Delay_Div_4 =>
Reg_Tacr := 2#0000_0001#;
when Delay_Div_10 =>
Reg_Tacr := 2#0000_0010#;
when Delay_Div_16 =>
Reg_Tacr := 2#0000_0011#;
when Delay_Div_50 =>
Reg_Tacr := 2#0000_0100#;
when Delay_Div_64 =>
Reg_Tacr := 2#0000_0101#;
when Delay_Div_100 =>
Reg_Tacr := 2#0000_0110#;
when Delay_Div_200 =>
Reg_Tacr := 2#0000_0111#;
end case;
end Start;
procedure Stop is
begin
Reg_Tacr := 2#0000_0000#;
end Stop;
function Get_Interrupt_Vector_Number return System.Address is
begin
return System.To_Address (2#1111_1101#);
end Get_Interrupt_Vector_Number;
begin
Mode_Timer_A := Delay_Div_4;
Reg_R3 := Ou (Reg_R3, 2#0000_0100#);
Reg_R5 := Ou (Reg_R5, 2#0000_0000#);
Reg_R0 := 2#0000_0010#;
Reg_R1 := 2#0000_0010#;
Reg_Vr := 2#1111_0000#;
Reg_Iera := 2#0010_0000#;
Reg_Imra := 2#0010_0000#;
end Timer_68;
nblk1=4
nid=0
hdr6=8
[0x00] rec0=1e rec1=00 rec2=01 rec3=026
[0x01] rec0=26 rec1=00 rec2=02 rec3=02a
[0x02] rec0=25 rec1=00 rec2=03 rec3=014
[0x03] rec0=05 rec1=00 rec2=04 rec3=000
tail 0x2154ae12a87804c8d625b 0x42a00088462060003