39. Prekladač Basic26
Na čo to je
Doteraz si prekladač volal dvoma spôsobmi: Basic26 program.abas --sim a --run. Vie toho viac. Táto kapitola prejde voľby, ktoré sa píšu na príkazový riadok – najprv tie, ktoré použiješ často, potom tie na zvláštne príležitosti. Všetky sú zhrnuté v prílohe B.
Ako sa to píše
Basic26 [voľby] programVoľby sa začínajú pomlčkou a môžu stáť pred menom programu aj za ním. Dlhé voľby majú dve pomlčky (--sim), niektoré aj krátky tvar s jednou (-o, -v).
Basic26 --helpvypíše všetky.
Program na skúšanie
Súbor examples/options.abas:
10 REM A program to try the options of the compiler on
20 FOR I=1 TO 5
30 PRINT I;" squared is ";I*I;", its root ";SQR(I)
40 NEXT I
50 PRINT "Press START"
60 IF PEEK(53279)<>6 THEN 60
70 PRINT "Thank you"Riadok 60 čaká na kláves START (kapitola 22). V simulátore ho „stlačí“ voľba --sim-console:
Basic26 options.abas --sim --sim-console 6@200001 squared is 1, its root 1
2 squared is 4, its root 1.41421356
3 squared is 9, its root 1.7320508
4 squared is 16, its root 2
5 squared is 25, its root 2.23606797
Press START
Thank you6@20000 znamená: po dvadsaťtisíc krokoch procesora nech PEEK(53279) vracia 6 (START). Viac klávesov za sebou sa oddelí čiarkou: 6@20000,7@30000,5@40000.
Výstup
| Voľba | Čo robí |
|---|---|
-o súbor | meno výsledného súboru; bez nej je to meno programu s príponou .xex |
-v | vypíše, čo prekladač robí |
--list súbor | zapíše program ako čitateľný text |
--scramble | zakóduje výsledný súbor, aby sa v ňom nedalo nič prečítať (kapitola 48) |
Basic26 options.abas -o start.xex -vreading options.abas (7 lines, text, Atari BASIC)
peephole: 7 change(s); runtime: 14845 byte(s) left out
wrote start.xex (3555 bytes, 5 segment(s), 3527 bytes of program)Prvý riadok hovorí, ako prekladač program prečítal – tu ako text v Atari BASICu. Pri programe v Turbo-BASICu XL pribudne riadok so slovami, ktoré z neho program naozaj používa (Turbo-BASIC XL: DIV MOD WHILE). Druhý riadok hovorí, koľko zo svojej knižnice prekladač vynechal: do programu sa dostanú len tie rutiny, ktoré naozaj potrebuje. Tretí je veľkosť výsledku.
Jazyk
| Voľba | Čo robí |
|---|---|
--dialect atari | program je Atari BASIC, nech má akúkoľvek príponu |
--dialect turbo | program je Turbo-BASIC XL |
--strict | upozorní (a zastaví preklad) tam, kde by pôvodný interpreter program odmietol alebo kde preložený program robí len náhradu |
--quirks | prijme aj to, čo interpreter prijme a čo zlyhá až počas behu |
--no-line-numbers | program v Turbo-BASICu XL bez čísel riadkov (kapitola 47) |
Na dialekte záleží viac, než sa zdá:
10 X=5:PRINT X DIV 2Ako Turbo-BASIC XL vypíše 2. Ako Atari BASIC vypíše 502 – tam je DIV meno premennej (s nulou) a PRINT vypíše tri veci za sebou.
--quirks je pre dobové programy. Príklad: GOTO 100 v programe, ktorý riadok 100 nemá. Interpreter taký program spustí a chybu 12 ohlási, až keď na GOTO príde – a veľa programov naň nepríde nikdy. Prekladač to bežne odmietne (error B26012: line 100 does not exist); s --quirks z toho spraví upozornenie a chybu 12 nechá na beh.
Veľkosť a rýchlosť
| Voľba | Čo robí |
|---|---|
-O2 | (predvolené) najrýchlejší program |
-O1 | program o niečo menší (až o 500 bajtov) a o niečo pomalší |
-O0 | nič sa nevynecháva ani nezlepšuje; len na skúmanie prekladača |
--rom-fp | počíta rutinami operačného systému namiesto vlastných: pomalšie, ale asi o 1 700 bajtov menej |
Program options.abas:
| Voľby | Veľkosť .xex |
|---|---|
| (žiadne) | 3 555 bajtov |
--rom-fp | 2 078 bajtov |
-O0 | 19 640 bajtov |
Kedy na tom záleží: veľký dobový program, ktorý sa s interpreterom do pamäte zmestil a preložený skončí chybou 2 pri DIM. Vtedy skús -O1 a --rom-fp (a kapitolu 42). Výsledky výpočtov sú pri všetkých voľbách do poslednej číslice rovnaké.
Simulátor
| Voľba | Čo robí |
|---|---|
--sim | spustí preložený program vo vstavanom simulátore |
--sim-input súbor | odpovede pre INPUT, riadok na každý |
--sim-screen | na konci vypíše obrazovku namiesto toho, čo program postupne písal |
--sim-console K@N | „stlačí“ START (6), SELECT (5) alebo OPTION (3) od kroku N |
--sim-trig T@N | stlačí tlačidlo joysticku 0 alebo 1 od kroku N; T=1@N ho pustí |
--sim-stick S=V@N | joystick 0 alebo 1 od kroku N: 15 stred, 11 vľavo, 7 vpravo, 14 hore, 13 dole |
--sim-ntsc | stroj je NTSC; predvolene je PAL (PEEK(53268) je 1) |
--sim-limit N | po koľkých krokoch sa simulátor vzdá (predvolene 10 miliónov) |
--sim-mem stroj | pamäť simulovaného stroja: 64, 130xe, rambo320 … (kapitola 44) |
--rom súbor | kde je ATARIXL.ROM, ak ho simulátor nenájde sám (bez neho vezme altirraos-xl.rom) |
Čo simulátor vie a nevie:
| Vie | Nevie |
|---|---|
výpis, INPUT zo súboru, počítanie | písať na klávesnici – kláves je len to, čo je v --sim-input |
súbory na D: (v pamäti, do konca behu) | ukázať obrázok, zahrať zvuk |
kreslenie do pamäte: PLOT, DRAWTO, LOCATE, CIRCLE, PAINT; obrazovka a zoznam displeja ležia tam, kde ich má operačný systém | nárazy hráčov a striel (PMHIT je vždy 0) |
joystick a tlačidlá z --sim-stick a --sim-trig (bez nich stojí: STICK 15, STRIG 1) | operácie DOS-u: DIR, RENAME, DELETE |
hodiny: snímka je 10 000 krokov, PEEK(20), TIME a PAUSE bežia | |
banky a RAM pod ROM (--sim-mem) |
Náhodné čísla sú v ňom pri každom spustení rovnaké. Keď program neskončí, simulátor to po limite vzdá hlásením error B26213: instruction limit reached.
Emulátor
| Voľba | Čo robí |
|---|---|
--run | po preklade spustí program v emulátore atari800 |
--emulator cesta | kde je atari800.exe, ak nie je v priečinku atari800 vedľa prekladača |
--atr disk.atr | uloží program na obraz diskety; s --run z nej emulátor naštartuje (kapitola 41) |
Emulátor sa dá určiť aj premennou prostredia ATARI800. Hotový .xex sa dá spustiť bez prekladu: Basic26 hra.xex --run.
Upozornenia a chyby
| Voľba | Čo robí |
|---|---|
--werror | upozornenie je chyba: preklad sa zastaví |
--max-errors N | po koľkých chybách prestať (predvolene 20, 0 = bez obmedzenia) |
Výpisy pre zvedavých
| Voľba | Čo zapíše |
|---|---|
--listing súbor | strojový kód, ktorý z programu vznikol, aj s riadkami BASICu |
--map súbor | mapu pamäte: čo leží na ktorej adrese |
--lab súbor | mená adries pre ladiace nástroje emulátorov atari800 a Altirra |
--mads súbor | celý program ako zdroják pre assembler MADS |
Na programovanie v BASICu ich nepotrebuješ. Hodia sa, keď chceš vidieť, čo prekladač z programu spravil, alebo hľadáš chybu so strojovým kódom.
Voľby zo súboru
Dlhý rad volieb sa dá uložiť do súboru a odovzdať so zavináčom. Súbor book.args:
# options for the book
-o start.xex
--sim --sim-console 6@20000Basic26 options.abas @book.argsVoľby v súbore oddeľujú medzery alebo konce riadkov; riadok so znakom # na začiatku je komentár. Voľby, ktoré patria k programu natrvalo, je lepšie napísať rovno doň – kapitola 40.
Časté chyby
| Čo sa stalo | Čo sa stane |
|---|---|
| chýba meno programu | prekladač vypíše návod |
| neznáma voľba | error B26200 a návod |
--sim a program čaká na kláves alebo hodiny | error B26213: instruction limit reached |
.xex na vstupe bez --run | nič sa neprekladá; prekladač nikdy neprepíše súbor, ktorý dostal ako vstup |
-o s menom vstupného súboru | chyba ešte pred zápisom |
Vyskúšaj si
- Prelož
options.abass-va s--rom-fp -va porovnaj veľkosti. - Spusti ho v simulátore bez
--sim-console. Čo sa stane a po akom čase? - Zapíš si
--listinga nájdi v ňom riadok 30 svojho programu.
Zhrnutie
-ourčuje výstup,-vhovorí, čo sa deje.--dialectvyberá jazyk,--strictsprísňuje,--quirkspovoľuje.-O1a--rom-fpzmenšia program, keď chýba pamäť.- Simulátor:
--sim,--sim-input,--sim-screen,--sim-console,--sim-trig,--sim-stick,--sim-limit. - Emulátor:
--run, s disketou--atr.
Späť: 38. Hľadanie chýb · Ďalej: 40. Nastavenia v zdrojáku