<> <> DIRECTORY DragOpsCross, DragOpsCrossUtils, HandCoding, HandCodingPseudos, HandCodingSupport, Rope; DDStatusTest: CEDAR PROGRAM IMPORTS DragOpsCrossUtils, HandCoding, HandCodingPseudos, HandCodingSupport = BEGIN OPEN DragOpsCrossUtils, HandCoding, HandCodingPseudos, HandCodingSupport; instrSize: AuxRegSpec = [aux[10]]; -- must contain the length of trapping instructns underflowHandler: AuxRegSpec = [aux[12]]; All: PROC = { StackedStatusToWord: PROC [ s: DragOpsCross.StackedStatusWord, sense: {normal, complemented} _ normal ] RETURNS [ w: DragOpsCross.Word ] = TRUSTED {w _ LOOPHOLE[s]; IF sense = complemented THEN w _ DragOpsCrossUtils.DragNot[w]}; GenSetL: PROC RETURNS [ cycleL: Label ] = { cycleL _ GenLabelHere[]; drLIQB[StackedStatusToWord[[lBase: 0FFH], complemented]]; GetEldestStatus[]; drAND[]; drOR[]; SetEldestStatus[]; drRETN[]}; FillTrap: PROC [ trap: DragOpsCross.TrapIndex, label: Label ] = { oldPC: LONG CARDINAL = GetOutputPC[]; SetOutputPC[DragOpsCrossUtils.TrapIndexToBytePC[trap]]; drJDB[UseLabel16[label]]; -- go to trap handler SetOutputPC[oldPC]}; <> SetL: Label = GenSetL[]; Start: Label = GenLabel[]; FillTrap[ResetTrap, Start ]; <> SetLabel[ Start ]; -- gets here from reset in kernel mode with traps off <<>> <> drLIB[04H]; drLFC[UseLabel16[SetL]]; drLIB[0FH]; drSRn[reg0]; drLRn[reg0]; drDIS[]; drASL[0]; drLIB[08H]; drLFC[UseLabel16[SetL]]; drLIB[0FH]; drSRn[reg0]; drLRn[reg0]; drDIS[]; drASL[0]; drLIB[10H]; drLFC[UseLabel16[SetL]]; drLIB[0FH]; drSRn[reg0]; drLRn[reg0]; drDIS[]; drASL[0]; drLIB[20H]; drLFC[UseLabel16[SetL]]; drLIB[0FH]; drSRn[reg0]; drLRn[reg0]; drDIS[]; drASL[0]; <<>> <> Halt[0FFFFH]}; -- end of test END.