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] program

Voľ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 --help

vypíše všetky.

Program na skúšanie

Súbor examples/options.abas:

Atari BASIC
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@20000
1 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 you

6@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úbormeno výsledného súboru; bez nej je to meno programu s príponou .xex
-vvypíše, čo prekladač robí
--list súborzapíše program ako čitateľný text
--scramblezakóduje výsledný súbor, aby sa v ňom nedalo nič prečítať (kapitola 48)
Basic26 options.abas -o start.xex -v
reading 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 atariprogram je Atari BASIC, nech má akúkoľvek príponu
--dialect turboprogram je Turbo-BASIC XL
--strictupozorní (a zastaví preklad) tam, kde by pôvodný interpreter program odmietol alebo kde preložený program robí len náhradu
--quirksprijme aj to, čo interpreter prijme a čo zlyhá až počas behu
--no-line-numbersprogram v Turbo-BASICu XL bez čísel riadkov (kapitola 47)

Na dialekte záleží viac, než sa zdá:

Turbo Basic XL
10 X=5:PRINT X DIV 2

Ako 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
-O1program o niečo menší (až o 500 bajtov) a o niečo pomalší
-O0nič sa nevynecháva ani nezlepšuje; len na skúmanie prekladača
--rom-fppočíta rutinami operačného systému namiesto vlastných: pomalšie, ale asi o 1 700 bajtov menej

Program options.abas:

VoľbyVeľkosť .xex
(žiadne)3 555 bajtov
--rom-fp2 078 bajtov
-O019 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í
--simspustí preložený program vo vstavanom simulátore
--sim-input súborodpovede pre INPUT, riadok na každý
--sim-screenna 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@Nstlačí tlačidlo joysticku 0 alebo 1 od kroku N; T=1@N ho pustí
--sim-stick S=V@Njoystick 0 alebo 1 od kroku N: 15 stred, 11 vľavo, 7 vpravo, 14 hore, 13 dole
--sim-ntscstroj je NTSC; predvolene je PAL (PEEK(53268) je 1)
--sim-limit Npo koľkých krokoch sa simulátor vzdá (predvolene 10 miliónov)
--sim-mem strojpamäť simulovaného stroja: 64, 130xe, rambo320 … (kapitola 44)
--rom súborkde je ATARIXL.ROM, ak ho simulátor nenájde sám (bez neho vezme altirraos-xl.rom)

Čo simulátor vie a nevie:

VieNevie
výpis, INPUT zo súboru, počítaniepí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émná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í
--runpo preklade spustí program v emulátore atari800
--emulator cestakde je atari800.exe, ak nie je v priečinku atari800 vedľa prekladača
--atr disk.atruloží 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í
--werrorupozornenie je chyba: preklad sa zastaví
--max-errors Npo koľkých chybách prestať (predvolene 20, 0 = bez obmedzenia)

Výpisy pre zvedavých

VoľbaČo zapíše
--listing súborstrojový kód, ktorý z programu vznikol, aj s riadkami BASICu
--map súbormapu pamäte: čo leží na ktorej adrese
--lab súbormená adries pre ladiace nástroje emulátorov atari800 a Altirra
--mads súborcelý 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@20000
Basic26 options.abas @book.args

Voľ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 programuprekladač vypíše návod
neznáma voľbaerror B26200 a návod
--sim a program čaká na kláves alebo hodinyerror B26213: instruction limit reached
.xex na vstupe bez --runnič sa neprekladá; prekladač nikdy neprepíše súbor, ktorý dostal ako vstup
-o s menom vstupného súboruchyba ešte pred zápisom

Vyskúšaj si

  1. Prelož options.abas s -v a s --rom-fp -v a porovnaj veľkosti.
  2. Spusti ho v simulátore bez --sim-console. Čo sa stane a po akom čase?
  3. Zapíš si --listing a nájdi v ňom riadok 30 svojho programu.

Zhrnutie

Späť: 38. Hľadanie chýb · Ďalej: 40. Nastavenia v zdrojáku