*20 /DISK-DIAL DISK ROUTINES / /COPYRIGHT 1970, DIGITAL EQUIPMENT CORPORATION / MAYNARD,MASS. 01754 / / /THIS IS THE SYSTEM BUILD AND I-O ROUTINES ALL IN ONE. / / / UPDATED FOR MULTIPLE RK08S 8/11/70 / / / WRITTEN BY JACK BURNESS / / / / / / EJECT / / / PMODE / / / / SETUP1=322 /FIRST HANDLER SET UP BLOCK SETUP2=323 /SECOND HANDLER SETUP BLOCK INITB=311 /INITIALIZATION BLOCK DIOC=345 /CONTROLLER BLOCK DIHAN1=365 /FIRST HANDLER BLOCK DIHAN2=366 /SECOND HANDLER BLOCK / / / / / / / DIALUNIT=100 /DEFINE THE SYSTEM UNIT NOW DIALCORE=10 /PLACE TO LOAD DIAL INTO DIALBLOCK=0 /PLACE WHERE DIAL RESIDES ON LOGICAL UNIT 0 DIALNUMBER=10 /DIAL IS 8 BLOCK LONG. / / / / / / / / / EJECT / / / / / FIELD 0 / / / / *4020 / / / LMODE / / JMP .+3 /SKIP PAST THE PAGE ZERO POINTERS. READ WRITE /POINTERS TO THE READ-WRITE ROUTINES. LDA I /GET THE I/O PRESET CHARACTER 20 ESF /DO AN I/O PRESET LDF 7 /SET THE DATA FIELD TO UPPER CORE RDC /READ IN I O CONTROLLER 6\DIOC RDC /READ IN THE FIRST GROUP OF HANDLERS 7\DIHAN1 RDC /READ IN THE SECOND GROUP OF HANDLERS 5\DIHAN2 CLR /CLEAR THE AC NOW. PDP /GET INTO 8 MODE PMODE CLA CMA /SETAC TO ALL 1S DCLS /SO THAT WE MAY CLEAR THE RANDOM BITS CLA /OF THE STATUS REGISTER. TAD A77 /GET A TEST NUMBER IN THE AC NOW DLDC /SEND TO THE CONTROLLER. CLA /CLEAR THE AC IN CASE THERE IS NO CONTROLLER. DRDC /READ IT BACK NOW. TAD AM77 /IS IT STILL THERE? SNA CLA JMP I AIRK08 /YEP. GO SET UP THE RK08 HANDLER DCMA /CLEAR DISK FLAGS DCMA TAD A77 /AN RF08 TEST DXAL /OUT TO RF08 CLA DXAC /AND BACK AGAIN( TO BE SURE) TAD AM77 /NOW THE TEST SNA CLA /TEXT? JMP IRF08 /RF08 IS HERE DCMA DCMA /CLEAR DISK FLAGS AGAIN TAD A100 /GOOD DF32 TEST. DEAL CLA DEAC TAD AM100 SZA CLA /HOW ABOUT THE DF32 BEING THERE??? JMP I AIDONE /ITS NOT THERE EITHER.... TAD ADF32 /POINTER TO THE DF32 ROUTINES JMS IMOVE /MOVE IN CORRECT ROUTINES TO 7400. JMS I AISETD /SET UP DIAL TO USE DF32 0 JMS I AISETS /CALL TO SET UP THE SOURCE WORK AREA 70 TAD A1000 /CHECK FOR TWO DISKS DEAL CLA DEAC /READ BACK THE REGISTER TAD AM1000 /AND CHECK TO SEE IF OK SZA CLA JMP I AIDONE /NOT THERE JMS I AISETB /SET THE BINARY NOW 270 /270 IS THE CORRECT INCREMENT. JMP I AIDONE /ALL IS WELL. / / / / / / / / / / IMOVE, 0 /MOVES IN CORRECT CORE LOAD. CDF 0 /SELECT CALLING SEQUENCE. CIF 10 /ZAPPO DCA IADD JMS I AMOVE /DO MOVE CDF 10 /SYSTEM DATA CRAP IADD, 0 CDF 10 /TO SYSTEM AREA 7430 150 /COUNT JMP I IMOVE /RETURN TO CALLER / / / / / / / / / IRF08, TAD A77 /CHECK TO SEE IF FIRST DISK IS THERE JMS I AICHECK TAD ARF08 /POINTER TO THE RF08 ROUTINES. JMS IMOVE /CALL IN THE MOVEPER TO SELECT RF08. JMS I AISETD /SET UP FOR DIAL SYSTEM 300 JMS I AISETS /SET FOR SOURCE 370 JMS I AISETB /SET FOR BINARY 370 /ALSO 370 JMS I AISETU /SET THE UNITS FOR 0 AND 1 TAD A177 /2 DISKS? JMS I AICHECK JMS I AISETU /YEP TAD A277 /3 DISKS? JMS I AICHECK /YEP JMS I AISETU /SET IT UP TAD A377 /FOUR DISKS? JMS I AICHECK /YEP JMS I AISETU JMP I AIDONE /GO AND FINISH IT UP. / / / / / / / / / / / / / / A77, 77 A100, 100 A177, 177 A277, 277 A377, 377 A1000, 1000 AM77, -77 AM100, -100 AM1000, -1000 / / AIRK08, IRK08 AICHECK,ICHECK AIDONE, IDONE AISETD, ISETD AISETS, ISETS AISETB, ISETB AISETU, ISETU ADF32, DF32 AMOVE, MOVE ARF08, RF08 / / / / / / / / / / / EJECT *4200 / / / / / / / IRK08, JMS ISETD /SET UP THE DIAL SYSTEM POINTER NOW. 300 /DISPLACEMENT IS 300 BLOCKS JMS ISETS /SET UP THE SOURCE SYSTEM NOW. 370 /DISPLACEMENT IS 370 BLOCKS JMS ISETB /ALSO SET UP THE BINARY DEVICE NOW. 370 /ITS DISPLACEMENT IS ALSO 370 BLOCKS. JMS ISETU /SET UP UNITS 10-11 JMS ISETU /SET UP UNITS 12-13 JMS ISETU /AND FINALLY SET UP UNITS 14-15 TAD BRK08 /GET THE ADDRESS OF THE RK08 ROUTINE JMS I BIMOVE /MOVE IN THE CORRECT HANDLER NOW. JMP IDONE /WERE FINISHED. NOW COPY OVER THE SYSTEM. / / / / / / / / / ICHECK, 0 DXAL DIMA /READ IN STATUS REGISTERS. RTR /ROR;TATE NXD BIT INTO LINC SNL CLA /? JMP I ICHECK /DISK IS THERE. RETURN / / IDONE, CLA /THIS WRITES OUT THE SYSTEM BLOCKS AND THEN REBOOTSTRAPS. LINC LMODE LDF 7 WRC 6\SETUP1 /SAVE THE I/O CONTROLER WRC 7\SETUP2 /SAVE THE ACTUAL I/O ROUTINES. PDP PMODE /GET INTO 8 MODE CLA /CLEAR THE AC TO BE SURRE CDF 10 /SET TO UPER CORE TAD I MSYSP1 /GET SYSTEM CORE LOCATIONS TAD BM7630 /COMPARE WITH LIMIT CDF 0 /RESET FOR CALLING SEQUENCE SNA CLA /MASS SOTRAGE?? JMP IIDONR /NOPE. RETURN CIF 10 /SET TO CALL THE READ ROUTINE JMS I BREAD /SAVE THE INDEX NOW DSAVI /POINTER TO WHERE TO SAVE ILOOP, CIF 10 /RESET TO UPPER FIELD LOCATION POINTER. JMS I BREAD /YEP. INITIALIZE DISK ILINP /POINTER TO INPUT STUFF TAD LTEN TAD IB1 DCA IB1 /UPDATE IB1 CIF 10 JMS I BWRITE /CALL THE WRITE SUBROUTINE ILOUTP /POINTER TO THE OUTPUT CONTROL TAD IB2 TAD LTEN /UPDATE IB2 DCA IB2 ISZ BM20 /ALL DONE???? JMP ILOOP /NOPE. DO MORE / / IIDONE, CIF 10 JMS I BWRITE /REWRITE THE DIRECTORY NOW. DSAVI /SAVE AREA ON THE DISK IIDONR, CIF 10 /RESET TO UPPER CORE LOCATIONS. JMP I BSYSBOT /CALL THE SYSTEM BOOTSTRAP NOW / / / / / / ISETD, 0 CDF 0 TAD I ISETD ISZ ISETD /BOP UP RETURN CDF 10 DCA I MSYSP2 TAD B7430 DCA I MSYSP1 JMP I ISETD / / / ISETS, 0 CDF 0 TAD I ISETS ISZ ISETS CDF 10 DCA I MSYSP5 TAD B7430 DCA I MSYSP4 JMP I ISETS / / / ISETB, 0 CDF 0 TAD I ISETB ISZ ISETB CDF 10 DCA I MSYS10 TAD B7430 DCA I MSYSP7 JMP I ISETB / / / / ISETU2, 0 CDF 10 ISZ B7 TAD B7 DCA I BDSYS ISZ BDSYS TAD B7430 DCA I BDSYS ISZ BDSYS DCA I BDSYS ISZ BDSYS CLA CMA DCA I BDSYS JMP I ISETU2 / / / ISETU, 0 JMS ISETU2 /BOP UP 1 UNIT JMS ISETU2 /BOP UP TWO UNITS JMP I ISETU /RETURN TO CALLER / / / / / / / / / / / / / ILINP, 0 /UNIT 0 /CORE LOC IB1, 300 /BLOCK N UMBER LTEN, 10 /NUMBER OF BLOCKS TO READ IN / / / / ILOUTP, 100 /LOGICAL UNIT 100 0 /CORE LOCATION 0 IB2, 0 10 /WRITE OUT THE 10 RECORDS. / / / / / / / / DSAVI, 100 /INDEX POINTER CRAP. 20 46 2 / / / / / / / / / / / / / / / / / / / / / / BRK08, RK08 BIMOVE, IMOVE MSYSP1, MSYS+1 MSYSP2, MSYS+2 MSYSP4, MSYS+4 MSYSP5, MSYS+5 MSYSP7, MSYS+7 MSYS10, MSYS+10 / BM7630, -7630 BREAD, READ BWRITE, WRITE BM20, -20 BSYSBOT,SYSBOT B7430, 7430 B7, 7 BDSYS, DSYS / / / / / / / / / / / / / / / / / / / / / / / / / / / EJECT / / / / / / / / / / *6000 /LOCATIONS FOR THE "NO" MESSAGE / / 0 /FOR JMPS IN LMODE DX, 0 /CONTAINS THE X VALUE FOR THE NO DCHAR, 0 /CONTAINS THE DISPLAY TABLE POINTERS FOR THE NO. / / / / / / / / / EJECT / / / / / / / / *6430 / / / / / / / RK08=. /THE RK08 ROUTINES GO HERE. / / / / / / / / / *6430 /ALL ROUTINES ARE ORIGINED AT 30 OF THE PAGE. / / / / / / / / 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 / / / / / / / / / / / / / / KREAD, 0 /READ ENTRY POINT JMP KCOMM /GO TO THE COMMON ENTRY PLACE KWRITE, 0 /WRITE ENTRY POINT TAD KWRITE /SET UP A PHOONEY CALL DCA KREAD /SAVE AWAY CLA CLL IAC RAL /+2 TO MAKE READ INSTRUCTION A WRITE INSTRUCTION. / KCOMM, TAD KDLDR /GET THE READ IN THE AC DCA KOPR /AND SAVE AWAY NOW. TAD I KREAD /GET THE UNIT NOW. AND KL70 /JUST THE DEVICE BITS. SNA /IS THE DEVICE 0? TAD KLPH10 /YEP. MAKE IT A 10 TYPE. TAD KL70 /SUBTRACT ONE FROM DEVICE NOW(10-47 BECOMES 0-37). AND KL30 /IGNORE CRAP BITS. CLL RTR /ROTATE TO RK08 CONTROLLER POSITION (9 ? 10) DCA KLOC /SAVE FOR A SECOND TILL WE LOAD THE CONTROLLER. JMS KFGET /GET THE UNIT NOW CLL RTR /ROTATE TO BITS 0-2 OF THE AC. KLPH10, RTR /INSTRUCTION AND PHOOONEY LITTERAL AND KL7400 /CHOP OFF STRAY BITS(LINC WAS 0 TO START WITH) DCA KTRACK /AND NOW SAVE IN THE TRACK WORD TAD I KREAD /GET THE CORE LOCATION NOW. RAR /JUST GET THE FIELD BITS. AND KL70 /CHOP OFF THE OTHER CRAP. TAD KLOC /NOW PUT IN THE UNIT NUMBER (0-3) DLDC /SEND OUT TO THE CONTROLLER NOW JMS KFGET /REGET THE CORE LOCATION. RTR RTR /MAKE INTO A 7400 TYPE NUMBER RAR AND KL7400 /CHOP OFF THE STRAY BITS TAD KL7777 /SUBTRACT ONE FOR THE CONTROLLER. DCA KLOC /AND SAVE IN THE LOCATION POINTER JMS KFGET /NOW GET THE BLOCK NUMBER. TAD KTRACK /NOW ADD IN THE MAIN UNIT DESIGNATOR BITS DCA KTRACK /AND RE-STORE BACK IN THE TRACK POINTER JMS KFGET /GET THE NUMBER OF BLOCKS TO DO. SNA /SEE IF ITS ZERO. JMP I KREAD /IF ITS ZERO, THEN EXIT. ALL IS WELL CIA /NEGATE IT NOW DCA KCOUNT /NOW STORE AWAY IN THE COUNTER LOC. JMP KERR /NOW SET UP THE W.C. AND C.A. AND START OPR GOING / KNEXT, TAD KLOC /GET NEXT RECORD. GET THE LAST LOC. TAD KL400 /ADD 400 TO BOP TO THE NEXT CORE SECTOR DCA KLOC /AND NOW STASH AWAY. ISZ KTRACK /ALSO BOP UP THE TRACK ADDRESS BY 1. / KERR, CLA CMA /SET THE AC TO ALL ONES TO CLEAR DCLS /THE DISK STATUS REGISTER CLA /CLEAR THE AC BECAUSE DCLS DOESNT TAD KLOC /GET THE LOCATION IN THE AC. DLCA /AND SEND TO THE CONTROLLER NOW TAD KL7400 /SET THE AC TO -400 DLWC /AND SEND TO THE CONTROLLER AS THE WORD COUNT TAD KTRACK /NOW GET THE TRACK AND SECTOR IN THE AC. / KOPR, 0 /NOW DO THE CORRECT DISK OPERATION / DSKC /WAIT FOR COMPLETION NOW. SKP /SKIP IF NOT DONE JMP KEND /IF DONE TEST WHETHER MORE RECORDS TO GO DSKE /IS THERE AN ERROR FLAG UP???? JMP .-4 /NOPE. WAIT FOR EITHER COMPLETION OR ERROR FLAG. / KUGH, DRDS /READ IN THE STATUS WORD IF ERROR OCCURED. HLT /BRING CPU TO A GRINDING HALT. LAS /READ IN THE KEYS NOW. DCA KWRITE /SAVE THE KEYS FOR A SECOND CLA CMA /NOW PREPARE TO CLEAR THE STATUS REGISTER DCLS /CLEAR THE STATUS REGISTER CLA /CLEAR THE AC TO BE SURE DCLA /ZAP THE DISK OVER, JUST IN CASE. DSKE /IS THE ERROR FLAG UP AGAIN? SKP /NOPE. TEST COMPLETION FLAG. JMP KUGH /ERROR FLAG UP. GIVE ERROR AGAIN. DSKC /COMPLETION FLAG UP. JMP .-4 /NOPE. WAIT AROUND. TAD KWRITE /NOW RETRIVE THE KEYS. CMA /COMPLEMENT THE KEYS NOW. SZA CLA /ACCEPT???? JMP KERR /NOPE. RETRY THIS BLOCK NOW. / / / / / KEND, ISZ KCOUNT /BOP UP THE COUNTER. JMP KNEXT /NOT DONE. GET THE NEXT RECORD. JMP I KREAD /FINISHED. RETURN TO THE CALLER / / / / / / / / / KCOUNT, 0 /CONTAINS -NUMBER OF RECORDS TOGO KTRACK, 0 /CONTAINS CURRECT TRACK AND SECTOR. KLOC, 0 /CONTAINS CURRENT LOC-1 BEING USED. / / / / / KFGET, 0 TAD I KREAD /GET THE ARGUMENT NOW ISZ KREAD /PUSH TO NEXT ARGUMENT JMP I KFGET /RETURN TO THE CALLER. / / / / / / KL7, 7 KL30, 30 KL70, 70 KL400, 400 KL7400, 7400 KL7777, 7777 / KDLDR, DLDR / / / / / / / / / / / / / / / / / / / / EJECT / / / / / / / / / / / / / *6630 / / / / / / / / / DF32=. / / / / / / / / / *6630 / / / / / / / / DRREAD, 0 /DF32 READ-WRITE ROUTINES. JMP DR1 /INTO MAIN PROCESSOR DRWRIT, 0 /WRITE ENTRY POINT TAD DRWRIT DCA DRREAD /SET UP ARG GETTER CLA CLL CML RTL /+2 DR1, TAD DRMAR /ADD IN READ INSTRUCTION. DCA DROPR /SAVE THE CORRECT INSTRUCTION. DRLOOP, DCMA /CLEAR THE STATUS REGISTER ISZ DRREAD /UNT MEANINGLESS FOR DF32S TAD I DRREAD /GET THE CORE LOCATION RAR /SHIFT OVER 1 PLACE AND DRL70 /ZAP OUT CRAP DCA DRWRIT /AND SAVE AWAY FOR NOW. RIF /GET THIS FIELD TAD DRCDF /ADD IN A CDF 0 DCA DRXCDF /NOW STORE FIELD RESTORE INSTRUCTION. TAD I DRREAD /REGET THE CORE LOCATION JMS DRRTR /ROR 5 AND AND WITH 7400. DRCDF, CDF 0 /SET TO SETUP DATA BREAK LOACATIIONS. CIA CMA /SUBTRACT 1 FOR A GOOD LOCATION DCA I DRMAD /STORE AWAY FOR NOW JMS DRXX /RESET TO THIS DATA FIELD ISZ DRREAD /UP UP TO BLOCK NUMBER TAD I DRREAD /GET THE BLOCK NUMBER RTL /ROTATE TO BITS 1-5 OF THE AC AND DRL3700 /AND OUT CRAP TAD DRWRIT /ADD IN MEMORY FIELD DEAL /SEND TO COMTROLLER. CLA TAD I DRREAD /GET THE BLOCK NUMBER AGAIN JMS DRRTR /INTO 7400S BITS DCA DRWRIT /AND SAVE FOR THE DROPR ISZ DRREAD /BOP TO NUMBER OF RECS. TAD I DRREAD /GET THE NUMBER OF RECS. ISZ DRREAD /BOP PAST THE CRAP FOR RETRUN JMS DRRTR /ROTATE INTO 7400S BITS CDF 0 /SET TO 0 FOR DATA BREAK CIA /NEGATE DCA I DRMWC /DATA BREAK SET UP NOW JMS DRXX /RESTORE THIS FIELD TAD DRWRIT /GET LOW ORDER BITS OF BLOCK NUMBER DROPR, 0 /XEC. DISK INSTRUCTION CLA DFSE JMP DRERR /WAIT FOR DONE OR ERROR FLAG. DFSC JMP .-3 /HANG AROUND FOR A WHILE. DFSE /CHECK ERROR FLAG TO BE SURE JMP DRERR /ERROR! JMP DRCLRF /EXIT. ALL IS WELL / / DRERR, DEAC /READ IN THE ERROR REG. HLT /HALT NOW. LAS /GET HIS REQUEST. CMA /NEGATE FOR TEST SNA CLA JMP DRCLRF /EXIT NOW CLA CLL IAC RTL /+4 CIA /-4 TAD DRREAD /RESET ARG POINTER DCA DRREAD /NOW JMP DRLOOP /AND TRY AGAIN. / / / / DRMAR, DMAR DRL70, 70 DRL300, 300 DRXX, 0 DRXCDF, 0 JMP I DRXX / DRRTR, 0 RTR RTR RAR AND DRL7400 JMP I DRRTR / DRL7400,7400 DRMWC, 7750 DRMAD, 7751 DRL3700,3700 / / / / / / / *.?7600+152 /ORIGIN PASS DATA BREAK LOCATIONS. / / / DRCLRF, DCMA /CLEAR DF32 FLAGS IN CASE HE"S USING INTERUPTS. DCMA /YOU REALLY NEED TWO OF THEM. JMP I DRREAD /AND RETURN. / / / / / / / / / / / / / / / / / / / / EJECT / / / / *7000 / / / / MAIN, CLA /CLEAR THE AC TO BE SURE IOF /TURN OFF INTERUPTS IN CASE WE"RE IN FOCAL 12. RDF /GET THE CALLING FIELD TAD LCDF /ADD IN THE BASE CDF DCA RCDF /AND SAVE AWAY RIF /READ IN THIS FIELD TAD LCDF /AND SET UP THIS DATA FIELD CHANGE DCA TCDF /STASH AWAY. DCA CBLOCK /CLEAR THE REQUEST WORD JMS STCDF /SET DATA FIELD TO THIS FIELD TAD I MREAD /GET THE READ ADDRESS SNA /WAS IT A READ? ISZ CBLOCK /NOPE. A WRITE. SET UP CALLING ADDRESS TAD I MWRITE /ADD IN WRITE CALL LOCATION. DCA MRETL /AND STASH AWAY. DCA I MREAD /CLEAR THE READ LOCATION DCA I MWRITE /AND THE WRITE LOCATION FOR NEXT TIME THROUGH TAD PTABLE /GET THE POINTER TO THE UNITS TABLE. DCA TEMP /AND SAVE AWAY IN A TEMPRARY. JMS SRCDF /SET TO CALLERS FIELD TAD I MRETL /GET THE START OF CALLERS ARGUEMENTS. DCA MCALL /STASH AWAY ISZ MRETL /AND BOP UP FOR THE RETURN TAD I MCALL /GET THE USERS UNIT NOW. TAD M20 /IS IT GREATER OR EQUAL TO 20? SPA JMP LESS20 /NOPE. ITS LESS THEN 20. TAD M30 /IS IT GREATER OR EQUAL TO 50? SMA JMP GRAT50 /BIGGER THEN 47. AND L7 /ITS BETWEEN 20 AND 47. AN EXTENDED UNIT. GET TAD M40 /THE UNITS BITS AND MAKE INTO 1X TYPE NUMBER GRAT50, TAD L30 /MAKE BACK INTO ORGINAL NUMBER NOW. LESS20, TAD L20 /DEPENDING ON WHERE RANGE OCCURED. DCA CUNIT /AND STASH AWAY NOW FOR THE TEST. JMS STCDF /SET TO THIS CDF / / / MLOOP, TAD I TEMP /GET NEXT UNIT ON TABLE SPA /MINUS=END OF LIST??? JMP MNOT /UNIT NOT THERE CIA TAD CUNIT /GET THE CALLING UNIT SNA CLA /A MATCH??? JMP MTRUE /SURE IS CLA!CLL IAC CML RAL /+3 TAD TEMP /BOP TO NEXT ENTRY ON TABLE DCA TEMP /AND PLACE BACK JMP MLOOP /GO TRY THIS ONE. / / / / / / / / / / / / / MNOT, LINC /GET OVER INTO SUPER MODE LMODE LDA I 200 /SET FOR FULL SIZE LETTERS ESF /ZAP IT OUT NOW JMP MNL /NOW DISPLAY IT, BABY. / / / / PMODE / / / / / / / / / / / / / / / / / / EJECT / / / / / / MTRUE, ISZ TEMP /PUSH PAST TO NEXT ITEM TAD CBLOCK /GET WHETER READ OR WRITE(0 OR 1) CLL RAL /MAKE IT A TWO TAD I TEMP /GET THE CORRECT ROUTINE ADDRESS DCA I L7770 /STORE IN 7770 ISZ TEMP /PUSH PAST THE CRAP TAD I TEMP /GET THE FUDGE FACTOR DCA I L7771 /AND STORE AWAY TAD I L7770 /REGET THE ROUTINE ADDRESS DCA TEMP /SAVE IN TEMP FOR NOW. JMS SRCDF /SET TO CALLERS CDF TAD I MCALL /REGET THE USERS UNIT NOW. DCA CUNIT /AND STASH AWAY. ISZ MCALL /PUSH TO CORE LOC TAD I MCALL /GET THE CORE LOC DCA CCORE /AND STASH AWAY ISZ MCALL /GET TO BLOCK NUMBER JMS STCDF /SET TO THIS DATA FIELD TAD I L7771 /RECALL THE FUDGE FACTOR JMS SRCDF /SET TO CALLERS LOC TAD I MCALL /ADD IN USERS BLOCK NUMBER DCA CBLOCK /NOW SAVE AWAY ISZ MCALL /BOP TO NEXT ONE TAD I MCALL DCA CNUM /SAVE THE NUMBER OF BLOCKS NOW. JMS STCDF /SET TO THIS CDF JMS I TEMP /CALL THE CORRECT ROUTINE NOW. CUNIT, 0 CCORE, 0 CBLOCK, 0 CNUM, 0 CLA CLL IAC RAL /+2 IN THE AC. TAD RCDF /ADD IN USERS CDF TO MAKE CIF CDF USERSFIELD DCA .+1 /SET UP RETURN CRAP 0 JMP I MRETL /RETURN TO CALLER / / / / / / / / / STCDF, 0 TCDF, 0 /SET TO THIS DATA FIELD JMP I STCDF /RETURN / / / SRCDF, 0 RCDF, 0 /SET TO USERS DATA FIELD JMP I SRCDF /RETURN TO THE CALLER / / / / LCDF, CDF MREAD, 7774 MWRITE, 7775 PTABLE, MTABLE TEMP, 0 MRETL, 0 MCALL, 0 L6, 6 L7, 7 L20, 20 L30, 30 L7770, 7770 L7771, 7771 M20, -20 M30, -30 M40, -40 / / / / / / / / / LMODE /TELL ASSY WE ARE IN LINC MODE WHEN WE GET HERE / / / / BOOTER, PDP /GET OVER INTO THE GOOD MODE. PMODE AND L6 /SEE WHAT THE AC CONTAINS. SNA CLA /BITS 9 OR 10 ON? JMP RK08OK /NOPE. DISK IS OK. ALL IS WELL. DCLA /DISK WAS ON WRONG DRIVE. REPOSITION NOW. DSKC /AND WAIT FOR IT,BABY JMP .-1 /HO HUM RK08OK, DCA I MWRITE /ZAP OUT THE WRITE ENTRY IN CASE ROUTINES BOMBED. JMS I MREAD /CALL THE READ ROUTINE DPBOOT /POINTER TO BOOTSRAP INFO LINC LMODE /GET OVER INTO LINC MODE LDF 3 LIF 2 /SET TO DO STANDARD CALL JMP 4021 /JMP TO SYSTEM RESTART LOCATION. / / PMODE /GET BACK INTO 8 MODE / / / / DPBOOT, DIALUNIT DIALCORE DIALBLOCK DIALNUMBER / / / / / / / / / / / / / / / / / / / / / EJECT / / / / *7200 / / / / / MOVE, 0 /THIS ROUTINE MOVES MEMORY LOCATIONS IN CORE. CLA /CLEAR TO BE SURE. JMS SWGET /GET THE STARTING DATA FIELD DCA SWIN /AND SAVE AWAY JMS SWGET /GET THE STARTING LOC DCA SWLIN /AND SAVE IT JMS SWGET /GET THE TO DATA FILED DCA SWOUT /AND SAVE IT JMS SWGET /GET THE TWO LOC DCA SWLOUT /AND SAVE IT. RDF /GET THE CALLING DATA FIELD TAD SLCDF /SAVE RETURN DCA SWRET JMS SWGET /GET THE AMOUNT SNA JMP SWRET /NO GOOD. RETURN TO CALLER CIA DCA SWGET /SAVE AWAY SWIN, 0 /SET INPUT DATA FIELD TAD I SWLIN /GET INPUT DATA SWOUT, 0 /SET TO OTHER MOVE FIELD DCA I SWLOUT /SAVE IT AWAY ISZ SWLOUT /INCREMENT TO LOCS. NOP ISZ SWLIN /INPUT TOO NOP ISZ SWGET /DONE. JMP SWIN /NOPE. GO BACK UP NOW. SWRET, 0 JMP I MOVE /RETURN TO THE CALLER / / / / SWGET, 0 TAD I MOVE ISZ MOVE JMP I SWGET / / / SWTMP1, 0 SWTMP2, 0 SWLIN, 0 SWLOUT, 0 SLCDF, CDF CIF / / / / / DTABLE, 3077 /THE "NO" MESSAGE 7706 0000 /THE SPACE BETWEEN THE N AND THE O 4177 7741 /END OF THE "NO" MESSAGE / / / / / / / / / / / / / / / / LMODE / / CHECKF, LDA I /GET THE I-O PRESET CODE INTO THE AC 20 ESF /DEVICES SHOULD BE CLEAR NOW BECAUSE OF THE I-O PRESET. CLR /GET RID OF THE CODE NOW. LDF 7 /AND SET DATA FIELD TO BE SURE. IOB /NOW READ IN THE INSTRUCTION FIELD PMODE RIF LMODE /BACK INTO LMODE NOW. SHD I 1616 /IS IT OK(I.F.=7) JMP CHBOOT /YEP. NORMAL REBOOTSTRAP RDC /THE I/O ROUTINES NOW. 6\SETUP1 RDC 7\SETUP2 / / CHBOOT, LIF 7 /SET THE I.F. TO 7 FOR REBOOTSTRAP. LDA /NOW GET THE OLD RK08 STATUS INTO THE AC. DX?1777 /BEFORE WE GO UP TO THE ROUTINES. JMP BOOTER /DO THE BOOT NOW. / / / / PMODE / / / / / / / / / / / / / EJECT / / / / *7300 /THIS IS WHERE THE UNIT TABLE RESIDES. / / / / / / MTABLE, 0 7630 0 1 7630 0 2 7630 0 3 7630 0 4 7630 0 5 7630 0 6 7630 0 7 7630 0 MSYS, 100 7630 300 110 7630 370 111 7630 370 DSYS, 7777 /START OF DISK UNITS OR END OF TABLE / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / EJECT / / / / / / / / / / / / / *7400 / / / / / / / / / LMODE / / / / / / / / / MNL, SET I DX?1777 /SET THE HORIZONTAL POINTER TO THE CENTER OF SCRREN 360 SET I DCHAR?1777 /SET CHARACTER POINTER TO POINT TO THE "NO" CHARS. DTABLE-1?1777 /WHERE THEY ARE IN MEMORY CLR /CLEAR THE AC TO SET THE VERTICAL TO ZERO. DSC I DCHAR?1777 /DISPALY A CHARACTER NOW. DSC I DCHAR?1777 /AND ANOTHER UNITL THE NO IS DISPLAYED. DSC I DCHAR?1777 DSC I DCHAR?1777 DSC I DCHAR?1777 /THE NO IS DONE NOW. / KST /NOW SEE IF A CHARACTER HAS BEEN TYPED. JMP MNL /NOPE. LOOP! IOB /READ IN THE CHARACTER NOW. PMODE KRB LMODE SAE I /IS A C.R. 215 JMP MNL /NOPE. LOOP. SKP /SKIP PAST BOOT ENTRY. / PMODE / BOOTCK, LINC /GET OVER INTO SUPER MODE LMODE / CLR /CLEAR THE AC TO BE SURE. IOB DRDC /READ IN THE RK08 COMMAND REGISTER NOW STC DX?1777 /AND SAVE FOR A SECOND. JMP CHECKF /AND NOW GO DO THE REBOOTSTRAP. / / / / / / / / PMODE / / / / / / / / / / / / / / / / / / / / / / / / EJECT / / / / / / / DISK DEFINITIONS (DF32-RF08) / / / / DCMA=6601 DMAR=6603 DMAW=6605 DCEA=6611 DSAC=6612 DEAL=6615 DEAC=6616 DFSE=6621 DISK=6623 DIML=6615 DFSC=6622 DIMA=6616 DMAC=6626 DMMT=6646 DCXA=6641 DXAL=6643 DXAC=6645 / / / / / / / / / / / / / / / / *7430 / / / / / / RF08=. /DEFINE THE RF08 LOCATIONS. / / / / / / / / / / / / *7430 /MAIN DISK THINGS. / / / / DFREAD, 0 /RF08 READ ENTRY JMP DFR1 /GO TO THE MAIN READ ENTRY DFWRIT, 0 /MAIN RF08 WRITE ENTRY TAD DFWRIT /GET THE WRITE ENTRY DCA DFREAD /AND SAVE IN THE READ ENTRY FOR EASY ARG PICKING UP. CLA CLL CML RTL /+2 IN THE AC. DFR1, TAD DFMAR /GET THE READ INSTRUCTION (DMAR) DCA DFOPR /AND SAVE IT FOR LATER DFLOOP, DCMA /ERROR REENTRY POINT. CLEAR DISK STATUS. JMS DFGET /GET THE FIRST ARGUEMENT(THE UNIT NUMBER) CLL RTL RAL /ROTATE INTO BITS 6-8 AND DFL70 /AND OUT UNIT BITS NOW CLL RTL /FINISH ROTATING NOW. DXAL /AND SEND TO CONTROLLER. TAD I DFREAD /GET THE CORE LOCATION. RAR /RORTATE RIGHT ONE PLACE. AND DFL70 /JUST MAKE IT BITS 6-8 FOR MEMORY FIELD REF. DIML /AND SEND IT OUT. RIF /READ IN THE PRESENT FIELD NOW FOR REFERENCE. TAD DFCDF /ADD IN A CDF 0 DCA DFXCDF /SAVE FOR RESTORING THIS DATA FIELD. JMS DFGET /GET THE CORE LOC AGAIN AND BOP ARG GETTER JMS DFRTR /ROTATE DISK BITS AROUND. CIA CMA /SUBTRACT ONE FOR 3 CYCLE DATA BREAK DFCDF, CDF 0 /SET DATA FIELD TO 0 FOR SETTING UP 3 CYCLE BREAK DCA I DFMAD /SAVE IN MEMORY ADDRESS. JMS DFXX /RESET TO THIS FIELD DXAC /READ IN THE DISK REGISTER DCA DFWRIT /SAVE IN A TEMP FOR A SECOND TAD I DFREAD /GET THE BLOCK NUMBER NOW RTR RTR AND DFL377 /JUST NECESSARY BITS. TAD DFWRIT /RECALL THE OLD DISK BLOCK NUMBER DXAL /NOW TELL DISK FULL EXTENSDED REGISTER. JMS DFGET /NOW GET THE BLOCK NUMBER AND BOP JMS DFRTR /ROTATE 5 RIGHT AND ANDJ. DCA DFWRIT /AND SAVE AWAY TILL DFOPR JMS DFGET /FINALLY GET THE NUMBER OF RECORDS JMS DFRTR /ROTATE 5 RIGHT AND AND OUT. CIA CDF 0 /SET TO STORE IN WORD COUNT DCA I DFMWC /SAVE AWAY NOW JMS DFXX /RESTORE THIS DATA FIELD TAD DFWRIT /RECALL THE LOWER BITS OF BLOCK NUMBER DFOPR, 0 /START THE DISK MOVING,BABY!!! DISK /WAIT FOR EVENT TO HAPPEN JMP .-1 /ALL DONE..... DFSE /HOW ABOUT AN ERROR. JMP I DFREAD /NO ERROR. RETURN DIMA /READ IN THE PROCESSOR STATUS REGISTER. AND DFL1003 /JUST LEAVE IN VARIOUS ERROR BITS. CLL RTR /ROTATE NXD STATUS INTO LINK SZA CLA /NXD SHOULD BE ONLY BITS ON. JMP DFBAD1 /ITS A LEGITE ERROR. CDF 0 /PREPARE TO REGET THE WORD COUNT. TAD I DFMWC /WEVE GOT IT. JMS DFXX /RESET TO THIS DATA FIELD. SNA CLA /TEST STATUS JMP I DFREAD /ITS CLEAR. ALL IS WELL . RETURN TO CALLER. DFBAD1, DIMA /REREAD IN STATUS HLT /HALT WITH THE ERROR IN THE AC. LAS /READ THE SWITCHES. CMA /NEGATE SNA CLA /ACCEPT OR RETRY [7777=ACCPET, ANYTHING ELSE=RETRY] JMP I DFREAD /ITS ACCEPTED. RETURN. CLA CLL IAC RTL /+4 IN THE AC CIA /MAKE IT A -4 TAD DFREAD /BACK UP PAST THE ARGS. DCA DFREAD /SO THAT RETRY WILL WORK. JMP DFLOOP /TRY AGAIN. / / / / / / / / / DFMAR, DMAR /READ INSTRUCTION DFGET, 0 /GETS AN ARGUEMENT AND BOPS TAD I DFREAD ISZ DFREAD JMP I DFGET /RETURN TO CALLER DFMAD, 7751 /THE ADDRESS / / / *7552 /PAST THE DATA BREAK LOACTIONS. / / / / / DFRTR, 0 RTR RTR RAR /THIS ROUTINE TAKES BITS 8-11 AND AND DFL7400 /PLACES THEM IN BITS 0-3 OF THE AC. JMP I DFRTR /RETURN TO CALLER. DFL70, 70 DFXX, 0 DFXCDF, 0 JMP I DFXX DFL7400,7400 DFL377, 377 DFL1003,1003 DFMWC, 7750 /THE WORD COUNT POINTER. / / / / / / / / / / / *7570 /SYSCOM AREA FOR THESE ROUTINES. / / / 0 0 MAIN BOOTCK 0 0 JMP I .-4 JMP I .-4 / / / / / / / / / / / / / / / / / / / / / EJECT / / / / / / / / / / / *7600 / / / / / / / / / / / SYSLOD, TAD TPOINT /GET THE NEXT BIT LOAD MAP WORD SNA /ALL DONE???? JMP SYSGO /YEP. GO TO HEADER START-UP OF PROG. CLL RAL /ROTATE BIT INTO LINC DCA TPOINT /SET UP TPOINT FOR THE NEXT BLOCK. SNL /WAS THIS A LOADED BLOCK??? JMP SYSLD2 /NOPE. DONT READ IT IN JMS TREAD /READ IT IN, BUBBY LUNIT, 0 /UNIT LLOC, 0 /CORE LOC LBLOCK, 0 /BLOCK NUMBER LNUM, 0 /NUMBER OF BLOCKS TO READ IN. ISZ LBLOCK /BOP UP THE BLOCK NUMBER SYSLD2, ISZ LLOC /BOP UP THE LOCATION COUNTER BY 400 JMP SYSLOD /GO BACK AND GET ANOTHER BIT-WORD-MASK / SYSGO, LINC /GET OVER TO LINC MODE FOR THE STARTUP LMODE LDA I /DO AN I/O PRESET 20 ESF /OUT IT GOES LDF 3 /SET THE D.F TO POINT TO LOWER CORE. CLR /CLEAR THE AC FOR A CLEAN START DJR /DONT DESTROY LOCATION 6000 IN UPPER MEM JMP 7774 /START PROG GOING NOW. / / PMODE /TELL ASEMBLER WERE BACK IN PMODE / / / / / / / *7627 / / / TPOINT, 0 /MINI-BIT MASK / / / / / / / EJECT / / / / / / / / / / / / *7630 / / TREAD, 0 JMP TTREAD /GO TO THE READ DOITER. TWRITE, 0 TAD TWRITE /GET THE WRITE ADDRESS DCA TREAD /AND SOTRE BACK IN THE READ FOR THE ARG GETTER. JMS TDO /CALL THE DOER LMODE WRI /A WRITE INSTRUCTION PMODE TL400, 400 /A NOP IN CASE OF "PHOONEY" ERROR. JMS TDO /NOW DO CHECK LMODE CHK PMODE JMP TWRITE+3 /AN ERROR. TRY AGAIN / TTRET, CLA CLL IAC RTL /+4 TO SKIP PAST ARGUEMENTS TAD TREAD /CALLING ADDRESS DCA TREAD /RETURN ADDRESS JMP I TREAD /RETURN TO CALLER / TTREAD, JMS TDO /DO THE READ NOW LMODE RDE PMODE JMP TTREAD /ON AN ERROR, RETRY JMP TTRET /RETURN IF NO ERROR. / / / / / TDO, 0 TAD TREAD /GET THE CALLING ADDRESS DCA TCALLY /SAVE AWAY TAD I TDO /GET THE OPERATION ISZ TDO /BOP UP THE RETURN ADDRESS DCA TOPR /SAVE IT AWAY CLA CMA /SET FOR OPERATION OK DCA TRET /RETURN CHECKER TAD I TCALLY /GET THE UNIT NUMBER AND TL7 /CHOP OFF CRAP. CLL RAR /SET TO RIGHT PLACES IN AXO. DCA TAXO /SAVE IN THE TAPE REGISTER WORD. RTL /NOW ROTATE SINGLE UNITS BIT RTL /BACK AGAIN TO BIT 8. TAD TOPR /ADD IN THE INSTRUCTION AND DCA TOPR /SAVE IT AWAY. INSTRUCTION NOW COMPLETE. ISZ TCALLY /BOP POINTER TO CORE LOCATION TAD I TCALLY /GET THE CORE LOCATION NOW. AND TL160 /JUST GET THE FIELD BITS NOW. CLL RTL /AND ROTATE TO BITS RTL /0-2 RAL TAD TAXO /ADD IN THE TAPE REGISTER WORD. TAD TL20 /ALSO ADD IN THE EXTENDED ADDRESS BIT. DCA TAXO /AND SAVE IT AWAY. TAD I TCALLY /GET THE CORE LOCATION AGAIN. RTR /ROTATE TO BITS 0-3. RTR RAR AND TL7400 /AND AND OUT STRAY CRAP. DCA TWRITE /AND SAVE AWAY. TWRITE IS FREE NOW. ISZ TCALLY /BOP TO THE BLOCK NUMBER TAD I TCALLY /GET THE BLOCK NUMBER DCA TBLOCK /AND SAVE AWAY. ISZ TCALLY /BOP TO THE NUMBER OF BLOCKS TO READ IN. TAD I TCALLY /GET THE NUMBER NOW. CIA /NEGATE. SNA /NO BLOCKS? JMP TOUT /NO BLOCKS. RETURN. DCA TCOUNT /SET UP THE COUNT NOW. / / TLOOP, TAD TWRITE /GET THE CORE ADDRESS. LINC /GET INTO LINC MODE LMODE TMA /SEND TO THE CONTROLLER. LDA I /GET THE FUNCTIONS. TAXO, 0 /AND SEND IT TO THE CONTROLLER. AXO /WITH AN AXO. / TOPR, 0 /NOW DO THE ACTUAL TAPE INSTRUCTION. TBLOCK, 0 /WITH THE BLOCK NUMBER HERE. THIS HANGS UNTIL DONE. / PDP /BACK INTO 8 MODE PMODE /FOR NORMAL CRAP / AND TRET /CHECK FOR ALL 7777S DCA TRET TAD TL400 /ADD 400 TO THE LOC TAD TWRITE DCA TWRITE ISZ TBLOCK /BOP UP THE BLOCK NUMBER ISZ TCOUNT /ALL DONE??? JMP TLOOP /NOPE. DO SOMMSE MORE... JMP TOUT /ALL DONE. CHECK CHECKSUM AND EXIT. / / / / / *7750 TCALLY, 0 /PLACE OF D.B. LOCATIONS. TCOUNT, 0 / / / TOUT, ISZ TRET /IS THE CHECKSUM OK???? JMP I TDO /NOPE. EXIT ISZ TDO /OK. GO TO SECOND LOC JMP I TDO /RETURN. / / / / / / / TL7, 7 TL20, 20 TL160, 160 TL7400, 7400 TRET, 0 / / / / / / / / / / / / *7770 /SYSTEM COMMUNCATIONS REGION / / / 0 /CONTAINS THE ACTIVE ADDRESS OF I/O 0 /CONTAINS THE NECESSARY FUDGE FACTOR MAIN /POINTER TO I/O INTERPRETER BOOTCK /POINTS TO BOOTSTRAP READ, 0 /READ ENTRY POINT WRITE, 0 /WRITE ENTRY POINT JMP I 7772 /DOES THE CORRECT OPERATION SYSBOT, JMP I 7773 /CALLS THE SYSTEM BOOTSTRAP. / / / / / / / / / EJECT / / / / / / / / /