# edsk_fix_speedlock.py # # Speedlock-protected EDSK images in TOSEC are often missing the weak-sector # information, and so fail to load with FlashFloppy. This script detects # such images and adds the necessary info to make them work. # # Based on idea and original C implementation by Tom Dalby. # # Written & released by Keir Fraser # # This is free and unencumbered software released into the public domain. # See the file COPYING for more details, or visit . import struct, sys, random def main(argv): if len(argv) != 3: print("%s " % argv[0]) return in_f = open(argv[1], "rb") in_dat = in_f.read() # Check image size if len(in_dat) < 2048: print("Not a valid EDSK image - Too short") return # Check image header x = struct.unpack("<34s14sBBH", in_dat[:52]) if x[0] != b'EXTENDED CPC DSK File\r\nDisk-Info\r\n': print("Not a valid EDSK image - No image signature") return # Check track header trk_dat = in_dat[256:] x = struct.unpack("<10s", trk_dat[:10]) (track, side) = struct.unpack("BB", trk_dat[16:18]) (n, nr, gap, filler) = struct.unpack("BBBB", trk_dat[20:24]) if x[0] != b'Track-Info' or track != 0 or side != 0 or n != 2 or nr != 9: print("Not a Speedlock image - Track header") return # Check sector headers for Speedlock-iness sinfo = trk_dat[24:256] for i in range(nr): (c,h,r,n,s1,s2,alen) = struct.unpack("