|
Serwis Edukacyjny Nauczycieli w I-LO w Tarnowie
Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej
Autor artykułu: mgr Jerzy Wałaszek |
©2026 mgr Jerzy Wałaszek
|
| SPIS TREŚCI |
Zanim rozpoczniesz czytanie tego rozdziału:
pobierz plik instalacyjny emulatora VB81
przeczytaj instrukcję instalacji i użytkowania emulatora VB81
zapoznaj się z instrukcją
programowania w ZX81 BASIC
pobierz plik MCODER'a
Podstawowym językiem programowania komputera ZX81 był dialekt o nazwie ZX81 BASIC. Był to tzw. język interpretowany. Mikroprocesor przy pomocy odpowiedniego programu (tzw. interpretera języka ZX81 BASIC zawartego w ROM) odczytywał kolejne wiersze programu, rozpoznawał zawarte w nich instrukcje i wykonywał odpowiednie procedury wewnątrz swojej pamięci ROM. W ZX81 proces ten nie należał do najszybszych. Istniało kilka powodów wolnej pracy programów w języku ZX81 BASIC. Najważniejsze wymieniłem poniżej:
I tutaj właśnie wkracza kompilator, czyli specjalny program, który tłumaczy kolejne wiersze programu w języku ZX81 BASIC na kod maszynowy wykonywany bezpośrednio przez mikroprocesor Z80. Kompilator dokonuje wielu optymalizacji generowanego kodu, np skoki są wykonywane pod właściwy adres – odpada problem wyszukiwania wiersza o zadanym numerze. Do zmiennych również jest dostęp poprzez adres, a nie poprzez nazwę. Obliczenia wykonuje się na liczbach całkowitych – jest to naturalna dla Z80 postać liczb, zatem działania wykonywane są bardzo szybko – dziesiątki lub nawet setki razy szybciej od działań na liczbach zmiennoprzecinkowych. W efekcie tych optymalizacji program skompilowany pracuje wielokrotnie szybciej od standardowego programu w języku ZX81 BASIC.
Nie ma róży bez kolców. Zwykle kompilator potrafi przetłumaczyć tylko niektóre konstrukcje języka ZX81 BASIC. Jest to cena, którą płacimy za wzrost szybkości pracy programu.
Chociaż MCODER jest bardzo wyrafinowanym i wszechstronnym narzędziem, nie oczekuj od niego cudów, będziesz musiał się zaznajomić ze sposobem pracy tego kompilatora, aby uzyskać z niego jak największe korzyści.
Po załadowaniu musisz pamiętać, iż MCODER wykorzystuje wiersze o numerach od 1 do 3 i nie może być usunięty.
Gdy jesteś zadowolony z działania
swojego
programu, możesz przystąpić do jego kompilacji przy
pomocy polecenia
Jeśli zostanie zgłoszony błąd, powinieneś go poprawić i skompilować program ponownie.
Na końcu kompilacji zakończonej sukcesem zobaczysz trzy rzeczy:
i) położenie końca kodu MCODER'a
ii) rozkaz niezbędny do uruchomienia twojego skompilowanego programu
iii) pytanie, czy chcesz uruchomić natychmiast skompilowany program (odpowiedz Y dla tak lub N dla nie).
Podkreślamy raz jeszcze, iż prawdopodobnie twój program będzie wymagał istotnych zmian, ponieważ jest mało prawdopodobne, aby był napisany w postaci dogodnej dla MCODER'a.
Uwaga: nazwy zmiennych mogą zawierać jedynie litery A-Z oraz cyfry 0-9. Działania arytmetyczne są ograniczone do czterech podstawowych operacji + – * /.
AND operator logiczny I dozwolony tylko w poleceniu IF
ABS jak w BASIC'u
CHR$ jak w BASIC'u
CLS jak w BASIC'u
CLEAR jak w BASIC'u
CODE jak w BASIC'u
COPY jak w BASIC'u
DIM A(V) w MCODER'ze dozwolone są tylko jednowymiarowe tablice oraz w czasie działania programu musi być dostępne co najmniej 2*V bajtów wolnej pamięci. W trakcie wykonania nie są sprawdzane zakresy indeksów, zatem upewnij się, iż twój program działa pod zwykłym ZX81 BASIC. Jeśli zdefiniujesz ponownie tablicę, to zostanie utworzona jej nowa wersja bez skasowania starej. Oznacza to, iż wielokrotne tworzenie tej samej tablicy doprowadzi do zapełnienia pamięci i błędu 4 (brak pamięci) przy przydzielaniu pamięci dla nowej tablicy lub łańcucha znakowego. Przestrzeń dla tablic i łańcuchów rozciąga się od STKEND do 256 bajtów poniżej RAMTOP. Przy ponownym uruchomieniu programu skompilowanego MCODER'em kasowane są wszystkie tablice, łańcuchy oraz zmienne, a zajmowana przez nie pamięć jest ponownie dostępna. Nie ma tablic z łańcuchami znaków.
FAST jak w BASIC'u z tą różnicą, iż MCODER nie powraca do trybu SLOW przy zapełnieniu ekranu, podczas INPUT lub podczas PAUSE.
FOR
X = V TO U – zmienna X jest
zwiększana
z krokiem 1 od V do U. NEXT X kończy pętlę.
Uwaga:
(U – V) musi być mniejsze od 32767.
GOTO N wykonuje bezwarunkowy skok do wiersza N. Reszta jak dla GOSUB.
IF V op U THEN – gdzie op jest jednym z operatorów
AND, OR, <>,
=, <=, >= lub >, <.
Uwaga: V i U nie mogą
różnić się o więcej niż
32767. AND i OR nie
może być stosowane w operacjach
łańcuchowych.
INKEY$ jak w BASIC'u
INPUT a lub A$ jak w BASIC'u. Dla liczb a dozwolony jest wiodący minus. Dla łańcuchów maksymalna długość wynosi 31 znaków. Brak trybu graficznego.
INT dodane w celu ułatwienia testowania programów w języku BASIC.
LEN A$ jak w BASIC'u z tym wyjątkiem, iż A$ nie może być poddana slicingowiLET jak w BASIC'u
LPRINT jak w BASIC'u
NEW jak w BASIC'u
NEXT Zobacz opis FOR – NEXT
OR – operator logiczny LUB dozwolony tylko w poleceniach IF.
PAUSE V wstrzymuje wykonywanie programu na V/50 części sekundy w trybie SLOW. Nie przechodzi z trybu FAST do SLOW jak w Sinclair BASIC. Nie występuje mrugnięcie obrazu przy rozpoczęciu i zakończeniu PAUSE. V musi być dodatnie i mniejsze od 32768. Naciśnięcie SHIFT+EDIT (SHIFT+1 w PC) powoduje powrót do BASIC'a, dowolny inny klawisz powoduje wykonanie następnego polecenia.
PEEK jak w BASIC'u
PLOT jak w BASIC'u
POKE jak w BASIC'u
PRINT jak w BASIC'u
RAND jak w BASIC'u
REM ignorowane jak zwykle z wyjątkiem "REM?", które sprawdza, czy naciśnięto klawisze SHIFT+EDIT (SHIFT+1 w PC), a jeśli tak, to powraca do BASIC'az błędem D. Przydaje się to przy wychodzeniu z pętli nieskończonych (w VB81 mamy przycisk zatrzymywania programu).
RETURN powraca z podprogramu rozpoczętego przez GOSUB. Upewnij się, iż twoje instrukcje GOSUB zgadzają się z instrukcjami RETURN, ponieważ nie jest to sprawdzane.
RND zwraca liczbę pseudolosową pomiędzy 0 a 32767 (NIE jest takie samo jak w BASIC'u). Aby w BASIC'u otrzymać ten sam efekt, użyj USR 16550.SCROLL jak w BASIC'u
SGN jak w BASIC'u
SLOW jak w BASIC'u
SQR pierwiastek całkowity
STOP – jeśli MCODER napotka w programie polecenie
STOP, to zatrzyma w tym miejscu kompilację. Jeśli
chcesz mieć STOP w środku swojego programu, to polecenie
Łańcuchy. Standardowo łańcuchy posiadają
długość 32 znaków. Jeśli przekroczysz maksymalną
długość łańcucha, to będziesz zapisywał poza nim to,
co tam akurat się znajdzie
(albo inny łańcuch
albo tablicę).
Zaglądnij do punktu "Dalsze cechy MCODER'a".
Slicing na łańcuchach nie może przybierać postaci
UNPLOT jak w BASIC'u
USR jak w BASIC'u
W Sinclair BASIC'u, gdy drukowany tekst osiągnie spód ekranu, generowany jest błąd 5. W MCODER'ze, gdy wydruk tekstu osiągnie ten punkt, pojawi się znak ? w negatywie na spodzie ekranu po lewej stronie. Naciśnięcie CONT powoduje CLS i program wykonuje się dalej (przytrzymując palec na klawiszu CONT powodujesz, iż proces ten powtarza się w nieskończoność). Naciśnięcie SHIFT+EDIT (SHIFT+1 w PC) zatrzymuje program, klawisz D (SLOW) powoduje przewijanie treści ekranu z szybkością jednego wiersza na sekundę, naciśnięcie Z (COPY) tworzy kopię ekranu na drukarce ZX Printer. Dowolny inny klawisz od opisanych powoduje przewijanie ekranu w górę, gdy klawisz jest wciśnięty i zatrzymanie przewijania, gdy klawisz zostanie zwolniony. Klawisze te można dowolnie wybierać przy każdym wyświetleniu znaku "?".
Przy wykonywaniu skompilowanego programu MCODER zawsze musi być obecny, ponieważ zawiera on procedury wykorzystywane w czasie działania programu oraz procedury arytmetyczne. Jeśli masz zamiar mieszać program w BASIC'u z programem skompilowanym, to nie powinieneś używać rozkazu SCROLL, ponieważ niszczy on regularność bufora obrazu, którą wymaga MCODER.
Możesz określić miejsce umieszczenia kodu
tworzonego przez MCODER, jeśli wejdziesz poleceniem:
RAND USR 17287. Wtedy
MCODER wyświetli zapytanie CODE, na które powinieneś odpowiedzieć
wprowadzając adres, pod którym ma zostać
umieszczony skompilowany kod. Aby poznać rozmiar
kodu, skompiluj go pod adres 0. Istnieje również kilka
innych użytecznych adresów. W twoim programie
POKE
określa liczbę wierszy pozostawianych w spokoju.
Adres 16535 określa automatyczne przewijanie wierszy
podczas kompilacji. Jeśli zostanie tu wstawione zero,
to kompilator będzie czekał, jak opisano powyżej
w punkcie dotyczącym przewijania ekranu. Naciśnięcie
klawisza D spowoduje wyświetlenie wygenerowanego
kodu.
Możesz potrzebować kilka części skompilowanego kodu. Osiąga się to przy pomocy następującej procedury:
Program w języku BASIC można szybko usunąć
z pamięci wykorzystując polecenie
Wprowadź następujący, krótki program i skompiluj go:
| 100 FOR A=1 TO 50 200 FOR B=1 TO 30 300 PLOT A,B 400 NEXT B 500 NEXT A 600 STOP |
Gdy program zostanie skompilowany, porównaj prędkość kodu skompilowanego z prędkością programu w języku BASIC, a naocznie zobaczysz korzyści ze stosowania MCODER'a.
ZX81
(c) P.S.S. 1983
452, Stoney Stanton Road,
Coventry
CV6 5DG.
Telefon (0203) 667556
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2026 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.