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