Make sure that places which use usbSeek() honour --40-track.

This commit is contained in:
David Given
2021-05-07 20:45:46 +02:00
parent 7c4f8e1443
commit 720fe9f95f
3 changed files with 22 additions and 4 deletions

View File

@@ -5,7 +5,7 @@
FlagGroup fluxSourceSinkFlags;
SettableFlag fluxSourceSinkFortyTrack(
{ "--40-track" },
{ "--40-track", "-4" },
"indicates a 40 track drive");
SettableFlag fluxSourceSinkHighDensity(

View File

@@ -7,11 +7,13 @@
#include "writer.h"
#include "protocol.h"
#include "fmt/format.h"
#include "flaggroups/fluxsourcesink.h"
#include "dep/agg/include/agg2d.h"
#include "dep/stb/stb_image_write.h"
#include <fstream>
static FlagGroup flags = {
&fluxSourceSinkFlags,
&usbFlags,
};
@@ -186,8 +188,15 @@ int mainAnalyseDriveResponse(int argc, const char* argv[])
if (spec.locations.size() != 1)
Error() << "the destination dataspec must contain exactly one track (two sides count as two tracks)";
usbSetDrive(spec.drive, false, F_INDEX_REAL);
usbSeek(spec.locations[0].track);
usbSetDrive(spec.drive, fluxSourceSinkHighDensity, F_INDEX_REAL);
int track = spec.locations[0].track;
if (fluxSourceSinkFortyTrack)
{
if (track & 1)
Error() << "you can only seek to even tracks on a 40-track disk";
track /= 2;
}
usbSeek(track);
std::cout << "Measuring rotational speed...\n";
nanoseconds_t period = usbGetRotationalPeriod(0);

View File

@@ -1,9 +1,11 @@
#include "globals.h"
#include "flags.h"
#include "usb/usb.h"
#include "flaggroups/fluxsourcesink.h"
#include "protocol.h"
static FlagGroup flags = {
&fluxSourceSinkFlags,
&usbFlags,
};
@@ -22,6 +24,13 @@ int mainSeek(int argc, const char* argv[])
flags.parseFlags(argc, argv);
usbSetDrive(drive, false, F_INDEX_REAL);
usbSeek(track);
if (fluxSourceSinkFortyTrack)
{
if (track & 1)
Error() << "you can only seek to even tracks on a 40-track drive";
usbSeek(track / 2);
}
else
usbSeek(track);
return 0;
}