      HED MULTIPLEXOR INTERRUPT DRIVER. MPXNT NOP       STA MPXA      SAVE REGISTERS A,       STB MPXB       B,       ERB           AND       STB MPXE       E.       LIA MPX       GET NEW INPUT.      STA INBIT     SAVE IN INBIT.      LDB INPTF     GET OLD INPTF IN B.       CMA           COMPLEMENT NEW BITS.      IOR 1         SET INPTF=1 FOR EACH NEW 0 BIT.       STA INPTF       LDA INBIT     GET INBIT AGAIN. GET 0'S FOR EACH       AND ABTST     NEW INPUT OR OLD ABORT TRY.       IOR 1         INHIBIT IF INPTF=1.       CMA,SZA,RSS   SET 1 FOR EACH BIT FOR WHICH      JMP LADDR     WE WILL CALL SETIN.       STA 1       SPC 1 * NOW CALL SETIN FOR EACH NEW INPUT       SPC 1 NEWIN CLE,SLB,ERB   TTY00       JSB SETIN       CLE,SLB,ERB   TTY01       JSB SETIN       CLE,SLB,ERB   TTY02       JSB SETIN       CLE,SLB,ERB   TTY03       JSB SETIN       CLE,SLB,ERB   TTY04       JSB SETIN       CLE,SLB,ERB   TTY05       JSB SETIN       CLE,SLB,ERB   TTY06       JSB SETIN       CLE,SLB,ERB   TTY07       JSB SETIN       CLE,SLB,ERB   TTY08       JSB SETIN       CLE,SLB,ERB   TTY09       JSB SETIN       CLE,SLB,ERB   TTY10       JSB SETIN       CLE,SLB,ERB   TTY11       JSB SETIN       CLE,SLB,ERB   TTY12       JSB SETIN       CLE,SLB,ERB   TTY13       JSB SETIN       CLE,SLB,ERB   TTY14       JSB SETIN       CLE,SLB,ERB   TTY15       JSB SETIN * * CONTROL SHOULD NEVER RETURN TO THIS POINT.*       SPC 3 * SETIN SETS UP CONTROL FOR A NEW INPUT CHARACTER. IT FIRST DETER-* MINES WHETHER INPUT IS LEGAL FROM THE SPECIFIED TELETYPE.       SPC 1 SETIN NOP       STB MPXT0     SAVE BIT INDICATORS.      LDB SETIN     B=NEWIN+2*(TTY#+1)      ADB MNEWN     B=2*TTY#      BLS           B=4*TTY#      ADB DLADR     B=DLADR+4*TTY#+3      LDA 1,I       A=TTY TABLE ADDRESS       ADA .+?STAT   A=STATUS ADDRESS      STA MPXT1     SAVE STATUS ADDRESS.      ADA .+?ABCN-?STAT A=ABORT COUNTER ADDRESS       STA BPNT      SAVE ABORT COUNTER ADDRESS.       ADA .+?MASK-?ABCN A=MASK ADDRESS.       STA MASK      SAVE MASK ADDRESS.      LDA MPXT1,I   A=STATUS.       SSA,RSS       IGNORE IF STATUS IS ABORTING.       CPA %ABOR       JMP SET1      SZA           IF OTHER THAN IDLE      CPA %SYNT       SYNTAX      JMP *+4       CPA %INPT     OR INPUT, WE ABORTHIM.      RSS       JMP SET2+1      SPC 1 * SET UP LADDER CODE AND INITIALIZE VARIABLES.      SPC 1       LDA 1,I       A=>TELETYPE ENTRY       AND B1777       ADA ISZIP     CREATE ISZ INSTRUCTION.       ADB .-3       B=DLADR+4*TTY#      CPA 1,I       IF ISZ ALREADY THERE THIS IS      JMP SET2      ABORTING.       STA CPTR      SAVE ISZ.       LDA ABTST     IS ABTST SET TO INDICATE AN       IOR MASK,I    ABORT ATTEMPT?      CPA ABTST       JMP *+3       NO--START SETTING UP INPUT.       STA ABTST     YES--FORGET ABORT ATTEMPT AND       JMP SET3      GO REINSTATE INPTF.       LDA CPTR      GET ISZ AGAIN.      STA 1,I       SET UP ISZ.       ADB .+3       B=>TTY TABLE ADDRESS      LDB 1,I       B=>TTY TABLE      LDA .-4       SET TIME COUNTER      STA 1,I        TO -4.       INB           B=>CHARACTER.       CLA           INITIALIZE CHARACTER      STA 1,I        TO ZERO.       INB           B=>BIT COUNTER.       LDA .-10      SET BIT COUNTER       STA 1,I        TO -10.      JMP SET1      GO CHECK FOR ANY MORE TTYS.       SPC 1 * ABORT CODE      SPC 1 SET2  ADB .+3       LDA ABTST     TEST FOR ATTEMPTED ABORT.       AND MASK,I      SZA       JMP SET4      NO--GO START ATTEMPTED ABORT.       LDA INBIT     IF ABORT ATTEMPTED, TEST FOR      AND MASK,I    INPUT BIT STILL 0.      SZA,RSS       JMP SET5      IT IS--GO BUMP COUNTER.       IOR ABTST     INPUT=1. DISCONTINUE ABORT.       STA ABTST       LDA BPNT,I    IF COUNTER REACHED 0, SET UP      SZA,RSS        ABORT CONDITION.       JMP SET6SET3  LDA MASK,I    RESET INPTF TO 0 TO ALLOW MORE      CMA              INPUT.       AND INPTF       STA INPTF       JMP SET1      GO DO NEXT ENTRY. SET4  XOR ABTST     SET ABTST=0 TO INDICATE ABORT       STA ABTST     ATTEMPT.      LDA M100      SET ABCN TO -100 TO COUNT       JMP *+3         LENGTH OF BREAK.SET5  LDA BPNT,I    IF COUNTER NOT ALREADY ZERO,      SSA,INA          BUMP IT BY 1.      STA BPNT,I      JMP SET3SET6  CCA           SET ABORT REQUEST MODE.       STA MPXT1,I       LDA MPCOM     SET COM.BIT TO      IOR MASK,I     TELL SCHEDULER.      STA MPCOM       SPC 1 SET1  LDB MPXT0     GET BIT INDICATORS AGAIN.       SZB           IF ALL 0, GO DIRECTLY TO LADDR.       JMP SETIN,I   OTHERWISE,RETURN.       SPC 2 * THE INPUT-OUTPUT LADDR CONSISTS OF A SEQUENCE OF FOUR INSTRUCTIONS* FOR EACH TELETYPE. THESE INSTRUCTIONS ARE AS FOLLOWS: *     1.ISZ TIME COUNTER    OR   JMP *+4*     2.JMP *+3 *     3. JSB MPXIO*     4.DEF TIME COUNTER      SPC 1 * THE FOLLOWING INSTRUCTION EXISTS ONLY TO GET AN ERROR MESSAGE * FROM THE ASSEMBLER IF A PAGE BOUNDARY OVERFLOW CAN BE PRO-* DUCED AT RUN TIME.      SPC 1       ISZ TTY15       ORG *-1       SPC 1       SPC 2 LADDR JMP *+4       JMP *+3       JSB MPXIO       DEF TTY00 *       JMP *+4       JMP *+3       JSB MPXIO       DEF TTY01 *       JMP *+4       JMP *+3       JSB MPXIO       DEF TTY02 *       JMP *+4       JMP *+3       JSB MPXIO       DEF TTY03 *       JMP *+4       JMP *+3       JSB MPXIO       DEF TTY04 *       JMP *+4       JMP *+3       JSB MPXIO       DEF TTY05 *       JMP *+4       JMP *+3       JSB MPXIO       DEF TTY06 *       JMP *+4       JMP *+3       JSB MPXIO       DEF TTY07 *       JMP *+4       JMP *+3       JSB MPXIO       DEF TTY08 *       JMP *+4       JMP *+3       JSB MPXIO       DEF TTY09 *       JMP *+4       JMP *+3       JSB MPXIO       DEF TTY10 *       JMP *+4       JMP *+3       JSB MPXIO       DEF TTY11 *       JMP *+4       JMP *+3       JSB MPXIO       DEF TTY12 *       JMP *+4       JMP *+3       JSB MPXIO       DEF TTY13 *       JMP *+4       JMP *+3       JSB MPXIO       DEF TTY14 *       JMP *+4       JMP *+3       JSB MPXIO       DEF TTY15       SPC 3       LDA MPOUT     OUTPUT A NEW WORD TO      OTA MPX        THE MULTIPLEXOR.       LDA MPXE      RESTORE       ELA            E,       LDA MPXA       A,       LDB MPXB       AND B.       CLF MPX       ENABLE INTERRUPTS AGAIN.      JMP MPXNT,I       SPC 3 * THE MPXIO ROUTINE IS CALLED FOR IO    SERVICE OF A SINGLE TELE- * TYPE. IT IS CALLED WHENEVER A NEW BIT FOR A TELETYPE HAS COME IN* TO THE TELETYPE I/O REGISTER, OR WHEN IT IS NECESSARY TO* SEND A BIT OUT. THIS IS INDICATED BY THE TIME COUNTER * FOR THAT TELETYPE ROLLING OVER TO ZERO. * * CALLING SEQUENCE: *     ISZ TIME COUNTER*     JMP *+3 *     JSB MPXIO *     DEF TIME COUNTER      SPC 3 MPXIO NOP           ENTRY POINT       LDB MPXIO,I   B=>TIME COUNTER       ISZ MPXIO     ADJUST RETURN ADDRESS.      LDA .-8       RESET TIME COUNTER TO -8.       STA 1,I       INB           B=>CHARACTER      STB CPTR      CPTR=>CHARACTER       INB           B=>BIT COUNTER.       STB BCNT      BCNT=>BIT COUNTER.      INB           B=>MASK.      LDA 1,I       A=MASK.       STA MASK      SAVE IN MASK.       AND IOTOG     TEST FOR INPUT OR OUTPUT.       SZA,RSS       INPUT IF BIT = 1      JMP OUTPT      OUTPUT IF 0.       AND PLEX      IF FULL DUPLEX,       CMA           FORCE A ZERO INTO       AND MPOUT      THE APPROPRIATE BIT IN       STA MPOUT       MPOUT.      LDA INBIT     GET THE INPUT AND ISOLATE       AND MASK       THE BIT FOR THIS TELETYPE.       SZA,RSS       IF 0 SKIP NEXT PART       JMP *+4       IOR MPOUT     SET A ONE INTO THE      STA MPOUT       OUTPUT WORD.      CLA,INA       SET FLAG TO ONE.      ADA CPTR,I    ADD TO CHARACTER,       RAR            ROTATE,      STA CPTR,I      AND REPLACE       ISZ BCNT,I    TEST BIT COUNTER AND      JMP MPXIO,I    RETURN IF NOT END OF CHARACTER.      SPC 1 * END-OF-CHARACTER PROCESSING       SPC 1       ADB .+2       B=>RUNNING BUFFER POINTER       STB BPNT      INB           B=>START OF BUFFER      STB BSTR      INB           B=>START OF FIRST BUFFER.       STB BHED      INB           B=>START OF PHYSICAL BUFFER.      STB BGIN      INB           B=>END OF PHYSICAL BUFFER.      STB BEND      RAL           POSITION DATA BITS TO       ALF,ALF        BITS 6-0 OF A.       AND B177      MASK DATA BITS.       STA CPTR,I    PUT INPUT CHAR IN CPTR POSITION.      LDA MPXIO     A=>  <JSB INPUT> +2       ADA .-3       A=>  <JMP *+3>      LDB 0,I       B= <JMP *+3>      ADA .-1       CHANGE ISZ TO       STB 0,I         JMP *+4       LDA INPTF     RESET INPTF TO 0 SO ANOTHER       XOR MASK       CHARACTER CAN START.       STA INPTF       LDB CPTR,I    GET CHARACTER IN B.       LDA ESCF      HAS THIS TELETYPE BEEN RUBBED?      AND MASK      SZA,RSS       JMP INP.1     NOT RUBBED OUT.       SPC 1 * THE INPUT LINE HAS BEEN RUBBED OUT AND NOTHING HAS* BEEN DONE SINCE THE USER IS IN TAPE MODE.       SPC 1       XOR ESCF      PREPARE NEW VALUE OF ESCF.      CPB .+15B     IF CHARACTER IS A CARRIAGE      STA ESCF       RETURN, CLEAR ESCF.      JMP MPXIO,I       SPC 1 * NOW TEST CHARACTER *      SPC 1 INP.1 CPB BKSPC     TEST FOR BACKSPACE.       JMP INP.5       CPB .+33B     TEST FOR ESCAPE.      JMP INP.2       CPB ALTMD     TEST FOR ALTMODE      JMP INP.2       CPB .176      OLD ALTMODE?      JMP INP.2       SZB           IGNORE FEED FRAMES AND      CPB B177      RUBOUTS.      JMP MPXIO,I       CPB .+12B     IGNORE LINE FEEDS ALSO      JMP MPXIO,I       CPB .+23B     IGNORE XOFF ALSO.       JMP MPXIO,I       SPC 2 *  APPEND CHARACTER TO BUFFER *       SPC 2 INP.6 LDA BPNT,I    A=>POSITION FOR THIS CHARACTER.       INA           A=>POSITION FOR NEXT CHARACTER.       CPA BEND,I    IF A=> BEYOND END OF BUFFER,      ADA MBLEN      MAKE IT POINT TO THE START       CPA BHED,I    IF BUFFER FULL,       JMP INP.2      TRANSFER FOR SPECIAL HANDLING.       LDB BPNT,I    B=>CURRENT CHARACTER ADDRESS.       STA BPNT,I    SAVE NEXT CHARACTER ADDRESS.      CLE,ERB       B=WORD ADDRESS      LDA 1,I       A=DESTINATION WORD      SEZ,RSS       IF HIGH CHAR, ROTATE      ALF,ALF        TO BOTTOM.       AND HIMSK     CLEAR BOTTOM PART       ADA CPTR,I    MFRGE IN NEW CHARACTER.       SEZ,RSS       IF HIGH CHARACTER,      ALF,ALF        ROTATE BACK.       STA 1,I       STORE BACK IN MEMORY.       LDA CPTR,I     IF CHARACTER WAS A       CPA .+15B       CARRIAGE RETURN,      JMP INP.3     GO TO PROCESS IT.       JMP MPXIO,I       SPC 2 * PROCESS ESCAPE/ALT-MODE       SPC 1 INP.2 LDA BSTR,I    RESET BUFFER POINTER      STA BPNT,I     TO BEGINNING.      LDA TAPEF     IS USER IN TAPE MODE?       AND MASK      SZA       JMP INP21     YES.      LDB BSTR,I    MOVE REVERSE      CLE,ERB       SLASH       LDA RVRSL      AND      STA 1,I        CRLF TO      INB           USER'S      LDA CRLF        BUFFER.       STA 1,I       LDA MASK       SET IOTOG TO       XOR IOTOG     OUTPUT.       STA IOTOG       CCB       STB BCNT,I    FORCE OUT FIRST CHARACTER.      STB CPTR,I    SET OUTPUT CHARACTER TO ALL ONES.       ADB BPNT      SET CHARACTER       LDA .-4       COUNT TO SAY      STA 1,I       FOUR CHARACTERS.      CCB           SET AN      ADB MPXIO      ISZ      LDA 1,I       INSTRUCTION       AND B1777       INTO THE      IOR ISZIP     FIRST WORD OF       ADB .-3       THE USER'S RUNG       STA 1,I         IN THE LADDER.      JMP MPXIO,I INP21 IOR ESCF      IF TAPE MODE, SET       STA ESCF       ESCF BIT AND RESET BUFFER      JMP MPXIO,I       SPC 2 *  ENTER USER IN TTQ WHEN A CARRIAGE RETURN COMES IN      SPC 1 INP.3 LDA TAPEF     IS USER IN      AND MASK       TAPE MODE?       SZA       JMP INP31     YES       LDA INPTF     IF NOT TAPE MODE, SET       IOR MASK       INPTF TO PREVENT FURTHER       STA INPTF       INPUT.INP32 LDA MPCOM     SET COM.BIT.      IOR MASK      STA MPCOM       JMP MPXIO,I INP31 LDA BSTR,I    GET POINTER TO BEGINNING OF       LDB BPNT,I     CURRENT BUFFER AND RESET TO      STB BSTR,I      CURRENT CHARACTER.      CPA BHED,I    IF BUFFER JUST COMPLETED WAS      JMP INP32      FIRST, GO MAKE TTQ ENTRY.      JMP MPXIO,I   OTHERWISE JUST RETURN.      SPC 2 * PROCESS BACKSPACE       SPC 1 INP.5 LDA BPNT,I    GET BUFFER POINTER.       CPA BSTR,I    IF NO CHARACTERS,       JMP MPXIO,I    RETURN IMMEDIATELY.      CPA BGIN,I    IF AT BEGINNING OF PHYSICAL       ADA BLEN       BUFFER, MOVE TO END.       ADA .-1       BACK UP ONE.      STA BPNT,I      JMP MPXIO,I       SPC 2       SPC 3 * THE OUTPT SECTION IS CALLED FOR OUTPUT SERVICE FOR A SINGLE TELE- * TYPE. IT IS CALLED WHENEVER A NEW BIT MUST BE SENT TO THE TELE- * TYPE. THIS HAPPENS WHENEVER THE TIME COUNTER FOR THE TELETYPE BE- * COMES ZERO.       SPC 3 OUTPT LDA CPTR,I    A=OUTPUT CHARACTER.       RAR           SHIFT NEXT BIT TO A0.       STA CPTR,I    STORE BACK IN MEMORY.       SSA,SLA       NOW TEST THE OUTGOING BIT. IF       JMP OUT.1      IT DIFFERS FROM THE PREVIOUS       CMA,SSA,SLA     BIT WE HAVE TO CHANGE THE BIT       JMP OUT.1        IN THE OUTPUT WORD.      LDA MPOUT       XOR MASK      STA MPOUT * OUT.1 ISZ BCNT,I    RETURN UNLESS THIS IS THE LAST      JMP MPXIO,I    BIT OF THE CHARACTER.      LDA .-11      RESET BIT COUNTER TO -11 FOR      STA BCNT,I     THE NEXT CHARACTER.      INB           B=>CHAR COUNTER.      ISZ 1,I       TEST TO SEE IF ANY CHARACTERS       JMP OUT.2      ARE LEFT.* *  END OF OUTPUT*       LDB MPXIO     B=>  <JSB MPXIO>+2      ADB .-3       B=>  <JMP *+3>      LDA 1,I       A=   <JMP *+3>      ADB .-1       B=>  <JMP *+4>      STA 1,I       SET  <JMP *+4>      LDA IOTOG     SET IOTOG TO      XOR MASK        SAY       STA IOTOG     INPUT.      LDB CPTR      SET       ADB .+?STAT-1  B=>STATUS.       LDA 1,I       A=STATUS      CPA %ABOR     IF STATUS IS ABORT, CHANGE TO       CLA             IDLE.       STA 1,I       ADB .+?BGIN-?STAT  RESET ALL      LDA 1,I         BUFFER      ADB .-3         POINTERS      STA 1,I        TO       INB               THE       STA 1,I        BEGINNING      INB             OF THE USER'S       STA 1,I         BUFFER. OUT.3 LDA MASK      CMA            COMPLEMENT TO      AND INPTF       TURN OFF      STA INPTF        INPTF BIT.       JMP MPXIO,I       SPC 2 *  END OF CHARACTER -- AT LEAST ONE LEFT      SPC 1 OUT.2 INB           B=>BUFFER POINTER.      LDA 1,I       A=BUFFER POINTER.       INA           A=>NEXT CHARACTER.      ADB .+?BEND-?BPNT  B=>BUFFER END.       CPA 1,I       IF END OF BUFFER, CHANGE TO       ADA MBLEN      BEGINNING.       ADB .+?BPNT-?BEND  B=>BUFFER POINTER.       STA 1,I       RESET BUFFER POINTER.       LDB 0         MOVE POINTER TO B.      CLE,ERB       POSITION AS WORD POINTER.       LDA 1,I       A=WORD CONTAINING CHARACTER.      SEZ,RSS       POSITION SO THAT CHARACTER IS       ALF,ALF        IN BITS 7-0      AND B177      MASK OUT CHARACTER.       RAL,RAL       POSITION IN ORDER TO SET UP       IOR MBITS      FOR OUTPUTTING AND MERGE IN      CPA MBITS       XOR B1000       STA CPTR,I      STOP AND PARITY BITS. *       LDB CPTR      SET B=> STATUS.       ADB .+?STAT-1       LDA 1,I       A=STATUS      CPA %ABOR     IF ABORT STATUS, RETURN       JMP MPXIO,I   IMMEDIATELY.      CPA %OUTW     IF OUTPUT WAIT, CHECK FOR       RSS            ALMOST DONE.       JMP OUT.3     OTHERWISE GO CLEAR INPTF. *       ADB .+?CCNT-?STAT  IF OUTPUT WAIT, TEST FOR       LDA 1,I            10 CHARACTERS LEFT.      ADB .+?STAT-?CCNT       CPA .-10      RSS       JMP OUT.3     NOT EXACTLY 10 LEFT.      LDA MPCOM       IOR MASK      STA MPCOM MPXED JMP OUT.3 