Wersja 0.1 very-preview-alpha MultiBASIC-a dostępna jest tu:
Plik ARC: http://drac030.krap.pl/mbi.arc
Plik ATR: http://drac030.krap.pl/mbi.zip
Wymagania: procesor 65c816, DracOS (zob. http://drac030.krap.pl).
Nie chciało mi się robić wersji relokowalnej, więc ta jest nierelokowalna, ładuje się od $2000. Oczywiście final będzie się relokował, żeby wykorzystać pamięć do maximum (pod SDX nawet do 4k więcej). Dodatkowej pamięci na razie nie używa. W ogóle przez ostatni miesiąc nie zrobiłem wielkich postępów, ale do QuaST-a może jeszcze coś dopiszę. Ta wersja nie ma prekompilowanych pętli, więc proszę się nie dziwować, że nie działa szybko. Nie ma też wszystkich instrukcji Turbo BASIC-a (brak jest m.in. PROC, EXEC, ENDPROC, #, GO# - bo wymagają prekompilacji, której nie ma; brak tez niektórych funkcji, np. INSTR(), UINSTR() i czegoś tam jeszcze). Ogólnie niezaimplementowane tokeny będą powodować błąd nr 17.
To jest, powtarzam, preview, wiele się jeszcze może zmienić, z niektórymi słowami kluczowymi włącznie. Jest też parę niedoróbek, które zauważyłem przed chwilą, tj. np. DIR nie daje się przerwać klawiszem break, a instrukcja ENDWHILE nie działa. Poprawię to następnym razem, do testów wystarczy tak jak jest.
Przy testach proszę zwrócić uwagę, czy wszystkie słowa kluczowe dają się wpisać, innymi słowy czy nie ma jakichś porażek w kontroli składni. No i w ogóle poza tym.
-----
Jeszcze jedno, co się może przydać przy zabawie interpreterem:
Instrukcje SET i SYS MultiBASIC-a
Składnia:
SET index,value
value=SYS(index)
'index' ma wartość z zakresu od zera do (na razie) 23. Określa numer wewnętrznej zmiennej interpretera, której wartość będzie zmieniana lub odczytywana. Znaczenie pierwszych 15 zmiennych jest - albo będzie w przyszłości - zgodne z BASIC XE.
0 - reakcja na klawisz Break
0 - standardowa
1 - następuje "Error 1"
2 - następuje "Error 128"
128 - wciśnięcie Break jest ignorowane
SET 0,2 to to samo, co *B+
1 - ilość pozycji tabulacji, jakiej przeskoczenie powoduje przecinek w instrukcji PRINT. W bieżącej wersji nie można tu ustawić wartości mniejszej niż 3. Kiedyś to poprawię.
2 - kod ASCII znaku wyswietlanego przy INPUT. Normalnie $3f ('?').
3 - niezaimplementowane
4 - niezaimplementowane
5 - 1 (wartość domyślna) powoduje, że słowa kluczowe mogą być wpisywane małymi literami; 0 ustawia zgodność z Atari BASIC w tym względzie (tylko duże litery).
6 - wyłącza (1) i włącza (0) słowne objaśnienie w komunikacie błędu; domyślna wartość to 0.
7 - niezaimplementowane
8 - 1 (wartość domyślna) powoduje, że funkcja USR wstawia na szczyt stosu liczbę przyjętych argumentów (tak jak w Atari BASIC); ustawienie zera blokuje wstawienie tej wartości na stos.
9 - niezaimplementowane
10 - niezaimplementowane
11 - niezaimplementowane
12 - włącza (1) i wyłącza (0) wcięcia listingu; domyślna wartość to 1. SET 12,1 robi to samo co *L+.
13 - włącza (1) i wyłącza (0) obliczanie liczb hex przez funkcję VAL(). Domyślna wartość to 1.
14 - niezaimplementowane
15 - niezaimplementowane
--------------------
16 - liczba spacji, jakie dodawane są do wiersza listingu celem uzyskania wcięcia; domyślną wartością jest 2.
17 - 0 powoduje, że linia zaczynająca się od instrukcji REM listowana jest bez wcięcia, nawet w środku pętli; 1 powoduje normalne wcięcie (jak w Turbo BASIC-u XL); domyślną warotścią jest 0.
18 - 0 powoduje, że linia zaczynająca się od separatora Turbo BASIC-a XL (instrukcja "--") listowana jest bez wcięcia, nawet wewnątrz pętli; 1 powoduje normalne wcięcie (jak w Turbo BASIC-u); domyślną wartością jest 0.
19 - 0 (wartość domyślna) powoduje, że numery błędów wypisywane są jako liczby ujemne; 1, jako dodatnie;
20 - wartość ICAX2 dla funkcji OPEN wywoływanej przez instrukcję DIR. Domyślna wartość to 0 (krótki listing), po wykryciu SpartaDOS automatycznie ustawiana na 128 (długi listing).
21 - 1 włącza listowanie w stylu BASIC-a XE; 0 jest wartością domyślną
22 - początkowa wartość numeru linii dla instrukcji AUTO (10)
23 - początkowy krok dla instrukcji AUTO (10)