keirf / greaseweazle

Tools for accessing a floppy drive at the raw flux level
The Unlicense
987 stars 99 forks source link

Custom connector for Apple Disk II drives? #507

Closed powerlot closed 1 day ago

powerlot commented 3 days ago

Hi greaseweazle devs and @davidgiven

Apparently it's possible to use fluxengine with Apple II drives and GW hardware, but a connector is needed. I can't find any diagram for this and would like to try it.

https://github.com/davidgiven/fluxengine/blob/master/doc/disk-apple2_drive.md

Thanks for any hints

keirf commented 3 days ago

I'm not sure about this. Apple 2 drive support was implemented by a device made by Adafruit which identifies as Greaseweazle but isn't a bona fide Greaseweazle.

davidgiven commented 2 days ago

I wasn't aware of that --- I thought it was an official Greaseweazle thing!

I'm not even sure who asked for this support originally. I don't think it was LadyAda. It's the only thing which uses the FluxEngine microstepping support so it's likely to be very fragile. Hardware-wise, it would only really make sense if the Greaseweazle or clone you're using supports multiphase drive control, which I'm guessing the official ones don't.

keirf commented 2 days ago

Microstepping would be a great feature to have but it's not supported currently and nor is any other sort of direct phase control. Iirc this was requested/implemented in FluxEngine on request of someone working with Adafruit, and the only patch in Greaseweazle "proper" is to reserve a floppy bus id (alongside ibmpc and shugart). Does anyone actually use this feature I wonder, given it needs non standard hardware of some kind.

EDIT: I also wonder whether it's really all that interesting to use these old direct-control drives except perhaps to access quarter tracks.

powerlot commented 2 days ago

Thanks for your inputs. I gather the Adafruit flux reader supports this with the FluxEngine software, but it's currently not possible with a Greaseweazle?

I believe any sort of additional control over a drive would be beneficial for a flux reader, but also understand it's kind of an edge case.

@jepler according to these videos

https://www.youtube.com/watch?v=YU6eMyiT2TM&list=PLjF7R1fz_OOWexf2WmY8cgM65ltPaAvyT&index=3

an image is written using PC 5.25" drive, is this modded or how does it handle flippy disks? In the video after above linked one, the Apple Disk II is directly accessed by the Adafruit floppy reader. Are there any connection diagrams available or is it still experimental?

jepler commented 2 days ago

In that video you directly linked, I was using a standard IBM PC drive to write the top side (only) of a 5.25 DS DD floppy. The software running on the computer was fluxengine, and the Adafruit hardware was running our greaseweazle-compatible firmware, which lives inside the open source Adafruit Floppy library for Arduino

The hardware used is the Adafruit Feather RP2040 and the Adafruit Floppy Featherwing

Doing the second side of flippy disks (either to read or write) requires a modification to bring out a fake index signal for fluxengine. I detailed how to do this in reversible fashion for a particular PC drive in a guide published on the Adafruit Learn System.

The other video I think you meant is this one. This hardware is not published (it was a hand-wired 20-pin header on a feather doubler used as a prototyping area), and it requires a reversible modification to the Disk ][ drive as well, to create a once-per-revolution output. I'd check out the documentation of Applesauce for more info about the revolution sensor modification, I think they're who I followed.

The software side is also in the Adafruit Floppy library for Arduino, it's mostly just a different pinout. You also need +5, +12 and -12V supplies on the ribbon cable, and of course hooking it up wrong will damage the ICs in the drive immediately.

Adafruit is still working on a dedicated floppy archiving board, called Floppsy. This is ongoing, @ladyada has shown it on some recent streams, and the current version includes a -12V power supply, 20-pin header, and a connector for a revolution sensor with the hope that this'll work with Disk ][. However, this hardware is not yet available for sale or as an open hardware design and has no ETA.

jepler commented 2 days ago

And writing the second side also requires bypassing a PC floppy's write protect sensor; I didn't ever do this yet.

powerlot commented 1 day ago

It's starting to make sense now. I guess this is the pinout, in addition to the power supply?

https://github.com/adafruit/Adafruit_Floppy/blob/main/examples/apple2_test/apple2_test.ino#L12-L20

And this is the mentioned sync sensor?

https://applesaucefdc.com/hardware/all-about-sync-sensors/

I'll try to go from here, if I have further questions I'll open an issue in the Adafruit floppy repo.

Thanks for your inputs everyone

davidgiven commented 1 day ago

Let me know if you get it working and I'll update the FluxEngine docs.

jepler commented 1 day ago

This block in greaseweazle.ino is the pinout I used. Contrary to what the docs say I don't think this mode can work with a genuine greaseweazle.

#if defined (ARDUINO_ADAFRUIT_FEATHER_RP2040)
// jepler's prototype board, subject to change
#define APPLE2_PHASE1_PIN (A2)        // IDC 2
#define APPLE2_PHASE2_PIN (13)        // IDC 4
#define APPLE2_PHASE3_PIN (12)        // IDC 6
#define APPLE2_PHASE4_PIN (11)        // IDC 8
#define APPLE2_WRGATE_PIN (10)        // IDC 10
#define APPLE2_ENABLE_PIN (8)  // D6  // IDC 14
#define APPLE2_RDDATA_PIN (7)  // D5  // IDC 16
#define APPLE2_WRDATA_PIN (3)  // SCL // IDC 18
#define APPLE2_PROTECT_PIN (2) // SDA // IDC 20
#define APPLE2_INDEX_PIN  (A3)
#endif

We haven't tested the functionality yet, but the current revision of Floppsy is mapping side, step, direction & motor pins to the motor phase pins: image