Jestem posiadaczem stacji dysków XF-551 już od 20 lat. Ze stacji
byłem początkowo bardzo zadowolony, ale dosyć szybko zauważyłem
pewne problemy w jej użytkowaniu. Jednym z nich było utrudnione
przełączanie się między gęstościami dyskietek jeżeli nie korzystało
się z poleceń PERCOM. Stacja XF-551 nie potrafiła się przełączać z
gęstości pojedynczej lub rozszerzonej na podwójną, mimo iż inne
modele stacji do Atari były tej wady pozbawione. Czasami też przy
przechodzeniu między gęstościami stacja "zawieszała" się na kilka
sekund, po czym wznawiała pracę. Zauważyłem też, że dyskietki
sformatowane przez kolegę w systemie turbo na jego stacji Atari
1050 z systemem Top Drive odczytywały się na XF-551 szybciej niż
formatowane na niej samej.
zdjęcie: Kaz
Pamiętam, że kiedyś moją stację zaniosłem nawet do serwisu w celu
wyjaśnienia tych problemów, jednak dowiedziałem się tylko, że
stacja nie jest uszkodzona. Wiele lat później postanowiłem wyjaśnić
dokładnie zaobserwowane kiedyś zachowanie stacji i w tym celu
przeanalizowałem cały jej program zapisany w pamięci ROM. Bardzo
szybko natrafiłem na przyczynę - w programie było po prostu sporo
błędów, które dawały właśnie taki efekt. Źle napisana procedura
odczytu sektora nie pozwalała automatycznie przechodzić na gęstość
podwójną a "zawieszanie" się stacji było spowodowane zwykłymi
pętlami opóźniającymi. Zauważyłem też nie do końca optymalny
przeplot sektorów na ścieżkach przy formatowaniu w trybie turbo, co
skutkowało później wolniejszym odczytem.
zdjęcie: Kaz
Mając przeanalizowany program stacji postanowiłem zrobić coś
jeszcze. Korzystając z języka Python napisałem prosty symulator
procesora 8040 i kontrolera WD1772 i zmusiłem ten symulator do
wykonywania programu stacji. Następnie spróbowałem "odczytywać
sektory" na takiej wirtualnej stacji dysków i przełączać się między
gęstościami, zapisując co robi stacja. I rzeczywiście – wirtualna
stacja nie mogła przełączyć się z gęstości niższej na podwójną, a
zatem odtworzyłem efekt zaobserwowany na prawdziwym sprzęcie.
Udostępniam wszystkim wyniki moich analiz w następujących plikach:
XF-551 - ROM.txt – zdeasemblowany kod źródłowy stacji wraz z
komentarzami;
odczyt_z_rozp.txt – zapis pracy symulatora XF-551 podczas
przechodzenia pomiędzy gęstościami, gdy stacja usiłuje je
rozpoznawać przy pomocy polecenia READ ADDRESS (pierwszy tryb
pracy, ustawiany wewnętrznie). Oczytywane sektory zawierają bajty o
kodach od $f0 w górę, przy czym każdy bajt powtarzany jest 16
razy;
odczyt_bez_rozp.txt – zapis pracy symulatora podczas
odczytywania sektorów, gdy stacja gęstości nie rozpoznaje (drugi
tryb pracy).
zdjęcie: Kaz
Podczas czytania programu stacji, a zwłaszcza analizowaniu
procedury odczytu i zapisu sektora, proszę pamiętać o tym, że
procesor 8040 posiada tylko 256 bajtów pamięci RAM, czyli dokładnie
tyle, ile wynosi długość sektora w gęstości podwójnej. Ale przecież
stacja musi gdzieś też przechowywać licznik pętli i wartości
rejestrów pomocniczych, stąd
konieczność wykorzystywania rejestru ‘t’ na dane tymczasowe, a
nawet rejestrów kontrolera WD1772. Jak się więc okazuje, przy
odrobinie pomysłowości konstruktorzy XF-551 zdołali obejść
wszystkie ograniczenia sprzętowe.
Wspomniane wyżej pliki dostępne w postaci jednego archiwum 7z.
jhusak 2010-09-20 09:30:53
Jestem pod wrażeniem. Nigdy by (chyba) mi nie przyszło do głowy zrobić coś takiego. Gratulacje. Kaz 2010-09-20 10:17:17
Brawo Adas! A czy analizowales tez krazaca w sieci wersje ROM z poprawionymi bledami? Jesli tak - to ktore bledy zostaly poprawione, a ktore nie?
Sam mam dwie XF-ki i chetnie bym w koncu wrzucil do nich nowy ROM, zeby dzialaly jak nalezy. asal 2010-09-20 10:36:08
Kaz: tak, właśnie się za to zabieram - sam jestem ciekaw. Alex 2010-09-20 12:26:22
Podpisuję się pod pytaniem KAZa. Od pewnego czasu rozważałem wdrożenie Hyper-XF-OS, ale nie wiem czy warto. pin 2010-09-20 13:04:35
.. stacja ma jeszcze jedną przypadłość, którą na szczęście miałem możliwość pominąć :) - teoretycznie nie formatuje drugiej strony dyskietki no chyba, że mamy dysk z drugą "dziurą" na index. Jet kiedyś dołożył mi po prostu drugą indexówkę i problem "z głowy".
Testuję ROM Hyper XF - mam dwie wersje - dla 360kB 5.25", oraz dla 720kB 3.5". Wiele niedogodności w/w ogólnie jest "zpaczowanych" i teoretycznie powinno być lepiej, lecz występują problemy z załadowaniem niektórych programów całodyskowych. Dlaczego - nie wiem.
Co do niemożności przełączenia gęstości wystarczy w zasadzie użyć normalnego dosa - Sparta X radzi sobie ze stacją bez najmniejszych problemów ;)- (z oryginalnym, lub romem Hyper-XF) pin 2010-09-20 13:06:10
Alex - warto, tyle że lepiej założyć na w/w okoliczności dwa romy na przełączniku ;)- mono 2010-09-20 13:44:05
@pin: Jak się objawia to "nie ładowanie programów całodyskowych"? igi 2010-09-20 14:51:22
Igi - piekne! Czy masz ten tekst po angielsku? Chcialbym zrobic polska wersje...
Poza tym podziwiam cala kolekcje artkow: http://blog.3b2.sk/igi/archive.aspx pin 2010-09-20 16:28:12
Mono - ano tak, że zaczyna ładować i przestaje :) - podejrzewam, że boot-loader ze stacji lokuje się w miejscu, gdzie ładuje się program. igi 2010-09-20 16:59:37
To Kaz: Nie mam - google translator ..... mono 2010-09-20 16:59:57
@pin: Hmmm. Ale dlaczego uważasz, że to wina stacji? CharlieChaplin 2010-09-20 18:28:17
Well,
many Atarians already examined the XF551 OS and found various bugs and errors. One of them was Bob Woolley while thinking (and informing) about a 3,5" upgrade. Then there was Stefan Dorndorf, he learned 8040 / 8050 assembler and coded a new + much better OS for the XF, named Hyper-XF-OS.
Some of the nice XF bugs are: - completely locks up when changing from a 360k to 90k diskette (from MFM, DS and DD to FM, single-sided and SD)
- often (always?) sees a 180k disk as a 360k disk
- when changing from single density (128 bytes per sector) to double density (256 bytes per sector) the drive often hangs up
- if you are a fan of DOS 2.5 compatible 130k format, well, when changing from 130k to 90k you often get an Error 144, since the drive cannot find the second VTOC on the 90k disk
- most of all: the drive cannot detect any disk-change (this is still true for Hyper-XF-OS, since it is a hardware issue) and thus has all these density detecting problems; one may add a switch or button which -when pressed/changed- forces the drive to read/detect the new density...
The Hyper-XF-OS provides ultraspeed and many other cool features, afaik the PDF for this OS is already available online... -Andreas Koch. CharlieChaplin 2010-09-21 00:36:56
Well,
as a small sidenote, the pictures above show the XF551 with a Chinon drive. Open the lever and the disk will flop-out (not so with a Mitsume drive). Put in a disk and the drive motor will spin for a short while (not so with a Mitsumi drive; with the Chinon drive this could have easily been used as a disk change detection, alas, the original XF OS does not support it).
Last not least, the Chinon drive will not only NOT format the backside of the disk -unless it has two index holes- it will also refuse to read & write from/to a disk without two index holes (even if the disk had already been formatted on another drive); the drive simply does not stop spinning if you put in the backside of a disk with only one index hole. Thats not such a big problem for Mitsumi drives, they will only refuse to format the backside of a disk with one index hole, but they will read & write the backside of a disk with one index-hole if it had already been formatted on another drive...
-Andreas Koch. pin 2010-09-21 16:26:43
@Mono - a czy ja tak uważam :P - przecież mowa o ROMie, więc chodzi zapewne o kwestie software'ową :) T 2010-09-21 22:17:07
Podziwiam za włożoną prace i czas w celu modyfikacji oprogramowanie w ROMie. Kaz 2010-09-22 00:39:54
CharlieChaplin - yes, it is Chinon drive, the second XF551 I have. igi 2010-09-22 09:16:15