Kontakt Ilość odwiedzin ministat liczniki.org |
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: 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. An Introduction to BASIC Parts 1 and 2, by Andrew Colin. Niniejsza instrukcja jest podzielona na trzynaście rozdziałów opisanych poniżej: 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). ![]() Cartridge Simons' BASIC - ekran startowy
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: 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:
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.
KEY numer,"polecenie" 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:
Teraz, po naciśnięciu klawisza funkcyjnego, automatycznie wygenerujesz RETURN zgodnie z przypisanym poleceniem. DISPLAY
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
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
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
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
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
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 RUN/STOP i naciśnij klawisz RESTORE. REZULTAT: Program został zatrzymany. MERGE "nazwa programu",numer urządzenia
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
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
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.
DELAY n
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.
FINDznak lub
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
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
PRZYKŁAD: Korzystają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 RUN/STOP. NAPISZ: LIST <RETURN> 30 PRINT "<CLR/HOME>";CHR$(X),X <RETURN> WYKONAJ: Przytrzymaj klawisz SHIFT 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ń kursor poniżej okna. NAPISZ: RUN <RETURN> REZULTAT: Podczas działania programu w oknie ponownie są wyświetlane numery linii. DUMP
PRZYKŁAD: Aby wyświetlić zmienne z następującego programu:
10 A$ = "RANDOM COLOURS" 20 PRINT "<SHIFT 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 koloru, przytrzymaj klawisz RUN/STOP i naciśnij klawisz RESTORE. POLECENIE: DUMP <RETURN> WIDZISZ: A$ = "RANDOM COLOURS" X = 9 C = 80
COLD
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.
DISAPA:
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
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
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.
INSERT ("ciąg wstawiany","ciąg główny",p)
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)
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")
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)
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"
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
PRZYKŁAD: Aby ustawić ciąg znaków COMMODORE 64 w 13 kolumnie i w 8 wierszu:
POLECENIE: PRINT AT(13,8)"COMMODORE 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
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
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
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
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
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 RESUME
PRZYKŁAD: Rozszerzanie programu z poprzedniego rozdziału, aby ponownie włączyć polecenie ON KEY:
NAPISZ: 10 PRINT "<SHIFT 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 ignorowany. 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.
MOD(x,y)
PRZYKŁAD: Aby podzielić 15 na 4 i otrzymać resztę z dzielenia:
NAPISZ: PRINT MOD(15,4) <RETURN> WIDZISZ: 3 DIV(x,y)
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)
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
PRZYKŁAD: Aby przekonwertować liczbę binarną 10110101 na postać dziesiętną:
POLECENIE: PRINT %10110101 <RETURN> WIDZISZ: 181 PRINT $wartość szesnastkowa
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)
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"
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
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.
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:
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:
COLOUR bo,sc
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
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 RUN/STOP. REZULTAT: Pojawił się normalny ekran. REC x,y, A, B,rodzaj rysowania
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 RUN/STOP. REZULTAT: Pojawił się normalny ekran. HIRES pc,sb: MULTI c1,c2,c3
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 RUN/STOP. REZULTAT: Pojawił się normalny ekran. NRM
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
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
PRZYKŁAD: Aby narysować dziewięć prostokątów w różnych kolorach:
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 prostokąty w oryginalnych kolorach, trzy w kolorach przypisanych za pomocą polecenia LOW COL i trzy inne ponownie używając oryginalnych kolorów rysowania. Po pięciu sekundach wyświetlany jest normalny ekran. PLOT x,y,rodzaj rysowania
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)
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
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
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
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
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)
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
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
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
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.
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
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
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
Aby wyświetlić tekst małymi literami:
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.
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.
BCKGNDS sc,b1,b2,b3
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
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
PRZYKŁAD: Aby wyłączyć polecenie FLASH w powyższym programie:
NAPISZ: 10 PRINT"<SHIFT 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
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
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
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
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 RUN/STOP i naciśnij klawisz RESTORE. REZULTAT: Wyświetlany jest normalny ekran. MOVE r,c,w,l,dr,dc
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
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
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
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
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
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
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).
DESIGN c,ad lub
Obszary dostępne w pamięci dla danych MOB i powiązane z nimi numery bloków są wymienione poniżej:
Jeśli użyłeś polecenia MEM, dla danych MOBa dostępne są tylko bloki od 192 do 255.
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
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:
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
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
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ść
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ść
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
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
PRZYKŁAD: Aby przenieść MOB w wysokiej rozdzielczości w dół ekranu i sprawdzić kolizję między nim a MOBem wielokolorowym:
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
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.
MEM
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
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. @........
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 RUN/STOP 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.
IF warunek THEN prawda:ELSE:fałsz
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
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
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
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.
PROC nazwa
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
PRZYKŁAD: Aby przygotować 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
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
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. LOCAL zmienna1, zmienna2, zmienna3......
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
PRZYKŁAD: Korzystając z programu z poprzedniego rozdziału, przywrócmy wartości globalne do zmiennych lokalnych:
NAPISZ: 10 REM"*** EXAMPLE OF LOCAL/GLOBAL *** 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 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 wartoś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
Poniżej znajduje się lista błędów, które mogą zostać wykryte wraz z ich numerami:
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 RUN/STOP. 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. NO ERROR
PRZYKŁAD: Korzystają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 ERROR REZULTAT: Ponieważ istnieje tylko pięć elementów danych, program ulega awarii po próbie odczytania numeru na pozycji 6. Zostanie wyświetlony komunikat COMMODORE 64, który ma zastosowanie do tego typu błędu. PRZYKŁAD: Korzystając z programu z rozdziału 10.2, przywróć kontrolę błędów dla COMMODORE 64: WYKONAJ: Wprowadź następujące zmienione linie programu: 10 ON ERROR: GOTO 99 15 PRIN"<SHIFT CLR/HOME>" 99 NO ERROR 100 NOERROR:IF ERRN = 11 THEN PRINT"SPELLING MISTAKE IN LINE";ERRLN RUN <RETURN> WIDZISZ: SYNTAX ERROR 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: 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. ![]() Cartridge Simons' BASIC - generator obwiedni
Układ dźwiękowy pozwala wybrać rodzaj fali dźwiękowej, którą chcesz wykorzystać do odtwarzania utworzonej muzyki lub efektów dźwiękowych. Każdy rodzaj fali dźwiękowej daje inny efekt. Poniżej opisano przebiegi i efekty wytwarzane przez każdą z fal wraz w ich wykresem. ![]() Cartridge Simons' BASIC - fala trójkątna
PIŁOKSZTAŁTNA - kształt fali jest bogaty w składowe harmoniczne i wytwarza pełny dźwięk. ![]() Cartridge Simons' BASIC - fala piłokształtna
PROSTOKĄTNA - pozwala na uzyskanie różnych tonów o zróżnicowanym brzmieniu. ![]() Cartridge Simons' BASIC - fala prostokątna
SZUM - jak sama nazwa wskazuje, ten kształt fali wytwarza różnego rodzaju szumy dla specjalnych efektów dźwiękowych. ![]() Cartridge Simons' BASIC - szum
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.
W kolejnych rozdziałach opisano format i cel każdego polecenia muzycznego. Podano także krótki przykład użycia każdego polecenia. VOL n
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
Poniżej znajduje się bardziej szczegółowy opis każdego bitu: 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:
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:
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.
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
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)
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
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.
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
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 utworzyć efekt dźwiękowy. NAPISZ: 10 VOL 15 20 WAVE 1,10000000 30 ENVELOPE 1,0,10,0,0 40 MUSIC 5,"<SHIFT 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.
POKE SOUND + adres,wartość
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ń.
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
zmienna = PENY
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
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 ![]() Cartridge Simons' BASIC - wartości zwracane przez odczytanie portu joysticka
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. 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 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
|
Wyświetleń: 3851
Data ostatniej aktualizacji:2018-01-31 11:55:32.