From 2527ac2ce90a5254559956c62604a3d96ffd67ef Mon Sep 17 00:00:00 2001 From: David Given Date: Mon, 11 Feb 2019 23:43:44 +0100 Subject: [PATCH] Initial support for twin drives and 5.25" drives. --- FluxEngine.cydsn/FluxEngine.cyprj | 33 +++++++++++++++++++++ FluxEngine.cydsn/TopDesign/TopDesign.cysch | Bin 198771 -> 204372 bytes FluxEngine.cydsn/main.c | 21 ++++++++++++- README.md | 17 +++++++---- lib/dataspec.cc | 9 ++++-- lib/dataspec.h | 6 ++-- lib/reader.cc | 4 ++- lib/reader.h | 1 + lib/usb.cc | 12 ++++++++ lib/usb.h | 1 + protocol.h | 8 +++++ src/fe-rpm.cc | 7 +++++ tests/dataspec.cc | 24 +++++++-------- 13 files changed, 119 insertions(+), 24 deletions(-) diff --git a/FluxEngine.cydsn/FluxEngine.cyprj b/FluxEngine.cydsn/FluxEngine.cyprj index 01001edf..b8ee41a1 100644 --- a/FluxEngine.cydsn/FluxEngine.cyprj +++ b/FluxEngine.cydsn/FluxEngine.cyprj @@ -2900,6 +2900,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FluxEngine.cydsn/TopDesign/TopDesign.cysch b/FluxEngine.cydsn/TopDesign/TopDesign.cysch index a51f5e3b0849e14d7fd051e3423408d15791dbd7..af79d890c4dcec216817279a0e54a70b81bb5700 100644 GIT binary patch literal 204372 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 literal 198771 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 W;IVD7mV@x&4=enM6g=1GApQfgNGa?9 diff --git a/FluxEngine.cydsn/main.c b/FluxEngine.cydsn/main.c index 37e3353d..161fd778 100644 --- a/FluxEngine.cydsn/main.c +++ b/FluxEngine.cydsn/main.c @@ -6,7 +6,7 @@ #include "../protocol.h" #define MOTOR_ON_TIME 5000 /* milliseconds */ -#define STEP_INTERVAL_TIME 3 /* ms */ +#define STEP_INTERVAL_TIME 6 /* ms */ #define STEP_SETTLING_TIME 40 /* ms */ #define DISKSTATUS_WPT 1 @@ -22,6 +22,7 @@ static bool motor_on = false; static uint32_t motor_on_time = 0; static bool homed = false; static int current_track = 0; +static int current_drive = 0; #define BUFFER_COUNT 16 #define BUFFER_SIZE 64 @@ -540,6 +541,19 @@ static void cmd_erase(struct erase_frame* f) send_reply((struct any_frame*) &r); } +static void cmd_set_drive(struct set_drive_frame* f) +{ + if (current_drive != f->drive) + { + current_drive = f->drive; + DRIVE_REG_Write(current_drive); + homed = false; + } + + DECLARE_REPLY_FRAME(struct any_frame, F_FRAME_SET_DRIVE_REPLY); + send_reply((struct any_frame*) &r); +} + static void handle_command(void) { static uint8_t input_buffer[FRAME_SIZE]; @@ -580,6 +594,10 @@ static void handle_command(void) cmd_recalibrate(); break; + case F_FRAME_SET_DRIVE_CMD: + cmd_set_drive((struct set_drive_frame*) f); + break; + default: send_error(F_ERROR_BAD_COMMAND); } @@ -594,6 +612,7 @@ int main(void) CAPTURE_DMA_FINISHED_IRQ_StartEx(&capture_dma_finished_irq_cb); REPLAY_DMA_FINISHED_IRQ_StartEx(&replay_dma_finished_irq_cb); CAPTURE_COUNTER_Start(); + DRIVE_REG_Write(0); /* UART_Start(); */ USBFS_Start(0, USBFS_DWR_VDDD_OPERATION); diff --git a/README.md b/README.md index b18b4e97..61c24560 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,12 @@ in software. It doesn't rely on any floppy disk controller to interpret the pulsetrain, so we can be a lot cleverer. In fact, the disk doesn't even have to be spinning at the same speed. +**Q.** Does it work on 5.25" drives? + +**A.** Yes! Although PC 5.25" drives spin at 360 RPM rather than 300 RPM, +which means there's only 166ms of data on one per track rather than 200ms; +if you try to write a 3.5" format disk onto one it probably won't work. + **Q.** That's awesome! What formats does it support? **A.** I'm glad you asked the question. Not a lot, currently. @@ -91,9 +97,7 @@ Here's the physical stuff you need. - one (1) standard PC floppy disk drive. You'll have to search around as they're increasingly hard to find. The FluxEngine should work with any - standard 3.5" drive. It's theoretically capable of supporting 5.25" - drives too but I'd need to modify the firmware timings. If you want this, - [get in touch](https://github.com/davidgiven/fluxengine/issues/new). + standard 3.5" or 5.25" drive. - some way of connecting the board to your drive. My prototype above uses a set of headers to let me attach the board directly on the back of the @@ -297,9 +301,10 @@ Commands which take `--source` or `--dest` take a parameter of the syntax disk; otherwise, you can specify a `.flux` file. The colon-separated modifiers limit which bits of the disk are accessed. To specify tracks, do `:t=0-9` (or just `:t=7`). For sides, do `:s=0-1` (or commonly just `:s=0`). -If left unspecified, you get the default specified by the command, which will -vary depending on which disk format you're using (and is usually the right -one). +If you have two drives, do `:d=1` (but bear in mind that you need to specify +exactly one drive; ranges won't work). If left unspecified, you get the +default specified by the command, which will vary depending on which disk +format you're using (and is usually the right one). ### How it works diff --git a/lib/dataspec.cc b/lib/dataspec.cc index 3ce8af17..979ec5b4 100644 --- a/lib/dataspec.cc +++ b/lib/dataspec.cc @@ -79,17 +79,22 @@ void DataSpec::set(const std::string& spec) for (size_t i = 1; i < words.size(); i++) { auto mod = parseMod(words[i]); - if ((mod.name != "t") && (mod.name != "s")) + if ((mod.name != "t") && (mod.name != "s") && (mod.name != "d")) Error() << fmt::format("unknown data modifier '{}'", mod.name); modifiers[mod.name] = mod; } + const auto& drives = modifiers["d"].data; + if (drives.size() != 1) + Error() << "you must specify exactly one drive"; + drive = *drives.begin(); + const auto& tracks = modifiers["t"].data; const auto& sides = modifiers["s"].data; for (auto track : tracks) { for (auto side : sides) - locations.push_back({ track, side }); + locations.push_back({ drive, track, side }); } } } diff --git a/lib/dataspec.h b/lib/dataspec.h index 7b084a8b..522a6ef4 100644 --- a/lib/dataspec.h +++ b/lib/dataspec.h @@ -6,14 +6,15 @@ class DataSpec public: struct Location { + unsigned drive; unsigned track; unsigned side; bool operator == (const Location& other) const - { return (track == other.track) && (side == other.side); } + { return (drive == other.drive) && (track == other.track) && (side == other.side); } bool operator != (const Location& other) const - { return (track != other.track) || (side != other.side); } + { return (drive != other.drive) || (track != other.track) || (side != other.side); } }; struct Modifier @@ -44,6 +45,7 @@ public: std::string filename; std::map modifiers; std::vector locations; + unsigned drive; }; std::ostream& operator << (std::ostream& os, const DataSpec& dataSpec) diff --git a/lib/reader.cc b/lib/reader.cc index a7140c25..55b25368 100644 --- a/lib/reader.cc +++ b/lib/reader.cc @@ -15,7 +15,7 @@ static DataSpecFlag source( { "--source", "-s" }, "source for data", - ":t=0-79:s=0-1"); + ":t=0-79:s=0-1:d=0"); static StringFlag destination( { "--write-flux", "-f" }, @@ -63,6 +63,7 @@ std::unique_ptr ReaderTrack::read() std::unique_ptr CapturedReaderTrack::reallyRead() { + usbSetDrive(drive); usbSeek(track); return usbRead(side, revolutions); } @@ -104,6 +105,7 @@ std::vector> readTracks() dataSpec.filename.empty() ? (ReaderTrack*)new CapturedReaderTrack() : (ReaderTrack*)new FileReaderTrack()); + t->drive = location.drive; t->track = location.track; t->side = location.side; tracks.push_back(std::move(t)); diff --git a/lib/reader.h b/lib/reader.h index 39802663..038a54b1 100644 --- a/lib/reader.h +++ b/lib/reader.h @@ -10,6 +10,7 @@ class ReaderTrack public: virtual ~ReaderTrack() {} + int drive; int track; int side; diff --git a/lib/usb.cc b/lib/usb.cc index a6cb6e1c..f16a77fe 100644 --- a/lib/usb.cc +++ b/lib/usb.cc @@ -244,3 +244,15 @@ void usbErase(int side) await_reply(F_FRAME_ERASE_REPLY); } +void usbSetDrive(int drive) +{ + usb_init(); + + struct set_drive_frame f = { + { .type = F_FRAME_SET_DRIVE_CMD, .size = sizeof(f) }, + .drive = (uint8_t) drive + }; + usb_cmd_send(&f, f.f.size); + await_reply(F_FRAME_SET_DRIVE_REPLY); +} + diff --git a/lib/usb.h b/lib/usb.h index e165a355..6a4653c3 100644 --- a/lib/usb.h +++ b/lib/usb.h @@ -11,5 +11,6 @@ extern void usbTestBulkTransport(); extern std::unique_ptr usbRead(int side, int revolutions); extern void usbWrite(int side, const Fluxmap& fluxmap); extern void usbErase(int side); +extern void usbSetDrive(int drive); #endif diff --git a/protocol.h b/protocol.h index c5283a62..3eb6df42 100644 --- a/protocol.h +++ b/protocol.h @@ -56,6 +56,8 @@ enum F_FRAME_ERASE_REPLY, /* any_frame */ F_FRAME_RECALIBRATE_CMD, /* any_frame */ F_FRAME_RECALIBRATE_REPLY, /* any_frame */ + F_FRAME_SET_DRIVE_CMD, /* setdrive_frame */ + F_FRAME_SET_DRIVE_REPLY, /* any_frame */ }; enum @@ -121,4 +123,10 @@ struct erase_frame uint8_t side; }; +struct set_drive_frame +{ + struct frame_header f; + uint8_t drive; +}; + #endif diff --git a/src/fe-rpm.cc b/src/fe-rpm.cc index a8a695f1..bccaa0a1 100644 --- a/src/fe-rpm.cc +++ b/src/fe-rpm.cc @@ -1,11 +1,18 @@ #include "globals.h" #include "flags.h" #include "usb.h" +#include "dataspec.h" + +static DataSpecFlag source( + { "--source", "-s" }, + "source for data", + ":d=0"); int main(int argc, const char* argv[]) { Flag::parseFlags(argc, argv); + usbSetDrive(source.value.drive); nanoseconds_t period = usbGetRotationalPeriod(); std::cout << "Rotational period is " << period/1000 << " ms (" << 60e6/period << " rpm)" << std::endl; diff --git a/tests/dataspec.cc b/tests/dataspec.cc index d76bb5ee..3a85a838 100644 --- a/tests/dataspec.cc +++ b/tests/dataspec.cc @@ -35,40 +35,40 @@ static void test_parsemod(void) static void test_dataspec(void) { - DataSpec spec("foo:t=0-2:s=0-1"); + DataSpec spec("foo:t=0-2:s=0-1:d=0"); assert(spec.filename == "foo"); assert((spec.locations == std::vector - {{0, 0}, {0, 1}, {1, 0}, {1, 1}, {2, 0}, {2, 1}})); - assert((std::string)spec == "foo:s=0-1:t=0-2"); + {{0, 0, 0}, {0, 0, 1}, {0, 1, 0}, {0, 1, 1}, {0, 2, 0}, {0, 2, 1}})); + assert((std::string)spec == "foo:d=0:s=0-1:t=0-2"); spec.set("bar"); assert(spec.filename == "bar"); assert((spec.locations == std::vector - {{0, 0}, {0, 1}, {1, 0}, {1, 1}, {2, 0}, {2, 1}})); - assert((std::string)spec == "bar:s=0-1:t=0-2"); + {{0, 0, 0}, {0, 0, 1}, {0, 1, 0}, {0, 1, 1}, {0, 2, 0}, {0, 2, 1}})); + assert((std::string)spec == "bar:d=0:s=0-1:t=0-2"); spec.set(":t=0"); assert(spec.filename.empty()); assert((spec.locations == std::vector - {{0, 0}, {0, 1}})); - assert((std::string)spec == ":s=0-1:t=0"); + {{0, 0, 0}, {0, 0, 1}})); + assert((std::string)spec == ":d=0:s=0-1:t=0"); spec.set(":s=1"); assert(spec.filename.empty()); assert((spec.locations == std::vector - {{0, 1}})); - assert((std::string)spec == ":s=1:t=0"); + {{0, 0, 1}})); + assert((std::string)spec == ":d=0:s=1:t=0"); - spec.set(":t=9"); + spec.set(":t=9:d=1"); assert(spec.filename.empty()); assert((spec.locations == std::vector - {{9, 1}})); - assert((std::string)spec == ":s=1:t=9"); + {{1, 9, 1}})); + assert((std::string)spec == ":d=1:s=1:t=9"); } int main(int argc, const char* argv[])