Czy zastanawialiście się kiedyś w jaki sposób odczytać dyskietki Amigi na współczesnym komputerze pod systemem Ubuntu Linux za pomocą interfejsu DrawBridge oraz klasycznej stacji dysków z PC? Nieważne jakiej udzielicie odpowiedzi na tak postawione pytanie, z całą pewnością poniższy poradnik będzie dla Was przydatny - czy to z chęci spróbowania, czy też ze zwykłej ciekawości.
Ponieważ niektórzy nie lubią iść na łatwiznę, a niektórym po prostu jedyny słuszny system od Billa jest obcy ideowo (jak autorowi), pojawiła się potrzeba okiełznania interfejsu DrawBridge pod systemem Linux, a konkretnie - Ubuntu 24.04.2 LTS. Poradnik powinien działać ze wszystkimi z rodziny debianowej i pewnie też z innymi po odpowiedniej modyfikacji komend instalujących pakiety. Zaznaczę, że jest to rozwiązanie mocno niszowe i dlatego wymaga niestandardowych działań w systemie. Zaletą opisanego rozwiązania jest możliwość podłączenia interfejsu np. do Raspberry.
Tyle tytułem wstępu. Pora przygotować suchy prowiant, coś do picia oraz środki na uspokojenie. Potem szable w dłoń i działamy!
0. O DrawBridge słów kilka.
DrawBridge to jeden z interfejsów, które pozwalają na podłączenie klasycznej stacji dysków z PC do portu USB współczesnego komputera i odczytywanie/zapisywanie dysków amigowych. Jego zaletą jest w pełni otwarta konstrukcja oraz niska cena. Można kupić gotowca lub zbudować samemu. Do budowy (w wersji minimum) potrzebne są:
Można oczywiście to wszystko zrobić porządnie na płytce drukowanej z gniazdem FDD i taśmą do napędu, jeśli się ma cierpliwość. Autorowi jej zabrakło :-).
I tu uwaga: wbrew pozorom opcja Arduino + zewnętrzny interfejs USB jest prostsze (i tańsze o $1 :-D) niż Arduino z wbudowanym interfejsem. Ta druga opcja wymaga lutowania do baaardzo cienkiej nóżki układu FT232. Autor oczywiście poszedł tą ambitną ścieżką, czego później żałował :-).
Przykładowe koszty elementów w I kwartale 2025 (ceny w $ są od "majfrendów"):
Instrukcje jak tę całą menażerię złożyć "do kupy" i zaprogramować są dość dobrze opisane na stronie autora projektu DrawBridge. Polecam wykonać połączenia w wersji "Plus".
Całość po nieudolnym złożeniu wygląda tak:
1. Podłączamy DrawBridge do komputera.
Jeśli kupiliśmy gotowca albo skleciliśmy interfejs samemu (i, po złożeniu w ofierze w tej intencji odpowiedniej liczby dziewic, zadziałał), możemy go wbić do portu USB. Po podłączeniu powinien napaskudzić w logu systemowym i zameldować się jako urządzenie ttyUSB
$ sudo dmesg | grep ttyUSB [ 4062.226207] usb 1-2: FTDI USB Serial Device converter now attached to ttyUSB0
Widać, że urządzenie otrzymało nazwę ttyUSB0 i będzie widoczne jako /dev/ttyUSB0. W dalszej części będę się posługiwał tą ścieżką.
Sprawdzamy jeszcze czy nasz użytkownik jest w grupie "dialout" i tym samym będzie miał uprawnienia do ww. urządzenia:
$ groups
Jeśli w wyniku nie ma grupy "dialout", należy się do niej bezczelnie dodać poleceniem:
$ sudo usermod -a -G dialout $(whoami)
oraz przelogować się w systemie (najpewniej zrobić restart).
2. Instalujemy oprogramowanie do odczytu/zapisu dyskietek.
Autor projektu DrawBridge daje trzy możliwości, jeśli chodzi o dobranie się do interfejsu pod Linuksem:
Ustalamy w zmiennej nazwę katalogu, gdzie umieścimy nasz program:
$ soft_dir=~/"DrawBridge" $ mkdir -p "${soft_dir}" $ cd "${soft_dir}"
Pobieramy repozytorium:
$ git clone https://github.com/RobSmithDev/ArduinoFloppyDiskReader
...i kompilujemy:
$ cd ArduinoFloppyDiskReader/ArduinoFloppyReader/ArduinoFloppyReader $ make
W bieżącym katalogu powinien pojawić się wynikowy plik wykonywalny "drawbridge". Sprawdzamy aktualne ustawienia interfejsu:
$ ./drawbridge /dev/ttyUSB0 SETTINGS
i konfigurujemy interfejs włączając opcję "Plus":
$ ./drawbridge /dev/ttyUSB0 SETTINGS SET PLUS 1
3. Odczytu dyskietki nadszedł czas.
Wybieramy katalog roboczy, w którym będą powstawać nasze obrazy dysków i przypisujemy do zmiennej:
$ work_dir=/tmp/disk_images $ mkdir -p "${work_dir}" $ cd "${work_dir}"
Ustawmy zmienną "disk_name" na nazwę dysku, który będziemy zgrywać:
$ disk_name="WypozyczalniaVideo"
Zgrywamy dyskietkę do formatu SCP, który umożliwi sprawdzenie jaką jakość ma nasz obraz:
$ "${soft_dir}/ArduinoFloppyDiskReader/ArduinoFloppyReader/ArduinoFloppyReader/drawbridge" /dev/ttyUSB0 "${disk_name}.scp" READ
4. Chcemy to zrobić dobrze, czyli jak sprawdzić jakość obrazu.
W tym celu użyjemy narzędzia kryoflux (pod Win działa również). Najpierw jednak musimy przygotować mu dane, czyli pociąć plik SCP na ścieżki w formacie RAW.
Pobieramy z gita narzędzie, które to potrafi:
$ cd "${soft_dir}" $ git clone https://github.com/jfdelnero/HxCFloppyEmulator
...i kompilujemy:
$ cd "${soft_dir}/HxCFloppyEmulator/libhxcadaptor/build" $ LANG=en_US make $ cd "${soft_dir}/HxCFloppyEmulator/libhxcfe/build" $ LANG=en_US make $ cd "${soft_dir}/HxCFloppyEmulator/libusbhxcfe/build" $ LANG=en_US make $ cd "${soft_dir}HxCFloppyEmulator/HxCFloppyEmulator_cmdline/build" $ LANG=en_US make
Tworzymy podkatalog roboczy i ustawiamy ścieżki:
$ mkdir -p "${work_dir}/${disk_name}" $ cd "${work_dir}/${disk_name}" $ PATH="$PATH:${soft_dir}/HxCFloppyEmulator/build"
Sprawdzamy czy nasze narzędzie potrafi odczytać informacje z pliku SCP:
$ LD_LIBRARY_PATH="${soft_dir}/HxCFloppyEmulator/build" hxcfe -finput:"${work_dir}/${disk_name}.scp" -infos
I wreszcie brutalnie tniemy nasz SCP na ścieżki RAW:
$ LD_LIBRARY_PATH="${soft_dir}/HxCFloppyEmulator/build" hxcfe -finput:"${work_dir}/${disk_name}.scp" -conv:KRYOFLUXSTREAM
Dla chętnych "na szóstkę" można skompilować pozostałe narzędzie pakietu z GUI:
$ cd "${soft_dir}/HxCFloppyEmulator/HxCFloppyEmulator_software/build" $ LANG=en_US make all
Pora zainstalować właściwe narzędzie do sprawdzania jakości obrazu. Wybieramy katalog, do którego pobierzemy kryoflux:
$ kryoflux_dir="${soft_dir}/kryoflux" $ mkdir -p "${kryoflux_dir}"
... i pobieramy ze strony autora wersję Linux. Następnie rozpakowujemy w katalogu, w którym pobraliśmy. W momencie pisania tego poradnika najnowszą była wersja 3.5.0.
Instalujemy pakiet:
$ sudo apt install "${kryoflux_dir}/Linux_Release3.50/dtc/arm64/kryoflux-dtc_3.5.0_arm64.deb"
Możemy już przystąpić do tworzenia długo wyczekiwanego pliku ADF:
$ dtc -l15 -f"${work_dir}/${disk_name}.adf" -i5 -m1 -f"${work_dir}/${disk_name}/${disk_name}_scp" -i0 -e83
Obserwujemy komunikaty, które przy każdej ścieżce powiedzą nam czy została poprawnie odczytana.
Jeśli ktoś lubi okienkowe narzędzia i ładne kolory, to może skorzystać z aplikacji w JAVA:
$ java -jar "${kryoflux_dir}/Linux_Release3.50/dtc/kryoflux-ui.jar"
która wygląda tak:
5. Koniec :-)
Gratuluję determinacji, jeśli dotarłeś do końca! :-) Zaznaczę tylko, że większość tych mrożących krew w żyłach męczarni miała na celu stworzenie poprawnego obrazu z pełną kontrolą błędów. Jeśli chcesz tylko podpiąć dysk do UAE i tam bawić się dalej, to wystarczy punkt 1.
To jest wersja 0.9 beta poradnika. Jestem otwarty na konstruktywną krytykę. Gdyby coś nie działało dawajcie znać, mogłem o czymś zapomnieć.
Chciałbym na koniec podziękować koledze rygar997 za zmotywowanie do zrobienia interfejsu i uświadomienie, żeby nie zgrywać dyskietek od razu do formatu ADF, gdyż jest do d.., to znaczy nie nadaje się zbytnio ze względu na brak kontroli nad błędami :-).
PS Podziękowania również dla mojej żony, która poszła "z koleżankami na likierek" i tym samym umożliwiła mi "zmarnowanie" 3 godzin życia na ten poradnik ;-).