/ROUTINE TO SET A WAIT 2 CONDITION FOR THE CURRENT USER / (FOR DECTAPE, RK05, OR CARDREADER) / ENTER WITH DESIRED WAIT 2 STATUS IN THE AC WAITS2, 0 DCA TEMP2 CDF TAD I JOB /GET USER JOB NUMBER JMS GETTBA JOBWMK DCA I TEMP0 /CLEAR WAIT MASK 1 ISZ TEMP0 TAD TEMP0 /GET WAIT NUMBER DCA I TEMP0 /NOW [S]HE'S WAITING JMP I WAITS2 /ROUTINE TO LOCK CURRENT USER IN HIS/HER CORE FIELD / RETURNS WITH CORTBL POINTER IN AC USRLOK, 0 CDF TAD I L2SFP /POINTER TO LEVEL 2 SAVE FIELD AND K0007 /JUST THE FIELD TAD CORTBA /DISPLACEMENT INTO THE CORE TABLE DCA TEMP2 STL RTR /AC=2000 TAD I TEMP2 DCA I TEMP2 /LOCK IN CORE DATFLD TAD TEMP2 /NOW RETURN WITH POINTER INTO CORE TABLE JMP I USRLOK L2SFP, L2SF FCB3= .+7&7770 CDCNT, 0 CDCORE, 0 CDTIMR, TIMCDR CDL21, CLL CMA RTR /AC=5777 AND I CDCORE DCA I CDCORE /UNLOCK THE CORE FIELD TAD CDJOB JMS GETTBA /FIND HIS/HER AC JOBREG+2 TAD CDCNT DCA I TEMP0 /PUT THE COLUMN COUNT IN HIS/HER AC TAD CDJOB JMS I AWAKEN /TAKE HIM/HER OUT OF WAIT STATUS CDBUF, 0 EXITF1 CDL11, TAD I CDTIMR SNA CLA /WERE WE EXPECTING AN INTERRUPT? JMP CDIOT /NO ISZ CDCNT /COUNT A COLUMN ISZ CDBUF /BUMP THE USER'S POINTER CDJOB, 0 /JOB OWNING THE CARD READER - (COVERS THE "ISZ SKIP") CDREAD, .-. /THE PROPER READ IOT IS PLACED HERE CDFLD, .-. /CDF TO THE USER'S FIELD DCA I CDBUF /STASH A COLUMN IN THE USER'S BUFFER INTRTN CDIOT, RCRA /CLEAR UNWANTED INTERRUPT CLA INTRTN UUCDR, CLL RAL /TIMES 2 TAD CDIOT /CONSTRUCT READ IOT DCA CDREAD /EITHER ALPHA, BINARY, OR COMPRESSED (8E ONLY) TAD I L2SAP DCA CDBUF /SAVE THE USER'S BUFFER POINTER DCA I L2SAP /CLEAR USER AC - IN CASE THE READER ISN'T READY TAD I UDFP DCA CDFLD /SAVE CDF TO USER'S FIELD TAD I JOB DCA CDJOB DCA CDCNT /ZERO COLUMN COUNT IOF IFZERO CPU&7776 < JMP .+4 > IFNZRO CPU&7776 < RCTF > /CLEAR 8E TRANSITION FLAG IAC RCNO /ENABLE CARD READER INTERRUPTS CLA RCSE /START CARD READER JMP UUCDRB /NOT READY - PUT HIM/HER TO SLEEP BEFORE CONTINUING JMS USRLOK /LOCK HIM/HER IN HIS/HER FIELD DCA CDCORE /SAVE POINTER TO CORTBL TAD K0004 JMS I WAIT2 /MAKE HIM/HER WAIT FOR THE CARD READER CIF CDF CLL CMA RAL /AC=-2 DCA I CDTIMR /SET CARD READER TIMER JMP I WAIT1 UUCDRB, CIF CDF JMP I SLEEPB /PUT HIM/HER TO SLEEP FOR A COUPLE OF SECONDS *2000 FCE3= .&7770 FCB4= .+7&7770 RKL11, DRST /GET CONTROLLER STATUS CLL RAL /IGNORE THE DONE BIT SZA JMP RKSR1 /ERROR!!!!! ISZ RKBLKS /COUNT A SUCCESSFUL TRANSFER TAD RKCMD SNA /ARE WE FINISHED? JMP RKSR2 /YES DLDC /LOAD THE NEW COMMAND TAD RKSECT DLAG /LOAD THE NEW SECTOR - WE'RE OFF AND RUNNING AGAIN JMS RKNXT /SET UP FOR THE NEXT BLOCK (IF ANY) CLL STA RAL DCA RKTIME /SET CONTROLLER TIMER FOR 2 MORE SECONDS CLL STA RTL DCA I RKERRA /THREE ERRORS INTRTN RKSR1, ISZ I RKERRA JMP RKSR4 /STILL OK TO RETRY DRST RKSR2, DCA I RKERRA /FINAL STATUS FOR THE USER DLDC /CLEAR CONTROLLER STATUS AND COMMAND REGISTERS DCA RKTIME TAD RKL2 /SCHEDULE LEVEL 2 INTRTN RKSR4, AND K1012 /SAVE SPECIAL CASE ERROR BITS SNA RKSRE, JMP RKSR5+1 /DON'T RECAL. OR PUT CURRENT JOB TO SLEEP AND K0010 SZA CLA JMP RKSR5 /PUT CURRENT JOB TO SLEEP AND RE-TRY IAC DCLR /IN CASE WE HAVE SOMETHING REALLY IN TROUBLE TAD RKCOM AND K0006 /SAVE ONLY THE UNIT # TAD K0600 /ENABLE INTERRUPT ON SEEK COMPLETION DLDC STL RTL DCLR /RE-CALIBRATE TAD RKSRE DCA RKL11 /CHANGE LEVEL 1 CLL STA RTL /ALLOW 3 SECONDS FOR THE RE-CALIBRATE DCA RKTIME DCLR INTRTN RKSR5, TAD SLEEPB DCA INTS2 CLL CMA RTL /AC=-3 TAD IX3 /POINTER TO DDB WORD 4 (-1) JMS RKGO /RE-TRY SNA /ANYTHING BAD? TAD INTS2 /NO - HOW ABOUT PUTTING SOMEONE TO SLEEP? INTRTN K1012, 1012 RKL2, RKL20 RKFLD, -CORTBL+51 RKGO, 0 DCA IX3 /SAVE THE DDB POINTER IAC DCLR /CLEAR THE CONTROLLER TAD I IX3 /USER WORD 1 CLL RTR RAR DCA RKCOM /SAVE COMMAND DIVIDED BY 10 TAD RKCOM AND K0037 /PAGE COUNT SNA TAD K0040 /FOR 0 OR 40 GIVE HIM/HER 40 CMA TAD RKBLKS TAD RKBLKS /ADD NUMBER OF PAGES ALREADY TRANSFERRED DCA RKCNT TAD RKCOM AND K7400 /SAVE FUNCTION, DRIVE, AND HI ORDER SECTOR BIT TAD RKCORE /POINTER TO CORTBL ENTRY TAD RKFLD /EXTRACT FIELD NUMBER AND INSERT INTERRUPT ENABLE AND HALF BLOCK BITS CML RTL /"RKFLD" COMPLEMENTED THE LINK RAL DCA RKCOM /SAVE THE CONSTRUCTED COMMAND REGISTER TAD RKBLKS /NUMBER OF SECTORS ALREADY TRANSFERRED TAD I IX3 DCA RKSECT /STARTING SECTOR NUMBER FROM THE USER SZL ISZ RKCOM /BUMP HI ORDER BIT TAD RKBLKS /NUMBER OF BLOCKS ALREADY TRANSFERRED CLL RTR /TIMES 400 RTR RAR TAD I IX3 IAC /WE ADD ONE SINCE THE CONTROLLER WANTS THE REAL ADDRESS DLCA /LOAD USER'S CA INTO THE CONTROLLER JMS RKCMD /GENERATE FIRST COMMAND IOF DLDC /LOAD CONTROLLER COMMAND REGISTER TAD RKSECT DLAG /LOAD IN THE DESIRED SECTOR - WE ARE OFF AND RUNNING JMS RKNXT /SET UP FOR THE NEXT SECTOR (IF ANY) TAD RKDRST DCA RKL11 /FIX FIRST WORD OF INTERRUPT SERVICE DSKP /ARE WE TRYING TO DO SOMETHING BAD? JMP I RKGO /NO - EVERYTHING IS PEACHY RKDRST, DRST DCA I RKERRA /SAVE ERROR STATUS - NO RE-TRIES WILL BE MADE DLDC /CLEAR CONTROLLER STATUS AND COMMAND REGISTERS TAD RKL2 /RETURN WITH L2 DISPATCH JMP I RKGO RKCMD, 0 ISZ RKCNT TAD RKCNT SMA CLA /ANY MORE BLOCKS TO GO? JMP RKDONE /NO - CLOSE IT OUT ISZ RKCNT /HALF BLOCK? TAD K7700 /NO - REMOVE THE HALF BLOCK BIT FROM THE COMMAND TAD RKCOM /GET THE COMMAND JMP I RKCMD RKNXT, 0 ISZ RKSECT /BUMP SECTOR TAD RKSECT SNA ISZ RKCOM /BUMP HI-ORDER SECTOR BIT AND K0037 SZA CLA /WILL WE SEEK ON THIS ONE? TAD K1000 /NO - DO A READ ALL OR WRITE ALL DCA INTS1 JMS RKCMD /CHECK FOR HALF BLOCK AND COMPLETION TAD INTS1 RKDONE, DCA RKCMD /SAVE THE NEW COMMAND REGISTER JMP I RKNXT PAGE FCE4= .&7770 IFNZRO DC08A < T8ASSM, 0 AND T83770 /THE CHARACTER ONLY SNA JMP T8ASS1 /IGNORE NULL CHARACTERS CLL RTR /BRING THE CHARACTER INTO POSITION RAR AND T80177 TAD K0200 /FORCE ON THE PARITY BIT CIF 00 /STASH IT AWAY JMS I T8IN1A /THAT'S DONE IN FIELD 0 ION T8ASS1, CLL STA RTL /AC=-3 TAD T8ASSM DCA T8T /POINTS TO THE LSW TAD I T8T AND T83770 /SAVE ONLY THE LINE NUMBER DCA I T8T ISZ T8T /POINTS TO THE CAW STL RTR /AC=2000 DCA I T8T /RESET THE FLAG BIT TTIR /BUMP THE "R" REGISTER JMP I T8ASSM T80177, 177 T83770, 3770 T8IN1A, T8IN1 T8T, 0 T8TTI, TTI DC08LO^10+0 /LSW LINE # PT08+DC08LO+1 2000 /CAW JMS T8ASSM /CHARACTER FULLY ASSEMBLED TTI DC08LO^10+10 /LSW LINE # PT08+DC08LO+2 2000 /CAW JMS T8ASSM /CHARACTER FULLY ASSEMBLED TTI DC08LO^10+20 /LSW LINE # PT08+DC08LO+3 2000 /CAW JMS T8ASSM /CHARACTER FULLY ASSEMBLED TTI DC08LO^10+30 /LSW LINE # PT08+DC08LO+4 2000 /CAW JMS T8ASSM /CHARACTER FULLY ASSEMBLED TTI DC08LO^10+40 /LSW LINE # PT08+DC08LO+5 2000 /CAW JMS T8ASSM /CHARACTER FULLY ASSEMBLED TTI DC08LO^10+50 /LSW LINE # PT08+DC08LO+6 2000 /CAW JMS T8ASSM /CHARACTER FULLY ASSEMBLED TTI DC08LO^10+60 /LSW LINE # PT08+DC08LO+7 2000 /CAW JMS T8ASSM /CHARACTER FULLY ASSEMBLED TTI DC08LO^10+70 /LSW LINE # PT08+DC08LO+10 2000 /CAW JMS T8ASSM /CHARACTER FULLY ASSEMBLED TTI DC08LO^10+100 /LSW LINE # PT08+DC08LO+11 2000 /CAW JMS T8ASSM /CHARACTER FULLY ASSEMBLED TTI DC08LO^10+110 /LSW LINE # PT08+DC08LO+12 2000 /CAW JMS T8ASSM /CHARACTER FULLY ASSEMBLED TTI DC08LO^10+120 /LSW LINE # PT08+DC08LO+13 2000 /CAW JMS T8ASSM /CHARACTER FULLY ASSEMBLED TTI DC08LO^10+130 /LSW LINE # PT08+DC08LO+14 2000 /CAW JMS T8ASSM /CHARACTER FULLY ASSEMBLED TTI DC08LO^10+140 /LSW LINE # PT08+DC08LO+15 2000 /CAW JMS T8ASSM /CHARACTER FULLY ASSEMBLED TTI DC08LO^10+150 /LSW LINE # PT08+DC08LO+16 2000 /CAW JMS T8ASSM /CHARACTER FULLY ASSEMBLED TTI DC08LO^10+160 /LSW LINE # PT08+DC08LO+17 2000 /CAW JMS T8ASSM /CHARACTER FULLY ASSEMBLED TTI DC08LO^10+170 /LSW LINE # PT08+DC08LO+20 2000 /CAW JMS T8ASSM /CHARACTER FULLY ASSEMBLED TTI DC08LO^10+200 /LSW LINE # PT08+DC08LO+21 2000 /CAW JMS T8ASSM /CHARACTER FULLY ASSEMBLED TTI DC08LO^10+210 /LSW LINE # PT08+DC08LO+22 2000 /CAW JMS T8ASSM /CHARACTER FULLY ASSEMBLED TTI DC08LO^10+220 /LSW LINE # PT08+DC08LO+23 2000 /CAW JMS T8ASSM /CHARACTER FULLY ASSEMBLED TTI DC08LO^10+230 /LSW LINE # PT08+DC08LO+24 2000 /CAW JMS T8ASSM /CHARACTER FULLY ASSEMBLED *T8TTI+DC08A+DC08A+DC08A+DC08A CIF 00 JMP I .+1 /BACK TO THE REST OF THE DC08A SERVICE T8OUT1 FCB5= .+7&7770 *2360 FCE5= .&7770 DFCLS0, ZBLOCK 4 DFCNO0, ZBLOCK 4 DFL2S0, ZBLOCK 4 -1 /TO END TABLE DFL2DL= . 1-DC08LO+PT08+KL8;11-DC08LO+PT08+KL8 21-DC08LO+PT08+KL8;31-DC08LO+PT08+KL8 DFRING, CTG /CLEAR THE GROUP COUNTER TAD K7774 DCA TEMP0 /COUNTER FOR GROUP SEARCH DFRNG1, RRS /READ RING STATUS SZA STR /ACKNOWLEDGE RING(S) CLA ITG /INCREMENT THE GROUP COUNTER ISZ TEMP0 /LOOKED AT ALL LINES? JMP DFRNG1 /NO, KEEP LOOKING STA IOF DCA I .+2 /DATA FLD=0 HERE, I HOPE. RESET COUNTER EXITF1 D6FLAG DFCLSI, 0 DFCNWI, 0 DFCLST, DFCLS0 DFCNOW, DFCNO0 DFCNTR, 0 DFCSET, 0 TAD DFCLST DCA DFCLSI /POINTER TO STATUS AT LAST INTERRUPT TAD DFCNOW DCA DFCNWI /POINTER TO STATUS AT THIS INTERRUPT TAD K7774 DCA DFCNTR /COUNTER FOR COMPARISONNS CTG /CLEAR GROUP COUNTER JMP I DFCSET DFCARR, JMS DFCSET /INITIALIZE STATUS DFCAR1, RCS /READ CARRIER STATUS DCA I DFCNWI /PLACE ON TABLE ISZ DFCNWI ITG /INCREMENT THE GROUP COUNTER ISZ DFCNTR /READ ALL FOUR GROUPS? JMP DFCAR1 /NO, READ NEXT JMS DFCSET TAD DFL2ST DCA DFL2SI DFCAR2, TAD I DFCNWI CMA AND I DFCLSI SZA /ANY LINES CLEARED? JMP DFCAR3 /YES, ACKNOWLEDGE DFCAR5, TAD I DFCLSI CMA AND I DFCNWI SZA JMS DFCAR6 ISZ DFCLSI ISZ DFCNWI ISZ DFL2SI ITG /INCREMENT THE GROUP COUNTER ISZ DFCNTR /ALL LINES CHECKED? JMP DFCAR2 /NO JMS DFCSET DFCAR4, TAD I DFCNWI /TRANSFER THIS STATUS TABLE TO LAST DCA I DFCLSI ISZ DFCNWI ISZ DFCLSI ISZ DFCNTR JMP DFCAR4 JMP DFL200 DFCAR3, CTR /CLEAR TERMINAL READY JMS DFCAR6 JMP DFCAR5 /LOOK AT OTHER GROUPS DFCAR6, 0 DCA TEMP4 /BIT TO SET TAD TEMP4 CMA AND I DFL2SI TAD TEMP4 DCA I DFL2SI JMP IDFCAR6 DFL200, TAD DFL2ST /INITIALIZE PSEUDO GROUP CTR DCA DFL2SG DFL22, TAD K7770 /EIGHT PHONES DCA TEMP0 IAC DCA TEMP1 /SELECT EACH LINE IN GROUP DFL21, TAD I DFL2SG SNA JMP DFL23 SPA EXITF1 AND TEMP1 SZA CLA JMP DFL25 DFL26, TAD TEMP1 CLL RAL DCA TEMP1 ISZ TEMP0 JMP DFL21 DFL23, DCA I DFL2SG ISZ DFL2SG JMP DFL22 DFGBLK, GETB DFL25, TAD DFL2SG TAD DFL2C DCA TEMP2 TAD I TEMP2 TAD TEMP0 TAD K0010 CLL RAL TAD DFVTBA DCA TEMP3 TAD I TEMP3 SZA CLA JMP .+5 /YES TAD TEMP3 CIF JMS I DFGBLK JMP DFL26 TAD TEMP3 CIF CDF JMS I DFUMES JMP DFL26 DFL2SG, 0 DFL2C, DFL2DL-DFL2S0 DFVTBA= DEVTBA DFL2SI, 0 DFL2ST, DFL2S0 DFUMES, UHLTMS > *DATA1 /ROUTINE TO DECREMENT TIMERS /THEY ARE BUMPED ONCE EACH SECOND /THUS A USER CAN MEASURE UP TO 1 HOUR, 8 MINUTES, 15 SECONDS TIMER0, 0 ISZ TIMBIG /HAVE WE GONE THROUGH A SECOND YET? JMP F0TIMT /NO - DID WE FINISH ALL THE TIMERS LAST TIME? TAD TICSEC /REFRESH SECOND TIMER DCA TIMBIG TAD JOBCNT DCA TIMET1 TAD TIMTB1 /START OF CLKTBL DCA TIMET2 TIMER1, DATFLD TAD I TIMET2 SZA CLA ISZ I TIMET2 JMP TIMER2 TAD TIMEJM /SET TIMER FLAG TAD TIMET1 JMS GETTBA /GET PTR TO STATUS 1 JOBSTS+1 TAD TEMP0 /DOES THE JOB STILL EXIST? SNA CLA JMP TIMER2 /NO TAD I TEMP0 /YES, SET JSTIME IN STR1 RAL STL RAR DCA I TEMP0 TIMER2, ISZ TIMET2 ISZ TIMET1 JMP TIMER1 ISZ UPTIM1 /INDEX LOW ORDER UPTIME SKP ISZ UPTIM2 /INDEX HI ORDER UPTIME TIMEJM, JOBMAX+1 /NOP IFZERO TC01 < JMP .+3 > IFNZRO TC01 < STA > DCA TEMP2 /ENABLE TRANSFER BACK TO DECTAPE CONTROLLER WAIT JMS I TIMEDT /RUN DECTAPE TIMERS IFZERO RK05 < JMP F0TIMR > IFNZRO RK05 < CIF DATFLD > /NO INTERRUPTS TAD RKTIME SZA CLA /ACTIVE? ISZ RKTIME /YES, BUMP TIMER JMP F0TIMR /ALL IS WELL IAC DCLR /STOP WHATEVER IS GOING ON WITH THE RK05 STA DCA I RKERRA /SHOW THAT TRANSFER WAS TERMINATED TAD RKJOB JMS I RKHUNG /REPORT THE ERROR RKL20 /ROUTINE TO DUMP VALUE OF ONE CORE CELL INTO MQ /RUNS AT EACH SYSTEM TICK /TO USE, SET THE DESIRED CORE ADDRESS IN THE SWITCH REGISTER /TO SELECT FIELDS, CLEAR SR TO 0, AND SET THE DESIRED /FIELD IN THE LOW ORDER BITS OF THE SR. /THIS MEANS THAT YOU CANNOT ADDRESS LOCATIONS 0,1,2, OR 3 /IF THIS ROUTINE IS RUNNING, THE EAE IS NOT MUCH USE /TO USER PROGRAMS. SORRY ABOUT THAT. TIMOUT, JMP TIMEX /LAS /INSERT THE "LAS" (7604) TO ENABLE DISPLAY AND K7774 /TRYING A FIELD SELECT? SNA JMP DISPL1 /YES, GO CHANGE THE FIELD LAS /NO; WHAT WAS THAT ADDRESS AGAIN? DCA TEMP0 DISFLD, CDF /ASSUME FIELD 0 TO START TAD I TEMP0 /PICK UP CONTENTS OF SPECIFIED ADDRESS MQL /DUMP IT IN THE MQ TIMEX, CIF CDF /BACK TO FIELD 0 JMP I TIME3A /RETURN TIMIT, TIMER3 TIME3A, TIMER3 TIMBIG, -TICSPS /ACTIVE COUNTER TICSEC, -TICSPS /STARTING VALUE OF TIMBIG TIMET1= TEMP4 TIMET2= TEMP2 TIMTB1, CLKTBL+1 TIMEDT, DTIMER RKHUNG, DTRKER DISPL1, LAS /WHAT WAS THAT FIELD AGAIN? CLL RAL RTL TAD K6201 /BUILD FIELD SELECT DCA DISFLD JMP DISFLD-1 /NOW GO LOOK DEVDMB= JOBTBL-2 *DEVTBL-1 DEVDMB /DUMMY USED BY FIP RELEASE ZBLOCK DEVTBE-DEVTBL 0 /WE ALLOW THE READER EVEN IF NOT CONFIGURED FOR ONE /THIS ALLOWS FIELD SERVICE TO USE THEIR PMK01 IFZERO PUNCH IFNZRO PUNCH <0> DEVDMB IFZERO LPT IFNZRO LPT <0> IFZERO CDR IFNZRO CDR <0> IFZERO TC01 IFNZRO TC01 IFNZRO RK05 IFNZRO .-JOBTBL+1 IFNZRO .-JOBTBL+1 IFNZRO .-JOBTBL+1 IFNZRO .-JOBTBL+1 -1 /TERMINATES ASSIGNABLE DEVICE TABLE /JOBTBL, CLKTBL, TTYTBL, PRGTBL, & DSUTBL ARE SET UP BY INIT *FIPBLK ZBLOCK 10 /FIP'S FIXED PARAMETER BLOCK *WINBAS ZBLOCK 50 /BASIC'S WINDOW $$$$$$$$$$$$$$$$$$$$$$$$$$$$