/ PDP TELECOMMUNICATIONS/TELEPROCESSING PROGRAM / VERSION: 01 FEB 79 / MODIFIED BY JIM VAN ZEE 21-NOV-84 / LAB DATA SYSTEMS, SEATTLE, WA 98125 / / / ADDRESS COMMENTS OR QUERIES TO: / / US ARMY BIOMEDICAL LABORATORY / ATTN: DRDAR-CLL-MN/FRED RYBCZYNSKI / ABERDEEN PROVING GROUND, MD 21010 / / / / WITH TELCOM, YOUR PDP-8 OR PDP-12 CAN PERFORM COMPUTER TO / COMPUTER, COMPUTER TO REMOTE TERMINAL OR COMPUTER TO / OTHER REMOTE DEVICE COMMUNICATIONS. COMMUNICATIONS CODES / MUST BE 7- OR 8-BIT ASCII AND MAY BE ODD, EVEN OR MARK / PARITY. DEFAULT PROGRAM STATUS HAS THE PDP EMULATING A / REMOTE DEMAND TERMINAL. THE USER MAY EXIT TELCOM AT ANY / TIME WHILE IN THIS STATUS, PERFORM OTHER PDP PROCESSING / THEN RESUME TELCOM OPERATIONS AT THE POINT OF EXIT. / ADDITIONAL FEATURES PROVIDE FOR DATA TRANSFERS THROUGH / INTERFACE TO/FROM FILE-ORIENTED DEVICES. CHARACTERS ARE / PACKED/UNPACKED ACCORDING TO OS/8 (OS/12) CONVENTIONS. / FILES CREATED BY TELCOM ARE READABLE BY OTHER OPERATING / SYSTEM PROGRAMS (SUCH AS PIP, EDIT, BASIC, ETC). TELCOM / UTILIZES AN ASYNCHRONOUS MODEM INTERFACE FOR COMMUNICA- / TIONS AT SPEEDS UP TO 1200 BAUD. TIMING CALCULATIONS / FOR RATES BEYOND 1200 BAUD HAVE NOT BEEN MADE. THE USER / SHOULD NOT ASSUME THAT THIS PROGRAM WILL OPERATE PROPERLY / AT RATES GREATER THAN 1200 BAUD. IN PARTICULAR, **NO** / SOFTWARE HANDSHAKING (XON-XOFF) IS PERFORMED, HENCE EVEN / AT 300 BAUD THIS PROGRAM MAY NOT WORK CORRECTLY ON SOME / SYSTEMS! THE OBJECT DEVICE (AND THE PDP8) ARE ASSUMED / CAPABLE OF OPERATING AT THE FULL BAUD RATE AT ALL TIMES. / / THE PROGRAM IS WRITTEN USING PDP 8-MODE INSTRUCTIONS / AND CAN OPERATE ON EITHER A PDP-8 OR PDP-12 COMPUTER. / IT OPERATES UNDER THE OS/12 AND OS/8 OPERATING SYSTEMS / / / HARDWARE REQUIREMENTS: / 1 - DP-12B ASYNCHRONOUS MODEM INTERFACE (DEC) / 2 - COMPATIBLE MODEM / / / MINIMUM CORE REQUIREMENTS: 8K / 1 - THE FIRST 4K IS USED FOR THE PROGRAM (0-2377) / THE DEVICE HANDLER (2400-2777), AND THE FIRST / PART OF THE DATA BUFFER (3000-7377). / / 2 - THE SECOND 4K HOLDS THE USER SERVIE ROUTINE / FROM 10000 TO 11777, LOCKED IN FOR CONVENIENT / USAGE. 12000-17377 IS USED AS A DATA BUFFER. / / 3 - ADDITIONAL MEMORY IS USED TO INCREASE THE SIZE / OF THE FILE BUFFER FROM A MINIMUM (8K) OF 20. / BLOCKS, TO A MAXIMUM (32K) OF 115 OS/8 BLOCKS. / / THE PROGRAM DETERMINES HIGHEST FIELD AVAILABLE. THIS / IS USED FOR MODEM-TO-FILE DATA TRANSFERS: DATA IS RE- / CEIVED UNTIL THE HIGHEST FIELD IS FILLED (OR END-OF- / DATA IS SIGNALED) BEFORE OUTPUT TO THE SPECIFIED FILE / DEVICE BEGINS. THE BUFFER IS THEN RESET TO FIELD 0. / / / PROGRAM OPERATION PROCEDURE: / 1 - INITIATE CONTACT WITH THE OBJECT / DEVICE. (IE IF USING A PHONE, CALL / UP THE OBJECT DEVICE, SETTING THE / APPROPRIATE SWITCHES WHEN THE DATA TONE / IS DETECTED.) / 2 - RUN THIS PROGRAM. (NO DETRIMENTAL / RESULTS ARE GENERATED IF THIS PROGRAM / IS ACTIVE BEFORE ESTABLISHING CONTACT.) / 3 - INTERACT WITH THE OBJECT DEVICE AS / FROM A REMOTE TERMINAL. NOTE THE / SPECIAL FEATURES DOCUMENTED BELOW. / / / / PROGRAM SPECIAL FEATURES: / 1 - CTRL/C RETURNS CONTROL TO THE OS/8 MONITOR. / THIS MAY BE USED TO PERFORM INTERMEDIATE / FUNCTIONS/PREPARATIONS FOR DATA TRANS- / MISSIONS TO/FROM THE OBJECT COMPUTER. / CTRL/C MAY BE STRUCK DURING ANY PHASE / OF PROGRAM OPERATION. / / CTRL/C, WHEN STRUCK AT THE KEYBOARD, / IS NOT TRANSMITTED TO THE MODEM / / CTRL/D BRINGS IN THE COMMAND DECODER. / AS DOES RAISING (RT) SWTICH REGISTER / BIT 2. SEE DISCUSSION BELOW FOR USE / OF THE COMMAND DECODER. / / 2 - THE USER CAN SET THE APPROPRIATE LINE / LENGTH ON THE 'TTY' DEVICE BY PLACING / THE -DECIMAL VALUE OF THAT LENGTH INTO / LOCATION 'LINLIM'. THE DEFAULT VALUE / FOR LINLIM IS -80 CHARS PER LINE. / THE 'TTYOUT' ROUTINE COUNTS THE NR OF / CHARACTERS PRINTED AT THE TTY, RESETTING / THE COUNTER TO ZERO (TTYCNT) WHENEVER / IT ENCOUNTERS A 'CR' (ASCII 215). IF / THE LINLIM+1 CHAR IS NOT A CR, TTYOUT / PERFORMS AN AUTOMATIC CR+LF, RESETTING / THE TTYCNT TO ZERO. THIS CR+LF IS NOT / TRANSMITTED TO THE MODEM, BUT IS ONLY / PROVIDED TO IMPROVE LEGIBILITY. / / 3 - SPECIAL (RIGHT) SWITCH REGISTER BIT / SETTINGS: / / BIT OPTIONS / --- ------- / 0 0 : ECHO TTY-TO-MODEM CHARS / 1 : DON'T ECHO / 1 0 : PRINT MODEM-TO-TTY CHARS / 1 : DON'T PRINT / 2 0 : DON'T GET C.D. / 1 : GET C.D. FOR FILE I/O (*) / 3 0 : DON'T PRNT FILE-TO-MODEM CHARS / 1 : PRNT ON TTY / 4 0 : NO ACTION / 1 : EQUIV TO 'BREAK' KEY-IN (*) / USED TO HALT SENDING FROM / OBJECT COMPUTER. BUFFER IS / CLEARED. BIT4 MUST EQUAL ZERO / BEFORE SET =1 TO BE SERVICED. / 5 - 9 : RESERVED FOR FUTURE USE / 10 0 : NO ACTION / 1 : INSERT AND SEND LF AFTER EACH / CR DURING FILE-TO-MODEM TRANS- / MISSION. LF INSERTION HALTS / WHEN BIT10 IS RESET TO 0. / 11 0 : NO ACTION / 1 : PRINT PROG VERS NUMBER (*) / / * BIT(S) SHOULD BE RESET TO ZERO IMMEDIATELY / AFTER BEING SET TO ONE. / / NOTE: THE VALUE IN 'SRBITS' CAN REPLACE THE / REAL SWITCH REGISTER. 'SRMASK' ALLOWS SEL- / ECTIVE SUBSTITUTION - SEE THE 'GETSWS' CODE. / USE OF (RT) SWITCH REGISTER BIT 2 (COMMAND DECODER): / --------------------------------------------------- / / 1 - WHEN SWITCH REGISTER BIT 2 IS IN THE 0 POSITION, / THIS PROGRAM MAKES THE PDP LOOK AND ACT LIKE A / REMOTE TERMINAL. ALL KEYS TYPED (EXCEPT CTRL/C / AND CTRL/D - SEE BELOW) ARE TRANSMITTED. / / 2 - WHEN SWITCH REGISTER BIT 2 IS IN THE 1 POSITION / THE COMMAND DECODER IS BROUGHT IN. ANY/ALL / CHARACTERS TRANSMITTED BY THE OBJECT COMPUTER / WHILE THE COMMAND DECODER IS ACTIVE ARE LOST. / THIS PROGRAM MAKES CERTAIN ALL I/O BUFFERS / ARE EMPTY (NO OTHER ON-GOING COMMUNICATIONS / ACTIVE) BEFORE RECOGNIZING BIT 2 = 1. IT / THEN WAITS FOR BIT 2 TO BE RESET TO 0. THE / COMMAND DECODER SOLICITS AN I/O SPECIFICA- / TION BY PRINTING AN ASTERISK AND WAITING FOR / USER INPUT FOLLOWED BY CARRIAGE RETURN (CR). / POSSIBLE USER RESPONSES ARE: / / A) CR (NO ENTRY). THE COMMAND DECODER IS REMOVED / FROM CORE. CONTROL RETURNS TO THE I/O / MONITORING PORTION OF THE PROGRAM. / / B) FILE-TO-MODEM TRANSMISSIONS - / / *DEV:FNAME.EX (CR) / / THE EXISTENCE OF THE SPECIFIED DEVICE AND FILE- / NAME (IF GIVEN) IS VERIFIED. A BUFFER-FULL OF / OF THE FILE/DEVICE IS LOADED INTO FIELD 1, UN- / PACKED AND TRANSMITTED ONE CHARACTER AT A TIME. / (UNPACKING AS PER OS/8 ASCII FILE CONVENTIONS -- / SEE BELOW.) WHEN A CTRL/Z (ASCII 232) IS FOUND / THE PROGRAM ASSUMES IT HAS REACHED THE END-OF- / FILE. IT PRINTS THE MESSAGE 'TRANSMISSION COM- / PLETED' ON THE TTY AND RETURNS TO THE I/O MONI- / TORING PORTION. THE OPERATOR NOW RESUMES WITH / WHATEVER KEYBOARD COMMAND ENTRIES ARE REQUIRED / BY THE OBJECT DEVICE. ONLY ONE FILENAME MAY BE / SPECIFIED. IF IT IS DESIRABLE TO INSERT AND SEND / LF AFTER EACH CR, SET SWITCH REGISTER BIT 10 = 1. / THIS MAY NOT BE DESIRABLE AND/OR NECESSARY IF THE / FILE ALREADY CONTAINS A 'LF' AFTER THE CR. IF YOU / DON'T KNOW WHETHER YOUR FILE HAS LF CODES AND WISH / TO MAKE SURE ONLY ONE LF CODE IS SENT AFTER EACH / CR, SET BIT 10 = 1 AND PUT 214 (LF) IN THE DO-NOT- / SEND LIST MENTIONED BELOW. IF BIT 10 = 1 AND LF / CODES EXIST AND LF IS NOT ON THE DO-NOT-SEND LIST, / AN EXTRA LF WILL BE INSERTED AFTER EACH CR. / / THE USER CAN INSERT A VARIABLE-LENGTH LIST WITH / ASCII VALUES OF CHAR CODES THAT ARE NOT TO BE / TRANSMITTED TO THE MODEM. THE FINAL LIST ENTRY / MUST BE 0. THE LIST STARTS AT LOCATION 'SNDNOT'. / THE LIST HAS NO IMPACT ON (RT) SWITCH REGISTER / BIT 10 SETTINGS. / / EXAMPLE - PDP TO UNIVAC 1108 COMPUTER COMMUNICATION: / (COMPUTER REPLIES ARE PARENTHETICALLY ANNOTATED) / / @ASG,CP PFILE. / READY (1108) / @DATA,IN PFILE. / DATA .... (1108) / @@PTI / *START PAPER TAPE INPUT* (1108) / / -- PRESS (RT) SWITCH REGISTER BIT 2 = 1 / SET (RT) SWITCH REGISTER BIT 2 = 0 (PDP) / -- THE ABOVE MESSAGE IS GENERATED IF / BIT 2 IS NOT IMMEDIATELY RESET TO 0 / AFTER BEING SET EQUAL TO 1. / -- PRESS SWITCH REGISTER BIT 2 = 0 / *SYS:PNAME.PA (CARRIAGE RETURN) / TRANSFER COMPLETED (PDP) / CTRL/S (TO TERMINATE 1108 PTI MODE) / *END PAPER TAPE INPUT* (1108) / @END / END DATA. IMAGE COUNT: NNNN (1108) / -- ENTER OTHER 1108 DIRECTIVES AS DESIRED / / C) MODEM-TO-FILE TRANSMISSIONS - / / *DEV:FNAME.EX< (CARRIAGE RETURN) / / THE EXISTENCE OF THE SPECIFIED DEVICE IS / VERIFIED AND A FILE WITH THE SPECIFIED NAME / OPENED AND PREPARED FOR INPUT. THE PROGRAM / PLACES ALL SUBSEQUENT DATA RECEIVED INTO THE / SPECIFIED FILE. CHARACTERS ARE PACKED AS PER / THE OS/8 ASCII FILE CONVENTION (SEE BELOW) / AND CAN BE USED BY ANY OTHER OS/8 PROGRAMS. / ONLY ONE FILENAME MAY BE SPECIFIED. / / THE USER CAN INSERT A VARIABLE LENGTH LIST / OF THE ASCII VALUE OF CHARACTER CODES THAT / ARE NOT TO BE BUFFERED IN THE SPECIFIED / DATA FILE DURING MODEM-TO-FILE TRANSMISSIONS. / THE LIST BEGINS AT LABEL 'RECNOT' AND ENDS / WITH A '0'. AS CURRENTLY CONFIGURED, CTRL/Z / (ASCII EOF CODE) AND LINEFEED (LF) ARE IGNORED / WHEN RECEIVED FROM THE MODEM FOR FILE INPUT. / / THE OPERATOR SHOULD WATCH THE LINE COUNT WHICH / IS DISPLAYED IN THE AC AND TYPE CTRL/Z WHEN IT / IS APPARENT THAT NO MORE DATA IS BEING SENT BY / THE OBJECT DEVICE. THIS CTRL/Z IS APPENDED TO / THE FILE AND THE FILE IS THEN CLOSED. PROGRAM / CONTROL RETURNS TO THE NORMAL MONITORING MODE. / / EXAMPLE - UNIVAC 1108 COMPUTER TO PDP: / / @ED,R MY-FILE. / READ-ONLY MODE (1108) / CASE UPPER ASSUMED (1108) / ED ... (1108) / EDIT (1108) / 0:P! (YOU TYPE 'P!', DON'T PRESS CR) / -- PRESS BIT 2 = 1 / SET (RT) SWITCH REGISTER BIT 2 = 0 (PDP) / -- THE ABOVE MESSAGE IS GENERATED IF BIT 2 / IS NOT RESET = 0 IMMEDIATELY AFTER BEING / SET = 1. / -- PRESS BIT 2 = 0 / *DSK:PNAME.EX< (CR) / -- PERFORM THE ACTION REQUIRED TO / INITIATE TRANSMISSION (HERE, PRESS / CR). THE PROGRAM BUFFERS ALL PHONE / INPUT. WHEN THE LINE COUNT IN THE / AC STOPS CHANGING, PRESS CTRL/Z / TRANSFER COMPLETED (PDP) / NNNN BLOCKS. NNNN LINE IMAGES. (PDP) / -- ENTER OTHER 1108 DIRECTIVES AS DESIRED / / WARNING: ALL FIELDS ARE USED TO BUFFER INCOMMING / DATA. WHENEVER A FIELD IS FULL THE PROGRAM CHECKS / WHETHER ADDITIONAL FIELDS ARE AVAILABLE. IF SO, / THE NEXT FIELD IS USED, UP TO THE HIGHEST FIELD / AVAILABLE. AFTER ALL FIELDS HAVE BEEN FILLED (OR / CTRL/Z IS TYPED BY THE USER) THE ENTIRE BUFFER IS / OUTPUT TO THE SPECIFIED DEVICE. IF MORE DATA ARE / EXPECTED (CTRL/Z WAS NOT TYPED ON THE KEYBOARD), / BUFFERING RESUMES IN FIELD 0 AND THE USER IS NOTI- / FIED WHEN THE FILE IS CLOSED THAT CHARACTERS WERE / LOST WHILE THE BUFFER WAS BEING WRITTEN OUT. IF / YOUR INPUT RATE IS RELATIVELY HIGH (EG 1200 BAUD) / AND YOUR OUTPUT DEVICE IS SLOW (EG LINCTAPE), YOU / CAN POTENTIALLY LOSE QUITE A LOT OF DATA. IF YOU / ANTICIPATE RECEIVING MORE THAN ONE BUFFER-FULL IT / IS ADVISABLE TO SEND/RECEIVE IN SMALLER SUBSETS, / MERGING THE SUBSETS LATER WITH EDIT, PIP, ETC. / / THE CALCULATION FOR SUBSET TRANSMISSION SIZE: / 8K: 7680 CHARACTERS (20 BLOCKS) / 12K: 13440 CHARACTERS (35 BLOCKS) / 16K: 19584 CHARACTERS (51 BLOCKS) / PLUS 6144 CHARACTERS (16 BLOCKS) / PER ADDITIONAL FIELD UP TO / 32K: 44160 CHARACTERS (115 BLOCKS). / INCLUDE ALL NON-PRINTING CODES (CR, LF, ETC). / / / IF THIS PROGRAM IS OPERATING WITHIN AN OS/8 / (OS/12) SYSTEM, THE HIGHEST FIELD AVAILABLE / CAN BE SET VIA THE CCL OR BUILD 'MEMORY' OR / 'CORE' COMMAND. (IE - A SOFTWARE LIMIT). / THE PROGRAM ALSO CHECKS LOCATION 200 (ITS / STARTING ADDRESS) TO SEE IF AN 'INTERNAL' / LIMIT HAS BEEN SPECIFIED. IF NEITHER LIMIT / IS SET THE PROGRAM PERFORMS A MEMORY TEST / WHICH DESTROYS THE CONTENTS OF LOC 7200 IN / ALL FIELDS. / / / CTRL/D, WHEN ENCOUNTERED IN A FILE THAT IS TO BE / SENT TO THE MODEM, IS NOT TRANSMITTED. THIS WAS / DONE BECAUSE CTRL/D CAUSES SITE TERMINATION (I.E. / '@@TERM') WHEN RECEIVED BY UNIVAC 1100 COMPUTERS. / / CTRL/D FROM THE KEYBOARD CAUSES THE OS/8 COMMAND / DECODER TO BE CALLED (THE SAME AS SW. REG. BIT 2) / / CTRL/Z IS USED AS A PDP OS/8 ASCII FILE EOF MARK. / WHEN ENCOUNTERED DURING FILE-TO-MODEM TRANSMISSION / IT IS NOT SENT TO THE MODEM. INSTEAD, THE MESSAGE / 'TRANSMISSION COMPLETED' IS PRINTED ON THE TTY AND / CONTROL TRANSFERS TO MONITORING IN THE NORMAL MODE. / / CTRL/Z, WHEN ENCOUNTERED AS MODEM INPUT DURING MODEM / TO-FILE TRANSMISSIONS, IS IGNORED. THE CONSOLE OPER- / ATOR MUST ENTER CTRL/Z AT THE TTY DEVICE IN ORDER TO / HAVE A CTRL/Z PUT IN THE FILE AND THE FILE 'CLOSED'. / / IF THE COMPUTER MODEM INTERFACE CARD IS NOT A / DP-12B, THE DEVICE CODES MAY NOT BE 40 AND 41. / CHANGE THE DEVICE CODES LISTED WITH THE MODEM / COMMANDS (SEE BELOW) TO THOSE INDICATED IN THE / MODEM INTERFACE CARD DOCUMENTATION. / MODEM COMMANDS: / DKRB=6406 / 40 = INPUT DEVICE CODE DKSF=6401 DTLS=6416 / 41 = OUTPUT DEVICE CODE DTSF=6411 / / / OPTION TABLE: / ------------- / / NONE / / ****************************** / * * / * STARTING ADDRESS = 00200 * / * * / ****************************** / /IF LOCATION 200 CONTAINS A HI-FIELD NUMBER (X10) /THE PROGRAM WILL NOT USE FIELDS ABOVE THAT VALUE. *10 /10-17 ARE AUTO-INDEX REGISTERS DIN, 1777 / MODEM BUFFER INPUT PTR. DOUT, 1777 / MODEM BUFFER OUTPUT PTR. TCNTR, 0 / GEN'L PURPOSE COUNTER FPTR, 0 / USED AS A PTR DURING FILE I/O BIGFIL, 0 / USED AS A FLAG IF MODEM-TO-FILE / REQUIRES MORE THAN 1 BUFFER (IE / IS LARGER THAN 115(10) BLOCKS.) K10, 10 K70, 70 K77, 77 K177, 177 K200, 200 K203, 203 K212, 212 K215, 215 K1777, 1777 K7400, 7400 K7605, 7605 K7700, 7700 M3, -3 M212, -212 M215, -215 M232, -232 LAST, -7377 / LAST LOC IN FIELDS 0,1,2 TTYCNT, 0 / CNT NR CHARS PRT'D AT TTY DECIMAL LINLIM, -80 / (-DECIMAL) MAX NR CHAR PER TTY LINE OCTAL DEVENT, 0 / FILE I/O DEVICE ENTRY POINT FILFLG, 0 / #0 IF FILE-TO-PHONE I/O ACTIVE CHAR, 0 BCNT, 0 / NR OF OS/8 BLKS OUTPUT TO FILE LCNT, 0 / NR LINE IMAGES RECEIVED DURING / PHONE-TO-FILE TRANSFER WPTR, 0 / PTR TO FLD X RECEIVING WORD. / / COMMON SUBROUTINES: / / THIS RTN NOT USED FOR FILE I/O DLISN, 0 / LISN FOR PHONE CHAR INPUT. DKSF / SKIP NEXT INSTR IF CHAR IN BUFFER JMP I DLISN / NO CHAR. RETURN. DKRB / GET CHAR. AND K177 SNA JMP I DLISN / IGNORE IF AC = 0 TAD K200 DCA DPOUT OSR RAL / IGNORE MODEM INPUT ?? SPA CLA JMP I DLISN / YES. TAD DPOUT / NO, PROCESS IT. CDF10, CDF 10 DCA I DIN / SAVE IT CDF00, CDF 00 TAD DIN TAD LAST SZA CLA JMP I DLISN / RETURN TAD K1777 DCA DIN JMP I DLISN / WRAP BUFFER POINTER / DPOUT, 0 / OUTPUT AC CHAR VIA PHONE. DTLS DTSF JMP .-1 / DONE? K7600, CLA I JMP I DPOUT / YES. / TLISN, 0 / LISN FOR TTY CHAR INPUT KSF JMP I TLISN KRB / GET CHAR AND K177 TAD M3 / ^C SNA JMP I K7600 / YES, GO TO KMON. TAD K203 DCA CHAR TAD CHAR JMP I TLISN / / PRINT A CHARACTER ON THE TTY, WAIT FOR IT / TO FINISH PRINTING, THEN RETURN; LOOK FOR / PHONE INPUT WHILE WAITING. TTYOUT, 0 TAD CHAR TAD M212 / DON'T COUNT LF SZA TAD M3 / OR CR (212-215) SNA CLA JMP TTYPRT+1 / JUST PRNT THEM. TAD TTYCNT TAD LINLIM / IS THIS THE LINLIM+1 CHAR? SNA CLA JMS I [CRLF / YES, DO CRLF TTYPRT, ISZ TTYCNT TAD CHAR JMS TTYTLS JMP I TTYOUT TTYTLS, 0 TLS TAD M215 / IS IT CR? SNA CLA DCA TTYCNT / RESET LIN CNTR = 0 TTWAIT, TSF / DONE PRINTING? SKP JMP I TTYTLS / YES, RETURN. JMS DLISN / NO, LISTEN FOR PHONE INPUT. JMP TTWAIT / SEE IF PRT DONE YET. GETSWS, 0 / GET (RIGHT) SWITCHES LAS AND SRMASK / UNDER A MASK DCA TTYOUT TAD TTYOUT AND SRBITS / OR'ED WITH 'SRBITS' CLL RAL CIA TAD TTYOUT TAD SRBITS JMP I GETSWS SRMASK, 7777 SRBITS, 0000 PAGE START, 0 / INTERNAL FIELD LIMIT CIF 10 JMS I K7700 / GET USR 10 / LOCK IN ADDR 10000-11777 / / ROUTINE DETERMINES MAXIMUM CORE AVAILABLE TO THIS / PROGRAM AS ESTABLISHED BY THE CCL OR BUILD 'CORE' / COMMAND. INFORMATION IS FOUND IN LOCATION 07777, / BITS 6-8. IF '0', THEN MUST TEST PHYCICAL MEMORY. TAD START / INTERNAL LIMIT? SNA TAD I K7777 / .MEM LIMIT? AND K70 DCA START / MAX FLD NR TAD START SZA CLA JMP SOFLIM MEMCHK, RDF / JVZ'S MEMORY TEST TAD CDF10 DCA .+1 BT4FLP, HLT CMA CLL RAL / -2 DCA I K7200 K7200, CLA / EXECUTED BY PDP8'S ISZ I K7200 ISZ I K7200 JMP SOFLIM-1 / NOT THERE (OR ROM) TAD K10 TAD START DCA START RDF TAD .+1 SPA CLA JMP MEMCHK / SOFLIM, CDF 0 TAD K10 TAD START CLL RAR JMS I [OC2DEC / CALC. MEMORY SIZE MEMSIZ JMS GETSWS / PRINT MEMORY SIZE SNA CLA JMP .+3 JMS I [TTYMSG / IF (RT) SWTS <> 0 MEMSIZ+1 TAD START / COMPUTE NR BLOCKS CLL RTR STL CIA RAR DCA TCNTR TAD TCNTR / -7 = 32K, -1 = 8K IAC SZA CLA / 8K? CMA / NO, F2 ADJUSTMENT TAD (24-20 / 20 BLOCKS IN 0,1 TAD (20 / 16 BLKS PER FIELD ISZ TCNTR JMP .-2 JMS I [OC2DEC BIGFL3-1 JMS I (RSTBTS / RESET (RT) SWITCH REG = 0000 ALLBIT / MSG K7777, 7777 / WHICH BITS TO SWITCH = 1 MONLUP, JMS DLISN / CHECK/GET PHONE INPUT JMS TLISN / CHECK/GET TTY INPUT SNA / ANYTHING FROM TTY? JMP MONL2 / NO, CHECK BUFF, FILE I/O TAD (-204 / YES, IS IT CTRL/D? SNA CLA JMS CTRLD / SAVE C.D. REQUEST TAD CHAR JMS DPOUT / SEND TO PHONE / IF PHONE BUFFER WAS EMPTY PREPARE TO ECHO CHAR TO THE / TTY. DON'T ECHO IF BIT 0 OF (RT) SWITCH REGISTER = 1. TAD DIN / PHONE BUFF EMPTY?? CIA TAD DOUT SNA CLA JMS GETSWS / GET (RT) SWITCH REGISTER SPA CLA JMS TTYOUT / ECHO IT CTRLD, 0 / CTRL/D FLAG MONL2, JMS GETSWS / CHECK IF BIT4 = 1 AND K200 SNA CLA JMP MONL3 / NOT SET THIS TIME. TAD BT4FLP / SET FROM BEFORE ?? SZA JMP MONL4 / YES, IGNORE IT. IAC / NOT PREVIOUSLY SET. DCA BT4FLP / RAISE FLAG JMS DPOUT / SEND AC=0 PHBUF0, TAD K1777 / RESET PHONE BUFF PTRS DCA DIN / IGNORE ALL BACKUP TAD DIN / IN THE DATAPHONE BUFFER DCA DOUT MONL3, TAD BT4FLP / BIT4 NOT SET NOW. SZA CLA / SET PREVIOUSLY?? DCA BT4FLP / YES, LOWER FLAG. MONL4, TAD DIN / ANY CHARS IN THE BUFFER? CIA TAD DOUT SZA CLA JMP I (BUFOUT / PRT A PHONE BUFF CHAR / IF 'FILFLG'=1 THEN FILE-TO-PHONE I/O IS ACTIVE. / GO TRANSFER ANOTHER CHAR FROM FILE. TAD FILFLG SZA CLA JMP I (FIL2PH / SORT OF A CO-ROUTINE ?? / IF 'FILFLG'=0 THEN CHECK IF BIT2=1. IF YES, GET / COMMAND DECODER AND REQUEST FILENAME. TYPING / CTRL/D AT THE TERMINAL WILL ALSO FETCH THE C.D. JMS GETSWS AND (1000 TAD CTRLD SZA CLA JMP I (GETCD / GET COMMAND DECODER JMS GETSWS / GET (RT) SWITCH REGISTER AND BIT11 SNA CLA / BIT 11 = 1 ?? JMP MONLUP / NO. JMS I (RSTBTS / RESET BIT 11 = 0 RBIT11 BIT11, 0001 / WHICH BIT = 1. JMS I [TTYMSG / YES. PRT PROGRAM VERSION NR. VERSON JMP MONLUP PAGE / BIT 2 = 1. GET COMMAND DECODER AND REQUEST FILE FOR / DATA TRANSFER. ANY PHONE INPUT WHILE C.D. IS ACTIVE / IS LOST. GETCD, JMS I (RSTBTS / RESET BIT 2 = 0 RESET2 1000 DCA I (CTRLD / CLEAR FLAG TAD TTYCNT SZA CLA JMS I [CRLF / START NEW LINE CIF 10 JMS I K200 / TO USR VIA 0200 5 / BRING IN CD 5200 / SPECIAL MODE CDF 10 TAD I K7605 / CHECK FOR INPUT FILE SZA JMP I (MOV2PH / OUTPUT TO PHONE TAD I K7600 / CHECK FOR PDP OUTPUT FILE CDF 0 SNA JMP I [MONLUP / NO FILES SPECIFIED / / INPUT FROM PHONE, OUTPUT TO DEV:FNAME.EX / PACK CHARS AS PER OS/8 CONVENTIONS: / I.E. WRD1: BITS 0-3 = CHAR 3 BITS 0-3 / BITS 4-11= CHAR1 / WRD2: BITS 0-3 = CHAR 3 BITS 4-7 / BITS 4-11= CHAR 2 / / DO NOT STORE CODES LISTED IN THE 'RECNOT' SECTION. DCA CHAR / SAVE DEV NR JMS I (CMORIN / INPUT ALSO GIVEN? SZA CLA JMP CDERR / YES. TAD CHAR / RETRIEVE DEVICE NR JMS I (CALDEV / FETCH DEVICE HANDLER TAD K7600 / MOVE FILENAME TO 'FNAME' JMS I (MFNAME / FROM C.D. BUFFER (FLD 1) TAD (FNAME DCA STARTB / SET FILENAME CDF CIF 10 / GET DEV NR TAD I K7600 / FOR OUTPUT FILE CDF 0 JMS I K200 / TO USR VIA 200 3 / OPEN A TENTATIVE FILE STARTB, FNAME / ARG(1)=START BLK ON RETURN OLEN, 0 / ARG(2)=-MAX LENGTH ON RETURN JMP OPENER / ERROR OPENING FILE JMS I (OINIT / SET UP OUTPUT FILE DCA BCNT / NR OF OUTPUT BLKS DCA LCNT / COUNT NR LINE IMAGES (CR'S) WATCH, CLA I / MONITOR MODEM ACTIVITY TAD LCNT RAL STL RAR INLUP, DKSF / ANY PHONE INPUT? JMP NOPHN / NONE YET. DKRB / GOT SOME! AND K177 SZA / SKIP INPUT IF AC = 0 JMP I (PHNCHR / PROCESS PHONE INPUT NOPHN, JMS TLISN / NO PHONE INPUT. TTY ACTIVE? SPA SNA JMP WATCH / NO, KEEP LOOKING. TAD M232 / TTY INPUT. CTRL/Z? SNA CLA JMP CLOSE / YES. TAD CHAR JMS DPOUT / NO, SEND TO DATAPHONE. JMP INLUP CLOSE, TAD CHAR / GET CTRL/Z DCA DIN / PUT IN TRANSFER BUFFER JMS I (BFCHAR / PROCESS CTRL/Z JMS I (OUTBLK / OUTPUT THE BLKS TAD BCNT / NR OF TOTAL BLKS FOR CLOSE DCA .+7 CIF CDF 10 TAD I K7600 / GET DEV NR CDF 0 JMS I K200 / TO USR VIA 200 4 / CLOSE THE FILE FNAME / ARG(1) 0 / ARG(2) = TOTAL NR BLKS JMP CLOSER / ERROR CLOSING FILE. JMS I [TTYMSG DUN / TRANSFER COMPLETED TAD STARTB / PRNT NR OF BLKS IF DEVICE SNA CLA / IS FILE-ORIENTED (STARTB>0) JMP .+7 TAD BCNT / NR OF BLKS OUTPUT JMS I [OC2DEC BLOCKS JMS I [TTYMSG / PRT NR BLOCKS BLOCKS 0 / TO SUPPRESS CR AFTER THIS MSG TAD LCNT / NR OF LINE IMAGES JMS I [OC2DEC NLINES JMS I [TTYMSG NLINES DCA FILFLG / SET = 0 TAD BIGFIL / FILE > BUFFER SPACE? SNA JMP I (PHBUF0 / NO. JMS I [TTYMSG / YES. PRT MSG. BIGFL1 JMS I [TTYMSG BIGFL2 DCA BIGFIL JMP I (PHBUF0 CDERR, JMS I [TTYMSG / I/O SPEC ERROR INOUT JMP I [MONLUP CLOSER, JMS I [TTYMSG / ERROR CLOSING OUTPUT FILE ERCLOS JMP I K7600 OPENER, JMS I [TTYMSG / ERROR OPENING OUTPUT FILE EROPEN JMP I K7600 PAGE / / PROCESS PHONE INPUT CHAR PHNCHR, TAD K200 / FORCE PARITY BIT DCA DIN JMS NOTREC / IS IT TO BE BUFFERED?? SNA / YES. JMP I (INLUP / NO, IGNORE IT. TAD M215 / CR? SNA CLA ISZ LCNT / INCR LINE IMAGE COUNT SKP ISZ LCNT / MORE THAN 4096 LINES JMS I (BFCHAR JMP I (INLUP / / CHECK IF THE CHARACTER RECEIVED (IN 'DIN' IS TO BE / BUFFERED OR NOT. COMPARE AGAINST 'RECNOT' LIST RECNOT-1 / ADDR OF 'RECNOT' LIST -1. NOTREC, 0 TAD NOTREC-1 / SET UP LOOP DCA TCNTR TAD I TCNTR / GET CODE SNA JMP RECCHR / YES. BUFFER CHAR. CIA TAD DIN / BUFF THIS CHAR? SZA CLA JMP NOTREC+3 / MAYBE. CHECK NEXT CHAR JMP I NOTREC / NO. IGNORE THIS CHAR. RECCHR, TAD DIN / BUFFER THIS CHAR JMP I NOTREC / / INPUT FROM DEV:FNAME.EX, OUTPUT TO PHONE. MOV2PH, DCA CHAR / SAVE DEVICE NR JMS CMORIN / MORE THAN 1 INPUT FILE ? SZA CLA JMP TOMANY / TOO MANY INPUT FILES. CDF 10 TAD I K7600 / OUTPUT FILE ALSO GIVEN? CDF 0 SZA CLA JMP I (CDERR / YES. ERROR MSG. TAD CHAR / RETRIEVE DEVICE NR JMS I (CALDEV / FETCH DEVICE HANDLER TAD K7605 / MOVE FILENAME TO 'FNAME' JMS I (MFNAME / FROM COM DEC BUFFER (FLD 1) TAD (FNAME / SET UP 'LOOKUP' DCA .+5 CIF 10 TAD CHAR / GET DEVICE NR JMS I K200 / TO USR VIA 0200 2 / LOOK-UP FSTART, FNAME / ARG(1) = START BLK FLEN, 0 / ARG(2) = -FILE LENGTH (256-WRD BLKS) JMP NOFILE / FILE NOT FOUND / NOW GET THE FIRST FEW BLKS AND START / SENDING TO THE PHONE ISZ FILFLG / =1 TO INDICATE FILE-TO-PHONE TAD FLEN / TRANSFER IS ACTIVE CIA MOR2PH, TAD (-13 / LARGER THAN BUFFER? SMA DCA FLEN / YES STL TAD (13 DCA CHAR SNL / MORE FILE? DCA FLEN / NO TAD FSTART DCA BLKNR / SET STARTING BLK NR TAD BLKNR TAD CHAR DCA FSTART / SET FOR NEXT TIME TAD CHAR CLL RTR / CHG TO FUNCTION CONTROL RTR / WORD FORMAT RTR TAD K10 / DATA TO FIELD 1 DCA .+2 JMS I DEVENT / GET BUFFER FULL 0 / ARG(1) 2000 / ARG(2) = FLD 1 START ADDR BLKNR, 0 / ARG(3) = START INPUT BLK NR JMP DEVIER / DEVICE INPUT ERROR JMS I (SND2PH / OUTPUT TO PHONE TAD FLEN SZA / DONE? JMP MOR2PH / NO, FLEN > 0. FILDUN, JMS I [TTYMSG / YES. DUN / PRT 'DONE' MSG DCA FILFLG JMP I [MONLUP TOMANY, JMS I [TTYMSG TOMNFL JMP I [MONLUP NOFILE, JMS I [TTYMSG XFILE JMP I [MONLUP DEVIER, JMS I [TTYMSG / DEVICE INPUT ERROR DEVERI JMP I K7600 / / ROUTINE TO CHECK IF AN INPUT FILE WAS SPECIFIED / IN INPUT FIELDS 2-5. AC = 0 IF NOT, AC <> 0 IF YES. CMORIN, 0 CDF 10 TAD I (7612 / FILE 2 SNA TAD I (7617 / FILE 3 SNA TAD I (7624 / FILE 4 SNA TAD I (7631 / FILE 5 CDF 0 JMP I CMORIN PAGE / / FOLLOWING LIST OF CHAR CODES ARE NOT TO BE SENT TO / THE DATAPHONE DURING FILE-TO-PHONE TRANSMISSIONS. / THE LAST ENTRY MUST BE 0. SNDNOT, 214 / FORM FEED 204 / CTRL/D ZBLOCK 6 / END OF LIST / / FOLLOWING LIST OF CHAR CODES ARE NOT TO BE PLACED / IN THE SPECIFIED FILE DURING PHONE-TO-FILE TRANS- / MISSIONS. THE LAST ENTRY MUST BE 0. RECNOT, 232 / CTRL/Z / 212 / LF ZBLOCK 7 / END OF LIST / / ROUTINE TO SEND INPUT BUFF (FIELD 1) TO PHONE. / IF BIT3 = 1 THEN ALSO PRT TRANSMISSION AT TTY. / CTRL/Z IN INPUT FIELD SIGNALS END OF FILE INPUT. SBUFF, 0 SND2PH, 0 TAD K1777 / SET AUTOINDEX PTR TO BUFFER DCA FPTR JMS GETFCR / GET WRD FROM FILE BUFF, CHAR 1 DCA SBUFF TAD CHAR JMS XMIT / SEND CHAR 1 TO PHONE JMS GETFCR / CHAR 2 RTR RTR TAD SBUFF / COMBINE BITS 0-3 RTR RTR / MOVE TO BITS 4-11 DCA SBUFF / SAVE FOR LATER TAD CHAR JMS XMIT / SEND CHAR 2 TO PHONE TAD SBUFF JMS XMIT / SEND CHAR 3 TO PHONE TAD FPTR / DONE W/ THIS BUFFER? TAD LAST SZA CLA JMP SND2PH+3 / NO, KEEP CYCLING. JMP I SND2PH / YES, GET ANOTHER. GETFCR, 0 CDF 10 TAD I FPTR CDF 0 DCA CHAR TAD CHAR AND K7400 / CHAR 3 BITS JMP I GETFCR / / ROUTINE TO SEND AC CHAR TO PHONE. FIRST CHECK IF / CTRL/Z. IF YES, THEN EOF ENCOUNTERED. IF NOT, / SEND IT, WATCH FOR RESPONSE; IF NO RESPONSE, GET / ANOTHER CHAR AND SEND IT. FILDUN XMIT, 0 AND K177 / CHG TO 8-BIT TAD K200 DCA CHAR TAD CHAR / IS IT CTRL/Z? TAD M232 SNA CLA JMP I XMIT-1 / YES. INFORM OPERATOR. JMS NOTSND / CHECK IF THIS CHAR TO BE SENT SNA / IF AC = 0 FIL2PH, JMP I XMIT / GET ANOTHER CHAR JMS DPOUT / SEND IT. JMS GETSWS / PRT IT AT TTY? AND BIT3 / YES IF BIT3=1. SZA CLA JMS TTYOUT / PRT IT JMS GETSWS / INSERT LF AFTER CR AND BIT10 / IF BIT 10 = 1. SNA CLA JMP I [MONLUP / NO. TAD CHAR / YES. IS THIS A CR?? TAD M215 SZA CLA JMP I [MONLUP / NO. TAD K212 / YES. SEND LF. DCA CHAR TAD CHAR JMP FIL2PH+1 / BIT3, 0400 BIT10, 0002 / / / CHECK IF CHAR IS TO BE SENT TO THE DATAPHONE. SNDNOT-1 / START ADDR-1 OF NO-SEND LIST NOTSND, 0 TAD NOTSND-1 DCA TCNTR TAD I TCNTR / AT END OF LIST?? SNA JMP LSTEND / YES. CIA TAD CHAR SZA CLA JMP NOTSND+3 / TRY NEXT CODE JMP I NOTSND / DON'T SEND THIS CODE LSTEND, TAD CHAR / SEND THIS CHAR CODE JMP I NOTSND / / ROUTINE TO PRINT "RESET BITS ..." MSG AND WAIT FOR BITS / SPECIFIED TO BE RESET TO 0 BEFORE RETURNING TO THE / CALLING LOCATION. CALL FORMAT: / JMS RSTBTS / MSG - MSG TO BE PRINTED / 7777 - BIT TO RESET = 1 (HERE, 0-11) / RSTBTS, 0 TAD I RSTBTS / MSG ADDRESS ISZ RSTBTS DCA RSTMSG TAD I RSTBTS / BITS TO RESET ISZ RSTBTS DCA SNDNOT TAD K7700 / TIMING CONSTANT DCA TCNTR RSTLUP, LAS / GET SWITCH REGISTER AND SRMASK AND SNDNOT SNA CLA JMP I RSTBTS / SET = 0. RETURN. JMS DLISN / DON'T MISS INPUT. JMS TLISN / OR CTRL/C ISZ CHAR SKP CLA ISZ TCNTR JMP RSTLUP JMS I [TTYMSG / PRNT "RESET" MSG RSTMSG, 0 JMP RSTLUP-2 PAGE / / PUT 'CHAR' IN PHONE-TO-FILE BUFFER BFCHAR, 0 CDFTOX, CDF /SELECT DATA FIELD ISZ FILFLG JMP CH1OR2 / IT'S CHAR 1 OR 2 CMA CLL RAL JMS CHAR3 / BACKUP TWO LOCNS IAC JMS CHAR3 / ADVANCE ONE CDF 0 CMA CLL RTL / AC=-3 DCA FILFLG / RESET FOR CHAR 1 ISZ WPTR TAD WPTR / CHECK FOR E-O-B CIA TAD I BUFPTR / UPPER LIMIT SZA CLA JMP I BFCHAR / CURRENT FIELD IS FULL. CHECK FOR ANOTHER FIELD. / IF FOUND, USE IT. IF NOT, OUTPUT FROM FIELD 0 TO / CURRENT FIELD, RESET TO FIELD 0 AND START BUFFER / AGAIN AT THAT POINT. TAD CDFTOX / CURRENT FIELD AND K70 CIA TAD I K200 / HIGHEST FIELD SNA CLA JMP LSTCDF TAD K10 TAD CDFTOX DCA CDFTOX ISZ BUFPTR TAD I BUFPTR DCA WPTR ISZ BUFPTR JMP I BFCHAR OUTBLK LSTCDF, JMS I .-1 / HAVE USED HIGHEST FIELD ISZ BIGFIL / FLAG LOST CHARS DURING XFER JMP I BFCHAR CH1OR2, TAD DIN DCA I WPTR CDF 0 ISZ WPTR JMP I BFCHAR / SKIPPED IF WPTR = 7777 JMP I BFCHAR CHAR3, 0 TAD WPTR / ADJUST POINTER DCA WPTR TAD DIN / SHIFT CHAR 3 RTL RTL DCA DIN TAD DIN AND K7400 TAD I WPTR / ADD TO CHARS 1,2 DCA I WPTR JMP I CHAR3 BUFPTR, BUFTBL BUFTBL, 03000;07400 /SA,LA+1 12000;17400 20000;27400 30000;40000 40000;50000 50000;60000 60000;70000 70000;100000 / / ROUTINE TO MOVE FILENAME IN COMMAND DECODER / FORMAT FROM FIELD 1 TO FIELD 0, ADDR 'FNAME' / THRU 'FNAME'+3. FIELD 1 START ADDR-1 IS IN AC / AT TIME OF CALL. MFNAME, 0 DCA TCNTR CDF 10 TAD I TCNTR DCA FNAME / LETTERS 1-2 TAD I TCNTR DCA FNAME+1 / LETTERS 3-4 TAD I TCNTR DCA FNAME+2 / LETTERS 5-6 TAD I TCNTR DCA FNAME+3 / EXTENSION CDF 0 JMP I MFNAME FNAME, ZBLOCK 4 / / ROUTINE TO BRING IN A DEV HNDLR. HNDLR / IS PLACED IN LOCS 2400-2777 OF FIELD 0. K2401, 2401 / FCW WORD CALDEV, 0 DCA CHAR / SAVE DEV NR TAD K2401 DCA LOADPT TAD CHAR CIF 10 JMS I K200 / TO USR VIA 0200 1 / FETCH (DEV NR IN AC) LOADPT, 2401 / ARG(1) JMP NODEV / DEVICE NOT FOUND TAD LOADPT / GET ENTRY ADDR DCA DEVENT JMP I CALDEV NODEV, JMS I [TTYMSG NOHAN JMP I [MONLUP / / / PRINT A CHAR FROM PHONE BUFF AT THE TTY THEN RETURN / TO MONITOR BETWEEN 'TLS'S FOR MORE INPUT. IF RT / SWITCH REGISTER BIT1=1 DON'T PRINT THE CHAR. BUFOUT, CDF 10 / YES, GET A CHAR AND PRT IT TAD I DOUT CDF 0 DCA CHAR TAD DOUT TAD LAST SZA CLA JMP .+3 TAD K1777 DCA DOUT JMS GETSWS / CHECK BIT 1 RAL SMA CLA JMS TTYOUT / PRT IT JMP I [MONLUP PAGE / / OUTPUT OS/8 BLKS TO THE SPECIFIC DEVICE / IF DEVICE IS FULL, PRT ERR MSG AND GO TO / KMON. OUTBLK, 0 TAD (BUFTBL / FIELD CONTROL TABLE DCA TBLPTR JMP FLDLUP FULFLD, JMS XFRTN / WRITE THIS FIELD TAD K10 TAD OFIELD FLDLUP, DCA OFIELD / FIELD COUNTER TAD I (STARTB DCA OARG3 / NEXT OUTPUT BLOCK TAD I TBLPTR ISZ TBLPTR DCA OARG2 / START ADDRESS TAD I TBLPTR ISZ TBLPTR DCA TCNTR / LAST ADDRESS+1 TAD I (CDFTOX AND K70 CIA TAD OFIELD / LAST FIELD? SZA CLA JMP FULFLD / NO TAD WPTR / CURRENT ADDRESS AND K177 SZA TAD K200 / ROUND UP PAGE TAD WPTR AND K7600 / NEXT PAGE ADR DCA TCNTR JMS XFRTN / WRITE LAST FIELD JMS OINIT JMP I OUTBLK / RESET FOR MORE TBLPTR, BUFTBL OFIELD, OINIT, 0 CLA CMA CLL RTL / -3 DCA FILFLG TAD CDF00 DCA I (CDFTOX TAD (BUFTBL IAC DCA I (BUFPTR TAD I (BUFTBL DCA WPTR JMP I OINIT / / ROUTINE TO TRANSFER MEMORY TO DEVICE XFRTN, 0 TAD OARG2 / COMPUTE PAGE COUNT CIA TAD TCNTR / NEXT PAGE ADDRESS STL RAR / SET WRITE BIT TAD OFIELD DCA OARG1 TAD OARG1 / CHECK BLOCK COUNT AND (3700 SNA STL RAR / 4000 RTR RTR RTR IAC RAR / ROUND UP DCA TCNTR TAD TCNTR STL TAD I (OLEN / -BLOCKS AVAILABLE SNL SZA JMP FL2LRG / NOT ENOUGH FILE SPACE DCA I (OLEN JMS I DEVENT / TRANSFER THE BLOCK(S) OARG1, 0 / OUTPUT 128-WRD PGS FROM FLD N OARG2, 0 / START OF TRANSFER BUFFER OARG3, 0 / START BLOCK FOR TRANSFER JMP DEVOER / DEVICE OUTPUT ERROR TAD TCNTR TAD BCNT DCA BCNT TAD I (STARTB / IF STARTB = 0, OUTPUT SZA TAD TCNTR / IS ASSUMED TO BE ON A DCA I (STARTB / NON-FILE DEVICE (HUH? JMP I XFRTN / SHOULD BE IF OLEN= 0) FL2LRG, JMS I [TTYMSG TOOBIG / NOT ENOUGH ROOM IN DEV JMP I K7600 / GO TO KMON DEVOER, JMS I [TTYMSG / DEVICE OUTPUT ERROR DEVERO JMP I K7600 PAGE / / CONVERT INTEGER CONTENTS OF AC TO ASCII DECIMAL. / ARG FOLLOWING JMS TO THIS ROUTINE = ADDR WHERE / RESULTS ARE TO BE PLACED (MUST BE 2 WRDS LONG). / OC2DEC, 0 DCA NR DCA LD0 / SET TO 0 TAD I OC2DEC / GET OUTPUT ADDR ISZ OC2DEC / PT TO RETURN ADDR DCA OADDR TAD M1000D / THOUSANDS JMS CSUB CLL RTL RTL / MOVE BITS 6-11 TO RTL / BITS 0-5 DCA I OADDR TAD M100D / HUNDREDS JMS CSUB TAD I OADDR DCA I OADDR ISZ OADDR / PT TO 2ND WRD TAD M10D / TENS JMS CSUB CLL RTL RTL RTL DCA I OADDR CMA / AC = -1 JMS CSUB TAD I OADDR DCA I OADDR TAD I OADDR / CHECK FOR '0' TAD K40 AND K77 TAD LD0 SZA CLA JMP I OC2DEC TAD K4060 / CHG 4TH SPACE TO '0'. DCA I OADDR JMP I OC2DEC M1000D, -1750 / DECIMAL -1000 M100D, -144 / DECIMAL -100 M10D, -12 / DECIMAL -10 K40, 40 K60, 60 / OCTAL '0' K4060, 4060 / SPACE + '0' CSUB, 0 DCA MINUS TAD K60 / CHG TO ASCII DCA TCNTR TAD NR TAD MINUS SPA JMP .+3 ISZ TCNTR JMP .-4 CIA TAD MINUS / RESTORE NR TO >0 CIA DCA NR / CHG ONLY LEADING 0 TO SPACE TAD LD0 SNA CLA / STILL LOOKING AT LEADING O? TAD TCNTR CIA / THIS A LEADING 0? TAD K60 SZA CLA JMP NOCHG / NO. TAD K40 / YES, CHG TO SPACE JMP I CSUB NOCHG, TAD TCNTR ISZ LD0 / CHG FLG JMP I CSUB MINUS, 0 LD0, 0 / FLAG TO INDICATE LDG O'S NR, 0 OADDR, 0 / / ROUTINE TO OUTPUT 6-BIT ASCII TEXTS / CALL SEQUENCE: JMS I [TTYMSG / ARG(1) / RETURN POINT AND ARG(2) / WHERE, ARG(1) = ADDR OF MSG TO BE PRINTED AND / ARG(2) = 0 IF TTYMSG IS NOT TO OUTPUT A CR+LF / AFTER THE MESSAGE. RETURN IS TO ARG(2) / ALL TEXT MESSAGES MUST BE IN FIELD 0 MSGLOC, 0 TTYMSG, 0 CLA CLL TAD I TTYMSG / GET ADDR OF MSG ISZ TTYMSG / PT TO ARG(2) DCA MSGLOC MSGLUP, TAD I MSGLOC RTR / EFFECTIVELY A 'BSW' RTR RTR JMS CKEND / END? TAD I MSGLOC JMS CKEND ISZ MSGLOC / PT TO NEXT WORD JMP MSGLUP CKEND, 0 / CHECK FOR END AND K77 SZA JMP NOTEND / CHG TO 8-BIT AND PRINT TAD I TTYMSG / END OF MSG, PRT CR+LF? SZA CLA JMS CRLF / YES. JMP I TTYMSG NOTEND, TAD K240 / CHG TO 8-BIT. AND K77 TAD K240 DCA CHAR JMS TTYOUT / PRINT IT JMP I CKEND K240, 240 CRLF, 0 TAD K215 / CR JMS TTYTLS TAD K212 / LF JMS TTYTLS JMP I CRLF MESAGS= .!177+1 / NEXT PAGE FIELD 0 / DUMP PAGE 0 / / TTY MESSAGES. / *MESAGS RESET2, TEXT /SET (RT) SWITCH REGISTER BIT 2 = 0/ NOHAN, TEXT /DEVICE NOT FOUND./ XFILE, TEXT /FILE NOT FOUND./ DUN, TEXT /TRANSFER COMPLETED./ TOOBIG, TEXT /NOT ENOUGH ROOM./ BLOCKS, TEXT / BLOCKS. / NLINES, TEXT / LINE IMAGES./ DEVERO, TEXT /DEVICE OUTPUT ERROR./ DEVERI, TEXT /DEVICE INPUT ERROR./ ERCLOS, TEXT /ERROR CLOSING FILE./ EROPEN, TEXT /ERROR WHILE OPENING FILE FOR OUTPUT./ TOMNFL, TEXT /TOO MANY INPUT FILES./ BIGFL1, TEXT /FILE LARGER THAN MEMORY BUFFER./ BIGFL2, TEXT /CHARACTERS AFTER THE FIRST/ BIGFL3, TEXT / BLOCKS MAY HAVE BEEN LOST./ INOUT, TEXT /ONLY INPUT OR OUTPUT, NOT BOTH./ VERSON, TEXT /VERSION 21 NOV 84/ ALLBIT, TEXT /SET (RT) SWITCH REGISTER = 0000./ RBIT11, TEXT /RESET (RT) SWITCH REGISTER BIT 11 = 0./ MEMSIZ, TEXT / K AVAILABLE./ $END$