*---------------------------------------------------------------------------- Title[EtherDefs.Mc...December 6, 1980 8:05 PM...Taft]; * Dorado Ethernet definitions *---------------------------------------------------------------------------- *---------------------------------------------------------------------------- * Hardware definitions *---------------------------------------------------------------------------- * TIOA assignments Device[EData, 15]; * Input and output data Device[EControl, 16]; * Control and status * Receiver status bits in end-of-packet word (EData). Assignments are * Alto-compatible (except RxCollision, which the Alto doesn't have) MC[RxCollision, 200]; * Receiver-detected collision MC[RxDataLate, 40]; * Input data late MC[RxCRCError, 10]; * CRC bad MC[EInCmd, 4]; * Input command issued ** Not in hardware: ** MC[EOutCmd, 2]; * Output command issued ** for Alto emulation only ** MC[RxIncTrans, 1]; * Incorrectly terminated packet * Transmitter and general interface status bits (EControl) * Left byte is Ethernet host address. MC[RxOn, 200]; * Receiver on MC[TxOn, 100]; * Transmitter on MC[LoopBack, 40]; * Loop-back mode on MC[TxCollision, 20]; * Transmitter-detected collision MC[NoWakeups, 10]; * Task wakeups enabled if 0, disabled if 1 MC[TxDataLate, 4]; * Output data late MC[SingleStep, 2]; * Single-step mode on MC[TxFifoPE, 1]; * Transmitter-detected IOB or Fifo parity error * Status masks useful for Alto emulation MC[EISMask, RxCollision, RxDataLate, RxCRCError, RxIncTrans]; * Input status MC[EOSMask, TxDataLate, TxCollision, TxFifoPE]; * Output status MC[ECmdBits, EInCmd, EOutCmd]; * Command bits * Control bits (EControl) -- Transmitter control (bits 0-3) MC[TxCmdEnbl, 007777]; * Bit 0 = 0 enables decoding of output commands MC[STxOn, 40000]; * Turn on output if 1, off if 0 MC[STxEOP, 20000]; * Send end of packet if 1 MC[STxCntDown, 10000]; * Generate countdown wakeup if 1 MC[TurnOffTx, TxCmdEnbl]; MC[TurnOnTx, TxCmdEnbl, STxOn]; MC[CountDown, TxCmdEnbl, STxOn, STxCntDown]; MC[SendEOP, TxCmdEnbl, STxOn, STxEOP]; * Control bits (EControl) -- Receiver control (bits 4-7) MC[RxCmdEnbl, 170377]; * Bit 4 = 0 enables decoding of input commands MC[SRxOn, 2000]; * Turn on input if 1, off if 0 MC[SRxBOP', 1000]; * Wait for beginning of next packet if 0 MC[TurnOnRx, RxCmdEnbl, SRxOn, SRxBOP']; MC[TurnOffRx, RxCmdEnbl]; MC[WaitForBOP, RxCmdEnbl, SRxOn]; * Control bits (EControl) -- Test control (bits 8-15) MC[TestCmdEnbl, 177400]; * Bit 8 = 0 enables decoding of test commands MC[SLoopBack, 100]; * Turn on loop-back mode if 1, off if 0 MC[SSingleStep, 40]; * Turn on single-step mode if 1, off if 0 MC[SNoWakeups, 20]; * Enable task wakeups if 0, disable if 1 MC[SEtherClk, 10]; * Generate one EtherClk if 1 (SSingleStep must be 1) MC[SCollision', 4]; * Cause a collision indication if 0 MC[SPDInput, 2]; * Set flop that ORs a 1 into the received data if 1 MC[SReportCollisions, 1]; * Report receiver detected collisions *---------------------------------------------------------------------------- * R-registers *---------------------------------------------------------------------------- * In the Alto emulation, we could assume that the input and output tasks * never run at the same time and can share R-registers, since the emulated * Alto interface is half-duplex. However, the PrincOps version of the * microcode runs input and output tasks independently, so separate R-registers * are required. * The input and output R-registers have to be in separate banks because * the two tasks share task-independent subroutines that need to reference * task-specific registers and temporaries. However, we don't need very * many R-registers in either bank, so these banks may be shared with * other tasks. SetRMRegion[EIRegs]; * Used by input task -- first 3 must parallel EORegs :If[Not[AltoMode]]; ******** PrincOps version ******** RVN[EICB]; * Pointer to IOCB being worked on :EndIf; ********************************** RVN[EIPtr]; * Input main loop pointer/count RVN[EITemp1]; * Input temporaries RVN[EITemp2]; SetRMRegion[EORegs]; * Used by output task -- first 3 must parallel EIRegs :If[Not[AltoMode]]; ******** PrincOps version ******** RVN[EOCB]; * Pointer to IOCB being worked on :EndIf; ********************************** RVN[EOPtr]; * Output main loop pointer/count RVN[EOTemp1]; * Output temporary :If[AltoMode]; ********** Alto version ********** RVN[MinPktSpc]; * Minimum inter-packet spacing (units of 0.595 us) :Else; ******** PrincOps version ******** RVN[EOTemp2]; * Output temporary :EndIf; ********************************** RVN[EOTime]; * Time at end of last packet successfully transmitted RVN[RNum]; * State for random number generator RVN[RConst]; * Constant (13849) for random number generator * Region-independent R-register definitions :If[Not[AltoMode]]; ******** PrincOps version ******** RVRel[ExCB, And[IP[EICB], 17]]; :EndIf; ********************************** RVRel[ExPtr, And[IP[EIPtr], 17]]; RVRel[ExTemp1, And[IP[EITemp1], 17]]; *---------------------------------------------------------------------------- * Memory base registers *---------------------------------------------------------------------------- % -- Defined in ADefs.mc -- BR[EIBR, ?]; * Input base register BR[EOBR, ?]; * Output base register BR[ECBR, ?]; * Command base register {EmuBrHi,,600} -- Alto only % :If[AltoMode]; ********** Alto version ********** *---------------------------------------------------------------------------- * Control block addresses (for Alto emulation, relative to ECBR = 600) *---------------------------------------------------------------------------- MSC[EPLoc, 0]; * Post location MSC[EBLoc, 1]; * Interrupt bit mask MSC[EELoc, 2]; * Ending word count MSC[ELLoc, 3]; * Load mask MSC[EICLoc, 4]; * Input count MSC[EIPLoc, 5]; * Input pointer MSC[EOCLoc, 6]; * Output count MSC[EOPLoc, 7]; * Output pointer MSC[EHLoc, 10]; * Host address *---------------------------------------------------------------------------- * Microcode post codes (small integer in lh, ones in rh for XOR). *---------------------------------------------------------------------------- MC[InDone, 377]; * Input done MC[OutDone, 777]; * Output done MC[InBufOverflow, 1377]; * Input buffer overflowed MC[LoadOverflow, 1777]; * Load overflow MC[CountZero, 2377]; * Word count zero in input or output command MC[CmdAbort, 2777]; * Command aborted (by SIO) :EndIf; ********************************** (1552)