Basic26
Cross-compiler Atari BASIC
Stiahnuť
Program, príručka (HTML aj EPUB) a plugin pre Sublime Text v jednom zipe (3,8 MB)
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
- BASIC na Atari pre začiatočníkov Atari BASIC, Turbo-BASIC XL a Basic26, 49 kapitol
- Jazyk na jednej strane všetky príkazy a funkcie v skratke
- Voľby prekladača príkazový riadok a REM @COMPILE
- Chyby chyby za behu a hlásenia prekladača
Príručka, verzia 1.0.0.208
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.
10 FOR I=1 TO 10
20 PRINT I;" ";
30 NEXT IBasic26 program.abas --runPrelož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
- Preloží každé kľúčové slovo Atari BASICu aj Turbo-BASICu XL. Odmietne jediné:
RUN "D:MENO". - Kontrola? 287 programov (dobové hry, textovky, príklady z dokumentácie TBXL, Rosetta Code) prejde porovnaním s originálnym interpreterom v emulátore.
- Preložený program je v priemere 2,65× rýchlejší ako Atari BASIC a runtime má v mediáne len 2,9 KB.
- Poradí si aj s programom uloženým cez
SAVE, aj s chráneným, a prekladá priamo z obrazu diskety (Basic26 hry.atr:SNAKE.BAS). - Program zapíše aj na disketu ATR, ktorú DOS spustí sám (DOS 2.5, MyDOS, SpartaDOS, BW-DOS, LiteDOS, WolfDOS).
- Pribalí strojový kód, fonty aj súbory, ktoré program otvára menom. Texty s diakritikou dostanú kódy podľa znakovej sady programu.
- RAM pod ROM a rozšírená pamäť (130XE, RAMBO, Compy Shop až po 1 MB) cez
XPEEK,XPOKE,XMOVEa ďalšie slová. Texty textoviek sa dajú presunúť pod ROM a zbaliť. - Komu originál nestačí, má tu
--modern: hráčov a strely (PMGRAPHICS,PMMOVE,PMHIT…) a program z viacerých súborov. - Nečitateľný XEX (
--scramble) s efektmi ako zo starých rozbaľovačov 😉 - Voľby prekladu môže niesť priamo program v riadku
REM @COMPILE …. Interpreter ho berie ako obyčajnú poznámku. - Chyby hlási vo formáte Visual Studia (
súbor(riadok,stĺpec): error B26017: …). Zvýrazňovanie a preklad priamo z editora: Visual Studio, Visual Studio Code a Sublime Text.
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é
--atrna 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íkladAUTORUN.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/%GETa 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
--simfunguje aj bezATARIXL.ROM. Keď ROM Atari nenájde, vezmealtirraos-xl.rom– voľne šíriteľnú náhradu OS od autora emulátora Altirra, ktorá je teraz vbin\priBasic26.exe(licencia valtirraos-xl.LICENSE.md). Počíta takmer rovnako, len niekedy sa líši v poslednej číslici; prekladač na to upozorní. S--romalebo sATARIXL.ROMje všetko ako doteraz.
Opravené
SQR,EXP,LOG,^aATNna 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 aSQR(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.FORv podprograme na premennej slučky mimo neho zrušil vonkajšiu slučku aRETURNpotom skončil chybou 16. Atari BASIC aj Turbo-BASIC XL hľadajú starú slučku len po poslednýGOSUB, takže podprogram otvorí vlastnú aRETURNfunguje; preložený program teraz tiež. Našiel to test z Altirra BASICu.ON … GOTOs riadkom, ktorý neexistuje, s--quirksskončil vnútornou chybou prekladača B26221. Teraz sa preloží a chyba 12 príde až vtedy, keďONten 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 1je 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
CLOSEje na diskete celý. Preložený program na konci zavrie kanály 1–7 akoENDv interpreteri – poEND, za posledným riadkom, a na rozdiel od interpretera aj poSTOPa 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=4je v Atari BASICu aj v Turbo-BASICu XLLET TER=4, takžePRINT LETTERpotom číta inú, prázdnu premennú. Prekladač to teraz povie, keď program také meno inde používa. Zhustené výpisy akoIFA<>BaleboFORI=1TO3upozornenie nedostanú.
Basic26 1.0.0.185
Opravené
- Upozornenie B26235: číslo v
DATAs medzerou za sebou (DATA 1,2na konci riadku)READneprečíta a program skončí chybou 8 – aj v interpreteri. Prekladač to teraz povie už pri preklade. DL_Videopoly_1aDL_Videopoly_2padali na riadku 61 s chybou 8 (aj v Turbo-BASICu XL): v ichDATAboli medzery na konci riadku. Sú zmazané a.xexpreložené znova.
Basic26 1.0.0.184
Celé čísla v štyroch bajtoch: --int
--int(aj vREM @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/2je −3); zlá adresa alebo hodnotaPOKEje chyba 3 ako vždy;NEXTza 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,&,!aEXORpočí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;PRINTho 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 preFORsoSTEP 0.25.- Upozornenie B26233, kde by celé delenie zmenilo výsledok:
A/B*C,X=RND(0), delenie do float premennej. Dobový test deliteľnostiX/N=INT(X/N)sa preloží ako „N delí X“ s radouX MOD N=0(Turbo-BASIC XL) aleboX-X/N*N=0(Atari BASIC). Zlomok do celej premennej (X=0.5) je chyba B26011 s radou, ktorú premennú pridať doREM @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 s | 20,20 s |
posun hráča cez PEEK/POKE (bench3) | 15,10 s | 5,94 s |
B*2, (C-B)/2 (d) | 11,64 s | 5,28 s |
POKE do obrazovky GRAPHICS 24 (f) | 8,12 s | 3,78 s |
| práca s reťazcami (h) | 21,92 s | 13,34 s |
500× PRINT (a) | 10,26 s | 10,18 s |
Opravené
- Zásobník procesora končí najviac na
$F9ako v Atari BASICu:POKE 508,1už nepokazí návrat programu.POKEdo 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
POKEs celou hodnotou – napríkladPOKE I,PEEK(53770)– už nepočíta s plávajúcou čiarkou tam a späť.- Premenná slučky, ktorú mení len
FORaNEXT, sa drží aj ako celé číslo. Index poľa,POKE,PEEKaMOVEju potom nemusia prevádzať. Bajty premennej sú stále tie isté, takže program, ktorý ich číta cezPEEK, nič nepozná. PMVPOSaPMMOVEhráč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é
CLRzabudne otvorené slučky aGOSUBako oba interpretery:NEXTza ním je chyba 13,RETURNchyba 16,TRAPostane. Predtým slučka sCLRvo 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.atraj.xex, do ktorého niekto program kedysi zabalil. - Disketa.
--atrzapíš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,PMHITa ďalšie slová. Pamäť pre ne pridelí prekladač sám. - Program z viacerých súborov cez
INCLUDEa program bez čísel riadkov (--no-line-numbers). - Prehľad pamäte.
--memorypovie, koľko pamäte program zabral a koľko ostalo preDIM,--memory-mapukáže každý kus s adresou. - Voľby v programe. Riadok
REM @COMPILEnesie voľby prekladu aREM @VERSIONnajstarš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


