Strona główna Informacje Kontakt

archeologia informatyczna, listingi w basicu
Wydarzenia Gry Listingi Komputery Książki
23 lutego 2015 r.
Warsaw Basic

O języku Warsaw Basic od zawsze krążyły legendy. Zwłaszcza w czasach, gdy każdy komputer 8-bitowy miał wbudowaną odmianę tego języka, uruchamianą automatycznie tuż po włączeniu komputera. BASIC był dla użytkowników podstawowym narzędziem pracy i najpopularniejszym językiem programowania w Polsce. Jednocześnie istniał Warsaw Basic, posiadający o wiele większe możliwości niż typowy Sinclair czy Atari Basic. Był lepszy, szybszy i bardziej profesjonalny. Świadomość tego faktu spędzała sen z powiek wielu osobom.

Kawa i komputer

Rok 1983, instytut Polskiej Akademii Nauk. Dwóch matematyków w osobie dr hab. Bogusława Radziszewskiego i dr inż. Krzysztofa Gajewskiego zaczyna dzień od tradycynego zaparzenia kawy i włączenia komputera Commodore VIC 20.

Ten kupiony za ciężkie dewizy sprzęt nie stał bezczynnie. Dwójka naukowców wykorzystywała go każdego dnia do wszelkich możliwych zadań obliczeniowych, a podczas zajęć ze studentami jako pomoc dydaktyczną. Komputer wraz z monitorem kursował codziennie między gabinetem a salą wykładową.

Dzień za dniem biblioteka programów instytutu powiększała się o kolejne programy, pisane w języku BASIC wbudowanym w VIC-20. Gajewski i Radziszewski szybko doszli do wniosku, że ciągłe powielanie tych samych konstrukcji i komplikowanie kodu na dłuższą metę nie ma sensu. Wraz ze wzrostem złożoności programy stawały się coraz mniej wydajne, a ich rozbudowywanie zajmowało zbyt wiele czasu.

Alternatywą było złożenie wniosku o zakup komputera IBM, na którym były dostępne języki wyższego poziomu, ale to nie wchodziło w grę. Takie wnioski składano już wcześniej i były odrzucane z braku środków. Zapadła więc decyzja o stworzeniu własnej wersji języka o nazwie Warsaw Basic.

Niedoskonałości BASIC-a

Język BASIC wbudowany w VIC 20 nie różnił się zbytnio od BASIC-ów, znanych z innych komputerów 8-bitowych. Był skrojony na miarę potrzeb przeciętnego użytkownika i dość uniwersalny. Pozwalał napisać program tu i teraz, nawet dość skomplikowany, ale kompletnie nie nadawał się do pracy naukowej.

Czego brakowało w BASIC-u, by był przydatny w pracach badawczych? Przede wszystkim kultury pracy. Podejście naukowe wymaga tworzenia przejrzystych algorytmów oraz modułowości. W BASIC-u doskwierał więc brak programowania strukturalnego i związany z tym brak procedur. Każdą konstrukcję trzeba było umieszczać w odseparowanej części listingu i odwoływać się do niej przy pomocy skoku pod wskazany numer linii. Przejrzystość kodu była co najmniej wątpliwa, skoro jego poszczególne elementy były nazywane ciągiem liczb, a nie zrozumiałymi nazwami.

Nie istniały zmienne lokalne, widoczne tylko w obrębie jednej procedury, co zmuszało do korzystania ze wspólnej przestrzeni danych i dbania o nienakładanie się nazw zmiennych.

Brak modułowości uniemożliwiał tworzenie struktur procedur i danych, zgrupowanych w zewnętrznych bibliotekach. Raz napisany podprogram musiał być przepisywany od nowa w każdym nowym projekcie, a jego modyfikacja oznaczała wprowadzanie poprawek w każdej jego kopii.

Zwykły BASIC posiadał również uproszczone funkcje matematyczne, dodatkowo w wersji dla komputera VIC 20 (a później C64) brakowało instrukcji graficznych. Nie było również mechanizmów odpowiedzialnych za szybkie tworzenie grafiki całoekranowej, na przykład w celu tworzenia wykresów czy wczytywania gotowych grafik z nośnika danych.

Rozgryzanie komputera

Radziszewski i Gajewski zabrali się do pracy. Stworzenie własnego języka wymagało, by poznać najpierw zasadę działania obecnego BASIC-a, a przede wszystkim zrozumieć działanie całego sprzętu.

Naukowcy mieli do dyspozycji tylko instrukcję obsługi komputera z wykazem rozkazów procesora 6502 oraz ogólną mapę pamięci. Nie posiadali opisu ROM-u, czyli najważniejszej rzeczy, bo odpowiadającej za działanie wbudowanego języka BASIC.

Pozostała więc praca, polegająca na rozgryzaniu pamięci komputera bajt po bajcie. Autorzy wprowadzali proste programy, a następnie metodą prób i błędów śledzili zmiany zachodzące w pamięci. W ten sposób krok po kroku zdobywali wiedzę o działaniu interpretera języka BASIC.

Wynik tej żmudnej pracy był imponujący. Powstał bardzo dokładny opis ROM-u komputera w postaci papierowej dokumentacji. A w niej wszystkie instrukcje BASIC-a, rozbite na pojedyncze programy w kodzie maszynowym, w postaci ciągu liczb i adnotacji. Po latach jeden z autorów, Krzysztof Radziszewski, zażartował: "chciałbym znaleźć kogoś, z kim mógłbym się równać w konkursie programowania mikroprocesorów z rodziny 65 bezpośrednio w kodach szesnastkowych" (Bajtek 11/87).

Powstaje Warsaw Basic

Mając dokumentację naukowcy przystąpili do drugiego etapu pracy, czyli tworzenia własnego języka, nazwanego Warsaw Basic. Opierając się na zdobytej wiedzy zrobili porządek w instrukcjach Basica, usprawniając działanie istniejących i tworząc zupełnie nowe.

W międzyczasie do instytutu trafił komputer Commodore 64, który zastąpił wysłużonego VIC-20. C64 był następcą VIC-a o wiele lepszych parametrach, posiadał m.in. 64kb pamięci (VIC tylko 5kb) i był w Polsce znacznie bardziej popularny od poprzednika.

Najważniejszą sprawą był język BASIC, który w C64 był dokładnie ten sam, co w VIC-20. Zmiana platformy nie stanowiła problemu, więc kolejne wersje Warsaw Basica tworzono dla komputera C64.


Warsaw Basic, wersja 3.2

Nowy porządek

Najważniejszą zmianą Warsaw Basica względem standardowego języka BASIC było wprowadzenie obsługi procedur. Co więcej, procedury nie musiały być ręcznie wpisywane do programu - mogły znajdować się na dyskietce i na żądanie być doczytane w locie przez interpreter. W przypadku braku danej procedury na nośniku, interpreter wyświetlał komunikat o włożeniu właściwej dyskietki do stacji.

Tworzenie własnych bibliotek procedur dawało użytkownikowi nieograniczone możliwości. Raz napisana procedura nie musiała być każdorazowo wpisywana do listingu, a każdy zasób zewnętrznej biblioteki poszerzał możliwości BASIC-a o nowe instrukcje. Poprawiało to kulturę pracy z interpreterem, ponieważ listingi złożonych programów skracały się do absolutnego minimum.

Procedury wywoływane były według nazwy, a nie numeru linii. Dodatkowo stworzono szybką obsługę odczytu i zapisu danych z dyskietki, czterokrotnie przyspieszając transmisję względem tego, co oferował zwykły BASIC-a na C64. Szybszy odczyt i zapis danych działał również przy pracy z magnetofonem.

Autorzy zadbali o polskie znaki. Programy w zwykłym BASIC-u były pozbawione polskich liter, takich jak "ą" czy "ś". Ewentualnie każdorazowo trzeba było dołączać do listingu wewnętrzny program, który modyfikował wygląd znaków, dodając polskie ogonki i kreski.

Warsaw Basic miał wbudowane polskie znaki, ale na tym nie koniec. Posiadał możliwość zmiany zestawu znaków na dowolne doczytywane z nośnika. Na dodatek zmiany tej można było dokonywać wielokrotnie w dowolnym miejscu programu - jedną instrukcją.

Nowe instrukcje

Warsaw Basic posiada łącznie 96 nowych instrukcji i procedur, z czego większość to pozycje nowe, a niewielka część to instrukcje standardowego BASIC-a o poszerzonych właściwościach.


Fragment instrukcji Warsaw Basic - lista poleceń i procedur (kliknij aby powiększyć)

Programowanie strukturalne wspierały pętle i instrukcje warunkowe IF-THEN-ELSE, WHILE-DO oraz REPEAT-UNTIL. Obsługę błędów i wyjątków pracy programu zapewniały TRACE, ON-ERROR-GOTO i RESUME. Zestaw instrukcji AUTO, DEL, FIND, MERGE i RENUM pozwalał na ułatwienia z numeracją linii programu, m.in. automatyczną numerację kolejnych linii czy przenumerowanie listingu podczas dołączania gotowych fragmentów z dyskietki.

Pojawiły się nowe instrukcje matematyczne: EVAL, EXAM, FRAC, HEEK, MAX, MIN, ODD i ROUND, odpowiadające między innymi za operacje zaokrąglania czy zamianę wyrażenia tekstowego na prawidłowe działanie matematyczne.

Mocną stroną nowych instrukcji był zestaw poleceń do tworzenia grafiki trójwymiarowej. Instrukcja AXIS pozwalała na zadeklarowanie parametrów rzutu z przestrzeni trójwymiarowej na płaszczyznę, SDOT rysowało kropkę w ujęciu 3D, a SLINE - analogiczną kreskę.

Polecenie HILOAD pozwalało wczytać z nośnika do pamięci obraz o wysokiej rozdzielczości, a następnie wyświetlić go na ekranie komendą HIPRINT. Jednocześnie można było wczytać wiele obrazów (zależnie od ilości wolnej pamięci) i wyświetlać je w dowolnym momencie. Instrukcja HISAVE pozwalała na zapisanie na nośniku aktualnie wyświetlanego obrazu.

Sprzedaż

Warsaw Basic sprzedawany był w profesjonalnym wydaniu. Nośnikiem był kardridż dla komputera C64, co pozwalało na błyskawiczne uruchomienie interpretera języka tuż po włączeniu komputera. Do kardridża dołączona była dyskietka z gotowymi procedurami oraz papierowa instrukcja, szczegółowo opisująca działanie nowych poleceń i procedur.

W obiegu pojawiły się nielegalne kopie Warsaw Basica, najczęściej starsze wersje, okrojone bądź nieumiejętnie przekopiowane na dyskietkę. Program uruchamiany z pamięci EPROM wymagał nieco innej organizacji pamięci niż ten sam, uruchomiony ze zwykłego nośnika, co skutkowało brakiem stabilności i błędnym działaniem części poleceń. Oryginał dawał użytkownikowi do dyspozycji 47kb wolnej pamięci, podczas gdy piracka wersja tylko 32kb.

Piracka kopia sprzedawana bez instrukcji nabiła więc kieszeń giełdowym sprzedawcom, ale ich klientom dała tylko namiastkę pracy z oryginalnym programem. W rezultacie nabywcy nielegalnej kopii otrzymali coś, co nie do końca działało i nie wiadomo było jak tego używać. Natomiast legalni nabywcy otrzymywali wsparcie użytkownika oraz dostęp do najnowszej wersji programu.

Podsumowanie

Mimo renomy i legendy Warsaw Basic nie zdobył w swoim czasie wystarczającej popularności. Komputer C64 występował licznie w Polsce, ale nie był najpopularniejszym komputerem. W edukacji dominował ZX Spectrum, a w domach Atari XL/XE. Na dodatek program był dedykowany szkołom wyższym i placówkom badawczym, gdzie były zupełnie inne komputery i duże problemy z zakupem sprzętu, co jeszcze bardziej zawęziło grono odbiorców.

Niewykorzystany potencjał programu nie zmienia jednak faktu, że Warsaw Basic jest w czołówce najbardziej rozbudowanych języków programowania dla komputerów 8-bitowych. Jako jedyny oferuje obsługę polskich znaków, grafiki wysokiej rozdzielczości i 3D ze wsparciem programowania strukturalnego i zewnętrznych bibliotek.

Warsaw Basic jest również dowodem na to, że komputery ośmiobitowe były prawdziwymi komputerami, zdolnymi do wykonywania profesjonalnych zadań.

Autor tekstu: Mr.Wolf - użytkownik komputera ZX Spectrum od 1986 r., kolejne komputery: Atari 65XE, Commodore 64 i Amiga 500.
Komentarze:
GadZombiE [ » ]2015-10-02 20:42
Bardzo fajny artykuł. Miałem Atari, więc o Warsaw Basicu wiedziałem tyle, co nic. Na Atari mieliśmy za to Turbo Basic, który również był rewelacyjnym ulepszeniem zwykłego Basica, bo działał szybciej i dawał większe możliwości. Spędziłem przy nim dobre kilka lat, zanim przeniosłem się na PC.
WarsawBasic [ » ]2016-05-01 11:42
Gratuluję Autorowi wiedzy na temat Warsaw Basica. Jest to pierwszy tekst, który świadczy o mrówczej pracy jego Autora. Jest w tym tekście kilka bŁędów np. zrzut ekranu ekranu Commodore z WB, ale o nich nie warto przy tej okazji pisać. Byłem użytkownikiem Commodore Vic-20, Commodore 64, Commodore 128, Amiga 500, Amiga 1200 i Amiga 3000. I te wszystkie komputery mam do dzisiaj (ale rzadko do nich zaglądam).
PS. Ciekawych rozwiązań związanych z WB było więcej (m.in. Edytor Pl z korektorem tekstów w języku polskim, Baza danych z elementami arkusza kalkulacyjnego - działająca zgodnie z regułami języka polskiego, system czasu rzeczywistego - reagujący na zdarzenia zewnętrzne - wciśniecie klawisza lub zmiana napięcia na jednej z linii Commodore itp.). Pozdrawiam Administratora tej strony.

Dodaj komentarz:

Podpis: (wymagane)
Adres Twojej strony WWW: (opcjonalnie)
Twój adres e-mail: (opcjonalnie - tylko do wiadomości redakcji)
Treść komentarza:
Antyspam: policz ile
wynosi jeden plus dwa:
(wymagane)







Dzień, w którym pojawił się pierwszy komputer
Relacja ze Speccy.pl Party 2015.1 w Warszawie
Stare helikoptery jak Atari, nowe jak IBM PC
Warsaw Basic
Muzyka z gry International Karate a cappella

Fred - świetna gra zręcznościowa z 1984 roku
Strike Force Cobra
Zybex - szybka i kolorowa gra shoot'em up
Deathchase - pościg w lesie inspirowany Powrotem Jedi
Jumping Jack - klasyk wśród gier zręcznościowych

Trójwymiarowe wykresy w basicu na ZX Spectrum
Jednolinijkowy generator labiryntu w języku BASIC

ZX Spectrum - komputer z prawdziwego zdarzenia
Elwro 800 Junior - polski komputer edukacyjny

Grafika komputerowa
1000 słów o komputerach i informatyce