*20 /PDP-12 DISK-PIP / / / / / PMODE / / / / EJECT / / DIAL PHERIPERAL INTERCHANGE PROGRAM FOR THE PDP-12 COMPUTER. / COPYRIGHT 1969; DIGITAL EQUIPMENT CORPORATION, MAYNARD MASS.,01754 / WRITTEN BY JACK BURNESS / RELEASED NOVEMBER, 1969. / UPDATED TO DIAL-MS MARCH, 1970. / UPDATED FOR CHAINING MAY 14,1970 / UPDATED FOR MULTIPLE RK08S 8/12/70 / / / PIP WILL RUN ON A PDP-12 B OR HIGHER. / / / / / / / / / / / / / / / / / / / / PPPPPPPPP IIIIIIIIIIII PPPPPPPPP / P PP II P PP / P PPP II P PPP / P PP II P PP / PPPPPPPPP II PPPPPPPPP / P II P / P II P / P II P / P II P / P IIIIIIIIIIII P / / / / / / / / / / / / / EJECT *0 /MAJOR PAGE 0 LOCATIONS. / / / / 0 /RESERVED FOR JMP S IN L MODE. LOC1, 0 /USED BY DISPLAY ROUTINE. TAPE=JMS I . TTAPE HPOP=JMS I . HHPOP HPUSH=JMS I . HHPUSH LEADER=JMS I . LLEDER FILEC=JMP I . FFILEC PUTL=JMS I . TTYPUT / / *10 AUTO1, 0 /AUTO REGISTER 1 AUTO2, 0 AUTO3, 0 AUTO4, 0 AUTO5, 0 AUTO6, 0 AUTO7, 0 AUTO8, 0 / / / / / / / RF08=1 /SET THIS SWITCH TO 1 IF YOU WANT /THE RF08 DISK HANDLER ASSEMBLED INTO PIP. /ELSE SET THE SWITCH "RF08" TO 0. / / DISKWORK=0001 /SET THIS SWITCH TO 0 IF YOU DO NOT WANT PIP TO /AUTOMATICALLY USE THE RF08 DISK FOR /THE BINARY AND SOURCE SCRATCH AREAS; IF AN RF08 DISK IS PRESENT. / / / / / / / CARD=1 /SET THE CARD=1 TO CARD READER AND LINE PRINTER. / ELSE SET CARD TO 0. / / TERMC=00 /SET TO LOOK OR A 00 AS THE EOF CHAR. / REMAKE=0 /DO NOT LOAD IN THE SOURCE FILE CONVERTER. / REMAKE WAS ORIGINALLY 1 BUT THE CONVERT ROUTINES NO LONGER ARE NEEDED. / ECHO=1 /SET THIS SWITCH TO 0 TUPPRESS ECHOING. / / / PFLICK=1 /SET THIS SWITCH TO ONE TO CAUSE DISPLAY /CHARACTERS TO ALTERNATE RANDOMLY BETWEEN /CHANNELS 1?2. MAY BE SET TO ZERO /TO PICK UP SPACE ON PAGES IF NEEDED, WITH /NO ILL EFFECTS NOTED. A FRILL ONLY. / / / / / / / STAR20=1 /SET TO 1 IF YOU WANT TO HAVE A "*20" AT THE BEGINNING OF EVERY FILE. / ELSE SET STAR20 TO 0000/ / / / / / / / DIALBOOT=300 /WHERE TO REREAD IN DIAL FROM DIALSYS=300 /START OF FIRST BLOCK OF SYSTEM ABOVE FREE BLOCKS. SYSWT=467 /LAST BLOCK OF DIAA WORK AREA. TINDEX=346 /TAPE INDEX BLOCK TILEN=2 /NUMBER OF BLOCKS IN INDEX TLOWER=0 /FIRST BLOCK TO USE TUPPER=777 /LAST BLOCK TO USE TSYSLOWER=270 /START OF SYSTEM TSYSUPPER=467 /LAST BLOCK OF SYSTEM. SYSBBLOCK=370 /START OF BINARY WORK AREA. SYSBIN=0001 /BINARY SCRATCH UNIT. ASMIFZ RF08?DISKWORK /WHAT IS SPECIAL DISK UNIT SYSBSP=0001 /NO SPECIAL SCRATCH UNITS. ASMIFN RF08?DISKWORK /HOW ABOUT NOW??? SYSBSP=0011 /DEFINE PRIMARY SCRATCH AS DISK (INIT WILL DECIDE REST OF STORY) SYSSBLOCK=370 /START OF ASCII WORK AREA. SYSHDR=447 /BINARY HEADER BLOCK FOR "SB"2 COMMAND" / / / / / / / SOME BASIC DEFINITIONS / / / / ZERO=CLA PONE=ZERO+1 /(AWWWW) PTWO=PONE+4+100 /CLA CLL IAC RAL PTHREE=PTWO+20 /CML PFOUR=PTWO+2 /(AWWW) PSIX=PTHREE+2 /RTL MONE=CLA CMA MTWO=CLA CLL CMA RAL MTHREE=CLA CLL CMA RTL LEFT=000 /POINTER TO STARTING LEFT OF SCREEN TOP=340 /POINTER TO TOP OF SCREEN BOTTOM=-400 /SCREEN BOTTOM / / ASMIFZ CARD-1 /IF CARD READER IS IN BUFFER=6400 /SET THE BUFFER TO 6400 ASMIFN CARD-1 /IF NO CARD READER BUFFER=6000 /THEN SET TR TO 6000 / IN ANY EVENT BUFFER MUST BE A MULTIPLE OF 400 OCTAL WORDS. / / L20, 20 M10, -10 L7770=M10 M4, -4 M20, -20 L77, 77 L100, 100 L200, 200 M322, -322 L4000, 4000 L5000, 5000 L6000, 6000 L7000, 7000 L7757, 7757 L60, 60 L700, 700 M12, -12 L400, 400 L54, 54 M54, -54 M60, -60 M70, -70 M73, -73 M77, -77 L7777, 7777 M32, -32 L333, 333 M34, -34 L7700, 7700 L10, 10 L4, 4 L7740, 7740 M40=L7740 M5757, -5757 L7, 7 L30, 30 M43, -43 M6, -6 L7400, 7400 M400=L7400 / / TEMP, 0 TEMP1, 0 TEMP2, 0 TEMP3, 0 TEMP4, 0 / KEYCHAR,0 CNTRLZ, 0 /CONTAINS THE CONTROL Z SWITCH. BNUM, 0 DFIRST, 0 PMORE, MORE BWORD1, 0 BWORD2, 0 BDELZ, 0 /0=DONT DELETE ZEROS; NOT ZERO=DELETE ZEROS FROM BINARY OUTPUT / INBLOCK,0 INUNIT, 0 OUTBLOCK,0 OUTUNIT,0 OUTNUM, 0 / BFLAG1=INBLOCK BFLAG2=OUTBLOCK BOLDP=INUNIT BCHAR=OUTUNIT / / / / ASMIFZ RF08-1 /IF RF08 [RK08] DESIRED RKDRIV, 0 /INSERT WORD FOR UNIT NUMBER IN PAGE 0 / / / INDEX, TINDEX ILEN, TILEN ELOWER, TLOWER EUPPER, TUPPER CLOWER, TSYSLOWER CUPPER, TSYSUPPER / L5757, 5757 FSIZE, 0 FUNIT, 0 FTYPE, 0 FBNUM, 0 FWHAT, 0 FNAME, 7777 7777 7777 7777 / / ORIGIN, 0 DATA, 0 BTEMP1, 0 BTEMP2, 0 BTEMP3, 0 BFIELD, 0 BOLDO, 0 BOFIELD,0 BCOUNT, 0 / / COUNT, 0 L177, 177 M215, -215 M212, -212 M377, -377 M240, -240 M340, -340 / / / ROR6=JMS I . /SUBROUTINE ROTATES AC RIGHT 6 PLACES RSIX DISPLAY=JMS I . PPDIS PIP=JMP I . PIPPIP DIAL=JMP I . EXIT COPY=JMS I . CCOPY SETA=JMS I . ASET GETA=TAD I AUTO8 CHECKIO=JMS I . IOCHECK ASMIFZ ECHO /ECHOING DESIRED? ASMSKP 2 /NOPE. DON T ASSEMBLE CRLF PROCESS IN. CRLF=JMS I . TTYCR GETL=JMS I . TTYGET LINE=JMS I . GLINE DECODE=JMS I . DDCODE SYSERR=HLT DIRECTORY=JMS I . DYRECT MOVE=JMS I . MMOVE POP=JMS I . PPOP PUSH=JMS I . PPUSH NO=JMS I . NODIS REPLACE=JMS I . REPDIS READ=JMS I . TREAD WRITE=JMS I . TWRITE SEARCH=JMS I . SSERCH AUXIN=JMS I . SEQIN AUXOUT=JMS I . SEQOUT PUTWORD=JMS I . BBOUT ASMIFZ RF08 /DO WE WANT THE RF08 ROUTINES LOADED? ASMSKP 2 /NO. SKIP PAST THE DEFINITIONS. DISC=JMS I . RFDISK / / / / / / / EJECT / / / / / / / P I P C E N T R A L L O O P / / / / *200 / / / / / PIPPIP, JMS RESTART /RESTART I-O DEVICES, CLEAN UP SYSTEM, ETC. ASMIFN ECHO /DO A CRLF ONLY IF ECHOING. CRLF /GIVE INITIAL CARRIGE RETURN LINE FEED. PIPL, DECODE /DISPLAY OPTIONS MAINDIS /FROM MY LIST OF GOODIES. SEARCH /LOOK FOR LEAGAL OPTIONS PIPLST /LIST OF PIP OPTIONS PIPGO /WHERE TO GO IF FOUND JMP PIPL /NOT A LEGAL REQUEST. / / / PIPLST, 301 /A=ABSOLUTE MODE 302 /B=BINARY MODE 4323 /S=SOURCE MODE, 4000=END LIST / PIPGO, ABSOL /ABSOLUTE HANDLER. BINARY /POINTER TO BINARY HANDLER ASCII /SOURCE HANDLER / / / / / RESTART,0 JMS I SAVEST /SAVE RK08STATUS BEFORE ZAPPER. MONE /SET UP COPIER FOR 1 COPY DCA OUTNUM /-NUMBER OF OUTPUT TAPES FOR COPY INITOV, JMS I FCORE /ALLOCATE CORE NOW. THIS IS LATER A "TAD M40". DCA 0 DISPLAY /JUST WAIT A SECOND. MAINDIS ISZ 0 JMP .-3 /NOT DONE YET DCA KEYCHAR /NO NEW CHAR. LINC /ENTER LINC MODE LMODE ADD L20 /GET THE I/O PRESET BIT ESF /AND DO AA I/O PRESET PDP PMODE 6026 JMS I RESTST /FIX UP RK08 NOW, IF NECESSARY. TLS /FIX UP THE TELEPUNCH NOW BY GIVING A PHOONEY CHARACTER. / LP08O1, ASMIFZ CARD-1 /SHOULD WE INITIALIZE PRINTER??? LCB /YEP. CLEAR THE PRINTER BUFFER AND SET THE FLAG SO IT LL BE READY IF WE NEED IT. / MOVE /ZERO UPPER CORE BY A HIDEOUS MOVE. BUFFER-1 BUFFER ASMIFZ RF08 /IF NO RF08 ZERO ALL OF CORE -BUFFER ASMIFN RF08 /IF AN RF08 PRESENT ZERO ONLY BUFFER-7377 -BUFFER-400 JMP I RESTART / / / EXIT, JMS RESTART /RESTART DIAL OVEREX, MOVE /PLACE DIAL RESTART INSTRUCTIONS READIN EXITLOC,4020-READEN+READIN /IN PROPER PLACE FOR REBOOTSTRAP. READEN-READIN /BOOTSTRAP IS 4 WORDS LONG JMP I EXITLOC /RETURN TO DIAL / / READIN, LINC /MAIN BOOTSTRAP. LMODE /GET INTO LINC MODE FOR REBOOTSTRAP LDF 3 /MAKE SURE DATA FIELD IS SET AT 3 RCG /READ GROUP 7\DIALBOOT /FROM 300. PMODE /RESUME 8 MODE DEFINITIONS READEN=. / / / / / / SAVEST, STATSV /POINTER TO RK08 SAVER RESTST, STATRS /POINTER TO THE RK08 FIXER. / / / / / / / / / / / / FCORE, COREF /POINTER TO CORE INITIALIZER ROUTINE. / / / / / / / / / / / / / / MAINDIS,LEFT+240 TOP-200 TEXT "FPIP OPTIONS: HA --- AUXILIARY MODE HB --- BINARY MODE HS --- SOURCE MODE\" / / / / / / / SSERCH, 0 /COMPARES "FTYPE" AGAINST GIVEN LIST. CLA CLL /CLEAR AC TO BE SURE TAD I SSERCH /GET POINTER TO USER LIST DCA TEMP /AND STOORE AWAY ISZ SSERCH /BOP PAST FIRST ARG. TAD I SSERCH /GET JMP LIST DCA TEMP1 /STORE POINTER N TEMP1 ISZ SSERCH /BOP PAST SECOND ARG FOR RETRUN. / SSLOOP, TAD I TEMP /GET NEXT WORD TO COAMPARE SPA /IF POSIITIVE SKIP TAD L4000 /NEGATIVE. LAST CHAR. MAKE POSIITIVE FOR CHECK. CIA TAD FTYPE /DOES IT EQUAL CONTENTS O F FTYPE SZA CLA JMP SSNO /NO. TEST FOR END TAD I TEMP1 /YES. GET FOUND RETURN ADDRESS DCA TEMP JMP I TEMP /AND GO THERE / SSNO, ISZ TEMP1 /BOP UP JUMP TABLE POINTER TAD I TEMP /WAS THIS LAST CHARACTER? SPA CLA JMP I SSERCH /YEP. IT S NEGATVIE ISZ TEMP /NOP. BOP UP CHAR POINTER AND TRY AGAIN JMP SSLOOP /BACK UP TO TRY NEXT. / / / / / / / / / / ASMIFZ ECHO /DO WE WANT ECHOING??? ASMSKP 12 /NOPE. CR NEVER CALLED, SO DO NOT PUT IT IN. / TTYCR, 0 TAD M215 /GET A C.R. IN THE AC. CIA PUTL /AND AWAY IT GOES TAD M212 /N THE L.F. CIA PUTL /AND AWAY IT GOES JMP I TTYCR /AND RETURN TO CALLER. / / / / / / / / / / / EJECT *400 / DISPLAY CHARACTER TABLE. / TABLED=. / 7777 /00=ILLEGAL 7777 4477 /01=A 7744 5177 /02=B 2651 4136 /03=C 2241 4177 /04=D 3641 4577 /05=E 4145 4477 /06=F 4044 4136 /07=G 2645 1077 /10=H 7710 7741 /11=I 0041 4142 /12=J 4076 1077 /13=K 4324 0177 /14=L 0301 3077 /15=M 7730 3077 /16=N 7706 4177 /17=O 7741 4477 /20=P 3044 4276 /21=Q 0376 4477 /22=R 3146 5121 /23=S 4651 4040 /24=T 4077 0177 /25=U 7701 0176 /26=V 7402 0677 /27=W 7701 1463 /30=X 6314 0770 /31=Y 7007 4543 /32=Z 6151 4177 /33=[ 0000 7777 /34=ILLEGAL 7777 0000 /35=] 7741 2000 /36=^ 2076 7777 /37=ILLEGAL 7777 0000 /40=SPACE 0000 7500 /41=! 0000 7000 /42=" 0070 7777 /43=ILLEGAL 7777 5721 /44=DOLLAR SIGN 4671 6661 /45=PER CENT SIGN 4333 5166 /46=? 0526 0000 /47=TAB 0000 3600 /50=( 0041 4100 /51=) 0036 2050 /52=* 0050 0404 /53=+ 0437 0500 /54=, 0006 0404 /55=- 0404 0001 /56=. 0000 0601 /57=/ 4030 4536 /60=0 3651 2101 /61=1 0177 4523 /62=2 2151 4122 /63=3 2651 2414 /64=4 0477 5172 /65=5 0651 1506 /66=6 4225 4443 /67=7 6050 5126 /70=8 2651 5122 /71=9 3651 2200 /72=: 0000 4601 /73=; 0000 1000 /74=< 4224 1212 /75== 1212 2442 /76=> 0010 4020 /77=? 2055 / / / EJECT *600 / / / DISPLAY ROUTINE / / GENERAL CALL: / / DISPLAY / PTEXT / WHERE PTEXT POINTS TO THE FOLLOWING: / /PTEXT, XCOOR. / YCOOR / TEXT "F THIS IS MY MESSAGE\" / / PPDIS, 0 /MAIN ENTRY PINST1, CLA CLL /CLEAR AC. CHECKIO /CHECKIO FOR IO NOW AND AFTER EVERY C.R. TAD I PPDIS /GET MAIN POINTER DCA PDIS /AND PLACE IN TEMP POINTER. ISZ PPDIS /PAST POINTER ON RETURN. TAD I PDIS /GET POINTER DCA PHOR /X POS ISZ PDIS /BOP UP TAD I PDIS /GET VERTICAL PDCAVR, DCA PVER /AND STASH AWAY. TAD PDIS /START OF TEXT DCA PSTART /BOP DOWN BY 1 MONE /SET SWITHC TO LEFT OF NEXT WORD. DCA PSWITCH TAD PINST1 /GET A CLA FOR FIRST TIME THROUGH. DCA PNOT1 /AND STORE SO NO VERTICAL BOP. / PPSTART,JMS PGETL /GET NEXT CHAR FROM TEXT. MONE /SET CHAR SIZE TO HALFWORD DCA PCSW /IN CASE OF NO F OR H. TAD PCHAR /GET IN AC. TAD M10 /IS IT AN "H" SNA CLA /IF IT IS,SKIP PAST AND IGNORE. JMP PPAST /ITS AN "H" TAD PCHAR TAD M6 /IS IT AN "F" SZA CLA JMP PDO /NOT AN "F" OR AN "H". USE IT AS A CHAR IN HALFWORD. DCA PCSW /SET SIZE TO FULL. PPAST, JMS PGETL /GET FIRST CHAR TO BE DISPLAYED. PDO, TAD PCSW /GET SIZE. SNA CLA /IS IT FULL SIZE. TAD M4 /YES. SET BACK LEFT BY 8. TAD M4 / IF HALF SET IT BACK BY 4. TAD PHOR DCA LOC1 /THIS IS A REAL LOC1(0001) TAD PCSW /GET SIZE SNA CLA /FULL? TAD M20 /YES. BOP DOWN BY 40, NOT 20 TAD M20 /M20 IF HALF SIZE TAD PVER PNOT1, DCA PVER /MADE A CLA FOR THE FIRST TIME THROUGH TAD PDCAVR /GET CORRECT INST. DCA PNOT1 /SET UP FOR FUTURE CALLS. TAD PCSW /CHAR SIZE. CMA /COMPLEMENT BIT. AND L200 /BIT4 OF ESF LINC LMODE /GET INTO LINC MODE ESF /SET CHARS TO CORRECT SIZE PDP /BACK OVER INTO 8 MODE PMODE CLA /CLEAR THE AC BECAUSE THE SIZE IS STILL IN THE AC / PLOOP, TAD PCHAR /GET THE CHAR IN THE AC. CLL RAL /MULTIPLY BY 2. TAD PTABLE /POINTER TO DISPLAY TABLE. DCA AUTO7 /AUTO FOR PICKING UP THE DISPLAY CHARS. TAD PVER /GET THE VERTICAL IN THE AC. LINC /GO OVER TO LMODE AND START TO DISPLAY. LMODE DSC I AUTO7 /FIRST PART OF CHAR DSC I AUTO7 /SECOND PART OF CHAR. PDP PMODE /BACK INTO 8 MODE PTWO /GET A +2 IN THE AC TAD LOC1 /GET NEXT DISPLAY POINT. DCA LOC1 /AND BOP BY 1/2 CHAR. ASMIFN PFLICK /DO WE WANT TO ALTERNATE CHANNELS? JMS I PALT /YES. ADD IN RANDOM CHANNEL BITS NOW. JMS PGETL /GET ANOTHER CHARACTER. JMP PLOOP / AND DISPLAY IT. / PGETL, 0 /CHAR GETTER ROUTINE ISZ PSWITCH /IS IT LEFT HALF? JMP PRIGHT /GET CHARACTER ISZ PSTART /GET NEXT WORD TAD I PSTART /IN THE AC ROR6 /ROTATE LEFT HALF TO THE RIGHT HALF. JMP PCOM /GO DO THE AND. PRIGHT, MONE /RESET SWITCH DCA PSWITCH /FOR NEW WORD NEXT TIME. TAD I PSTART /WORD IN AC PCOM, AND L77 /JUST THE LOW ORDER BITS. DCA PCHAR /SAVE FOR LATTER USE. TAD PCHAR /BACK IN AC. TAD M34 /IS IT "\" SNA CLA JMP I PPDIS /YES! E X I T. TAD PCHAR /GET IT AGAIN TAD M43 /IS IT A CR. SZA CLA JMP I PGETL /NO. RETURN. CHECKIO /CHECK I/O FLAGS AND SERVICE. JMP PPSTART /RESET TO START NEXT LINE. / / ASMIFN PFLICK /IF ALTERNATING CHANNELS STICK IN POINTER NOW PALT, POTHER /POINTER TO THE FLICKERER PDIS, 0 /TEMPORARY POINTER PHOR, 0 /HORIZONTAL COORDINATE PVER, 0 /VERTICAL COORDINATE PSTART, 0 /POINTS TO NEXT TEXT WORD. PSWITCH,0 /0=GET RIGHT HALF,-1=GET LEFT HALF OF NEXT WORD. PCHAR, 0 /CONTAINS NEXT TEXT CHARACTER. / / / / DDCOM, 0 /DECODE CALLS THIS ROUTINE TO GET A CHAR FROM PGETL JMS PGETL /GET A CHAR. TAD PCHAR /PLACE IN AC. JMP I DDCOM /RETURN. / / IOCHECK,0 /CHECKS IO DEVICES. CLA CLL KSF /IS IT KEYBOARD? JMP I IOCHECK /NOPE. RETURN. PTABLE, TABLED-1 /POINTS TO THE DISPLAY TABLE-1 / /NOW CHECK TO SEE IF PREVIOUS INSTRUCTION /WAS AN "AND" SO THAT ITS EFFECTIVELY A NOP. /IT IS NECESSARY BECAUSE DOUBLE IOTS /CAN SCREW UP THE DATA BREAK TRANSFER. /SINCE THE AC IS ZERO, AN AND CAN BE NO WRONG / ASMIFN TABLED-1?7000 /CHECK FOR AN AND CONDITION. ERROR HAS OCCURRED /AND IF NOT AN AND, THEN GIVE AN ASSEMBLY ERROR MESSAGE /THE ASSEMBLY ERROR MESSAGE WILL LET THE GUY KNOW SOMETHINGS WRONG / RKBTST, KRS /READ IN THE FLAG BUT DON T TURN OFF THE FLAG. TAD IOCD /IS IT A CONTROL D SNA /???? DIAL /YEP. RESTART DIAL TAD IOCP /HOW ABOUT A CONTROL P SNA CLA /???? PIP /YEP. RESTART PIP. TAD KEYCHAR /DO WE HAVE A CHARACTER IN BUFFER????? SMA KRB /READ IN NEW CHAR IF NONE THERE RAL CLL CML RAR /TURN ON SIGN BIT. DCA KEYCHAR /STASH AWAY. JMP I IOCHECK /ALL DONE. RETURN TO CALLER / / / IOCD, -204 /CONTROL D IOCP, -220+204 /CONTROL P MINUS CONTROL D / / / / / / / / / / RSIX, 0 /THIS LITTLE ROUTINE ROTATES THE AC SIX PLACES RIGHT RTR RTR RTR JMP I RSIX /RETURN. / / / / / / / / / / / / / / PCSW=DDCOM /A GOOD PLACE FOR THIS LOCATION / / / / / / / / / / / / / EJECT *1000 / / / ROUTINE TO GET A LINE FROM TTY. / / GENERAL CALL: / / LINE / PDIS / / WHERE PDIS POINTS TO THE STUFF TO BE DISPLAYED WHILE WAITING FOR A LINE OF INPUT. / / / / GLINE, 0 /MAIN ENTRY FPR LINE GETTER ROUTINE. TAD I GLINE /GET POINTER TO DISPLAY DCA G1 /AND SAVE IT. ISZ GLINE /SET UP RETURN. TAD G1 /GET POINTER DCA G2 /AND STASH IT IN THE SECOND LOOP. GCLEAR, DCA I GGNUM /CLEAR NUMBER OF CHARS TO ZERO. GMAIN, PONE /GET A +1 IN THE AC. TAD I GGNUM /GNUM+1, NEXT SPOT IN BUFFER. JMS GIN /STICKS NEXT CHARACTER INTO GNUM+1 0 /0=ILLEGAL=A SOLID BLOCK. PTWO /GET A PTWO INTO THE AC. TAD I GGNUM /NUMBER OF CHARS+2 JMS GIN /PUT A 34 AT END FOR DISPLAY ROUTINE. 34 / FORM. TAD GCOUNT /AN OSCILLATING NUMBER. DCA COUNT /GENERAL COUNT LOCATION. / GLOOP1, DISPLAY /DISPLAY CALLERS MESSAGE. G1, 0 /HIS POINTER HERE DISPLAY /NOW DO OUR LINE OF CRAP. GTEXT /POINTER TO OUR BUFFER. GETL /IS THERE A TTY CHAR? SKP /NO! JMS I GGINSERT /YES. PLACE IN BUFFER. ISZ COUNT /BOP UP FLICKER COUNT. JMP GLOOP1 /STILL GOOD. DISPLAY AGAIN. TAD GCOUNT /GET FLICKER COUNTER DCA COUNT /AND RESET TEMPORARY COUNTER. PONE /+1 TAD I GGNUM /SET A "\" AT END WITH NO BLOCK FLICKER. JMS GIN /PLACE IN BUFFER 34 GLOOP2, DISPLAY /NOW DISPLAY USERS MESSAGE. G2, 0 /HIS POINTER. DISPLAY /NOW OUR BUFFER GTEXT /BUFFER POINTER. GETL /TEST LOW READER. SKP /NO CHAR THERE JMS I GGINSERT /INSERT INTO BUFFER ISZ COUNT /DONE YET??? JMP GLOOP2 /NO. DISPLAY AGAIN. JMP GMAIN /RESET FLICKER POINTER. / / / GIN, 0 /PUTS A CHAR IN BUFFER TAD GMLEN /BASIC MESSAGE BEFORE USER DOES ANYTHING. DCA TEMP /SAVE CHARACTER NUMBER. TAD TEMP /GET CHARACTER NUMBER. CLL RAR /DIVIDE BY 2 TO GET WORD NUMBER. TAD GGTEXT /POINTER TO ACTUAL TEXT. DCA TEMP2 /AND STASH AWAY. TAD TEMP /REGET CHAR NUMBER. RAR /IS IT ODD OR EVEN. SNL CLA JMP GLEFT /EVEN. GET LEFT HALF. TAD I TEMP2 /GET RIGHT HALF AND L7700 /BLAH OUT RIGHT 6 BITS TAD I GIN /GET DESIRED SAVE CHAR. GINTO, ISZ GIN /BOP PAST CALLING CHAR. DCA I TEMP2 /AND STASH AWAY. JMP I GIN /RETURN. / GLEFT, TAD I GIN /GET THE DESIRED CHARACTER TO BE INSERTED CLL RTL /ROTATE TO BITS 0-5. CANNOT INSERT RTL /IN THE MIDDLE OF THE BUFFER. RTL JMP GINTO /AND GO STORE AWAY THE WORD. / / GGNUM, GNUM GMLEN, LBNUM-1 /LEN OF MESS ALREADY IN BUFF -1 TO COMPENSATE FOR 0 CHAR. GGINSERT,GINSERT /POINTER TO INSERT ROUTINE. GCOUNT, -10 /FLICKER COUNTER GGTEXT, GTEXT+2 /ACTUAL TEXT POINTER. / / / / TTYGET, 0 /ROOM FOR NON-OVERLAPPED TTY ROUTINE HERE CHECKIO /CHECK IO DEVICES NOW. TAD KEYCHAR /GET SAVED CHAR. SNA /IS THERE REALLY ONE THERE??? JMP I TTYGET /NO. RETURN ISZ TTYGET /YES. BOP UP RETURN ADDRESS. TAD L4000 /CHOP OFF STUCK ON BIT. DCA 0 /0 CAN BE USED RIGHT ONW. DCA KEYCHAR /ZAP OUT OLD CHAR. TAD 0 /RETRIEVE CHAR. JMP I TTYGET /EXIT TO SECOND LOCATION WITH CHAR IN THE AC. / / LINEB, LEFT /START AT BOTTOM LEFT FOR DISPLAY. GTEXT=LINEB BOTTOM /BOTTOM OF SCREEN. TEXT "REPLY:\" /HALFWORD ASSUMED. LBNUM=6 /NUMBER OF PREVIOUS CHARS IN BUFFER. LBMAX=62-LBNUM /MAXIMUM NUMBER OF USER CHARACTERS. / FOUND BY GETTING MAX ON LINE(62) AND SUBTRACTING THOSE IN BUFFER(LBNUM). / / / / / / / / *LINEB+2+31-1+1 /ALLOW SPACE FOR THE BUFFER 0000 /LAST WORD OF THE CHARACTER BUFFER / / / / / / / / / / LUNOAD, TAD UL300 /FOR A ^T SET TO POSITIN BLOCK TO 300 / / / /FOR A ^U SET TO OSITION BLOCK TO 0 / UNLOAD, DCA UNPOS /STORE THE BLOCK TO POSITION UNIT 0 TO (0 OR 300) / LINC /THIS ROUTINE UNLOADS ALL THE TAPES LMODE /EXCEPT FOR TAPE 0. IT IS SO SIMPLE SET I AUTO7 /AND YET SO ELEGANT IT NEEDS -4 /NO COMMENTS. SO GAZE UPON IT AND BE THANKFUL. ADD L20 UNLOOP, ADA I -1 AXO CHK I U CHK I JMP .-1 XSK I AUTO7 JMP UNLOOP CHK UNPOS, 300 PDP PMODE UL300, CLA CLL /CLEAR THE AC AND JMP TO MIDDLE OF MESSASGE DISPLAY JMP GMAIN /KEEP MESSAGE GOING / / / / / / / / / / / / / / / / / / / EJECT / / / *1200 / SECOND PAGE OF LINE GETTER ROUTINE. / / / / GINSERT,0 /CHECKS CHAR AND STICKS IN BUFFER. AND L177 /CHOP OFF THE PARITY BIT. TAD L200 /AND FORCE 200 BIT ON FOR TESTS TO FOLLOW. DCA FTYPE /NOW STASH AWAY IN FTYPE FOR SEARCH TO FOLLOW. SEARCH /SEARCH LIST FOR FTYPE MATCH GSPL1 /SPECIAL CHARS AND EXCEPTIONS. GSPG1 /WHERE TO GO IF FOUND. JMS GGLIMC /CHECK FOR BETWEEN 240 AND 340 GNXIT, JMP I GINSERT /NOPE. IT ISN T A 37. RETURN TO CALLER. TAD GNUM /GET NUMBER OF CHARS. CMA /TEST TO SEE IF THIS OVERFLOWS THE BUFFER TAD GLIMIT /NUMBOER OF SPACES IN BUFFER. SNA CLA JMP I GGCLEAR /TOO MANY. RESTART. ASMIFN ECHO /LOAD THE CHAR IN AC TO ECHO IF ECHOING CHARS! TAD FTYPE /GET THE CHAR. ASMIFN ECHO /ECHO CHAR ONLY IF SWITCH IS SET. PUTL /ECHO ON TTY. TAD FTYPE /GET CHAR. AND L77 /MAKE INTO A SIXBITTER DCA GPUT ISZ GNUM /BOP UP COUNT TAD GNUM /PLACE IN AC. JMS I GGIN /PLACE CHAR IN BUFFER GPUT, 0 /HERE IS CHAR. JMP I GGMAIN /ALRIGHT, GO BACK AND DO NEXT / / / / / / GNLF, ASMIFN ECHO /LINEFEED WAS TYPED. GIVE C.R.L.F. CRLF /IF ECHOING IS DESIRED. JMP I GGCLEAR /AND RESTART THE INPUT BUFFER. / / / / GNRUB, MONE /RUBOUT TYPED. -1 TO AC. TAD GNUM /SUBTRACT ONE FROM THE NUMBER OF CHARS IN THE BUFER. SMA /HAVE WE BACKSPACED TOO FAR? DCA GNUM /NOPE. STORE AWAY. / ASMIFZ ECHO /DO WE WANT ECHOING? ASMSKP 4 /NO. DO NOT ASSEMBLE IN TTY ECHO CHAR. SZA CLA /WAS BACKSPACE SUCCESFULL? JMP GNRNO /NO. DO NOT PRINT "\". TAD GNL334 /FORM CHAR. PUTL /OUTPUT IT TO SHOW DELETE WAS SUCCESFULL. / GNRNO, ASMIFZ ECHO /DO WE HAVE ECHOING? CLA /NO, WE DON T. AC MIGHT BE NON-ZERO. CLEAR TO E SURE. JMP I GGMAIN /NOW GO BACK AND START DISPLAYING LINE AGAIN. / / / / GALL, ASMIFN ECHO /DO A CRLF ONLY IF SWITCH IS SET. PONE /SPACE TO NEXT SPOT IN THE BUFFER TAD GNUM /WHICH IS 1+GNUM JMS I GGIN /AND INSERT A 0000 AS A TERMINATOR 0000 /IN IT GOES. CRLF /DO A CAR RET AND LIN FED. TAD I GGLINE DCA GINSERT JMP I GINSERT / / / / / / / / / GGLIMC, 0 /THIS TESTS TO SEE IF TYPE IS BETWEEN 240 AND 337 TAD FTYPE /GET THE CHAR IN QUESTION TAD M340 /SEE IF ITS GREATER THAN 340 SPA /? TAD . /IT ISNT, SO MAKE IT A BIG NUM FOR SECOND TEST TAD GGM33 /SEE IF ITS GREATER THEN 372 SPA CLA /? TAD M40 /ITS GREATER THEN 337 BUT LESS THEN 373 TAD FTYPE /NOW EITHER UPDATE FTYPE OR LEAVE IT ALONE DCA FTYPE /THE UPDATE CONVERTS A 37 CHAR TO A 35 CHAR TAD FTYPE /NOW GET THE MODIFIED OR UNMODIFED CHAR TAD M340 /SUBTRACT OFF 340 FOR LIMIT TEST CLL /CLEAR THE LIC FOR THE FOLLOWING TEST TAD L100 /NOW ADD IN 100 FOR LOWER LIMIT TEST SZL CLA /IF GOOD LINC IS NOW A 1 ISZ GGLIMC /THEN GO TO SECONDRETURN IF OK JMP I GGLIMC /ELSE GO TO THE FIRST RETURN / / / / / / / / / GGM33, -33 / / GGLINE, GLINE /COMMUNICATION. GNUM, 0 /NUMBER OF CHARS IN BUFFER GLIMIT, LBMAX /MAX NUM OF USER CHARS IN BUFFER. GGIN, GIN GGMAIN, GMAIN GGCLEAR,GCLEAR /CROSS PAGE REFEREENCES. / / / / / GSPL1, 212 215 377 ASMIFZ TERMC-44 /EOF CHAR=DOLLAR SIGN? 244 /YEP. PLACE IT ON THE EXCEPTION TABLE 247 GNL334, 334 300 337 224 225 /CONTROL U CHARACTER 4243 / / / GSPG1, GNLF /LINE FEED GALL /C.R. GNRUB /RUB OUT ASMIFZ TERMC-44 /DO WE WANT DOLLAR SIGN IN LIST? GNXIT /YEP. DOLLAR SIGN ILLEGAL GNXIT GNXIT GNXIT GNXIT LUNOAD UNLOAD /POINTER TO THE UNLOAD ROUTINE. GNXIT / / / / / / MMOVE, 0 MONE TAD MMOVE DCA AUTO3 MONE TAD I AUTO3 DCA AUTO4 MONE TAD I AUTO3 DCA AUTO5 TAD I AUTO3 CMA DCA COUNT JMP MMEXIT-2 TAD I AUTO4 DCA I AUTO5 ISZ COUNT JMP .-3 MMEXIT, JMP I AUTO3 / / PPUSH, 0 MOVE FSIZE PPTEMP FNAME+3-FSIZE+1 JMP I PPUSH / PPOP, 0 MOVE PPTEMP FSIZE FNAME+3-FSIZE+1 JMP I PPOP / / PPTEMP,0 *PPTEMP+FNAME+3-FSIZE 0000 /JUST TO SEE WHERE IT IS. NEXT LOCATION IS COMPLETELY FREE. / / / EJECT / / / / / / / EVOKE PIP2 NOW / / / / / CHAIN "PIP2" / / / /