Basic26

Cross-compiler Atari BASIC

Stiahnuť

Stiahnuť Basic26

Program, príručka (HTML aj EPUB) a plugin pre Sublime Text v jednom zipe (3,8 MB)

Čo je nové

Windows 10 alebo 11 (x64), jeden súbor Basic26.exe bez inštalácie. Na spustenie emulátor atari800 alebo vstavaný simulátor.

Pomoc k jazyku

Príručka, verzia 1.0.0.208

Kruhy a vypĺňanie v Turbo-BASICu XL
Kruhy a vypĺňanie v Turbo-BASICu XL
Obrazovka a farby
Obrazovka a farby
Hráči a strely
Hráči a strely

Keď som kedysi porovnával rýchlosť Atari BASICu, Turbo Basicu a Action!, kompiloval som BASIC cez MMG Basic Compiler. Dnes je tu vlastný nástroj: Basic26, kompilátor Atari BASICu a Turbo-BASICu XL pre 8-bitové Atari, ktorý beží na Windows.

Čo všetko zje? Textový výpis, program uložený cez SAVE, súbor priamo z obrazu diskety, dokonca aj .xex, do ktorého ho niekto kedysi zabalil. Von vypadne spustiteľný XEX pre Atari XL/XE.

Atari BASIC
10 FOR I=1 TO 10
20 PRINT I;" ";
30 NEXT I
Basic26 program.abas --run

Preložený program sa zaobíde bez interpretera. Nesie si vlastný runtime a z neho len to, čo naozaj potrebuje. Pritom vyzerá a počíta presne ako v interpreteri: rovnaký textový režim, grafické režimy aj zvuk, rovnaké čísla až po poslednú číslicu a dokonca aj rovnaké chybové hlásenia.

Čo vie

Basic26 je voľný softvér pod licenciou MIT. Emulátor, ROM a dobové programy majú vlastné licencie a nie sú jeho súčasťou.

Novinky

Basic26 1.0.0.208

Opravené

  • --atr na plnú disketu už nezmaže starý program. Keď sa na disketu s DOS 2, MyDOS, WolfDOS alebo LiteDOS zapisoval program namiesto staršieho s tým istým menom (napríklad AUTORUN.SYS) a nový sa už nezmestil, prekladač ohlásil „not enough free space“, no starý súbor bol vtedy už zmazaný. Teraz sa najprv overí, či sa nový zmestí (miesto po starom sa ráta), a keď nie, disketa ostane presne taká, aká bola. SpartaDOS a BW-DOS to robili správne už predtým.

Vnútri

  • Preklad je rozdelený na menšie kroky a voľby príkazového riadku sú tabuľka; pribudli testy súborových systémov diskiet, všetkých volieb a ich hlásení, chybových kódov, %PUT/%GET a nedokumentovaných inštrukcií 6502 v simulátore. Preložené programy sú bajt po bajte tie isté ako v 1.0.0.205.
Staršie verzie

Basic26 1.0.0.205

Simulátor bez ROM Atari: AltirraOS

  • --sim funguje aj bez ATARIXL.ROM. Keď ROM Atari nenájde, vezme altirraos-xl.rom – voľne šíriteľnú náhradu OS od autora emulátora Altirra, ktorá je teraz v bin\ pri Basic26.exe (licencia v altirraos-xl.LICENSE.md). Počíta takmer rovnako, len niekedy sa líši v poslednej číslici; prekladač na to upozorní. S --rom alebo s ATARIXL.ROM je všetko ako doteraz.

Opravené

  • SQR, EXP, LOG, ^ a ATN na inom OS než od Atari. Preložený program čítal ich konštanty z adries vnútri ROM Atari; na AltirraOS (Altirra bez ROM Atari) tam bol iný kód a SQR(2) vyšlo -1.83219968E+18. Konštanty má teraz program sám (204 bajtov, len keď tie funkcie používa). S ROM Atari sa výsledky nemenia.
  • FOR v podprograme na premennej slučky mimo neho zrušil vonkajšiu slučku a RETURN potom skončil chybou 16. Atari BASIC aj Turbo-BASIC XL hľadajú starú slučku len po posledný GOSUB, takže podprogram otvorí vlastnú a RETURN funguje; preložený program teraz tiež. Našiel to test z Altirra BASICu.
  • ON … GOTO s riadkom, ktorý neexistuje, s --quirks skončil vnútornou chybou prekladača B26221. Teraz sa preloží a chyba 12 príde až vtedy, keď ON ten riadok naozaj vyberie, ako v interpreteri.

Basic26 1.0.0.194

Silnejšie zakódovanie súboru: --scramble-level 2

  • --scramble-level 2, --scramble-level 1 je doterajšie --scramble
  • --scramble-key
  • Obe voľby sa dajú dať aj do REM @COMPILE.

Basic26 1.0.0.190

Opravené

  • Súbor zapísaný bez CLOSE je na diskete celý. Preložený program na konci zavrie kanály 1–7 ako END v interpreteri – po END, za posledným riadkom, a na rozdiel od interpretera aj po STOP a chybe, lebo preložený program nemá READY, kde by sa dali zavrieť ručne. Doteraz ostal posledný sektor nezapísaný a súbor v adresári DOS-u otvorený na zápis.

Basic26 1.0.0.188

Opravené

  • Upozornenie B26236: 10 LETTER=4 je v Atari BASICu aj v Turbo-BASICu XL LET TER=4, takže PRINT LETTER potom číta inú, prázdnu premennú. Prekladač to teraz povie, keď program také meno inde používa. Zhustené výpisy ako IFA<>B alebo FORI=1TO3 upozornenie nedostanú.

Basic26 1.0.0.185

Opravené

  • Upozornenie B26235: číslo v DATA s medzerou za sebou (DATA 1,2 na konci riadku) READ neprečíta a program skončí chybou 8 – aj v interpreteri. Prekladač to teraz povie už pri preklade.
  • DL_Videopoly_1 a DL_Videopoly_2 padali na riadku 61 s chybou 8 (aj v Turbo-BASICu XL): v ich DATA boli medzery na konci riadku. Sú zmazané a .xex preložené znova.

Basic26 1.0.0.184

Celé čísla v štyroch bajtoch: --int

  • --int (aj v REM @COMPILE): číslo je celé číslo v štyroch bajtoch, od −2 147 483 648 po 2 147 483 647. Čo sa nezmestí, je chyba 11, aj delenie nulou; / delí k nule (-7/2 je −3); zlá adresa alebo hodnota POKE je chyba 3 ako vždy; NEXT za najväčším číslom slučku ukončí bez chyby. Čísla v programe sa počítajú pri preklade presne (2147483647 ostane 2147483647), prvok poľa má štyri bajty namiesto šiestich, &, ! a EXOR počítajú so všetkými 32 bitmi.
  • Desatinné číslo vo výraze (0.5, SIN, SQR, RND, ^ …) sa počíta po starom a výsledok sa usekne k nule; PRINT ho vypíše celé. X=INT(100*RND(0)) funguje ako vždy.
  • REM @FLOAT X,Y,A( na začiatku programu menuje premenné a polia, ktoré držia desatinné čísla – aj pre FOR so STEP 0.25.
  • Upozornenie B26233, kde by celé delenie zmenilo výsledok: A/B*C, X=RND(0), delenie do float premennej. Dobový test deliteľnosti X/N=INT(X/N) sa preloží ako „N delí X“ s radou X MOD N=0 (Turbo-BASIC XL) alebo X-X/N*N=0 (Atari BASIC). Zlomok do celej premennej (X=0.5) je chyba B26011 s radou, ktorú premennú pridať do REM @FLOAT.
  • Rýchlosť: program, ktorý počíta, je 1,3–2,7× rýchlejší, reťazce a indexy do nich tiež (jeden znak A$(I,I) je bajt, A$=B$ sa porovná na mieste). Výpis textu sa nezrýchli.
benchmark (emulátor, PAL)bez --int--int
sito prvočísel v reťazci (e)54,70 s20,20 s
posun hráča cez PEEK/POKE (bench3)15,10 s5,94 s
B*2, (C-B)/2 (d)11,64 s5,28 s
POKE do obrazovky GRAPHICS 24 (f)8,12 s3,78 s
práca s reťazcami (h)21,92 s13,34 s
500× PRINT (a)10,26 s10,18 s

Opravené

  • Zásobník procesora končí najviac na $F9 ako v Atari BASICu: POKE 508,1 už nepokazí návrat programu. POKE do zásobníka nižšie je upozornenie B26234. Každý program je o 9 bajtov väčší.

Basic26 1.0.0.160

Rýchlejšie celé čísla

  • POKE s celou hodnotou – napríklad POKE I,PEEK(53770) – už nepočíta s plávajúcou čiarkou tam a späť.
  • Premenná slučky, ktorú mení len FOR a NEXT, sa drží aj ako celé číslo. Index poľa, POKE, PEEK a MOVE ju potom nemusia prevádzať. Bajty premennej sú stále tie isté, takže program, ktorý ich číta cez PEEK, nič nepozná.
  • PMVPOS a PMMOVE hráča prepíšu len to, čo treba, jednou slučkou.

Program, ktorý premennú slučky číta ako celé číslo, je pri predvolenom -O2 asi o 250 bajtov väčší; s -O1 nič z toho nedostane.

Opravené

  • CLR zabudne otvorené slučky a GOSUB ako oba interpretery: NEXT za ním je chyba 13, RETURN chyba 16, TRAP ostane. Predtým slučka s CLR vo vnútri bežala donekonečna.

Basic26 1.0.0.153

Prvá zverejnená verzia prekladača Basic26. Preloží program v Atari BASICu alebo Turbo-BASICu XL na spustiteľný súbor .xex pre Atari XL/XE, ktorý beží bez interpretera.

Basic26 program.abas -o program.xex

Čo vie

  • Celý jazyk. Prekladá každé kľúčové slovo Atari BASICu aj Turbo-BASICu XL. Preložený program vypisuje tie isté čísla až po poslednú číslicu a tie isté chybové hlásenia ako interpreter. Overené na takmer 300 programoch porovnaním s originálom.
  • Rýchlejší program. V priemere 2,65× rýchlejší než Atari BASIC a zhruba taký rýchly ako Turbo-BASIC XL. Do súboru ide len tá časť runtime, ktorú program naozaj používa.
  • Dobové programy tak, ako sú. Prečíta výpis, program uložený cez SAVE (aj chránený), súbor priamo z obrazu diskety .atr aj .xex, do ktorého niekto program kedysi zabalil.
  • Disketa. --atr zapíše program na disketu tak, aby sa po zapnutí sám spustil (DOS 2.5, MyDOS, SpartaDOS, BW-DOS a ďalšie).
  • Fonty, strojový kód a súbory sa dajú pribaliť k programu (--embed, --file).
  • Rozšírená pamäť. RAM pod ROM a banky 130XE a ďalších rozšírení sú dostupné jednoduchými slovami (--xmem). Texty textoviek sa dajú presunúť do bánk alebo zbaliť (--pack-text).
  • Hráči a strely bez POKE (--modern): PMGRAPHICS, PMCREATE, PMMOVE, PMHIT a ďalšie slová. Pamäť pre ne pridelí prekladač sám.
  • Program z viacerých súborov cez INCLUDE a program bez čísel riadkov (--no-line-numbers).
  • Prehľad pamäte. --memory povie, koľko pamäte program zabral a koľko ostalo pre DIM, --memory-map ukáže každý kus s adresou.
  • Voľby v programe. Riadok REM @COMPILE nesie voľby prekladu a REM @VERSION najstaršiu verziu prekladača, ktorú program potrebuje.
  • Písmená s diakritikou v textoch programu (--charmap).
  • Editory. Plugin pre Sublime Text a integrácia s Visual Studio Code a Visual Studiom.

Príručka pre začiatočníkov

K prekladaču patrí príručka v slovenčine: príkaz po príkaze, s celým programom a príkazom na preklad v každej kapitole – Atari BASIC, Turbo-BASIC XL aj to, čo má Basic26 navyše. Je ako jedna stránka HTML s viacerými farebnými témami a ako kniha EPUB.

Čo je v balíku

Basic26.exe, README, licencia MIT, plugin pre Sublime Text a príručka (HTML a EPUB). Basic26 --version vypíše verziu aj commit, z ktorého binárka vznikla.

READY