A large commit.
[pdp8.git] / sw / dumprest / hachti_std / RESTR0.PA
CommitLineData
81e70d48
PH
1/ RK05 RESTORE Program
2/ This program will receive a RK05 image and write it to the disk. The
3/ entire disk it written, with each sector having a reread check.
4/
5/ This program should be started before the program (PC) sending the data
6/
7/ See dump for the format of the serial data.
8/ To run start at 0200.
9/ SR 9-11 should be drive
10/ Should halt at HLT at label GDHLT (140) with AC = 0 if it worked.
11/ Hit cont to display in AC number of recoverable errors
12/ At normal exit hitting cont again will restart the program
13/
14/ The current location being written to will be displayed in the AC
15/ while running. It is (cylinder * 16 + sector) / 2
16
17 DSKP=6741
18 DCLR=6742
19 DLAG=6743
20 DLCA=6744
21 DRST=6745
22 DLDC=6746
23
24 INAD=400 / Address of serial input, 30 for console
25 KCF2=6000 INAD
26 KSF2=6001 INAD
27 KCC2=6002 INAD
28 KRS2=6004 INAD
29 KIE2=6005 INAD
30 KRB2=6006 INAD
31
32 OUTAD=410 / Address of serial output, 40 for console
33 TFL2=6000 OUTAD
34 TSF2=6001 OUTAD
35 TCF2=6002 OUTAD
36 TPC2=6004 OUTAD
37 TSK2=6005 OUTAD
38 TLS2=6006 OUTAD
39
40 *20
41ERRCNT, 7760 / Stop when err count = 0, init at startup
42DRIVE, 0 / Drive # * 2
43K0200, 0200
44K4000, 4000
45FLD, 10 / Use field 1 for data buffer
46TRACK, 0
47MAXTRK, 4537
48EXBIT, 0
49WRTDAT, 4000
50REDDAT, 0000
51WRTLOC, 0000 / Address to write data to disk
52BUFLOC, 0000 / Address to store next word received
53NUMSEC, 0 / Number of sectors received but not written
54RDBUF, 1000 / Buffer for reread check
55DSPTRK, 0
56LOC, 0
57LEN, 0
58K6, 6
59K17, 17
60K377, 377
61K7400, 7400
62KN1, 7777
63CHKSUM, 0
64TEMP, 0
65LAST, 0
66DONEFG, 0 / 1 when end of data flag received
67STATE, 0 / Where in serial data we are 0 = Need ff sector head,
68 / -1 = byte1, ... -3 = byte 3
69BUFCNT, 0 / Count of words received in sector
70ISRAC, 0
71ISRFLG, 0
72RISR, ISR
73 DECIMAL
74NBLKSZ, -256
75 OCTAL
76WRITEF, WRITE
77RECALF, RECAL
78STARTF, START
79
80 *1000
81 1234
82 4321
83
84 *1
85 JMP I RISR / Interrupt handler
86
87 *140
88GDHLT, / HLT / Stop with sum of all words (including -checksum)
89FINISH,
90 JMP I XFINI
91XFINI, FINI
92
93/ HLT / Normal good halt
94/ JMP START / And restart if requested
95
96 / REBOOT FROM RK05
97BO1, 6743
98BO2, JMP 31
99 / Should be 0
100/ CLA
101/ TAD K17
102/ TAD ERRCNT
103/ HLT / # of errors
104 JMP I STARTF
105
106 *200
107START, CDF 0 / Init all our variables
108 CAF
109/ CLA CLL OSR / Init variables changed during run
110/ RAL
111/ AND K6 / Clear out high bits such as 0200 start address
112/ DCA DRIVE
113 CLA / PHPH
114 DCA TRACK
115 DCA EXBIT
116 DCA CHKSUM
117 DCA STATE
118 DCA WRTLOC
119 DCA BUFLOC
120 DCA NUMSEC
121 DCA DONEFG
122 TAD K17
123 CIA
124 DCA ERRCNT
125 ION / Turn on serial interrupt handler
126 CLA CLL IAC / Set bit 11 to enable interrupts
127 KIE2
128 KRB2
129/ RPE / PTR Testing, use paper tape with emulator
130/ RFC
131RECAL, CLA CLL IAC / Recal drive, clear errors and set to cyl 0
132 DCLR / From manual
133 TAD DRIVE
134 DLDC
135 CLA CLL CML RTL
136 DCLR
137 DSKP
138 JMP .-1
139 TAD K0200
140 TAD DRIVE
141 DLDC
142 DSKP
143 JMP .-1
144 DRST
145 CIA
146 TAD K4000
147 SZA CLA
148 JMP BADSTA
149 JMP I WRITEF
150BADSTA, HLT
151
152 PAGE
153WRITE, CLA CLL
154 TAD EXBIT
155 RAR
156 TAD TRACK
157 RAR
158 DCA DSPTRK / Save track for display
159CDAT, CLA
160 TAD DSPTRK / Display write location
161 AND DSPTRK / Kill time to make brighter
162 AND DSPTRK
163 AND DSPTRK
164 IOF / Turn off interrupts so we can safely update
165 CLA / # of sectors in buffer
166 TAD NUMSEC
167 SNA
168 JMP NODAT
169 TAD KN1
170 DCA NUMSEC
171 IAC / 1 flags sector to write
172NODAT, ION
173 SZA
174 JMP DOWRT / Got data write it
175 TAD DONEFG / No more data flag?
176 SNA
177 JMP CDAT / No, try again
178 JMP DONE / yes
179DOWRT, CLA CLL IAC / We have one waiting, write it
180 DCLR
181 TAD WRTLOC
182 DLCA
183 TAD DRIVE
184 TAD WRTDAT
185 TAD FLD
186 TAD EXBIT
187 DLDC
188 TAD TRACK
189 DLAG
190 CLL
191 TAD DSPTRK
192 DSKP
193 JMP .-1
194 DRST
195 CIA
196 TAD K4000
197 SZA CLA
198 JMP ERROR
199RDCHK, CLA CLL IAC / And now reread sector
200 DCLR
201 TAD RDBUF
202 DLCA
203 TAD DRIVE
204 TAD REDDAT
205 TAD EXBIT
206 DLDC
207 TAD TRACK
208 DLAG
209 CLA CLL
210 TAD DSPTRK
211 DSKP
212 JMP .-1
213 DRST
214 CIA
215 TAD K4000
216 SZA CLA
217 JMP ERROR
218 TAD RDBUF
219 DCA LOC
220 TAD NBLKSZ
221 DCA LEN
222CHKDAT, CDF 10 / And now compare
223 TAD I WRTLOC
224 CIA
225 CDF 0
226 TAD I LOC
227 SZA
228 HLT / Big trouble, sector is bad without CRC error
229 ISZ WRTLOC
230 ISZ LOC
231 ISZ LEN
232 JMP CHKDAT
233 CLA CLL
234INCTRK, ISZ TRACK / Increment track and exbit value for next sector
235 JMP WRITE
236 ISZ EXBIT
237 JMP WRITE
238 HLT
239DONE, CLA CLL CMA / Done, wait for one more word
240 TAD BUFLOC
241 AND K17
242 SZA
243 JMP DONE
244 TAD CHKSUM / Get final checksum, receive has added checksum
245 SZA / word to running sum, Halt here if checksum
246 HLT / is not zero.
247 JMP GDHLT
248
249ERROR, ISZ ERRCNT / To many errors?
250 JMP I RECALF / No, recal drive and try again
251 DRST / Yes, leave error in AC and halt
252 HLT
253
254 PAGE
255ISR,
256 DCA ISRAC / Save AC
257 GTF
258 DCA ISRFLG / And flags
259 CDF 10 / Buffer in field 1
260/ RSF / PTR
261 KSF2 / Have character waiting
262 HLT / Stop, not our interrupt
263/ JMP IRET / No, not our interrupt
264 CLA
265/ RRB RFC / PTR
266 KRB2 / Get character
267 DCA TEMP
268 TAD STATE / Find out where in sequence we are
269 SNA
270 JMP SBLK / Start of block
271 IAC
272 SNA
273 JMP BYTE1
274 IAC
275 SNA
276 JMP BYTE2
277 CLA / Byte 3
278 TAD TEMP
279 CLL
280 RTL
281 RTL
282 TAD LAST
283 DCA I BUFLOC
284 TAD CHKSUM
285 TAD I BUFLOC
286 DCA CHKSUM
287 TAD BUFLOC
288 IAC
289 DCA BUFLOC
290 STA / -1 for byte 1
291 DCA STATE
292 ISZ BUFCNT
293 JMP IRET
294 DCA STATE / End of sector, set to 0 to check header byte
295 ISZ NUMSEC / Inc number of sectors buffered
296 TAD K17
297 CIA
298 TAD NUMSEC
299 SNA
300 HLT / To many buffered, halt. Must of had to many
301 / retries in a row
302IRET, CLA
303 TAD ISRFLG
304 RTF
305 CLA
306 TAD ISRAC
307 JMP I 0
308BYTE2, CLA
309 TAD TEMP
310 RTL
311 RTL
312 RTL
313 RTL
314 AND K7400
315 TAD LAST
316 DCA I BUFLOC
317 TAD CHKSUM
318 TAD I BUFLOC
319 DCA CHKSUM
320 ISZ BUFLOC
321 ISZ BUFCNT
322 TAD TEMP
323 RTR
324 RTR
325 AND K17
326 DCA LAST
327 CMA
328 TAD STATE
329 DCA STATE
330 JMP IRET
331BYTE1, CLA
332 TAD TEMP
333 DCA LAST
334 CMA
335 TAD STATE
336 DCA STATE
337 JMP IRET
338SBLK, TAD K377
339 CIA
340 TAD TEMP / Is is a ff?
341 SNA
342 JMP FLAGOK / Yes
343 IAC / Is it a fe?
344 SZA
345 HLT / No, halt
346 IAC
347 DCA DONEFG
348FLAGOK, STA / -1 for byte 1
349 DCA STATE
350 TAD NBLKSZ / And setup to look for 256 words
351 DCA BUFCNT
352 JMP IRET
353
354/ OLD ROUTINE, COLD RK05 REBOOT
355OFINI, CLA
356 TAD BO1
357 DCA 30
358 TAD BO2
359 DCA 31
360 CAF
361 JMP 30
362
363*7600
364FINI,
365 HLT
366 JMP I K200
367K200, 200
368
369
370$