Spectrum dla magistra
25.10.2014 02:59
Rozczuliły mnie teksty macminika opisujące historię Spectrum. Sam mam bogatą kolekcję wspomnień związanych z użytkowaniem tych zabawek. Jedna z takich historii bezpośrednio wiąże się z moim akademickim, a co za tym idzie, i zawodowym bytem.
Swoją edukację akademicką rozpocząłem już dosyć dawno temu, w 1980 roku. Był to czas historycznie trudny i ciekawy zarazem. Nie tylko z powodów politycznych. Był to czas, gdy szczytem technologicznej nowoczesności był stereofoniczny magnetofon Finezja i radziecki kalkulator Elektronika z funkcjami matematycznymi. Studiowałem wytrwale przez całe sześć lat, w tym dwa razy na pierwszym roku. I właśnie gdy po raz drugi przyswajałem sobie materiał pierwszego roku dane mi było zapoznać się z wyjątkowym na tamte czasy komputerem ZX‑81.
Już wtedy byłem zafascynowany programowaniem na moim kalkulatorze HP‑33C, w którym można było utworzyć sekwencję 49 poleceń, dzięki czemu można było zautomatyzować powtarzalne obliczenia np. podczas ćwiczeń w laboratorium. Spisywało się to doskonale przy rachunku liczb zespolonych i dawało mi spory handicap w stosunku do moich kolegów. Poza tym kalkulator stosował Odwrotną Notację Polską (RPN), co z kolei było powodem niekończących się pojedynków i sporów z posiadaczami kalkulatorów Texas Instruments, które oferowały możliwość programowania w 80 krokach, ale w trybie klasycznym. W praktyce okazywało się, że tam, gdzie ja mieściłem się w 49 instrukcjach, "teksasowcom" czasami brakowało jednego lub dwóch kroków do uzyskania tego samego efektu.
Gdy w moje ręce trafił ZX‑81 było to jak olśnienie - niewyobrażalna ilość dostępnej pamięci, normalna klawiatura, cały ekran TV do dyspozycji. A do tego można było pograć w jakieś kretyńskie "ping-pongi". Całymi nocami wymyślałem sobie matematyczne problemy, które potem wytrwale rozwiązywałem tworząc do nich programy, w których następnie szukałem błędów i niedoróbek tylko po to, żeby mieć powód do napisania wszystkiego od nowa. Zabawa była fantastyczna, ale i irytująca - do dyspozycji był tylko wyjątkowo prymitywny BASIC.
Przez cały okres studiów starałem się być na bieżąco z każdym pojawiającym się nowym sprzętem - Spectrum 16k, 48k, 48k Plus, Commodore VIC‑20, C64, C128, Amstrad, Schneider, Acorn, Atari i jeszcze całe stada mniej znanych gościły na moim biurku i doprowadzały do szału moją byłą żonę, bo nierzadko wolałem spędzić noc nad klawiaturą niż w bardziej rodzinny sposób. Moja słabość do tych urządzeń szybko stała się "tajemnicą poliszynszyla", także dla moich wykładowców.
Jeden z nich, nazwijmy go dr B., zapragnął się habilitować. Żeby to osiągnąć musiał wykazać się swoją pracą naukową, wynikami badań i analiz. W tym celu tradycyjnie wykorzystywało się wtedy pracę magistrantów, którym jako prace magisterskie zlecano tematy związane z bieżącymi potrzebami promotora lub recenzenta. Dr B. wiedząc, że całkiem sprawnie poruszam się wśród komputerów, zapragnął ubarwić swoją publikację efektownymi (wg ówczesnych kryteriów) wykresami. Sam w stopniu dobrym opanował tylko maszynę do pisania więc dużo się nie zastanawiając zaproponował mi do magisterki temat "Analiza stanów nieustalonych w przekształtniku fazowym w fazie rozruchu". Nie wnikając w meritum tematu napiszą tylko, że wynikiem było rozwiązanie układu kilku równań różniczkowych dla różnych parametrów początkowych. Tylko pozornie było to zadanie skomplikowane, wszystko sprowadzało się do zastosowania jednego z wielu algorytmów rozwiązywania tego typu problemów.
Ale tu faktycznie zaczynały się schody. Bardzo szybko okazało się, że Spectrum 48k jakim dysponował pan doktor w rozsądny sposób trawi jedynie najprostsze algorytmy iteracyjne - wybór padł na zmodyfikowaną metodę Eulera. Prosta do zaprogramowania w BASIC-u okazała się jedyną, która jako tako dała się zaimplementować. Dla danych testowych wszystko wyglądało super, na ekranie w rozsądnym czasie pojawiał się ładny wykres, który można było wydrukować na maleńkiej drukarce piezoelektrycznej. Cud, miód i orzeszki.
Niestety, metoda Eulera obciążona jest sporym błędem jeżeli krok iteracji jest zbyt duży. Wykresy testowe nijak nie przystawały do oczekiwanych wyników. Niezbędne było zmniejszanie kroku iteracji, a to skutkowało niemiłosiernym wydłużeniem czasu obliczeń. Wystarczy powiedzieć, że dla optymalnych parametrów wejściowych po 24‑godzinnej pracy na ekranie pojawiał się fragment wykresu o długości 2mm w pierwszym półokresie. Żeby wynik uznać za wiarygodny niezbędne było przejście co najmniej dwóch okresów, a wykresów w cyklu badań musiałem wykonać 36! Masakra!
Pan dr B. absolutnie nie przyjmował do wiadomości moich tłumaczeń. Wydawało mu się niemożliwe, żeby coś, co jest nazywane komputerem nie poradziło sobie z elementarnym problemem matematycznym. Orzekł, że na pewno mam błąd w programie i że trzeba to koniecznie sprawdzić. Tak trafiłem do ośrodka ZETO, w którym na PDP‑11 przepisałem program do jakiegoś FORTH-a czy FORTRAN-a (nie było to zbyt trudne). Minikomputer poradził sobie z jednym wykresem w czasie ok. 30 minut i wypluł z drukarki wierszowej metrową wstęgę papieru zadrukowaną znakami ASCII w kształcie z grubsza przypominającym wykres.
Oczywiście w takiej postaci efekt był nie do przyjęcia, takie wykresy to mógł mieć każdy. A panu doktorowi chodziło o takie ładniutkie wykresiki, które można by wkleić do swojej pracy i pochwalić się przed kolegami. I postawił mnie przed koniecznością rozwiązania problemu.
Pominę wszystkie kolejne próby, jedynie przepisanie programu pod CPM na Commodore 128 dało zdecydowanie lepsze wyniki, ale i tak daleko im było do zachowania rozsądnych terminów - zamiast 3‑4 dni jeden wykres powstawał "tylko" w ciągu ok. 30 godzin. Byłem załamany.
Temat pracy otrzymałem jeszcze na czwartym roku, rok później gdy zbliżał się czerwcowy termin obrony pracy, moje wykresy były nadal w sferze planów i poszukiwań. Teoretycznie mogłem mieć już gotowe wszystkie, ale w praktyce nie wyglądało to tak prosto. Każdy wykres musiał spełniać pewne określone warunki, więc każdy z nich powinien powstać w przynajmniej 4‑5 wariantach. Byle błąd lub niedopatrzenie, awaria prądu, cokolwiek niespodziewanego wydłużało cały proces. Byłem autentycznie załamany i zniechęcony. Sytuacja zgęstniała do tego stopnia, że bardzo wyrozumiały do tej pory dziekan mojego wydziału skreślił mnie z listy studentów za niezłożenie pracy w terminie.
To była już kompletna katastrofa. Szybka wizyta w dziekanacie i po krótkiej rozmowie z dziekanem ustalony dodatkowy termin obrony. Ostateczny.
Formalnie od czerwca nie byłem już studentem, a praktycznie już od lutego musiałem chodzić tylko na seminaria. Czasu miałem więc dużo i wykorzystałem to do podjęcia pracy w jednej z pierwszych w moim mieście poważnych firm komputerowych. Właściciel z gatunku post-cinkciarskiego neofity biznesu handlował na dużą skalę sprzętem "importowanym" z Singapuru, Korei i Tajwanu. Był w tym naprawdę dobry. Zatrudniał młodych zdolnych pasjonatów i płacił im całkiem dobre pieniądze. Złapałem Pana Boga za nogi.
Bonusem, którego początkowo nie dostrzegałem była możliwość pracy na sprzęcie klasy XT i AT (286). Dopiero przyparty do muru dostrzegłem swoją szansę właśnie w DOS‑ie. Skądś wykombinowałem jakiś kompilator, to był Pascal lub coś pokrewnego. W miarę szybko przepisałem program, przetestowałem i... sukces! Przychodząc o 7 rano do pracy odpalałem proces i ok. godziny 12 miałem gotowy jeden wykres. Z promotorem wynegocjowałem zmniejszenie ich liczby do 24 i w ten sposób przez dwa letnie miesiące wyprodukowałem te nieszczęsne wykresy w komplecie. Chociaż drukowane przez Print Screen wyglądały jak psu z gardła wyjęte, to dla mnie były prawdziwymi dziełami sztuki.
Dokładnie w tym samym czasie swoją pracę pisał mój przyjaciel, nawet temat miał podobny tyle, że z dziedziny telekomunikacji. Jej wynikiem też miały być wykresy, ale ładniejsze od moich - w trzech wymiarach. Ten przyjaciel jeszcze bardziej zakręcony na punkcie komputerów niż ja, był posiadaczem jednego z pierwszych w naszym kraju komputera Macintosh. Słynna "lodóweczka" technologicznie przewyższała wszystko z czym miałem styczność. Piękny graficzny interfejs użytkownika z zestawem całkiem funkcjonalnych programów, myszka i do kompletu wielka i ciężka mozaikowa drukarka Apple. Po prostu cudo na tle tajwańskiej tandety składanej w mojej firmie.
Gdy pokazał mi wyniki swojej pracy, najpierw na ekranie, a później na wydruku, poczułem się jak ubogi krewny z prowincji. To był majstersztyk. I cieszyłem się jedynie, że nie widzi tego mój promotor - byłby gotów zmusić mnie do wywalenie tych 3000$ tylko po to, żeby zaspokoić swoją "wykresową" próżność.
PS. Tak, wiem. Zastosowanie innego algorytmu mogło całą sytuację radykalnie zmienić na lepsze. Jednak błąd z wyborem popełniony na początku ciągnął się za mną przez cały czas. Ponadto moje umiejętności programistyczne nie były najwyższe, a dostępność innych języków programowania na sprzęcie klasy Spectrum była praktycznie żadna. Oczywiście z czasem sytuacja ulegała szybkiej zmianie, ale ja uparcie trwałem z tym swoim błędem pierworodnym. Niestety.