Skip to content

Commit c4f3c7e

Browse files
Per Mårtenssonkeirf
authored andcommitted
gw read: Add support for --gen-tg43 to enable TG43 (pin 2) signal
This is enabled from track 60 on read to enable the drive's postcompensation filter. Some drives including, but not limited to, BASF 6104 have a PCF with a better filter for reading 8-inch floppies that haven't been written with TG43. Normally PC controllers don't assert the TG43 signal and have trouble reading disks written without TG43 signalling. Reference http://www.bitsavers.org/pdf/basf/80307-048-BASF-6104-technical-manual.pdf page 34 "Read operation Low input switches the postcompensation filter (PCF) into the read chain when installed. It is recommended to activate the PCF from CYL 60 to CYL 76. The LO I/- signal has no effect during read operation on a drive without PCF. "
1 parent 11b57c8 commit c4f3c7e

1 file changed

Lines changed: 12 additions & 3 deletions

File tree

src/greaseweazle/tools/read.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ def read_with_retry(usb: USB.Unit, args, t) -> Tuple[Flux, Optional[HasFlux]]:
6262

6363
usb.seek(t.physical_cyl, t.physical_head)
6464

65+
if args.gen_tg43:
66+
usb.set_pin(2, cyl < 60)
67+
6568
flux = read_and_normalise(usb, args, args.revs, args.ticks)
6669
if args.fmt_cls is None:
6770
print(f'{tspec}: {flux.summary_string()}')
@@ -95,6 +98,8 @@ def read_with_retry(usb: USB.Unit, args, t) -> Tuple[Flux, Optional[HasFlux]]:
9598
if retry != 0:
9699
usb.seek(0, 0)
97100
usb.seek(t.physical_cyl, t.physical_head)
101+
if args.gen_tg43:
102+
usb.set_pin(2, cyl < 60)
98103
seek_retry += 1
99104
retry = 0
100105
retry += 1
@@ -239,8 +244,11 @@ def main(argv) -> None:
239244
help="do not overwrite an existing file")
240245
parser.add_argument("--pll", type=track.PLL, metavar="PLLSPEC",
241246
help="manual PLL parameter override")
242-
parser.add_argument("--densel", "--dd", type=util.level, metavar="LEVEL",
247+
densel_group = parser.add_mutually_exclusive_group(required=False)
248+
densel_group.add_argument("--densel", "--dd", type=util.level, metavar="LEVEL",
243249
help="drive interface density select on pin 2 (H,L)")
250+
densel_group.add_argument("--gen-tg43", action="store_true",
251+
help="generate TG43 signal for 8-inch drive on pin 2 from track 60. Enable postcompensation filter")
244252
parser.add_argument("--reverse", action="store_true",
245253
help="reverse track data (flippy disk)")
246254
parser.add_argument("file", help="output filename")
@@ -280,14 +288,15 @@ def main(argv) -> None:
280288
if args.format:
281289
print("Format " + args.format)
282290
try:
283-
if args.densel is not None:
291+
if args.densel is not None or args.gen_tg43:
284292
prev_pin2 = usb.get_pin(2)
293+
if args.densel is not None:
285294
usb.set_pin(2, args.densel)
286295
with open_image(args, image_class) as image:
287296
util.with_drive_selected(
288297
lambda: read_to_image(usb, args, image), usb, args.drive)
289298
finally:
290-
if args.densel is not None:
299+
if args.densel is not None or args.gen_tg43:
291300
usb.set_pin(2, prev_pin2)
292301
except USB.CmdError as err:
293302
print("Command Failed: %s" % err)

0 commit comments

Comments
 (0)