Tokeny Atari BASIC
From Atariki
| Wersja z dnia 20:58, 29 gru 2006 KMK (Dyskusja | wkład) ← Previous diff | Aktualna wersja KMK (Dyskusja | wkład) | ||
| Linia 1: | Linia 1: | ||
| - | == Tokeny Atari BASIC == | + | Program w [[BASIC]]-u przechowywany jest w pamięci oraz w plikach BAS jako zbiór symboli, tak zwanych "[[token]]ów". Dzielą się one na kilka grup w zależności od położenia w programie. Grupy te to: | 
| - | + | ||
| - | Program w BASIC-u przechowywany jest w pamięci oraz w plikach BAS jako zbiór symboli, tak zwanych "tokenów". Dzielą się one na kilka grup w zależności od połozenia w programie. Grupy te to: | + | |
| * Numery wierszy programu. Numer oznaczający początek wiersza jest zakodowany w postaci dwubajtowej wartości całkowitej z zakresu od 0 do 32767. Wartość ta znajduje się na początku każdej linii programu. W pozostałych miejscach programu (np. jako numer po instrukcji GOTO) wartość ta zapisana jest w postaci zmiennoprzecinkowej. | * Numery wierszy programu. Numer oznaczający początek wiersza jest zakodowany w postaci dwubajtowej wartości całkowitej z zakresu od 0 do 32767. Wartość ta znajduje się na początku każdej linii programu. W pozostałych miejscach programu (np. jako numer po instrukcji GOTO) wartość ta zapisana jest w postaci zmiennoprzecinkowej. | ||
| Linia 127: | Linia 125: | ||
| <tr><td>$39</td><td>57</td><td>nawias otwierający wymiar zmiennej tablicowej</td></tr> | <tr><td>$39</td><td>57</td><td>nawias otwierający wymiar zmiennej tablicowej</td></tr> | ||
| <tr><td>$3a</td><td>58</td><td>nawias otwierający argumenty funkcji</td></tr> | <tr><td>$3a</td><td>58</td><td>nawias otwierający argumenty funkcji</td></tr> | ||
| - | <tr><td>$3b</td><td>59</td><td>nawiast otwierający wymiar zmiennej tekstowej</td></tr> | + | <tr><td>$3b</td><td>59</td><td>nawias otwierający wymiar zmiennej tekstowej</td></tr> | 
| <tr><td>$3c</td><td>60</td><td>przecinek w zmiennej tablicowej</td></tr> | <tr><td>$3c</td><td>60</td><td>przecinek w zmiennej tablicowej</td></tr> | ||
| <tr><td>$3d</td><td>61</td><td>STR$</td></tr> | <tr><td>$3d</td><td>61</td><td>STR$</td></tr> | ||
Aktualna wersja
Program w BASIC-u przechowywany jest w pamięci oraz w plikach BAS jako zbiór symboli, tak zwanych "tokenów". Dzielą się one na kilka grup w zależności od położenia w programie. Grupy te to:
- Numery wierszy programu. Numer oznaczający początek wiersza jest zakodowany w postaci dwubajtowej wartości całkowitej z zakresu od 0 do 32767. Wartość ta znajduje się na początku każdej linii programu. W pozostałych miejscach programu (np. jako numer po instrukcji GOTO) wartość ta zapisana jest w postaci zmiennoprzecinkowej.
- Offset do następnej linii programu. Jest to bajt występujący zaraz po numerze wiersza.
- Offset do następnej instrukcji - jest to jeden bajt występujący na początku każdej instrukcji.
- Tokeny instrukcji
- Tokeny operatorów i funkcji
- Tokeny zmiennych
Tokeny instrukcji
Token instrukcji to ośmiobitowa liczba o wartości z zakresu teoretycznie od 0 do 255, w praktyce od 0 do 55; konstrukcja interpretera wyklucza zastosowanie tokenów instrukcji o wartości ponad 127. Ich wartości przedstawia poniższa tabela:
| Hex | Dec | Instrukcja | 
| $00 | 0 | REM | 
| $01 | 1 | DATA | 
| $02 | 2 | INPUT | 
| $03 | 3 | COLOR | 
| $04 | 4 | LIST | 
| $05 | 5 | ENTER | 
| $06 | 6 | LET | 
| $07 | 7 | IF | 
| $08 | 8 | FOR | 
| $09 | 9 | NEXT | 
| $0a | 10 | GOTO | 
| $0b | 11 | GO TO | 
| $0c | 12 | GOSUB | 
| $0d | 13 | TRAP | 
| $0e | 14 | BYE | 
| $0f | 15 | CONT | 
| $10 | 16 | COM | 
| $11 | 17 | CLOSE | 
| $12 | 18 | CLR | 
| $13 | 19 | DEG | 
| $14 | 20 | DIM | 
| $15 | 21 | END | 
| $16 | 22 | NEW | 
| $17 | 23 | OPEN | 
| $18 | 24 | LOAD | 
| $19 | 25 | SAVE | 
| $1a | 26 | STATUS | 
| $1b | 27 | NOTE | 
| $1c | 28 | POINT | 
| $1d | 29 | XIO | 
| $1e | 30 | ON | 
| $1f | 31 | POKE | 
| $20 | 32 | |
| $21 | 33 | RAD | 
| $22 | 34 | READ | 
| $23 | 35 | RESTORE | 
| $24 | 36 | RETURN | 
| $25 | 37 | RUN | 
| $26 | 38 | STOP | 
| $27 | 39 | POP | 
| $28 | 40 | ? | 
| $29 | 41 | GET | 
| $2a | 42 | PUT | 
| $2b | 43 | GRAPHICS | 
| $2c | 44 | PLOT | 
| $2d | 45 | POSITION | 
| $2e | 46 | DOS | 
| $2f | 47 | DRAWTO | 
| $30 | 48 | SETCOLOR | 
| $31 | 49 | LOCATE | 
| $32 | 50 | SOUND | 
| $33 | 51 | LPRINT | 
| $34 | 52 | CSAVE | 
| $35 | 53 | CLOAD | 
| $36 | 54 | "domyślne" LET | 
| $37 | 55 | ERROR- (błąd składni) | 
Tokeny o wartościach wyższych nie są zdefiniowane, napotkanie ich przez interpreter w trakcie wykonywania programu powoduje przeważnie zawieszenie komputera.
Tokeny operatorów, funkcji i zmiennych
Taki token to ośmiobitowa liczba z zakresu od 0 do 255, oznaczająca operator, funkcję lub zmienną. Tokeny operatorów i funkcji mają wartości od 0 do 127 (z czego Atari BASIC używa zakresu od 14 do 84), natomiast tokeny zmiennych - wartości od 128 do 255. Token zmiennej to oczywiście jej numer kolejny w tabeli wartości zmiennych, powiększony o 128. Jest to główny powód, dla którego program w Atari BASIC nie może mieć więcej niż 128 zmiennych.
| Hex | Dec | Operator lub funkcja | 
| $0e | 14 | stała liczbowa | 
| $0f | 15 | stała tekstowa | 
| $10 | 16 | niewykorzystany | 
| $11 | 17 | niewykorzystany | 
| $12 | 18 | przecinek | 
| $13 | 19 | znak $ | 
| $14 | 20 | koniec instrukcji | 
| $15 | 21 | średnik | 
| $16 | 22 | koniec linii | 
| $17 | 23 | GOTO w instrukcji ON | 
| $18 | 24 | GOSUB w instrukcji ON | 
| $19 | 25 | TO | 
| $1a | 26 | STEP | 
| $1b | 27 | THEN | 
| $1c | 28 | znak # | 
| $1d | 29 | liczbowe "mniejszy lub równy" | 
| $1e | 30 | liczbowe "różny" | 
| $1f | 31 | liczbowe "większy lub równy" | 
| $20 | 32 | liczbowe "mniejszy" | 
| $21 | 33 | liczbowe "większy" | 
| $22 | 34 | liczbowe "równy" | 
| $23 | 35 | operator potęgowania ^ | 
| $24 | 36 | operator mnożenia * | 
| $25 | 37 | operator dodawania + | 
| $26 | 38 | operator odejmowania - | 
| $27 | 39 | operator dzielenia | 
| $28 | 40 | NOT | 
| $29 | 41 | OR | 
| $2a | 42 | AND | 
| $2b | 43 | nawias otwierający wyrażenie liczbowe | 
| $2c | 44 | nawias zamykający wyrażenie liczbowe | 
| $2d | 45 | operator przypisania wartości liczbowej = | 
| $2e | 46 | operator przypisania wartości tekstowej = | 
| $2f | 47 | tekstowe "mniejszy lub równy" | 
| $30 | 48 | tekstowe "różny" | 
| $31 | 49 | tekstowe "większy lub równy" | 
| $32 | 50 | tekstowe "mniejszy" | 
| $33 | 51 | tekstowe "większy" | 
| $34 | 52 | tekstowe "równy" | 
| $35 | 53 | + znak liczby | 
| $36 | 54 | - znak liczby | 
| $37 | 55 | nawias otwierający indeks w zmiennej tekstowej | 
| $38 | 56 | nawias otwierający indeks w zmiennej tablicowej | 
| $39 | 57 | nawias otwierający wymiar zmiennej tablicowej | 
| $3a | 58 | nawias otwierający argumenty funkcji | 
| $3b | 59 | nawias otwierający wymiar zmiennej tekstowej | 
| $3c | 60 | przecinek w zmiennej tablicowej | 
| $3d | 61 | STR$ | 
| $3e | 62 | CHR$ | 
| $3f | 63 | USR | 
| $40 | 64 | ASC | 
| $41 | 65 | VAL | 
| $42 | 66 | LEN | 
| $43 | 67 | ADR | 
| $44 | 68 | ATN | 
| $45 | 69 | COS | 
| $46 | 70 | PEEK | 
| $47 | 71 | SIN | 
| $48 | 72 | RND | 
| $49 | 73 | FRE | 
| $4a | 74 | EXP | 
| $4b | 75 | LOG | 
| $4c | 76 | CLOG | 
| $4d | 77 | SQR | 
| $4e | 78 | SGN | 
| $4f | 79 | ABS | 
| $50 | 80 | INT | 
| $51 | 81 | PADDLE | 
| $52 | 82 | STICK | 
| $53 | 83 | PTRIG | 
| $54 | 84 | STRIG | 
