Jakub Jelínek oznámil vydání verze 15.1 (15.1.0) kolekce kompilátorů pro různé programovací jazyky GCC (GNU Compiler Collection). Jedná se o první stabilní verzi řady 15. Přehled změn, nových vlastností a oprav a aktualizovaná dokumentace na stránkách projektu. Některé zdrojové kódy, které bylo možné přeložit s předchozími verzemi GCC, bude nutné upravit.
Byly vyhlášeny výsledky letošní volby vedoucího projektu Debian (DPL, Wikipedie). Staronovým vedoucím zůstává Andreas Tille.
Jason Citron končí jako CEO Discordu. Od pondělí 28. dubna nastupuje nový CEO Humam Sakhnini, bývalý CSO Activision Blizzard.
Článek na Libre Arts představuje baskytarový multiefekt Anagram od společnosti Darkglass Electronics. S Linuxem uvnitř (licence, GitHub).
Městský soud v Praze vyhlásil rozsudek, který vyhověl žalobě novináře Jana Cibulky, který s podporou spolku IuRe (Iuridicum Remedium) požadoval omluvu od státu za to, že česká legislativa nařizuje operátorům uchovávat metadata o elektronické komunikaci. To je přitom v rozporu s právem. Stát se musí novináři omluvit a zaplatit náklady řízení. Především je ale součástí přelomové rozhodnutí o nelegálnosti shromažďování dat a o
… více »Americké technologické firmy Apple a Meta Platforms porušily pravidla na ochranu unijního trhu, uvedla včera Evropská komise (EK). Firmám proto vyměřila pokutu – Applu 500 milionů eur (12,5 miliardy Kč) a Metě 200 milionů eur (pět miliard Kč). Komise to oznámila v tiskové zprávě. Jde o první pokuty, které souvisejí s unijním nařízením o digitálních trzích (DMA). „Evropská komise zjistila, že Apple porušil povinnost vyplývající z nařízení
… více »Americká společnost OpenAI, která stojí za chatovacím robotem ChatGPT, by měla zájem o webový prohlížeč Chrome, pokud by jeho současný majitel, společnost Google, byl donucen ho prodat. Při slyšení u antimonopolního soudu ve Washingtonu to řekl šéf produktové divize ChatGPT Nick Turley.
Po roce vývoje od vydání verze 1.26.0 byla vydána nová stabilní verze 1.28.0 webového serveru a reverzní proxy nginx (Wikipedie). Nová verze přináší řadu novinek. Podrobný přehled v souboru CHANGES-1.28.
Byla vydána nová verze 10.0.0 otevřeného emulátoru procesorů a virtualizačního nástroje QEMU (Wikipedie). Přispělo 211 vývojářů. Provedeno bylo více než 2 800 commitů. Přehled úprav a nových vlastností v seznamu změn.
42 svobodných a otevřených projektů získalo finanční podporu od NLnet Foundation (Wikipedie).
V minulém zápisku jsme se podívali na nejstarší dostupnou verzi překladače jazyka C z roku 1972. Tentokrát se zaměříme na překladač o poznání mladší, vytvořený dlouhých šest let po vydání knihy The C Programming Language, která definovala K&R verzi jazyka C. Ale i tak se nebude jednat o nudný kus kódu. Je jím totiž HiSoft C - překladač pro osmibitové ZX Spectrum z roku 1984.
Nejpoužívanějším jazykem na osmibitových domácích počítačích se stal bezesporu BASIC, který byl ve většině případů přímo součástí ROM. Pokud vám jeho interpret výkonnostně či funkčně nedostačoval, nejpřirozenější alternativou byl assembler, pro který bylo i v té době k dispozici mnoho kvalitních informačních zdrojů. Ostatní jazyky byly spíše okrajovou záležitostí, i když i tak bylo z čeho vybírat. K dispozici byl například Lisp, Prolog či Pascal (sám si matně vybavuji, jak jsem zkoušel nějakou verzi Pascalu, která se ale ukázala jako zoufale nepraktická). Můžeme se jen domýšlet, jak by dnešní svět IT vypadal, kdyby výrobci dávali do ROM místo BASICu Forth jako v případě Jupiter Ace (simulátor, komentovaný výpis ROM, dokumentace, článek Pavla Tišnovského).
O svoje místo na výsluní zájmu programátorů vlastnících osmibitové počítače se zkoušel poprat i jazyk C. Neměl na růžích ustláno, protože parametry těch strojů mu zrovna dvakrát nepřály. Vždyť například ZX Spectrum mělo pro uživatele k dispozici jen cca 40 kB RAM. Minule popsaný prastarý kompilátor jednodušší verze Céčka se sice dokázal vměstnat do 4,5 kB, ale to byl pouze samotný překladač, který ještě funkčně závisí na kompilátoru assemberu a linkeru. Tady bylo nutné zajistit překlad přímo do strojového kódu a do paměti se musel ještě vejít použitelný editor, kód, který jste chtěli přeložit, standardní knihovna, prostor pro pomocná data při překladu a výsledek. Navíc jste neměli možnost si nic odkládat na pevný disk. Jazyk C je založen na proudovém zpracování, se kterým se používaná paměťová média moc neztotožňovala. Pro představu, 48 kB, což je velikost celé RAM Spectra, odpovídá současné velikosti souboru kernel/cpu.c o asi dvou tisících řádcích.
Nejlepší překladač jazyka C pro platformu ZX Spectrum bylo HiSoft C. To se umělo i s editorem nacpat do 25 kB. Ptáte se, jak to dokázalo? Dalo by se říct, že s rezervou, protože jeho kód není přeložený ručně psaný assembler, ale bylo napsáno v C a pouze některé jeho části se pak dočkaly ruční optimalizace. Distribuovaná binární verze programu dokonce obsahuje hodně smetí - nepoužívaná místa naplněná náhodnými obsahy bufferů počítače, který prováděl překlad. Při psaní tohoto překladače převládal čirý pragmatismus.
Nahrání vývojového prostředí z kazety o standardním datovém toku trvalo 4 minuty. Pokud se program osekal o úvodní obrazovku a podobný balast, pak se dalo dostat pod 2 minuty padesát. Člověka musí napadnout, proč ke kompilátoru přidávali úvodní obrazovku zbytečně prodlužující načítání. Odpověď je prostá. Předpokládalo se, že uživatel bude používat jako paměťové médium ZX Microdrive, kde byl nahrávací čas velice krátký. Obraz se nahrál přímo do video-RAM, nezabíral tak žádné užitečné místo a uživatel měl alespoň pocit, že za svých 25 liber dostal kvalitní produkt.
Po nahrání jste se ocitli v jednoduchém editačního režimu kompilátoru, kde jste mohli napsat krátký prográmek prakticky bez možnosti zpětné editace. Pak klávesovou zkratkou SS+I ukončit zadání, čímž se zkompiloval a hned spustil. Většina práce se ale prováděla v editoru, do nějž se dostanete klávesovou zkratkou CS+1 následovanou Enterem.
Editor je to velice spartánský a trochu připomíná ed. Například napíšete i10,10
a už můžete zadávat řádek 10, přičemž po stisknutí enteru začnete vložit další řádky, jejich číslo se bude vždy o desítku zvětšovat. Číslování řádků zde slouží pouze pro potřeby navigace v editoru, není to žádné předělávání Céčka na BASIC. Ven z editace ze dostanete opět pomocí CS+1,Enter. Důležitá je možnost úpravy již zadaných řádků, ta se dělá příkazem e
následovaným číslem řádku, který chcete upravit. V editačním módu řádku máte k dispozici další sadu příkazů, jako je i
pro vložení nových znaků, k
pro smazání aktuálního atd.
Editor určitě není nejsilnější stránkou tohoto programu. Pro nás jsou důležité příkazy p
(put) a g
(get), které ukládají a nahrávají editované soubory. Právě ve způsobu ukládání a nahrávání tkví jeden z klíčů stojících za tím, že na Spectru může C vůbec fungovat. Ukládají se totiž na pásku po samostatných blocích o velikosti 512 bytů. To znamená, že si můžete uložit několik zdrojových souborů, ze kterých se skládá váš program, rozmařile je doplňovat o komentáře, ale když jejich velikost udržíte v rozumných mezích (uvědomte si, že na veškerou práci nám po nahrání kompilátoru v paměti zbylo jen 15 kB), v okamžiku, kdy se soubor uloží na pásku, bude při kompilaci postupně nahráván a překládán po blocích a jeho celková velikost už nebude příliš důležitá.
Používat interní editor HiSoft C je velice nepohodlné, takže pro hraní člověk ocení utilitku c2tap, která převede běžné C soubory do obrazu pásky používaného v emulátorech. Ty se dají případně snadno spojovat do větších obrazů. Perličkou je, že jsem hanebně podcenil googlení a utilitku se stejnou funkcí si nejdříve napsal sám na základě rozborů uložených souborů. Člověk pak třeba zjistil, že při ukládání těch 512 bytových bloků se HiSoft C neobtěžuje předmazat buffer, takže kromě kódu, který chcete, na pásku uložíte i kusy staršího. Tento náhodný, ale smysluplně vypadající balast pak vstupuje do výpočtu kontrolních součtů a stoprocentně zamotá hlavu každému bláznovi, který se v těch datech bude chtít hrabat.
Pokud si chcete HiSoft C vyzkoušet na v emulátoru, potřebujete nejdříve zvolit vhodný prostředek. Ve většině běžných případů využívám JavaScriptový Qaop. Ten se bohužel v tomto případě moc nehodí, protože potřebujete často pracovat s obrazy pásek. Osobně používám ZEsarUX a pokud jej neznáte, určitě jej neváhejte zkusit. Tomu se předhodí parametry --tape helloc.tap --snap cc.zx
, kde helloc.tap
je kazeta s páskou vygenerovanou programem c2tap a cc.zx
snaphsot čerstvě nahraného HiSoft C. V něm zadáte
#include hello.c
ukončíte soubor stiskem SS+I a program se provede. Samostatné #include
vloží data z editoru (do něj je lze nahrát data pomocí příkazu g,,hello.c
),
Pokud chcete uložit přeložený program v binární podobě na pásku, musíte ještě před provedením #include
zadat direktivu #translate
se jménem, pod níž se program uloží (např. hello).
#translate hello #include hello.c
Výsledek na pásce bude binární blok. Pro nahrání a spuštění v čistém systému tedy musíte provést
LOAD “hello” CODE 25200 RANDOMIZE USR 25200
Z výše uvedeného popisu je zřejmé, že celý překlad probíhá z technických důvodů jednoprůchodově a že tedy nelze plně použít preprocesor. Direktivu #define
ještě trochu zvládá, ale podmíněný překlad už ne. Direktiva #include
funguje trochu odlišně od standardu (#include ?filename?
) a do jisté míry nahrazuje právě podmíněný překlad.
Krom preprocesoru má HiSoft C ještě jedno citelné omezení - přímo nepodporuje operace v plovoucí řadové čárce. Tento nedostatek však řeší jedna z dostupných knihoven použitím rutin z ROM.
Původní zdrojové kódy tohoto překladače bohužel k dispozici nejsou. V dekompilované a trochu pročištěné formě jej tvoří přibližně 12,5 tis. řádků v assembleru, což není mnoho. Z dnešního pohledu přímý praktický význam má jen minimální. I když se rozhodnete programovat pro Spectrum v Céčku, stále máte na výběr řadu jiných moderních variant. Ty ale samozřejmě nebudou fungovat přímo na cílovém systému.
HiSoft C svět nedobylo. Na vině je celá řada faktorů, od nepřívětivého editoru, přístupu mateřské firmy, která jej rozvíjela jen minimálně, přes obecné vlastnosti Spektra až po fakt, že ZX Microdrive se nakonec neprosadil a intenzivní využívání záznamových médií bylo pro přijatelně pohodlnou práci v tomto prostředí zásadní.
Ale už samotná existence tohoto překladače je inspirující. Vidět, jakým způsobem jeho autoři překonali zásadní technická omezení a dokázali přinést téměř plnohodnotné Céčko i do tak omezeného pracovního prostoru. To si zaslouží i po 34 letech malé připomenutí.
Tiskni
Sdílej:
To je nostalgie Pokusy s C na ZX Spectrum+ 48k skončili právě proto, že jsem ve své době měl jen kazeťák. Když jsem si polepšil na disketovou jednotku, tak už to zase nebylo aktuální. Prostředí Prometheus, pro psaní v assembleru, zvítězilo
Problém s Androidem je, že to sice běží na linuxovém kernelu, ale userspace je vyrobený kompletně od nuly. Tím se zahodila veškerá přizpůsobitelnost a konfigurovatelnost ekosystému desktopového unixu, kterou budovaly miliony lidí a unixových bohů posledních 30 let a kterou jsem si budoval na svém desktopu posledních 12 let.Však on mobil taky není desktop, tak k čemu by mi tam byl desktopový userspace?
GUI nejsou XkaDíky Google!
není tam nic jako xlevels (nastavení "Levels" obrazovky, znáte z GIMPu)Pro nás co spokojeně používáme Lightroom, a s Gimpem už roky nepracujeme to je?
Ale jak mi jiní lidé řekli, asi mám nestandardní požadavky na funcionalitu operačního systému (e.g. https://forum.root.cz/index.php?topic=16414.msg228284#msg228284).Zbytek tvého komentáře bych uzavřel ve stejném duchu
Však on mobil taky není desktop, tak k čemu by mi tam byl desktopový userspace?Proč by nemohl. Já ho používám například jako JTAG programátor.
Tak si dej: s/Xka/Wayland/, s/Xka/GTK/ nebo s/Xka/QT/ . U toho GTK si jsem jistý, že existuje i backend na framebuffer.GUI nejsou XkaDíky Google!
Však on mobil taky není desktop, tak k čemu by mi tam byl desktopový userspace?K tomu, abych si mohl jednoduše přizpůsobit cokoli co mě napadne.
Pro nás co spokojeně používáme Lightroom, a s Gimpem už roky nepracujeme to je?"Curves" (ty v LR jsou), ale jenom lineární. Používá se to třeba k tomu, když máš blbě oskenovaný dokument nebo moderní webovou stránku, které je tmavě šedá na světle šedé, a chceš z toho udělat černou na bílé, aby se to dalo číst.
Kamera není V4L2Jo to je peklo, ještě s GSM to výrazně komplikuje možnosti používání GNU/Linuxu na mobilech.
a * b
, kde člověk musí znát už v okamžiku parsování co je sakra a
a b
, aby věděl, jestli je to násobení nebo deklarace „b je proměnná typu pointr na a“, zatímco v Pascalu se tohle neděje, a proto jsme psali překladač Pascalu a ne Cčka. Ale třeba existuje nějaký trik, jak to snadno vyřešit a neřešit. A taky jak moc je to relevantní na počítači, kde není runtime pro používání věcí jako GNU Bison (Ponkrác nepíše, jestli chce ten překladač na tom 8bit počítači i provozovat, nebo je to jenom target a překládat se bude na něčem výkonnějším).
string
v Turbo/Borland Pascalu. První byte obsahoval délku (0-255), pak následoval vlastní text. Ale to bylo AFAIK jen jejich rozšíření, původní Pascal podle normy IIRC nic takového neměl.
Zkrátka C je svázáno s moderními procesory a jejich sadou instrukcí. Když C nepomůže procesor, tak to moc dobře nedopadá. Je to vlastně unikát: Programovací jazyk, který potřebuje podporu přímo od výrobců procesorů, jinak ho nelze slušně, natož efektivně implementovat.Nechci do toho kecat soudruhu, ale tak jako upozorňoval někdo u předchozí instance, upozorním i já: Největší úspěchem PDP bylo že neběžel na vakuové elektronce, ale na trandíkách naskládaných na vyjímatelných kartách (žádná integrovaná polovodičová součástka; Unit se jmenuje CPU protože to bylo implementované v celé té skříni s kolečkama zespodu aby se to dalo za použití tlačné síly dvou obvyklých soudruhů přesouvat po místnosti) a feritové paměti. Přesto na to někdo napsal nejen překladač, ale i operační systém který v podstatě používáme dodnes. Takže asi tak.
Zkrátka C je svázáno s moderními procesory a jejich sadou instrukcí. Když C nepomůže procesor, tak to moc dobře nedopadá.to je prostě směšné. Vždyť to bylo psané na něco co ani za procesor tak jako ho známe dnes považovat nemůžeme.
A třeba takový FORTRAN se používá dodnes.No to i BASIC pokud je člověk odkázán na produkty Microsoftu. Dokazuje to něco konkrétního?
Nechci ti do toho kecat soudruhu, ale nemluvíš tak trochu z cesty?Já, sure.
Kdyby se C nepřisálo na unix, který vlastně požadavky na procesory zglajchšaltoval, tak by se C nejspíše neprosadilo vůbec a zaniklo by postupně jako slepá větev. ... Céčko nelze efektivně implementovat tam, kde je málo registrů, není podpořena intenzivní práce se zásobníkem a rychlé ukládání/obnovování registrů.No hele, nevím nevím jak bych pařil minecraft na lispovém stroji nebo ve forthu.
Tak třeba architektury s mesh/grid pamětí jako Parallela.V každém tom uzlu je ale registrová architektura epiphany. To jsou pořád C-friendly procesory. BTW podpora mesh/grid interconnectu je poměrně stará, zajímavá ilustrace je v transputerech. Ten používal jazyk occam, ale to ho taky prý zabilo (špatná podpora C).
Jinak takove FPGA ( viz treba https://fpga.cz/ ) kam si muzes naprogramovat a prelozit procesor optimalizovany na konkretni ulohu neni zrovna apriori platforma, pro kterou by Ccko bylo byl optimalni jazyk.To mě přijde už moc mimo definici turingovsky univerzálního stroje. Každopádně vivado HLS umí syntetizovat hardware i z C zdrojáku a intel/altera nějak vyvíjeli opencl (což je vlastně taky +- C-like jazyk) překladač.
Ccko to asi moc neoceni.Jo pointery budou mít na zásobníkovém procesoru problém. BTW jak bys v té své architektuře naprogramoval Game of life?
No, pokud se na tom da turingovsky stroj naprogramovat (napr existujici implementace Z80 + urcite se da pridat podpora pro externi RAM a ctecku pasky) tak bych to za turingovsky stroj byl ochoten povazovat.Na takovou architekturu už zase Céčko půjde, jen by musel někdo pracně napsat backend pro GCC/LLVM nebo vymyslet toolchain, co bude ty backendy automaticky generovat z VHDL popisu.
Na ciste FORTH-like CPU bych asi spis dal ty datove zasobniky dva, na vedlesi bych vyskladal celou matici po radcich, na hlavnim pracoval a prubezne si prelejval v vedlejsiho casti matice do hlavniho a zase zpet. Napriklad.Nebylo by to strašně pomalý? Že bys musel načítat i buňky, který se měnit nebudou (i v dalekém okolí není aktivní buňka).
Tak zalezelo by, jake instrukce bych mel k dispozici (treba nahlizeni do nizsich casti zasobniku a tak)To by už se nebezpečně blížilo pointerům
taky by sel urcite nejak vylepsit ten algoritmus (co ja vim, mit to jako ridkou matici a ukladat jen aktivni bunky treba).Vida to je dobrej nápad. I když teda pro 3D celulární automat bych to implementovat nechtěl
Jak to resit optimalne je neco zcela jineho a zda resit GoL na FORTHu je dalsi otazka, FORTH je vyhodnejsi pro jine typy uloh.Njn, jenže na začátku vlákna šlo o to, že by nevznikl unix a architektury jdoucí tomu unixu na ruku.
Ale v kazdem turingovsky kompletnim jazyce asi jde napsat emulator stroje, na kterem Ccko (nejak) pobezi.mírně OT?: Jj to bude jádro pudla diskuze, ten ZX spectrum má tak malou RAM, že naráží na limity turingovsky univerzálního stroje mnohem víc než něco, co má aspoň 640kB RAM (až nekonečno).
RAM 16x8bit je uz prakticky nesehnatelna a drahaNestačí 16x octal D flipflop? Ten si můžeš navíc zapojit jak se ti zlíbí. A nebo použít výstupní makrocell jako jednobitovou RAM z nějakého CPLD (řada XC95144 by mohla možná dát těch 128bitů a zbytek použít jako dekodér).
Jinak podle soucastek (vetsina na 20MHz) to vypada, ze takt by mohl byt teoreticky tak v radu jednotek MHzTady bych spíš počítal s Tpd (propagation delay) než s Fmax. Musíš čekat s hodinovým signálem, než se přes všechny hradla dostane i ten nejpomalejší signál na výstup.
Stavim to z integracuTo jako fakt?
Z dalších vlastností procesorů je zajímavé mít adresní mód s relativní adresací (bázový registr + offset), ovšem ten na Z80 najdete.
Zrovna Z80 IIRC při použití prefixu 0xdd/0xfd na instrukce pracující s [HL]
místo [HL]
jako argument používala [IX+d]
a [IY+d]
. Ale jen s osmibitovým signed d, takže praktická použitelnost pro vyšší jazyky byla dost omezená.
Já vím, však proto jsem psal, že to na Z80 najdete :)
Oops… opravdu tam to "ne" není. :-) Tak to se omlouvám.
8-bitový offset na nejběžnější použití při indexování struktur naštěstí stačí.
No, v kontextu doby asi ano. Dneska jsou sice větší struktury denní chleba, ale když měl celý adresní prostor 64 KB a prakticky použitelné paměti bylo tak 30-40 KB, byla měřítka trochu jiná.
pole je ještě složitější případ, které snad x86 začala podporovat až od 80386
Jestli myslíte možnost použít scaling při adresaci, tak to ale jen pro 1, 2, 4 nebo 8, tj. typicky jen pole základních typů, ne něčeho složitějšího. Nakonec to ale vždycky jde obejít tím, že si ten offset předpočítám, ale v případě, že procesor pomůže specializovanou instrukcí, je to efektivnější. Stejně jako se dá v nouzi vystačit s pár registry, ale když jich je víc, je život o hodně jednodušší.
Jinak ten editor to je katastrofa. To ani nemělo šanci. Škoda. Díky moc za c2tap a nějaké manuály. Bez toho bych ani nenašel odvahu to LOADovat.
printf
, isalpha
apod. je zabudovaná přímo a částečně využívá rutiny z ROM. Další funkce ze standardní knihovny se musí importovat. Některé (popsané v dokumentaci) se povalují na HISOFT_5.TAP, ale tento soubor je bohužel poškozený. Zkusím to vydolovat. Rusové k tomu prý udělali i hi-res editor.
Rusové k tomu prý udělali i hi-res editor.No, pěkný. Akorát by mě zajímalo jak se vlastně používá.
Odpověď je prostá.Jinak na tohle je odpověď ještě prostší. Takhle se to tehdy prostě se softwarem dělalo. Někdy byl dokonce napsán v kódu vlastní loader, který se spustil a nestandardním způsobem kreslil nahrávací obrazovku a bůh ví co a teprve pak se načítal samotný kód která nebyl až tak velký když se přihlédne k tomu jak dlouho se načítá nějaká kravina na zavedení kódu. Ale že by někdo napsal LOAD "" CODE; RANDOMIZE USR, to by snad ani nikoho nenapadlo. To by nebyl produkt.
Vlastní loader byl v podstatě nutností, protože na Spectru standardní příkaz LOAD
nahrával program v BASICu a nespouštěl ho. Takže pokud bylo potřeba nahrát něco jiného, musel se udělat loader, který "hacknul" systém, aby se sám spustil ("autostart" - ten trik už si přesně napamatuju, ale IIRC se se loader nahrál tak, aby přepsal návratovou adresu a místo návratu z podprogramu pro podstatnou část implementace příkazu "LOAD
" se spustil ten loader) a pak nahrál zbytek.
U her pak samozřejmě bylo zvykem, že loader i něco vykreslil, ale ani tam nebyl loader nějak přehnaně velký v poměru k vlastnímu programu. I kdyby nahrával celou obrazovku jako bitmapu, tak potřeboval nějakých 6 KB + 768 B, zatímco hra samotná typicky zabrala celou paměť.
10 LOAD "" SCREEN$ 20 LOAD "" CODE 30 RANDOMIZE USR 24576
10 CLEAR 24199: LOAD "" CODE: RANDOMIZE USR 24200
A to se dá uložit SAVE "jméno" LINE 10.
Komplikovanější basicový loader nastavoval i barvičky, příp. něco vypsal.
10 BORDER 0: PAPER 0: INK 7: CLEAR 24199: LOAD "" CODE: RANDOMIZE USR 24200
V případě potřeby ušetřit každý byte se čísla nahrazovala výrazem, který v paměti zabral o kousek míň.
Např.
10 BORDER NOT PI: PAPER NOT PI: INK VAL "7": CLEAR VAL "24199": LOAD "" CODE: RANDOMIZE USR VAL "24200"
Další komplikace nastávaly při použití různých diskových zařízení. Třeba u Betadisku bylo potřeba rezervovat víc místa pro jeho systémové proměnné a buffer na jeden 256 bytový sektor, takže se RAMTOP posouval z minimálního 24200 pro pásku na 24500 (nebo víc, byl-li zavaděč delší s více basicovými příkazy.)
Obrázek je prostě jen jeden z mnoha binárních bloků (od 16384, dlouhý 6912 bytů). Buď ho nahraješ rovnou do obrazovky, nebo někam do volné RAM, typicky ty komprimované samorozbalovací (Pressor např.).
atd... atd...