Simon's Basic został stworzony w celu wykorzystania wszystkich potencjalnych możliwości komputera Commodore 64. Jest to możliwe dzięki wprowadzeniu dodatkowych 114 rozkazów uzupełniających standardowy język Basic mikrokomputera Commodore 64. Te dodatkowe rozkazy są podzielone na 12 grup:
rozkazy wspomagające programowanie (np.KEY, TRACE, ...) umożliwiające szybsze i skuteczniejsze programowanie w języku Basic
rozkazy do manipulacji ciągiem znaków (np.INSERT lub PLACE)
rozkazy tekstowe (np.CENTRE, PRINT AT) służące do formatowania ekranu
poprawione rozkazy wejściowe (np.FETCH czy INKEY) umożliwiające pełne sterowanie drukowaniem z klawiatury
dodatkowe instrukcje arytmetyczne (np.MOD, DIV) umożliwiające wykonywanie dzielenia całkowitego prostszą metodą
rozkazy konwersji numerycznych pozwalające na zmianę liczb binarnych lub zapisanych w układzie szesnastkowym na ich odpowiedniki dziesiętne
rozkazy programowania strukturalnego (np.PROC, IF ... THEN ... ELSE) pozwalające na zapis programu w sposób w sposób bardziej czytelny
rozkazy do manipulowania ekranem (np.SCRSV i COPY) pozwalające na przechowywanie lub wprowadzanie danych z ekranu i/lub tworzenie wydruku grafiki o dużej/małej rozdzielczości
rozkazy graficzne (np.CIRCLE i PAINT) umożliwiające rysowanie na ekranie określonych figur
rozkazy wykorzystujące grafikę użytkownika (np.DESIGN, MOB, SET, DETECT, CHECK) pozwalające na tworzenie i animacje zaprojektowanego obrazu oraz tworzenie nowych znaków graficznych
rozkazy dźwiękowo-muzyczne (np.WAVE i ENVELOPE) umożliwiające tworzenie efektów dźwiękowych, komponowanie i granie muzyki
rozkazy obsługi stacji dysków upraszczające manipulowanie zbiorami (np.DIR)
Kartridż Simon's Basic dla emulatorów C64 znajduje się TUTAJ! (11 KB)
Aby włączyć taki kartridż, należy po włączeniu emulatora, wcisnąć klawisz F9, wybrać opcję Cartridge, po czym wybrać Insert Cartridge i potem znaleźć katalog, w którym zapisaliśmy ten program. Należy wgrać go i w pozycji Cartridge Emulation wybrać na ON (czyli włączony). Po resecie "wirtualnego" C64, kartridż będzie się uaktywniał. UWAGA! Kartridż można zainstalować tylko w wersji 2.0 lub wyższej emulatora CCS64, także VICE.
Zakres rozkazów reprezentowanych przez Simon's Basic czyni go niezbędnym narzędziem dla każdego zainteresowanego rozszerzeniem możliwości własnego komputera Commodore 64. Teoretycznie język ten dostępny jest jedynie w module (kartridżu), jednak znacznie częściej spotyka się jego wersje na dysku lub taśmie.
Poniższy artykuł dedykowany jest tym wszystkim zapalonym użytkownikom Commodore 64, którzy wycisnęli już z konwencjonalnego Basica ostatnie soki i czują pewien niedosyt. Po "przetrawieniu" tego materiału, każdy powinien już samodzielnie podołać wyzwaniu, jakim jest własnoręczne napisanie prostej gry. Bowiem te 114 (a nawet więcej!) komend, praktycznie wystarcza by pisać programy na miarę naszych potrzeb. Zastosowane w Simon's Basic rozwiązania m.in. metody programowania strukturalnego, predysponują go do celów edukacyjnych - choć na tym polu nie może on konkurować np. z Pascalem, jest jednak jego godną uwagi alternatywą.
* * *
1. Rozkazy wspomagające programowanie.
Wróćmy jeszcze na moment do standardowego Basic'a. Pamiętacie zapewne, jakim problemem było przyporządkowanie własnych oznaczeń (dyrektyw) klawiszom funkcyjnym. W tym celu uciekaliśmy się do asemblera (języka maszynowego) i w pocie czoła wystukiwali niezrozumiałe symbole, (tzw. Mnemoniki). Teraz operacja przypisania jest równie prosta jak zabranie dziecku lizaka - co nawiasem mówiąc odradzam. Nieco siermiężny Basic nie pozwalał też na kilka innych sztuczek, które szalenie ułatwiają życie programiście... Ale wszystko w swoim czasie. Zabieramy się do pracy! W tym celu proponuje "odpalić" emulatorek 64ki np. Vice i przy jego pomocy przećwiczyć w praktyce poniższe rozkazy. Wszyscy, którzy do tej pory nie posiadają tego emulatora lub cartridge Simon's Basic, zapraszam do odwiedzenia naszego działu Pliki - skąd można zassać potrzebne programy.
KEY nr_klawisza_funkcyjnego , "ciąg_znaków"
Przypisuje danemu klawiszowi funkcyjnemu ciąg znaków zawartych w cudzysłowie. Specyfikacja języka pozwala na zdefiniowanie 16 klawiszy - tzn. 8 standartowych f1-f8 plus 8 dodatkowych f9-f16. Owe nadmiarowe uzyskujemy poprzez wciśnięcie dodatkowo z zadanym klawiszem, klawisza C=. Ciąg może składać się maksymalnie z 16 znaków i kończyć "wciśnięciem RETURN", które uzyskamy za pomocą kodu sterującego CHR$(13).
Np.: KEY 1,"RUN"+CHR$(13)
DISPLAY
Wyświetla na ekranie ciągi znaków, przypisane zdefiniowanym przez użytkownika klawiszom funkcyjnym.
RENUMBER nr_1szej_linii , skok
Umożliwia przenumerowanie linii programu. Podajemy numer, jaki ma mieć pierwsza linia naszego programu i wartość, o jaką ma się on powiększać. Pewnym mankamentem jest nie uwzględnianie numerów linii w komendach GOTO, GOSUB i THEN.
AUTO nr_linii_początkowej , skok
Pozwala na automatyczne numerowanie wpisywanych linii programu. Kolejna linia pojawia się automatycznie po wciśnięciu RETURN na końcu poprzedniej. Wartość skoku musi zawierać się w przedziale 0-255 (bajt).
PAGE liczba_linii
Odpowiednik standardowej komendy LIST z tym jednak udogodnieniem, że definiujemy ilość linii wyświetlanych jednocześnie na ekranie. Dostęp do kolejnych uzyskujemy po wciśnięciu klawisza RETURN. Parametr powinien zawierać się w przedziale 1-23. Aby przywrócić normalne działanie LIST, podajemy 0 (zero) jako liczbę linii do wyświetlania.
OPTION x
Rewelacyjne narzędzie dla początkujących programistów. Gdy w miejsce "x" wstawimy 10, cały listing zostanie wyświetlony normalnie, przy czym słowa kluczowe Simon's Basic zostaną pokazane w rewersie. Podstawienie 0 (zero) przywraca normalny wygląd listingu.
DELAY x
Reguluje szybkość ukazywania się kolejnych linii programu podczas działania komendy LIST. Wartość "x" powinna zawierać się w zakresie od 1 do 255.Aby zobaczyć działanie tego rozkazu należy trzymać wciśnięty klawisz SHIFT w czasie listowania.
MERGE "nazwa_pliku" , numer_urządzenia
Umożliwia łączenie ze sobą dwóch programów, jednego w pamięci komputera, drugiego z zadanego nośnika danych. Warunkiem poprawnej pracy jest, aby numery linii programu w komputerze były niższe od tych dogrywanych. Nie należy również zapominać, iż zmienne użyte w pierwszym są globalne! Numer urządzenia jest standardowy, tzn. np. 8 dla stacji dysków a 1 dla magnetofonu.
Np. MERGE "mój_program", 8
FIND komenda
Przeszukuje listing programu na obecność zadanego ciągu znaków. Parametr komenda może mieć dwie postacie:
- wyrażenie kluczowe Simon's Basic (np. GOTO)
- zadany ciąg znaków w cudzysłowie (np. "TSD")
Użycie jest następujące FINDGOTO i FIND"TSD", ważne, aby po FIND nie stawiać spacji! Wynikiem działania jest wyświetlenie numerów linii zawierających zadany wzorzec.
TRACE x
Pozwala śledzić numery aktualnie wykonywanych linii programu. Parametr "x" równy 10 włącza śledzenie, 0 (zero) anuluje rozkaz. Dodatkowo można wcisnąć C=, co pozwoli śledzić wykonywanie programu linia po linii.
RETRACE
Wznawia śledzenie komendą TRACE w przypadku, gdy program użytkownika wyczyści ekran tekstowy.
DUMP
Kolejna rewolucyjna komenda! Pozwala użytkownikowi na wyświetlenie na ekranie wszystkich zmiennych zdefiniowanych w naszym programie. Program musi być uprzednio uruchomiony (skończył się lub został zatrzymany). Pewnym mankamentem jest brak listowania zmiennych tablicowych.
OLD
Przywraca program skasowany z pamięci komputera komendami COLD i NEW. W tym czasie nie należy nic wgrywać lub wpisywać z numerami linii.
COLD
Programowy reset interpretera Simon's Basic (odpowiednik SYS $FCE2).
ON ERROR : komenda : GOTO
Tej funkcji nie uświadczymy w standardowym Basic'u. Jej przydatność jest niekwestionowana, pozwala przejąć pełną kontrolę nad wykonywanym programem. Nawet błąd nie spowoduje teraz wyjścia do interpretera. Dobre do "odpluskwiania" programów! Po wykryciu błędu w wykonywanym programie, jego dalsze działanie zależy teraz od autora, może on skierować dalsze działanie do własnej obsługi błędu lub go zignorować i kontynuować program. Po dwukropku podajemy zestaw komend, które mają zostać wykonane przed skierowaniem programu do obsługi błędów komendą GOTO.
Np. 10 ON ERROR:COLOUR 7,1:GOTO 50
20 X=100
30 X=X*10:PRINT X
40 GOTO 30
50 PRINT "ERROR" ERRN " W LINII" ERRLN
Użyte zmienne ERRN i ERRLN są zmiennymi zastrzeżonymi Simon's Basic'a i odpowiadają za obsługę zgłaszanych błędów. ERRN przechowuje numer błędu, podczas gdy ERRLN numer linii, w której ten błąd wystąpił.
Numery błędów przyporządkowane ERRN:
1 - zbyt wiele plików
2 - plik otwarty
3 - plik zamknięty
4 - nie znaleziono pliku
5 - nie podłączone urządzenie
10 - NEXT bez FOR
11 - błąd składni
12 - RETURN bez GOSUB
13 - brak danych
14 - zbyt duża wartość
15 - przepełnienie
16 - brak wolnej pamięci
17 - nieznana instrukcja
18 - niewłaściwy indeks
19 - powtórna deklaracja tablicy
20 - dzielenie przez ZERO
21 - nieprawidłowa komenda
22 - niezgodność typów
23 - zbyt długi tekst
NO ERROR
Przywraca normalny stan postępowania (wektor obsługi błędów) w wypadku jego wykrycia. Wskazane do "normalnej" pracy interpretera.
OUT
Zaprzestanie obsługi błędów, zdefiniowanych po ON ERROR. Musi być użyta przed wznowieniem wykonywania programu, po obsłudze błędu przez procedurę użytkownika.
DISAPA
Polecenie umożliwiające ukrywanie treści linii programu w Simon's Basic przed ciekawskimi! Umieszczone jako pierwsze w danej linii, zabezpiecza ją przed wylistowaniem po wydaniu rozkazu SECURE 0.
Np. 10 DISAPA:PRINT "TSD"
SECURE 0
RUN
Wynikiem działania będzie na ekranie sam numer linii. Standartowo ukrywa program przed samym autorem. Tak, więc zalecam ostrożność w stosowaniu.
Ps. Wszystkich zainteresowanych programem do złamania tego zabezpieczenia, zapraszam do wysłania e-maila na mój adres maniac64@poczta.onet.pl
SECURE 0
Zabezpiecza przed wylistowaniem linie programu, w których jako pierwsza występuje instrukcja DISAPA. Uwaga: użycie rozkazu jest nieodwracalne.
* * *
2. Rozkazy do manipulacji ciągiem znaków.
Wprowadzają dużo innowacji w sposobie wyświetlania i obsługi zmiennych tekstowych. Wykorzystanie tych dodatkowych poleceń, w połączeniu ze standardowymi, otwiera możliwość dowolnego manipulowania zmiennymi.
USE"##tekst.##tekst",V$
Porządkuje w kolumny ciągi liczb. Gdzie "#" to zarezerwowane miejsce (spacja) na wyprowadzany znak (cyfrę z liczby) przy wyświetlaniu. Wartości liczbowe podstawiamy pod zmienną V$, a pola "tekst" dowolny ciąg znaków będący komentarzem do danych.
Np. 10 A$=STR$(RND(1)*200)
20 USE"WYNIK###.#####",A$
30 PRINT
40 GOTO 10
da na ekranie KOLUMNE liczb w formacie : 3 miejsca do przecinka i 5 po przecinku.
INSERT("ciąg_do_wstawienia" , "ciąg_bazowy" , pozycja)
Wstawia dane w zadany wzorzec, poczynając od miejsca określonego w parametrze pozycja.
Np. A$="12367":B$="45":C$=INSERT(B$,A$,3)
Da ciąg 1234567.
INST("ciąg_do_wstawienia" , "ciąg_bazowy" , pozycja)
Wstawia jeden ciąg w drugi, zastępując nim oryginał od wskazanej pozycji.
Np. A$="KARTA CZARNA":B$=INST("BIALA",A$,6)
Otrzymamy KARTA BIALA.
PLACE("ciąg_szukany" , "ciąg_bazowy")
Odnajduje pozycje szukanego ciągu w zadanym.
Np. X$="ABCXD":PRINT PLACE("X",X$)
Poda wartość 4.
DUP("ciąg" , powiel)
Powiela zadeklarowany CIĄG, zadaną ilość razy. Wynik można wyprowadzić na ekran lub utworzyć z niego nową zmienną.
Np. A$="123":B$=DUP(A$,2):PRINT DUP(A$,3):PRINT B$
Na ekranie 123123123 i zmienna 123123
|