Turbo BASIC XL
From Atariki
Odmiana języka BASIC dla komputera Atari XL/XE, stworzona w 1985 roku przez niemieckiego programistę Franka Ostrowskiego i rozpowszechniona jako program public domain przez czasopismo "Happy Computer". Oprócz wersji XL istnieje też odmiana przeznaczona dla komputerów serii 400/800.
Turbo BASIC wgrywa się do pamięci RAM komputera z dysku lub taśmy. Interpreter charakteryzuje się dużą ilością rozszerzeń w stosunku do oryginalnego Atari BASIC-a, istnieje też kompilator Turbo BASIC XL Compiler.
Pierwszorzędną zaletą Turbo BASIC-a XL jest jego szybkość, programy wykonywane są od trzech do pięciu razy szybciej niż w interpreterze Atari BASIC, co jest w sporej mierze wynikiem tego, iż Turbo BASIC ma własny, bardzo szybki pakiet procedur zmiennoprzecinkowych, który sprawdza się świetnie w większości zastosowań.
Spis treści |
Tokeny Turbo BASIC-a
Zasadnicza struktura programu w Turbo BASIC-u XL jest taka sama, jak w Atari BASIC - zmiany polegają wyłącznie na dodaniu nowych instrukcji, funkcji i operatorów do listy tychże znanych interpreterowi Atari BASIC.
Tokeny instrukcji
Tokeny o kodach poniżej 56 są takie same jak w Atari BASIC, patrz Tokeny instrukcji Atari BASIC.
Hex | Dec | Instrukcja |
$38 | 56 | DPOKE |
$39 | 57 | MOVE |
$3a | 58 | -MOVE |
$3b | 59 | *F |
$3c | 60 | REPEAT |
$3d | 61 | UNTIL |
$3e | 62 | WHILE |
$3f | 63 | WEND |
$40 | 64 | ELSE |
$41 | 65 | ENDIF |
$42 | 66 | BPUT |
$43 | 67 | BGET |
$44 | 68 | FILLTO |
$45 | 69 | DO |
$46 | 70 | LOOP |
$47 | 71 | EXIT |
$48 | 72 | DIR |
$49 | 73 | LOCK |
$4a | 74 | UNLOCK |
$4b | 75 | RENAME |
$4c | 76 | DELETE |
$4d | 77 | PAUSE |
$4e | 78 | TIME$= |
$4f | 79 | PROC |
$50 | 80 | EXEC |
$51 | 81 | ENDPROC |
$52 | 82 | FCOLOR |
$53 | 83 | *L |
$54 | 84 | -- |
$55 | 85 | RENUM |
$56 | 86 | DEL |
$57 | 87 | DUMP |
$58 | 88 | TRACE |
$59 | 89 | TEXT |
$5a | 90 | BLOAD |
$5b | 91 | BRUN |
$5c | 92 | GO# |
$5d | 93 | # (etykieta) |
$5e | 94 | *B |
$5f | 95 | PAINT |
$60 | 96 | CLS |
$61 | 97 | DSOUND |
$62 | 98 | CIRCLE |
$63 | 99 | %PUT |
$64 | 100 | %GET |
Tokeny o kodach powyżej 100 sa niezdefiniowane.
Tokeny operatorów i funkcji
Tokeny o kodach od 14 do 84 są takie same jak w Atari BASIC, patrz Tokeny operatorów, funkcji i zmiennych Atari BASIC.
Hex | Dec | Operator lub funkcja |
$00 | 0 | prefiks tokenu zmiennej |
$01-$0C | 1-12 | niezdefiniowane |
$0d | 13 | stała szesnastkowa |
$0e | 14 | stała dziesiętna |
$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 | nawiast 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 |
$55 | 85 | DPEEK |
$56 | 86 | binarne AND |
$57 | 87 | binarne OR |
$58 | 88 | INSTR |
$59 | 89 | INKEY$ |
$5a | 90 | EXOR |
$5b | 91 | HEX$ |
$5c | 92 | DEC |
$5d | 93 | DIV |
$5e | 94 | FRAC |
$5f | 95 | TIME$ |
$60 | 96 | TIME |
$61 | 97 | MOD |
$62 | 98 | EXEC w ON |
$63 | 99 | RND |
$64 | 100 | RAND |
$65 | 101 | TRUNC |
$66 | 102 | %0 |
$67 | 103 | %1 |
$68 | 104 | %2 |
$69 | 105 | %3 |
$6a | 106 | GO# w ON |
$6b | 107 | UINSTR |
$6c | 108 | ERR |
$6d | 109 | ERL |
Tokeny po kodach ponad 109 są niezdefiniowane.
Tokeny zmiennych
Tokeny zmiennych są zasadniczo takie same jak w Atari BASIC, tj. token jest to ośmiobitowy numer kolejny zmiennej w tablicy wartości zmiennych, zwiększony o 128. System ten ogranicza liczbę zmiennych w Atari BASIC do 128. Turbo BASIC XL jednak pozwala na użycie większej liczby zmiennych przez zastosowanie prefiksu o kodzie $00, wykazanego w powyższej tabeli jako "prefiks tokenu zmiennej".
Napotkanie go w miejscu oczekiwanego tokenu operatora, funkcji lub zmiennej oznacza, że następny bajt zawiera właściwy token zmiennej z zestawu powyżej pierwszych 128 zmiennych. Token ten jest to numer zmiennej w tabeli wartości zmiennych, zmniejszony o 128 - a więc następująca po prefiksie liczba $00 oznacza zmienną numer 128 (licząc, że pierwsza ma numer 0), $01 - numer 129 i tak dalej.
Prefiks zwiększa zakres tokenów zmiennych o 256 ponad podstawowe 128, a więc razem "pojemność systemu" wynosi w tym wypadku 384 zmienne. Wydaje się jednak, że Turbo BASIC XL nie pozwala zdefiniować więcej niż 256 zmiennych.
Błędy w Turbo BASIC-u
- uruchomienie programu: 10 TRAP 10:GET #1,A powoduje całkowite zapełnienie i "zawinięcie" się stosu procesora; instrukcja TRAP wprawdzie zdejmuje ze stosu pewną ilość danych, ale rzadko bywa to ilość właściwa. Ten sam błąd ma też Atari BASIC.
- porównanie dwóch funkcji CHR$ w jednym wyrażeniu jest zawsze prawdziwe, np. IF CHR$(1)=CHR$(2) THEN STOP spowoduje zatrzymanie programu. Ten sam błąd ma też Atari BASIC.
- kontrola składni nie przyjmuje słów kluczowych %GET, %PUT i -MOVE jeśli są wpisane małymi literami.
- kontrola składni przyjmuje zmienne tekstowe jako argumenty instrukcji GET, chociaż ta może zapisywać wartości tylko do zmiennych numerycznych.
- funkcja DEC źle działa, jeśli przekazana jej liczba szesnastkowa zawiera małe litery.
Ten artykuł to tylko zalążek. Możesz pomóc rozwojowi Atariki poprzez rozszerzenie go o więcej informacji.