MENT. / THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER / UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED / (WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH / SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL. / DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE / OR RELIABILITP I IEXIT5 /FOR CONTROL Z PROCESSING FROM OUTPUT SIDE ONLY. TAD (32-15 /^Z MINUS CR SNA JMP CRLF TAD (15-12 /CR-LF SNA CLA JMP I XMIT2 /DON'T PASS LF CHARACTERS TAD XMIT3 /HERE TO JMS XMIT6 JMP I XMIT2 CRLF, TAD (215 JMS XMIT6 TAD (212 JMS XMIT6 JMP I XMIT2 ALLSET, TAD ALL2 DCA ENTRY1 ALL2, JMP I IRENTRY /BEGIN PROCESSING. TEMPOINT, DEVINPUT / PARITY, OVERRUN, FRAMING, HARDWARE ERRORS DEVREC=6306 / LOAD RECEIVE BUFFER INTO AC DEVXMT=6316 / LOAD TRANSMIT BUFFER FROM AC DEVACC=6366 / ACCESS COMM CONTROLER INTERNAL REGISTER / NOTE:ODD/EVEN DATA FIELD DETERMINE WHAT INFORMATION / IS GOING TO BE READ. *0 7777 DEVICE COMM DEVICE COMM 0050 ENTRY&177+4000 0000 0000 *200 RENTRY, ZEROSW, / WHEN CLEAR, BUFFER IS BEING ZEROED PRIOR TO EXIT. BUFRFD, CDFXXX ISZ RXSWITCH / IF -1, FUNCTION IS XMIT JMP RECV0 / INPUT / TRANSMIT ROUTINES. THERE ARE NO "ERROR CONDITIONS" FOR OUTPUT. ALL TERMINATION / WILL RETURN TO CALLER AT +5 (NORMAL EXIT) WITH THE C(AC)=0. POSSIBLE RETURN / CONDITIONS ARE: 1) BUFFER IS EMPTY; 2) ^Z WAS FOUND IN BUFFER. A ^C WILL / RETURN TO MONITOR AT 7600. XON/XOFF IS RECOGNIZED FOR THE OUTPUT DEVICE. XMIT, TAD CRCHAR / SEND ONE TIME CR TO MAKE BASIC HAPPY JMS I IXMIT6 DCA XMIT DCA XMIT+1 XMIT1, ISZ WRDCNT JMP XMIT1A EXIT5, TAD ZEROSW SZA CLA ISZ ENTRY XITFLD, CDFIFX JMP I ENTRY XMIT1A, STL RTL RTL SPA JMP XMIT1B / FOR CHAR3 DCA CHAR3 CDF1, CDFXXX TAD I BUFRPT JMS I IXMIT CDF2, CDFXXX TAD I BUFRPT ISZ BUFRPT 7400 / SERVES AS A NOP TO PROTECT ISZ AND .-1 CLL RAL TAD CHAR3 JMP XMIT1A+1 XMIT1B, JMS I IXMIT JMP XMIT1 / FOR ANOTHER PASS CDFCIF, CDF CIF 0 K3700, 3700 CRCHAR, 15 IXMIT, XMIT2-PAGE2 IXMIT6, XMIT6-PAGE2 IDEVINPUT,DEVINPUT-PAGE2 / INPUT ROUTINES. ACCEPTS INPUT FROM THE DEVICE AND RETURNS 8-BIT ASCII / TO THE CALY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY / DIGITAL. VERSION="B&77^100+61 NOCHK= 0 / 0 = No ctrl c test, 1 = test AC0004=CLA CLL IAC RTL AC100=CLA IAC BSW AC4000=CLA STL RAR ACM2=CLL CLA CMA RAL BSW=7002 XON="Q&77 XOFF="S&77 CDFXXX=HLT CDFIFX=HLT DEVSKP=6301 / SKIP ON FOLLOWING COMM CONDITIONS / TRANSMIT FLAG / RECEIVE FLAG 5-12) SNA CLA JMP RECV1 / DON'T PASS LINE FEEDS ISZ BUFRPT / UPDATE BUFFER POINTER ZMINCR, 32-15 ISZ WRDCNT JMP RECV1 / FOR THE NEXT JMP EXIT5 RECV6, ISZ ENTRY / SINCE A "CLEAR" ZEROSWITCH WON'T BUMP IT FOR EXIT. DCA ZEROSW TAD XXOFF JMS I IXMIT6 / SEND XOFF AFTER CR ISZ BUFRPT LF, 12 / (LINEFEED; USED TO PROTECT ISZ) TAD LF CDF4, CDFXXX DCA I BUFRPT ISZ BUFRPT XXOFF, XOFF JMP ZMINCR XXON, XON WRDCNT, 0 K70, 70 BUFRAD, 0 BUFRPT, 0 RXSWITCH, CHAR3, 0 MINZ, -32 / -^Z CRMLF, 15-12 / TRAILING DATA BLOCK FOR HANDLER CALL: / WORD 1 FUNCTION WORD _ _ _ ! _ _ _ ! _ _ _ ! _ _ _ / ! \ / FIELD UNUSED / 4000= WRITE DOUBLE OF IN / 0000= INPUT WORDS ^100 BUFFER OS/78 / WORD 2 ADDRESS OF BUFFER / WORD 3 STARTING BLOCK. IF 0, MAY DO SPECIAL INIT ROUTINES; / OTHERWISE IS IGNORED FOR THIS HANDLER / WORD 4 ERROR. IF AC IS POSITIVE, ERROR IS NOT CONSIDERED FATAL. / WORD 5 NORMAL RETURN. AC IS 0. *340 ENTRY, VERSION AC4000 / FORCE THE WRITE (OUTPUT BIT) INTO THE LINK IF TAD I ENTRY / PRESENT WHEN GETTING THE FUNCTION WLING PROGRAM BUFFER. INPUT CHARACTERS ARE SCREENED FOR A / ^Z, CR(LF). ^Z IS THE ONLY CHARACTER THAT WILL CAUSE / AN "ERROR" EXIT. THERE ARE NO FATAL ERRORS. ^Z AND CR WILL ECHO CRLF, PAD / THE CALLING PROGRAM BUFFER WITH ZERO BEFORE EXITING. RECV0, TAD WRDCNT CLL IAC RAL / INPUT RETURNS 1 8BIT PER 1 12BIT WORD TO CALLER. DCA WRDCNT TAD XXON JMS I IXMIT6 RECV1, TAD ZEROSW / WHEN ZERO, WE ARE PADDING USER BUFFER PRIOR TO EXIT. SZA CLA JMS I IDEVINPUT / GET A CHARACTER FROM INPUT. CDF3, RECV1A, CDFXXX DCA I BUFRPT / RETURNS 8BIT ASCII. TAD I BUFRPT / USE THE CALLING BUFFER FOR TEMP STORAGE. TAD MINZ / -^Z (-32) SNA JMP XITFLD / ^Z FOUND EXIT TAD ZMINCR / ^Z-CR (32-15) SNA JMP RECV6 / CARRIAGE RETURN TAD CRMLF / CR-LF (1CA BUFRAD TAD BUFRAD DCA BUFRPT / WILL HAVE CURRENT POSITION OF USER'S BUFFER. ISZ ENTRY / SKIP THE BLOCK NUMBER (THIS IS NON-FILE STRUCTURED) ISZ ENTRY / AND LEAVE RETURN POINTING TO ERROR. RDF / DATA FIELD IS SET TO CALL; INSTRUCTION FIELD IS HERE. TAD CDFCIF DCA XITFLD / WHEN EXITING, IF/DF IS SET TO CALLING ROUTINE. TAD BUFRFD DCA CDF1 TAD BUFRFD DCA CDF2 TAD BUFRFD DCA CDF3 TAD BUFRFD DCA CDF4 CDF0, CDF 0 / FALL THRU TO NEXT PAGE FOR INDIRECT ADDRESS ADJUSTMENT PAGE / PROCEDURE FOR ADJUSTING THE ABSOLUTE ADDRESSES OF INDIRECT LOCATIONS: / THIS HANDLER IS ASSEMBLED WITH A STARTING LOCATION OF 200. THIS IS PARTLY / ARBITRARY AND PARTLY BECAUSE OF THE REQUIREMENTS OF THE BUILD PROGRAM. / A "MARK" IS ESTABLISHED TO BE USED DURING ASSEMBLY TIME TO SET THE VALUE / OF THE INDIRECT ADDRESS POINTERS TO THE RELATIVE DIFFERENCE BETWEEN THE / POINTER AND THE ROUTINE REQUESTED. FOR CONVENIENCE, THIS MARKER IS CALLED / "PAGE2" AND IS ESTABLISHED AT THE TOP OF THE SECOND PAGE. THE ADJUSTMENT / ROUTINE FINDS THE BASE ABSOLUTE ADDRESS FROM THE "JMS ." THEN ADDS IT / TO THE THE VALUE IN "DIFFORD. MUST BE AND K70 / PRESERVED WHILE FETCHING REST OF DATA BLOCK. TAD CDF0 DCA BUFRFD / GET THE FIELD OF THE BUFFER SZL STA DCA RXSWITCH / 0=RECEIVE; -1=XMIT TAD K3700 / AND THE "DOUBLE WORDS". FOR OUTPUT, WILL REPRESENT AND I ENTRY / 2 PACKED WORDS OF 3 ASCII CHARS. IF INPUT, WILL BE CMA / DOUBLED TO COUNT 1 8BIT CHARACTER FOR EACH 12BIT WORD. / NOTE: OS/8 ROUTINES CAN REQUEST THE PROCESSING OF A / NULL BUFFER (ZERO DOUBLE WORDS). IF SOME SPECIAL / ACTION IS REQUIRED, E.G. WRITING EOF OR DOING FORM / FEED, THE WORD COUNT WILL BE ZERO. THIS HANDLER MAY / OR MAY NOT HAVE SPECIAL FUNCTIONS, DEPENDING UPON / ASSEMBLY SPECIFICATIONS. DCA WRDCNT ISZ ENTRY TAD I ENTRY / GET THE STARTING ADDRESS OF THE BUFFER. D IXMIT6-PAGE2 IDEVINPUT-PAGE2 XMIT3, IEXIT5-PAGE2 XOFFLAG,IRENTRY-PAGE2 XMIT2, 0 / SCREEN CHARACTER BEFORE OUTPUT AND (177 DCA XMIT3 / SAVE CHARACTER. XMIT2B, JMS DEVIN1 / CHECK DEVICE FOR XON/OFF SNA JMP XMIT2D / NO FLAG TAD (-XON / IS IT XON SNA / NO JMP XMIT2A / YES TAD (XON-XOFF / IS IT XOF SNA CLA / NO JMP XMIT2C / YES, SET XOFF FLAG XMIT2D, ISZ XOFFLAG / WORKING ON XOFF ALREADY? JMP XMIT2A / NO. IGNORE THE INPUT XMIT2C, STA / [RE]SET THE FLAG DCA XOFFLAG JMP XMIT2B / AND KEEP LOOKING. XMIT2A, DCA XOFFLAG / KEEP CLEARED WHEN NOT WORKING ON XOFF. TAD XMIT3 TAD (-32 SNA JMP I IEXIT5 / FOR CONTROL Z PROCESSING FROM OUTPUT SIDE ONLY. TAD (32-15 / ^Z MINUS CR SNA JMP CRLF TAD (15-12 / CR-LF SNA CLATABLE". THE CONTENTS OF DIFFTABLE ARE THE / RELATIVE DIFFERENCES BETWEEN PAGE2 AND THE INDIRECT ADDRESS POINTERS TO / BE MODIFIED. THIS DIFFERENCE PLUS THE BASE ABSOLUTE ADDRESS FORMS AN / ABSOLUTE POINTER TO THE ADDRESS TO BE MODIFIED. THE CONTENTS OF THE AD- / DRESS TO BE MODIFIED IS ALSO THE RELATIVE DIFFERENCE BETWEEN THE MARK / AND THE ADDRESS DESIRED. USING THE TEMPORARY ABSOLUTE POINTER, THIS DIF- / FERENCE IS ADDED TO THE BASE ADDRESS THEN RESTORED TO THE INDIRECT / POINTER AS AN ABSOLUTE VALUE. ENTRY1, NOP / GETS JMP I IRENTRY AFTER INIT. PAGE2A, JMS . / TO FIND OUT WHERE WE ARE. LEAVE 2A SO WE CAN MOVE. PAGE2, ADJUST, TAD DIFFTABLE SNA JMP ALLSET TAD PAGE2A / AS THE BASE. DCA TEMPOINT TAD I TEMPOINT TAD PAGE2A DCA I TEMPOINT ISZ ADJUST JMP ADJUST XMIT6, 0 CDF 0 DEVXMT / SEND CHARACTER JMS COMCHK / WAIT FOR XMIT FLAG JMP .-1 / HANG IT XMIT6A, TAD (50 / SHOULD RETURN HERE BY HARD JUMP DEVACC / 50 = CLEAR TRANSMITTER FLAG JMS DEVCLR / NOW CLEAR INTERRUPT CONDITION JMP I XMIT6 IEXIT5, EXIT5-PAGE2 IRENTRY,RENTRY-PAGE2 DIFFTA, IXMIT-PAGE2 / SET UP CROSS PAGE LINKAGEDEVACC OS8MON, 7600 JMP I DEVCLR CHKTTY, 0 IFNZRO NOCHK < KSF > IFZERO NOCHK < NOP > JMP I CHKTTY KRB TAD (-3 /IS IT A CTRL C DMII IS ALWAYS 7 BIT SZA CLA JMP I CHKTTY CDF CIF 0 JMP I OS8MON /BEFORE EXITING TO MONITOR