Zabawy z wczytywaniem programów ciąg dalszy.
Miałem okazję spróbować wczytać program z oryginalnej kasety do oryginalnego Jupitera. Początek wyglądał dobrze, nagłówek odczytał się poprawnie, blok danych dalej wczytywał się, ale gdzieś w połowie kaseta odmówiła współpracy i to by było na tyle. Jeszcze 2 próby i zawsze błąd odczytu w tym samym miejscu na taśmie. Czego wymagać od 35 letniej kasety?
W każdym razie z ciekawości zrzuciłem sobie, to co jest na wyjściu z magnetofonu (sygnał pilota), aby mieć jako materiał porównawczy do zabaw z różnymi odtwarzaczami plików TAP. Wartości odczytane z oscylogramu, są w przybliżeniu tymi jakie są zaszyte w ROMie. Stromość narostu i opadania sygnałów z magnetofonu, a tego co generuje np TZXDuino czy ZX Taper są oczywiście inne.
Następnie podpiąłem do oryginału współczesne źródło dźwięku i totalna porażka. W tym przypadku jest on tak samo głuchy jak replika. Próba wczytania programów z sieci w formacie WAV, też nie powiodła się, nawet jeden nagłówek nie został poprawnie odczytany przez Juppiego. Trudno, oryginał to oryginał, nie otwieramy, nie modyfikujemy a grzebiemy w replice.
Nie kijem to pałką, pliki dźwiękowe (format wav) z programami znalezione w sieci są różnej jakości. Po zmianie kondensatora na wejściu z 47nF na taki o pojemności > 470nF, coś zaczyna świtać. Czasem jest mały sukces i Jupiter załapie nagłówek, ale po wczytaniu do końca napisze "ERROR 10". Za podręcznikiem użytkownika:
10 Tape error.
(a) In SAVE or BSAVE – either no file name supplied, nothing to save.
(b) In VERIFY or BVERIFY - the verification has failed
(c) In LOAD – the file is too .long to fit in the remaining memory.
(d) In BLOAD or BVERIFY – :the file is too long to fit in: the length specified.
(e) In LOAD, VERIFY, BLOAD or BVERIFY there was some kind of reading fault.
Either the volume setting is wrong or possibly the file is corrupted.
Nic dodać, nic ująć.
Nie tak, to inaczej. ZX Taper w rękę i zamiast próbować wczytać, czas spróbować zapisać cokolwiek z Jupitera. Następnie zapisany obraz wczytać do niego. Plików TAP ZX Taper nie zapisze, ze względu na inne stałe czasowe oraz dodatkowy znacznik końca bloku. ZX Taper wyrzuci błąd CRC i taki plik jest bezużyteczny. Jest jeszcze opcja zapisania plików w formacie BAW (Binary Audio Wave) i ona działa. Proces wyglądał tak:
1. Zdefiniowałem sobie proste słowo w Forth, wyrzucające na ekran napis "test":
: test ." test" ;
2. Następnie zapis na taśmę:
save test
3. ZX Taper zapisał plik (jupi!), to jedziemy dalej. Reset Juppiego, wczytanie:
load test
Wczytanie poprawne z komunikatem OK po zakończeniu. W pamięci jest nowe słowo "test" i wykonuje się (plik w załączniku).
Sukces połowiczny, ponieważ działa tylko w jedną stronę i dla nowych programów pisanych na Jupiterze.
A co z plikami TAP, które są w sieci? Dobre pytanie, ale ani jednego nie udało się mi wczytać (nawet nagłówka), ponieważ struktura tych plików jest trochę inna niż tych znanych z ZX Spectrum. Próbowałem zmieniać stałe czasowe dla plików TAP w ZX Taperze, ale bez większych sukcesów.
No dobra, ktoś może zapytać dlaczego nie zmienić TAPów na TZX, skoro ten drugi format potrafi więcej. Dlaczego nie wykorzystać narzędzi z ZX Spectrum i stworzyć plik TZX z blokami ID11 i ID13?. Niby racja, poza małym drobiazgiem, że trzeba przeskalować timingi. Plik TZX jest tworzony dla ZX Spectrum z zegarem 3.5MHz, a Jupiter ma zegar 3.25MHz.
Pozostaje jeszcze TZXduino z lekko zmodyfikowanym wsadem, ale to na inny wieczór.