ASMB,A,B,L,C
      HED CROSS LINK PROGRAM (DSN 010000) 
* 
      ORG 100B
      SUP 
A     EQU 0 
B     EQU 1 
SC    EQU 0 
INTP  EQU 0 
SWREG EQU 1 
* 
*         LINK TABLE
* 
START JMP 130B      GO TO START OF PROGRAM
DRI   BSS 1         DATA RECORD INPUT 
COD   BSS 1         CONSOLE OUTPUT DRIVER 
LPD   BSS 1         LINE PRINTER DRIVER 
CID   BSS 1         CONSOLE INPUT DRIVER
FWA   DEF FWAA      FIRST WORD OF AVBL. MEMORY
LWA   BSS 1         LAST WORD OF AVBL. MEMORY 
      BSS 1         DIAG. LOADER PROGRAM
      BSS 1         1 MILSEC. TIME COUNT
DRISC BSS 1         DATA RECORD INPUT SELECT CODE 
CODSC BSS 1         CONSOLE OUTPUT SELECT CODE
LPDSC BSS 1         LINE PRINTER SELECT CODE
CIDSC BSS 1         CONSOLE INPUT SELECT CODE 
CTO   BSS 1         COMPUTER TYPE/OPTIONS 
      NOP           USER CARD TYPE AND SELECT CODE
MEM   BSS 1         MEMORY SIZE 
      BSS 1         GO TO DIAG. LOADER PROGRAM
WAIT  BSS 1         1 MILL SEC TIMER ROUTINE
SWRC  BSS 1         CHECK SWITCH REG
D2AS  BSS 1         DECIMAL TO ASCII CONVERSION 
O2AS  BSS 1         OCTAL TO ASCII CONVERSION 
AS2N  BSS 1         ASCII TO BINARY CONVERSION
DSN   OCT 010000    SERIAL NUMBER 
FMTO  BSS 1         FORMATTED OUTPUT
* 
      CLC INTP,C
      LIA SWREG     GET SELECT CODE OF LINK IN THIS CPU 
      AND B77       MASK OF UPPER BITS
      STA IOSC      SAVE IT 
      ADA M10       CHECK IF UNDER 10 OCTAL 
      SSA,RSS 
      JMP *+3 
      HLT 10B       YES ILLEGAL SELECT CODE 
      JMP 130B      START OVER
* 
      CLA           DO CR/LF
      JSB COD,I 
      CLA,CLE 
      LDB CRLKM     INTRODUCTTORY MESSAGE 
      JSB FMTO,I
      SKP 
      LIA SWREG     GET LINK TYPE 
      ALF,ALF 
      RAL,RAL 
      AND B7
      STA B         SAVE IT 
      RAL,RAL       MPY BY 4
      ADA B         PLUS 1=5
      ADA B         PLUS 1=6
      ADA IODPL     TABLE LIST
      LDB A,I       1 GET DUMP ROTINE 
      STB IOD 
      INA           MOVE UP 
      LDB A,I       2 GET CONSOLE DEF 
      STB IODCL 
      INA           MOVE UP 
      LDB A,I       3 GET LINE PRINTER DEF
      STB IODLP 
      INA           MOVE UP 
      LDB A,I       4 GET LOADER DEF
      INA           MOVE UP 
      STB IODLD 
      LDB A,I       5 GET RESTART LOCATION
      STB RSTRT 
      INA           MOVE UP 
      LDB A,I       GET INTERRUPT LOCATION
      STB IOIJB+1 
      LDA IOIJB     GET JSB 3B,I INSTRU 
      STA IOSC,I
      LDA CODSC     CLEAR TRAP CELLS
      AND B77 
      SZA           ANY SELECT CODE?
      JMP *+4       YES 
      STA C.SFC     CLEAR CONSOLE CHECK 
      STA C.SFC+1 
      JMP *+5 
      CLB 
      STB A,I 
      IOR SFC.      SET CONSOLE CHECK IO INST 
      STA C.SFC 
      LDA LPDSC 
      AND B77 
      STB A,I 
      LDA DRISC 
      AND B77 
      STB A,I 
      IOR CLCC.     BUILD INST TO CLEAR LOAD DEVICE 
      STA CLCLD+1 
      SKP 
      LDB IODSC     GET POINTER TO I/O INSTRUCTIONS 
      LDA B,I       GET INSTRUCTION 
      CPA B         END OF LIST?
      JMP *+6       YES 
      AND M100      MASK OFF OLD
      IOR IOSC      ADD NEW SELECT CODE 
      STA B,I       PUT IT BACK IN PLACE
      INB           MOVE TO NEXT ONE
      JMP *-7       DO IT 
IODRS LDA 111B      CHECK IF THIS IS A PAPER TAPE READER
      AND B700
      CLE,SZA       ? 
      JMP *+4       NO
      LDB IOPTM     YES TELL OPERATOR 
      JSB FMTO,I      TO LOAD CONFIGURATOR
      HLT 00
      LDB M3        REWIND INPUT DEVICE TO CONFIGURATOR 
      JSB DRI,I 
      CLA,CLE       TELL OPERATOR TO
      LDB IODM         ENABLE AND START LOADER
      JSB FMTO,I           IN THE I/O PROCESSOR 
* 
      CLB,INB       LINK UP FIRST 
      JSB IOD,I 
      SKP 
*              DUMP A COPY OF CONFIGURATOR
* 
      CLB,INB,RSS 
IODLR LDB B2        READ NEXT RECORD
      JSB DRI,I 
      SZA           EOF OR
      SSA           EOT?
      JMP IOD0      YES LOAD COMPLETE 
      LDB B2        NEXT RECORD 
      JSB IOD,I     NO OUTPUT COUNT 
      ALF,ALF       SET COUNT 
      CMA,INA 
      STA IOCT      SAVE IT 
      CLB 
      JSB DRI,I     GET ADDRESS 
      CLB 
      JSB IOD,I     OUTPUT ADDRESS
      STA IOCKM     SAVE IT AS CHECKSUM VERIFY
      CLB 
      JSB DRI,I     GET DATA WORD 
      CLB 
      JSB IOD,I     TRANSFER DATA WORD
      ADA IOCKM     ADD IT TO CHECKSUM
      STA IOCKM 
      ISZ IOCT      DONE DATA?
      JMP *-7       NO DO NEXT WORD 
      CLB 
      JSB DRI,I     READ CHECKSUM 
      CLB 
      JSB IOD,I     TRANSFER IT 
      CPA IOCKM     DOES IT COMPARE?
      JMP IODLR     YES DO NEXT RECORD
      CLA           NO TELL OPERATOR
      LDB IOCEM 
      JSB FMTO,I
      HLT 11B 
      JMP IODLR-1   TRY AGAIN 
* 
IOD0  JSB IODP      OUTPUT CONSOLE DRIVER 
      OCT 10000     IF S-REG. BIT 12 IS SET TO THE
      DEF CNSLO     DESTINATION ADDRESS AND FROM
IODCL NOP           LOCATION OF DRIVER IN THE TABLE 
      JSB IODP      OUTPUT LINE PRINTER DRIVER
      OCT 20000     IF S-REG. BIT 13 IS SET TO
      DEF LNPTR     DESTINATION ADDRESS AND FROM THE
IODLP NOP           LOCATION OF THE DRIVER IN THE TABLE 
      JSB IODP      OUTPUT LOADER DRIVER
      OCT 40000 
      DEF LDVR
IODLD NOP 
      CCB           OUTPUT TERMINATOR 
      JSB IOD,I       AND GO TO LINK ROUTINE
      SKP 
IODP  NOP 
      LDB IODP,I    GET S-REG. BIT
      ISZ IODP
      JSB SWRC,I    IS IT REQUESTED 
      JMP *+4 
      ISZ IODP      NO SKIP OVER DATA 
      ISZ IODP
      JMP IODP,I     AND RETURN 
      LDA IODP,I    YES  GET DESTINATION ADDRESS
      ISZ IODP
      STA IODAD 
      LDA IODP,I    GET TABLE POINTER 
      ISZ IODP
      STA IOADD 
      LDA A,I       GET TRANSFER COUNT
      CMA,INA       MAKE IT POSITIVE
      ADA IOADD     ADD IT TO ADDRESS 
      STA IOEAD     SAVE ENDING ADDRESSES 
IOD1  LDA IOADD     CHECK IF DONE BY
      CMA,INA 
      ADA IOEAD       ADDR > END ADDRESS
      SZA,RSS 
      JMP IODP,I    YES RETURN
      LDB A 
      ADB M60       IS IT GREATER 60 WORDS
      SSB,RSS       ? 
      LDA B60       YES SET ONE BLOCK 
      STA IOCT      SAVE COUNT
      ALF,ALF       MOVE TO UPPER HALF
      LDB B2        GET FLAG
      JSB IOD,I     OUTPUT COUNT
      LDA IODAD     SET STARTING ADDRESS
      STA IOCKM     SET CHECKSUM
      LDB IODAD     MOVE IT UP BY COUNT 
      ADB IOCT
      STB IODAD 
      CLB 
      JSB IOD,I     OUTPUT STARTING ADDRESS 
IOD2  LDA IOADD,I   GET CONTENTS
      CLB 
      JSB IOD,I       AND OUTPUT IT 
      ADA IOCKM     ADD TO CHECKSUM 
      STA IOCKM 
      ISZ IOADD     MOVE TO NEXT ADDRESS
      CCA 
      ADA IOCT      SUBTRACT 1 FROM COUNT 
      STA IOCT
      SZA           IS THAT ALL?
      JMP IOD2      NO
      LDA IOCKM     YES 
      CLB 
      JSB IOD,I     OUTPUT CHECKSUM 
      JMP IOD1      DO NEXT SECTION 
      SKP 
*     THE FOLLOWING ARE I O ROUTINES USED 
*     BY THE PROGRAM IN THE CENTRAL COMPUTER. 
* 
LIA   NOP 
      LIA SC
      JMP LIA,I 
* 
LIB   NOP 
      LIB SC
      JMP LIB,I 
* 
OTA   NOP 
      OTA SC
      JMP OTA,I 
* 
OTB   NOP 
      OTB SC
      JMP OTB,I 
* 
STCC  NOP 
      STC SC,C
      JMP STCC,I
* 
CLCC  NOP 
      CLC SC,C
      JMP CLCC,I
* 
SFS   NOP 
      SFS SC
      JMP SFS,I 
      ISZ SFS 
      JMP SFS,I 
* 
SFC   NOP 
      SFC SC
      JMP SFC,I 
      ISZ SFC 
      JMP SFC,I 
* 
CLF   NOP 
      CLF SC
      JMP CLF,I 
* 
WSFS  NOP 
      STA WSFSA     SAVE A
      CLA 
      JSB SFC 
      JMP *+4 
      INA,SZA 
      JMP *-3 
      JMP *+2 
      ISZ WSFS
      LDA WSFSA     RESTORE A 
      JMP WSFS,I    RETURN
WSFSA NOP 
      SKP 
* 
*     CONSOLE CHECK ROUTINE 
* 
CNCK  NOP 
C.SFC SFC SC        ANY FLAG FROM OPERATOR? 
      JMP *+3       YES 
      ISZ CNCK      NO RETURN P+2 
      JMP CNCK,I
      CLA           SET INTERRUPT AGAIN 
      JSB CID,I 
      CLA 
      JMP CNCK,I    RETURN P+1
* 
CLCLD NOP 
      CLC SC,C      CLEAR LOAD DEVICE FOR PRIORITY
      JMP CLCLD,I 
* 
ERMS0 CLA,CLE       TELL OPEDRATOR OF LOADING CROSS LINK ERROR
      LDB IODLE     GET POINTER TO MESSAGE
      JSB FMTO,I
      HLT 60B       WAIT FOR OPERATOR 
      JMP IODRS     RESTART LOADER
* 
ERMS1 CLA,CLE       REPORT CROSS LINK ERROR 
      LDB IODEM     GET POINTER TO MESSAGE
      JSB FMTO,I    OUTPUT IT 
      JMP RSTRT,I 
* 
* 
* 
BUF2A NOP 
      CLE,ERB       ADJUST UPPER/LOWER
      LDA B,I       GET 2 CHARACTERS
      SEZ,RSS       IS IT UPPER OR LOWER
      ALF,ALF       IT'S UPPER
      AND B377      MASK UNWANTED BYTE
      JMP BUF2A,I   RETURN
* 
* 
A2BUF NOP 
      STA A2BSV     SAVE THE CHARACTER
      SLB,INB       BET OPPSITE CHARACTER 
      ADB M2
      JSB BUF2A 
      ALF,ALF       MOVE TO UPPER 
      IOR A2BSV     ADD NEW CHARACTER 
      SEZ           SHOULD IT BE SWAPPED
      ALF,ALF       YES 
      STA B,I       STORE IT
      JMP A2BUF,I   RETURN
* 
A2BSV NOP 
      SKP 
IOCT  NOP 
IOSC  NOP 
IOD   NOP 
IODSV NOP 
IODVR NOP 
IODF  NOP 
IODCT NOP 
LNKPG NOP 
IOADD NOP 
IODAD NOP 
IOCKM NOP 
IOEAD NOP 
RSTRT NOP 
IOIJB JSB *+1,I 
      NOP 
SFC.  SFC SC
CLCC. CLC SC,C
* 
B2    OCT 2 
B7    OCT 7 
B12   OCT 12
B60   OCT 60
B77   OCT 77
B177  OCT 177 
B377  OCT 377 
B700  OCT 700 
M1    OCT -1
M2    OCT -2
M3    OCT -3
M4    OCT -4
M10   OCT -10 
M60   OCT -60 
M100  OCT -100
* 
CR    OCT 15
LF    EQU B12 
RC    OCT 170017    REQUEST COMING
TNW   OCT 170360    TRANSMIT NEXT WORD
      SKP 
IODSC DEF *+1,I 
      DEF LIA+1 
      DEF LIB+1 
      DEF OTA+1 
      DEF OTB+1 
      DEF STCC+1
      DEF CLCC+1
      DEF SFS+1 
      DEF SFC+1 
      DEF CLF+1 
      OCT 1 
* 
IODPL DEF *+1 
      DEF D875      DUMP ROUTINE
      DEF O875      CONSOLE ROUTINE 
      DEF P875      LINE PRINTER
      DEF L875      LOADER
      DEF X875      RESTART LOCATION
      DEF IN875     INTERRUPT LOCATION
      DEF D662      DUMP ROUTINE
      DEF O662      CONSOLE ROUTINE 
      DEF P662      LINE PRINTER
      DEF L662      LOADER
      DEF X662      RESTART LOCATION
      DEF IN662     INTERRUPT LOCATION
* 
IODM  DEF *+1 
      OCT 6412
      ASC 14,START I-O PROCESSOR LOADER 
      ASC 01,// 
* 
CRLKM DEF *+1 
      ASC 19,DIAG. CONFIGURATOR CROSS LINK PROGRAM/ 
IOCEM DEF *+1 
      ASC 08,CHECKSUM ERROR/
IOPTM DEF *+1 
      ASC 23,LOAD DIAGNOSTIC CONFIGURATOR IN PHOTO READER,
      ASC 05,PRESS RUN/ 
IODLE DEF *+1 
      ASC 22,CROSS LOAD ERROR (PRESS RUN TO START AGAIN)/ 
IODEM DEF *+1 
      ASC 09,CROSS LINK ERROR/
      SKP 
      ORG 2000B 
* 
      CLC INTP,C    TURN OFF I/O
      JMP RSTRT,I   RESTART PROGRAM 
* 
* 
*     1=FIRST TIME
*     2=NEXT RECORD COUNT 
*     0=NEXT WORD 
*    -1=END-OF TRANSMISSION (LOADING) 
* 
D875  NOP 
      STA IODSV     SAVE A
      SZB           OUTPUT WORD?
      JMP D875A     NO
      ALF,ALF       YES DO IT 
      JSB OTA 
      JSB STCC      TRANSFER IT 
      JSB WSFS      WAIT FOR ACCEPTANCE 
      JMP ERMS0     REPORT TIME OUT 
      ALF,ALF       MOVE TO OTHER HALF
      JSB OTA       DO IT 
      JSB STCC
      JSB WSFS
      JMP ERMS0 
      LDA IODSV     RESTORE A REG.
      JMP D875,I    RETURN
D875A SSB           END OF TRANS? 
      JMP D875B 
      SLB,RSS       RECORD COUNT? 
      JMP D875+4    YES 
      CLB           SET TO LINK UP
      JSB OTB 
      JSB STCC
      JSB SFS       WAIT INDEFINATELY 
      JMP *-1 
      JMP D875,I
D875B CLA 
      JSB OTA 
      JSB STCC
      JSB WSFS      WAIT FOR FLAG 
      JMP *+2 
      JMP *-5       NOT DONE
      CLC INTP,C    TURN OFF I/O
      SKP 
X875  EQU * 
      CLA 
      JSB CLF 
      JSB CNCK      CHECK FOR CONSOLE INTERUPT
      JSB IC875     PASS FLAG TO LINK 
      JSB SFS       WAIT FOR ANY FLAG 
      JMP *-3 
      JSB LIA       GOT ONE GET DATA
      STA IODSV     SAVE INPUT
      CPA M1        FALSE END?
      JMP X875      YES 
      AND B377      CHECK IF CONTROL WORD 
      SZA 
      JMP ERMS1     NOT LINK ERROR
      LDA IODSV 
      SZA,RSS 
      JMP ERMS1     ZERO ISNT ALLOWED EITHER
      SSA,RSS       IS IT A CONTROL WORD? 
      JMP ERMS1     NO THEN ERROR 
      RAL 
      SSA           LOADER? 
      JMP .L875     YES 
      RAL           NO
      SSA           LINE PRINTER? 
      JMP .P875     YES 
      RAL           NO
      SSA           CONSOLE OUTPUT? 
      JMP .O875     YES 
      RAL           NO
      SSA           CONSOLE INPUT?
      JMP .I875     YES 
      JMP ERMS1     NONE OF THE ABOVE SO ERROR
* 
* 
IN875 NOP 
      CLF 0         TURN OFF INTERRUPTS 
      JMP X875+6
* 
IC875 NOP 
      JSB CLCC
      JSB STCC
      JMP IC875,I 
      SKP 
.O875 EQU * 
      LDA FWA       SET BUFFER ADRESS 
      RAL           MAKE ADDRESS BYTE ADDRESS 
      STA IOADD 
      CLA           CLEAR 
      STA IOCT        COUNT 
      CLA 
      JSB .R875     GET NEXT WORD 
      CPA M1        END OF OPERATION? 
      JMP *+6 
      LDB IOADD     GET BUFFER ADDRESS
      JSB A2BUF     PUT CHR IN BUFFER 
      ISZ IOADD     MOVE BYTE ADDRESS UP ONE
      ISZ IOCT        AND ADD ONE TO COUNT
      JMP *-8 
      LDA IOCT      WAS THERE ANY TRANSFER
      SZA,RSS       ??
      JMP *+5       NO SKIP RUBOUT
      LDA B177      GET TERMINATOR
      LDB IOADD 
      JSB A2BUF     ADD IT TO BUFFER
      ISZ IOCT      ADD IT TO COUNT 
      LDA IOCT      OUTPUT BUFFER 
      LDB FWA       GET BUFFER ADDRESS
      JSB COD,I     GO DO IT
      CLA           RESPOND TO LAST DATA
      JSB OTA 
      JSB STCC
      JMP X875      RETURN FOR MORE 
* 
* 
.I875 EQU * 
      CLA 
      JSB .R875     GET COUNT 
      CPA M1        INT. REQUEST ONLY?
      JMP N1875     YES 
      SSA           CANT BE NEG 
      JMP ERMS1     OR ERROR
      STA IOCT      SAVE COUNT
      CLA           RESPOND TO COUNT
      JSB .R875 
      SZA           MUST BE ZERO
      JMP ERMS1 
      JSB CLF 
      LDA IOCT      RESTORE COUNT 
      LDB FWA       GET BUFFER FOR INPUT
      STF 0         TURN ON INTERRUPTS
      JSB CID,I     GO INPUT IT 
      CLF 0         TURN OFF INTERRUPTS 
      STA IODSV     SAVE COUNT
      CMA,INA       MAKE IT NEG.
      STA IODCT       FOR COUNTER 
      LDB FWA       SET BUFFER POINTER
      RBL 
      STB IOADD 
      SZA,RSS       ANY INPUT 
      JMP CR875     NO - RESPOND WITH CR
N0875 LDB IOADD     GET A BYTE
      JSB BUF2A 
      JSB .R875     OUTPUT IT 
      CPA M1        END OF TRANSFER 
      JMP EX875     YES 
      SZA           ACCEPTED
      JMP ERMS1     NO
      ISZ IOADD     MOVE TO NEXT BYTE 
      ISZ IODCT     DONE? 
      JMP N0875     NO
CR875 LDA CR        YES 
      JSB .R875     OUTPUT IT 
      LDB A         CHANGE HANDS
      CLA 
      CPB O875+5    CONSOLE OUTPUT CONTROL WORD?
      JMP CR875+1   YES 
      CPB CR        ? 
      JMP CR875+1   YES 
      CPB LF        ? 
      JMP CR875+1 
      CPB M1        TERMINATOR
      RSS 
      JMP ERMS1     NONE SO ERROR 
      JSB .R875     GET LAST TERMINATOR 
      CPA M1        SHOULD BE -1
      JMP EX875 
      JMP ERMS1     NO SO ERROR 
EX875 CLA           RESPOND TO LAST WORD
      JSB OTA 
      JSB STCC
      JMP X875      WAIT FOR MORE 
* 
N1875 CLA 
      JSB CID,I     CALL FOR INTERRUPT
      JMP EX875 
      SKP 
*     CONSOLE CROSS LINK (12875) DRIVER 
* 
O875  ABS *-EC875        TRANSFER COUNT 
  ABS JSB+SETP           SETUP BUFFER POINTER AND COUNT 
  ABS JSB+O.875+CSLO     OUTPUT CONTROL WORD
      ABS OR875-*        ROUTINE
  ABS JSB+.OUT           DUMP BUFFER
      OCT 110000         INDICATE CONSOLE 
      NOP                NO MORE
      OCT 12             NORMAL LINE FEED 
      CCA                SEND 
  ABS JSB+O.875+CSLO       END OF OPERATION 
      CLC SC,C           PUT CARD IN RECEIVE MODE 
  ABS JMP+CSLO+100000B  RETURN
O.875 EQU *-O875
OR875 NOP 
      OTA SC             TRANSFER CHARACTER 
      STC SC,C
      SFS SC             WAIT FOR RETURN
  ABS JMP+*-1-O875+CSLO 
      LIA SC             GET DATA 
                                                                                                                                                                                  