ADF-Copy

ADF-Copy ist eine kleine Hardware bestehend aus einem Teensy 3.2 und einem üblichen PC 3,5″ Floppylaufwerk und einem Frontend geschrieben in Processing 3.x was in der Lage ist Amiga Disketten auszulesen und als ADF Datei zu speichern, als auch eine ADF Datei auf Diskette zu schreiben die in einem original Amiga lesbar ist.

Die Hardware ist recht einfach gestrickt und kommt mit möglichst wenigen Bauteilen aus so das man diese auch schnell auf einem Steckbrett aufbauen kann.
Mittlerweile hab ich das Pinout revidiert um einfacher eine Platine dazu zu erstellen, von der Firmware wird erkannt ob es das neue oder alte Pinout ist.

pinout_v2Pinout_small

So sah der erste Aufbau auf einem Steckbrett aus und daneben die aktuelle Platine.
adf_02v4_2
Wichtig ist das der Teensy eine Version 3.2 ist, da nur dieser 5V tolerant ist, dadurch brauchte ich keine zusätzlichen Bauteile um die Spannungspegel anzupassen. Ebenso sollte die Spannungsversorgung des Floppy Laufwerks stabil sein, da der kleine Schrittmotor im Laufwerk so um die 700mAh bei jedem Schritt zieht was schnell zu Schwankungen führen kann und das Laufwerk nimmt dann gerne mal einen Schritt Rückwärts statt vorwärts. Inzwischen hab ich das Problem mit einem Pufferkondensator in den Griff bekommen und man kann die Stromversorgung über einen zweiten USB Stecker zum Rechner machen.

Der Teensy kommuniziert mit dem PC über USB Seriell.

Das Frontend hab ich mit Processing 3.2 geschrieben, Processing basiert auf JAVA und stellt ein Framework zur entwickling zur Verfügung, für das Grafische Interface benutze ich die G4P Library. Die Applikation habe ich mittlerweile auf Linux und den Raspberry Pi portiert, bzw. eine .jar Datei gebundelt die auf allen Systemen läuft.

So sieht das Frontend im Moment aus, folgende Funktionen sind implementiert:app_967

Read Volumename: liest den Namen der Diskette aus, falls die Diskette ein direkt Bootbares Spiel mit eigenem Diskformat (ohne Kopierschutz) ist wird „NDOS“ angezeigt.

Select ADF to Save to: hier wählt man den Dateinamen unter dem das ADF gespeichert werden soll, wenn man vorher den Volumenamen gelesen hat wird dieser als Dateiname vorgeschlagen.

Read Image: wird verfügbar wenn ein Dateiname gewählt wurde und liest die Diskette aus. Zusätzlich zu der ADF Datei wird auch noch ein Screenshot des Flux und eine Textdatei .log abgelegt die Lesefehler und Weaktracks dokumentiert.

Init: Fährt den Schreiblesekopf auf Track 0

Verify On: sollte man auf On lassen, es sei denn man will nur Disketten löschen und es ist einem Egal ob diese 100% lauffähig sind.

Select ADF to write from: hier wählt man das ADF aus was auf die Diskette geschrieben werden soll

Write Image: startet den Schreibvorgang, bitte auf den Schreibschutz der Diskette achten das dieser aus ist (man kann nicht durchs Loch gucken)

Abort: bricht den Schreib-, Lese- oder Auto Rip Vorgang ab.

Cleaning Mode: fährt den Lesekopf an verschiedene Tracks der Diskette und verweilt dort jeweils ein paar Sekunden, dies dient zum Reinigen des Laufwerks in Kombination mit einer Reinigungsdiskette. Im Feld daneben kann man die Dauer des Vorgangs einstellen.

Auto Rip: Mit dieser Funktion werden beliebig viele Disketten ausgelesen und auf Platte gespeichert. Nach dem Klicken auf den Button wird man aufgefordert ein Verzeichnis zu wählen in dem die Images abgelegt werden sollen. Die Dateinamen der Images werden automatisch generiert nach folgenden Schema – „Volumename_Systemzeit(in Hex).adf“. Falls die Diskette keinen Volumenamen besitzt ist der Name „NDOS_Systemzeit(in Hex).adf“. Das Anhängen der Systemzeit in Hex dient dazu das bei gleichen Diskettennamen oder NDOS vorher gerippte Images nicht überschrieben werden. Ich hatte damals mehrere Disketten die sich „Sourcecode“ nannten, aber unterschiedliche Inhalte besaßen.
Nach der Auswahl des Verzeichnisses startet der Autorip Vorgang sofort wenn eine Diskette im Laufwerk liegt, nach dem Rippen eines Images wartet das Programm bis die Diskette gewechselt wurde und fährt dann fort. Beenden kann man das ganze mit Abort.

Im Diagramm unten links wird die Verteilung der Magnetwechsel auf dem Medium beim Lesen und Verify angezeigt, die Informationen auf einer Floppy werden durch die Abstände zwischen den Magnetfeldwechsel codiert, bei einer Amiga DD Diskette sind dies 4,6 und 8 µs. Hier kann man auch die Qualität der geschriebenen Daten ablesen, je schmaler die Bänder desto genauer arbeitete das damalige Schreiblaufwerk, man sieht hier gut ob eine Diskette von einem Amigalaufwerk oder bei einem professionellen Duplizierer geschrieben wurde, letzte haben deutlich schmalere Bänder. Die verstreuten schwarzen Punkte stammen aus dem Trackgap wo in der Regel ziemlicher Müll steht. Feine rote Striche von oben nach unten bedeuten das hier mehrere Leseversuche benötigt wurden um den Track zu lesen, sogenannte Weak Tracks. Näheres kann man dem Logfile entnehmen.

Rechts in den Käsekästchen wird der Fortschritt beim Lesen und Schreiben abgezeigt so wie man es von diversen Programm des Amigas kennt.

Der About Button zeigt Details zu Copyright und Lizenz an, released ist alles unter GPLv3.

Das ganze Projekt hat noch relativ wenig Abfragen auf Bedienfehler etc., also alles auf eigenes Risiko, wenn ihr eure Super Rare Original Diskette überschreibt, nicht mein Fehler. 🙂

Bauanleitung zur Platine v3

Download Seite

Flashen des Teensy