DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦b84951023⟧ Ada Source

    Length: 11264 (0x2c00)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body V_Timer_Support_1, seg_058004

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« 
        └─⟦this⟧ 

E3 Source Code



with Machine_Code;
with System;
use System;
with Unchecked_Conversion;
with V_Krn_Conf_I;
use V_Krn_Conf_I;
with Krn_Defs;
with V_Bits;
with V_I_Types;
with V_I_Timeop;
with V_Cpu_Conf;
with Link_Block;
with Grp_Table;
with Machine_Types;

package body V_Timer_Support_1 is
    Max_Count : constant := 255;
    use Machine_Types;

    function Get_Interrupt_Vector_Number return System.Address is
    begin
        return System.To_Address (2#1000_1101#);
    end Get_Interrupt_Vector_Number;

    procedure Init_Timer is  
        use V_Bits;
        -- Initializes the timer device hardware registers

        -- MC68155 PICU Register
        Register_R0 : Byte;     -- pointer registers CR1/CR6
        Register_R1 : Byte;     --
        Register_R3 : Byte;     -- local interrupt mask register
        Register_R5 : Byte;     -- system bus interrupt mask register
        for Register_R0 use at System.To_Address (16#0301_0020#);
        for Register_R1 use at System.To_Address (16#0301_0022#);
        for Register_R3 use at System.To_Address (16#0301_0026#);
        for Register_R5 use at System.To_Address (16#0301_002A#);

        -- MC68901 Timer register
        -- MC68901 Timer register
        Register_Vr : Byte;     -- Vector register
        Register_Iera : Byte;   -- Interrupt enable register A
        Register_Imra : Byte;   -- Interrupt mask register A
        Register_Tacr : Byte; -- Timer A control register
        Register_Tadr : Byte; -- Timer A data register;
        for Register_Vr use at System.To_Address (16#0301_000B#);
        for Register_Iera use at System.To_Address (16#0301_0003#);
        for Register_Imra use at System.To_Address (16#0301_0009#);
        for Register_Tadr use at System.To_Address (16#0301_000F#);
        for Register_Tacr use at System.To_Address (16#0301_000C#);
    begin

        -- Interrupt handler configuration

        Register_R3 := Machine_Types.Byte
                          (Bit_Or (Machine_Types.Byte'Pos (Register_R3),
                                   2#0000_0100#));
        Register_R5 := Machine_Types.Byte
                          (Bit_Or (Machine_Types.Byte'Pos (Register_R5),
                                   2#0000_0000#));
        Register_R0 := 2#0000_0010#;
        Register_R1 := 2#0000_0000#;


        -- Interrupt Timer configuration
        Register_Vr := 2#1000_0000#;   -- define the most signicant bits of IVR
        Register_Iera :=
           Machine_Types.Byte
              (Bit_Or (Machine_Types.Byte'Pos (Register_Iera), 2#0010_0000#));
        Register_Imra :=
           Machine_Types.Byte
              (Bit_Or (Machine_Types.Byte'Pos (Register_Imra), 2#0010_0000#));
        -- Start the timer
        Register_Tadr := Byte (Max_Count);  -- load the count
        Register_Tacr := 2#0000_0111#;  -- start the timer

    end Init_Timer;


    procedure Rearm_Timer is
        use Machine_Types;       -- Clears current timer interrupt
        Register_Iera : Byte;   -- Interrupt enable register A
        Register_Tacr : Byte; -- Timer A control register
        Register_Tadr : Byte; -- Timer A data register
        for Register_Tacr use at System.To_Address (16#0301_000C#);
        for Register_Iera use at System.To_Address (16#0301_0003#);
        for Register_Tadr use at System.To_Address (16#0301_000F#);
        use V_Bits;
    begin
        --     Register_Tacr := 2#0000_0000#;  -- Stop timer
        --     Register_Iera :=
        --        Machine_Types.Byte
        --           (Bit_And (Machine_Types.Byte'Pos (Register_Iera), 2#1101_1111#));
        --     Register_Iera :=
        --        Machine_Types.Byte
        --           (Bit_Or (Machine_Types.Byte'Pos (Register_Iera), 2#0010_0000#));
        --     Register_Tadr := Byte (Max_Count);  -- load the count
        --     Register_Tacr := 2#0000_0111#;  -- restore the timer
        null;
    end Rearm_Timer;
end V_Timer_Support_1;

E3 Meta Data

    nblk1=a
    nid=4
    hdr6=c
        [0x00] rec0=24 rec1=00 rec2=01 rec3=018
        [0x01] rec0=00 rec1=00 rec2=07 rec3=02c
        [0x02] rec0=15 rec1=00 rec2=0a rec3=024
        [0x03] rec0=1a rec1=00 rec2=06 rec3=002
        [0x04] rec0=13 rec1=00 rec2=03 rec3=00a
        [0x05] rec0=02 rec1=00 rec2=05 rec3=000
        [0x06] rec0=9b rec1=c8 rec2=00 rec3=038
        [0x07] rec0=48 rec1=7d rec2=b6 rec3=240
        [0x08] rec0=05 rec1=ec rec2=80 rec3=007
        [0x09] rec0=09 rec1=0f rec2=b6 rec3=647
    tail 0x21765500e87db73cc6691 0x42a00088462060003
Free Block Chain:
  0x4: 0000  00 08 03 fc 80 19 5f 52 33 20 3a 3d 20 4d 61 63  ┆      _R3 := Mac┆
  0x8: 0000  00 02 00 07 80 04 73 74 65 72 04 20 20 20 2d 2d  ┆      ster    --┆
  0x2: 0000  00 09 03 fc 80 34 65 67 69 73 74 65 72 5f 52 30  ┆     4egister_R0┆
  0x9: 0000  00 00 00 a8 80 0a 74 65 3b 20 20 20 20 20 2d 2d  ┆      te;     --┆