/PROGRAM TAPBOT.PA / / / / / PROGRAM TO PUT A LINC8 BLOCK 0 BOOTSTRAP TO BRING IN THE / --------------------------------------------------------- / OS/8 SYSTEM DEVICE DISK. / ----------------------- / / / / / / / / PETER LEMKIN / NATIONAL INSTITUTES OF HEALTH / BETHESDA, MD 20014 / / JAN 16, 1971 / REVISED DECEMBER 5, 1972 / / / / ABSTRACT / --------- / TAPBOT WRITES A BOOTSTRAP BLOCK ON BLOCK 0 OF A UNIT 0 LINC8 /128 WORD/BLOCK LINCTAPE WHICH IS BEING USED AS AN OS/8 DECTAPE. /THE LINC LOAD SWITCH MAY THEN BE USED TO BOOTSTRAP IN THE SYSTEM /DEVICE WHICH IN THIS CASE IS AN RF08 DISK. IT SHOULD ALSO WORK /WITH MINOR MODIFICATION FOR OTHER TYPES OF DISKS SUCH AS THE DF32 /OR RK8. / / /**PAGE / OPERATION / --------- / UPON STARTING IT TYPES "READY?" TO WHICH YOU TYPE "Y" AND AT /WHICH POINT, IT WRITES THE BOOTSTRAP ONTO BLOCK 0 OF SIMULATED DTA0:. /NOTE THAT THE LINCTAPES MUST BE MARKED WITH PROGRAM "XMARK" (DECUS /L-15 BY HAROLD PEARSON) BEFORE USING TAPBOT. THE LINC8 LINCTAPE /DRIVES HANDLER IS ONE WRITTEN BY GEORGE BERRY (FROM DEC) WHICH /WAS ONE MODIFIED BY KURT METZER. THE HANDLER IS INCLUDED AFTER THE / "$" OF TAPBOT.PA FOR THOSE WHO NEED IT. TO USE IT, RE-EDIT IT /AWAY FROM TAPBOT.PA AND EITHER EDIT IT INTO CONFIG OR OVERLAY ON /AFTER CONFIG IS LOADED INTO CORE. YOU MUST GENERATE TWO .BN FILES /FROM IT TO GET BOTH UNITS 0 AND 1. LINCTAPE SHOULD HAVE AT LEAST /128 WORDS/BLOCK. THE HANDLERS DO NOT RETRY ON CHECKSUM ERRORS, THEY /GIVE FATAL ERROR RETURNS. / /STARTING ADDRESS IS 200 /CORE REQUIRED IS <0,577>. / FIELD 0 USR=7700 *200 /B.1 RESET THE USR AND FETCH THE DTA0: HANDLER INTO CORE. CDF 0 CIF 10 JMS I (USR 13 /RESET CLA / /NOW FETCH DTA0: CDF 00 TAD D1 /SET UP DEVICE NAME DCA F1 TAD D1+1 DCA F2 TAD (HANDLR DCA F3 CIF 10 JMS I (USR 1 /FETCH F1, 0 F2, 0 F3, HANDLR JMP ERR1 / /B.2 ASK IF READY, THEN PREPARE TO WRITE AGAIN, JMS MSG 215;212 "R;"E;"A;"D;"Y;"?;": 0000 JMS IN TAD (-"Y SZA CLA JMP AGAIN /NOT YET / /B.3 EXECUTE THE WRITE JMS I F3 /ADDRESS OF THE DTA0: HANDLER 4100 /WRITE 1 PAGE FROM FIELD 0 0000 /PAGE 0 0000/BLOCK 0 JMP ERR2 /WRITE ERRROR /B.5 TELL IT IS OK JMS MSG 215;212 "O;"K;215;212 0000 JMP AGAIN D1, DEVICE DTA0 / / / / PAGE ERR1, JMS MSG 215;212 "F;"E;"T;"C;"H;" ;"F;"A;"I;"L;"E;"D; 0000 HLT / / ERR2, JMS MSG 215;212 "W;"R;"I;"T;"E;" ;"E;"R;"R; 0000 HLT / / OUT, 0 TLS TSF JMP .-1 CLA JMP I OUT / IN, 0 KSF JMP .-1 KRB TLS JMP I IN / MSG, 0 TAD I MSG ISZ MSG SNA JMP I MSG JMS OUT JMP MSG+1 / PAGE HANDLR, 0 ZBLOCK 177 /STORAGE FOR THE HANDLER / /******THE BOOTSTRAP**** *0 DIML=6615 DXAL=6643 ICON=6141 CDF 00 JMP 20 *20 CLA CLL DIML /CLEAR THE DISK REGISTERS DXAL CLA CLL ICON /STOP THE TAPE TAD (COUNT /SET UP THE AUTO INDEX REGISTERS DCA SOURCE TAD (-5 /SET UP COUNT DCA COUNT TAD (BOOT-1 /SINK DCA SINK CLA MORE, ISZ SOURCE ISZ SINK TAD I SOURCE DCA I SINK /MOVE IT ISZ COUNT JMP MORE JMP BOOT /START THE BOOTSTRAP SOURCE, 0 SINK, 0 COUNT, 0 NOPUNCH *7750 ENPUNCH BOOT, CLA DMAR /READ BLOCK ZERO START, DFSC /WAIT UNTIL DARK JMP .-1 JMP I START /START UP PS/8 $ /**PAGE /LINCTAPE HANDLER FOR LINC-8 SYSTEM - STOLEN FROM KURT METZGER /THE PARAMETER "N" DETERMINES WHETHER THIS HANDLER WILL BE ASSEMBLED /FOR DRIVE 0 OR 1. DEFAULT CASE IS DRIVE 0 N=0 /HANDLER FOR UNIT #0...CHANGE TO N=1 FOR UNIT #1 *5000 /ORIGIN FOR HANDLER #0...CHANGE TO *5400 FOR HANDLER #1 /LINC IOT'S ICON=6141 /INTERFACE CONTROL IOT INTS=6147 /READ LINC INTERRUPT REGISTER IAAC=6171 /READ LINC AC IACB=6161 /LOAD LINC AC FUNCT, 0 BLN, 0 NUMB, 0 LOC, 0 CNTR, 0 CDF0, CDF 0 CDIF0, CDF CIF 0 C4000, 4000 IFNZRO N LTA, 0 /STARTS AT 10 OR 11 IN PAGE, DEPENDING ON N CLA CLL CML RAR AND I LTA DCA FUNCT /GET READ/WRITE BIT TAD I LTA AND C70 TAD CDF0 DCA CDFX /GET CDF TO BUFFER FIELD TAD I LTA RTR RTR RTR AND C37 CIA CLL CML /THIS TURNS LINK ON - IMPORTANT! DCA NUMB /SAVE RECORD COUNT (128 WORD RECORDS) ISZ LTA TAD I LTA DCA LOC /SAVE BUFFER ADDRESS ISZ LTA TAD I LTA TAD I LTA DCA BLN /SAVE TAPE BLOCK ISZ CNTR JMP .-4 /ALLOW DRIVE TIME TO SETTLE DOWN ISZ LTA RDF TAD CDIF0 DCA CEXIT /SETUP FOR RETURN CDFX, HLT /SET BUFFER FIELD SERCHA, ISZ BLN /BLOCK NUM ON TAPE IS 1'S COMP. SERCHB, DCA CSUM /INITIALIZE CHECKSUM TAD C7600 DCA CNTR /SET RECORD SIZE IFNZRO N TAD C2 ICON /SET SEARCH MODE CLA IAC SZL /IF LINK IS ON SET MOTION BACKWARDS ICON TAD C6 /SET AC TO 7 TO CLEAR LINC INTERRUPTS B, ICON A, JMS WAIT /WAIT FOR TAPE FLAG SMA /BLOCK NUMBER SHOULD BE NEGATIVE STL /OTHERWISE FORCE DIRECTION CHANGE TAD BLN SNA CLA /L=1 MEANS WE HAVE TO GO FORWARD JMP THERE /ON BLOCK, MUST CHECK DIRECTION INTS /READ INTERRUPT STATUS RAR /STATUS(11)=0 IF MOTION IS FORWARDS AND C4000 /DIRECTION IN LINK, OLD LINK IN AC0 SZA SNL JMP A /NEED FORWARDS, MOVING FORWARDS CML SNL SMA JMP A /NEED BACKWARDS, MOVING BACKWARDS ICON /STOP TAPE MOTION IAC JMP B /SET MOTION ACCORDING TO AC0 THERE, INTS AND C2 /STATUS(10)=1 IF MOTION FORWARDS SNA JMP A /WRONG WAY TAD FUNCT /ADD IN READ/WRITE BIT IAC /AC NOW CONTAINS 4000*RW+3 ICON /SET BLOCK MODE SMA JMP RDATA /READ OPERATION TAD C2 ICON /TURN ON WRITERS WRITE, CLA TAD I LOC IACB /LOAD UP LINC AC TAD CSUM DCA CSUM /ACCUMULATE CHECKSUM JMS WAIT /PUT OUT LINC AC ISZ LOC C2, 2 /RANDOM STORAGE ISZ CNTR JMP WRITE /LOOP FOR RECORD C7600, 7600 TAD CSUM CIA IACB JMS WAIT /WRITE CHECKSUM JMS WAIT /I REALLY DON'T KNOW WHY THIS IS HERE DONE, CLA CLL ISZ NUMB JMP SERCHA /LOOP ON # BLOCKS ISZ LTA /BUMP TO NORMAL RETURN CEXIT, HLT /RESTORE CALLING FIELDS ICON /STOP THE TAPE JMP I LTA /RETURN RDATA, JMS WAIT /SKIP OVER GUARD WORD RDTA, JMS WAIT /GET A WORD FROM THE TAPE TAD CSUM DCA CSUM /UPDATE CHECKSUM IAAC /GET THE WORD AGAIN DCA I LOC ISZ LOC C6, 6 /MORE RANDOM STORAGE ISZ CNTR JMP RDTA /LOOP FOR RECORD JMS WAIT /GET CHECKSUM TAD CSUM SNA CLA JMP DONE /CHECKSUM OK - KEEP GOING CLA CLL CML RAR JMP CEXIT /NO ROOM TO TRY AGAIN - REST IN PEACE WAIT, 0 /SUBROUTINE TO WAIT ON TAPE CLA CLL C7, INTS SMA CLA JMP WAIT+1 /STATUS(0)=TAPE FLAG TAD C7 /ONLY BITS 8-11 COUNT ICON /CLEAR ALL FLAGS CLA CLL IAAC /GET LINC ACCUMULATOR JMP I WAIT /RETURN IFZERO N C37, 37 CSUM=CDFX $ /**PAGE /LINCTAPE HANDLER FOR LINC-8 SYSTEM - STOLEN FROM KURT METZGER /THE PARAMETER "N" DETERMINES WHETHER THIS HANDLER WILL BE ASSEMBLED /FOR DRIVE 0 OR 1. DEFAULT CASE IS DRIVE 0 IFNDEF N IFNZRO N /LINC IOT'S ICON=6141 /INTERFACE CONTROL IOT INTS=6147 /READ LINC INTERRUPT REGISTER IAAC=6171 /READ LINC AC IACB=6161 /LOAD LINC AC FUNCT, 0 BLN, 0 NUMB, 0 LOC, 0 CNTR, 0 CDF0, CDF 0 CDIF0, CDF CIF 0 C4000, 4000 IFNZRO N LTA, 0 /STARTS AT 10 OR 11 IN PAGE, DEPENDING ON N CLA CLL CML RAR AND I LTA DCA FUNCT /GET READ/WRITE BIT TAD I LTA AND C70 TAD CDF0 DCA CDFX /GET CDF TO BUFFER FIELD TAD I LTA RTR RTR RTR AND C37 CIA CLL CML /THIS TURNS LINK ON - IMPORTANT! DCA NUMB /SAVE RECORD COUNT (128 WORD RECORDS) ISZ LTA TAD I LTA DCA LOC /SAVE BUFFER ADDRESS ISZ LTA TAD I LTA TAD I LTA DCA BLN /SAVE TAPE BLOCK ISZ CNTR JMP .-4 /ALLOW DRIVE TIME TO SETTLE DOWN ISZ LTA RDF TAD CDIF0 DCA CEXIT /SETUP FOR RETURN CDFX, HLT /SET BUFFER FIELD SERCHA, ISZ BLN /BLOCK NUM ON TAPE IS 1'S COMP. SERCHB, DCA CSUM /INITIALIZE CHECKSUM TAD C7600 DCA CNTR /SET RECORD SIZE IFNZRO N TAD C2 ICON /SET SEARCH MODE CLA IAC SZL /IF LINK IS ON SET MOTION BACKWARDS ICON TAD C6 /SET AC TO 7 TO CLEAR LINC INTERRUPTS B, ICON A, JMS WAIT /WAIT FOR TAPE FLAG SMA /BLOCK NUMBER SHOULD BE NEGATIVE STL /OTHERWISE FORCE DIRECTION CHANGE TAD BLN SNA CLA /L=1 MEANS WE HAVE TO GO FORWARD JMP THERE /ON BLOCK, MUST CHECK DIRECTION INTS /READ INTERRUPT STATUS RAR /STATUS(11)=0 IF MOTION IS FORWARDS AND C4000 /DIRECTION IN LINK, OLD LINK IN AC0 SZA SNL JMP A /NEED FORWARDS, MOVING FORWARDS CML SNL SMA JMP A /NEED BACKWARDS, MOVING BACKWARDS ICON /STOP TAPE MOTION IAC JMP B /SET MOTION ACCORDING TO AC0 THERE, INTS AND C2 /STATUS(10)=1 IF MOTION FORWARDS SNA JMP A /WRONG WAY TAD FUNCT /ADD IN READ/WRITE BIT IAC /AC NOW CONTAINS 4000*RW+3 ICON /SET BLOCK MODE SMA JMP RDATA /READ OPERATION TAD C2 ICON /TURN ON WRITERS WRITE, CLA TAD I LOC IACB /LOAD UP LINC AC TAD CSUM DCA CSUM /ACCUMULATE CHECKSUM JMS WAIT /PUT OUT LINC AC ISZ LOC C2, 2 /RANDOM STORAGE ISZ CNTR JMP WRITE /LOOP FOR RECORD C7600, 7600 TAD CSUM CIA IACB JMS WAIT /WRITE CHECKSUM JMS WAIT /I REALLY DON'T KNOW WHY THIS IS HERE DONE, CLA CLL ISZ NUMB JMP SERCHA /LOOP ON # BLOCKS ISZ LTA /BUMP TO NORMAL RETURN CEXIT, HLT /RESTORE CALLING FIELDS ICON /STOP THE TAPE JMP I LTA /RETURN RDATA, JMS WAIT /SKIP OVER GUARD WORD RDTA, JMS WAIT /GET A WORD FROM THE TAPE TAD CSUM DCA CSUM /UPDATE CHECKSUM IAAC /GET THE WORD AGAIN DCA I LOC ISZ LOC C6, 6 /MORE RANDOM STORAGE ISZ CNTR JMP RDTA /LOOP FOR RECORD JMS WAIT /GET CHECKSUM TAD CSUM SNA CLA JMP DONE /CHECKSUM OK - KEEP GOING CLA CLL CML RAR JMP CEXIT /NO ROOM TO TRY AGAIN - REST IN PEACE WAIT, 0 /SUBROUTINE TO WAIT ON TAPE CLA CLL C7, INTS SMA CLA JMP WAIT+1 /STATUS(0)=TAPE FLAG TAD C7 /ONLY BITS 8-11 COUNT ICON /CLEAR ALL FLAGS CLA CLL IAAC /GET LINC ACCUMULATOR JMP I WAIT /RETURN IFZERO N C37, 37 CSUM=CDFX $