Chybějící programové vybavení Tesla Ondra SPO-186 (II. díl – programy, co chybí)

Co nám na Ondrovi v jeho softwarovém vybavení schází?

Dema:
Vypadá asi divně, že bych chtěl pro Ondru nějaké konkrétní demo, ale tenhle program je opravdu spíš demo než nějaká utilita. KECAL.

Na Ondru totiž přeportoval Martin K. mluvící rutinu ze ZX Spectra – v původní podobě, kdy se text zadává se středníky místo interpunkce.
Protože Ondra má normální českou znakovou sadu podle normy KOI-8-CS, chtěl jsem provést rutinu naučit zpracovávat normální češtinu místo středníků a s rutinou udělat dvě věci:
Vytvořit samostatný program, v kterém se dialogovým způsobem vkládají věty, které pak předříkává. To je tedy ono “demo” – větší užitek, než že předvádí mluvení na Ondrovi, ten program nemá.
Ne že by pro Ondru tento program opravdu neexistoval – už jsem ho samozřejmě vytvořil (Kecal 2 – podobný tomu od Oldsoftu). Ale při překladu tabulky diakritiky se vloudila nějaká chyba a Ondra háčkované a čárkované znaky přeskakuje. Rutinu je potřeba opravit.
Až to bude hotovo, chci opravenou rutinu vložit do Pico Basicu pro Ondru (povel SAY) – zabírá to sice nějaké (i když relativně nevelké) místo a je to blbina a zbytečnost, ale bylo by škoda, když už ten příkaz jednou existuje, aby to tam nebylo. Jestli jsme obdivovali na Amize, že mluví, tak teď můžeme na Ondrovi (i když mluvit zvládne i jednočip jedenapadesátka).

Hry:
Nemá smysl diktovat si, jaké hry by na Ondrovi měly být. Kdo nějakou napíše nebo naportuje, ten nějakou napíše nebo naportuje. A je to.
Ovšem nejjednodušší by byla portace textovek (případně i s překladem do češtiny), za předpokladu, že by od nich byly k dispozici zdrojáky.
Najít rozumně a jednoduše použitelný zdroják se mi zatím nepodařilo, když nepočítám pascalský zdroják Softporn Adventures (což je budoucí Leisure Suit Larry, jen ještě v holém textu bez obrázků), o kterém zatím nevím, zda by jej HiSoft Pascal na Ondrovi skousnul.

Při tvorbě nových textovek by se mělo dbát na to, aby text pokud možno nebyl studovatelný pomocí monitoru nebo výpisu souboru, a aby byl dostatečně bohatý.
Obojí zajišťuje packer Tolkien pro ZX Spectrum. Text je skrytý oku pátralovu a zabírá méně místa.
Portovat celý Tolkien na Ondru asi nemá smysl, jednodušší je (po konverzi češtiny na KOI-8-CS) zabalit text na Spectru nebo v emulátoru a pak přenést do kódu hry pro Ondru.

Ondra sice obsahuje font s češtinou, ale nově vzniklé textovky by mohly používat i výpis proporčním fontem (zdroják rutiny pro ZX Spectrum, která může být portována, již existuje, viz Assembler a ZX Spectrum strana 53).

Kromě adventur jsou pro Ondru vhodné logické hry, zejména tahové, případně tahové strategie.
Existuje zdrojový text Micro-chess pro Z80 a Sargon Chess pro 8080 (i s vysvětlivkami), takže můžeme doufat, že by se časem mohly i nějaké šachy pro Ondru vyloupnout.

Šanci by mohl mít i Lode Runner, tam se toho na obrazovce tolik nehýbe.
Nebo nějaký méně akční (tedy nescrollující) BoulderDash.
Ty jsou rozsahem pohybů srovnatelné s již existujícím PacManem.

Z her pro PMD-85 z poslední doby by na Ondru šly portovat: 2048, Plotting, Atomix a možná Kvádro. Nehýbe se tam toho tolik a zdrojáky (pro 8080) jsou k dispozici.

A ještě o jedné věci jsem přemýšlel.
Jak portovat na Ondru větší množství her naráz?
Zdá se to jako pitomost?
V 70. letech byl nejdostupnějším (nejlevnějším) počítačem COSMAC Elf s procesorem RCA 1802. Zatímco jiné počítače stály 1000 dolarů, nebo třeba 666.66 dolarů, a samotný procesor 8080 stál 300 dolarů, celý Elf se dal postavit za zhruba 80 dolarů (a s televizním obvodem celkem 100 dolarů). O něm jindy, ale roku 1977 byl vydán COSMAC VIP za 275 dolarů, což byl v podstatě rozšířený Elf v krabici, s hexadecimální klávesnicí místo přepínačů, se zabudovaným televizním výstupem a se zvukem, s ROM, obsahující kromě monitoru i interpret virtuálního stroje Chip-8, ve kterém byly psány hry, využívající hardwarové možnosti obrazu a zvuku počítače VIP (64×32 pixelů v monochromu).
Rovněž vznikly herní konzole (v USA i v Evropě) založené vlastně na stejném hardware a rovněž umožňující spuštění Chip-8 her.
Chip-8 byla tedy taková Java 70. let.

Stačilo by tedy pro Ondru vytvořit (nebo naportovat) Chip-8 interpret a hned na něm půjdou spouštět všechny Chip-8 hry (včetně Pongu, Pacmana, Space Invaders a Tetrisu).
Graficky je to sice krok zpět do 70. let, ale je to opravdové retro-hraní, mnohem víc retro, než na Amize.

Kromě původního Chip-8 existují ještě novější (zpětně kompatibilní) SuperChip8 s jemnější grafikou 128×64 a MegaChip8 (ale ten už vedle rozlišení 256×192 vyžaduje i spoustu barev a na Ondru se tak nehodí).
SuperChip8 by se ale, po zkompletování základního Chip-8, dal na Ondrovi realizovat. A hry by vypadaly už víc jako v 80. letech, než v 70.

Utility:
Z packovacích programů na ZX Spectru je k dispozici zdroják Turbo Imploderu.
Sice si pamatuji, že je v TuroImploderu jakási chybička, kvůli které jsem na některé soubory musel používat PKlite, ale musíme vycházet z toho, co máme.
TurboImploder je ale psán silně na tělo ZX Spectru, používá podivná návěští (x, y, k, l, f), která ne každý assembler sežere, takže mám hotovo přežvýkání zdrojáku do stravitelného formátu s úpravou názvů návěští a upravuji hardwarově závislé rutiny (vstup parametrů, výpisy, …). Hotovo ale ještě není. Hlavně ještě nemám pro Ondru převeden ten stínovaný nápis.
Ve finále by měl být Imploder umístěn ve VideoRam, jako na ZX Spectru, aby nezabíral místo jinde.
Ovšem moci si něco spakovat pro Ondru přímo na Ondrovi, to bude legrace!

Diskové utility jako takové nemají význam, dokud nebude pro Ondru existovat něco jako “opravdový disk“, tedy nějaký mass-storage.
Výjimkou jsou samozřejmě utility pro obsluhu CP/M na OndraSD (třeba by se hodila utilita, která by soubor poslaný po síti, OndraLinku nebo nahraný z magnetofonu uložila na CP/M disk).

Užitkové programy:
Už Eduard Smutný při tvorbě Ondry zdůrazňoval, že děti rády kreslí, proto musí být dětský počítač vybaven grafickým výstupem (ovšem já bych dodal, že děti mají rády barvy a hudbu – ZX Spectrum proto vždy u dětí vítězilo nad SAPI-1).
Basic EXP na Ondrovi je oproti Basicu EX na SAPI obohacen o “grafický subjazyk” DRAW, i já už mám vybaven Basic grafickými příkazy, ale nějaký pěkný grafický editor ještě pro Ondru není!

Vzhledem k specifické organizaci VideoRAM asi nebude úprava nějakého existujícího grafického editoru úplně triviální, ať už monochromatický z PMD-85 (GRED nebo Greditor) nebo ze ZX Spectra.
Vytvářet úplně nový program pak vyžaduje velké úsilí.
Dalším háčkem je to, že Ondra může používat různé velikosti obrazu (rozdíl je už ve standardním rozlišení použitém MIKOSem a Centrum 1000 ROM). Editor by musel být schopen různé velikosti obrazu pokrýt, tedy nejspíš si ukládat nějaká metadata, a obrázek by pak nebyla čistá data z VideoRAM, která by se dala snadno nahrát a zobrazit. To vše by se muselo “nějak” řešit.
Nevím proto, zda se grafického editoru na Ondrovi dočkáme.

Pod MIKOSem běhal aspoň krkolomný TEDIT, ale Centrum 1000 ROM žádný ani jednoduchý textový editor nemá.
Přitom je to jedna ze základních utilit, která by využití našla poměrně často.
Nemusí jít zrovna o DTP nebo texťák s pokročilými formátovacími funkcemi. Hlavně, aby to umělo zobrazit a upravovat čisté textové soubory.
Když to bude něco jako Kasword na PMD-85, tak dobře, ale soubory by ideálně měly být čistě textové bez formátovacích kódů.
Tohle je tedy ještě výzva.

Programování:
Asi nemá smysl snažit se o nový assembler, když už existuje poměrně komplexní Editor / Assembler, a navíc je doba cross-kompilace, kdy se stejně programy pro osmibity vyvíjí na mnohobitech.
Ale jinak programovacích jazyků na Ondrovi není dost.

Jak jinak, Zenitcentrum slibovalo Forth, Lisp, Prolog a samozřejmě Basic.

Forth je sice trochu obskurní (protože RPN), ale nesmírně výkonný prostředek (po roce 1976 byl oficiálním programovacím jazykem Mezinárodní astronomické unie).
Zdrojáků různých verzí Forthu pro Z80 je více, takže se nebojím, že by si někdo nezkusil nějaký někdy naportovat. Snadná portovatelnost je přímo základní vlastnost Forthu.
Ondra je sice poněkud zvláštní hardware, ale Forth už běhal na podivnějších.

Lisp je ještě větší obskurnost, ale je tu jedna věc, která by mohla pomoci.
Kromě Common Lispu existuje i jazyk Scheme, což je jakýsi vylepšený Lisp.
No a právě interpret Scheme pro Z80 byl předmětem jedné bakalářské práce. Výsledkem byla implementace Scheme pro Sharp MZ-800 a počítače MSX.
Problém je ten, že zdrojové texty, tedy digitální příloha popisované práce, nejsou k dispozici, a nepodařilo se je získat ani akademickou cestou. Je tedy možné, že digitální příloha vůbec neexistuje a jedná se o podvodnou práci popisující neexistující kód. Z oponentury nevyplývá, že by oponent viděl zdroják nebo reálně běžící program.
Ale v případě, že zdrojáky existují a podaří se je sehnat, by portace na Ondru možná byla a ten by tím získal interpret moderního dialektu Lispu, i když možná zjednodušený.

Prolog chtěli v Zenitcentru zřejmě portovat ze ZX Spectra, jako to udělali s HiSoft Pascalem.
Portace HiSoft Pascalu byla možná hlavně díky tomu, že byl psán jako multiplatformní a hardwarově závislé rutiny tvoří cosi jako BIOS, jehož změnou se dá portovat. Proto existuje kromě ZX Spectra i pro Amstrad CPC a další.
K Micro-Prologu ze ZX Spectra není zdroják, ale je dostupný zdroják pro E-Prolog z Amstradu CPC.
Tedy aspoň implementace malého (6 kB) E-Prologu by byla možná.

Ondra samozřejmě nemůže být bez Basicu.
Cesty, jak se k Basicu dostat, byly dvě:
1) vzít Basic EXP z MIKOSu a upravit jej pro běh pod Centrum 1000 ROM.
2) vzít jiný plnohodnotný Basic, ke kterému jsou zdrojáky (Microsoft NASCOM Basic) a upravit pro Ondru s případným doplněním grafických a zvukových rutin a jiných hardwarově závislých částí.
Tak jsem, jak už jste si mohli počíst (1 2 3 4), zvolil třetí cestu – za základ vzít jednoduchý Tiny Basic a ten pak obalit dalšími funkcemi a rutinami.
Zatím ovšem zůstává tak, jak jsem ho v roce 2016 zanechal (kdy jsem měl čas se mu věnovat díky žloutence, ovšem při letošní neschopnosti s poraněnou rukou jsme nemohl psát na počítači a tak se s Basicem nepohnulo). Zbývá dořešit odkládání parametrů mimo zásobník, kolizi bufferů, dodělat vstupně/výstupní operace (a joystick) a pak dořešit kompilátor (respektive ukládání se spustitelným runtimem).
(A zmiňoval jsem už problém příkazu SAY, spojneý s programem Kecal 2.)
Jak dlouho se na tohle bude čekat, čert ví.

Pak tu je ještě jeden Basic pro Ondru, který nemáme.
Už roku 2015 Martin K. portoval na Ondru kód ROM ze ZX Spectra, tedy Sinclair Basic.
Bohužel teď žádnou zmínku nemůžu najít.
Existuje podobný projekt ZX ROM pro PMD-85.
Portace ZX ROM samozřejmě není hotová, ale po dokončení by umožnila používat známý dialekt Basicu, který je léty prověřený a pro začátečníky jednoduchý.
Samozřejmě bych doporučovat pro portaci použít nějakou upravenou ROM, kde se místo klíčových slov jedním stiskem klávesy zadávají příkazy po písmenech (mám dojem, že i takové existují), samozřejmě s odstraněním známých chyb, které Vickers zanechal.

No a od Basicu zase pryč.
Na prvních mikropočítačích a minipočítačích se používal jazyk FOCAL – “formula calculator”, též “formulating on-line calculations in algebraic language” – já mám raději tu první zkratku. Vytvořili ho v DEC pro PDP-8, protože na původní sestavě se 4 KW by Basic nerozběhali.
FOCAL je podobný zjednodušenému Tiny Basicu, používá jednopísmenné zkratky příkazů. Nepracuje s řetězci (kromě formátování výstupu), ale zase není celočíselný, ale poskytuje vysokou přesnost v desetinných číslech, hodí se tedy na kvalitní provádění matematických úloh i na omezeném hardware.
Zachovaly se zdrojáky v mnemonice 8080 i Z80, sice jde o zdroják pro M80 plný maker a podmínek, ale zdařilo se mi jej upravit tak, aby to můj modernější assembler skousnul.
Zbývá jen doupravit hawdwarově závislé rutiny a mělo by být hotovo.
Kromě jedné drobnosti – FOCAL nemá příkazy pro nahrání a uložení programu. Hádejte, proč je tam nedali.
Samozřejmě pro provoz na Ondrovi, který nepoužívá sériový terminál, by se příkazy pro nahrání a uložení programu mohly časem doplnit.
A bylo by zas o jeden interpretovaný jazyk na Ondrovi více.

Pokud ale chceme tvořit pro Ondru nové hry a aplikace, hodily by se kompilátory více, než interprety.
Proto taky chci, aby se v Pico Basicu dal uložit vytvořený program jako samospustitelný s malým runtimem, nezávislý na editoru.