<> <<.. auxiliary functions for Dragon Rosemary IFU simulations>> <<>> <> DIRECTORY Dragon; DragonIDecode: CEDAR DEFINITIONS = BEGIN Level1:TYPE = RECORD [ a, b: Dragon.EURegisterIndex, euControlTop: EUControlTop, next2: Level2 ]; Level2:TYPE = RECORD [ euCacheCmd: Dragon.PBusCommands, euControlBot: EUControlBot, next3: Level3 ]; Level3:TYPE = RECORD [ c: Dragon.EURegisterIndex, xcClass: XferControlClass, pcSL: PcSLState ]; PcSLState: TYPE = RECORD [ pc: Dragon.Word, s: Dragon.EURegisterIndex, l: Dragon.EURegisterIndex ]; XferControlClass: TYPE = {ordinary, call, ret, cJmp, trap} _ ordinary; EUControlTop: TYPE = RECORD [ kData: Dragon.Word, -- toIFU<=>cAdr=kAdr phA aluOp: Dragon.ALUOps, -- phB condition: Dragon.CondSelects, -- phB condComp: BOOL, -- phB condTrap: BOOL, -- phB aAlu: {aRam, r1, r3} _ aRam, -- phB bAlu: {bRam, k, r1, r3} _ bRam, -- phB store1: {bRam, r1, r3} _ bRam -- phB ]; EUControlBot: TYPE = RECORD [ result2: { r1, r3} _ r1, -- phB store3: {s2, r3} _ s2, -- phB result3: {rdata, r2} _ r2 -- phB <> ]; EUStatus: TYPE = RECORD [ condOut: BOOL, -- toIFU phB kData: Dragon.Word -- toIFU<=>cAdr=kAdr phA ]; ILength: PROC [ op: Dragon.Opcode ] RETURNS [ length: [0..5] ]; END.