
      HED OUTPUT MESSAGE TO OTHER MACHINE 
* 
**
***       OUTPUT MESSAGE TO OTHER MACHINE 
**
* 
*   THIS ROUTINE HANDLES I/O PROCESSOR MESSAGES TO THE SYSTEM 
*   PROCESSOR AND CHECKS FOR THE SPECIAL CONDITION OF SYSTEM
*   RESTART.  THE FOLLOWING ARE CODES FOR THE I/O PROCESSOR 
*   MESSAGES: 
* 
      SPC 1 
HVL   EQU .         HAVE A COMPLETE LINE
ABR   OCT 020000    USER'S ABORT REQUEST
BFL   OCT 040000    BUFFER IS FULL
BFE   OCT 060000    BUFFER IS EMPTY 
ETO   OCT 100000    ENTER STATEMENT TIMED OUT 
UHU   OCT 120000    USER HUNG UP
      SPC 1 
* 
**        OUTPUT MESSAGE
* 
OMTOM NOP 
      CLF 0 
      STA MTEMP     SAVE A-REGISTER 
RLP   EQU *         WAIT FOR ACKNOWLEDGEMENT
      SFS C2          OF PREVIOUS TRANSIMISSION 
      JMP SINIT     CHECK FOR STARTUP 
      OTA C2        OUTPUT MESSAGE CODE 
      STC C2,C      INTERRUPT OTHER MACHINE 
      CLC C2        WE WANT NO INTERRUPT
      STF 0 
      JMP OMTOM,I 
* 
**        CHECK FOR SYSTEM STARTUP
* 
SINIT EQU * 
      SFS C1        CHECK FOR COMMUNICATIONS
      JMP RLP       NONE - WAIT FOR RESPONSE
      LIA C1        GET INPUT WORD
      STA RCODE       AND SAVE IT 
      AND TMASK     MASK OUT TTY# FIELD 
      CPA ICODE     CHECK FOR RESTART.
      JMP STUP,I    YES - CALL STARTUP ROUTINE
      CPA KCODE     CHECK FOR CORE DUMP          [B]
      JMP DUMP,I    YES                          [B]
      LDA MTEMP     NO - RESTORE A
      JMP RLP 
      HED MULTIPLEXER OUTPUT ROUTINE
* 
**
***    MULTIPLEXER OUTPUT ROUTINE 
**
* 
*   THIS ROUTINE HANDLES ALL OUTPUT TO BOTH MULTIPLEXER BOARDS. 
*   THE FORMAT IS AS FOLLOWS: 
*               A REGISTER = DATA 
*               B REGISTER = UNIT NUMBER
* 
MUXOR NOP 
      CLF 0         STOP INTERRUPTS 
      STA ATEMP     SAVE A
      BLF,CLE,ERB   POSITION
      RBR             UNIT NUMBER 
      SEZ           FIRST BOARD?
      JMP MUXOY     NO
      SPC 1 
* 
**   FIRST MUX BOARD
* 
      LIA MPX+1     WAIT FOR
      SSA             SEEKING BIT 
      JMP *-2           TO CLEAR
      LDA ATEMP     RESTORE A 
      OTA MPX       OUTPUT DATA 
      OTB MPX+1       AND UNIT NUMBER 
      STC MPX 
      JMP MUXOR,I   RETURN
      SPC 1 
* 
**   SECOND MUX BOARD 
* 
MUXOY LIA MPY+1     WAIT FOR
      SSA             SEEKING BIT 
      JMP *-2           TO CLEAR
      LDA ATEMP     RESTORE A 
      OTA MPY       OUTPUT DATA 
      OTB MPY+1       AND UNIT NUMBER 
      STC MPY 
      JMP MUXOR,I   RETURN
MUXRE EQU * 
      HED MULTIPLEXER DRIVER
      ORG 2000B 
* 
**
**    INTERRUPT ROUTINE FOR FIRST MULTIPLEXER 
**
* 
MPXIO NOP 
      STA MPXA      S   A,
      STB MPXB       A   B, 
      ERB             V   AND 
      STB MPXE         E   E
      LIA MPX       GET MPX 
      STA MPXLC       STATUS
      LIA MPX+1         AND 
      STA MPXUC           SAVE IT 
      LDA YFLAG     IS Y-MULTIPLEXER FLAG SET?
      SZA,RSS 
      JMP MUXX      NO - CONTINUE 
      STA XFLAG     YES - SET X-MULTIPLEXER FLAG
      LDA MPXE      RESTORE 
      ELA             E,
      LDA MPXA        A,
      LDB MPXB        AND B 
      JMP MPXIO,I   RETURN
      SPC 2 
* 
**
**    INTERRUPT ROUTINE FOR SECOND MULTIPLEXER
**
* 
MPYIO NOP 
      CLF 0 
      STA MPYA      S   A,
      STB MPYB       A   B, 
      ERB             V   AND 
      STB MPYE         E   E
      LIA MPY 
      STA LOWER     GET MPY STATUS, 
      LIA MPY+1       CONVERT TTY# TO 
      IOR SYBIT         UPPER 16 TTYS,
      STA UPPER           AND SAVE THEM 
      CLB,INB 
      STB YFLAG     SET Y-MULTIPLEXER FLAG
      STF 0 
      JMP MUXY
      SPC 3 
* 
**    DRIVER INITIALIZATION 
* 
MUXX  LDA MPXLC     SET 
      STA LOWER       STATUS
      LDA MPXUC         VARIABLES 
      STA UPPER 
MUXY  ALF           MOVE TTY# TO
      RAL,RAL         RIGHT END AND 
      AND B37           MASK TO 5 BITS
      ADA TTYTP     ADD ON TTY TABLE POINTER
      LDB A,I       B => TTY# 
      STB XTNUM     SAVE
      INB           => CHARACTER COUNT
      STB XCCNT 
      INB           => RUNNING BUFFER POINTER 
      STB XBPNT 
      INB           => START OF BUFFER
      STB XBSTR 
      INB           => START OF FIRST BUFFER
      STB XBHED 
      INB           => SAVED BUFFER POINTER 
      STB XBSAV 
      INB           => START OF PHYSICAL BUFFER 
      STB XBGIN 
      INB           => END OF PHYSICAL BUFFER 
      STB XBEND 
      INB           => STATUS 
      STB XSTAT 
      LDA LOWER     GET CHARACTER 
      AND BMASK       AND TEST FOR
      SZA,RSS           ATTEMPTED ABORT 
      JMP ABORT     YES - GO TO ABORT LOGIC 
      LDA UPPER     NO - GET STATUS AND 
      SLA             TEST FOR INPUT
      JMP MPXOP     NO GO TO OUTPUT LOGIC 
      LDA B,I       GET USER'S STATUS 
      AND NIBT      IS INPUT ALLOWED? 
      SZA,RSS 
      JMP INPTX     YES.
      ADB .+?TYPE-?STAT  NO. SELECTRIC? 
      LDA B,I 
      SZA,RSS 
      JMP MPXEP     NO. IGNORE. 
      LDA LOWER     YES. GET DATA.
      AND B177      MASK DATA BITS. 
      CPA CIRCD     CHAR. = CIRCLE D? 
      RSS 
      JMP MPXEP     NO. IGNORE. 
      LDA B,I       YES. A= ?TYPE 
      ADB .-?TYPE   B=> ?TNUM 
      IOR TRINT     SET UP FOR TRANSMIT 
      CPB LPTTY     INTERRUPT.
      AND NBT8      IF USER HAS LP
      AND UCNBT         RESET BIT8. 
      ADB .+?TYPE   RESET UPPER CASE BIT. 
      STA B,I 
      JMP MPXEP     GET OUT.
      HED MULTIPLEXER DRIVER - RECEIVE CHANNEL PROCESSING 
* 
**
***   RECEIVE CHANNEL PROCESSING
**
* 
INPTX EQU * 
      INB           B => ALLOWED TIME 
      STB XATIM 
      LDA LOWER     GET DATA WORD 
      AND B177      MASK DATA BITS
      ADB .+?TYPE-?ATIM 
      STB XTYPE     B => TERMINAL TYPE
      LDB B,I       B = TERMINAL TYPE 
      SZB           DO A CODE CONVERSION IF 
      JSB ICNV,I      TERMINAL IS A SELECTRIC 
      STA XCHAR 
      LDB A         B = CHARACTER 
      LDA XSTAT,I   A = STATUS
      AND XOBT      CHECK FOR X-OFF BIT 
      SZA 
      JMP INPX      YES 
      LDA XSTAT,I   A = STATUS
      AND CXBT      CHECK FOR CANCEL BIT
      SZA,RSS 
      JMP INPX0     NONE
* 
*     TAPE MODE - IGNORE CHARACTERS UNTIL 'CR'
* 
INPX  XOR XSTAT,I   REMOVE CANCEL OR X-OFF
      CPB .+15B       BIT IF CHARACTER IS A 
      STA XSTAT,I       CARRIAGE RETURN 
      JMP MPXEP 
* 
**    TEST THE CHARACTER
* 
INPX0 CPB CANCL     TEST FOR 'CONTROL X'
      JMP INPX2 
      CPB BKSPC     TEST FOR BACKSPACE
      JMP INPX7 
      CPB CNTLQ     TEST FOR 'CONTROL Q'
      JMP INPX8 
      CPB CNTLW     TEST FOR 'CONTROL W'
      JMP INPX9 
      SZB           IGNORE FEED FRAMES
      CPB B177        AND RUBOUTS 
      JMP MPXEP 
      CPB .+12B     IGNORE LINEFEEDS
      JMP MPXEP 
      CPB .+23B     TEST FOR X-OFF
      RSS 
      JMP INPX1     NO
      LDA XSTAT,I   YES 
      AND BIT13     TEST FOR
      SZA,RSS         SUBTYPES 2 AND 3           [B]
      JMP MPXEP     NO - IGNORE CHARACTER 
      LDA XSTAT,I   YES 
      IOR XOBT      SET X-OFF BIT 
      STA XSTAT,I     AND REPLACE THE 
      LDA .+15B         X-OFF WITH A CR 
      STA XCHAR 
* 
**    APPEND CHARACTER TO BUFFER
* 
INPX1 LDA XBPNT,I   A => POSITION FOR THIS CHARACTER
      INA           A => POSITION FOR NEXT CHARACTER
      CPA XBEND,I   IF A => BEYOND END OF BUFFER, 
      ADA MBLEN       MAKE IT POINT TO START
      CPA XBSAV,I   IF BUFFER FULL,TRANSFER 
      JMP INPX2       FOR SPECIAL HANDLING
      LDB XBPNT,I   B => ADDRESS FOR THIS CHARACTER 
      STA XBPNT,I   SAVE THE INCREMENTED POINTER
      CLE,ERB       B = WORD ADDRESS
      LDA B,I       A = DESTINATION WORD
      SEZ,RSS       IF HIGH CHARACTER 
      ALF,ALF         ROTATE TO BOTTOM
      AND HIMSK     CLEAR LOWER 8 BITS
      IOR XCHAR     MERGE WITH NEW CHARACTER
      SEZ,RSS       IF HIGH CHARACTER,
      ALF,ALF         ROTATE BACK 
      STA B,I       STORE BACK IN BUFFER
      LDA XCHAR     IF CHARACTER
      CPA .+15B       WAS A 'CR'
      JMP INPX4         GO PROCESS IT 
      JMP MPXEP 
* 
**    PROCESS 'CONTROL X'  (CANCEL) 
* 
INPX2 LDA XBSTR,I   RESET BUFFER POINTER
      STA XBPNT,I     TO BEGINNING
      LDA XSTAT,I   LOAD USER'S STATUS
      AND TPBT      IS USER IN TAPE MODE? 
      SZA 
      JMP INPX3     YES 
      LDB XBSTR,I   NO, MOVE
      CLE,ERB         REVERSE 
      LDA RVRSL         SLASH AND 
      STA B,I             CR LF TO
      INB                   USER'S
      LDA CRLF                BUFFER
      STA B,I 
      LDB XTNUM     B => TTY# 
      INB           B => CHARACTER COUNT
      LDA .-3       SET CHARACTER 
      STA B,I         COUNT TO -3 
      LDA XSTAT,I   CHANGE
      AND IONBT       STATUS
      STA XSTAT,I       TO OUTPUT 
      AND RNBT      IF USER NOT 
      SZA,RSS         RUNNING 
      JSB OTPUT     STOP INPUT
      LDA SYNCC 
      LDB XTYPE,I     AND 
      SZB 
      IOR SLBIT         INITIATE
      LDB XTNUM,I 
      JSB IMUXR,I          OUTPUT 
      JMP MPXEP 
* 
INPX3 LDA XSTAT,I   SET THE 
      IOR CXBT        CANCEL BIT
      STA XSTAT,I       IN STATUS 
      JMP MPXEP 
* 
**    PROCESS CARRIAGE RETURN 
* 
INPX4 LDA XSTAT,I   GET USER'S STATUS 
      AND TPBT      IS USER IN
      SZA             TAPE MODE?
      JMP INPX6     YES 
      JSB OTPUT     NO, CHANGE STATUS AND MPX PARAMS
      LDA XSTAT,I   A = STATUS
      AND ENBT      IS USER TIMED 
      SZA,RSS         FOR <ENTER>?
      JMP INPX5     NO
* 
**    PROCESS RESPONSE TO <ENTER STATEMENT> 
* 
      XOR XSTAT,I   YES - CLEAR 
      STA XSTAT,I     TIMING FLAG 
      LDB XATIM     B => ATIM 
      LDA B,I       A =  TIME-OUT VALUE 
      INB           B => TIMO 
      ADA B,I       A = TIME ACTUALLY USED
      STA MPXT0     SAVE NUMBER 
      ALS           2 * NUMBER      D 
      ADA MPXT0     3 * NUMBER       I    B 
      STA MPXT0                       V    Y
      ALF,RAR       24 * NUMBER        I
      CLE,ELA                           D   10
      ADA MPXT0     51 * NUMBER          E
      ERA 
      ALF,ALF       DIVIDE BY 512 
      AND B377      A = NUMBER DIVIDED BY 10
      SZA           ZERO AND NEGATIVE 
      SSA             NOT ALLOWED - 
      CLA,INA           SET TO ONE
* 
**    INFORM SYSTEM OF COMPLETE LINE
* 
INPX5 IOR HVL       ADD HAVE A LINE INDICATOR 
      IOR XTNUM,I   ADD TTY#
      JSB IOMTM,I   TELL OTHER MACHINE
* 
*     CHECK FOR TEMPORARY LINE PRINTER SUSPENSION 
* 
      LDA XTNUM     GET TTY# ADDRESS
      CPA TLSUP     IS LP SUSPENDED 
      CLB,RSS         FOR THIS USER?
      JMP MPXEP     NO
      STA LPTTY     YES - RESET LP INDICATOR AND
      STB TLSUP       CLEAR TEMP LP SUSPENSION FLAG 
      JMP MPXEP 
* 
INPX6 LDA XBSTR,I   GET POINTER TO BEGINNING
      LDB XBPNT,I     OF CURRENT BUFFER AND RESET 
      STB XBSTR,I       TO CURRENT CHARACTER
      CPA XBHED,I   IF BUFFER JUST COMPLETED WAS
      CLA,RSS 
      JMP MPXEP 
      JMP INPX5     FIRST, TELL OTHER MACHINE 
* 
**    PROCESS BACKSPACE 
* 
INPX7 LDA XBPNT,I   GET BUFFER POINTER
      CPA XBSTR,I   IF NO CHARACTERS
      JMP MPXEP       RETURN IMMEDIATELY
      CPA XBGIN,I   IF AT BEGINNING OF PHYSICAL 
      ADA BLEN        BUFFER, MOVE TO END 
      ADA .-1       BACK-UP ONE SPACE 
      STA XBPNT,I 
      JMP MPXEP 
* 
**    PROCESS 'CONTROL Q'  (SUSPEND LINE PRINTER OUTPUT)
* 
INPX8 LDA XTNUM     GET TTY# ADDRESS
      CPA LPTTY     DOES THIS 
      RSS             USER HAVE                  [B]
      CPA TLSUP         THE LINE
      CLB,RSS             PRINTER?
      JMP INPX1     NO - RETURN AND PROCESS CHAR. 
      STA TLPR      YES - SUSPEND LP OUTPUT 
      STB LPTTY     CLEAR LP
      STB TLSUP       INDICATORS
      JMP MPXEP 
* 
**    PROCESS 'CONTROL W'  (RESUME LINE PRINTER OUTPUT) 
* 
INPX9 LDA XTNUM     GET TTY# ADDRESS
      CPA TLPR      IS LP SUSPENED
      CLB,RSS         FOR THIS USER?
      JMP INPX1     NO - RETURN AND PROCESS CHAR. 
      STA LPTTY     YES - RESET LP INDICATOR
      STB TLPR      CLEAR TEMP LP RELEASE FLAG
      JMP MPXEP 
      SKP 
* 
**    STOP INPUT - CONFIGURE SEND CHANNEL 
* 
OTPUT NOP 
      LDB XTNUM 
      ADB .+?STAT   B => STATUS 
      LDA B,I       SET 
      IOR NIBT        'NO INPUT ALLOWED'
      STA B,I           BIT 
      ADB .+?RPRM-?STAT  PREVENT
      LDA B,I         CHARACTER 
      AND NECHO         ECHO
      LDB XTNUM,I   GET UNIT NUMBER 
      JSB IMUXR,I   OUTPUT TO MULTIPLEXER 
      STF 0 
      LDA XTYPE,I 
      SZA,RSS       RETURN IF TERMINAL
      JMP OTPUT,I     IS NOT A SELECTRIC
      IOR BIT8      SET "CIRCLE D" BIT
      STA XTYPE,I 
      JMP OTPUT,I 
      SPC 2 
* 
**
***  ABORT PROCESSING 
**
* 
ABORT CLF 0 
      LDA UPPER     GET MUX STATUS AND TEST 
      SLA             FOR RECEIVE INTERRUPT 
      JMP MPXOP     NO - OUTPUT NEXT CHARACTER
      LDA B,I       A = STATUS
      SLA           IGNORE IF TAPE MODE 
      JMP MPXEP 
      AND NIBT      CHECK FOR 
      SZA,RSS         OUTPUT MODE 
      JMP MPXEP     INPUT MODE - IGNORE 
      LDA XTNUM,I   GET TTY# AND ADD
      IOR ABR         ABORT REQUEST CODE
      JSB IOMTM,I   SEND TO OTHER MACHINE 
      JMP MPXEP 
      HED MULTIPLEXER DRIVER - SEND CHANNEL PROCESSING
* 
**
***   SEND CHANNEL PROCESSING 
**
* 
MPXOP ADB .+?TYPE-?STAT  B => TERMINAL TYPE FLAG
      STB XTYPE 
      ADB .+?DCNT-?TYPE  B => DELAY COUNTER 
      STB XDCNT 
      INB           B => CR DELAY CHARACTER COUNTER 
      STB XSCNT 
      CLF 0 
      LDB XCCNT,I   IF NO CHARACTERS
      SZB,RSS         LEFT, GO TO END OF
      JMP MPXEO         OUTPUT PROCESSING 
      STF 0 
      LDB XBPNT,I   B => BUFFER POINTER 
      INB           B => NEXT CHARACTER 
      CPB XBEND,I   IF END OF BUFFER, 
      ADB MBLEN       CHANGE TO BEGINNING 
      STB XTPNT     SAVE POINTER
      LDA XDCNT,I   CHECK DELAY COUNTER FOR CR
      SZA             OR LF DELAY IN PROGRESS 
      JMP DELAY     GO TO DELAY PROCESSING
      CLE,ERB       POSITION AS WORD POINTER
      LDA B,I       A = WORD CONTAINING CHARACTER 
      SEZ,RSS       POSITION CHARACTER
      ALF,ALF         IN BITS 7-0 
      AND B177      MASK OUT CHARACTER
      STA XCHAR       AND SAVE IT 
      LDB XTYPE,I   GET TERMINAL TYPE 
      SZB           IF TYPE IS A SELECTRIC, 
      JSB SELPR       BRANCH FOR CONVERSION 
      IOR DMASK     ADD STOP AND PARITY BITS
      LDB XTNUM,I   B = UNIT NUMBER 
      JSB IMUXR,I   OUTPUT CHARACTER
      STF 0 
      LDA XCHAR     A = CHARACTER 
      CPA .+15B     IF CHARACTER IS 
      JSB CRDLY       CR, SET UP DELAY
      CPA .+12B     IF CHARACTER IS 
      JSB LFDLY       LF, SET UP DELAY
* 
**    ADJUST BUFFER POINTERS
* 
BUFAD CLF 0 
      LDA XTPNT     GET BUFFER POINTER TEMPORARY
      STA XBPNT,I   RESET BUFFER POINTER
      ISZ XCCNT,I   INCREMENT CHARACTER COUNT 
      RSS           IF COUNT IS ZERO, GO
      JMP MPXEP       TO MUX END OF PROCESSING
      ISZ XSCNT,I   INCREMENT CR DELAY CHAR. COUNT
      LDA XCCNT,I   GET CHARACTER COUNT 
      STF 0 
      CPA .-10      ARE EXACTLY 10
      RSS             CHARACTERS LEFT?
      JMP MPXEP     NO - CONTINUE 
* 
**    NOTIFY SYSTEM - BUFFER CAN TAKE CHARACTERS AGAIN
* 
      LDA XSTAT,I   YES, GET THE STATUS 
      AND STNBT       AND CHECK WHETHER USER
      CPA XSTAT,I       WAS STOPPED OR NOT
      JMP MPXEP     NOT - CONTINUE
      STA XSTAT,I   CLEAR BUFFER FULL BIT 
      LDA XTNUM,I   GET USER'S TTY# 
      IOR BFE       ADD BUFFER EMPTY CODE 
      JSB IOMTM,I      AND TELL OTHER MACHINE 
      JMP MPXEP 
* 
**    OUTPUT DELAY CHARACTER
* 
DELAY LDA SYNCC     GET DELAY CHARACTER 
      LDB XTYPE,I 
      SZB 
      IOR SLBIT 
      LDB XTNUM,I   B = UNIT NUMBER 
      JSB IMUXR,I   OUTPUT DELAY CHARACTER
      ISZ XDCNT,I   CHECK FOR FURTHER DELAY TIME
      JMP MPXEP     YES 
      JMP BUFAD     NO - ADJUST BUFFER POINTERS 
* 
**    SELECTRIC CHARACTER PROCESSING
* 
SELPR NOP 
      LDA XTNUM     IF USER HAS LP, 
      CPA LPTTY       IGNORE THE
      JMP SLPII         INTERRUPT 
      JSB OCNV,I    CONVERT ASCII CHARACTER 
      SZB,RSS       RETURN UNLESS 
      JMP SELPR,I     MULTI-CHARACTERS REQUIRED 
      LDB XTNUM,I   B = UNIT NUMBER 
      IOR DMASK     ADD STOP AND PARITY BITS
      JSB IMUXR,I      AND OUTPUT IT
      JMP MPXEP 
* 
SLPII LDA XTYPE,I   CLEAR 
      AND NBT8        CIRCLE D
      STA XTYPE,I       BIT 
      JMP MPXEP 
      SKP 
* 
**    END OF OUTPUT PROCESSING
* 
MPXEO LDA LPERF     GET LINE PRINTER ERROR REPORT 
      CPA XTNUM       FLAG AND IF IT MATCHES THIS 
      JMP MPXEF         USER, BRANCH FOR PROCESSING 
      LDA XTYPE,I   IS THE
      AND CBNBT       CIRCLE C
      CPA XTYPE,I       BIT SET?
      JMP MPXEC     NO - CONTINUE 
      STA XTYPE,I   YES, CLEAR IT 
      JMP MPXEP       AND GET OUT OF TOWN 
MPXEC EQU * 
      LDA XBGIN,I   RESET ALL 
      STA XBPNT,I     BUFFER POINTERS 
      STA XBSTR,I       TO THE BEGINNING
      STA XBHED,I         OF THE USER'S 
      STA XBSAV,I           BUFFER
      LDA XSTAT,I   CHANGE
      IOR IOBT        STATUS
      STA XSTAT,I       TO INPUT
      AND ICNBT     REMOVE 'INPUT CONFIGURATION' BIT
      CPA XSTAT,I   BRANCH
      RSS             IF IT 
      JMP MPXIC         WAS SET 
      AND RNBT        CHECK FOR USER RUNNING
      SZA 
      JMP MPXEP     YES 
      LDA XSTAT,I   NO, REMOVE
MPXIC AND NINBT       'NO INPUT ALLOWED'
      STA XSTAT,I       BIT 
      LDB XTNUM     GET USER'S
      ADB .+?RPRM     RECEIVE 
      LDA B,I           PARAMETER 
      LDB XTNUM,I   B = UNIT NUMBER 
      JSB IMUXR,I   OUTPUT TO MULTIPLEXER 
      LDA XTYPE,I   TERMINAL
      SZA,RSS         A SELECTRIC?
      JMP MPXEP     NO
      IOR CBBT      YES, SET CIRCLE C 
      AND NDUBT     BIT, CLEAR DIBT AND 
      STA XTYPE,I       UPPER CASE BIT
      LDA CRCLC 
      LDB XTNUM,I   OUTPUT
      JSB IMUXR,I      CIRCLE C 
      JMP MPXEP 
* 
MPXEF STA LPDRF     SET LP DOWN RETURN FLAG 
      JMP MPXEP 
