|
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 - 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