Directory Dragon, DragOpsCross; Imports BitOps, RoseRun, RoseTesting; Library Cache, IFetcher; SimpleIDecoder: CELL [ PhA, PhBBOOL, -- used during PhB JumpTargetB>INT[32], -- used during PhB PreFetchFaultedB BEGIN GetNextInstB _ FALSE; JumpB _ TRUE; npcB _ 64 -- fake --; END; InstReadyA => BEGIN OPEN DragOpsCross; SELECT TRUE FROM opA = dJB, (opA IN [dRJBformat..eRJBformat]) AND ((opA-dRJBformat) MOD 2) = 1 => BEGIN GetNextInstB _ FALSE; JumpB _ TRUE; npcB _ npcA+alphaA-(IF alphaA < 128 THEN 0 ELSE 256); END; opA = dJDB => BEGIN GetNextInstB _ FALSE; JumpB _ TRUE; npcB _ npcA+256*Dragon.Word[betaA]+alphaA-Dragon.Word[IF betaA < 128 THEN 0 ELSE 65536]; END; opA = dDFC => BEGIN GetNextInstB _ FALSE; JumpB _ TRUE; npcB _ 256*(256*(256*Dragon.Word[deltaA]+gammaA)+betaA)+alphaA; END; ENDCASE => BEGIN GetNextInstB _ TRUE; JumpB _ FALSE; npcB _ npcA+iLengthA; END; END; preFetchFaultedA => BEGIN GetNextInstB _ FALSE; JumpB _ TRUE; npcB _ 128 -- fake --; END; ENDCASE -- instruction not ready yet -- => BEGIN GetNextInstB _ JumpB _ FALSE; npcB _ npcA; END; JumpTargetB _ BitOps.ILID[source: npcB, container: JumpTargetB, containerWidth: 32, fieldPosition: 0, fieldWidth: 32]; END; END; ENDCELL; IFetcherTest: CELL [ PhA, PhB˜DJšœœ˜Jšœ œ˜Jšœ˜Jšœ ˜ Jšœœ˜Jšœ˜Jšœ˜—J˜J˜J˜——Jš˜J˜—…—ôè