MAL 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/COM1.PA /ORIGN SERIAL.PA /COPYRIGHT (C) 1981, 1982,1984 BY DIGITAL EQUIPMENT CORPORATION /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT. /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 RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY /DIGITAL. VERSION="B&77^100+63 / VER B3 NOCHK=0 / 0 = No ctrl c check, 1 = check AC0004=CLA CLL IAC RTL AC100=CLA IAC BSW AC4000=CLA STL RAR ACM2=CLL CLA CMA RAL BSW=7002 XON="Q&277 XOFF="S&277 CDFXXX=HLT CDFIFX=HLT RECEIVE=34 TRANSMIT=RECEIVE+1 XMTSKP=TRANSMIT^10+6001 XMTLOD=TRANSMIT^10+6006 RECSKP=RECEIVE^10+6001 RECLOD=RECEIVE^10+6006 *0 7777 DEVICE COM1 DEVICE COM1 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 (NORUSED TO PROTECT ISZ) TAD LF DCA I BUFRPT ISZ BUFRPT XXOFF, XOFF JMP ZMINCR XXON, XON WRDCNT, 0 K70, 70 BUFRAD, 0 BUFRPT, 0 RXSWITCH, CHAR3, 0 MINZ, -232 /-^Z CRMLF, 15-12 / TRAILING DATA BLOCK FOR HANDLER CALL: / WORD 1 FUNCTION WORD _ _ _ ! _ _ _ ! _ _ _ ! _ _ _ / ! \ / FIELD UNUSED / 4000= WRITE DOUBLE OF IN / I ENTRY XMIT1A, STL RTL RTL SPA JMP XMIT1B /FOR CHAR3 DCA CHAR3 TAD I BUFRPT JMS I IXMIT 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, 215 IXMIT, XMIT2-PAGE2 IXMIT6, XMIT6-PAGE2 IDEVINPUT,DEVINPUT-PAGE2 /INPUT ROUTINES. ACCEPTS INPUT FROM THE DEVICE AND RETURNS 8-BIT ASCII /TO THE CALLING 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. RECV1A, DCA I BUFRPT /RETURNS 8BIT ASCII. TAD I BUFRPT /USE THE CALLING BUFFER FOR TEMP STORAGE. TAD MINZ /-^Z (-232) SNA JMP XITFLD /^Z FOUND EXIT TAD ZMINCR /^Z-CR (32-15) SNA JMP RECV6 /CARRIAGE RETURN TAD CRMLF /CR-LF (15-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, 212 /(LINEFEED; 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. *350 ENTRY, VERSION AC4000 /FORCE THE WRITE (OUTPUT BIT) INTO THE LINK IF TAD I ENTRY /PRESENT WHEN GETTING THE FUNCTION WORD. 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. DCA 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. 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 "DIFFTABLE". 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 TAD (400 XMTLOD XMTSKP JMP .-1 OS8MON, 7600 /USE A GROUP 2 CLA TO GET THE MONITOR RETURN POINT. JMP I XMIT6 IEXIT5, EXIT5-PAGE2 IRENTRY,RENTRY-PAGE2 DIFFTA, IXMIT-PAGE2 /SET UP CROSS PAGE LINKAGE IXMIT6-PAGE2 IDEVINPUT-PAGE2 XMIT3, IEXIT5-PAGE2 XOFFLAG,IRENTRY-PAGE2 XMIT2, 0 /SCREEN CHARACTER BEFORE OUTPUT AND (177 TAD (200 DCA XMIT3 /SAVE CHARACTER. JMS CHKTTY XMIT2B, JMS DEVIN1 /CHECK DEVICE FOR XON/OFF SNA JMP XMIT2D /NO FLAG TAD (-XON SNA JMP XMIT2A TAD (XON-XOFF SNA CLA JMP XMIT2C /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 (-232 SNA JM,0 JMS CHKTTY JMS DEVIN1 SNA JMP DEVINPUT+1 /WAIT HERE FOR SOME INPUT JMP I DEVINPUT DEVIN1, 0 RECSKP JMP I DEVIN1 /NO FLAG. RECLOD SNA /FILTER NULLS JMP DEVIN1+1 AND (177 TAD (200 JMP I DEVIN1 /WITH 8BIT. CHKTTY, 0 IFNZRO NOCHK < KSF > IFZERO NOCHK < NOP > JMP I CHKTTY KRB AND (177 TAD (-3 /IS IT A CTRL C SZA CLA JMP I CHKTTY CDF CIF 0 JMP I OS8MON /BEFORE EXITING TO MONITOR