/PROGRAM TO CONVERT STANDARD FORMAT D/D MONITOR ON TD8E TAPE /START WITH OS8 12K BOOTSTRAP MUST BF USED ON TAPE JUST AFTER /BUILDING BY TBLD BUT BEFORE ANY OTHFR SYSTEM PROGRAMS ARE /WRITTEN ON THE TAPE. START PROGRAM WITH NEW TAPF ON UNIT 1. *200 JMS I SYSIO /RFAO 1ST SAM BLK 3 200 1400 0 HLT IAC /MARK BLOCKS 35,6,7 A MONITOR DCA I P1435 /FOR PROTECTION IAC DCA I P1436 IAC DCA I P1437 JMS I SYSIO /RFWRITE SAM I 5 200 1400 202 /LTNK HLT JMS I SYSIO /NOW WRITE IN THF TDSE RTN 5 /AND MONTTOR HFAO 35 400 0 HLT JMS I SYSIO 5 36 600 0 HLT JMS I SYSIO 5 37 1000 0 HLT JMS I SYSIO /WRITE BOOT INTO BLK 0 5 0 1200 0 HLT JMP I .+1 /RESTART MONITOR 7600 P1435, 1435 P1436, 1436 P1437, 1437 SYSIO, 7642 /TD8E DECTAPE RTN. DRTVE=10 /UNITS 0 AND 1 SELECTED MFIELD=10 /AFIELD=10=MFIELD WDSBLK=201 /129 WORDS PER BLOCK *400 NOPUNCH *7400 ENPUNCH DTA0, 0 /ENTRY POINT FROM UNIT 0 CLA CLL /0 TO LINK JMP DTA1X C1000, 1000 DTA1, 0 /UNIT 2 ENTRY CLA CLL CML /1 TO LINK TAD DTA1 DCA DTA0 /PICK UP ARGS AT DTA0 DTA1X, RAR DCA UNIT /LINK TO UNIT POSITION RDF TAD C6203 /GET DATA FIFLD AND SETUP RETURN DCA LEAVE TAD I DTA0 /GET FUNCTION WORD SDLD /PUT FUNCTION INTO DATA REGISTER CLL RTR /AC STILL HAS FUNCTION, PUT # WORDS /BLOCK INTO LINK SZL CLA /KNOCK ONE OFF WDSBLK? IAC /YES TAD MWORDS DCA WCOUNT /STORE MASTER WORD COUNT ISZ DTA0 /TO BUFFFR TAD I DTA0 DCA BUFF ISZ DTA0 /TO BLOCK NUMBER TAD I DTA0 DCA BLOCK ISZ DTA0 /POINT TO ERROR EXIT CIF CDF MFIELD /TO ROUTINES DATA FIELD SDRD /GET FUNCTION INTO AC CLL RAL AND CM200 /GET # PAGES TO XFFR DCA PGCT SDRD C374, AND C70 /GET FIELD FOR XFER TAD C6203 /FORM CDF N DCA XFIELD /IF=0 AND DF=N AT XFFR. CLA CLL CMA RTL DCA TRYCNT /3 ERROR TRIES TAD UNIT /TEST FOR SELECT ERROR SDLC SDRC AND C100 SZA CLA JMP FATAL-1 BLOCK=DTA1 SDRD /PUT FUNCT INTI XFUNCT IN SECOND PG DCA I CXFUN TAD WCOUNT DCA I CXWCT SDRD /GET MOTION BIT TO LTNK CLL RAR JMP GO /AND START THE MOTTON. RWCOM, SDST /ANY CHECKSUM ERRORS? SZA CLA /OR CHECKSUM ERRORS? JMP TRY3 /PLEASE NOTE THAT THE LINK IS ALWAYS /SET AT RWCOM, GFTCHK SETS IT. TAD PGCT /NO FRROR..FINISHED XFER? TAD CM200 SNA JMP EXIT /ALL DONE. GET OUT DCA PGCT /NEW PAGE COUNT ISZ BLOCK /NEXT BLOCK TO XF£R TAD WCOUNT /FORM NEXT BUFFER ADDRESS CIA TAD BUFF DCA BUFF CLL CML /FORCES MOTION FORWARD GO, CLA CML RTR /LINK BECOMES MOTION BIT TAD C1000 TAD UNIT /PUT IN 'GO' AND UNIT # SDLC /LOOK FOR BLOCK NO. JMS I CRDQUD /WAIT AT LEAST 6 LINES TO LOOK JMS I CRDQUD CM200, 7600 /COULD HAVE SAVED A LOC. HERE SRCH, SDSS JMP .-1 /WAIT FOR SINGLE LTNE FLAG SDRC CLL RTL /DIRECTION TO LINK. INFO BTTS /ARE SHIFTED. AND C374 /ISOLATE MARK TRACK BITS TAD M110 /IS IT END ZONE? SNA /THE LTNK STAYS SAME THRU THIS JMP ENDZ TAD M20 /CHECK FOR BLOCK MARK SZA CLA JMP SRCH SDRD /GET THE BLOCK NUMBER SZL /IF WE ARE IN REVERSE, LOOK FOP 3 /BLOCKS BEFORE TARGET BLOCK. THIS /ALLOWS TURNAROUND AND UP TO SPEED. TAD C3 /REVERSE CMA TAD BLOCK CMA /IS IT RIGHT BLOCK? SNA JMP FOUND /YES..HOORAY! M110, SZL SNA CLA /NO, BUT ARE WE HEADED FOR IT? /ABOVE SNA IS SUPERFLUOUS. JMP SRCH /YES ENDZ, SDRC /WE ARE IN THE END ZONE CLL RTL /DIRECTION TO LINK SZL CLA /ARE WE IN REVERSE? JMP GO /YES..TURN US AROUND /IF WE ARE IN THE END ZONE GOING FORWARD, IT IS AN ERROR TRY3, ISZ TRYCNT JMP GO /TRY 3 TIMES CLL CLA JMP FATAL /LINK OFF MEANS AC=4000 ON EXIT, ISZ DTA0 CLL CML /AC=0 ON NORMAL RETURN FATAL, TAD UNIT SDLC /STOP THE UNIT CLA CML RAR LEAVE, HLT JMP I DTA0 C6203, 6203 CRDQUD, RDQUAD WCOUNT, 0 BUFF, 0 MWORDS, -WDSBLK UNIT, 0 CXFUN, XFUNCT M20, -20 PGCT, 0 CXWCT, XWCT C100, 100 TRYCNT, -3 FOUND, SZL CLA /RIGHT BLOCK. HOW ABOUT DIRECTTOW? JMP GO /WRONG..TURN AROUND TAD UNIT /PUT UNIT INTO LTNK CLL RAL /AC IS NOW 0 C70, 70 /********DON'T MOVE THTS!!!!****** C3, 3 TAD BUFF /GET BUFFER ADORESS XFIELD, HLT /INTO NEXT PAGE CIF MFIELD DCA XBUFF /SAVE ADDRESS RAR /NOW GET UNIT # DCA XUNIT TAD XWCT DCA WORDS /WORD COUNTER REVGRD, SDSS JMP .-1 /LOOK FOR REVERSE GUARD SDRC AND K77 TAD CM32 /IS IT REVERSE GUARD? SZA CLA JMP REVGRD /NO. KEEP LOOKING TAD XFUNCT /GET FUNCTION READ OR WRITE K7700, SMA CLA JMP READ /NEG. IS WRITE WRTTE, SDRC AND C300 /CHECK FOR WRITE LOCK AND SELECT ERR CLL CML /LOCK OUT AND SELECT ARE AC 0 ERRORS SZA CLA JMP I CFATAL /FATAL ERROR. LINK MUST B£ ON JMS RDQUAD /NO ONE EVER USES THIS WORD! C7600, 7600 TAD D1400 TAD XUNIT /INITIATE WRITE MOOE SDLC CLA CMA JMS WRQUAD /PUT 77 IN REVERSE CHECKSUM CLA CMA DCA CHKSUM WRLP, TAD I XBUFF /GLORY BE! THE ACTUAL WRITE! JMS WRQUAD ISZ XBUFF /BUMP CORE POINTER K77, 77 /ABOVE MAY SKIP ISZ WORDS /DONE THIS BLOCK? JMP WRLP /NOT YET..LOOP A WHILE TAD XFUNCT /IS THE OPERATION FOR WDSBLK PER BLK? CLL RTR /IF NO, WRITE A 0 WORD SZL CLA JMS WRQUAD /WRITE A WORD OF 0 JMS GETCHK /DO THE CHECK SUM JMS WRQUAD /WRITE FORWARD CHECKSUM JMS WRQUAD /ALLOW CHECKSUM TO BE WRITTEN JMP I CRWCOM READ, JMS RDQUAD JMS RDQUAD JMS RDQUAD /SKIP CONTROL WORDS AND K77 TAD K7700 /TACK 7700 ONTO CHECKSUM. DCA CHKSUM /CHECKSUM ONLY LOW 6 BITS ANYWAY RDLP, JMS RDQUAD JMS EQUFUN /COMPUTE CHECKSUM AS WE GO DCA I XBUFF /IT GETS CONDENSED LATER ISZ XBUFF C300, 300 /PROTECTION ISZ WORDS /DONE THIS OP? JMP RDLP /NO SUCH LUCK TAD XFUNCT /IF OP WAS FOR WDSBLK-1, READ AND CLL RTR /CHECKSUM THE LAST TAPE WORD SNL CLA JMP RDLP2 JMS RDQUAD /NOT NEEDED FOR WDSBLK/BLOCK JMS EQUFUN /CHECKSUM IT RDLP2, JMS RDQUAD /READ CHECKSUM AND K7700 JMS EQUFUN JMS GETCHK /GET SIX BIT CHECKSUM JMP I CRWCOM WRQUAD, 0 /WRITE OUT A 12 BIT WORD JMS EQUFUN /ADD THIS TO CHECKSUM SDSQ /SKIP ON QUADLINE FLAG JMP .-1 SDLD /LOAD DATA ONTO BUS CLA /SDLD DOESN'T CLEAR AC JMP I WRQUAD RDQUAD, 0 /READ A 12 BIT WORD SDSQ JMP .-1 SDRD /READ DATA JMP I RDQUAD EQUFUN, 0 /COMPUTE EQUIVALENCE CHECKSUM CMA DCA EQUTMP /ACTUALLY CHECKSUMS ON DECTAPE ARE TAD EQUTMP /EQUIVALENCE OF ALL WORDS IN A RECORD AND CHKSUM /SIX BITS AT A TIME, BUT SINCE EQUIVALENCE CIA /IS ASSOCIATIVE, WE CAN DO IT 12 CLL RAL /BITS AT A TIME AND CONDENSE LATER. TAD EQUTMP /THIS ROUTINE USES THESE IDENTITIES: TAD CHKSUM /A+B=(A.XOR.B)+2*(A.AND.B) DCA CHKSUM /A.EQU.B=.NOT.(A.XOR.B)=A.XOR.(.NOT.B) TAD EQUTMP /A.EQU.B=(A+(.NOT.B))-2*(A.AND.(.NOT.B)) CMA JMP I EQUFUN GETCHK, 0 /FORM 6 BIT CHECKSUM CLA TAD CHKSUM CMA CLL RTL RTL RTL JMS EQUFUN CLA CLL CML /FORCES LINK ON AT RWCOM TAD CHKSUM AND K7700 JMP I GETCHK CFATAL, FATAL CRWCOM, RWCOM XFUNCT, 0 CM32, -32 D1400, 1400 CHKSUM, 0 WORDS, 0 XBUFF, 0 XWCT, 0 EQUTMP, 0 XUNIT=EQUFUN 0 0 0 0 JMS I DT0 0102 7600 37 HLT CIF CDF 0 JMP I .+1 7600 DT0, 7400 /MONITOR HEAD /RUNS AT 7600 /RESIDENT PAGE OF MONITOR (7600-7777 AND BlOCK 0) /DECTAPE VERSION /FUNCTION: SAVE CORE 7200-7577 IN SCRATCH / READS REST OF MONITOR INTO / CORE 7200-7577 JUMPS TO / MONITOR PAGE 2 (7400) *1000 NOPUNCH *7600 ENPUNCH D0070, 70 /CONSTANT ACTS AS NOP JMS DTSYS /SAVE CORE 7200-737? 5 5 7200 0 HLT JMS DTSYS /SAVE CORE 7400-7577 5 6 /SCRATCH BLOCK 2 7400 0 HLT JMS DTSYS /READ IN PAGE 1 OF SAVE 3 1 7200 DTCORE, 0 HLT JMS DTSYS /READ IN MONITOR PAGE 2 3 2 DTSTRT, 7400 0 HLT JMP I DTSTRT /ENTER MONITOR PAGE 2 DTHOLD, 0 DTLINK, 0 PLINK, 0 LNHOLD, 0 TD8E0, 7400 TD8E1, 7404 /••MUST FOLLOW TD8E0*** JMST8, JMS I TD8E0 P700, 700 /TD8E DECTAPE AS SYSTEM DEVICE DTSYS, 0 /SYSTEM I/O CLA TAD I DTSYS /GET FCN WORO ISZ DTSYS DCA DTCODE TAD DTCODE /FIND FIELD BITS AND D0070 DCA ARG1 TAD PCDF /SET TRANSFER FIELD CDF'S TAD ARG1 DCA XCDF TAD XCDF DCA XCDF1 TAD DTCODE /MOVE WRITE BIT TO BIT 0 CLL RTR RTR /CLEAR JUNK AND D4000 TAD D0100 /WRITE/READ ONLY 1 BLOCK TAD ARG1 /ADD TO FIELD BITS DCA ARG1 TAD I DTSYS /GET BLOCK ISZ DTSYS DCA ARG3 TAD I DTSYS /GET CORE ADDR ISZ DTSYS /BUMP TO LINKWORD ADDR. DCA ARG2 TAD ARG2 /FORM ADDRESS OF 201TH WORD TAD D0200 DCA PLINK TAD DTSYS /SAVE LINK WORD ADDR DCA DTLINK TAD I DTSYS /GET LINK WORO ISZ DTSYS /BUMP TO ERROR ADDRESS DCA LNHOLD /SAVE LINK XCDF, CDF 0 /POINT TO TRANSFER FIELD TAD I PLINK /SAVE ENDANGERED WORD DCA DTHOLD TAD LNHOLD /PUT LINK WORD IN XFFR FIELD DCA I PLINK CDF 0 /BACK TO FIELD 0 TAD DTCODE /IS THIS AN INOIRECT RETURN AND D1000 SNA CLA JMP .+5 /NO TAD I DTSYS /YES, ERROR HOLDS RETURN ADDR -1 DCA DTSYS CMA /PREPARE TO DUMP LINK AT 7777 DCA DTLINK DTTRY, TAD JMST8 /SET UNIT 0 ENTRY DCA .+6 TAD DTCODE /GET UNIT CODE AND P700 /ANYTHING BUT 0 IS UNIT 1 SZA CLA ISZ .+2 /BUMP TO UNIT 1 ADDRESS CIF 10 JMS I TD8E0 ARG1, 0 /FUNCT ARG2, 0 /CORE ARG3, 0 /BLOCK SKP CLA /ERROR ISZ DTSYS /OK, BUMP TO NORMAL RETURN XCDF1, CDF 0 /SET XFER FIELD TAD I PLINK /SAVE LINK WORO DCA LNHOLD TAD DTHOLD /RESTORE ENDANGERED WORD DCA I PLINK PCDF, CDF 0 /BACK TO 0 TAD LNHOLD /PUT AWAY LINK WORD FOR DUMP AT 7777 DCA I DTLINK JMP I DTSYS D4000, 4000 DTCODE, 0 D0200, 200 D0100, 100 0 /WC 0 /CA D1000, 1000 /TD8E DISK/DECTAPE BOOTSTRAP TO USE STANDAPD 30 WORD 12K BOOT /ASSEMBLED AT 7400. LOADED INTO 1220 INITIALLY. LOADS INTO /7400 VIA BOOTSTRAP. /READS IN FLD 1 PART FROM BLOCKS 35,36 THEN STARTS FLD1 /BOOTSTRAP WHICH READS MONITOR HEAD FRDM BLOCK 37 *1220 NOPUNCH *7400 ENPUNCH SDSS=6771 SDST=6772 SDSQ=6773 SDLC=6774 SDLD=6775 SDRC=6776 SDRD=6777 TBOOT, TAD K7600 /128 WORDS/PAGE DCA TWCT /WAIT FOR A BLOCK MARK SDSS JMP .-1 SDRC AND T77 TAD M26 /IS IT A BLOCK MARK? SZA CLA JMP TBOOT+2 /NO SDRD /GET BLOCK NO TBLKNO, TAD M35 /NEED BLOCKS 35,36 SZA CLA JMP TBOOT+2 /NO TRGRD, SDSS JMP .-1 SDRC /LOOK FOR REV. GUARD WORD AND T77 TAD M32 SZA CLA JMP TRGRD /NOT YET JMS TRQD /SKIP CONTROL WORDS JMS TRQD JMS TRQD CDF 10 /LOAD TO FLD 1 TREAD, JMS TRQD /GET DATA WORDS DCA I PTR ISZ PTR T77, 77 /NOP ISZ TWCT /FINISHED BLOCK? JMP TREAD /NO ISZ TBLKNO /YES. DO NEXT BLOCK ISZ M2 /DONE BOTH BLOCKS? JMP TBOOT /NO SDLC /DONE STOP TAPE CIF CDF 10 JMP I K7767 /GO READ MONITOR HEAD TWCT, 7600 /1ST LOCATION FOR TD8E RTN PTR, 7400 K7600, 7600 K7767, 7767 M2, -2 M26, -26 M32, -32 M35, -35 M36, -36 /MUST FOLLOW M55 TRQD, 0 /READ A WORD SDSQ JMP .-1 SDRD JMP I TRQD $