DataMuseum.dk

Presents historical artifacts from the history of:

CR80 Hard and Floppy Disks

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

See our Wiki for more about CR80 Hard and Floppy Disks

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦1e61438fc⟧ TextFile

    Length: 4382 (0x111e)
    Types: TextFile
    Names: »PPP.S«

Derivation

└─⟦18a2fd90d⟧ Bits:30005144 8" CR80 Floppy CR80FD_0132 ( CR/D/2479 CRD2479: En-CPU CPU/CACHE TEST- PROGRAMMER node: master: CRP5 )
    └─⟦56889de57⟧ 
        └─ ⟦this⟧ »PPP.D!PPP.S« 

TextFile

%LIST %PRINT
MAINMODULE PPP;

"=== THIS MAINMODULE CREATES THE DATA PAGE 63

%SOURCE @**DAMOS.D*GENS.D*GENERAL.S
%SOURCE @**DAMOS.D*GENS.D*HARDWARE.S
%LIST %LIST

CONST
   REF_PPP                  = #FC00;
   NO_OF_CONTEXT_FRAMES     = 8;
   CPU_INTERRUPT_VIEW_NO    = 1;
   ERROR_INTERRUPT_VIEW_NO  = 2;
   PAGE_INTERRUPT_VIEW_NO   = 3;
   TIMER_INTERRUPT_VIEW_NO  = 4;
   IO_INTERRUPT_VIEW_NO     = 5;
   CPU_INT_D_TTR            = 2;
   CPU_INT_P_TTR            = 3;
   ERROR_INT_D_TTR          = 4;
   ERROR_INT_P_TTR          = 5;
   PAGE_INT_D_TTR           = 6;
   PAGE_INT_P_TTR           = 7;
   TIMER_INT_D_TTR          = 8;
   TIMER_INT_P_TTR          = 9;
   IO_INT_D_TTR             = 10;
   IO_INT_P_TTR             = 11;

TYPE
   PROCEDURE_ADDRESS        = INTEGER;
   PPP_IDENTIFIER           = INTEGER;

   INTERRUPT_TYPE           = ( CPU_INTERRUPT_TYPE,
                                EMERGENCY_INTERRUPT_TYPE,
                                TRACE_INTERRUPT_TYPE,
                                ERROR_INTERRUPT_TYPE,
                                PAGE_INTERRUPT_TYPE,
                                TIMER_INTERRUPT_TYPE,
                                OVERFLOW_INTERRUPT_TYPE,
                                UNDERFLOW_INTERRUPT_TYPE,
                                IO_INTERRUPT_TYPE);

   CAUSE_RECORD =
      RECORD
         PRIMARY_CAUSE      : INTEGER;
         SECONDARY_CAUSE    : INTEGER;
         TERTIARY_CAUSE     : INTEGER;
         TERTIARY_USED      : BOOLEAN;
      END;

   CONTEXT_CONTENTS         = ( REGISTER0,
                                REGISTER1,
                                REGISTER2,
                                REGISTER3,
                                REGISTER4,
                                REGISTER5,
                                REGISTER6,
                                REGISTER7,
                                BASE_REGISTER,
                                MODIFY_REGISTER,
                                PROG_REGISTER,
                                PRPC_REGISTER,
                                PSW_REGISTER,
                                EXR_REGISTER,
                                PAGE_63);

   CONTEXT_FRAME            = ARRAY[ CONTEXT_CONTENTS] OF INTEGER;

   "=== INTERRUPT ACTION TABLE
   IAT                      = ARRAY[ UNASSIGNED..EMERGENCY] OF INTEGER;

   ICB =  "== INTERRUPT_CONTROL_BLOCK
      RECORD
         INTERRUPT_BUSY     : BOOLEAN;
         ICB_EMPTY          : BOOLEAN;
         TYPE_OF_INTERRUPT  : INTERRUPT_TYPE;
         EXPECTED_INTERRUPT : INTEGER;
         CAUSE              : CAUSE_RECORD;
         INTERRUPT_VIEW_NO  : INTEGER;
         ACTION_TABEL       : IAT;
         CONTEXT            : CONTEXT_FRAME;
      END;

   VIEW                     = INTEGER;
   T_REG_MAP                = ARRAY [ 0..15] OF VIEW;
   T_TABEL                  = ARRAY [ 0..63] OF INTEGER;

   CONTEXT_STACK            = ARRAY[ 1..NO_OF_CONTEXT_FRAMES]
                              OF CONTEXT_FRAME;

   PCB =  "== PROCESS PARAMETER BLOCK
      RECORD
         CONTEXT_ADMIN      : STACK_CONTROL_BLOCK;
         TT_FOR_INTRPT_PPP  : INTEGER;
         BOUND_REG_MAP      : ARRAY[ 1..15] OF INTEGER;
         TRANSLATION_REG_MAP: ARRAY[ 0..15] OF VIEW;
      END;

CONST
   FREE_PPP_AREA_FIRST_OFFSET= SIZE( PPP_IDENTIFIER)
                               + SIZE( ICB) + ( 2*SIZE( T_TABEL));

   FREE_PPP_AREA_LAST_OFFSET = #3FF - SIZE( PCB)
                               - SIZE( CONTEXT_STACK);

TYPE
   PPP =  "== PROCESS PARAMETER PAGE
      RECORD
         PAGE_IDENT         : PPP_IDENTIFIER;
         INTERRUPT_CONTROL_BLOCK
                            : ICB;
         MIRROR_T_TABEL     : RECORD
                                 P_TABEL : T_TABEL;
                                 D_TABEL : T_TABEL;
                              END;
         FREE_AREA          : ARRAY[FREE_PPP_AREA_FIRST_OFFSET
                                    ..FREE_PPP_AREA_LAST_OFFSET ]
                               OF INTEGER;
         CONTEXT_STACK_AREA : CONTEXT_STACK;
         PROCESS_CONTROL_BLOCK
                            : PCB;
      END;
CONST
   SIZE_OF_PPP              = SIZE( PPP);

%WHEN SIZE_OF_PPP <> #400 TERMINATE 'ILLEGAL SIZE OF PPP'

%NOLIST %NOLIST

VAR
   PPP_DEF: PPP;

INIT
   PPP_DEF.PROCESS_CONTROL_BLOCK.BOUND_REG_MAP = #FFFF;

BEGIN
   R6 => R6;
END;

ENDMODULE