File: DMPTD3.PA of Disk: Disks/Build-2007/Build-11-03-07
(Source file text)
/TD8E Dectape DUMP Program / / This program will send a Dectape image out the console port. / The format of the data sent is 0xff (0377) or 0xfd if read error / followed by 128 word of data for each block. / After the last block a 0xfe (0376) is sent / with a two byte checksum, low 8 bits first then upper 4. / The words in a block are sent as three bytes for each 2 words. / Like this: (WvdM) / +--------------------+ / ! byte1 ! byte2h ! / +--------------------+ / ! byte2l ! byte 3 ! / +--------------------+ / / 1 = low 8 bits first word (was like this WvdM) / 2 = upper 4 bits first and lower 4 bits second / 3 = upper 8 bits second word / / The program (PC) receiving the data should be started before this program / / To run start at 0200. / SR 11 should be drive, only 0 and 1 supported without reassembling / SR 6-8 should be maximum memory field in computer, needs 8k minimum / The receiving program should be running first. / At normal exit hitting cont will restart the program / / Should halt at label finish (140) with number of recoverable errors in AC / The current block being read will be displayed in the AC / while running. / / If a unrecoverable error occurs the program will halt with the error in / the AC. Hit continue to dump more or comment out hlt, search for *****. / The PC program will print out the bad location if an error occurs / / We will retry each read up to 16 times on error / / This transfers the standard 129 word by 1474 blocks used by OS/8 etc. / Other formats can be handled by changing constants below INAD=030 / Address of serial input, 30 for console KCF2=6000 INAD KSF2=6001 INAD KCC2=6002 INAD KRS2=6004 INAD KIE2=6005 INAD KRB2=6006 INAD OUTAD=040 / Address of serial output, 40 for console TFL2=6000 OUTAD TSF2=6001 OUTAD TCF2=6002 OUTAD TPC2=6004 OUTAD TSK2=6005 OUTAD TLS2=6006 OUTAD /2 TD8E INITIALIZER PROGRAM, V7A / /COPYRIGHT (C) 1975, 1977 /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. / / /ABSTRACT-- / THE ROUTINE DESCRIBED AND LISTED HERE IS A GENERAL /DATA HANDLER FOR THE TD8E DECTAPE SYSTEM. THE ROUTINE /CONTAINS SEARCH, READ, AND WRITE FUNCTIONS IN A FORMAT /WHICH IS COMPATIBLE WITH OS/8 DEVICE HANDLER CALLING /SEQUENCES. /THIS ROUTINE CAN BE RE-EDITED AND ASSEMBLED TO PRODUCE /VARIATIONS ON THE BASIC TD8E SYSTEM. ASSEMBLY PARAMETERS /CONTROL: /A) WHAT DRIVES (UNITS 0-7) WILL BE USED /B) THE ORIGIN OF THE TWO PAGE ROUTINE /C) WHAT MEMORY FIELD THE ROUTINE WILL RUN IN /D) THE SIZE OF THE DECTAPE BLOCK TO BE READ/WRITTEN /FOLLOWING ARE THE PARAMETERS SET UP FOR THE STANDARD /DEC VERSION OF THIS ROUTINE: DRIVE=10 /UNITS 0 AND 1 SELECTED ORIGIN=600 /ENTER AT ORIGIN, ORIGIN+4 AFIELD=0 /INITIAL FIELD SETTING MFIELD=00 /AFIELD*10=MFIELD WDSBLK=201 /129 WORDS PER BLOCK /THE USE OF THE PARAMETERS IS AS FOLLOWS: / DRIVE: DRIVE DETERMINES WHICH UNITS WILL BE SELECTED / DRIVE=10 IMPLIES UNITS 0 &1 / DRIVE=20 IMPLIES UNITS 2&3 / DRIVE=30 IMPLIES UNITS 4&5 / DRIVE=40 IMPLIES UNITS 6&7 /ORIGIN: ALTERING ORIGIN CAUSES ASSEMBLY IN A DIFFERENT / MEMORY LOCATION. WHEN CHANGING ORIGIN KEEP IN MIND /THAT THIS IS A TWO PAGE ROUTINE. /AFIELD: AFIELD DETERMINES THE INITIAL FIELD SETTING FOR THE / LOADER. PERMISSIBLE VALUES FOR AFIELD ARE 0 TO 7. /MFIELD: MFIELD IS USED IN A CIF CDF MFIELD INSTRUCTION. / THE VALUE INSERTED FOR MFIELD SHOULD BE 10(8) TIMES / THE VALUE FOR AFIELD. THE PERMISSIBLE VALUES ARE 00-70. /WDSBLK: WDSBLK GOVERNS HOW MANY WORDS THE ROUTINE THINKS ARE / IN A DECTAPE BLOCK. THE STANDARD VALUE IS 201(8) OR / 129 DECIMAL. NOTE THAT THE FUNCTION WORD BIT 10 CAN / BE USED TO SUBTRACT ONE FROM WDSBLK. THE VALUE USED / FOR WDSBLK SHOULD BE THE NUMBER OF WORDS THE TAPE WAS / FORMATTED TO CONTAIN. /IF WE WANT A HANDLER FOR UNITS 2&3 TO RESIDE IN /FIELD 2 AT LOCATION 3000 AND READ/WRITE 256(10) WORDS /PER BLOCK, THE PARAMETERS WOULD BE: / DRIVE=20 / ORIGIN=3000 / AFIELD=2 / MFIELD=20 / WDSBLK=400 / /THE CALL TO THE SUBROUTINE FOLLOWS BASICALLY THE /CALLING SEQUENCE FOR OS/8 DEVICE HANDLERS. /THE CALLING SEQUENCE IS: / CDF CURRENT / CIF MFIELD /MFIELD=FIELD ASSEMBLED IN / JMS ENTRY /AC ON ENTRY=4000 IS UNIT 1 / ARG1A / ARG1B (DJG) / ARG2 / ARG3 / ERROR RETURN / NORMAL RETURN /THE ARGUMENTS ARE: /ARG1A: FUNCTION WORD BIT0: 0=READ, 1=WRITE / BITS 1-5: UNUSED, WAS # BLOCKS IN OPERATION (DJG) / BITS 6-8: FIELD OF BUFFER AREA / BIT 9: UNUSED / BIT 10: # OF WORDS/BLOCK. / 0= WDSBLK, 1=WDSBLK-1 / BIT 11: 1=START FORWARD, 0=REVERSE /ARG1B: # OF BLOCKS IN OPERATION (DJG) /ARG2: BUFFER ADDRESS FOR OPERATION /ARG3: STARTING BLOCK FOR OPERATION /ERRORS: THE HANDLER DETECTS TWO TYPES OF ERRORS: /A) FATAL ERRORS- PARITY ERROR, TIMING ERROR, / TOO GREAT A BLOCK NUMBER / FATAL ERRORS TAKE ERROR RETURN WITH THE / AC=4000. /B) NON-FATAL- SELECT ERROR. / IF NO PROPER UNIT IS SELECTED, THE ERROR / RETURN IS TAKEN WITH CLEAR AC. /FATAL ERRORS TRY THREE TIMES BEFORE TAKING ERROR RETURN. /THE NORMAL RETURN IS TAKEN AFTER ALL INDICATED /BLOCKS HAVE BEEN TRANSFERRED. THE AC IS CLEAR. /THE TD8E IOT'S ARE: SDSS=7001-DRIVE /SKIP ON SINGLE LINE FLAG SDST=7002-DRIVE /SKIP ON TIMING ERROR SDSQ=7003-DRIVE /SKIP ON QUAD LINE FLAG SDLC=7004-DRIVE /LOAD COMMAND REGISTER SDLD=7005-DRIVE /LOAD DATA REGISTER SDRC=7006-DRIVE /READ COMMAND REGISTER SDRD=7007-DRIVE /READ DATA REGISTER /THE IOT'S IN GENERAL ARE 677X,676X,675X,AND 674X. /THE OTHERS CONTROL UNITS 2-7. / THIS HANDLER USES DECTAPE BLOCKS NOT OS/8 BLOCKS ! *ORIGIN / MODIFIED SO BIT 0 ON ENTRY IS UNIT 1 DTA0, 0 DCA UNIT /SAVE UNIT POSITION RDF TAD C6203 /GET DATA FIELD 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 PER /BLOCK INTO LINK SZL CLA /KNOCK ONE OFF WDSBLK? IAC /YES TAD MWORDS DCA WCOUNT /STORE MASTER WORD COUNT ISZ DTA0 /TO BLOCK COUNT (DJG) TAD I DTA0 / (DJG) CIA / (DJG) DCA PGCT / (DJG) ISZ DTA0 /TO BUFFER TAD I DTA0 DCA XBUFF /SAVE ADDRESS (DJG) ISZ DTA0 /TO BLOCK NUMBER TAD I DTA0 DCA BLOCK /INITIAL BLOCK ISZ DTA0 /POINT TO ERROR EXIT CIF CDF MFIELD /TO ROUTINES DATA FIELD SDRD AND C70 /GET FIELD FOR XFER TAD C6201 /FORM CDF N DCA XFIELD /IF=0 AND DF=N AT XFER. TAD UNIT /TEST FOR SELECT ERROR SDLC CLA /WAIT FOR SLOW SELECT TAD RETRY DCA TRYCNT /3 ERROR TRIES SDRC AND C100 SZA CLA JMP FATAL-1 SDRD /PUT FUNCT INTO XFUNCT IN SECOND PG. DCA XFUNCT TAD WCOUNT DCA XWCT /GET MASTER WORD COUNT TO SECOND PAGE SDRD /GET INITIAL MOTION BIT TO LINK CLL RAR XFIELD, HLT /SET DATA FIELD FOR NEXT PAGE JMP GO /AND START THE MOTION. RWCOM, SDST /ANY CHECKSUM ERRORS? SZA CLA /OR CHECKSUM ERRORS? JMP TRY3 /PLEASE NOTE THAT THE LINK IS ALWAYS /SET AT RWCOM. GETCHK SETS IT. ISZ PGCT /ALL REQUESTED PAGES DONE? SKP / (DJG) JMP EXIT /ALL DONE. GET OUT ISZ BLOCK /NEXT BLOCK TO XFER 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. CLA TAD XBUFF DCA OLDBUF /SAVE BUFFER ADDR FOR ERROR RETRY RDF TAD C6201 DCA OLDFLD JMS I CRDQUD /WAIT AT LEAST 6 LINES TO LOOK JMS I CRDQUD SRCH, SDSS JMP .-1 /WAIT FOR SINGLE LINE FLAG SDRC CLL RTL /DIRECTION TO LINK. INFO BITS ARE SHIFTED. AND C374 /ISOLATE MARK TRACK BITS TAD M110 /IS IT END ZONE? SNA /THE LINK 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 FOR 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? JMP SRCH /YES ENDZ, SDRC /WE ARE IN THE END ZONE CLL RTL /DIRECTION TO LINK 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, CLA OLDFLD, NOP TAD OLDBUF DCA XBUFF ISZ TRYCNT JMP GO /TRY 3 TIMES JMP FATAL /LINK OFF MEANS AC=4000 ON RETURN EXIT, ISZ DTA0 CLL CML /AC=0 ON NORMAL RETURN FATAL, TAD UNIT SDLC /STOP THE UNIT CLA CML RAR LEAVE, HLT /GETS CIF CDF RETURN JMP I DTA0 RDQUAD, 0 /READ A 12 BIT WORD SDSQ JMP .-1 SDRD /READ DATA JMP I RDQUAD C6203, 6203 C6201, 6201 CRDQUD, RDQUAD BUFF, 0 UNIT, 0 CXFUN, XFUNCT /POINER TO OTHER FUNCTION WORD M20, -20 PGCT, 0 /TOTAL PAGES TO TRANSFER CXWCT, XWCT /OTHER MASTER WORDCOUNT POINTER C100, 100 TRYCNT, -4 /COUNTER FOR TRIES C1000, 1000 *ORIGIN+172 FOUND, SZL CLA /RIGHT BLOCK. HOW ABOUT DIRECTION? JMP GO /WRONG..TURN AROUND TAD UNIT /PUT UNIT INTO LINK CLL RAL /AC IS NOW 0 C70, 70 /********DON'T MOVE THIS!!!!****** C3, 3 *ORIGIN+200 CIF MFIELD RAR /NOW GET UNIT # DCA XUNIT SDRC SDLC 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 XWCT DCA WORDS /WORD COUNTER TAD XFUNCT /GET FUNCTION READ OR WRITE K7700, SMA CLA JMP READ /NEG. IS WRITE WRITE, SDRC AND C300 /CHECK FOR WRITE LOCK AND SELECT ERROR CLL CML /LOCK OUT AND SELECT ARE AC 0 ERRORS SZA CLA JMP I CFATAL /FATAL ERROR. LINK MUST BE ON JMS I XQUAD /NO ONE EVER USES THIS WORD! C7600, 7600 TAD C1400 TAD XUNIT /INITIATE WRITE MODE 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 TAD XBUFF TAD C200 SZA CLA /ARE WE AT OS/8 BOUNDARY? JMP STFLD1+1 /NOT AT END OF FIELD (DJG) DCA XBUFF /OK, TO NEXT FIELD RDF TAD C6211 DCA STFLD1 STFLD1, NOP ISZ WORDS /DONE THIS BLOCK? JMP WRLP /NOT YET..LOOP A WHILE TAD XFUNCT /IS THE OPERATION FOR WDSBLK PER BLOCK? 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 K77, 77 /ABOVE MAY SKIP (NOT ANYMORE DJG) READ, JMS I XQUAD JMS I XQUAD JMS I XQUAD /SKIP CONTROL WORDS AND K77 TAD K7700 /TACK 7700 ONTO CHECKSUM. DCA CHKSUM /CHECKSUM ONLY LOW 6 BITS ANYWAY RDLP, JMS I XQUAD JMS EQUFUN /COMPUT CHECKSUM AS WE GO DCA I XBUFF /IT GETS CONDENSED LATER ISZ XBUFF /AT END OF FIELD? TAD XBUFF TAD C200 SZA CLA /ARE WE AT OS/8 BOUNDARY? JMP STFLD2+1 /NOT AT END OF FIELD (DJG) DCA XBUFF /OK, TO NEXT FIELD RDF TAD C6211 DCA STFLD2 STFLD2, NOP 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 I XQUAD /NOT NEEDED FOR WDSBLK/BLOCK JMS EQUFUN /CHECKSUM IT RDLP2, JMS I XQUAD /READ CHECKSUM AND K7700 JMS EQUFUN JMS GETCHK /GET SIX BIT CHECKSUM JMP I CRWCOM C300, 300 /PROTECTION (NOT ANYMORE DJG) 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 XUNIT, /ALSO USED AS UNIT INITALLY 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 XQUAD, RDQUAD C6211, 6211 CFATAL, FATAL CRWCOM, RWCOM /BLOCK DONE, BACK TO FIRST PAGE CM32, -32 C1400, 1400 C200, 200 WORDS, 0 *100 RETRY, 7774 /RETRY UP TO 4 TIMES NUMBLK, 2702 /TOTAL NUMBER OF BLOCKS ON DECTAPE MWORDS, -WDSBLK /WORDS PER BLOCK FOR SETUP WCOUNT, 0 /MASTER WORD COUNT BLKFLD, 36 /30 129 WORD BLOCKS PRESERVES OS78 /WRAPPING PAST END OF LAST FIELD DOESN'T WORK FIELDS, 0 /MINUS NUMBER OF FIELDS TO USE RDSIZE, 0 /NUMBER BLOCKS PER READ CBLOCK, 0 /CURRENT DECTAPE BLOCK TO XFER CLKSUM, 0 DRVSEL, 0 /SELECTED DRIVE READST, 377 LOC, 0 LEN, 0 BCNT, 0 /BLOCKS TO SEND TO PC TEMP, 0 C17, 17 C360, 360 CX200, 200 CHKSM, 0 ERRCN2, 0 /COUNTING ERRORS OLDBUF, 0 /USED BY DTA0 ROUTINE - RETRY BUFFER XBUFF, 0 /USED BY DTA0 ROUTINE C374, 374 /USED BY DTA0 ROUTINE BLOCK, 0 /USED BY DTA0 ROUTINE XWCT, 0 /USED BY DTA0 ROUTINE - MASTER WORDCOUNT XFUNCT, 0 /USED BY DTA0 ROUTINE - FUNCTION EQUTMP, 0 CHKSUM, 0 *140 FINISH, HLT /NORMAL GOOD HALT JMP START-1 *177 NOP START, CDF 0 CAF CLA CLL OSR /GET DRIVE AND (1 RTR DCA DRVSEL CLA CLL OSR /GET MAX FIELD TO USE RTR RAR AND (7 SNA HLT /MUST HAVE AT LEAST 1 FIELD FOR BUFFER CIA DCA FIELDS DCA ERRCN2 RDSZLP, TAD BLKFLD /MULTIPLY BY NUMER OF FIELDS AVAILABLE ISZ FIELDS JMP RDSZLP DCA RDSIZE /TOTAL NUMBER OF BLOCKS IN ONE GO = BATCH DCA CBLOCK /START WITH BLOCK 0 DCA CHKSM DUMPLP, CLA TAD RDSIZE TAD CBLOCK /(TOTAL - BATCH) - CURRENT CIA TAD NUMBLK /MORE BLOCKS LEFT THAN BATCH? SMA /NO, NUMBER OF BLOCKS LEFT CLA /YES, ONLY BATCH SIZE TAD RDSIZE SNA /ANY MORE BLOCKS? JMP DONE /NO, DO FINISH STUFF DCA ARGSZ /TO NUMBER OF BLOCKS REQUEST TAD CBLOCK /TO CURRENT BLOCK TO START WITH DCA ARGBK TAD DRVSEL JMS I (DTA0 0010 /READ STARTING IN FIELD 1 ARGSZ, 0 0 ARGBK, 0 JMP ERRRET /SOME DUST ON THE TAPE? TAD (377 /ALL BLOCKS GOOD DCA READST /Send data, each block starts with FF CLA CLL / then 2 12 bit words in 3 bytes DCA LOC / ERRRET DUPLICATES SOME OF THIS TAD ARGSZ CIA DCA BCNT /SET UP COUNTER OF NUMBER OF BLOCKS XFERRED CDF 10 /START IN FIELD 1 OUTBL1, JMS I (OUTBLK /SEND A BLOCK ISZ CBLOCK /NEXT BLOCK ISZ BCNT /BATCH XFERRED? JMP OUTBL1 /NO CDF 0 JMP DUMPLP /GO READ NEXT BATCH DONE, CLA / Send FE and -checksum of all words TAD (376 JMS I (PUN CLA CLL TAD CHKSM / Send checksum in two bytes, low bits first CIA JMS I (PUN CLA CLL TAD CHKSM CIA RTR RTR RTR RTR AND C17 JMS I (PUN CLA TAD DRVSEL JMS I (DTA0 / REWIND TAPE 0010 1 0 0 NOP TAD ERRCN2 / Leave AC with # of errors JMP FINISH ERRRET, CDF 10 /SEND GOOD BLOCKS READ WITH GOOD BLOCK FLAG CLA CLL /THEN BAD WITH BAD BLOCK FLAG. DCA LOC TAD CBLOCK CIA TAD BLOCK /Get - number good blocks read CIA /Last was bad SNA JMP FSTBAD /First block is bad, no good to send DCA BCNT TAD (377 DCA READST OUTBL2, JMS I (OUTBLK /Send good blocks ISZ CBLOCK ISZ BCNT JMP OUTBL2 FSTBAD, TAD (375 /NOW SEND BAD BLOCK DCA READST JMS I (OUTBLK ISZ CBLOCK ISZ ERRCN2 CDF 0 JMP DUMPLP /And read from here on PAGE OUTBLK, 0 /Send a block of data out serial port CLA TAD WCOUNT DCA LEN /COUNT FOR ONE BLOCK TAD READST /Send good/bad flag JMS PUN OUT, CLA CLL TAD I LOC TAD CHKSM / Keep checksum of all words sent DCA CHKSM TAD I LOC / Send 2 words as 3 bytes CLL RTR / WvdM: Left 8 Bits first RTR / WvdM: JMS PUN CLA CLL TAD I LOC AND C17 CLL RTL / WvdM: Low 4 Bits to high byte 2 RTL / WvdM DCA TEMP ISZ LOC TAD LOC TAD CX200 SZA CLA /ARE WE AT OS/8 BOUNDARY? JMP STFLD3+1 /NOT AT END OF FIELD (DJG) DCA LOC /OK, TO NEXT FIELD RDF / TAD (6211 /BUILD CDF DCA STFLD3 STFLD3, NOP ISZ LEN /END IF BUFFER? SKP /NO JMP ENDBK /YES TAD I LOC TAD CHKSM DCA CHKSM TAD I LOC CLL RTL RTL RAL / New: High 4 bits to low byte 2 AND C17 / (WvdM) was AND C360 TAD TEMP JMS PUN CLA CLL TAD I LOC JMS PUN ISZ LOC TAD LOC TAD CX200 SZA CLA /ARE WE AT OS/8 BOUNDARY? JMP STFLD4+1 /NOT AT END OF FIELD (DJG) DCA LOC /OK, TO NEXT FIELD RDF TAD (6211 /BUILD CDF DCA STFLD4 STFLD4, NOP ISZ LEN JMP OUT JMP I OUTBLK ENDBK, TAD TEMP /SEND LAST PART OF WORD JMS PUN JMP I OUTBLK PUN, 0 / Send byte out serial port PLS / Punch for testing with emulator / TLS2 / Send out console CLA CLL TAD CBLOCK PSF / TSF2 /Wait until character sent JMP .-1 CLA JMP I PUN $