Turbo BASIC XL
From Atariki
| Wersja z dnia 14:19, 8 lip 2006 KMK (Dyskusja | wkład) ← Previous diff | Wersja z dnia 14:29, 8 lip 2006 KMK (Dyskusja | wkład) (→Tokeny operatorów i funkcji) Next diff → | ||
| Linia 66: | Linia 66: | ||
| === Tokeny operatorów i funkcji === | === Tokeny operatorów i funkcji === | ||
| + | |||
| + | Tokeny o kodach od 14 do 84 są takie same jak w Atari BASIC, patrz [[Atari BASIC#Tokeny operatorów, funkcji i zmiennych|Tokeny operatorów, funkcji i zmiennych Atari BASIC]]. | ||
| + | |||
| + | <table border = 1 cellpadding = 5> | ||
| + | <tr><td><b>Hex</b></td><td><b>Dec</b></td><td><b>Operator lub funkcja</b></td></tr> | ||
| + | <tr><td>$00</td><td>14</td><td>prefiks tokenu zmiennej</td></tr> | ||
| + | <tr><td>$01-$0C</td><td>1-12</td><td>niezdefiniowane</td></tr> | ||
| + | <tr><td>$0d</td><td>13</td><td>stała szesnastkowa</td></tr> | ||
| + | <tr><td>$0e</td><td>14</td><td>stała dziesiętna</td></tr> | ||
| + | <tr><td>$0f</td><td>15</td><td>stała tekstowa</td></tr> | ||
| + | <tr><td>$10</td><td>16</td><td>niewykorzystany</td></tr> | ||
| + | <tr><td>$11</td><td>17</td><td>niewykorzystany</td></tr> | ||
| + | <tr><td>$12</td><td>18</td><td>przecinek</td></tr> | ||
| + | <tr><td>$13</td><td>19</td><td>znak $</td></tr> | ||
| + | <tr><td>$14</td><td>20</td><td>koniec instrukcji</td></tr> | ||
| + | <tr><td>$15</td><td>21</td><td>średnik</td></tr> | ||
| + | <tr><td>$16</td><td>22</td><td>koniec linii</td></tr> | ||
| + | <tr><td>$17</td><td>23</td><td>GOTO w instrukcji ON</td></tr> | ||
| + | <tr><td>$18</td><td>24</td><td>GOSUB w instrukcji ON</td></tr> | ||
| + | <tr><td>$19</td><td>25</td><td>TO</td></tr> | ||
| + | <tr><td>$1a</td><td>26</td><td>STEP</td></tr> | ||
| + | <tr><td>$1b</td><td>27</td><td>THEN</td></tr> | ||
| + | <tr><td>$1c</td><td>28</td><td>znak #</td></tr> | ||
| + | <tr><td>$1d</td><td>29</td><td>liczbowe "mniejszy lub równy"</td></tr> | ||
| + | <tr><td>$1e</td><td>30</td><td>liczbowe "różny"</td></tr> | ||
| + | <tr><td>$1f</td><td>31</td><td>liczbowe "większy lub równy"</td></tr> | ||
| + | <tr><td>$20</td><td>32</td><td>liczbowe "mniejszy"</td></tr> | ||
| + | <tr><td>$21</td><td>33</td><td>liczbowe "większy"</td></tr> | ||
| + | <tr><td>$22</td><td>34</td><td>liczbowe "równy"</td></tr> | ||
| + | <tr><td>$23</td><td>35</td><td>operator potęgowania ^</td></tr> | ||
| + | <tr><td>$24</td><td>36</td><td>operator mnożenia *</td></tr> | ||
| + | <tr><td>$25</td><td>37</td><td>operator dodawania +</td></tr> | ||
| + | <tr><td>$26</td><td>38</td><td>operator odejmowania -</td></tr> | ||
| + | <tr><td>$27</td><td>39</td><td>operator dzielenia</td></tr> | ||
| + | <tr><td>$28</td><td>40</td><td>NOT</td></tr> | ||
| + | <tr><td>$29</td><td>41</td><td>OR</td></tr> | ||
| + | <tr><td>$2a</td><td>42</td><td>AND</td></tr> | ||
| + | <tr><td>$2b</td><td>43</td><td>nawias otwierający wyrażenie liczbowe</td></tr> | ||
| + | <tr><td>$2c</td><td>44</td><td>nawias zamykający wyrażenie liczbowe</td></tr> | ||
| + | <tr><td>$2d</td><td>45</td><td>operator przypisania wartości liczbowej =</td></tr> | ||
| + | <tr><td>$2e</td><td>46</td><td>operator przypisania wartości tekstowej =</td></tr> | ||
| + | <tr><td>$2f</td><td>47</td><td>tekstowe "mniejszy lub równy"</td></tr> | ||
| + | <tr><td>$30</td><td>48</td><td>tekstowe "różny"</td></tr> | ||
| + | <tr><td>$31</td><td>49</td><td>tekstowe "większy lub równy"</td></tr> | ||
| + | <tr><td>$32</td><td>50</td><td>tekstowe "mniejszy"</td></tr> | ||
| + | <tr><td>$33</td><td>51</td><td>tekstowe "większy"</td></tr> | ||
| + | <tr><td>$34</td><td>52</td><td>tekstowe "równy"</td></tr> | ||
| + | <tr><td>$35</td><td>53</td><td>+ znak liczby</td></tr> | ||
| + | <tr><td>$36</td><td>54</td><td>- znak liczby</td></tr> | ||
| + | <tr><td>$37</td><td>55</td><td>nawias otwierający indeks w zmiennej tekstowej</td></tr> | ||
| + | <tr><td>$38</td><td>56</td><td>nawias otwierający indeks w 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>$3b</td><td>59</td><td>nawiast otwierający wymiar zmiennej tekstowej</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>$3e</td><td>62</td><td>CHR$</td></tr> | ||
| + | <tr><td>$3f</td><td>63</td><td>USR</td></tr> | ||
| + | <tr><td>$40</td><td>64</td><td>ASC</td></tr> | ||
| + | <tr><td>$41</td><td>65</td><td>VAL</td></tr> | ||
| + | <tr><td>$42</td><td>66</td><td>LEN</td></tr> | ||
| + | <tr><td>$43</td><td>67</td><td>ADR</td></tr> | ||
| + | <tr><td>$44</td><td>68</td><td>ATN</td></tr> | ||
| + | <tr><td>$45</td><td>69</td><td>COS</td></tr> | ||
| + | <tr><td>$46</td><td>70</td><td>PEEK</td></tr> | ||
| + | <tr><td>$47</td><td>71</td><td>SIN</td></tr> | ||
| + | <tr><td>$48</td><td>72</td><td>RND</td></tr> | ||
| + | <tr><td>$49</td><td>73</td><td>FRE</td></tr> | ||
| + | <tr><td>$4a</td><td>74</td><td>EXP</td></tr> | ||
| + | <tr><td>$4b</td><td>75</td><td>LOG</td></tr> | ||
| + | <tr><td>$4c</td><td>76</td><td>CLOG</td></tr> | ||
| + | <tr><td>$4d</td><td>77</td><td>SQR</td></tr> | ||
| + | <tr><td>$4e</td><td>78</td><td>SGN</td></tr> | ||
| + | <tr><td>$4f</td><td>79</td><td>ABS</td></tr> | ||
| + | <tr><td>$50</td><td>80</td><td>INT</td></tr> | ||
| + | <tr><td>$51</td><td>81</td><td>PADDLE</td></tr> | ||
| + | <tr><td>$52</td><td>82</td><td>STICK</td></tr> | ||
| + | <tr><td>$53</td><td>83</td><td>PTRIG</td></tr> | ||
| + | <tr><td>$54</td><td>84</td><td>STRIG</td></tr> | ||
| + | <tr><td>$55</td><td>85</td><td>DPEEK</td></tr> | ||
| + | <tr><td>$56</td><td>86</td><td>binarne AND</td></tr> | ||
| + | <tr><td>$57</td><td>87</td><td>binarne OR</td></tr> | ||
| + | <tr><td>$58</td><td>88</td><td>INSTR</td></tr> | ||
| + | <tr><td>$59</td><td>89</td><td>INKEY$</td></tr> | ||
| + | <tr><td>$5a</td><td>90</td><td>EXOR</td></tr> | ||
| + | <tr><td>$5b</td><td>91</td><td>HEX$</td></tr> | ||
| + | <tr><td>$5c</td><td>92</td><td>DEC</td></tr> | ||
| + | <tr><td>$5d</td><td>93</td><td>DIV</td></tr> | ||
| + | <tr><td>$5e</td><td>94</td><td>FRAC</td></tr> | ||
| + | <tr><td>$5f</td><td>95</td><td>TIME$</td></tr> | ||
| + | <tr><td>$60</td><td>96</td><td>TIME</td></tr> | ||
| + | <tr><td>$61</td><td>97</td><td>MOD</td></tr> | ||
| + | <tr><td>$62</td><td>98</td><td>EXEC w ON</td></tr> | ||
| + | <tr><td>$63</td><td>99</td><td>RND</td></tr> | ||
| + | <tr><td>$64</td><td>100</td><td>RAND</td></tr> | ||
| + | <tr><td>$65</td><td>101</td><td>TRUNC</td></tr> | ||
| + | <tr><td>$66</td><td>102</td><td>%0</td></tr> | ||
| + | <tr><td>$67</td><td>103</td><td>%1</td></tr> | ||
| + | <tr><td>$68</td><td>104</td><td>%2</td></tr> | ||
| + | <tr><td>$69</td><td>105</td><td>%3</td></tr> | ||
| + | <tr><td>$6a</td><td>106</td><td>GO# w ON</td></tr> | ||
| + | <tr><td>$6b</td><td>107</td><td>UINSTR</td></tr> | ||
| + | <tr><td>$6c</td><td>108</td><td>ERR</td></tr> | ||
| + | <tr><td>$6d</td><td>109</td><td>ERL</td></tr> | ||
| + | </table> | ||
| + | |||
| + | Tokeny po kodach ponad 109 są neizdefiniowane. | ||
| === Tokeny zmiennych === | === Tokeny zmiennych === | ||
Wersja z dnia 14:29, 8 lip 2006
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 | 14 | 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ą neizdefiniowane.
Tokeny 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.

