Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

Autor artykułu: mgr Jerzy Wałaszek
Współpraca: mgr inż. Janusz Wałaszek

©2023 mgr Jerzy Wałaszek
I LO w Tarnowie

SPIS TREŚCI

CBI BASIC - instrukcja

Zanim rozpoczniesz czytanie tego rozdziału:

pobierz plik instalacyjny emulatora VB81
przeczytaj instrukcję instalacji i użytkowania emulatora VB81
pobierz pliki CBI.P oraz CBI-DEMO.P do użytku z emulatorem VB81

Zwykły ZX81 BASIC jest bardzo wolny. Dlatego powstały różne rozszerzenia i ulepszenia, które z jednej strony podnosiły komfort programowania, a z drugiej ulepszały sam BASIC. Poniżej przedstawiamy instrukcję do interpretera CBI. W przeciwieństwie do kompilatora (np. MCODER 2) interpreter nie tłumaczy programu na procedury w języku maszynowym, lecz odczytuje go, rozpoznaje zawarte w nim polecenia i wykonuje odpowiednie procedury w ROM lub w swoim kodzie. Dlatego ten sposób wykonywania programu nazywamy interpretacją - interpreter czyta i interpretuje polecenia języka BASIC.

Chociaż interpreter CBI zawiera wiele interesujących rozszerzeń języka ZX81 BASIC, to jednak jego zastosowanie jest ograniczone. Spowodowane to jest koniecznością załadowania samego interpretera przed załadowaniem programu napisanego w CBI. Jeśli chcesz, możesz się tym bawić. Jednak inni użytkownicy (o ile jeszcze takowi się znajdą) zapewne wolą prostszą metodę uruchamiania programów, dlatego MCODER2 wydaje się mi lepszą alternatywą.

ZX81 CORAL BASIC INTERPRETER

version 7.0
copyright by Carlo Delhez, 1987 - 1992

English manual first started 27th of September 1992
manual version 0.04 as of 92-12-08

ZX81 Coral Basic Interpreter was first marketed by Terminal Software, Baarle Nassau, Netherlands. The original Dutch manual is ISBN 90-6883-041-4, first printed November 1987.

INTERPRETER ZX81 CORAL BASIC

wersja 7.0
copyright Carlo Delhez, 1987 - 1992

Instrukcja w języku angielskim powstała 27 września 1992 roku
obecna wersja instrukcji to 0.04 z datą 92-12-08

Interpreter języka ZX81 Coral Basic był pierwotnie sprzedawany przez Terminal Software, Baarle Nassau, w Holandii. Oryginalna, holenderska instrukcja otrzymała numer ISBN 90-6883-041-4 i wydrukowano ją po raz pierwszy w październiku 1987 roku.

INTRODUCTION

CBI is an acronym for Coral Basic Interpreter. It combines the efficiency of a new and fast Pseudo Screen Editor with the ease of a powerful extension of the ZX81 BASIC.

CBI provides you with a new Full Entry Editor which can be used in Line Mode or Pseudo-Screen Mode. All the disadvantages of the (rather slow) regular ZX81 editor have vanished, e.g. as a result of the Auto Repeat on all keys, yet all its useful features, such as Direct Syntax Check and Pull Down Edit, are still available! Moreover, the Full Entry Editor is completely space-insensitive, so any computer freak can easily use a ZX81 now without actually having to know which keys to press to obtain the various keywords.

Additionally, the ZX81 BASIC has been extended with 43 new commands and many `old' commands have been revised for faster or better operation. The new possibilities include:

  1. Several useful programming aids, such as automatic line numbering, deletion of large blocks of program lines by a single command, data protection against NEW, CLEAR and RUN, program renumbering, racing and deceleration of program execution, etc.
  2. The possibility to use Pascal- and C-like structures, making commands like GOTO and GOSUB completely superfluous: Procedures with two-way data transport (any number of strings or numerical variables may be used for data exchange), conditional loop structures (DO, LOOP, EXIT, WHILE, UNTIL), expanded IF statement that allows for conditional execution of a block of program lines and also offers an ELSE condition.
    And of course, all these structures may be nested at will!
  3. Efficient data manipulations by way of commands like DATA, READ and RESTORE; easy stack manipulations via POP, PUSH, DUP, CLR STACK.
  4. Useful applications for machine code programmers such as DPOKE, DPEEK and CALL, and also the unique possibility to expand the ZX81 BASIC even further with your own machine code routines which may read the required parameters directly from BASIC.
  5. Faster and improved graphical capabilities.

Even though CBI offers so many advanced features, the actual code is only some 5k in length and is stored above RAMTOP (by default). CBI is suited to be used with all existing ZX81 BASIC and machine code programs. Programs written in CBI can also be used on a `normal' ZX81, provided that you don't use the new commands in your program.

WPROWADZENIE

CBI jest skrótem nazwy Coral Basic Interpreter. Łączy on wydajność nowego i szybkiego edytora pseudo ekranowego z prostym i potężnym rozszerzeniem ZX81 BASIC.

CBI udostępnia ci nowy Edytor, który możesz używać w trybie wierszowym lub pseudo ekranowym. Wszystkie wady (raczej wolnego) zwykłego edytora ZX81 zniknęły, np. w wyniku samopowtarzania na wszystkich klawiszach, jednocześnie wszystkie użyteczne cechy, takie jak bezpośrednie sprawdzanie składni poleceń oraz edycja ze ściąganiem w dół wiersza programu, wciąż są dostępne! Co więcej, nowy edytor jest całkowicie nieczuły na separatory, zatem każdy maniak komputerowy może teraz z łatwością używać ZX81 bez potrzeby uczenia się funkcji poszczególnych klawiszy.

Dodatkowo ZX81 BASIC został rozszerzony o 43 nowe rozkazy, a wiele 'starych' rozkazów zostało przyspieszonych i ulepszonych. W nowych możliwościach mamy:

  1. Kilka użytecznych narzędzi programowania, takich jak automatyczne numerowanie wierszy, usuwanie dużych bloków programu pojedynczym rozkazem, ochrona danych przed NEW, CLEAR i RUN, przenumerowywanie wierszy, itp.
  2. Możliwość stosowania struktur takich jak w Pascalu czy w C, co sprawia, iż polecenia takie jak GOTO i GOSUB stają się zupełnie zbędne. Procedury z obustronnym przekazywaniem danych (do wymiany danych można stosować dowolną liczbę łańcuchów lub zmiennych liczbowych), pętle warunkowe (DO, LOOP, EXIT, WHILE, UNTIL), rozszerzone polecenie IF, które umożliwia warunkowe wykonywanie bloku programu oraz udostępnia również opcję ELSE.
    I oczywiście wszystkie te struktury można zagnieżdżać do woli.
  3. Efektywne przekazywanie danych dzięki rozkazom DATA, READ i RESTORE; łatwa obsługa stosu poprzez POP, PUSH, DUP, CLR STACK.
  4. Wygodne funkcje i polecenia dla programistów w kodzie maszynowym, takie jak DPOKE, DPEEK i CALL, jak również unikalna możliwość dalszego rozszerzenia ZX81 BASIC o twoje własne procedury w kodzie maszynowym, które mogą odczytywać pożądane parametry bezpośrednio z języka BASIC.
  5. Szybsze i ulepszone możliwości graficzne.

Pomimo tych wszystkich zaawansowanych funkcji CBI, rzeczywisty kod zajmuje tylko około 5K i jest umieszczany ponad RAMTOP (standardowo). CBI można stosować ze wszystkimi istniejącymi programami w ZX81 BASIC oraz w kodzie maszynowym. Programy napisane w CBI można również używać na 'normalnym' ZX81 pod warunkiem, iż nie używają one nowych rozkazów.

STARTING CBI

By default, the code of CBI is stored above RAMTOP. Before loading the program, you must reserve space for the code. Type the following commands to achieve this:

POKE 16388,8
POKE 16389,107
NEW

Now you can load the program:

LOAD "CBI"

After loading, press any key to clear the ZX81. CBI can now be activated by a call to address 27400:

RAND USR 27400

If all goes well, the normal message 0/0 should appear (yet one line higher than usual) and just below it a black block: the cursor. CBI is now ready to be used.

NOTE 1:

In some cases the ZX81 may switch from CBI to its `normal' operating system (i.e. the K-cursor reappears). This happens for example after the NEW command. In such cases, CBI can be restarted by typing the command RAND USR 27400 again. If this doesn't bring you back to the CBI cursor, type POKE 16393,0 first, and then try again. If this still doesn't work, reset the ZX81 and reload CBI.

NOTE 2:

If you wish to restart CBI without leaving it, the command POKE 16393,0 must be typed. This will refresh all the system variables held by CBI.

NOTE 3:

As CBI is quite an extensive and advanced piece of software, it may still contain bugs. If you have problems with CBI or discover bugs, please contact me at the address at the bottom of this document.

URUCHAMIANIE CBI

Standardowo kod CBI jest umieszczany ponad RAMTOP. Zanim załadujesz ten program, musisz zarezerwować miejsce na jego kod. Aby to osiągnąć, wpisz następujące rozkazy:

POKE 16388,8
POKE 16389,107
NEW

Teraz możesz załadować program:

LOAD "CBI"

Po załadowaniu, naciśnij dowolny klawisz w celu wyczyszczenia ZX81. Teraz CBI można aktywować poleceniem:

RAND USR 27400

Jeśli wszystko poszło dobrze, to powinien pojawić się normalny komunikat 0/0 (jednak o jeden wiersz wyżej niż zwykle), a poniżej niego jest czarny kwadrat: kursor. CBI jest gotowy do użycia.

UWAGA 1:

Niekiedy ZX81 może przełączyć się z CBI do swojego "zwykłego" systemu (pojawi się kursor K). Dzieje się tak np. po rozkazie NEW. W takim wypadku CBI można uruchomić ponownie wpisując jeszcze raz RAND USR 27400. Jeśli nie pojawi się kursor CBI, to wpisz najpierw POKE 16393,0 i spróbuj jeszcze raz. Jeśli wciąż nie będzie rezultatu, zresetuj ZX81 i przeładuj CBI.

UWAGA 2:

Jeśli chcesz zresetować CBI bez wychodzenia z niego, to wpisz polecenie POKE 16393,0. Odświeży ono wszystkie zmienne systemowe utrzymywane przez CBI.

UWAGA 3:

CBI jest dosyć zaawansowanym oprogramowaniem, które wciąż może zawierać błędy. Jeśli będziesz miał problemy z CBI lub odkryjesz błąd, to skontaktuj się ze mną przy pomocy adresu umieszczonego na końcu tej instrukcji.

THE NEW COMMANDS

In the following section, all new commands offered by CBI are summed up alphabetically with required syntax, brief explanation of usage and - where needed - one or more examples.

The required syntax is written down with special symbols. These are:

  • bln : boolean value (zero for false or non-zero for true); a boolean value is used by conditional commands like IF.
    Example:
    X<Y AND Y>100
  • data_list : a list containing any number of numerical expression and/or string expressions, with successive entries separated by commas. String expressions need to be preceded by a period ('.') as well.
    Example:
    81,.("ZX"+STR$ 81),92,."CBI"
  • name : consists out of alphanumerical symbols; the first symbol must be a letter (not a number).
    Example:
    PROFIT89NET
  • sw : switch word; can be ON or OFF.
  • swv : switch value; can be 1 (for ON) or 0 (for OFF).
  • var : name of a numerical variable that need not be declared yet.
    Example:
    OLDX
    or: A(10,3)
  • $var : name of a string variable that need not be declared yet.
    Example:
    R$
    or: X$(3)
  • x y z : numerical expressions.
    Example:
    127
    or: 3*R/(2*Q*B(1)+1)
    or: COS(PI*H/6)
  • [...|...] : represents a choice between two possible items.
    Example:
    [ UNTIL | WHILE ]
  • {...} : optional part of the syntax; may - but need not - be omitted.
  • {x} : numerical expression or nothing; when no numerical expression is typed by the user, the value x=0 will be assumed.

NOWE ROZKAZY

W następnym rozdziale podsumowane są alfabetycznie wszystkie nowe rozkazy oferowane przez CBI wraz z wymaganą składnią, z krótkim wyjaśnieniem użycia oraz, tam gdzie potrzeba, z jednym lub kilkoma przykładami.

Wymagana składnia zapisywana jest przy pomocy specjalnych symboli. Oto one:

  • bln : wartość logiczna (zero dla fałszu lub różne od zera dla prawdy); wartości logiczne używane są przez polecenia warunkowe, takie jak IF.
    Przykład:
    X<Y AND Y>100
  • data_list : lista zawierająca dowolną liczbę wyrażeń liczbowych i/lub łańcuchowych, z kolejnymi elementami rozdzielonymi przecinkami. Wyrażenia łańcuchowe należy poprzedzać kropką.
    Przykład:
    81,.("ZX"+STR$ 81),92,."CBI"
  • name : składa się z liter i cyfr, pierwsza musi być litera.
    Przykład:
    PROFIT89NET
  • sw : słówko przełącznika; może być ON lub OFF.
  • swv: wartość przełącznika; może być 1 (dla ON) lub 0 (dla OFF).
  • var : nazwa zmiennej liczbowej, które nie musi być wcześniej deklarowana.
    Przykład:
    OLDX
    lub: A(10,3)
  • $var : nazwa zmiennej łańcuchowej, która nie musi być wcześniej deklarowana.
    Przykład:
    R$
    lub: X$(3)
  • x y z : wyrażenia liczbowe.
    Przykład:
    127
    lub: 3*R/(2*Q*B(1)+1)
    lub: COS(PI*H/6)
  • [...|...] : wybór pomiędzy dwoma możliwymi elementami.
    Przykład:
    [ UNTIL | WHILE ]
  • {...} : opcjonalna część składni, jeśli nie będzie potrzebna, może być pominięta.
  • {x} : wyrażenie liczbowe lub nic; jeśli nie zostanie podane przez użytkownika, to jego wartość będzie wynosiła zero.

AUTO x STEP y

Each time the cursor appears on the screen, a line number will be printed automatically. The line number starts with value x and is incremented in steps y. The auto-function ends when an empty line is entered (i.e. by pressing NEWLINE immediately after the line number) or when the line number exceeds 9999. AUTO also works with numerical INPUT statements (may be used to show a default value which may be altered by the user).

Example:

AUTO 50 STEP 10

generates 50,60,70,...

AUTO 92 STEP 9999

generates 92 only.

AUTO x STEP y

Za każdym razem gdy kursor pojawi się na ekranie, zostanie wydrukowany automatycznie numer wiersza. Numeracja rozpoczyna się od x i zwiększa się z krokiem y. Autonumeracja wierszy zostaje przerwana po wprowadzeniu pustego wiersza (tj. po naciśnięciu NEWLINE bezpośrednio za numerem wiersza) lub przy przekroczeniu 9999. AUTO pracuje również z poleceniami INPUT (można go użyć do pokazania standardowej wartości, którą może zmienić użytkownik).
Przykład:

AUTO 50 STEP 10

generuje 50,60,70,...

AUTO 92 STEP 9999

generuje tylko 92.

BREAK sw

Enables the user to enable/disable the break key function. When the edit mode is entered (e.g. after an error message), break is automatically enabled again. When the break key is disabled, a program can also not be halted by typing STOP for an INPUT value.

Example:

10 BREAK OFF
20 DO UNTIL INKEY$="S"

30 LOOP

This program can only be stopped by pressing "S". Note that the break key always remains enabled during LOAD and SAVE.

BREAK sw

Pozwala użytkownikowi włączyć/wyłączyć funkcję klawisza przerywającego (spacja). Przy wejściu w tryb edycji (np. po komunikacie błędu) przerywanie jest automatycznie włączane. Gdy klawisz przerywający jest wyłączony, to również nie można zatrzymać programu wpisując STOP jako wartość dla INPUT.
Przykład:

10 BREAK OFF
20 DO UNTIL INKEY$="S"
30 LOOP

Ten program można zatrzymać tylko klawiszem "S". Uwaga: klawisz przerywający zawsze pozostaje włączony podczas wykonywania rozkazów LOAD i SAVE.

CALL x

Calls the machine code program at address x. CALL replaces RAND USR and similar commands.

Example:

CALL 2602

wipes the screen (ROM routine for CLS).

CALL x

Wywołuje program maszynowy pod adresem x. CALL zastępuje RAND USR i podobne polecenia.

Przykład:

CALL 2602

czyści ekran (procedura w ROM dla CLS).

CHAR x

Equivalent to PRINT CHR$ x; but takes care of automatic scrolling when the screen gets filled in CBI-mode and is suited for all characters (including the new CBI keywords).

Example:

10 FOR K=0 TO 255
20 CHAR K
30 NEXT K

prints the entire character set.

CHAR x

Zastępuje PRINT CHR$; lecz w trybie CBI automatycznie przewija ekran, gdy ten się zapełni. Dodatkowo obsługuje nowe nazwy poleceń w CBI.
Przykład:

10 FOR K=0 TO 255
20 CHAR K
30 NEXT K

drukuje cały zestaw znaków.

CLR STACK

Clears the entire stack. CLR STACK should be used after having interrupted a subroutine or a procedure by BREAK and you don't want to resume its execution. This prevents unwanted `stack growth'.

Example:

10 GOSUB 30
20 STOP
30 CLR STACK
40 RETURN

You'll get error 7/40 because CLR STACK deleted the return line number.

CLR STACK

Czyści cały stos. CLR STACK powinno być stosowane po przerwaniu podprogramu za pomocą klawisza BREAK, gdy nie chcesz wznowić wykonania. Pozwala zapobiec niechcianemu "wzrostowi stosu".

Przykład:

10 GOSUB 30
20 STOP
30 CLR STACK
40 RETURN

Otrzymasz błąd 7/40, ponieważ CLR STACK usunął ze stosu adres powrotny.

CURSOR x

Lets CHR$(x) act as a cursor in the CBI line editor. Use only single-position characters (no keywords) and also no control codes (like NEWLINE).

Example:

CURSOR 131

gives 'half' a cursor.

CURSOR x

Jako kursor będzie stosowany znak CHR$(x) w edytorze wierszowym CBI. Używaj tylko pojedynczych znaków (nie słów kluczowych lub kodów sterujących - np. NEWLINE).

Przykład:

CURSOR 131

daje kursor "połówkowy".

DATA data_list

Provides the data for a READ statement. It is necessary to issue a RESTORE command at least once in the program in order that the data-pointer has a proper value.

Example:

10 RESTORE
20 READ N$
30 READ NUMBER

40 PRINT N$;NUMBER
50 DATA ."ZX",81

DATA data_list

Udostępnia dane dla polecenia READ. W programie należy wydać przynajmniej jedno polecenie RESTORE, aby wskaźnik danych przyjął właściwą wartość.

Przykład:

10 RESTORE
20 READ N$
30 READ NUMBER
40 PRINT N$;NUMBER

50 DATA ."ZX",81

DEF PROC name

Starts the definition of a procedure named 'name'. This definition must be ended by an END PROC statement. The procedure may be called by the command

name{:data_list}

and in case the data_list is added, the data-pointer will be set to point to it, so that the parameters in the list may be read by READ commands. When a DEF PROC is encountered during execution of a program, its entire definition block will be skipped (i.e. not executed). Procedure definitions may be nested, but this is not advised. DEF PROC should not be used as a direct command.

Example:

10 DEF PROC ENIGMA
20 READ X$
30 FOR K=1 TO LEN X$
40 LET X$=X$(2*K-1)+X$
50 NEXT K
60 END PROC .X$( TO LEN X$/2)
70 ENIGMA:."DESREVER"
80 READ E$
90 PRINT E$

DEF PROC name

Rozpoczyna definicję procedury o nazwie "name". Definicja musi kończyć się poleceniem END PROC. Procedurę można wywołać poleceniem:

name{:data_list}

a w przypadku, gdy dodano listę danych, wskaźnik danych zostanie na nią ustawiony, aby można było odczytać parametry rozkazami READ. Gdy podczas wykonywania programu zostanie napotkane DEF PROC, to cały blok będzie pominięty (tj. nie zostanie wykonany). Definicje procedur można zagnieżdżać, lecz nie polecam tego rozwiązania. DEF PROC nie należy używać w trybie bezpośrednim.

Przykład:

10 DEF PROC ENIGMA
20 READ X$
30 FOR K=1 TO LEN X$
40 LET X$=X$(2*K-1)+X$
50 NEXT K
60 END PROC .X$( TO LEN X$/2)
70 ENIGMA:."DESREVER"
80 READ E$
90 PRINT E$

DELETE x TO y

Removes all the lines with number x through y from the program. Neither line x nor line y need actually exist. DELETE may only be used as a direct command.

Example:

DELETE 0 TO 9999

deletes entire program.

DELETE x TO y

Usuwa z programu wszystkie wiersze od numeru x do y. Wiersze x i y nie muszą być obecne w programie. DELETE można używać tylko w trybie bezpośrednim.

Przykład:

DELETE 0 TO 9999

usuwa cały program.

DO { [UNTIL|WHILE] bln }

The DO command indicates the beginning of a (conditional) loop structure, which has to be ended by a matching LOOP command. The three possible structures are:

DO ... LOOP : unconditional (infinite) loop
DO UNTIL bln ... LOOP : repeat until bln=true (1)
DO WHILE bln ... LOOP : repeat while bln=true
(1)

It is possible to leap out of each of these three structures by way of an EXIT command within the loop. The DO...LOOP structures may be nested at will.

Example:

10 INPUT X
20 LET Y=X
30 DO UNTIL Y*Y=X

40 LET Y0=Y
50 LET Y=(Y+X/Y)/2
60 IF Y0=Y THEN EXIT
70 PRINT "SQR(";X;")=";Y
80 LOOP

DO {[UNTIL|WHILE] bln }

Polecenie DO oznacza początek (warunkowej) pętli, która musi się kończyć pasującym do niej poleceniem LOOP. Istnieją trzy możliwe rodzaje pętli:

DO ... LOOP : pętla bezwarunkowa (nieskończona)
DO UNTIL bln ... LOOP : powtarza aż do bln=prawda (1)
DO WHILE bln ... LOOP : powtarza podczas gdy bln=prawda (1)

Z każdej pętli można wyjść przed czasem przy pomocy rozkazu EXIT. Pętle DO...LOOP mogą być do woli zagnieżdżane.

Przykład:

10 INPUT X
20 LET Y=X
30 DO UNTIL Y*Y=X
40 LET Y0=Y
50 LET Y=(Y+X/Y)/2
60 IF Y0=Y THEN EXIT
70 PRINT "SQR(";X;")=";Y
80 LOOP

DPEEK var,x

Double peek (word value), equivalent to the more cumbersome command:

LET var=PEEK x+256*PEEK (x+1)

Example:

DPEEK DF,16396

lets DF point to the display file.

DPEEK var,x

Podwójne pobranie z pamięci (wartość słowa), równoważne niewygodnej konstrukcji:

LET var=PEEK x+256*PEEK (x+1)

Przykład:

DPEEK DF,16396

DF wskazuje bufor wyświetlania.

DPOKE x,y

Double poke (word value), equivalent to the more cumbersome set of commands:

POKE x,y-256*INT (y/256)
POKE x+1,INT (y/256)

Example:

DPOKE 32734,DF+1

has the effect of HOME (also see example at DPEEK for definition of DF). A number that has been stored by DPOKE can be read by DPEEK and vice versa.

DPOKE x,y

Podwójne wstawienie do pamięci (wartości słowa), równoważne niewygodnej konstrukcji:

POKE x,y-256*INT (y/256)
POKE x+1,INT (y/256)

Przykład:

DPOKE 32734,DF+1

posiada taki sam efekt jak HOME (zobacz również na przykład przy DPEEK, gdzie jest definicja DF). Liczba umieszczona w pamięci przez DPOKE może być odczytana przez DPEEK i na odwrót.

DRAW TO x,y

Draws the best possible line from the last plot position to position (x,y). Note that a line drawn from (a,b) to (c,d) is not exactly the same as a line drawn from (c,d) to (a,b). For wiping a line drawn by DRAW, UNDRAW must be applied in the same direction.

Example:

PLOT 0,0
DRAW TO 63,43

draws a line across the screen.

DRAW TO x,y

Rysuje najlepszą możliwą linię od ostatniej pozycji graficznej do pozycji (x,y). Uwaga: linia narysowana od punktu (a,b) do (c,d) nie jest taka sama jak linia od punktu (c,d) do (a,b). Do wymazywania linii narysowanej przez DRAW należy zastosować UNDRAW w tym samym kierunku.

Przykład:

PLOT 0,0
DRAW TO 63,43

rysuje przekątną ekranu.

DUP var

Copies the value of the top element of the stack into variable var. The stack itself remains unaltered.

Example:

10 DEF PROC WHERE
20 DUP RT
30 PRINT "CALLED FROM ";RT
40 END PROC
80 WHERE

DUP var

Kopiuje wartość szczytowego elementu stosu do zmiennej var. Sam stos pozostaje niezmieniony.

Przykład:

10 DEF PROC WHERE
20 DUP RT
30 PRINT "CALLED FROM ";RT
40 END PROC
80 WHERE

EDIT x

Moves line x (or the first line with a number higher than x) into the editor. May only be used as a direct command.

EDIT x

Przekazuje wiersz x (lub, w przypadku braku wiersza x, pierwszy wiersz o numerze większym od x) do edytora. Może być używane tylko jako polecenie bezpośrednie.

ELSE

To be used in combination with WHEN - see there.

ELSE

Używane razem z WHEN - doczytaj dalej tam.

END PROC {data_list}

Indicates the end of a procedure definition. When the procedure is executed and the data_list after the END PROC is present, the data pointer will be set to point to this data_list, so READ commands can be used to read the data. For an example of a procedure with two-way data exchange see DEF PROC.

END PROC {data_list}

Oznacza koniec definicji procedury. Gdy procedura jest wykonywana i za END PROC umieszczono data_list, to wskaźnik danych zostanie ustawiony na data_list, aby polecenie READ mogły zostać użyte do odczytu danych wyjściowych. Przykład użycia procedury z obustronną wymianą danych znajdziesz w opisie DEF PROC.

END WHEN

Indicates the end of a WHEN structure - see WHEN for more details.

END WHEN

Oznacza koniec struktury WHEN - więcej szczegółów w opisie WHEN.

ERR MSGS sw

When ERRor MeSsaGeS are on, all error messages will be briefly explained in plain English. Unknown error messages will be commented as 'ERROR?'.

Example:

ERR MSGS ON

enable error messages

PLOT 100,100 ... B/0 INTEGER OUT OF RANGE

ERR MSGS sw

Gdy jest włączone opisywanie błędów (ERR MSGS ON), to wszystkie błędy będą krótko opisane w języku angielskim. Nieznany rodzaj błędu zostanie  opisany jako "ERROR?".

Przykład:

ERR MSGS ON

włącza opisywanie błędów

PLOT 100,100 ... B/0 INTEGER OUT OF RANGE

ERROR x

When CHR$(x) is a printable, non-control, single-position character, an error message with this character will be forced. Note that ERROR 28 has no effect.

Example:

ERROR 63 ... Z/0

ERROR x

Wymusza komunikat błędu ze znakiem CHR$(x), który powinien być drukowalny, nie sterujący i pojedynczy (czyli np. nie nazwa funkcji czy rozkazu języka ZX81 BASIC lub CBI). Uwaga - ERROR 28 nie działa.

Przykład:

ERROR 63 ... Z/0

EXIT

Has two different applications:

  1. as direct command: quit CBI (not a very sensible decision!);
  2. in a program: jumps out of the current LOOP structure.

For an example of case (2), see the DO command.

EXIT

Posiada dwa różne zastosowania:

  1. Jako polecenie bezpośrednie kończy CBI (niezbyt sensowna decyzja).
  2. W programie: wychodzi z bieżącej struktury LOOP.

Przykład dla przypadku 2 znajdziesz w opisie rozkazu DO.

HOME

A fast and economic alternative for PRINT AT 0,0;

HOME

Szybka i ekonomiczna alternatywa dla PRINT AT 0,0;

INDENT

Gives your program a proper, professionally looking lay-out. Use INDENT to improve the legibility and survivability of your program; the structure of your program is much clearer after using this command. When INDENT comes across a structural error in your program, it will stop its task. Note that INDENT may only be used as a direct command and sometimes results in undefined (and unimportant) error messages.

INDENT

Nadaje twojemu programowi właściwy układ o profesjonalnym wyglądzie. Używaj INDENT do poprawy czytelności swojego programu, gdyż po zastosowaniu tego rozkazu struktura programu staje się dużo bardziej przejrzysta.  Jeśli INDENT napotka w twoim programie błąd strukturalny, to przestanie działać. Uwaga - INDENT można używać tylko jako polecenie bezpośrednie, które czasami daje w wyniku nieokreślone (i nieistotne) komunikaty błędów.

LINE var,x

Puts into variable var the address where Basic line x or the first line with a number larger than x starts. The actual command of that line is then located at address var+4 (e.g. PRINT).

Example:

LINE FIRST,0

always FIRST=16509, start of basic area

LINE var,x

Umieszcza w zmiennej var adres wiersza x lub, w przypadku braku wiersza x w programie, adres pierwszego wiersza o numerze większym od x. Polecenie umieszczone w tym wierszu (np. PRINT) rozpoczyna się od adresu var+4.

Przykład:

LINE FIRST,0

zawsze FIRTS=16509, początek obszaru programów w języku ZX81 BASIC.

LOOP

Indicates the end of a DO...LOOP structure - see DO for an example.

LOOP

Oznacza koniec struktury DO...LOOP - przykład użycia w opisie polecenia DO.

NOSTALGIC sw

Switches between the two possible edit modes:

  1. NOSTALGIC ON : N-mode (nostalgic mode).
  2. NOSTALGIC OFF : CBI-mode (Coral Basic mode, screen editor).

NOSTALGIC sw

Przełącza pomiędzy dwoma dostępnymi trybami edycji:

  1. NOSTALGIC ON : tryb normalny (tryb nostalgiczny).
  2. NOSTALGIC OFF : tryb CBI (edytor ekranowy Coral Basic).

ON/OFF

These two reserved CBI keywords can only be used in combination with other CBI commands, viz. those that need 'sw' as parameter.

Example:

NOSTALGIC ON
BREAK OFF

ON/OFF

Te dwa zarezerwowane słówka kluczowe CBI mogą być używane tylko w połączeniu z innymi rozkazami CBI, które wymagają "sw" jako parametru.

Przykład:

NOSTALGIC ON
BREAK OFF

POP var

Takes the top element off the stack and stores its value in variable 'var'.

Example:

1000 DEF PROC ALTER
1010 POP CRA
1020 POP LRA
1030 IF LRA>=1E4 THEN LET LRA=1E4
1040 PUSH LRA
1050 PUSH CRA
1060 END PROC

This procedure needs to be called just before the end of another procedure as to make sure that the latter does not cause error B when it was called by way of a direct command.

POP var

Pobiera szczytowy element ze stosu i umieszcza go w zmiennej var.

Przykład:

1000 DEF PROC ALTER
1010 POP CRA
1020 POP LRA
1030 IF LRA>=1E4 THEN LET LRA=1E4
1040 PUSH LRA
1050 PUSH CRA
1060 END PROC

Ta procedura musi być wywołana tuż przed końcem innej procedury, aby upewnić się, że ta druga procedura nie wywoła błędu B w przypadku wywołania za pomocą polecenia bezpośredniego.

PROTECT sw

Can be used to disable the commands CLEAR, RUN and NEW in order to protect programs and variables against accidental loss.

Example:

PROTECT ON
LET
AMOUNT=99.95

CLEAR

PROTECT sw

Można używać do blokowania poleceń CLEAR, RUN i NEW w celu ochrony programów i zmiennych przed przypadkową utratą.

Przykład:

PROTECT ON
LET
AMOUNT=99.95

CLEAR

PUSH x

Stores the number x on top of the stack - see example at POP.

PUSH x

Umieszcza liczbę x na szczycie stosu - zobacz na przykład w opisie POP.

READ [var|$var]

The READ command is an important tool for data exchange between various parts of a program. The three different ways in which the READ command can be used are summed up below. In general, READ takes a data item from the data list that is specified by the current value of the data pointer. In case no data item can be found, error G results.

  1. Combined with DATA and RESTORE;
    This is the most obvious usage - see DATA for an example.
  2. Combined with PROCedures;
    Both while calling a procedure and while returning from it, data can be passed - see DEF PROC and END PROC.
  3. By way of direct reading and/or setting of the data pointer (address 32732). The following program is an example of this method:

10 RAND PI
20 RESTORE
30 DATA 0
40 DPOKE 32732,16514
50 READ X
60 PRINT X

READ {var|$var}

Rozkaz READ jest ważnym narzędziem do wymiany danych pomiędzy różnymi częściami programu. Poniżej podsumowujemy trzy różne sposoby stosowania rozkazu READ. Ogólnie READ pobiera element danych z listy danych określonej bieżącą wartością wskaźnika danych. Jeśli nie można pobrać takiego elementu z listy, powstaje błąd G.

  1. W połączeniu z DATA i RESTORE;
    Jest to najczęstsze zastosowanie - przykład znajdziesz w opisie DATA.
  2. W połączeniu z procedurami;
    Dane można przekazywać zarówno przy wywoływaniu procedury jak i przy powrocie z niej - zobacz na DEF PROC i END PROC.
  3. Za pomocą bezpośredniego odczytu lub ustawiania wskaźnika danych (o adresie 32732). Poniższy program jest przykładem tej metody:

10 RAND PI
20 RESTORE
30 DATA 0
40 DPOKE 32732,16514

50 READ X
60 PRINT X

RESEQ x:y,z

Resequences the program from line x onwards by renumbering this one to line y and proceeding with steps z. The RESEQ command does not change line numbers after GOTO and GOSUB statements (the VB81 renumber function does this, but it causes the CBI to exit so you must restore it again with RND USR 27400); taking into account the numerous possibilities for structured programming offered by CBI, this seems no restriction (unfortunately it is).

Example:

RESEQ 0:100,10

renumbers program as 100,110,120,...

RESEQ x:y,z

Zmienia numerację wierszy programu poczynając od wiersza x w górę. Wiersz x zostanie przenumerowany na y, a kolejne wiersze otrzymają numery z krokiem z. Rozkaz RESEQ nie zmienia numerów wierszy za GOTO i GOSUB (renumeracja w VB81 robi to!, ale powoduje wyjście z CBI, który należy ponownie uruchomić poleceniem RAND USR 27400); lecz biorąc pod uwagę liczne możliwości programowania strukturalnego oferowane przez CBI, nie wydaje się to być ograniczeniem (a jednak jest - uwaga od tłum.).

Przykład:

RESEQ 0:100,10

przenumerowuje program jako 100, 110, 120, ...

RESTORE {x}

Positions the data pointer on the first data element found in or after line x. Note that RESTORE without number looks for the first data element in the program. See DATA for an example.

RESTORE {x}

Ustala pozycję wskaźnika danych na pierwszym elemencie znalezionym w wierszu x lub w wierszach następnych za x. RESTORE bez numeru wiersza szuka pierwszego elementu danych w programie. Przykład użycia znajdziesz w opisie DATA.

TRACE swv;{x}

In case swv=1 a program will be traced during running: before executing subsequent lines of Basic, the line number will be displayed in the top right hand corner and a small pause (in length proportional to x) will be held. On a normal ZX81, use x=2750 for 1 second.

Example:

TRACE 1;2000

waits approx. 0.72 second.

TRACE swv;{x}

W przypadku swv=1 program będzie śledzony podczas jego działania: przed wykonaniem kolejnych wierszy BASIC'u, w prawym górnym narożniku ekranu pojawi się numer wiersza oraz nastąpi małe opóźnienie {o długości proporcjonalnej do x). Na typowym ZX81 używaj x=2750 dla opóźnienia równego 1 sekundzie.

Przykład:

TRACE 1;2000

czaka około 0,72 sekundy.

UNDRAW TO x,y

Works just like DRAW TO, but uses UNPLOT instead of PLOT.

UNDRAW TO x,y

Działa tak jak DRAW TO, lecz do rysowania punktów używa UNPLOT zamiast PLOT.

UNTIL/WHILE

These reserved CBI keywords can only be used in combination with a DO...LOOP structure. See DO for an example.

UNTIL/WHILE

Te zarezerwowane słowa kluczowe CBI mogą być użyte tylko w połączeniu ze strukturą DO...LOOP. Przykład użycia znajdziesz w opisie DO.

USER x

Probably the most interesting command for machine code programmers. The USER command has the effect that subsequent '*' commands are redirected to the user-definable machine code routine at address x. This allows the user to easily expand the Basic with self-written routines. For a more detailed explanation, please refer to the section "Brief Explanation of the USER Command"

USER x

Zapewne jest to najbardziej interesujące polecenie dla programujących w kodzie maszynowym. Rozkaz USER powoduje, iż następne rozkazy "*" zostaną przekierowane do procedury użytkownika w kodzie maszynowym, która znajduje się pod adresem x. Pozwala to użytkownikowi z łatwością rozszerzyć BASIC swoimi samodzielnie napisanymi procedurami.

WHEN bln DO

This command is an extension of the IF command and allows for conditional execution of program blocks (instead of just a single command). The structure of a WHEN block within a program is as follows:

WHEN bln DO
)
> program lines to be executed when bln=true
)
ELSE
)
> program lines to be executed when bln=false
)

END WHEN

The ELSE with subsequent program lines is optional.

WHEN...END WHEN structures may be nested at will.

Example:

100 INPUT L$
110 LET V$="AEIOU*"
120 FOR N=1 TO 6
130 WHEN L$=V$(N) AND T<6 DO
140 PRINT L$;" IS A VOWEL"
150 LET N=6
160 ELSE
170 WHEN N=6 DO
180 PRINT L$;" IS A CONSONANT"
190 END WHEN
200 END WHEN

Also note that the '*' command (see USER) cannot be used after the THEN in an IF statement. Apply a WHEN construction instead.

WHEN bln DO

To polecenie jest rozszerzeniem rozkazu IF i pozwala na warunkowe wykonanie bloku programu (zamiast tylko jednej instrukcji). Struktura bloku WHEN w programie jest następująca:

WHEN bln DO
)
> wiersze programu wykonywane dla bln=true
)
ELSE
)
> wiersze programu wykonywane dla bln=false
)

END WHEN

ELSE wraz z następującymi po nim wierszami programu jest opcjonalne.

Struktury WHEN...END WHEN mogą być do woli zagnieżdżane.

Przykład:

100 INPUT L$
110 LET V$="AEIOU*"

120 FOR N=1 TO 6
130 WHEN L$=V$(N) AND T<6 DO
140 PRINT L$;" IS A VOWEL"
150 LET N=6
160 ELSE
170 WHEN N=6 DO
180 PRINT L$;" IS A CONSONANT"
190 END WHEN
200 END WHEN

Uwaga - rozkaz * (zobacz na polecenie USER) nie może być użyty po THEN w instrukcji warunkowej IF. Zamiast niej stosuj WHEN.

For all questions or suggestions regarding CBI, please write to

Carlo Delhez,
Emmastraat 3,

4651 BV Steenbergen,
Netherlands.

Internet:
tnndcarlo@cycl.phys.tue.nl
(until May 1994)

Jeśli będziesz miał pytania lub propozycje odnośnie CBI, proszę, napisz pod adres:

Carlo Delhez,
Emmastraat 3,
4651 BV Steenbergen,
Netherlands.

Internet:
tnndcarlo@cycl.phys.tue.nl
(do maja 1994)

Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2023 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: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.