!!!!!!! Mircosoft Basic czytelnia Try2emu

Mircosoft Basic

Ostatnim omawianym interpreterem BASIC-a jest napisany najwcześniej, bo już w 1981 roku. Microsoft BASIC. Jest on jednocześnie najmniej popularnym interpreterem BASIC-a dla komputerów Atari.

 

Microsoft BASIC jest kompatybilny w jedną stronę z Atari BASIC. Dotyczy to jednak tylko programów napisanych w Atari BASIC-u i zapisanych na dyskietce lub kasecie instrukcją LIST. Programy zapisane przez SAVE lub CSAVE nie są rozumiane przez Microsoft BASIC z powodu użycia innych tokenów. Poważną wadą jest pozostawienie dla użytkownika tylko 21022 bajtów pamięci (przy pracy ze stacją dysków). Interpreter Microsoft jest nieco szybszy (około 1,5 raza), a znacznie przewyższa Atari BASIC w obliczeniach numerycznych (około 5 razy szybszy). Zestaw dostępnych instrukcji jest znacznie większy, lecz pisanie programów utrudnia konieczność wpisywania słów kluczowych bez skrótów i z odstępami.

Uwzględniając powyższe uwagi należy stwierdzić, że Microsoft BASIC powinien być używany jedynie do programów obliczeniowych, w których można efektywnie wykorzystać jego możliwości (przede wszystkim tablice wielowymiarowe i liczby podwójnej precyzji)

INSTRUKCJE REDAKCYJNE

Uruchamianie programów jest bardzo łatwe dzięki dużej liczbie instrukcji pomocniczych. Błędy są sygnalizowane meldunkami określającymi ich rodzaj, a nie tylko kod. Niestety, poprawność linii programu nie jest sprawdzana po jej wprowadzeniu, lecz dopiero podczas wykonywania.

AUTO[m,n]

Automatyczne numerowanie linii programu od linii o numerze m z przyrostem n. Niepodanie wartości jest równoważne instrukcji AUTO 100,10. Jeżeli w pamięci jest już jakiś program, to numeracja rozpoczyna się od linii o numerze większym o n od najwyższego istniejącego numeru linii. Naciśnięcie RETURN po wyświetleniu numeru linii powoduje opuszczenie trybu automatycznej numeracji.

RENUM[k[,m[,n]]]

Przenumerowanie linii programu: k — numer pierwszej „nowej” linii, m — numer pierwszej „starej” linii, n — krok numeracji. Wartościami standardowymi są: k = 10, m = 0, n = 10.

DEL[m][-[n]]

Usunięcie linii programu od linii m lub od linii 0 do linii n lub do końca.

ERROR n

Powoduje wystąpienie w programie błędu o kodzie n. Instrukcja ta jest bardzo użyteczna przy testowaniu programu (pamięta] o jej późniejszym usunięciu).

TRON

Włącza śledzenie programu: przed wykonaniem każdej linii programu wyświetlany jest jej numer.

TROFF

Wyłącza siedzenie programu.

DEKLARACJE

DEFINT zmienna [,zmienna ...]

Deklaracja zmiennej całkowitej. Zamiast deklaracji można na końcu nazwy zmiennej umieścić znak % (np. A% zamiast DEFINT A, NUM). Liczby całkowite mają zakres od -32768 do +32767.

DEFSNG zmienna [,zmienna ...]

Deklaracja zmiennej pojedyńczej precyzji. Można ją pominąć, gdyż każda zmienna nie mająca na końcu nazwy jednego ze znaków %, # lub $ jest traktowana jako zmienna pojedyńczej precyzji (np. A, NUM zamiast DEFSNG A, NUM). Liczby pojedynczej precyzji mają zakres od -1.71041E+38 do -2.938737E-39 i od +2.938737E-39 do +1.71041E+38

DEFDBL zmienna [,zmienna ...]

Deklaracja zmiennej podwójnej precyzji. Zamiast deklaracji można na końcu nazwy zmiennej umieścić znak # (np. A#, NUM# zamiast DEFDBL A, NUM). Liczby podwójnej precyzji mają taki sam zakres jak liczby pojedynczej precyzji, lecz większą ilość cyfr znaczących.

DEFSTR zmienna [,zmienna ...]

Deklaracja zmiennej tekstowej. Zamiast deklaracji można na końcu nazwy zmiennej umieścić znak $ (np. A$, NUMS zamiast DEFSTR A, NUM).

DEFFN funkcja (zmienna[, zmienna])=wyr.arytm.

Deklaracja funkcji użytkownika. Np. DEFFN A(X,Y) = SQR (X*X + Y*Y).

DIM zmienna (m[,n...])

Deklaracja tablicy liczbowej lub tekstowej. Maksymalny wymiar oraz liczba elementów tablicy (także tekstowej) zależy od wielkości dostępnej pamięci (np. DIM A$(2,3,10,5),B(3,3,3,2,2) itd.). Proste (jednowymiarowe) zmienne tekstowe nie wymagają deklarowania instrukcją DIM (wystarczy użycie nazwy np. T$ lub deklaracja DEFSTR T).

COMMON ALL lub COMMON zmienna [,zmienna...]

Instrukcja zachowująca wartości wszystkich (ALL) lub wymienionych zmiennych w różnych programach, tzn. gdy jeden program jest wywoływany przez drugi instrukcją RUN „D: nazwa” lub RUN „C:”.

INSTRUKCJE PROGRAMOWE

RUN n

Uruchomienie programu od linii o numerze n. Oprócz tego możliwe są wszystkie warianty użycia RUN stosowane w Atari BASIC.

IF war.log THEN instr.1 [ELSE instr.2]

Rozbudowana instrukcja IF/THEN. Gdy warunek logiczny (war.log.) jest spełniony, wykonywana jest instrukcja instr.1, w przeciwnym razie instr.2. Jeżeli ELSE instr.2 zostało opuszczone, to program przechodzi do następnej linii.

ON ERROR n

Skok do linii o numerze n w przypadku wystąpienia błędu podczas wykonywania programu.

RESUME [n/ /NEXT]

Umieszczona na końcu procedury obsługi błędu (wywoływanej przez ON ERROR) instrukcja RESUME przekazuje sterowanie programu do linii o numerze n (RESUME n), do linii, w której pojawił się błąd (RESUME) lub do linii następującej po linii, w której pojawił się błąd (RESUME NEXT).

RANDOMIZE n

Użycie tej instrukcji przed RND powoduje generowanie za każdym razem takiego samego ciągu liczb losowych (n jest wartością początkową generatora liczb losowych).

MOVE (m,n,k)

Przemieszczenie bloku danych o długości k bajtów z obszaru pamięci rozpoczynającego się od adresu m do obszaru rozpoczynającego się od adresu n.

CLEAR

Instrukcja zerowania zmiennych numerycznych i tekstowych — odpowiada instrukcji CLR w Atari BASIC.

AFTER n GOTO m

Powoduje zatrzymanie wykonywania programu na okres n/50 sekund, a następnie wykonanie skoku do linii o numerze m.

OPTION BASE 0 lub OPTION BASE 1

Określa najmniejszy indeks tablicy. Np. sekwencja OPTION BASE 1:DIM A(3) powoduje zadeklarowanie tablicy trzyelementowej (od A(1) do A(3)), a sekwencja OPTION BASE 0:DIM A(3) powoduje zadeklarowanie tablicy czteroelementowej (od A(0) do A(3)). Może być użyta w programie tylko jeden raz.

OPTION CHR1 lub OPTION CHR2

Rezerwuje obszar pamięci o wielkości 1024 (CHR1) lub 2048 (CHR2) bajtów dla zestawu znaków zaprojektowanego przez użytkownika. Kasuje się instrukcją OPTION CHR0.

OPTION PLM1 lub OPTION PLM2

Rezerwuje obszar pamięci dla grafiki graczy i pocisków (P/MG). Przy rozdzielczości jednowierszowej należy użyć PLM1 (2048 bajtów), a przy dwuwierszowej — PLM2 (1024 bajty). Kasowanie instrukcją OPTION PLM0.

OPTION RESERVE n

Rezerwuje obszar bajtów do wykorzystania przez użytkownika, np. na procedury w języku maszynowym. Każda następna instrukcja OPTION RESERVE kasuje działanie poprzedniej.

INSTRUKCJE GRAFICZNE

CLS [n]

Czyszczenie ekranu i wpisanie do rejestru koloru tła wartości n. W Atari BASIC odpowiada to instrukcjom? CHR$(125):POKE 712,n.

AT (x,y)

Występuje w instrukcjach PRINT, INPUT i GET i określa miejsce zapisu lub odczytu. Liczby w nawiasie określają współrzędne punktu na ekranie lub numer sektora i bajtu na dyskietce.

TAB (n)

Ustawia kursor w kolumnie o numerze n w aktualnie pisanej linii lub w następnej, jeżeli wartość n jest mniejsza od bieżącej pozycji kursora. Użycie dozwolone tylko w instrukcji PRINT.

SPC n

Użyta z instrukcją PRINT powoduje wyświetlenie n spacji a użyta z PRINT # — zapisanie n spacji na urządzenie zewnętrzne.

PLOT x1,y1 [TO x2,y2] [TO ...]

Rysuje na ekranie punkt o współrzędnych x1,y1 i odcinek do punktu o współrzędnych x2,y2 oraz ewentualnie dalsze odcinki. Instrukcji PLOT X1,y1 TO x2,y2 odpowiada w Atari BASIC sekwencja PLOT x1 ,y1: DRAWTO x2,y2.

FILL x1,y1 TO x2,y2

Wypełnia kolorem obszar na ekranie ograniczonym z góry i z dołu punktami o podanych współrzędnych. Z boku wypełniany obszar musi być ograniczony narysowanymi wcześniej odcinkami.

PRINT USING „format”; zmienna [,zmienna...]

Określenie formatu wyświetlanej informacji. Ciąg „format” zawiera znaki oznaczające sposób wyświetlenia:

  • #  znak zmiennej (cyfra lub litera)
  • .  kropka dziesiętna
  • ,  przecinek
  • +  przed liczbą dodatnią +, przed ujemną - -  przed liczbą ujemną -,
  • liczba dodatnia bez znaku $ — znak dolara jako pierwszy

Np. PRINT USING „##,###.##”, 1234,567.8 da w efekcie: 1,234.00 567.80

INSTRUKCJE WEJŚCIA/WYJŚCIA

MERGE „C:” lub MERGE „D: nazwa —pliku”

Wczytuje program z podanego urządzenia zewnętrznego i dołącza go do znajdującego się już w pamięci. Wczytywany program musi być zapisany instrukcją LIST (jak przy ENTER w Atari BASIC).

VERIFY „C:” lub VERIFY „D: nazwa —pliku”

Porównuje program zapisany na kasecie lub dyskietce z programem zawartym w pamięci (weryfikuje zapis).

NAME „D: stara — nazwa” TO „nowa — nazwa”

Zmienia nazwę pliku zapisanego na dyskietce.

KILL „D:nazwa — pliku”

Usuwa z dyskietki plik (program lub dane) o podanej nazwie.

LOCK „D:nazwa — pliku”

Zabezpiecza plik dyskowy o podanej nazwie. Zabezpieczenie chroni przed skasowaniem, zmianą nazwy i zapisaniem innego pliku o tej samej nazwie, nie chroni przed skasowaniem pliku podczas formatowania dyskietki.

UNLOCK „D:nazwa — pliku”

Odbezpiecza plik dyskowy o podanej nazwie.

OPEN #Fn, „urz: [nazwa — pliku]” Operacja

Otwarcie kanału o numerze n do odsługi urządzenia zewnętrznego o kodzie urz. Dla stacji dysków konieczne jest także podanie nazwy pliku. Kody urządzeń są takie same jak w Atari BASIC. Rodzaj przeprowadzanej operacji musi być podany przy pomocy jednego z czterech określeń:

  • INPUT — operacja wejścia (odczyt),
  • OUTPUT — operacja wyjścia (zapis),
  • UPDATE — operacja wejścia/wyjścia (wymiana danych),
  • APPEND — operacja dołączenia (dopisanie na końcu pliku).

INPUT [# n] [„tekst”] [,AT (x,y);] zmienna [.zmienna...]

Wprowadzenie rekordu (ciągu danych zakończonego znakiem RETURN) z kanału o numerze n, a gdy n nie zostało podane, to z klawiatury. Jeżeli został podany „tekst”, to jest on wyświetlany na ekranie, w przeciwnym wypadku wyświetlany jest znak „?”. Przy wprowadzaniu danych z dyskietki można podać konkretny sektor i bajt (zob.. opis instrukcji AT).

FUNKCJE

RND(n)

Podaje liczbę losową. Dla n = 0 jest to liczba rzeczywista z przedziału <0,1), a dla n>0 — liczba całkowita z przedziału (o,n>. Podana liczba n musi być zerem lub liczbą naturalną.

VARPTR (nazwa — zmiennej)

Podaje adres początkowy zmiennej w pamięci komputera (jak ADR w Atari BASIC).

POS(0)

Podaje numer kolumny ekranu, w której znajduje

się kursor.

SCRM(x,y)

Podaje kod znaku (w trybach tekstowych) lub numer koloru (w trybach bitowych) znajdującego się w punkcie ekranu o podanych współrzędnych.

EOF(n)

Przybiera wartość -1, jeżeli został osiągnięty koniec pliku w kanale o numerze n oraz 0 w przeciwnym przypadku.

ERR

Podaje kod błędu, który wystąpił (1 — bez błędu).

ERL

Podaje numer linii, w której wystąpił błąd.

TIME

Podaje zawartość komórek zegara systemowego — odpowiada to wrażeniu PEEK (20)+256*PEEK(19) + 65536*PEEK(18).

TIMES

Podaje czas w/g zegara systemowego w formacie „hh:mm:ss”

INKEY$

Podaje znak ASCII odpowiadający ostatnio naciśniętemu klawiszowi.

LEFT$(t$,n)

Podaje część ciągu t$ o długości n znaków rozpoczynająca się od pierwszego znaku.

RIGHT$(t$,n)

Podaje część ciągu t$ o długości n znaków kończącą się na ostatnim znaku.

MID$(t$,m,n)

Podaje część ciągu t$ o długości n znaków rozpoczynającą się od m-tego znaku.

INSTR([n,]t1$,t2$)

Podaje pozycję pierwszego znaku zmiennej tekstowej t2$ w zmiennej tekstowej t$1 lub 0, gdy t2$ nie jest częścią t1$. Przeszukiwanie ciągu t1$ rozpoczyna się od n-tego znaku.

STRING$(n,t$/m)

Tworzy ciąg złożony z n powtórzeń ciągu t$ lub znaku o kodzie ASCII m.

m AND n

Podaje bitowy iloczyn logiczny stałych lub zmiennych liczbowych m i n. W wyrażeniach logicznych działa jak w Atari BASIC.

m OR n

Podaje bitową sumę logiczną stałych lub zmiennych liczbowych m i n. W wyrażeniach logicznych działa jak w Atari BASIC.

NOT n

Podaje bitową negację logiczną stałej lub zmiennej liczbowej n. W wyrażeniach logicznych działa jak w Atari BASIC.

m XOR n

Podaje bitową alternatywę logiczną (EXCLUSIVE-OR) stałych lub zmiennych liczbowych m i n.

OBJAŚNIENIA

W standardzie Microsoft BASIC nie występują (zostały usunięte lub zastąpione innymi) następujące instrukcje: BYE, CLR, COM, DEG, DRAWTO, ENTER, LOCATE, LPRINT, POP, POSITION, RAD, TRAP, XIO oraz następujące funkcje: ADR, CLOG, PADDLE, PTRIG, STRIG.

INSTRUKCJE I FUNKCJE USUNIĘTE

W opisie instrukcji i funkcji zastosowane zostały następuiące symbole:

[..] — użycie możliwe, ale niekonieczne (zależnie od potrzeby);

../.. — należy użyć jeden z dwóch wariantów;

... — dozwolona dowolna ilość powtórzeń elementów;

k,m,n,x,y — stałe lub zmienne liczbowe; t$,t1$,t2$ — stałe lub zmienne tekstowe;

„tekst” — stała tekstowa;

zmienna — zmienna liczbowa lub tekstowa.

Wojciech Zientara