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. / / 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 / / / / LOAD THE SYMBOLS FROM PIP4. / / / LODSYM / / 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. / / / 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. / / P20, 20 M10, -10 L7770=M10 M4, -4 M20, -20 L77, 77 L200, 200 M301, -301 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 M314, -314 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 / INBLOCK, 0 INUNIT, 0 OUTBLOCK, 0 OUTUNIT, 0 OUTNUM, 0 / BFLAG1=INBLOCK BFLAG2=OUTBLOCK BOLDP=INUNIT BCHAR=OUTUNIT / / 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 / / / 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 / / / / / LMODE /JUST INCASE SOME JACKASS STARTS IT OFF IN THE WRONG MODE. PIPPIP, PDP /GET INTO 8 MODE. PMODE JMS RESTART /CLEAN UP SYSTEM. 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 IOF /TURN OFF INTERUPTS(THO THEY SHOULDN T BE ON. KCC /MAKE SURE THERE IS NOT A PREVIOUS CONTROL CHARACTER IN THEE WINGS. MONE /SET UP COPIER FOR 1 COPY DCA OUTNUM /-NUMBER OF OUTPUT TAPES FOR COPY JMS I FCORE /GET NUMBER OF BUFFERS. DCA .-1 /ZAP OUT. CAN ONLY BE USED ONCE. 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 P20 /GET THE I/O PRESET BIT ESF /AND DO AA I/O PRESET CLR PDP PMODE 6026 TLS 6016 KCC 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 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 / / FCORE, COREF 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=. / / / / / / / MAINDIS, LEFT+200 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 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 CLR PDP /BACK OVER INTO 8 MODE PMODE / 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. 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 RTR RTR RTR /MOVE TO RIGHT SIDE 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. / / 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. PCSW, 0 /0=FULL SIZE,-1=HALF SIZE. PCHAR, 0 /CONTAINS NEXT TEXT CHARACTER. PTABLE, TABLED-1 /POINTS TO DISPLAY TABLE -1 FOR INDEXING. / / / / 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. 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 / / / / / / / / / / RFDISK, 0 /THIS ROUTINE DOES THE SAME AS "TAPE" DOES, TAPE / EXCEPT THAT IT ENSURES THAT THE DISK IS ALWAYS TAD FUNIT /THE DESIRED UNIT(10-77). GET THE UNIT NOW TAD L10 /ADD TEN TO UNIT TO INSURE 10-17 DCA FUNIT /AND STOE BACK JMP I RFDISK /NOW RETURN TO CALLER. / / / / / / / / / / / / / / / EJECT *600 / 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 *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. CLA CLL /CLEAR AC. 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 TEMP2 /LEFT CHAR. RTR RTR RTR /MOVE INTO RIGHT HALF AND L7700 /BLAH OUT RIGHT BITS TAD I GIN /STICK IN GOOD CHAR. RTL RTL RTL /AND SHIFT BACK JMP GINTO /NOW GO AND STASH AND RETURN. / 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). / / / 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. IAC /TEST TO SEE IF IT LL FIT. CIA 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. CRLF /DO A CAR RET AND LIN FED. PONE /+1 IN AC TAD GNUM /NUMBER OF CHARS IN BUFFER. JMS I GGIN /PLACE A "0" IN BUFFER. 0000 /0 TAD I GGLINE DCA GINSERT JMP I GINSERT / / / / / / / / / GGLIMC, 0 /THIS TESTS TO SEE IF TYPE IS BETWEEN 240 AND 337 TAD FTYPE TAD M340 /CHECK UPPER LIMIT CLL TAD GGL100 /ADD 100 SNL CLA /GOOD? JMP GGLBAD /NOT BETWEEN 240 AND 337 GGLGUD, ISZ GGLIMC /IT S GOOD. RETURN TO SECOND LOC JMP I GGLIMC /EXIT / GGLBAD, TAD FTYPE TAD M40 DCA FTYPE /NOW TEST TO SEE IF A LOWER CASE LETTER TAD FTYPE TAD GGM333 /<333??? CLL TAD GGL100 /BUT >233 SZL CLA JMP GGLGUD /YEP. ITS GOOD JMP I GGLIMC /NOPE. IT S BAD / / / / / / GGL100, 100 GGM333, -333 / / GNL334, 334 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 334 300 337 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 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 / / / / / / SAVE THE SYMBOLS FOR P I P 2 ! ! ! ! ! / / / / / / / / SAVSYM 2 / / / / / / / / / / EJECT PMODE EJECT / / / / THIS IS THE SECOND PART OF PIP. IT S CALLED P I P 2. / / / / / / / RECALL SAVED SYMBOLS FROM OTHER PIPS. / / / / / / / / LODSYM / / / / / / / / / / / EJECT *1400 / GENERAL MASS STORAGE I/O ROUTINES. / / / / / CALLING SEQUENCE: / / / READ (OR WRITE) / UNIT NUMBER / FIRST CORE LOCATION OF TRANSFER / NUMBER OF BLOCKS TO BE TRANSFERRED. / FIRST BLOCK OF TRANSFER. / / / ROUTINE HAS THE ABILITY TO GO INTO EXTENED CORE. / IF HIS NUMBER OF BLOCKS MAKES THE LOCATION COUNTER "WRAP AROUND". / / / / / TREAD, 0 /MAIN READ ROUTINE JMS TWHERE /GET CORRECT MASS DEVICE TAPER /00-07 = TAPE READ ASMIFN RF08 /DO WE WANT THE RF08 ROUTINES ASSEMBLED? RF08R /YEP. ASS IT AS DEVICE 1 (10-17) ASMIFZ RF08 /IF NOT DESIRED STICK IN A DUMMY POINTER. NOSUCH /10-17 NOT YET ASSIGNED. NOSUCH /UNITS 20-77 ARE FREE FOR NOW NOSUCH /ABOVE 77 IS AN ERROR. NOSUCH NOSUCH NOSUCH NOSUCH / / TWRITE, 0 /MAIN WRITEE. JMS TWHERE /GET COORRECT MASS STORAGE DEVICE. TAPEW /FIRST IS LINC TAPE. ASMIFN RF08 /DO WE WANT THE RFO8 ROUTINES? RF08W /YEP. ASSIGN AS 10-17 ASMIFZ RF08 /TEST AGAIN. NOSUCH /UNITS 10-17 NOT YET ASSIGNED. NOSUCH /UNITS 20-77 FREE FOR NOW. NOSUCH NOSUCH NOSUCH NOSUCH NOSUCH / / / TWHERE, 0 /GETS CORRECT MASS STORAGE DEVICE. MTWO /-2 TAD TWHERE /GET CALLING. DCA TEMP /GET ORIGINAL CALLING. TAD I TEMP DCA TEMP /GET USER CALLING. TAD I TEMP /GET USERS UNIT. RTR RAR /GET BITS 6-8 AND L7 TAD TWHERE /GET START OF LIST. DCA TWHERE /AND STORE AWAY. TAD I TEMP /GET UNIT AGAIN AND L7700 /IS IT TOO BIG? SZA SYSERR /YEP. SYSTEM HAS BLOWN. TAD I TWHERE /GET CALLING ADDRESS. DCA TWHERE /AND STASH AWAY. TAD TEMP /GET USERS CALLING ADDRESS. DCA I TWHERE /AND SET UP PHONNEY CALL. ISZ TWHERE /GO TO SECOND LOC. JMP I TWHERE /PHONNEY CALL ALL DONE. / / / / TAPER, 0 /MAIN LINC TAPE READ ROUTINE. TAD TREAD /GET READ ADDRESS. DCA TWRITE /AND SAVE FOR READ. TAD TERENT /SET TO RETRY READ IF ERROR DCA I TEERNT /SAVE IN RETRY LOCATION DCA I TTSKP /DO A CHECK OF CHECKSUM. JMS I TTBLAH /GO PERFORM FOLLOWING OPERATION. LMODE /NEXT INSTRUCTION IS EXECUTED BY TBLAH IN LMODE RDE I /READ AND LEAVE GOING. PMODE /JUST FOR ASSEMBLER. JMP TEXIT /AND EXIT / / TAPEW, 0 /GENERAL LINC TAPE WRITE ROUTINE. TAD TTTSKP /SET UP TO IGNORE BAD CHECKSUM. DCA I TTSKP /AND STASH AWAY. TAD TTAPEW /FOR WRITE ERROR REWRITE ENTIRE BLOCK DCA I TEERNT JMS I TTBLAH /DO WRITE NOW. LMODE WRI I PMODE /BACK INTO PMODE DCA I TTSKP /SET TO CHECK CHECKSUM. JMS I TTBLAH /NOW DO CHECK OF WHAT WE JUST WROTE. LMODE CHK I PMODE / TEXIT, PFOUR /GENERAL EXIT. TAD TWRITE /GET WRITE DCA TWRITE /GO PAST ARGUEMENTS. JMP I TWRITE /PAST ARGUEMENTS. / / ASET, 0 /INITIALIZES ARGUEMENT GETTER FOR AMSS STORAGE DEVICES. MONE TAD TWRITE /FIRST AGR. DCA AUTO8 /ARG REGISTER. JMP I ASET /EXIT / / / / / / / TTSKP, TSKP /CHECKSUM SKIP TTTSKP, SKP /INSTRUCTION TO IGNORE CHECKSUM TTBLAH, TBLAH /POINTER TO I/O DOER TERENT, TREENT /RETRY LOCATION TEERNT, TTRENT /RETRY SWITCH TTAPEW, TWRITE+1 /RETRY ENTRIE WRITE ON ERROR / / / / / FFILEC, MONE /COPIES A NAMED FILE TO ANOTHER NAMED FILE. DCA OUTNUM /ZET COUNTER TO 1 PTWO /SET UP SECOND DIRECTORY LOOKUP DCA FWHAT /IT S AN OUTPUT FILE TAD I FFTEMP /GET THE ORIGINAL SIZE DCA FSIZE /PLACE IN THE SIZE NOW. DIRECT /NOW ALLOCATE SPACE. TAD FUNIT /GET THE NEW OUTPUT UNIT DCA OUTUNIT /AND SET UP OUTPUT UNIT TAD FBNUM /GET OUTPUT BLOCK DCA OUTBLOCK /AND SET UP. HPOP /POP IN UPPER SAVED FBLOCK TAD FUNIT /SAVE THE INPUT UNIT DCA INUNIT TAD FBNUM /GET THE INPUT STARTING BLOCK DCA INBLOCK /AND SET UP COPY /NOW COPY THE FILE PIP /AND RETURN TO PIP. / / / FFTEMP, HHTEMP / / / / / / / / / ASMIFZ RF08 /RF08 DESIRED? ASMSKP 4 /NO. DON T PUT MESSAGE HERE. / TMESS2, TEXT "FLINC TAPE FCHECKSUM ERROR " /TAPE ERROR MESSAGE HERE TO LEAVE ROOM LATTER ON. / / / / / / / / EJECT *1600 / / / MAIN GENERAL TAPE I/O LOOP. / / / TBLAH, 0 /PERFORMS A FUNCTION, THEN EXITS. SETA /SET UP ARGUEMENT GETTER. GETA /GET UNIT NUMBER CLL RAR /MOVE INTO CORRECT PLACE TAD L30/SET UP EXTENED UNITS BITS. DCA TAXO /AND STORE AWAY. NO-PAUSE AND EXTENEDED ADDRESSING ALSO SET. CLA RTL /NOW MOVE BACK TO BIT 8 RTL TAD I TBLAH /ADD IN DESIRED FUNCTION. DCA TOPR /AND STORE AWAY TO BE EXECUTED. TAD TOPR /GET THE OPERATION AGAIN. DCA TSTOPR /SET UP SELECT-WRITE LOCK CHECK. ISZ TBLAH /SKIP PAST CRAP. GETA /GET STARTING ADDRESS. DCA TLOC1 /AND STORE AWAY. GETA /GET WORD COUNT. SNA /IS IT ZERO? JMP I TBLAH /YEP. EXIT. CIA /NOPE. COMPLEMETN IT. DCA TCOUNT /STASH AWAY. GETA /GET BLOCK NUMBER IAC /FOR UPCOMING SUBRACTION ERROR. DCA TBLOCK /AND OPLACE IN FIRST BLOCK. / / / TREENT, MONE /TO RETRY SAME BLCOK AFTER ERROR. TAD TBLOCK /RESET BLOCK NUMBER TO CORRECT ONE. DCA TBLOCK TAD TLOC1 /GET THE FIRST LOC SZA /IT S ZERO. CORRECT FOR FIELD CHANGE JMP TDOWN /NOT ZERO OK. TAD L7000 /BOP DOWN FIELD. TAD TAXO /IN EXTENDED REGISTER DCA TAXO ASMIFZ RF08 /DISK ROUTINES THERE. ASMSKP 4 /NO. DO NOT ASSEMBLE IN CODE TO PROTECT 7400-7777 OF FIELD 0. TAD TAXO /REGET THE NEXT AXO REGISTER. AND L7000 SNA CLA /ARE WE CROSSING BOUNDARY TO LOWER CORE? TAD M400 /YES. BOP DOWN BY AN EXTRA 400 SO WE DON T BASH DATA BREAK /AND THE READ ROUTINES THERE. / TDOWN, TAD M400 /400= LENGTH OF 1 RECORD. DCA TLOC1 /LOC ALL SET TO GO. / TRENT2, TAD M215 /ENTERS HERE IF A SKIP OVER RECORD. M215=LENGTH OF TAPE+10 SECONDS. DCA TERRC2 /SET UP WAIT COUNT. TAD L5000 /SET MAINANCE MODE 6151 /FOR TESING WHETER OR NOT UNIT OK / / / TLOOP, PONE /MAIN LOOP TO DO NEXT RECORD. IS THIS LAST RECORD? TAD TCOUNT /GET THE NUMBER OF RECORDS TO GO SZA CLA JMP .+4 /NO. STILL MORE TO GO. TAD TOPR /LAST ONE. TURN OFF MOTION BIT. AND L7757 DCA TOPR ASMIFZ RF08 /RF08 DEISRED? ASMSKP 14 /NOPE. DON T ASSEMBLE IN CODE TO PROTECT 7400. TAD TLOC1 /GET THE LAST LOCATION. TAD L400 TAD L400 /SEE IF NEXT IS GOING TO READ INTO 7400. SZA CLA /?? JMP TLP1 /NO. IT ISN T. TAD TAXO /GET THE TAXO TO SEE IF AND L7000 /IT S 7400 OF FIELD 0 SZA CLA JMP TLP1 /NOT FIELD 0 TAD L400 /WE RE GOING TO BASH 7400, SO SKIP PAST IT. TAD TLOC1 DCA TLOC1 / TLP1, CLA CLL /LINC MUST BE CLEAR TAD L400 /BOP UP LOCATION TAD TLOC1 DCA TLOC1 LINC /GO OVER INTO LMODE LMODE ROR I 3 /MOVE OVERFLOW BIT INTO CORRECT TAPE POSITION. ADM I /UPDATE TAXO AND AXO ALL AT ONCE. TAXO, 0 AXO /SEND TO CONTROLER CLR /CLEAR AC FOR TEST TO FOLLOW DUMMY OPERTION. TSTOPR, 0 /PERFORM USERS OPERATION ONCE. BLOCK NUMBER=0 INSURES SUCCESS. 0000 /BECAUSE BLOCK NUMBER IS ADDED TO SPECIAL REGISTER WHICH IS READ IN. IOB /DO 8 IOT TO GET SPECIAL REGISTER. 6154 /IF TAPE OK(SELECT AND WRITE-LOCK OFKAY STC TEMP4 /THEN BIT10=1; NOW DO REAL USER OPERATION. LDA I /GET ADDRESS TLOC1, 0 TMA /AND SEND IT TO CONTROLLER TOPR, 0 /ACTUAL TAPE INSTRUCTION TBLOCK, 0 /ACTUAL BLOCK NUMBER. LDA /RECALL PAST SPECIAL FUCTION TEMP4 /REGISTER AND CHECK WHETER UNIT OK PDP /GET BACK INTO 8 MODE PMODE ISZ TBLOCK /BOP UP BLOCK NUMBER RTR /PLACE BIT 10 IN LINC SNL CLA /IS UNIT OK WITH WRITE LOCK OFF IF NECESSARY. JMP TSELER /UNIT NOT OK. DISPLAY MESSAGE. LMODE /TELL ASSEM WE LL BE IN LMODE. TLOOP2, PDP /GET INTO 8 MODE. IF IN 8 MODE ITS JUST A NOP. PMODE CHECKIO /CHECKIO I/O DEVICES WHILE WAITING IN LOOP. ISZ TERRC1 /BOP UP FIRST WAIT COUNT JMP TNT2LG /DIDN T OVERFLOW YET. GO DOWN ISZ TERRC2 /OUTER SKIP OK? JMP TNT2LG /BIG COUNT STILL OK. GO DOWN. / JMS I TEMAIN /WE VE WAITED TOO LONG. GIVE MESSAGE. TMESS1 /TO LONG MESSAGE / TNT2LG, LINC /GET INTO LINC MODE FOR FLAG TESTING. LMODE /GET INTO L MODE TO TEST TAPE. STD JMP TLOOP2 /NOT YET DONE. GO BACK AND WAIT. TAC /DONE. GET CHECKSUM INTO AC. PDP PMODE /AND GET BACK INTO 8 MODE CMA /MAKE INTO ZERO IF 7777 SNA CLA /GOOD CHECKSUM JMP TDOC /YEP. TRY NEXT RECORD. TSKP, SKP /SWITCH FOR ERROR IF BAD CHECKSUM. JMP TCHEKE /BAD CHECKSUM. GIVE MESSAGE TDOC, ISZ TCOUNT /OK. IS ALL ODNE? JMP TLOOP /NOPE. DO NEXT TBEXIT, JMP I TBLAH /YEP. EXIT / / / / TCHEKE, JMS I TEMAIN TMESS2 /CHECKSUM ERROR TSELER, JMS I TEMAIN TMESS3 /BLOCK NUMBER OR TIMING ERROR / / / / / TCOUNT, 0 TERRC1, 0 TERRC2, 0 TEMAIN, TMAINE / / / / / / / / / ASMIFN RF08 /RF08 DEISRED? ASMSKP 4 /YEP. DON T ASSEMBLE MESSAGE HERE / TMESS2, TEXT "FLINC TAPE FCHECKSUM ERROR " / TMESS3, TEXT "FSELECT OR FWRITE-LOCK ERROR " / / / / / EJECT / / / / / LOCATED AROUND 2000. PREVIOUS PAGE OVERLAPS A LITTLE BIT. / / / / TAPE ROUTINES CONTINUED. TMAINE, 0 /MAIN ERROR WAIT CLA CLL CML RAR /4000+6152=TAPE PRESET. 6152 /STOP ANY STRAY TAPE OPERATIONS. CLA CLL TAD I TMAINE /GET ERROR MESSAGE DCA .+2 MOVE /AND MOVE TO MAIN MESSAGE. 0 TMAIND 20 /40 CHARACTER NAME. MONE TAD I TBLOKK /GET COOREECT BLOCK NUMBER FOR DISPLAY OF ERROR MESSAGE. JMS TTBC /CALL ERROR MESSAGE DISPLAYER TTEG1 /WITH LIST OF WHERE TO GO ON REPLY. / / / / / TTEG1, TRENT3 /ACCEPT LOCATION TERROT /RETRY LOCATION TRENT3 /SKIP LOCATION (INTERNALLY SAME AS ACCEPT) / / / / / / / TRENT3, ISZ I TKOUNT /IS THIS LAST RECORD? JMP I TTRNT2 /NOPE. GO BACK AND SKIP JMP I TBLAHT /YEP. EXIT / / / / / TERROT, JMP I TTRENT / / / / / / TTRENT, TREENT TBLOKK, TBLOCK TKOUNT, TCOUNT TTRNT2, TRENT2 TBLAHT, TBEXIT / / / / / / / / / / / / / / TTBC, 0 /ERROR MESSAGE DISPLAYER LINC /GET OVER TO LINC SIDE LMODE TBREG=TMAINE&1777 /ASSIGN A BETA REGISTER STC TTEBLK /SAVE THE BLOCK NUMBER SET I TBREG /SET THE B REG TO POINT TO TOUT1&1777-1+4000 /WHERE THE BLOCK NUMBER SHOULD GO. / TTBLP, DJR /DON T CLOBBER 0 LDA I TTEBLK, 0 /GET THE B,OCK NUMBER ROL 3 /ROTATE TO GET DIGIT STA TTEBLK /AND STORE BACK FOR NEXT TIME BCL I -7 BSE I 60 /CONVERT TO TRIMMED ASCII STH I TBREG /AND STORE AWAY. SRO I 3567 /ALL DONE WITH 4 DIGITS? JMP TTBLP /NOPE. DISPLAY MORE. PDP PMODE /GET BACK INTO 8 MODE CLA TAD I TTBC /GET THE GO TO LIST DCA TTS2 /AND SAVE IN SEARCH CALL DECODE /DISPLAY MESSAGE AND GET REPLY TMAIND-2 SEARCH /LOOK-UP REPLY TTS1 TTS2, 0 /CALLERS LIST. JMP .-5 /NOT A LEGAL REPLY. / / / TTS1, 301 322 4323 / / / / / / / / LEFT+140 TOP-100 /LOCATED ON TOP,LEFT OF SCREEN TMAIND, 0 /OVERLAYED BY EXACT MESSGE *TMAIND+20 /A 40 CHAR MESSAGE FROM CORRECT ERROR ROUTINE. TEXT "FAT BLOCK NUMBER " TOUT1, 0 TOUT2, 0 TEXT " A --- ACCEPT AS IS R --- TRY AGAIN S --- TRY TO SKIP PAST FAULTY BLOCK\" TMESS1, TEXT "FBLOCK NUMBER FOR TIMING ERROR " / / / / EJECT / LOCATED AROUND 2200. PREVIOUS PAGE OVERLAPS A LITTLE BIT. / / / GENERAL CALL: / / DECODE / YOUR DISPLAY / / / / WILL DECODE A STRING AS FOLLOWS: / / ;<8 CHARACTER NAME>, / / ANY PART MAY BE MISSING WITH THE EXCEPTION OF THE FIRST LETTER. / / IT S BROKEN DOWN AS FOLLOWS. THE FIRST LETTER GOES INTO "FTYPE", THE NUMBER INTO "FUNIT", / THE 8 CHARACTER NAME INTO "FNAME" FOLLWED BY / "77" S TO FILL IT OUT, AND THE LAST NUMBER INTO / "FSIZE". ANY MISSING NUMBERS GO TO 0, A MISSING NAME GOES TO 7777777777777. / / DDCODE, 0 /GETS AND DECODES A LINE FROM THE TTY WHILE DISPLAYING SOMETHING. CLA CLL /CLEAR AC. TAD I DDCODE /GET LOCATION OF DISPLAY. DCA DDDIS /AND PLACE HERE. ISZ DDCODE /SKIP PAST CALLING ARG. DDAGIN, MONE /RESTART OF DISPLAY. DCA FNAME /SET NAME TO 7777 MONE DCA FNAME+1 MONE DCA FNAME+2 MONE DCA FNAME+3 /NAME NOW CONTAINS A 7777 DCA FUNIT /ZAP OUT UNIT NUMBER. DCA FTYPE /ZAP OUT CHAR. DCA FSIZE /AND SIZE. LINE /GET A LINE FROM THE TTY. DDDIS, 0 /WHILE DISPLAYING THE CALLERS CRAP. TAD DDGTEXT /POINTER TO BUFFER-1 DCA I DPSTART /WE LL USE "PGETL" TO GET MONE /THE CHARS SO I M SETTING IT UP NOW. DCA I DPSWITCH /SET SWITCH TO LEFT CHAR. TAD DSIZE /NUMBER OF CHARS ALREADY IN BUFFER. DCA COUNT /PLACE IN TEMP COUNT. JMS I DPGETL /GO GET A CHAR. ISZ COUNT /BOP UP CONUT. IS THTA ALL? JMP .-2 /NO. GET NEXT. CLA /YES. CLEAR AC OF CHAR. JMS I DPGETL /GET NEXT CHAR. TAD L7777 /TEST TO SEE IF A LETTER SPA /IS IT <"A" JMP DDAGIN /YES. NOT A LET. TRY AGAIN. TAD M32 /IS IT TOO BIG??? SMA JMP DDAGIN /YEP. TOO BIG. TRY AGAIN. TAD L333 /OK. MAKE INTO A GOOD LETTER. DCA FTYPE /AND STASH AWAY. JMS DGETNUM /GET A NUMBER NEXT. TAD TEMP /GET THE VALUE. DCA FUNIT /AND STASH AWAY. TAD TEMP1 /GET CHARACTER WHICH WAS NON NUM. SNA /IS IT TERMINATING 0000 JMP I DDCODE /YES. EXIT. TAD M73 /IS IT A ";" SZA CLA JMP DDAGIN /NOT ANYONE. BAD CHAR. TRY AGAIN. TAD DFNAME /POINTER TO "FNAME" DCA TEMP3 /AND STORE AWAY TAD M4 /4 *2 CHARS PER WORD=8 DCA COUNT DLOOP, JMS DDCHEK /GET A CHAR AND CHECK IT. RTL RTL RTL /ROTATE INTO LEFT SPOT. AND L7700 /ZAP OUT RIGHT TAD L77 /NAME TERMINATES WITH A 77 DCA I TEMP3 /PLACE IT AWAY. JMS DDCHEK /GET ANOTHER AND L77 /JUST RIGHT 6 BITS TAD I TEMP3 /GET BACK OLD 1 TAD M77 /CHOP OFF L77 WE ADDED BEFORE. DCA I TEMP3 /AND PLACE BACK IN THING. ISZ TEMP3 /BOP UP NAME POINTER. ISZ COUNT /4 WORDS FILLED UP YET? JMP DLOOP /NO. JMS DDCHEK /YES. GET NEXT JUST FOR HELL OF IT. JMP DDAGIN /NAME TOO LOONG. RESTART/ / DCOMMA, JMS DGETNUM /EVALUATE NUM AFTER COMMA. TAD TEMP /GET VALUE DCA FSIZE /AND STASH AWAY TAD TEMP1 /GET TERMINATING CHAR. SZA CLA /IS IT 0000 JMP DDAGIN /NO. RETRY AGAIN. JMP I DDCODE /YEP. ALL DONE. E X I T ! / DGETNUM, 0 /FORMS A NUMBER DCA TEMP /ZERO SUM JMS I DPGETL /GET A CHAR. DCA TEMP1 /STASH IT AWAY. TAD TEMP1 /GET IT BACK TAD M60 /IS IT <60 SPA CLA JMP I DGETNUM / <60. RETURN. TAD TEMP1 /GET AGAIN TAD M70 /IS IT TOOOOO BBBIIIGGGG?????? SMA CLA JMP I DGETNUM /YEP. RETURN TAD TEMP /GET OLD TOTAL CLL RAL CLL RAL CLL RAL /MULTIPLY BY 8 TAD TEMP1 /ADD IN TEMP1 TAD M60 /GET RID OF ASCII BITS. DCA TEMP /AND STASH AWAY. JMP DGETNUM+2 /GO GET NEXT CHAR. / DDCHEK, 0 /CHECKS FOR 0 OR , JMS I DPGETL SNA /IS GOTTEN CHAR 0? JMP I DDCODE /YES. EX I T TAD M54 /IS IT A , SNA JMP DCOMMA /YES. END OF NAME. TAD L54 /CORRECT FOR SUBTRACTION. JMP I DDCHEK /RETURN IWTH CHAR IN AC. / / / DPGETL, DDCOM /POINTER TO UNPACK ROUTINE CHAR GETTER. DFNAME, FNAME /POINTER TO FNAME DDGTEXT, GTEXT+1 /POINTER TO START OF MESSAGE-1 DPSTART, PSTART /POINTER TO GETCHAR POINTER DPSWITCH, PSWITCH /POINTER TO SWITCH (LEFT OR RIGHT CHAR) DSIZE, -LBNUM /NUMBER OF SYSTEM CHARS ALREADY IN BUFFER. / / / / / / / EJECT *2400 / / MAIN DIRECTORY SEARCHER. / / GENREAL CALL: / / / DIRECT / / / NO ARGUEMENTS. ALL COMMUNICATION IS DONE THROUGH "FBLOCK AREA [FSIZE-FNAME+3]" / / / / / / DYRECT, 0 /MAIN ENTRY CLA CLL /CLEAR AC TO BE SURE. TAD INDEX /GET START OF INDEX DCA DINDEX /AND PLACE AWAY HERE TAD ILEN /GET LENGTH OF INDEX DCA DLEN /AND PLACE AWAY. PUSH /SAVE FBLOCK. I/O MIGHT DESTROY IT. TAD FUNIT /GET DESIRED UNIT. DCA .+2 /AND FINISH SETTING UP READ. READ /READ IN INDEX. 0 /UNIT DPOINT, BUFFER /INTO START OF BUFFER AREA. DLEN, 0 /LENGTH OF INDEX. DINDEX, 0 /STARTING BLOCK OF INDEX. POP /RESTORE FBLOCK JMS I DDNAME /LOOKUP NAME. JMP I DDFOUND /NAME EXISTS. GO ELSEWHERE. JMS I DYGLEN /NO NAME. GET D LEN. ISZ COUNT /BOP BY 1 TO OFFSET FOR FIRST ENTRY TAD DPOINT /SET UP AUTO1 DCA AUTO1 /TO POOINT TO DIRECTORY. DYLOOP, JMS I DYPAST /GO TO NEXT ENTRY. TAD I AUTO1 /GET FIRST LETTERS OF NAME. TAD M5757 /IS IT FREE SNA CLA JMP DYGOOD /YEP. PLACE IT HERE ISZ COUNT /NO GOOD, ANY MORE TO CHACK? JMP DYLOOP /YEP. GO BACK NO /NO ROOM FOR NEW NAME. DYGOOD, TAD AUTO1 /SET UP MOVE TO DIRECOTRY OF NAME DCA .+3 /NAME PLACE IN DIRECTORY. MOVE /MOVE NEW NAME INTO DIRECTORY. FNAME 0 4 PFOUR /NOW FILL IN SPACES WITH 5757S TAD AUTO1 /POINTER TO SOURCE BLOCKS DCA .+3 MOVE /NOW MOVE IN 5757 S DL5757 0 4 JMS I DYBACK /POINT TO START OF NAME / / DREENT, TAD FWHAT /DFOUND ALSO COMES HERE. IS IT INPUT OR OUTPUT??? TAD L7777 /1=INPUT,2=OUTPUT SNA /IS IT INPUT NO /YES. NO NAME. DISPLAY "NO" TAD L7777 /IS IT "2" SZA SYSERR /NO. INTERNAL PIP ERROR. FOR DEBUGGING ONLY. TAD FTYPE /SOURCE=1,BINARY=2 TAD L7777 /IS IT A 1 SNA JMP DSOURCE /YES. SOURCE TAD L7777 /IS IT2. (BINARY) SZA SYSERR /NEITHER. SYSTEM ERROR PTWO /BINARY. BOP PAST SOURCE. DSOURCE, TAD L4 /GO PAST NAME. TAD AUTO1 /SET AUTO2 TO BLOCK NUMBER POINTER. DCA AUTO2 / / / / ROUTINE TO FIND VACANT SPACE IN THE DIRECTORY / DLOOK, TAD CLOWER /GET LOWER LIMIT OF SYSTEM. DCA DFIRST /THATS WHERE WE LL START CHECKING. DLOOP1, TAD DFIRST /GET START OF BLOCKS WE RE NOW CHECKING TAD FSIZE /FIND OUT HOW BIG WE WANT THEM. CLL CMA IAC /13 BIT NEGATE, EXCEPT FOR LINK. TAD CLOWER /DO WE GO OVER INTO SYSTEM? SZA SNL CLA /NOW REASON FOR NO CML ABOVE. JMP DNO1 /YEP. GO DOWN AND TRY NEXT. JMS I DDCHECK /CHECK TO SEE IF ANY OF THESE BLOCKS ARE OCCUPIED. JMP DNO1 /YEP, THEY ARE. GO DOWN AND TRY NEXT. TAD DFIRST /FOUND ROOM. TAD FSIZE /GET DISTANCE FROM CENTER OF SYSTEM. CIA TAD CLOWER IAC /1 MORE FOR ADDITION OVERSHOOT. DCA DDIS1 /DISTANCE FOR SYSTEM. JMP DDO2 /NOW CHECK OTHER SIDE. DNO1, TAD DFIRST /BLOCKS WON T FIT. CIA /CAN WE TRY FARTHER FROM SYSTEM. TAD ELOWER /ADD LOWER LIMIT OF DEVICE. SNA CLA /ARE WE AT BOTTOM NOW? JMP DBAD1 /YEP. NO ROOM HERE IN THIS SIDE. MONE /ROOM LEFT. BOP DOWN DFIRST AND TRY AGAIN. TAD DFIRST DCA DFIRST /A LITTLE FARTHER FROM SYSTEM THIS TIME. JMP DLOOP1 /GO BACK AND TRY AGAIN. / DBAD1, MONE /NO ROOM ON BOTTOM . SET DISTANCE TO MAX. DCA DDIS1 / DDO2, CLA CLL /NOW EW LL CHECK TO UPPER TO SEE IF IT FITS. TAD CUPPER /GET UPPER PART OF SYSTEM. DCA DFIRST /FOR FIRST ISZ CORRECTION. / DLOOP2, ISZ DFIRST /WE LL TRY NEXT BLOCK. SKP /WOW. QUITE A DEVICE HE S GOT THERE. 4 RF08 S IT MUST BE. JMP DBAD2 /BUT STILL NO ROOM ON TOP. TAD EUPPER /GET THE UPPER LIMIT OF THE DEVICE. CLL CML CMA /13 BIT COMP , -1 TAD DFIRST /WILL WE OVERFLOW DEVICE LIMITS. TAD FSIZE /WHEN WE ADD IN LENGTH. SZA SNL CLA JMP DBAD2 /NO ROOM LEFT ON TOP END. JMS I DDCHECK /CHECK TO SEE IF BLOCKS ARE FREE. JMP DLOOP2 /NOT FREE. GO BACK AND TRY AGAIN. TAD CUPPER /FREE. GET DISTANCE. CIA TAD DFIRST DCA DDIS2 /AND SAVE IT. JMP I DDFIG /GO CALCULATE WHICH ONE IS CLOSER [LOWER HALF OR UPPER HALF] / / DBAD2, MONE /NO ROOM ON UPPER HALF. DCA DDIS2 /SET DISTANCE TO A MAXIMUM. JMP I DDFIG /GO FIGURE OUT WHICH ONE IS CLOSER. / / DDIS1, 0 /LOWER DEVICE DISTANCE DDIS2, 0 /UPPER DEVICE DISTANCE FROM DESIRED FILE. DDCHECK, DCHECK /POINTER DDFIG, DFIG DDNAME, DNAME DDFOUND, DFOUND DYGLEN, DGLEN DYPAST, DPAST DYBACK, DBACK DL5757, 5757 5757 5757 5757 / / / / / / / / / EJECT *2600 / / MORE OF THE DIRECTORY LOOKUP ROUTINES. / / / / / / DFIG, TAD I DDDIS1 IAC /IS LOWER HALF OK?? SNA CLA JMP D1NOG /NO ROOM IN LOWER HALF. TAD I DDDIS2 /HOW ABOUT THE UPPER HALF? IAC SNA CLA JMP D1CLOSE /LOWER HALF IS CLOSER BECAUSE NO UPPER HALF. TAD I DDDIS1 /BOTH THERE. GET LOWER DISTANCE. CLL CML CMA IAC /13 BIT NEGATE TAD I DDDIS2 /GET UPPER DISTANCE. SZL CLA /WHICH IS CLOSER. JMP D2CLOSE /UPPER IS CLOSER. / D1CLOSE, MONE /-1 FOR ADDITION ERROR TAD FSIZE /RECREATE ORIGINAL BLOCK NUMBER TAD I DDDIS1 CIA TAD CLOWER /WE VE GOT THE ORGINAL BLOCK NUMBER NOW. DCOM, DCA FBNUM /TELL CALLING PROGRAM ABOUT IT. TAD FBNUM /NOW PLACE IT IN DIRECTORY. DCA I AUTO2 TAD FSIZE /ALSO THE SIZE IN THE DIRECOTRY. DCA I AUTO2 MOVE /NOW SET UP THE WRITING OF THE DIRECTORY. DPOINT-1 DWRITE+1 4 PUSH /PUSH DOWN F BLOCK DWRITE, WRITE /WRITE DIRECTORY, WITH MOVED IN ARGUEMENTS. 0 0 0 0 POP /POP UP FBLOCK DDEXIT, TAD I DDYRECT /GET CALLING ADDRESS DCA TEMP /STORE IT JMP I TEMP /EXIT TO USER. / D1NOG, TAD I DDDIS2 //CHECK IF ROOM ON TOP HALF. IAC SNA CLA /ROOM? NO /NO ROOM ON DEVICE FOR FILE. D2CLOSE, TAD DFIRST /GET THE LAST BLOCK CHECKED. JMP DCOM /AND THATS IT. PLACE IN DIRECTORY. / / / / DCHECK, 0 /CHECKS TO SEE IF BLOCKS OCCUPIED BY DFIRSR ARE FREE MONE TAD I DDPOINT /SET AUTO1 TO POINT TO START OF DIRECTORY DCA AUTO1 /IN CORE. JMS I DDGLEN /GET LEN OF DIRECTORY DLOOP3, TAD I AUTO1 /GET FIRST WORD OF A NAME IN THE DIRECTORY. TAD M5757 /IS IT A GOOD NAME??? SNA CLA JMP DBLANK /NO. SKIP PAST IT. ISZ AUTO1 ISZ AUTO1 ISZ AUTO1 /SKIP PAST REST OF NAME. ISZ AUTO1 /AND ALSO STARTING BLOCK OF SOURCE TAD I AUTO1 /IS THERE ANY SOURCE(LENGTH=POSITIVE) SPA CLA JMP DNOS /NO SOURCE JMS I DDTHERE /YEP. CHECK IT OUT. DNOS, ISZ AUTO1 /SKIP PAST BINARY BLOCK TAD I AUTO1 /GET BINARY LENGTH SPA CLA /BINARY THERE? JMP DBLANK /NO BINARY JMS I DDTHERE /BINARY THERE. CHECK FOR INTERFERENCE. / DBLANK, JMS I DDPAST /SKIP TO NEXT DIRECTORY ENTRY ISZ COUNT /ARE WE ALL DONE WITH THE DIRECTORY? JMP DLOOP3 /NO. GET NEXT ENTRY ISZ DCHECK /YES. SKIP PAST NEXT CALLING STATEMENT AND EXIT. JMP I DCHECK /GOODBYE. AND GOOD LUCK. / / / / / DGLEN, 0 /ROUTINE GETS LENGTH OF DIRECTORY AND STORES IT IN -COUNT. TAD ILEN /GET INDEX LENGTH. RTL RTL RAL /MULTIPLY BY 32 (32 ENTRIES PER BLOCK. AND L7740 /CHOP AWAY CRAP. CIA DCA COUNT /AND STORE NEGATED IN COUNT. JMP I DGLEN /RETURN TO CALLER. / DPAST, 0 /ROUTINE SETS AUTO1 TO POINT TO NEXT NAME IN DIRECTORY. TAD AUTO1 AND L7770 /LOGICAL OPERATION---- AUTO1.OR.7 TAD L7 DCA AUTO1 /AND PUT BACK. JMP I DPAST / DBACK, 0 /ROUTINE BACKSPACES 1 DIRECTORY ENTRY. JMS DPAST /MOVE TO END OF THIS NAME TAD AUTO1 TAD M10 DCA AUTO1 /AND DOP DOWN BY 10 (1 DIRECTORY ENTRY) JMP I DBACK / / / DTHERE, 0 /CHECKS JUST ONE DIRECTORY ENTRY FOR BEING WITHIN THE SPECIFIED LIMITS. MONE TAD AUTO1 /BOP BACK THE AUTO REG. DCA TEMP3 /AND PLACE IT AWAY TAD I TEMP3 /RETRIEVE STARTING BLOCK NUMBER CLL CML CMA IAC /13 BIT NEGATE. TAD DFIRST /ADD IN DESIRED STARTING BLOCK. SNA JMP I DCHECK /SAME. BLOCK IS TAKEN. EXIT. SNL CLA /ARE WE PAST DFIRST. JMP DFBIGR /NO. DFIRST IS BIGGER. TAD I TEMP3 /YEP. LETS SEE IF WE MISS IT. CLL CML CMA TAD DFIRST /DOES DFIRST+FSIZE INCROACH ON OUR TERRITORY. TAD FSIZE SNL CLA /???? JMP I DCHECK /YEP. CAN T PUT IT HERE. JMP I DTHERE /IT FITS. / DFBIGR, TAD I TEMP3 /WE RE BEFORE DFIRST. ISZ TEMP3 /POINT TO FILE LENGTH NOW. TAD I TEMP3 /ADD OUR LENGTH IN CLL CMA IAC TAD DFIRST /DO WE OVERFLOW INTO DFIRST??? SZA SNL CLA JMP I DCHECK /WE CERTAINLY DO. JMP I DTHERE / NOPE. WE RE CLEAR. RETURN TO CHECK AGAIN. / / / DDDIS1, DDIS1 /POINTER TO LOWER DISTANCE FROM SYSTEM DDDIS2, DDIS2 /POINTER TO UPPER DISTANCE FROM SYSTEM DDYRECT, DYRECT /POINTER TO ENTRY DDPOINT, DPOINT /POINTER TO BUFFERS DDGLEN, DGLEN /POINTER TO GET NUMBER OF DIRECTORY ENTRIES ROUTINE. DDTHERE, DTHERE /POINTER TO BLOCK CHECKER DDPAST, DPAST /POINTER TO ROUTINE TO GO TO NEXT ENTRY. / / / / / / / / / EJECT *3000 / / SOME MORE OF THE DIRECTORY LOOKUP ROUTINES. / / / / / DFOUND, TAD FWHAT /NAME ALREADY IN DIRECTORY. GET WHETHER INPUT OR OUTPUT FILE. TAD L7777 /1=INPUT,2=OUTPUT SNA JMP DDIN /IT S INPUT. TAD L7777 /IS IT OUTPUT? SZA SYSERR /NOT 1 OR 2. SOMETHING HAS BLOWN. TAD FTYPE /1=SOURCE,2=BINARY TAD L7777 /IS IT SOURCE SNA JMP DZAP /YEP. ZAP OUT BLOCKS FROM DIRECTORY. TAD L7777 /BINARY??? SZA SYSERR PTWO /BINARY FILE. ADD TWO TO BYPASS SOURCE DZAP, TAD L4 /BOP PAST NAME TAD AUTO1 /GET POINTER NOW DCA AUTO1 TAD L5757 /BLANK OUT THE BLOCK NUMBER DCA I AUTO1 / (EITHER TO POINTER TO SOURCE OR BINARY) PUSH /PUSH DOWN FBLOCK SO "REPLACE" WONT BLOW IT. TAD AUTO1 /NOW GET THE AUTO LENGTH POINTER. DCA AUTO3 /AND PLACE IN A TEMPORARY AUTO. TAD I AUTO3 /IF SIGN BIT OF LENGTH ON THEN NO SOURCE OR BINARY. SMA CLA /DO WE WANT TO REPLACE???? REPLACE /YEP. DISPLAY REPLACE MESSAGE. POP /HE S ANSWERED AN "R". NOW REPLACE FBLOCK. TAD L5757 /NOW ZAP OUT THE LENGTH. DCA I AUTO1 /BY PLACING IN SOME 5757 S. PUSH /NOW PUSH DOWN SO THAT WE WILL REMEMBER IT. JMS I DDBACK /BACKSPACE TO BEGINNING OF NAME. JMP I .+1 /WE WANTS IT REPLACED. DREENT /REENTRY FOR REPLACING THE FILE / / DDIN, TAD FTYPE /IT AN INPUT FILE. GET THE MODE. TAD L7777 /1=SOURCE,2=BINARY SNA JMP DDT /IT SOURCE TAD L7777 /MAYBE IT S BINARY SZA SYSERR /UGH. PIP HAS BLOWN. PTWO /IT S BINARY. MOVE PAST SOURCE. DDT, TAD L4 /PUSH PAST NAME. TAD AUTO1 /RESET POINTER DCA AUTO1 TAD I AUTO1 /GET BLOCK NUMBER DCA FBNUM /AND STORE AWAY. TAD I AUTO1 /GET SIZE OF FILE SPA /IS IT OK? NO /NO. DISPLAY "NO" MESSAGE. DCA FSIZE /YEP. ITS THERE. STASH AWAY. JMP I .+1 /NOW EXIT FROM DYRECT. DDEXIT / / / / DNAME, 0 /LOOKS UP NAME IN THE DIRECTORY. TAD I DNPOINT /GET STARTING ADDRESS FOR THE NAME LOOKUP. TAD L7777 /AC MAY NOT CONTAIN ZERO FOR SOME SPECIAL CALLS. DCA AUTO1 /PLACE IN AUTO1 JMS I DNGLEN /GET LENGTH TAD I DNPOINT /GET STARTING ADDRESS OF DIRECTORY DCA TEMP4 /STORE AWAY. TAD I TEMP4 /GET FIRST WORD. IS IT "5757" TAD M5757 SNA CLA JMP DOK /IT S THERE. ALL IS WELL ISZ DNAME /DESIRED NAME NOT THERE BECAUSE NO DIRECTORY. TAD COUNT /MULTIPLY COUNT BY 8 RTL RAL /BECAUSE THERE ARE 8 WORDS PER AND L7770 /DIRECTORY ENTRY DCA COUNT TAD L5757 /MAKE IT A GOOD DIRECOTORY. DCA I AUTO1 /FILL IT UP ISZ COUNT /ALL DONE? JMP .-3 /NOPE JMP I DNAME /YEP. ALL DONE. / / / DOK, JMS I DNPAST /PUSH PAST PRESENT NAME. TAD I AUTO1 /GET FIRST WORD OF NEW NAME. CIA TAD FNAME /A MATCH? SZA CLA JMP DNOT /NO. TRY NEXT TAD I AUTO1 /AND SO ON DOWN UNTIL IT FAILS OR A MATCH IS MADE. CIA TAD FNAME+1 SZA CLA JMP DNOT TAD I AUTO1 CIA TAD FNAME+2 SZA CLA JMP DNOT TAD I AUTO1 CIA TAD FNAME+3 SZA CLA JMP DNOT JMS I DNBACK /A MATCH SET AUTO1 AND EXIT. JMP I DNAME / / DNOT, ISZ COUNT /FINISHED CHECKING ALL? JMP DOK /NO. MORE TO GO. ISZ DNAME /NOT THERE. PUSH BACK EXIT LOCATION JMP I DNAME /AND EXIT. / / / / / DDBACK, DBACK /POINTER TO BACKSPACE ROUTINE DNBACK=DDBACK /A SLIGHT OVERSIGHT. DNPOINT, DPOINT /POINTER TO BUFFERS DNGLEN, DGLEN /GET NUMBER OF ENTRIES ROUTINE DNPAST, DPAST /ADVANCE POINTER TO NEXT NAME ROUTINE / / / / / NODIS, 0 /THIS ROUTINE DISPLAYS A "NO" DISPLAY /ISSUE DISPLAY COMMAND NONODI /MY OUTPUT CRAP JMP .-2 /HANG AROUND UNTIL A ^D OR ^P IS TYPED. / NONODI, LEFT+340 /ABOUT CENTER OF THE SCREEN BOTTOM+340 TEXT "FNO\" /A SIMPLE MESSAGE. / / / REPDIS, 0 PUSH /STORE AWAY FBLOCK DECODE /GET A LINE DISREP /REPLACE MESSAGE TAD FTYPE /GET REPLY TAD M322 /IS IT AN "R" SZA CLA JMP REPDIS+2 /NOPE. TRY AGAIN. POP /RESTORE FBLOCK JMP I REPDIS /AND RETURN. / / DISREP, LEFT+200 /ABOUT THE CENTER TOP-200 /GOOD ENOUGH TEXT "FREPLACE? HR --- REPLACE\" / / / / / / / / / / / / EJECT / / / / / COPY ROUTINE: / OVERLAPS IN 3200 FROM PREVIOUS PAGE. / / / / / / GENERAL CALL: / / / COPY / / / / COPIES FSIZE BLOCKS FROM INUNIT,INBLOCK / TO OUTUNIT,OUTBLOCK / AND TO MORE UNITS DEPENDING ON THE VALUE OF "OUTNUM". / OUTNUM SHOULD BE 7777 FOR 1 TAPE COPY. / / / / / CCOPY, 0 /MAIN ENTRY TAD INUNIT /GET INPUT UNIT DCA CINU /AND PLACE IN READ CALL TAD INBLOCK /GET INPUT STARTING BLOCK DCA CINB /AND STORE IN READ BLCOK TAD OUTBLOCK /GET THE OUTPUT STARTING BLOCK DCA COUTB /AND LEAVE THAT IN WRITE TAD FSIZE /GET THE NUMBER OF BLOCKS TO COPY DCA CSIZE /AND STORE THAT AWAY. / CPLOOP, TAD OUTUNIT /GET THE ORIGINAL OUTPUT UNIT. DCA COUTU /AND PLACE I N WIRTE OUT UNIT. TAD OUTNUM /GET NUMBER OF UNITS ITS GOING TO DCA CCOUNT /PLACE IN TEMPORARY COUNTER. TAD CSIZE /GET NUMBER OF BLOCKS LEFT. SNA /ALL DONE??? JMP I CCOPY /YES CLL CML CMA IAC /13 BIT NEGATE. TAD BNUM /NUMBER OF BUFFERS AVAILABLE. SNL SZA CLA /MORE TO GO THEN BUFFERS ALOLOW? JMP CSMALL /NO. BUFFERS BIGGER. TAD BNUM /GET BUFFER SIZE. DCA CINS /STASH IN READ. TAD BNUM DCA COUTS /STASH IN WRITE. JMP CCOM /GO DO READ-WRITE / CSMALL, TAD CSIZE /GET NUMBER LEFT. DCA CINS /STASH IN INPUT SIZE. TAD CSIZE DCA COUTS /AND OUTPUT SIZE. / CCOM, READ /READ IN CORECT NUMBER OF BLOCKS. CINU, 0 /INPUT UNIT. BUFFER /POINTER TO BUFFERS. CINS, 0 /NUMBER OF RECORDS TO BE READ IN. CINB, 0 /STARTING BLOCK NOW OF READ. CCMORE, WRITE /NOW WRITE IT OUT. COUTU, 0 /OUTPUT UNIT BUFFER /BUFFER POINTER COUTS, 0 /NUMBER OF RECORDS. COUTB, 0 /0STARTING RECORD NUMBER. ISZ COUTU /BOP UP TO NEXT OUTPUT UNIT ISZ CCOUNT /MORE UNITS TO WRITE ON?? JMP CCMORE /YEP. GO BACK AND WRITE ON NEXT. / / / TAD CINS /GET THE INPUT SIZE TAD CINB /ADD THE BLOCK NUMBER DCA CINB /AND UPDATE BLOCK NUMBER. TAD COUTS /GET THE OUTPUT SIZE. TAD COUTB /ADD THE COUTPUT SIZE. DCA COUTB /AND UPDATE IT. TAD CINS /GET THE NUMBER OF RECORDS JUST TRANSFERRED. CIA /AND SUBTRACT IT FROM TAD CSIZE /THE TOTAL TRANSFERR DCA CSIZE /AND STORE AWAY. JMP CPLOOP /GO BACK AND DO SOME MORE. / / / / CSIZE, 0 /CURENT NUMBER OF BLOCKS GOING. CCOUNT, 0 /TEMPORAY COUNTER FOR THE UNITS. / / / LLEDER, 0 /GENERATES LEADER OR TRAILER TAD M212 /ABOUT 130 CHARACTERS OF LEADER DCA COUNT TAD L200 AUXOUT /PUT OUT LEADER ISZ COUNT /ALL DONE? JMP .-3 /NOPE, DO MORE. JMP I LLEDER /ALL DONE. EXIT / / / HHPUSH, 0 /HIGH FBLOCK SAVE. MOVE /MOVE FBLOCK TO A SAFE PLACE FSIZE HHTEMP FNAME+3-FSIZE+1 JMP I HHPUSH / / HHPOP, 0 /RESTORES FBLOCK FROM HIGH PLACE MOVE HHTEMP FSIZE FNAME+3-FSIZE+1 JMP I HHPOP / / HHTEMP, 0/HIGH SAVE AREA *HHTEMP+FNAME+3-FSIZE /KEAVE ROOM FOR FBLOCK 0000 /LAST WORD OF SAVE AREA. / / / / TTAPE, 0 /SETS UP TO USE TAPE LIMITS FOR DIRECTORY LOOKUP. MOVE /MOVE IN CORRECT POINTERS TTTSET INDEX CUPPER-INDEX+1 TAD FUNIT /GET THE UNIT AND L7 /SET UP FOR LINC TAPE DCA FUNIT MONE /SET FOR 1 COPY DCA OUTNUM JMP I TTAPE /AND RETURN / / TTTSET, TINDEX /START OF TAPE INDEX BLOCK TILEN /LENGTH OF TAPE INDEX TLOWER /LOWEST BLOCK NUBMER ON DEVICE TUPPER /HIGHEST BLOCK NUMBER ON THE DEVICE TSYSLOWER /LOWER LIMIT OF SYSTEM TSYSUPPER /LAST BLOCK USED BY SYSTEM / / / / TTYPUT, 0 /TTY OUTPUT ROUTINE DCA TTAPE /STASH AWAY WHILE DOING CHECK. CHECKIO /TEST FOR MAYBE A CONTROL Z 6041 /IS IT FREE? JMP .-2 /NOPE. CHECK AGAIN. TAD TTAPE /GET IT AGAIN. 6046 /YEP. GOOD BYE. CLA JMP I TTYPUT /THATS ALL / / / / / / / / EJECT / / / / / / END OF P I P 2. / / / / / SAVE THE SYMBOLS FOR P I P 3. / / / / / / / / SAVSYM 2 / / / / / / EJECT PMODE EJECT / / / / / / / THIS IS THE THIRD PART OF PIP. IT S CALLED: / / / / / P I P 3 / / / / / / LODSYM /RECALL SYMBOLS FROM OTHER PIPS. / / / / / EJECT *3400 / / / B I N A R Y H A N D L E R / / / BINARY, DECODE /GET THE CORRECT INPUT DEVICE. BININP /WHILE DISPLAYING INPUT MESSAGE. MTWO /SET BFIELD TO DO A NEW ONE. DCA BOFIELD DCA ORIGIN /SET ORIGIN TO ZERO DCA BOLDP /SET BASE TO ZERO DCA BFIELD /SET FIELD TO ZERO DCA BOLDO /SET OLD ORIGIN TO ZERO DCA BCOUNT /SET SIZE TO ZERO DCA BFLAG1 /CLEAR THE INPUT AND OUTPUT DEVICE FLAGS. DCA BFLAG2 SEARCH /CHECK IF A LEGAL OPTION WAS GIVEN BINLST BINGO /AND IF IT WAS, GO TO CORRECT PLACE. JMP BINARY /NOT A LEGAL DEVICE. / / / / BHIGH, ISZ BFLAG1 /SET FLAG TOREADER BTTY, ISZ BFLAG1 /SET FLAG TO LOW READER. MORE DEVICE MAY COME / BEFORE THE HIGH READER/ TAD FNAME /TEST TO SEE IF MODE GIVEN CMA SNA CLA JMP BPART2 /NO LETTERS. NOO AUTO START. TAD FNAME /GET LEFT CHARACTER OF NAME. AND L7700 /ONLY P OR L NEEDED DCA FTYPE /AND STASH AWAY SEARCH /CHECK FOR P OR L BGOLST BSTGO JMP BINARY /ILLEGAL / / BPODE, TAD FSIZE /GET STARTING ADDRESS SNA /ONE GIVEN? TAD L200 /NOPE. SET IT TO 200. DCA FSIZE /AND STASH AWAY. PTWO /GET A "PDP" INSTRUCTION INTHE AC JMP BSCOMM /AND STORE AWAY. / BLODE, TAD FSIZE /GET THE STARTING ADDRESS. SNA /ONE GIVEN? TAD L4020 /NO. ASSUME 4020 DCA FSIZE /SAVE BACK STARTING ADDRESS. TAD L6000 /GET .NOT. 10 BIT MASK IN AC. CMA /MKAE IT A GOOD 10 BIT AN D MASK AND FSIZE /JUST 10 BITS. TAD L6000 /NOW MAKE IT A GOOD JMP IN LMODE INSTRUCTION. / I NEEDED A PAGE 0 LOCATION, SO I DID IT THAT WAY / BSCOMM, DCA I BBOOT+1 TAD FSIZE /GET STARTING ADDRESS DCA I BBOOT+3 /PLACE AWAY IN HEADER. MONE /GET A JMP I 7777 IN AC. TAD L6000 /OR 5777 AS THE WORLD KNOWS AND LOVES IT. DCA I BBOOT+2 /AND PLACE AWAY. TAD FUNIT /GET THE FIELD AND L7 /MAKE IT REASONABLE CLL RTL /SHIFT TO CORRECT PLACES. TAD L200 TAD L400 /SAVE A PAGE 0 LITTERAL DCA FUNIT /PLACE BACK TAD FSIZE /GET STARTING ADDRESS. AND L6000 /JUST LMODE FIELD BITS. CLL RTL RAL /INTO CORRECT POSITION. TAD FUNIT /ADD BACK IN CORRECT "LIF" DCA I BBOOT /AND SAVE AWAY. JMP BPART2 /GO TO COMMON. / / / ASMIFZ RF08 /DISK THERE? ASMSKP 2 /NOPE. DON T ASSEMBLE THE FOLLOWING IN. BLRF8, DISC /SET UP DISK INPUT SKP /SKP OVER TAPE SETUP. BLT, TAPE /SET UP TAPE OPERATION. PTWO /TELL DIRECTORY LOOKUP ITS BIANRY DCA FTYPE /FTYPE=2 MEANS A BINARY FILE. PONE DCA FWHAT /SET INPUT SWITCH DIRECT /GO DO IT. / BPART2, HPUSH /PUSH DOWN THE FBLOCK REGION. DECODE /GET THE OUTPUT DEVICE BINOUT /BINARY OUTPUT DISPLAY CMESSAGE SEARCH /CHECK NAEM FOR LEGAL OPTION BINLST /SAME INPUT AS OUTPUT FORR NOW BINGO2 /JMP LIST JMP BPART2+1 /NOT A LEGAL REQUEST. / / BHIGH2, ISZ BFLAG2 /SET THE OUTPUT FLAG BTTY2, ISZ BFLAG2 /FOR THE CORRECT DEVICE ASMIFZ RF08 /DISK THERE???? ASMSKP 2 /NOPE. NO DISK CODE NOW. BLRF82, DISC /SET FOR DISC NOW SKP BLT2, TAPE /SET FOR LINC TAPE, NOT DISC PUSH /SAVE FBLOCK IN LOW SAVE AREA. PTWO /SET BINARY MODE AGAIN. DCA FTYPE /IN CASE OF COPY MONE /IS IT A MASS STORAGE DEVICE OPERATION TAD BFLAG1 TAD BFLAG2 /IF NEGATIVE IT IS. SPA CLA /THE TEST! FILEC /YEP. COPY CHOSEN FILES. TAD BFLAG2 /GET OUTPUT FLAG SZA CLA /TAPE OUTPUT? LEADER /NO. PUNCH LEADER. TAD BFLAG1 /IS IT LINC TAPE INPUT??? SNA CLA JMP I BBTAPE /YEP. GO TO LINC TAPE ROUTINE JMP I BLODYR /NOPE. USE STANDARD BINARY LOADER. / / / / BBTAPE, BINTAP BLODYR, BNFILE L4020, 4020 /NORMAL STARTING ADDRESS IN LINC MODE. / BBOOT, BUFFER+400 /HEADER BLOCK SELF STARTING POINTERS. BUFFER+401 BUFFER+402 BUFFER+403 / BGOLST, 1400 /L*100 6000 /P*100+4000 / BSTGO, BLODE BPODE / / / / / / / / ASMIFN CARD-1 /DO WE WANT CARD READER CRAP LOADERED???? ASMSKP 30 /GUESS NOT. DON T ASSEMBLE THEM. / / CRDLTT, 0 /CARD READER CHECKER AND INITIALIZER. TAD FTYPE /GET THE REPLY . TAD CRM303 /IS IT A "C" SZA CLA /? JMP I CRDLTT /NOPE. RETURN TO CHECK MORE. TAD FUNIT /YEP. GET THE STARTING COLUMN DCA BOLDO /AND STASH AWAY. TAD FSIZE /AND GET THE LAST COLUMN DCA DATA /AND STORE IT AWAY. JMS I CRINIT /ITIALIZE CARD READER. ISZ BFLAG1 /PREPARE TO SET THE INPUT FLAG TO 3 JMP I .+1 /NOW ADD TWO TO THE INPUT FLAG ASCH1 /HIGH SPEED READER=2 / CRM303, -303 /A - "C" CRINIT, CDINIT /POINTE TO CARD READER INITIALIZE ROUTINE. / / / / / / / / / / / / / / / / / EJECT / *3600 / MORE BINARY LOADER ROUTINES AND CRAP. / / / / BNFILE, 6016 /NON FILE ORIENTED ROUUTINES. 6032 /INITIATE AND CLEAR ALL POSSIBLE DEVICES. DCA BFIELD /SET FIELD TO ZERO. DCA BFEILD /AND SET NEXT FIELD TO ZERO ALSO. JMS BEGG /GET A CHARACTER JMP .-1 /LEADER-TRAILER. IGNORE IT. / BGO, DCA BCHECK /UPDATE CHECKSUM TAD BCHAR /GET THE CHARACTER DCA BWORD1 /STORE AWAY AUXIN /LOOKUP FOR NEXT CHAR DCA BWORD2 /AND SAVE JMS BEGG /LOOK AHEAD ONE NOW. JMP BEND /TRAILER FOUND. CHECK CHECKSUM. JMS BASSEM /ASSEMBLE A WORD SNL /ORIGIN? JMP BBBPUT /NO. PLACE IN DATA WORD DCA ORIGIN /YES. STORE IN ORIGIN. BCHEX, TAD BFEILD /GET THE NEXT FIELD DCA BFIELD /AND STORE IT IN THE PRESENT FIELD FOR NEXT TIME TAD BWORD1 TAD BWORD2 TAD BCHECK /UPDATE CHECKSUM JMP BGO /AND GO GET NEXT WORD. / BBBPUT, DCA DATA /PLACE IN DATA FOR OUTPUT ROUTINE TO USE. PUTWORD /GO OUTPUT IT. ISZ ORIGIN /GO TO NEXT LOC. M200, -200 /NOP IN CASE OF SKIP JMP BCHEX /AND UPDATE CHECKSUM / BASSEM, 0 TAD BWORD1 /GET THE FIRST WORD CLL RTL RTL RTL /NOW PLACE IN SECOND PART TAD BWORD2 JMP I BASSEM /NOW EXIT / BEGG, 0 /GETS AND CHECKS A CHARACTER FROM GIVEN SEQUENTIAL DEVICE. DCA TEMP4 /SET SWITCH AUXIN /GET A CHARACTER. TAD M377 /CHECK FOR RUBOUT SZA CLA /? JMP .+4 /NO RUBOUT ISZ TEMP4 /YES. COMPLEMENT SWITCH CMA JMP BEGG+1 /GO BACK AGAIN. TAD TEMP4 /SWITCH SET? SZA CLA JMP BEGG+2 /YEP. STILL IN RUBOUTS TAD BCHAR /GET THE CHAR AND L700 /HIGH ORDER BITS ON? TAD M200 /GET TYPE SPA /IS IT JUST LEADER ISZ BEGG /NO HIGH ORDER BITS ON. SPA SNA CLA /TEST NOW FOR ORIGIN AN D LEADER-TRAILER JMP I BEGG /DATA,ORIGIN, OR LEADER TRAILER TAD BCHAR /FIELD CHARACTER AND L70 /JUST GET FIELD DCA BFEILD /SAVE IN NEXT FIELD TAD BFEILD /GET BACK TAD M20 /MORE TEHN 8 K? SMA CLA NO /YEP. TOOOO BBBIIGGG!!! JMP BEGG+2 / / BEND, JMS BASSEM CIA TAD BCHECK /CHECK CHECKSUM SZA CLA /GOOD? JMP I BCERR /GIVE CHECKSUM MESSAGE. IT BAD JMS I PMORE /ASK IF ANY MORE TAPES? JMP BNFILE MONE /CLOSE THE OUTPUT FILE DCA BFIELD PUTWORD /SEND T O BLAHS. PIP /RETURN TO PIP / / / / / SEQIN, 0 /SEQ INPUT UNIT. CHECKIO /CHECKIO AND LEAVE AC 0 DCA CNTRLZ /CLEAR THE CONTROLZ FLAG TAD BFLAG1 /GET INPUT FLAG. TAD L7777 /SUBTRACT1 SNA CLA JMP SEQTTY SEQTST, GETL /TEST LOW READER FOR A CHAR JMP SEQN1 TAD M232 SNA ISZ CNTRLZ SNA CLA JMP I SEQIN /EXIT / SEQN1, ASMIFN CARD-1 /DO WE WANT CARD READER CHECK LOADED????? ASMSKP 5 /NOPE. DONT ASSEMBLE THEM IN / JMS I SEQCIN /CHECK FOR CARD READER AND GET CHAR. JMP SEQTST /CHAR NOT READY YET. JMP SEQCOM /CHAR READY. / / 6011 /DEVICE IS HIGH SPEED READER. FLAG READY??? JMP SEQTST /GO INTO BIG WAIT LOOP 6016 JMP SEQCOM SEQTTY,GETL /GET A CHARACTER JMP .-1 /WAIT FOR IT SEQCOM, DCA BCHAR /STASH AWAY TAD BCHAR TAD M232 SNA CLA ISZ CNTRLZ TAD BCHAR JMP I SEQIN / / / SEQOUT, 0 /SEQUNETIAL OUTPUT BLOP. DCA SEQIN /SAVE THE CHAR CHECKIO /CHECKIO TAD BFLAG2 /GET THE OTPUT FLAG TAD L7777 SZA CLA JMP SEQO2 /HIGH PUNCH OUTPUT TAD SEQIN PUTL JMP I SEQOUT /OUT IT GOES. / SEQO2, ASMIFZ CARD-1 /DO WE CHECK FOR LINE PRINTER??? JMS I SEQLP /YEP. GO CHECK / CHECKIO /LINE PRINTER ISN T THE ONE. 6021 /WAIT FOR OK. JMP .-2 /WAIT TILL DONE. TAD SEQIN /GET THE CHAR. 6026 /SEND IT OUT SEQEXT, CLA /CLEAR THE AC. JMP I SEQOUT /ALL DONE. / / / / BCHECK, 0 BFEILD, 0 M232, -232 L70, 70 BCERR, CERR / / / / ASMIFN CARD-1 /CARD READER AND LINE PRINTER THERE???? ASMSKP 3 /NOPE. DONT ASSEMBLE IN POINTERS. / SEQCIN, CDREAD /POINTER TO CARD READER ROUTINE. SEQLP, LPTEST /POINTER TO LINE PRINTER ROUTINE. / / / / / / EJECT / / *4000 / / / MORE OF THE BINARY ROUTINES. / / / / 0000 /FIRST 3 LOCATION ARE RESERVED FOR A REGISTESR IN LMODE 0000 0000 / / / / BINTAP, HPOP /INPUT FROM LINC TAPE. TAD FUNIT /GET THE UNIT DCA .+4 /SET UP CONTROL BLOCK READ TAD FBNUM /GET THE STARTING BLOCK NUMBER DCA .+5 /GET BLOCK NUMBER READ /READ IN HEADER BLOCK 0 /PLACED IN UNIT BUFFER+400 /READ HEADER BLOCK IN SECOND BLOCK OF BUFFER. 1 /1 RECOOD 0 /CORECT BLOCK NUMBER HPOP /ZAP IN FBLOCK AGAIN ISZ FBNUM /MOVE PAST HEADER BLOCK JMS I BSETI /SET UP WORD GETTER. TAD M40 /SET UP NUMBER OF 400 WORD BLOCKS TO CHECK DCA BTEMP1 /AND STASH AWAY. TAD BMTAB /GET START OF MEMORY MAP CONFIG. DCA BTEMP2 /AND PLACE AWAY. / BEILOP, TAD M400 /400 WORDS PER RECORD DCA BTEMP3 /SET UP COUNT TAD BTEMP1 /GET THE BLOCK NUMBER TAD L40 /GET BETWEEN 0-37 CLL RTR RTR RAR /MOVE INTO 7400 POSITION DCA ORIGIN /SET UP INITIAL ORIGIN. RTL RTL /MOVE LINC TO FIELD POSITION. DCA BFIELD /AND PLACE IN BFIELD. BETLP2, TAD I BTEMP2 /IS THIS BLOCK USED. SNA CLA /? JMP BEOUT /NOPE. WANDER DOWN. JMS I BGETI /GET A WORD FROM TAPE/ DCA DATA /PLACE IN DATA WORD. PUTWORD /SEND IT DOWN THE LINE. BEOUT, ISZ ORIGIN /BOP UP ORIGIN. NOP ISZ BTEMP3 /BOP UP 400 COUNTER JMP BETLP2 /NOT YET DONE. DO ANOTHER. ISZ BTEMP2 /BOP UP MAP POINTER NOP /IT REALLY CAN SKIP(I FOUND OUT THE HARD WAY) ISZ BTEMP1 /BOP UP BIGCOUNT POINTER JMP BEILOP /GO BACK AND GET NEXT FIELD AND ORIGIN. MONE /ALL DONE. DCA BFIELD /PLACE AN "EOF" ON BFIELD PUTWORD /END OF FILE CODE WORD. PIP /RETURN TO PIP / / / / BTAPE, 0 /MAIN TAPE OUTPUTER. TAD BFIELD /LAST TIME THROUGH? IAC SNA CLA /? JMP I BTEND /YEP. CLOSE FILE. TAD BFIELD /GET THE FIELD CIA TAD BOFIELD /SAME AS LAST ONE? SZA CLA JMP BIDIFF /NOPE. SET TO CHANGE BANKS. TAD ORIGIN /GET THE ORIGIN AND L7400 /JUST HIGH BITS. CIA / TAD BOLDO /ADD IN LAST ORIGIN SZA CLA /SAME 400 WORD BANK?? JMP BIDIFF /NOPE.. CHANGE BANKS. / BINTRY, TAD ORIGIN /GET THE ORIGIN AND L377 /GET IN 400 WORD BANK POSIITION TAD BPOINT /GET START OF BUFFER LOCATION. DCA TEMP /STORE AWAY TAD DATA /GET THE DATA WORD DCA I TEMP /NOW PLACE IN BUFFER TAD ORIGIN /GET ORIGIN AND L7400 /GET JUST BANK NUMBER DCA BOLDO /STASH AWAY. TAD BFIELD /RESET THE FIELD TOO DCA BOFIELD /AND AWAY IT GOES. JMP I BTAPE /GO BACK AND GET ANOTHER WORD. / / BIDIFF, TAD ORIGIN /GET THE ORIGIN RTL RTL AND L7 /MUST MAKE IT BITS 8-11 TAD BFIELD /PUT IN FIELD BIT NOW! RAL /AND ROTATE IN REST OF CRAP. SPA /IS IT FIRST TIME THRU? JMP BINTRY /YEP. DON T DUMP BUFFERS. DCA BTEMP1 /STASH AWAY/ JMS BIDUMP /DUMP PRESENT BUFFERS. TAD BTEMP1 /REGET NEW POSITION DCA BOLDP /AND PLACE I N OLD PLACE TAD BTEMP1 /GET PLACE AGAIN TAD BMTAB /START OF POSITION THING DCA BTEMP2 /CORE MAP TAD I BTEMP2 /GET REFERNCE WORD SNA CLA /IS IT TAKEN? ISZ BCOUNT /NOPE. ANOTHER RECORD TO WRITE OUT LATTER ON. MONE /MEANWHILE.... DCA I BTEMP2 /TELL SYSTEM IT S TAKEN NOW. TAD BTEMP1 /REGET BASE POINTER TAD BMBASE /ADD IN STARTING BLOCK NUMBE DCA .+5 /READ IN NEW CORE IMAGE FOR OVERLAYING. READ /READ IT IN DSYS1, SYSBIN /FROM SYSTEM BINARY UNIT. BUFFER /THIS IS THE GENERAL CORE WORKING AREA FOR THE BINARY. 1 0 /RECORD NUMBER GOES HERE. JMP BINTRY /RETURN TO MAIN PUTTER. / / / BIDUMP, 0 /DUMPS THE PRESENT BUFFER INTO THE CORRECT POSITION. TAD BOLDP /GET OLD POINTER TAD BMBASE /ADD IN THE RECORD NUMBER BASE. DCA .+5 /SAVE AWAY. WRITE /WRITE IT OUT. DSYS2, SYSBIN BUFFER 1 0 JMP I BIDUMP /RETURN / / / / / BMBASE, SYSBBLOCK L377, 377 BPOINT, BUFFER /BINARY CORE WORKING AREA BMTAB, BUFFER+740 /LOADING MAP. BTEND, BTENT L40, 40 BSETI, SETI BGETI, GETI / / / / / / / / EJECT *4200 / / / MORE BINARY LOADER ROUTINES. / / / BTENT, JMS I BBDUMP /DUMP THE BUFFER TAD BCOUNT /NUMBER OF RECORDS SAVED. SNA /ANY AT ALL? NO /NOPE. DCA I BBOINT-1 /STASH IN HEADER BLOCK. WRITE /WRITE OUT HEADER BLOCK NOW. BSYS, SYSBIN BUFFER+400 1 BBBHDR, SYSHDR /POSITION OF HEADER BLOCK ON SYSTEM. / DSYS3=BSYS / POP /BRING BACK FBLOCK FROM LOWER AREA NOW. TAD BCOUNT /REGET THE LENGTH. IAC /ADD 1 FOR HEADER BLOCK DCA FSIZE /SAVE IN CORRECT PLACE. PTWO /SET FOR OUTPUT FILE. DCA FWHAT PTWO /SET FOR BINARY FILE DCA FTYPE DIRECT /LOOKUP UP NAME AND ROOM. HPUSH /STASH AWAY. TAD FBNUM /GET THE STARTING BLOCK DCA OUTBLOCK TAD FUNIT /STASH IN UNIT TOO. DCA OUTUNIT /SET UP OUTPUT UNIT. TAD BSYS /GET INPUT UNIT DCA INUNIT /SET UP INPUT UNIT TAD BBBHDR /POINTER TO HEADER BLOCK DCA INBLOCK /STASH IN INPUT BLOCK NUMBER PONE /SET THE SIZE TO 1 BLOCK DCA FSIZE COPY /COPY THE HEADER BLOCK TO THE CORRECT LOCATION ON TAPE. TAD BBBASE /GET THE BINARY WORK AREA POINTER. DCA INBLOCK /SET THE INPUT UP AGAIN. MOVE /NOW MOVE THE HEADER BLOCK WHICH BUFFER /WE JUST READ INTO BUFFER BY COPY BUFFER+400 /BACK UP TO BUFFER+400 SO WE CAN USE THE HEADER 400 /BLOCK INFORMATION FOR THE COPYING OF THE BLOCKS. TAD BBOINT /START OF MEMORY BLOCK CONFIG. DCA BTEMP1 /SET UP OUTCHECKER TAD M40 /SET UP TO LOOK AT 40 BLOCKS DCA BTEMP3 /BTEMP3 IS OUR COUNTER NOW. ISZ OUTBLOCK /SKIP PAST HEADER BLOCK / BELOOP, TAD I BTEMP1 /GET THE MOMORY USAGE WORD SNA CLA /BLOCK USED? JMP BEEND /NOPE. GO DOWN PONE /SET TO MAKE A 1 BLOCK COPY DCA FSIZE /BY PLACING A "1" IN FSIZE COPY /YEP. COPY A BLOCK ISZ OUTBLOCK /GO TO NEXT OUTBLOCK. BEEND, ISZ INBLOCK /GO TO NEXT INPUT BLOCK ISZ BTEMP1 /BOP MEMORY POINTER NOP /THIS CAN SKIP IF BUFFER WAS SET TO 7000 ISZ BTEMP3 /HAVE WE FINISHED THE HEADER BLOCK? JMP BELOOP /NOT .YET DONE. PIP /ALL DOOE. RETURN TO PIP. / / / BBDUMP, BIDUMP BBBASE, SYSBBLOCK BUFFER+737 /POINTER TO HEADER BLOCK LENGTH. MUST BE AT BBOINT-1 BBOINT, BUFFER+740 /POINTS TO START OF CORE MAP IN HEADER BLOCK / / / / / BBOUT, 0 TAD BFLAG2 /MASS STORAGE OUTPUT??? SZA CLA JMP .+3 /NO. JMS I BBLT /YEP. GO DO IT. JMP I BBOUT /AND RETURN. PONE /IS THIS END OF INPUT??? TAD BFIELD /(BFIELD=7777? SZA CLA JMP BBBBBJ /NOT END. CHECK ORIGIN AND FIELD SETTINGS.% TAD BCOUNT RTR RTR RTR AND L77 AUXOUT TAD BCOUNT AND L77 AUXOUT /OUTPUT CHECKSUM LEADER PIP /GIVE TRAILER AND RETURN TO PIP / BBBBBJ, TAD BFIELD /SEE IF IN SAME DATA FIELD AS BEFORE. CIA TAD BOFIELD /? SNA CLA /? JMP BBN1 /YEP. DON T OD A NEW FIELD TAD BFIELD /GET THE FIELD TAD L700 /PLACE ON TWO HIGH ORDER BITS. AUXOUT /AND OUTPUT IT. JMP BBNEWO /AND GO OUTPUT ORIGIN. / BBN1, TAD BOLDO /IS IS LOCATION+1? CMA TAD ORIGIN /SO THTA IT WOULD LOAD HERE ANYWAY. SNA CLA JMP BBN2 /NEXT LOC. DON T DO A NEW ORIGIN BBNEWO, TAD ORIGIN /NEW ORG. OUTPUT IT ON SEQ. DEVICE RTR RTR RTR /ROTATE RIGHT AND L77 /JUST 6 BITS TAD L100 /PLACE ON ORIGIN BIT JMS BOADD /AND PUT OUT WITH A CHECKSUM TAD ORIGIN /GET THE ORIGIN AND L77 /JUST 6 BITS JMS BOADD /AND OUTPUT IT TOO / BBN2, TAD ORIGIN /GET THE ORGIN DCA BOLDO /AND SAVE IT AWAY. TAD BFIELD /NOW RESET THE FILED TOO DCA BOFIELD /AND STAS AWAY TAD DATA /GET THE DATA RTR RTR RTR AND L77 JMS BOADD /AND PUT IT OUT TAD DATA AND L77 /NOW PUT IT OUT TOO JMS BOADD JMP I BBOUT /NOW EXIT / / / BOADD, 0 DCA TEMP3 TAD TEMP3 TAD BCOUNT DCA BCOUNT /UPDATE BCOUNT TAD TEMP3 AUXOUT /SEND IT ALONG JMP I BOADD / L100, 100 BBLT, BTAPE / / / / / / / / EJECT / / COMMON ROUTINES USED BY BINARY AND ASCII HANDLERS. / / THIS PAGE MAY OVERLAP OR UNDERLAP A LITTLE FROM THE PREVIOU PAGE. / / / / / / / / / / / BINLST, 310 /BINARY INPUT DEVICE LIST. "H" 314 /"L" ASMIFN RF08 /DO WE WANT THE RF08 PRESENT 322 /YES. "R" 4324 /"T" / / / BINGO, BHIGH /HIGH SPEED READER BLT /LINC TAPE ASMIFN RF08 /DISK? BLRF8 /YES. RF08 BTTY /TELETYPE. / / / BINGO2, BHIGH2 BLT2 ASMIFN RF08 BLRF82 BTTY2 / / / / / / / / / / MORE, 0 /DISPLAYS A "MORE" MESSAGE. DECODE /DECODE A LINE MMORE /THATS OUR MESSAGE SEARCH /LLOK UP THE ANSWER MAORN MGOTO /JUMP TABLE JMP MORE+1 /BAD REPLY. MANDM1, ISZ MORE /NO MORE TAPES MANDM2, JMP I MORE /EXIT. / / MAORN, 301 316 4322 / MGOTO, MANDM2 MANDM1 MANDM2 / / MMORE, LEFT+200 TOP-300 / / / / ASMIFN CARD /CARD MESSAGE ASMSKP 10 /THERE. GIVE CARD MESSAGE / / TEXT "FMORE TAPES? HN --- NO MORE TAPES HR --- READ ANOTHER TAPE\" / / / / / / ASMIFZ CARD /CARD READER NOT THERE? ASKSKP 10 /SKIP OVER MESSAGE / / TEXT "FMORE INPUT? HN --- NO MORE INPUT HR --- READ MORE CARDS OR TAPES\" / / / / / / / / / / / / / CERR, DISPLAY /CHECKSUM ERROR DISPLAY. CCERR /DISPLAY MESSAGE JMP .-2 /HANG AROUND UNTIL A ^D OR ^P IS TYPED. / / / CCERR, LEFT+200 TOP-340 TEXT "FCHECKSUM ERROR\" / / / / / / SETI, 0 /SETS UP GETI MONE /BOP DOWN BY 1 TAD FBNUM /GET FIRST BLCOK NUMBER DCA GEENUM /AND PLACE IN READ CALL. TAD FUNIT /GET THE UNIT DCA GUNIT /PLACE AWAY UNIT MONE /SET THE SWITCH DCA GCUNT /TO OVERFLOW FIRST TIME THROUGH JMP I SETI /RETURN / / / / / GETI, 0 /GETS A CHARACTER FROM THE SYSTEM BUFFER. CLA ISZ GCUNT /IS BUFFER EXHAUSED? JMP GOK /NOPE. GET NEXT. TAD M400 /YEP. RESET COUNRTE FOR A NEW BLOCK. DCA GCUNT /COUNTER RESET. TAD GPLACE /GET START OF BUFFER DCA GPLCE2 /STORE AWAY. ISZ GEENUM /BOP UP TO NEXT REOCRD. READ GUNIT, 0 /AND READ IT IN. GPLACE, BUFFER 1 GEENUM, 0 GOK, TAD I GPLCE2 /GET WORD FROM BUFFER ISZ GPLCE2 /BOP UP POINTER JMP I GETI /EXIT / GPLCE2, 0 GCUNT, 0 /GCOUNT ALREADY USED ELSEWHERE / / / / / / / / / / / / / ASMIFZ RF08 /RF08 THERE? ASMSKP 15 /NOPE. DON'T ASSEMLE THIS CRAP. / / ASUGO1, ASULP1 /TRANSFER TABLES FOR SYS AND UNIT COPIES ASUTT1 ASUDD1 ASULP1 / / / ASUGO2, ASULP2 ASUTT2 ASUDD2 ASULP2 / / / / / / / / / / / NOSUCH, 0 /THIS ROUTINE DISPLAYS A DEVICE OVERFLOW MESSAGE DISPLAY /DISPLAY THE "TOO MANY" MESSAGE NOSMES /POINTER TO THE MESSAGE JMP .-2 /HANG AROUND UNTIL A ^D OR ^P IS TYPED. / / / / NOSMES, LEFT TOP-340 /ABOUT THE CENTER OF THE SCREEN TEXT "FTOO MANY UNITS SPECIFIED\" / / / / / / / / / / / / BININP, LEFT+240 TOP-200 / / ASMIFN RF08!CARD /DO WE WANT STANDARD MESSAGE??? ASMSKP 12 /NOPE. DONT ASSEMBLE I.T IN... / / TEXT "FINPUT DEVICE: HH --- HIGH SPEED READER HL --- LINC TAPE HT --- TELETYPE\" / / / / ASMIFZ RF08+1&CARD /DO WE WANT THE CARD READER BUT NO DISK? ASMSKP 13 /YES. DONT ASSEMBLE THAT IN. / / TEXT "FINPUT DEVICE: C --- CARD READER HH --- HIGH SPEED READER L --- LINC TAPE T --- TELETYPE\" / / / / / / / ASMIFZ CARD+1&RF08 /ASSEMBLE FOLLOWING MESSAGE IF DISK BUT NO CARD READER. ASMSKP 13 /SKIP OVER IT. / / TEXT "FINPUT DEVICE: HH --- HIGH SPEED READER L --- LINC TAPE R --- RF08,RK08 DISK T --- TELETYPE\" / / / / / / / ASMIFZ RF08&CARD /DO WE WANT BOTH DISK AND CARD? ASMSKP 14 /NOPE. NOT THIS MESSAGE. / / TEXT "FINPUT DEVICE: C --- CARD READER HH --- HIGH SPEED READER L --- LINC TAPE R --- RF08,RK08 DISK T --- TELETYPE\" / / / / / / / / / / / / / / / / / / / / / / / / BINOUT, LEFT+240 TOP-200 / / / ASMIFN CARD!RF08 /DO WE WANT STANDARD OUTPUT DEVICES. ASMSKP 12 /NOPE. DONT ASSEMBLE THEM IN. / / TEXT "FOUTPUT DEVICE: HH --- HIGH SPEED PUNCH HL --- LINC TAPE HT --- TELETYPE\" / / / / ASMIFZ RF08+1&CARD /DO WE WANT THE LINE PRINTER ROUTINES LOADED?? ASMSKP 13 /DO NOT DISPLAY LINE PRINTER MESSAGES. / / TEXT "FOUTPUT DEVICE: HH --- HIGH SPEED PUNCH L --- LINC TAPE P --- LINE PRINTER T --- TELETYPE\" / / / / / / / / ASMIFZ CARD+1&RF08 /DO WE WANT DISK BUT NOT PRINTER? ASMSKP 13 /NOPE. SKIP OVER MESSAGE. / / TEXT "FOUTPUT DEVICE: HH --- HIGH SPEED PUNCH L --- LINC TAPE R --- RF08,RK08 DISK T --- TELETYPE\" / / / / / / ASMIFZ CARD&RF08 /DO WE WANT BOTH PRINTER AND DISK? ASKSKP 14 /NOPE. DONT ASSEMBLE IN THIS MESSAGE / / TEXT "FOUTPUT DEVICE: HH --- HIGH SPEED PUNCH L --- LINC TAPE P --- LINE PRINTER R --- RF08,RK08 DISK T --- TELETYPE\" / / / / / / / / / / / / EJECT / / / THIS IS THE CONVERTER ROUTINE. / IT CONVERTS A SOURCE FILE FROM THE OLD TYPE(DOLLAR SIGN IS FILE TERMINATOR) / TO THE NEW FORMAT(00 IS THE FILE TERMINATOR). / IT IS CONDITIONAL ASSEMBLED IN BY SETTING THE / SWITCH "REMAKE" TO 1. / SINCE IN FUTURE VERSIONS THIS WON T BE NECESSARY, YOU WILL SET REMAKE TO 0. / / / / / / / / / / ASMIFZ REMAKE /DO WE WANT TO ASSEMBLE CONVERTER?? ASMSKP 114 /NOPE. SKIP PAST THE CODE / / / / / KONVRT, DECODE /GET THE INPUT FILE. ASCINP /DISPLAY SOURCE MESSAGE. TAD FTYPE /GET THE REPLY TAD M314 /IS IT AN L SZA CLA JMP KONVRT /NOPE. ASK AGAIN. PONE /SET THE TYPE TO SOURCE DCA FTYPE PONE /AND THE SWITCH FOR "INPUT" DCA FWHAT DIRECT /AND LOOKUP UP NAME IN DIRECTORY. TAD FSIZE /GET THE NUMBER OF BLOCKS. DCA BTEMP3 /AND STASH AWAY. TAD FBNUM /GET THE FIRST BLOCK DCA KINB /SET UP THE READ. TAD FBNUM DCA KOUTB /AND ALSO THE REWRITE. TAD FUNIT /GET THE UNIT DCA KINU /AND SET UP THE TAD FUNIT /READ AND WRITE UNITS DCA KOUTU MONE /SET THE SWITCH SO NO DOLLAR SIGN FOOND. DCA BTEMP2 /AND STASH AWAY. SKP /SKIP PAST DECEREMENTER. KLOOP, MONE /SUBRACT ONE FROM NUMBER OF BLOCKS TO GO. TAD BTEMP3 /THE NUMBER TO GO. DCA BTEMP3 TAD BTEMP3 /NUM TO GO AND BTEMP2 /ARE WE ALL DONE??? SNA CLA PIP /YEP. RETURN TO PIP. READ /NOPE. READ IN NEXT BLOCK. KINU, 0 /INPUT UNIT BUFFER 1 /1 RECORD KINB, 0 /BLOCK NUMBER ISZ KINB /FOR NEXT READ. LINC LMODE /GET OVER INTO A NICE MODE LDF 3 /INTO BUFFER REGION SET I 1 /SET 1 TO START OF INPUT PMODE /GET OVER INTO 8 MODE FOR COMPARISONS. ASMIFZ BUFFER-6000 /BUFFEE AT 6000? BUFFER+1777 /YEP. DO FOLOLOWING TO GET COREECT ADDRESS ASMIFN BUFFER-6000 /IS ITTNOT AT 6000?? BUFFER-1 /YEP. SET UP CORRECT POINTER NOW. LMODE LMODE /GET BACK INTO LMODE ASSEMLBY. SET I 2 /SET UP CHAR COUNT -1000 KLOOP2, LDH I 1 /GET A CAR SHD I /IS IT A 4444 /DOLLAR SIGN CLR /YEP. CONVERT TO A 00 STH 1 /AND PLACE BACK IN BUFFER. AZE I /YAS IT A DLOLAR SIGN??? STC BTEMP2 /YEP. END OF FILE NOW. XSK I 2 /ALL DONE WITH THIS BUFFER????? JMP KLOOP2 /NOPE. GET NEXT CHAR. PDP /GET BACK INTO 8 MODE PMODE CLA /CLEAR HTE AC TO BE SURE. WRITE /WRITE OUT CONVERTED BLOCK KOUTU, 0 BUFFER 1 KOUTB, 0 ISZ KOUTB /BOP UP BUFFER POOINTER. JMP KLOOP /AND GO BACK AND TRY NEXT ONE. / / / / / / / / / / / / / / / / / EJECT / SAVE THE SYMBOLS FOR P I P 4 / / / / / / SAVSYM 2 / / / / / / / / / EJECT PMODE EJECT / / / / / / P I P 4 / / / / / THIS IS THE FOURTH PART OF PIP / / / / / / / / / / LODSYM /RECALL OLD SAVED SYMBOLS. / / / / / / / / / / / / / EJECT / / *5000 / / / / / / S O U R C E H A N D L E R / / / / / / ASCINP=BININP /SAME DEFINITIONS AS BINARY(FOR NOW , ANYWAY) ASCOUT=BINOUT ASCLST=BINLST ASCLTO=ASCLST / / / / / / ASCII, DECODE /GET THE INPUT REQUEST NOW ASCINP /DISPLAY THE POSSIBLE INPUT DEVICES. DCA BFLAG1 DCA BFLAG2 DCA BCOUNT DCA ORIGIN DCA BFIELD DCA BOLDP DCA CNTRLZ /INITIALIE VARIOUS POINTERS AND COUNTS. ASMIFZ CARD-1 /ASSEMBLE NEXT CHECK IF CARD READER DEISRED. JMS I ACRCHK /SEE IF ITS A "C" FOR THE CARD READER SEARCH /SEARCH THE LIST FOR A GOOD OPTION ASCLST /LIST OF GOOD CHARS ASCGO /WHERE TO GO FOR THEM JMP ASCII /NO LEGAL REQUEST THERE. / / ASMIFZ CARD-1 /ASSEMBLE IN CARD POINTER IF CARD READER DESIRED. ACRCHK, CRDLTT /CARD READER POINTER. / / ASCH1, ISZ BFLAG1 //SET FOR HIGH SPPEED READER ASCT1, ISZ BFLAG1 /SET FO R TTY JMP APART2 /GO AND GET OUTPUT / / ASMIFZ RF08 /DO WE HAVE THE DISK? ASMSKP 2 /NOPE. SKIP OVER DISK INSTRUCTIONS ASRF8, DISC /SET UP FOR DISK OPERATION SKP ASCT, TAPE /SET FOR TAPE OPERATION PONE /SET TO INPUT AND SOURCE DCA FWHAT PONE DCA FTYPE DIRECT /LOOKUP UP NAME NOW. HPUSH /AND SAVE IT AWAY / APART2, DECODE /GET THE OUTPUT DEVICE ASCOUT SEARCH /LOOKUP UP REPLY ASCLTO ASCGO2 /GO TO WHERE IT POINTS ASMIFZ CARD-1 /IS LINE PRINTER THERE???? JMS I ASCLPT /CHECK IF "P" TYPED AND INITIALIZE LINEPRINTER. JMP APART2 /N OT A GOOD REPLY / / ASMIFZ CARD-1 /ASSEMBLE IN PRINTER POINTER? ASCLPT, LPT2 /POINTER TO CHECKER AND INITIALIZER. / / ASCH2, ISZ BFLAG2 /SET TO HIGH OUTPUT ASCT2, ISZ BFLAG2 /SET TO TTY OUTPUT / ASMIFZ RF08 /DO WE HAVE THE DISK ROUTINES? ASMSKP 2 /NOPE. SKIP NEXT TWO INSTRUCTIONS. ASRF82, DISC /SET UP FOR DISK OPERATION SKP ASCTT, TAPE /SET FOR A TAPE OPERATION, SHOULD THERE BE ONE. PONE DCA FTYPE /SET FOR SOURCE MODD. MONE TAD BFLAG1 TAD BFLAG2 /IS IT MASS STORAGE TO MASS STORAGE. SPA CLA /???? FILEC /YEP. DO TRANSFER NOW. 6016 /INITIALIZE HIGH READER. 6032 /CLEAR TTY AND AC. ALSO ANY OTHER DEVICES RIGH NOW. PUSH /SAVE OUTPUT FILE INFORMATION HPOP /BRING IN INPUT FILE INFORMATION JMS I ASETI /SET UP SEQUENTIAL TAPE INPUT TAD BFLAG2 /ARE WE GOING TO TAPE SZA CLA LEADER /NO. WE BETTER GENERATE SOME LEADER NOW. / / / / ALOOP, TAD BFLAG1 /GET THE INPUT DEVICE POINTER. SZA CLA /FROM A FILE? JMP .+3 /NOPE. JMS I AAGET /YEP. GET A CHAR NOW SKP /SKP OVER BELOW GET. AUXIN /IF NOT FROM A FILE, GET THE CHAR NOW. AND L177 AND L177 /MAKE INTO A GOOD ASCII CHARACTER. TAD L200 /WITH PARITY BIT ON. DCA FTYPE /AND STORE AWAY. TAD CNTRLZ /WAS A CONTROL Z TYPED? SZA CLA JMP AEND /YEP. DO END SEARCH /SEARCH FOR POSIBLE SPECIAL CHARACTERS. AC1 AG1 JMS I AALIMC /CHECK TO SEE IF IT S IN 240-337 LIMITS. JMP ABAD / IT ISN.T IGNORE IT. / AOK, JMS APUTIT /CHAR OK AS IS. OUTPUTTIT. JMP ALOOP /GO BACK AND GET ANOTHER ONE. / / ABAD, JMP ALOOP /BAD CHAR. GET NEXT ONE / / / AEND, TAD BFLAG1 /IS IT MASS INPUT? SNA CLA JMP AEND2 /YEP. IGNORE STANDARD PAPER TAPE CRAP. JMS I PMORE /ASK FOR MORE TAPES?? JMP ALOOP /HE S GOT ANOTHER TAPE. AEND2, JMS ACRR /PLACE A CR IN THE BUFFER. TAD AABLAH /GETE THE EOT-Z CHAR DCA FTYPE /AND PLACE IN THE BUFFER JMS APUTIT JMS APUTIT /PLACE IT OUT THERE MONE /IF LASS STOREAGE IT NEVER RETURNS TO HERE DCA FTYPE /PLACE A RUBOUT ON BUS JMS APUTIT /AND SEND IT OUT JMS ACRR /DO ANOTHER CARRIGE RETURN. LEADER /THEN GENERATE TRAILER PIP /AND FINALLY GO BACK TO PIP / / / / ACR, JMS ACRR /COMES HERE IF A CR ENCOUNTERED. JMP ALOOP JMP ALOOP /GET NEXT CHAR / / ACRR, 0 /GENERATES A CR,LF,RUBOUT TAD AC1 /215 DCA FTYPE JMS APUTIT /OUT GOES THE C R TAD M212 CIA DCA FTYPE JMS APUTIT /OUT GOES THE L F MONE DCA FTYPE JMS APUTIT /OUT GOES THE RUBOUT JMP I ACRR /RETURN / / / APUTIT, 0 /SENDS A CHAR ALONG CORRECTLY TAD BFLAG2 /WHERES IT GOING? SZA CLA JMP .+3 /TO THE SEQUENTIAL DEVICE JMS I AAAPUT /PLACE IN MASS BUFFER. JMP I APUTIT /AND RETURN TAD FTYPE /GET THE CHAR AUXOUT /GOOD BYE JMP I APUTIT /AND RETURN. / / AAAPUT, AAPUT ASETI, SETI AAGET, AAAGET AALIMC, GGLIMC /LIMIT CHECKER / / / / AC1, 215 300 337 243 ASMIFZ TERMC-44 /IS 44 A LEGAL CHAR??? 244 /NO. ASSEMBLE INTO THE EXCEPTION TABLE. 247 AABLAH, 232 4211 /END OF THE LIST / / / / / ASCGO, ASCH1 ASCT ASMIFN RF08 /DO WE HAVE DISK? ASRF8 /YEP. ASSEMBLE IN BRANCH ASCT1 / / / / / / / / / / / EJECT / THIS PAGE OVERLAPS A LITTLE FROM PREVIOUS PAGE. / / / / MORE OF THE ASCII HANDLER. / / / / / AAPUT, 0 SEARCH /CHECK FOR A SPECIAL CONTROL CHAR. AC1 /SAME LIST IS OK. AG2 TAD FTYPE /GET THE CHAR TAD M240 SPA CLA JMP AP /TOO SMALL. NOG A REGULAR CHAR. TAD FTYPE TAD M340 SMA CLA JMP AP /TOO BIG. IT S NO GOOD. TAD FTYPE /GET THE CHAR AGAIN AND L77 /JUST THE LOW ORDER BITS. AAA1, JMS AAAAAA /PLACE THE CHAR IN THE BUFFER. JMP I AAPUT /AND EXIT/ / / / AP, JMP I AAPUT /BAD CHAR. / APCR, TAD AL43 /CR FOUND. PLACE A "43" IN THE BUFFER JMP AAA1 /STICK IN BUFFER / AATAB, TAD L7 TAD AL40 /CONVERT TAB TO A 47 JMP AAA1 / / / AAEND, ASMIFN TERMC-44 /IS 44 THE END OF FILE CHARACTER? ASMSKP 2 /NO. ZERO IS. IGNORE NEXT TWO STATEMENTS. PFOUR /DOLLAR SIGN IS THE END OF BUFFER CRAP TAD AL40 /MAKE IT INTO A DOLLAR SIGN JMS AAAAAA /AND PLACE EOF CHAR IN THE BUFFER. TAD AAAORG /SEE IF BUFFER IS WRITTEN OUT. CMA AND BOLDP /BY CHECKING ENDING ADDRESS SNA CLA JMP .+3 /BUFFER IS CLEAR AND WRITTEN OUT. JMS AAAAAA /BUFFER STILL IN USE. ADD 1 CHAR AND SEE IF DUMPED. JMP .-6 /NOT DUMPED. WAIT. TAD AAUNIT /GET THE UNIT DCA FUNIT /AND FLACE AWAY TAD AABLOCK /GET THE FIRST BLOCK DCA FBNUM /AND STASH AWAY. TAD AABLOCK /GET THE FIRST BLOCK CIA TAD AAOUTB /ADD IN NEXT BLOCK TO GET SIZE. DCA FSIZE /AND STASH AWAY. PONE /SET FOR SEOURCE DCA FTYPE HPUSH /NOW STASH THIS AWAY FOR FILEC TO USE. POP /REGET THE OUTPUT UNIT CONFIGUARTATION. FILEC /AND DO A DIRCTORY TYPE COPY. / / / / / AAAAAA, 0 /PLACES HALF A CHAR IN THE BUFFER. DCA BTEMP1 TAD BFIELD /FIRST TIME THROUGH? SZA CLA JMP AAA /NOPE. IGNORE SETUP ISZ BFIELD /SET SWITCH TAD AABLOCK /GET START OF BINARY CRAP. DCA AAOUTB /AND SET UP WRITE BLOCK. TAD AAAORG /GET THE LOCATION OF START DCA BOLDP /AND SAVE IN THE ADDRESS MONE /SET THE SWITCH TO PLACE IN LEFT HALF OF WORD. DCA ORIGIN TAD M400 /SET THE WORD COUNTER DCA BTEMP3 /TO 400 WORDS TO GO IN BUFFER. / / ASMIFN STAR20-1 /DO WE WANT TO STICK IN A "*20" AT BEGINNING OF FILE??? ASMSKP 13 /NOPE. DONT ASSEMBLETHEM IN. / TAD A5262 /GET A "*20" AND PLACE IT DCA I BOLDP ISZ BOLDP /IN FIRST TWO WORDS OF FILE. TAD A6043 DCA I BOLDP ISZ BOLDP /BOP UP THE IN POINTER. ISZ BTEMP3 ISZ BTEMP3 /INCREMENT THE BUFFER COUNTER BY 2. / TAD AL43 /TELL BUFFERS WE JUST PUT A "43" IN IT. DCA ALASTC /BY PLACING IT IN LAST CAR INSERTED. / AAA, TAD BTEMP1 /GET THE CAR CIA TAD AL43 /IS IT A 43 SZA CLA JMP .+6 /NOPE. INSERT IT TAD ALASTC /GET PREVIOUS CHAR CIA TAD AL43 /WAS IT ALSO A 43 SNA CLA JMP I AAAAAA /YEP. IGNORE IT. TAD BTEMP1 /UPDATE OLD CHAR DCA ALASTC ISZ ORIGIN /TEST LEFT OR RIGHT SWITCH JMP AAA2 /RIGHT HALF TAD BTEMP1 /LEFT HALF RTL RTL RTL AND L7700 /PLACE IN LEFT HALF OF WORD DCA I BOLDP /AND STASH AWAY. JMP I AAAAAA /AND EXIT NOW. / AAA2, MONE DCA ORIGIN /RESET HALF SWITCI. TAD BTEMP1 /PLACE IN RIGHT HALF OF WORD. AND L77 TAD I BOLDP DCA I BOLDP /AND PLACE IT AWAY. ISZ BOLDP /THAT ALL> NOP /THIS CAN SKIP IF BUFFER=7400 ISZ BTEMP3 /INCREMENT THE COUNTER. ALL DONE WITH THIS BUFFER? JMP I AAAAAA /NOPE. BUFFER STILL GOOD. TAD AAAORG /BUFFER FULL. RESET POINTER. DCA BOLDP TAD M400 DCA BTEMP3 /RESET COUNTER. TAD AAOUTB /GET THE OUTPUT BLOCK TAD AALIM /WILL IT EXCEED WORKING AREA? SNA CLA NO /YEP, IT WILL. GIVE ERROR MESSAGE. WRITE /WRITE OUT FULL BUFFER. AAUNIT, SYSBIN AAAORG, BUFFER 1 AAOUTB, 0 ISZ AAOUTB /BOP UP BLOCK JMP I AAAAAA /AND EXIT / DSYS4=AAUNIT / / ASMIFN STAR20-1 /DO WE WANT THE "*20" LITERALS IN??? ASMSKP 3 /NOPE. DON T PUT THEM IN. / A5262, 5262 A6043, 6043 / AABLOCK, SYSBBLOCK AL40, 40 AL43, 43 ALASTC, 0 AALIM, -SYSWT-1 /MAXIMUM SIZE OF THE WORKSPACE. / / / / / / / / / / / / AG1, ACR ABAD ABAD ABAD ASMIFZ TERMC-44 /SHOULD WE IGNORE DOLLAR SIGNS? ABAD /YEP. ASSEMBLE IN THE POINTER ABAD AEND AOK / / / / / / / ASCGO2, ASCH2 ASCTT ASMIFN RF08 /DISK THERE? ASRF82 /YEP. ASCT2 / / / / / / / / / / / / / / / / / EJECT / MORE ASCII HANDLERS / / WHICH OVERLAP SOME MORE FROM THE PREVIOUS PAGE. / / / / / / / / / / / / / / / AAAGET, 0 /MAIN BUFFER GETTER ROUTINE CLA TAD BFIELD SZA CLA /ARE WE ACTIVE? JMP AAGET2 /YEP. IGNORE NEXT. ISZ BFIELD /SET STATUS SWITCH / ASMIFN STAR20-1 /DO WE WANT TO SKIP PAST A "*20" ASMSKP 3 /NOPE. NO *20 SKIP. / JMS I AGETI /GET A WORD JMS I AGETI /GET TWO WORDS (BYPASS "*20") / MONE DCA ORIGIN / LEFT HALF OF WORD CHAR. / AAGET2, ISZ ORIGIN /WHICH HALF? JMP AAGET3 /RIGHT HALF . JMS I AGETI /GET A WORD. DCA BOLDP /AND STASH AWAY TAD BOLDP /RETURN WITH ITS VALUE. RTR RTR RTR /SHIFT TO CORRECT POSITION. JMP AAGET4 /GO DOWN AND GET REST. / AAGET3, MONE DCA ORIGIN /RESET RIGHT-LEFT SWITHC. TAD BOLDP /GET THE RIGHT CHAR AAGET4, AND L77 /JUST GET 6 BITS DCA FTYPE /STORE AWAY. SEARCH /CHECK FOR A NO NO. AAGL1 AAGO1 TAD FTYPE TAD M40 /FIGURE OUT CORRECT BIT 4 SPA />40. A 20 0 TYPE CHARACTER TAD A100 /<40 A 300 TXPE CHAR. TAD AAGET3 /ADD IN 240 (ACTUALLY 7240) AND A377 /JUST MAKE IT8 BITS JMP I AAAGET /AND EXIT. / / A100, 100 A377, 377 AGETI, GETI / / AACR, TAD M215 /CARRIGE RETURN CIA JMP I AAAGET / AAATAB, PONE TAD L10 TAD L200 JMP I AAAGET / AAAEND, PTWO TAD L30 TAD L200 JMP I AAAGET /EXIT WITH A CONTROL Z IN THE AC. / / / / / AAGL1, 0 ASMIFZ TERMC-44 /IS 44 THE END OF FILE CHAR? 44 /YEP. ON 44 GO TO THE CONTROL Z GENERATOR. 43 47 4037 /END OF LIST / AAGO1, ASMIFN TERMC-44 AAAEND /00 IS THE END OF FILE CHARQACTER. ASMIFZ TERMC-44 AAAGET+1 /44 (DOLLAR SIGN) IS THE TERMINATOR. ASMIFZ TERMC-44 /IS DOLLAR SIGN LEGAL? AAAEND /NOPE. IT S THE END OF FILE CHAR. AACR AAATAB AAAGET+1 / AG2, APCR AP AP ASMIFZ TERMC-44 /ASMEBLE IGNORE CHARACTER IF DOLLA.R IS THE END OF FILE CAHR... AP AP AP AAEND AATAB / / / / / / / / / / / / ABDIS, LEFT+200 TOP-240 ASMIFN REMAKE!RF08 /DO WE WANT REMAKE OPTION OR THE DISK? ASMSKP 5 /YEP. SKIP NEXT MESSAGE. TEXT "FAUXILIARY OPTIONS: HC --- COPY SPECIFED BLOCKS HD --- DUPLICATE TAPE 0 ONTO 1\" / / / / / ASMIFZ REMAKE /DO WE WANT REMAKE MESSAGE? ASMSKP 6 /YEP. PUT IN MESSAGE. TEXT "FAUXILIARY OPTIONS: HC --- COPY SPECIFIED BLOCKS HD --- DUPLICATE TAPE 0 ONTO 1 HR --- REFORMAT FILE\" / / / / / / / / / / ASMIFZ RF08 /DO WE WANT THE RF08 OPTIONS. ASKSKP 6 /NOPE. DON T PUT IN THE MESSAGE. / / TEXT "FAUXILIARY OPTIONS: C --- COPY SPECIFIED BLOCKS D --- DUPLICATE TAPE 0 ONTO 1 S --- COPY SYSTEM U --- COPY UNIT\" / / / / / / / / / / / / / / EJECT / / / / / *5600 / / / / / THIS IS THE ABSOLUTE BLOCK HANDLER / / / / / / / / / CINPUT=ASCINP /SAME AS SOURCE INPUT(FOR NOW) COUTPUT=ASCOUT /SAME AS SOURCE FOR NOW. / / / ABSOL, DECODE /GIVE THE MESSAGE AND WAIT FOR A REPLY. ABDIS /ABSOLUTE DISPLAY CRAP. TAD FUNIT /GET THE NUMBER OF ADDITION AL UNITS. AND L7 /ONLY 3 GOOD BITS ALWLOED. SNA /WAS IT ZERO? PONE /YEP. MAKE IT INTO A ONE. CIA /COMP TO SET UP COUNT DCA ABSTMP /AND STORE AWAY IN COUNTER SET. SEARCH /LOOKUP THE RELYP. ABL1 ABG1 JMP ABSOL /ILLEGAL REPLY. / / / / DUP, DCA INUNIT /COPIES 0 TO 1 OR MORE TAPES. DCA INBLOCK /SET UP INPUT UNIT AND BLOCK TO 0, OUTPUT BLOCK TO 0. DCA OUTBLOCK PONE DCA OUTUNIT /SET THE OUTPUT UNIT TO 1 CLA CLL CML RTR /2000 RAR /1000. A 1000 BLOCK COPY. DCA FSIZE /SET UP SIZE. COPY /THEN GO DO OCPY. PIP /RETURN TO PIP WHEN DONE / / / ACOPY, DECODE /GET THE INPUT DEVICE AND BLOCK NUMBER. CINPUT /FROM THE COPY INPUT CRAP. SEARCH /LOOK-UP REPLY. ACPL1 /INPUT LIST ACPG1 /GO TO LIST JMP ACOPY /NO GOOD REPLY FOUND / / / / / / ASMIFZ RF08 /DISK? ASKSKP 2 /NO DISK HANDLERS THERE. ACOPR, DISC /SET UP FOR DISK SKP ACOPT, TAPE /SET UP FOR TAPE TAD FUNIT DCA INUNIT /SET UP THE INPUT UNIT NOW. PUSH /SAV THE SIZE BECUASE DECODE MIGH ZAP IT. JMS AGETN /GET THE STARTING BLOCK NUMBER. JMP ACOPY /NOT ALL LEGAL NUMBERS. TAD AGNUM /GET THE BLOCK NUMBER DCA INBLOCK /AND SAVE AWAY. ACOPY2, DECODE /GET THE OUTPUT DEVICE COUTPUT /DISPLAY CHOICES SEARCH /LOOK UP THE REPLY ACPL1 ACPG2 JMP ACOPY2 /NOT A LEGAL REPLY / / / / / ASMIFZ RF08 /DISK? ASMSKP 2 /NOPE. ACOPR2, DISC /SET UP FOR DISK SKP ACOPT2, TAPE /SET UP FOR TAPE TAD FUNIT /GET THE CORRECT OUTPUT UNIT DCA OUTUNIT /AND STASH AWAY. JMS AGETN /GET THE BLOCK NUMBER. JMP ACOPY2 /NOT A LEBGAL NUMBER TAD AGNUM /GET THE STARTING BLOCK DCA OUTBLOCK /AND STASH AWAY. POP /RESTORE THE SIZE OF THE COPY. TAD ABSTMP /RECALL THE NUMBER OF COPIES TO MAKE DCA OUTNUM /AND SAVE IN THE COPY PARAMETER COPY /AND DO IT. PIP /RETURN TO PIP WHEN DONE. / / / / / ABSTMP, 0 / / / ACPL1=BINLST / ACPG1, ACOPY /ILLEGAL REPLY ACOPT /LINC TAPE ASMIFN RF08 /DISK? ACOPR /YES. DISK ACOPY /ILLEGAL / / / ACPG2, ACOPY2 /ILLEGAL ACOPT2 /LINC TAPE ASMIFN RF08 /DISK? ACOPR2 /YES. ACOPY2 /ILLEGAL / / AGETN, 0 /CONVERTS FNAME INTO A NUMBER(IF NOT THERE RETURNS TO .+1, OTHERWSIE TO .+2) LINC /GO OVELMODE LMODE SET I 1 /SET 1 TO POINT TO FNAME BLOCK. FNAME+6000-1 LDF 0 /IN DF 0 STC AGNUM /ZAP OUT PRESENT NUMBER. SET I 2 /SET 2 TO A COUNT. -5 AALOOP, LDH I 1 /GET THE NEXT CHAR FROM FNAME. SHD I /IS IT A 77 7777 /WHICH IS END OF NUMBER? JMP ALD /YEP. EXIT. ADA I /IS IT TOO SMALL? -57 /(BELOW 60) APO JMP AALL /YEP. BAD CHAR. ADA I /IS IT TOO LARGE -11 /(ABOVE 70) APO I JMP AALL /YEP. BAD CHAR. LDA I /GET OLD TOTAL AGNUM, 0 ROL 3 /MULTIPLY BY 10 BCL I 7 STC AGNUM /MULTIPLY DONE LDH 1 /REGET THE NUMBER ADA I -60 /CHOP OFF CHAR BITS ADD AGNUM /ADD IN OLD TOTAL. AZE I /IF NOT ZERO THEN SKP CLR /IF ZERO , ZERO AC TO 0000, IN CASE IT WAS 7777, WHICH IS EVIL IN 8 MODE. STC AGNUM /STASH AWAY SOMEPLACE O OTHER. XSK I 2 /BOP UP COUNT JMP AALOOP /MORE TO GO. JMP AALL /TOO MANY DIGITS. NUM TOO LARGE. / / / / ALD, PDP /GET INTO PMODE PMODE ISZ AGETN /GO TO GOOD RETURN / LMODE / AALL, PDP /GET INTO 8 MODE PMODE /WE RE BACK IN PMODE NOW. CLA /CLEAR THE AC JMP I AGETN /AND EXIT. / / / / / / / / / / / / ABL1, 303 ASMIFN REMAKE /REMAKE OPTION INCLUDED??? 322 /YEP. PLACE CHECK CHAR IN LIST. ASMIFZ RF08 /DISK THERE ASMSKP 2 /NOPE. DO NTT OUT IN S AND U 323 325 4304 / ABG1, ACOPY ASMIFN REMAKE /REMAKE OPTION??? KONVRT /YEP. PLACE IN POINTER OPTION. ASMIFZ RF08 /HOW ABOUT THE POINTERS? ASKSKP 2 /NOT THERE AASYSC AAUNTC DUP / / / / / / / / / / / / / / / ASMIFN CARD-1 /DO WE WANT LINE PRINTRTER.??? ASMSKP 30 /NOPE. DONT ASEEMBLE IT N. / / / LPT2, 0 /LINE PRINTER CHECKER AND INITIALIZER. TAD FTYPE /GET THE OUTPUT DEVICE TAD LPM320 /IS IT A "P" SZA CLA /? JMP I LPT2 /NOPE. RETURN TO CHECK SOME MORE. JMS I LLPEJ2 /YEP. GIVE TWO EJECTS TO GET THINGS GOING. ISZ BFLAG2 /PREPARE TO SET OUTPUT FLAG TO 3 JMP I .+1 /RETURN AND ADD TWO MORE TO BFLGA2 ASCH2 /HIGH SPPEED PUNCH SETTER / LPM320, -320 /"P" LLPEJ2, LPEJ2 /POINTER TO EJECTOR ROUTINE. / / / / / / / / / / / / / / / / / / / / EJECT / / / / ASMIFN CARD-1 /DO WE WANT THE WARD READER ROUTINE IN THERE?????? ASMSKP 2237-1415 /NOPE. SKIP PAST THE MESS. / / / / *6000 / / / / / CARD READER AND LINE PRINTER ROUTINES. / / / 0000 /FOR JMPS IN LMODE / / / LMODE /DEFINE SYMBOLS IN LMODE IN CASE OF ADDRESSING ERRORS WHILE ASSEMBLING / CDCUNT, 0000 CPOINT, 0000 CDSWT, 0000 CDCONT, 0000 / / / / / PMODE /TELL IT WE RE BACK IN PMODE NOW. / / / / RCSF=6631 /SKIP IF COLUMN READY. RCRA=6632 /READ IN AN ALPHA CHAR RCRB=6634 /READ IN A BINARY CHAR. RCSD=6671 /SKIP IF END OF CARD. RCSE=6672 /START A NEW CARD MOVING AND SKIP IF OK. RCRD=6674 /TURN OFF THE CARD DONE FLAG. / / / / / / / CDINIT, 0 /INITIALIZE THE CARD READER. DCA BTEMP3 /CLEAR THE CARD MOVING FLAG. DCA BTEMP2 /CLEAR THE CARD IN BUFFER FLAG. TAD BOLDO /GET THE FIRST COLUMN TO BE LOOKED AT. TAD DATA /GET THE LAST COLUMN TO DE DONE. SNA CLA /OBTH ZERO? TAD CDL110 /GET A 72 IN THE AC. SZA /IS IT ZERO??? DCA DATA /NOPE. STORE THE 72 IN THE LAST COLUMN SCAN. TAD DATA /GET THE LAST COLUMN AGAIN CMA /NEGATE IT TAD BOLDO /IS THE FIRST > LAST??? CDL100, SMA CLA /TEST AND ALSO LITTERAL NO /IT ISN. T GIVE ERROR MESSAGE. JMP I CDINIT /INITIALIZATION FINISHED. / / CDL110, 110 /72 DECMIL / / / CDREAD, 0 /READS A CHAR FROM THE CARD READER. MTHREE /DO WE WANT CARD READER INPUT???? TAD BFLAG1 /CHECK THE INPUT FLAG. SNA CLA JMP .+3 /YEP. WE CWANT CARD READER INPUT ISZ CDREAD /NOPE. JMP THRIRD RETURN ADDRESS. JMP CDISZ /ISZ CDREAD AGAIN BEFORE EXITING. TAD BTEMP2 /IS THE CARD ALREADY IN THE BUFFER??? SZA CLA JMP CDNEXT /YEP. IT IS. FETCH A CHAR FROM IT. TAD BTEMP3 /IS THE CARD MOVING???? CDL240, SZA CLA /TESTA ND LITTERAL JMP CDGONG /ITS MOVING. CHECK TO SEE IF COLUMN IS READY. RCSE /START THE CARD GOING NOW... JMP CNOTR /ITS NOT READY. WAIT AWILE BY RETURN TO USER. ISZ BTEMP3 /SET THE SWITCH TO SHOW THE CARD MOVING. MOVE /ZERO OUT THE CARD BUFFER. CDBUF-1 /CONTAINS A 0000 CDBUF 50 /80=120=50*2 TAD CDPONT /SET CPOINT TO POINT TO FIRST CHAR OF CARD BUFFER DCA CPOINT DCA BCOUNT /ZERO OUT THE CURRENT COLUMN COUNTER. / CDGONG, RCSF /IS THERE A CHAR THERE??? JMP CNOTR /NOPE. WAIT. RCRA /READ IT IN ALPHA NUMERIC TYPE DCA TEMP /STORE IN TEMP ISZ BCOUNT /BOP UP COLUMN COUNTER BY 1. TAD BCOUNT /GET CURRENT POSITIION. CLL CML CMA IAC /13 BIT NEGATE TAD BOLDO /IS IT BELOW THE STARTING COLUMN??? SNL SZA CLA JMP CNOTR /YEP. IGNORE IT. TAD DATA /GET THE UPPER LIMIT CLL CML CMA IAC /13 BIT NEGATE. TAD BCOUNT /HAVE WE GONE TOO FAR??? SNL SZA CLA JMP CNOTR /YEP. IGNORE THE CHAR. TAD TEMP /ALL IS WELL. RETRIEVE THE HCARACTER. LINC /NOW GO OVER TO THE LINC SIDE. LMODE STH I CPOINT /SAVE THE HALFWORD IN THE BUFFER. PDP PMODE /AND BACK INTO 8 MODE. / CNOTR, CLA /CLEAR THEAC TO BE SURE. RCSD /END OF CARD REACHED??? JMP I CDREAD /NOPE. RETURN TO USER TO WAIT AWHILE. JMP CDDONE /GO CONVERT STORED CARD. / / / CDNEXT, LINC /CARD IN BUFFER AND CONVERTED. LMODE /LETS GET A CHAR. LDH I CPOINT /GET A CHAR. PDP /GET OVER INTO A DECENT MODE PMODE SNA /IS IT THROUGH(00=CR) JMP CDEOC /YEP. END OF CARD. TAD M40 /NOT DONE. SEE WHICIH WAY TO ADD. SPA TAD CDL100 /01-37=301-337 TAD CDL240 /40-77=240-277 / CDISZ, ISZ CDREAD /AND EXIT TO SECOND LOCATION JMP I CDREAD /(OR THIRD IF CARD READER NOT CHOSEN DEVICE. / / / CDEOC, DCA BTEMP2 /TURN OF THE CARD IN FLAG TAD CDL215 /GET A CR IN THE AC JMP CDISZ /AND EXIT. / / / / / CDDONE, DCA BTEMP3 /TURN OFF THE CARD MOVING SWITCH. ISZ BTEMP2 /AND TURN ON THE CARD IN BUFFER SWITCH. RCRD /TURN OFF THE CARD DONE FLAG. LINC /AND GO OVER TO LMODE LMODE SET I CDCUNT /SET COUNTER TO 80 COLUMNS -120 SET I CPOINT /SET POINTER TO POINT TO LAST COLUMN+1 CDBUF+50 STC CDSWT /TELL THE BLANK SCANNER TO DELETE BLANKS. / CDLOOP, LDA I -4000 /BACKSPACE 1 CHAR IN CARD BUFFEER. ADM CPOINT LDH CPOINT /GET THE CHAR XSK CDSWT /TEST THE BLANKS SCAN SWITCH. AZE /STILL SCANNING. CHECK FOR BLANK. SKP /NOT BLANK OR NOT SCANNING. JMP CDFUNT /IT BLANK. IGNORE IT. ROR 1 /ROTATE RIGHT TO PUT BIT 11 IN BIT 0 ADA I /NOW ADD IN BASIC TABLA ADDRESS POINTER. CDTAB STC CDCONT /GET TRANSITION CHAR ADDRESS. LDH CDCONT /NOW GET THE TRANSITION CHARACTER. SET I CDSWT /AND TELL IT WE RE NOT SCANNING BLANKS ANYMORE -0 CDFUNT, STH CPOINT /NOW STASH AWAY CONVERTED CHAR. XSK I CDCUNT /HAVE WE DONE 80 COLUMNS?? JMP CDLOOP /NOPE. GO BACK AND DO ANOTHER. SET I CPOINT /YEP. WE VE DONE 80 COLUMNS. CDPONT, CDBUF-1+4000 /SET THE POINTER SO CDNEXT CAN GET THE CHARS. JMP CDNEXT+1 /AND EXIT AND GET A CHAR TO SEND B / / / / / / / LP1, 211 /TAB CDL215, 215 /CR 4232 / END-OF-TAPE / / / / / / / / / EJECT / / / 0000 /USED FOR ZEROING OUT THE CARD BUFFER. / CDBUF, 0000 /80 COLUMN BUFFER / *CDBUF+50 / 0000 /USED AS END OF CHAR CHARACTER INCASE OF 80 CHARACTER SCAN. / / / / / / / / THIS IS THE CONVERSION TABLE FOR THE CARD READER CHARS TO ASCII CHARS. / / / CDTAB, 4061 /BLANK 1 6263 /2 3 6465 /4 5 6667 /6 7 7071 /8 9 7243 /: NUMBER SIGN 4047 /AT SIGN APOSTROPHE 7542 /= " 6057 /0 / 2324 /S T 2526 /U V 2730 /W X 3132 /Y Z 3554 /] , 4537 /% BACK ARROW. 7677 /> ? 5512 /- J 1314 /K L 1516 /M N 1720 /O P 2122 /Q R 4144 /! DOLLAR SIGN 5251 /* ) 7334 /; \ 4601 /& A 0203 /B C 0405 /D E 0607 /F G 1011 /H I 3356 /[ . 7450 /< ( 5336 /+ ^ / / / / / / / / / EJECT / / PMODE / / / / LINE PRINTER ROUTINE. / / / / / / / LINE PRINTER DEFINITIONS. / / LSE=6651 LCF=6652 LLB=6654 LSD=6661 LCB=6662 LPR=6664 / / / / / / / / / / LPTEST, 0000 /MAIN LINE PRINT CHARACTER CABOSH. MTHREE /IS IF LINE PRINTER IS THE CHOSEN ONE(DEVICE 3) TAD BFLAG2 SZA CLA JMP I LPTEST /NOT THE CHOSEN ONE. TAD I LPSEQ /GET THE CHAR DCA FTYPE /PLACE IN SEARCHER INPUT. SEARCH LP1 LP2 TAD FTYPE /GET THE CHAR TAD M340 /SUBTRACT TOO BIG CHAR. CLL /CLEAR LINC FOR NEW TEST. TAD LPL100 /CHECK FOR LOWER LIMIT SNL CLA /IS IT INBETWEEN 240-337??? JMP I LPEXIT /NOPE. IGNORE IT. TAD FTYPE /GET THE CHAR LPCOMM, JMS LPPUT /AND OUTPUT THE CHAR. JMP I LPEXIT /AM D EXIT / / / LPEXIT, SEQEXT LPSEQ, SEQIN LPCOL, 0000 / / / / LPEJ2, 0 /GIVES TWO EJECTS ON THE PRINTER. MONE /REALLY A 17 JMS LPPUT /EJECT 1 TAD LPM204 /RESET THE COLUMN COUNTER TO THE BEGINNING OF A LINE. DCA LPCOL /STASH AWAY. MONE JMS LPPUT /EJECT 2 JMP I LPEJ2 /RETURN TO THE CLALER. / / / / LPPUT, 0 /PRINTS A CHAR OR DOES A CONTROL CRAP. DCA TEMP /SAVE THE CHAR. ISZ LPCOL /END OF THE LINE?? JMP LPWFIT /NOPE. PRINT IT. LPCR, TAD LPM204 /RESET THE COLUMN COUNTER DCA LPCOL /STASH AWAY. TAD L7770 /SPACE 1 PRINTER LINE JMP LPCOMM /COMMON PUTTER ROUTINE LPWFIT, CHECKIO /CHECK FOR A CONTROL Z OR SOMETHING. LSD /LINE PRINTER CLEAR???? JMP .-2 /NOPE. WAIT. LCF /CLEAR THE FLAG TAD TEMP /GET THE FUNCTION. SMA /IS IT A CONTROL. LLB /NOPE. MUST BE CHAR. STICK IN BUFFER.R. SPA /IS IT POSITIVE? LPR /NOPE. MUST BE CONTROL. ZAP IT CLA /NOW CLEAR THE AC TO BE SURE. JMP I LPPUT /AND RETURN TO THE CALLER. / / / / / / / / LP2, LPTAB LPCR LPEND / / / / LPTAB, TAD LP40 /BLANK JMS LPPUT /SEND TO PUTTER ROUTINE. PTHREE /TO COMPENSTATE FOR THE -204 [204-1] TAD LPCOL /GET THE COLUMN. AND L7 /IS IT A MULTIPLE OF 8 SZA CLA /?? JMP LPTAB /NOPE. GIVE ANOTHER BLAKN. JMP I LPEXIT /AND EXIT. / / LPEND, JMS LPEJ2 /GIVE TWO EJECTS. PIP / / / / LP40, 40 LPL100, 100 LPM204, -204 / / / / / / / / / / / / / / / EJECT / THIS ORIGIN INSURES THAT BUFFER-1 CONTAINS A ZERO FOR THE TRIVIAL CORE ZERO ROUTINE / WHICH IS LOCATED IN PAGE 1(200-377) / / / / *BUFFER-1 / 0000 / / / / / / / EJECT *BUFFER / / / / THIS ROUTINE IS CALLED ONLY ONCE AT INITIALIZATION TO FIGURE OUT HOW / MANY K OF CORE THE GUY HAS. THEN IT S USED IN THE / BUFFER AREA. / / / / / / / COREF, 0 /MAIN ENTRY. CLA CLL DCA TEMP /ZERO OUT CLOOP, ISZ TEMP TAD TEMP CIA DCA COUNT DCA TEMP1 CLLOOP, ISZ TEMP1 JMS CSET TAD TEMP1 DCA I CPBYTE ISZ COUNT JMP CLLOOP TAD TEMP CIA DCA COUNT DCA TEMP1 CCLOOP, ISZ TEMP1 JMS CSET TAD I CPBYTE CIA TAD TEMP1 SZA CLA JMP COUT ISZ COUNT JMP CCLOOP JMP CLOOP / COUT, MTWO TAD TEMP CLL RTL RTL DCA TEMP1 TAD CBUFF CIA CLL RTL RTL RAL TAD TEMP1 ASMIFN RF08 /DISK PRESENT??? TAD L7777 /YEP. BOP DOWN THE NUMBER OF BUFFERS BY 1 TO PROTECT 7400 DCA BNUM CDF 0 TAD BNUM CLL RAR AND L7770 SZA CLA JMP CDCDDC TAD M40 DCA COUT DISPLAY INSULT ISZ COUT JMP .-3 CDCDDC, ASMIFZ RF08 /DO WE WANT A SCRATCH DISK SETUP???? ASMSKP 3 /NOPE. DO DISK CHECK NOW. TAD COREF /RETURN ADDRESS JMP I .+1 /DO TO CORE CHECKER CDISKC /NOW CHECK FOR DISKSSSSS ASMIFZ RF08 /CHECK FOR THIS RETURN....... JMP I COREF /RETURN NOW / / CSET, 0 TAD L7777 TAD TEMP1 AND L7 CLL RTL RAL TAD CCDF DCA .+1 0 JMP I CSET / CCDF, CDF 0 CBUFF, BUFFER CPBYTE, 7777 /SHOULD BE A FREE LOC NOW. / / / / INSULT, LEFT+240 /ABOUT CENTER OF SCREEN TOP TEXT " FI WOULD F RUN F FASTER FIF YOU F HAD F 8K FINSTEAD FOF ONLY F 4K\" / / / / / / EJECT / / / / / / / / ASMIFZ RF08 /DISK CHECKER OK??? ASMSKP 45 /SKIP FOLLOWING CODE / / / / / / *BUFFER+200 /DISK CHECKER CRAP...... / / CDISK, 0 /PHOONEY RETURN CDISKC, DCA CDISK /SAVE RETURN ADDRESS. DCMA /BAM. CLEAR DISK DCMA /ONE MORE TIME FOR GOOD MEASURE TAD L77 /A DISK ADDRESS. DXAL /SEND IT OUT CLA /CLEAR THE AC TO BE SURE DXAC /READ IT BACK??? CIA TAD L77 /ALL WELL? SNA CLA /??? JMS DSET /SET UP FOR THE DISKS NOW??? JMP I CDISK /RETURN / / / / DSET, 0 TAD DTAB1 /GET THE FIRST TABLE LOCATIONS DCA AUTO1 /SAVE AWAY DCLOOP, TAD I AUTO1 /GET THE NEX ADDRESS SNA /IS IT ZERO???? JMP I DSET /YEP. RETURN DCA TEMP /SAVE THE ADDRESS TAD DSYSBIN /GET THE CORRECT NEW UNIT DCA I TEMP /AND SET IT UP. JMP DCLOOP /GO BACK FOR NEXT. / / / / DTAB1, . /POINTS TO NEXT -1 DSYS1 DSYS2 DSYS3 DSYS4 00000 / / DSYSBIN,SYSBSP /SPECIAL BINARY UNIT. / / / / / / / / / / / / / / / / / / / / / / / EJECT / / / / / / / / THIS IS THE OPTIONAL RF08-RK08 ROUTINE. IT S DIVIDED INTO TWO PARTS. / / THE SECOND PART IS THE ACTUAL LOW LEVEL DISK ROUTINE. / / THE FIRST PART IS A LITTLE CALLING ROUTINE WHICH INTERPRETS THE CALLS FROM PIPS MASS STOREAGE ROUTINES. / AND PROTECTS LOCATIONS 7400-7777 FROM THE DISK ZAPPING THEM. / / / / / / / / / / / / ASMIFZ RF08 ASMSKP 3721-2705+1 / / / / / *7400 / / / / / / / / / / / / / / THE SYSTEM AND UNIT COPIER HANDLERS. / / / / / / / / / / / / AASYSC, MOVE /SET UP TO COPY JUST THE SYSTEM (NO INDEX) ASYSL /SYSTEM COPY INFORMATION AASUC /COMMON INFORMATION AASUCS /SIZE OF SYSTEM INFORMATION JMP AASUCR /GO TO COMMON ROUTINES / / / / AAUNTC, MOVE /SET UP TO COPY THE ENTIRE UNIT. AUNTL /INFORMATION AASUC /TO COMMON ROUTINES. AASUCS /NUMBER OF WORDS TO MOVE / / / / AASUCR, TAD FUNIT /GET THE NUMBER OF COPIES TO MAKE AND L7 /CHOP OFF THE HIGH ORDER CRAP SNA /ZERO??? IAC /YEP. MAKE 1 COPY ONLY CIA DCA AAMHOW /STASH AWAY NUMBER TO MAKE / / / / / ASULP1, DECODE /GET THE INPUT DEVICE CINPUT /COPY INPUT IS GOOD ENOUGH FOR ME SEARCH /LOOK UP THE REPLY ACPL1 /TABLE OF CHARS ASUGO1 /TRANSFER TABLE JMP ASULP1 /NOT A LEGAL REPLY / / / / / ASUDD1, DISC /DISC IS CHOOSEN SKP ASUTT1, TAPE /TAPE IS CHOOSEN TAD FUNIT DCA INUNIT / ASULP2, DECODE /GET THE OUTPUT UNIT COUTPUT /OUTPUT OPTIONS SEARCH /LOOKUP REPLY ACPL1 /REPLY LIST ASUGO2 /WHERE TO GO WHEN FOUND JMP ASULP2 /NOT A LEGAL OUTPUT DEVICE / / / ASUDD2, DISC /DISC IS THE CHOOSEN ONE. SKP ASUTT2, TAPE /TAPE IS THE CHOOSEN ONE TAD FUNIT DCA OUTUNIT /STASH AWAY / / / TAD AAMHOW /GET THE NUMBER OF COPIES TO MAKE DCA OUTNUM /STASH AWAY NOW. TAD AASIZ1 /GET THE SIZE OF THE FIRST COPY DCA FSIZE /AND STASH IN THE SIZE PARAMETER TAD AABL1 /GET THE FIRST BLOCK NUMBER DCA INBLOCK /AND SET UP THE READ TAD INBLOCK /AND THE DCA OUTBLOCK /AND THE WRITE COPY /COPY THE SELECTED BLOCKS. TAD AASIZ2 /THE THE SECOND COPY DCA FSIZE /STASH THAT AWAY TAD AABL2 /THE THE SECOND STARTING BLOCK NUMBER DCA INBLOCK TAD INBLOCK DCA OUTBLOCK /SET UP FINAL COPY COPY /AND DO IT PIP /FINALLY RESTART PIP. / / / / / / / / / / / AASIZ1, 0 /SIZE OF THE FIRST COPY AABL1, 0 /BLOCK NUMBER OF THE FIRST COPY. AASIZ2, 0 /SIZE OF THE SECOND COPY AABL2, 0 /BLOCK NUMBER OF THE SECOND COPY. / / / / AASUC=AASIZ1 /POINTER TO COMMON TABLE AASUCS=.-AASUC /SIZE OF MOVE. / / / / / / / / / / / ASYSL, TINDEX-DIALSYS DIALSYS SYSSBLOCK-TINDEX-TILEN TINDEX+TILEN / / AUNTL, TUPPER-TLOWER+1 TLOWER 0 / / / / / / / / / / / / / / / / / / / / / EJECT / / / / / / / / / / DISK DEFINITIONS....... / / / / DMAW=6605 DCMA=6601 DMAR=6603 DEAL=6615 DEAC=6616 DFSE=6621 DISK=6623 DCIM=6611 DSAC=6612 DIML=6615 DIMA=6616 DFSC=6622 DXAL=6643 DXAC=6645 DMAC=6626 / / / / / / / / / / / / / / / / / / EJECT / / / / / / / / / / / RF08R, 0 /DISK-READ SETUP ROUTINE TAD I RRRT /ADDRESS OF TREAD DCA I WWWT /MOVE TO TWRITE FOR THE ARGUEMENT GETTER. JMP RRC /GO TO THE COMMON ARG GETTER. / RF08W, 0 /DISK-WRITE SET-UP ROUTINE CLA CLL IAC RAL /+2 IN THE AC TO ADD THE READ ROUTINE ADDRESS RRC, TAD RRR /POINTER TO THE READ ROUTINE DCA RRT /SAVE IN THE GO- TO LOCATION. SETA /INITIALIZE THE ARGUEMENT GETTER GETA /GET THE FIRST ARGUEMENT AND L7 /CHOP OFF RANDOM UNITS BITS. DCA RUNIT /STASH AWAY NOW. GETA /GET THE NEXT ARGUEMENT NOW. DCA RLOC /SAVE AWAY IN THE LOCATION WORD GETA /NOW GET THE NUMBER OF BLOCKS TO TRANSFER DCA RNUM /AND STASH AWAY NOW. GETA /NOW GET THE FIRST BLOCK TO BE TRANSFERRED DCA RFIRST /AND STASH AWAY ALSO. TAD BNUM /NOW GET THE NUMBER OF BUFFERS AVAILABLE AND L7 /JUST GET HOW MUCH GOES INTO FIELD 0 DCA ROUT /AND STORE IN THE FIRST TIME THROUGH BIT. / / / / ROK, TAD RNUM /GET THE NUMBER LEFT TO DO SNA CLA /STILL SOME MORE??? JMP I RRRET /NOPE. EXIT NOW. TAD ROUT /TEST TO SEE IF IT'LL FIT THIS TIME. CIA /NEGATE. TAD RNUM /NUMBER LEFT SPA /TEST NOW JMP RFIT /IT'LL FIT. GO AND READJUST COUNT NOT DCA RNUM /STORE AWAY NUMBER TO GO NEXT TIME. RRTRY, JMS I RRT /GO DO THE DISK OPERATION. JMP I RRERR /DISK ERROR HAS OCCURED. RRGOOD, DCA RLOC /CLEAR THE LOCATION TO 0000 TAD RUNIT /BOP UP TO THE NEXT MEMORY FIELD TAD L10 DCA RUNIT /SO THE OVERLAP WORKS CORRECTLY. TAD RFIRST /BOP UP THE BLOCK NUMBER BY THE NUMBER DONE TAD ROUT DCA RFIRST /SO THAT WE'LL PICK UP FROM WHERE WE LEFT OFF. TAD L10 /SET THE NUMBER OF BLOCKS TO DO TO 20 CLL RAL /BY ADDING 10 AND MULTIPLYING BY 2 DCA ROUT /WHICH IS THE NUMBER IN 1 MEMORY FIELD JMP ROK /AND GO BACK AND DO THE NEXT ONE. / / / / / / REWERE, RRGOOD /IF ACCEPTED AS IS RRTRY /TO RETRY THE OPERATION. RRGOOD /TO TRY TO SKIP PAST THE ERROR / / / / RFIT, CLA /IT'LL FIT THS TIME. SET TO CORRECT OUTPUT NUMBER TAD RNUM DCA ROUT /NUMBER TO DO IS THE EXACT NUMBER JMP ROK /AND GO BACK AND TRY AGAIN / / / RUNIT, 0 RLOC, 0 RNUM, 0 RFIRST, 0 ROUT, 0 RRRT, TREAD /POINTS TO TREAD WWWT, TWRITE /POINTS TO TWRITE RRR, READSK /POINTS TO A READ DISK ROUTINE RRT, 0 /FINAL POINTER RRERR, RERR /POINTER TO THE ERROR RECOVERY ROUTINE RRRET, TEXIT /MASS I-O EXIT LOCATION / / / / AAMHOW=RF08R /DEFINE A TEMPORARY FOR THE SPECIAL COPIES / / / / / / / / / / / / / / / EJECT / / / / / / / / / / / / RRBAD, TEXT "FA DISK ERROR FHAS OCCURRED "/ / / / / / / / / RERR, DCA LOC1 /STASH AWAY IN A PLACE I KNOW IS FREE MOVE /MOVE IN THE DISK ERROR MESSAGE RRBAD TMAIND 20 /32CHARS=16 WORDS=20 WORDS TAD LOC1 /RETRIEVE THE BLOCK NUMBER JMS I RREREO /CALL THE ERROR MESSAGE DISPLAY ROUTINE REWERE /LIST OF RETURN OPTIONS. / / / RREREO, TTBC /POINTER TO THE ERROR MESSAGE DISPLAY ROUTINE / / / / READSK=. /THE DISK READ ROUTINE GOES HERE. / / / / / / / / / / EJECT / / / / / RFREAD, 0 /RF08 READ-WRITE ROUTINES. READ ENTRY JMP RFCOMM /GO TO COMMEN ENTRY / RFWRITE,0 /RF08 WRITE ENTRY TAD RFWRITE /REPLACE THE READ ENTRY BY THE WRITE FOR DCA RFREAD /THE RETURN CLA CLL IAC RAL /+2 TO MAKE DMAR A DMAW / RFCOMM, TAD RFDMAR /ADD A READ INSTRUCTION TO THE AC. DCA RFINST /NOW STORE AWAY THE CORRECT FUNCTION DCMA /CLEAR THE DISK STATUS REGISTER TAD I RRLOC /GET THE LOC TO WHERE WE'RE GOING TO TAD L7777 /SUBTRACT 1 FOR GOOD MEASURE DCA RFDBAD /STORE AWAY NOW TAD I RROUT /GET THE NUMBER OF BLOCKS TO DO CIA RTR /MOVE TO BITS 0-3 OF THE AC AND RTR /NEGATE RAR AND L7400 /CHOP OFF ANY CRAP WE PICKED UP ON THE WAY. DCA RFDBWC /STASH AWAY NOW TAD I RRUNIT /GET THE FIELD BITS ON AND L7770 /AND OUT UNIT BITS DIML /AND SET THE FIELD BITS IN THE STATUS REG. TAD I RRUNIT /NOW GET THE UNIT FOR REAL AND L7 /JUST THE UNIT BITS CLL RTL RTL RAL /SHIFT OVER TO EXTENED DISK BITS DCA TEMP /SAVE FOR A SECOND TAD I RRFIRST /GET THE FIRST BLOCK NUMBER RTR RTR /IGNORE 4 LOWER ORDER BITS AND RFL37 /JUSTBLOCK BITS OF DISK TAD TEMP /ADD IN DISK SELECTION BITS DXAL /SET UP THE DISK ADDRESS. TAD I RRFIRST /RECALL THE STARTING BLOCK NUMBER RTR RTR RAR /ROTATE TO BITS 0-3 OF THE AC AND L7400 /CHOP OFF STRAY CRAP RFINST, 0 /CORRECT DISK INSTRUCTION GOES HERE CHECKIO /CHECK KEYBOARD NOW DISK /AND THE DISK FLAG JMP .-2 /WAIT FOR SOMETHING TO HAPPEN DFSE /WAS THERE AN ERROR? JMP RFGXT /NOPE. GOOD RETURN DIMA /AN. ERROR. WAS IT A MYTHICAL ONE AND RF1003 /THIS CHECKS IMPORTANT BITS CLL RTR TAD RFDBWC /ALSO CHECK TO SEE IF OPERATION COMPLETED SNA CLA /ALL WELL???? JMP RFGXT /ALL IS WELL. EXIT DXAC /READ IN THE EXTENDED REGISTER AND RFL37 /CHOP OFF CRAP CLL RTL RTL /ROTATE TO GOOD BLOCK NUMBER BITS DCA TEMP /SAVE FOR A SECOND DMAC /NOW PICK UP THE LOW ORDER BITS AND L7400 /IGNORE RANDOM WORD STUFF CLL RTL RTL /SHIFT INTO CORRECT PLACE TAD TEMP /ADD IN THE CORRECT FACTOR JMP I RFREAD /AND RETURN TO THE CALLER / / / RFGXT, ISZ RFREAD /ALL IS WELL. SKIP PAST ERROR RETURN JMP I RFREAD /AND EXIT TO THE USER / / / / RRUNIT, RUNIT /POINTER TO PREVIOUS SECTION INFO RRLOC, RLOC RROUT, ROUT RRFIRST,RFIRST / RFDMAR, DMAR /ACTUAL RF08 DISK READ IOT RFL37, 37 RF1003, 1003 / / / / / / RFDBAD=7751 /DATA BREAK ADDRESS RFDBWC=7750 /WORD COUNT LOCATION / / / / / / / / / / / / / / / / / / / / / / / EJECT @