|
Mam do sprzedania SD-BOX za 350 zł. Jesteś zainteresowany, to skontaktuj się. |
Simons' BASIC
Cartridge SIMONS' BASIC został zaprojektowany, aby umożliwić pełne wykorzystanie potencjału komputera COMMODORE 64. Czyni to poprzez zapewnienie dodatkowych 114 poleceń uzupełniających standardowy BASIC. Te dodatkowe polecenia dzielą się na dwanaście szerokich działów, jak to opisano poniżej:
UŁATWWIENIA PROGRAMOWANIA - polecenia takie jak KEY i TRACE, aby ułatwić szybsze i bardziej wydajne programowanie w BASICu.
MANIPULACJA TEKSTEM - polecenia, takie jak INSERT i PLACE, aby dać ci pełną kontrolę nad manipulacją tekstem.
TEKST - polecenia, takie jak CENTRE i PRINT AT, aby ułatwić formatowanie ekranu.
ULEPSZONEGO WPROWADZANIA DANYCH - polecenia, takie jak FETCH i INKEY, aby zapewnić pełną kontrolę nad tym, co napisano z klawiatury.
DODATKOWE OPERATORY ARYTMETYCZNE - polecenia, takie jak MOD i DIV, aby zapewnić prostszą metodę dzielenia liczby całkowitej.
KONWERSJA NUMERYCZNA - polecenia umożliwiające zmianę liczb binarnych lub szesnastkowych na ich odpowiedniki dziesiętne.
PROGRAMOWANIE STRUKTURALNE - polecenia, takie jak PROC i IF..THEN..ELSE, aby umożliwić pisanie bardziej czytelnego kodu.
MANIPULACJA EKRANEM - pomoce, takie jak SCRSV i COPY, aby umożliwić zapisanie/ładowanie danych ekranowych i/lub drukowanie ekranu w wysokiej/niskiej rozdzielczości.
RYSOWANIE GRAFIKI - polecenia, takie jak CIRCLE i PAINT, aby umożliwić rysowanie kształtów na ekranie.
SPRAJTY I DEFINIOWANE GRAFIKI PRZEZ UŻYTKOWNIKA - polecenia, takie jak DESIGN, MOB SET, DETECT i CHECK, aby umożliwić tworzenie i animowanie własnych ruchomych obiektów lub projektowanie własnych znaków graficznych.
MUZYKA - polecenia, takie jak WAVE i ENVELOPE, aby umożliwić tworzenie efektów dźwiękowych oraz komponowanie i odtwarzanie muzyki.
OPERACJE DYSKOWE - polecenie, takie jak DIR, w celu uproszczenia obsługi poleceń stacji dysków.
Zakres poleceń dostarczanych przez cartridge sprawia, że jest to niezbędne narzędzie dla każdego, kto chce w pełni wykorzystać swój komputer.
Niniejsza instrukcja nie została zaprojektowana w celu nauczania programowania w BASICu na COMMODORE 64. Jeśli nie masz wiedzy o programowaniu, zapoznaj się z jedną z poniższych pozycji:
COMMODORE 64 Podręcznik użytkownika (dostarczony z komputerem)
An Introduction to BASIC Parts 1 and 2, by Andrew Colin.
Niniejsza instrukcja jest podzielona na trzynaście rozdziałów opisanych poniżej:
1 - WSTĘP DO SIMONS' BASIC
Ten rozdział opisuje SIMONS' BASIC w szerokim znaczeniu. Wyjaśnia również, jak uruchomić cartridge i jak wprowadzić polecenie. Dołączono konwencje użyte w tej instrukcji w celu opisania każdego polecenia. Omówiono także kompatybilność SIMONS' BASIC ze standardowym BASICem COMMODORE 64. Zamieszczono również polecenia dotyczące zapisywania, ładowania i uruchamiania programów.
2 - UŁATWIENIA PROGRAMOWANIA
Zawarte są tutaj takie polecenia jak AUTO i TRACE, aby ułatwić szybsze i bardziej wydajne programowanie. W tym rozdziale zawarte jest również polecenie KEY, które umożliwia zaprogramowanie klawiszy funkcyjnych.
3 - WPROWADZANIE DANYCH I MANIPULACJA TEKSTEM
Ten rozdział zawiera polecenia, takie jak INSERT i PLACE, aby poprawić obsługę ciągów znaków. Zawarte są również polecenia FETCH i INKEY, które zapewniają lepszą kontrolę nad wprowadzaniem danych przez użytkownika. Ponadto wyjaśniono również polecenia formatowania tekstu ekranowego, takie jak CENTRE i PRINT AT.
4 - DODATKOWE OPERATORY NUMERYCZNE
Poniżej opisano trzy dodatkowe operatory arytmetyczne: MOD, DIV i FRAC. Pierwsze dwa zajmują się dzieleniem całkowitym, podczas gdy trzeci pozwala na wyodrębnienie części ułamkowej liczby. Ten rozdział zawiera także opis poleceń % i $, które są używane do konwersji liczb binarnych lub szesnastkowych do postaci dziesiętnej oraz polecenie EXOR, które wykonuje dodatkową operację logiczną.
5 - POLECENIA DYSKOWE
W tym miejscu omówiono dwa polecenia: DISK i DIR. DISK umożliwia wykonanie różnych poleceń na dysku, takich jak formatowanie i usuwanie pliku za pomocą jednego polecenia. Po ukończeniu zadania kanał dysku jest automatycznie zamykany. DIR umożliwia wyświetlenie na ekranie całej lub wybranej części katalogu dyskietki.
6 - GRAFIKA Z SIMONS' BASIC
Ten rozdział opisuje szeroką gamę poleceń graficznych. Te polecenia pozwalają rysować kształty na ekranie i malować je za pomocą dowolnego z szesnastu kolorów obsługiwanych przez komputer.
7 - MANIPULACJA EKRANEM
Tu opisano sposób przewijania obszaru ekranu w dowolnym kierunku. Dołączono również polecenia dotyczące przenoszenia obszaru ekranu do innej lokalizacji, zmiany koloru znaków ekranowych oraz zapisywania i ładowania danych ekranowych. Opisano również polecenia umożliwiające drukowanie ekranów w wysokiej/niskiej rozdzielczości.
8 - SPRAJTY I DEFINIOWANE GRAFIKI PRZEZ UŻYTKOWNIKA
Rozdział ósmy opisuje podstawowe polecenia dotyczące projektowania i animacji grafiki sprajtów. Dołączone są również instrukcje umożliwiające tworzenie własnych znaków graficznych.
9 - PROGRAMOWANIE STRUKTURALNE
W tym miejscu wyjaśniono różne polecenia programowania strukturalnego.
10 - KONTROLA BŁĘDOW
Rozdział dziesiąty zawiera polecenia, które umożliwiają sprawdzenie pewnych błędów programu, aby zapobiec jego awarii.
11 - TWORZENIE MUZYKI Z SIMONS' BASIC
Tutaj opisane są polecenia umożliwiające tworzenie muzyki na COMMODORE 64.
12 - FUNKCJE ODCZYTUJĄCE
W tym rozdziale opisane są polecenia, takie jak PENX i POT, które umożliwiają obsługę kontrolera gier takiego jak joystick podłączonego do potu gier.
13 - PRZYKŁADY PROGRAMÓW W SIMONS' BASIC
Rozdział trzynasty zawiera listingi programów napisanych przy użyciu SIMONS' BASIC, aby pokazać, co można osiągnąć za pomocą tego cartridgea.
DODATEK - KOMUNIKATY BŁĘDÓW
W tym dodatku podana jest lista komunikatów błędów, które można napotkać podczas programowania oraz prawdopodobna przyczyna ich wystąpienia.
SŁOWNIK
Lista terminów używanych w tym podręczniku i ich definicje.
Cartridge zawsze należy wkładać lub wyjmować z komputera przy wyłączonym zasilaniu. Włóż cartridge etykietą do góry, do gniazda z tyłu komputera. (Zobacz w instrukcji COMMODORE 64).
Gdy to zrobisz włącz komputer i rozpocznij korzystanie z SIMONS' BASIC. Wyświetli się następujący komunikat:
Wszystkie polecenia SIMONS' BASIC są teraz dołączone do systemu operacyjnego twojego komputera i mogą być używane w dowolnym momencie, tak jak każde inne polecenie. Zwróć uwagę, że SIMONS' BASIC używa 8K pamięci.
Poniżej znajduje się lista poleceń dodawanych do systemu operacyjnego COMMODORE 64 przez cartridge SIMONS' BASIC:
Polecenia do wprowadzania, debugowania, wyświetlające i zabezpieczania programów:
KEY, DISPLAY, AUTO, RENUMBER, PAUSE, MERGE, PAGE, OPTION, DELAY, FIND, TRACE, RETRACE, DUMP, COLD, OLD, RESET, CGOTO, DISAPA, SECURE.
Polecenia do manipulacji tekstem, formatowania tekstu na ekranie i sprawdzania wprowadzanych danych:
INSERT, INST, PLACE, DUP, USE, CENTRE, AT, LIN, FETCH, INKEY, ON KEY, DISABLE, RESUME.
Polecenia do dzielenia liczby całkowitej, konwersji liczbowej i dodatkowej operacji binarnej.
MOD, DIV, FRAC, %, $, EXOR.
Polecenia do obsługi dyskietek:
DISK, DIR.
Polecenia do rysowania grafiki:
COLOUR, HIRES, MULTI, NRM, HI COL, LOW COL, PLOT, LINE, REC, CIRCLE, ARC, ANGL, BLOCK, PAINT, DRAW, ROT, CHAR, TEXT, TEST, CSET.
Polecenia do zapisywania, drukowania i manipulowania danymi ekranowymi:
PRZEWIJANIE, BCKGNDS, FLASH, OFF, BFLASH, FCHR, FCOL, FILL, MOVE, INV, SCRSV, SCRLD, COPY, HRDCPY.
Polecenia do generowania/animowania sprajtów i tworzenia własnych znaków graficznych:
DESIGN, @, CMOB, MOB SET, MMOB, RLOCMOB, DETECT, CHECK, MOB OFF, MEM, DESIGN, @.
Polecenia programowania strukturalnego:
IF...THEN...ELSE, REPEAT...UNTIL, LOOP...EXIT IF...END LOOP, PROC, CALL, EXEC, END PROC, RCOMP, LOCAL, GLOBAL, NO ERROR, ON ERROR, OUT.
Polecenia do tworzenia muzyki:
WAVE, ENVELOPE, MUSIC, VOL, PLAY, SOUND.
Polecenia używane do obsługi urządzeń obsługujących gry z Twoimi programami:
PENX, PENY, POT, JOY.
Wszystkie polecenia są wprowadzane w taki sam sposób jak w standardowym BASICu. Większość poleceń SIMONS' BASIC może być używanych w trybie bezpośrednim lub jako część programu. Wszelkie wyjątki od tej zasady są wskazane we wstępie do każdego rozdziału instrukcji.
Format każdego polecenia SIMONS' BASIC w tej instrukcji przedstawiono za pomocą następującej metody zapisu:
- Nawiasy i elementy napisane wielkimi literami muszą być napisane dokładnie tak, jak to pokazano.
- Elementy napisane małymi literami wskazują na zmienną lub dane przypisane przez użytkownika, np. współrzędne lub kolor wydruku.
- Inne symbole, takie jak cudzysłowy i przecinki, należy napisać dokładnie tak, jak to pokazano.
- Naciśnięcie klawisza RETURN jest oznaczone symbolem <RETURN>.
- Klawisze inne niż znaki alfabetyczne i numeryczne są wskazane w listingu jako nazwa klawisza zawarta w <>, np. <CLR/HOME>. Są one wyświetlane na ekranie jako znaki w inwersji. Jeśli wewnątrz <> znajdują się dwa klawisze, np. <CTRL RVS ON>, należy przytrzymać pierwszy klawisz przed naciśnięciem drugiego klawisza.
- Za wyjątkiem polecenia FIND, wszystkie polecenia SIMONS' BASIC mogą zostać oddzielone spacją od pierwszego parametru.
SIMONS' BASIC zawiera kilka poleceń, które są przydatne przy napisywaniu, debugowaniu i wyświetlaniu programów w BASICu, niezależnie od tego, czy zawierają one polecenia SIMONS' BASIC, czy też nie.
Polecenie KEY umożliwia zaprogramowanie klawiszy funkcyjnych. DISPLAY wyświetla listę poleceń przypisanych do klawiszy funkcyjnych. Polecenia AUTO i RENUMBER tworzą automatyczną numerację linii programu. MERGE łączy zapisany program w BASICu z programem znajdującym się obecnie w pamięci.
Polecenie PAGE umożliwia określenie liczby linii ekranu, które chcesz użyć podczas wyświetlania programów na ekranie. OPTION podczas wyświetlania programu podświetla wszystkie polecenia SIMONS' BASIC. Polecenie DELAY pozwala kontrolować szybkość przewijania wyświetlanego programu na ekranie.
Polecenia TRACE i RETRACE wyświetlają numer linii podczas ich wykonywania. Polecenie DUMP wyświetla wartości wszystkich zmiennych nie będących łańcuchami. FIND lokalizuje wszystkie występowania określonego ciągu znaków.
Polecenie PAUSE służy do ustawienia opóźnienia czasowego w twoim programie. CGOTO oblicza numer linii rozgałęziającej program. RESET nakazuje COMMODORE 64 odczytanie danych ze zdefiniowanej linii programu. Polecenia SECURE i DISAPA wyświetlają puste linie programu, aby uniemożliwić nieautoryzowanym osobom sprawdzenie kodu. COLD przywraca komputer do ekranu startowego SIMONS' BASIC. Polecenie OLD umożliwia odzyskanie programu, który został usunięty poleceniem NEW.
UWAGA:
Wszystkie polecenia tego rozdziału mogą być używane w trybie bezpośrednim lub jako część programu. |
KEY numer,"polecenie"
Przypisuje polecenie do klawisza funkcyjnego.
KEY umożliwia przypisanie własnych poleceń do klawiszy funkcyjnych, a następnie jeśli chcesz zmianę tych poleceń. Liczba w formacie polecenia wskazuje klawisz funkcyjny, którego chcesz użyć, od 1 do 16. Drugi parametr to polecenie, które chcesz przypisać do tego klawisza. Każdemu klawiszowi można przypisać maksymalnie piętnaście znaków. Naciskając same klawisze funkcyjne, uzyskuje się polecenia z F1, F3, F5 i F7. Przytrzymując klawisz SHIFT i naciskając te same klawisze, otrzymujesz polecenia z F2, F4, F6 i F8. Przytrzymując klawisz COMMODORE i naciskając klawisze funkcyjne, uzyskuje się polecenia z F9, F10, F11 i F12. Jeśli przytrzymasz klawisz SHIFT i klawisz COMMODORE, otrzymasz polecenia z F13, F14, F15 i F16. Pamiętaj, że polecenie przypisane do każdego klawisza musi być ujęte w cudzysłowy.
PRZYKŁAD: Aby przypisać polecenie MOB SET do klawisza funkcyjnego F8:
POLECENIE: KEY 8,"MOB SET" < RETURN>
REZULTAT: Polecenie MOB SET jest teraz przypisane do klawisza funkcyjnego F8 i będzie wyświetlane przy każdym naciśnięciu tego klawisza.
Aby wyeliminować konieczność naciśnięcia klawisza RETURN po poleceniu klawisza funkcyjnego, możesz dodać powrót karetki do przypisanego klawisza w następujący sposób:
- Przypisz swoje polecenie do klawisza (zobacz rozdział 2.2.1). Napisz cudzysłów zamykający, ale nie naciskaj klawisza RETURN.
- Napisz + CHR$(13) i naciśnij klawisz RETURN.
Teraz, po naciśnięciu klawisza funkcyjnego, automatycznie wygenerujesz RETURN zgodnie z przypisanym poleceniem.
PRZYKŁAD: Aby przypisać polecenie BASICa [list] i automatyczny powrót karetki do klawisza funkcyjnego F7:
POLECENIE: KEY 7,"LIST" + CHR$(13) <RETURN>
REZULTAT: Możesz teraz wyświetlić program naciskając klawisz F7.
DISPLAY
Wyświetla listę poleceń przypisanych do klawiszy funkcyjnych.
DISPLAY umożliwia przegląd bieżących przypisań klawiszy funkcyjnych.
PRZYKŁAD: Aby wyświetlić listę przypisań klawiszy funkcyjnych po przykładach z dwóch poprzednich rozdziałów:
POLECENIE: DISPLAY <RETURN>
WIDZISZ: KEY 1 ""
KEY 2 ""
KEY 3 ""
KEY 4 ""
KEY 5 ""
KEY 6 ""
KEY 7 "LIST" + CHR$(13)
KEY 8 "MOB SET"
KEY 9 ""
KEY 10 ""
KEY 11 ""
KEY 12 ""
KEY 13 ""
KEY 14 ""
KEY 15 ""
KEY 16 ""
AUTO numer linii początkowej, przyrost
Automatyczne generowanie numeru linii programu z określonym przyrostem.
Po wprowadzeniu polecenia AUTO, jest wyświetlany zdefiniowany numer linii początkowej programu wraz z kursorem oczekującym na wprowadzenie linii programu. Następnie za każdym razem, gdy napiszesz linię programu i naciśniesz klawisz RETURN, przyrost, który podałeś, zostanie dodany do numeru poprzedniej linii. Otrzymana liczba zostanie wyświetlona jako następny numer linii programu. Aby zakończyć tę funkcję, naciśnij klawisz RETURN, gdy wyświetlony jest numer linii.
PRZYKŁAD: Automatyczne generowanie numerów linii programu z przyrostem 5 rozpoczynających się od linii 10:
POLECENIE: AUTO 10,5 <RETURN>
WIDZISZ: 10
NAPISZ: GET A$ <RETURN>
WIDZISZ: 10 GET A$
15
NAPISZ: IF A$ = "" THEN 10 <RETURN>
WIDZISZ: 10 GET A$
15 IF A$ = "" THEN 10
20
REZULTAT: Za każdym razem, gdy wprowadzisz linię programu i naciśniesz klawisz RETURN, wyświetlona zostanie linia o numerze o 5 większym od poprzedniego.
PRZYKŁAD: Aby zakończyć automatyczną numerację linii programu w powyższym programie:
WYKONAJ: <RETURN>
POLECENIE: LIST <RETURN>
WIDZISZ: 10 GET A$
15 IF A$ = "" THEN 10
READY
REZULTAT: Automatyczna numeracja jest zakończona.
RENUMBER numer linii początkowej, przyrost
Automatycznie zmienia numerację wszystkich linii programu.
RENUMBER automatycznie zmienia numery wszystkich linii programu. Program rozpoczyna się teraz od podanego numeru linii początkowej, a wszystkie następne numery linii są wyświetlane z wybranym przyrostem. To polecenie jest szczególnie przydatne, jeśli potrzebujesz miejsca w programie, aby wstawić więcej kodu.
UWAGA:
Polecenie RENUMBER nie przenosi numerów GOTO lub GOSUB. Jednak SIMONS' BASIC eliminuje potrzebę użycia tych poleceń, zastępując je poleceniami programowania strukturalnego. Zobacz rozdział 9. |
PRZYKŁAD: Aby przenumerować wszystkie linie poniższego programu:
NAPISZ: 1 PRINT"<SHIFT CLR/HOME>"
2 FOR X = 1 TO 20
3 Z = RND(1) * 255
4 POKE 53280,Z
5 FOR Y = 1 TO 250: NEXTY,X
RENUMBER 100,10 <RETURN>
LIST <RETURN>
WIDZISZ: 100 PRINT"<SHIFT CLR/HOME>"
110 FOR X = 1 TO 20
120 Z = RND(1) * 255
130 POKE 53280,Z
140 FOR Y = 1 TO 250: NEXTY,X
PAUSE "komunikat",czas trwania lub
PAUSE czas trwania
Zatrzymuje wykonywanie programu na określony czas.
PAUSE powoduje, że program czeka na kontynuowanie jego wykonywania. Czas trwania to z góry określona długość czasu mierzona w sekundach. Nie można używać części ułamkowej określającej liczbę sekund. Polecenia PAUSE można użyć na dwa sposoby: z komunikatem lub bez niego.
Jeśli komunikat zawarty w cudzysłowach znajduje się w poleceniu PAUSE, zostanie on wyświetlany przez określony czas. Naciśnięcie klawisza RETURN przerywa pauzę i kontynuuje wykonywanie programu.
Jeśli po PAUSE nie podano komunikatu, program czeka na upływ określonego czasu.
PRZYKŁAD: Aby spowodować opóźnienie programu o 10 sekund:
NAPISZ: 100 PAUSE 10
REZULTAT: Po osiągnięciu linii 100 programu wykona 10-cio sekundowe opóźnienie.
PRZYKŁAD: Aby wyświetlić komunikat i odczekać 1 minutę:
NAPISZ: 100 PAUSE "PRESS RETURN TO CONTINUE",60
REZULTAT: Po wykonaniu tego wiersza zostanie wyświetlony komunikat PRESS RETURN TO CONTINUE, a program zostanie wstrzymany na jedną minutę lub do momentu naciśnięcia klawisza RETURN.
CGOTO wyrażenie lub
CGOTO argument operator zmienna
Oblicza numer linii, w której program powinien się rozgałęziać.
Polecenie CGOTO umożliwia rozgałęzienie do linii określonej zmienną przez wynik obliczeń.
PRZYKŁAD: Aby rozgałęzić do pięciu różnych numerów linii określonych przez zmienną pętli:
NAPISZ: 10 REM"*** EXAMPLE OF CGOTO ***
20 FOR I = 1 TO 5
30 CGOTO I * 10 + 40
40 END
50 PRINT"I = 1":NEXT
60 PRINT"I = 2":NEXT
70 PRINT"I = 3":NEXT
80 PRINT"I = 4":NEXT
90 PRINT"I = 5":NEXT
REZULTAT: Dla każdej wartości I jest obliczany i wykonywana numer linii.
RESET numer linii
Przenosi wskaźniki danych do określonej linii danych.
W standardowym BASICu dane są zawsze odczytywane sekwencyjnie, tzn. pierwsza pozycja danych jest używana przez pierwszą instrukcję READ, druga pozycja przez następne itd. RESET umożliwia wskazanie wiersza programu w bloku danych, od których rozpocznie się czytanie, tzn. nie musisz zaczynać od pierwszego elementu danych w programie lub możesz pominąć niektóre elementy do określonego punktu.
PRZYKŁAD: Aby wybrać określone dane w zależności od danych wprowadzanych przez użytkownika:
NAPISZ: 10 REM"*** EXAMPLE OF RESET ***
20 PRINT"<SHIFT CLR/HOME>"
30 PRINT "WHICH CATEGORY?":PRINT:PRINT
40 PRINT"1) DOGS","2) CATS","3) BIRDS","4) FISH"
50 INPUT A: IF A < 1 OR A > 4 THEN PRINT"<SHIFT CURSOR UP><SHIFT CURSOR UP>": GOTO 50
60 IF A = 1 THEN RESET 100
70 IF A = 2 THEN RESET 110
80 IF A = 3 THEN RESET 120
90 IF A = 4 THEN RESET 130
95 FOR I = 1 TO 5
97 READ A$:PRINT A$:NEXT I
99 PAUSE 10:GOTO 20
100 DATA "ALSATIAN","CORGI","TERRIER","LABRADOR","SPANIEL"
110 DATA "PERSIAN","TABBY",ALLEY","SIAMESE","BURMESE"
120 DATA "SPARROW","STARLING","BUDGIE","CANARY","PIGEON"
130 DATA "TROUT","SALMON","CHUBB","BASS","ROACH"
NAPISZ: RUN <RETURN>
3 <RETURN>
WIDZISZ: SPARROW
STARLING
BUDGIE
CANARY
PIGEON
REZULTAT: Program odczytuje pięć pozycji danych rozpoczynających się od numeru linii odnoszącego się do wartości wprowadzonej przez użytkownika.
WYKONAJ: Przytrzymaj klawisz [runstop] i naciśnij klawisz [restore].
REZULTAT: Program został zatrzymany.
MERGE "nazwa programu",numer urządzenia
Ładuje wcześniej zapisany program i dołącza go do programu znajdującego się obecnie w pamięci komputera.
Numer urządzenia odnosi się do numeru urządzenia peryferyjnego, na którym znajduje się program, który ma być dołączony. Liczba 1 jest dla magnetofonu a liczba 8 jest dla stacji dysków. Jeżeli nie określono numeru urządzenia, przyjmuje się 1, to znaczy kasetę. Nazwa programu jest określona w taki sam sposób, jak przy instrukcji LOAD.
UWAGA:
Dołączony program będzie znajdował się za bieżącym programem w pamięci, tzn. dodane linie programu będą raczej dołączane niż porozrzucane. Użyj polecenia RENUMBER, aby przenumerować dołączony program przed jego wykonaniem. |
PRZYKŁAD: Aby połączyć program z kasety o nazwie SIMONS' BASIC1 z programem aktualnie znajdującym się w pamięci:
WYKONAJ: Napisz krótki program i zapisz go na kasecie pod nazwą SIMONS' BASIC1.
POLECENIE: NEW <RETURN>
WYKONAJ: Napisz kolejny krótki program.
POLECENIE: MERGE "SIMONS' BASIC1",1 <RETURN>
WIDZISZ: PRESS PLAY ON TAPE
WYKONAJ: Naciśnij klawisz PLAY magnetofonu.
WIDZISZ: LOADING SIMONS' BASIC1
READY
REZULTAT: Drugi program został dołączony.
PAGE n
Dzieli wyświetlany program na strony składające się z n linii.
PAGE umożliwia określenie liczby linii ekranu, które chcesz użyć podczas wyświetlania programu. Po wykonaniu polecenia, LIST wyświetli numer pierwszej linii programu. Każdą sekcję programu można wyświetlić, naciskając klawisz RETURN. Parametr zerowy spowoduje przerwanie stronicowania, umożliwiając normalne wyświetlanie programu.
UWAGA:
Parametr w tym poleceniu odnosi się do liczby linii ekranu, a nie do linii programu, która może zajmować więcej niż jedną linię ekranu. Jeśli linia programu przepełni zdefiniowane przez Ciebie ograniczenia ekranu, cała linia pojawi się na następnym ekranie. |
Faktyczna ilość wierszy ekranu jest zwiększona o 1. N działa prawidłowo w zakresie 0 - 23. Wartość większa niż 23 spowoduje normalne działanie polecenia LIST.
PRZYKŁAD: Aby wyświetlić program za pomocą tylko 5 linii ekranowych:
WYKONAJ: Załaduj lub utwórz program zawierający więcej niż dziesięć linii kodu.
POLECENIE: PAGE 4 <RETURN>
NAPISZ: LIST <RETURN>
REZULTAT: Został wyświetlany numer pierwszej linii programu.
POLECENIE: Naciśnij klawisz RETURN.
REZULTAT: Zostało wyświetlanych pierwszych 5 linii twojego programu.
POLECENIE: Naciśnij klawisz RETURN.
REZULTAT: Zostało wyświetlanych kolejneych 5 linii twojego programu.
POLECENIE: PAGE 0 <RETURN>
NAPISZ: LIST <RETURN>
REZULTAT: Twój program wyświetla się normalnie.
OPTION n
Podczas wyświetlania programu podświetla wszystkie polecenia SIMONS' BASIC.
Polecenie OPTION z parametrem 10 powoduje, że wszystkie polecenia SIMONS' BASIC są wyświetlane w inwersji, gdy program jest wyświetlany na ekranie lub drukowany. Parametr inny niż 10 (od 0 do 255) wyłącza podświetlanie.
UWAGA:
Drukowanie programu po użyciu tego polecenia, spowoduje bardzo szybkie zużycie taśmy drukarki. Dlatego zaleca się nie częste wykonywanie działań tego typu. |
Niektóre z poleceń użytych w poniższym przykładowym programie nie zostały jeszcze omówione. Są one zawarte jedynie w celu zilustrowania użycia polecenia OPTION.
PRZYKŁAD: Aby podświetlić wszystkie polecenia SIMONS' BASIC w następującym programie:
10 HIRES 0,1
20 CIRCLE 160,100,80,60,1
30 REC 80,40,160,120,1
40 PAUSE 10
50 CSET 0 : END
POLECENIE: OPTION 10 <RETURN>
NAPISZ: LIST <RETURN>
REZULTAT: Polecenia SIMONS' BASIC są podświetlone i wyświetlone w programie w inwersji.
POLECENIE: OPTION 0 <RETURN>
NAPISZ: LIST <RETURN>
REZULTAT: Program wyświetlany jest normalnie.
UWAGA:
Podczas drukowania programu na drukarce wprowadź wszystkie polecenia w jednym wierszu, np.:
OPEN 4,4:CMD4:LIST:PRINT#4:CLOSE4 <RETURN>
Przed wydrukowaniem kolejnego programu wyłącz drukarkę, a następnie włącz ją ponownie. |
DELAY n
Zmienia szybkość przewijania wyświetlanego programu.
Gdy podczas wyświetlania programu zostanie przytrzymany klawisz SHIFT, szybkość przewijania ekranu zostanie opóźniona. Polecenie DELAY zmienia prędkość tego opóźnienia. Parametr n określa czas opóźnienia. Ta liczba musi być w zakresie od 1 do 255. Większa wartość w poleceniu powoduje proporcjonalnie wolniejszy przewijanie wyświetlanego programu.
PRZYKŁAD: Aby wyświetlić program z najwolniejszą dostępną prędkością:
POLECENIE: DELAY 255 <RETURN>
NAPISZ: LIST <RETURN>
WYKONAJ: Przytrzymaj klawisz [shift].
REZULTAT: Program jest wyświetlany znak po znaku.
POLECENIE: Puść klawisz [shift].
REZULTAT: Program wyświetla się normalnie.
UWAGA:
Podczas wyświetlania dowolnego programu klawisz CTRL opóźnia szybkość przewijania ekranu do momentu puszczenia tego klawisza. |
FINDznak lub
FINDciąg znaków
Wyszukuje w programie znak lub ciąg znaków i wyświetla numery linii programu, w których on występuje.
FIND służy do lokalizowania występowania ciągu znaków lub znaku w programie. Polecenie wyświetla wszystkie numery linii zawierające ciąg lub znak.
UWAGA:
Wszelkie przerwy między FIND a określonymi znakami lub między znakiem końcowym a RETURN, są uważane za część ciągu znaków, dla którego wykonywane jest wyszukiwanie. Dlatego szukane słowa kluczowe muszą być napisane BEZ poprzedzającej ich przerwy. |
PRZYKŁAD: Aby znaleźć ciąg znaków ABCD w następującym programie:
10 REM FIND ABCD
20 REM PRINT "ABCD" VERTICALLY
30 PRINT "ABCD VERTICALLY"
40 A$ = "ABCD"
50 FOR C = 1 TO LEN (A$)
60 PRINT MID$(A$,C,1):NEXT
70 REM ABCD DONE
POLECENIE: FIND"ABCD" <RETURN>
WIDZISZ: 20 40
REZULTAT: Wyświetlany jest każdy numer linii programu zawierającej ciąg znaków ABCD w cudzysłowie. Zwróć uwagę, że numery linii 10 i 70 nie są wyświetlane, ponieważ w tych liniach ABCD nie znajduje się w cudzysłowach.
TRACE n
Wyświetla numer wykonywanej linii programu.
Polecenie TRACE należy wykonać przed uruchomieniem programu. Jeśli jako parametr polecenia zostanie użyta wartość 10, po uruchomieniu programu w prawym górnym rogu ekranu pojawi się okno. W trakcie wykonywania linii programu w oknie wyświetlane są liczby, maksymalnie w tym samym momencie może być ich sześć. Format to:
# (numer linii)
Linie w oknie przewijają się automatycznie, tak aby ostatni wykonywany numer linii programu był wyświetlany na dole okna. Przytrzymanie klawisza COMMODORE umożliwia wykonywanie programu linia po linii. Parametr 0 spowoduje wyłączenie polecenia TRACE.
UWAGA:
Polecenie TRACE NIE MOŻE być użyte na ekranie o wysokiej rozdzielczości lub jeśli użyto polecenia MEM.
Okno nadpisuje wszystko na ekranie, co jest wyświetlane w miejscu jego położenia. Dlatego należy uważać, aby tekst, który chcesz obserwować, był wyświetlony poza tym obszarem. |
PRZYKŁAD: Aby wyświetlić numery linii programu, po jednej na raz, gdy uruchomiony jest następujący program:
10 PRINT "<SHIFT CLR/HOME>"
20 FOR X = 65 TO 96
30 PRINT "<CLR/HOME>";CHR$(X)
40 FOR Z = 1 TO 250: NEXT Z
50 NEXT X
60 GOTO 20
POLECENIE: TRACE 10 <RETURN>
NAPISZ: RUN <RETURN>
REZULTAT: Numer każdej wykonywanej linii programu pojawia się w oknie.
NAPISZ: TRACE 0 RUN <RETURN>
REZULTAT: Okno zniknęło, a program wykonywany jest normalnie.
RETRACE
Wznawia śledzenie programu po jego edycji.
Gdy używasz polecenia TRACE, zatrzymanie wykonywania programu i wyczyszczenie ekranu powoduje zniknięcie okna. Polecenie RETRACE ponownie włącza polecenie TRACE i wyświetla ostatni zestaw numerów linii, które zostały wykonane przed zatrzymaniem programu. Po ponownym uruchomieniu programu pojawi się okno. Wykonanie nie jest kontynuowane od miejsca zatrzymania programu, ale od jego uruchomienia. Zwróć uwagę, że RETRACE nie może być użyte, jeśli polecenie TRACE zostało wyłączone.
PRZYKŁAD: K orzystając z programu z poprzedniego rozdziału, zatrzymaj wykonywanie programu, wyczyść ekran i uruchom go ponownie za pomocą polecenia TRACE:
POLECENIE: TRACE 10 < RETURN>
NAPISZ: RUN < RETURN>
REZULTAT: Każda linia programu po jej wykonaniu pojawi się w oknie.
WYKONAJ: Naciśnij klawisz [runs top].
NAPISZ: LIST < RETURN>
30 PRINT "<CLR/HOME>"; CHR$(X),X < RETURN>
WYKONAJ: Przytrzymaj klawisz [sh ift] i naciśnij klawisz CLR/HOME.
REZULTAT: Ekran zostanie wyczyszczony.
POLECENIE: RETRACE < RETURN>
REZULTAT: W prawym górnym rogu ekranu ponownie pojawi się okno i wyświetli numery linii wyświetlane po zatrzymaniu programu.
WYKONAJ: Przesuń kurs or poniżej okna.
NAPISZ: RUN < RETURN>
REZULTAT: Podczas działania programu w oknie ponownie są wyświetlane numery linii.
DUMP
Wyświetla wartości wszystkich zmiennych nie łańcuchowych.
Polecenie DUMP wyświetla wartości wszystkich zmiennych z wyjątkiem tych zawartych w tablicach. Pokazane wartości są wartościami zawartymi w zmiennych, gdy program został zatrzymany przez naciśnięcie klawisza RUN/STOP lub przez osiągnięcie końca programu. Zmienne są wymienione w kolejności, w jakiej zostały zdefiniowane w programie i są wyświetlane w formacie:
nazwa zmiennej = wartość
UWAGA:
Przytrzymaj klawisz CTRL aby zapobiec przewijaniu listy poza ekran, gdy twój program zawiera więcej niż 25 zmiennych. Aby wyświetlić pozostałą część listy, puść klawisz. |
PRZYKŁAD: Aby wyświetlić zmienne z następującego programu:
10 A$ = "R ANDOM COLOURS"
20 PRINT "<SH IFT CLR/HOME>",A$
30 X = INT(RND(8) * 15)
60 POKE 53281,X
70 FOR C = 1 TO 100: NEXT C
80 GOTO 30
NAPISZ: RUN < RETURN>
ACTION: Po kilkukrotnej zmianie kol oru, przytrzymaj klawisz [runs top] i naciśnij klawisz [rest ore].
POLECENIE: DUMP < RETURN>
WIDZISZ: A$ = "R ANDOM COLOURS"
X = 9
C = 80
UWAGA:
Ponieważ wartości zmiennych X i C są generowane losowo, liczby wyświetlane dla tych dwóch zmiennych będą zależały od tego, kiedy program zostanie zatrzymany. |
COLD
Resetuje komputer do ustawień początkowych.
COLD usunie każdy program przechowywany w pamięci i wyświetli taki sam ekran, jaki pojawia się po włączeniu komputera wraz z cartridgem.
OSTRZEŻENIE:
Jakikolwiek program znajdujący się w pamięci komputera po użyciu polecenia COLD zostanie usunięty. Jeśli chcesz, możesz go przywrócić, używając polecenia OLD. Jeśli wprowadzono dowolną część nowego programu, nie ma możliwości przywrócenia poprzedniego programu. |
PRZYKŁAD: Aby zresetować komputer do ustawień początkowych.
POLECENIE: COLD <RETURN>
REZULTAT: Zostanie wyświetlony początkowy ekran SIMONS' BASIC.
SIMONS' BASIC posiada dwa polecenia, które mogą być użyte do ukrycia określonych linii programu, aby uniemożliwić nieupoważnionym osobom ich zbadanie. Polecenie DISAPA wskazuje, które linie programu chcesz ukryć. Polecenie SECURE ukrywa program z tych linii. Te polecenia są przydatne do ukrywania haseł, numerów seryjnych itp.
OSTRZEŻENIE:
Nie ma możliwości odwrócenia działania tych poleceń poza ponownym napisaniem ukrytych linii. Dlatego przed ich użyciem dobrze jest zachować na własny użytek niezabezpieczoną kopię programu. |
DISAPA:
Sygnalizuje, że kod w linii programu ma być ukryty.
Polecenie DISAPA jest używane jako pierwsze polecenie w linii programu i określa, że kod w tym wierszu ma być ukryty. Polecenie SECURE służy do ukrywania kodu. Polecenie DISAPA automatycznie umieszcza trzy dwukropki (:) przed kodem w każdej linii, w której się pojawia.
UWAGA:
Konieczne jest wprowadzenie spacji na linii dla tych znaków, tzn. maksymalna długość ukrytej linii (z wyłączeniem DISAPA i dwukropków) wynosi 30 znaków. |
PRZYKŁAD: Aby zasygnalizować, że kod w liniach 10 i 40 poniższego programu ma być ukryty:
10 PRINT "HELLO"
20 PRINT SA
30 SA = SA + 1
40 GOTO 10
NAPISZ: 10 DISAPA: PRINT "HELLO"
40 DISAPA: GOTO 10
POLECENIE: LIST < RETURN>
WIDZISZ: 10 DISAPA::::: PRINT "HELLO"
20 PRINT SA
30 SA = SA + 1
40 DISAPA::::: GOTO 10
REZULTAT: Po użyciu polecenia SECURE linie programu zawierające polecenie DISAPA zostaną ukryte.
SECURE 0
Ukrywa wszystkie linie programu rozpoczynające się poleceniem DISAPA.
Polecenie SECURE uniemożliwia napisanie kodu we wszystkich wierszach programu zawierających DISAPA jako pierwsze polecenie w tym wierszu. Program będzie normalnie wykonywany.
PRZYKŁAD: Aby ukryć linie 10 i 40 w przykładowym programie z poprzedniego rozdziału:
POLECENIE: SECURE 0 <RETURN>
NAPISZ: LIST <RETURN>
WIDZISZ: 10
20 PRINT SA
30 SA = SA + 1
40
REZULTAT: Podczas wyświetlania programu, linie 10 i 40 wydają się nie zawierać kodu, chociaż wyświetlane są ich numery a program działa normalnie.
OLD
Odwraca działanie polecenia NEW.
OLD przywraca program, który najwyraźniej został usunięty z pamięci za pomocą polecenia NEW, w celu jego ponownego wykonania. Polecenie OLD nie wymaga żadnych parametrów (w terminologii technicznej polecenie OLD resetuje wskaźniki strony zerowej do początku i końca obszaru BASICa).
PRZYKŁAD: Aby usunąć program za pomocą polecenia NEW a następnie go przywrócić.
10 REM OLD COMMAND
20 A$ = "COMMODORE 64"
30 FOR C = 1 TO LEN(A$)
40 PRINT"<CLR/HOME> ",LEFT$(A$,C)
50 FOR X = 1 TO 100 : NEXT X,C
POLECENIE: NEW <RETURN>
NAPISZ: LIST <RETURN>
WIDZISZ: READY
POLECENIE: OLD <RETURN>
NAPISZ: LIST <RETURN>
WIDZISZ: 10 REM OLD COMMAND
20 A$ = "COMMODORE 64"
30 FOR C = 1 TO LEN(A$)
40 PRINT"<CLR/HOME> ",LEFT$(A$,C)
50 FOR X = 1 TO 100 : NEXT X,C
Ten rozdział zawiera polecenia dotyczące obsługi ciągów znaków, formatowania ekranu i sprawdzania wprowadzanych danych.
Polecenie INSERT umożliwia utworzenie większego łańcucha znaków poprzez wstawienie jednego ciągu znaków do drugiego. INST umożliwia zastąpienie jednego ciągu znaków, od określonej pozycji w nim, innym ciągiem. Polecenie PLACE pozwala określić pozycję grupy znaków w ciągu znaków. DUP pozwala ci utworzyć większy ciąg znaków, powtarzając mniejszy fragment określoną liczbę razy.
Polecenie LIN zwraca numer wiersza, w którym znajduje się kursor. CENTRE umożliwia wyśrodkowanie tekstu na ekranie. Polecenie PRINT AT pozwala ci określić, gdzie na ekranie ma być wyświetlony tekst. USE umożliwia wyrównanie kolumn danych numerycznych.
Polecenie FETCH umożliwia ustawienie parametrów wprowadzanych danych przez użytkownika. INKEY umożliwia sprawdzenie, który klawisz funkcyjny został naciśnięty. Polecenie ON KEY powoduje, że program rozgałęzia się do określonego miejsca w zależności od tego, co zostało naciśnięte. DISABLE wyłącza to polecenie, a RESUME powoduje jego ponowne włączenie.
Te polecenia w połączeniu ze standardowymi poleceniami znakowymi, zapewniają pełną kontrolę manipulacji nad ciągami tekstowymi.
UWAGA:
Polecenia tego rozdziału mogą być używane w trybie bezpośrednim lub jako część programu. |
INSERT ("ciąg wstawiany","ciąg główny",p)
Wstawia jeden ciąg znaków do innego.
INSERT pozwala na umieszczenie grupy znaków w środku ciągu znaków, tworząc w ten sposób dłuższy ciąg znaków. Parametr p wskazuje pozycję w ciągu głównym po której nastąpi umieszczenie wstawianego ciągu. Wstawiany ciąg i ciąg główny mogą być dowolnymi wyrażeniami zawartymi w cudzysłowach lub zmiennych łańcuchowych, tj. "Aaaaa" lub a$. Maksymalna długość nowego ciągu wynosi 255 znaków.
Polecenie INSERT może również służyć do porównywania dwóch ciągów znaków za pomocą logicznego prawda/fałsz, tj. porównywane w instrukcji logicznej, w której zwracana jest wartość -1, jeśli wyrażenie jest prawdziwe, a 0, jeśli jest fałszywe.
Jeśli to polecenie zostanie użyte niepoprawnie, mogą wystąpić dwa możliwe błędy. Oto one:
? INSERT PARAMETER TOO LARGE
Dzieje się tak, gdy pozycja określona jako punkt wstawienia w ciągu głównym jest wartością większą niż długość ciągu.
? CREATED STRING TOO LONG
Ten komunikat błędu jest wyświetlany, jeśli ciąg utworzony za pomocą polecenia INSERT ma więcej niż 255 znaków, tj. jest większy niż pozwala na to BASIC.
PRZYKŁAD: Aby wstawić słowo BYE do ciągu znaków GOOD HE SAID:
NAPISZ: 100 PRINT INSERT ("BYE ","GOOD HE SAID",5)
RUN <RETURN>
WIDZISZ: GOOD BYE HE SAID
REZULTAT: Wstawiono ciąg BYE do ciągu głównego GOOD HE SAID rozpoczynając od szóstej pozycji.
PRZYKŁAD: Aby utworzyć dłuższą zmienną łańcuchową:
NAPISZ: 100 B$ = "BYE "
105 A$ = INSERT (B$,"GOOD HE SAID",5)
110 PRINT A$
NAPISZ: RUN <RETURN>
WIDZISZ: GOOD BYE HE SAID
NAPISZ: DUMP <RETURN>
WIDZISZ: B$ = "BYE "
A$ = "GOOD BYE HE SAID"
PRZYKŁAD: Aby porównać dwa ciągi znaków:
ENTER: 100 A = (INSERT("BYE ","GOOD HE SAID",5) = "GOOD BYE HE SAID")
110 PRINT A
NAPISZ: RUN <RETURN>
WIDZISZ: -1
REZULTAT: Ponieważ dwa ciągi są takie same, tj. warunek jest prawdziwy, zwracana jest wartość -1. Jeśli warunek byłby fałszywy, zwrócona by była wartość 0.
INST ("ciąg wstawiany","ciąg główny",p)
Nadpisuje ciąg rozpoczynający się od określonej pozycji.
INST zastępuje ciąg znaków innym wstawianym ciągiem nadpisując ciąg główny zaczynając od określonej pozycji. Wstawiany ciąg lub ciąg główny mogą być dowolnym wyrażeniem, pod warunkiem, że są to zmienne łańcuchowe, np. "Aaaaa" lub XX$. Wartość p wskazuje pozycję, PO KTÓREJ łańcuch główny zostanie nadpisany.
Istnieje jeden możliwy komunikat błędu, który może wystąpić z tym poleceniem:
? CREATED STRING TOO LONG
Dzieje się tak, jeśli nowo utworzony ciąg jest dłuższy niż 255 znaków.
PRZYKŁAD: Aby zamienić słowo GOOD na BETTER w zdaniu HE WAS GOOD:
NAPISZ: 5 A$ = "HE WAS GOOD"
10 A$ = INST("BETTER",A$,7)
20 PRINT A$
RUN <RETURN>
WIDZISZ: HE WAS BETTER
POLECENIE: DUMP <RETURN>
WIDZISZ: A$ = "HE WAS BETTER"
PRINT PLACE ("szukany ciąg","ciąg główny")
Określa pozycję szukanego ciągu w ciągu głównym.
PLACE wyszukuje określoną grupę znaków (podciąg) w ciągu znaków. Jeśli grupa zostanie znaleziona, zwracana jest pozycja pierwszego znaku grupy. Jeśli dopasowanie nie zostanie znalezione, zwracana jest wartość zero. Długość szukanego ciągu musi być zawsze krótsza od długości ciągu głównego. To polecenie może być również użyte do porównania dwóch zmiennych numerycznych.
PRZYKŁAD: Aby określić pozycję szukanego ciągu BETTER w ciągu głównym HE WAS BETTER:
NAPISZ: 10 A$ = INST("BETTER","HE WAS GOOD",7)
20 PRINT PLACE ("BETTER",A$)
RUN <RETURN>
WIDZISZ: 8
PRZYKŁAD: Prosty test z języka angielskiego:
NAPISZ 10 PRINT"ENTER THE POSITION OF THE FIRST"
15 PRINT"CHARACTER OF THE ADVERB IN THE"
16 PRINT"FOLLOWING SENTENCE:":PRINT
20 PAUSE 1
30 A$ = "HE CALLED OUT FOR HER LOUDLY"
40 B = PLACE("LOUDLY",A$):B$ = "LOUDLY":PRINT A$
50 INPUT A
60 IF A = B THEN 80
70 PRINT"INCORRECT":PRINT"THE CORRECT ANSWER IS" B
75 PRINT"THE ADVERB IS ";B$:END
80 PRINT "WELL DONE":END
RUN <RETURN>
WIDZISZ: ENTER THE POSITION OF THE FIRST
CHARACTER OF THE ADVERB IN THE
FOLLOWING SENTENCE:
HE CALLED OUT FOR HER LOUDLY
NAPISZ 8 <RETURN>
WIDZISZ: INCORRECT
THE CORRECT ANSWER IS 23
THE ADVERB IS LOUDLY
DUP ("ciąg",n)
Duplikuje n razy ciąg znaków.
DUP umożliwia tworzenie nowego ciągu znaków zwielokrotniając ciąg znaków. N oznacza liczbę powtórzeń starego ciągu znaków.
Jeśli utworzony nowy ciąg będzie dłuższy niż 255 znaków, wyświetlany zostanie następujący komunikat błędu:
? CREATED STRING TOO LONG
PRZYKŁAD: Aby trzykrotnie zduplikować ciąg znaków a następnie dodać kolejny ciąg:
NAPISZ: 10 A$ = DUP ("HELLO-",3)
20 B$ = "WHAT'S GOING ON HERE?"
30 C$ = A$+B$:PRINT C$
RUN <RETURN>
WIDZISZ: HELLO-HELLO-HELLO-WHAT'S GOING ON HERE?
CENTRE "ciąg znaków"
Wyśrodkowuje ciąg znaków na ekranie.
CENTRE umożliwia wyświetlanie tekstu na środku linii ekranu. Nie musisz znać długości tekstu, aby użyć tego polecenia.
PRZYKŁAD: Aby wyśrodkować ciąg znaków COMMODORE 64:
POLECENIE: CENTRE "COMMODORE 64" <RETURN>
WIDZISZ: COMMODORE 64
PRINT AT (c,r) "ciąg znaków" lub
PRINT "1-szy ciąg znaków"AT(c,r)"2-gi ciąg znaków"
Wyświetla ciąg znaków w określonym miejscu ekranu.
Polecenie AT umożliwia określenie lokalizacji ekranu, na której rozpocznie się wyświetlanie ciągu znaków. Zastępuje to użycie znaków sterujących kursorem do pozycjonowania tekstu. Parametry c oraz r definiują współrzędne kolumny i wiersza lokalizacji na ekranie, na której ma się zaczynać ciąg znaków będący po parametrze. Więcej niż jedno polecenie AT można połączyć w pojedynczą instrukcję.
PRZYKŁAD: Aby ustawić ciąg znaków COMMODORE 64 w 13 kolumnie i w 8 wierszu:
POLECENIE: PRINT AT(13,8)"COMMOD ORE 64" < RETURN>
WIDZISZ: To co na poniższym obrazku.
PRZYKŁAD: Aby wyświetlić ciąg znaków CBM 64 rozpoczynający się od 13 kolumny i 8 wiersza i napis SIMONS' BASIC przesunięty trzy linie niżej i dwa znaki w prawo:
POLECENIE: PRINT AT(13,8)"CBM 64"AT(15,11)"SIMONS' BASIC" < RETURN>
WIDZISZ: To co na poniższym obrazku.
USE "###.#####",vs:PRINT lub
USE "##text.###text",vs:PRINT
Formatuje dane numeryczne.
Polecenie USE umożliwia formatowanie listy liczb, tj. wyrównanie pozycji części dziesiętnej. Liczba znaków oznaczona znakiem krzyżyka (#) po obu stronach kropki nakazuje COMMODORE 64 wyświetlenie odpowiedniej liczby cyfr z ciągu w odniesieniu do tej pozycji. Jeśli chcesz, możesz również wstawiać tekst między znakami krzyżyka. Parametr vs jest ciągiem liczb, których chcesz użyć.
UWAGA:
Polecenie PRINT musi znajdować się za ciągiem znaków, ponieważ polecenie USE nie wymusza powrotu karetki. |
PRZYKŁAD: Aby wyświetlić tabelaryczną listę losowo wygenerowanych cen:
NAPISZ: 10 REM"*** EXAMPLE OF USE ***
20 A$ = STR$(RND(1) * 199)
30 USE "$###.##C",A$:PRINT
40 GET A$:IF A$ = "" THEN 40
50 GOTO 20
RUN <RETURN>
WYKONAJ: Naciśnij dowolny klawisz.
WIDZISZ: $126.45C
WYKONAJ: Naciśnij dowolny klawisz.
WIDZISZ: $ 35.36C
REZULTAT: Każde naciśnięcie klawisza spowoduje wyświetlenie wartości. Wszystkie wartości dziesiętne liczb pojawiają się na tej samej pozycji w każdej linii ekranu. Ponieważ wartości są generowane losowo, liczby pokazane powyżej są tylko przykładami.
PRINT LIN
Zwraca numer wiersza w którym znajduje się kursor.
Polecenie LIN pozwala na sprawdzenie wiersza w którym znajduje się kursor. Otrzymana wartość z zakresu 0 - 24 może być wyświetlona lub przypisana do zmiennej numerycznej.
UWAGA:
Wykonując polecenie PRINT bez znaku średnika (;) na końcu wyświetlanego tekstu, spowoduje to dodatkowo wykonanie powrotu karetki. |
PRZYKŁAD: Aby wyświetlić ciąg znaków wraz z numerem wiersza w którym znajduje się kursor:
NAPISZ: 0 PRINT"<SHIFT CLR/HOME>CBM 64";
2 X = LIN
3 PRINT X
RUN <RETURN>
WIDZISZ: CBM 64 0
REZULTAT: Został wyświetloy numer wiersza w którym znajduje się kursor o wartości zero.
FETCH "znak kontrolny",I,zmienna łańcuchowa
Ogranicza rodzaj i liczbę znaków wprowadzanych przez użytkownika.
FETCH pozwala kontrolować to, co jest akceptowane jako dane wejściowe z klawiatury. Znak kontrolny w cudzysłowach określa dozwolony rodzaj znaków. Poniżej pokazano rodzaje prawidłowych znaków i powiązany z nimi znak kontrolny:
ZNAK KONTROLNY |
PRAWIDŁOWE ZNAKI |
CLR/HOME |
Tylko niezmienione litery alfabetu. |
KURSOR W DÓŁ |
Tylko znaki numeryczne. |
KURSOR W PRAWO |
Alfanumeryczne i zmienione znaki. |
Parametr I w poleceniu FETCH określa maksymalną liczbę znaków, które może wprowadzić użytkownik. Trzeci parametr w poleceniu określa zmienną łańcuchową, do której zostaną wprowadzone dane wejściowe.
PRZYKŁAD: Aby ograniczyć wprowadzanie danych przez użytkownika do maksymalnie ośmiu niezmienionych znaków alfabetycznych i umieścić te dane w zmiennej łańcuchowej A$:
NAPISZ: 10 PRINT:PRINT"WHAT'S YOUR NAME?"
20 FETCH " <CLR HOME> ",8,A$
30 PRINT"HELLO "A$
RUN <RETURN>
WIDZISZ: WHAT'S YOUR NAME?
(kursor)
WYKONAJ: Przytrzymaj klawisz [shift] i naciśnij dowolną literę.
REZULTAT: Nic się nie dzieje.
WYKONAJ: Naciśnij klawisz numeryczny.
REZULTAT: Znowu nic się nie dzieje.
NAPISZ: MIKE <RETURN>
WIDZISZ: HELLO MIKE
POLECENIE: DUMP <RETURN>
WIDZISZ: A$ = "MIKE"
REZULTAT: Tylko ciąg ośmiu lub mniej niezmienionych znaków alfabetu jest akceptowany jako dane wejściowe do zmiennej A$.
INKEY
Testuje naciśnięcie klawisza funkcyjnego.
INKEY umożliwia określenie, który klawisz funkcyjny został naciśnięty. Polecenie bada numer naciśniętego klawisza funkcyjnego od 1 do 8. To polecenie jest szczególnie przydatne w programach sterowanych przez menu, w których klawisze funkcyjne mogą być używane do wybierania określonych opcji lub operacji.
PRZYKŁAD: Aby przetestować klawisze funkcyjne F1 i F2:
NAPISZ: 10 A = INKEY
20 ON A GOSUB 1000,2000
30 GOTO 10
1000 PRINT "YOU PRESSED F1":RETURN
2000 PRINT "YOU PRESSED F2":RETURN
RUN <RETURN>
WYKONAJ: Naciśnij klawisz funkcyjny F1.
WIDZISZ: YOU PRESSED F1
WYKONAJ: Przytrzymaj klawisz [shift] i naciśnij klawisz funkcyjny F1.
WIDZISZ: YOU PRESSED F2
ON KEY "znak(i)",:GOTO numer linii
Przeskakuje do określonego miejsca w programie.
Polecenie ON KEY powoduje, że COMMODORE 64 skanuje klawiaturę w celu sprawdzenia wprowadzonego jednego ze znaków zdefiniowanych w poleceniu. Każdy nieokreślony klawisz jest ignorowany. Po odebraniu poprawnego znaku, wykonywanie programu jest kontynuowane od linii określonej przez GOTO. Zmienna ST przechowuje wartość ASCII naciśniętego klawisza. (Pełną listę kodów ASCII można znaleźć w podręczniku COMMODORE 64). Polecenie to jest szczególnie użyteczne w programach sterowanych przez menu.
UWAGA:
Po wykonaniu polecenia ON KEY, komputer nadal będzie skanować klawiaturę, nawet po wprowadzeniu znaku z podanego zakresu. Z tego powodu konieczne jest użycie polecenia DISABLE, aby wyłączyć ON KEY. |
PRZYKŁAD: Aby zdefiniować zakres prawidłowych znaków do wprowadzenia:
NAPISZ: 10 PRINT"<SHIFT CLR/HOME>PRESS A KEY (E TO END)"
20 B$ = "DGHNVMLPOE"
30 ON KEY B$,: GOTO 50
40 GOTO 20
REZULTAT: Po uruchomieniu tej części programu, zatrzyma się on, gdy zostanie wprowadzony jeden ze zdefiniowanych znaków z zakresu.
DISABLE
Kończy działanie polecenia ON KEY.
DISABLE powoduje wyłączenie skanowania klawiatury wygenerowane poleceniem ON KEY. To polecenie musi być ZAWSZE używane, jeśli użyto polecenia ON KEY. Niewykonanie tej czynności spowoduje skoki rekurencyjne, tzn. program za każdym razem powróci do linii określonej przez ON KEY, gdy zostanie napisany jeden z określonych znaków.
PRZYKŁAD: Aby wyłączyć polecenie ON KEY:
NAPISZ: 10 PRINT"<SH IFT CLR/HOME>PRESS A KEY (E TO END)"
20 B$ = "DGHNVMLPOE"
30 ON KEY B$,: GOTO 50
40 GOTO 20
50 DISABLE
REZULTAT: Po wykonaniu tej części programu, napisaniu prawidłowego znaku wyłącza polecenie ON KEY.
RESUME
Przywraca poprzednie polecenie ON KEY.
Polecenie RESUME powoduje ponowne włączenie ostatnio zdefiniowanego polecenia ON KEY. Wstrzymuje to działanie programu, dopóki nie zostanie napisany jeden z znaków z zakresu określonego przez ON KEY.
PRZYKŁAD: Rozszerzanie programu z poprzedniego rozdziału, aby ponownie włączyć polecenie ON KEY:
NAPISZ: 10 PRINT "<SH IFT CLR/HOME>PRESS A KEY (E TO END)"
20 B$ = "DGHNVMLPOE"
30 ON KEY B$,: GOTO 50
40 GOTO 30
50 DISABLE
60 A$ = CHR$(ST): X = PLACE(A$,B$)
70 ON X GOTO 80,90,100,110,120,130,140,150,160,170
80 PRINT "IT WAS D": RESUME
90 PRINT "IT WAS G": RESUME
100 PRINT "IT WAS H": RESUME
110 PRINT "IT WAS N": RESUME
120 PRINT "IT WAS V": RESUME
130 PRINT "IT WAS M": RESUME
140 PRINT "IT WAS L": RESUME
150 PRINT "IT WAS P": RESUME
160 PRINT "IT WAS O": RESUME
170 PRINT "IT WAS E": END
RUN < RETURN>
V < RETURN>
WIDZISZ: IT WAS V
NAPISZ: X < RETURN>
REZULTAT: Nic nie jest wyświetlane.
NAPISZ: E < RETURN>
WIDZISZ: IT WAS E
READY
REZULTAT: Znak w zakresie zdefiniowanym poleceniem ON KEY powoduje wyświetlenie tego komunikatu, każdy inny znak jest ign orowany.
Ten rozdział zawiera różne polecenia pomocne podczas obsługi danych numerycznych. Polecenia MOD i DIV umożliwiają wykonywanie dzielenia liczb całkowitych na liczbach dodatnich. Wszystkie wyniki są zwracane w zaokrągleniu. FRAC pozwala wyodrębnić część ułamkową liczby. Są tu również polecenia konwersji liczb szesnastkowych lub liczb binarnych na dziesiętne. Dodatkowy operator zerojedynkowy, suma modulo - EXOR, uzupełnia polecenia tego rozdziału.
UWAGA:
Polecenia tego rozdziału mogą być używane w trybie bezpośrednim lub jako część programu. |
MOD(x,y)
Zwraca resztę z dzielenia jednej liczba całkowitej przez inną.
Polecenie MOD wyświetla resztę, gdy jedna liczba całkowita, jest dzielona przez inną liczbę całkowitą. Polecenie może być użyte bezpośrednio lub w programie.
PRZYKŁAD: Aby podzielić 15 na 4 i otrzymać resztę z dzielenia:
NAPISZ: PRINT MOD(15,4) <RETURN>
WIDZISZ: 3
DIV(x,y)
Zwraca największą liczbę całkowitą, która pomnożona zmienną y jest równa lub mniejsza od x.
Polecenie DIV umożliwia dzielenie jednej liczby zmiennoprzecinkowej przez drugą i generowanie wyniku w formacie całkowitym, tj. ułamkowa część wyniku jest ignorowana.
PRZYKŁAD: Aby podzielić 10 na 3 i otrzymać wynik w postaci całkowitej:
NAPISZ: 10 A = DIV(10,3)
20 PRINT A
RUN <RETURN>
WIDZISZ: 3
FRAC(n)
Zwraca część ułamkową liczby.
FRAC umożliwia wyodrębnienie części ułamkowej liczby zmiennoprzecinkowej do maksymalnie dziewięciu miejsc po przecinku.
PRZYKŁAD: Aby podzielić 22 na 6 i otrzymać część ułamkową wyniku:
POLECENIE: PRINT FRAC(22/6) <RETURN>
WIDZISZ: .666666667
PRZYKŁAD: Aby zwrócić część ułamkową liczby Π.
NAPISZ: 10 PRINT Π
20 PRINT FRAC(Π)
RUN <RETURN>
WIDZISZ: 3.14159265
.141592653
PRINT %wartość binarna
Przekształcenie z formatu binarnego na format dziesiętny.
Polecenie % konwertuje liczbę binarną na jej dziesiętny odpowiednik.
Jeśli w poleceniu jako argument zostanie użyta liczba inna niż binarna, pojawi się komunikat błędu
? NOT BINARY CHARACTER
PRZYKŁAD: Aby przekonwertować liczbę binarną 10110101 na postać dziesiętną:
POLECENIE: PRINT %10110101 <RETURN>
WIDZISZ: 181
PRINT $wartość szesnastkowa
Przekształcenie z formatu szesnastkowego na format dziesiętny.
Polecenie $ konwertuje liczbę szesnastkową na jej dziesiętny odpowiednik.
Jeśli w poleceniu jako argument zostanie użyta liczba inna niż szesnastkowa, pojawi się komunikat błędu
? NOT HEX CHARACTER.
PRZYKŁAD: Aby przekonwertować liczbę EB38 na postać dziesiętną:
POLECENIE: PRINT $EB38 <RETURN>
WIDZISZ: 60216
Powyższe dwa polecenia mogą być używane razem.
PRZYKŁAD: Aby dodać do siebie liczbę binarną i szesnastkową a następnie zwrócić wynik w postaci dziesiętnej:
POLECENIE: PRINT %10110101 + $EB38 <RETURN>
WIDZISZ: 60397
EXOR(n,n1)
Wykonuje sumę modulo między dwiema liczbami.
Polecenie EXOR umożliwia wykonanie sumy modulo między dwiema liczbami. Polecenie najpierw konwertuje obie liczby do postaci binarnej. Następnie porównuje te binarne liczby bit po bicie. Jeżeli oba bity są takie same, bit wyniku zostaje wyzerowany. Jeżeli bity są różne, bit wyniku zostaje ustawiony, ma wartość 1.
PRZYKŁAD: Aby wykonać sumę modulo liczb 87 i 45:
POLECENIE: PRINT EXOR(87,45)
WIDZISZ: 122
Procedura zastosowana do uzyskania tej odpowiedzi jest pokazana poniżej:
Pierwsza liczba = 87 = 01010111
Druga liczba = 45 = 00101101
Wynik = 01111010 = 122
PRZYKŁAD: Aby wyświetlić w inwersji znaki na ekranie:
NAPISZ: 5 PRINT"<SHIFT CLR/HOME>"
7 FOR C = 1 TO 10
8 PRINT "SIMONS' BASIC":PRINT:NEXT
10 FOR X = 0 TO 999
20 A = PEEK (1024 + X)
30 IF A = 32 THEN 60
40 K = EXOR (A,128)
50 POKE 1024 + X,K
60 NEXT :GOTO 10
RUN <RETURN>
REZULTAT: Każdy znak na ekranie zostanie wyświetlony w inwersji a następnie przywrócony do stanu początkowego.
Oprogramowanie zawiera dwa uproszczone polecenia obsługi stacji dysków. DISK eliminuje potrzebę określania logicznego numeru pliku, numeru urządzenia i adresu pomocniczego podczas otwierania kanału dla napędu dyskowego. Polecenie automatycznie zamyka kanał po zakończeniu określonej operacji. Polecenie DIR za pomocą jednego polecenia zastępuje LOAD"$",8 pozwalając na wyświetlenie części lub wszystkich elementów katalogu dyskietki.
DISK,"polecenie"
Otwiera kanał dyskowy, a gdy polecenie jest wykonywane zamyka go.
DISK zastępuje następujące polecenia w BASICu:
OPEN numer pliku logicznego, numer urządzenia, adres pomocniczy: PRINT# numer pliku logicznego
Polecenie otwiera kanał dyskowy, a następnie po zakończeniu określonego polecenia automatycznie zamyka ten kanał.
PRZYKŁAD: Aby sformatować nową dyskietkę nagłówkiem TEST:
WYKONAJ: Umieść nową dyskietkę w stacji dysków.
POLECENIE: DISK "N0:TEST, 01" <RETURN>
REZULTAT: Po kilku minutach nowa dyskietka zostanie sformatowana z nagłówkiem TEST, a lampka napędu zgaśnie, informując o zamknięciu kanału dyskowego.
PRZYKŁAD: Aby usunąć program z dyskietki:
WYKONAJ: Napisz następujący krótki program, a następnie zapisz go na dyskietce pod nazwą ORANGE:
10 REM"*** EXAMPLE OF DISK ***
20 REM"*** DELETING A PROGRAM ***
POLECENIE: DISK "S0:ORANGE" <RETURN>
REZULTAT: Program ORANGE został usunięty z dyskietki automatycznie zamykając kanał dyskowy.
DIR "$ lub
DIR"$:ciąg znaków* lub
DIR"$:?ciąg znaków lub
DIR"$:?ciąg znaków*
Wyświetla wybrane lub wszystkie elementy katalogu dyskietki.
Polecenie DIR zastępuje LOAD"$",8. Umożliwia wyświetlenie wybranych lub wszystkich elementów katalogu dyskietki. Możesz wyświetlić tylko te pliki, których nazwy zaczynają się od konkretnego znaku lub ciągu znaków, wprowadzając ten znak lub ciąg znaków, po których znajduje się gwiazdka. Jeśli chcesz, możesz wyświetlić tylko te pliki, w których określony znak lub ciąg znaków znajduje się na określonej pozycji w nazwie pliku, zastępując te znaki znakami zapytania (?).
PRZYKŁAD: Aby wyświetlić cały katalog:
POLECENIE: DIR"$ <RETURN>
REZULTAT: Został wyświetlany katalog dyskietki z urządzenia numer 8.
PRZYKŁAD: Aby wyświetlić tylko te pliki, w których trzeci znak nazwy pliku to S:
POLECENIE: DIR"$:??S* <RETURN>
REZULTAT: Na ekranie pojawiła się lista nazw plików, w których trzeci znak to S.
Ten rozdział opisuje kompleksowe polecenia rysowania grafiki. Polecenia te umożliwiają rysowanie punktów, kształtów, wprowadzanie tekstu i malowanie na ekranie w dowolnym z szesnastu kolorów bez konieczności uzyskiwania dostępu do dowolnych lokalizacji pamięci.
Polecenie COLOUR ustawia kolor ekranu i otaczającą go ramkę. HIRES przełącza komputer do trybu rysowania grafiki o wysokiej rozdzielczości. W tym trybie wszystkie punkty są rysowane piksel po pikselu. MULTI inicjalizuje tryb wielokolorowy. Tutaj każdy narysowany punkt ma szerokość dwóch pikseli. Zarówno polecenia HIRES, jak i MULTI pozwalają określić, w którym kolorze chcesz rysować kształty graficzne. Polecenie LOW COL zmienia te kolory, podczas gdy HI COL wraca do tych kolorów, które zostały pierwotnie wybrane.
Polecenie PLOT umożliwia wyświetlanie pojedynczych punktów na ekranie. TEST umożliwia sprawdzenie statusu zdefiniowanej lokalizacji ekranu, tj. czy w tej pozycji została naniesiona kropka i w jakim jest kolorze. REC umożliwia rysowanie prostokątów, a CIRCLE umożliwia rysowanie okrągłych kształtów. Polecenie ARC rysuje określoną część okrągłego kształtu, podczas gdy polecenie ANGL rysuje jego promień. LINE rysuje linię ciągłą.
Polecenie PAINT wypełnia kształt grafiki określonym kolorem. BLOCK wyświetla w pełni wypełnione kolorowe bloki. Polecenia DRAW i ROT umożliwiają zaprojektowanie odręcznego kształtu, a następnie wyświetlenie go w określonym rozmiarze i kącie obrotu.
CSET wybiera zestaw znaków COMMODORE 64: duże i małe lub duże i znaki graficzne. To polecenie pozwala także przywrócić i wyświetlić ostatni wyświetlony ekran graficzny. Polecenia CHAR i TEXT wyświetlają pojedyncze znaki i ciągi znaków na ekranie graficznym. NRM powraca z ekranu graficznego do ekranu tekstowego.
W pierwszej części tego rozdziału omówiono konfigurację ekranu i różnice między grafiką w wysokiej rozdzielczości i wielokolorową. Przedstawiono szesnaście dostępnych kolorów oraz pokazano, jak podczas rysowania wybrać kolor. Druga połowa tego rozdziału opisuje format i użycie każdego polecenia rysowania grafiki. Polecenia są wymienione w kolejności, w której mogą być używane do pisania programów, takich jak te zawarte w rozdziale 13 tej instrukcji.
UWAGA:
Za wyjątkiem polecenia COLOUR pozostałe mogą być używane tylko jako część programu. |
Dla rysowania grafiki ekran COMMODORE 64 jest podzielony na matrycę lub siatkę. Każdy punkt na siatce jest określony przez jego współrzędne x i y, tak jak wskazywałbyś punkt na wykresie. Na przykład lokalizacja 0,0 odnosi się do lewego górnego rogu ekranu. Rozmiar siatki różni się w zależności od tego, czy korzystasz z trybu grafiki o wysokiej rozdzielczości, czy z trybu wielokolorowego. W trybie wysokiej rozdzielczości ekran dzieli się na 320 na 200 punktów. W trybie wielokolorowym ta matryca ma 160 na 200 punktów. Oznacza to, że każda kropka naniesiona w trybie wysokiej rozdzielczości ma szerokość jednego piksela czyli najmniejszego adresowalnego punktu na ekranie. W trybie wielokolorowym każdy narysowany punkt ma szerokość dwóch pikseli.
W trybie wysokiej rozdzielczości mogą być używan tylko dwa kolory a w trybie wielokolorowym, tylko trzy kolory w dowolnym obszarze o wymiarach 8 na 8 pikseli. COMMODORE 64 oferuje szesnaście różnych kolorów rysowania. Te kolory i związane z nimi wartości są wymienione poniżej:
0 |
Czarny |
1 |
Biały |
2 |
Czerwony |
3 |
Turkusowy |
4 |
Fioletowy |
5 |
Zielony |
6 |
Niebieski |
7 |
Żółty |
8 |
Pomarańczowy |
9 |
Brązowy |
10 |
Różowy |
11 |
Szary 1 |
12 |
Szary 2 |
13 |
Jasnozielony |
14 |
Jasnoniebieski |
15 |
Szary 3 |
Podczas rysowania koloru grafiki, który ma być użyty dla kształtu, jest on określony w postaci skojarzonego z nim numeru koloru.
Wszystkie polecenia graficzne mają jedną wspólną cechę. Każde z nich wymaga określenia rodzaju rysowania. To informuje komputer jak narysować każdy punkt. Rodzaje rysowania dla trybu wysokiej rozdzielczości i wielokolorowego są wymienione poniżej:
TRYB WYSKOIEJ ROZDZIELCZOŚCI
RODZAJ RYSOWANIA |
EFEKT |
0 |
Czyści punkt. |
1 |
Rysuje punkt na ekranie. |
2 |
Odwraca punkt, tzn. wyświetla punkt jeśli go nie ma lub czyści punkt gdy jest. |
TRYB WIELOKOLOROWY
RODZAJ RYSOWANIA |
EFEKT |
0 |
Czyści punkt. |
1 |
Rysuje punkt w kolorze 1 polecenia MULTI / LOW COL. |
2 |
Rysuje punkt w kolorze 2 polecenia MULTI / LOW COL. |
3 |
Rysuje punkt w kolorze 3 polecenia MULTI / LOW COL. |
4 |
Odwraca kolor punktu, tj .: |
|
Punkt narysowany w kolorze 0 zmienia się na kolor 3 |
|
Punkt narysowany w kolorze 1 zmienia się na kolor 2 |
|
Punkt narysowany w kolorze 2 zmienia się na kolor 1 |
|
Punkt narysowany w kolorze 3 zmienia się na kolor 0 |
COLOUR bo,sc
Ustawia kolor tła ekranu i obramowania.
Polecenie COLOR pozwala określić kolor tła ekranu dla ekranu o niskiej rozdzielczości oraz kolor obramowania otaczającego ekran o niskiej i wysokiej rozdzielczości. Parametr sc odnosi się do koloru tła ekranu a parametr bo do koloru obramowania. Kolory wybiera się, określając powiązane z nimi numery kolorów (zobacz rozdział 6.3).
UWAGA:
Tło ekranu o niskiej rozdzielczości pozostanie w wybranym kolorze, dopóki nie zostanie ponownie wykonane polecenie COLOUR z użyciem innej wartości koloru. Kolor tła ekranu zawierającego grafikę wielokolorową lub w wysokiej rozdzielczości wybierany jest za pomocą polecenia HIRES. |
PRZYKŁAD: Aby określić turkusowy kolor tła ekranu i niebieski kolor obramowania:
POLECENIE: COLOUR 3,6 <RETURN>
REZULTAT: Widzisz turkusowy ekran i otaczającą go niebieską ramkę.
HIRES pc,sb
Inicjuje tryb grafiki o wysokiej rozdzielczości i ustawia kolory rysowanych punktów i tła ekranu.
Polecenie HIRES ustawia ekran w trybie grafiki o wysokiej rozdzielczości, tj. wszystkie punkty są rysowane piksel po pikselu. Pierwszy parametr pc, to numer koloru, z którego chcesz korzystać (zobacz rozdział 6.3). Drugi parametr sb, określa kolor tła każdego kwadratu o wymiarach 8 na 8 pikseli na którym odbywa się rysowanie.
UWAGA:
Pomiędzy poleceniem HIRES i jego pierwszym parametrem musi być spacja. |
PRZYKŁAD: Aby wybrać czarny kolor rysowania na białym tle:
NAPISZ: 10 HIRES 0,1
20 GOTO 20
RUN <RETURN>
REZULTAT: Wyświetlony jest pusty biały ekran.
WYKONAJ: Naciśnij klawisz [runstop].
REZULTAT: Pojawił się normalny ekran.
REC x,y, A, B,rodzaj rysowania
Rysuje prostokąt.
Polecenie REC rysuje prostokątny kształt na ekranie graficznym. Pierwsze parametry polecenia (x, y) określają współrzędne lewego górnego rogu prostokąta. Wartość x określa odległość od lewej krawędzi a y od górnej krawędzi ekranu. Parametr A określa odległość od lewego górnego rogu do prawego górnego rogu prostokąta a parametr B określa odległość od lewego górnego rogu do lewego dolnego rogu prostokąta. Rodzaj rysowania jest taki, jak to opisano w rozdziale 6.4.
PRZYKŁAD: Aby narysować prostokąt z użyciem grafiki wysokiej rozdzielczości w lewym górnym rogu ekranu:
NAPISZ: 10 HIRES 0,1
20 REC 0,0,40,20,1
30 GOTO 30
NAPISZ: RUN <RETURN>
REZULTAT: Wyświetli się czarny prostokąt.
WYKONAJ: Naciśnij klawisz [runstop].
REZULTAT: Pojawił się normalny ekran.
HIRES pc,sb: MULTI c1,c2,c3
Inicjuje tryb grafiki wielokolorowej i ustawia trzy kolory rysowania.
MULTI, po zastosowaniu polecenia HIRES, spowoduje, że wszystkie rysowane punkty będą w trybie grafiki wielokolorowej, tj. każdy narysowany punkt będzie miał szerokość dwóch pikseli. Trzy parametry następujące po MULTI definiują kolory rysowania, które chcesz użyć. Każdy rysowany kolor jest wybierany przez odniesienie do jego pozycji w poleceniu MULTI jako rodzaj rysowania polecenia rysującego (zobacz rozdziale 6.4).
PRZYKŁAD: Aby przejść do trybu grafiki wielokolorowej, wybierając czarny, czerwony i niebieski jako kolory rysowania, a następnie narysować trzy prostokąty:
NAPISZ: 10 HIRES 0,1: MULTI 0,2,6
30 REC 0,0,40,20,1
40 REC 20,20,40,20,2
50 REC 40,40,40,20,3
60 GOTO 60
RUN <RETURN>
REZULTAT: Zostały narysowane trzy prostokąty: czarny, czerwony i niebieski.
WYKONAJ: Naciśnij klawisz [runstop].
REZULTAT: Pojawił się normalny ekran.
NRM
Powraca z ekranu graficznego do ekranu o niskiej rozdzielczości.
Polecenie NRM umożliwia wyczyszczenie ekranów graficznych - w wysokiej rozdzielczości lub wielokolorowego i powraca do ekranu o niskiej rozdzielczości.
PRZYKŁAD: Korzystając z programu z poprzedniego rozdziału, po wyświetleniu przez pięć sekund ekranu graficznego powróć do ekranu o niskiej rozdzielczości:
NAPISZ: 10 HIRES 0,1: MULTI 0,2,6
30 REC 0,0,40,20,1
40 REC 20,20,40,20,2
50 REC 40,40,40,20,3
60 PAUSE 5
70 NRM
RUN <RETURN>
REZULTAT: Trzy prostokąty są wyświetlane przez pięć sekund. Pojawi się normalny ekran wyświetlający READY i migający kursor.
LOW COL c1,c2,c3
Zmienia kolory rysowania.
LOW COL umożliwia określenie innego zestawu kolorów rysowania w trybie graficznym spośród oryginalnie wybranych za pomocą poleceń HIRES lub MULTI.
UWAGA:
Ponieważ podczas rysowania grafiki w wysokiej rozdzielczości używane są tylko dwa kolory (zobacz rozdział 6.5.2), trzeci kolor w poleceniu LOW COL nie wpływa na nic. Jednak w poleceniu LOW COL należy użyć trzech liczb niezależnie od tego, który tryb graficzny został zainicjowany. |
PRZYKŁAD: Aby narysować czarny prostokąt w trybie grafiki o wysokiej rozdzielczości i żółtym odcieniu:
NAPISZ: 10 HIRES 0,1
20 LOW COL 0,7,0
30 REC 20,20,60,60,1
40 PAUSE 5
50 NRM
RUN <RETURN>
REZULTAT: Na białym ekranie jest narysowany czarny prostokąt. Każdy kwadrat o wymiarach 8 na 8 pikseli, nad którym został narysowany prostokąt, ma kolor żółty. Po pięciu sekundach wyświetlany jest normalny ekran.
PRZYKŁAD: Aby narysować trzy prostokąty w trybie graficznym wielokolorowym, używając każdego oryginalnego kolorów rysowania, a następnie zmieniając te kolory i narysować trzy prostokąty, każdy w nowych kolorze:
NAPISZ: 10 HIRES 0,1: MULTI 2,3,6: Z = 10
20 FOR X = 1 TO 3
30 REC 10,Z,30,30,X
40 Z = Z + 40: NEXT
50 LOW COL 4,5,7: Z = 10
60 FOR X = 1 TO 3
70 REC 50,Z,30,30,X
80 Z = Z + 40: NEXT
90 PAUSE 5
100 NRM
RUN <RETURN>
REZULTAT: Narysowano sześć prostokątów, każdy w innym kolorze. Po pięciu sekundach wyświetlany jest normalny ekran.
HI COL
Przywraca oryginalne wybrane kolory rysowania.
Polecenie HI COL umożliwia przywrócenie oryginalnych kolorów rysowania, tj. skonfigurowanych za pomocą polecenia HIRES lub MULTI, jeśli użyto LOW COL.
PRZYKŁAD: Aby narysować dziewięć pros tokątów w różnych kol orach:
NAPISZ: 10 HIRES 0,1: MULTI 2,3,6: Z = 10
20 FOR Y = 10 TO 50 STEP 40
30 FOR X = 1 TO 3
40 REC Y,Z,30,30,X
50 Z = Z + 40 : NEXT X : Z = 10 : LOW COL 4,5,7 : NEXT Y
60 HI COL
70 FOR X = 1 TO 3
80 REC Y,Z,30,30,X
90 Z = Z + 40 : NEXT
100 PAUSE 5
110 NRM
RUN < RETURN>
REZULTAT: Zostały wyświetlone trzy pros tokąty w oryginalnych kol orach, trzy w kol orach przypisanych za pomocą polecenia LOW COL i trzy inne ponownie używając oryginalnych kol orów rysowania. Po pięciu sekundach wyświetlany jest n ormalny ekran.
PLOT x,y,rodzaj rysowania
Rysuje jedną kropkę.
PLOT tworzy pojedynczą kropkę na ekranie graficznym. Parametry x i y określają współrzędne punktu, który ma być narysowany. Rodzaj rysowania jest taki, jak to opisano w .rozdziale 6.4.
PRZYKŁAD: Aby narysować czarną kropkę w trybie grafiki wielokolorowej:
NAPISZ: 10 HIRES 0,1:MULTI 0,1,2
20 PLOT 80,100,1
30 PAUSE 5
40 NRM
RUN <RETURN>
REZULTAT: Na środku ekranu została narysowana czarna kropka. Po pięciu sekundach wyświetlany jest normalny ekran.
PRZYKŁAD: Aby narysować wykropkowaną krzywą:
NAPISZ: 10 HIRES 0,1
20 FOR X = 0 TO 320 STEP .5
30 Y = 100 + SIN(X/30) * 90
40 PLOT X,Y,1
50 NEXT
1000 GOTO 1000
RUN <RETURN>
REZULTAT: Został narysowany czarny wykres funkcji sinus.
zmienna = TEST (x,y)
Ustala, czy w miejscu na ekranie zostało coś narysowane.
TEST umożliwia sprawdzenie statusu lokalizacji na ekranie graficznym. Parametry x i y są współrzędnymi ekranu badanego punktu. Jeśli w tym punkcie została narysowana kropka, zwracany jest rodzaj narysowanej kropki (zobacz rozdział 6.4). Wartość 0 jest zwracana, jeśli nie ma kropki. Kropka może być dowolną częścią kształtu grafiki.
PRZYKŁAD: Aby wygenerować linię kończącą się po zetknięciu się z inną linią:
NAPISZ: 10 REM"*** EXAMPLE OF TEST ***
20 HIRES 0,1
25 FOR X = 0 TO 200
30 PLOT 200,X,1:NEXT
40 FOR I = 1 TO 320
50 IF TEST(I,100) = 1 THEN 70
60 PLOT I,100,1:NEXT
70 PAUSE 5
80 NRM
RUN <RETURN>
REZULTAT: Linia pozioma zatrzymuje się, gdy zetknie się z linią pionową. Po pięciu sekundach wyświetlany jest normalny ekran.
LINE x,y,x1,y1,rodzaj rysowania
Rysuje linię.
LINE rysuje linię od jednego do drugiego punktu na ekranie. Parametry x i y są współrzędnymi początku linii. Parametry x1 i y1 są współrzędnymi końca linii. Rodzaj rysowania jest taki, jak to opisano w rozdziale 6.4.
PRZYKŁAD: Aby narysować ukośną linię na ekranie:
NAPISZ: 10 HIRES 0,1
20 LINE 0,0,320,200,1
30 PAUSE 5
40 NRM
RUN <RETURN>
REZULTAT: Została narysowana czarna linia od lewego górnego do prawego dolnego rogu ekranu. Po pięciu sekundach wyświetlany jest normalny ekran.
CIRCLE x,y,xr,yr,rodzaj rysowania
Rysuje okrągły kształt.
CIRCLE umożliwia rysowanie okrągłego kształtu na ekranie graficznym. Parametry x i y określają współrzędne środka kształtu, który chcesz narysować. Parametry xr i yr oznaczają odpowiednio poziomy i pionowy promień kształtu. Zmieniając te promienie, można narysować okręgi i elipsy o różnych rozmiarach. Rodzaj rysowania jest taki, jak to opisano w rozdziale 6.4.
UWAGA:
Ponieważ ekran jest prostokątny, a nie kwadratowy, promienie X i Y o tej samej długości nie umożliwiają narysowania idealnego okręgu na ekranie. Aby to zrobić w trybie wysokiej rozdzielczości, promień x musi być równy promieniowi y pomnożonemu przez 1.4. W trybie wielokolorowym promień x musi być równy promieniowi y pomnożonemu przez 1.6. Jeśli jednak chcesz wydrukować na drukarce ekran wielokolorowy lub w wysokiej rozdzielczości zawierający okręgi, aby uzyskać drukowane okrągłe kształty, wartości promieni X i Y muszą być równe. Szczegółowe informacje na temat drukowania można znaleźć w rozdziale 7.13.2. |
PRZYKŁAD: Aby narysować okrągły kształt w trybie wysokiej rozdzielczości:
NAPISZ: 10 HIRES 0,1
20 CIRCLE 160,100,52,40,1
30 PAUSE 5
40 NRM
RUN <RETURN>
REZULTAT: Na środku ekranu został narysowany czarny okrąg. Po pięciu sekundach wyświetlany jest normalny ekran.
PRZYKŁAD: Aby narysować elipsę w trybie grafiki wielokolorowej:
NAPISZ: 10 HIRES 0,1:MULTI 2,3,4
20 CIRCLE 80,100,60,30,1
30 PAUSE 5
40 NRM
RUN <RETURN>
REZULTAT: Została narysowana czerwona elipsa. Po pięciu sekundach wyświetlany jest normalny ekran.
ARC x,y,sa,ea,i,xr,yr,rodzaj rysowania
Rysuje łuk o okrągłym kształcie.
Polecenie ARC umożliwia narysowanie części obwodu okrągłego kształtu. Parametry x i y są współrzędnymi środka okrągłego kształtu, z którego łuk jest rysowany. Parametry sa i ea definiują odpowiednio kąt początkowy i końcowy łuku. Parametr i określa skok rysowania, tj. przedział w stopniach między każdym punktem łuku. Aby uzyskać lity łuk, wartość ta wynosi 1. Większa wartość oddziela kropki tworzące łuk. Parametry xr i yr oznaczają odpowiednio promienie pionowe i poziome okrągłego kształtu, którego częścią jest łuk. Rodzaj rysowania jest taki, jak to opisano w rozdziale 6.4.
PRZYKŁAD: Aby narysować dwa łuki o takim samym okrągłym kształcie:
NAPISZ: 10 HIRES 0,1
20 ARC 160,100,30,150,1,40,40,1
30 ARC 160,100,210,330,1,40,40,1
40 PAUSE 5
50 NRM
RUN <RETURN>
REZULTAT: Została narysowana para czarnych nawiasów. Po pięciu sekundach wyświetlany jest normalny ekran.
ANGL x,y,kąt,xr,yr,rodzaj rysowania
Rysuje promień okręgu.
Polecenie ANGL pozwala narysować promień okręgu bez konieczności wyświetlania jego obwodu. Parametry x i y są współrzędnymi środka okręgu, kąt to kąt, w stopniach, w którym promień jest narysowany względem prostopadłej, np. promień narysowany pod kątem 45 stopni byłby na trzeciej godzinie tarczy zegara. Parametrami xr i yr są odpowiednio promienie poziome i pionowe okrągłego kształtu, którego promień jest częścią. Rodzaj rysowania jest taki, jak to opisano w rozdziale 6.4.
PRZYKŁAD: Aby narysować koło:
NAPISZ: 10 HIRES 0,1
20 CIRCLE 160,100,40 * 1.4,40,1
30 CIRCLE 160,100,45 * 1.4,45,1
40 FOR X = 0 TO 360 STEP 22.5
50 ANGL 160,100,X,40 * 1.4,40,1
60 NEXT
70 PAUSE 10
80 NRM
RUN <RETURN>
REZULTAT: Zostało narysowane czarne koło ze szprychami. Po dziesięciu sekundach wyświetlany jest normalny ekran.
PRZYKŁAD: Aby narysować wachlarz:
NAPISZ: 10 HIRES 0,1
20 FOR X = 0 TO 170 STEP 5
30 ANGL 160,100,X,40,40,1
40 NEXT
50 FOR X = 170 TO 0 STEP -5
60 ANGL 160,100,X,40,40,0
70 NEXT
80 PAUSE 10
90 NRM
RUN <RETURN>
REZULTAT: Wachlarz jest otwierany, a następnie zamykany. Po dziesięciu sekundach wyświetlany jest normalny ekran.
PAINT x,y,rodzaj rysowania (tylko 0,1,2,3)
Wypełnia kolorem zamknięty obszar.
PAINT wypełnia kształt graficzny kolorem określonym przez rodzaj rysowania (zobacz rozdział 6.4). Obszar przeznaczony do malowania MUSI być całkowicie zamknięty lub malowanie odbędzie się na całym ekranie. Obszar do malowania określają współrzędne X i Y dowolnego punktu w jego granicach. W trybie wysokiej rozdzielczości ten sam obszar może być malowany tylko jeden raz. Można to opanować przez wyczyszczenie ekranu, zmianę kolorów rysowania za pomocą polecenia LOW COL, ponowne narysowanie kształtu, a następnie jego ponowne malowanie. W trybie wielokolorowym ten sam obszar może być malowany w innym kolorze tak często, jak chcesz.
PRZYKŁAD: Aby narysować czarny prostokąt i pomalować go na żółto:
NAPISZ: 10 HIRES 0,1
20 REC 120,60,40,40,1
30 LOW COL 7,1,0
40 PAINT 130,70,1
50 PAUSE 5
60 NRM
RUN <RETURN>
REZULTAT: Pośrodku ekranu został narysowany czarny kwadrat i wypełniony żółtym kolorem. Po pięciu sekundach wyświetlany jest normalny ekran.
PRZYKŁAD: Aby narysować kolorowy wykres kołowy:
NAPISZ: 10 HIRES 0,1:MULTI 5,4,6
20 CIRCLE 80,100,48,78,1
30 ANGL 80,100,120,48,78,1
40 ANGL 80,100,160,48,78,1
50 ANGL 80,100,220,48,78,1
60 ANGL 80,100,330,48,78,1
70 PAINT 90,35,1
80 PAINT 60,60,3
90 PAINT 90,120,2
100 LOW COL 7,4,6
110 PAINT 80,110,1
120 PAUSE 5
130 NRM
RUN <RETURN>
REZULTAT: Pośrodku ekranu został narysowany czteroczęściowy wykres kołowy, a każdy jego segment jest pomalowany na inny kolor. Po pięciu sekundach wyświetlany jest normalny ekran.
BLOCK x,y,x1,y1,rodzaj rysowania
Rysuje całkowicie wypełniony kolorowy blok.
Polecenie BLOCK rysuje prostokąt i wypełnia go kolorem w tym samym czasie. To pojedyncze polecenie wykonuje tę samą funkcję, co rysowanie prostokąta za pomocą polecenia REC i kolorowanie go za pomocą polecenia PAINT. Polecenie BLOCK wykonuje obie operacje jednocześnie. Należy jednak pamiętać, że w przypadku BLOCK kolor boków prostokąta jest taki sam, jak kolor wewnętrznej strony kształtu.
To polecenie jest przydatne, jeśli chcesz utworzyć kilka sąsiednich bloków o różnych kolorach bez oddzielania ich za pomocą linii. Parametry x i y określają górny lewy róg bloku, który chcesz wyświetlić. Parametry x1 i y1 są współrzędnymi prawego dolnego rogu bloku. Rodzaj rysowania jest taki, jak to opisano w rozdziale 6.4.
PRZYKŁAD: Aby narysować dwa bloki w różnych kolorach:
NAPISZ: 10 HIRES 0,1: MULTI 2,6,1
20 BLOCK 10,50,50,90,1
30 BLOCK 51,50,90,90,2
40 PAUSE 5
50 NRM
RUN <RETURN>
REZULTAT: Czerwony blok został wyświetlany obok niebieskiego bloku. Po pięciu sekundach wyświetlany jest normalny ekran.
DRAW "nnnnnnn....9",x,y,rodzaj rysowania
Projektuje kształt.
Polecenie DRAW umożliwia zaprojektowanie kształtu, a następnie wyświetlenie go na ekranie. Kształt jest zaprojektowany w taki sam sposób jak rysunek na kartce papieru bez wyjmowania ołówka. Jest jednak jedna ważna różnica - możesz nakazać komputerowi przesunięcie ołówka i nie rysowanie nim. (zobacz rozdział 6.5.17).
Parametry x i y są współrzędnymi punktu na ekranie, od którego rozpoczyna się rysowanie kształtu. Każdy n w cudzysłowie jest instrukcją informującą o przesunięciu ołówka podczas rysowania kształtu. Maksymalnie 74 instrukcje mogą być umieszczone w cudzysłowach w jednej linii programu. Można jednak dodać ciągi instrukcji łącznie do maksymalnie 255. Aby kontynuować rysowanie kształtu, należy podać nowe początkowe miejsce rozpoczęcia poprzedniego ciągu. Każda instrukcja i jej numer są pokazane poniżej:
NUMBER |
INSTRUKCJA |
0 |
Przesuń o jeden piksel w prawo. |
1 |
Przesuń o jeden piksel w górę. |
2 |
Przesuń o jeden piksel w dół. |
3 |
Przesuń o jeden piksel w lewo. |
5 |
Przesuń jeden piksel w prawo i narysuj kropkę. |
6 |
Przesuń jeden piksel w górę i narysuj kropkę. |
7 |
Przesuń o jeden piksel w dół i narysuj kropkę. |
8 |
Przesuń o jeden piksel w lewo i narysuj kropkę. |
9 |
Zatrzymaj rysowanie. |
UWAGA:
Powyższe instrukcje jedynie projektują kształt. Kształt nie może zostać narysowany, dopóki polecenia DRAW i ROT nie zostaną zawarte w programie, tj. polecenie DRAW określa kształt, a polecenie ROT je generuje. Rodzaj rysowania jest taki, jak to opisano w rozdziale 6.4. |
PRZYKŁAD: Aby zaprojektować dzwonek:
NAPISZ: 10 A$ = "57575757878787575757575757777777777777575757575757578888888888888"
20 A$ = A$ + "88888888888888656565656565656666666666666"
30 A$ = A$ + "565656565656868686565656"
REZULTAT: Po uruchomieniu tego fragmentu programu, instrukcje projektowania dzwonka są przechowywane w zmiennej A$.
ROT r,s
Wyświetla kształt pod określonym kątem i w określonym rozmiarze.
Polecenie ROT umożliwia wyświetlanie kształtu utworzonego za pomocą polecenia DRAW pod określonym kątem obrotu i w określonym rozmiarze. Parametr r określa, o ile kształt ma być obrócony względem płaszczyzny od jego początku, tj. punktu na ekranie, z którego został narysowany kształt. Wartość r (zakres od 0 do 7) określa kąt obrotu, jak pokazano w poniższej tabeli:
WARTOŚĆ |
KĄT OBROTU |
0 |
0° |
1 |
45° |
2 |
90° |
3 |
135° |
4 |
180° |
5 |
225° |
6 |
270° |
7 |
315° |
Drugi parametr polecenia ROT definiuje wyświetlany rozmiar kształtu, który zaprojektowałeś. 1 w tym parametrze oznacza, że kształt ma być wyświetlany w normalnym rozmiarze, tj. każdy parametr w poleceniu rysującym oznacza jeden piksel. Każde zwiększenie tej liczby powoduje odpowiedni wzrost wielkości.
UWAGA:
Jeśli określisz zbyt duży rozmiar dla zaprojektowanego kształtu, po wyświetleniu zniknie on z ekranu. Zatem należy się zawsze upewnić, że ta liczba jest utrzymywana na realistycznym poziomie. |
PRZYKŁAD: Aby wyświetlić, w normalnym i powiększonym rozmiarze, kształt zaprojektowany w poprzednim rozdziale:
NAPISZ: 10 A$ = "57575757878787575757575757777777777777575757575757578888888888888"
20 A$ = A$ + "88888888888888656565656565656666666666666"
30 A$ = A$ + "565656565656868686565656"
40 HIRES 0,1
45 FOR Y = 0 TO 7
50 FOR X = 1 TO 3
60 ROT Y,X
70 DRAW A$,160,80,1
80 PAUSE 1
90 DRAW A$,160,80,0
100 NEXT:NEXT
110 FOR X = 3 TO 1 STEP -1
115 FOR Y = 7 TO 0 STEP -1
120 ROT Y,X
130 DRAW A$,160,80,1
140 PAUSE 1:DRAW A$,160,80,0:NEXT:NEXT
150 GOTO 45
RUN <RETURN>
REZULTAT: Dzwonek wyświetla się pod siedmioma różnymi kątami obrotu w trzech rozmiarach.
CSET n
Wybiera jeden z zestawów znaków COMMODORE 64 lub przywraca i wyświetla ostatni ekran graficzny.
CSET to CSET 0. CSET 0 pozwala Ci wybrać zestaw znaków COMMODORE 64 z dużymi literami/grafiką. CSET 1 umożliwia wybór zestawu znaków wielkie/małe litery. CSET 2 wyświetla ostatni wyświetlany ekran graficzny.
UWAGA:
Przy przywracaniu wielokolorowego ekranu graficznego zawsze musisz wybrać CSET 2 wraz z poleceniem MULTI, używając tych samych parametrów, które pierwotnie zostały przypisane do tego polecenia. |
PRZYKŁAD: Aby wyświetlić ciąg za pomocą alternatywnych zestawów znaków:
NAPISZ: 10 PRINT"<SHIFT CLR/HOME>"
20 PRINT AT(12,14)"SIMONS' BASIC"
30 CSET 1:PAUSE 1:CSET 0:PAUSE 1
40 GOTO 20 ; poprawiono
RUN <RETURN>
REZULTAT: Na środku ekranu został wyświetlony ciąg znaków SIMONS' BASIC, najpierw wielkimi literami, a następnie małymi literami.
PRZYKŁAD: Aby ponownie wyświetlić poprzednio utworzony ekran o wysokiej rozdzielczości:
NAPISZ: 10 HIRES 0,1:MULTI 0,4,6
15 FOR I = 1 TO 20
20 A = INT(90 * RND(1)) + 2: B = INT(90 * RND(1)) + 2
25 C = INT(90 * RND(1)) + 2: D = INT(60 * RND(1)) + 2
27 P = INT(3 * RND(1)) + 1
28 IF A + C > 159 THEN 25 ;dodano
29 IF B + D > 199 THEN 25 ;dodano
30 REC A,B,C,D,1
35 PAINT A + 1,B + 1,P
37 NEXT I
40 PAUSE 2:CSET 0
50 PRINT"<SHIFT CLR/HOME>PRESS ANY KEY TO RE-DISPLA"
60 PRINT"(<CURSOR DOWN>)THE LAST SCREEN"
70 GET A$: IF A$ = "" THEN 70
80 CSET 2: MULTI 0,4,6: PAUSE 2:CSET 0
90 GOTO 50
RUN <RETURN>
REZULTAT: Zostało narysowanych 20 kolorowych kwadratów na wielokolorowym ekranie graficznym. Po krótkim czasie pojawia się normalny ekran z komunikatem PRESS ANY KEY TO RE-DISPLAY THE LAST SCREEN.
WYKONAJ: Naciśnij dowolny klawisz.
REZULTAT: Został ponownie wyświetlony ekran graficzny.
CHAR x,y,kod poke,rodzaj rysowania,rozmiar
Wyświetla znak na ekranie graficznym.
Polecenie CHAR pozwala wyświetlać znak po znaku na ekranie graficznym wysokiej rozdzielczości lub wielokolorowym. Parametry x i y określają położenie znaku na ekranie. Kolejny parametr w poleceniu jest kodem poke, który chcesz wyświetlić. (Pełna lista kodów poke znajduje się w Podręczniku użytkownika COMMODORE 64.) Rodzaj rysowania jest opisany w rozdziale 6.4. Ostatni parametr w tym poleceniu określa wysokość znaku w zakresie od 1 do 8. Wartość 1 oznacza, że znak ma być wyświetlany w normalnym rozmiarze, tj. o wysokości ośmiu pikseli. Każde zwiększenie tej liczby powoduje odpowiedni wzrost wysokości znaków, np. wartość 3 wyświetlałaby znak o wysokości 24 pikseli. Szerokość znaków NIE ZMIENIA SIĘ.
UWAGA:
Na ekranie graficznym o wysokiej rozdzielczości lub wielokolorowym NIE MOŻNA używać znaków graficznych zdefiniowanych przez użytkownika. |
PRZYKŁAD: Aby wyświetlić znaki o dwukrotnie większym rozmiarze:
NAPISZ: 10 REM"*** EXAMPLE OF CHAR ***
20 HIRES 0,1
30 FOR J = 0 TO 15
40 FOR K = 0 TO 31
50 CHAR I * 8, A,K + J * 32,1,2
51 I = I + 1 : IF I = 40 THEN I = 0 : A = A + 15
60 NEXT:NEXT
70 PAUSE 5
80 NRM
RUN <RETURN>
REZULTAT: Cały zestaw znaków COMMODORE 64 jest wyświetlany w dwukrotnie zwiększonej wysokości. Po upływie pięciosekundowego opóźnienia wyświetlany jest normalny ekran.
TEXT x,y,"(CTRL a) ciąg znaków",rodzaj rysowania,s,i lub
TEXT x,y,"(CTRL b) ciąg znaków",rodzaj rysowania,s,i
Wyświetla ciąg znaków na ekranie graficznym.
TEXT umożliwia wyświetlanie ciągów znaków na ekranie graficznym. Parametry x i y określają współrzędne ekranu pierwszej litery ciągu. Następny parametr to sam ciąg. Znak kontrolny poprzedzający ciąg wskazuje, czy tekst ma być wyświetlany wielkimi czy małymi literami.
Aby wyświetlić tekst wielkimi literami:
- Napisz cudzysłów otwierający.
- Przytrzymaj klawisz CTRL i naciśnij klawisz a. (Wyświetlona jest litera a w inwersji.)
- Wprowadź ciąg znaków.
- Napisz cudzysłów zamykający.
Aby wyświetlić tekst małymi literami:
- Napisz cudzysłów otwierający.
- Przytrzymaj klawisz CTRL i naciśnij klawisz b. (Wyświetlona jest litera b w inwersji.)
- Wprowadź ciąg znaków.
- Napisz cudzysłów zamykający.
Możesz również w tym samym ciągu mieszać wielkie i małe litery. Aby to zrobić, przytrzymaj klawisz CTRL i naciśnij klawisz a przed znakami, które chcesz wyświetlić dużymi literami lub przytrzymaj klawisz CTRL i naciśnij klawisz b przed znakami, które chcesz wyświetlić małymi literami.
Rodzaj rysowania jest taki, jak to opisano w rozdziale 6.4. Parametr s określa wysokość każdego znaku w ciągu w przedziale od 1 do 8. 1 oznacza znaki o normalnym rozmiarze. Każde zwiększenie tej liczby powoduje odpowiedni wzrost wielkości znaku, np. jeśli podałeś wielkość znaków na 8, wyświetlany tekst będzie ośmiokrotnie większy. NIE MOŻNA zmieniać szerokość znaków. Ostatni parametr i określa liczbę pikseli między poszczególnymi znakami. Dla normalnego odstępu liczba ta wynosi 8. Każdy wzrost tej liczby tworzy odpowiednio większą przestrzeń między znakami.
PRZYKŁAD: Aby wyświetlić dwa ciągi znaków na ekranie w wysokiej rozdzielczości:
NAPISZ: 10 REM"*** EXAMPLE OF TEXT ***
20 HIRES 0,1
30 FOR I = 1 TO 30
40 X = INT(320 * RND(1)):Y = INT(200 * RND(1))
50 LINE 160,100,X,Y,1:NEXT
60 TEXT 60,20,"<CTRL B>TEXT ON THE HIRES SCREEN",1,2,8
70 TEXT 20,180,"<CTRLA>ANYWHERE <CTRL B>YOU LIKE!",1,1,16
80 PAUSE 5
90 NRM
REZULTAT: Po uruchomieniu programu rysuje się szereg losowych linii. Wyświetlane są następnie dwie wiadomości, pierwsza z małymi literami, przy dwukrotnym zwiększeniu wysokości liter, druga z małymi i dużymi oraz z podwójnymi odstępami między literami.
Kilka kompleksowych funkcji ekranowych obsługi danych w niskiej rozdzielczości lub w grafice wysokiej rozdzielczości znajduje się w SIMONS' BASIC.
Polecenie BCKGNDS umożliwia zdefiniowanie koloru tła znaku. FLASH przełącza znaki w zdefiniowanym kolorze na wyświetlanie ich w inwersji lub normalnie w określonych odstępach czasu. BFLASH działa w podobny sposób ale dla ramki. OFF kończy polecenie FLASH.
Polecenie FCHR umożliwia wypełnienie określonego obszaru ekranu wybranym znakiem. FCOL wypełnia określoną część ekranu określonym kolorem. FILL łączy te polecenia, umożliwiając wypełnienie zdefiniowanego obszaru ekranu konkretnym znakiem w określonym kolorze.
Polecenie MOVE powiela określony fragment ekranu w innym miejscu ekranu. INV pozwala odwrócić wyświetlane znaki w określonym miejscu ekranu, tzn. wyświetlić normalne znaki w inwersji i odwrotnie.
Polecenie COPY umożliwia wydrukowanie zawartości ekranu graficznego za pomocą drukarki szeregowej Commodore. HRDCPY wykonuje tę samą funkcję dla danych ekranowych.
SCRSV umożliwia zapisanie ekranu o niskiej rozdzielczości. SCRLD umożliwia wczytanie i wyświetlenie zapisanego ekranu.
Rozdział 7 zawiera także polecenia przewijania zdefiniowanego obszaru ekranu w wyznaczonym kierunku. Można tego dokonać za pomocą przewijania, tj. liter przewijających się z jednej strony zdefiniowanego obszaru i pojawiających się ponownie po drugiej stronie, lub ze znikaniem, tj. liter przewijających się na określonym obszarze, ale nie pojawiających się ponownie.
UWAGA:
Polecenia tego rozdziału mogą być używane w trybie bezpośrednim lub jako część programu. |
BCKGNDS sc,b1,b2,b3
Zmienia kolor tła znaków.
Gdy wyświetlany jest każdy znak klawiatury, zajmuje on na ekranie kwadrat 8 na 8 pikseli. (Piksel to najmniejszy adresowalny punkt na ekranie.) Kolor kwadratu jest zwykle taki jak reszty ekranu (z wyjątkiem oczywiście, jeśli znak jest wyświetlany w inwersji). Polecenie BCKGNDS pozwala zmienić kolor tego kwadratu zarówno dla zwykłego ekranu, jak i dla znaku w inwersji.
UWAGA:
Z poleceniem BCKGNDS można używać tylko tych znaków napisanych na górze każdego klawisza. Nie można używać znaków graficznych. |
Parametr sc polecenia BCKGNDS definiuje kolor ekranu. Następne trzy parametry określają kolor tła przesuniętego znaku, zmienionego znaku w inwersji i odpowiednio przesuniętego znaku w inwersji.
PRZYKŁAD: Aby wyświetlić wiadomość przy użyciu trzech różnych kolorów tła znaków: (Zauważ, że w poniższym programie znaki pisane kursywą muszą być napisane przy wciśniętym klawiszu [shift].)
NAPISZ: 10 PRINT"<SHIFT CLR/HOME>"
20 BCKGNDS 1,3,5,6
30 PRINT"THIS IS AN EXAMPLE":PRINT
40 PRINT"<CTRL RVS ON>OF THE SIMONS' BASIC":PRINT
50 PRINT"<CTRL RVS ON >BCKGNDS COMMAND":PRINT
RUN <RETURN>
REZULTAT: Wyświetlane są trzy wiersze tekstu, pierwszy na turkusowym tle, drugi na zielonym i trzeci na niebieskim.
FLASH kolor,szybkość lub
FLASH kolor
Kolor migania ekranu.
Polecenie FLASH umożliwia zmianę określonego koloru ekranu między wyświetlaniem ekranu normalnego i w inwersji co cztery sekundy lub z określoną prędkością. Ta zdefiniowana prędkość może wynosić od 1 do 255. Każda jednostka prędkości jest równa około 1/60 sekundy i po inicjalizacji, miganie trwa do momentu użycia polecenia OFF.
UWAGA:
Polecenie FLASH nie może być używane na ekranie graficznym o wysokiej rozdzielczości lub wielokolorowym. |
PRZYKŁAD: Aby migać z określoną prędkością, obszary ekranu czerwonym kolorem:
NAPISZ: 10 PRINT"<SHIFT CLR/HOME>"
20 PRINT AT(12,10)"WHY, <CTRL 3> HELLO <CTRL 1>THERE"
30 FLASH 2,10
1000 GOTO 1000
RUN <RETURN>
REZULTAT: Słowo HELLO ciągle miga, w przybliżeniu sześć razy na sekundę.
PRZYKŁAD: Aby spowodować miganie obszaru ekranu w kolorze czarnym co cztery sekundy:
WYKONAJ: Wprowadź program z poprzedniego rozdziału, a następnie wyświetl go na ekranie.
POLECENIE: FLASH 0 <RETURN>
REZULTAT: Wyświetlony program miga co 4 sekundy.
OFF
Kolor migania ekranu.
Wyłącza polecenie FLASH.
OFF kończy polecenie FLASH.
UWAGA:
Wynikowy kolor znaków, które zostały zmienione, zależy od tego, kiedy użyto polecenia OFF. |
PRZYKŁAD: Aby wyłączyć polecenie FLASH w powyższym programie:
NAPISZ: 10 PRINT"<SH IFT CLR/HOME>"
20 PRINT AT(12,10)"WHY,<CTRL 3> HELLO <CTRL 1 >THERE"
30 FLASH 2,10
40 PAUSE 10
50 OFF
60 PRINT AT(12,10)"WHY,<CTRL 3> HELLO <CTRL 1 >THERE"
RUN < RETURN>
REZULTAT: Słowo HELLO miga tylko przez dziesięć sekund.
BFLASH szybkość,c1,c2 lub
BFLASH 0
Włącza lub wyłącza miganie ramki.
BFLASH pozwala na miganie ramki wokół ekranu. Pierwszy parametr w poleceniu określa prędkość migania z zakresu od 1 do 255. Każda jednostka trwa około 1/60 sekundy. Parametry c1 i c2 są numerami kolorów, jakimi będzie migała ramka. BFLASH 0 wyłącza miganie.
UWAGA:
Wynikowy kolor ramki zależy od momentu wykonania polecenia. |
PRZYKŁAD: Aby migać ramką na czerwono, a następnie na niebiesko:
POLECENIE: BFLASH 25,2,6 <RETURN>
REZULTAT: Ramka ciągle miga, najpierw na czerwono, potem na niebiesko, zmieniając się co około jedną trzecią sekundy.
PRZYKŁAD: Aby włączyć miganie ramki a następnie je wyłączyć:
NAPISZ: 10 BFLASH 25,2,6
20 PAUSE 5
30 BFLASH 0
1000 GOTO 1000
RUN <RETURN>
REZULTAT: Ramka miga na czerwono, a następnie na niebiesko przez pięć sekund.
FCHR r,c,w,d,kod
Wypełnia znakiem obszar ekranu.
Polecenie FCHR umożliwia wypełnienie określonego obszaru ekranu określonym znakiem. Parametry r i c są współrzędnymi wiersza i kolumny początku ekranu, który ma zostać wypełniony. Wiersze są ponumerowane od 0 do 24, a kolumny od 0 do 39. Parametry w oraz d definiują odpowiednio szerokość i głębokość obszaru ekranu. Szerokość jest mierzona w znakach a głębokości w rzędach. Ostatnim parametrem polecenia jest kod znaku - poke, który chcesz wyświetlić. (Pełna lista kodów znajduje się w podręczniku COMMODORE 64).
PRZYKŁAD: Aby wyświetlić blok liter A:
NAPISZ: 10 PRINT"<SHIFT CLR/HOME>"
15 FCOL 0,0,10,10,0
20 FCHR 0,0,10,10,1
30 GOTO 20
RUN <RETURN>
REZULTAT: W lewym górnym rogu ekranu jest blok dziesięć na dziesięć wypełniony literami A.
FCOL r,c,w,l,kolor
Zmienia kolor znaku.
Polecenie FCOL zmienia kolor wszystkich znaków w określonym obszarze ekranu na zdefiniowany kolor. Podobnie jak w poleceniu FCHR, pierwsze cztery parametry polecenia określają obszar ekranu, którego chcesz użyć. Ostatnim parametrem jest numer nowego koloru dla każdego znaku pojawiającego się w tym obszarze. (Lista numerów kolorów znajduje się w rozdziale 6.3.)
PRZYKŁAD: Aby zmienić kolor znaku z czarnego na czerwony:
NAPISZ: 10 PRINT"<SHIFT CLR/HOME>"
15 FCOL 12,15,10,10,0
20 FCHR 12,15,10,10,1
30 FCOL 12,15,5,5,2
RUN <RETURN>
REZULTAT: Wyświetlany jest blok zawierający 100 liter A. Jedna czwarta ma kolor czerwony a reszta czarny.
FILL r,c,w,L,kod,kolor
Wypełnia zdefiniowany obszar na ekranie określonym znakiem w określonym kolorze.
FILL pozwala wypełnić zdefiniowany obszar ekranu znakami o określonym kolorze i typie. Podobnie jak w poleceniu FCHR, pierwsze cztery parametry w poleceniu FILL definiują obszar ekranu, który ma być użyty. Następny parametr to kod poke tego znaku, który ma zostać wyświetlony. (Pełna lista kodów znajduje się w podręczniku COMMODORE 64.) Ostatnim parametrem w poleceniu FILL jest kolor, w jakim chcesz wyświetlić znak.
PRZYKŁAD: Aby wyświetlić pełne kolorowe bloki:
NAPISZ: 10 REM"*** EXAMPLE OF FILL ***
20 PRINT"<SHIFT CLR/HOME>"
30 X = INT(40 * RND(1)):Y = INT(25 * RND(1))
40 X1 = INT(20 * RND(1)) + 1:Y1 = INT(15 * RND(1)) + 1
50 IF X + X1 > 40 OR Y + Y1 > 25 THEN 30
60 FILL Y,X,X1 ,Y1,160,INT(16 * RND(1)):GOTO 30
RUN <RETURN>
REZULTAT: Różnokolorowe bloki są wyświetlane w losowych miejscach ekranu.
WYKONAJ: Przytrzymaj klawisz [runstop] i naciśnij klawisz [restore].
REZULTAT: Wyświetlany jest normalny ekran.
MOVE r,c,w,l,dr,dc
Powiela obszar ekranu.
MOVE umożliwia ponowne wyświetlenie zdefiniowanego obszaru ekranu w innym miejscu na ekranie. Pierwsze cztery parametry polecenia definiują obszar ekranu, który chcesz powielić (zobacz rozdział 7.6). Ostatnie dwa parametry określają współrzędne wiersza i kolumny lewego górnego rogu obszaru, w którym nastąpi powielenie.
UWAGA:
Głębokość powielanego obszaru plus numer wiersza obszaru, w którym mają być powielane dane, nie może przekraczać 25, tj. wysokość ekranu. Podobnie szerokość obszaru, który ma być powielony, plus numer kolumny obszaru, w którym mają być wyświetlone dane, nie może być większa niż 40, tj. szerokość ekranu. Jeśli przekroczysz te wartości, pojawi się komunikat BAD MODE i będziesz musiał ponownie wprowadzić polecenie MOVE. |
PRZYKŁAD: Aby powielić obszar z tekstem:
NAPISZ: 10 REM"*** EXAMPLE OF MOVE ***
20 PRINT"<SHIFT CLR/HOME><CTRL 1>PRESS SPACE BAR"
30 PRINT"<CTRL 2>TO MOVE THIS AREA"
40 PRINT"<CTRL 3>TO ANOTHER PART"
50 PRINT"<CTRL 4>OF THE SCREEN."
60 GET A$:IF A$ <> " " THEN 60
70 MOVE 0,0,17,5,15,20
80 GOTO 80
RUN <RETURN>
WYKONAJ: Naciśnij klawisz SPACE.
REZULTAT: Wiadomość z lewego górnego rogu ekranu została powielana w prawym dolnym rogu.
INV r,c,w,l
Odwraca znaki określonego obszaru ekranu.
Polecenie INV powoduje, że wszystkie normalne znaki w zdefiniowanym obszarze ekranu będą wyświetlane w inwersji a wszelkie znaki już wyświetlone w inwersji będą wyświetlane normalnie. (Uwaga dla bardziej zaawansowanego programisty: polecenie INV odwraca 7 bit znaku).
PRZYKŁAD: Aby odwrócić znaki obszaru tekstowego:
NAPISZ: 10 REM"*** EXAMPLE OF INV ***
20 PRINT"<SHIFT CLR/HOME>PRESS THE SPACE BAR
30 PRINT"TO INVERSE THIS"
40 PRINT"AREA OF SCREEN!"
50 GET A$:IF A$ <> " " THEN 50
60 INV 0,0,19,4
70 GOTO 50
RUN <RETURN>
WYKONAJ: Naciśnij klawisz SPACE.
REZULTAT: Wiadomość jest wyświetlona w inwersji
WYKONAJ: Naciśnij ponownie klawisz SPACE.
REZULTAT: Wiadomość jest wyświetlona normalnie.
kierunek W,sr,sc,ec,er lub
kierunek B,sr,sc,ec,er
Przewija obszar ekranu.
SIMONS' BASIC dostarcza polecenia pozwalające na przewijanie określonych obszarów danych ekranu w dowolnym z czterech kierunków. Pierwszy parametr polecenia określa kierunek przewijania - LEFT, RIGHT, UP lub DOWN.
Drugim parametrem polecenia jest W lub B, aby wskazać rodzaj przewijania: zawijanie lub znikanie. Jeśli część ekranu jest przewijana z opcją zawijania, znaki znajdujące się na granicy obszaru, pojawią się po drugiej stronie tego obszaru. Znikanie różni się tym od zawijania, że znaki przewijane poza ekranem nie pojawiają się ponownie.
Parametry sr i sc definiują współrzędne początku obszaru wiersza i kolumny, który chcesz przewinąć. Parametry ec i er określają współrzędne końca obszaru przewijania kolumny i wiersza. Polecenia przewijania można łączyć w celu przewijania różnych obszarów ekranu w różnych kierunkach. Maksymalna wysokość i szerokość obszaru przewijania nie może przekraczać odpowiednio 24 linii i 23 znaków. Zwróć uwagę, że przewijania nie można używać na ekranach graficznych o wysokiej rozdzielczości lub wielokolorowych.
PRZYKŁAD: Aby przewinąć dwa obszary ekranu w różnych kierunkach:
NAPISZ: 10 PRINT"<SHIFT CLR/HOME>"
20 FOR X = 0 TO 39
30 Y = INT(10 * SIN(X/Pi)) + 12
40 PRINT AT(X,Y)"*"
50 NEXT
60 LEFTW 0,0,20,25: RIGHTW 0,20,20,25
70 GOTO 60
RUN <RETURN>
REZULTAT: Zakrzywiona linia jest przewijana na ekranie jednocześnie w obu kierunkach.
SCRSV 2,8,2,"nazwa,S,W" lub
SCRSV 1,1,1,"nazwa"
Zapisuje dane z ekranu o niskiej rozdzielczości.
Polecenie SCRSV umożliwia zapisanie danych z ekranu o niskiej rozdzielczości na kasecie lub dyskietce. Pierwsza liczba występująca w poleceniu jest logicznym numerem pliku. Dzięki temu komputer otworzy kanał dla napędu dyskowego lub magnetofonu. Druga liczba określa numer urządzenia, którego chcesz użyć. Ta liczba to 1 dla magnetofonu lub 8 dla stacji dysków. Trzecia liczba to adres pomocniczy. Jest to specjalna instrukcja informująca komputer o sposobie przechowywania informacji. Na przykład adres pomocniczy 1 dla magnetofonu, informuje komputer, że zapisany plik ma zawierać znacznik końca pliku i ma on zostać umieszczony na końcu taśmy, gdy plik zostanie zamknięty. Nazwa to tytuł, który chcesz nadać danym ekranowym. Ta nazwa musi być unikalna dla każdego zapisanego ekranu. Możesz następnie użyć tej nazwy w poleceniu SCRLD, aby wczytać i wyświetlić zapisane dane. Parametr S wskazuje, że dostęp do pliku jest sekwencyjny. W instruuje komputer, że ten plik ma być zapisany, a nie czytany. Po zapisaniu każdy ekran zajmuje około pięciu bloków. Zwróć uwagę, że parametry są oddzielone przecinkami, a w cudzysłowach umieszczana jest nazwa wraz z parametrami zapisu S i W.
Polecenia SCRSV nie można używać do zapisywania grafiki o wysokiej rozdzielczości lub wielokolorowej.
PRZYKŁAD: Aby narysować trójkolorową francuską flagę i zapisać ją na dyskietce:
NAPISZ: 10 PRINT"<SHIFT CLR/HOME>"
20 FILL 6,10,7,12,160,6
30 FILL 6,17,7,12,160,1
40 FILL 6,24,7,12,160,2
50 SCRSV 2,8,2,"TRICOLOR,S,W"
80 GOTO 80
RUN <RETURN>
REZULTAT: Flaga została narysowana, a następnie zapisana na dyskietce.
SCRLD 2,8,2,"nazwa" lub
SCRLD 1,1,0,"nazwa"
Wczytuje zapisane dane ekranowe.
Polecenie SCRLD umożliwia wczytanie i wyświetlenie ekranu, który został zapisany za pomocą polecenia SCRSV. Pierwsza liczba występująca w poleceniu jest numerem pliku logicznego. To powoduje, że komputer otwiera kanał danych dla stacji dysków lub magnetofonu. Druga liczba określa numer urządzenia, na którym dane zostały zapisane. Ta liczba to 1 dla magnetofonu lub 8 dla dstacji dysków. Trzecia liczba to adres pomocniczy. Jest to specjalna instrukcja informująca komputer, że informacje mają zostać wczytane do tego samego obszaru pamięci, który zajmowały przed zapisaniem. Tytuł przypisany do danych ekranu jest końcowym parametrem i musi być ujęty w cudzysłowy.
PRZYKŁAD: Aby wczytać i wyświetlić dane ekranowe zapisane na dyskietce z programu w poprzednim rozdziale:
NAPISZ: SCRLD 2,8,2,"TRICOLOR" <RETURN>
REZULTAT: Trójkolorowa flaga została wczytana z dyskietki i wyświetlona na ekranie.
SIMONS' BASIC udostępnia dwa polecenia, które umożliwiają użycie drukarki szeregowej do wydrukowania informacji z ekranów normalnego lub graficznego. Polecenia te są niezwykle przydatne w projektowaniu grafiki lub do tworzenia wykresów i histogramów w przedstawianiu danych statystycznych.
COPY
Drukuje ekran graficzny.
COPY wysyła zawartość ekranu graficznego do drukarki szeregowej. Zwróć uwagę, że jeśli użyłeś polecenia CIRCLE, aby narysować idealne kółka na ekranie, to promienie zdefiniowane dla tych okręgów muszą zostać zmienione, aby uzyskać ten sam obraz na drukarce. Aby wydrukować idealne koło, promień x musi być równy promieniowi y. Aby ponownie wyświetlić ekran, z powrotem zmień promień x na oryginalną wartość.
PRZYKŁAD: Aby wyświetlić zniekształcony wykres kołowy na ekranie o wysokiej rozdzielczości, a następnie wydrukować okrągły wykres na drukarce:
NAPISZ: 10 HIRES 0,1:MULTI 5,4,6
20 CIRCLE 80,100,78,78,1
30 ANGL 80,100,120,78,78,1
40 ANGL 80,100,160,78,78,1
50 ANGL 80,100,220,78,78,1
60 ANGL 80,100,330,78,78,1
70 PAINT 90,35,1
80 PAINT 90,120,3
90 PAINT 80,110,2
105 LOW COL 5,4,7
110 PAINT 40,40,3
120 COPY
1000 GOTO 1000
RUN <RETURN>
REZULTAT: Spłaszczony wykres kołowy jest wyświetlany na ekranie, a następnie drukowane jest prawidłowe koło.
HRDCPY
Drukuje zawartość ekranu o niskiej rozdzielczości.
HRDCPY umożliwia wydrukowanie ekranu o niskiej rozdzielczości na drukarce szeregowej. To polecenie jest najbardziej przydatne przy drukowaniu formularzy, faktur itp.
PRZYKŁAD: Aby wyświetlić wiadomość na ekranie, a następnie wydrukować ja na drukarce:
NAPISZ: 10 PRINT"<SHIFT CLR/HOME>"
20 PRINT AT(5,8)"SIMONS' BASIC":PRINT
30 PRINT"THE ULTIMATE IN BASIC AIDS"
40 HRDCPY
50 END
RUN <RETURN>
REZULTAT: Dane są wyświetlane na ekranie, a następnie drukowane na drukarce.
Rozdział 8 zawiera polecenia dotyczące generowania i animacji sprajtów oraz tworzenia grafiki zdefiniowanej przez użytkownika. Podzielono go na dwie części, po jednej dla każdego z tych tematów.
SPRAJT to programowalny obiekt, który można przekształcić w różnorodne kształty. Ten obiekt można przesuwać po ekranie, informując komputer, gdzie powinien on zostać umieszczony. (Bardziej szczegółowy opis można znaleźć w podręczniku COMMODORE 64).
Sprajt w SIMONS' BASIC nazywa się blokiem ruchomego obiektu lub MOB. W tym samym czasie do ośmiu niezależnych MOBów może być wyświetlanych i animowanych na ekranie. Obiekty MOB mogą być wyświetlane na ekranach tekstowych i graficznych. Istnieją dwa typy MOBów - wysokiej rozdzielczości i wielokolorowe. MOB o wysokiej rozdzielczości ma szerokość 24 punktów i głębokość 21 punktów. Każda kropka na tym typie MOBa ma szerokość jednego piksela. Wielokolorowy MOB ma szerokość 12 kropek i głębokość 21 punktów. Tutaj każdy punkt ma szerokość dwóch pikseli. MOBy o wysokiej rozdzielczości można pomalować dowolnym JEDNYM z 16 kolorów. Wielobarwne MOBy można pomalować trzema różnymi kolorami.
W standardowym języku BASIC tworzenie i animowanie sprajtów wymaga wielu poleceń POKE. SIMONS' BASIC zastępuje POKE poleceniami łatwymi w użyciu.
Polecenie DESIGN służy do określenia lokalizacji w pamięci, w której przechowywane są dane dla każdego MOBu. Każdy MOB jest następnie projektowany w formie siatki w twoim programie, aby można było zobaczyć jego kształt przed jego użyciem. MOB można używać na normalnym ekranie lub w połączeniu z grafiką wysokiej rozdzielczości i wielokolorową. Polecenie MOB SET ustawia określony MOB i przypisuje jego podstawowy kolor. CMOB służy do przypisania dwóch dodatkowych kolorów do wykorzystania podczas projektowania wielobarwnego MOB-a. Polecenie MMOB pozwala wyświetlić i/lub przenieść wybranego MOBa do określonej lokalizacji ekranu. RLOCMOB umożliwia przeniesienie wyświetlanego MOB z jednego miejsca na ekranie do drugiego. Polecenia DETECT i CHECK są używane do określenia, czy MOB zderzył się z innym MOBem lub elementem danych ekranowych.
UWAGA:
Polecenia tego rozdziału mogą być używane tylko jako część programu.
Przykłady użyte w tej części dotyczą całego programu wyświetlającego dwa MOBy na ekranie. Dlatego nie używaj polecenia NEW pomiędzy przykładami i nie uruchamiaj programu, dopóki nie otrzymasz takiego polecenia. |
DESIGN c,ad lub
DESIGN c,sa + gc
Przydziela dla MOBa miejsce w pamięci.
Polecenie DESIGN rezerwuje wystarczającą ilość miejsca w pamięci dla tworzonego MOBa. Każdy MOB używa 64 bajtów pamięci. Pierwszy parametr w poleceniu określa, czy MOB jest w trybie wysokiej rozdzielczości czy w trybie wielobarwnym. 1 w tej pozycji oznacza tryb wielokolorowy a 0 tryb w wysokiej rozdzielczości. Parametr ad określa adres początkowy pierwszego bajta danych MOBa. Ta liczba musi być wielokrotnością liczby 64 w zakresie od 2048 do 16319 i może być wprowadzana w postaci dziesiętnej lub szesnastkowej. Liczba szesnastkowa musi być poprzedzona znakiem dolara - $. Jeśli na ekranie graficznym o wysokiej rozdzielczości ma zostać użyty MOB, należy dodać do tej liczby stałą graficzną o wartości dziesiętnej 49152 lub szesnastkowej $C000.
Każdy 64-bajtowy obszar dostępnej pamięci MOBa jest nazywany blokiem. Jeśli podzielisz adres początkowy danych MOB na 64, otrzymasz numer bloku. Ten numer jest używany w poleceniu MOB SET, aby ustawić MOBa.
UWAGA:
Podczas obliczania numeru bloku NIE MOŻNA dodać wartości stałej graficznej do adresu początkowego. |
Obszary dostępne w pamięci dla danych MOB i powiązane z nimi numery bloków są wymienione poniżej:
NUMERY BLOKÓW |
LOKALIZACJA PAMIĘCI |
32 - 63 |
2048 - 4095 |
128 - 255 |
8192 - 16383 |
Jeśli użyłeś polecenia MEM, dla danych MOBa dostępne są tylko bloki od 192 do 255.
UWAGA:
Możesz ustawić tyle MOBów, ile pomieści pamięć, jednak naraz możesz wyświetlać tylko do ośmiu MOBów. Jeśli w trakcie trwania programu chcesz pozbyć się jednego MOBa i utworzyć innego na jego miejscu, zaprojektuj nowego MOBa, używając adresu początkowego zastępowanego MOBa. |
PRZYKŁAD: Aby przydzielić obszar pamięci dla MOBa o wysokiej rozdzielczości na normalnym ekranie:
NAPISZ: 90 DESIGN 0,2048
REZULTAT: Gdy tworzony jest wielokolorowy MOB, jego dane są przechowywane w pamięci od 2048 w bloku 32, tj. 2048 podzielonym na 64.
PRZYKŁAD: Aby przydzielić obszar pamięci dla wielokolorowego obiektu MOB na normalnym ekranie:
NAPISZ: 320 DESIGN 1,2112
REZULTAT: Gdy tworzony jest MOB o wysokiej rozdzielczości, jego dane są przechowywane w pamięci od 2112 w bloku 33, tj. 2112 podzielone na 64.
@............ lub
@........................
Ustawia siatkę projektu dla MOBa.
Polecenie @ pozwala Ci ustawić siatkę dla projektu MOBa. Siatka ma szerokość 24 kropek dla MOB w wysokiej rozdzielczości i 12 punktów dla wielokolorowych MOBów. W obu przypadkach siatka ma 21 linii głębokości.
UWAGA:
Upewnij się, że każdy numer linii dla siatki ma tę samą długość, tj. dwie cyfry lub cztery cyfry. W ten sposób unikniesz wcięcia części siatki, ułatwiając w ten sposób proces projektowania MOBa. |
Jak wyjaśniono w rozdziale 8.2.1, jeden kolor może być użyty dla MOBa w wysokiej rozdzielczości i trzy kolory dla wielokolorowych MOBów. Kolor MOBa w wysokiej rozdzielczości i kolor główny dla wielokolorowego obiektu MOB są zdefiniowane w poleceniu MOB SET. Dwa dodatkowe kolory wielokolorowego MOBa są przypisane za pomocą polecenia CMOB. Kolory dla każdego punktu MOBa są przypisywane za pomocą jednego ze znaków z poniższych tabeli:
MOB W WYSOKIEJ ROZDZIELCZOŚCI
NUMERY BLOKÓW |
UŻYWANY KOLOR |
B |
Kolor przypisany w poleceniu MOB SET. |
MOBY WIELOKOLOROWE
NUMERY BLOKÓW |
UŻYWANY KOLOR |
B |
Kolor 1 polecenia CMOB. |
C |
Kolor przypisany w poleceniu MOB SET. |
D |
Kolor 2 polecenia CMOB. |
Możesz również użyć koloru tła ekranu dla każdego rodzaju MOBa nie nadpisując znaku.
PRZYKŁAD: Aby zaprojektować MOB w wysokiej rozdzielczości:
NAPISZ: 5 PRINT"<SHIFT CLR/HOME"
10 REM"*** EXAMPLE OF MOBS ***"
80 REM"*** DESIGN THE MOBS ***"
90 DESIGN 0,2048
100 @.........BBBBB..........
110 @........BB...BB.........
120 @.......BB.....BB........
130 @........BB...BB.........
140 @.........BBBBB..........
150 @...........B............
160 @....BBBBBBBBBBBBBBBB....
170 @....BBBBBBB.BBBBBBBB....
180 @....BBBBBB..BBBBBBBB....
190 @...BBB..BBB.BBB..BBBB...
200 @...BBB..BBB.BBB..BBBB...
210 @...BBBBBBB...BBBBBBBB...
220 @..BBBBBBBBBBBBBBBBBBBB..
230 @..BBB...B...B..BBB.BBB..
240 @..BBBB.BB.B.B.B.BB.BBB..
250 @.BBBBB.BB.B.B.BB.B.BBBB.
260 @.BBBBB.BB...B.BBB..BBBB.
270 @.BBBBBBBBBBBBBBBBBBBBBB.
280 @.BBBBBBBBBBBBBBBBBBBBBB.
290 @........................
300 @........................
REZULTAT: Kiedy ten fragment programu jest uruchomiony, rysunek z siatki jest przechowywany jako dane MOB w 32-gim bloku pamięci.
PRZYKŁAD: Aby zaprojektować wielokolorowy MOB:
NAPISZ: 320 DESIGN 1,2112
400 @......BB....
410 @.....BCDB...
420 @....BBCCCBBB
430 @...BBCCCB...
440 @.....BCB....
450 @.BB..BCB....
460 @BCCB.BCB....
470 @.BCB.BCB....
480 @..BB.BCB....
490 @...BBCCCB...
500 @..BDCDCDCB..
510 @.BDCDCDCDCB.
520 @.BCDCDCDCCB.
530 @..BCDCDCBB..
540 @...BBBBB....
550 @....B..B....
560 @...B....B...
570 @..B......B..
580 @...B......B.
590 @..BBB....BBB
600 @.....B.....B
REZULTAT: Kiedy ten fragment programu jest uruchomiony, rysunek z siatki jest przechowywany jako dane MOB w 33-cim bloku pamięci.
CMOB c1,c2
Ustawia kolory wielokolorowych MOBów.
Polecenie CMOB pozwala zdefiniować dwa dodatkowe kolory dla wielokolorowego MOBa, tj. kolory tych punktów dla MOBa oznaczonych literami B i D w siatce (zobacz poprzedni rozdział).
PRZYKŁAD: Kontynuując powyższy program, przypisz kolory czarny i zielony do wielokolorowego MOBa:
NAPISZ: 610 CMOB 0,5
REZULTAT: Gdy wyświetlany jest wielokolorowy MOB, wszystkie punkty narysowane za pomocą B są czarne, a wszystkie narysowane za pomocą D są zielone.
MOB SET mb,blk,col,pr,res
Polecenie MOB SET, jak sama nazwa wskazuje, inicjuje MOBa. Parametr mb określa numer konfigurowanego MOBa. Ta liczba musi być unikalna dla każdego MOBa. Im niższy numer MOBa, tym wyższy jego priorytet względem innych MOBów, tj. jeśli dwa lub więcej MOBów przemieszczają się po ekranie, MOB o niższej liczbie jest przed MOBem z wyższą liczbą.
Drugi parametr polecenia blk, definiuje blok pamięci, z którego będą pobierane dane MOBa (zobacz rozdział 8.2.2). Następny parametr col, definiuje główny kolor MOBa, tj. kolor przypisany do każdego punktu dla MOBa narysowanego za pomocą B w trybie wysokiej rozdzielczości lub C w trybie wielokolorowym.
Parametr pr określa priorytet MOBa na ekranie, tzn. czy MOB ma być przed czy za znakami na ekranie. 0 w tej pozycji daje priorytet wyświetlania przed znakami, 1 daje efekt przeciwny. Ostatni parametr polecenia - res wskazuje, czy MOB został utworzony w trybie wielokolorowym, czy w trybie wysokiej rozdzielczości. 1 w tej pozycji oznacza tryb wielokolorowy a 0 określa wysoką rozdzielczość.
PRZYKŁAD: Aby ustawić MOBa w wysokiej rozdzielczości w programie z poprzedniego rozdziału:
NAPISZ: 700 MOB SET 0,32,0,1,0
REZULTAT: Gdy wykonywany jest ten fragment programu, inicjowany jest MOB o numerze 0 w wysokiej rozdzielczości i w 32-gim bloku pamięci. Gdy jest on wyświetlany jest w czarnym kolorze i znajduje się przed danymi ekranowymi.
PRZYKŁAD: Aby ustawić wielokolorowego MOBa w programie z poprzedniego rozdziału.
NAPISZ: 710 MOB SET 1,33,2,0,1
REZULTAT: Gdy wykonywana jest ta część programu, inicjowany się wielokolorowy MOB oznaczony numerem 1 w 33-cim bloku pamięci. Kiedy jest on wyświetlany jego główny kolor jest czerwony i znajduje się on przed danymi ekranowymi.
MMOB mn,x1,y1,x2,y2,rozciągnięcie,szybkość
Wyświetla i/lub przemieszcza MOB.
Polecenie MMOB pozwala wyświetlić MOBa w określonym miejscu na ekranie, a następnie, jeśli chcesz, przenieść go w inne miejsce. Pierwszy parametr mn, określa numer MOBa, który chcesz wyświetlić i przenieść. Parametry x1 i y1 są współrzędnymi punktu na ekranie, w którym MOB zostanie wyświetlony, zanim zostanie przeniesiony. Parametry x2 i y2 wskazują punkt docelowy po przeniesieniu. Jeśli nie chcesz przenieść MOBa, a jedynie go wyświetlić, po prostu użyj tych samych współrzędnych dla lokalizacji początkowej i końcowej.
Rozciągnięcie odnosi się do rozmiaru MOBa. Numery rozciągnięcia i wynikające z tego rozmiary wyświetlania są przedstawione w poniższej tabeli:
ROZCIAGNIECIE |
EFEKT |
0 |
MOB jest wyświetlany w normalnym rozmiarze. |
1 |
MOB jest rozciągnięty w poziomie, tzn. wyświetlany z podwójną szerokością. |
2 |
MOB jest rozciągnięty w pionie, tzn. wyświetlany z podwójną wysokością. |
3 |
MOB jest rozciągnięty w obydwóch osiach, tj. wyświetlany z podwójną szerokością i wysokością. |
Prędkość określa szybkość, z jaką przemieści się MOB. Liczba ta musi zawierać się w przedziale od 1 do 255: 1 oznacza najwyższą prędkość, 255 najwolniejszą.
PRZYKŁAD: Aby przenieść MOBy w powyższym programie:
NAPISZ: 800 MMOB 1,0,0,200,200,2,20
810 MMOB 0,0,0,185,70,3,20
REZULTAT: Kiedy ta część programu zostanie uruchomiona, MOB w wysokiej rozdzielczości zostanie rozciągnięty w pionie i wyświetlony w górnej części ekranu. Wielokolorowy MOB pojawia się u dołu ekranu i w podwójnym rozmiarze.
RLOCMOB mn,x,y,rozciągnięcie,szybkość
Przenosi MOBa między dwiema lokalizacjami ekranu.
RLOCMOB umożliwia przeniesienie wyświetlanego MOBa do innej lokalizacji na ekranie. Parametry x i y są współrzędnymi ekranu punktu, do którego zostanie przeniesiony MOB. Pozostałe parametry są takie same, jak te używane w poleceniu MMOB.
PRZYKŁAD: Aby przenieść oba obiekty MOB w powyższym programie:
NAPISZ: 820 FOR I = 1 TO 20:X = 150 * INT(RND(1)) + 50
830 RLOCMOB 1,X,200,2,10
840 RLOCMOB 0,X-15,70,3,10
850 NEXT
REZULTAT: Kiedy ta część programu zostanie uruchomiona, dwa MOBy będą się ścigać po ekranie.
DETECT n
Inicjuje wykrywanie kolizji MOBów.
Polecenie DETECT włącza wykrywanie kolizji MOBów. Wartość 0 przypisana do n powoduje, że komputer wykryje kolizję między jednym MOBem a innym. Jeśli jako parametr polecenia zostanie użyte 1, inicjowane jest wykrywanie kolizji między obiektami MOB i danymi ekranowymi.
UWAGA:
Polecenie DETECT musi być zawsze używane dwa razy. Polecenie jest używane najpierw do wyczyszczenia obszaru w pamięci komputera, który wskazuje, czy doszło do kolizji. (Obszar ten nazywany jest rejestrem kolizji sprajtów.) Przy drugim użyciu polecenia inicjowane jest wykrywanie kolizji. |
PRZYKŁAD: Aby wyczyścić rejestr kolizji sprajtów w powyższym programie:
NAPISZ: 825 DETECT 0
IF CHECK (mn1,mn2) = 0 THEN akcja lub
IF CHECK (0) = 0 THEN akcja
Sprawdza kolizję MOBów.
Polecenie CHECK służy do testowania kolizji między MOBami lub pomiędzy MOBem a danymi ekranowymi. MOBy, na których chcesz testować kolizję, są wskazane w nawiasie po poleceniu.
Parametr 0 w nawiasie powoduje, że komputer sprawdza kolizję pomiędzy dowolnymi sprajtami a danymi ekranowymi. Jeśli wystąpiła kolizja, podejmowane jest określone działanie.
PRZYKŁAD: Aby przenieść MOB w wysokiej rozdzielczości w dół ekranu i sprawdzić kolizję między nim a MOBem wielokol orowym:
NAPISZ: 858 FOR P = 70 TO 200
859 DETECT 0: IF CHECK(0,1) = 0 THEN 865
860 RLOCMOB 0,X - 15,P,3,10: NEXT
REZULTAT: Po uruchomieniu tego fragmentu programu akcja określona w linii 865 jest wykonywana, gdy jeden MOB dotyka drugiego MOBa.
MOB OFF mn
Usuwa MOB z ekranu.
Polecenie MOB OFF powoduje usunięcie MOBa z ekranu. Parametr mn określa numer MOBa, który chcesz usunąć.
PRZYKŁAD: Aby ukończyć powyższy program:
NAPISZ: 855 PRINT AT(X/8 + 2,20)"OH SH..."
856 PAUSE 1
865 PRINT AT(X/8 + 2,20)"OH SHUCKS!!"
870 PAUSE 1
875 MOB OFF 1:RLOCMOB 0,X-15,196,3,10
RUN <RETURN>
WYKONAJ: Obserwuj Birdie!!
REZULTAT: Biegacz zostaje zmiażdżony przez ciężar. (Przeprosiny dla wszystkich miłośników ptaków.)
SIMONS' BASIC zapewnia funkcję umożliwiającą zastąpienie istniejących znaków znakami zdefiniowanymi przez użytkownika.
Zestaw znaków COMMODORE 64 przechowywany jest w pamięci ROM, tzn. w pamięci tylko do odczytu. W celu ponownego zdefiniowania tych znaków, zestaw znaków musi zostać przeniesiony do pamięci RAM, tj. pamięci do odczytu i zapisu. Polecenie MEM wykonuje tę funkcję. Polecenie DESIGN pozwala określić znak, którą chcesz ponownie zdefiniować określając kod poke. (Pełna lista kodów poke znajduje się w podręczniku COMMODORE 64). Każdy znak jest zaprojektowany w siatce. Pozwala to na zobaczenie go podczas jego tworzenia.
UWAGA:
Znaków zdefiniowanych przez użytkownika NIE MOŻNA używać na ekranie graficznym. |
MEM
Kopiuje znaki z pamięci ROM do pamięci RAM.
Polecenie MEM kopiuje zestaw znaków z pamięci ROM do pamięci RAM pod Kernalem. Ekran zostanie przeniesiony do lokalizacji $CC00, a dane o SPRAJTACH mogą być wstawiane tylko od lokalizacji $F000, tj. od 192-giego bloku (zobacz rozdział 8.2.2). Aby powrócić do oryginalnego zestawu znaków COMMODORE 64, przytrzymaj klawisz RUN/STOP i naciśnij klawisz [restore].
Poniższa tabela pokazuje konfigurację pamięci COMMODORE 64 przed i po użyciu polecenia MEM.
OBSZAR PAMIĘCI |
PRZED |
PO |
$E000 - $FFFF |
KERNAL ROM/EKRAN W WYSOKIEJ ROZDZIELCZOŚCI |
KERNAL ROM/EKRAN W WYSOKIEJ ROZDZIELCZOŚCI/DANE SPRAJTÓW |
$D000 - $DFFF |
OBRAZ/DŹWIĘK/UKŁADY WEJŚCIA I WYJŚCIA/1K KOLORÓW RAMU |
OBRAZ/DŹWIĘK/UKŁADY WEJŚCIA I WYJŚCIA/1K KOLORÓW RAMU |
$C000 - $CFFF |
ZAPASOWY BUFOR RAM |
EKRAN TEKSTOWY/ZAPASOWY RAM $A000 |
$A000 - $BFFF |
BASIC ROM |
BASIC ROM |
$8000 - $9FFF |
OBSZAR CARTRIDGE |
OBSZAR CARTRIDGE |
$0800 - $7FFF |
OBSZAR NA PROGRAM UŻYTKOWNIKA |
OBSZAR NA PROGRAM UŻYTKOWNIKA |
$0400 - $07FF |
EKRAN TEKSTOWY/WSKAŹNIKI SPRAJTÓW |
WSKAŹNIKI SPRAJTÓW |
$0200 - $03FF |
WEKTORY/BUFOR MAGNETOFONU ITD. |
WEKTORY/BUFOR MAGNETOFONU ITD. |
$0100 - $01FF |
STOS |
STOS |
$0000 - $00FF |
STRONA ZEROWA |
STRONA ZEROWA |
UWAGA:
Jeśli program zawiera polecenie MEM, nie można użyć polecenia TRACE. |
PRZYKŁAD: Aby skopiować znaki z pamięci ROM do pamięci RAM:
NAPISZ: 10 MEM
REZULTAT: Po uruchomieniu tej części programu zestaw znaków COMMODORE 64 zostaje skopiowany do pamięci RAM w ramach przygotowań do ponownego zdefiniowania znaków.
DESIGN 2,$E000 + ch * 8
Określia znak, którym zostanie zastąpiony znak graficzny zdefiniowany przez użytkownika.
Polecenie DESIGN pozwala Ci zdefiniować znak, który ma być zastąpiony znakiem zdefiniowanym przez użytkownika.
UWAGA:
Istnieje również polecenie DESIGN powiązane z grafiką sprajtów przy użyciu innego formatu. |
Znaki zdefiniowane przez użytkownika mogą być używane tylko na ekranie o niskiej rozdzielczości. Cyfra 2 następująca po poleceniu DESIGN informuje komputer o danych zdefiniowanych przez użytkownika. Każdy nowy znak zajmuje 8 bajtów pamięci. Liczba szesnastkowa $E000 to adres początkowy danych znaku. Parametr ch jest kodem poke istniejącego znaku, który chcesz zmienić. (Listę kodów poke można znaleźć w podręczniku COMMODORE 64). Nowy znak jest zaprojektowany na siatce 8 * 8. Znak wyświetlany jest za każdym razem, gdy używasz klawisza, przypisanego pod ten znak.
PRZYKŁAD: Aby ponownie zdefiniować znak Z:
NAPISZ: 20 DESIGN 2,$E000 + 26 * 8
REZULTAT: Po utworzeniu znaku graficznego jest on wyświetlany za każdym razem, gdy używana jest litera Z.
@........
Polecenie @ umożliwia utworzenie siatki dla projektu znaku graficznego zdefiniowanego przez użytkownika. Siatka ma 8 kropek szerokości i 8 linii głębokości. Nowy znak jest zaprojektowany przez umieszczenie litery B w odpowiedniej kropce siatki.
UWAGA:
Upewnij się, że każdy numer linii dla siatki ma tę samą długość, tj. dwie cyfry, trzy cyfry lub cztery cyfry. W ten sposób unikniesz wcięcia części siatki i ułatwisz sobie proces projektowania znaku. |
PRZYKŁAD: Aby zaprojektować znak kapelusza:
NAPISZ: 20 DESIGN 2,$E000 + 26 * 8
30 @........
40 @........
50 @..BBBB..
60 @..BBBB..
70 @..BBBB..
80 @BBBBBBBB
90 @BBBBBBBB
100 @........
RUN <RETURN>
WIDZISZ: READY
WYKONAJ: Naciśnij kilka razy klawisz Z.
REZULTAT: Wyświetlany jest znak kapelusza.
Aby powrócić do oryginalnego zestawu znaków COMMODORE 64, przytrzymaj klawisz [runstop] i naciśnij klawisz [restore].
Jednym z głównych problemów podczas programowania w standardowym języku BASIC jest brak strukturalnego dostępu do bardziej nieodłącznych programów. Korzystanie z GOTO i GOSUB sprawia, że wszystkie najprostsze programy stają się niezrozumiałe - nawet dla autora programu! Ta nieczytelność może być częściowo ułatwiona za pomocą wielu instrukcji REM, aby wyjaśnić, co robi każda procedura. Jest to nie tylko czasochłonne, ale również zużywa dużo miejsca w pamięci.
SIMONS' BASIC usuwa te problemy za pomocą specjalnych strukturalnych poleceń programowania. Polecenia te w dużym stopniu eliminują potrzebę stosowania w programie instrukcji GOTO i GOSUB. Na przykład polecenie PROC służy do oznaczania każdej używanej procedury programu. (Ta funkcja jest równoznaczna z procedurami nazwanymi w języku COBOL.) Te procedury są wykonywane przy użyciu poleceń CALL lub EXEC.
Została również zmieniona struktura pętli FOR ... NEXT. Polecenie REPEAT ... UNTIL pozwala na wykonanie procedury określoną liczbę razy. LOOP ... EXIT IF ... END LOOP zapewnia wielokrotne testowanie warunków w pętli. Normalny test warunkowy IF...THEN obejmuje teraz ELSE, aby umożliwić użytkownikowi uproszczenie specyfikacji (w tej samej linii programu) procedur, które mają zostać wykonane, jeśli wyrażenie pasuje lub nie pasuje do uprzednio zdefiniowanego warunku. Polecenie RCOMP pozwala na użycie poprzedniego testu IF ... THEN ... ELSE bez konieczności ponownego wprowadzania kodu.
UWAGA:
Polecenia w tym rozdziale mogą być używane tylko jako część programu. |
IF warunek THEN prawda:ELSE:fałsz
Testuje warunek i wykonuje pierwszą instrukcję, jeśli warunek jest prawdziwy lub drugą instrukcję, jeśli warunek jest fałszywy.
Polecenie IF ... THEN ... ELSE działa w podobny sposób do standardowego testu IF...THEN. Istotną różnicą jest to, że skok do określonych fragmentów kodu można utworzyć dla wyników zarówno prawdziwych jak i fałszywych (w tej samej linii programu).
UWAGA:
ELSE zawsze musi być oddzielone od poprzedzającego i następującego kodu dwukropkiem (:). |
PRZYKŁAD: Aby sprawdzić odpowiedź na pytanie:
NAPISZ: 10 PRINT"DO YOU OWN A COMMODORE COMPUTER?"
20 PRINT "PLEASE ANSWER YES OR NO (Y/N)"
30 FETCH "<CLR HOME>",1,A$
40 IF A$ = "Y" THEN 60
50 IF A$ = "N" THEN 70:ELSE:GOTO 30
60 PRINT "CONGRATULATIONS":END
70 PRINT "COMMISERATIONS":END
RUN <RETURN>
WYKONAJ: Po wyświetleniu monitu naciśnij klawisz Y lub N, a następnie klawisz RETURN.
REZULTAT: Odpowiedni komunikat jest wyświetlany w zależności od tego, czy naciśnięto klawisz Y lub N. Naciśnięcie innego klawisza nic nie powoduje.
REPEAT pętla UNTIL dopóki warunek nie jest spełniony
Wykonuje pętlę programu, dopóki nie zostanie spełniony określony warunek.
REPEAT...UNTIL wykonuje tę samą funkcję, co pętla FOR ... NEXT w standardowym języku BASIC, z tą różnicą, że zamiast określać, ile razy kod ma zostać wykonany na początku pętli, ta liczba jest określana przez warunek na końcu kodu. REPEAT uruchamia pętlę; UNTIL testuje warunek, np. X> 10, a gdy jest prawdziwy, powoduje, że program opuszcza pętlę. Pętla jest wykonywana ponownie dopóki warunek nie zostanie spełniony.
OSTRZEŻENIE:
Nie możesz mieć więcej niż dziewięciu zagnieżdżonych pętli. Jeśli przekroczysz tę wartość, wyświetli się komunikat błędu
? STACK TOO LARGE. |
PRZYKŁAD: Aby wyświetlić litery alfabetu od A do G:
NAPISZ: 10 A = 65
20 REPEAT:PRINT CHR$(A):A = A + 1:UNTIL A>70
30 PRINT "DONE!"
RUN <RETURN>
WIDZISZ: A
B
C
D
E
F
G
DONE!
RCOMP:prawda:ELSE:fałsz
Wykonuje ponowny test ostatniego warunku IF ... THEN ... ELSE.
RCOMP powtarza wykonanie ostatnio zdefiniowanego warunku IF ... THEN ... ELSE w programie. Eliminuje to konieczność ponownego wprowadzania tego samego kodu.
PRZYKŁAD: Aby trzykrotnie powtórzyć ten sam test warunków:
NAPISZ: 10 INPUT A
20 IF A = 10 THEN PRINT "HELLO ";:ELSE: PRINT "BYE ";
30 RCOMP:PRINT "MIKE ";:ELSE:PRINT "STRANGER ";
40 RCOMP:PRINT "WELOCME":ELSE:PRINT "SEE YOU AGAIN I HOPE"
50 GOTO 10
RUN <RETURN>
WIDZISZ: ?
NAPISZ: 10 <RETURN>
WIDZISZ: HELLO MIKE WELCOME
NAPISZ: 5 <RETURN>
WIDZISZ: BYE STRANGER SEE YOU AGAIN I HOPE
REZULTAT: Gdy napisana jest liczba, to jest ona trzykrotnie testowana, wyświetlając odpowiedni komunikat do wprowadzonej wartości.
LOOP program w pętli EXIT IF jeśli warunek jest spełniony END LOOP
Wykonuje program w pętli, dopóki nie zostanie spełniony określony warunek.
LOOP...EXIT IF...END LOOP wykonuje pętlę programu w sposób podobny do polecenia REPEAT...UNTIL z jedną ważną różnicą. REPEAT...UNTIL pozwala tylko na testowanie warunków na końcu pętli. LOOP...EXIT IF...END LOOP pozwala na wykonanie dowolnej liczby testów warunków w pętli. Jeśli warunek jest spełniony, program przechodzi do instrukcji następującej po END LOOP. Jeśli warunek nie jest spełniony, pętla programowa jest wykonywana ponownie.
OSTRZEŻENIE:
Nie możesz mieć więcej niż pięciu zagnieżdżonych pętli. Jeśli przekroczysz tę wartość, wyświetli się komunikat błędu
? STACK TOO LARGE. |
PRZYKŁAD; Aby wprowadzić z klawiatury literę od A do F:
NAPISZ: 10 PRINT"ENTER A LETTER BETWEEN A AND F"
20 LOOP
30 GET A$:IF A$ = "" THEN 30
40 EXIT IF ASC(A$)<65
50 EXIT IF ASC(A$)>70
60 PRINT A$;
65 END LOOP
70 PRINT CHR$(13)"NOT IN RANGE":END
RUN <RETURN>
C <RETURN>
WIDZISZ: C
NAPISZ: B <RETURN>
WIDZISZ: CB
NAPISZ: S <RETURN>
WIDZISZ: NOT IN RANGE
REZULTAT: Nastąpi skanowanie klawiatury, a wszystkie litery z określonego zakresu zostaną wyświetlone na ekranie. Litera spoza zakresu spowoduje opuszczenie pętli.
Aby ułatwić pisanie bardziej uporządkowanego kodu, SIMONS' BASIC posiada cztery polecenia, które umożliwiają oznaczanie podstawowych procedur programu, a następnie wywoływanie tych procedur według nazw, gdy są one wymagane. W dużym stopniu eliminuje to konieczność korzystania z GOTO i GOSUB w programach. Są one nazywane procedurami. Każda procedura używana często w różnych programach może być przechowywana w bibliotece, a następnie ładowana w razie potrzeby. Polecenie PROC służy do przypisania nazw procedurom. Są one następnie wykonywane za pomocą polecenia CALL lub za pomocą polecenia EXEC. Polecenie CALL działa tak samo, jak standardowe polecenie GOTO, tzn. program przeskakuje na początek procedury i kontynuuje wykonywanie programu od tego miejsca. Polecenie EXEC działa jak GOSUB, tj. program przechodzi do procedury o wskazanej nazwie, a następnie, gdy procedura zostanie zakończona powraca do wiersza programu następującego po poleceniu EXEC. Dokończenie polecenia EXEC wymaga dodanie w ostatniej linii polecenia END PROC, które działa w taki sam sposób jak instrukcja RETURN.
Przykłady zastosowane w tej części dotyczą całego programu. Dlatego nie używaj polecenia NEW między przykładami i nie uruchamiaj programu, dopóki nie zostaniesz o to poproszony.
OSTRZEŻENIE:
Nie możesz mieć więcej niż pięciu zagnieżdżonych procedur. Jeśli przekroczysz tę wartość, wyświetli się komunikat błędu
? Stack too large |
PROC nazwa
Nadaje nazwę procedurze.
PROC umożliwia nadanie nazw procedurom a następnie, gdy są one wymagane wywoływanie tych procedur po ich nazwie. Wszystkie znaki w wierszu następującym po poleceniu PROC są traktowane jako nazwa procedury. Dlatego PROC i nazwa procedury nie mogą zawierać żadnego innego kodu w tej samej linii programu.
PRZYKŁAD: Aby przypisać etykietę INPUT NAME do procedury programu:
NAPISZ: 100 PROC INPUT NAME
REZULTAT: Po uruchomieniu programu kod następujący po tej linii tworzy procedurę o nazwie INPUT NAME.
END PROC
Wskazuje koniec procedury.
END PROC wskazuje koniec zamkniętej procedury, tzn. jednej wywoływanej przez polecenie EXEC. Polecenie działa tak samo jak RETURN w standardowym języku BASIC, tj. po zakończeniu procedury program powraca do następnej linii programu po której wywołano procedurę.
PRZYKŁAD: Aby przy gotować procedurę wprowadzania nazwy użytkownika do zmiennej:
NAPISZ: 100 PROC INPUT NAME
110 PRINT "WHAT IS YOUR NAME"
120 FETCH "<CLR/HOME>",15,A$
130 END PROC
REZULTAT: Po uruchomieniu programu procedurę INPUT NAME można wywołać za pomocą polecenia EXEC.
CALL nazwa procedury
Przenosi wykonanie programu do określonej linii kodu.
Polecenie CALL działa w taki sam sposób, jak GOTO w standardowym języku BASIC, z tym wyjątkiem, że zamiast numeru linii używana jest nazwa procedury. Wszystko, co następuje po CALL na tej samej linii programu, jest uznawane za nazwę wywoływanej procedury. Dlatego po CALL i nazwie procedury nie może być żaden inny kod w tej samej linii programu. Wywoływana procedura musi być otwarta, tj. taka, która nie zawiera END PROC.
PRZYKŁAD: Początek programu sortującego:
NAPISZ: 10 PRINT"<SHIFT CLR/HOME>"
20 PRINT"HOW MANY NAMES DO YOU WISH TO SORT?"
30 PRINT"NO MORE THAN 15 NAMES"
32 PRINT"AND NO LONGER THAN TEN CHARACTERS"
34 PRINT"FOR EACH NAME"
40 FETCH" <CRSR DOWN>",2,X
45 IF X > 10 AND X < 16 THEN DIM A$(X)
50 IF X > 0 AND X < 16 THEN CALL ENTER NAMES
55 GOTO 10
60 PROC ENTER NAMES
70 FOR I = 1 TO X
80 FETCH"<CLR/HOME>",10,A$(I):PRINT TAB(20)"OK"
90 NEXT
REZULTAT: Jeśli liczba wprowadzonych nazw jest mniejsza niż 16, program jest kontynuowany od procedury ENTER NAMES w linii 60.
EXEC nazwa procedury
Wywołuje procedurę programu i gdy procedura zostanie zakończona powraca do następnej linii po jej wywołaniu.
EXEC pełni tę samą funkcję co GOSUB w standardowym języku BASIC, tzn. program przeskakuje do określonej części programu, wykonuje kod, a następnie gdy zostanie osiągnięte END PROC program wraca do następnej linii po EXEC. Wszystko, co następuje po EXEC w tej samej linii programu, jest traktowane jako nazwa procedury, która jest wywoływana. Dlatego po EXEC i nazwie procedury nie może być żaden inny kod w tej samej linii programu.
PRZYKŁAD: Aby ukończyć program sortujący z poprzedniego rozdziału.
NAPISZ: 100 EXEC SORT
110 PRINT"<SHIFT CLR/HOME CRSR/DOWN>"
120 FOR I = 1 TO X:PRINT TAB(20)A$(I):NEXT
130 END
140 :
150 :
1000 PROC SORT
1020 M = 1
1030 REPEAT
1040 T = 0:FOR I = 1 TO M ;poprawiono
1050 IF A$(I) < A$(I + 1) THEN 1070
1060 W$ = A$(I):A$(I) = A$(I + 1):A$(I + 1) = W$:T = 1
1070 NEXT I
1071 IF T = 1 THEN 1040 ;dodano
1080 M = M + 1
1090 UNTIL M = X ;poprawiono
1110 END PROC
RUN <RETURN>
WYKONAJ: Po wyświetleniu monitu wprowadź maksymalnie 15 nazw, naciskając klawisz RETURN między nazwami.
REZULTAT: Nazwy są sortowane, a następnie wyświetlane.
Użycie zmiennych w standardowym języku BASIC może stać się mylące, gdy do różnych celów jest wymaganych wiele zmiennych. SIMONS' BASIC rozwiązuje ten problem, umożliwiając użycie tej samej zmiennej na dwa sposoby - lokalnie w ramach określonej procedury programowej lub globalnie w całym programie. Zmniejsza to liczbę potrzebnych zmiennych, a tym samym zwalnia więcej miejsca w pamięci, dzięki czemu można pisać i uruchamiać dłuższe programy.
Wartość każdej zmiennej w programie zmienia się w zależności od tego, kiedy i gdzie jej użyto. Polecenie LOCAL pozwala na zachowanie wartości aktualnie przechowywanych przez zmienne, wyczyszczenie ich i użycie tych samych nazw zmiennych w obrębie określonej części kodu. Polecenie GLOBAL przywraca wartości zawarte w zmiennych przed wykonaniem polecenia LOCAL.
LOCAL zmienna1, zmienna2, zmienna3......
Przypisuje zmienne do określonej procedury programu.
Polecenie LOCAL pozwala tymczasowo usunąć wartości wcześniej zdefiniowanych zmiennych, a następnie używać tych zmiennych lokalnie w ramach określonej procedury programu. Polecenie GLOBAL przywraca pierwotne wartości zmiennym.
OSTRZEŻENIE:
Zdefiniowane zmienne za pomocą polecenia LOCAL muszą być wcześniej zadeklarowane. Nieprzestrzeganie tego ostrzeżenia spowoduje, że program zawiesi się, tzn. nie będzie dalej wykonywany. Następnie aby przerwać działanie programu należy nacisnąć klawisze RUN/STOP + RESTORE. |
PRZYKŁAD: Aby przypisać zmienne lokalnie:
NAPISZ: 10 REM"*** EXAMPLE OF LOCAL ***
20 PRINT"<SHIFT CLR/HOME>"
30 A$ = "INITIAL VALUE":A% = 123:A = 456.7
40 LOCAL A$,A%,A
50 A$ = "NEW VALUE ":A% = 789:A = 321.4
60 PRINT A$,A%,A
RUN <RETURN>
WIDZISZ: NEW VALUE 789 321.4
REZULTAT: Pierwotne wartości przypisane do zmiennych są przechowywane. Nowe wartości są następnie przypisywane do zmiennych i te wartości są wyświetlone.
GLOBAL
Przywraca oryginalne wartości dla zmiennych lokalnych.
Polecenie GLOBAL powoduje, że wszystkie zmienne, które były używane lokalnie w ramach procedury programu, są usuwane. Wartości użyte przed poleceniem LOCAL zostaną ponownie przydzielone.
PRZYKŁAD: K orzystając z programu z poprzedniego rozdziału, przywrócmy war tości globalne do zmiennych lokalnych:
NAPISZ: 10 REM"*** EXAMPLE OF LOCAL/GLOBAL ***
20 PRINT"<SH IFT CLR/HOME>"
30 A$ = "INITIAL VALUE":A% = 123:A = 456.7
40 LOCAL A$,A%,A
50 A$ = "NEW VALUE ":A% = 789:A = 321.4
60 PRINT A$,A%,A
70 GLOBAL
80 PRINT A$,A%,A
RUN < RETURN>
WIDZISZ: NEW VALUE 789 321.4
INITIAL VALUE 123 456.7
REZULTAT: Zostały przywrócone war tości przypisane zmiennym przed użyciem polecenia LOCAL.
SIMONS' BASIC posiada polecenia do wykrywania błędów programu, aby uniemożliwić jego awarię. Polecenie ON ERROR w sytuacji wystąpienia błędu pozwala na przeskok do określonego miejsca w programie. Zmienna ERRLN zawiera numer linii programu, w której wystąpił błąd, a zmienna ERRN zawiera numer błędu. Testując wartość przechowywaną w ERRN, możesz podjąć odpowiednie działania, w tym, jeśli chcesz, wygenerować i wyświetlić własny komunikat o błędzie. OUT wyłącza ostatnio używane polecenie ON ERROR. Polecenie NO ERROR powoduje powrót do normalnych procedur obsługi błędów COMMODORE 64.
ON ERROR: GOTO numer linii
Wykrywa błędy programu.
Polecenie ON ERROR pozwala wykryć błędy programu aby zapobiec jego awarii. Po znalezieniu błędu program przeskakuje do linii określonej za pomocą GOTO. Numer błędu jest przechowywany w zmiennej ERRN. Numer linii, w której wystąpił błąd, jest przechowywany w zmiennej ERRLN. Testując wartość przechowywaną w ERRN, możesz sprawdzić, który błąd wystąpił, a następnie podjąć niezbędne działania, w tym, jeśli chcesz, wyświetlić komunikat o błędzie.
UWAGA:
Po przetestowaniu pod kątem określonego błędu i podjęciu odpowiednich działań, należy zawsze użyć polecenia OUT przed kontynuowaniem wykonywania programu. To polecenie należy również zastosować, jeśli zatrzymałeś program zawierający polecenie ON ERROR i chcesz edytować część kodu. |
Poniżej znajduje się lista błędów, które mogą zostać wykryte wraz z ich numerami:
NUMER BŁĘDU |
KOMUNIKAT |
1 |
Zbyt wiele plików |
2 |
Plik jest otwarty |
3 |
Plik nie jest otwarty |
4 |
Nie znaleziono pliku |
5 |
Brak urządzenia |
10 |
NEXT bez FOR |
11 |
Błąd składni |
12 |
RETURN bez GOSUB |
13 |
Brak danych |
14 |
Niedozwolona ilość |
15 |
Przepełnienie |
16 |
Brak pamięci |
17 |
Niezdefiniowane wyrażenie |
18 |
Indeks poza zdefiniowanym zakresem |
19 |
Powtórnie zdefiniowana tablica |
20 |
Dzielenie przez zero |
21 |
Niewłaściwe polecenie |
22 |
Niezgodność typu |
23 |
Łańcuch za długi |
Przepisz dokładnie to co znajduje się na poniższych przykładach. Występujące w nich błędy zostały zrobione celowo w celu zademonstrowania użycia wykrywania błędów.
PRZYKŁAD: Aby wykryć błąd składni - SYNTAX i wyświetlić komunikat o błędzie zdefiniowany przez użytkownika:
NAPISZ: 5 REM"*** EXAMPLE OF ERROR HANDLING ***
10 ON ERROR: GOTO 100
15 PRIN"<SHIFT CLR/HOME>"
20 READ B
25 PRINT B: GOTO 20
30 DATA 1,2,3,4,5
100 IF ERRN = 11 THEN PRINT"SPELLING MISTAKE IN LINE";ERRLN
RUN <RETURN>
WIDZISZ: SPELLING MISTAKE IN LINE 15
REZULTAT: Ponieważ pisownia słowa kluczowego [print] jest niepoprawna, program przeskoczył do procedury obsługi błędów w linii 100. Tam jest wyszukiwany błąd SYNTAX, tj. numer błędu 11. Ponieważ wystąpił ten błąd, została wyświetlana wiadomość zdefiniowana przez użytkownika.
WYKONAJ: Naciśnij klawisz [runstop].
WIDZISZ: READY
PRZYKŁAD: Aby wykryć błąd OUT OF DATA:
NAPISZ: OUT <RETURN>
Wykonaj: Popraw błąd pisowni w linii 15 powyższego przykładu programu, a następnie wprowadź następującą linię:
110 IF ERRN = 13 THEN PRINT"NOT ENOUGH INFORMATION IN LINE";ERRLN
NAPISZ: RUN <RETURN>
WIDZISZ: 1
2
3
4
5
NOT ENOUGH INFORMATION IN LINE 20
REZULTAT: Ponieważ istnieje tylko pięć pozycji danych, gdy nastepuje próba odczytania szóstej pozycji program przeskakuje do procedury wykrywania błędów w linii 100. Test linii 110 dla błędu 13, tj. OUT OF DATA, ponieważ wystąpił ten błąd, zostaje wyświetlony zdefiniowany komunikat o błędzie.
OUT
Wyłącza ostatnie polecenie ON ERROR.
OUT wyłącza ostatnio używane polecenie ON ERROR. Polecenie to musi być zawsze używane, jeśli chcesz powrócić do procedury obsługi błędów COMMODORE 64, gdy jakiś błąd został wykryty przez polecenie ON ERROR.
NO ERROR
Włącza procedury obsługi błędów COMMODORE 64.
Polecenie NO ERROR powoduje wyłączenie WSZYSTKICH poleceń SIMONS' BASIC do wykrywania błędów i przywrócenie kontroli dla procedur obsługi błędów przez COMMODORE 64.
PRZYKŁAD: K orzystając z przykładu programu z rozdziału 10.2, wyłącz polecenie ON ERROR:
WYKONAJ: Wprowadź następującee zmienione linie programu:
19 J = J + 1: IF J = 6 THEN NO ERROR
20 READ B
25 PRINT B: GOTO 19
RUN < RETURN>
WIDZISZ: 1
2
3
4
5
? OUT OF DATA ERR OR
REZULTAT: Ponieważ istnieje tylko pięć elementów danych, program ulega awarii po próbie odczytania numeru na pozycji 6. Zostanie wyświetlony komunikat COMMOD ORE 64, który ma zas tosowanie do tego typu błędu.
PRZYKŁAD: K orzystając z programu z rozdziału 10.2, przywróć kontrolę błędów dla COMMOD ORE 64:
WYKONAJ: Wprowadź następujące zmienione linie programu:
10 ON ERROR: GOTO 99
15 PRIN"<SH IFT CLR/HOME>"
99 NO ERROR
100 NOERR OR: IF ERRN = 11 THEN PRINT"SPELLING MISTAKE IN LINE";ERRLN
RUN < RETURN>
WIDZISZ: SYNTAX ERR OR IN LINE 100
Wśród atrakcyjnych cech komputera jest jego zdolność do syntezowania muzyki. Dzięki praktyce i doświadczeniu można odtworzyć dźwięki wielu różnych instrumentów muzycznych. Komputer posiada rozległe atrybuty muzyczne i dźwiękowe. SIMONS' BASIC nie został zaprojektowany do wykorzystania wszystkich tych funkcji. Polecenia dźwiękowe i muzyczne dostarczane przez cartridge są przede wszystkim przeznaczone do zapoznania się ze sztuką programowania dźwięku na COMMODORE 64. Jeśli chcesz dalej rozwijać swoje umiejętności programowania muzyki na komputerach Commodore, użyj oprogramowania i książek, które zajmują się tym tematem.
Przez różne częstotliwości są wytwarzane różne dźwięki. Im wyższa częstotliwość, tym wyższa wartość nuty. Większość komputerów osobistych posiada możliwości dźwiękowe, ale w przeciwieństwie do większości z nich, COMMODORE 64 daje możliwość wyboru każdej częstotliwości. Polega ono na informowaniu komputera, w jaki sposób należy odtwarzać każdą część częstotliwości. Głośność nut lub dźwięków muzycznych zmienia się, gdy po raz pierwszy usłyszysz dźwięk, dopóki nie ucichnie i nie będzie już słyszalny. Wszystkie częstotliwości są generowane w czterech cyklach: NARASTANIE, OPADANIE, PODTRZYMYWANIE i WYBRZMIEWANIE. Te cykle razem tworzą dźwiękową obwiednię. Funkcja każdego cyklu obwiedni jest opisana poniżej:
NARASTANIE - określa szybkość z jaką częstotliwość wzrasta od zera do wartości szczytowej.
OPADANIE - definiuje szybkość z jaką częstotliwość opada z wartości szczytowej do wartości pośredniej.
PODTRZYMYWANIE - określa wartość pośrednią poziomu głośności.
WYBRZMIEWANIE - określa szybkość, z jaką częstotliwość opada do zera.
W celu wyjaśnienia, diagram przedstawiający dźwiękową obwiednię pokazano na rysunku.
W standardzie BASIC odtwarzanie muzyki lub tworzenie specjalnych efektów dźwiękowych wymaga użycia wielu poleceń POKE. Może to być uciążliwe i czasochłonne, ale z SIMONS' BASIC to już nie jest ograniczenie. Specjalne polecenia muzyczne i dźwiękowe eliminują potrzebę uzyskiwania dostępu do pamięci przez POKE.
Polecenie VOL pozwala określić, z jaką głośnością będzie odtwarzana muzyka lub efekty dźwiękowe. WAVE wybiera rodzaj kształtu fali, który chcesz zastosować do swoich dźwięków. Polecenie ENVELOPE definiuje kształt każdej nuty w obrębie obwiedni dźwięku. MUSIC służy do komponowania dźwięków, które chcesz wytworzyć, natomiast polecenie PLAY powoduje generowanie dźwięków.
UWAGA:
Te polecenia muzyczne mogą być używane tylko jako część programu. |
W kolejnych rozdziałach opisano format i cel każdego polecenia muzycznego. Podano także krótki przykład użycia każdego polecenia.
Przykłady użyte w tej części dotyczą całego programu, który odgrywa melodię. Dlatego nie używaj polecenia NEW między przykładami i nie uruchamiaj programu, dopóki nie zostaniesz o to poproszony.
VOL n
Wybiera głośność muzyki.
Polecenie VOL umożliwia określenie poziomu głośności, przy którym będzie odtwarzana muzyka lub dźwięk następujący po poleceniu. Poziomy głośności mieszczą się w zakresie od 0 do 15. Poziom 15 generuje najwyższą głośność, a 0 wyłącza dźwięk. Poziom głośności pozostaje ustawiony taki sam, dopóki nie zostanie podane nowe polecenie VOL.
PRZYKŁAD: Aby ustawić poziom głośności na 15:
NAPISZ: 10 VOL 15
REZULTAT: Dźwięk następujący po tej linii zostanie odtworzony przy najwyższej głośności.
WAVE numer kanału,numer binarny
Ustawia rodzaj dźwięku.
Polecenie WAVE pozwala wybrać rodzaj przebiegu, którego chcesz użyć do odtwarzania muzyki lub efektów dźwiękowych. (Patrz rozdział 11.1.2.) Pierwszy parametr polecenia WAVE określa numer kanału, przez który będzie odtwarzany dźwięk. COMMODORE 64 ma trzy kanały ponumerowane od 1 do 3. Każdy kanał zawiera te same dziewięć oktaw. Oznacza to, że można odtwarzać dźwięk za pomocą jednego kanału, a następnie miksować dźwięk z innym kanałem.
Drugi parametr polecenia jest liczbą binarną. (Zwróć uwagę, że za pomocą polecenia WAVE numer ten nie jest poprzedzony znakiem dolara.) Ten numer informuje COMMODORE 64, jak odtwarzać każdy dźwięk. Każdy z ośmiu bitów w liczbie wykonuje określoną funkcję. Aby wybrać funkcję, ustaw odpowiedni bit, np. a1. Bity są ponumerowane od 0 do 7, bit 7 to lewy skrajny bit liczby. Funkcja wykonywana przez każdy bit jest pokazana w poniższej tabeli:
BIT |
FUNKCJA |
0 |
ustawia bit generatora obwiedni (niewymagane) |
1 |
ustawia synchronizację |
2 |
ustawia modulację kołową |
3 |
ustawia bit testowy (nigdy nie należy ustawiać tego bitu) |
4 |
ustawia falę o kształcie trójkątnym |
5 |
ustawia falę o kształcie piłokształtnym |
6 |
ustawia falę o kształcie prostokątnym |
7 |
ustawia szum |
Poniżej znajduje się bardziej szczegółowy opis każdego bitu:
BIT 0 - GENERATOR OBWIEDNI
W COMMODORE 64 bez SIMONS' BASIC, ten bit, po ustawieniu, uruchamia generator obwiedni, tj. powoduje rozpoczęcie czterech cykli częstotliwości. Jednakże, ponieważ SIMONS' BASIC ustawia ten bit automatycznie po wykonaniu polecenia PLAY, zawsze należy pozostawić wartość tego bitu na 0.
BIT 1 - SYNCHRONIZACJA
Bit synchronizacji umożliwia synchronizację dźwięku z jednej nuty (częstotliwości) z inną nutą. Grając jedną nutę stałym dźwiękiem (stałą częstotliwością) i odtwarzając wiele innych nut (o zmiennej częstotliwości) z innego kanału, można uzyskać szeroki zakres złożonych harmonii. Aby uzyskać najlepszy efekt, stała częstotliwość powinna być zawsze niższa niż najniższa wartość zmiennej częstotliwości. Kanał wybrany do wyprowadzania zmiennej częstotliwości określa kanał, który można wybrać dla stałej częstotliwości. Zostało to opisane w poniższej tabeli:
KANAŁ O ZMIENNEJ CZĘSTOTLIWOŚCI |
KANAŁ O STAŁEJ CZĘSTOTLIWOŚCI |
1 |
3 |
2 |
1 |
3 |
2 |
Numer kanału jest określony jako pierwszy parametr w poleceniu WAVE.
BIT 2 - MODULACJA KOŁOWA
Bit 2, po ustawieniu, inicjuje modulację kołową. Ten efekt jest podobny do synchronizacji (zobacz poprzedni bit), z tą różnicą, że zarówno częstotliwość jak i amplituda (głośność) mogą być zmieniane w tym samym czasie, aby stworzyć efekt wow-wow. Zmieniając częstotliwość jednego kanału na stałą częstotliwość innego, można uzyskać szeroką gamę struktur nieharmonicznych do tworzenia dźwięków dzwonka lub gongu i efektów specjalnych.
Aby modulacja kołowa była słyszalna, należy wybrać trójkątny kształt fali dla kanału o zmiennej częstotliwości. Ten kształt fali jest następnie zastępowany modulowaną kombinacją wyjścia z tego i z innego zdefiniowanego kanału. Podobnie jak w synchronizacji, kanał wybrany do wyprowadzania zmiennej częstotliwości określa kanał, który można wybrać dla stałej częstotliwości. Zostało to opisane w poniższej tabeli:
KANAŁ O ZMIENNEJ CZĘSTOTLIWOŚCI |
KANAŁ O STAŁEJ CZĘSTOTLIWOŚCI |
1 |
3 |
2 |
1 |
3 |
2 |
BIT 3 - BIT TESTOWY
Ten bit nie jest używany w SIMONS' BASIC. Dlatego nigdy nie należy go ustawiać, tzn. zawsze musi wynosić 0.
BIT 4 - FALA TRÓJKĄTNA
Wartość 1 w bicie 4 ustawia falę trójkątną.
BIT 5 - FALA PIŁOKSZTALTNA
Wartość 1 w tym bicie ustawia falę piłokształtną.
BIT 6 - FALA PROSTOKĄTNA
Wartość 1 w bicie 6 ustawia falę prostokątną.
BIT 7 - SZUM
Wartość 1 w tym bicie ustawia szum.
UWAGA:
Jeśli w bitach od 4 do 7 jeden bit jest ustawiony na 1, pozostałe bity muszą pozostać wyzerowane. |
PRZYKŁAD: Aby ustawić przebieg trójkątny dla kanału 1.
NAPISZ: 20 WAVE 1,00010000
REZULTAT: Po uruchomieniu tej części programu muzyka wykonująca polecenie jest odtwarzana za pomocą trójkątnego kształtu fali.
ENVELOPE vn,a,d,s,r
Definiuje rodzaj dźwięku.
Jak wyjaśniono w rozdziale 11.1.1, COMMODORE 64 umożliwia zdefiniowanie obwiedni, która określa rodzaj dźwięku, który chcesz odtwarzać. Polecenie ENVELOPE umożliwia utworzenie tego dźwięku. Parametr vn to numer kanału, przez który chcesz odtwarzać dźwięk. Parametry a, d i r określają odpowiednio czas narastania - ATTACK, opadania - DECAY i podtrzymywania - RELEASE częstotliwości, która ma zostać utworzona. Czas trwania cykli ATTACK, DECAY i RELEASE mierzy się w jednostkach tysięcznych sekundy. Jest to reprezentowane przez liczbę z zakresu od 0 do 15. Te liczby i odpowiadające im cykle czasowe są wymienione w poniższej tabeli:
WARTOŚĆ |
NARASTANIE |
OPADANIE/PODTRZYMYWANIE |
0 |
2 |
6 |
1 |
8 |
24 |
2 |
16 |
48 |
3 |
24 |
72 |
4 |
38 |
114 |
5 |
56 |
168 |
6 |
68 |
204 |
7 |
80 |
240 |
8 |
100 |
300 |
9 |
250 |
750 |
10 |
500 |
1500 |
11 |
800 |
2400 |
12 |
1000 |
3000 |
13 |
3000 |
9000 |
14 |
5000 |
15000 |
15 |
8000 |
24000 |
Na końcu każdego ciągu muzycznego przytrzymaj klawisz SHIFT, naciśnij klawisz CLR/HOME i napisz literę G. Spowoduje to wybrzmiewanie ostatniej nuty (zobacz rozdział 11.1.1)
Parametr podtrzymywanie - s, mieści się w zakresie od 0 do 15. Określa on średni poziom głośności, przy którym dźwięk zostanie zatrzymany i jest równoważny zmianie poziomu głośności ustawionej przez VOL, podczas gdy odtwarzana jest wybrana nuta. Pamiętaj jednak, że dotyczy to tylko wybranej nuty. Głośność dźwięków granych przez inne kanały pozostaje niezmieniona.
PRZYKŁAD: Aby utworzyć obwiednię dźwiękową dla muzyki odtwarzanej za pomocą kanału 1:
NAPISZ: 30 ENVELOPE 1,8,8,8,0
REZULTAT: Wszystkie nuty następujące po tym poleceniu są grane za pomocą kanału 1 z równymi prędkościami dla narastania, opadania i wybrzmiewania oraz poziomem głośności ustawionym na 8.
MUSIC n,"ciąg" lub
MUSIC n,zmienna + zmienna + zmienna....
Komponuje muzykę lub tworzy efekty dźwiękowe.
Polecenie MUSIC umożliwia komponowanie i odtwarzanie muzyki lub tworzenie efektów dźwiękowych. Pierwszy parametr polecenia odnosi się do czasu trwania jednego taktu muzycznego. Liczba ta musi zawierać się w przedziale od 1 do 255 - 1 oznacza najdłuższy czas trwania, 255 najkrótszy. Po tym parametrze definiujesz ciąg nut, które chcesz zagrać. Ciągi nut można dodać maksymalnie do 255 znaków. Kanał przez który chcesz zagrać nuty, jest określony na początku zapisu. Aby to zrobić, przytrzymaj klawisz SHIFT, naciśnij klawisz CLR/HOME (wyświetla się serce w inwersji) i wprowadź odpowiedni numer brzmienia.
UWAGA:
W ciągu nutowym może być użyty tylko JEDEN kanał |
.
Nuty są w przedziale od A do G. C jest pierwszą nutą w każdej oktawie, tj. sekwencji nut C, D, E, F, G, A, B. Podwyższenie nuty o jeden ton jest definiowane przez przytrzymanie klawisza SHIFT i naciśnięcie litery odpowiedniej nuty. Jeśli chcesz zagrać płaską nutę, musisz podwyższyć o jeden ton poprzednią nutę, np. płaskie E będzie podwyższonym D, a płaskiemu B napisz podwyższone A. Przerwa oznaczona jest literą Z.
Oktawa, w której nuta zostanie odtworzona, jest zdefiniowana przez liczbę od 0 do 8. Ta liczba jest wprowadzana PO NUCIE. (Reszta jest oczywiście wprowadzana bez numeru oktawy.) Czas trwania każdej nuty jest określony przez znak kontrolny następujący po numerze oktawy. Ten znak wprowadza się, naciskając jeden z czterech klawiszy funkcyjnych. Klawisze funkcyjne i związane z nimi czasy trwania nut przedstawiono w poniższej tabeli:
KLAWISZ FUNKCYJNY |
CZAS TRWANIA NUTY |
F1 |
1/16 UDERZENIA |
F3 |
1/8 UDERZENIA |
F5 |
1/4 UDERZENIA |
F7 |
1/2 UDERZENIA |
F2 |
1 UDERZENIE |
F4 |
2 UDERZENIA |
F6 |
4 UDERZENIA |
F8 |
8 UDERZEŃ |
Po określeniu czasu trwania ostatniej nuty w łańcuchu przytrzymaj klawisz SHIFT, naciśnij klawisz CLR/HOME i napisz literę G. Spowoduje to wywołanie cyklu wybrzmiewania ostatniej nuty (zobacz rozdział 11.1.1).
PRZYKŁAD: Aby skomponować melodię:
NAPISZ: 40 A$ = "<SHIFT CLR/HOME>1Z<F1>C5<F1>E5<F1>F5<F1>"
50 A2$ = "G5<F7>C5<F1>E5<F1>F5<F1>G5<F7>C5<F1>E5<F1>F5<F1> G5<F3>E5<F3>C5<F3>E5<F3>D5<F5>E5<F1>E5<F1>D5<F1>C5<F7>C5<F1>"
60 A2$ = A2$ + "E5<F3>G5<F3>G5<F1>F5<F5>F5<F3>E5<F1>F5<F1>G5<F3> E5<F3>C5<F3>D5<F3>C5<F3>C5<F1>C5<F1>E5<F1>F5<F1>"
70 A3$ = "C5<F7>C5<F1><SHIFT CLR/HOME>G"
80 MUSIC 8, A$ + A2$ + A2$ + A3$
REZULTAT: Kiedy ta część programu jest wykonywana, nuty są przechowywane w zmiennych A$, A2$ i A3$ i połączone w melodię.
PLAY n
Gra skomponowaną muzykę.
Polecenie PLAY, jak sama nazwa wskazuje, pozwala Ci zagranie muzyki, którą skomponowałeś. Parametr następujący po tym poleceniu wskazuje, w jaki sposób zagrana będzie muzyka w stosunku do reszty programu. 0 w tej pozycji wyłącza muzykę. 1 odtwarza muzykę i czeka na jej zakończenie przed kontynuowaniem programu. 2 odtwarza muzykę i kontynuuje wykonywanie programu.
PRZYKŁAD: Aby zagrać skomponowaną muzykę i kontynuować wykonywanie programu:
NAPISZ: 90 PLAY 2
100 GOTO 100
RUN < RETURN>
REZULTAT: Gra When The Saints Go Marching In.
PRZYKŁAD: Aby utw orzyć efekt dźwiękowy.
NAPISZ: 10 VOL 15
20 WAVE 1,10000000
30 ENVELOPE 1,0,10,0,0
40 MUSIC 5,"<SH IFT CLR/HOME>1C5<F2>"
45 REPEAT
50 PLAY 1
55 A = A + 1: UNTIL A = 5
RUN < RETURN>
REZULTAT: Zostało wykonanych pięć strzałów.
UWAGA:
PLAY 2 NIE MOŻE być używane w połączeniu z grafiką wysokiej rozdzielczości lub wielokolorową. |
POKE SOUND + adres,wartość
Wpisuje podaną wartość do rejestru układu dźwiękowego.
Polecenie SOUND zastępuje adres 54272 i dzieki temu wyklucza to konieczność stosowania dodatkowej zmiennej. Dzięki temu poleceniu jest możliwe wykorzystanie wszystkich możliwości muzycznych komputera.
PRZYKŁAD: Aby wykonać strzał:
NAPISZ: 1 FOR L=0 TO 24:POKE SOUND+L,0:NEXT L
5 FOR X=15 TO 0 STEP-1
10 POKE SOUND+24,X
20 POKE SOUND+4,129
30 POKE SOUND+5,15
40 POKE SOUND+1,40
50 POKE SOUND,200:NEXT X
REZULTAT: Został wykonany strzał.
Rozdział dwunasty ilustruje cztery funkcje odczytujące. Jeśli w swoich programach włączysz korzystanie z funkcji pióra świetlnego, joysticka lub wiosełek, funkcje te umożliwią określenie położenia tych urządzeń.
UWAGA:
Piórko świetlne należy podłączyć TYLKO do PORTU 1, tzn. do portu położonego najdalej od przełącznika WŁ./WYŁ. Joystick można podłączyć do dowolnego PORTU. (Zobacz w instrukcji COMMODORE 64). |
Polecenia PENX i PENY pozwalają na określenie pozycji na ekranie, wskazaną przez pióro świetlne. Polecenie POT odczytuje pozycję wiosełka na ekranu natomiast polecenie JOY pozwala określić, w jakim kierunku skierowany jest joystick.
zmienna = PENX
Zwraca współrzędną x pióra świetlnego.
Funkcja PENX zwraca pozycję pióra świetlnego na ekranie, tj. od jego lewej krawędzi. Zwrócona liczba zawiera się w przedziale od 0 do 320. Przykład tej funkcji znajduje się w następnym rozdziale.
UWAGA:
Wartość PENX musi zawsze być odczytana przed PENY. |
zmienna = PENY
Zwraca współrzędną y pióra świetlnego.
Funkcja PENX zwraca pozycję pióra świetlnego na ekranie, tj. od jego górnej krawędzi. Zwrócona liczba zawiera się w zakresie od 0 do 200.
PRZYKŁAD: Aby szkicować za pomocą pióra świetlnego na ekranie, a następnie wydrukować rysunek:
WYKONAJ: Wprowadź następujący program, a następnie uruchom go. Instrukcje dotyczące programu zostaną wyświetlone na ekranie.
10 REM:***LIGHT PEN PROGRAM***
20 HIRES0,1
30 TEXT 10,10,"AFTER YOU HAVE TYPED IN 'RUN'", 1,1,8
40 TEXT 10,25,"YOU HAVE 15 SECONDS TO INSERT", 1,1,8
50 TEXT 10,40,"THE LIGHTPEN IN 'CONTROL PORT 1'", 1,1,8
60 TEXT 10,55,"WHEN YOUR DRAWING IS COMPLETE", 1,1,8
70 TEXT 10,70,"REMOVE LIGHTPEN FROM USER PORT",1,1,8
80 TEXT 10,85,"AND PRESS SPACE-BAR FOR PRINT-OUT", 1,1,8
90 PAUSE 15
100 HIRES0,1
110 LINE10,10,300,10,1:LINE300,10,300,180,1
120 LINE300,180,10,180,1:LINE10,180,10,10,1
130 GETA$:IFA$=""THEN130
140 IFA$=" "THEN160
150 PLOT (PENX+51)AND255,(PENY-50)AND255,1:GOTO 130
160 COPY:END
zmienna = POT(O) lub
zmienna = POT(1)
Zwraca pozycję wiosełka.
Funkcja POT pozwala określić, jak daleko zostało obrócone sterowanie wiosełkiem. Zwrócona liczba mieści się w przedziale od 0 do 255. Liczba następująca po poleceniu określa wiosełko, którego wartość należy odczytać.
PRZYKŁAD: Aby przesunąć sprajt używając wiosełka:
NAPISZ: 10 REM:####PADDLE PROGRRM####
20 REM:######BY K MORRIS#####
30 HIRES0,1
40 TEXT10,10,"BY MOVING THE PADDLES YOU CAN",1,1,8
50 TEXT10,25,"GET THE SPRITES TO MEET.",1,1,8
60 TEXT10,40,"WHY DON'T YOU TRY ?",1,1,8
65 TEXT10,55,"(SET PADDLE X=0 AND PADDLE Y=255)",1,1,8
70 DESIGN 0,64*32+49152
80 @.......................B
90 @.......................B
100 @.......................B
110 @...........BBBBBBBBBBBBB
120 @...........B...........B
130 @...........B...........B
140 @...........B...........B
150 @...........B.......BBBBB
160 @...........B.......B...B
170 @...........B.......B...B
180 @.BBBBBBBBBBBBBBBBBBBBBBB
190 @...........B.......B...B
200 @...........B.......B...B
210 @...........B.......BBBBB
220 @...........B...........B
230 @...........B...........B
240 @...........B...........B
250 @...........BBBBBBBBBBBBB
260 @.......................B
270 @.......................B
280 @.......................B
290 DESIGN 0,64*33+49152
300 @B.......................
310 @B.......................
320 @B.......................
330 @BBBBBBBBBBBBB...........
340 @B...........B...........
350 @B...........B...........
360 @B...........B...........
370 @BBBBB.......B...........
380 @B...B.......B...........
390 @B...B.......B...........
400 @BBBBBBBBBBBBBBBBBBBBBBB.
410 @B...B.......B...........
420 @B...B.......B...........
430 @BBBBB.......B...........
440 @B...........B...........
450 @B...........B...........
460 @B...........B...........
470 @BBBBBBBBBBBBB...........
480 @B.......................
490 @B.......................
500 @B.......................
510 MOB SET 0,32,2,0,0
520 MOB SET 1,33,2,0,0
530 Z=10:W=245
535 MMOB0,Z,170,Z,170,3,50
536 MMOB1,W,170,W,170,3,50
540 X=INT(POT(0))
550 FORL=ZTOX
555 IFL=100THEN615
560 RLOCMOB0,L,170,3,50
580 NEXTL
590 Z=X:GOTO540
615 Y=INT(POT(1))
620 FORB=WTOY
625 IFB=145THEN700
630 RLOCMOB1,B,170,3,50
640 NEXTB
650 W=Y:GOTO615
700 TEXT105,170,"FIRE",1,3,8:PAUSE1
703 MOB OFF 0:MOB OFF 1
705 TEXT105,170,"FIRE",0,3,8
710 TEXT175,145,"BOOM !!!",1,5,20
716 BFLASH10,0,7
720 VOL15
730 WAVE 1,10008000
740 ENVELOPE 1,3,0,15,0
750 A$="<SHIFT CLR/HOME>1Z<F1>G5<F5>"
760 MUSIC 8,A$
770 PLAY1
820 VOL0:BFLASH0:HIRES0,1:PRINT"<SHITT CLR/HOME>
zmienna = JOY
Zwraca wartość związaną z pozycją joysticka.
Funkcja JOY pozwala Ci przetestować kierunek wskazywania joysticka lub naciśnięcia przycisku fire. Wartości zwrócone i związane z nimi pozycje joysticka pokazano na rysunku.
PRZYKŁAD: Aby narysować kształt za pomocą joysticka, a następnie go pomalowac:
WYKONAJ: Wprowadź następujący program, a następnie uruchom go. Instrukcje dotyczące programu zostaną wyświetlone na ekranie.
10 REM:********JOY STICK PROGRAM*****
11 HIRES0,1
12 LINE10,20,310,20,1:LINE310,20,310,160,1
13 LINE310,160,10,160,1:LINE10,160,10,20,1
15 TEXT88,30,"THE MOZOSKETCH",1,2,10
16 TEXT90,43,"-----------------",1,2,8
17 TEXT18,60,"DRAW A SHAPE MAKING SURE THAT",1,2,10
18 TEXT26,80,"THERE ARE NO GAPS, AND KEEP",1,2,10
19 TEXT60,100," WITHIN THE BOUNDARIES.",1,2,10
20 TEXT105,140,"BY K J MORRIS",1,2,8:PAUSE3
30 HIRES0,1
33 TEXT93,5," THE MOZOSKETCH",1,1,8
40 TEXT4,18,"DRAW A SHAPE AND PRESS THE FIRE BUTTON",1,1,8
45 TEXT73,31,"TO SEE WHAT HAPPENS",1,1,8
50 LINE10,50,310,50,1:LINE310,50,310,150,1
55 LINE310,150,10,150,1:LINE10,150,10,50,1
80 X=160:Y=100
90 PLOTX,Y,1
100 IF JOY=1 THEN Y=Y-1 : GOTO200
110 IF JOY=2 THEN Y=Y-1 : X=X+1 : GOTO200
120 IF JOY=3 THEN X=X+1 : GOTO200
130 IF JOY=4 THEN X=X+1 : Y=Y+1 : GOTO200
140 IF JOY=5 THEN Y=Y+1 : GOTO200
150 IF JOY=6 THEN Y=Y+1 : X=X-1 : GOTO200
160 IF JOY=7 THEN X=X-1 : GOTO200
170 IF JOY=8 THEN X=X-1 : Y=Y-1 : GOTO200
180 IF JOY<>128 THEN 100 ;poprawiono
185 TEXT27,178,"WELL DONE PICASSO",1,3,16
190 PAUSE2: GOTO340
200 IFX<20THENX=20
300 IFX>300THENX=300
310 IFY<60THENY=60
320 IFY>140THENY=140
330 GOTO90
340 LOW COL 2,1,1
350 PAINTX+1,Y+l,1:PAUSE5
360 HIRES0,1
370 TEXT50,50,"PRESS SPACE BAR FOR ANOTHER GO",1,2,8
380 GETA$:IFA$=""THEN380
390 IFA$=" "THEN 30
400 GOTO380
Ten rozdział zawiera cztery programy ilustrujące, co można osiągnąć za pomocą SIMONS' BASIC. Przepisz każdy program, a następnie uruchom go.
Poniższy program rysuje wielościenną figurę przy coraz mniejszym rozmiarze.
10 PRINT"<SHIFT CLR/HOME>
20 CENTRE "SIMONS BRSIC POLYHEDRA":PRINT:PRINT
30 CENTRE "BY S BEATS":PRINT:PRINT
40 PRINT "NUMBER OF SIDES ";:FETCH "<DOWN>",2,N
45 IF N = 0 THEN 10 ;poprawiono
50 EXEC SPIRAL
60 TEXT10,10,"PRESS A KEY",1,1,8
70 GETA$:IFA$=""THEN70
80 CSET0:GOTO10
996 :
99? :
998 :
999 :
1000 PROC SPIRAL
1010 MP=100:HIRES0,1
1020 FORJ=0TO2.5*<PI>STEP<PI>/20
1030 FORK=0+JTO2*<PI>+J+.1STEP2*<PI>/N
1040 X=INT(MP*1.3*SIN(K)+160)
1050 Y=INT(MP*COS(K)+100)
1060 IFK>0+JTHENLINEX1,Y1,X,Y,1
1070 X1=X:Y1=Y:NEXT
1080 MP=MP-2:NEXT
1090 END PROC
Poniższy program umożliwia wprowadzenie do 20 wybranych słów. Następnie miesza wszystkie słowa na siatce. Twoim zadaniem jest wskazanie współrzędnych na siatce, w której zaczynają się poszczególne słowa. Masz również możliwość wydrukowania siatki, dzięki czemu możesz grać w grę z dala od komputera.
10 REM***************************
20 REM* *
30 REM* WORDSEARCH *
40 REM* *
50 REM* BY STEVE BEATS *
60 REM* *
70 REM***************************
80 :
90 :
100 EXEC SETUP
110 EXEC GETWORDS
120 EXEC SCREEN
130 EXEC SORTLENGTHS
140 EXEC PLACEWORDS
150 EXEC PRINTGRID
160 EXEC GAME
170 CALL FINISH
180 :
181 :
3000 PROC GAME
3002 PRINT AT(28,1)"PRINT (Y/N)"
3004 GETQ$:IFQ$<>"Y"ANDQ$<>"N"THEN3004
3005 TI$="000000":TU=0
3006 PRINT AT(28,1)" "
3008 IFQ$="N"THEN3010
3009 HRDCPY
3010 WF=0:REPEAT
3011 PRINT AT(28,1) " ROW ";:FETCH"<DOWN>",3,RO$
3012 IF TI$>"001000"THENTU=1:END PROC
3020 PRINT AT(28,1) "COLUMN ";:FETCH"<DOWN>",3,CO$
3030 PRINT AT(28,1) " "
3040 RO=VAL(RO$):CO=VAL(CO$)
3050 IF RO>0ANDRO<21ANDCO>0ANDCO<21THEN3070
3060 PRINT AT(28,1) "ERROR":PAUSE 5000:PRINT AT(28,1) " ":GOTO3011
3070 F=0:FORI=1TONW:IFRO=PY(I)ANDCO=PX(I)THENF=1:X1=I
3080 NEXT:IFF=1THEN3100
3090 PRINT AT(28,1) "WRONG":PAUSE5000:PRINT AT(28,1) " ":GOTO3011
3100 FORI=0TOLEN(W$(X1))-1
3110 PRINT AT(3+PX(X1)+I*DX(TW(X1)),2+PY(X1)+I*DY(TW(X1))) "<RVS ON><CTRL 5>";
3115 PRINTMID$(W$(X1),I+1,1)
3120 NEXT: PRINT AT(25,2+X1) W$(X1):WF=WF+1
3130 UNTIL WF=NW
3140 END PROC
3150 :
3160 :
4000 PROC PRINTGRID
4010 PRINT"<CTRL 2>": FORY=1TO20:FORX=1TO20
4020 IFA$(X,Y)=""THENA$(X,Y)=MID$(W$(NW*RND(1)+1),5*RND(1)+1,1)
4040 PRINT AT(3+X,2+Y) A$(X,Y)
4050 NEXT:NEXT
4060 END PROC
4070 :
4080 :
5000 PROC PLACEWORDS
5010 PW=0:REPEAT:PW=PW+1
5020 PX(PW)=INT(20*RND(1)+1)
5030 PY(PW)=INT(20*RND(1)+1)
5040 DR=INT(8*RND(1)+1):TW(PW)=DR
5041 CX=PX(PW)+LEN(W$(PW))*DX(DR):CY=PY(PW)+LEN(W$(PW))*DY(DR)
5050 IFCX<1ORCX>20ORCY<1ORCY>20THEN5020
5051 REM IT FITS THE GRID SO CHECK LETTERS
5060 F=0:FORCK=0TOLEN(W$(PW))-1
5070 Z1$=MID$(W$(PW),CK+1,1):Z2$=A$(PX(PW)+CK*DX(DR),PY(PW)+CK*DY(DR))
5080 IFZ2$<>""ANDZ1$<>Z2$THENF=1
5090 NEXT:IFF=1THEN5020
5091 REM ITFITS SO SLOT IT IN
5100 FORCK=0TOLEN(W$(PW))-1
5110 Z1$=MID$(W$(PW),CK+1,1):A$(PX(PW)+CK*DX(DR),PY(PW)+CK*DY(DR))=Z1$
5120 PRINT AT(25,2+PW) W$(PW):NEXT
5130 UNTIl PW=NW
5140 END PROC
5150 :
5160 :
6000 PROC SORTLENGTHS
6010 PRINT AT(25,1) "SORTING"
6020 F=0:FORI=1TONW-1
6030 IFLEN(W$(I))<LEN(W$(I+1))THENT$=W$(I+1):W$(I+1)=W$(I):W$(I)=T$:F=1
6040 NEXT:IFF=1THEN6020
6050 PRINT AT(25,1) " "
6060 END PROC
6070 :
6080 :
7000 PROC SCREEN
7010 PRINT"<SHIFT CLR/HOME><CTRL 8><DOWN><DOWN><RIGHT><RIGHT><RIGHT>";:COLOUR 5,0
7020 PRINT"<CLOGO A>";:FORI=1TO20:PRINT"<SHIFT *>";:NEXT
7030 PRINT"<CLOGO S><DOWN><SHIFT RIGHT>";:FORI=1TO20:PRINT"<SHIFT -><DOWN><SHIFT RIGHT>";:NEXT
7040 PRINT"<CLOGO X><SHIFT RIGHT><SHIFT RIGHT>";:FORI=1TO20:PRINT"<SHIFT *><SHIFT RIGHT><SHIFT RIGHT>";:NEXT
7050 PRINT"<CLOGO Z><SHIFT RIGHT><SHIFT DOWN>";:FORI=1TO20:PRINT"<SHIFT -><SHIFT RIGHT><SHIFT DOWN>";:NEXT
7060 FORI=1TO20:NU$=STR$(I):NU$=MID$(NU$,2):IFLEN(NU$)=1THENNU$=" "+NU$
7070 PRINT AT(1,I+2) NU$:PRINT AT(I+3,0) LEFT$(NU$,1)
7080 PRINT AT(I+3,1) RIGHT$(NU$,1):NEXT
7090 END PROC
7100 :
7110 :
8000 PROC GETWORDS
8010 COLOUR10,0:PRINT"<SHIFT CLR/HOME><DOWN><RIGHT>CTRL 2>HOW MRNY WORDS (MAX 20)?"
8020 FETCH"<DOWN>",3,NW$
8030 PRINT:NW=VAL(NW$):IFNW<1ORNW>20THEN8010
8040 PRINT"<SHIFT CLR/HOME> NOW TVPE IN THE WORDS<DOWN>"
8050 PRINT" THEY MUST BE BETWEEN 5 RNB 15 LETTERS<DOWN>"
8060 FORI=1TONW
8070 PRINTI"<SHIFT RIGHT>> ";
8080 FETCH "<HOME>",15,W$(I)
8090 IFLEN(W$(I))<5THENPRINTCHR$(13)"<SHIFT DOWN><SHIFT DOWN>":GOTO8070
8100 PRINT:NEXT
8110 END PROC
8998 :
8999 :
9000 PROC SETUP
9010 COLOUR 5,0:PRINT"<SHIFT CLR/HOME><CTRL 2>SETTING UP, PLERSE WAIT....."
9020 DIMA$(20,20),W$(20),PX(20),PY(20),DX(8),DY(8),TW(20)
9030 FORI=1TO20:FORJ=1TO20:A$(I,J)="":NEXT:NEXT
9040 RESTORE:FORI=1TO8:READDX(I),DY(I):NEXT
9030 DATA0,-1,1,-1,1,0,1,1,0,1,-1,1,-1,0,-1,-1
9860 FORI=1TO20:W$(I)="":PX(I)=0:PY(I)=0:NEXT
9870 END PROC
9998 :
9999 :
10000 PROC FINISH
10010 IFTU=1THEN10100
10020 PRINT AT(28,1) "AGAIN (Y/N)"
10030 GETA$:IFA$<>"Y"ANDA$<>"N"THEN10030
10040 IFA$="Y"THENCLR:RUN
10050 PRINT"<SHIFT CLR/HOME>":END
10100 FORX1=1TONW
10110 FORI=0TOLEN(W$(X1))-1
10120 PRINT AT(3+PX(X1)+I*DX(TW(X1)),2+PY(X1)+I*DY(TW(X1))) "<RVS ON><CLRL/4>";
10130 PRINTMID$(W$(X1),I+1,1)
10140 NEXT:PRINT AT(25,2+X1) W$(X1):NEXT
10150 GOTO10020
Ten program miesza litery od A do O w kwadracie 4 na 4. Na placu jest jedna wolna przestrzeń. Musisz ustawić litery w kolejności alfabetycznej, przesuwając je po kwadracie.
1 REM ***** LETTER SLIDER GAME *****
2 REM ***** *****
3 REM ***** BY STEVE BEATS *****
4 :
5 EXEC INSTRUCTIONS
10 DIMA$(4,4),B$(4,4):MN=1
20 S$="<RVS ON>STRZALKA DO GORY<SHIFT O><CLOGO Y><SHIFT P><DOWN><SHIFT RIGHT><SHIFT RIGHT><SHIFT RIGHT><CLOGO G>STRZALKA DO GORY<CLOGO N><DOWN><SHIFT RIGHT><SHIFT RIGHT><SHIFT RIGHT><SHIFT L><CLOGO P><SHIFT @>"
30 C$="<CTRL 2/3/4/5/6/7/8><CLOGO 1/2/3/4/5/6/7/8>"
40 L$="ABCDEFGHIJKLMNO "
50 PT=1:FORY=1TO4:FORX=1TO4
60 I1$=MID$(C$,PT,1):I2$=MID$(L$,PT,1):PT=PT+1
70 W$=INST(I1$,S$,1)
80 W$=INST(I2$,W$,10)
90 A$(X,Y)=W$
100 NEXT:NEXT
110 A$(4,4)="<RVS OFF> <DOWN><SHIFT RIGHT><SHIFT RIGHT><SHIFT RIGHT> <DOWN><SHIFT RIGHT><SHIFT RIGHT><SHIFT RIGHT> "
120 PT=1:FORY=1TO4:FORX=1TO4
130 B$(X,Y)=MID$(L$,PT,1): PT=PT+1
140 NEXT:NEXT:PX=4:PY=4
150 PRINT"<SHIFT CLR/HOME>":COLOUR5,0
160 PRINT AT(12,5) "<RVS ON><CTRL 2><CLOGO A><SHIFT *><SHIFT *><SHIFT *><SHIFT *><SHIFT *><SHIFT *><SHIFT *><SHIFT *><SHIFT *><SHIFT *><SHIFT *><SHIFT *><CLOGO S>";
170 FORI=1TO12:PRINT"<DOWN><SHIFT RIGHT><SHIFT -";:NEXT:PRINT"<DOWN><SHIFT RIGHT><CLOGO X><SHIFT RIGHT><SHIFT RIGHT>";
180 FORI=1TO12:PRINT"<SHIFT *><SHIFT RIGHT><SHIFT RIGHT>";:NEXT:PRINT"<CLOGO Z><SHIFT DOWN><SHIFT RIGHT>";
190 FORI=1TO12:PRINT"<SHIFT -><SHIFT DOWN><SHIFT RIGHT>";:NEXT
200 EXEC LETTERS
205 EXEC SHUFFLE
206 REPEAT
210 GETR$:IFR$<"A"ORR$>"O"THEN210
215 PRINT AT(12,3) " "
220 EXEC CHECKIT
230 PRINT AT(12,3) MS$
240 EXEC FINISHED
250 UNTIL WI=1
260 RUN 10
998 :
999 :
1000 PROC LETTERS
1010 FORY=1TO4:FORX=1TO4
1020 PRINT AT(3*X+10,3*Y+3) A$(X,Y)
1030 NEXT:NEXT
1040 END PROC
1050 :
1060 :
2000 PROC SHUFFLE
2010 RESTORE:FORI=1TO4:READXD(I),YD(I):NEXT
2015 PRINT AT(12,3) "<CTRL 2>SHUFFLING...."
2020 DATA -1,0,0,1,1,0,0,-1
2025 I=0:REPEAT:I=I+1
2030 D=INT(8*RND(RND(1))+1)
2040 IFPX+XD(D)<1ORPX+XD(D)>4ORPY+YD(D)<1ORPY+YD(D)>4THEN2030
2050 X1=PX+XD(D):Y1=PY+YD(D):IFX2=X1ANDY2=Y1THEN2030
2060 T$=A$(X1,Y1):A$(X1,Y1)=A$(PX,PY):A$(PX,PY)=T$
2070 T$=B$(X1,Y1):B$(X1,Y1)=B$(PX,PY):B$(PX,PY)=T$
2080 X2=PX:Y2=PY:PX=X1:PY=Y1
2090 EXEC LETTERS
2100 UNTIL I>100
2110 PRINT AT(12,3) " "
2120 END PROC
2130 :
2140 :
3000 PROC CHECKIT
3005 PRINT AT(1,1) "<CTRL 2>MOVE NUMBER" MN
3010 FL=0:FORI=1TO4
3020 IFPX+XD(I)<1ORPX+XD(I)>4ORPY+YD(I)<1ORPY+YD(I)>4THEN3040
3030 IFB$(PX+XD(I),PY+YD(I))=R$THENFL=1:TE=I
3040 NEXT:IFFL=0THENMS$="ILLEGAL MOVE !!!":GOTO3100
3050 X1=PX+XD(TE):Y1=PY+YD(TE)
3060 T$=A$(X1,Y1):A$(X1,Y1)=A$(PX,PY):A$(PX,PY)=T$
3070 T$=B$(X1,Y1):B$(X1,Y1)=B$(PX,PY):B$(PX,PY)=T$
3080 EXEC LETTERS
3090 MS$="MOVE OK":PX=X1:PY=Y1:MN=MN+1
3100 END PROC
3110 :
3120 :
4000 PROC FINISHED
4010 FI$="":FORY=1TO4:FORX=1TO4
4020 FI$=FI$+B$(X,Y):NEXT:NEXT
4030 IFFI$=L$THEN4050
4040 END PROC
4050 PRINT AT(12,3) "A WINNER !!!":PAUSE10:WI=1:GOTO4040
4060 :
4070 :
5000 PROC INSTRUCTIONS
5005 COLOUR10,0
5010 PRINT"<SHIFT CLR/HOME><CTRL 4>DO YOU REQUIRE INSTRUCTIONS (Y/N)?"
5020 GETA$:IFA$<>"Y"ANDA$<>"N"THEN5020
5030 IFA$="N"THEN END PROC
5040 PRINT"<SHIFT CLR/HOME><DOWN><DOWN> THE OBJECT OF THE GAME IS TO GET"
5050 PRINT"<DOWN> ALL OF THE LETTERS IN THE CORRECT"
5060 PRINT"<DOWN> ORDER....."
5070 PRINT"<DOWN><DOWN> A B C D "
5080 PRINT"<DOWN> E F G H "
5090 PRINT"<DOWN> I J K L "
5100 PRINT"<DOWN> M N O <CLOGO +>"
5110 PRINT"<DOWN><DOWN><DOWN> TO MOVE A LETTER INTO THE VACANT"
5120 PRINT"<DOWN> SPACE, JUST TYPE THAT LETTER ON"
5130 PRINT"<DOWN> THE KEYBOARD."
5140 PRINT"<DOWN><CTRL 2> TRY IT NOW"
5150 GETA$:IFA$=""THEN5150
5160 END PROC
Ten program rysuje zabytkowy samochód na wielokolorowym ekranie graficznym.
1 COLOUR10,5
10 HIRES0,1:MULTI0,2,1
20 CIRCLE30,150,10,11,1
30 CIRCLE30,150,13,15,1
31 PAINT28,150,2
32 PAINT19,150,1
35 ARC30,150,270,90,10,17,21,3
36 LINE15,150,17,150,3
37 LINE43,150,45,150,3
38 PAINT16,148,3
40 BLOCK3,105,13,150,1
41 LINE3,105,6,105,0
42 LINE3,105,3,107,0:LINE 10,105,13,l05,0:LINE13,105,13,107,0
43 LINE3,150,6,150,0
44 LINE3,148,3,150,0
45 LINE3,115,0,125,1
46 LINE3,140,0,125,1
50 LINE16,139,16,105,1
60 LINE16,105,30,105,1
70 LINE30,105,30,129,1
71 PAINT18,107,1
80 LINE30,105,70,105,2
90 LINE70,105,70,145,2
91 LINE70,145,47,145,2
92 PAINT33,107,2
93 LINE43,152,56,152,1
94 BLOCK56,152,74,154,1
95 LINE74,152,80,152,1
96 LINE80,152,88,144,1
98 BLOCK72,105,94,145,2:PLOT71,105,1
99 PAINT75,151,1
100 BLOCK82,146,108,153,1
101 BLOCK110,144,120,152,1
102 BLOCK95,105,108,146,1
103 BLOCK108,105,114,141,1
105 BLOCK31,70,36,104,1
106 LINE31,70,95,70,1
107 BLOCK70,70,72,104,2
108 BLOCK31,67,95,69,2
109 LINE69,71,69,104,1
110 LINE72,71,72,104,1
112 LINE95,70,95,104,1
114 BLOCK35,102,69,i04,1
115 BLOCK73,102,95,104,1
116 LINE88,102,91,96,1
120 LINE31,66,76,66,1
121 LINE31,65,46,65,1
122 LINE31,64,36,64,1
132 LINE97,70,99,73,1
133 LINE97,67,99,73,1
134 LINE97,68,99,73,1
135 LINE97,69,99,73,1
220 CIRCLE140,150,10,11,1
230 CIRCLE140,150,13,15,1
231 PAINT138,150,2
232 PAINT129,150,1
235 ARC140,150,270,90,10,17,21,3
236 LINE125,150,127,150,3
237 LINE153,150,155,150,3
238 PAINT126,148,3
300 LINE128,152,114,152,1
310 LINE114,144,124,144,1
320 PAINT127,151,1
330 LINE125,141,116,141,1
340 LINE116,141,116,115,1
341 LINE116,115,136,115,1
342 LINE136,115,136,130,1
345 PAINT133,127,1
350 BLOCK116,105,136,112,1
360 LINE137,105,141,105,2
370 LINE141,105,141,129,2
380 LINE137,105,137,115,2
390 PAINT139,107,2
391 PLOT141,105,1:FORT=128TO120STEP-2
392 LINET,118,T,127,3:NEXT
400 LOW COL0,2,6+8:FORT=0TO159:IFTEST(T,98)=0THENPLOTT,98,3
410 NEXT
420 FORT=0TO62STEP8:LINE0,T,160,T,3:NEXT:BLOCK0,0,160,62,3
430 PAINT2,64,3
500 FORT=0TO159STEP5:IFTEST(T,96)=0THENPAINTT,96,3
510 NEXT
600 LINE78,107,76,107,1:PLOT76,108, 1
610 LOW COL7,2,6+8
620 ARC0,0,90,180,10,20,20,1
630 PAINT0,0,1
700 FORT=90TO180STEP10:ANGL0,0,T,33,33,1:NEXT
999 PAUSE4:NRM:MEM:COLOUR0,0:PRINT"<SHIFT CLR/HOME><CTRL 2><DOWN><DOWN><DOWN><DOWN><DOWN><RIGHT><RIGHT><RIGHT><RIGHT>SEE..!!"
W trakcie używania SIMONS' BASIC może pojawić się komunikat o błędzie. Komunikaty te są unikalne. Każdy komunikat o błędzie, jego znaczenie i prawdopodobną przyczynę podano poniżej.
? BAD MODE
Dzieje się tak, gdy dowolny parametr polecenia jest poza dopuszczalnym zakresem.
? NOT HEX CHARACTER
Podjęto próbę przekonwertowania liczby innej niż szesnastkowa na jej dziesiętny odpowiednik.
? NOT BINARY CHARACTER
Podjęto próbę przekonwertowania liczby nie binarnej na jej dziesiętny odpowiednik.
? UNTIL WITHOUT REPEAT
Polecenie UNTIL zostało użyte bez wcześniejszej deklaracji REPEAT.
? END LOOP WITHOUT LOOP
Polecenie END LOOP zostało użyte bez wcześniejszej deklaracji pętli LOOP.
? END PROC WITHOUT EXEC
Polecenie END PROC zostało użyte bez wykonania żadnej procedury.
? PROC NOT FOUND
Podjęto próbę wykonania procedury, która nie istnieje.
? TOO FEW LINES
Została dodana niewystarczająca liczba linii dla siatki projektu MOB.
? BAD CHAR FOR A MOB IN LINE n
Parametr na etapie projektowania MOBa znajduje się poza zdefiniowanym zakresem. Numer linii zawierającej błąd jest zawsze taki, w którym wykonano polecenie DESIGN, chociaż niekoniecznie oznacza to, że błąd znajduje się w tej linii.
? STACK TOO LARGE
Dzieje się tak, jeśli zagnieżdżono więcej niż dziewięć procedur lub pętli programowych.
? INSERT PARAMETER TOO LARGE
Dzieje się tak, gdy pozycja określona jako punkt wstawienia w ciągu głównym jest wartością większą niż długość ciągu.
? CREATED STRING TOO LARGE
Dzieje się tak, jeśli utworzony nowy ciąg jest dłuższy niż 255 znaków.
Lista terminów użytych w tej instrukcji.
ADRES POCZĄTKOWY - miejsce, w którym blok danych jest przechowywany w pamięci komputera.
ADRES POMOCNICZY - instrukcja przechowywania programu/pliku.
AWARIA PROGRAMU - niepożądane zatrzymanie wykonywania programu.
BIBLIOTEKA - zestaw programów i/lub podprogramów.
BIT - skrót od cyfr binarnych. Najmniejsza jednostka pamięci komputera.
CYKLE CZASOWE - czas trwania składowej częstotliwości mierzony w tysięcznych częściach sekundy.
DANA - informacja przechowywana w pamięci komputera lub urządzeniu pamięci masowej.
DEBUGOWANIE - poprawianie błędów programu.
KERNAL - system operacyjny COMMODORE 64.
LICZBA CAŁKOWITA - cała liczba.
MIEJSCE POCZĄTKOWE - punkt na ekranie, z którego rysowany jest kształt.
MOB - ruchomy blok obiektu. Termin używany do opisania sprajta.
OKTAWA - grupa ośmiu nut.
PIKSEL - najmniejsza adresowalna lokalizacja na ekranie.
PRZEWIJANIE - poruszanie się zawartości ekranu w kierunku pionowym lub poziomym.
REJESTR - zarezerwowany obszar w pamięci komputera.
ROZGAŁĘZIENIE - transfer realizacji programu z jednej linii do drugiej.
SPRAJT - obiekt programowalny.
URZĄDZENIE PERYFERYJNE - urządzenie zewnętrzne podłączone do komputera.
WSPÓŁŻĘDNA - odległoć punktu na siatce od osi x lub y.
ZAPIS ZMIENNOPRZECINKOWY - system przechowujący liczby w formie wykładniczej.
W zamieszczonym archiwum znajduje się obraz dyskietki stacji 1541, zawierający wszystkie przykłady zamieszczone w tym opracowaniu. Zostały one umieszczone w tej samej kolejności, co rozdziały w instrukcji. Dodatkowo każda grupa przykładów każdego rozdziału została rozdzielona wpisem informacyjnym. Większość nazw plików dotyczy tylko jednego konkretnego polecenia, choć są i takie dotyczące grupy poleceń. Związane jest to ze sposobem w jaki napisana jest instrukcja. Każdy z przykładów należy wczytać standardową instrukcją LOAD po wcześniejszym uruchomieniu cartridge.
Oryginalna instrukcja zawierała pewne bledy, które głównie powodowały błędne działanie zamieszczonych programów. Poniżej zamieszczono zmienione linie programu oraz oryginalne, przez które te programy działały nieprawidłowo. Dodatkowo dodano opis każdego błędu.
2.7. RESET.
Zmienione linie programu:
50 INPUT A: IF A < 1 OR A > 4 THEN PRINT"<SHIFT CURSOR UP><SHIFT CURSOR UP>": GOTO 50
100 DATA "ALSATIAN","CORGI","TERRIER","LABRADOR","SPANIEL"
110 DATA "PERSIAN","TABBY",ALLEY","SIAMESE","BURMESE"
120 DATA "SPARROW","STARLING","BUDGIE","CANARY","PIGEON"
130 DATA "TROUT","SALMON","CHUBB","BASS","ROACH"
Oryginalne linie programu:
50 INPUT A: IF A < 0 OR A > 5 THEN PRINT"<SHIFT CURSOR UP>": GOTO 50
100 DATA ALSATIAN,CORGI,TERRIER,LABRADOR,SPANIEL
110 DATA PERSIAN,TABBY,ALLEY,SIAMESE,BURMESE
120 DATA SPARROW,STARLING,BUDGIE,CANARY,PIGEON
130 DATA TROUT,SALMON,CHUBB,BASS,ROACH
W oryginalnym programie linia 50 pozwalała na wybór wartości 0 lub 5 co skutkowało wyświetleniem wcześniej wybranego zestawu nazw. A jeśli byłoby to za pierwszym razem zawsze pokazywał się pierwszy zestaw nazw. Linie 100 - 130 wyświetlały się błędnie ze względu na niewłaściwe interpretowanie danych przez SIMONS' BASIC podczas ich przetwarzania i umieszczania programu w pamięci. Przykładowo wyraz TROUT zostanie zinterpretowany jako TR i polecenie OUT, co podczas wyświetlania programu nie wskazuje na błąd. Ten wyraz zostanie zapisany na 4 bajtach, choć posiada 5 liter. Jedynym rozwiązaniem problemu jest umieszczenie wyrazów w cudzysłowach.
2.9.2. OPTION.
Zmienione linie programu:
20 CIRCLE 160,100,80,60,1
30 REC 80,40,160,120,1
Oryginalne linie programu:
20 CIRCLE 160,120,0,28,100
30 REC 160,120,160,120,0
Ostatni parametr w linii 20 ustawia niedozwolony sposób rysowania. Linia 30 ustawia mazanie punktów podczas rysowania. Efektem tego programu z oryginalnymi liniami jest błąd w linii 20, a po jej poprawieniu wyświetlenie tylko białego tła.
6.5.18 CSET
Przykład 1:
Zmieniona linia programu:
40 GOTO 20
Oryginalna linia programu:
40 GOTO 10
Kasowane ekranu psuło cały efekt.
Przykład 2:
Dodane linie programu:
28 IF A + C > 159 THEN 25
29 IF B + D > 199 THEN 25
Jeśli suma zmiennych A i C lub B i D przekraczała maksymalne wymiary ekranu graficznego pojawiał się błąd w linii 30.
6.6.1.CHAR.
Zmienione linie programu:
30 FOR J = 0 TO 15
40 FOR K = 0 TO 31
50 CHAR I * 8, A,K + J * 32,1,2
51 I = I + 1 : IF I = 40 THEN I = 0 : A = A + 15
60 NEXT:NEXT
Oryginalne linie programu:
30 FOR J = 1 TO 12
40 FOR I = 0 TO 40
50 CHAR I * 8, A,I + J * 40,1,2
60 NEXT:A = A + 15: NEXT
Oryginalny program nie wyświetlał wszystkich 512 znaków graficznych. Pierwszym wyświetlanym znakiem był ten o numerze 40 a ostatni znak był odczytywany spoza zakresu.
7.12.1 SCRSV
Zmienione linie programu:
20 FILL 6,10,7,12,160,6
30 FILL 6,17,7,12,160,1
40 FILL 6,24,7,12,160,2
Oryginalne linie programu
20 FILL 6,10,20,4,160,2
30 FILL 10,10,20,4,160,1
40 FILL 14,10,20,4,160,6
Zamiast flagi francuskiej została narysowana flaga holenderska.
7.13.2 COPY
Zmienione linie programu:
70 PAINT 90,35,1
80 PAINT 90,120,3
90 PAINT 80,110,2
105 LOW COL 5,4,7
110 PAINT 40,40,3
Oryginalne linie programu:
70 PAINT 90,35,1
80 PAINT 60,60,3
90 PAINT 90,120,2
105 LOW COL 7,4,6
110 PAINT 80,110,1
Oryginalny program błędnie wypełniał elementy wykresu.
9.3.4 CALL
Zmieniona linia programu:
50 IF X > 0 AND X < 16 THEN CALL ENTER NAMES
Oryginalna linia programu:
50 IF X < 16 THEN CALL ENTER NAMES
Jeśli wprowadzono zero program działał niepoprawnie.
9.3.5 EXEC
Zmienione linie programu:
1040 T = 0:FOR I = 1 TO M
1071 IF T = 1 THEN 1040
1090 UNTIL M = X
Oryginalne linie programu:
1040 T = 0:FOR I = 1 TO N - M
1090 UNTIL T = 0
Poprawiono blednie działające sortowanie.
10.4 NO ERROR
Zmienione linie programu:
19 J = J + 1: IF J = 6 THEN NO ERROR
20 READ B
25 PRINT B: GOTO 19
Drugi program:
100 NOERROR:IF ERRN = 11 THEN PRINT"SPELLING MISTAKE IN LINE";ERRLN
Oryginalne linie programu:
Ta linia była w rozdziale 10.3.
20 READ B: J = J + 1: IF J = 5 THEN OUT
Drugi program:
100 NO ERROR:IF ERRN = 11 THEN PRINT"SPELLING MISTAKE IN LINE";ERRLN
Poprawiono niewłaściwą ilość odczytywanych danych.
12.5 JOY
Zmienione linie programu:
180 IF JOY<>128 THEN 100
185 TEXT27,178,"WELL DONE PICASSO",1,3,16
200 IFX<20THENX=20
300 IFX>300THENX=300
310 IFY<60THENY=60
320 IFY>140THENY=140
330 GOTO90
Oryginalne linie programu:
180 IF JOY=128 THEN TEXT27,178,"WELL DONE PICASSO",1,3,16
200 IF X<20THENX=20:GOTO100
300 IFX>300THENX=300:GOTO100
310 IFY<60THENY=60:GOTO100
320 IFY>140THENY=140:G0T0100
330 PLOTX,Y,1:GOTO100
Podczas rysowania, wybrania dwóch kierunków i dojechania do krawędzi, rysowanie było ignorowane.
13.2 PROGRAM 1 - RYSOWANIE WIELOŚCIANU
Dodana linia programu:
45 IF N = 0 THEN 10
Podczas rysowania i wybrania zera ścian pojawiał się błąd dzielenia przez zero w linii 1030.
13.4 PROGRAM 3 - PRZESÓWANIE LITER
Dodanie drugiej wersji gry pod nazwą EXAMPLE3 V2. Uruchom dwie wersje a zrozumiesz na czym polega różnica.
Dodano opis pominietych poleceń LIN i SOUND.
|
Reset
| |
|
Zakończenie pracy dowolnego programu w celu załadowania od nowa systemu operacyjnego.
Stosuje się go w przypadku zawieszenia komputera jak i wówczas gdy program lub gra uniemozliwia powrót do BASICa. | |
| | |
zamknij
|
LOAD
| |
|
Polecenie to służy do wczytania programu z taśmy lub dyskietki do pamięci komputera tak, aby móc z niego korzystać.
Wpisanie samego polecenia LOAD powoduje wczytanie z magnetofonu pierwszego napotkanego programu. Dodanie za tym
napisem nazwy programu ujętej w cudzysłów powoduje poszukiwanie programu o danej nazwie. Po nazwie można dodać
jeszcze przecinek i liczbę. Liczba ta określa numer urządzenia, z którego należy wczytywać program.
Jeżeli nie podano numeru urządzenia komputer przyjmuje domyślną wartość 1, oznaczającą magnetofon. Innym
urządzeniem zazwyczaj wykorzystywanym jest stacja dysków, której odpowiada numer 8.
LOAD Odczytuje pierwszy program z taśmy.
LOAD "HALO" Szuka na taśmie programu nazwanego HALO i jeśli go znajdzie, wczytuje go do pamięci.
LOAD A$ Szuka programu o nazwie określonej zmienną A$.
LOAD "HALO",8 Szuka programu nazwanego HALO na dyskietce.
LOAD "*",8 Wczytuje pierwszy program na dyskietce.
Jeżeli program (zazwyczaj w kodzie maszynowym) ma być wczytany w określone miejsce w pamięci należy dodać tzw.
parametr wtórny równy 1.
LOAD "K/M PROG",1,1 Wczytuje program z magnetofonu bez przemieszczania go w pamięci.
| |
| | |
zamknij
|
SAVE
| |
|
Polecenie to zapisuje program znajdujący się w pamięci komputera na taśmę lub dyskietkę. Wpisanie tylko SAVE i naciśnięcie klawisza RETURN spowoduje zapisanie programu na taśmę. Komputer nie ma możliwości sprawdzenia co znajduje się na te taśmie; więc należy uważać aby nie skasować poprzednich programów.
Jeżeli za słowem SAVE podano nazwę programu ujętą w cudzysłów lub zmienną łańcuchową, komputer nada tę nazwę
zapisywanemu programowi, co ułatwi potem odnalezienie tego programu.
Za nazwą programu można podać numer urządzenia, na które program ma być zapisany oraz kolejny przecinek i paramet
wtórny. Wartość 1 parametru wtórnego oznacza, że zapisywany właśnie program będzie wczytywany w to samo miejsce w
pamięci, które zajmuje obecnie. Podanie liczby 2 powoduje zapisanie znacznika końca taśmy (End-Of-Tape marker). Gdy
podczas szukania innego programu komputer spotka ten znacznik poszukiwanie zostaje przerwane i pojawia się komunika
FILE NOT FOUND (programu nie znaleziono). Można też podać wartość 3 oznaczającą jednocześnie koniec taśmy i znacznik
wczytywania programu w to samo miejsce.
SAVE Zapisuje program bez nazwy na taśmę.
SAVE "HALO" Zapisuje na taśmę pod nazwę HALO.
SAVE A$ Zapisuje na taśmę pod nazwą określoną w A$.
SAVE "HALO",8 Zapisuje na dyskietkę.
SAVE "HALO",1 ,1 Zapisuje na taśmę pod nazwą HALO i z zaznaczeniem, że program będzie wczytywany w to samo miejsce pamięci.
SAVE "HALO",1,2 Zapisuje na taśmę pod nazwą HALO i ze znacznikiem końca taśmy.
SAVE "HALO",1,3 j/w z zaznaczeniem wczytywania w to samo miejsce w pamięci.
| |
| | |
zamknij
|
VERIFY
| |
|
Polecenie to służy do sprawdzenia poprawności ostatniego zapisu programu. Porównuje ono zawartość wskazanego zapisu
z zawartością pamięci komputera.
VERIFY Porównuje z najbliższym programem na taśmie.
VERIFY "HALO" Szuka na taśmie programu HALO i porównuje go z pamięcią.
VERIFY "HALO",8 Szuka na dyskietce programu HALO i porównuje go z pamięcią.
Jeżeli pokaże się komunikat VERIFY ERROR, oznacza to błąd przy zapisie. Należy program zapisać ponownie. Błąd ten
powstanie też jeżeli po zapisie została zmieniona jakakolwiek linia programu lub komórka pamięci.
| |
| | |
zamknij
|
DATA
| |
|
Po tej komendzie wypisane są dane, które będą odczytywane komendą READ. Dane te mogą być liczbami albo łańcuchami oddzielonymi od siebie przecinkami. Łańcuchy znaków nie muszą być ujęte w cudzysłów o ile nie zawierają
znaków spacji, przecinków lub dwukropków. Jeżeli nic nie jest wpisane między kolejnymi przecinkami komenda READ wczyta zero jako liczbę lub pusty łańcuch.
DATA 12, 17, "RAZ, DWA", 3.14, JANUSZ
| |
| | |
zamknij
|
POKE
| |
|
Po komendzie POKE zawsze następują dwa parametry. Pierwszy określa miejsce w pamięci (adres), natomiast drugi
wartość (0-255). Komenda POKE powoduje wpisanie w dane miejsce pamięci określonej wartości.
10 POKE 53281,0
20 S=4096*13
30 POKE S+29,8
| |
| | |
zamknij
|
READ
| |
|
Komenda READ przyporządkowuje kolejnym zmiennym dane pobrane z linii z komendą DATA. Należy zwrócić uwagę, aby
READ nie odczytał zmiennej znakowej, gdy oczekuje na liczbę, gdyż spowoduje to wystąpienie błędu.
| |
| | |
zamknij
|
RETURN
| |
|
Komenda ta działa w połączeniu z komendą GOSUB. Gdy program dojdzie do tej komendy, następna wykonana będzie
kolejna instrukcja po ostatnio realizowanej komendzie GOSUB. Jeżeli nie było przedtem komendy GOSUB pojawi się błąd
RETURN WITHOUT GOSUB ERROR.
| |
| | |
zamknij
|
TURBO
| |
|
Znacznie szybszy system odczytu lub zapisu pozwalający na zmieszczenie większej ilości danych na kasecie.
| |
| | |
zamknij
|
ROM-BIT przedstawia Black Box V9
| |
|
| |
| | |
zamknij
|
RUN
| |
|
Polecenie to powoduje wykonywanie programu znajdującego się w pamięci. Jeżeli po tym poleceniu nie wpisano żadnego
numeru linii program rozpocznie się od linii o najniższym numerze. Podanie numeru powoduje rozpoczęcie programu od
wskazanej linii.
RUN Rozpoczyna wykonywanie programu od pierwszej linii.
RUN 50 Rozpoczyna wykonywanie programu od linii 50
RUN X Pokaże się napis UNDEF'D STATEMENT ERROR. Należy zawsze podać liczbę określającą numer linii, a
nie zmienną.
| |
| | |
zamknij
|
SYS
| |
|
Po komendzie SYS należy podać liczbę lub wyrażenie z zakresu od 0 do 65535. Jest to wywołanie programu napisanego w
kodzie maszynowym. Od funkcji USR różni się tym, że nie pozwala na przekazywanie parametrów.
| |
| | |
zamknij
|
REM
| |
|
Komenda REM służy do umieszczania w tekście programu komentarzy odnośnie danej linii, czy też całego programu.
Można po tej komendzie wpisać dowolny ciąg znaków. Wszystkie znaki znajdujące się za komendą REM są ignorowane przez komputer.
Uwaga: Ignorowany jest także dwukropek, tak więc za tą komendą nie można już dodać w tej linii żadnej innej komendy.
| |
| | |
zamknij
|
GOTO lub GO TO
| |
|
Napotkanie przez program komendy GOTO powoduje przejście do linii programu oznaczonej liczbę po tej komendzie.
| |
| | |
zamknij
|
GOSUB
| |
|
Komenda ta działa podobnie jak komenda GOTO, z tym, że komputer pamięta numer linii, w którym ona wystąpiła. Jeżeli
napotkana potem będzie komenda RETURN, program powróci do następnej instrukcji po GOSUB. Komenda ta jest przydatna
gdy chce się z różnych miejsc w programie wywoływać ten sam ciąg instrukcji.
10 GOSUB 100: PRINT "PIERWSZY RAZ"
20 GOSUB 100: PRINT "DRUGI RAZ"
30 END
100 PRINT "ALA MA ASA":RETURN
| |
| | |
zamknij
|
OPEN
| |
|
Komenda OPEN pozwala C 64 na dostęp do urzadzeń jakimi są: stacja dysków, drukarka czy nawet ekran. Po słowie OPEN należy podać liczbę (0-255), określającą numer otwieranego zbioru, oraz numer urządzenia.
Numery urządzeń:
- Klawiatura
- Magnetofon
- Ekran
- Drukarka
- Dysk
Po numerze urzadzenia czasem należy podać tzw. parametr wtórny. W przypadku stacji dysków numer ten określa, który
kanał ma być wykorzystany do przesyłania danych. W przypadku drukarki określa dodatkowe parametry druku np. pismo
powiększone.
OPEN 1,0 Otwiera dostęp do ekranu
OPEN 2,8,2,"D" Otwiera do czytania zbiór D na dysku
OPEN 3,4 Otwiera dostęp do drukarki
OPEN 15,8,15 Otwiera kanał poleceń dla dysku.
Więcej informacji na temat obsługi zbiorów znajduje się w instrukcji obsługi Commodore 64 w Dodatku S.
| |
| | |
zamknij
|
PRINT
| |
|
Komenda PRINT jest jedną z pierwszych komend, które poznaje się podczas nauki języka BASIC. Za komendą PRINT
mogą znajdować się:
- łańcuch znaków ujęty w cudzysłów,
- nazwa zmiennej,
- funkcja lub wyrażenie matematyczne,
- znak formatujący wydruk.
Znaki formatujące wydruk to przecinek (,) lub średnik (;). Przecinek powoduje wyświetlenie napisu w najbliższej z czterech stref o szerokości 10 znaków, natomiast średnik powoduje wyświetlenie napisu bezpośrednio za poprzednim. Każdy z tych znaków może znajdować się na końcu linii. Ma on wtedy wpływ na następną komendę PRINT w programie.
10 PRINT "HALO"
20 PRINT "HALO" A$
30 PRINT A+B
40 PRINT J;
50 PRINT A,B,C,SIN(D)
Patrz także: funkcje POS, SPC, TAB.
| |
| | |
zamknij
|
PRINT#
| |
|
Istnieje kilka różnic między PRINT a PRINT#. Po komendzie PRINT# występuje numer określający zbiór, do którego mają
być zapisywane dane. Zbiór, do którego chce się coś zapisać musi być przedtem otwarty komendą OPEN. Przecinek i średnik mają taki sam efekt jak przy komendzie PRINT. Niektóre urządzenia mogą nie interpretować odpowiednio funkcji TAB i SPC.
10 PRINT#1, "WARTOSCI DANYCH:";A%,B1,C$
| |
| | |
zamknij
|
NEW
| |
|
Polecenie to usuwa z pamięci program i wszystkie zmienne, które były używane. Program przepadnie jeżeli nie był zapisany poleceniem SAVE. NALEŻY BYĆ OSTROŻNYM GDY UŻYWA SIĘ TEGO POLECENIA.
NEW może być użyte także jako komenda w linii programu. Gdy program dochodzi do linii zawierającej tę komendę, zostaje usunięty z pamięci.
| |
| | |
zamknij
|
CLR
| |
|
Komenda ta usuwa z pamięci komputera wszystkie zmienne, a pozostawia tylko program. Komenda ta jest wykonywana
automatycznie po wydaniu polecenia RUN.
| |
| | |
zamknij
|
LIST
| |
|
Polecenie LIST pozwala na obejrzenie linii programu BASIC znajdujących się w pamięci komputera. Można przeglądać cały program lub jego wybrany fragment.
LIST Pokazuje cały program.
LIST 10 - Pokazuje linie od 10 do końca.
LIST 10 Pokazuje tylko linię 10.
LIST - 10 Pokazuje linie od początku do linii 10.
LIST 10 - 20 Pokazuje linie od 10 do 20.
| |
| | |
zamknij
|
IF ... THEN
| |
|
Komenda ta pozwala wykonać jakieś działanie jeżeli spełniony jest warunek określony po słowie IF. Może to być dowolna komenda języka BASIC. Warunek może być porównaniem dwóch wyrażeń (porównanie operatorami = < > <= >= <>), lub pojedynczym wyrażeniem matematycznym. W drugim przypadku warunek jest spełniony gdy wyrażenie jest różne od zera. Można łączyć kilka warunków operatorami AND i OR lub stosować negację NOT.
IF X>10 THEN END
IF Y THEN PRINT "Y JEST ROZNE OD ZERA"
IF NOT Z AND (X>7) THEN 30
Podanie samej liczby po THEN w ostatnim przypadku jest równoznaczne z komendš GOTO 30.
| |
| | |
zamknij
|
FINAL III - PULL-DOWN MENU - DESKTOP
| |
|
| |
| | |
zamknij
|
FINAL III - PULL-DOWN MENU - BASIC
| |
|
| |
| | |
zamknij
|
|