mirror of
https://github.com/davidgiven/fluxengine.git
synced 2025-10-31 11:17:01 -07:00
Spell (and capitalise) Greaseweazle correctly.
This commit is contained in:
@@ -35,11 +35,11 @@ Don't believe me? Watch the demo reel!
|
||||
</div>
|
||||
|
||||
**New!** The FluxEngine client software now works with
|
||||
[GreaseWeazle](https://github.com/keirf/Greaseweazle/wiki) hardware. So, if you
|
||||
[Greaseweazle](https://github.com/keirf/Greaseweazle/wiki) hardware. So, if you
|
||||
can't find a PSoC5 development kit, or don't want to use the Cypress Windows
|
||||
tools for programming it, you can use one of these instead. Very nearly all
|
||||
FluxEngine features are available with the GreaseWeazle and it works out-of-the
|
||||
box. See the [dedicated GreaseWeazle documentation page](doc/greaseweazle.md)
|
||||
FluxEngine features are available with the Greaseweazle and it works out-of-the
|
||||
box. See the [dedicated Greaseweazle documentation page](doc/greaseweazle.md)
|
||||
for more information.
|
||||
|
||||
Where?
|
||||
@@ -65,7 +65,7 @@ following friendly articles:
|
||||
- [Using a FluxEngine](doc/using.md) ∾ what to do with your new hardware ∾
|
||||
flux files and image files ∾ knowing what you're doing
|
||||
|
||||
- [Using GreaseWeazle hardware with the FluxEngine client
|
||||
- [Using Greaseweazle hardware with the FluxEngine client
|
||||
software](doc/greaseweazle.md) ∾ what works ∾ what doesn't work ∾ where to
|
||||
go for help
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ done by adding the special profile `40track_drive`:
|
||||
fluxengine write ibm360 40track_drive -i image.img -d drive:0
|
||||
```
|
||||
|
||||
It should then Just Work. This is supported by both FluxEngine and GreaseWeazle
|
||||
It should then Just Work. This is supported by both FluxEngine and Greaseweazle
|
||||
hardware.
|
||||
|
||||
Obviously you can't write an eighty-track format using a forty-track drive!
|
||||
@@ -63,7 +63,7 @@ The FluxEngine client supports these with the `apple2_drive` profile:
|
||||
fluxengine write apple2 apple2_drive -i image.img -d drive:0
|
||||
```
|
||||
|
||||
This is supported only by GreaseWeazle hardware.
|
||||
This is supported only by Greaseweazle hardware.
|
||||
|
||||
Shugart drives
|
||||
--------------
|
||||
@@ -86,5 +86,5 @@ fluxengine write atarist720 shugart_drive -i image.img -d drive:0
|
||||
(If you have a 40-track Shugart drive, use _both_ `shugart_drive` and
|
||||
`40track_drive`.)
|
||||
|
||||
This is supported only by GreaseWeazle hardware.
|
||||
This is supported only by Greaseweazle hardware.
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
Using the FluxEngine client software with GreaseWeazle hardware
|
||||
Using the FluxEngine client software with Greaseweazle hardware
|
||||
===============================================================
|
||||
|
||||
The FluxEngine isn't the only project which does this; another one is the
|
||||
[GreaseWeazle](https://github.com/keirf/Greaseweazle/wiki), a Blue Pill based
|
||||
[Greaseweazle](https://github.com/keirf/Greaseweazle/wiki), a Blue Pill based
|
||||
completely open source solution. This requires more work to set up (or you can
|
||||
buy a prebuilt GreaseWeazle board), but provides completely open source
|
||||
buy a prebuilt Greaseweazle board), but provides completely open source
|
||||
hardware which doesn't require the use of the Cypress Windows-based tools that
|
||||
the FluxEngine does. Luckily, the FluxEngine software supports it almost
|
||||
out-of-the-box --- just plug it in and nearly everything should work. The
|
||||
@@ -16,10 +16,10 @@ FluxEngine makes things complicated when you're not using the FluxEngine client
|
||||
software with a FluxEngine board, but I'm afraid it's too late to change that
|
||||
now. Sorry.
|
||||
|
||||
**If you are using GreaseWeazle-compatible hardware** such as the
|
||||
**If you are using Greaseweazle-compatible hardware** such as the
|
||||
[adafruit-floppy](https://github.com/adafruit/Adafruit_Floppy) project, then
|
||||
FluxEngine will still work; however, as the USB VID/PID won't be that of a real
|
||||
GreaseWeazle, the the FluxEngine client can't autodetect it. Instead, you'll
|
||||
Greaseweazle, the the FluxEngine client can't autodetect it. Instead, you'll
|
||||
need to specify the serial port manually with something like
|
||||
`--usb.greaseweazle.port=/dev/ttyACM0` or `--usb.greaseweazle.port=COM5`.
|
||||
|
||||
@@ -32,7 +32,7 @@ Driver box says `WinUSB` and the right one says `USB Serial (CDC)`. Then press
|
||||
What works
|
||||
----------
|
||||
|
||||
Supported features with the GreaseWeazle include:
|
||||
Supported features with the Greaseweazle include:
|
||||
|
||||
- simple reading and writing of disks, seeking etc
|
||||
- erasing disks
|
||||
@@ -59,12 +59,12 @@ Who to contact
|
||||
--------------
|
||||
|
||||
I want to make it clear that the FluxEngine code is _not_ supported by the
|
||||
GreaseWeazle team. If you have any problems, please [contact
|
||||
Greaseweazle team. If you have any problems, please [contact
|
||||
me](https://github.com/davidgiven/fluxengine/issues/new) and not them.
|
||||
|
||||
In addition, the GreaseWeazle release cycle is not synchronised to the
|
||||
In addition, the Greaseweazle release cycle is not synchronised to the
|
||||
FluxEngine release cycle, so it's possible you'll have a version of the
|
||||
GreaseWeazle firmware which is not supported by FluxEngine. Hopefully, it'll
|
||||
Greaseweazle firmware which is not supported by FluxEngine. Hopefully, it'll
|
||||
detect this and complain. Again, [file an
|
||||
issue](https://github.com/davidgiven/fluxengine/issues/new) and I'll look into
|
||||
it.
|
||||
|
||||
@@ -80,11 +80,11 @@ as you need an adapter cable or board, but this will allow you to replicate the
|
||||
FluxEngine hardware on a $2 Blue Pill.
|
||||
|
||||
I am _not_ planning on replacing the PSoC5 with a Blue Pill, because someone
|
||||
already has: [the GreaseWeazle](https://github.com/keirf/Greaseweazle/wiki) is
|
||||
already has: [the Greaseweazle](https://github.com/keirf/Greaseweazle/wiki) is
|
||||
a completely open source firmware package which will read and write Supercard
|
||||
Pro files via a standard Blue Pill or via a prebuilt board. It's supported by
|
||||
the FluxEngine client software, and you should, mostly, be able to use
|
||||
GreaseWeazle hardware interchangeably with FluxEngine hardware. See the
|
||||
Greaseweazle hardware interchangeably with FluxEngine hardware. See the
|
||||
[dedicated page](greaseweazle.md) for more information.
|
||||
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ file while changing the decoder options, to save disk wear. It's also much faste
|
||||
|
||||
### Connecting it up
|
||||
|
||||
To use, simply plug your FluxEngine (or [GreaseWeazle](greaseweazle.md)) into
|
||||
To use, simply plug your FluxEngine (or [Greaseweazle](greaseweazle.md)) into
|
||||
your computer and run the client. If a single device is plugged in, it will be
|
||||
automatically detected and used.
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#include "bytes.h"
|
||||
#include "greaseweazle.h"
|
||||
|
||||
Bytes fluxEngineToGreaseWeazle(const Bytes& fldata, nanoseconds_t clock)
|
||||
Bytes fluxEngineToGreaseweazle(const Bytes& fldata, nanoseconds_t clock)
|
||||
{
|
||||
Bytes gwdata;
|
||||
ByteWriter bw(gwdata);
|
||||
@@ -89,7 +89,7 @@ Bytes greaseWeazleToFluxEngine(const Bytes& gwdata, nanoseconds_t clock)
|
||||
break;
|
||||
|
||||
default:
|
||||
error("bad opcode in GreaseWeazle stream");
|
||||
error("bad opcode in Greaseweazle stream");
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
#define EP_OUT 0x02
|
||||
#define EP_IN 0x83
|
||||
|
||||
extern Bytes fluxEngineToGreaseWeazle(const Bytes& fldata, nanoseconds_t clock);
|
||||
extern Bytes fluxEngineToGreaseweazle(const Bytes& fldata, nanoseconds_t clock);
|
||||
extern Bytes greaseWeazleToFluxEngine(const Bytes& gwdata, nanoseconds_t clock);
|
||||
extern Bytes stripPartialRotation(const Bytes& fldata);
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ static uint32_t ss_rand_next(uint32_t x)
|
||||
return (x & 1) ? (x >> 1) ^ 0x80000062 : x >> 1;
|
||||
}
|
||||
|
||||
class GreaseWeazleUsb : public USB
|
||||
class GreaseweazleUsb : public USB
|
||||
{
|
||||
private:
|
||||
uint32_t read_28()
|
||||
@@ -72,11 +72,11 @@ private:
|
||||
command[0],
|
||||
buffer[1]);
|
||||
if (buffer[1])
|
||||
error("GreaseWeazle error: {}", gw_error(buffer[1]));
|
||||
error("Greaseweazle error: {}", gw_error(buffer[1]));
|
||||
}
|
||||
|
||||
public:
|
||||
GreaseWeazleUsb(const std::string& port, const GreaseWeazleProto& config):
|
||||
GreaseweazleUsb(const std::string& port, const GreaseweazleProto& config):
|
||||
_serial(SerialPort::openSerialPort(port)),
|
||||
_config(config)
|
||||
{
|
||||
@@ -90,7 +90,7 @@ public:
|
||||
else
|
||||
{
|
||||
error(
|
||||
"only GreaseWeazle firmware versions 22 and 24 or above are "
|
||||
"only Greaseweazle firmware versions 22 and 24 or above are "
|
||||
"currently "
|
||||
"supported, but you have version {}. Please file a bug.",
|
||||
version);
|
||||
@@ -129,9 +129,9 @@ public:
|
||||
nanoseconds_t getRotationalPeriod(int hardSectorCount)
|
||||
{
|
||||
if (hardSectorCount != 0)
|
||||
error("hard sectors are currently unsupported on the GreaseWeazel");
|
||||
error("hard sectors are currently unsupported on the Greaseweazle");
|
||||
|
||||
/* The GreaseWeazle doesn't have a command to fetch the period directly,
|
||||
/* The Greaseweazle doesn't have a command to fetch the period directly,
|
||||
* so we have to do a flux read. */
|
||||
|
||||
switch (_version)
|
||||
@@ -181,7 +181,7 @@ public:
|
||||
break;
|
||||
|
||||
default:
|
||||
error("bad opcode in GreaseWeazle stream");
|
||||
error("bad opcode in Greaseweazle stream");
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -304,7 +304,7 @@ public:
|
||||
nanoseconds_t hardSectorThreshold)
|
||||
{
|
||||
if (hardSectorThreshold != 0)
|
||||
error("hard sectors are currently unsupported on the GreaseWeazel");
|
||||
error("hard sectors are currently unsupported on the Greaseweazle");
|
||||
|
||||
do_command({CMD_HEAD, 3, (uint8_t)side});
|
||||
|
||||
@@ -357,7 +357,7 @@ public:
|
||||
void write(int side, const Bytes& fldata, nanoseconds_t hardSectorThreshold)
|
||||
{
|
||||
if (hardSectorThreshold != 0)
|
||||
error("hard sectors are currently unsupported on the GreaseWeazel");
|
||||
error("hard sectors are currently unsupported on the Greaseweazle");
|
||||
|
||||
do_command({CMD_HEAD, 3, (uint8_t)side});
|
||||
switch (_version)
|
||||
@@ -371,7 +371,7 @@ public:
|
||||
do_command({CMD_WRITE_FLUX, 4, 1, 1});
|
||||
break;
|
||||
}
|
||||
_serial->write(fluxEngineToGreaseWeazle(fldata, _clock));
|
||||
_serial->write(fluxEngineToGreaseweazle(fldata, _clock));
|
||||
_serial->readByte(); /* synchronise */
|
||||
|
||||
do_command({CMD_GET_FLUX_STATUS, 2});
|
||||
@@ -380,7 +380,7 @@ public:
|
||||
void erase(int side, nanoseconds_t hardSectorThreshold)
|
||||
{
|
||||
if (hardSectorThreshold != 0)
|
||||
error("hard sectors are currently unsupported on the GreaseWeazel");
|
||||
error("hard sectors are currently unsupported on the Greaseweazle");
|
||||
|
||||
do_command({CMD_HEAD, 3, (uint8_t)side});
|
||||
|
||||
@@ -404,7 +404,7 @@ public:
|
||||
|
||||
void measureVoltages(struct voltages_frame* voltages)
|
||||
{
|
||||
error("unsupported operation on the GreaseWeazle");
|
||||
error("unsupported operation on the Greaseweazle");
|
||||
}
|
||||
|
||||
private:
|
||||
@@ -416,16 +416,16 @@ private:
|
||||
};
|
||||
|
||||
std::unique_ptr<SerialPort> _serial;
|
||||
const GreaseWeazleProto& _config;
|
||||
const GreaseweazleProto& _config;
|
||||
int _version;
|
||||
nanoseconds_t _clock;
|
||||
nanoseconds_t _revolutions;
|
||||
};
|
||||
|
||||
USB* createGreaseWeazleUsb(
|
||||
const std::string& port, const GreaseWeazleProto& config)
|
||||
USB* createGreaseweazleUsb(
|
||||
const std::string& port, const GreaseweazleProto& config)
|
||||
{
|
||||
return new GreaseWeazleUsb(port, config);
|
||||
return new GreaseweazleUsb(port, config);
|
||||
}
|
||||
|
||||
// vim: sw=4 ts=4 et
|
||||
|
||||
@@ -52,7 +52,7 @@ static std::shared_ptr<CandidateDevice> selectDevice()
|
||||
|
||||
case GREASEWEAZLE_ID:
|
||||
std::cerr << fmt::format(
|
||||
"GreaseWeazle: {} on {}\n", c->serial, c->serialPort);
|
||||
"Greaseweazle: {} on {}\n", c->serial, c->serialPort);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -67,8 +67,8 @@ USB* get_usb_impl()
|
||||
globalConfig()->usb().greaseweazle().has_port())
|
||||
{
|
||||
const auto& conf = globalConfig()->usb().greaseweazle();
|
||||
log("Using GreaseWeazle on serial port {}", conf.port());
|
||||
return createGreaseWeazleUsb(conf.port(), conf);
|
||||
log("Using Greaseweazle on serial port {}", conf.port());
|
||||
return createGreaseweazleUsb(conf.port(), conf);
|
||||
}
|
||||
|
||||
/* Otherwise, select a device by USB ID. */
|
||||
@@ -81,10 +81,10 @@ USB* get_usb_impl()
|
||||
return createFluxengineUsb(candidate->device);
|
||||
|
||||
case GREASEWEAZLE_ID:
|
||||
log("Using GreaseWeazle {} on {}",
|
||||
log("Using Greaseweazle {} on {}",
|
||||
candidate->serial,
|
||||
candidate->serialPort);
|
||||
return createGreaseWeazleUsb(
|
||||
return createGreaseweazleUsb(
|
||||
candidate->serialPort, globalConfig()->usb().greaseweazle());
|
||||
|
||||
default:
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#include "flags.h"
|
||||
|
||||
class Fluxmap;
|
||||
class GreaseWeazleProto;
|
||||
class GreaseweazleProto;
|
||||
namespace libusbp
|
||||
{
|
||||
class device;
|
||||
@@ -39,8 +39,8 @@ protected:
|
||||
extern USB& getUsb();
|
||||
|
||||
extern USB* createFluxengineUsb(libusbp::device& device);
|
||||
extern USB* createGreaseWeazleUsb(
|
||||
const std::string& serialPort, const GreaseWeazleProto& config);
|
||||
extern USB* createGreaseweazleUsb(
|
||||
const std::string& serialPort, const GreaseweazleProto& config);
|
||||
|
||||
static inline int usbGetVersion()
|
||||
{
|
||||
|
||||
@@ -2,7 +2,7 @@ syntax = "proto2";
|
||||
|
||||
import "lib/common.proto";
|
||||
|
||||
message GreaseWeazleProto {
|
||||
message GreaseweazleProto {
|
||||
enum BusType { /* note that these must match CMD_SET_BUS codes */
|
||||
BUSTYPE_INVALID = 0;
|
||||
IBMPC = 1;
|
||||
@@ -11,14 +11,14 @@ message GreaseWeazleProto {
|
||||
};
|
||||
|
||||
optional string port = 1
|
||||
[(help) = "GreaseWeazle serial port to use"];
|
||||
[(help) = "Greaseweazle serial port to use"];
|
||||
optional BusType bus_type = 2
|
||||
[(help) = "which FDD bus type is in use", default = IBMPC];
|
||||
}
|
||||
|
||||
message UsbProto {
|
||||
optional string serial = 1
|
||||
[(help) = "serial number of FluxEngine or GreaseWeazle device to use"];
|
||||
[(help) = "serial number of FluxEngine or Greaseweazle device to use"];
|
||||
|
||||
optional GreaseWeazleProto greaseweazle = 2 [(help) = "GreaseWeazle-specific options"];
|
||||
optional GreaseweazleProto greaseweazle = 2 [(help) = "Greaseweazle-specific options"];
|
||||
}
|
||||
|
||||
@@ -12,12 +12,12 @@
|
||||
static void test_convert(const Bytes& gwbytes, const Bytes& flbytes)
|
||||
{
|
||||
Bytes gwtoflbytes = greaseWeazleToFluxEngine(gwbytes, 2 * NS_PER_TICK);
|
||||
Bytes fltogwbytes = fluxEngineToGreaseWeazle(flbytes, 2 * NS_PER_TICK);
|
||||
Bytes fltogwbytes = fluxEngineToGreaseweazle(flbytes, 2 * NS_PER_TICK);
|
||||
|
||||
if (gwtoflbytes != flbytes)
|
||||
{
|
||||
std::cout << "GreaseWeazle to FluxEngine conversion failed.\n";
|
||||
std::cout << "GreaseWeazle bytes:" << std::endl;
|
||||
std::cout << "Greaseweazle to FluxEngine conversion failed.\n";
|
||||
std::cout << "Greaseweazle bytes:" << std::endl;
|
||||
hexdump(std::cout, gwbytes);
|
||||
std::cout << std::endl << "Produced this:" << std::endl;
|
||||
hexdump(std::cout, gwtoflbytes);
|
||||
@@ -28,7 +28,7 @@ static void test_convert(const Bytes& gwbytes, const Bytes& flbytes)
|
||||
|
||||
if (fltogwbytes != gwbytes)
|
||||
{
|
||||
std::cout << "FluxEngine to GreaseWeazle conversion failed.\n";
|
||||
std::cout << "FluxEngine to Greaseweazle conversion failed.\n";
|
||||
std::cout << "FluxEngine bytes:" << std::endl;
|
||||
hexdump(std::cout, flbytes);
|
||||
std::cout << std::endl << "Produced this:" << std::endl;
|
||||
|
||||
Reference in New Issue
Block a user