41. Diskety a dobové programy: --atr, --dir, --list, --save

Na čo to je

Atari ukladalo programy na diskety. Dnes sa disketa uchováva ako jeden súbor na PC – obraz diskety s príponou .atr. Emulátor s ním zaobchádza ako so skutočnou disketou a na internete sú v tomto tvare tisíce diskiet s dobovými programami.

Basic26 vie s obrazmi diskiet tri veci:

Voľby

VoľbaČo robí
--atr disk.atruloží preložený program na obraz diskety; ak disketa neexistuje, vyrobí ju aj s DOS-om
--dos menoktorý DOS má byť na novej diskete (predvolene dos25)
--exit-to-dospo skončení programu sa vráti do DOS-u
--dir disk.atrvypíše obsah diskety
disk.atr:MENO.BASnamiesto mena programu: súbor na diskete
--list súborzapíše program ako čitateľný text
--list-atasciivýpis nechá v kódoch Atari namiesto prevodu do UTF-8
--save súborzapíše program v tvare, v akom ho ukladá SAVE
--from-cp1250výpis písaný na PC s českými písmenami prevedie do českej znakovej sady Atari

Program na disketu

Program, ktorý pracuje so súbormi, potrebuje DOS – a emulátor spustený cez --run ho sám nemá. Preto:

Basic26 files.abas --atr files.atr --run

Čo sa stane:

  1. Prekladač preloží files.abas.
  2. Obraz files.atr neexistuje, tak ho vyrobí: čistá disketa s DOS 2.5.
  3. Uloží na ňu preložený program pod menom AUTORUN.SYS – súbor s týmto menom DOS po štarte sám spustí.
  4. --run naštartuje emulátor z tejto diskety.

Disketa ostane vedľa programu. Súbory, ktoré na ňu program zapíše, na nej sú aj pri ďalšom spustení (kým files.atr nezmažeš).

Basic26 --dir files.atr
DOS 2, single density
DOS.SYS	37	?
DUP.SYS	42	?
AUTORUN.SYS	17	?
NOTES.TXT	1	?
610 free sector(s)

Meno, veľkosť v sektoroch a voľné miesto. NOTES.TXT je súbor, ktorý program vyrobil pri behu v emulátore.

Voľba --atr patrí do hlavičky programu, ktorý disketu potrebuje vždy:

Turbo Basic XL
0 REM @COMPILE --atr files.atr

Iný DOS

DOS 2.5 je ten, ktorý Atari dodávalo. --dos vyberie iný: mydos, sparta (SpartaDOS), bwdos, litedos, wolfdos, alebo cestu k vlastnému obrazu diskety, ktorý sa použije ako vzor. Každý DOS spúšťa programy po štarte pod iným menom; prekladač to vie a použije správne.

Návrat do DOS-u

Preložený program po skončení stojí a nechá obrazovku tak, ako je. Program, ktorý sa má spúšťať z DOS-u ako nástroj a po skončení sa doň vrátiť, sa prekladá s --exit-to-dos.

Starý program z diskety

Súbor examples/oldies.atr je disketa, na ktorú niekto kedysi uložil program z Atari BASICu. Čo na nej je?

Basic26 --dir oldies.atr
DOS 2, single density
DOS.SYS	37	?
DUP.SYS	42	?
STARS.BAS	2	?
626 free sector(s)

Program STARS.BAS sa dá preložiť a spustiť rovno z diskety – meno súboru sa napíše za meno obrazu a dvojbodku:

Basic26 oldies.atr:STARS.BAS -o stars.xex --sim
*
**
***
****
*****

Program uložený cez SAVE nie je text

Keby si STARS.BAS z diskety vytiahol a otvoril v editore, uvidel by si nezmysly. Interpreter totiž program neukladá ako text, ale tak, ako ho má v pamäti: každý príkaz je jeden bajt, čísla sú v šiestich bajtoch, mená premenných v tabuľke na začiatku. Prekladač tento tvar pozná a číta ho priamo.

Keď chceš program vidieť – a upravovať –, nechaj si ho vypísať:

Basic26 oldies.atr:STARS.BAS --list stars.abas

Vznikne súbor examples/stars.abas:

Atari BASIC
10 REM STARS - AN OLD PROGRAM SAVED ON A DISK
20 FOR R=1 TO 5
30   FOR S=1 TO R:PRINT "*";:NEXT S
40   PRINT
50 NEXT R

To je ten istý text, aký by na Atari vypísal príkaz LIST. Dá sa upraviť a preložiť ako každý iný program:

Basic26 stars.abas --sim
*
**
***
****
*****

Výpis je v kódovaní UTF-8: grafické znaky Atari, ktoré v dobových programoch bývajú v textoch, sa prevedú na podobné znaky, ktoré editor na PC vie ukázať, a pri preklade zasa naspäť. Z výpisu vznikne bajt po bajte ten istý program ako z pôvodného súboru. --list-atascii nechá bajty tak, ako sú – to treba, keď má výpis ísť späť na disketu pre skutočné Atari.

S voľbou -v prekladač povie, čo o programe zistil:

reading oldies.atr:STARS.BAS (5 lines, ATASCII, SAVEd, Atari BASIC)

Či ide o Atari BASIC alebo Turbo-BASIC XL, spozná sám podľa príkazov, ktoré v uloženom programe nájde.

Čo sa z uloženého programu nedá dostať

Interpreter pri ukladaní zahodil medzery (okrem tých v textoch a komentároch) a všetko previedol na veľké písmená. Výpis ich preto nemá. Niektoré programy boli proti čítaniu chránené – zmazané mená premenných, pokazené dĺžky riadkov. Prekladač si s bežnými ochranami poradí; premenné bez mien dostanú vo výpise mená V0, V1$, V2(.

Program schovaný v .xex

Dobové nástroje vedeli program v BASICu „zabaliť“ do spustiteľného súboru, ktorý si so sebou niesol kópiu pamäte interpretera. Aj z takého súboru sa dá program dostať:

Basic26 hra.xex --save hra.bas --list hra.abas

--save zapíše program tak, ako by ho uložil SAVE, --list ako text. (Samotný .xex na vstupe sa neprekladá – len sa z neho číta.)

České výpisy z PC

Texty českých hier sa na Atari písali vlastnou znakovou sadou, v ktorej písmená s diakritikou ležia na miestach iných znakov. Výpis, ktorý niekto prepísal na PC s normálnymi českými písmenami (v kódovaní Windows-1250), prevedie na kódy tejto sady voľba --from-cp1250.

Časté chyby

Čo sa staloČo sa stane
program s D: spustený cez --run bez --atrERROR- 130 – DOS nie je v pamäti
súbor na diskete nie je (oldies.atr:NOFILE.BAS)error B26201: … file not found on the disk: NOFILE.BAS
disketa je plnáprogram sa na ňu neuloží; prekladač to ohlási
--list s menom vstupného súboruerror B26202 – prekladač nikdy neprepíše to, čo číta
uložený program otvorený v editorenezmysly; použi --list
.bas z Turbo-BASICu XL prečítaný ako Atari BASICnestane sa – prekladač dialekt uloženého programu spozná sám

Vyskúšaj si

  1. Daj hello.abas na disketu a spusti ju: Basic26 hello.abas --atr hello.atr --run. Potom si pozri jej obsah cez --dir.
  2. Vypíš STARS.BAS z diskety do súboru, zmeň počet riadkov hviezdičiek na 10 a prelož ho.
  3. Skús --dos mydos a porovnaj --dir s disketou s DOS 2.5.

Zhrnutie

Späť: 40. Nastavenia v zdrojáku · Ďalej: 42. Miesto v pamäti