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: 7814 (0x1e86) Types: TextFile Names: »TRACE_TRAP_TESTS«
└─⟦18a2fd90d⟧ Bits:30005144 8" CR80 Floppy CR80FD_0132 ( CR/D/2479 CRD2479: En-CPU CPU/CACHE TEST- PROGRAMMER node: master: CRP5 ) └─⟦56889de57⟧ └─ ⟦this⟧ »TRACE_TRAP_TESTS«
PROCEDURE TRACE_TRAP_TEST (R6); "********************************************************************* " TEST TRACETRAP " Description: " If the parameter LEVEL is zero, a tracetrap is generated. " This is indicated by the variable NOO_INTERRUPT: 0=tracetrap. " " The cause-codes (which are only valid after a tracetrap) " are saved in the array RESULTS[....] : " RESULTS[0] : register 0, " RESULTS[1] : register 1, " RESULTS[7] : register 7, " " NOO_INTERRUPT is saved in RESULTS[3]. " #FFFF is saved in RESULTS[4]. " The context_record generated by the tracetrap is saved in " RESULTS[5] to RESULTS[#14]. " " The context_record, the cause-codes and the expected cause code " 2 is printed on the oc, if the variable LOC_OUT_ENABLE is =1. " "********************************************************************* VAR SAVE: ARRAY[0..7] OF INTEGER; SSAV_REG0: INTEGER; SSAV_REG1: INTEGER; SSAV_REG7: INTEGER; EXT_DP: INTEGER; AADR_HEX40: INTEGER; AADR_HEX39: INTEGER; AADR_HEX100: INTEGER; NOO_INTERRUPT: INTEGER; C_RECORD_STRING: ARRAY[0..#10] OF INTEGER; LOG_PG1: INTEGER; LOCC_COUNT: INTEGER; LABEL TRACE_REENTRY; LABEL CONTT; LABEL NO_INTT_ENTRY; LABEL MON1_ENTRY; LABEL TRACETRAP; BEGIN R7=>SAVE[7]; STC(6,ADDRESS(SAVE[7])=>R7); IF (LOC_OUT_ENABLE=>R0=1) THEN BEGIN OUTNEWLINE(R6); OUTTEXT(ADDRESS('TEST 6 RUNNING(:0:)')=>R3,R6); OUTNEWLINE(R6); FLUSHOUT(R6); END; "MAP IN LOG_PROG_PAGE0 AS DATAPAGE 1 #0FC0=>R1; SIO(R0,R1); "READ PHPAGE OF LOGPROGPAGE 0 #0FA0=>R1; CAD; CIO(R0,R1); "MAP IN THIS PHPAGE AS LOGDATAPAGE 1 R0=>EXT_DP; CAD; "SAVE LOGPROGLOCATIONS HEX 39, HEX 40, HEX 100 #8040=>R7; R7@INTEGER=>R0=>AADR_HEX40; #8100=>R7; R7@INTEGER=>R0=>AADR_HEX100; #8039=>R7; R7@INTEGER=>R0=>AADR_HEX39; "PLACE JUMP TO TRACE_REENTRY IN LOG-PROG-LOCATION HEX 39 #8039=>R7; LOCATION(TRACE_REENTRY)=>R0; R0=>R7@INTEGER; GOTO CONTT; MON1_ENTRY: "MON 64 ENTRY " SET LEVEL IN CONTEXT RECORD TO VALUE IN REG 4, " AND SET PSW11 ACCORDINGLY R4 EXTRACT 4; R4 SHIFTLL 4; #FFDD=>R7; R7@INTEGER=>R7; R7+#C; "R7 POINTS NOW AT PSW IN CONTEXT REC. R7@INTEGER=>R0; IF R4=0 THEN BEGIN #F7FF=>R1; R1 AND R0=>R0=>R7@INTEGER; "CLEAR PSW11 IN CONTEXT RECORD END ELSE BEGIN #0800=>R1; R1 IOR R0=>R0=>R7@INTEGER; "SET PSW11 IN CONTEXT RECORD END; R7+1; "R7 NOW POINTS AT EXR IN CONTEXT RECORD R7@INTEGER=>R0; #FF0F=>R1; R0 AND R1=>R1; R1 IOR R4=>R1; R1=>R7@INTEGER; "EXR IN CONTEXT STACK := OLD VALUE, "WITH NEW LEVEL RTM(0,0); CONTT: "INITIALIZE DP63 #FFDD=>R7; #FF00=>R0; R0=>R7@INTEGER; #FFDE=>R7; #F000=>R0=>R7@INTEGER; #FFDF=>R7; #FF00=>R0=>R7@INTEGER; #10=>R2; 0=>R0; #FFF0=>R7; #3F3E=>R1; WHILE R0<>R2 DO BEGIN R1=>R7@INTEGER; R0+1; R7+1; END; ":::::::::::::::::::::::::::::::::::::::::: "SET TRACE-BIT IN PSW 1=>R6=>NOO_INTERRUPT; SVS(R0); #0002=>R1; R1 IOR R0=>R0; LDS(R0); "PREPARE MONITOR_CALL #8040=>R7; LOCATION(MON1_ENTRY)=>R0=>R7@INTEGER; #8100=>R7; #FFFF=>R0=>R7@INTEGER; LOC_LEVEL=>R4 EXTRACT 4; "NEW LEVEL := LEVEL MON(064); "WHEN RETURNING FROM MON(64), A TRACETRAP SHOULD BE GENERATED, "PROVIDED THE NEW LEVEL = 0 TRACETRAP: "If no interrupt is generated, "this is the entry. A monitor call "is executed instead of the trace- "trap. #F=>R4; MON(064); "RAISE LEVEL TO F GOTO NO_INTT_ENTRY; ":::::::::::::::::::::::::::::::::::::::::: TRACE_REENTRY: NOP; NOP; NOP; NOP; 0=>R6=>NOO_INTERRUPT; NOP; NOP; NO_INTT_ENTRY: NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP; NOP; "SAVE CAUSE CODES R0=>SSAV_REG0=>R0=>RESULTS[0]; R1=>SSAV_REG1=>R1=>RESULTS[1]; R7=>SSAV_REG7=>R7=>RESULTS[2]; "REESTABLISH LOGPROGLOCATIONS HEX 39, HEX 40, HEX 100 AADR_HEX39=>R6; #8039=>R7; R6=>R7@INTEGER; AADR_HEX40=>R6; #8040=>R7; R6=>R7@INTEGER; AADR_HEX100=>R6; #8100=>R7; R6=>R7@INTEGER; NOO_INTERRUPT=>R0=>RESULTS[3]; #FFFF=>R0=>RESULTS[4]; IF (NOO_INTERRUPT=>R0)=1 THEN BEGIN IF (LOC_OUT_ENABLE=>R0)=1 THEN BEGIN OUTNEWLINE(R6); OUTTEXT(ADDRESS('NO INTERRUPT (:0:)')=>R3,R6); OUTNEWLINE(R6); FLUSHOUT(R6); END; END ELSE BEGIN IF (LOC_OUT_ENABLE=>R0)=1 THEN BEGIN OUTNEWLINE(R6); OUTTEXT(ADDRESS('TRACE INTERRUPT (:0:)')=>R3,R6); OUTNEWLINE(R6); FLUSHOUT(R6); END; END; "DUMP CONTEXTRECORD, REESTABLISH CONTEXT STACK POINTER #FFDD=>R7; R7@INTEGER=>R6; 0=>R0; #10=>R2; #5=>R3; WHILE R0<>R2 DO "READ CONTEXTRECORD => C_RECORD_STRING BEGIN R6@INTEGER=>C_RECORD_STRING[R0]; R6@INTEGER=>R7=>RESULTS[R3]; R0+1; R6+1; R3+1; END; #15=>R7; LOCATION(TRACETRAP)=>R0=>RESULTS[R7]; #FFDD=>R7; "REESTABLISH CONTEXT STACK POINTER #FF00=>R7@INTEGER; IF (LOC_OUT_ENABLE=>R0)=1 THEN BEGIN "DUMP CONTEXT RECORD OUTNEWLINE(R6); OUTTEXT(ADDRESS(' R0 R1 R2 R3 R4 R5 R6 R7 (:0:)')=>R3,R6); OUTNEWLINE(R6); FLUSHOUT(R6); 0=>R7; WHILE R7<>8 DO BEGIN C_RECORD_STRING[R7]=>R3; OUTHEX(R3,R6); R7+1; END; FLUSHOUT(R6); OUTNEWLINE(R6); OUTTEXT(ADDRESS(' BASE MOD PROG PRPC PSW EXR DP63 (:0:)')=>R3,R6); OUTNEWLINE(R6); FLUSHOUT(R6); 8=>R7; #F=>R1; WHILE R7<>R1 DO BEGIN C_RECORD_STRING[R7]=>R3; OUTHEX(R3,R6); R7+1; END; OUTNEWLINE(R6); FLUSHOUT(R6); "DUMP CAUSE CODES OUTNEWLINE(R6); OUTTEXT(ADDRESS('REGISTER 0 AFTER INT = (:0:)')=>R3,R6); SSAV_REG0=>R3; OUTHEX(R3,R6); OUTNEWLINE(R6); FLUSHOUT(R6); OUTTEXT(ADDRESS('REGISTER 1 AFTER INT = (:0:)')=>R3,R6); SSAV_REG1=>R3; OUTHEX(R3,R6); OUTNEWLINE(R6); FLUSHOUT(R6); OUTTEXT(ADDRESS('REGISTER 7 AFTER INT = (:0:)')=>R3,R6); SSAV_REG7=>R3; OUTHEX(R3,R6); OUTNEWLINE(R6); FLUSHOUT(R6); OUTTEXT(ADDRESS('EXPECTED CC2 = (:0:)')=>R3,R6); LOCATION(TRACETRAP)=>R3; OUTHEX(R3,R6); OUTNEWLINE(R6); FLUSHOUT(R6); END; "CLEAR CONTEXT RECORD #FEF1=>R7; #0=>R1; #10=>R2; WHILE R1<>R2 DO BEGIN 0=>R7@INTEGER; R7+1; R1+1; END; IF (DICA=>R0)=0 THEN CAE ELSE CAD; IF (LOC_OUT_ENABLE=>R0)=1 THEN BEGIN OUTTEXT(ADDRESS('TEST 6 TERMINATED (:0:)')=>R3,R6); OUTNEWLINE(R6); FLUSHOUT(R6); END; UNS(7,ADDRESS(SAVE[0])=>R7); EXIT(R6); END; "END OF TEST6 "