%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 %routine open it %string(31) bbl %on 9 %start printstring("Can't open bad-block list file: ") printstring(event_message); newline %stop %finish prompt("BBL file: "); read(bbl) open input(1, bbl) select input(1) %end %begin %record(bad fm) b %integer n, x, a, l %integername z %on 9 %start; -> read all; %finish b = 0 n = 0 open it l = -1 %cycle read(x) n = n + 1 b_b(n) = x printstring("Bad block "); write(n, 0) printstring(" at "); write(x, 0) newline %if x <= l %start printstring("Bad ordering"); newline %stop %finish l = x %repeat read all: b_stamp = 1 b_limit = n b_checksum = -checksum(b) %for n = 1, 1, 4 %cycle a = (sy2 start + bad area(n)) << 9 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