/ PDP TELECOMMUNICATIONS/TELEPROCESSING PROGRAM / VERSION: 01 FEB 79 / / / 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 / TELECOMMUNICATIONS 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. / / 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: 12K / 1 - THE FIRST 4K IS USED FOR PROGRAM INSTRUCTIONS. / / 2 - THE SECOND 4K HOLDS THE USR (LOCKED IN) IN / ADDRESSES 10000 TO 11777 FOR CONVENIENT / ACCESS FOR FILE TRANSFERS. / / 3 - THE THIRD 4K ACTS AS A FILE I/O BUFFER / FOR INFORMATION TRANSFERS TO/FROM THE / MODEM. IT IS ALSO USED AS AN INPUT / CHARACTER BUFFER. MODEM INPUT / CHARACTERS ARE PLACED THERE AT THE TIME OF / INPUT AND PRINTED AT THE RATE ALLOWED BY / THE OUTPUT 'TTY' DEVICE. IT IS POSSIBLE / THAT MODEM INPUT DATA MAY BE OVERWRITTEN / BEFORE IT IS PRINTED -- BUT ONLY IF MORE / THAN 4096 CHARACTERS ARE WAITING TO BE PRINTED. / / THIS PROGRAM CHECKS THAT AT LEAST 12K MEMORY EXIST. IF / NOT FOUND, AN ERROR MESSAGE IS PRINTED AND CONTROL IS / RETURNED TO THE KEYBOARD MONITOR (KMON). NEXT, / PROGRAM DETERMINES HIGHEST FIELD AVAILABLE. THIS IS / USED FOR MODEM-TO-FILE DATA TRANSFERS: DATA IS RECEIVED / UNTIL THE HIGHEST FIELD IS FILLED (OR END-OF-DATA, / START ADDR = 0000 OF FIELD 2) BEFORE OUTPUT TO / THE SPECIFIED DEVICE AND RESET TO DATA FIELD 2 OCCUR. / / / 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 / / 2 - THE USER CAN SET THE APPROPRIATE LINE / LENGTH ON THE 'TTY' DEVICE BY PLACING / THE -DECIMAL VALUE OF THAT LENGTH INTO / LOCATION 'LINLIM'. DEFAULT VALUE FOR / LINLIM IS -72 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 COM DEC / 1 : GET COM DEC FOR FILE I/O (*) / 3 0 : DON'T PRT FILE-TO-MODEM CHARS / 1 : PRT AT 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. / 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 WHEN TYPED. / / 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 THE FILE I/O / COMMAND BY PRINTING AN ASTERIK AT THE LEFT-MOST / MARGIN AND WAITING FOR USER INPUT FOLLOWED BY / A 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 2, / UNPACKED AND TRANSMITTED ONE CHARACTER AT A / TIME. (UNPACKING AS PER OS/8 ASCII FILE CONVEN- / TIONS -- SEE BELOW.) WHEN CTRL/Z (ASCII 232) / IS ENCOUNTERED THE PROGRAM ASSUMES END-OF-FILE / HAS BEEN ENCOUNTERED. IT PRINTS THE MESSAGE / 'TRANSMISSION COMPLETED' AT THE TTY AND RETURNS / TO THE I/O MONITORING 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 A LF AFTER EACH CR, SET (RT) / SWITCH REGISTER BIT 10 = 1. THIS MAY NOT BE / DESIRABLE AND/OR NECESSARY IF YOUR FILE ALREADY / CONTAINS A 'LF' AFTER 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 PLACE -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 / MINUS ASCII VALUES OF CHAR CODES THAT ARE NOT / TO BE TRANSMITTED TO THE MODEM. THE FINAL / LIST ENTRY MUST BE -1. THE LIST STARTS AT LABEL / '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 OS/8 ASCII FILE CONVENTIONS (SEE BELOW) / AND MAY BE REFERENCED BY ANY OTHER OS/8 / PROGRAMS. ONLY ONE FILENAME MAY BE SPECIFIED. / / THE USER CAN INSERT A VARIABLE LENGTH LIST / OF THE MINUS 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'. / THE LAST LIST ENTRY MUST BE -1. / AS CURRENTLY CONFIGURED, CTRL/Z (ASCII EOF / CODE) AND LINEFEED (LF) ARE IGNORED WHEN / RECEIVED FROM THE MODEM FOR FILE INPUT. THE / OPERATOR MUST MONITOR THE MODEM AND PRESS / CTRL/Z AT THE KEYBOARD WHEN IT IS APPARENT / NO MORE DATA IS BEING RECEIVED FROM THE OBJECT / DEVICE. THIS CTRL/Z IS APPENDED TO THE FILE / CAUSES THE FILE TO BE CLOSED AND / CATALOGUED. PROGRAM CONTROL RETURNS / TO MONITORING FOR I/O IN THE NORMAL 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 PHONE / INPUT IN FIELD 2. WHEN IT IS APPARENT / NO MORE DATA IS BEING RECEIVED VIA / PHONE, PRESS CTRL/Z / TRANSFER COMPLETED (PDP) / NNNN BLOCKS. NNNN LINE IMAGES. (PDP) / -- ENTER OTHER 1108 DIRECTIVES AS DESIRED / / WARNING: ALL OF FIELD 2 IS USED TO BUFFER THE / INCOMMING DATA. WHEN THE FIELD IS FULL THE / PROGRAM CHECKS IF ADDITIONAL FIELDS ARE ALSO / AVAILABLE. IF SO, THE NEXT FIELD IS ALSO USED / TO BUFFER INCOMMING DATA (AND SO ON). ONCE / ALL AVAILABLE FIELDS HAVE BEEN FILLED (OR / CTRL/Z HAS BEEN ENTERED) THE PROGRAM OUTPUTS / TO THE SPECIFIED DEVICE, BEGINNING WITH FIELD 2 / THRU THE HIGHEST FIELD USED. IF MORE DATA IS / EXPECTED (IE CTRL/Z NOT TYPED AT KEYBOARD) / BUFFERING BEGINS AGAIN AT FIELD 2. IF / MORE THAN ONE BUFFER LOAD IS REQUIRED TO / HANDLE ALL INCOMMING DATA, THE PROGRAM PRINTS / AN ERROR MESSAGE TELLING AFTER WHICH BLOCK / DATA MAY HAVE BEEN LOST. / IF YOUR INPUT RATE IS RELATIVELY / FAST (EG 1200 BAUD) AND THE OUTPUT DEVICE IS / SLOW (EG LINCTAPE), YOU CAN POTENTIALLY LOSE / INCOMMING DATA. IF YOU ANTICIPATE RECEIVING / MORE THAN ONE BUFFER FULL IT IS ADVISABLE FOR YOU / TO SEND/RECEIVE IN SMALLER SUBSETS AND MERGE THE / SUBSETS LATER USING ANY OF A NUMBER OF MERGE / ROUTINES (EDIT, PDP, FOTP, ETC.) / / THE CALCULATION FOR SUBSET TRANSMISSION SIZE: / NR OF 4K FIELDS BEYOND 8K TIMES 6144 CHARACTERS PER / FIELD (INCLUDE ALL SPECIAL CODES SUCH AS CR, ETC). / / / IF THIS PROGRAM IS OPERATING WITHIN AN OS/8 / (OS/12) SYSTEM, THE HIGHEST FIELD AVAILABLE / TO THIS PROGRAM CAN BE SET VIA THE CCL OR BUILD / 'MEMORY' OR 'CORE' COMMAND. (IE - A SOFTWARE / LIMIT). IF YOU WISH TO HAVE THE PROGRAM / CALCULATE (AND USE) THE ABSOLUTE AMOUNT OF / CORE AVAILABLE, SET VARIABLE 'CALCOR'=1. IF / YOU WANT THE PROGRAM TO USE THE OS/8 / SOFTWARE LIMIT ESTABLISHED WITH THE 'CORE' / OR 'MEMORY' COMMAND, SET 'CALCOR'=0. / / / CTRL/D, WHEN ENCOUNTERED IN A FILE THAT IS / TO BE SENT TO THE MODEM, IS NOT TRANSMITTED. / THIS HAS BEEN DONE BECAUSE CTRL/D CAUSES SITE / TERMINATION (I.E. '@@TERM') WHEN RECEIVED BY / UNIVAC 1100 COMPUTERS. / / 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 'TRANS- / MISSION COMPLETED' IS PRINTED AT 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 OPERATOR MUST ENTER CTRL/Z AT / THE TTY DEVICE IN ORDER TO HAVE A CTRL/Z / APPENDED TO THE FILE AND THE FILE 'CLOSED' / AND CATALOGUED. / / 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: / ------------- / CALCOR=0 / SET NONZERO IF PROGRAM IS / TO CALCULATE AMT OF CORE / AVAILABLE INSTEAD OF USING / OS/8 SOFTWARE LIMIT. / / / / ****************************** / * * / * STARTING ADDRESS = 00200 * / * * / ****************************** / *10 DIN, -1 / MODEM BUFFER INPUT PTR. DOUT, -1 / 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 FIELD (IE - IS / LARGER THAN 6144 CHARS.) K777, 777 K34, 34 K70, 70 BIT1, 2000 BIT4, 0200 K77, 77 K212, 212 K215, 215 K7400, 7400 K7600, 7600 K7605, 7605 K7700, 7700 M203, -203 M212, -212 M215, -215 M232, -232 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 / =1 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 1 RECEIVING WORD. / / COMMON SUBROUTINES: / DLISN, 0 / LISN FOR PHONE CHAR INPUT. CLA CLL / THIS RTN NOT USED FOR FILE I/O DKSF / SKIP NEXT INSTR IF CHAR IN BUFFER JMP I DLISN / NO CHAR. RETURN. DKRB / GET CHAR. SNA / IGNORE IF AC - 0 JMP DLISN+2 JMS I (CKPRTY / CHECK PARITY DCA DPOUT OSR AND BIT1 / IGNORE MODEM INPUT ?? SZA JMP DLISN+1 / YES. TAD DPOUT / NO, PROCESS IT. CDF 20 DCA I DIN / SAVE IT KCDF, CDF 0 JMP DLISN+2 / CHECK FOR MORE / DPOUT, 0 / OUTPUT AC CHAR VIA PHONE. DTLS DTSF JMP .-1 / DONE? JMP I DPOUT / YES. / TLISN, 0 / LISN FOR TTY CHAR INPUT CLA CLL KSF JMP I TLISN KRB / GET CHAR DCA CHAR TAD CHAR TAD M203 / ^C SNA JMP I K7600 / YES, GO TO KMON. CLA CLL / NO, RETURN. TAD CHAR JMP I TLISN / PHBFMT, 0 / IS PHONE BUFFER EMPTY (FLD 2)? CLA CLL TAD DIN / IF DIN=DOUT THEN YES. CIA TAD DOUT CLL / ON RETURN, AC=0 IF EMPTY. JMP I PHBFMT / ELSE, NOT = 0. / / PRINT A CHARACTER AT THE TTY, WAIT FOR IT TO / FINISH PRINTING THEN RETURN. MONITOR FOR / PHONE INPUT WHILE WAITING. TTYOUT, 0 CLA CLL TAD CHAR TAD M212 / DON'T COUNT LF SNA JMP TTYPRT+1 / JUST PRT IT. CLA CLL TAD CHAR TAD M215 / IS IT CR? SZA JMP .+4 / NO. CLL / YES, RESET CNTR=0. DCA TTYCNT JMP TTYPRT+1 CLA CLL / IS THIS THE LINLIM+1 CHAR? TAD TTYCNT TAD LINLIM SNA JMS CRLF / YES, DO CRLF TTYPRT, ISZ TTYCNT CLA CLL TAD CHAR JMS TTYTLS CLA CLL JMP I TTYOUT TTYTLS, 0 TLS TSF / DONE PRINTING? SKP JMP I TTYTLS / YES, RETURN. JMS DLISN / NO, LISTEN FOR PHONE INPUT. JMP .-4 / SEE IF PRT DONE YET. CRLF, 0 CLA CLL DCA TTYCNT / RESET LIN CNTR = 0 TAD K215 / CR JMS TTYTLS CLA TAD K212 / LF JMS TTYTLS CLA JMP I CRLF *200 CIF 10 JMS I K7700 / GET USR K10, 10 / LOCK IN ADDR 10000-11777 / / IFNZRO CALCOR < / ROUTINE CALCULATES AMT OF CORE PHYSICALLY PRESENT / IN THIS COMPUTER (MAX = 32K). IT IGNORES THE / SOFTWARE LIMIT ESTABLISHED BY THE CCL AND BUILD 'CORE' / COMMAND. JMS CLIM SNA CLA JMP .-2 TAD LIMCDF AND K70 > / / IFZERO CALCOR < / ROUTINE DETERMINES MAXIMUM CORE AVAILABLE TO THIS / PROGRAM AS ESTABLISHED BY THE CCL OR BUILD 'CORE' / DIRECTIVE. INFORMATION IS FOUND IN ADDR 07777, BITS / 6-8. IF = 0, THEN HIGHEST FIELD = 7 (32K). TAD I K7777 AND K70 SNA TAD K70 > / / RTR / GET FLD NR RAR CIA / -MAX FLD NR DCA CORLIM TAD BIT10 / + 2 TO VOID FIELDS 0 & 1 TAD CORLIM SPA SNA / AC>0? JMP .+4 JMS I [TTYMSG / YES. LTLCOR / NOT ENOUGH CORE JMP I K7600 CLA CLL IAC / AC=1 TAD CORLIM DCA TCNTR TAD BIT7 / 20 BLKS PER FLD ISZ TCNTR JMP .-2 JMS I (OC2DEC BIGFL3-2 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 OR FILE I/O JMS DPOUT / SEND TO PHONE JMS PHBFMT / PHONE BUFF EMPTY?? SZA JMP MONL2 / NO, DON'T ECHO CHAR AT TTY. / PHONE BUFFER WAS EMPTY, SO GET READY TO ECHO CHAR AT TTY. / IF BIT 0 OF (RT) SWITCH REGISTER = 1 DON'T ECHO. OSR / GET (RT) SWITCH REGISTER AND BIT0 SNA JMS TTYOUT / ECHO IT JMP MONL2 PHBUF0, CLA CLL CMA / RESET PHONE BUFF PTRS DCA DIN / IGNORE ALL BACKUP CMA / IN THE DATAPHONE BUFFER DCA DOUT MONL2, CLA CLL / CHECK IF BIT4 = 1 OSR AND BIT4 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 JMP PHBUF0 / EMPTY PHONE BUFFER. MONL3, TAD BT4FLP / BIT4 NOT SET NOW. SNA CLA / SET PREVIOUSLY?? JMP MONL4 / NO. DCA BT4FLP / YES, LOWER FLAG. MONL4, JMS I (BUFOUT / PRT A PHONE BUFF CHAR / IF THERE ARE ANY IN THE BUFFER JMP MONLUP / THIS INSTR SKIPPED BY THE BUFOUT / ROUTINE IF NO BUFF DATA PRESENT / IF 'FILFLG'=1 THEN FILE-TO-PHONE I/O IS ACTIVE. / G0 TRANSFER ANOTHER CHAR FROM FILE. TAD FILFLG SZA JMP I (FIL2PH / IF 'FILFLG'=0 THEN CHECK IF BIT2=1. IF YES, GET / COMMAND DECODER AND REQUEST FILENAME. OSR AND BIT2 SNA JMP .+2 JMP I (GETCD / GET COMMAND DECODER OSR / GET (RT) SWITCH REGISTER AND BIT11 SNA / BIT 11 = 1 ?? JMP MONLUP / NO. JMS CRLF JMS I (RSTBTS / RESET BIT 11 = 0 RBIT11 BIT11, 0001 / WHICH BIT = 1. JMS I [TTYMSG / YES. PRT PROGRAM VERSION NR. VERSON JMP MONLUP BT4FLP, 0 BIT0, 4000 BIT2, 1000 BIT7, 20 BIT10, 2 CORLIM, 0 *400 / / SOME COMPUTERS SEND 8-BIT ASCII W/ PARITY. / CHECK FOR IT. IF AC < 200 ADD 200 (BIT4). CKPRTY, 0 DCA CHAR TAD CHAR TAD M200 SMA JMP .+5 CLA CLL TAD BIT4 / 200 TAD CHAR JMP I CKPRTY CLA CLL TAD CHAR JMP I CKPRTY M200, -200 / / IFNZRO CALCOR < CLIM, 0 TAD (-10 TAD LIMCDF DCA LIMCDF CLA CLL CMA LIMCDF, 6301 / 6201 + 10 DCA I BIT4 TAD I BIT4 CDF 00 / RETURN TO THIS FIELD JMP I CLIM > / / 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) / 0 / HOLD BITS RSTBTS, 0 CLA CLL DCA CHAR / DUMMY COUNT LOCATION TAD I RSTBTS / MSG ADDRESS DCA RSTMSG ISZ RSTBTS TAD I RSTBTS / BITS TO RESET DCA RSTBTS-1 ISZ RSTBTS / PT TO RETURN ADDR RSTLUP, TAD K7700 / TIMING LOOP DCA TCNTR CLA CLL OSR / GET SWITCH REGISTER AND RSTBTS-1 SNA JMP I RSTBTS / SET = 0. RETURN. JMS DLISN / DON'T MISS INPUT. ISZ CHAR JMP RSTLUP+2 ISZ TCNTR JMP RSTLUP+2 JMS I [TTYMSG / PRT "RESET" MSG RSTMSG, 0 JMP RSTLUP *600 / BIT 2 = 1. GET COMMAND DECODER AND REQUEST FILE FOR / DATA TRANSFER. ANY PHONE INPUT WHILE COMM DEC IS / ACTIVE IS LOST. GETCD, JMS CRLF / PERFORM CR+LF JMS I (RSTBTS / RESET BIT 2 = 0 RESET2 1000 CIF 10 JMS I BIT4 / TO USR VIA 0200 5 / BRING IN CD 5200 / SPECIAL MODE CDF 10 TAD I K7605 / CHECK FOR PDP INPUT FILE CDF 0 SZA JMP I (MOV2PH / OUTPUT TO PHONE CDF 10 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? SNA JMP .+4 / NO. JMS I [TTYMSG / YES. INOUT JMP I [MONLUP TAD CHAR / RETRIEVE DEVICE NR JMS I [CALDEV / FETCH DEVICE HANDLER TAD K7600 / MOVE FILENAME TO 'FNAME' JMS I [MFNAME / FROM COM DEC BFR (FLD 1) TAD (FNAME DCA .+7 / SET FILENAME CDF 10 / GET DEV NR TAD I K7600 / FOR OUTPUT FILE CDF 0 CIF 10 JMS I BIT4 / 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 I (OPENER / ERROR OPENING FILE CLA CLL CMA DCA FILFLG / CHAR 1-3 PTR (SEE BELOW) DCA DIN / = 0, TEMP CHAR HOLDER. DCA WPTR / BUFF START ADDR = 20000 DCA LCNT / COUNT NR LINE IMAGES (CR'S) DCA BCNT / NR OF OUTPUT BLKS INLUP, CLA CLL DKSF / ANY PHONE INPUT? JMP .+6 / NONE YET. DKRB / GOT SOME! SNA / SKIP INPUT IF AC = 0 JMP .+3 DCA DIN / TEMP IN CHAR HOLDER. JMP I (PHNCHR / PROCESS PHONE INPUT JMS TLISN / NO PHONE INPUT. TTY ACTIVE? SNA JMP INLUP / NO, KEEP LOOKING. TAD M232 / TTY INPUT. CTRL/Z? SNA CLA JMP .+4 / YES. TAD CHAR JMS DPOUT / NO, SEND TO DATAPHONE. JMP INLUP 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 BIT4 / TO USR VIA 200 4 / CLOSE THE FILE FNAME / ARG(1) 0 / ARG(2) = TOTAL NR BLKS JMP I (CLOSER / ERROR CLOSING FILE. JMS I [TTYMSG DUN / TRANSFER COMPLETED TAD I (STARTB / PRT 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 CLA CLL CMA DCA DIN CMA DCA DOUT TAD BIGFIL / FILE > NR FLDS * 6144 CHARS? SNA JMP I [MONLUP / NO. JMS I [TTYMSG / YES. PRT MSG. BIGFL1 JMS I [TTYMSG BIGFL2 0 / SUPPRESS CR+LF AFTER THIS MSG JMS I [TTYMSG BIGFL3-1 DCA BIGFIL JMP I [MONLUP *1000 / / PROCESS PHONE INPUT CHAR PHNCHR, JMS NOTREC / IS IT TO BE BUFFERED?? SNA / YES. JMP I (INLUP / NO, IGNORE IT. TAD M215 / CR? SNA 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. 0 NOTREC, 0 CLA CLL TAD NOTREC-2 / SET UP LOOP DCA NOTREC-1 ISZ NOTREC-1 CLA CLL IAC / AC=1. DONE? TAD I NOTREC-1 / GET CODE SNA JMP RECCHR / YES. BUFFER CHAR. CLA CLL TAD I NOTREC-1 / BUFF THIS CHAR? TAD DIN SZA JMP .-11 / MAYBE. CHECK NEXT CHAR JMP I NOTREC / NO. IGNORE THIS CHAR. RECCHR, CLA CLL TAD DIN / BUFFER THIS CHAR JMP I NOTREC / / INPUT FROM DEV:FNAME.EX, OUTPUT TO PHONE. MOV2PH, DCA CHAR / SAVE DEVICE NR JMS I (CMORIN / MORE THAN 1 INPUT FILE ? SNA JMP .+4 / NO, ONLY ONE. JMS I [TTYMSG TOMNFL / TOO MANY INPUT FILES. JMP I [MONLUP CDF 10 TAD I K7600 / OUTPUT FILE ALSO GIVEN? CDF 0 SNA JMP .+4 JMS I [TTYMSG / YES. ERROR MSG. INOUT / INPUT AND OUTPUT SPECIFIED. JMP I [MONLUP 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 BIT4 / TO USR VIA 0200 2 / LOOK-UP FSTART, FNAME / ARG(1) = START BLK FLEN, 0 / ARG(2) = -FILE LENGTH (256-WRD BLKS) JMP I (NOFILE / FILE NOT FOUND / NOW GET THE FIRST FEW BLKS AND START / SENDING TO THE PHONE ISZ FILFLG / =1 TO INDICATE FILE-TO-PHONE / TRANSFER IS ACTIVE TAD FLEN CLL / CLEAR THE LINC RAL / *2 = # OF 128-WRD BLKS CLL CIA DCA FLEN / STORE AS +FLEN ********* TAD FLEN MOR2PH, TAD M40 / FLEN - 40 PAGES SMA JMP .+7 CLA CLL TAD FLEN / < 40 PAGES LEFT DCA CHAR DCA FLEN / =0 TAD CHAR JMP INDEV / GO INPUT FROM DEVICE DCA FLEN CLL TAD M40 CIA INDEV, DCA CHAR TAD FSTART DCA BLKNR / SET STARTING BLK NR TAD CHAR RAR / CHG TO NR BLKS CLL TAD FSTART DCA FSTART / SET FOR NEXT TIME TAD CHAR RTR / CHG TO FUNCTION CONTROL RTR / WORD FORMAT RTR CLL RAR CLL TAD I (BIT7 / DATA TO FIELD 2 DCA .+2 JMS I DEVENT / GET BUFFER FULL 0 / ARG(1) 0 / ARG(2) = FLD 2 START ADDR BLKNR, 0 / ARG(3) = START INPUT BLK NR JMP I (DEVIER / DEVICE INPUT ERROR JMS I (SND2PH / OUTPUT TO PHONE TAD FLEN SZA / DONE? JMP MOR2PH / NO, FLEN > 0. JMS I [TTYMSG / YES. DUN / PRT 'DONE' MSG JMP I [MONLUP M40, -40 / *1200 / / ROUTINE TO CHECK IF AN INPUT FILE WAS SPECIFIED / IN INPUT FIELDS 2-5. AC = 0 IF NOT, AC <> 0 IR YES. CMORIN, 0 CLA CLL CDF 10 TAD I (7612 / FILE 2 SZA JMP .+10 TAD I (7617 / FILE 3 SZA JMP .+5 TAD I (7624 / FILE 4 SZA JMP .+2 TAD I (7631 / FILE 5 CDF 0 JMP I CMORIN / / ROUTINE TO SEND INPUT BUFF (FIELD 2) 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 CLA CLL CMA DCA FPTR / SET AUTOINDEX PTR TO BUFFER JMS GETFCR / GET WRD FROM FILE BUFF, CHAR 1 AND K7400 / BITS 0-3, CHAR 3 RTR RTR / MOVE TO BITS 4-7 DCA SBUFF TAD CHAR JMS XMIT / SEND CHAR 1 TO PHONE JMS GETFCR / CHAR 2 AND K7400 / BITS 4-7, CHAR 3 RTR / MOVE TO BITS 6-9 RTR RTR RTR / MOVE TO BITS 8-11 TAD SBUFF / COMBINE WITH BITS 4-7 DCA SBUFF / SAVE FOR LATER TAD CHAR JMS XMIT / SEND CHAR 2 TO PHONE CLA CLL TAD SBUFF JMS XMIT / SEND CHAR 3 TO PHONE CLA CLL / DONE W/ THIS BUFFER? TAD FPTR IAC SNA JMP I SND2PH / YES, GET ANOTHER. CLA CLL JMP SND2PH+3 / NO, KEEP CYCLING. GETFCR, 0 CLA CLL CDF 20 TAD I FPTR CDF 0 DCA CHAR TAD CHAR 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. BIT3, 400 K377, 377 XMIT, 0 AND K377 / CHG TO 8-BIT DCA CHAR TAD CHAR / IS IT CTRL/Z? TAD M232 SNA JMP FIL2PH+1 / YES. INFORM OPERATOR. JMS NOTSND / CHECK IF THIS CHAR TO BE SENT SNA / IF AC = 0 JMP I XMIT / DON'T SEND TO PHONE. XCHAR, JMS DPOUT / SEND IT. CLA CLL OSR / PRT IT AT TTY? AND BIT3 / YES IF BIT3=1. SZA JMS TTYOUT / PRT IT OSR / INSERT LF AFTER CR AND I (BIT10 / IF BIT 10 = 1. SNA CLA JMP I [MONLUP / NO. TAD CHAR / YES. IS THIS A CR?? TAD M215 SZA JMP I [MONLUP / NO. TAD K212 / YES. SEND LF. DCA CHAR TAD CHAR JMP XCHAR JMP I [MONLUP / PROCESS ANY RESPONSE FIL2PH, JMP I XMIT / GET ANOTHER CHAR JMS I [TTYMSG DUN / PRT 'DONE' DCA FILFLG JMP I [MONLUP / LOOK FOR RESPONSE / / CHECK IF AC CHARACTER IS TO BE SENT TO THE / DATAPHONE. SNDNOT-1 / START ADDR-1 OF NO-SEND LIST 0 NOTSND, 0 CLA CLL TAD NOTSND-2 DCA NOTSND-1 ISZ NOTSND-1 CLA CLL IAC / AC=-1 TAD I NOTSND-1 / AT END OF LIST?? SNA JMP LSTEND / YES. CLA CLL TAD I NOTSND-1 TAD CHAR SZA JMP .-11 / TRY NEXT CODE JMP I NOTSND / DON'T SEND THIS CODE LSTEND, CLA CLL / SEND THIS CHAR CODE TAD CHAR JMP I NOTSND *1400 / / ROUTINE TO OUTPUT 6-BIT ASCII TEXTS / CALL SEQUENCE: JMS I [TTYMSG / ARG(1) / ARG(2) / ... RETURN PT / 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 AND <>0 IF CR+LF IS TO BE OUTPUT. / ADDITIONALLY, IF ARG(2) = 0 THEN RETURN IS TO / ADDR OF ARG(2)+1. IF ARG(2) <> 0 THEN RETURN / IS TO ADDR OF ARG(2). / / ALL TEXT MESSAGES MUST BE IN FIELD 0 / AND MUST END WITH THE CHARACTER '\'. MSGLOC, 0 TTYMSG, 0 CLA CLL TAD I TTYMSG / GET ADDR OF MSG DCA MSGLOC ISZ TTYMSG / PT TO ARG(2) TAD I MSGLOC RTR / EFFECTIVELY A 'BSW' RTR RTR CLL AND K77 JMS CKEND / IS IT '\'? TAD I MSGLOC AND K77 / BITS 6-11 JMS CKEND ISZ MSGLOC / PT TO NEXT WORD JMP .-13 CKEND, 0 / CHECK IF CHAR = '\' DCA CHAR TAD CHAR TAD M34 SZA JMP NOTEND / CHG TO 8-BIT AND PRINT TAD I TTYMSG / CHAR = '\'! PRT CR+LF? SNA JMP .+3 / NO. JMS CRLF / YES. SKP ISZ TTYMSG CLA CLL JMP I TTYMSG NOTEND, CLA CLL / CHG TO 8-BIT. TAD CHAR TAD I (M40 SMA JMP NMBR / 0-40 = ALPHABETIC CLA CLL TAD K300 JMP .+3 NMBR, CLA CLL / CHAR > 40 = NUMERIC TAD BIT4 TAD CHAR DCA CHAR JMS TTYOUT / PRINT IT JMP I CKEND / / 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, 0 0 0 0 / EXTENSION / / ROUTINE TO BRING IN A DEV HNDLR. HNDLR IS / PLACED INTO LOC 6000-6177 OF FIELD 0 K6001, 6001 / FCW WORD CALDEV, 0 DCA CHAR / SAVE DEV NR TAD CHAR CIF 10 JMS I BIT4 / TO USR VIA 0200 1 / FETCH (DEV NR IN AC) 6001 / ARG(1) JMP NODEV / DEVICE NOT FOUND CLA CLL TAD .-3 / GET ENTRY ADDR DCA DEVENT TAD K6001 / SET FOR NEXT TIME DCA CALDEV+6 JMP I CALDEV NODEV, JMS I [TTYMSG NOHAN JMP I [MONLUP NOFILE, JMS I [TTYMSG XFILE 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, 0 JMS PHBFMT / ANY CHARS IN THE BUFFER? SZA JMP .+3 ISZ BUFOUT / BUFF IS EMPTY, SKIP 'JMP MONLUP' / INSTR ON PAGE 1 JMP I BUFOUT / NO CLA CLL / YES, GET A CHAR AND PRT IT CDF 20 TAD I DOUT CDF 0 DCA CHAR OSR / CHECK BIT 1 AND BIT1 SNA JMS TTYOUT / PRT IT JMP I BUFOUT M34, -34 K300, 300 *1600 / / PUT 'CHAR' IN PHONE-TO-FILE BUFFER BFCHAR, 0 CLA CLL TAD FILFLG / IF FILFLG < 0 THEN THIS IS CHAR 1 / = 0 CHAR 2 / > 0 CHAR 3 SMA JMP CR2OR3 / IT'S CHAR 2 OR 3 CLA CLL TAD DIN CDFTOA, CDF 20 DCA I WPTR CDF 0 CLA CLL IAC TAD FILFLG / INCREMENT FILFLG DCA FILFLG ISZ WPTR JMP I BFCHAR / IF WPTR = 0, NEXT CHAR = #3 JMP I BFCHAR / SO AVOID ISZ 'SKP' ERROR. CR2OR3, SNA JMP BFCHAR+5 / IT'S CHAR 2 CLA CLL IAC / IT'S CHAR 3, BACK UP 2 CMA / WORDS. AC=-2. TAD WPTR DCA WPTR TAD DIN / SAVE CHAR BITS 0-3 RTL / ARE IN 4-7, RTL / MOVE TO 0-3 AND K7400 CDFTOB, CDF 20 TAD I WPTR / PUT WITH CHAR 1 DCA I WPTR ISZ WPTR / SET FOR 2ND HALF OF TAD DIN / CHAR 3 RTR RTR RAR / BITS 4-7 TO 0-3. AND K7400 TAD I WPTR DCA I WPTR / PUT WITH CHAR 2 CDF 0 CMA / AC=-1 DCA FILFLG / RESET FOR CHAR 1 ISZ WPTR / RESET FOR NEXT CHAR JMP I BFCHAR / CURRENT FIELD IS FULL. CHECK FOR ANOTHER FIELD. / IF FOUND, USE IT. IF NOT, OUTPUT FROM FIELD 2 TO / CURRENT FIELD, RESET TO FIELD 2 AND START BUFFER / AGAIN AT THAT POINT. CLA CLL TAD CDFTOA / CURRENT CDF AND K70 RTR RAR / FLD NR IN BITS 9-11 TAD I (CORLIM / -MAX FLDS SNA CLA JMP LSTCDF TAD (10 TAD CDFTOA DCA CDFTOA TAD CDFTOA DCA CDFTOB JMP I BFCHAR LSTCDF, JMS I (OUTBLK / HAVE USED HIGHEST FIELD ISZ BIGFIL / FLAG, LOST CHARS DURING XFER? JMP I BFCHAR *2000 / / OUTPUT OS/8 BLKS TO THE SPECIFIC DEVICE / IF DEVICE IS FULL, PRT ERR MSG AND GO TO / KMON. OUTFCW, 4020 / OUTPUT FROM FIELD 2 0 / COUNT NR OS/8 128-WRD PAGES OUTBLK, 0 CLA CLL / SET FOR FULL FIELD 2 TRANSFER DCA OUTBLK-1 TAD OUTFCW DCA OFCWR1 / ARG(1) FOR TRANSFER TAD I (STARTB DCA OFCWR1+2 / ARG(3) FOR TRANSFER TAD I (CDFTOA / CURRENT DATA FIELD AND K70 RTR RAR DCA CHAR TAD I (BIT10 / = 2, FIRST DATA FIELD (N) DCA TCNTR FLDLUP, TAD TCNTR CIA / -N TAD CHAR SNA JMP FINFLD / WE'RE IN THE HIGHEST FLD WRITTEN JMS XFRTN / TRANSFER AN ENTIRE FIELD CLA CLL TAD I (BIT7 / ADD 40 PAGES TO BLOCK COUNT TAD BCNT / (40 PAGES = 20 BLOCKS) DCA BCNT TAD I (STARTB SZA / DON'T INCR IF STARTB=0, ELSE TAD I (BIT7 / ADD 20 BLKS FOR NEXT TIME. DCA I (STARTB TAD I (STARTB DCA OFCWR1+2 / SET FOR NEXT TRANSFER ISZ TCNTR / SET FOR NEXT FIELD CHECK TAD (10 / SET FOR NEXT FLD XFER TAD OFCWR1 DCA OFCWR1 JMP FLDLUP / CHECK NEXT FIELD FINFLD, CLA CLL TAD WPTR SZA / 0 AC = ALL OF FLD N, 40 PAGES. JMP .+4 TAD (40 DCA OUTBLK-1 / INITIALIZE FOR FULL FIELD JMP STRTXF / START TRANSFER RTL RTL / NR OF THOUSANDS * 4 = NR OF RTL / 128-WORD PAGES AND K34 / SAVE ONLY THOSE BITS CLL DCA OUTBLK-1 TAD WPTR AND K777 CIA ISZ OUTBLK-1 / INCR PAGE COUNTER TAD BIT4 / + 200 (ANOTHER PAGE ?? ) SMA JMP .+2 JMP .-4 STRTXF, CLA CLL / START BUFF-TO-FILE XFER TAD OUTBLK-1 / NR PAGES RTL / CHG TO FCW FORMAT RTL RTL RAL / GET RID OF BIT 0 CLL RAR TAD OFCWR1 DCA OFCWR1 TAD I (STARTB / IF START BLK ('STARTB') = 0 THEN DEVICE IS NOT / FILE-ORIENTED. WE NEED NOT INCR BLK COUNTER / NOR WORRY ABOUT EXCEEDING MAX NR OUTPUT BLKS. SZA DCA OFCWR1+2 / SAVE START BLK JMS XFRTN TAD OFCWR1+2 / INCR START BLOCK IF INITIALLY SNA JMP .+7 / NON-FILE-ORIENTED. DON'T INCR. CLA CLL IAC / INCR START BLK FOR NEXT TIME TAD OUTBLK-1 / NR PGS RAR / DIVIDE BY 2 = NR OS/8 BLKS CLL TAD I (STARTB DCA I (STARTB CLA CLL IAC TAD OUTBLK-1 / INCR BLK COUNT RAR / DIVIDE BY 2 = NR BLKS TAD BCNT DCA BCNT CLL TAD I (BIT7 / = 20, RESET TO DATA FIELD 2 TAD KCDF DCA I (CDFTOA TAD I (CDFTOA DCA I (CDFTOB JMP I OUTBLK FL2LRG, JMS I [TTYMSG TOOBIG / NOT ENOUGH ROOM IN DEV JMP I K7600 / GO TO KMON / / ROUTINE TO TRANSFER CORE TO DEVICE XFRTN, 0 CLA CLL TAD OFCWR1 / CHECK IF THERE'S ROOM AND (3700 / GET NR PAGES RTR RTR RTR SNA TAD (40 / 40 PAGES IF AC = 0. IAC RAR / CHG TO NR BLKS CLL TAD I (OLEN SMA SZA / AC > 0?? JMP FL2LRG / YES, FILE TOO LARGE. DCA I (OLEN / OK FOR TRANSFER JMS I DEVENT / TRANSFER THE BLOCK(S) OFCWR1, 0 / OUTPUT 128-WRD PGS FROM FLD N 0 / START OF TRANSFER BUFFER, ALWAYS = 0 0 / START BLK FOR TRANSFER JMP I (DEVOER / DEVICE OUTPUT ERROR JMP I XFRTN *2200 / / 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 CLA CLL TAD I OC2DEC / GET OUTPUT ADDR DCA OADDR DCA LD0 / SET TO 0 TAD M1000D / THOUSANDS JMS CSUB RTL RTL / MOVE BITS 6-11 TO RTL / BITS 0-5 AND K7700 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 RTL RTL RTL AND K7700 DCA I OADDR CMA / AC = -1 JMS CSUB TAD I OADDR DCA I OADDR CLL ISZ OC2DEC / PT TO RETURN ADDR TAD I OADDR AND K77 CIA TAD K40 SNA CLA JMP .+2 JMP I OC2DEC TAD I OADDR RTR / SAVE 3RD CHAR RTR RTR AND K77 CLL RTL / MOVE 3RD BACK INTO PLACE RTL RTL TAD K60 / CHG 4TH SPACE TO '0'. DCA I OADDR JMP I OC2DEC M1000D, -1750 / DECIMAL -1000 M100D, -144 / DECIMAL -100 M10D, -12 / DECIMAL -10 K60, 60 / OCTAL '0' CSUB, 0 DCA MINUS DCA TCNTR / SET = 0 TAD NR TAD MINUS SPA JMP .+3 ISZ TCNTR JMP .-4 DCA NR TAD MINUS / RESTORE NR TO >0 CIA TAD NR DCA NR CLA CLL TAD TCNTR TAD K60 / CHG TO ASCII / CHG ONLY LEADING 0 TO SPACE DCA TCNTR TAD LD0 SZA / STILL LOOKING AT LEADING O? JMP NOCHG / NO. TAD TCNTR CIA / THIS A LEADING 0? TAD K60 SZA JMP NOCHG / NO. TAD K40 / YES, CHG TO SPACE JMP I CSUB NOCHG, CLA CLL TAD TCNTR ISZ LD0 / CHG FLG JMP I CSUB MINUS, 0 LD0, 0 / FLAG TO INDICATE LDG O'S NR, 0 OADDR, 0 K40, 40 DEVOER, JMS I [TTYMSG / DEVICE OUTPUT ERROR DEVERO JMP I K7600 DEVIER, JMS I [TTYMSG / DEVICE INPUT ERROR DEVERI JMP I K7600 CLOSER, JMS I [TTYMSG / ERROR CLOSING OUTPUT FILE ERCLOS JMP I K7600 OPENER, JMS I [TTYMSG / ERROR OPENING OUTPUT FILE EROPEN JMP I K7600 *2400 / / FOLLOWING LIST OF -CHAR (MINUS CHARACTER) CODES ARE / NOT TO BE SENT TO THE DATAPHONE DURING FILE-TO-PHONE / TRANSMISSIONS. THE LAST ENTRY MUST BE = -1. SNDNOT, -214 / FORM FEED -204 / CTRL/D -1 / END OF LIST / / FOLLOWING LIST OF -CHAR (MINUS CHARACTER) CODES ARE / NOT TO BE PLACED INTO THE SPECIFIED FILE DURING / PHONE-TO-FILE TRANSMISSIONS. THE LAST ENTRY / MUST BE -1. RECNOT, -232 / CTRL/Z -212 / LF -1 / END OF LIST / / TTY MESSAGES. THE LAST CHAR OF THE MESSAGE SHOULD / BE '\'. THIS CHAR IS NOT PRINTED. / 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.\/ NLINES, 0 0 TEXT / LINE IMAGES.\/ BLOCKS, 0 0 TEXT / BLOCKS. \/ 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 BEYOND THE FIRST \/ 0 0 BIGFL3, TEXT / BLOCKS MAY HAVE BEEN LOST.\/ INOUT, TEXT /ONLY INPUT OR OUTPUT, NOT BOTH.\/ VERSON, TEXT /VERSION 01 FEB 79\/ ALLBIT, TEXT /SET (RT) SWITCH REGISTER = 0000.\/ RBIT11, TEXT /RESET (RT) SWITCH REGISTER BIT 11 = 0.\/ LTLCOR, TEXT /CAN'T WORK IN THIS CONFINED SPACE, <12K !!\/