!!!!!!! JAK ZAMIENIĆ SPECTRUM NA IBM PC? JĘZYK BASIC DLA KOMPUTERA IBM PC (2) czytelnia Try2emu

JAK ZAMIENIĆ SPECTRUM NA IBM PC? JĘZYK BASIC DLA KOMPUTERA IBM PC (2)

INSTRUKCJE JĘZYKA BASIC
Podane dalej instrukcje opisane są tylko w takim zakresie, w jakim jest to niezbędne z punktu widzenia użytkownika, który zna język BASIC dla jakiegokolwiek innego komputera i chce poznać jedynie specyficzne dla IBM PC instrukcje i cechy dialektu.
Długość nazw może sięgnąć 40 znaków. Zmienne całkowite mogą być sygnalizowane znakiem % (w podobny sposób oznaczane są stale całkowite) na końcu nazwy, lub zaczynać się na literę wymienioną w deklaracji DEFINT Stałe pojedynczej precyzji mają na końcu oznacznik !, zmienne nie muszą być specjalnie oznaczane, gdyż w ten sposób traktowane są wszystkie zmienne nie oznaczone inaczej. Stałe podwójne precyzji mogą mieć na końcu # lub w zapisie półwykładniczym D zamiast E. Zmienne podwój nej precyzji mogą kończyć się na # lub powinny być wymienione w deklaracji DEFDBL. Stałe tekstowe umieszczane są w cudzysłowach, natomiast zmienne muszą się kończyć znakiem $ lub być wymienione w deklaracji DEFSTR.
Tablice definiowane za pomocą DIM mogą być dowolnego typu, przy czym dopuszczalny jest wymiar tablicy do 255 i przedział zmienności wskaźnika od 0 do 32767. Można zamienić numerację wskaźników we wszystkich tablicach przez instrukcję
OPTION BASE numer-początkowy Kasowanie zawartości wszystkich zmiennych bez restartu programu:

CLEAR
zaś zwolnienie pamięci przypisanej tablicom daje instrukcja

ERASE lista_nazw_tablic Komentarze mogą się zaczynać do REM lub od apostrofu.
INSTRUKCJE STERUJĄCE
Normalnie działają instrukcje GOTO, GOSUB oraz
ON wyrażenie GOSUB lista—linii
Wprowadzona jest konstrukcja
IF...THEN ...ELSĘ... Poza pętlą FOR... normalnie działająca dostępna jest pętla:
WHILE warunek
instrukcje wykonywane, gdy warunek spełniony WEND
SPECYFIKA INSTRUKCJI WEAVY
Instrukcje READ, DATA i RESTORE działają normalnie. Teksty w instrukcji DATA mogą występować bez cudzysłowów, jeśli nie zawierają spacji na początku lub przecinka w środku.
Instrukcja INPUT może zawierać prompt (komunikat objaśniający):
INPUT komunikat; lista

Dane wejściowe muszą być separowane przecinkami. Dla wprowadzenia tekstów zawierających przecinek trzeba uj mowaćje w cudzysłów. Można wprowadzić do pojedynczej zmiennej tekstowej całą linię tekstu za pomocą instrukcji
LINE INPUT komunikat; lista Instrukcja ta nie wystawia automatycznie znaku „?". Bardziej specjalizowana jest instrukcja (możliwa do wykorzystania jedynie jako funkcja)
zmienna=INPUT$ (liczba znaków) która nie daje możliwości wypisania promptu, natomiast akceptuje wszystkie znaki, wypisane na klawiaturze z edycyjnymi włącznie.
Wprowadzanie pojedynczych znaków możliwe jest za pomocą funkcji INKEYS (jej wartość trzeba podstawić pod zmienną typu znakowego).
Możliwe jest zaprogramowanie klawiszy funkcyjnych F1 do F10 (do 15 znaków, jeśli ma być wykonywane musi się kończyć +CHR$ 13).
Listowanie przyporządkowania klawiszy funkcyjnych osiąga się instrukcją KEY LIST
Klawisze funkcyjne można zaprogramować na skoki do określonych linii instrukcją
ON KEY(n) GOSUB m przy czym wcześniej musi być zapowiedź
KEY(n) ON Wyłączanie następuje za pomocą
KEY(n) STOP
(przyporządkowanie pozostaje w pamięci i może być przy wrócone) lub
KEY(n) OFF (przyporządkowanie jest gubione). W podobny sposób wykorzystywane mogą być klawisze kursora (n = 11 góra. n = 12 lewo, n = 13 prawo, n = 14 dół).
Druk na drukarce uzyskuje się instrukcją LPRINT. W instrukcji PRINT lub LPRINT przy używaniu przecinka dostępne są strefy drukowania o rozmiarach 14 znaków, za czynające się w kolumnach: 1, 15, 29, 44, 58, 72. Przy szybkim wydruku można zatrzymać proces drukowania przez Ctrl Num Lock, a potem uruchomić dowolnym klawiszem.

CZYSZCZENIE EKRANU KOMENDĄ:
CLS
Przy formatowaniu druku można korzystać z funkcji TAB(n) ustawiającej druk na n-tą kolumnę, (n może być od 1 do 255) lub funkcji SPACES (n) dostarczającej łańcu cha złożonego z n spacji. Można się też odwołać do funkcji SPC(n) wstawiającej n spacji do wydruku i z instrukcji
LOCATE wiersz kolumna umieszczającej kursor we wskazanym punkcie. Aktualne położenie kursora kontroluje funkqa POS 0 podająca nu mer kolumny i CSRLIN podająca numer linii, w której aktu alnie znajduje się kursor. Duże możliwości daje instrukcja
PRINTUSING "format"; lista Przy budowie formatu używa się znaków "*" (cyfra), "." pozycja kropki dziesiętnej), "," (wstawiany w dowolne miejsce dla zwiększenia czytelności zapisu), " + " oraz "-" (pozycje znaku ustalone lub "pływające" — w tym drugim przypadku, trzeba wypełnić znakami cały zakres "pływania" znaku; znak "-" może być także umieszczo ny na końcu liczby dla uzyskania efektu "zapisu bankowe go"), "*" (umieszczony na początku zapisu powoduje wy pełnianie pustych miejsc gwiazdkami dla uniemożliwienia fałszerstwa).
Do sterowania pracą drukarki używane są znaki sterujące:
LPRINT CHR$(14); — druk poszerzony
LPRINT CHR$(15); — druk zagęszczony
LPRINT CHR$(27); — CHR$(69) — powrót do druku nor malnej gęstości
LPRINT CHR$(27); "AO" — druk zagęszczony w pionie
LPRINT CHR$(27); "A1" — druk bardzo gęsty w pionie
LPRINT CHR$(27); "A2" — powrót do druku o normalnej gęstości w pionie
LPRINT CHR$(27); "C"; CHR$(ilość linii na stronie)
— ustawianie długości strony
LPRINT CHRS(12); — wymuszenie przejścia do nowej strony
WIDTH "LPT1:", długośćJinii — ustawienie liczby zna ków w linii,
OPERACJE NA ŁAŃCUCHACH
ab — oznacza, że a poprzedza w alfabecie b
TIMES — dostarcza czas
DATE$ — dostarcza datę
SWAP a, b — wymiana zawartości łańcuchów
VAL (a) — zamiana łańcucha na liczbę
STR$(n) — zamiana liczby na łańcuch
INSTR(a,b) — pozycja początku identyczności ciągu b z
pewnym podciągiem a INSTR (a,b,m) — jak wyżej, tylko szukanie zaczyna się od
pozycji m w ciągu a RIGHT$(a,n) — odcięcie n znaków z prawej LEFT$(a,n) — odcięcie n znaków z lewej MID$(a,n,m) — wycięcie m znaków poczynając od n ASC(a) — numer ASCII znaku a
CHR$(n) — znak o numerze n + — konkatenacja LEN(a) — długość ciągu
FUNKCJE
Własne:
DEF FN nazwa (parametry) = wyrażenie. Mogą być funkcje wielu zmiennych i funkcje dające w wy niku łańcuch.
RND— (bez parametrów!) liczba losowa
RANOMIZE liczba — ustalenie startu losowania
CINT, CSNG, CDBL — funkcje konwersji na odpowiednie
typy
Zamiana na całkowitą: INT, FIX
UDOGODNIENIA W URUCHOMIENIU PROGRAMU
Włączanie śladu (drukowane są numery wykonywanych instrukcji)
TRON wyłączanie śladu
TROF Własna obsługa błędów: ON ERROR GOTO m
przy własnej obsłudze błędów można wykorzystywać zmienne ERL (numer linii błędu) i ERR (numer błędu). Ko niec obsługi: RESUME. Można ustawiać RESUME NEXT (od następnej linii po błędzie) albo RESUME numer. Dla celów testowych można symulować błąd instrukcją ERROR numer
OPERACJE NA ZBIORACH
Każdy zbiór, na którym mają być wykonywane operacje musi być otwarty:
OPEN nazwa FOR działanie AS n
lub
OPEN "kod", n, nazwa W podanym wyżej opisie nazwa musi być podana zgodnie z zasadami dla systemu operacyjnego, zaś działaniem może być: INPUT (kod "I"), OUTPUT (kod "0") lub AP-
PEND (kod "A"), Dla zbiorów o dostępie bezpośrednim obowiązuie formuła otwarcia:
OPEN nazwa AS nLEN = długość-rekordu Każdy otwarty zbiór musi być zamknięty instrukcją
CLOSE lista-numerów Instrukcie wykonujące działania na zbiorach są następują ce:
WRITE n, lista-zmiennych Instrukcja ta dodaie automatycznie znaki interpunkcyjne, niezbędne przy odczycie danych instrukcją INPUT:
INPUT n, lista-zmiennycń Instrukcją nie dodającą do zapisanych na dysku danych znaków interpunkcyjnych jest
PRINT n, lista
Wolno w niej natomiast używać opcji USING format, funk cji TAB, SPC, średnika itp.
Możliwe jest czytanie z dysku instrukcją LINE INPUT n, a
także wykrywanie faktu napotkania końca zbioru za pomo cą funkcji logicznej (używanej typowo w IF): EOF(n)
która przyimuje wartość "prawda" po przeczytaniu ostat niego rekordu zbioru.
Dla zbiorów o dostępie bezpośrednim obowiązuje od mienna (podana wyżej) instrukcja otwarcia zbioru, po któ rej trzeba podać strukturę rekordu instrukcją:
FIELD n, n1 AS nazwał, n2 AS nazwa2,... gdzie suma n1, n2 itd. musi odpowiadać długości podane go w instrukcji otwarcia zbioru rekordu składowego zbioru, natomiast nazwy poszczególnych pól rekordu muszą od powiadać własnościom zmiennych znakowych (nazwy za kończone znakiem $), zaś przed przesłaniem informacji do rekordu trzeba wszystkie dane przekształcić do postaci znakowei (liczby pojedynczej precyzji wymagają 4 bajtów) Wpisywanie danych do buforu zbioru następuje wyłącznie za pomocą instrukcji:
LSET nazwa-pola = łańcuch
lub
RSET nazwa-pola = łańcuch przy czym różnica działania podanych instrukcji polega na justyfikacji łańcucha w polu w lewo lub w prawo (z obcię ciem nadmiaru!).
Do zamiany wartości numerycznych na łańcuch należy używać funkcji MKSS (dla wartości zmiennoprzecinko wych pojedynczej precyzji, co daje w wyniku 4 bajty). MKI$ (dla wartości całkowitych, co daje w wyniku 2 bajty) oraz MKD$ (dla wartości podwójnej precyzji, co daje w wyniku 8 ba|tów). Funkcji tych należy używać według wzo ru:
LSET nazwa-pola = MKSS(liczba)
Po skompletowaniu zawartości wszystkich pól można je wysłać na dysk instrukcją
PUTn, numer-rekordu Odczyt informacji z rekordu może być wykonany instrukcją
GET n, numer-rekordu Informacje numeryczne, odzyskane z dysku w postaci łań cuchów znakowych, mogą być przedstawione z powrotem w formie liczbowej za pomocą funkcji CVS (dla pojedyn czej precyzji), CVI (dla całkowitych) i CVD (dla podwójnej precyzji). Przy przetwarzaniu zbiorów o dostępie bezpoś rednim, bardzo wygodne są funkcje LOF (podaje aktualną długość zbioru w bajtach) oraz LOC (podaje numer ostat nio użytego rekordu). Długość rekordu nie może być więk sza niż długość bufora, standardowo przyjmowanego w rozmiarze 128 bajtów. Jeśli wymagana jest większa dłu gość rekordu, trzeba uruchamiać interpreter komendą
BASIC S: długość Na zbiorach można z BASIC-a dokonywać następujących dodatkowych (nie omówionych jeszcze) operacji: listować je (FILES), usuwać je (KILL nazwa), zmieniać nazwę (NAME stara AS nowa).
GRAFIKA
Dzięki operacji LOCATE x, y i bogatemu zestawowi znaków semigraficznych można tworzyć rysunki na ekra nie tekstowym. Przy takim traktowaniu x zmienia się od 1 do 25, a y od 1 do 80. Przy pomocy instrukcji
SCREEN kod kolor można przełączyć ekran na grafikę średniej (kod = 1) lub wysokiej rozdzielczości (kod = 2). Kolor może być włą czony (kolor = 1) lub wyłączony (kolor = 0). Przy włączo nym kolorze można wskazać instrukcją
COLOR tło, paleta kolor tła (od 0 czarny do 15 biały) oraz jedną z dwu palet: 0 (kolory: zielony 1, czerwony 2 i brązowy 3 lub 1 (kolory: niebieski 1, fioletowy 2, biały 3).
Narysowanie punktu o współrzędnych x,y odbywa się za pomocą instrukcji:
PSET (x,y), kolor Parametr kolor podaje numer koloru (1, 2 lub 3) w obrębie używanej aktualnie palety, lub gdy go brak — nakazuje usunąć punkt (wstawić kolor tła). Punkt może być wskaza ny w układzie względnym (w stosunku do ostatniego uży tego punktu), wówczas używa się zapisu
PSET STEP (dx, dy), kolor Rysowanie linii od punktu x1, y1 do punktu x2, y2:
LINE (x1,y1)-(x2,y2), kolor Pominięcie parametru kolor powoduje rysowanie kolorem nr 3 z aktualnie używanej palety. Punkt początkowy (x1 ,y1) może być pominięty i wówczas rysowanie odbywa się od
ostatniego punktu. Punkty mogą być definiowane w spo sób względny (STEP dx,dy).
Instrukcja LINE może służyć do narysowania prostoką ta. Punkty wyznaczają wtedy narożniki prostokąta. Oto po stać instrukcji:
LINE (x1,y1)-(x2,y2), kolor, kod przy czym kod określa rodzaj rysowanej figury (prostokąt pusty kod = B lub wypełniony kod = BF). Na grafice można swobodnie nanosić teksty. Rysowanie kół zapewnia instrukcja CIRCLE (x,y), promień, kolor, kąt-pocz, kąt-koń. można pomijać parametry, kolor (przyjmowany 3), kąty (ry sowane całe koło). Gdy wartości kątów ujemne — rysowa ne także promienie do segmentu łuku. Kąty muszą być w radianach (1 radian = 57 stopni). Zamalowywanie wnętrza obszaru: PRINT (x,y), kolor, kolor-brzegu Rysowanie złożonych linii: DRAW łańcuch W łańcuchu podaje się: Mx,y
rysowanie linii do punktu (x,y), NM x,y
rysowanie bez zapamiętywania punktu docelowego (np. snop linii z |ednego miejsca), MB x,y
przemieszczenie bez rysowania. Jeśli x lub y poprzedzo ne znakiem, wówczas są rozumiane jako przyrostowe (względem ostatniego punktu). Aby w miejscu x lub y użyć zmiennej, trzeba .wypisać jej nazwę poprzedzoną znakiem " = " i po niej umieścić ":". Relatywne ruchy można także zadawać kodami: Un (góra), Dn (dół), Ln (lewo), Rn (pra wo), En (prawo-góra), Fn (prawo-dół), Gn (lewo-dół), Hn (lewo-góra). Z tymi kodami można łączyć N (brak zmiany punktu odniesienia) oraz B (bez pisania). W łańcuchu mo żna nakazywać zmianę koloru (Cn, gdzie n = 0, 1, 2, 3), a także można kazać obrócić rysunek o kąt będący wielokro tnością 90 stopni (An). Można też rysunek powiększyć (Sn, gdzie n/4 jest krotnością powiększenia). Można też wstawiać do ciągu zapamiętaną zmienną tekstową za po mocą XA$.
Fragment obrazu można skopiować do tablicy instrukc-
ią:
GET (x1,y1)-(x2,y2), tablica a potem odtworzyć we wskazanym punkcie instrukcją: PUT (x,y), tablica
ZAPIS OBRAZU NA DYSKIETCE
1 DEF SEG = HB800 2BSAVE "SS",0, H4000
odczyt z dyskietki
1 DEF SEG = HB800
2 BLOAD SS .0
DŹWIĘKI
Krótki ton: BEEP
ton melodyjny:
SOUND częstotliwość, czas częstotliwość w Hz, natomiast czas w taktach (18,2 taktu na sekundę).
PROGRAMOWANIE MELODII
PLAY łańcuch
w łańcuchu podaje się nuty (A do G z ewentualnymi zna kami, +, -; pausa oznaczana jest P), czasy trwania (poda wane po nucie lub zadane dla całej sekwencji w postaci Ln, gdzie n jest 1 dla całej nuty, 2 dla połówki itd.). Można zadać tempo (Tn) styl (MN — normalny, ML — legato, MS — stacatto). Jeśli podczas grania muzyki komputer ma wy: konywać inne czynności trzeba podać MB. Kopiowanie wcześniej zdefiniowanego ciągu: podstawić go pod zmienną tekstową (na przykład A$) i potem wpisać XA$;
Przedstawiony wyżej przegląd możliwości Interpretera języka BASIC dla komputera IBM PC nie może oczywiście być uznany za kompletny. Jednak nawet te informacje, które zawarto w zestawieniu pozwalają stwierdzić, że język BASIC jest w komputerach typu IBM PC bardzo użytecz nym, a powszechnie niedocenianym narzędziem. Warto więc, lak się wydaje, poznać ten język i stosować go — według potrzeb.
(Opracowano na podstawie własnych doświadczeń, a także w oparciu o książkę: L J. Goldstein, M. Goldstein: IBM PC — An introduction to the Operating System, BA SIC Programming and Applications. Second Edition Revi- sed and Enlarged. A Prentice-Hall Publishing and Commu nications Company, Bowie, 1986).

Kierownik Zakładu Biocybernetyki Wicedyrektor Instytutu Automatyki Akademii Górniczo-Hutniczej w Krakowie

Prof. dr hab. inż. Ryszard Tadeusiewicz