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