X-Git-Url: http://gitweb.hachti.de/?a=blobdiff_plain;f=sw%2Fdumprest%2Foriginal%2Frestrk05.pal;fp=sw%2Fdumprest%2Foriginal%2Frestrk05.pal;h=e81fcfe40afa8aa1a09efebd167568218f6b6347;hb=81e70d488b71bf995c459ca3a02c025993460ffa;hp=0000000000000000000000000000000000000000;hpb=07ec0278333ed187ac242dedcff13c56cf1b0b91;p=pdp8.git diff --git a/sw/dumprest/original/restrk05.pal b/sw/dumprest/original/restrk05.pal new file mode 100644 index 0000000..e81fcfe --- /dev/null +++ b/sw/dumprest/original/restrk05.pal @@ -0,0 +1,342 @@ +/ RK05 RESTORE Program +/ This program will receive a RK05 image and write it to the disk. The +/ entire disk it written, with each sector having a reread check. +/ +/ This program should be started before the program (PC) sending the data +/ +/ See dump for the format of the serial data. +/ To run start at 0200. +/ SR 9-11 should be drive +/ Should halt at HLT at label GDHLT (140) with AC = 0 if it worked. +/ Hit cont to display in AC number of recoverable errors +/ At normal exit hitting cont again will restart the program +/ +/ The current location being written to will be displayed in the AC +/ while running. It is (cylinder * 16 + sector) / 2 + + DSKP=6741 + DCLR=6742 + DLAG=6743 + DLCA=6744 + DRST=6745 + DLDC=6746 + + 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 + + *20 +ERRCNT, 7760 / Stop when err count = 0, init at startup +DRIVE, 0 / Drive # * 2 +K0200, 0200 +K4000, 4000 +FLD, 10 / Use field 1 for data buffer +TRACK, 0 +MAXTRK, 4537 +EXBIT, 0 +WRTDAT, 4000 +REDDAT, 0000 +WRTLOC, 0000 / Address to write data to disk +BUFLOC, 0000 / Address to store next word received +NUMSEC, 0 / Number of sectors received but not written +RDBUF, 1000 / Buffer for reread check +DSPTRK, 0 +LOC, 0 +LEN, 0 +K6, 6 +K17, 17 +K377, 377 +K7400, 7400 +KN1, 7777 +CHKSUM, 0 +TEMP, 0 +LAST, 0 +DONEFG, 0 / 1 when end of data flag received +STATE, 0 / Where in serial data we are 0 = Need ff sector head, + / -1 = byte1, ... -3 = byte 3 +BUFCNT, 0 / Count of words received in sector +ISRAC, 0 +ISRFLG, 0 +RISR, ISR + DECIMAL +NBLKSZ, -256 + OCTAL +WRITEF, WRITE +RECALF, RECAL +STARTF, START + + *1000 + 1234 + 4321 + + *1 + JMP I RISR / Interrupt handler + + *140 +GDHLT, HLT / Stop with sum of all words (including -checksum) + / Should be 0 +/ CLA +/ TAD K17 +/ TAD ERRCNT +/ HLT / # of errors + JMP I STARTF + + *200 +START, CDF 0 / Init all our variables + CAF + CLA CLL OSR / Init variables changed during run + RAL + AND K6 / Clear out high bits such as 0200 start address + DCA DRIVE + DCA TRACK + DCA EXBIT + DCA CHKSUM + DCA STATE + DCA WRTLOC + DCA BUFLOC + DCA NUMSEC + DCA DONEFG + TAD K17 + CIA + DCA ERRCNT + ION / Turn on serial interrupt handler + CLA CLL IAC / Set bit 11 to enable interrupts + KIE2 + KRB2 +/ RPE / PTR Testing, use paper tape with emulator +/ RFC +RECAL, CLA CLL IAC / Recal drive, clear errors and set to cyl 0 + DCLR / From manual + TAD DRIVE + DLDC + CLA CLL CML RTL + DCLR + DSKP + JMP .-1 + TAD K0200 + TAD DRIVE + DLDC + DSKP + JMP .-1 + DRST + CIA + TAD K4000 + SZA CLA + JMP BADSTA + JMP I WRITEF +BADSTA, HLT + + PAGE +WRITE, CLA CLL + TAD EXBIT + RAR + TAD TRACK + RAR + DCA DSPTRK / Save track for display +CDAT, CLA + TAD DSPTRK / Display write location + AND DSPTRK / Kill time to make brighter + AND DSPTRK + AND DSPTRK + IOF / Turn off interrupts so we can safely update + CLA / # of sectors in buffer + TAD NUMSEC + SNA + JMP NODAT + TAD KN1 + DCA NUMSEC + IAC / 1 flags sector to write +NODAT, ION + SZA + JMP DOWRT / Got data write it + TAD DONEFG / No more data flag? + SNA + JMP CDAT / No, try again + JMP DONE / yes +DOWRT, CLA CLL IAC / We have one waiting, write it + DCLR + TAD WRTLOC + DLCA + TAD DRIVE + TAD WRTDAT + TAD FLD + TAD EXBIT + DLDC + TAD TRACK + DLAG + CLL + TAD DSPTRK + DSKP + JMP .-1 + DRST + CIA + TAD K4000 + SZA CLA + JMP ERROR +RDCHK, CLA CLL IAC / And now reread sector + DCLR + TAD RDBUF + DLCA + TAD DRIVE + TAD REDDAT + TAD EXBIT + DLDC + TAD TRACK + DLAG + CLA CLL + TAD DSPTRK + DSKP + JMP .-1 + DRST + CIA + TAD K4000 + SZA CLA + JMP ERROR + TAD RDBUF + DCA LOC + TAD NBLKSZ + DCA LEN +CHKDAT, CDF 10 / And now compare + TAD I WRTLOC + CIA + CDF 0 + TAD I LOC + SZA + HLT / Big trouble, sector is bad without CRC error + ISZ WRTLOC + ISZ LOC + ISZ LEN + JMP CHKDAT + CLA CLL +INCTRK, ISZ TRACK / Increment track and exbit value for next sector + JMP WRITE + ISZ EXBIT + JMP WRITE + HLT +DONE, CLA CLL CMA / Done, wait for one more word + TAD BUFLOC + AND K17 + SZA + JMP DONE + TAD CHKSUM / Get final checksum, receive has added checksum + SZA / word to running sum, Halt here if checksum + HLT / is not zero. + JMP GDHLT + +ERROR, ISZ ERRCNT / To many errors? + JMP I RECALF / No, recal drive and try again + DRST / Yes, leave error in AC and halt + HLT + + PAGE +ISR, + DCA ISRAC / Save AC + GTF + DCA ISRFLG / And flags + CDF 10 / Buffer in field 1 +/ RSF / PTR + KSF2 / Have character waiting + HLT / Stop, not our interrupt +/ JMP IRET / No, not our interrupt + CLA +/ RRB RFC / PTR + KRB2 / Get character + DCA TEMP + TAD STATE / Find out where in sequence we are + SNA + JMP SBLK / Start of block + IAC + SNA + JMP BYTE1 + IAC + SNA + JMP BYTE2 + CLA / Byte 3 + TAD TEMP + CLL + RTL + RTL + TAD LAST + DCA I BUFLOC + TAD CHKSUM + TAD I BUFLOC + DCA CHKSUM + TAD BUFLOC + IAC + DCA BUFLOC + STA / -1 for byte 1 + DCA STATE + ISZ BUFCNT + JMP IRET + DCA STATE / End of sector, set to 0 to check header byte + ISZ NUMSEC / Inc number of sectors buffered + TAD K17 + CIA + TAD NUMSEC + SNA + HLT / To many buffered, halt. Must of had to many + / retries in a row +IRET, CLA + TAD ISRFLG + RTF + CLA + TAD ISRAC + JMP I 0 +BYTE2, CLA + TAD TEMP + RTL + RTL + RTL + RTL + AND K7400 + TAD LAST + DCA I BUFLOC + TAD CHKSUM + TAD I BUFLOC + DCA CHKSUM + ISZ BUFLOC + ISZ BUFCNT + TAD TEMP + RTR + RTR + AND K17 + DCA LAST + CMA + TAD STATE + DCA STATE + JMP IRET +BYTE1, CLA + TAD TEMP + DCA LAST + CMA + TAD STATE + DCA STATE + JMP IRET +SBLK, TAD K377 + CIA + TAD TEMP / Is is a ff? + SNA + JMP FLAGOK / Yes + IAC / Is it a fe? + SZA + HLT / No, halt + IAC + DCA DONEFG +FLAGOK, STA / -1 for byte 1 + DCA STATE + TAD NBLKSZ / And setup to look for 256 words + DCA BUFCNT + JMP IRET + $