X-Git-Url: http://gitweb.hachti.de/?a=blobdiff_plain;f=sw%2Fdumprest%2Foriginal%2Fdumprx01.pal;fp=sw%2Fdumprest%2Foriginal%2Fdumprx01.pal;h=213ad7f956a263768d23e4ad2d52b8a727f94b57;hb=81e70d488b71bf995c459ca3a02c025993460ffa;hp=0000000000000000000000000000000000000000;hpb=07ec0278333ed187ac242dedcff13c56cf1b0b91;p=pdp8.git diff --git a/sw/dumprest/original/dumprx01.pal b/sw/dumprest/original/dumprx01.pal new file mode 100644 index 0000000..213ad7f --- /dev/null +++ b/sw/dumprest/original/dumprx01.pal @@ -0,0 +1,468 @@ +/ RX01 DUMP +/ This program will send a RX01 image out the console port. +/ The format of the data sent is 0xff (0377) if no errors, or 0xfd +/ if error followed by 1 byte track, 1 byte sector, then 128 or 256 word +/ of data for each sector. After the last sector a 0xfe (0376) is sent +/ with a one byte -checksum of all bytes sent. +/ The data is read in 8 bit mode so all data on the disk is dumped. +/ +/ The program (PC) receiving the data should be started before this program +/ +/ To run start at 0200. +/ SR 10-11 should be drive # +/ Should halt at HLT at label GDHLT with number of recoverable errors +/ At normal exit hitting cont will restart the program +/ +/ If unrecoverable errors occur the program will halt, hit continue to +/ send bad sector and continue. +/ The PC program will print out the bad location +/ +/ Program uses field 0 & 1. 1 is transmit buffer +/ +/ It will handle single and double density disks. Will not handle quad +/ correctly (don't have drive or information on disk organization) + + LCD=6751 / Load the command reg with AC + XDR=6752 / Load or read the transfer register + STR=6753 / Skip on transfer request flag + SER=6754 / Skip on error flag + SDN=6755 / Skip on done flag + INTR=6756 / AC = 0 interrupt off, 1 = on + INIT=6757 / Initialize RX8/RX01 + + 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 + + *10 +BUFGET, 0 +BUFPUT, 0 + *20 +ERRCNT, 7760 / Stop when err count = 0, init at startup +DRIVE, 0 / Drive # * 20 +DRVMSK, 60 / Mask for drive bits +INTLV, 2 / Interleave factor for read, 13 (15 octal) wont work +ERRCN2, 0 / Total # of errors +RDCMD,106 / 8 bit read +EMPCMD, 102 / 8 bit empty buffer +RDERR, 116 / 8 bit read error +M32, -32 +M115, -115 +K0037, 37 +TRACK, 0 +SECT, 0 +SCNT, 0 +LTRACK, 0 +LSECT, 0 +CURBUF, BUFA / Address to read data into +LSTBUF, BUFA / Address to send data from +BUFORG, BUFA / First buffer address +BUFSZ, 400 / Big enough to hold double density +LOC, 0 +LOC2, 0 +TEMP, 0 +MASK1, 17 +MASK2, 360 +FF, 377 +FE, 376 +FD, 375 +CHKSUM, 0 +IDLEFG, 0 + DECIMAL +M128, -128 +BLKSZ, -128 + OCTAL +ISRAC, 0 +ISRFLG, 0 +LEN, 0 +READST, 377 +PUNF, PUN +SENDF, SEND +READF, READ +FINCTRK,INCTRK +RISR, ISR + +L10, 10 +L32, 32 +L400, 400 +L412, 412 +L422, 422 /20 SAYS UNIT 1, 402 FOR CONVENIENCE +L7700, 7700 +L1734, 1734 +L4110, +LM3670, -3670 +ZOO, 0 +DENSW, 0 +SIZE, 0 +FN, 0 +LTYPE, TYPE +RX02, 0 +LLCD, 0 /REPLACED BY ROUTINE TO LOAD CMD REGISTER +LLCD1, LCD1 +LLCD2, LCD2 + + + + *1 + JMP I RISR / Interrupt handler + + *2000 +BUFA, 1234 + 4321 + + *200 +START, CAF + CLA CLL OSR / Init variables changed during run + RTL + RTL + AND DRVMSK + DCA DRIVE + DCA TRACK + DCA BUFGET + DCA BUFPUT + IAC + DCA SECT + IAC + DCA IDLEFG + DCA CHKSUM + TAD MASK1 + CMA + DCA ERRCNT + DCA ERRCN2 + TAD M32 + DCA SCNT + ION / Turn on serial interrupt handler + CLA CLL IAC / Set bit 11 to enable interrupts + KIE2 +/ RPE / Testing, use PTP with emulator + JMS RECAL + JMS I LTYPE + +DUMP, JMS I READF / Start read operation +DMPLP, JMS CHKRD / Wait until done and check for errors + CLA + TAD TRACK + DCA LTRACK + TAD SECT + DCA LSECT + JMS I FINCTRK / Set read loc to next sector + SZA + JMP LAST / Last, send checksum + CLA + TAD CURBUF + DCA LSTBUF / Save buffer data read into for dumping + TAD CURBUF / And setup to read into next buffer + TAD BUFSZ / Toggle between the two buffers + AND BUFSZ + TAD BUFORG + DCA CURBUF + JMS I READF / Start the read + JMS I SENDF / Send the last buffer + JMP DMPLP / And check read started etc + +RECAL, 0 + INIT + SDN / Done? + JMP .-1 + JMP I RECAL + /JMP DUMP +BADSTA, HLT + +LAST, CLA / Send FE and -checksum of all words + TAD CURBUF + DCA LSTBUF + JMS I SENDF + CLA CLL + TAD FE + JMS I PUNF + CLA CLL + TAD CHKSUM + CIA + JMS I PUNF +WAITEM, CLA + TAD BUFGET + CIA + TAD BUFPUT + SZA / No character waiting to send + JMP WAITEM + TAD ERRCN2 / Leave AC with # of errors +GDHLT, HLT / Normal halt + JMP START + +CHKRD, 0 + CLA CLL + TAD FF / Set good read flag + DCA READST + SDN / Done? + JMP .-1 + CLA + SER / Any errors + SKP + JMP ERROR + CLA CLL + TAD CURBUF + DCA LOC2 + TAD EMPCMD + JMS I LLCD +ELOOP, STR + SKP + JMP EMPTY + SDN + JMP ELOOP + SER + JMP GOOD + JMP ERROR +GOOD, TAD MASK1 / Reset error counter on good read + CMA + DCA ERRCNT + JMP I CHKRD +EMPTY, XDR + DCA I LOC2 + ISZ LOC2 + JMP ELOOP + + JMP I CHKRD / Not executed???? + +ERROR, ISZ ERRCN2 / Inc total # of errors + ISZ ERRCNT / To many errors? + JMP RETRY + XDR / Yes, leave error in AC and halt +/ HLT / ********* Put in halt to stop on errors + CLA + TAD RDERR + JMS I LLCD + SDN + JMP .-1 + XDR +/ HLT / ****** and display error code + JMS RECAL + CLA CLL + TAD FD / Set bad read flag + DCA READST + TAD MASK1 + CMA + DCA ERRCNT + JMP I CHKRD +RETRY, + JMS RECAL / No, recal drive and try again + JMP DUMP / + + PAGE +TYPE, 0 + TAD L412 /MAKE A DOUBLE DENSITY READ STATUS CODE + TAD DRIVE + LCD + SDN + JMP .-1 + XDR /GET STATUS WORD + DCA RX02 + TAD RX02 + AND L32 /KEEP DENSITY ERROR; DOUBLE; QUAD + TAD L10 /SINGLE=10;SING/DOUB=40;DOUB=20;QUAD=22 + AND L422 /SINGLE=0;SING/DOUB=0;DOUB=20;QUAD=22 + DCA ZOO /PLACE TYPE CODE, THREE LOC.'S AFTER ENTRY POINT + SER +NORMAL, TAD ZOO /FETCH BACK TYPE CODE + SZA CLA /SKIP IF A SINGLE DENSITY + TAD L7700 /DOUBLE + TAD L7700 /SINGLE=7700, DOUBLE=7600 + DCA DENSW /PLACE FOR LOOP CONTROL + TAD ZOO + CLL RTR /PUT QUAD BIT TO LINK + SNA CLA /SKIP IF DOUBLE OR QUAD + TAD L1734 /SINGLE + TAD L4110 /D&Q=4110, S=6044 + SNL /SKIP ON QUAD, IT'S OK RIGHT NOW + CLL CML RAR /SINGLE AND DOUBLE DIVIDE BY 2 + DCA SIZE /S=7022, D=6044, Q=4110 + TAD DENSW /7700 IF SINGLE, 7600 IF DOUBLE + CLL CMA RTL /375 IF SINGLE, 775 IF DOUBLE + AND L400 + TAD DRIVE /VOILA, 400*DOUBLE + 20*DRIVE + DCA FN /PLACE INTO FUNCTION CONTROL WORD + TAD SIZE + JMS I PUNF /SEND DENSITY + CLA + TAD ZOO /FETCH BACK TYPE CODE + SZA CLA /SKIP IF A SINGLE DENSITY + IAC /INTERLEAVE 3 FOR DOUBLE + IAC /INTERLEAVE 2 FOR SINGLE + IAC /INTERLEAVE 2 FOR SINGLE + DCA INTLV + TAD ZOO /FETCH BACK TYPE CODE + SZA CLA /SKIP IF A SINGLE DENSITY + TAD M128 /256 BYTES SECTOR DOUBLE + TAD M128 /128 BYTES SINGLE + DCA BLKSZ + TAD RX02 + AND L10 + SNA CLA + JMP RX01 + TAD LLCD2 + DCA LLCD + JMP I TYPE /RETURN +RX01, TAD LLCD1 + DCA LLCD + JMP I TYPE /RETURN + +LCD1, 0 + TAD FN + LCD + JMP I LCD1 + +LCD2, 0 + TAD FN + DCA CMD + TAD CMD + LCD + CLA + TAD CMD + CLL RTL + RTL + RAL + STR + JMP .-1 + XDR + CLA + JMP I LCD2 +CMD, 0 + + PAGE +INCTRK, 0 / Increment track and exbit value for next sector + CLA CLL / AC non zero on return if done + ISZ SCNT + SKP + JMP INC2 / Sector rolled over, head, track + TAD SECT + TAD INTLV + DCA SECT + TAD SECT + TAD M32 + SPA SNA + JMP RETINC + DCA SECT + CMA + TAD SECT + SNA + ISZ SECT +RETINC, CLA + JMP I INCTRK +INC2, CLA IAC + DCA SECT + TAD M32 + DCA SCNT + ISZ TRACK + TAD TRACK + TAD M115 + SZA + JMP RETINC + CLA IAC + JMP I INCTRK + +READ, 0 + CLA CLL / Standard read from manual + TAD RDCMD + JMS I LLCD + STR + JMP .-1 + TAD SECT + XDR + STR + JMP .-1 + CLA + TAD TRACK + XDR + JMP I READ + +SEND, 0 / Move sector to transmit buffer + CLA CLL + TAD LSTBUF + DCA LOC + TAD BLKSZ + DCA LEN + CLA CLL + TAD READST + JMS PUN + TAD LTRACK + JMS PUN + TAD LSECT + JMS PUN +OUT, CLA CLL + TAD I LOC + JMS PUN + ISZ LOC + ISZ LEN + JMP OUT + JMP I SEND + +PUN, 0 / Send a byte out serial port + DCA TEMP +PUNLP, TAD BUFPUT / Room for another character? + IAC + CIA + TAD BUFGET + SNA + JMP PUNLP / No, try again + CLA + TAD TEMP + CDF 10 + DCA I BUFPUT + TAD TEMP + AND FF + TAD CHKSUM + DCA CHKSUM + IOF + TAD IDLEFG + SNA + JMP PUNOK + CLA + DCA IDLEFG + TAD I BUFGET + TLS2 / Send character +/ PLS / PTP +PUNOK, ION + CLA + CDF 0 + JMP I PUN + + PAGE +ISR, DCA ISRAC / Save AC + GTF + DCA ISRFLG / And flags + CDF 10 / Buffer in field 1 + TSF2 / Ready to send +/ PSF / PTP + JMP IRET / No, not our interrupt + TAD BUFGET + CIA + TAD BUFPUT + SNA / No character waiting to send + JMP IEMPTY + CLA + TAD I BUFGET + TLS2 / Send character +/ PLS / PTP +IRET, CLA + TAD ISRFLG + RTF + CLA + TAD ISRAC + JMP I 0 +IEMPTY, CLA IAC + DCA IDLEFG + TCF2 / Clear interrupt +/ PCF / PTP + JMP IRET + $