Notes: January 25, 1985 10:09:23 am PST Notes: January 23, 1985 2:32:54 pm PST POUT and PIN are OUT and IN with beta47 supplying the epCmnd POUT and PIN are ODB's condcode=kernal <= epCmnd=*fetch* and usermode Check DragOps.tioga execution times DragOpsCross.Inst[dKFC] DragOpsCross.Inst[dRETK] RETT DragOpsCross.Inst[dLIP] LIFUR DragOpsCross.Inst[dSIR] SIFUR DragOpsCross.Inst[dSFP] FP DragOpsCross.Inst[dFLOP] -- no FLIP change DragonFP and DragOps.tioga FLOP Alpha[1] 0 => Result to Stack 1 => Result to Internal A register Beta[0..1] 0 => no B operand; fpAdjust_0 1 => B operand is single REAL; fpAdjust_1 2 => B operand is double REAL; fpAdjust_2 3 => B operand is single INT; fpAdjust_1 ?? How about changing pushpending/poppending/empty to WillBeEmpty/ReturnReady Status trap/usermode changes at lev 0 (and need restart from lev 3) reschedule changes at lev 3 fp changes at lev 3 Status must watch fp Shadow cAddrs FPControl must use WtMode (cAddr match) to also or with CSWtAlt/Mult Remember to include fpEnable pin These two can be generated in the PLA or at end out.kIsRtOp _ out.xaSource IN [alpha..bReg] AND (out.aluOp # FOPK); out.DrKaLev2 _ out.xaSource IN [alpha..bReg] or fp..... See notes; Notes: January 21, 1985 1:50:59 pm PST Remove PCNext from InstrDecodeOut pcNext-Is-pcBus _ macroJump OR dontGetNextMacro; Mode change could be simply SPR to ifuFPModeAlu or ifuFPModeMult if there were not the requirement to catch fp ops in the case where the fpEnable pin is not true. Notes: January 18, 1985 4:23:02 pm PST Reorder traps - IFUPLA.ExceptionCode trap expansions for cTrap fpFault epFault 4 bit Dragon.PBusFaults Redefinition of Dragon.PBusFaults PBusFaults: TYPE = MACHINE DEPENDENT { FPeqZeroE, FPlsInfE, FPgrNEZeroE, FPneZeroI, FPres4, FPoFlowI, FPuFlow, FPuFlowI, FPaDeNorm, FPbDeNorm, FPabDeNorm, FPdivByZero, FPaNaN, FPbNaN, FPabNaN, FPinvalid}; None: PBusFaults = FPeqZeroE; Page: PBusFaults = FPlsInfE; Write: PBusFaults = FPgrNEZeroE; Redefinition of Dragon.PBusCommands PBusCommands: TYPE = MACHINE DEPENDENT {NoOp(0), Reserve1(1), FPLdAlu(2), FPLdMult(3), FPUnAlu(4), FPUnMult(5), FPXfrMult(6), FPXfrMult(7), Store(8), Fetch(9), StoreHold(10), FetchHold(11), IOStore(12), IOFetch(13), IOStoreHold(14), IOFetchHold(15)}; 0000 NoOp 0001 0010 FPLdAlu CSLd 3 XaDr 3 euWt 0011 FPLdMult CSLd 3 XaDr 3 euWt 0100 FPUnAlu CSUn 2 XaDr 2 NoCheckParity 0101 FPUnMult CSUn 2 XaDr 2 NoCheckParity 0110 FPXfrAlu CSUn 2 XaDr 2 3 NoCheckParity 0111 FPXfrMult CSUn 2 XaDr 2 3 NoCheckParity 1000 Store 1001 Fetch 1010 StoreHold 1011 FetchHold 1100 IOStore 1101 IOFetch 1110 IOStoreHold 1111 IOFetchHold CSUnAlu _ FPUnAlu OR FPXfrAlu CSUnMult _ FPUnMult OR FPXfrMult CSLdAlu _ FPLdAlu OR FPXfrAlu OR Caddr fpModeAlu CSLdMult _ FPUnMult OR FPXfrMult OR Caddr fpModeMult XaDr2 _ FPUnAlu .. FPXfrMult OR XaSource abgd..alpha XaDr3 _ FPLdAlu .. FPLdMult, OR FPXfrAlu .. FPXfrMult euDrPBus _ FPLdAlu .. FPLdMult OR *Store* CheckParity _ *Fetch* XaSource: TYPE = MACHINE DEPENDENT { none(00B), fpLdSglBSt(06B), fpLdLswBSt(12B), fpLdMswBSt(16B), delGamBetAlp(20B), betaAlpha(21B), beta(22B), alpha(23B), fpLdSglAUnMsw(25B), fpLdLswAUnLsw(30B), fpLdMswAUnMsw(35B), res31(37B)}; ProcessorRegister: TYPE = MACHINE DEPENDENT { euJunk (128), -- the non-matching EU register euMAR (130), -- MemoryAddressRegister euField (131), -- Field register fpAluClear (132), -- Base of FP Alu shadow Regs can alias 134 in EU fpAluSgl (133), -- Single precision shadow can alias 135 in EU fpAluLsw (134), -- Double precision Lsw shadow can alias 132 in EU fpAluMsw (135), -- Double precision Msw shadow can alias 133 in EU fpMultClear (140), -- Base of FP Mult shadow Regs can alias 142 in EU fpMultSgl (141), -- Single precision shadow can alias 143 in EU fpMultLsw (142), -- Double precision Lsw shadow can alias 140 in EU fpMultMsw (143), -- Double precision Msw shadow can alias 141 in EU euConstant (144), -- Base of EU constant registers (12 regs) euAux (160), -- Base of EU aux registers (16 regs) euBogus (176), -- [euBogus..euLast] not legal (NA) (63 regs) euLast (239), -- last possible EU reg (NA) ifuXBus (240), -- Base for IFU regs ifuStatus (241), -- IFU status ifuFPModeAlu (242), -- floating point mode register ifuFPModeMult (243), -- floating point mode register ifuFPMaskFlags (244), -- floating point mask and flags ifuSLimit (245), -- stack limit register ifuYoungestL (246), -- youngest L in IFU stack ifuYoungestPC (247), -- youngest PC in IFU stack ifuEldestL (248), -- eldest L in IFU stack ifuEldestPC (249), -- eldest PC in IFU stack (rd removes, wt adds) ifuBogus (251), -- [ifuBogus..ifuLast] are not legal (NA) ifuL (252), -- current L register (NA) ifuS (253), -- current S register (NA) ifuPC (254), -- current program counter (NA) ifuLast (255)};-- last possible IFU reg (NA) IFUPLA 32 KBus = INT[32], -- PhA bidirectional, PhB A,B,C to EU 02 EUAluLeftSrcBA > EnumType["Dragon.ALULeftSources"], 02 EUAluRightSrcBA > EnumType["Dragon.ALURightSources"], 02 EUStore2ASrcBA > EnumType["Dragon.Store2ASources"], 05 EUAluOpAB > EnumType["Dragon.ALUOps"], 04 EUCondSelAB > EnumType["Dragon.CondSelects"], 01 EUHoldCarryBA > BOOL, 01 EUSt3AisCBusBA > BOOL, 01 EURes3AisCBusBA > BOOL, 01 EUConditionBA < BOOL, 01 EURes3BisPBusAB > BOOL, 01 EUWriteToPBusAB > BOOL, 01 EUCheckPParityAB > BOOL, --- 22 04 FPStatusB EnumType["DragonFP.CSLoad"], 01 FPCSUAluBA >EnumType["DragonFP.CSUnload"], 01 FPCSUMultBA >EnumType["DragonFP.CSUnload"], --- 07 04 EPCmdA >EnumType["Dragon.PBusCommands"], 01 EPRejectB =BOOL, -- driven by IFP 03 EPFaultB =EnumType["Dragon.PBusFaults"], -- driven by IFP 32 IPData =INT[32], -- address PhA, data PhB 04 IPCmdA >EnumType["Dragon.PBusCommands"], 01 IPRejectB add one bit): fpLdMode, fpLdAMsw, fpLdALsw, fpLdBMsw, fpLdBLsw, fpUlMsw, fpUlLsw DragonMicrocodeImpl add FPOP add MULT add DIV DragOpsCross.JBBformatRange => { rj: DragOpsCross.RJBformat these can be removed TRUSTED {rj _ LOOPHOLE[instruction]}; these can be removed IFU Page Fault Must wait for possible CJump or MemRefFault to execute Can XOP be one cycle IFU change EUWriteToCacheAB to EUWriteToPBusAB add FPStatusB >EnumType["DragonFP.Status"], FPCSLoadAB EnumType["DragonFP.Status"], FPCSLoadAB separate decoding in the Decoder PLA Operands Result Time Cycles Set Mode - - 120ns 2 Convert Unary Single one Single Double 240ns 3 Convert Unary Double one Double Single 240ns 3 Compare Unary Single one Single - 240ns 3 Compare Unary Double one Double - 240ns 3 Compare Binary Single two Single - 240ns 3 Compare Binary Double two Double - 240ns 3 Alu Unary Single one Single Single 240ns 3 Alu Unary Double one Double Double 240ns 3 Alu Binary Single two Single Single 240ns 3 Alu Binary Double two Double Double 240ns 3 Mult Binary Single two Single Single 240ns 3 Mult Binary Double two Double Double 360 ns 4 Cycle 0 1 2 3 4 5 6 7 8 9 sglUnCom AM DrXa2 (129) (136) (137) (138) (139) (156) (157) (158) (159) (250) ΚΪ˜™J™5—˜'J™šœK™KJšΟbœΟkœ)™@šœ:™:Jšœžœ™Jšœ™Jšœ™—šœ:™:Jšœ žœ™Jšœ™Jšœ™———J˜J˜J˜&IblockšΟfUœ.˜ƒKšŸ#˜#J˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜J˜J˜EJ˜J˜Iitem– 1 in tabStopsšœC˜CL– 1 in tabStopsšœ…'˜¬JšœJ˜J˜J˜J–26 sp tabStopsšœ 2˜BJ–26 sp tabStopsšœ 2˜BJ–26 sp tabStopsšœ™J–26 sp tabStopsšœ™J–26 sp tabStopsšœ™J–26 sp tabStopsšœ™J–26 sp tabStopsšœ ‘ +˜EJ–26 sp tabStopsšœ .˜?J–26 sp tabStopsšœ 2˜CJ–26 sp tabStopsšœ 2˜CJ–26 sp tabStopsšœ ‘ ‘ ˜J˜UJšœR˜RJšœ1˜1—˜šœf˜fšœ˜Jšœžœ ˜Jšœžœ ˜Jšœ ˜JšœL˜LJšœ ˜ Jšžœ˜Jšœ Πbk˜Jšœ ž˜Jšœ ž˜Jšžœ˜—šœ˜Jšœžœ ˜Jšœžœ ˜Jšœ ˜Jšœ ˜ JšœL˜LJšœ ˜ Jšžœ˜Jšœ ˜Jšœ ž˜Jšœ ž˜Jšžœ˜——šœ ˜ J˜J˜J˜ JšœžœE˜NJšœžœ˜'Jšœ ˜Jšœ"˜"Jšœžœ žœ žœ˜:JšœžœO˜TJšžœ˜—šœ˜šœ˜J˜ Jšœžœ˜Jšœžœ˜&Jšœ ˜Jšœ˜Jšžœž˜Jšœ ˜ Jšžœ˜—šœ˜Jšœ˜Jšœ ˜Jšžœž˜——šœ˜Jšœ˜Jšœ ˜Jšžœž˜—šœ ˜ Jšœ˜Jšœžœ˜Jšœ˜Jšœ ’˜ Jšœ ˜ Jšžœ˜——J˜J˜˜˜Jšœžœ ž˜Jšœžœ ž˜Jšœ ˜J˜ Jšœžœ ˜ Jšžœ˜Jšœž˜ Jšžœ$˜%—˜šœ˜Jšœ žœ!˜+Jšœ žœ ˜Jšœ ˜Jšœ˜-Jš’˜ Jšœ’˜Jšœ’˜Jšœžœžœ˜'Jšœžœžœ2˜QJšžœ$˜%—šœ˜Jšœ žœ!˜+Jšœ žœ ˜Jšœ ˜Jšœ˜ Jšœœ˜Jšœ˜Jšœ˜Jšœžœžœ˜'Jšœžœžœ˜2Jšžœ$˜%——˜šœ˜Jšœžœ!˜*Jšœžœ ˜Jšœ ˜J˜$Jšœžœžœ˜&Jšœžœžœ˜1Jšžœ˜—šœ˜Jšœžœ!˜*Jšœžœ ˜Jšœ ˜J˜$š’’˜Jš ’˜)Jš ’˜!—Jšœžœžœ˜&Jšœžœžœ˜1Jšžœ˜——˜ Jšœ žœ ˜Jšœ žœ ˜Jšœ ˜J˜%Jšœžœžœ˜'Jšœžœžœ˜2Jšžœ˜—˜š˜Jšœžœ ˜Jšœžœ ˜Jšœ ˜J˜$Jšœžœœ˜:š ˜ Jš’˜Jš’˜Jš’˜—š ˜ Jš˜—J˜Jšžœ žœ˜$Jšžœ˜—š˜Jšœžœ ˜Jšœžœ ˜Jšœ ˜J˜$Jšœžœœ˜:š ˜ Jš’˜Jš’˜Jš’˜—š ˜ Jš’˜Jš’˜!Jš!˜!—J˜Jšžœ žœ˜$Jšžœ˜——˜Jšœ žœ ˜Jšœ žœžœ žœ ˜%Jšœ ˜J˜%Jšœ ˜Jšœ˜Jšžœž˜ Jšžœ˜—˜Jšœ ž˜ Jšžœ˜—˜Jšœ žœ ˜Jšœ ˜ Jšœ˜Jšœ˜Jšžœ˜——J˜J˜šΡbklΠbl˜J˜šœ ˜ šœ"˜"J–26 sp tabStopsšœ ˜-J–26 sp tabStopsš‘˜-J–26 sp tabStopsš ‘!˜.J–26 sp tabStopsšœ  ˜%J–26 sp tabStopsš‘˜ J–26 sp tabStopsšœ  ,˜9J–26 sp tabStopsšœœ !˜.J–26 sp tabStopsšœœ !˜.J–26 sp tabStopsšœœ !˜.J–26 sp tabStopsš ‘!˜.J–26 sp tabStopsšœ *˜˜>JšŸ>˜>JšŸ>˜>JšŸ>˜>J˜JšŸ?˜?JšŸ?˜?JšŸ.˜.JšŸ.˜.J˜JšŸ<˜˜>JšŸ>˜>JšŸ>˜>JšŸ>˜>J˜JšŸ>˜>JšŸ>˜>JšŸ.˜.JšŸ.˜.—J˜š₯˜J˜JšŸ˜JšŸ˜JšŸ˜JšŸ˜JšŸ˜JšŸ˜JšŸ˜JšŸ˜J˜JšŸΠfkŸ§˜JšŸ§Ÿ§˜JšŸ§Ÿ§Ÿ˜JšŸ§Ÿ§Ÿ˜JšŸ§Ÿ§˜JšŸ§Ÿ§˜JšŸ§Ÿ§Ÿ˜JšŸ§Ÿ§Ÿ˜—J˜š₯˜J˜šŸ§Ÿ˜šžœ˜J˜J˜J˜!J˜!—š§Ÿ˜J˜2J˜—š§Ÿ<˜=Jšœžœ˜ J˜2——šŸ˜š§œ8˜:J˜ J˜ J˜ J˜ ——J˜—J˜—š€9£˜