VERNUM UTSS, TAD .-1 /SKIP ON TSS/8 DCA L2SA /AND RETURN VERSION # IN AC UUOEX2, ISZ L2SV0 /POSITIVE FLAG TEST EXIT NOP /ENTRY FOR UUOEXT /SETS UP WAIT MASK 1 IF THERE ARE ANY WAIT CONDITIONS FOR STR1 /IF THERE IS NOTHING TO WAIT FOR, WE EXIT BACK TO THE USER UUOEX1, SNA JMP UUOEX3 /NO WAIT CONDITIONS CDF DCA WS0 /SAVE BITS TO CLEAR GETJTW /SET UP WAIT MASK JOBWMK CLA IAC TAD WS0 /WAIT ON THIS FLAG+JSWAIT DATFLD DCA I JOBSWA /SET WAIT MASK 1 TAD I JOBSWA JMS I CLEAR1 /CLEAR SAME BITS IN STR1 WAIT CLEAR1, CLSTR1 UUOEX3, DATFLD TAD I JOBDAT IAC DCA JOBSWA /POINTS TO STR0 TAD I JOBSWA SMA CLA /STILL RUNNABLE? WAIT /NO ISZ JOBSWA CLL STA RAL /AC=7776 AND I JOBSWA IAC /MAKE SURE JSWAIT IS SET DCA I JOBSWA ISZ JOBSWA ISZ JOBSWA /POINT TO WAIT MASK IAC DCA I JOBSWA /FORCE DUMMY WAIT BIT ONLY EXIT /SET SWITCH REGISTER, RESTART ADD, ERROR ADD, OR KEYBOARD BREAK UKSBRK= C0002 /DDBBRK UKSB, TAD JOB TTYUSE /FIND USER INPUT TTY DDB TAD UKSBRK DCA JOBSWA /POINTS TO BREAK MASK IN DDB TAD L2SA /USER AC DATFLD SZA JMP UKSB1 /[S]HE HAS NEW MASK -- GO PICK IT UP TAD I JOBSWA /[S]HE WANTS TO READ OLD MASK JMP UKSB1+1 /GIVE IT TO HIM/HER USSW, TAD C0002 /SET AC=2 USEA1, IAC /AC=AC+1 USRA, TAD C0005 /AC=AC+5 DCA .+2 /SAVE RELATIVE ADDRESS GETJTW /GET POINTER 0 /POSITION IN LIST CLA /WE ONLY WANTED POINTER TAD L2SA /GET CONTENTS OF USER AC DATFLD UKSB1, DCA I JOBSWA /SAVE IN JOB DATA AREA DCA L2SA UUOEXT /AND AWAY RINTA, RINT CDTIMA, TIMCDR INTCDR, RCSD JMP I RINTA /CONTINUE IN INTERRUPT SKIP CHAIN RCRD /CLEAR CARD DONE FLAG TAD I CDTIMA SNA CLA /WERE WE EXPECTING AN INTERRUPT? DISMIS /NO DCA I CDTIMA /NO MORE INTERRUPTS ALLOWED - WE FINISHED THIS CARD TAD .+2 DISMIS /SCHEDULE LEVEL 2 CDL20 /ACCOUNT NUMBER UACC, TAD L2SA JMS JOBCHK /SEE IF IT'S A VALID JOB JMP UACC0 /IT WASN'T - RETURN A ZERO TAD JOBTBA GETJTI /GET THE ACCOUNT NUMBER OF THE JOB JOBACC UACC0, DCA L2SA /RETURN IT TO HIM/HER UUOEXT IOR1, JOBCHK, 0 SNA /SPECIFIC JOB? TAD JOB /NO - HIS/HER OWN JOB DCA WS1 TAD WS1 CLL TAD JOBS /IS IT REALLY A JOB? SNL CLA TAD WS1 TAD JOBTBA DCA JOBSWA DATFLD TAD I JOBSWA /IS THERE REALLY A JOB? SNA CLA JMP I JOBCHK /NO - RETURN WITHOUT SKIP ISZ JOBCHK TAD WS1 /JOB NUMBER REQUESTED JMP I JOBCHK JOBS, -JOBMAX-1 DTRKHG, 0 ERROR /DECTAPE OR RK05 IS HUNG HUNGDV /REPORT IT TO THE USER CIF DATFLD /BACK TO FIELD 1 JMP I DTRKHG /INCLUSIVE OR /CALL TAD ADDRESS OF WORD TO SET / IOR / BITS TO SET / RETURN IOR0, 0 DCA IOR1 /SAVE ADDRESS TO SET RDF /FIELD TO SET IT IN TAD .+2 /COMPUTE FIELD SELECT - FOR THAT FIELD DCA IOR2 /SAVE IT CDF TAD I IOR0 /GET BITS TO SET IOR2, 0 /SET FIELD AGAIN DCA IOR2 /SAVE THEM TAD IOR2 CMA AND I IOR1 /CLEAR THE BITS IF ALREADY SET TAD IOR2 /NOW SET THEM DCA I IOR1 /SAVE NEW VALUE ISZ IOR0 /SKIP ARGUMENT IN CALL JMP I IOR0 /RETURN *7400 IFNZRO DC08A < JMPDC8= JMP I . /SKIP OVER DC08A VECTORS .+3 DC8REG= JMP . /SKIP OVER DC08A ACTIVE REGISTERS IAC ISZ ACFLG /SWITCH TO OUTPUT SIDE TAD DCCNT TAD ACX10 DCA ACX10 /SKIP OVER THE DC08A ENTRIES IN THE TABLE JMP ACINT1 /BACK TO WORK DCCNT, DC08A-1 > *7410 RINT, DCA SRVFLG /CLEAR LEVEL 2 REQUEST FLAG DATFLD RSF JMP ACINT RRB /GET CHARACTER FROM THE READER DCA I ACX11 /PUT IT IN THE RING BUFFER CDF ISZ RCNT /ENOUGH?? JMP RINT1 /NO - SEE IF THERE'S STILL ROOM IN THE RING BUFFER RINT0, DCA I RTIM DATFLD CMA JMP ACINT8 /READER IS LINE # 7777 RINT1, TAD KEYC /IS THERE ENOUGH ROOM LEFT IN THE RING-BUFFER? TAD RLIM SMA CLA JMP RINT2 RFC /KEEP THE READER GOING CLL CMA RAL /SET TIMER FOR 2 MORE SECONDS JMP RINT0 RINT2, TAD RL2A DCA I L2Q /SCHEDULE THE READER TO BE RESTARTED AFTER THE BUFFER HAS BEEN EMPTIED ISZ SRVFLG /REMEMBER WE WANT LEVEL 2 JMP RINT0 RLIM, -NULINE-1 RL2A, L2PTR1 RTIM, TIMPTR RCNT, 0 OUTIOT= ISZ ACFLG ENDIOT= JMP ACINT6 ACINT, CLL STA RAL /AC=-2 DCA ACFLG /START BY CHECKING FOR INPUT TAD ACTBLA /ADDRESS OF THE SKIP IOT'S DCA ACX10 STL RTL ACINT0, TAD HIPRO DCA HICNT /SHORT LOOP COUNT TO PROTECT HI-PRIORITY DEVICES DATFLD ACINT1, ISZ HICNT JMP ACINT2-2 JMS I HIPRIA /GO CHECK RK, DT, & CDR SNA /ANYTHING REQUESTED? JMP ACINT0 /NO DCA I L2Q /QUEUE THEIR REQUEST FOR THEM ISZ SRVFLG /REMEMBER IT JMP ACINT0 /RE-INITIALIZE THE COUNT TAD I ACX10 DCA ACINT2 ACINT2, .-. /DEVICE SKIP JMP ACINT1 /NOT THIS ONE TAD ACINT2 TAD C0005 /GENERATE READ OR SEND IOT ISZ ACFLG JMP ACINT7 /MUST BE A KEYBOARD DCA ACINT3 /SAVE THE TLS, PLS, OR LPC TAD ACX10 TAD ACOUT /DETERMINE THE LINE NUMBER DCA ACFLG /THIS LINE'S OUTPUT REGISTER TAD I ACFLG RAR SNL JMP ACINT5 /NOTHING WAITING TO GO ACINT3, .-. CLA STL IAC RTR DCA I ACFLG /HARDWARE BUSY AND REQUEST FLAGS SET DCA TTOFLG /SCHEDULE LEVEL 2 ACINT4, TAD L2Q /POSITION OF FILL POINTER TAD L2QBOT /MINUS L2QTB-1 CIA TAD SRVFLG /DON'T COUNT THE ONES WE JUST PUT IN SNA CLA /SHOULD WE SCHEDULE LEVEL 2? TAD EXITA /YES DISMIS ACINT5, CLA IAC TAD ACINT2 DCA .+1 HICNT, .-. /TCF, PCF, OR LCF STL CLA RAR /AC=4000 AND I ACFLG DCA I ACFLG /NO MORE INTERRUPTS EXPECTED FROM THIS LINE ACEXIT, TAD SRVFLG /ANY REQUESTS? SZA CLA JMP ACINT4 /YES - MAKE SURE THEY'RE SCHEDULED DISMIS /NOTHING SPECIAL ACINT6, LSRP /LP08/LE8 ERROR? JMP ACEXIT /NO, MUST BE AN UNDEFINED INTERRUPT LCP /CLEAR INTERRUPT ENABLE JMP ACEXIT ACINT7, DCA ACFLG /SAVE THE KRB IOT ACFLG, .-. SNA JMP ACEXIT /THROW AWAY NULL CHARACTERS AND C0177 TAD C0200 /FORCE ON THE "PARITY" BIT DCA I ACX11 /STASH IT IN THE RING BUFFER TAD ACTBLA CMA TAD ACX10 /LINE NUMBER CAUSING INTERRUPT ACINT8, JMS ACINT9 /STASH LINE NUMBER & UPDATE POINTERS ETC. JMP ACINT4 /SCHEDULE LEVEL 2 IF WE WERE IN USER MODE ACINT9, 0 DCA I ACX11 /STASH AWAY THE LINE NUMBER ISZ KEYC /COUNT THE ENTRY ISZ ACCNT /END OF RING BUFFER JMP I ACINT9 /NO TAD ACRING DCA ACX11 /YES - RESET POINTER TAD ACSIZE DCA ACCNT /AND THE COUNT JMP I ACINT9 SRVFLG, 0 TTOFLG, 1 /NON-ZERO WHEN SERVICE IS NOT REQUIRED ACRING, RINGIN-1 ACCNT, -INPUTS ACSIZE, -INPUTS KEYC, 0 HIPRO, IFNZRO CPU-2 < -4 > IFZERO CPU-2 < -6 > HIPRIA, DTCHK ACTBLA, SKPTBL-1 ACOUT, OUTREG-SKPTBL-NULINE-2 L2QBOT, -L2QTB+1 *7600 /SYSTEM DISK HANDLERS FOR TSS/8 / SWPIO - HANDLES ALL SWAPS (ONLY SWAPS) / DSGO0 - HANDLES ALL OTHER TRANSFERS INCLUDING OVERLAYS SWPIO, 0 / CLA CLL CMA RTL /=3 IN AC DCA DSERRI /# OF TRIES JMS SWPIT /START THE SWAP JMP I SWPIO /RETURN SWPIT, 0 TAD SWPA /RETURN ADDRESS FOR INTERRUPT CHAIN DCA I DSWATA /SAVE IT IFZERO RF08 < TAD SQREQ /FIELD TO BE SWAPPED OUT TAD C0500 /INTERRUPT ON ERROR AND ON COMPLETION DIML > DCA DSWC /WORD COUNT CMA DCA DSMA /CORE ADDRESS TAD FINISH /IN OR OUT? SMA CLA JMP SWPIN /IN TAD OUTTRC /GET THE TRACK # TO BE SWAPPED OUT IFZERO RF08-40 < TAD SQREQ /FIELD TO BE SWAPPED OUT DEAL CLA > IFZERO RF08 < DXAL > DMAW JMP I SWPIT SWPIN, TAD INTRC /GET THE TRACK TO READ IN IFZERO RF08-40 < TAD SQREQ /FIELD TO BE SWAPPED OUT DEAL CLA > IFZERO RF08 < DXAL > DMAR JMP I SWPIT SWPA, SWPTR /RETURN ADDRESS AFTER SWAP SWPTR, JMP SWPERR /OOPS TAD FINISH /DID WE JUST SWAP IN OR OUT? SMA JMP SWPOK /IN; SO WE'RE FINISHED CIA DCA FINISH /SAVE IT JMS SWPIO /START SWAP IN DISMIS /GO BACK TO WHAT WE WERE DOING SWPERR, JMS DSERR /GO TO COMMON ERROR ROUTINE JMP SWPBAD /SORRY - IT'S OFFICIALLY BAD JMS SWPIT /TRY AGAIN JMP DSERRX /GO TO COMMON RETRY EXIT SWPOK, CLA IAC /SWAP OK; SKIP ON RETURN SWPBAD, TAD SWPREA /DISPATCH TO LEVEL 2 SWAP COMPLETION JMP OK /CLEAR DISK FLAG AND EXIT DSERR, 0 IFZERO RF08 < STA /SET WC TO CAUSE IMMEDIATE OVERFLOW DCA DSWC /ONLY SAFE WAY TO STOP THIS DISK DSAC /SEE IF THE DISK IS STILL BUSY SKP /THINGS ARE QUIET OUT THERE DISMIS /WAIT A FEW MICRO-SECONDS DORS /GET THE STATUS BITS DCMA /CLEAR EVERYTHING DCXA /INCLUDING THE TRACK ADDRESS AND C0004 /DO WE HAVE DRL? SNA > IFZERO RF08-40 /STOP DF32 ISZ DSERRI /NO; SO COUNT IT AS AN ERROR ISZ DSERR /OK TO RETRY ON RETURN IFZERO RF08 < SZA CLA TAD SLEEPA > /BETTER KNOCK OFF THE EAE USER DCA DSGO0 /SAVE ADDRESS; IF ANY JMP I DSERR /BACK TO CALLER /START DISC TRANSFER /CALL TAD ADDRESS OF PARAMETERS / DSGO / RETURN DSGO0, 0 DCA DSPARM CLA CLL CMA RTL DCA DSERRI JMS DSTRYA JMP I DSGO0 DSTRYA, 0 TAD DSRETA DCA I DSWATA CLA CMA /ADDRESS OF PARA-1 FOR INDEX REGISTER TAD DSPARM DCA DSPAR DATFLD TAD I DSPAR /FUNCTION DCA DSRORW TAD I DSPAR /DISC EXTENSION IFZERO RF08-40 < CLL RTL CLL RAL TAD I DSPAR /MEMORY EXTENSION CLL RAL DEAL CLA> IFZERO RF08 < CLL RTR DXAL TAD I DSPAR CLL RAL AND C0070 TAD C0500 DIML /LOAD INTERRUPT ENNABLE AND MEMORY EXTENSION > TAD I DSPAR DCA DSWC TAD I DSPAR DCA DSMA TAD I DSPAR CDF DSRORW, 0 JMP I DSTRYA DSERR1, JMS DSERR /DO COMMON ERROR ROUTINE JMP DSGBAD /GIVE UP JMS DSTRYA /TRY AGAIN DSERRX, TAD DSGO0 /POSSIBLY AN EAE JOB TO GO TO SLEEP DISMIS DSRET, JMP DSERR1 /ERROR IAC DSGBAD, DATFLD TAD I DSPAR OK, DCMA DISMIS /BACK TO MONITOR DSPARM, 0 DSRETA, DSRET DSWATA, DSWAIT C0500, 500 *7750 DSWC, DSMA /FOR LOADING INTO FIELD 0 ON INITIALIZATION DSMA, DSMA /(SINCE THE 4K TRANSFER OVERWRITES THE DATA BREAK LOCATIONS) SLEEPA, SLEEP DSERRI, 0 0 /FOR DECTAPE SERVICE 0 /FOR DECTAPE SERVICE FIELD 4 /FORCE TS8II INTO TRACK 4 AT BUILD TIME /TS8II VERSION 8.24 (01-JANUARY-75) / / / / /COPYRIGHT (C) 1975 /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. / / /THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY /ON A SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH /THE INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS /SOFTWARE, OR ANY OTHER COPIES THEREOF, MAY NOT BE PRO- /VIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON /EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO /THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE /SOFTWARE SHALL REMAIN IN DEC. / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE /WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A COM- /MITMENT BY DIGITAL EQUIPMENT CORPORATION. / /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR /RELIABILITY OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT /SUPPLIED BY DEC. *0 ZBLOCK 10 /IF ANY OF THESE BECOMES NON-ZERO, FIND OUT WHY! *10 K0030, 30 K0614, 614 K0500, 500 IX3, 0 IX4, JOBTBL /WAIT 2 UNQUEUER POINTER A15, 0 /DECTAPE - FOR EXTRACTING USER INFO. FROM DDB A16, 0 /BLTF1 - USER FIELD POINTER A17, 0 /BLTF1 - DATFLD POINTER DTJOB, 0 DTBUF, 0 DTST, 0 DTBLKP, 0 DTBLK, 0 DTCOM, 0 DTUCA, 0 DTTIME, 0 DTREMB, 0 DTGOA, DTGO DTERRA, DTERR DTBUFA, ENDBUF-1 DTCAP, 7755 M2702, -2702 M201, -201 K0214, 214 K0070, 70 K0400, 400 K7400, 7400 K0002, 2 K0037, 37 K0005, 5 K0020, 20 K7770, 7770 K0377, 377 K0006, 6 K1000, 1000 K0600, 600 RKJOB, 0 RKCORE, 0 RKCOM, 0 RKSECT, 0 RKCNT, 0 RKBLKS, 0 RKTIME, 0 SLEEPB, SLEEP RKERRA, RKERR DTRKHA, DTRKHG WAIT2, WAITS2 AWAKEN, WAKEUP DTCHKA, DEVCHK QUEUE1, QUEUE0 BLTF1A, BLTF1 JOBTAB, JOBTBL INTS1, 0 /INTERRUPT TEMPORARY STORAGE INTS2, 0 TEMP0, 0 /WORKING STORAGE TEMP1, 0 TEMP2, 0 TEMP3, 0 TEMP4, 0 K0007, 7 K0010, 10 K0200, 200 K0204, 204 K0040, 40 K0004, 4 K6201, 6201 K7000, 7000 K7700, 7700 K7774, 7774 K0003, 3 L2SAP, L2SV0+2 /POINTS TO L2SA IN FIELD 0 UDF1, 0 /SELECT USER FIELD 0 JMP I .-2 JOBCNT, -JOBMAX UDFP, UUDF DTRKJA, DTRKJB F1SCH, 0 EXITF1= JMP . K6203, CIF CDF TAD F1SCH SNA CLA /ANYTHING JUST OUT OF WAIT? JMP I .+4 /NO - NORMAL LEVEL 2 EXIT DCA F1SCH /YES - CLEAR FLAG JMP I .+1 /IF NULL JOB IS RUNNING RE-SCHEDULE SCHED0 L2EXIT INTRTN= JMP . CIF CDF JMP I .+1 F1RTN /DISMISS INTERRUPT FROM HI-PRIORITY DEVICE /JOB TABLE ADDRESS TO TEMP0 /CALL TAD JOB # / JMS GETTBA / TABLE ENTRY / RETURN WITH ADDRESS IN TEMP0 GETTBA, 0 DATFLD DCA TEMP0 /SAVE JOB # TAD I GETTBA /PICK UP ARGUMENT DCA .+5 TAD TEMP0 /JOB # TAD JOBTAB /START OF JOBTBL CIF JMS I GETTB1 /GETJTA 0 DCA TEMP0 /ADDRESS TO TEMP0 ISZ GETTBA JMP I GETTBA GETTB1, GETJTB *160 JOB, . /POINTER TO CURRENT JOB NUMBER CJOBDA, 0 /POINTER TO JOB STATUS BLOCK, CURRENT JOB CORTBA, CORTBL-1 DEVTBA, DEVTBL F1OFFJ, 0 /MASK FOR LOGIN; MODIFIED BY THE "ON & OFF" COMMANDS (ON=0; OFF=7774) WAITF1= JMP . CIF CDF JMP I WAIT1 WAIT1, WSCHED *170 NULINE /SYSTEM PARAMETERS CONVENIENT FOR SYSTAT JOBMAX DEVTBL UPTIM2, 0 /HIGH ORDER UPTIME IN SECONDS UPTIM1, 0 /LOW ORDER UPTIME IN SECONDS /DDB POINTERS FOR USE BY SI F1TCNT, 0 /DDB CHARACTER COUNT F1ECNT, 0 /DDB EMPTY COUNT F1BUF, 0 /DDB EMPTY BLOCK *OUTREG ZBLOCK SKPTBL-OUTREG KSKIP= KSF-30 TSKIP= TSF-40 *SKPTBL KSF /K00 /SKIP IOT FOR CONSOLE KEYBOARD IFZERO DC08A < KSKIP+400 /K01 /KEYBOARD SKIP IOTS FOR PT08 AND KL8E KSKIP+420 /K02 KSKIP+440 /K03 KSKIP+460 > /K04 KSKIP+340 /K05; K01 IF DC08A WITH PT08'S KSKIP+110 /K06; K02 IF DC08A WITH PT08'S IFNZRO CPU-1 < KSKIP+300 > /K07; K03 IF DC08A WITH PT08'S KSKIP+320 /K10; K04 IF DC08A WITH PT08'S KSKIP+500 /K11; K05 IF DC08A WITH PT08'S KSKIP+520 /K12; K06 IF DC08A WITH PT08'S KSKIP+540 /K13; K07 IF DC08A WITH PT08'S KSKIP+560 /K14; K10 IF DC08A WITH PT08'S KSKIP+700 /K15 KSKIP+360 /K16 KSKIP+720 /K17 KSKIP+060 /K20 KSKIP+140 /K21 KSKIP+160 /K22 KSKIP+050 /K23 IFNZRO DC08A < *SKPTBL+PT08+KL8+1 DC8REG ZBLOCK DC08A > /DC08A ACTIVE OUTPUT REGISTERS IFZERO DC08A <*SKPTBL+NULINE+1 OUTIOT > /SWITCH TO OUTPUT SIDE TSF /K00 /SKIP IOT FOR CONSOLE TELEPRINTER IFZERO DC08A < TSKIP+410 /K01 /TELEPRINTER SKIP IOTS FOR PT08 AND KL8E TSKIP+430 /K02 TSKIP+450 /K03 TSKIP+470 > /K04 TSKIP+350 /K05; K01 IF DC08A WITH PT08'S TSKIP+120 /K06; K02 IF DC08A WITH PT08'S IFNZRO CPU-1 < TSKIP+310 > /K07; K03 IF DC08A WITH PT08'S TSKIP+330 /K10; K04 IF DC08A WITH PT08'S TSKIP+510 /K11; K05 IF DC08A WITH PT08'S TSKIP+530 /K12; K06 IF DC08A WITH PT08'S TSKIP+550 /K13; K07 IF DC08A WITH PT08'S TSKIP+570 /K14; K10 IF DC08A WITH PT08'S TSKIP+710 /K15 TSKIP+370 /K16 TSKIP+730 /K17 TSKIP+070 /K20 TSKIP+150 /K21 TSKIP+170 /K22 TSKIP+650 /K23 IFNZRO DC08A < *SKPTBL+NULINE+PT08+KL8+3 JMPDC8 /DC08A OUTPUT VECTOR JMPDC8 /DC08A OUTPUT VECTOR JMPDC8 /DC08A OUTPUT VECTOR JMPDC8 /DC08A OUTPUT VECTOR JMPDC8 /DC08A OUTPUT VECTOR JMPDC8 /DC08A OUTPUT VECTOR JMPDC8 /DC08A OUTPUT VECTOR JMPDC8 /DC08A OUTPUT VECTOR JMPDC8 /DC08A OUTPUT VECTOR JMPDC8 /DC08A OUTPUT VECTOR JMPDC8 /DC08A OUTPUT VECTOR JMPDC8 /DC08A OUTPUT VECTOR JMPDC8 /DC08A OUTPUT VECTOR JMPDC8 /DC08A OUTPUT VECTOR JMPDC8 /DC08A OUTPUT VECTOR JMPDC8 /DC08A OUTPUT VECTOR JMPDC8 /DC08A OUTPUT VECTOR JMPDC8 /DC08A OUTPUT VECTOR JMPDC8 /DC08A OUTPUT VECTOR JMPDC8 > /DC08A OUTPUT VECTOR *SKPTP IFNZRO PUNCH /PUNCH IFZERO PUNCH IFNZRO LPT /LINE PRINTER IFZERO LPT ENDIOT /TERMINATES LIST *RINGIN /ADDITIONAL FREE CORE GENERATION TABLE /REFERENCED BY INIT AT START TIME / THE FOLLOWING AREAS WILL BECOME PART OF FREE CORE: IFZERO TC01 RK05 CDR < ENNDBUF;FCE4 > IFNZRO TC01 RK05 CDR < IFZERO TC01 < ENDBUF;FCE1 > IFZERO RK05 < FCB2;FCE2 FCB4;FCE4 > IFZERO CDR < FCB3;FCE3 > > IFNZRO DC08A < IFNZRO D689 < FCB5;FCE5 > IFZERO D689 < FCB5;DATA1 > > 0 /TO TERMINATE THE LIST NOPUNCH ZBLOCK ENDBUF-. /KEYBOARD INPUT RING BUFFER ENPUNCH *ENDBUF NOPUNCH ZBLOCK 201 /DECTAPE BUFFER ENPUNCH *. /DECTAPE LEVEL 1 ENTRY DTL11, TAD DTREMB /PREVIOUS ERRORS FROM THIS TRANSFER DTRB /"OR'ED" WITH ANY NEW ERRORS DCA DTREMB DTRB /WERE THERE ANY ERRORS? SMA JMP I DTXOR /A-OK! AND K0500 /WHAT WAS IT? SNA /SELECT ERROR OR TIMING ERROR JMP DTSR0 /NO - MUST BE MARK, END, OR PARITY AND K0400 SZA CLA /TIMING ERROR? JMP DTSR1 /NO - SELECT ERROR - DON'T RETRY CLL CMA RAL /AC=-2 TAD I DTERRA /TIMING ERROR WAS OUR FAULT - INTERRUPT OFF TOO LONG DCA I DTERRA /DON'T CHARGE HIM/HER FOR THE TURN-AROUNDS DTSR0, ISZ I DTERRA /COUNT A TURN-AROUND JMP DTSR2 /OK - CONTINUE SEARCHING DTSR1, TAD DTREMB /ACCUMULATED ERROR STATUS RAL STL RAR /MAKE SURE THE ERROR BIT IS SET JMP DTSTOP /SHUT HIM/HER DOWN DTSR2, CDF TAD DTBLKP DCA I DTCAP /RESTORE CA TO POINT INTO WORD 2 OF HIS/HER DDB DTRA /CURRENT STATUS AND K0377 DTXA /CLEAR GO, FUNCTION, AND INTERRUPT ENABLE TAD K0614 /SWITCH DIRECTIONS, GO, SEARCH AND ENABLE DTSRCH, JMS DTXOR /CONTINUE SEARCHING DTSR3, TAD DTCOM RTL RTL STA CML RAL /AC=-1 IF FORWARDS R/W; AC=-2 IF REVERSE R/W DCA DTDIR TAD I DTBLKP TAD M2702 SNL CLA /ARE WE AT A REASONABLE BLOCK NUMBER? JMP DTSR0 /NO -- TURN AROUND TAD DTBLK TAD M2702 SNL CLA /DOES [S]HE WANT A REASONABLE BLOCK? JMP DTSR1 /NO -- QUIT LOOKING FOR IT DTRA /WHICH WAY ARE WE GOING? RTL RTL CLA /PRESENT DIRECTION IS IN THE LINK TAD DTBLK /BLOCK WANTED CIA TAD I DTBLKP /BLOCK FOUND SNA /ARE WE THERE? JMP DTSR5 /YES - SEE IF WE ARE GOING IN THE RIGHT DIRECTION ISZ DTDIR /NO CIA /REVERSE R/W - NEGATE AC SMA JMP DTSR4 /SKIP SOME CODE - WE'RE ON THE WRONG SIDE OF THE BLOCK SZL /L=1 MEANS WE'RE GOING THE WRONG WAY TAD K0003 /MAKE ROOM FOR TURN-AROUND CMA AND K7770 SNA /ARE WE CLOSE? JMS DTSR7 /YES - GO CHECK BUFFER STATUS DTSR4, AND K7700 /ARE WE TOO FAR AWAY? SZA SNL SMA JMP DTSR6 /PUT HIM/HER ON THE TIMER SNL CLA /ARE WE GOING IN THE RIGHT DIRECTION? JMP DTSRCH /CONTINUE IN THE SAME DIRECTION JMP DTSR0 /GO TURN AROUND DTSR5, JMS DTSR7 /CHECK ON BUFFER STATUS ISZ DTDIR CML /CORRECT LINK FOR REVERSE R/W SNL /ARE WE GOING IN THE RIGHT DIRECTION? JMP DTSRCH /NO - CAUSE OVER-SHOOT FOR TURN-AROUND TAD M201 CDF DCA I DTWCP /SET UP DECTAPE WORD COUNT TAD DTBUFA DCA I DTCAP /SET UP DECTAPE CURRENT ADDRESS TAD DTCOM AND K0040 /READ OR WRITE? CLL RAR TAD K0030 JMS DTXOR /CHANGE FROM SEARCH TO READ OR WRITE DTSTOP, ISZ DTBUF /ASSIGN THE BUFFER - IF [S]HE DOESN'T ALREADY HAVE IT AND K7701 DCA I DTERRA /SAVE STATUS B FOR HIM/HER DTRA AND K0400 SZA CLA /WHICH WAY ARE WE GOING? TAD K7774 TAD K0002 TAD I DTBLKP /REMEMBER WHERE WE WILL FINALLY STOP DCA I DTBLKP DTRA AND K0204 /CLEAR GO & INTERRUPT ENABLE JMP DTSRCH /TO STOP THE TAPE DTWCP, 7754 K7701, 7701 K0014, 14 DTSR6, RTR /DIVIDE BY 100 RTR RTR CIA DCA DTBUF /-SECONDS TO WIND ON TIMER TAD K0003 TAD I DTST DCA DTDIR /POINTS TO USER WORD 1 DTRA AND K0400 SZA CLA /WHICH WAY SHOULD WE SET THE BRAKES LATER? ISZ I DTDIR /SET BIT 11 TO SHOW REVERSE TAD K0014 JMP DTSRCH /KEEP HIM/HER MOVING WITH INT. DISABLED DTSR7, 0 TAD DTCOM AND K0020 /IS THIS A READ? TAD DTBUF /OR - IS THE BUFFER LOADED FOR A WRITE? SZA CLA JMP I DTSR7 /PROCEED JMP DTSTOP+2 /STOP AND WAIT FOR THE BUFFER TO BE LOADED DTDIR, DTXOR, DTSTOP /WHERE TO RETURN ON SUCCESSFUL INTERRUPT DTXA /ZAP IN THE NEW FUNCTION DTRA RTR RAR SZL CLA /DID WE STOP? CML CMA RTL DCA DTTIME /LOAD THE CONTROLLER TIMER SNL TAD DTL2 /WE'RE DONE - SCHEDULE LEVEL 2 INTRTN DTL2, DTL20 /DECTAPE LEVEL 2 COMPLETION DTL21, TAD DTBUF /WHAT KIND OF COMPLETION? SNA JMP DTEND4 /END OF A SEARCH - TAPE NOW IN POSITION FOR THE WRITE SPA CLA JMP DTEND6 /THIS DRIVE HAS BEEN PUT ON TIMER TAD DTCOM AND K0020 SNA /WAS IT A READ OR WRITE? JMP DTEND3 /WRITE - [S]HE'S ALL DONE JMS DTDATA /READ - TRANSFER HIS/HER DATA BACK TO HIM/HER EXITF1 /WAIT FOR DISK TO FINISH DTEND3, TAD DTJOB JMS I AWAKEN /TAKE HIM/HER OUT OF WAIT STATUS DTERR, 0 DTEND4, DCA DTJOB /CONTROLLER IS FREE DTEND5, JMS I DTGOA /TRY TO START A DECTAPE TRANSFER EXITF1 DTEND6, TAD DTBUF DCA I A15 /SAVE -SECONDS TO WIND TAPE ISZ I DTST /CHANGE TO DECTAPE TIMER WAIT JMP DTEND4 /FIND SOMETHING ELSE TO DO /MOVE 201 WORDS TO/FROM USER, FROM/TO DATFLD /USER MAY BE IN CORE OR ON HIS/HER SWAP TRACK DTDATA, 0 DCA TEMP1 /SAVE READ/WRITE INDICATOR: 0=WRITE, 20=READ CIF TAD DTJOB JMS I COREA /NOW FIND OUT WHERE [S]HE IS SWAP LOCK FIP SI CJOB JMP DTDA1 /[S]HE'S IN HIS/HER SWAP TRACK AND K0070 /SAVE HIS/HER FIELD TAD K6201 DCA UDF1+1 /UDF1 IS FIXED FOR BLTF1 TAD DTBUFA DCA A17 /POINTS TO DECTAPE BUFFER IN DATFLD TAD DTUCA DCA A16 /USER BUFFER POINTER TAD TEMP1 CLL CMA RTR RTR RAR JMS I BLTF1A /L=0 FOR READ, L=1 FOR WRITE; AC=-201 ISZ DTDATA /SKIP - DATA HAS ALREADY BEEN MOVED JMP I DTDATA DTDA1, IAC TAD DTUCA CLL IAC TAD K0200 SNL /DO WE HAVE A WRAP-AROUNND SITUATION? CLA /NO - WE CAN DO THE WHOLE THING AT ONCE TAD M201 DCA DTDWC /WC FOR DISK TRANSFER TAD DTBUFA DCA DTDCA /CA FOR DISK TRANSFER TAD DTJOB TAD K0004 CLL RTL DCA DTDHI /TRACK ADDRESS FOR DISK TRANSFER TAD TEMP1 SZA CLA STL RTL TAD DTDMAR DCA DTDIOT /DMAR OR DMAW FOR DISK TRANSFER IAC TAD DTUCA JMS DTDGO /START THE DISK JMP I DTDATA /EXIT - NO SKIP - MUST WAIT FOR DISK /DISK PARAMETER BLOCK FOR DECTAPE HANDLER DTDIOT, 0 DTDHI, 0 7 DTDWC, 0 DTDCA, 0 DTDLO, 0 DTDSK DTDPAR, DTDIOT COREA, CORSRC DTDMAR, DMAR DTDISK, DTDSF0 DTDGO, 0 DCA DTDLO /DISK ADDRESS TO START AT TAD DTDPAR CIF JMS I DTDISK /NOW GO TO TS8 TO START OUR REQUEST JMP I DTDGO /RETURN HERE AFTER STARTING THE DISK JMP DTDCMP /RETURN HERE AFTER A GOOD DISK TRANSFER SKP /RETURN HERE AFTER A BAD DISK TRANSFER JMP DTEND3 /RETURN HERE AFTER REPORTING THE DISK ERROR TAD DTJOB /JOB IN TROUBLE CIF CDF JMP I .+1 /GO REPORT THE ERROR - MAKE IT SWPRER DTDEF0 DTDCMP, TAD DTDWC CIA TAD M201 SNA /DO WE NEED A SECOND PASS? JMP DTDCM0 /NO - IT'S DONE DCA DTDWC TAD DTDLO /YES - HAVE WE ALREADY DONE IT? SNA JMP DTDCM0 /ALL FINISHED! CIA TAD DTDCA /UPDATE THE DISK'S C.A. DCA DTDCA JMS DTDGO /START THE DISK AGAIN EXITF1 DTDCM0, TAD DTBUF /WAS IT A READ OR A WRITE? SZA CLA JMP DTEND3 /READ - WE'RE FINISHED ISZ DTBUF /ASSIGN THE BUFFER TO HIM/HER NOW TAD A15 /GO RESTART HIS/HER WRITE JMP DTEND5 DTLOAD, 0 DCA DTDGO /SAVE THE DESIRED STATUS A DTRA DCA DTDATA /AND THE PRESENT STATUS A TAD DTDGO AND DTDATA /WHERE WILL CARRIES BE GENERATED CIA CLL RAL /WE WANT TO CANCEL THE CARRIES TAD DTDGO /NOW ADD THEM TOGETHER TAD DTDATA /NOW WE HAVE THE "XOR" OF THE "PRESENT" AND THE "DESIRED" STATUS A DTXA /"XOR" IT INTO THE CONTROLLER JMP I DTLOAD /THE RESULT WILL BE THE DESIRED STATUS A STSI, DCA IX4 /SI - WANTS TO STOP A TAPE ON TIMER CLL CMA RAL DCA TEMP1 /ONLY STOP ONE TAPE DCA TEMP2 /PREVENT HIM/HER FROM GOING BACK INTO DECTAPE CONTROLLER WAIT K7001, IAC JMS DTIMER /STOP HIM/HER CIF 20 JMP I .+1 /BACK TO SI DTSIDT /START OR RESTART A DECTAPE READ OR WRITE FOR THE USER DTGO, 0 SZA /ARE WE RESTARTING AFTER A TIMER KILLED US? JMP DTGO1 /YES - SO WE DON'T NEED TO LOOK AT THE QUEUE TAD DTJOB SZA CLA /IS THE CONTROLLER BUSY? JMP I DTGO /CONTROLLER IS ALREADY BUSY DCA DTBUF /BUFFER IS EMPTY JMS I DTRKJA /FIND SOMEONE WAITING FOR THE CONTROLLER -1 JMP I DTGO /NOTHING WAITING DTGO1, AND K7770 DCA A15 TAD I A15 /PULL JOB NUMBER FROM DDB DCA DTJOB TAD DTJOB JMS GETTBA /FIND WAIT 2 JOBWMK+1 TAD TEMP0 DCA DTST /SAVE ITS POINTER FOR LATER ISZ A15 TAD A15 /ADDRESS TO DUMP BLOCK NUMBERS INTO DCA DTBLKP ISZ A15 TAD I A15 /USER WORD 1 -- UNIT, DIR, FUNC. DCA DTCOM TAD I A15 /USER WORD 2 -- BLOCK NUMBER WANTED DCA DTBLK TAD I A15 /USER WORD 3 -- USER'S C.A. DCA DTUCA TAD DTCOM /DIRECTION FOR THIS OPERATION AND K0400 K7740, SZA SMA CLA TAD DTREV TAD K0006 /AC=-5 FOR REVERSE R/W; AC=+6 FOR FORWARD R/W TAD I DTBLKP /GET BLOCK FROM LAST TIME TAD K0020 /BIAS BY 20 TO AVOID NEG. NUMBERS AND ZERO STL CIA TAD K0020 TAD DTBLK /BLOCK WE WANT SZL CIA /AC=ABSOLUTE VALUE OF DIFFERENCE AND K7740 DCA TEMP4 /SAVE THAT RESULT FOR LATER TAD DTCOM AND K7000 /SAVE ONLY THE UNIT SZL /LINK=INITIAL SEARCH DIRECTION TAD K0400 /SEARCH REVERSE INITIALLY JMS I DTLOAA /LOAD THE CONTROLLER TAD DTCOM /LOAD THE DECTAPE BUFFER IF: AND K0020 / ******* [S]HE'S DOING A WRITE TAD TEMP4 / ******* THE DESIRED BLOCK IS FAIRLY CLOSE TAD DTBUF / ******* THE BUFFER IS EMPTY SZA CLA JMP DTGO2 /AT LEAST ONE OF THE ABOVE IS FALSE JMS I DTGETW /MOVE 201 WORDS FROM USER (CORE OR SWAP TRACK) TO DATFLD JMP DTGO3 /WAIT FOR THE DISK TO FINISH ISZ DTBUF /ASSIGN THE BUFFER TO HIM/HER DTGO2, TAD DTSR3A DCA I DTXORA /SET UP FOR SEARCH MODE DCA DTREMB /CLEAR ERROR ACCUMULATOR CDF TAD DTBLKP DCA I DTCAP /SET UP CA FOR THE BLOCK NUMBERS CIF DATFLD /INHIBIT INTERRUPTS TAD K0010 /ALL DATA BREAKS ARE TO DATFLD DTLB TAD K7770 DCA I DTERRA /ALLOW 10 CHANGES OF DIRECTION TAD K0214 DTXA /GO, SEARCH, INT. ENABLE CLL CMA RTL /SET CONTROLLER TIMER FOR 3 SECONDS DTGO3, DCA DTTIME JMP I DTGO DTREV, -13 DTSR3A, DTSR3 DTGETW, DTDATA DTXORA, DTXOR DTLOAA, DTLOAD DTIMER, 0 JMS I DTRKJA /FIND A JOB IN DECTAPE TIMER WAIT -2 JMP DTIME3 /ALL DONE TAD K0005 DCA TEMP3 /POINTER TO TIMER COUNT DTIME1, CLL CMA RTL /AC=-3 ISZ I TEMP3 /IS HIS/HER TIMER UP? JMP DTIMER+1 TAD TEMP3 /YES - JAM ON THE BRAKES DCA TEMP4 /POINT TO USER WORD 1 CIF DATFLD /INHIBIT INTERRUPTS DTRA /GET STATUS OF CURRENT UNIT AND K0004 /SAVE ENABLE SZA /IS IT REALLY DOING SOMETHING? TAD K0200 /YES - CLEAR GO AND ENABLE DTXA TAD I TEMP4 AND K7001 /SAVE UNIT AND CURRENT DIRECTION TAD K0377 /MOVE THE DIRECTION BIT INTO POSITION AND K7400 JMS I DTLOAA /STOP HIM/HER!!! TAD K7770 AND I TEMP4 DCA I TEMP4 /CLEAR "BRAKE" BIT TAD TEMP2 TAD I TEMP0 DCA I TEMP0 /PUT HIM/HER BACK IN DECTAPE WAIT JMP DTIME1 /CHECK FOR OTHER DRIVES TO STOP DTIME3, TAD TEMP4 SNA CLA JMP DTIME4 /NOTYING STOPPED THIS TIME TAD DTTIME /WAS ANYTHING IMPORTANT GOING ON? SZA CLA TAD A15 /YES - LET'S GET BACK TO IT JMS I DTGOA /START SOMETHING DTIMEX, JMP I DTIMER DTIME4, CIF DATFLD /INHIBIT INTERRUPTS TAD DTTIME /IS THE CONTROLLER BUSY? SZA CLA /NO ISZ DTTIME /YES - BUMP CONTROLLER TIMER JMP I DTIMER DTRA /IT'S HUNG AND K0204 DTXA /STOP THE TAPE (IF IT'S EVEN MOVING) STA DCA I DTERRA /LET HIM/HER KNOW THE TRANSFER PROBABLY DIDN'T HAPPEN IAC DCA DTBUF DCA DTCOM TAD DTJOB JMS DTRKER /REPORT THE ERROR & SCHEDULE LEVEL 2 DTL20 JMP I .+1 /BACK THROUGH THE TIMER CODE DTIMEX FCE1= .+1&7770 DTRKER, 0 CIF CDF JMS I DTRKHA /REPORT THE HUNG DEVICE TAD I DTRKER /GET THE L2 DISPATCH ADDRESS ISZ DTRKER /BUMP PAST THE ARG. CIF CDF JMS I QUEUE1 /PUT IT ON LEVEL 2 QUEUE JMP I DTRKER UUDTRK, DCA TEMP2 TAD I L2SAP /GET USER AC DCA TEMP1 SNL /DON'T CLEAR THE AC IF IT'S AN RK05 REQUEST DCA I L2SAP /CLEAR HIS/HER AC TAD I UDFP /GET THE "CDF" FOR HIS/HER FIELD DCA UDF1+1 JMS UDF1 /CHANGE TO USER FIELD TAD I TEMP1 /GET WORD 1 OF HIS/HER PARAMETERS SZL /RK05? JMP URK05 /YES RTL RTL AND K0007 /AC=UNIT NUMBER UDTXAD, TAD DTDEVA /INDEX INTO THE DEVICE TABLE DCA UDTDDB DATFLD CIF /FIELD 0 ROUTINE JMS I DTCHKA /SEE IF [S]HE OWNS THIS UNIT UDTDDB, 0 STA TAD TEMP1 DCA A16 TAD I UDTDDB TAD K0003 /SET UP TO MOVE PARAMETERS DCA A17 CLL CMA RTL /L=1; AC=-3 JMS I BLTF1A /MOVE 3 WORDS FROM UDF TO DATFLD TAD I UDTDDB TAD TEMP2 JMS I WAIT2 /SET WAIT 2 CONDITION FOR DECTAPE OR RK05 TAD TEMP2 CLL RTR SZL CLA /RK05? JMP RK05GO /YES JMS I DTGOA /NO - TRY TO START THE DECTAPE WAITF1 URK05, CLL RAR AND K0003 /RK05 UNIT # TAD K0010 /DISPLACE TO RK05 DDB'S JMP UDTXAD DTDEVA, DEVTBE+5 /SEARCH FOR A JOB WAITING FOR A "WAIT 2" CONDITION /CALLING SEQUENCE: / AC=0 COMPLETE PASS; AC NON-ZERO FINISH CURRENT PASS / JMS DTRKJB / MINUS WAIT CONDITION NUMBER / RETURN - NO JOBS FOUND / RETURN - CONTENTS OF WAIT 2 IN AC DTRKJB, 0 SZA CLA /DO WE WANT A FULL PASS? JMP DTRK2 /NO - JUST COMPLETE FROM WHERE WE LEFT OFF TAD JOBCNT DCA TEMP1 /SET COUNT FOR JOBMAX DTRK1, TAD IX4 /CHECK POSITION OF RING POINTER TAD DTRKEN SZA CLA JMP .+3 TAD JOBTAB /RESET RING POINTER DCA IX4 TAD I IX4 SNA /IS THIS JOB DEFINED? JMP DTRK2 /NO TAD K0005 /POINT AT WAIT 2 DCA TEMP0 TAD I TEMP0 AND K0007 TAD I DTRKJB SZA CLA /IS [S]HE WAITING FOR OUR CONDITION? JMP DTRK2 /NOPE TAD I TEMP0 /PUT THE CONTENTS OF WAIT 2 IN THE AC ISZ DTRKJB /CAUSE SKIP ON EXIT JMP DTRK3 DTRK2, ISZ TEMP1 /MORE? JMP DTRK1 DTRK3, ISZ DTRKJB /INDEX PAST ARGUMENT ON RETURN JMP I DTRKJB DTRKEN, -CLKTBL+1 /MOVE DATA TO/FROM DATFLD FROM/TO USER CORE / USER'S POINTER IN "A16" / DATFLD POINTER IN "A17" /CALLING SEQUENCE: / AC=-NUMBER OF WORDS; LINK=0 FROM DATFLD TO USER, LINK=1 FROM USER TO DATFLD / JMS BLTF1 / RETURN BLTF1, 0 DCA TEMP1 /SAVE NUMBER OF WORDS TO MOVE BL0, SNL /WHICH DIRECTION? JMP BL1 JMS UDF1 /FROM USER TAD I A16 DATFLD /TO DATFLD DCA I A17 JMP BL2 BL1, TAD I A17 /FROM DATFLD JMS UDF1 DCA I A16 /TO USER DATFLD BL2, ISZ TEMP1 /MORE? JMP BL0 /YES JMP I BLTF1 WAKEUP, 0 ISZ F1SCH /SET FLAG TO SCHEDULE THIS USER IMMEDIATELY IF POSSIBLE JMS GETTBA /FIND STR1 JOBSTS+1 CLL STA RAL /AC=7776 AND I TEMP0 /CLEAR JSWAIT IAC DCA I TEMP0 /NOW WE CAN BE SURE THAT IT IS SET ISZ TEMP0 /NOW UPDATE THE DEVICE STATUS REGISTER TAD I WAKEUP DCA I TEMP0 /THE NEW D.S.R. ISZ TEMP0 ISZ I TEMP0 /TURN ON DUMMY WAIT BIT IN WAIT MASK 1 ISZ TEMP0 DCA I TEMP0 /TAKE HIM/HER OUT OF WAIT ISZ WAKEUP JMP I WAKEUP FCB2= .+7&7770 RKREDO, REDO0 RK05GO, CIF CDF TAD RKJOB /WHO OWNS THE CONTROLLER? SZA CLA JMP I RKREDO /[S]HE'LL HAVE TO WAIT TAD I JOB DCA RKJOB /[S]HE NOW OWNS THE CONTROLLER DCA I L2SAP /ZERO AC IN CASE TRANSFER DOESN'T START CIF DATFLD TAD RKJOB JMS GETTBA /GET WAIT 2 JOBWMK+1 CLL CMA RTL /AC=-3 DCA RKERR /3 TRIES ON ERROR DCA RKBLKS /CLEAR SUCCESSFULL TRANSFER COUNTER JMS USRLOK /LOCK HIM/HER IN HIS/HER FIELD DCA RKCORE /SAVE THE CORTBL POINTER TAD I TEMP0 /POINTS TO DDB WORD 4 (-1) JMS I RKGOA /START UP THE RK05 DISK SZA CLA JMP RKL21 /DIDN'T EVEN GET OFF THE GROUND CLL STA RAL DCA RKTIME /SET TIMER FOR 2 SECONDS WAITF1 RKL21, ION CDF CLL STA RTR AND I RKCORE DCA I RKCORE /UNLOCK HIS/HER FIELD DCA RKCORE TAD RKJOB JMS GETTBA /FIND HIS/HER AC JOBREG+2 TAD RKBLKS DCA I TEMP0 /PASS NUMBER OF BLOCKS TRANSFERRED BACK TO THE USER TAD RKJOB RKEND2, JMS I AWAKEN /TAKE HIM/HER OUT OF WAIT STATUS RKERR, 0 DCA RKJOB /FREE THE CONTROLLER JMS I DTRKJA /LOOK FOR OTHERS WAITING FOR THE CONTROLLER -3 EXITF1 /NOBODY ELSE WANTS IT AND K7770 DCA IX3 TAD I IX3 /EXTRACT THE JOB # FROM THE DDB JMP RKEND2 RKGOA, RKGO FCE2= .+1&7770