Textově limitovaná platforma

 Textový žánr zejména na VIC-20.

Snad už třikrát jsem se otřel o VIC-20 a dnes se otřem zas.
Otázka je, proč se vůbec věnovat  zkriplenému a omezenému stroji, který si svých pět minut slávy užil asi jako ZX81 – tedy vyrobilo se ho pár miliónů kusů a kdekdo si ho koupil jen proto, aby po něm příští Vánoce pes neštěkl?
Uživatelé ZX81 přešli na barevné ZX Spectrum a commodoristi zdvojnásobili počet znaků na řádek a zdvacetinásobili kapacitu paměti přechodem na Commodore 64.

Bude to tím, že VIC-20 – stejně jako ZX-81 – v sobě skrývá větší potenciál, než jak vypadá na papíře, a je prostě svým způsobem zajímavý.
Stejně jako Sinclair inzeroval ZX81 jako seriózně míněný počítač (a v reklamně zdůrazňoval jeho výpočetní sílu), i Commodore uváděl VIC-20 heslem „opravdový počítač za cenu hračky“.

I když šlo spíš o hračku v obalu na počítač.

Proto má asi VIC poměrně velkou bochníkovitou case, barevně zvýrazněné F klávesy, Mitsumi klávesnici a power LED. Aby jako opravdový počítač vypadal.

V zásadě šlo o levnější variaci na téma počítačů Atari, konstrukci filozofií ne nepodobnou Sordu m5 – videoherní čipset, herní konzole s hrami v ROM cartridgích, čistě náhodou dovybavená o klávesnici a Basic.

Ty hry samozřejmě nevypadaly úplně příšerně – počítač měl barvy, díky provozu v de facto textovém režimu i rychlou grafickou akci, zvuk srovnatelný s tehdejšími herními automaty.
Pokud ale necheme jen zasouvat cartridge a pařit?

Nejviditelnější omezení, 3,5 kB RAM sice stačilo v ROM uloženým hrám pro dočasné proměnné, na větší programování nebo práci s daty to určitě nebylo.
Textový režim s pouhými 22 znaky na řádek pak prakticky zabíjí možnost práce s textem.
Člověka odradí už při psaní krátkého programu v Basicu. Šíře obrazovky by mohla stačit pro jednu instrukci assembleru, ale člověk se nesmí moc rozepsat při tvorbě návěští a raději by měl zapomenout na komentáře, jinak se mu nevejde na obrazovku ani krátká čekací smyčka.

22 znaků bylo opravdu nečekaně málo i na tehdejší dobu.
I vykopávky typu Apple I nebo první textové videokarty pro stroje typu Altair uměly většinou 40 znaků na řádek, použitelné minimum bylo 32 znaků (nejen Sinclair ZX-81 a Spectrum, ale i třeba HP-85).

To podstatné ale není na první pohled vidět – počítač má šílené rozdělení paměti, které se navíc dynamicky mění a konstantní není ani umístění VideoRAM.
Posledních 16 kB tvoří kernal a Basic ROM.
Předchozích 49 kB je rozkouskovaných do bloků, které obsahují kde co.
Podívejte se na obrázek.

Kliknutím mapu paměti VIC-20 zvětšíte

Zabudovaná RAM se nachází v bloku 0. Její součástí je i část VRAM.
V bloku 4 je I/O, znamová předloha a druhá (barvová) část VRAM.
Pro paměťová rozšíření je díra v bloku 0, volné 8 kB bloky 1, 2, 3 a 5.
Blok 5 (8 kB) je specifický tím, že slouží pro přimapování obsahu ROM cartridge, a při zapnutí počítače se testuje hlavička cartridge a případně se provede její autostart (k tomu se váže jedna hostorická zajímavost).
Problém je v tom, že nejmenší, 3 kB rozšíření vyplnění „díru“ v bloku 0 s ponecháním VRAM na „vyšším“ konci RAM, ale jakékoliv větší rozšíření (obsazující postupně bloky 1, 2, 3, v běžné praxi cokoliv od 8 kB rozšíření výše) pro zachování co největšího celistvého prostoru posune VRAM „dolů“ nad „3 kB díru“.
Tím se případně osazené 3 kB od velikosti volné paměti pro Basic zase odečtou (jsou přístupné jen pro PEEK/POKE a ze strojáku) a programy počítající s VRAM na určité adrese přestanou fungovat.

Při rozšíření o RAM v bloku 5 opět nedojde k navýšení volného prostoru dostupného pro BASIC (proto při resetu z úvodního hlášení o velikosti volné paměti nejde určit, zda je nebo není v bloku 0 a 5 osazena RAM nebo ne – rozšíření o 24 kB, 24+3 kB, 32 kB a 32+3 kB vám ukážou všechny stejně velkou volnou paměť).
Software uložený v bloku 5 ale může stejně jako ROM cartridge používat autostart.

Cartridge, jejichž obsah se nemapuje do bloku 5, tedy autostart nemají. Proto je potřeba různé monitory strojového kódu (jako je VIC-1213 cartridge, známá pod označením VIC MON), uložené v jiných částech paměti, spouštět příkazem SYS <adresa>.

Pokud by vás zajímalo, zda někdo používal rozšíření v 3 KB „díře“ bloku 0 – ano, třeba cartridge Super Expander, která obsahuje 3 kB RAM a rozšíření Basicu o grafické a zvukové příkazy.
Protože do této oblasti u větších paměťových rozšíření nezasahuje Basic, používá se i pro uložení různých ovladačů, monitorů a jiných rozšíření.

Vraťme se teď k textovkám.
Je to sice dost specifický, ale vzhledem k tomu, že počítače, které původně sloužily opravdu k počítání, byly většinou vybaveny textovým terminálem bez grafiky, i dosti pochopitelný žánr her.
Textový popis ovládaný textovým příkazem, připomínající oživlou knížku, vypadá totiž méně trapně, než písmenko P honící písmenko W. A člověk, trávící večery nad texty na obrazovce se čtverečkovaným papírem pro kreslení map v ruce taky méně vypadá, jako že si hraje, než když mu na monitoru vybuchují vetřelci.

ZX81 byl pro textovky vybaven taky zdánlivě nedostatečně.
32 znaků na řádek, pouze velká písmena, 1 kB RAM, kupodivu žádné zásuvné cartridge, membránová klávesnice, která nelákala tak úplně k zadávání nějakých delších příkazů -přesto jen sám Sinclair vydal hned čtyři tituly (Adventure A: Planet of Death, Adventure B: Inca Curse, Adventure C: The Ship of Doom, Adventure D: Espionage Island).
 Hry samozřejmě vyžadovaly 16 kB rozšíření.

Textovky byly ovšem ve své době poměrně populární (ne každý chtěl honit po obrazovce marťany, nebo aspoň nechtěl vypadat, jako že marťany honí) a tak se Commodore obrátil na Scotta Adamse, který tehdy vydával textovky pro TRS-80, aby pro uvedení VIC-20 na trh nějakou textovku připravil.
Výsledkem bylo pět textových her:
Adventureland (inspirovaná originální hrou Adventure)
Pirate’s Cove
Mission Impossible
Voodoo Castle
The Count

Jak ale vecpat engine hry, příkazový procesor a dostatečně rozsáhlé texty do 8 kB cartridge?

Scott Adams to vyřešil tak, že je tam nenacpal.
Použil 16 kB ROM. Aby nebyla cartridge zbytečně složitá a aby se nemusela hra dělit na dvě nesouvislé části, byla hra uložena v celistvě v blocích 2 a 3.
A jsme u historické zajímavosti – zde po vložení cartridge a zapnutí počítače se nestane  nic, respektive uvítá vás úvodní hláška Basicu. Autostart nefunguje.
Adamsovy hry je nutno startovat pomocí SYS 32592.

Pokud nemáte originální cartridge, a chcete Adamsovu textovku nahrát do RAM z disku, čeká vás ještě víc srandy.
Závisí na vašem paměťovém rozšíření – je potřeba 24+ kB (nebo stačí 16, ale musí být povoleny v blocích 2 a 3 – 16 kB rozšíření umístěné standardně jen v blocích 1 a 2 vám bude na nic).
Některé cartridge mají přepínače, které umí do jednotlivých bloků připínat RAM, ROM, chránit RAM proti zápisu (a tím emulovat ROM) nebo blok úplně odpojit. V takovém případě jen zakážete blok 1, počítač zapnete, nahrajete kód hry a spustíte pomocí SYS.

Pokud nejde blok 1 zakázat, můžete si pomoci několika pouky:
Po zapnutí zadat POKE 648,30 a po zadání stisknout RUN/STOP + RESTORE. Tento POKE přesune VideoRAM do její původní pozice jako na nerozšířeném počítači.
POKE 56,30 – nastaví horní hranici paměti pro Basic stejně jako na nerozšířeném počítači.
Další tři příkazy je třeba zadat spolu na jednom řádku:
POKE 44,16:POKE 4096,0:NEW
tato sekvence posune začátek Basicu na adresu 4096 (jako na nerozšířeném počítači).

Nejlepší je, pokud můžete vybavit kód hry konfiguračním loaderem nebo uložit do nějaké Flash i s příslušným nastavením.
Opatřit hry na disku loaderem s příslušným nastavením paměťových bloků případně doplnění o příslušný spouštěcí SYS příkaz umí Final Expansion 3.
Stejný loader umí s kódem hry vypálit Final Expansion 3 i do své 512 kB Flash ROM.

Populární cartridge MegaCart (obsahující téměř všechen starý software vzniklý pro VIC-20) si potřebná nastavení nese v sobě, takže jen zvolíte hru z menu, cartridge vám oznámí, jaké paměťové nastavení hra potřebuje, sama ho nastaví a hru spustí (bez nutnosti zadávat povel SYS).

Ale proč jsou Adamsovy textovky tak populární?

Nejspíš za to můžou právě nedostatky VIC-20.
Nedostatek paměti pro texty a nedostatek místa na obrazovce, kde se delší texty čtou opravdu špatně, vedlo Adamse k tomu, že jsou texty na VIC-20 opravdu stručné.
Je to porozovatelné i v jiných herních žánrech – na VIC-20 prostě nejsou dlouhé texty, protože tam prostě nepatří, dělaly by na obrazovce rotyku. Nikdo by je nečetl, a pokud ano, tak s dosti značnou námahou.
Texty jsou tedy stručné a výstižné, popis lokace se většinou vejde na obrazovku i s předměty (což ve 22 znacích na řádek a s trochou užvaněnosti by nebyl problém překročit). Popis máte rychle přečtený, hned se orientujete, žádné dlouhé louskání něčích pseudo-literárních výtvorů.
Ty hry se prostě dobře hrají.

V souvislosti s omezením délky textu na jednom řádku bych připomněl rozdíl mezi firmware zařízení MMC2IEC a SD2IEC.

Na počátku byla 1541-III,  periferie založená na procesoru PIC, která místo na disketu ukládala na SD kartu.

MMC2IEC je z dvojice x2IECstarší. Jde v podstatě o nápad přepsat 1541-III z PICu na ATmegu. Z původní portace sešlo a byl vytvořen firmware zcela nový, o to ale teď nejde.
Podstatný detail je, že veškeré ovládání, jako třeba procházení adresářů či mountování .D64 image (i když je MMC2IEC nepotřebuje, může nahrávat .PRG soubory uložené rovnou ve FAT formátovaném prostoru), se děje přes příkaz LOAD.
LOAD „image.D64“,8
LOAD „adresar“,8
LOAD „..“,8
LOAD „program.PRG“,8
Je jasné, že první namountuje .D64 image, druhý otevře příslušný adresář, třetí vyleze o adresář výše a poslední nahraje .PRG program. (Místo čísla mechaniky 8 je samozřejmě použít i jiné, 8 je defaultní adresace MMC2IEC.)
Je to krátké, celkem srozumitelné a snadno zapamatovatelné.
Jednu nevýhodu ale firmware MMC2IEC má – nepoužívá ve FAT dlouhá jména souborů, ale jen 8.3 formát.

SD2IEC je v zásadě jen novější verze firmware pro (novější) ATmegu (různé vylepšení hardware, jako připojení tlačítek pro přepínání image disků, není zas tak podstatné, rozšířit o ně lze i původní hardware).
Rozdíl je jeden – nahrávání se sice děje pomocí LOAD „program.PRG“,8 – ale LOAD „image.D64“,8 způsobí, že se Commodore pokusí nahrát celý diskový image do paměti!
Diskimage se mountují pomocí OPEN 1,8,15,“CD:image.D64″:CLOSE 1 a adresáře se otevírají pomocí OPEN 1,8,15,“CD/adresar/“:CLOSE 1. Tato syntaxe se nevzala jen tak odnikud,  pochází z harddisků firmy CMD, která 3,5″ mechaniky podporující adresáře a SCSI harddisky připojené přes IEC dodávala.
Problém je, že otevírání command kanálu je sice systémovější, ale mnohem ukecanější a mnohem méně user-friendly. A na VICu to sežere i víc místa na obrazovce. Tím se v podstatě otevírá prostor diskovým menu, loaderům a file managerům, které člověk proprocházení adresářové struktury disku použije raději, než pořád otvírat nějaký kanál.
SD2IEC sice podporuje dlouhá jména, ale u jména delšího než 16 znaků  použije jeho zkrácenou 8.3 podobu (v případě disků zapsaných na Windows to znamená mít tildu ve jménech).
Specielně pro použití na VIC-20 se mi MMC2IEC tedy líbí víc.
Ovšem Final Expansion 3 má zabudován SD2IEC, takže, už jenom kvůli kompatibilitě a možnosti využití už jmenovaných manažerů a commanderů, se SD2IEC bude hodit i majitelům MegaCart (kterou tak vhodně doplní i o možnost nahrávat do počítače i novější software, jako jsou třeba dema).

Těžká otázka k řešení. Každý nechť si vybere, co mu vyhovuje.