ASMB,L,C,R,N ***RTE 2640\2644\2645 LOGICAL DRIVER** * NAME: LDVR5 16 PORT VERSION * SOURCE: HP 2644 \2645 RTE LDVR5 91731-18002 * RELOC.: HP 2644A\2645 RTE LDVR5 91731-16003 WITH CTU * RELOC.: HP 264X RTE LDVR5 91731-16002 WITHOUT CTU * * PRMR: B.B. (LOGICAL-LDVR5-MOD B.R.) * * REVISIONS (RXX) BY G.D. * LAST REV: (R06) 4/3/79 SET DVR TYPE TO 05 ON CALL * (R05) 10/19/78 * (R04) 10/3/78 * (R03) 9/18/78 * (R02) 9/11/78 * (R01) 9/7/78 * * ***************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. ALL RIGHTS * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * REPRODUCED OR TRANSALATED TO ANOTHER PROGRAM LANGUAGE WITHOUT * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ***************************************************************** * ****LDVR5 WILL WORK WITH 2640B\2645 * *********************************************** * FOR CTU AND OR PRINTER OPERATION INCLUDE * * "Z" PARAMETER IN ASSEMBLY CONTROL STATEMENT * * ASMB,R,Z * *********************************************** * * *********************************************** * FOR KEYBOARD\DISPLAY OPERATION ONLY * * INCLUDE "N" PARAMETER IN CONTROL STATEMENT * * ASMB,R,N * *********************************************** * *2.1 INPUT/OUTPUT INTERFACE * * LDVR5 WILL COMMUNICATE WITH THE 2644A/2640A VIA THE 12920 * ASYNCHRONOUS DATA COMMUNICATION INTERFACE. LDVR5 WILL ALSO * FUNCTION WITH A 2640A FOR THOSE APPLICATIONS WHERE THE CTU IS * NOT REQUIRED. COMMUNICATION FROM THE 2644A/2640A KEYBOARD MAY BE * IN EITHER CHARACTER OR BLOCK MODE. THE TERMINAL CAN BE USED WITH * "LINE STRAPPING", OR "PAGE STRAPPING" AND HENCE A SINGLE LINE OR * THE ENTIRE DISPLAY MEMORY CAN BE TRANSMITTED AFTER BEING ENABLED. * * *2.2 MAJOR FUNCTIONS * * LDVR5 PROVIDES THE FOLLOWING MAJOR FUNCTIONS: * 1. I/O CONTROL OF CARTRIDGE TAPE UNIT (CTU),CRT,AND TERMINAL PRINTER. * 2. READ OR WRITE REQUEST TO CTU WITH BINARY OR ASCII DATA. * 3. READ OR WRITE REQUEST TO KEYBOARD AND DISPLAY. * 4. STATUS REQUEST TO CTU AND KEYBOARD. * 5. CONSOLE OR TERMINAL USE. * 6. WRITE REQUEST TO TERMINAL PRINTER (2644 2645 ONLY) * * *2.2.1 CTU CONTROL REQUEST * *ICNWD (CONTROL LEFT OR RIGHT CTU AS SELECTED BY LOGICAL UNIT NUMBER) * 01-WRITE END OF FILE * 02-BACKSPACE 1 RECORD * 03-FORWARD SPACE 1 RECORD * 14-BACKSPACE 1 FILE * 13-FORWARD SPACE 1 FILE * 4 -REWIND * 27-LOCATE FILE. THIS IS AN ABSOLUTE FILE NUMBER. * 26-WRITE END OF VALID DATA (EOV) * 10-WRITE EOF IF NOT JUST WRITTEN OR NOT AT BOT * 32-UPDATE INTERNAL TERMINAL STATUS * * *NOTES ON CTU CONTROL REQUEST * * A. A REWIND, BACKSPACE RECORD, OR BACKSPACE FILE WILL PERFORM * NO ACTION IF THE TAPE UNIT IS AT LOAD POINT. THIS CONDITION * WILL BE SET IN THE STATUS WORD (BIT 6 SET). * B. IF THE END-OF-TAPE MARK IS SENSED DURING A WRITE OPERATION, * AN END OF VALID DATA MARK WILL BE RECORDED AUTOMATICALLY. IF * A WRITE REQUEST WAS BEING PROCESSED, THE CURRENT RECORD WILL * BE RECORDED. IF A READ REQUEST WAS IN PROCESS THE CURRENT * RECORD WILL BE READ. THIS CONDITION WILL BE SET IN THE STATUS * WORD. * C. FOR FILE MOTION COMMANDS THE TAPE IS POSITIONED AFTER THE * FILE MARK. * D. READ REQUESTS WILL BE REJECTED IF THE TAPE IS AT EOV. THE * EOV MAY BE OVERWRITTEN WITH DATA OR A FILE MARK UNLESS THE * TAPE IS AT END-OF-TAPE. * E. AN INVALID FUNCTION CODE WILL CAUSE THE DRIVER TO EXIT WITH * THE FUNCTION IGNORED. IF THE FUNCTION CODE IS VALID, EXIT IS * NORMAL. * F. DYNAMIC STATUS PUTS THE STATUS OF THE LAST LEFT OR RIGHT * CTU OPERATION IN PRAM1. * * *2.2.2 CRT CONTROL REQUEST * *ICNWD * 11-SPACE "IPRM" LINES -IPRM PG. EJECT 9871 ONLY * 22-SET NEW TIME OUT (IN OPTIONAL PARAMETER) * 24-RESTORE OUTPUT PROCESSING. REQUIRED ONLY IF SOME OF BUFFER IS * TO BE SAVED. * -ANY CONTROL REQUEST, VALID OR INVALID, WILL RESULT IN ENABLING * INTERRUPT ON A TERMINAL IF THE TERMINAL HAS BEEN ENABLED. * * *2.2.3 CTU READ/WRITE REQUEST * * -READ/WRITE FROM LEFT OR RIGHT CTU AS SELECTED BY LOGICAL UNIT * NUMBER. * -IF THE OPERATION FAILED, RETURN WILL BE THROUGH DVS00 WITH BIT * 5 OF EQT 19=0 *ICNWD * * 6 -0/1 IS ASCII/BINARY * 7 -1 AND 6 -0 READ A COMPLETE FILE(ASCII)-ILLEGAL FOR BLK&PG * 10-0/1 IS NOT HONEST/HONEST * * -BINARY INPUT IS A STRING OF CHARACTERS SPECIFIED BY THE BUFFER * LENGTH PARAMETER IN THE REQUEST. IF THE REQUIRED LENGTH IS FILLED * BEFORE A END-OF-RECORD (EOR) IS ENCOUNTERED, THE REMAINING DATA * IS IGNORED AND THE CTU WILL STOP AT THE NEXT EOR. IF A EOR IS * ENCOUNTERED BEFORE THE REQUIRED LENGTH IS FILLED THE CTU WILL * HALT IN THE EOR. * IF BUFFER LENGTH=0, THEN SKIP * ONE RECORD. * -BINARY OUTPUT IS A STRING OF CHARACTERS SPECIFIED BY THE BUFFER * LENGTH PARAMETER IN THE REQUEST. MAXIMUM RECORD LENGTH IS 128 * WORDS. THIS LIMIT IS SET BY THE CTU DATA BUFFER. * -ASCII INPUT IS A STRING OF CHARACTERS TERMINATED BY A CARRIAGE * RETURN (CR). IF THE REQUIRED LENGTH IS FULFILLED BEFORE A CR * IS INPUT, THE REMAINING CHARACTERS ARE IGNORED. IN ANY CASE, A * CR CODE MUST BE INPUT. * -ASCII FILE READ (200B+LU), ALL CHARACTERS ARE READ UNTIL * AN EOF IS ENCOUNTERED,IE. AN 'RS' CHAR. * -ASCII OUTPUT IS A STRING OF CHARACTERS SET BY THE BUFFER LENGTH. * MAXIMUM RECORD LENGTH IS 127 WORDS (CR IS SENT BY LDVR5 ). THE * DRIVER WILL TERMINATE THE REQUEST IF IT SEES A "CR", "LF" OR "RS". * THE DRIVER USES THE "CR" AS A RECORD TERMINATOR ON INPUT * AND THE 2644A USES THE "LF" AS RECORD TERMINATOR ON OUTPUT.A "RS" * IS PASSED TO THE DRIVER WHEN THE CTU ENCOUNTERS A FILE GAP. * * *2.2.4 ASCII OUT TO DISPLAY * * -ASCII OUTPUT IS A STRING OF CHARACTERS, THE NUMBER OF WHICH IS * DESIGNATED BY THE BUFFER LENGTH. THE STRING IS TERMINATED BY A * CARRIAGE RETURN AND LINE FEED (BOTH SUPPLIED BY DRIVER). * -IF AN UNDERSCORE (ASCII 137) IS THE LAST CHARACTER IN THE NEW * BUFFER, THE CARRIAGE RETURN, LINE FEED AND UNDERSCORE CODES ARE * NOT OUTPUT TO THE CRT. * -BUFFER LENGTH SHOULD BE LIMITED TO 80 DISPLAYABLE CHARACTERS. * -THE CURSOR WILL REMAIN IN COLUMN 80 IF CURSOR END-OF-LINE WRAP * AROUND STRAP IS NOT IN. OTHERWISE AN AUTOMATIC CR LF ARE GENERATED. * -HONEST MODE WRITE THE CR AND LF ARE NOT OUTPUT. AN UNDERSCORE * WILL ALWAYS BE OUTPUT TO DISPLAY IF IN BUFFER. * -DURING OUTPUT TO DISPLAY STRIKING ANY KEY WILL FREEZE OUTPUT. TO * RESUME STRIKE ANY KEY. TO GET SYSTEM ATTENTION HIT . * * -BINARY WILL STRIP "ESC", EXCEPT WHEN SUB=3 * *2.2.5 ASCII INPUT FROM KEYBOARD CHARACTER MODE * * THE DRIVER DETECTS WHETHER A CHARACTER MODE OR BLOCK MODE REQUEST * WILL FOLLOW BY EXAMINING THE FIRST CHARACTER. IF IT IS A DC2 * THEN THE DRIVER ASSUMES THE ENTER KEY HAS BEEN PRESSED AND A * BLOCK TRANSMISSION IS PENDING. THE DRIVER RESPONDS WITH A DC1 TO * TRIGGER THE BLOCK TRANSFERS. IF THE FIRST CHARACTER IS NOT A DC1 * THEN THE DRIVER ASSUMES A CHARACTER TRANSFER IS PENDING. * IN CHARACTER MODE THE TERMINAL TRANSMITS A CHARACTER AT A TIME AS * THE KEY IS DEPRESSED. THE RECORD TERMINATION IS A CR OR RS. THE * DRIVER ECHOS A LF. * A RECORD TERMINATOR MUST BE ENTERED TO COMPLETE REQUEST, EVEN IF THE * USERS BUFFER IS FULL. TRANSMISSION LOG IS RETURNED IN EQT 6 * THERE ARE TWO TYPES OF CHARACTER MODE PROCESSING: HONEST AND NON-HONEST * A. HONEST * ALL CHARACTERS EXCEPT CR AND RS SENT TO USERS BUFFER. * B. NON-HONEST * THE DRIVER WILL PROCESS THE BELOW SPECIAL CHARACTERS: * *DEL (RUBOUT) ASCII 177 * ENTERING DEL WILL DELETE THE CURRENT RECORD AND CAUSE (\, * CRLF)TO BE OUTPUT. THIS IS USED TO DELETE THE CURRENT LINE * AND START A NEW LINE. * *BACKSPACE ASCII 10 * ENTERING BACKSPACE WILL DELETE THE LAST CHARACTER. THE * TERMINAL WILL LOCALLY MOVE THE CURSOR BACK ONE POSITION. * *LINEFEED ASCII 12 * THIS WILL NOT BE SENT TO USER'S BUFFER. * * CNTROL D ASCII 40 * ENTERING CONTROL D WILL CAUSE BIT 5 TO BE SET IN TERMINAL * STATUS WORD AND TRANSMISSION TERMINATED WITH LOG. = 0. THIS * BIT WILL BE CLEARED UPON NEXT ENTRY. * * *2.2.6 ASCII INPUT FROM KEYBOARD BLOCK MODE * * IN BLOCK MODE THE TERMINAL TRANSMITS EITHER A LINE AT A TIME (LINE * STRAPPING) ON A PAGE (PAGE STRAPPING). THE DRIVER DETERMINES TYPE * OF STRAPPING BY A TERMINAL STATUS REQUEST. * A. LINE STRAPPING * THE TERMINATOR IS A CR WHICH IS NOT PASSED TO USER'S * BUFFER. IMBEDDED RS'S ARE NOT PASSED. * B. PAGE STRAPPING * THE TERMINATOR IS A RS WHICH IS NOT PASSED TO USER'S BUFFER. THE * LINE SEPARATORS CR, LF ARE PASSED TO USER'S BUFFER. * C. A "RS" IS NEVER PASSED TO BUFFER * D. BLOCK READS ARE OF 2 TYPES: * 1. TERMINAL ENABLED (ENTER PRESSED) * 2. USER ENABLED ("ESC" SMALL "D" SENT) * * *2.2.7 CTU DYNAMIC STATUS REQUEST (RETURNED IN IBUF) * FOR: CALL EXEC(1,3700B+LU,IBUF,1) , IBUF(1) WILL CONTAIN; * * BIT * 7 -END OF FILE SENSED. A FILE MARK HAS BEEN DETECTED DURING A PRIOR * READ OPERATION OR A FILE MARK HAS JUST BEEN RECORDED. * 6 -LOAD POINT SENSED. CARTRIDGE TAPE IS AT OR BEFORE LOAD * POINT MARKER. MEANINFUL ONLY IF CARTRIDGE IS INSERTED. * 5 -END OF TAPE SENSED. THE CARTRIDGE TAPE HAS PASED OVER EARLY * WARNING MARKER IN THE TAPE AND AN END-OF-VALID DATA MARK HAS BEEN * RECORDED AUTOMATICALLY. COMMANDS DIRECTING FORWARD MOTION OF TAPE * WILL BE REJECTED. THIS STATUS ONLY HAS MEANING IF A CARTRIDGE IS * INSERTED. * 4 -READ\WRITE ERROR.WRITE 2645 ONLY * A READ ERROR EXISTS IF THREE SUCCESSIVE ATTEMPTS FAILED TO READ * THE DATA IN THE RECORD. THE TAPE IS POSITIONED AFTER THE BAD * RECORD. * 3 -LAST COMMAND ABORTED. THE LAST COMMAND INITIATED FROM THE CPU OR * KEYBOARD WAS UNSUCCESSFULLY PERFORMED. OTHER STATUS CONDITIONS * MAY BE CHECKED FOR CAUSE. * 2 -WRITE PROTECTED. THE FILE PROTECT TAB ON THE CARTRIDGE IS IN THE * POSITION TO PROHIBIT RECORDING OF DATA. THIS STATUS ONLY HAS * MEANING IF A CARTRIDGE IS INSERTED AND A RECORDING OPERATION HAS * BEEN ATTEMPTED. * 1 -END OF VALID DATA. THE CARTRIDGE TAPE DETECTED AN END-OF-VALID * DATA MARK DURING A PRIOR READ OR SEARCH OPERATION OR HAS JUST * COMPLETED RECORDING AN END-OF VALID DATA MARK. IN EITHER CASE, * THE TAPE IS POSITIONED BEFORE THE END-OF VALID DATA MARK. RECORDING * OPERATIONS MAY BE EXECUTED TO OVERWRITE THIS MARK WITH DATA * OR A FILE MARK, UNLESS THE TAPE IS AT END OF TAPE. * 0 -CARTRIDGE NOT INSERTED OR UNIT BUSY. * * *2.2.8 CRT STATUS REQUEST (RETURNED IN IEQT5) * FOR: CALL EXEC(13,LU,IEQT5) * * BIT * 7 -BUFFER FLUSH IN PROGRESS * 6 -BREAK KEY HIT * 5 -CONTROL D ENTERED * 4 -TIME OUT * 3 -SPEED SENSE IN PROGRESS * 2 -BAD COMMUNICATION LINE * 1 -PAUSE MODE * 0 -TERMINAL ENABLED(1) DISABLED(0) * * *2.2.9 CONSOLE OR TERMINAL USAGE. * * IF AT GENERATAION THE 2644A IS IDENTIFIED AS A TERMINAL (VIA THE * INTERRUPT TABLE) THEN STRIKING A KEY WILL SCHEDULE THE PROGRAM * ASSOCIATED WITH THAT TERMINAL IF THE TERMINAL HAS BEEN ENABLED * VIA A CONTROL REQUEST. * IF THE 2644 IS A CONSOLE THEN STRIKING A KEY WILL GET THE SYSTEM'S * ATTENTION AND A "*" PROMPT WILL BE WRITTEN. * * LINE PROTOCOL: * * THIS DRIVER DOES NOT SUPPORT MAIN CHANNEL * PROTOCOL FOR LINE TURN-AROUND DURING * HALF DUPLEX MODEM USE. LDVR5 RELIES UPON THE * PHYSICAL DRIVER TO PERFORM LINE TURN-AROUNDS * USING REVERSE CHANNEL PROTOCOL. * * USE: * * LDVR5 IS A TYPE 30 PROGRAM. FOR RTE IV IT MUST * RESIDE IN THE SUB-SYSTEM GOBAL AREA, ALSO FOR RTEM-III. * * ******CAUTION***** * * IF LDVR5 IS USED AS A SUBROUTINE TO A USER PROGRAM * THE USER PROGRAM SHOULD LOCK IT SELF INTO CORE * DURING ALL I-O, AND THE DEFAULT TTY DRIVER * MUST BE RE-ATTACHED (SEE BELOW) BEFORE THE * THE USER PROGRAM COMPLETES. * * INITIALIZATION: * * TO ATTACH LDVR5 AS THE LOGICAL DRIVER DO THE FOLLOWING: * * FROM FORTRAN - CALL EXEC(3,2500B+LU,IPRAM) * * WHERE LU = LU NUMBER OF THE RESPECTIVE * DEVICE. * IPRAM = THE ADDRESS OF THE ENTRY * POINT "LINT" IN LDVR5. * * NOTE: THE ADDRESS OF "LINT" MAY BE * OBTAINED FROM THE GENERATOR * LISTING, OR A CALL TO LDVR5 * SEE BELOW FOR CALL FORMAT. * * FROM THE FILE MANAGER: * * :CN,LU,25B,IPRAM PRAMATERS SAME AS ABOVE. * * TO DETACH LDVR5 AND RE-ATTACH THE DEFAULT TTY DRIVER * DO THE FOLLOWING: * * FROM FORTRAN: CALL EXEC(3,2500B+LU,0) * FROM FMGR: :CN,LU,25B,0 * * ****************************************** * SUBROUTINEIS ENTERED TO * * OBTAIN THE ADDRESS OF THE ENTRY POINT * * OF "LINT" FOR ASSIGNING LDVR5 AS THE * * LOGICAL DRIVER * ****************************************** * CALL SEQUENCE: * * CALL LDVR5(IPRAM) * * WHERE IPRAM = PARAMETER TO RETURN ADDRESS OF "LINT" * FOR THE USER PROGRAM. * * IFN NAM LDVR5,30 91731-16002 REV.1926 790403 XIF * IFZ NAM LDVR5,30 91731-16003 REV.1926 790403 XIF ENT LDVR5,LINT EXT $LIBR,$LIBX LDVR5 NOP JSB $LIBR MAKE PRIVILEGED NOP LDB LDVR5 GET PARAMETERS 1805 LDA B,I GET RETURN ADDRESS 1805 STA LDVR5 SAVE IT FOR EXIT 1805 INB BUMP ADDRESS TO PARAMETER 1805 LDB B,I GET PARAMETER ADDRESS 1805 RBL,CLE,SLB,ERB CHECK FOR INDIRECT 1805 JMP *-2 1805 LDA L5ADR GET ADDRES OF "LINT" STA B,I GIVE ADDRESS TO USER PROG. 1805 JSB $LIBX RETURN DEF LDVR5 * * ***************************************** * * * ENTER HERE FROM PHYSICAL DRIVER * * * ***************************************** * DEC 1926 REVISION CODE. ALWAYS BEFORE LINT (= EQT17-1) * * * LINT NOP INITALIZATION CALLS JMP LINIT COME TO HERE * LRED NOP READ CALLS COME HERE JMP LREAD * LWRT NOP WRITE CALLS COME HERE JMP LWRTE * LINIT STA ASAVE SAVE CONTENTS OF A REG STB BSAVE SAVE B REG. LDA LINT SAVE RETURN STA RTN ADDRESS JSB SETIO CONFIGURE IO LDA EQT27,I FOR BINARY CTU READ AND CMB3 CLR SELECTED BITS STA EQT27,I BIT 0 (0\1=TERM.STAT. READ NO\YES) * JMP I.051 * * * ***************************************************** * "B.X" IS NEG. BINARY NO., "D.X" IS NEG. DECIMAL NO* * "BN" IS SOME BINARY NO. * * SEE BELOW. * ***************************************************** * L5ADR DEF LINT ASAVE NOP BSAVE NOP RTN NOP CMB3 OCT 177767 CMB5 OCT 177737 CMB12 OCT 167777 B11 OCT 11 DTMSK OCT 140377 (R06) B2400 OCT 2400 (R06) * * * I.051 LDA EQT5,I (R06) SET DRIVER TYPE TO 05 AND DTMSK (R06) IOR B2400 (R06) STA EQT5,I (R06) JSB CDINT ************************************************ * THOSE PORTIONS OF CODE WITHIN AND * * BOUNDRIES ARE DELETED IF OPTION IS NOT * * INCLUDED IS ASSEMBLY CONTROL STATEMENT * ************************************************ * * IFZ SWH1A NOP SWITCH CRT \CTU ,LP= RSS\NOP * JMP I.251 YES! A CTU OR LP REQUEST XIF LDA TEMP4 GET REQUEST RAR SSA,SLA CONT.? JMP I.05C YES SSA,RSS READ OR WRITE JMP I.05W WRITE JMP I.05R READ * ****************************************************************** * * * TIMOT EQU * CLA JMP RTN,I LOOKS LIKE A BAD RET. TIME OUT * * * BREAK NOP LDA EQT5,I SET THE BREAK IOR B100 BIT FOR THE PHYSICAL STA EQT5,I DRIVER LDB EQT13,I KNOCK OUT ADB B5 THE BREAK BIT - 12 - LDA B,I IN EQ21 AND CMB12 STA B,I RESTORE JMP BREAK,I RETURN FOR CHAR PROCESSING * ************************************************* * DOES CONTROL REQUEST PROCESSING FOR * * THE KEYBOARD\DISPLAY. * ************************************************* * *******TERMINAL STATUS****************************** * BIT STATUS * * 5 "CONTROL D" ENTERED * * 7 BUFFER FLUSH ENABLED * * * **************************************************** * * *******CRT CONTROL********************************** * EXEC CODE CRT CONTROL REQUEST * * 11 SPACE LINES * 22 SET TIME OUT * * * **************************************************** * I.05C LDA RDTYP GET CONTROL WORD TYPE LDB EQT7,I SSB,RSS CMB,INB COMPLEMENT OPTIONAL PARAMETER * CPA B11 JMP CN11 GO SPACE LINES CPA B22 JMP CN22 GO SET TIME OUT CPA B32 UPDATE STATUS? JMP CN32 YES * ********************REJECT REQUEST****************** * JMP REJ1 ILLEGAL CONTROL REQUEST * LF OCT 12 B37 OCT 37 B20 OCT 20 B21 OCT 21 B22 OCT 22 B2 OCT 2 B.3 OCT 177775 B100 OCT 100 B200 OCT 200 B17 OCT 17 B32 OCT 32 B70 OCT 70 * **SPACE LINES***** **MAX NO. IS 55** * CN11 SZB,RSS CHECK FOR 0 VALUE CCB CHANGE TO -1 STB EQT7,I ADB B70 MAX NO. OF (CR,LF'S) IS 55 SSB BECAUSE CARD BUFFER IS 128 JMP REJ1 JSB XMIT JSB EORP OUTPUT (CR,LF) JSB ENAK GIVE TERM. TIME TO PROCESS ISZ EQT7,I JMP *-4 CN11A CLA STA EQT29,I SET A REG. EXIT JMP EOOP4 * * * CN22 EQU * PRAM1 HAS THE TIME STB EQT14,I FOR STANDARD TIMEOUT JMP REJ1 RETURN CN32 JSB SPCH1 JSB TERST UPDATE TERMINAL STATUS JMP CN11A **********EQT6 FOR READ\WRITE***************** * * EQT6 FOR READ\WRITE OPERATIONS IS: * * BIT MEANING * * 6 0\1 IS ASCII\BINARY * * 7 -1 AND 6 -0 FILE(ASC) READ * 8 0\1 IS OFF\ON ECHO * * 10 0\1 OFF\ON HONEST MODE * * 9 AND 10 SET USER ENABLED BLOCK READ * * ********************************************** * * LWRTE STA ASAVE SAVE A STB BSAVE AND B LDA LWRT GET ENTRY ADDRESS STA RTN SAVE FOR RETURN JSB SETIO LDA ASAVE IS THE THE FIRST TIME? CPA B.1 JMP LWRT1 YES START WRITE JSB BITCK CHECK CONDITION BITS JMP TIMOT TIMEOUT BIT15 ON JMP TIMOT LINE ERROR BIT 14 ON JMP TIMOT DATA ERROR BIT 13 ON JSB BREAK BREAK BIT 12 ON LDA EQT5,I (R01) PAUSE MODE?? RAR,SLA (R01) JMP REJ3 (R03) YES, IGNORE INT. LDA EQT11,I NO, CONTINUE WITH WRITE SZA,RSS ARE WE TRYING TO COMPLETE? JMP REJ2 YES,IGNORE THE CHAR JMP A,I LWRT1 CLA STA EQT30,I INIT RECORD COUNT JMP I.051 * * * I.05W CLB,RSS SETUP EQT9(RUNNING CHAR. ADD.) AND I05W1 NOP EQT 10 (LAST CHAR. ADD.) LDA EQT7,I GET BUFFER STARTING ADDRESS RAL,CLE MULTIPLY S.A. BY TWO STA EQT9,I STORE AT EQT9 LDA EQT8,I GET BUFFER LENGTH CMA,SSA,INA,RSS COMPLEMENT,ARE THEY CHAR.? JMP I.W1 YES! CMA,INA MAKE POS AGAIN RAL MULTIPLY WORDS X 2 AND * I.W1 ADA EQT9,I STA EQT10,I STORE LAST CHAR. ADD. AT EQT10,I CMA,INA MAKE LAST CHAR. ADD. NEG. ADA EQT9,I - NO. OF CHAR. ARE NOW IN A REG. SZB JMP I05W1,I SZA,RSS IS IT 0 ? JMP I.W32 YES! IT IS ZERO * JSB TRAN1 GOTO OUTPUT SUBROUTINE * LDA TEMP2 IS THIS HONEST MODE? SZA JMP EOOP2 * I.W32 JSB XMIT JSB EORP THIS IS NOT HONEST JMP EOOP2 ABOVE NEEDED FOR INTERRUPT * * ********************************************** * WRITES TO THE DISPLAY,CTU AND PRINTER. * STARTING ADDRESS OF DATA IS EQT9,I * ************************************************** * * TRAN1 NOP LDA TRAN1 SAVE RETURN ADDRESS STA EQT29,I JSB XMIT SET CARD FOR XMIT * TRAN2 EQU * LDB EQT9,I GET BUFFER ADDRESS X 2 CLE,ERB DIVIDE BY TWO TO GET TRUE ADD. * JSB MAPRD GET WORD SEZ,RSS DO WE WANT UPPER OR LOWER CHAR.? ALF,ALF UPPER! SHIFT TO LOWER AND B377 LOWER! MASK WORD IFZ * SWH1B NOP CRT\CTU=RSS\NOP JMP TRAN3 YES! IGNORE BELOW CHECKS XIF * * LDB FILL DO NOT SEND "ESC" TO CRT ON SZB BINARY WRITE. JMP ON1 LDB TEM11 IS THIS UNIT 3? CPB B3 IF SO SKIP ESC CHECK JMP ON1 CPA ESC IS THIS AN ESCAPE? JMP OUT6B * ON1 CLB,INB SET B REG TO 1 ADB EQT9,I ADD 1 TO EQT9 CPB EQT10,I IS THIS THE LAST WORD? RSS JMP OUT6 NO! CONTINUE LDB TEMP2 IS THIS HONEST? SZB JMP OUT6 THIS IS HONEST,IGNORE UNDERSCORE CPA B137 IS THIS A "_" UNDERSCORE? JMP EOOP8 YES! GO TO END OF OUTPUT PROCESSING JMP OUT6 IFZ TRAN3 LDB FILL IS THIS BINARY? SZB,RSS JMP OUT6 THIS IS BINARY,OUTPUT CHARACTER CPA CR IS IT A ? RSS CPA LF IS IT A LINEFEED? RSS IT IS A CPA RS IS IT A JMP TRAN5 YES,TERMINATE ON OROR XIF * OUT6 JSB OUT1 OUTPUT CHAR. TO CARD.CHAR. OUT6B ISZ EQT9,I INCREMENT CHAR. COUNT LDB EQT9,I GET CURRENT CHAR. ADD.R CPB EQT10,I HAVE WE SENT LAST WORD? JMP TRAN5 THIS IS THE LAST CHARACTER JMP TRAN2 WE HAVE NOT SENT ALL CHAR * TRAN5 LDA EQT29,I GET RETURN ADDRESS JMP A,I RETURN * * *************************************************** * DOES KEYBOARD READ. IF FIRST CHARACTER * * A "DC2" THE DRIVER EXPECTS A BLOCK TRANSFER AND * * WILL SEND A DC1 TO TRIGGER IT. IF THE FIRST * * CHAR. IS NOT A "DC2" THE DRIVER ASSUMES A CHAR. * * TRANSFER. *************************************************** * * LREAD STA ASAVE SAVE A STB BSAVE AND B LDA LRED GET ENTRY ADDRESS STA RTN SAVE FOR RETURN JSB SETIO GO SET UP THE EQ'S LDA ASAVE IS THE THE FRIST CPA B.1 TIME? JMP LWRT1 YES, START TO READ JSB BITCK GO CHECK CONDITION BITS JMP TIMOT TIMOUT BIT 15 ON JMP TIMOT LINE ERROR BIT 14 ON JMP TIMOT DATA ERROR BIT 13 ON NOP BREAK,CAN'T GET ON READ LDA EQT4,I (R03) CRT SUBCHANNEL? AND B3700 (R03) SZA (R03) JMP LRED2 (R03) NO, NO PAUSE ON CTU!!! LDA EQT6,I (R01) DOING READ OR WRITE? SLA (R01) WRITE -> CHECK FOR PAUSE JMP LRED2 (R01) READ, CONTINUE LDA EQT31,I (R01) CHECK LINE DIRECTION SSA (R02) JMP LRED2 (R01) READ, CONTINUE LDA EQT5,I (R01) FLIP PAUSE BIT XOR B2 (R01) STA EQT5,I (R01) RAR,SLA (R01) WAIT NOW? JMP REJ3 (R03) YES, WAIT FOR NEXT INT. LDA BIT12 (R03) NO, OUTPUT NULL TO RESTART WRITE JMP REJ4 (R03) LRED2 LDA EQT11,I NOTHING ELSE, RETURN SZA,RSS ARE WE TRYING TO FINISH? JMP REJ2 YES, IGNORE THIS CHAR. JMP A,I NO * * * I.05R EQU * JSB SPCH1 SET AND SPECIAL CHAR. CLB,INB JSB I05W1 GO SETUP EQT9 AND EQT10 LDA EQT6,I CHECK IF ECHO SET AND B400 ISOLATE BIT 8 (SET ECHO) JSB ECHO SET/CLR = 20/0 ECHO LDA BN9 SET RUBOUT INT. JSB CDSET LDA BN40 SET CONTROL "D" INT. JSB CDSET LDA EQT6,I CHECK FOR USER ENABLED BLOCK READ AND B3000 BITS 9,10 WILL BE SET CPA B3000 JMP C05R3 THIS IS ENABLED BLOCK READ I.05S JSB DC1OT ENABLE TRANSFER * JSB CHRIN GET CHARACTER CPA B22 IS IT A DC2? JMP C05R4 FIRST CHAR. IS A DC2 * * *******THIS IS A CHARACTER TRANSFER********* * * LDA TEMP2 IS THIS HONEST? SZA JSB CLRNT JMP CHPR8 * * CLRNT NOP LDA BN56 CLR. RUBOUT INT. JSB CDSET LDA B412 CLR. CONTROL "D" INT. JSB CDSET JMP CLRNT,I * RS OCT 36 B377 OCT 377 B3700 OCT 3700 (R03) B137 OCT 137 CR OCT 15 BN9 OCT 57712 BN10 OCT 40000 BN11 OCT 43612 BN12 OCT 41512 BN13 OCT 140000 BN40 OCT 40412 B177 OCT 177 B4 OCT 4 B144 OCT 144 B3000 OCT 3000 B1512 OCT 1512 B3612 OCT 3612 BN56 OCT 17712 B412 OCT 412 * * ***********THIS IS A BLOCK TRANSFER********* * * C05R3 LDA EQT27,I THIS IS A BLOCK TRANSFER SSA (R04) RSS YES JMP REJ1 NO ERROR JSB XMIT GO TO TRANSMIT MODE LDA ESC OUTPUT JSB OUT1 LDA B144 OUTPUT SMALL JSB OUT1 C05R4 EQU * LDA EQT27,I GET STATUS AND BN13 SAVE 15-14 CPA BN13 BLOCK AND PAGE? RSS JMP *+4 NO LDA B1512 YES, TAKE CR AS SPECIAL JSB CDSET JMP C05R6 GO READ SSA,RSS IS IT BLOCK? JMP I.05S NO, IGNORE DC2 LDA B3612 REMOVE "RS" INT. ("CR" ONLY FOR LINE) JSB CDSET FOR ASCII CTU, LINE STRAP AND BLOCK * C05R6 JSB CLRNT CLA JSB ECHO TURN OFF ECHO JSB DC1OT TRIGGER TRANSFER C05R7 RSS AND WAIT FOR INTERRUPT * * ********************************************** * PROCESSES DATA ON KEYBOARD AND CTU * * READ REQUESTS. * * BINARY EOR IS DETECTED BY THE CHAR. * * COUNT READ FROM THE TAPE. * ********************************************** * * CHPRC JSB OUT1 EXIT AND AND WAIT FOR CHAR. JSB CHRIN GET CHARACTER CHPR8 LDB FILL SZB,RSS IS THIS BINARY? JMP CHPR9 YES,THIS IS BINARY * ********THIS IS ASCII******* * * * LDA TEM14 GET DATA WORD SZA,RSS IS IT SPECIAL? JMP CHPR2 NO * IFZ SWH1C NOP SWITCH NOP\RSS =CTU\CRT JMP EOOP5 THIS IS CTU ASCII TRANSFER XIF LDA EQT27,I GET TERMINAL STATUS AND BN13 ISOLATE PAGE(15) AND BLK(14) CPA BN13 ARE THEY BOTH SET? JMP EOOP2 YES,TERMINATE REQUEST LDA TEMP8 GET CHARACTER CPA B177 IS IT A RUBOUT? JMP RUB01 YES! GO PROCESS RUBOUT CPA B4 IS IT A CONTROL "D" (SET EOT) JMP CNTLD YES! GO SET EOT CHP9 JSB XMIT JSB EORP FOR CHAR. OR LINE STRAP BLK REQUES JMP EOOP1 FIRST SEND * * CHPR2 LDA EQT27,I IFZ SWH1D NOP CRT\CTU = RSS\NOP JMP CHPR9 THIS IS A CTU ASCII READ XIF SSA IS IT BLOCK MODE? JMP CHPRA YES! SKIP BELOW CHECKS * LDA TEMP2 IS THIS HONEST MODE? SZA JMP CHPR9 THIS IS HONEST MODE LDA TEMP8 GET CHARACTER JMP LINFD CHAR. TRANSFER AND NOT HONEST ******************************************** * IS CALLED IF RUBOUT CHARACTER IS * * DETECTED. IT DELETES THE CURRENT RECORD * * AND OUTPUTS (/,CR,LF). * ******************************************** * * RUB01 JSB XMIT LDA B134 OUTPUT A SLASH JSB OUT1 JSB EORP GO OUTPUT JMP I.051 RE START INPUT * LINFD CPA LF IS THIS A LINEFEED? JMP CHPRC YES,GO GET NEXT CHARACTER CPA CR IS THIS A CR ? JMP CHP9 YES! IT IS A CR,EXIT CPA B4 IS FIRST CHAR. A CONTROL "D" ? JMP CNTLD YES! * CPA B10 IS THIS A BACKSPACE RSS RSS JMP CHPR9 NO! CONTINUE LDA EQT7,I GET STARTING ADDRESS OF BUFFER RAL MULTIPLY BY 2 CPA EQT9,I ARE WE AT STARTING ADDRESS? JMP RUB01 YES! PROCESS AS RUBOUT CCB ADB EQT9,I DECREMENT CURRENT ADDRESS STB EQT9,I CLE,ERB DIVIDE BY TWO TO GET TRUE ADDRESS JSB MAPRD (R04) FETCH CHAR AND BN15 MASK HIGH END ADA FILL ADD ASCII FILL CHARACTER JSB MAPWR (R04) RESTORE JMP CHPR6 GO GET NEXT CHARACTER * * B134 OCT 134 BN15 OCT 177400 B40 OCT 40 B60 OCT 60 * CNTLD EQU * SET BIT 5 (EOT) LDA EQT5,I IOR B40 SET BIT 5 STA EQT5,I CLA STA EQT29,I SET AREG. EXIT JMP EOOP4 GO SET B REG. TO 0 AND EXIT * * CHPRA LDA TEMP8 CPA RS REMOVE "RS" JMP CHPR6 CHPR9 EQU * LDB EQT9,I GET CURRENT CHAR. ADD. CPB EQT10,I IS BUFFER FULL? JMP CHPR6 YES BUFFER FULL LDB EQT9,I GET CHARACTER ADDRESS ISZ EQT9,I INCREMENT CLE,ERB CONVERT TO WORD ADDRESS. JSB MAPRD GET CHARACTER STA BSAVE LDA TEMP8 SEZ,RSS IF E=0 THEN EVEN AND ALF,SLA,ALF HENCE SHIFT CHAR. TO UPPER 8.SKIP XOR BSAVE IF ODD ADDRESS XOR WITH CHAR. XOR FILL XOR FILL TO ADD FILL IF EVEN JSB MAPWR REPLACE FULL WORD LDB EQT9,I IS THIS THE LAST WORD? CPB EQT10,I RSS YES IT IS JMP *+5 LDA FILL IF BINARY KEYBOARD REQUEST AND BUFFER ADA TEM10 FULL THEN EXIT CPA B60 JMP EOOP2 YES! EXIT CHPR6 ISZ EQT30,I INCREMENT RECORD LENGTH COUNT.FOR JMP CHPRC IF NOT ZERO GET ANOTHER CHAR. IFZ JMP EOOP5 THIS IS ALL FOR BINARY READ XIF * * READ FROM USER MAP IF EQT1 IS NEG. ADDRESS IN B. * MAPRD NOP LDA EQT1 IS IT NEG.?? SSA JMP *+3 YES, USE USER MP LDA B,I GET CHAR FROM SYSTEM JMP MAPRD,I XLA B,I GET CHAR FROM USER MAP JMP MAPRD,I * * WRITE TO USER MAP IF EQT1 IS NEG. ADDRESS IN B. * MAPWR NOP STA BSAVE SAVE TEMP LDA EQT1 ARE MAPS CHANGED? SSA JMP *+4 YES STORE TO USER MAP LDA BSAVE STA B,I NO, PUT IN TO SYSTEM MAP JMP MAPWR,I LDA BSAVE XSA B,I TO USER MAP JMP MAPWR,I IFZ * * * *************************************************** * DOES CTU AND PRINTER REQUEST PROCESSING * *************************************************** * * * I.251 LDA TEMP4 GET REQUEST TYPE(1-3) RAR SSA,SLA JMP I.25C THIS IS CTU OR LP A CONTROL REQUEST SSA JMP I.25R THIS IS CTU A READ REQUEST * *********CTU OR PRINTER WRITE REQUEST********** * CLB,INB JSB I05W1 GO SET EQT9 AND EQT10 LDB FILL SZA IS CHARACTER COUNT ZERO? JMP I25W6 NO! IT IS NOT ZERO SZB,RSS IS IT BINARY JMP REJ1 EXIT WITH A=1 I25W6 SZB IF BINARY MAX LENGTH IS D 256 JMP *+3 FOR ASCII MAX LENTH IS D 254 (NEDED CR,LF) ADA B400 RSS ADA D254 THIS IS ASCII SSA LESS THAN 254 CHARACTERS JMP REJ1 IT IS NOT,THEREFORE EXIT * * JSB CTPRP GO PREP. TERMINAL FOR TRANSFER LDA B144 JSB OUT1 OUTPUT LDA FILL GET FILL CHARACTER SZA IS IT BINARY? JMP I25W2 NO! THIS IS ASCII * ***********CTU BINARY WRITE******** * LDA EQT8,I GET BUFFER LENGTH SSA,RSS IF WORDS MULTIPLY X2 RAL SSA IF CHARACTERS (-) MAKE POS. CMA,INA JSB BINAS GO CONVERT TO ASCII AND SEND * * I25W2 LDA B127 OUTPUT TO INITIALIZE CTU TRANSFER JSB OUT1 * * LDA FILL IS THIS BINARY SZA,RSS JSB ENAK THIS IS BINARY,GO HANDSHAKE LDB EQT8,I GET WORD COUNT SZB IS IT ZERO?(ASCII ONLY,BINARY CHECKED * JSB TRAN1 ALREADY).IT IS NOT ZERO LDA FILL GET FILL CHAR. SZA IS IT BINARY JSB EORP NO! THIS IS ASCII,WRITE A "CR,LF" I25W5 EQU * &&&&FOR INTERRUPT JSB DC1OT GO TRIGGER STATUS REPORT * * JSB CHRIN GET STATUS CHARACTER * JSB OUT1 GET THE @@&&&&*** CR.... LDA EQT33,I CPA B106 FAILURE? JMP I25W7 YES CLA,RSS I25W7 LDA B10 SET BIT 3 IN EQT5 FOR PRINT FAIL LDB TEM10 IS THIS A PRINTER? CPB B64 JMP EOOP6 THIS IS A PRINTER JMP EOOP7 THIS IS A CTU * * D254 DEC 254 B127 OCT 127 B163 OCT 163 B122 OCT 122 B62 OCT 62 * * ***********THIS IS A CTU READ REQUEST******** * I.25R EQU * JSB SPCH1 SET AND AS SPECIAL LDA RDTYP LOOK AT TYPE CPA B37 IS IT? JMP CN6C YES SPECIAL READ LDB TEM10 IF READ FROM PRINTER REJECT CPB B64 JMP REJ1 LDB EQT8,I GET BUFFER LENGTH SZB,RSS IS IT ZERO? JMP CN3C YES --GO SKIP ONE RECORD CLB,INB NO!, IT IS NOT ZERO JSB I05W1 GO SET UP EQT9,EQT10 LDB RDTYP IS THIS A FILE READ? CPB B2 IS THIS IT? RSS YES JMP *+5 NO LDA EQT27,I CHECK FOR BOTH BLOCK AND BN13 AND PAGE STRAP, IF SO CPA BN13 JMP REJ1 REJECT THIS READ JSB CTPRP GO PREP. TERM. FOR CTU TRANSFER LDA B163 JSB OUT1 OUTPUT LDA FILL SZA,RSS IS THIS BINARY? JMP I25R2 YES! THIS IS BINARY LDA B60 OUTPUT A ZERO FOR RECORD LDB RDTYP CPB B2 LDA B64 OR 4 FOR FILE JSB OUT1 LDA B122 OUTPUT JSB OUT1 * * THIS IS ASCII LDA B1512 DISABLE IF FILE READ LDB RDTYP GET TYPE CPB B2 JSB CDSET JMP C05R6 GO TRIGGER TRANSFER FOR ASCII * * ****THIS IS BINARY READ***** * I25R2 LDA B62 OUTPUT <2> JSB OUT1 LDA B122 OUTPUT JSB OUT1 JSB CDINT #### JSB SPCH1 SET FOR INTERRUPT JSB DC1OT TRIGGER BYTE COUNT * LDA B.4 INITIALIZE TO READ 4 BYTES STA EQT30,I CLA I25R5 ALF SHIFT UP STA EQT35,I AND STORE JSB CHRIN GET CHARACTER CPA RS IS IT A" RS"? JMP I25R6 YES,THIS IS ALL AND B17 ISOLATE DATA IOR EQT35,I "OR" WITH LAST BYTE STA EQT35,I SAVE JSB OUT1 GET NEXT LDA EQT35,I GET NUMB AGAIN ISZ EQT30,I IS THIS ALL?? JMP I25R5 NO! GET NEXT BYTE CMA,INA THIS IS ALL,COMPLEMENT STA EQT30,I STORE BINARY RECORD LENGTH. JSB DC1OT TRIGGER TRANSFER JMP C05R7 GO ENABLE TRANSFER I25R6 LDA EQT27,I DO WE NEED TO GET AND BN13 THAT CR? CPA BN13 JMP EOOP5 NO COMPLETE JSB OUT1 YES GET IT JMP EOOP5 * * ***************************************************** * * * * * PRINTER * * 11 SPACE

LINES IF OPTIONAL * * PARAM (+) OR PAGE EJECT IF * * OPTIONAL PARAM (-). * PAGE EJECT 9871 ONLY ***************************************************** * * I.25C LDA RDTYP GET CONTROL WORD STA EQT10,I STORE FOR LATER USE LDB TEM10 GET DEVICE TYPE CPB B64 IS IT A LP? JMP CN28C YES! IT IS A LP CPA B1 IS IT EOF? JMP CN1C YES! CPA B2 IS IT BACKSPACE RECORD? JMP CN50C YES! CPA B3 FORWARD SPACE? JMP CN3C YES! CPA B4 REWIND? JMP CN4C YES! CPA B10 GENERATE LEADER(EOF) JMP CN10C CPA B11 T.O.F TO CTU IS WEOF JMP CN1C WRITE EOF CPA B13 FORWARD SPACE 1 FILE? JMP CN13C YES! CPA B14 BACKSPACE FILE? JMP CN50C YES! CPA B26 WRITE EOV? JMP CN26C YES! CPA B27 LOCATE FILE

OR SPACE

LINES JMP CN27C YES * **************ILLEGAL CONTROL REQUEST************* * * JMP REJ1 * B1 OCT 1 B14 OCT 14 B26 OCT 26 B27 OCT 27 B65 OCT 65 B55 OCT 55 B160 OCT 160 B66 OCT 66 B103 OCT 103 * ******BACKSPACE 1 OR 2 RECORDS****** * BSR1 NOP BACKSPACE 1 LDB B61 GET ASCII <1> LDA BSR1 JMP OVER1 BSR2 NOP BACKSPACE 2 LDA BSR2 LDB B62 GET ASCII <2> OVER1 STA EQT8,I STORE RETURN ADD. STB EQT9,I SAVE 1 OR 2 LDA B55 SEND ASCII (-) JSB OUT4 LDA EQT9,I RETREIVE BS NUMBER JSB OUT1 LDA B160 SEND JSB OUT1 LDA B70 SEND JMP OUT5 * *********WRITE EOF************* * CN1C LDA B65 WRITE END OF FILE JSB OUT4 OUTPUT JMP OUT3 * ***********FORWARD SPACE RECORD************** * FSR1 NOP LDA FSR1 SAVE RETURN ADD. RSS CN3C CLA STA EQT8,I LDA B3 SET CONTROL REQUEST STA TEMP4 BECAUSE MAY GET HERE FROM READ 0 ADA B300 SET FOR FORWARD RECORD IOR EQT6,I ALSO SET IN CONWD BECAUSE WILL EXIT STA EQT6,I LDA B160 JSB OUT4 CN3C1 LDA B61 OUTPUT JMP OUT5 **********REWIND*************** CN4C JSB CTPRP LDA B60 REWIND JMP OUT5 * **********DYNAMIC STATUS***************** CN6C EQU * CLB,INB JSB I05W1 GO SET EQT'S SZA,RSS IS IT ZERO WD COUNT? JMP REJ1 YES , IGNORE REQUEST JSB CTUST GET CTU STATUS STA B LDA TEM11 GET DEVICE TYPE (OCTAL) RAL AND EQT27,I TEST EOF FLAG FOR DEVICE SZA ADB B200 EOF FLAG IS SET. SET IN IBUF LDA EQT7,I GET ADDRESS SWP (R01) SET UP... JSB MAPWR (R01) ...FOR CROSS MAP STORE ISZ EQT9,I BUMP FOR TRANSMIT LOG CLA SET FOR GOOD RETURN STA EQT29,I JMP EOOP3 * * *********LEADER AND TOP OF FORM********** * FOR THIS REQUEST DRIVER WRITES A EOF * * IF IT DID NOT JUST DO SO,OR TAPE IS * * NOT AT LOAD POINT * ***************************************** * CN10C JSB CTUST GET STATUS AND B300 SZA,RSS DID WE JUST WRITE A EOF OR AT LP? JMP CN1C NO! GO WRITE IT JMP EOOP4 YES,DO NOT WRITE TWO IN A ROW * **********FORWARD SPACE 1 FILE ************ * CN13C LDA B62 OUTPUT JSB OUT4 JMP OUT3 * ************BACKSPACE 1 FILE ************* * BSF1 NOP LDA BSF1 STA EQT8,I LDA B55 OUTPUT JSB OUT4 LDA B61 OUTPUT JSB OUT1 LDA B160 OUTPUT JSB OUT1 LDA B62 OUTPUT JMP OUT5 * ********WRITE END OF VALID DATA (EOV) * CN26C LDA B66 OUTPUT JSB OUT4 JMP OUT3 * *******LOCATE ABSOLUTE FILE (CTU)********* *****************OR*********************** *******SPACE LINES (PRINTER)************** * CN28C LDA EQT10,I GET CONTROL REQUEST CPA B11 IS IT T.0.F. OR SPACE LINES? RSS JMP REJ1 ONLY LEGAL CONTROL TO PRINTER IS 11B CN27C JSB CTPRP PREP. TERM. FOR CTU REQUEST LDA EQT7,I GET FILE NO. SZA,RSS IF ZERO CHANGE TO 1 INA JSB BINAS CONVERT TO ASCII AND SEND LDA B160 OUTPUT JSB OUT1 LDB TEM10 GET DEVICE TYPE CPB B64 IS IT LP? RSS YES A LP JMP CN27D LDB EQT7,I GET OPTIONAL PARAM. IF (-) THEN T.O.F. SSB,RSS IF (+) THEN SPACE (EQT7) LINES. JMP CN3C1 GO OUTPUT CN27D LDA B62 OUTPUT * OUT5 JSB OUT1 OUT3 LDA B103 OUTPUT JSB OUT1 JMP I25W5 GO WAIT FOR REQUEST COMPLETION OUT4 NOP LDB OUT4 SAVE RETURN ADDRESS STB EQT29,I JSB CTPRP JSB OUT1 LDA EQT29,I JMP A,I * *********BACKSPACE FILE AND RECORD******** * * BACKSPACE FILE AND RECORD REQUIRES SPECIAL PROCESSING * * TO POSITION AND SET STATUS AS A MAG. TAPE UNIT. THIS * * SPECIAL PROCESSING ENABLES THE USE OF EXISTING MTU * * SUBROUTINES. IF THE TAPE IS POSITIONED AFTER AN EOF THEN* * IT WILL MOVE BEFORE THE EOF AND A FLAG SET IN EQT27 * * (BIT3/BIT2 =RIGHT CTU/LEFT CTU) WHICH IS EXAMINED BY * * A DYNAMIC STATUS REQUEST. THESE SPECIAL EOF FLAGS ARE * * NECESSARY BECAUSE THE 264X DOES NOT RETURN EOF STATUS * * BEFORE THE EOF MARK. * * *********************************************************** * * * CN50C LDA EQT27,I SET CN50C ENTRY FLAG IOR B10 BIT3 STA EQT27,I LDB RSS SET CN50C FLAG STB EOOP7 JSB BSR1 ISSUE BACKSPACE 1 RECORD JSB CTUST GET STATUS STA TEM8 AND B103 CHECK FOR L.P. SZA JMP EOOPB WE ARE THERE LDA TEM8 NOT AT L.P. AND B200 IF WE ARE AFTER EOF THE BIT 7 SET SZA,RSS JMP CN54C TAPE NOT AFTER EOF CN55C JSB BSR2 ISSUE BACKSPACE 2 RECORDS JSB CTUST IF AT EOF AGAIN WE ARE AFTER ANOTHER EOF STA TEM8 AND B103 CHECK FOR L.P. SZA JMP EOOPB LDA TEM8 AND B200 AND HENCE NO FORWARD SPACE SZA DO NOT SET EQT27 EOF FLAG IF JMP EOOPB BETWEEN EOF'S JSB FSR1 FORWARD ONE TO GET US BEFORE EOF * * LDA TEM11 GET DEVICE TYPE RAL FOR SETTING EOF FLAG IN EQT27 IOR EQT27,I BIT1/BIT2=EOF LCTU/EOF RCTU AND BN55 REMOVE CN50C FLAG STA EQT27,I RESTORE IT JSB CTUST GET STATUS IOR B200 ADD EOF BIT STA TEM8 JMP EOOPA * * CN54C LDA EQT10,I TAPE NOT AFTER EOF CPA B2 IS THIS A BS RECORD? JMP EOOPB YES JSB FSR1 GET TAPE TO ORIGINAL POSITION JSB BSF1 BS FILE TO GET US AFTER EOF JMP CN55C NOW POSITION BEFORE EOF XIF * RECIV NOP LDA BIT15 SET CARD UP FOR RECEIVE,CHAR. IOR EQT31,I UPDATE STA EQT31,I FOR NEXT IO OPERATION JMP RECIV,I **************************************************** * SUBROUTINE CHECHS CHARACTER FROM IO CARD* * AND PLACES IT IN A REG. * * SPECIAL CHARCTER STATUS IS ALSO DETERMINED * * TEMP8=DATA * * TEMP14= SPECIAL CHARACTER READ * * **************************************************** * CHRIN NOP LDA CHRIN STA EQT37,I CLA CLEAR STA TEM14 SPEC. CHAR. STATUS LDA ASAVE GET REC WORD AND B377 ISOLATE DATA CHAR.(0-7) STA EQT33,I STORE IT LDB FILL IS THIS BINARY? SZB,RSS JMP CHSPJ YES,SKIP CHECKS AND B177 ASCII DATA STA EQT33,I WITHOUT PARITY BIT LDB EQT27,I GET STATE WORD BLF LOOK AT SPECIAL CHAR. BITS SLB,RSS LOOK FOR CR? JMP *+3 NO LOOK NEXT CPA CR YES, LOOK JMP CHSPH IS CR SSB,RSS JMP *+3 NO LOOK NEXT CPA RS YES, LOOK RSS IS RS JMP *+7 LDA EQT27,I IS T BLOCK AND PAGE? AND BN13 CPA BN13 RSS YES, DON'T LOOK FOR CR JSB OUT1 GET THE JMP CHSPH RBL,RBL LOOK FOR R.O. AND CNTL-D SLB,RSS LOOK FOR RUBOUT? JMP *+3 NO, LOOK NEXT CPA B177 IS IT R.O.? JMP CHSPH YES SSB,RSS LOOK FOR CNTL-D? JMP CHSPJ NO,RETURN CPA B4 IS IT CNTL-D? JMP CHSPH YES JMP CHSPJ NO,RETURN CHSPH LDA BN10 FOUND A SPECIAL CHAR. STA TEM14 TURN ON SPEC. CHAR BIT CHSPJ LDA EQT33,I STA TEMP8 GET REC. CHAR LDB EQT37,I JMP B,I THAT CAUSED THE INTERRUPT * * * *********************************************** * SUBROUTINE TRIGGERS BLOCK TRANSFERS * * FROM THE CPU. THIS IS DONE BY SENDING A * * DC1 TO TRIGGER THE TRANSFER AND * * THEN SETTING UP TO RECEIVE DATA. * *********************************************** * DC1OT NOP LDA DC1OT SAVE RETURN ADDRESS STA EQT32,I JSB XMIT SET UP FOR XMIT LDA B21 TO INHIBIT TRANS. UNTIL READY JSB OUT1 OUTPUT DC1 JSB RECIV SET RECIVE MODE JSB OUT1 WAIT FOR REC CHAR. LDA EQT32,I GET RETURN ADDRESS JMP A,I RETURN * B5 OCT 5 BN55 OCT 177767 B10 OCT 10 B400 OCT 400 * * BITCK NOP LDA ASAVE GET CONDITION BITS RAL,SLA JMP BITCK,I BIT 15 ISZ BITCK RAL,SLA JMP BITCK,I BIT 14 ISZ BITCK RAL,SLA JMP BITCK,I BIT 13 ISZ BITCK SSA JMP BITCK,I BIT 12 ISZ BITCK NONE JMP BITCK,I RETURN * * * * * ****************************************************** * SUBROUTINE SETS UP THE SPECIAL CHARACTERS. * * THE SPECIAL CHARACTER IS IN POSITION (THE A REG.) * * . 1/0 IS ADD/DELETE * * SPECIAL CHARACTER. * ****************************************************** * CDSET NOP STA B SAVE IN B RBL PUT ADD/DELETE BIT IN 15 ALF,ALF RAL,RAL PUT CHAR IN LOW ORDER AND B177 FIND OUT WHICH CHAR CPA CR CARRAGE RET.? LDA BIT12 YES CPA RS REC. SEP.? LDA BIT11 TES CPA B177 RUBOUT? LDA BIT10 YES CPA B4 CNTL-D? LDA BIT9 SSB,RSS CMA,RSS NO JMP *+3 DELETE AND EQT27,I ADD RSS IOR EQT27,I STA EQT27,I RESTORE STATUS JMP CDSET,I RETURN * ECHO NOP SET ECHO ON CARD PER A REG. STA B SAVE A LDA EQT31,I AND CMB11 SZB,RSS TURN ECHO ON OR OFF? IOR BIT11 OFF STA EQT31,I RESTORE JMP ECHO,I * *************************************************** * SUBROUTINE INITIALIZES SPEC. CHARS. * * BELOW ARE THE INITIAL CONDITIONS FOR CONTROL: * * * * ALL USED SPECIAL CHARACTERS (EXCEPT * * RUBOUT) ARE CLEARD * * * *************************************************** * * CDINT NOP LDA B1512 DISABLE CR JSB CDSET LDA B3612 DISABLE RS JSB CDSET LDA BN56 DISABLE RUBOUT JSB CDSET LDA BN40 ENABLE CNTL-D JSB CDSET CLA LDB TEM10 GET DEVICE TYPE ADB TEMP4 AD#### CPB B61 IS IT A CRT IOR B20 YES! TURN ON ECHO JSB ECHO IT IS OFF FOR CTU AND LP * JMP CDINT,I (4 THRU 36) B61 OCT 61 BIT15 OCT 100000 BIT13 OCT 20000 (R03) BIT14 OCT 040000 BIT12 OCT 010000 BIT11 OCT 004000 BIT10 OCT 002000 BIT9 OCT 001000 CMB14 OCT 137777 ESC OCT 33 B136 OCT 136 B.4 OCT 177774 B.7 DEC -7 D.10 DEC -10 * ********************************************* * SUBROUTINE READS TERMINAL STATUS * * AND SETS EQT27 FOR : * * CHARACTER\BLOCK 0\1 (BIT15) * * LINE STRAP\PAGE STRAP 0\1 (BIT14) * ********************************************* * TERST NOP CLA JSB ECHO TURN ECHO OFF JSB SPCH1 JSB XMIT SET XMIT MODE LDA ESC OUTPUT ESCAPE JSB OUT1 LDA B136 OUTPUT CARROT. THESE TWO CHARACTERS JSB OUT1 PREP. TERM. FOR STATUS * JSB DC1OT GO TRIGGER STATUS TRANSMISSION WITH DC1 * LDA D.10 SET TO GET 10 BYTES STA EQT30,I SAVE COUNT RSS TERS1 JSB OUT1 WAIT FOR CHAR. JSB CHRIN GO GET CHAR..IT IS NECESARY TO READ LDB EQT30,I IS THIS THE CPB B.7 ONE ? JMP TERS0 YES CPB B.5 RSS JMP TERS2 AND B2 RAR,RAR STA B LDA EQT27,I RAL,CLE,ERA CLEAR CHAR/BLOCK IOR B UPDATE STA EQT27,I JMP TERS2 TERS0 AND B10 YES LOOK FOR LINE PAGE ALF,ALF ALF,RAR MOVE TO POS 15 . (LINE\PAGE =0\1) STA B SAVE LDA EQT27,I GET STATUS AND CMB14 CLEAR L/P BIT (14) IOR B UPDATE STA EQT27,I TERS2 LDA TEM14 IS IT A SPECIAL CHAR. ? SZA JMP *+3 YES THE MUST BE A 2640X ISZ EQT30,I BUMP COUNT JMP TERS1 LOOK FOR NEXT LDA B20 ALL FINISHED JSB ECHO SET ECHO CLA STA EQT30,I CLEAR BIN COUNT JMP TERST,I * ************************************************* * SUBROUTINE OUTPUTS AN ENK TO TERMINAL * * AND WAITS FOR AN ACK. * ************************************************* * ENAK NOP LDA ENAK STA EQT33,I SAVE RETURN ADDRESS JSB XMIT SET UP FOR TRANSMIT LDA B5 OUTPUT ENK TO TERMINAL JSB OUT1 WAIT FOR XMIT INTERRUPT JSB RECIV SET START READ-SHEC.CONDITION JSB OUT1 GO SET START READ * LDA EQT33,I GET RETURN ADDRESS JMP A,I RETURN * IFZ * ************************************************ * SUBROUTINE READS THE CTU STATUS * * * *SET BIT0--UNIT BUSY OR CARTRIDGE NOT INSERTED* * BIT1--END OF VALID DATA * * BIT2--CARTRIDGE NOT WRITE ENABLED * *-------------- * BIT3--LAST COMMAND ABORTED * * BIT4--READ\WRITE ERROR * * BIT5--END OF TAPE * * ----------- * BIT6--LOAD POINT * * BIT7--END OF FILE * * * * THE CTU STATUS COMES IN THREE BYTES * * * BYTE * 1 EOF - LP - EOT - WR. ERR(2645) * 2 CMD.AB.- W.P. - RD.ERR. -BUSY(2645) * 3 RD.ERR. - RD.ERR.(HARD) - EOD -C.I. ************************************************ * CTUST NOP LDA CTUST SAVE RETURN ADDRESS STA EQT34,I * CLA TURN OFF JSB ECHO ECHO FOR STATUS READ * JSB CTPRP GO PREP. TERMINAL FOR CTU TRANSFER LDA B136 OUTPUT <^> JSB OUT1 JSB DC1OT TRIGGER TRANSFER WITH DC1 * LDB B.5 INITIALIZE STATUS COUNT STB EQT30,I RSS * * CTUS1 JSB OUT1 JSB CHRIN GET CHARACTER ISZ EQT30,I ARE THESE STATUS BYTES? JMP CTUS1 NO! GO GET NEXT CHAR. AND B17 ALF STA EQT30,I JSB OUT1 JSB CHRIN GET STATUS BYTE NO. 2 AND B15 ISOLATE BITS 0,2,3 IOR EQT30,I "OR" BYTE 1 WITH BYTE 2 STA EQT30,I STORE IT TEMPORARILY JSB OUT1 JSB CHRIN GET BYTE 3 AND B4 CHECK FOR READ ERROR RAL,RAL MOVE TO BIT 4 IOR EQT30,I STA B LDA TEMP8 GET BYTE 3 AND B3 ISOLATE FIRST TWO BITS (WEN AND EOV) XOR B1 COMPL. C.I. IOR B OR WITH BYTES 1 AND2 XOR B10 COMPLEMENT BIT 3 AND B377 ISOLATE STATUS BITS STA EQT30,I SAVE STATUS JSB OUT1 FOR THE LAST CHAR LDA EQT30,I GET STATUS CLB CLEAR STB EQT30,I RECORD COUNT * LDB EQT34,I SAVE RETURN ADDRESS JMP B,I * CTPRP NOP THIS SUBROUTINE PREPARES TERMINAL TO ACCEPT LDB CTPRP SAVE RETURN ADDRESS STB EQT35,I STA EQT32,I CTU CONTROL AND R\W REQUESTS JSB XMIT LDA EQT27,I CHECK FOR KEYBOARD DISABLE BIT AND B20 (BIT4) SZA IF SET ALREADY DISABLED JMP OVER6 LDA ESC JSB OUT1 LDA B143 (SMALL "C") JSB OUT1 LDA B20 IOR EQT27,I SET KEYBOARD DISABLE BIT STA EQT27,I OVER6 LDA ESC JSB OUT1 OUTPUT LDA B46 JSB OUT1 OUTPUT <&> LDA B160 JSB OUT1 OUTPUT LDA TEM10 GET DEVICE JSB OUT1 LDA B165 LDB TEMP4 GET REQUEST TYPE CPB B3 IS IT CONTROL? JSB OUT1 YES, SEND LDA EQT32,I RESTORE A REG LDB EQT35,I GET RETURN ADDRESS JMP B,I * * * * * ************************************************ *SUBROUTIONE TAKES A NO. IN A REG. * * (<1000D) AND CONVERTS TO ASCII WITH MSB * * AT BUFF1 AND LSB AT BUFF3. * *THE CHARACTERS ARE SENT MSB FIRST * ************************************************ * BINAS NOP LDB BINAS SAVE RETURN ADDRESS STB EQT32,I SSA IS NUMBER OK? (POSITIVE) JMP BINAS,I NO! LDB BN50 LOAD B WITH DEC -1000 ADB A ADD NUMBER TO -1000 SSB,RSS IS SIGN ZERO? JMP BINAS,I YES! EXIT FOR NUMBER >999 LDB ADDRT GET BUFFER ENDING ADDRESS ADB B2 ADD 2 STB TEMP1 STORE IT AT TEMP1 BINA1 CLB DIV LF DIVIDE NO. IN A REG. BY 10 ADB B60 CONVERT TO ASCII STB TEMP1,I STORE IT. LDB TEMP1 GET NEXT ADDRESS ADB B.1 DECREMENT IT STB TEMP1 RESTORE IT SZA IS THE A REG.(QUOTIENT) =0 ? JMP BINA1 NO! GO DIVIDE A REG. AGAIN LDA ADDRT YES! IT IS ZERO ADA B.1 CPA TEMP1 ARE WE FINISHED? JMP BINA2 YES!NOW GO OUPUT CHAR. CLA NO,GO FILL REMAINING PLACES WITH JMP BINA1 ASCII <0> BINA2 LDB ADDRT GET MSD IN B REG. STB EQT29,I STORE IT FOR LATER USE LDA B.3 SETUP COUNTER STA EQT30,I I25W8 LDA B,I GET ASCII CHAR. IN A REG. JSB OUT1 GO SEND IT! ISZ EQT29,I INCREMENT ADDRESS POINTER LDB EQT29,I RESTORE IN B REG. FOR ISZ EQT30,I ISZ COUNT COUNTER JMP I25W8 THERE ARE MORE,GO GET 'EM LDA EQT32,I GET RETURN ADDRESS JMP A,I * ADDRT DEF BUFF1 BUFF1 BSS 3 B46 OCT 46 B165 OCT 165 B15 OCT 15 B30 OCT 30 B143 OCT 143 * XIF ************************************************* * SUBROUTINE IS GENERAL OUTPUT ROUTINE * * TO TERMINAL. CHAR. IS IN A REG. * ************************************************* * OUT1 NOP GENERAL PURPOSE CHARACTER OUTPUT ROUTINE LDB OUT1 STB EQT36,I SAVE RETURN ADDRESS AND B377 CLEAR UPPER HALF STA B SAVE A LDA EQT31,I GET EQT31 AND BN15 SAVE UPPER IOR B UPDATE STA EQT31,I OLD DATA WORD JSB EXIT1 EXIT AND OUTPUT CHARACTER LDA EQT31,I AND BIT11 KEEP ECHO STA EQT31,I CONDITION LDA EQT36,I GET RETURN ADDRESS JMP A,I * * XMIT NOP SET CARD UP FOR XMIT LDA EQT31,I RAL,CLE,ERA KNOCK OUT OLD READ. IOR BIT14 TURN ON START WRITE BIT STA EQT31,I FOR NEXT WRITE JMP XMIT,I * * SPCH1 NOP THIS SUBROUTINE SETS SPECIAL CHAR. INTERRUPTS LDA BN12 JSB CDSET SET INTERRUPT LDA BN11 JSB CDSET SET INTERRUPTS JMP SPCH1,I RETURN * * B.1 OCT 177777 B.5 OCT 177773 BN50 DEC -1000 * * *********************************************** * * *********************************************** * * REJ3 LDA BIT13 (R03) NO-OP -> IGNORE INT JMP REJ4 (R05) REJ2 CLA ERROR RETURN CLB ISZ RTN TO PHYSICAL REJ1 EQU * JMP RTN,I DRIVER * **************************************************** * IS USED FOR CONTINUATION EXITS TO THE * * LOGICAL DRIVER, P+1 RETURNS. * **************************************************** * EXIT1 NOP LDB EXIT1 GET CALLING PROGRAMS ADDRESS+1 STB EQT11,I STORE AT EQT11,I FOR INTERRUPT REJ4 STA TEM12 (R05) SAVE DATA/DIR. LDA TEM11 GET DEVICE TYPE CPA B3 CLA LDB EQT14,I GET SET TIMEOUT SZA IF NON CRT THEN SET LDB TOUT 60 SEC. TIME OUT LDA TEM12 DATA DIR. ISZ RTN BUMP FOR CONTINUATION JMP RTN,I AND RETURN * * ********************************************************* * DOES ASCII CTU AND DISPLAY WRITE EOR PROCESSING* ********************************************************* * * EORP NOP LDA EORP SAVE RETURN ADDRESS STA EQT29,I LDA CR OUTPUT A JSB OUT1 LDA LF OUTPUT A JSB OUT1 LDA EQT29,I JMP A,I * * ******************************************** * ENABLES KEYBOARD IF IT HAS BEEN * * LOCKED BY A CTU REQUEST * ******************************************** * KEYBD NOP LDA EQT27,I AND B20 IS IT LOCKED (BIT 4) SET SZA,RSS JMP KEYBD,I NO! JSB XMIT LDA ESC UNLOCK KEYBOARD JSB OUT1 LDA B142 JSB OUT1 SEND SMALL B JSB CDINT LDA EQT27,I AND BN3 REMOVE KEYBD LOCK BIT STA EQT27,I JMP KEYBD,I * EOOP7 NOP IF CN50C FLAG IS SET(BIT3,EQT27) JMP EOOPC THEN EOOP7 IS LDA EQT8,I IT IS SET JMP A,I * EOOP8 LDB TEMP1 THIS EXIT IS USED IF UNDERSCORE CPB CMB5 IS ONLY CHAR. RSS * ********************************************************* * AND ARE ENTRIES FOR COMPLETION (P+1) * * EXITS. THE TERMINAL OR CTU STATUS IS TEMPORARLY PUT * * IN TEMP5. * ********************************************************* * EOOP1 EQU * EOOP2 CLA STA EQT29,I SET A REG. EXIT JMP EOOP3 * EOOPC LDB TEMP4 IF CONTROL ALWAYS GET STATUS IFZ CPB B3 RSS SZA IF GOOD WRITE DO NOT GET STATUS EOOP5 JSB CTUST YES!,GO UPDATE CTU STATUS EOOP6 STA TEM8 * EOOPB LDA BN55 REMOVE EOF FLAG IN EQT27 LDB TEM11 BECAUSE TAPE HAS MOVED RBL XOR B LDB EQT27,I AND B STA EQT27,I LDA TEM8 * ****************************************************** * A READ TO END OF TAPE WILL GIVE BELOW STATUS * * STATUS * * 0 GOOD READ * * 40 END OF TAPE. GOOD RECORD READ * * 240 EOT+EOF. NO RECORD READ, * * SET FOR NR(A=1) EXIT * * 42 EOT+EOV * * 52 EOT+EOV+ABORT * * * ****************************************************** * * ****************************************************** * A WRITE TO END OF TAPE WILL GIVE BELOW STATUS * * STATUS * * 42 EOT+EOV GOOD RECORD WRITTEN * * 52 EOT+EOV+ABORT (NO RECORD WRITTEN)* * SET ET(A=1) EXIT * * * ****************************************************** * ****************************************************** * READ TO EOV IN MIDDLE OF TAPE * * STATUS * * 200 EOF * * 2 EOV * * 12 EOV+ABORT * * SET NOT READY EXIT * * * ****************************************************** * EOOPA AND B373 REMOVE WRITE PROTECT CPA B240 IF EOF+EOT THEN SET NR JMP OVER4 CPA B52 IF FAILURE ON WRITE JMP OVER4 DUE TO EOT DO THIS(SAVE REQ.) AND B30 CHECK FOR CMD ABORT SZA OR READ-WRITE ERROR JMP OVER4 SET N.R. CLB STB EQT29,I SET A=0 FOR GOOD EXIT JMP EOOP3 OVER4 CLB,INB SET NR STB EQT29,I SET A REG. EXIT XIF *********************************************************** * IS ENTRY FOR B=0 (TRANS. LOG =0) EXIT. * *********************************************************** * EOOP4 CLA STA EQT8,I SET UP FOR B REG. =0 EXIT * ********************************************************** * SETS 2640\2644 AND IO CARD FOR NEXT INTERRUPT * * OR REQUEST, AND SETS EITHER CTU OR CRT STATUS IN EQT5 * * * IT ALSO SETS THE TRANSMISSION LOG IN B REG. (+CHAR. OR * * + WORDS). IF EQT8 =0 (VIA EOOP4) THEN B=0. * ********************************************************** * EOOP3 EQU * JSB KEYBD ENABLE KEYBD IF LOCKED LDB EQT13,I LOOK TO SEE IF ADB B6 FULL OR HALF DUPLEX LDA B,I WELL?? SSA JSB ENAK FULL DUPLEX, HANDSHAKE BEFORE EXIT CLA,INA SET ECHO ON JSB ECHO IF OFF CLA INDICATE WE ARE TRYING STA EQT11,I TO FINISH LDB EQT9,I GET 2X LAST CHAR. ADDRESS CMB,INB MAKE NEG. ADB EQT7,I SUBTRACT TWO TIMES STARTING ADD. ADB EQT7,I CMB,INB LDA EQT8,I IF WORDS THEN DIV. BY 2 SSA JMP *+4 THESE ARE CHARACTERS SLB IS LSB SET? INB YES! INCREMENT SO EVEN FOR DIVIDE BRS DIVIDE TO CONVERT TO WORDS * SZA,RSS IF EQT8 IS 0 THEN CLEAR B REG. CLB STB EQT6,I SAVE XMIT LOG LDA EQT13,I EXTENT ADDRESS ADA B3 BUMP TO EQ19 LDB EQT29,I WHAT KIND OF END IS IT? SZB SKIP IF GOOD JMP RTN,I BAD RETURN LDB A LDA B,I IOR B40 TURN ON BIT 5 STA B,I IN EQ19 FOR GOOD END JMP RTN,I RETURN * * * BN3 OCT 100007 TOUT DEC -600 B373 OCT 373 B142 OCT 142 B240 OCT 240 B106 OCT 106 B64 OCT 64 B300 OCT 300 B3 OCT 3 B6 OCT 6 B13 OCT 13 D.11 DEC -11 B2000 OCT 2000 B52 OCT 52 CMB11 OCT 173777 ********************************************************** * CONFIGURES IO INSTRUCTIONS TO SELECT CODE SET * * IN A REG. * ********************************************************** * SETIO NOP LDA BSAVE GET EQT ADDRESS STA EQT1 SSA CMA,INA MAKE POS. IF NEG. ADA B3 BUMP TO EQT4 STA EQT4 INA STA EQT5 INA STA EQT6 INA STA EQT7 INA STA EQT8 INA STA EQT9 INA STA EQT10 INA STA EQT11 ADA B2 STA EQT13 INA STA EQT14 IFN LDA B60 SET FOR CRT IF NO "Z" IN ASMB STATEMENT STA TEM10 XIF * IFZ LDA EQT4,I GET SUBCHANNEL TO IDENTIFY DEVICE LSR 6 SC=0 IS CRT (TEM10=60) AND B37 SC=1 IS L CTU )(TEM10=61) STA TEM11 CPA B3 IS THIS UNIT 3? CLA YES ADA B60 SC=2 IS R CTU (TEM10=62) STA TEM10 SC=4 IS PRINTER (TEM10=64) XIF LDA EQT6,I GET CONTROL WORD LDB TEM10 GET DEVICE CPB B64 IS IT LP? CLA YES! SET FOR ASCII RAR BIT6 1\0 IS BIN\ASCII AND B40 ISOLATE BIT 5 XOR B40 REMOVE BIT 5 IF BINARY STA FILL SET FILL CHARACTER LDA EQT6,I GET WORD AGAIN TO SET HONEST WORD LSR 6 AND B37 STA RDTYP LDA EQT6,I AND B2000 HONEST IS BIT 10 =1 STA TEMP2 * IFZ LDA TEM10 CLB CPA B60 SET SWITCH CRT/CTU = RSS/NOP LDB RSS STB SWH1A STB SWH1B STB SWH1C STB SWH1D * XIF * **************************************************** * SETUP EXTENSIONS ON EQT * * * * EQT NO. USE * * 1-8 STANDARD * * 9 RUNNING CHAR. ADDRESS * * 10 LAST CHAR. ADDRESS * * 11 ADDRESS TO GO ON INTERRUPT * * 12 NO. OF EQT EXTENSIONS * * 13 EQT EXTENSION STARTING ADD. * * 14-15 STD * * 16-26 USED BY THE PHYSICAL DRIVER * * 27 TERMINAL STRAPPING AND CTU INFO* * BIT 15 IS 0\1 =CHAR.\BLOCK * * BIT 14 IS 0\1 =LINE\PAGE * * BIT 12 IS CR SEARCH * * BIT 11 IS RS SEARCH * * BIT 10 IS RUBOUT SEARCH * * BIT 9 IS CNTLD SEARCH * * BIT 4 IS KEYBOARD LOCKED * * BIT 3 IS CNC50 FLAG * BIT 2 IS RCTU EOF FLAG * BIT 1 IS LCTU EOF FLAG * BIT 0 IS UNUSED * * 28 STORAGE FOR ICNWD * * 29 RETURN ADDRESS * * AND A REG. EXIT * 30 BINARY RECORD LENTGH * * 31 RETURN ADD. * * 32 AND RETURN ADDRES* * 33 RETURN ADDRESS * * 34 RETURN ADDRESS * * 35 RETURN ADDRESS * * 36 RETURN ADDRESS * * 37 RETURN ADDRESS * * **************************************************** * * LDA EQT4,I GET STARTING ADDRESS OF EXT. AND B17 SELECT CODE TELLS MPY B13 THE ADDRESS IN ADA EQADR TEMP STORAGE LDB D.11 STB TEMP1 STORE NO. OF EXT. AT TEMP1 LDB ADR27 GET ADD. OF EQT27 STA B,I STORE S.A. OF EXT. IN IT INA INB ISZ TEMP1 JMP *-4 * CLB IF CN50C FLAG IS SET THEN LDA EQT27,I STORE A AT EOOP7 AND B10 SZA LDB RSS STB EOOP7 * LDA EQT6,I GET CONTROL WORD AND B3 STA TEMP4 STORE REQUEST TYPE AT TEMP4 CPA B3 IS THIS CONTROL? JMP OVER7 YES JMP OVER2 NO,READ OR WRITE OVER7 LDA EQT6,I LSR 6 IF CONTROL TYPE 0 AND B37 THEN SPECIAL PROCESSING REQUIRED SZA,RSS AT JMP OVER3 * * OVER2 LDA EQT6,I RAL,CLE,SLA,ERA CLR 15 IF SYS REQ STA EQT6,I NORMAL NON CNTL 0 REQ. STA EQT28,I STORE CURRENT CONWD FOR SYS. INTERRUPT JMP SETIO,I * * SPECIAL "CONTROL 0" PROCESSING * OVER3 LDA EQT6,I IS THIS A SYSTEM REQ.? SSA,RSS JMP REJ1 NO! * LDA EQT28,I GET OLD CONWD STA EQT6,I PUT IN CURRENT CONWD AND B2 IF WRITE MUST COMPLETE XFER CPA B2 OR TERMINAL WILL HANG JMP OVER9 LDA EQT9,I NO MORE DATA IN USERS BUFFER! STA EQT10,I IT IS GONE!!! OVER9 LDA TEM11 IF NON CRT REQ. WE MUST COMPLETE SZA JMP REJ1 CONTINUE NOT CRT REQ. * JSB KEYBD ENABLE KEYBOARD IF LOCKED LDA EQT6,I RAR SLA,RSS IF WRITE OR CONT. THEN SEND NULL JMP REJ1 THIS IS A CRT READ CLA SEND NULL TO ALLOW CHAR. OUT OF UART JSB OUT1 JMP EOOP1 ADR27 DEF EQT27 EQT1 NOP EQT4 NOP EQT5 NOP EQT6 NOP EQT7 NOP EQT8 NOP EQT9 NOP EQT10 NOP EQT11 NOP EQT13 NOP EQT14 NOP EQT27 NOP EQT28 NOP EQT29 NOP EQT30 NOP EQT31 NOP EQT32 NOP EQT33 NOP EQT34 NOP EQT35 NOP EQT36 NOP EQT37 NOP * * TEMPORARY STORAGE FOR EQT27 TO EQT35 * SUP * * A EQU 0 DEFINE A REG. B EQU 1 DEFINE B REG. * * * * * *CONSTANT STORAGE ********** FILL NOP BINARY ASCII(SPACE = 0\40) TEMP1 NOP TEMP2 NOP HONEST MODE =2000 (NOT =0) TEMP4 NOP REQUEST TYPE (1-3 TEMP8 NOP ASCII DATA WORD TEM8 NOP TEMPORARY STATUS TEM10 NOP IN ASCIIYPE TEM11 NOP DEVICE TYPE(IN BINARY) TEM12 NOP TEM14 NOP COMPLETE DATA WORD ON CARD RDTYP NOP EQADR DEF EQTXX EQTXX BSS 176 ORG * END