// All the declarations for t425revC.vbcWITH
FIELD Microword[99,97,78,75,73,70,53:52,46,44] // X bus source select XbusfromIptrReg = #B1000000000 XbusfromConstBox = #B0100000000 XbusfromDreg = #B0010000000 XbusfromChannelData = #B0001000000 XbusfromDataIn = #B0000100000 XbusfromAreg = #B0000010000 XbusfromWptrReg = #B0000001000 XbusfromWdescReg = #B0000000100 XbusfromFPtrReg0 = #B0000000010 XbusfromFPtrReg1 = #B0000000001 ;
FIELD Microword[105:104,96,80,66,59:58,50,48,42,37,35,20] // Y bus source select YbusFromOregSL2 = #B1000000000000 YbusfromOreg = #B0100000000000 YbusfromConstBox = #B0010000000000 YbusfromEreg = #B0001000000000 YbusfromBreg = #B0000100000000 YbusFromCregSL1 = #B0000010000000 YbusfromCreg = #B0000001000000 YbusfromBPtrReg0 = #B0000000100000 YbusfromBPtrReg1 = #B0000000010000 YbusfromStatusReg = #B0000000001000 YbusfromClockReg1 = #B0000000000100 YbusfromClockReg0 = #B0000000000010 YbusByteSelMask = #B0000000000001 ;
FIELD Microword[21,19:14] // Alu operations ZbusFromXbusPlusYbus = #B0011000 // X + Y ZbusFromXbusPlus1 = #B0110010 // X + 1 ZbusFromYbusMinus(XbusPlus1) = #B1011000 // Y - (X + 1) ZbusFromXbusPlus0 = #B0110000 // X ZbusFromMinusXbus = #B1110010 // 0 - X ZbusFromYbusMinusXbus = #B1011010 // Y - X ZbusFromYbusPlusXbusPlus1 = #B0011010 // Y + X + 1 ZbusFromXbusMinusYbus = #B0100110 // X - Y ZbusFromMinusYbus = #B1100110 // 0 - Y ZbusFrom0 = #B0000001 // 0 ZbusFromNotXbusAndYbus = #B0100001 // ~X /\ Y ZbusFromNotXbus = #B0110001 // ~X ZbusFromXbusAndYbus = #B0001001 // X /\ Y ZbusFromYbus = #B0101001 // Y ZbusFromNotXbusOrYbus = #B0000101 // ~X \/ Y ZbusFromXbusXorYbus = #B0100101 // X >< Y ZbusFromNotYbus = #B0010101 // ~Y ZbusFromXbusOrYbus = #B0101101 // X \/ Y ZbusFromMinus1 = #B0111101 // -1 ZbusFromYbusAndNot(BPWminus1) = #B0101011 // Y /\ ~(4 - 1) ZbusFromXbus = #B0001101 ; // X SET ZbusFromOnes = ZbusFromMinus1 ;
FIELD Microword[103,98,79,77,69,65,57,51,49,47,45,43,41,38,36,34,12,8,0] // Z bus destination select OregfromZbus = #B1000000000000000000 IptrRegFromZbus = #B0100000000000000000 EregfromZbus = #B0010000000000000000 DregfromZbus = #B0001000000000000000 AregfromZbus = #B0000100000000000000 BregfromZbus = #B0000010000000000000 CregfromZbus = #B0000001000000000000 WdescRegfromZbus = #B0000000100000000000 BPtrReg0fromZbus = #B0000000010000000000 BPtrReg1fromZbus = #B0000000001000000000 FPtrReg0fromZbus = #B0000000000100000000 FPtrReg1fromZbus = #B0000000000010000000 StatusRegfromZbus = #B0000000000001000000 TNextReg1fromZbus = #B0000000000000100000 ClockReg0&1fromZbus = #B0000000000000010000 TNextReg0fromZbus = #B0000000000000001000 SelectChannelRegfromZbus = #B0000000000000000100 ChannelStackfromZbus = #B0000000000000000010 DataMemAddrFromZbus = #B0000000000000000001 ;
FIELD Microword[67,64,60,56,54] // A/B/C stack control AregfromBregSlave = #B10000 BregfromAregSlave = #B01000 BregfromCregSlave = #B00100 CregfromBregSlave = #B00010 CregFrom0 = #B00001 ;
FIELD Microword[68,63:61,55,23:22] // Shifting control ShiftRightAreg = #B1000000 ShiftLeftBreg = #B0100000 BregShIn0From1 = #B0010000 ShiftRightBreg = #B0001000 CregFromZbusSR1 = #B0000100 CregShInMsbfromCarryOut = #B0000010 CregShInMsbfromArithLogic = #B0000001 ;
FIELD Microword[27:25] // condition select for MIR[0] Cond0fromROMFeedback0 = #B000 Cond0FromNotCarryOut = #B001 Cond0FromNotZbusSubLessThan0 = #B010 Cond0FromNotAluPropAll1 = #B011 Cond0FromOverflow = #B100 Cond0FromNotIncOregCarryOut = #B101 Cond0FromNotIncDregCarryOut = #B110 Cond0FromNotPrInAnalyse = #B111 ;
SET Cond0FromNotZbusEq0 = Cond0FromNotAluPropAll1 Cond0FromNotLastRead = Cond0FromNotIncOregCarryOut Cond0FromNotLastWrite = Cond0FromNotIncDregCarryOut ;
FIELD Microword[30,28,32,31] // condition select for MIR[1] Cond1fromROMFeedback1 = #B0000 Cond1FromDivStep0 = #B0001 Cond1FromDivStep1 = #B0010 Cond1FromAslave0 = #B0011 Cond1FromBslave0 = #B0100 Cond1fromBslave1 = #B0101 Cond1FromBslaveMsb = #B0110 Cond1FromCslaveMsb = #B0111 Cond1FromNotTwoReadsToStart = #B1000 Cond1FromProcPriority = #B1001 Cond1FromChOrTimerReq = #B1011 Cond1FromChNotTimerReq = #B1100 Cond1FromHighNotLowReq = #B1101 Cond1FromBootFromRomNotLinks = #B1010 Cond1FromChannelReadyNotRun = #B1110 Cond1FromTimeOutReq = #B1111 ; FIELD Microword[39,33,13] // Timer control ResetTEnabled1 = #B100 ResetTEnabled0 = #B010 ResetTimeOutLatch = #B001 ;
FIELD Microword[102:100,76] // Incrementor control OregFrom0 = #B1000 OregFromZbusSL4 = #B0100 WordIncOreg = #B0010 WordIncDreg = #B0001 ;
FIELD Microword[109,106,83:81,72:71] // Interface Control Requests Next = #B1000000 AregfromDataIn = #B0100000 DataInfromPrevReadReg = #B0010000 MemWrite = #B0001000 MemRead = #B0000100 DataRegfromZbus = #B0000010 DataRegfromAreg = #B0000001 ;
FIELD Microword[108:107] // Byte move control ByteWriteStrobeEnable = #B10 DataRegfromByteShifter = #B01 ;
FIELD Microword[40] // Error status StatusErrorfromOverflow = #B1 ;
FIELD Microword[74,11:9,7:1] // Channel Control Requests ChannelDataRegfromUbus = #B10000000000 HighPriorityChannelAck = #B01000000000 LowPriorityChannelAck = #B00100000000 ResetChannel = #B00010000000 ResetChannelReadyNotRunlatch = #B00001000000 SetAltEnabledLatch = #B00000100000 ClearAltEnabledLatch = #B00000010000 DisableChannelStatus = #B00000001000 EnableChannelandEnableChannelStatus = #B00000000100 ResetChannelRunReqlatch = #B00000000010 DataMemAddrfromSelectChannelReg = #B00000000001 ;
FIELD Microword[117:110,29,24] // loads into MIR ROMFeedback[0] = #B0000000001 ROMFeedback[1] = #B0000000010 ROMFeedback[2] = #B0000000100 ROMFeedback[3] = #B0000001000 ROMFeedback[4] = #B0000010000 ROMFeedback[5] = #B0000100000 ROMFeedback[6] = #B0001000000 ROMFeedback[7] = #B0010000000 ROMFeedback[8] = #B0100000000 ROMFeedback[9] = #B1000000000 ;
FIELD Microword[95:84] // Constant box select bit0fromCbox = #B100000000000 bit1fromCbox = #B010000000000 bit2fromCbox = #B001000000000 bit3fromCbox = #B000100000000 bit4fromCbox = #B000010000000 bit5fromCbox = #B000001000000 bit6fromCbox = #B000000100000 bit7fromCbox = #B000000010000 bit15to8fromCbox = #B000000001000 bit22to16fromCbox = #B000000000100 bit30to23fromCbox = #B000000000010 bit31fromCbox = #B000000000001 Minus1fromCbox = #B111111111111 Minus2fromCbox = #B011111111111 Minus3fromCbox = #B101111111111 Minus4fromCbox = #B001111111111 Minus5fromCbox = #B110111111111 MinIntfromCbox = #B000000000001 MinIntplus1fromCbox = #B100000000001 MinIntplus2fromCbox = #B010000000001 MinIntplus3fromCbox = #B110000000001 ZerofromCbox = #B000000000000 OnefromCbox = #B100000000000 TwofromCbox = #B010000000000 ThreefromCbox = #B110000000000 FourfromCbox = #B001000000000 FivefromCbox = #B101000000000 EightfromCbox = #B000100000000 SixteenfromCbox = #B000010000000 EventfromCbox = #B000001000001 // 80000020 ExtendFunctionsfromCbox = #B000100100001 // 80000048 Link3InputfromCbox = #B001110000001 // 8000001C ByteMaskfromCbox = #B111111110000 // 000000FF MemStartfromCBox = #B000011100001 // 80000070 TptrLoc1fromCbox = #B000101000001 // 80000028 TptrLoc0fromCbox = #B001001000001 // 80000024 EregIntSaveLocfromCbox = #B001000100001 // 80000044 Link3OutputfromCbox = #B001100000001 // 8000000C MostPos = #B111111111110 // 7FFFFFFF MostPosMinus1 = #B011111111110 // 7FFFFFFE WdescIntSavefromCbox = #B001101000001 // 8000002C GotoSNPBitfromCbox = #B010000000000 // Status bit 1 IOBitfromCbox = #B001000000000 // Status bit 2 MovebitfromCbox = #B000100000000 // Status bit 3 TimeDelBitfromCbox = #B000010000000 // Status bit 4 TimeInsBitfromCbox = #B000001000000 // Status bit 5 DistAndInsBitfromCbox = #B000000100000 // Status bit 6 HaltOnErrorBitfromCbox = #B000000010000 // Status bit 7 Mov2dallfromCbox = #B000000001000 // Status bit 15 to 8 Mov2dnonaerofromCbox = #B000000000100 // Status bit 22 to 16 J0BreakFlagfromCbox = #B000000000010 // Status bit 30 to 23 ErrorFlagfromCbox = #B000000000001 // Status bit 31 DevIdfromCBox = #B010000000000 ; // RevC silicon = 02 (00 - 09)
SET OnesfromCbox = Minus1fromCBox NotProcess.p = MinIntfromCbox Enabling.p = MinIntplus1fromCbox Waiting.p = MinIntplus2fromCbox Ready.p = MinIntplus3fromCbox TimeSet.p = MinIntplus1fromCbox TimeNoSet.p = MinIntplus2fromCbox NoneSelected.o = Minus1fromCBox Iptr.s = Minus1fromCbox // -1 Link.s = Minus2fromCbox // -2 State.s = Minus3fromCbox // -3 Pointer.s = Minus3fromCbox // -3 TLink.s = Minus4fromCbox // -4 Time.s = Minus5fromCbox // -5 MachineTRUE = OnefromCbox MachineFALSE = ZerofromCbox ; USE "t425with.vbc" // definitions and predefined instruction label addresses (e.g. REV)
DO
REV: XbusfromConstBox OnesfromCbox YbusfromConstBox AregfromBregSlave BregfromAregSlave OregFrom0 Next ;
LDDEVID: XbusfromAreg YbusfromConstBox DevIdfromCbox ZbusFromYbus AregfromZbus BregfromAregSlave CregfromBregSlave OregFrom0 Next ;
// the rest of the t425 VBC code follows ...