% File: MIOCDefs.mc

Edit by Danielson on July 23, 1980 3:27 PM:
IOMisc bits for half-duplex bit-synchronous
Edit by Danielson on May 21, 1980 3:58 PM:
New bits for TTY error status
Edit by Danielson on March 21, 1980 5:54 PM:
IOMisc bits for intraframe fill
Edit by Danielson on January 21, 1980 4:48 PM:
Added status bits
Edit by Danielson on January 16, 1980 12:59 PM

MIOC microcode definitions.

%

SET TASK [0];

* Registers used by MIOC code

RV[IOInt0,0];RV[IOSave,0];RV[IOR0,0];
RV[IOInt1,1];
RV[IOTemp0,2];
RV[IOTemp1,3];

RV[IOTemp4,4]; RV[IOPollCmd,4];
RV[IOTemp5,5]; RV[IOResults,5];
RV[IOTemp6,6]; RV[IOTimerInit,6];
RV[IOTemp7,7]; RV[IOTimer,7];

RV[IOTemp10,10]; RV[IOPollStat,10];
RV[IOTemp11,11]; RV[IOPollRegs,11];
RV[IOTemp12,12];
RV[IOMisc,13];
* Misc (see below)


RV[IOiocb,14];
* IOCB pointer (LONG)
RV[IOiocbHi,15];
RV[IOcsb,16];
* CSB pointer (LONG)
RV[IOcsbHi,17];

* IOMisc bits

MC[IOMiscInput,000001];
* Input in progress
MC[IOMiscCount,000036];
* Current event count
MC[IOMiscFake,000040];
* Fake wakeup in progress
MC[IOMiscEnabled,004000];
* Chip transmitter enabled

MC[IOMiscFill,000400];
* Send fill char ASAP (Byte only)
MC[IOMiscSentFirst,001000];
* Sent 1st fill char (Byte only)
MC[IOMiscTimeout,002000];
* Timeout occurred (Byte only)

MC[IOMiscEOFTImeout,2000];
* Enable EOF timeouts (Bit only)
MC[IOMiscEOFBits,3400];
* EOF bits (Bit only)
MC[IOMiscEOFIncr,1000];
* Increment EOF state (Bit only)

MC[IOMiscTTYStatEnd,000200];
* Bad stat forced end (TTY only)
MC[IOMiscTTYTimeout,000400];
* TTY timeout (TTY only)
MC[IOMiscTTYChars,001000];
* TTY chars in buffer (TTY only)

* Dispatch and other macros

MACRO[IOWakeDisp,DISPATCH[#1,15,3]];
* Wakeup type dispatch
MACRO[IOIntDisp,DISPATCH[#1,14,4]];
* Interrupt type dispatch
MACRO[IOPollerDisp,DISPATCH[#1,1,4]];
* Poller command dispatch
MACRO[IOLoadNotifyHi,AND@[ADD[LSHIFT[#1,14],#2],177400]C];
MACRO[IOLoadNotifyLo,AND@[ADD[LSHIFT[#1,14],#2],000377]C];
MACRO[IOEventBit,RSHIFT[100000,#1]];
* Macro to build event words
* At locations

SET [IOStartXmtrLoc,ADD[LSHIFT[IOPage,10],235]];
* Interrupt type
SET [IOTimeoutLoc,ADD[LSHIFT[IOPage,10],236]];
* Interrupt type
SET [IOInitOverlayLoc,ADD[LSHIFT[IOPage,10],237]];
* Initialization for overlay
SET [IOIntrLoc,ADD[LSHIFT[IOPage,10],240]];
* Interrupt type

SET [IOPollLoc,ADD[LSHIFT[IOPage,10],320]];
* Action type
SET [IOWakeupLoc,ADD[LSHIFT[IOPage,10],340]];
* Wakeup type
SET [IOFixedLoc,ADD[LSHIFT[IOPage,10],360]];
* Fixed locations

* Fixed locations

SET [IORdRegALoc,ADD[IOFixedLoc,0]];
* Read command--channel A
SET [IORdRegBLoc,ADD[IOFixedLoc,1]];
* Read command--channel B
SET [IOWrRegALoc,ADD[IOFixedLoc,2]];
* Write command--channel A
SET [IOWrRegBLoc,ADD[IOFixedLoc,3]];
* Write command--channel B
SET [IORdDataALoc,ADD[IOFixedLoc,4]];
* Read data--channel A
SET [IORdDataBLoc,ADD[IOFixedLoc,5]];
* Read data--channel B
SET [IOWrDataALoc,ADD[IOFixedLoc,6]];
* Write data--channel A
SET [IOWrDataBLoc,ADD[IOFixedLOc,7]];
* Write data--channel B
SET [IOIntrDoneLoc,ADD[IOFixedLoc,10]];
* End code for RS232C
SET [IODoNotifyLoc,ADD[IOFixedLoc,11]];
* Naked notify code

* CSB offsets

MC[IOcsbPrinterMask,0];
* Printer wakeup mask
MC[IOcsbPoller,4];
* Poller Command/Reg/Data
MC[IOcsbResults,5];
* Results from Poller Command
MC[IOcsbTimerInit,6];
* Timer initialize value
MC[IOcsbTimer,7];
* Timer current value
MC[IOcsbOut,10];
* Output ring read pointer
MC[IOcsbIn,11];
* Input ring write pointer
MC[IOcsbMask,12];
* Wakeup mask
MC[IOcsbRegs,14];
* Reg3/Reg5 data
MC[IOcsbStat,15];
* Status
MC[IOcsbTables,16];
* LONG POINTER to tables

* IOCB definition

MC[IOIOCBNext,0];
* Next IOCB in chain
MC[IOIOCBBCC,1];
* Current value of checksum
MC[IOIOCBState,2];
* Current state information
MC[IOIOCBStat,3];
* IOCB status bits
MC[IOIOCBBuffer,4];
* Pointer to data buffer
MC[IOIOCBMaxCount,6];
* Buffer length
MC[IOIOCBOffset,7];
* Offset to start of data
MC[IOIOCBStart,10];
* Starting offset
MC[IOIOCBSynch,11];
* Condition variable
MC[IOIOCBBits,12];
* Completion bits

* Comm chip commands

MC[IONull,00];
* Null command
MC[IOAbort,10];
* Send SDLC abort
MC[IOResetExt,20];
* Reset external status
MC[IOResetChan,30];
* Reset channel
MC[IOEnabIntr,40];
* Interrupt on next character
MC[IOResetXmtr,50];
* Reset transmitter interrupt
MC[IOResetError,60];
* Reset error
MC[IOReturnIntr,70];
* Return from interrupt
MC[IOResetRcvrCRC,100];
* Reset receiver CRC
MC[IOResetXmtrCRC,200];
* Reset transmitter CRC
MC[IOResetUnderrun,300];
* Reset underrun/EOM latch

* Load Comm command bits

SET[IOM1,10000];
* M1 channel
SET[IOWr,0];
* Write
SET[IORd,20000];
* Read
SET[IOData,0];
* Select data registers
SET[IOCmd,40000];
* Select command registers
SET[IOChanA,0];
* Select channel A
SET[IOChanB,100000];
* Select channel B

* Load interval timer command bits

SET[IOitWrite,400];
* Write
SET[IOitRead,1000];
* Read
SET[IOitA1,2000];
* Addressing bit A1
SET[IOitA0,4000];
* Addressing bit A0
SET[IOitEnable,10000];
* Enable timer 3 gate

* MIOC output registers

SET[IOResetMIOC,0];
* Reset MIOC
SET[IOErrorReset,1];
* Reset Error
SET[IOAllowWakeup,2];
* Allow Wakeup (if BIT 17 = 1)
SET[IOLoadTimer,3];
* Load Interval Timer
SET[IOLoadRS232,4];
* Load Communication Chip
SET[IOLoadAutoDial,5];
* Load Auto Dialer
SET[IOLoadPlotterCmd,6];
* Load Plotter Command
SET[IOLoadPlotterData,7];
* Load Plotter Data
MC[IOfOutputReset,14];
*Does not use Odata bits

SET[IOLoadPrinter,15];* Load Printer
SET[IOResetTimer,16];
* Reset Timer
SET[IOClearRingLatch,17];
* Clear Ring Latch

* MIOC input registers

SET[IOReadMIOCID,0];
* Read ID
SET[IOReadWakeup,1];
* Read Wakeup Status
SET[IOReadTimer,2];
* Read Timer Data/Status
SET[IOReadRS232,3];
* Read RS232 Data/Status
SET[IOReadAutoDial,4];
* Read AutoDial Data/Status
SET[IOReadPlotter,5];
* Read Plotter Status
SET[IOReadPrinter,6];
* Read Printer Status

MC[IOMIOCId,010000];
* Magic Id for MIOC
MC[IOTTYBadStatus,160];
* Parity, Framing, DataLost

MC[IOStatEvent,1];
* External stat intr occurred
MC[IOStatDataLost,2];
* Data Lost occurred.
MC[IOStatSynSeen,4];
* SYN char seen