%include "CONFIG.INC" %include "DISQIO.INC" %recordformat bad fm((%integer stamp, %integerarray b(1 : 512 - 3), %integer limit, checksum) %c %or %integerarray x(1 : 512)) %integerfn checksum(%record(bad fm)%name b) %integer i, c c = 0 c = c + b_x(i) %for i = 1, 1, 512 %result = c %end %begin %record(bad fm) b %integer n, x, a %integername z %on 9 %start; -> read all; %finish b = 0 n = 0 openinput(1,"bad.dat") select input(1) %cycle read(x) n = n + 1 b_b(n) = x printstring("Bad block "); write(n, 0) printstring(" at "); write(x, 0) newline %repeat read all: {}selectinput(0); printstring("'.' to continue:") {}readsymbol(x) %until x='.' b_stamp = 1 b_limit = n b_checksum = -checksum(b) %for n = 1, 1, 4 %cycle a = (sy2 start + bad area(n)) << 9 {}printstring("Calling driver: ") {}write(dwrite!dverify,0); write(2048,1); write(a,1); write(addr(b),1); newline z == transfer(D write ! D verify, 2048, a, integer(addr(b))) %while z = 0 %cycle; %repeat %if z = 2048 %start printstring("Bad area "); write(n, 0) printstring(" initialised") %else printstring("Failed to initialise bad area ") write(n, 0) %finish newline %repeat %end %of %program