Indeks | English version |
Spacja ma kod $00.
$80 SIN $90 LEN( $A0 FOR $B0 VAC $C0 DEFM $81 COS $91 VAL( $A1 NEXT $B1 SET $C1 SAVE $82 TAN $92 MID( $A2 GOTO $B2 PUT $C2 LOAD $83 ASN $93 KEY $A3 GOSUB $B3 GET $C3 VER $84 ACS $94 CSR $A4 RETURN $B4 $C4 LIST $85 ATN $95 TO $A5 IF $B5 $C5 RUN $86 LOG $96 STEP $A6 PRINT $B6 $C6 CLEAR $87 LN $97 THEN $A7 INPUT $B7 $C7 $88 EXP $98 $A8 MODE $B8 $C8 $89 SQR $99 $A9 STOP $B9 $C9 $8A INT $9A $AA END $BA $CA $8B FRAC $9B $AB $BB $CB $8C ABS $9C $AC $BC $CC $8D SGN $9D $AD $BD $CD $8E RND( $9E $AE $BE $CE $8F RAN# $9F $AF $BF $CF
Każda zmienna (z wyjątkiem specjalnej zmiennej łańcuchowej $) zajmuje 8 bajtów (czyli 16 4-bitowych słów) w pamięci RAM. Słowo najmniej znaczące umieszczane jest pod niższym adresem.
Wartość 00 00 00 00 00 00 00 00 reprezentuje zarówno zmnienną numeryczną 0 jak i pusty łańcuch. Instrukcja VAC inicjuje wszystkie zmienne tą wartością. Obie poniższe instrukcje wpisują tą wartość do zmiennej A lub A$.
A$ = 0 A$ = ""
Zmienna łańcuchowa może przechowywać do 7 znaków.
Początkowe 7 bajtów (czyli 14 4-bitowych słów) przechowuje kody znaków.
Wolne miejsce wypełnione jest wartością 00.
Piętnaste 4-bitowe słowo jest nie używane i zawiera 0.
Ostatnie, szesnaste słowo zawiera długość łańcucha (wartość różna od
zera).
W ten sposób można odróżnić zmienną łańcuchową od numerycznej, gdzie
ta wartość wynosi 0.
Przykłady:
A$ = "ABMN" 02 12 C2 D2 00 00 00 04 A$ = "1234567" 11 21 31 41 51 61 71 07
Zmienne numeryczne są przechowywane jako zmiennoprzecinkowe,
spakowane liczby dziesiętne.
Pierwsze dwa 4-bitowe słowa zawierają dwie ostatnie cyfry wykładnika,
najpierw cyfra mniej znacząca.
Wykładnik zapisany jest w kodzie z przesunięciem, tzn. do wartości
wykładnika dodane jest przesunięcie 100, dzięki czemu wynik jest
zawsze liczbą dodatnią.
Trzecie 4-bitowe słowo zawiera pierwszą cyfrę wykładnika oraz znak
mantysy:
wartość = pierwsza_cyfra_wykładnika + 5 * znak_mantysy
Lista możliwych kombinacji wartości:
0 - mantysa dodatnia, wykładnik ujemny 1 - mantysa dodatnia, wykładnik dodatni 5 - mantysa ujemna, wykładnik ujemny 6 - mantysa ujemna, wykładnik dodatni
Następnych dwanaście 4-bitowych słów zawiera mantysę w zakresie
1.00000000000 do 9.99999999999, najpierw cyfra najmniej znacząca.
Ostatnie, szesnaste 4-bitowe słowo zawiera 0 jako znacznik zmiennej
numerycznej (w odróżnieniu od zmiennej łańcuchowej, gdzie ta wartość
jest różna od zera).
Przykłady:
A = 1 00 10 00 00 00 00 00 10 (1.00000000000E00) A = -1 00 60 00 00 00 00 00 10 (-1.00000000000E00) A = 100 20 10 00 00 00 00 00 10 (1.00000000000E02) A = -100 20 60 00 00 00 00 00 10 (-1.00000000000E02) A = PI 00 10 63 56 29 51 41 30 (3.14159265360E00) A = -PI 00 60 63 56 29 51 41 30 (-3.14159265360E00) A = 0.01 89 00 00 00 00 00 00 10 (1.00000000000E-02) A = -0.01 89 50 00 00 00 00 00 10 (-1.00000000000E-02) A = 1/3 99 03 33 33 33 33 33 30 (3.33333333333E-01) A = -1/3 99 53 33 33 33 33 33 30 (-3.33333333333E-01)
Zmienna łańcuchowa $ może przechować do 30 znaków.
Łańcuch umieszczony w pamięci jest poprzedzony długością łańcucha i
zakończony znacznikiem $FF.
Przykład:
$ = "ABCDEFG" 70 02 12 22 32 42 52 62 FF
Wiersz programu BASIC rozpoczyna się numerem wiersza przechowywanym
w 2 bajtach (czterech 4-bitowych słowach), kończy się znacznikiem $FF.
Słowa kluczowe języka BASIC są przechowywane za pomocą jednobajtowych
kodów, wartości numeryczne jako ciąg znaków, dwukropki rozdzielające
kilka poleceń języka BASIC w jednym wierszu jako $FE.
Przykład:
1234 FOR I=1 TO 49 STEP 1: NEXT I 43 21 0A 82 C0 11 59 41 91 69 11 EF 1A 82 FF
Za każdym razem gdy wykonywana jest instrukcja FOR, na stosie FOR tworzona jest poniżej opisana struktura danych. Pozycja stosu jest zwalniana przez zaznaczanie jej za pomocą $F, gdy pętla iteracyjna zostanie zakończona. Dzięki poświęceniu jednego 4-bitowego słowa struktury na znacznik "lokacja wolna/zajęta" zbędny staje się wskaźnik stosu. Zamiast tego stos jest przeszukiwany w poszukiwaniu pierwszej wolnej/zajętej lokacji.
2 słowa dwie ostatnie cyfry wykładnika zmiennej TO 1 słowo pierwsza cyfra wykładnika i znak zmiennej TO 10 słów mantysa zmiennej TO 2 słowa indeks zmiennej sterującej pętli FOR (00 = zmienna A, 10 = zmienna B i tak dalej) 1 słowo F - lokacja wolna, 2 - lokacja zajęta 2 słowa dwie ostatnie cyfry wykładnika zmiennej STEP 1 słowo pierwsza cyfra wykładnika i znak zmiennej STEP 10 słów mantysa zmiennej STEP 3 słowa adres pierwszego znaku po instrukcji FOR, jest to miejsce gdzie skacze pętla iteracyjna NEXT
Przykład:
1234 FOR I=1 TO 49 STEP 1: NEXT I 10 wartość zmiennej TO = 4.90000000E01 1 mantysa i wykładnik dodatnie 0000000094 80 indeks zmiennej sterującej I 2 zaznaczona zajęta lokacja 00 wartość zmiennej STEP = 1.0000000E00 1 mantysa i wykładnik dodatnie 0000000001 662 wskazuje dwukropek po instrukcji STEP 1
Wykonanie instrukcji GOSUB powoduje umieszczenie na stosie opisanej poniżej struktury danych. Instrukcja RETURN zwalnia lokację na szczycie stosu przez zaznaczenie jej słowem $F. Podobnie jak dla FOR nie jest używany wskaźnik stosu.
3 słowa adres pierwszego znaku po instrukcji GOSUB (miejsce powrotu dla RETURN) 1 słowo F - lokacja wolna, 3 - lokacja zajęta
$0000-$007F 128 słów bufor ogólnego przeznaczenia $0080-$00FF 128 słów bufor ogólnego przeznaczenia $0100-$010F 16 słów zmienna ANS $0110-$011F 16 słów RAN# seed, początkowo 0.43429448190 $0120-$012F 16 słów pozycja znaku dla funkcji MID( $0132-$0133 2 słowa dana wysyłana do drukarki $0140-$01BF 128 słów stos dla FOR, mieści 4 wpisy, rośnie w górę $01C0-$01DF 32 słowa stos dla GOSUB, mieści 8 wpisów, rośnie w górę $01E0-$021D 64 słowa specjalna zmienna łańcuchowa $ $0220-$0E5F 3136 słów programy BASIC $0E60-$0E6F 16 słów zmienna Z $0E70-$0E7F 16 słów zmienna Y . . . . . . . . . $0FD0-$0FDF 16 słów zmienna C $0FE0-$0FEF 16 słów zmienna B $0FF0-$0FFF 16 słów zmienna A
Plik składa się z segmentu nazwy oraz jednego lub kilku segmentów danych.
Segment nazwy rozpoczyna się bajtem:
$Dx (plik utworzony za pomocą SAVE)
lub $Ex (plik utworzony za pomocą PUT)
lub $Fx (plik utworzony za pomocą SAVE A),
gdzie x jest długością nazwy pliku (do 8 znaków),
lub $F gdy plik bez nazwy.
Kolejnych 8 bajtów zawiera znaki nazwy pliku.
Ostatnie 2 bajty zawierają numer pierwszego wiersza programu w języku
BASIC zapisanego poleceniem SAVE.
Segment danych rozpoczyna się bajtem $02, kończy bajtem $F0 (gdy jest to ostatni segment) lub $F1 (gdy nastąpią jeszcze dalsze segmenty). Ilość bajtów danych pomiądzy nimi nie może przekroczyć 63, ponieważ zawartość jest wczytywana do 64-bajtowego bufora pod adresem $0000. To ograniczenie nie dotyczy plików zapisanych przez SAVE A, który zawiera tylko pojedynczy segment danych.
Plik zawierający program w języku BASIC składa się po prostu z ciągu następujących po sobie wierszy. Gdy plik został utworzony za pomocą polecenia SAVE A, każdy program jest zakończony bajtem $E0. Pusty program zawiera tylko bajt $E0.
Plik zapisany poleceniem PUT składa się z ciągu wartości zmiennych rozdzielonych znacznikiem $FF. Nazwy zmiennych nie są zapisywane.
1. Program zapisany poleceniem SAVE "PROG" Segment nazwy: $D4 $2F $31 $2E $26 $07 $FF $10 $FF $10 $00 Segment danych: $02 $10 $00 $A0 $28 $0C $11 $95 $11 $10 $FF 10 FOR I=1 TO 10 $20 $00 $A6 $28 $FF 20 PRINT I $30 $00 $A1 $28 $FF 30 NEXT I $F0 2. Zmienna $ i zmienna numeryczna zapisana poleceniem PUT "*-+" $,A Segment nazwy: $E3 $03 $02 $01 $07 $09 $5D $20 $FF $00 $F8 Segment danych: $02 $0D $11 $12 $13 $14 $15 $16 $17 $="1234567890ABC" $18 $19 $10 $20 $21 $22 $FF $00 $01 $00 $00 $00 $00 $00 $00 $00 $01 $00 $00 $00 $00 $00 $00 $FF $00 $01 $36 $65 $92 $15 $14 $03 A=3.14159265360 $F0 3. Programy zapisane poleceniem SAVE A "*" Segment nazwy: $F1 $03 $07 $FF $00 $00 $00 $00 $07 $00 $68 Segment danych: $02 $01 $00 $A6 $FF $E0 P0: 1 PRINT $10 $00 $A2 $11 $10 $FF $E0 P1: 10 GOTO 10 $E0 $E0 $E0 $E0 $E0 $E0 $E0 $E0 $F0