Dawno, dawno temu...
Może nie tak zupełnie "dawno, dawno", ale paręnaście lat temu, gdy na giełdach królował program X-Copy, wtedy właśnie dyskietki 880 kB były w powszechnym użyciu na Amigach. W czasie, gdy nie było jeszcze ani dostępnego internetu, ani czytników płyt Blu-Ray, ani nawet telefonów komórkowych za 1 zł, gdy nikt nie wyobrażał sobie tabletów i pendrive'ów, wtedy właśnie dyskietka 880 kB była królową i cały amigowy software był rozprowadzany tylko i wyłącznie za pomocą takich 3.5" nośników. Jednak czas nie stoi w miejscu, technika poszła do przodu. Napędy dyskietek odeszły w zapomnienie, podobnie jak i same dyskietki. Aby ich zawartość zachować dla potomnych, wymyślono format ADF (Amiga Disk File), w swobodnym tłumaczeniu: plik będący obrazem amigowej dyskietki. Na marginesie: taki ADF przy okazji rozwiązał problem odczytu amigowych dyskietek na sprzęcie ze świata Windows, dzięki czemu pojawiła się masa użytkowników emulowanej Amigi (WinUAE), a i rozwój emulatora przyspieszył.
Pakiet ADF_Device
System amigowy dorobił się kilku rozwiązań pozwalających na odczyt plików ADF. Jednym z tych rozwiązań jest ADF_Device, dostępny ze strony jego autora - Bjoerna Fuglsanga. Najnowsza wersja nosi numer 1.3 i datowana jest na dzień 22 lutego 1999 roku. ADF_Device to nic innego jak wirtualny napęd dyskietek, który pozwala na "umieszczenie" i "usunięcie" ADF-owych obrazów amigowych flopków nawet aż w 16 wirtualnych napędach 880 kB. Praktycznie rzecz biorąc, nie musimy wykorzystywać wszystkich 16 wirtualnych czytników, bo wykonując jakieś operacje na - powiedzmy - 10 różnych obrazach ADF, wystarczy zamontować tylko jeden wirtualny napęd AD0:, po czym podmieniać te przykładowe 10 dysków w tym napędzie, podobnie jak to czynimy z prawdziwymi dyskietkami.
Zareklamowałem ADF_Device, teraz pora na konkrety: jak to zintegrować z Opusem Magellanem? Po pierwsze, należy oczywiście pakiecik ADF_Device pobrać i zainstalować:
- adf.device kopiujemy do Devs:
- polecenia InsertDisk i RemoveDisk kopiujemy do systemowego katalogu C:
Kilka słów na temat mountlisty ADF.ml zawartej w pakiecie. Jako że w prawdziwej Amidze najczęściej mamy tylko jeden czytnik dyskietek DF0:, zmodyfikowałem, a w zasadzie zredukowałem mountlistę (opisująca wszystkie wirtualne flopki) do jednego napędu AD0:. Wygląda ona następująco:
FileSystem = L:FastFileSystem Device = adf.device Unit = 0 LowCyl = 0 HighCyl = 79 Surfaces = 2 Buffers = 50 BlocksPerTrack= 11 Flags = 0 Mount = 1 Reserved = 2 GlobVec = -1 BufMemType = 1 DosType = 0x444F5303 StackSize = 4000
Do tego należałoby dodać ikonkę typu PROJECT, z domyślnie narzędziem C:Mount oraz wpisem ACTIVATE=1 w Tool Types. Mountlistę wraz z ikoną zapisujemy pod nazwą AD0 w katalogu DEVS:DOSDrivers. Wirtualny napęd AD0: zainstaluje się nam wtedy wraz z systemem.
Filetype ADF
I tu cały "pies pogrzebany". W sumie, jak ktoś chce, można wykorzystywać cały ten pakiet na sposób zasugerowany przez autora, tj. z wykorzystaniem pełnej, 16-napędowej mountlisty. Z tym że wtedy trzeba wskazywać napęd, w którym ma nastąpić zamontowanie ADF-a. Ot, dodatkowa, w sumie zbędna czynność, w której - co więcej - z uwagi na ilość dostępnych napędów, można się nieco pogubić, zwłaszcza gdy chodzi o odmountowanie obrazów. Można oczywiście, opcjonalnie, pobawić się nieco Magellanem i mieć dostępnych więcej wirtualnych napędów - wówczas jednak trzeba wykorzystywać te napędy nie z "dwuklika", a z tzw. RMB menu (w tłumaczeniu na polski: guzika menu kontekstowego), jak np.:
Zamontuj .adf w AD1:
Zamontuj .adf w AD2:
Zamontuj .adf w AD3:
etc...
No i w dalszym ciągu istnieje sprawa usuwania zamontowanych obrazów. Ale dla chcącego nic trudnego. Pod Opusem prawie wszystko da się zrobić. Bułka z masłem. Kto pierwszy wpadnie na pomysł co i jak należy zrobić, by Magellan jednoznacznie rozpoznawał - powiedzmy - cztery napędy wirtualne i usuwał lub umieszczał w nich obrazy ADF?
Moje rozwiązanie sprowadza się do jednego wirtualnego napędu AD0: i po prostu do "dwuklika" w plik ADF. I tyle. Resztą zajmuje się Magellan. Z tym że Magellan domyślnie nie wie, co ma zrobić po kliknięciu w plik ADF. I nie dowie się, dopóki mu nie zdefiniujemy odpowiedniego filetypu i reakcji na dwuklik oczywiście.
Zaczniemy od utworzenia filetypu definiującego ADF. W jego definicji można podać po prostu rozpoznanie po charakterystycznym rozszerzeniu *.adf. Ale Amiga to nie Windows, więc osobiście wykorzystuję bardziej niezawodną definicję ADF-owego filetypu - po rozmiarze i nagłówku jednocześnie:
MatchSize =901120 Or MatchSize =923648 and Match DOS
Definicja pliku ADF zakończona. Nadajemy tej definicji jakąś nazwę, np. Archiwum ADF i zapisujemy. Pora na przypisanie reakcji na dwuklik lewym przyciskiem myszy. Przypisujemy dwuklikowi poniższy skrypt:
Function: AmigaDOS RemoveDisk UNIT 0 AmigaDOS Diskchange AD0: AmigaDOS C:InsertDisk UNIT 0 {f} Command ScanDir AD0: AmigaDOS DiskChange AD0: AmigaDOS Play16 DOpus5:Sounds/RELOAD.WAV Flags: Run asynchronously
Dlaczego akurat taka sekwencja komend? Dla zapewnienia klikanej "automagiki" pod Opusem. Chodzi po prostu o to, aby cała ta sekwencja poleceń zapewniała bezproblemowe tak montowanie kolejnych obrazów ADF, jaki i usuwanie wcześniej zamontowanych, jeżeli jakieś były wcześniej obecne w wirtualnym napędzie AD0:. Do czego służy polecenie AmigaDOS "Play16", chyba nie muszę tłumaczyć.
Dodatkowo możemy utworzyć funkcje w menu kontekstowym o nazwie np. Insert disk. Jako reakcję przypisujemy po prostu:
Command DoubleClick
To, może wydaje się nieco dziwaczne, wewnętrzne polecenie Magellana wykonuje po prostu dokładnie taką samą sekwencję komend jak przypisana dwuklikowi dla danego filetypu. Gotowe. Nic, tylko klikać po wirtualnych flopkach w formacie ADF.
Na marginesie: oprócz montowania obrazów, do filetypu definiującego obrazy ADF można jeszcze podpiąć kilka innych funkcji. Zrzut z mego blatu pokazuje funkcje RMB menu, które były mi przydatne w trakcie zabawy z obrazami ADF:
Teraz może pojawić się pytanie jak usunąć zamontowany obraz ADF z blatu? I tu przechodzimy do omówienia następnego filetypu, jakim jest Virtual_floppy.
Filetype Virtual_floppy
Otwieramy wiec edytor filetypów Magellana. Tworzymy nowy filetype, o nazwie np. Virtual_floppy - rozpoznanie jak poniżej:
Disk AD0: OVERRIDE
Do menu kontekstowego (nie do dwuklika!) dopisujemy funkcję o nazwie Eject Disk, wykonującą działanie jak niżej:
Function: AmigaDOS C:RemoveDisk UNIT 0 AmigaDOS C:Diskchange AD0: AmigaDOS Play16 DOpus5:Sounds/LC_DiskRemoved1.8svx
I to wszystko. Oczywiście ostatnią linijkę z poleceniem Play16 można sobie darować - zarówno teraz, jak i we wcześniejszej funkcji "dwuklika" na ADF.
Podsumowując, mamy obraz dyskietki amigowej w pliku .adf. Robimy "dwuklik" na obrazie - obraz się mountuje, ikona zamountowanego ADf-a pojawia się na blacie, a jego zawartość zostaje wylistowana w nowym listerze. Chcemy zamountować następny obraz - mamy dwie możliwości: albo po prostu robimy "dwuklik" na nowym obrazie, albo z menu kontekstowego wybieramy Insert Disk. Chcemy usunąć zamountowany obraz: uruchamiamy menu kontekstowe nad ikoną wirtualnego napędu AD0:, po czym wybieramy funkcję Eject Disk.
Wydaje mi się, że prościej ("dwuklik" lub RMB menu), bezbłędnie (identyfikacja po nagłówku i rozmiarze) i wygodniej (myszka rules!) już chyba nie można.
I zadanie dla bardziej zaawansowanych użytkowników Magellana, a jednocześnie pomysł na ulepszenie. Załóżmy, że mamy otwarty lister/okno z zawartością jakiegoś zamontowanego obrazu ADF. Dobrze by było, aby ten lister ulegał zamknięciu równocześnie wraz z usunięciem tego dysku. Da radę coś takiego zrobić? Jeśli tak, to w jaki sposób?
Gorąco polecam bliższe zapoznanie się z Opusem Magellanem, jak i życzę miłej zabawy z zamontowanymi obrazami amigowych flopków.