/ TXIO.PA SERIAL INPUT-OUTPUT ROUTINES / / / / UPDATE #33 18-JUN-86 / / / TCI CONTROL INPUT 13-MAR-86 REV 0.7 / TFI FLOATING INPUT 03-FEB-85 REV 0.3 / TFR FLOATING INPUT TERM=RT 15-OCT-84 REV 0.0 / TRI READ INPUT 03-FEB-85 REV 0.2 / TTI TEXT INPUT 23-JUL-84 REV 0.2 / TIDC CHANGE INPUT DEVICE CODE 03-FEB-85 REV 0.1 / / / TDO DECIMAL INTEGER OUTPUT 19-OCT-84 REV 3.0 / TOO OCTAL INTEGER OUTPUT 19-0CT-84 REV 0.2 / THO HEXADECIMAL INTEGER OUTPUT 19-OCT-84 REV 0.0 / TCO CHARACTER OUTPUT 18-OCT-84 REV 0.2 / TCR CARRIAGE RETURN 10-APR-84 REV 0.0 / TNL NEW LINE 10-APR-84 REV 0.0 / TSO STRING OUTPUT 10-APR-84 REV 0.0 / TFO FLOATING OUTPUT 03-FEB-85 REV 0.2 / TTO TEXT OUTPUT 13-JAN-86 REV 2.6 / TODC CHANGE OUTPUT DEVICE CODE 18-OCT-84 REV 0.0 / / / TLC LOAD CURSOR 03-FEB-85 REV 0.5 / TCS CLEAR SCREEN 11-APR-84 REV 0.1 / TEL ERASE LINE 17-MAR-86 REV 0.2 / / /************************************************************* / / ASSEMBLER FLAGS / VT100=1 / TERMINAL: VT100 OR ADM3A / TFIELD=0 / CURRENT FIELD / / FPP27B=1 / FLOATING POINT PACKAGE LOADED / / EXTMAC=1 / MACRO-LIST SUPPLIED BY USER PROGRAMM / /************************************************************* / / START LOCATIONS / FIELD 0 / IFDEF FPP27B < IFNDEF EXTMAC < *2200 / START WITH 27BFPP.BN > IFDEF EXTMAC < *2400 / DTO. EXT MACRO LIST > > / / IFNDEF FPP27B < IFNDEF EXTMAC < *5200 / START WITHOUT 27BFPP.BN > IFDEF EXTMAC < *5400 / DT0. EXT MACRO LIST > > / /************************************************************* / / FPP - INSTRUCTIONS / FIXMRI TFGET=5000 FIXMRI TFPUT=6000 TFEXT=0 TFIN=11 TFOUT=12 / THIS MACRO LIST MAY BE SUPPLIED BY USER PROGRAMM IFNDEF EXTMAC < / TTO TEXT OUTPUT MACRO LIST, 3 WORDS PER MACRO / COMMON MACRO TO DEFINE PARAMETER TTOMAC, "C-270^2+"O-270^2+"M-270^2+"M-270^2+"O-270^2+"N TTOMCO TTOMCO, 0 / ALSO DUMMY TEXT BUFFER / *** USER MACRO POINTER ARE STORED HERE *** / *** END OF USER MACROS *** TTOMER, 0 / GETS CALCULATED NUMBER AND TTOMEM / TERMINATES SEARCH WITH ERROR 0 / MASSAGE TTOMEM, TEXT /&04$%^%$TXIO MACRO UNDEF.$JM$&00/;0 PAGE > / TTO TEXT OUTPUT / / TYPE TEXT FROM 6-BIT ASCII BUFFER CREATED WITH / PAL8 TEXT PSEUDO-OP. / / ENTRY: AC = POINTER TO TEXT-BUFFER / EXIT: AC = 0 / / / ! OPTION / THIS OPTION IS USED TO TYPE CHARACTERS WITH SPECIAL / FUNCTION. / EXAMPLE: TEXT /1.25!$/ --> 1.25$ / / $ - OPTION: / CHARACTERS BETWEEN TWO $-CHARACTERS ARE CONVERTED / TO CONTROL CHARACTERS. / EXAMPLE: TEXT /$MJ$/ --> CR/LF / / % - OPTION / CHARACTERS BETWEEN TWO %-CHARACTERS ARE CONVERTED / TO LOWER CASE CHARACTER. MAY BE COMBINED WITH / OTHER OPTIONS / / # - OPTION: / MULTIPLE OUTPUT OF SAME CHARACTER. THE FIRST CHARACTER / AFTER # IS TREATED AS NUMBER ( LOWER 6 BITS, ANY CHARACTER ) / AND THE SECOND CHARACTER IS PRINTED UP TO 63 TIMES. / EXAMPLE: TEXT /AB#DC/ --> ABCCCC / / & - OPTION / THIS OPTION CHANGES THE OUTPUT DEVICE CODE. / IF THE TWO NUMBERS FOLLOWING ARE ZERO, THE PREVIOUES / OUTPUT DEVICE IS RESTORED. / EXAMPLE: TEXT /&04/ CONSOLE OUTPUT / / " OPTION / THIS OPTION IS USED TO CALL A MACRO ( A NORMAL TEXT STRING ) / WITHIN A TEXT STRING. THE NAME MAY BE UP TO 6 CHARACTERS / AND MUST BE TERMINATED BY A ] OR BY A { IF PARAMETERS / ( TEXT STRINGS ) ARE PART OF THE MACRO CALL. / / ' OPTION / THE PARAMETERS DEFINED BY A MACRO CALL ARE TYPED BY / THIS OPTION. THE PARAMETERS ARE NAMED FROM 1-8. / / EXAMPLE: TEXT /GIVE "WHO[10] MORE/ / ======== / / ENTRIES IN MACRO LIST: / TTOMAC, . / . / "W-260^2+"H-260^2+"O / WHO / MACRO NAME / 0 / FIELD / . / / MACRO IN FIELD 0 : / WHO, TEXT /ME '1 HOURS/ / / ---->> GIVE ME 10 HOURS MORE / / / 06-APR-84 REV 0.0 KJ.S. / 09-APR-84 REV 0.1 KJ.S. LOCATIONS RENAMED / 11-APR-84 REV 0.2 KJ.S. OUTPUT CODE CHANGED / 09-FEB-85 REV 0.3 KJ.S. #-OPTION ADDED / 13-FEB-85 REV 0.4 KJ.S. %-OPTION ADDED / 04-MAR-85 REV 0.5 KJ.S. &-OPTION / 11-APR-85 REV 1.0 KJ.S. SOME CHANGES FOR GRV.PA / 04-JUN-85 REV 2.0 KJ.S. MACRO WITH PARAMETER CALL / 05-JUN-85 REV 2.1 KJ.S. & END OPTION DELETED / 06-JUN-85 REV 2.2 KJ.S. & OPTION CHANGE OUTPUT DEVICE / 11-JUN-85 REV 2.3 KJ.S. BUG IN FIELD HANDLING / 12-JUN-85 REV 2.4 KJ.S. MACRO TERMINATOR CHANGED / 18-JUN-85 REV 2.5 KJ.S. MACRO NAME CODE CHANGED / 13-JAN-86 REV 2.6 KJ.S. EXPLANATION UPDATED / TTO, 0 DCA TTOPNT / SAVE BUFFER POINTER DCA TTOBFL / START WITH FIRST BYTE TAD (TTOPPB+2 / SET POINTER TO TABLE OF DCA TTOPPB / TEXT POINTERS FOR MACRO CALLS TTOA, JMS TTOB / PROCEED SZA CLA / AC = 0 ? JMP TTOAM / NO: MACRO CALL CLA CMA / YES: END OF BUFFER TAD TTOPPB / DECREMENT POINTER DCA TTOPPB TAD I TTOPPB SNA / POINTER FROM LIST = 0 ? JMP I TTO / YES: WE ARE IN LEVEL 0, ALL DONE DCA TTOPNT / NO: REENTER LOWER LEVEL, SET TEXT POINTER CLA CMA TAD TTOPPB DCA TTOPPB TAD I TTOPPB / GET BYTE FLAG AND FIELD OF TEXT BUFFER AND (1 DCA TTOBFL TAD I TTOPPB AND (70 TAD (6201 DCA TTOFLD JMP TTOA / CONTINUE TTOAM, TAD TTOFLD / SAVE POINTERS IN TABLE AND (70 TAD TTOBFL DCA I TTOPPB / FIRST FLAGS ISZ TTOPPB TAD TTOPNT DCA I TTOPPB / THAN TEXT POINTER ISZ TTOPPB TAD TTOCPT / SET NEW PARAMETERS FOR TTOB DCA TTOPNT / CALCULATED FROM MACRO CALL TAD TTOCBF DCA TTOBFL TAD TTOCFD DCA TTOFLD JMP TTOA TTOPPB, TTOPPB+2 / LIST OF TEXT POINTERS 0 / MUST BE ZERO TO FLAG LEVEL 0 EXIT ZBLOCK 20 / 8 LEVELS, FIRST FIELD AND BYTE FLAG / FOLLOWED BY TEXT POINTER / OPTIONS / ======= / # OPTION: MULTIPLE CHARACTER OUTPUT TTOC3, CLA CMA / SET FLAG = -1 JMP TTOC3B TTOC3A, TAD TTOSV / CHARACTER IS NUMBER CMA / = -N-1 TTOC3B, DCA TTONFL JMP TTOB0 / $ OPTION: PRINT CONTROL CHARACTERS TTOC4, TAD TTOCFL / TOGGLE CONTROL FLAG SNA CLA TAD (-100 DCA TTOCFL JMP TTOB3 / % OPTION: LOWER CASE CHARACTERS TTOC5, TAD TTOLFL / TOGGLE LOWER CASE FLAG SNA CLA TAD (40 DCA TTOLFL JMP TTOB3 / & OPTION:CHANGE OUTPUT DEVICE CODE TTOC6, CLA CLL CMA RAL DCA TTODFL / SET DEVICE FLAG = -2 DCA TTODVN / CLEAR NEW INPUT JMP TTOB2 / GET TWO CHARACTERS FOR DEVICE TTOC6A, TAD TTOSV AND (7 TAD TTODVN RTL RAL DCA TTODVN / MAKE 0NN0 ISZ TTODFL / DONE ? JMP TTOB2 / NO: NEXT CHARACTER TAD TTODVN / YES: SZA CLA / NEW DEVICE ZERO ? JMP TTOC6B / NO: TAD TTODVO / YES: RESTORE OLD DEVICE JMP TTOC6C TTOC6B, TAD TTODEV DCA TTODVO / SAVE CURRENT DEVICE TAD TTODVN TTOC6C, DCA TTODEV / IS CURRENT DEVICE TAD TTODEV JMS TODC / CHANGE OUTPUT CODE JMP TTOB2 / CONTINUE TTODEV, 40 / CONSOLE IS DEFAULT TTODVO, 40 TTODVN, 0 PAGE / ! OPTION: PRINT CONTROL CHARACTERS TTOC1, CLA IAC DCA TTOAFL / SET FLAG JMP TTOB3 / SUBROUTINE TO TYPE DATA FROM TEXT BUFFER TTOB, 0 TTOB0, CLA CLL TAD TTOBFL RAR / BYTE FLAG TO LINK TTOFLD, CDF TFIELD TAD I TTOPNT / GET WORD FROM TEXT BUFFER CDF TFIELD SNL / LINK = FLAG = 0 ? BSW / YES: LEFT BYTE DCA TTOSV / SAVE CML SNL / LINK = FLAG = 1 ? ISZ TTOPNT / NO: INCREMENT POINTER RAL DCA TTOBFL / SAVE BYTE FLAG TAD TTOSV SNA / WORD ZERO ? JMP TTOBX / YES: END OF BUFFER AND (77 / MAKE 6 BIT BYTE SZA / = 0 ? JMP .+5 / NO: TAD TTOEFL / YES: CHECK END FLAG SNA CLA / END FLAG = 1 ? JMP TTOBX / NO: EXIT JMP TTOB0 / YES: IGNORE ZERO BYTE DCA TTOSV TAD TTOTFL / CHECK FOR SPECIAL TERMINATOR SNA CLA / FLAG SET ? JMP TTOB4 / NO: TAD TTOSV / YES: TAD (-33 SNA / CHAR = [ ? JMP TTOBX / YES: EXIT TAD (-2 SNA CLA / CHAR = ] ? JMP TTOBX / YES: EXIT TTOB4, ISZ TTONFL / NUMBER FLAG = -1 ? SKP / NO: JMP TTOC3A / YES: PARAMETER IS MULTIPLIER TAD TTOAFL SNA CLA / ALL CHARACTER FLAG = 1 ? JMP .+3 / NO: DCA TTOAFL / YES: CLEAR FLAG JMP TTOB1 / OUTPUT TAD TTOPFL SZA CLA / PARAMETER FLAG = 1 ? JMP TTOC7A / YES: CHARACTER IS PARAMETER NUMBER TAD TTODFL / CHECK DEVICE FLAG SZA CLA / ZERO ? JMP TTOC6A / NO: DEVICE CODE TAD TTOSV / SCAN FOR CONTROL CHARACTERS TAD (-50 SMA / CHAR.LT.50 ? JMP TTOB1 / NO: TAD (10 / YES: SPA SNA / CHAR.GE.41 ? JMP TTOB1 / NO: TAD (TTOCL / YES: AC = 1...7 DCA TTOCL / ADD TABLE START TAD I TTOCL / START ADRR. FROM TABLE DCA TTOCL JMP I TTOCL TTOCL, 0 TTOC1 / ! TTOC2 / " TTOC3 / # TTOC4 / $ TTOC5 / % TTOC6 / & TTOC7 / ' TTOB1, CLA TAD TTOSV TAD (-40 SPA / MAKE 8 BIT ASCII TAD (100 / 01-37 TO 301-337 TAD (240 / 40-77 TO 240-277 TAD TTOCFL / SET CONTROL BIT TAD TTOLFL / SET LOWER CASE BIT DCA TTOSV TAD TTOSV JMS I TTOOUT / OUTPUT ISZ TTONFL / MULTIPLE CHARACTERS ? JMP .-3 / YES: TTOB2, CLA CLL CMA RAL / NO: DONE DCA TTONFL / RESET NUMBER FLAG JMP TTOB0 / AND CONTINUE TTOB3, CLA CMA / PRESERVE NUMBER FLAG TAD TTONFL DCA TTONFL JMP TTOB0 TTOBEX, CLA CLL CMA RAL / MACRO CALL EXIT DCA TTONFL / RESET NUMBER FLAG IAC / EXIT WITH AC.NE.0 JMP I TTOB TTOBX, CLA DCA TTOTFL / CLEAR TERMINATOR FLAG JMP I TTOB / EXIT TTOOUT, TCO / POINTER TO OUTPUT ROUTINE TTOSV, 0 / TEMP STORAGE FOR CHARACTER TTOPNT, 0 / POINTER TO TEXT BUFFER TTOBFL, 0 / BYTE FLAG: 0 LEFT, 1 RIGHT BYTE TTOAFL, 0 / IF SET, CHAR. IS PRINT CHARACTER TTOCFL, 0 / IF SET, MAKE CONTROL CHARACTER TTOLFL, 0 / IF SET, MAKE LOWER CASE CHARACTER TTOPFL, 0 / IF SET, CHAR. IS PARAMETER NUMBER TTODFL, 0 / IF NONZERO, CHARACTER IS DEVICE CODE TTOTFL, 0 / IF SET, BUFFER IS ALSO TERM. BY , AND ; / NUMBER FLAG, ASSAMBLED TO -2 / IF -1, CHAR. IS MULTIPLIER TTONFL, TEXT /?>/ / NORMAL -2, IF -1 CHAR. IS MULTIPLIER TTOEFL=TTONFL+1 / END FLAG: / NORMAL ZERO, TERMINATOR IS ZERO BYTE / OR WORD. WITH PAL8 /F-OPTION, FLAG IS / NONZERO AND BUFFER MUST BE TERMINATED / / WITH ZERO WORD TEXT /A/ PAGE / " OPTION: MACRO CALL WITH PARAMETER TTOC2, TAD TTOOUT / CHANGE OUTPUT ROUTINE DCA TTOMOS TAD (TTOM DCA TTOOUT CLA CMA DCA TTOMFE / FLAG FIRST ENTRY JMP TTOB2 TTOM, 0 / PROCEED MACRO CALL DCA TTOMSV / SAVE CHAR. ISZ TTOMFE / FIRST ENTRY ? TTOM1, HLT / NO: GETS A JMP DCA TTOMPT TAD (JMP TTOM2 DCA TTOM1 / SET JMP TTOM2, TAD TTOMSV TAD (-333 SNA / CHAR = [ ? JMP TTOM4 / YES: TAD (-2 SNA / CHAR = ] ? JMP TTOM3 / YES: END OF MACRO CALL CLA CLL TAD TTOMPT / CALCULATE SUM = 2*SUM+(CHAR-270) SZA TAD (-270 CLL RAL TAD TTOMSV DCA TTOMPT JMP I TTOM TTOM3, ISZ TTOMEF / MACRO DEFINED, NO PARAMETER TTOM4, CLA / MACRO WITH PARAMETER TAD TTOMPT DCA TTOMER / STORE IN LIST FOR TERMINATION TAD (TTOMAC / GET START OF MACRO LIST DCA TTOMSV / USED AS POINTER TAD TTOMPT CIA DCA TTOMPT TTOM5, TAD I TTOMSV / GET MACRO NAME FROM LIST TAD TTOMPT / ADD MINUS SUM SNA CLA / MATCH FOUND ? JMP TTOM6 / YES: CLA CLL CML IAC RAL / NO: INCREMENT POINTER BY 3 TAD TTOMSV DCA TTOMSV JMP TTOM5 TTOM6, ISZ TTOMSV / MACRO FOUND TAD I TTOMSV DCA TTOCPT / GET POINTER ISZ TTOMSV TAD I TTOMSV AND (70 TAD (6201 DCA TTOCFD / GET FIELD DCA TTOCBF / BYTE FLAG ZERO TAD TTOMEF SZA CLA / PARAMETER DEFINED ? JMP TTOMX / NO: EXIT TAD (JMP TTOM7 / YES: READ PARAMETER DCA TTOM1 / SET NEW ENTRY TAD (TTOPLS DCA TTOMPT / PARAMETER LIST POINTER JMP TTOM10 / SAVE FIRST PARAMETER TTOM7, TAD TTOMSV TAD (-333 SNA / CHAR = [ ? JMP TTOM10 / YES: END OF PARAMETER TAD (-2 SNA CLA / CHAR = ] ? JMP TTOMX / YES: END OF MACRO CALL JMP I TTOM / CONTINUE TTOM10, TAD TTOFLD / SAVE PARAMETER POINTER AND (70 TAD TTOBFL DCA I TTOMPT ISZ TTOMPT TAD TTOPNT DCA I TTOMPT ISZ TTOMPT JMP I TTOM / CONTINUE TTOMX, TAD TTOMOS / RESET OUTPUT ROUTINE DCA TTOOUT DCA TTOMEF / CLEAR END FLAG JMP TTOBEX / EXIT TTOMSV, 0 TTOMPT, 0 / POINTER AND CHARACTER SUM TTOMOS, 0 / SAVE OUTPUT POINTER TTOMFE, 0 / FIRST ENTRY FLAG TTOMEF, 0 / END FLAG, SET IF ; IS FOUND TTOPLS, 0 / PARAMETER LIST .+1 ZBLOCK 20 PAGE / ' OPTION: PARAMETER CALL TTOC7, CLA IAC / SET FLAG DCA TTOPFL JMP TTOB2 TTOC7A, CLA CMA / DECREMENT NUMBER TAD TTOSV / CALCULATE POINTER TO PARAMETER CLL RAL AND (17 TAD (TTOPLS DCA TTOC7P TAD I TTOC7P AND (1 DCA TTOCBF / BYTE FLAG TAD I TTOC7P AND (70 TAD (6201 DCA TTOCFD / FIELD ISZ TTOC7P TAD I TTOC7P DCA TTOCPT / POINTER DCA TTOPFL / CLEAR PARAMETER FLAG ISZ TTOTFL / SET TERMINATOR FLAG JMP TTOBEX / EXIT SUBR. TTOB TTOC7P, 0 / POINTER TTOCPT, 0 / PARAMETER MACRO POINTER TTOCBF, 0 / PARAMETER MACRO BYTE FLAG TTOCFD, 0 / PARAMETER MACRO FIELD / TCI.PA / / TTY CONTROL INPUT / / SCANS CHARACTERS FROM TABLE TO FIND MATCH WITH / INPUT CHARACTERS FROM TTY. IF A MATCH IS FOUND, / EXIT WITH POINTER TO SUBROUTINE IN AC. / MAY BE USED FOR COMMANDS WITH MORE THAN ONE / CHARACTER, IN THIS CASE ALL INPUT COMBINATIONS / MUST BE FOUND IN TABLE AND THE FOLLOWING POINTER / TO SUBROUTINE MUST BE ZERO TO PREVENT EXIT / BEFORE ALL NEEDED CHARACTERS ARE READ. THE LAST / ZERO LOCATION TERMINATES THE TABLE. / / EXAMPLE: COMMAND 'ABC' CALLS ROUTINE 'SUBR' / / TCITAB, "A / TABLE START / 0 / NO EXIT, CONTINUE / "A+"A+"B / PREV.CHAR. * 2 / 0 / "A+"A+"A+"A+"B+"B+"C / SUBR / COMMAND COMPLETE / 0 / TERMINATOR / / ENTRY: AC = POINTER TO TABLE / EXIT: AC = START OF SUBROUTINE FROM TABLE / / SUBRS: TRI,TCO / / 05-APR-84 REV 0.0 KJ.S. / 06-APR-84 REV 0.1 KJ.S. SUBROUTINE / 07-APR-84 REV 0.2 KJ.S. ECHO PRINT-CHAR. ONLY / 09-APR-84 REV 0.3 KJ.S. LOCATIONS RENAMED / 02-MAY-84 REV 0.4 KJ.S. CHAR. IN/OUT CHANGED / 13-FEB-85 REV 0.5 KJ.S. ERROR HANDLING CHANGED / 04-FEB-86 REV 0.6 KJ.S. ERASE INPUT LINE AFTER ERROR / 13-FEB-86 REV 0.7 KJ.S. ERASE CHARCTERS ONLY / TCI, 0 DCA TCITAB / SAVE TABLE-POINTER TCIA, DCA TCICS / CLEAR SUM OF CHARACTERS DCA TCICN / CLEAR INPUT COUNT TCIB, CLA CLL / NEW CHARACTER JMS TRI / GET NEXT CHARACTER DCA TCICI / SAVE CHAR CLA CLL TAD TCICS RAL / SUM *2 TAD TCICI / ADD CHAR DCA TCICS TAD TCICS CIA DCA TCICSM / COMPLEMENT OF SUM TAD TCITAB / GET POINTER DCA TCIPNT TCIC, TAD I TCIPNT / GET CHAR FROM TABLE SNA / ZERO ? JMP TCIER / YES: END OF TABLE, INPUT ERROR TAD TCICSM ISZ TCIPNT / POINTS TO SUBROUTINE SNA CLA / CHARACTER MATCH ? JMP TCID / YES: ISZ TCIPNT / NO: NEXT CHAR JMP TCIC TCID, TAD TCICI TAD (-240 SPA / CHAR.GE.240 ? JMP TCIE / NO: NO ECHO TAD (-100 SMA / CHAR.LT.340 ? JMP TCIE / NO: NO ECHO CLA / YES: ECHO CHAR TAD TCICI JMS TCO / ECHO ISZ TCICN / COUNT OUTPUT TCIE, CLA TAD I TCIPNT / GET SUBROUTINE START SNA / SUBROUTINE DEFINED ? JMP TCIB / NO: READ NEXT CHAR JMP I TCI / YES: EXIT TCIER, CLA / INPUT ERROR TAD (207 JMS TCO TAD TCICN / ERASE INPUT SNA / ANY OUTPUT ? JMP TCIA / NO: CIA / YES: ERASE DCA TCICN TAD (210 / BACKSPACE JMS TCO TAD (240 / SPACE JMS TCO TAD (210 / BACKSPACE JMS TCO ISZ TCICN / DONE JMP .-7 / NO: JMP TCIA / YES: NEW INPUT TCIPNT, 0 TCICI, 0 / INPUT CHARACTER TCICS, 0 / SUM OF CHARACTERS TCICSM, 0 / MINUS SUM OF CHARACTERS TCITAB, 0 / POINTER TO TABLE TCICN, 0 / INPUT COUNT / TFI.PA / / TTY FLOATING INPUT / / READS FLOATING NUMBER FROM TELETYPE / / ENTRY: AC = POINTER TO FLOATING INPUT NUMBER / EXIT: AC = INPUT TERMINATOR / / SUBR: 27BFPP.BN / / 09-APR-84 REV 0.0 KJ.S. / 10-APR-84 REV 0.1 KJ.S. / 02-MAY-84 REV 0.2 KJ.S. COSMETIC / 03-FEB-85 REV 0.3 KJ.S. FFP INSTRUCTIONS DEFINED / TFI, 0 DCA TFIPT / SAVE POINTER CLA CMA DCA 54 / LF AFTER RETURN JMS I 7 / ENTER 27BFPP TFIN TFPUT I TFIPT / STORE TFEXT CLA TAD 53 JMP I TFI TFIPT, 0 / TFR.PA / / TTY FLOATING INPUT TERMINATED WITH 'RETURN' / / READS FLOATING NUMBER FROM TELETYPE / / ENTRY: AC = POINTER TO FLOATING NUMBER / EXIT: ERROR, WRONG TERMINATOR / EXIT+1: AC=0 / / SUBR: TFI,27BFPP / / 15-OCT-84 REV 0.0 KJ.S. / TFR, 0 JMS TFI / GET NUMBER TAD (-215 SNA CLA / TERMINATOR RT=215 ? ISZ TFR / YES: NORMAL EXIT JMP I TFR / NO: ERROR EXIT PAGE / TRI.PA / / TTY READ INPUT / / READS CHARACTER FROM TTY / / ENTRY: AC = NO CARE / EXIT: AC = CHARACTER / / SUBRS: NONE / / 02-MAY-84 REV 0.0 KJ.S. / 18-OCT-84 REV 0.1 KJ.S. HARDWARE INDEPENDENT / 03-FEB-85 REV 0.2 KJ.S. BUG REMOVED / TRI, 0 CLA TIKSF, KSF JMP .-1 TIKRB, KRB AND (177 TAD (200 JMP I TRI / TIDC.PA / / CHANGE SERIAL INPUT DEVICE CODE / / ENTRY: AC = XNNX NN = DEV.CODE / EXIT: AC = 0 / / SUBR: LOCATINONS IN TRI ARE CHANGED / / 18-OCT-84 REV 0.0 KJ.S. / 03-FEB-85 REV 0.1 KJ.S. BUG REMOVED / TIDC, 0 AND (770 DCA TIDCSV TAD (6001 TAD TIDCSV DCA TIKSF TAD (6006 TAD TIDCSV DCA TIKRB JMP I TIDC TIDCSV, 0 / TTI.PA / / TELETYPE TEXT INPUT / / READS INPUT FROM TTY AND STORES 2 CHARACTERS/WORD / INTO TEXT BUFFER. ACCEPTS ONLY PRINTABLE CHARACTERS. / ALL OTHER INPUT AND CHARACTERS AFTER BUFFER-OVERFLOW / IS ECHED AS 'BELL'. THE INPUT TERMINATOR IS NOT / ECHOED. / / ENTRY: AC = TERMINATOR, 0 = CR / ARG1 POINTER TO TEXT BUFFER / ARG2 LENGTH OF TEXT BUFFER (WORDS) / EXIT: AC = 0 / / SUBR TRI,TCO / / 16-JUL-84 REV 0.0 KJ.S. / 22-JUL-84 REV 0.1 KJ.S. SOME BUGS REMOVED / 23-JUL-84 REV 0.2 KJ.S. BUG AFTER 'DEL' REM. / TTI, 0 SNA / AC = TERMINATOR TAD (215 / AC = 0 TERMINATOR = CR AND (377 CIA DCA TTITM / SAVE TAD I TTI / GET ARG1 = BUFFER POINTER DCA TTIBPT ISZ TTI CLA CLL TAD I TTI / GET ARG2 = BUFFER LENGTH RAL CIA IAC DCA TTIBLN / = - BUFFER LENGTH * 2 + 1 ISZ TTI DCA TTICNT / CLEAR CHARACTER COUNTER DCA TTIXF / CLEAR EXIT FLAG TTI1, JMS TRI / READ INPUT DCA TTICH TAD TTICH TAD TTITM SZA CLA / TERMINATOR ? JMP TTI2 / NO: ISZ TTIXF / YES: SET EXIT FLAG DCA TTICH / PUT 'ZERO' INTO BUFFER JMP TTI3 TTI2, TAD TTICH / CHECK INPUT TAD (-240 SPA / CHAR.GE.240 ? JMP TTI10 / NO: CONTROL CHAR TAD (-100 SMA CLA / CHAR.LT.340 ? JMP TTI10 / N0: CONTROL CHAR TAD TTICNT / CHECK FOR BUFFER OVERFLOW TAD TTIBLN SMA CLA / COUNTER.LT.BUFFER*2 ? JMP TTI10 / NO: BUFFER OVERFLOW TAD TTICH / ECHO JMS TCO TAD TTICH / MAKE 6-BIT-ASCII AND (77 DCA TTICH TTI3, CLA CLL TAD TTICNT / CALCULATE BUFFER POINTER RAR TAD TTIBPT DCA TTIPNT SZL / LINK=MSB OF TTICNT.EQ.0 ? JMP TTI4 / N0: 2. BYTE OF WORD TAD TTICH / YES: 1. BYTE BSW JMP TTI5 TTI4, TAD I TTIPNT / ADD 1.BYTE AND (7700 TAD TTICH TTI5, DCA I TTIPNT / STORE IN BUFFER ISZ TTICNT / INCREMENT COUNTER TAD TTIXF SNA CLA / EXIT ? JMP TTI1 / NO: GET NEXT CHARACTER JMP I TTI / YES: TTI10, CLA CLL / INPUT IS A CONTROL CHARACTER TAD TTICH TAD (-377 SNA CLA / CHAR.EQ.DEL ? JMP TTI12 / YES: TTI11, TAD (207 / NO: ILLEGAL INPUT JMS TCO / ECHO BELL JMP TTI1 / CONTINUE TTI12, TAD TTICNT SNA / BUFFER EMPTY ? JMP TTI11 / YES: TAD (-1 / NO: DECREMENT DCA TTICNT TAD (210 / BACKSPACE JMS TCO TAD (240 JMS TCO TAD (210 JMS TCO JMP TTI1 TTITM, 0 / MINUS INPUT TERMINATOR TTIBPT, 0 / BUFFER START POINTER TTIBLN, 0 / MINUS LENGTH OF BUFFER TTIPNT, 0 / CURRENT BUFFER POINTER TTICNT, 0 / CURRENT LENGTH COUNTER TTISWD, 0 / INPUT CONTROL FLAG TTICH, 0 / LAST INPUT CHAR TTIXF, 0 / EXIT FLAG PAGE / TDO.PA / / TYPES DECIMAL INTEGERS WITH DIFFERENT FORMATS / / ENTRY: AC = NUMBER TO BE TYPED / ARG1 BIT 0 IF SET, TYPE SIGNED OUTPUT / BIT 1 IF SET, FILL FORMAT WITH ZEROS / UNSIGNED OUTPUT ONLY, BIT 0 IGNORED / BIT 6-11 OUTPUT FIELD WIDTH. IF ZERO, / NO LEADING ZEROS OR SPACES / EXIT: AC = 0 / / SUBR: TIO,TCO / / / 19-OCT-84 REV 0.0 KJ.S. / TDO, 0 DCA TION0 / SAVE NUMBER TAD I TDO ISZ TDO DCA TIOFL / SAVE FLAG TAD TDOTST / POINTER TO HEXADECIMAL TABLE JMS TDOHO / PROCEED JMP I TDO TDOTST, .+1 / TABLE OF DECIMAL VALUES 140 / -4000 4060 / -2000 6030 / -1000 6340 / -800 7160 / -400 7470 / -200 7634 / -100 7660 / -80 7730 / -40 7754 / -20 7766 / -10 / TOO.PA / / TYPES OCTAL INTEGERS WITH DIFFERENT FORMATS / / ENTRY: AC = NUMBER TO BE TYPED / ARG1 BIT 0 IF SET, TYPE SIGNED OUTPUT / BIT 1 IF SET, FILL FORMAT WITH ZEROS / UNSIGNED OUTPUT ONLY, BIT 0 IGNORED / BIT 6-11 OUTPUT FIELD WIDTH. IF ZERO, / NO LEADING ZEROS OR SPACES / EXIT: AC = 0 / / SUBR: TIO,TCO / / / 18-OCT-84 REV 0.0 KJ.S. / 18-OCT-84 REV 0.1 KJ.S. SOME BUGS REMOVED / 19-OCT-84 REV 1.0 KJ.S. USING SUBR. TIO / TOO, 0 DCA TION0 / SAVE NUMBER TAD I TOO ISZ TOO DCA TIOFL / SAVE FLAG TAD TOOTST / POINTER TO OCTAL TABLE JMS TDOHO / PROCEED JMP I TOO TOOTST, .+1 / TABLE OF OCTAL VALUES 4000 6000 7000 0000 7400 7600 7700 0000 7740 7760 7770 / THO.PA / / TYPES HEXADECIMAL INTEGERS WITH DIFFERENT FORMATS / / ENTRY: AC = NUMBER TO BE TYPED / ARG1 BIT 0 IF SET, TYPE SIGNED OUTPUT / BIT 1 IF SET, FILL FORMAT WITH ZEROS / UNSIGNED OUTPUT ONLY, BIT 0 IGNORED / BIT 6-11 OUTPUT FIELD WIDTH. IF ZERO, / NO LEADING ZEROS OR SPACES / EXIT: AC = 0 / / SUBR: TIO,TCO / / / 19-OCT-84 REV 0.0 KJ.S. / THO, 0 DCA TION0 / SAVE NUMBER TAD I THO ISZ THO DCA TIOFL / SAVE FLAG TAD THOTST / POINTER TO DECIMAL TABLE JMS TDOHO / PROCEED JMP I THO THOTST, .+1 / TABLE OF HEXADECIMAL VALUES 0000 0000 0000 4000 6000 7000 7400 7600 7700 7740 7760 / TCR CARRIAGE RETURN / / MOVES CURSOR TO THE BEGINNING OF THE / PRESENT LINE / / ENTRY: AC = NO CARE / EXIT: AC = 0 / / 10-APR-84 REV 0.0 KJ.S. / TCR, 0 CLA TAD (215 JMS TCO / OUTPUT CLA JMP I TCR / TNL NEW LINE / / POSITIONS CURSOR TO BEGINNING / OF NEXT LINE / / ENTRY: AC = NO CARE / EXIT: AC = 0 / / 10-APR-84 REV 0.0 KJ.S. / TNL, 0 JMS TCR TAD (212 JMS TCO / LF JMP I TNL TIOF, 0 / SUBROUTINE TO CHECK OUTPUT AND (17 / FORMAT AND TYPE DCA TIOPT / STORE ISZ TIOCT / INCREMENT DIGIT COUNTER TAD TIOZF SZA CLA / ZERO FLAG = 0 ? JMP TIOF2 / NO: TYPE DIGIT TAD TIOPT / YES: SZA CLA / DIGIT = 0 ? JMP TIOF1 / NO: TAD TIOFL / YES: SNA CLA / FIELD WIDTH = 0 ? JMP I TIOF / YES: EXIT TAD TIOFL TAD TIOCT SPA CLA / FILL CHAR WITHIN FIELD ? JMP I TIOF / NO: EXIT TAD TIOFC / YES: TYPE FILL CHARACTER JMP TIOF4 TIOF1, TAD TIOFL SNA / FIELD WIDTH = 0 ? JMP TIOF2 / YES: NO FIXED FIELD WIDTH TAD TIOCT / NO: SPA CLA / DIGIT WITHIN FIELD ? JMP TIOER / NO: FIELD WIDTH TOO SMALL TIOF2, ISZ TIOZF / SET ZERO FLAG TAD TIOSG SNA CLA / SIGN NEEDED ? JMP TIOF3 / NO: DCA TIOSG / CLEAR SIGN FLAG TAD ("- / YES: TYPE IT JMS TCO TIOF3, TAD TIOPT / TYPE DIGIT TAD (-12 SMA / HEX - CHAR. ? TAD (7 / YES: MAKE A LETTER TAD (272 / NO: MAKE NUMBER TIOF4, JMS TCO JMP I TIOF / EXIT PAGE / SUBROUTINE FOR TDO,TOO,THO / TION0 AND TIOFL MUST BE SET TDOHO, 0 DCA TIOPT / AC = TABLE POINTER DCA TIOSG / CLEAR SIGN FLAG TAD (240 DCA TIOFC / FILL CHAR = SPACE TAD TIOFL AND (2000 SNA CLA / FILL CHAR = ZERO ? JMP TIOA / NO: TAD (260 / YES: DCA TIOFC JMP TIOB / NO SIGN OPTION TIOA, TAD TIOFL SMA CLA / SIGNED OUTPUT ? JMP TIOB / NO: TAD TION0 / YES: COMPLEMENT NEGATIV NUMBER SMA / NEGATIV NUMBER ? JMP TIOB / NO: CIA / YES: COMPLEMENT DCA TION0 ISZ TIOSG / SET SIGN FLAG TIOB, CLA TAD TIOFL AND (77 / GET FIELD WIDTH DCA TIOFL / CLEAR UNUSED BITS TAD TIOFL SNA / FIELD WIDTH ZERO ? JMP TIOD / YES: CIA / NO: COMPLEMENT TAD TIOSG / TAKE SIGN INTO ACCOUNT TAD (4 / MAX 4 DIGIT SMA / FILL CHARACTER NEEDED ? JMP TIOD / NO: DCA TIOCT / YES: -# OF SPACE TO FILL FORMAT TIOC, TAD TIOFC / TYPE JMS TCO ISZ TIOCT JMP TIOC TIOD, CLA TAD (-13 / # OF SUBTRACTIONS DCA TIOCT / TO COUNTER DCA TION1 TIOE, CLA CLL / SUCCESSIV SUBTRACTIONS OF TAD TION0 / DECIMAL VALUES FROM TABLE TAD I TIOPT / SUBTRACTION SZL / CARRY ? DCA TION0 / YES, NEW VALUE CLA TAD TION1 / RESULT IN LINK RAL DCA TION1 / SHIFTED INTO TION1 ISZ TIOPT / INCREMENT POINTER ISZ TIOCT / DONE ? JMP TIOE / NO, CONTINUE DCA TIOZF / CLEAR LEADING ZERO FLAG TAD TIOSG CIA TAD (-5 DCA TIOCT / SET DIGIT COUNTER, 4 DIGITS + SIGN TAD TION1 / 1. DIGIT BSW RTR JMS TIOF TAD TION1 / 2. DIGIT RTR RTR JMS TIOF TAD TION1 / 3. DIGIT JMS TIOF ISZ TIOZF / 4. DIGIT ALWAYS TYPED TAD TION0 JMS TIOF JMP I TDOHO TIOER, TAD TIOFL / ERROR, FILL FORMAT WITH **** CIA DCA TIOCT TAD ("* JMS TCO / TYPE CHARACTER ISZ TIOCT JMP .-4 CLA JMP I TDOHO / EXIT MAIN SUBROUTINE TION0, 0 / GETS LSD TION1, 0 / GETS 3 MSD TIOPT, 0 / POINTER TIOCT, 0 / COUNTER TIOFL, 0 / FLAGS TIOSG, 0 / SIGN FLAG TIOZF, 0 / ZERO SUPPRESS FLAG TIOFC, 0 / FILL CHARACTER / TSO STRING OUTPUT / / TYPES A STRING OF ASCII - CHARACTERS / BUFFER CONTAINS ONE CHARACTER PER / WORD AND MUST BE TERMINATED BY 0 / / ENTRY: AC = POINTER TO BUFFER / EXIT: AC = 0 / / 10-APR-84 REV 0.0 KJ.S. / TSO, 0 DCA TSOPT / BUFFER POINTER TSOA, TAD I TSOPT / GET CHARACTER SNA / CHARACTER.EQ.0 ? JMP I TSO / YES: EXIT JMS TCO / NO: PRINT ISZ TSOPT JMP TSOA JMP TSOA TSOPT, 0 / FPP ERROR OUTPUT / / ENTER THIS SUBROUTINE VIA 'JMS I 7' / IF NO FPP IS LOADED AND EXIT TO OS/8 / / SUBR: TTO / / 03-FEB-85 REV 0.0 KJ.S. / TFPPER, 0 CLA TAD (TFPPET JMS TTO JMP I (7600 TFPPET, TEXT /NO FPP !/;0 PAGE / TCO CHARACTER OUTPUT / / TYPES ONE ASCII-CHARACTER CALLING / CP-ROUTINE, RESPONS TO CTRL/S - CTRL/Q / / ENTRY: AC = CHARACTER / EXIT: AC = 0 LINK UNCHANGED / / 10-APR-84 REV 0.0 KJ.S. / 18-OCT-84 REV 0.1 KJ.S. HARDWARE INDEPENDENT / 18-OCT-84 REV 0.2 KJ.S. LINK PRESERVED / TCO, 0 DCA TCOSV / SAVE CHAR JMS TOKSF / CHECK XON/XOFF JMP TCO2 JMS TOKRB AND (177 TAD (7755 SZA CLA / CTRL/S ? JMP TCO2 / NO: TCO1, CLA / YES: WAITING FOR CTRL/Q JMS TOKSF JMP .-1 JMS TOKRB AND (177 TAD (7757 SZA CLA / CTRL/Q ? JMP TCO1 / NO: WAIT TCO2, TAD TCOSV / YES: TYPE CHARACTER JMS TOTLS JMS TOTSF JMP .-1 CLA JMP I TCO TCOSV, 0 / SUBROUTINES WITH I/O INSTRUCTIONS / DEVICE-CODE CAN BE SET BY TODC TOKSF, 0 KSF SKP ISZ TOKSF JMP I TOKSF TOKRB, 0 KRB JMP I TOKRB TOTSF, 0 TSF SKP ISZ TOTSF JMP I TOTSF TOTLS, 0 TLS JMP I TOTLS / TODC.PA / / CHANGE SERIAL OUTPUT DEVICE AND THE CORRESPONDING / INPUT DEVICE FOR XON/XOFF PROTOCOL / / ENTRY: AC = XNNX NN = OUTPUT, NN-1 = INPUT DEVICE / EXIT: AC = 0 / / 18-OCT-84 REV 0.0 KJ.S. / TODC, 0 AND (770 DCA TODCSV TAD (6001 TAD TODCSV DCA TOTSF+1 TAD (6006 TAD TODCSV DCA TOTLS+1 TAD (-10 / CHANGE INPUT TAD TODCSV DCA TODCSV TAD (6001 TAD TODCSV DCA TOKSF+1 TAD (6006 TAD TODCSV DCA TOKRB+1 JMP I TODC TODCSV, 0 / TFO FLOATING OUTPUT / / TYPES FLOATING NUMBER IN E- AND F-FORMAT / / ENTRY: AC = POINTER TO FLOATING NUMBER / ARG1: BIT 0 SET IF CR/LF AFTER OUTPUT / BIT 3-5 NUMBER OF DIGITS TO THE / RIGHT OF THE DECIMAL POINT / BIT 6-11 TOTAL FIELD WIDTH / BIT 3-11=0 E14.7 - FORMAT / / 09-APR-84 REV 0.0 KJ.S. / 19-OCT-84 REV 0.1 KJ.S. CR/LF OPTION ADDED / 03-FEB-85 REV 0.2 KJ.S. FPP CODE DEFINED / TFO, 0 DCA TFOPT / SAVE POINTER TAD I TFO AND (4000 DCA 55 / SET CR/LF - OPTION TAD I TFO ISZ TFO AND (377 DCA 56 / OUTPUT FORMAT TAD 56 SNA JMP TFOA / E-FORMAT AND (77 / F-FORMAT DCA 57 / SET FIELD WIDTH TAD 56 BSW AND (7 DCA 60 / # OF DIGITS TFOA, JMS I 7 TFGET I TFOPT TFOUT TFEXT CLA JMP I TFO TFOPT, 0 / POINTER TO FLOATING NUMBER / TEL ERASE LINE / / ERASE A LINE AND POSITIONS CURSOR / TO BEGINNING OF THIS LINE / / ENTRY: AC BIT 8-11 LINE NUMBER 0 - 27 / EXIT: AC = 0 NORMAL / AC.NE.0 ERROR: LINE NUMBER.GT.27 / / SUBR: TLC,TCO,TSO / 11-APR-84 REV 0.0 KJ.S. / 04-OCT-84 REV 0.1 KJ.S. VT100 CODE CHANGED / 17-MAR-86 REV 0.2 KJ.S. 70 SPACES, NO MARGIN BELL / TEL, 0 AND (37 DCA TELSV / SAVE LINE NUMBER TAD TELSV JMS TLC / LOAD CURSOR TO LINE SZA JMP I TEL / ERROR: LINE#.GT.27 IFNDEF VT100 < TAD (-106 DCA TELCNT TELA, TAD (240 / SEND 106Q SPACES JMS TCO ISZ TELCNT JMP TELA TAD TELSV / CURSOR TO START OF LINE JMS TLC JMP I TEL / NORMAL AND ERROR EXIT TELCNT, 0 / COUNT SPACES > IFDEF VT100 < TAD (TELVT JMS TSO / ESC [ 2 K JMP I TEL TELVT, 033 / ESC 133 / [ 062 / 2 113 / K 0 > TELSV, 0 / SAVE ARGUMENT PAGE / TLC LOAD CURSOR / / NONDESTRUCTIV MOVE OF CURSOR / / ENTRY: AC BIT 0-6 X 0-117 / BIT 7-11 Y 0-27 / EXIT: AC = 0 NORMAL / AC.NE.0 ERROR EXIT, COORDINATES OUT OF RANGE / / 09-APR-84 REV 0.0 KJ.S. / 10-APR-84 REV 0.1 KJ.S. VT100 COMPATIBLE / 11-APR-84 REV 0.2 KJ.S. BUG IN VT100-CODE REMOVED / 04-OCT-84 REV 0.3 KJ.S. ADM3A CODE CHANGED / 15-OCT-84 REV 0.4 KJ.S. HEADER BUG / 03-FEB-85 REV 0.5 KJ.S. UPDATE / TLC, 0 DCA TLCSV / SAVE ARGUMENT TAD TLCSV AND (37 / = Y-KOORDINATE FIRST TAD (-30 SMA / Y.GT.27 ? JMP TLCER / YES: ERROR TAD (330 / NO: OUTPUT IS 300 TO 327 DCA TLCY TAD TLCSV RTR RTR RAR AND (177 / = X-KOORDINATE TAD (-120 SMA / X.GT.117 ? JMP TLCER / YES: ERROR TAD (360 / NO: OUTPUT IS 240 TO 357 DCA TLCX IFNDEF VT100 < TAD (TLCADS JMS TSO / OUTPUT STRING FOR ADM3A JMP I TLC > IFDEF VT100 < TAD (TLCVTS JMS TSO / FIRST PART OF VT100 SEQUENCE TAD TLCY TAD (-277 JMS TDO / LINE ADDRESS IN DECIMAL DIGITS 0 / DIGITS ONLY TAD ("; JMS TCO TAD TLCX TAD (-237 JMS TDO 0 TAD ("H JMS TCO / DONE JMP I TLC TLCVTS, 0033 / ESC 0133 / [ 0 > TLCADS, 33 / ESC 75 / = TLCY, 0 TLCX, 0 0 TLCER, CLA IAC / ERROR, NO CURSOR MOVE JMP I TLC / EXIT WITH AC.GT.0 TLCSV, 0 / SAVE ARGUMENT / TCS CLEAR SCREEN / / CLEARS SCREEN AND POSITIONS CURSOR / TO UPPER LEFT CORNER / / ENTRY: AC = NO CARE / EXIT: AC = 0 / / 10-APR-84 REV 0.0 KJ.S. / TCS, 0 CLA IFNDEF VT100 < TAD (32 JMS TCO / SEND CTRL/Z TO ADM3A JMP I TCS / CURSOR IS HOME > IFDEF VT100 < TAD (TCSVT JMS TSO / = ESC [ 2 J JMS TLC / AC = 0 HOME JMP I TCS TCSVT, 0033 / ESC 0133 / [ 0062 / 2 0112 / J 0 > / *7 / TFPPER / ERROR PRINTOUT IF NO FPP LOADED / 27BFPP.BN OVERLAY IFDEF FPP27B < *6146 SKP TCO JMS I .-1 >