|
|
DataMuseum.dkPresents historical artifacts from the history of: CR80 Hard and Floppy Disks |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CR80 Hard and Floppy Disks Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 4382 (0x111e)
Types: TextFile
Names: »PPP.S«
└─⟦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«
%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