Oxford is Basic
część 1 - część 2

Tomasz "TSD" Dzierkowski
maniac64@nostalgia.pl

Spotykamy się już po raz drugi z tym frapującym językiem programowania. Po opublikowaniu pierwszej części mego artykułu, otrzymałem i do dziś otrzymuje Wasze pytania z nim związane. Udzielając odpowiedzi listownie, wprawdzie rozwiązałem większość palących problemów - jednak pozostał pewien niedosyt.

Większość z was zwracała się do mnie z pytaniem: o przebieg procesu kompilacji własnych programów lub możliwości czy raczej ograniczeń jakie posiada ten język programowania. Nie zawracając kijem Wisły postaram się naświetlić kilka kwestii z nim związanych tj. z Oxford Pascal'em.

KOMPILACJA WŁASNYCH PROGRAMÓW

Wbrew pozorom nie jest to walka z wiatrakami... Wystarczy zmienić tylko tok myślenia. Niestety kompilator był pisany przez ludzi, dla których zawiłości obsługi C-64 były obce. Pisali oni ten program jakby pod siebie i co jest z tym związane, reszta użytkowników zawsze miała z nim pewne problemy. Na początek należy wspomnieć, iż istnieją dwie wersje tego świetnego kompilatora :
- dla posiadaczy magnetofonów
- oraz posiadaczy stacji dysków (tylko tą będziemy się tu zajmować)

Różnica pomiędzy nimi jest dość istotna. Ci pierwsi dostali do swych rąk dobre narzędzie programistyczne, jednak z pewnymi ograniczeniami w jego użytkowaniu. Drudzy mając tzw. Full wersję nie umieli jej do końca wykorzystać... Koło się zamknęło. Poza tym wersja dyskowa jest dużą rzadkością pośród użytkowników Commodore 64. Niestety, winę ponosi za to mizerna jakość naszych "pirackich dystrybutorów", wśród których królował skopany dysk z tym programem.

Obecnie dzięki ożywieniu na scenie emulacji Commodore 64, pojawia się przed wami możliwość pobrania tego kompilatora w pełnej nieuszkodzonej wersji - plik Oxford Pascal.zip oraz dodatek do niego plik: Polgraph.zip (szczegóły w dalszej części artykułu). Niech nie zrazi Was, język w jakim napisano przykładowe programy tj. niemiecki. Gdyż moja kopia jest "przemycona" z tego kraju i poza tymi drobnymi niedogodnościami jest w pełni sprawna i funkcjonalna. Teraz wyłożę jeszcze kilka zasad, których przestrzeganie pozwoli uchronić was przed niepotrzebnym stresem i rozczarowaniami :

- do pracy wymagane jest posiadanie dwóch dyskietek - to znaczy mam tu na myśli jednej z samym programem kompilatora i drugiej z naszym programem w pascalu.

- program wymaga aby dyskietki były odbezpieczone przed zapisem (dotyczy to w szczególności dysku z naszym programem).

- w trakcie obecności kompilatora w pamięci, nie mogą być obecne żadne moduły rozszerzające np. Action Replay. Przed załadowaniem programu Oxford Pascal, należy je zdeaktywować (sprawdź w instrukcji twego modułu).

- praca ze stacją dysków odbywa się w Normalu (standardowo nie obsługuje żadnych dopalaczy typu Burst itp.) i TYLKO z urządzeniem numer 8 (pierwsza stacja dysków).

- jakikolwiek błąd dyskowy przerywa kompilację - należy więc sprawdzić nośnik, przed jego użyciem np. programem Dist Tester, lub innym o podobnych możliwościach.

Przebieg procesu kompilacji możemy w skrócie zobrazować jak poniżej (są to tylko moje sugestie, bo wszystko zależy od Was):

Powiększ 1. Piszemy własny program.
2. Kompilujemy go w trybie edycji - polecenie R lub L.
3. Nagrywamy na dysk - polecenie PUT:nasz_program.
4. Uruchamiamy tryb dyskowy - komenda DISK (załaduje się kompilator - po wydaniu tej komendy w stacji MUSI znajdować się dysk z kompilatorem).
5. Kompilujemy nasz pozbawiony błędów program - polecenie COMP nasz_program.
6. Kompilator zażąda od nas włożenia dysku z naszym programem i dokona jego kompilacji do zbioru wynikowego (ten z końcówką .OBJ).
7. Konsolidacja do zbioru wykonywalnego EXE (z końcówką .PRG) - za pomocą polecenia LOCATE:program=nasz_program.

Powiększ Nie muszę chyba dodawać, że w miejsce "nasz_program" itp. Wstawiamy właściwe nazwy plików z napisanym przez nas programem. Przyjrzyjcie się też zdjęciom dołączonym do artykułu.

STRUKTURA PROGRAMU W JĘZYKU PASCAL

Niestety temat ten jest tylko zasygnalizowany, ale w niedalekiej przyszłości zajmiemy się i samym programowaniem w Pascal'u. Wykorzystamy wszystką zdobytą do tej pory wiedzę do napisania aplikacji w tym języku - to już wkrótce... Piszcie jeżeli ten temat Was zainteresował - być może poruszymy zagadnienie programowania w Pascalu na PC, pod kątem wykorzystania tego na C-64 (w Delphi rzecz jasna - bo nie będziemy pisać pod Dos'em :)

Program w Pascalu składa się z kilku stałych elementów, i tak możemy w nim wyróżnić (przeanalizuj przykładowe programy na dysku z kompilatorem):

- nagłówek programu
- deklaracje etykiet
- deklaracje typów
- deklaracje stałych
- deklaracje zmiennych
- deklaracje procedur i funkcji
- blok wykonywalny pomiędzy instrukcjami Begin... End.

DODATKI: PAKIET POLGRAPH

W osobnym pliku znajduje się pakiet procedur graficznych POLGRAPH autorstwa Mariusza Ferdyna. Ów dodatek ukazał się drukiem w miesięczniku Bajtek 12/92r. Zamieszczona wersja pochodzi z tego artykułu i jest udostępniona przez jednego z naszych czytelników - któremu zgodnie z obietnicą serdecznie dziękuje za jej udostępnienie w wersji plikowej.

Powiększ Na dysku z kompilatorem, dodatkowo zamieściłem program SEQ-VIEWER do podglądania zawartości plików SEQ (uruchamiamy program i klawiszem F5 - dla Action Replay przeglądamy pliki SEQ - trzymając spację).

Pakiet procedur POLGRAPH należy włączyć do swojego programu w części deklaracji procedur - po szczegóły odsyłam do zamieszczonego przykładu z pliku demonstracyjnego.

Poniżej przedstawię opis procedur wchodzących w skład pakietu:

PM(mem, a1, a2, a3, a4, a5, a6)
Procedura ta wpisuje 6 bajtów w określony obszar pamięci - jest wykorzystywana przez procedurę INIT.
Mem - obszar, w który wstawia się 6 kolejnych bajtów
a1,a2... - wartości sześciu kolejnych bajtów

INIT
Procedura ta przepisuje kod maszynowy procedury PLOT2 mieszczący się w pamięci w obszarze $CC00-$CC84. Przed wykorzystaniem innych procedur z pakietu POLGRAPH należy wcześniej bezwzględnie przywołać tą procedurę.

PLOT2(x, y, pflag)
Procedura w zależności od zmiennej PFLAG, gasi lub zapala punkt w grafice wysokiej rozdzielczości.
x - współrzędna pozioma z zakresu 0 - 319
y - współrzędna pionowa z zakresu 0 - 199
pflag = 1 zapala punkt, = 0 gasi punkt

HIRES2(a, b)
Procedura włącza i czyści ekran grafiki wysokiej rozdzielczości.
a - kolor podkładu (background)
b - kolor atramentu (pen)

LINE(x1, y1, x2, y2, pflag)
Procedura kreśli lub wymazuje linie na ekranie wysokiej rozdzielczości.
x1, y1 - współrzędne punktu początkowego
x2, y2 - współrzędne punktu końcowego
pflag =1 kreśli, = 0 wymazuje

CIRCLE(x0, y0, r ,pflag)
Procedura kreśli lub wymazuje okrąg.
x0, y0 - współrzędne środka okręgu
pflag =1 kreśli, = 0 wymazuje

BOX(x0, y0, x1, y1, pflag)
Procedura wymazuje lub rysuje prostokąt.
x0, y0 - współrzędne górnego lewego rogu
x1, y1 - współrzędne dolnego prawego rogu
pflag =1 kreśli, = 0 wymazuje

Niestety Oxford Pascal nie pozwala na tworzenie własnych procedur bibliotecznych, tak więc przy wykorzystaniu procedur z zamieszczonego pakietu w swoich programach należy włączyć ten pakiet do kodu źródłowego własnego programu.

Na podstawie Bajtka 12/92 oraz własnych źródeł:

Tomasz 'TSD' Dzierkowski
maniac64@poczta.onet.pl

 © 1999-2020 Wszystkie prawa zastrzeżone
 Webmaster: Mariusz "Flooder" Młynek