*20 PMODE EJECT / / / / / / / / P I P 5 / / / / / / / / / / 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. / / / CDFLAG, 0000 /FOR JUMPS IN LINC MODE. /ALSO USED AS THE CARD MOVING INDICATOR. THIS CAN BE DONE BECAUSE WE WILL ONLY EXECUTE /JUMPS IN LINC MODE WHEN THIS FLAG IS NON-ZERO[CARD MOVING] /IF YOU HAVE ANY DOUBTS ABOUT WHETHER THIS IS TRUE AFTER YOU MAKE CHANGES, MOVE THIS TO /A NEW LOCATION OTHER THEN 0 OF THIS SEGMENT. /THIS WORD MAY BE LOCATED ANYPLACE ON THIS PAGE / / / / / / / 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 SKIPIF OK. RCRD=6674 /TURN OFF THE CARD DONE FLAG. / / / / / / / CDINIT, 0 /INITIALIZE THE CARD READER. DCA CDFLAG /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??? SMA CLA /? 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 CDFLAG /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 CDFLAG /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 /THE AC IS DEFINETLY NOT ZERO WHEN IT COMES HERE. 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. CDNXT2, LDH I CPOINT /GET A CHAR.[COMES HERE IN LINC MODE SOMETIMES] 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 L100 /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 DCA CDFLAG /ALSO TURN OFF THE CARD MOVING FLAG. TAD CDL215 /GET A CR IN THE AC JMP CDISZ /AND EXIT. / / / / / CDDONE, ISZ BTEMP2 /TURN ON THE CARD IN BUFFER FLAG /WE CAN LEAVE ON THE CARD MOVING FLAG FOR NOW BECAUSE THE CARD MOVING FLAG IS TESTED FIRST 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 CDNXT2 /AND EXIT BUT FIRST GET A CHAR TO SEND BACK / / / / / / / 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 L100 /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. LP08O2, MONE /REALLY A 17 JMS LPPUT /EJECT 1 TAD LPM204 /RESET THE COLUMN COUNTER TO THE BEGINNING OF A LINE. DCA LPCOL /STASH AWAY. LP08O3, MONE JMS LPPUT /EJECT 2 JMP I LPEJ2 /RETURN TO THE CALLER. / / / / 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. LP08O4, 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. LP08O5, SMA /IS IT A CONTROL. LLB /NOPE. MUST BE CHAR. STICK IN BUFFER.R. SPA /IS IT POSITIVE? LP08O6, 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. LP08O7, 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 LPM204, -204 LP212, 212 /LINE FEED IF LP08 PRESENT. LP214, 214 /FORM FEED IF LP08 PRESENT / / / / / / / / / / / / / / / 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 /CLEAR AC TO BE SURE. WE VE GOT ROOM. TAD CLITO1 /REPLACE JMS INSTRUCTION BY NORMAL TAD. DCA I CLITO2 /AND OVERLAY NOW. / 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 CLITO1, TAD M40 /A LITTER TYPE. DCA COUT DISPLAY INSULT ISZ COUT JMP .-3 CDCDDC, ASMIFZ CARD /TEST FOR THE LINE PRINTER ASMSKP 3 /SKIP PAST LP08 CRAP JMS I .+2 /TEST FOR NO ANALEX SKP LP08TS 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 CMA CMA /MINUS ONE COUNT, FOR NOW. 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. CLITO2, INITOV /POINTER INITIALIZATION OVERLAY. / / / / 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 127 /SKIP FOLLOWING CODE / / / / / / *BUFFER+200 /DISK CHECKER CRAP...... / / CDISK, 0 /PHOONEY RETURN CDISKC, DCA CDISK /SAVE RETURN ADDRESS. CLA CMA /CLEAR THE RK08 STATUS REGISTER DCLS CLA /NOW CLEAR THE AC TAD CDIL70 /PLACE A 70 IN THE AC TO SEE IF THE RK08 IS THERE DLDC /SEND TO THE CONTROLLER CLA /CLEAR AC IN CASE IOT WAS A NOP DRDC /NOW READ BACK IN COMMAND REGISITER CIA /NEGATE IT TAD CDIL70 /TEST TO SEE IF STILL THERE SNA CLA /HOW ABOUT IT. JMP CRK08 /REG IS GOOD. WEVE GOT AN RK08 / 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??? CLA CMA /MINUS 1 FOR THE COUNT. JMP I CDISK /RETURN / / / / DSET, 0 MONE /SET TO ALL ONES SO RK08 CONTROLLER WILL THINK ITS THE DCA I CRKPTN /WRONG UNIT AND WILL GIVE A POWER CLEAR. TAD BNUM /GET THE NUMBER OF BUFFERS NOW. AND L7770 /SEE IF GREATER THEN 20. ACTUALLY 10 WILL DO SNA CLA /? JMP DSETP1 /NOT 8K. NO REBOOTSTRAP. MOVE RKBTST /SAVE OLD INSTRUCTIONS RKBST /IN CARD READER TEMP. 2 MOVE RKSETU /NOW MOVE IN KEYBOARD TEST INSTRUCTIONS. RKBTST 2 DSETP1, 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. / / / / CRK08, JMS DSET /SET UP THE BINARY UNITS AS ADVERTISED. MOVE /NOW MOVE THE RK08 ROUTINES UP THE RKREAD /THE DESIRED AREA RFREAD -RFREAD /LENGTH JUST HAPPENS TO BE THIS NUM. CLA CMA /MINUS 1 FOR THE COUNT, BABY. JMP I CDISK /HANDLER NOW SET UP USE DISKS. / / / / / / / CRKPTN, RKSTAT /RK08 STATUS AS OF BEFORE I-O PRESET. RKSETU, RKBTST+1?177!4600 /JMS I RKBTST+1 RKCHAR /CHECK THE RK08 CHARACTER. / / / / / / / / / / / / / / / / / / / / / / DTAB1, . /POINTS TO NEXT -1 DSYS1 DSYS2 DSYS3 DSYS4 00000 / / DSYSBIN,SYSBSP /SPECIAL BINARY UNIT. CDIL70, 70 / / / / / / / / / / / / / / / / / / / / / / / EJECT / / / / / / / ASMIFZ CARD /LP08 TESTER ROUTINES ASKSKP 1373-1273 /SKIP PAST THE STUFF NOW / / / / / LP08TS, 0 LCF TAD M4 DCA TEMP DCA TEMP1 LCB LP08LP, LSD SKP JMP I LP08TS ISZ TEMP1 JMP LP08LP ISZ TEMP JMP LP08LP LP08LT, TAD LP08PT SNA JMP I LP08TS /ALL FINISHED WITH THE PATCH NOW DCA I LP08PO /STORE IN THE POINTER NOW ISZ .-1 ISZ LP08LT JMP LP08LT / / / / LP08PO, LP08O1 LP08O2 LP08O3 LP08O4 LP08O5 LP08O6 LP08O7 LPM204 / / / / LP08BA=.?7600 LP08B2=LPEJ2?7600 / / / LP08PT, LPR!LCB TAD LP214-LP08B2+LP08BA TAD LP214-LP08B2+LP08BA TAD LP212-LP08B2+LP08BA JMP LP08O6-LP08B2+LP08BA LPR!LCB PONE /ALL THATS NECESSARY TO FILL OUT TABS CORRECTLY. -122 0 / / / / / / / / / / EJECT / / / / / / / *CDBUF /ORIGIN INITIALIZATION CODE IN THE CARD READER BUFFER. RKCHAR, 0 CLA CLL /CLEAR AC TO BE SURE. KRS /READ IN THE AC CHARACTER NOW TAD M215 /IS IT A C.R. SNA CLA /? JMP DIALEX /NORMAL TAPE EXIT. MOVE /SET UP DISK RETURN NOW. JACKS /MOVE OVERLAY IN NOW OVEREX OVERLEN DIALEX, MOVE RKBST /OLD INFO RKBTST 2 JMP I .+1 RKBTST / / JACKS, READ /READ IN DIAL-MS BOOTSTRAP NOW. 10 BUFFER 22 /TWENTY TWO FOR 8-K. 302 /302+21?22=322?323 CDF CIF 10 /UPPER CORE JMP I L7777 /REBOOTSTRAP / OVERLEN=.-JACKS / / RKBST, 0 0 / / / / / / / / / / / / / / / / / / 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 1362 /SHOULD BE CORRECT NUMBER TO SKIP OVER THEM / / / / / *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....... / / / DISK DEFINITIONS FOR THE RF08 / / / / / / / / 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 / / / / / / / RK08 DISK DEFINITIONS. / / / / / / / / / / / DCLA=6751 DLDC=6732 DLDR=6733 DLDW=6735 DCHP=6737 DRDA=6734 DRDC=6736 DRDS=6741 DCLS=6742 DMNT=6743 DSKC=6745 DSKT=6746 DSKE=6747 DRWC=6752 DLWC=6753 DLCA=6755 DRCA=6757 / / / / / / / / / / / / / / / / / / / / / / / / / 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 ITLL FIT THIS TIME. CIA /NEGATE. TAD RNUM /NUMBER LEFT SPA /TEST NOW JMP RFIT /ITLL 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 LOCATIONTO 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 WELL PICK UP FROM WHERE WE LEFT OFF. TAD L20 /SET THE NUMBER OF BLOCKS TO DO TO 20 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 /ITLL 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 WERE GOING TO TAD L7777 /SUBTRACT 1 FOR GOOD MEASURE DCA RFDBAD /STORE AWAY NOW TAD M6 /SET UP THE RANDOM COUNTER DCA TEMP1 /WHICH TIMES OUT THE DISK THERE FLAG. 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 LOW ORDER BITS AND RFL377 /JUST BLOCK BITS OF DISK TAD TEMP /ADD IN DISK SELECTION BITS DXAL /SET UP THE DISK ADDRESS. TAD I RRFIRST /RECALL THE STARTING BLOCK NUMBER ROR6 /ROTAE LOW BITS TO BITS 0-3 OF RAL /THE AC. THIS SAVES A LOC. AND L7400 /CHOP OFF STRAY CRAP RFINST, 0 /CORRECT DISK INSTRUCTION GOES HERE CHECKIO /CHECK KEYBOARD NOW ISZ TEMP2 /INCREMENT THE FAST COUNTER JMP RFNOSK /DIDNT SKIP ISZ TEMP1 /NOW INCREMENT THE SLOW COUNTER JMP RFNOSK /IT DIDNT SKIP EITHER JMP RF08NO /DISK FLAG DIDNT RAISE, PROBABLY NO DISK. RFNOSK, DISK /AND NOW CHECK THE DISK FLAG JMP RFINST+1 /IT DIDNT SKIP EITHER. HANG AROUND. 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 RFL377 /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 RAL /WHICH IS BITS 8-11 OF THE AC. 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 / / / / / RF08NO, DISPLAY /DISK FLAG NOT UP. GIVE ERROR MESSAGE RF08N2 JMP RF08NO /ITS AN INFINITE WAIT. / / / / / / / / RRUNIT, RUNIT /POINTER TO PREVIOUS SECTION INFO RRLOC, RLOC RROUT, ROUT RRFIRST,RFIRST / RFDMAR, DMAR /ACTUAL RF08 DISK READ IOT RFL377, 377 RF1003, 1003 / / / / / / RFDBAD=7751 /DATA BREAK ADDRESS RFDBWC=7750 /WORD COUNT LOCATION / / / / / / / *RFDBAD+1 /ORIGIN PAST DATA BREAK / / / / RF08N2, LEFT+300 /ABOUT THE CENTER OF THE SCREEN TOP-340 TEXT "FNO DISK\" / / / / / / / / / / / / / / / / / / / / / EJECT / / / / / / / / / / / / / / *READSK-400 /ORIGIN THIS SECTION INTO FREE AREA. / / / / / / RKREAD, 0 /RK08 READ ROUTINES JMP RKCOMM /GO TO COMMON AREA / RKWRITE,0 /RK08 WRITE ENTRY POINT TAD RKWRITE /REPLACE THE READ ENTRY BY THE CORRECT DCA RKREAD /WRITE ENTRY CLA CLL IAC RAL /+2 TO MAKE THE READ A WRITE / RKCOMM, TAD RKDLDR /ADD IN THE READ INSTRUCTION DCA RKINST /AND SAVE IN THE CORRECT INSTRUCTION WORD TAD I RKUNIT /GET THE FIELD BITS AND L7770 /AND LOAD INTO THE COMMAND REGISTER TAD RKDRIV /INSERT CORRECT DRIVE NUMBER NOW. DLDC /SEND TO JIMS CONTROLLER TAD I RKUNIT /NOW WELL GET THE UNIT BITS AND L7 /JUST THE UNIT PORTION CLL RTR /ROTATE TO BITS 0-3 RTR TAD I RKIRST /NOW ADD IN THE CORRECT BLOCK NUMBER. DCA RKTRCK /SAVE IN THE TRACK POINTER NOW TAD I RKLOC /GET THE CORE LOCATION TAD L7777 /SUBTRACT 1 FOR THE D.B. DCA RKLOCC /SAVE IN A LOCATION POINTER NOW. TAD I RKOUT /GET THE NUMBER OF RECORDS TO DO CIA /NEGATE IT NOW DCA RKCUNT /SAVE IN THE COUNTER NOW. JMP RKNBOP /DONT BOP UP THE ADDRESS AND TRACK FOR FIRST OPERATION / RKBOP, TAD RKLOCC /GET THE LAST LOCATION TAD L400 /BOP UP BY 400 TO THE NEXT CORE LOC. DCA RKLOCC /AND SAVE IT. ISZ RKTRCK /BOP UP THE SECTOR BY 1 NOW. / RKNBOP, CLA CMA /PREPARE TO START THE NEXT OPERATION DCLS /CLEAR THE STATUS REGISTER NOW. CLA /CLEAR THE AC BECAUSE DCLS DOESNT TAD M20 /RESET THE TIME OUT COUNTER SO THAT DCA TEMP1 /WELL KNOW IF WE TAKE TOO MUCH TIME. TAD RKLOCC /GET THE LOCATION TO DO. DLCA /SEND IT OUT TO THE CONTROLLER TAD M400 /SET THE WORD COUNT TO 1 RECORD (-400 WORDS) DLWC /AND SEND IT TO THE CONTROLLER TAD RKTRCK /NOW GET THE TRACK AND SECTOR IN THE AC. / RKINST, 0 /DO RK08 INSTRUCTION / CHECKIO /TEST THE KEY BOARD ISZ TEMP2 /AND ALSO THE TIME-OUT FLAG JMP RKNOSK /STILL OK ISZ TEMP1 /HOW ABOUT THE SLOW COUNTER JMP RKNOSK /STILL OK / DISPLAY /ERROR . NOT DONE YET. A BOO BOO. RKBAD?177!7600 /RK08 BAD MESSAGE FOR ORIGIN AT 7600 JMP .-2 /WAIT FOREVER / RKNOSK, DSKC /NOW TEST THE DISK FLAG. SKP /NOT COMPLETE. TEST THE ERROR FLAG. JMP .+3 /COMPLETE. TEST THE ERROR FLAG ANYWAY DSKE /ALSO CHECK THE POSSIBLILTY OF AN ERROR WITH NO COMPLETION FLAG. JMP RKINST+1 /NOT YET DONE. HANG AROUND AWHILE DSKE /TEST THE ERROR FLAG JMP RKDUN1 /WEVE FINISHED WITH THIS SECTOR. CHECK FOR MORE TO GO RKSEKE, DRDS /READ IN THE STATUS REGISTER AND RKL40 /WAS IT A TRACK MISS SZA CLA /? JMP RKOFF /IT WAS. DRIVE BLEW IT. A NO-NO TAD RKTRCK /NOW GET THE RECORD THAT FAILED. JMP I RKREAD /RETURN ON AN ERROR CONDITION TO DISPLAY MESSAGE. / / RKDUN1, ISZ RKCUNT /BOP UP THE RECORD COUNT. DONE? JMP RKBOP /NOT YET DONE. BOP ALL AND GET NEXT. ISZ RKREAD /GOOD OPERATION. GOOD RETURN. ALL IS WELL JMP I RKREAD /RETURN TO CALLER / / / / / / / / RKL40, 40 RKIRST, RFIRST /POINTER TO FIRST BLOCK NUMBER RKOUT, ROUT /POINTER TO THE NUMBER OF BLOCKS TO DO RKLOC, RLOC /POINTER TO THE CORRECT LOACTION TO DO RKUNIT, RUNIT /POINTER TO THE UNIT AND FIELD BITS RKDLDR, DLDR /ACTUAL RK08 READ INSTRUCTION / / / /THESE NEXT DEFINITIONS ARE DEFINED AS /AUTO-INDEX REGISTERS BECAUSE OF SPACE /REQUIREMENTS. NO ROUTINE WHICH WE CALL /WILL TOUCH THEM. BECAREFUL OF THIS /IN THE FUTURE, IF DISPLAY OR CHECKIO /SHOULD EVER NEED TO USE THEM. / / / RKLOCC=AUTO5 /CONTAINS THE CORE ADDRESS-1 FOR THE PRESENT TRANSFER RKTRCK=AUTO4 /CONTAINS THE TRACK AND SECTOR PRESENTLY BEING USED RKCUNT=AUTO3 /CONTAINS -THE NUMBER OF RECORDS TO GO. / / / / / / RKBAD, LEFT+140 /SHOULD BE GOOD ENOUGH TOP-340 /ABOUT THE CENTER TEXT "FDRIVE NOT WORKING\" / / / / / / / / / RKOFF, DCA RKWRITE /SET UP A COUNT OF 4096 IN A TEMPORARY REGISTER DISPLAY /DISPLAY THE ERROR MESSAGE FOR A FEW SECONDS RKOFF2?177!7600 /POINTER TO 7600 ERROR MESSAGE ISZ RKWRITE /INCREMENT AND TEST THE COUNTER JMP .-3 /DISPLAY FOR ABOUT 10 SECONDS. CLA CMA /CLEAR THE STATUS REGISTER BITS DCLS /CLEAR THE STATUS REGISTER DCLA /DO A POWER CLEAR RKHANG, CHECKIO /NOW WAIT FOR THE RESYNC OF THE DISC DSKE /WAS THERE AND ERROR ON THE RECALIBRATE? SKP /NOPE. NOT YET ANYWAY. JMP RKSEKE /THERE WAS AN ERROR. GIVE THE MESSAGE DSKC /IS THE RECALIBRATE FINISHED. JMP RKHANG /NOPE. WAIT FOR IT. JMP RKNBOP /RETRY THE OPERATION NOW. / / / / / / / / / / RKOFF2, LEFT+240 /ABOUT CENTER SCREEN TOP-340 TEXT "FSEEK ERROR\" / / / / / / / / / / / / / / / / / / / / / / / / / / / / EJECT / / / / /