V tomto článku vás chci seznámit s projektem „ONDRA+“, do kterého jsem se bezhlavě pustil po vydání hry Ondra mezi Balvany. Chtěl jsem jej prezentovat na ByteFestu 2023, avšak z mé účasti sešlo. Upozorňuji, že v článku je mnoho domnělých historických poznámek či několik výroků k určitým osobám a nelze je považovat za fakta.
Cílem projektu bylo vytvořit něco, co rezonovalo mezi příznivci Ondry od jeho zrodu, co dokáže pozorný čtenář vyčíst z dobových příruček, dobových článků i dobových počinů a vlastně i HW návrhu. Nicméně nebyla síla, možná technické podmínky a zřejmě ani čas pro realizaci.
Pojďme se společně vydat do minulosti, kdy jsme byli mladými, dětmi, nebo jsme vůbec nebyli a popustit uzdu fantazii nad domácím mikropočítačovým světem, který byl stejně tak mladý a pestrý.
Po představení počítače Ondra v roce 1985 a uvedení do volného prodeje, jakožto prvního tuzemského počítače, bylo programové vybavení založené na systému MIKOS. Ten byl přejat z velmi úspěšného průmyslového počítače SAPI-1. Základním balíčkem programového vybavení pro tento systém se staly programy TOOL, TEDIT a BASIC EXP V5.0/G. Hlavní myšlenka spočívala v určité kompatibilitě mezi těmito počítači. Programy v BASICU jsou záměnné, pokud nejsou použité grafické funkce. Dokonce se mi podařilo bez potíží spustit na Ondrovi (v emulátoru) i binární programy ze SAPI 1 – například BASIC EXP 4.0, PEDIT, atp. čímž jsem si v praxi vyzkoušel binární kompatibilitu CPU 8080 (SAPI) a Z80 (Ondra) tak kompatibilitu systému MIKOS. Toto je sice hezké, ale historie ukázala, že naprosto zbytečné vzhledem k zaměření počítače na děti a mládež. To, že se Ondra ocitl v monitoru po zapnutí (tzn. z pohledu dítěte se s ním nedalo „nic dělat“), bylo podle mě jeho hřebíčkem do rakve, nikoli jeho často připomínaná pomalost či skromná klávesnice. V technických možnostech tehdejší velikosti ROM 4kB si myslím bylo umístit například mikroBASIC a děti by se mohly učit ihned základům programování. Nestalo se tak, a BASIC (plnohodnotný) se musel nahrávat z kazety. Byl to neskutečný opruz.
Pokud by při tomto vybavení Ondra zůstal a neexistovalo by nic jiného než MIKOS, tento nedostatek by byl vyřešen v roce 2012 Daliborem Smolíkem, který vytvořil tzv. BASIC ROM, kde se mu podařilo k MIKOSu přidat původní BASIC beze změn.
Ale zpět do minulosti, uběhl rok, a někdy v roce 1986 se parta programátorů ze Zenitcentra okolo Víta Libovického pustila do díla a napsali zbrusu novou ROM, kterou vydali v roce 1987. Tato ROM se nazývá SSM ROM nebo také ViLi ROM. V úvodu příručky je perfektně sepsané zamyšlení proč volili ty a ty funkce a proč se tam bohužel BASIC opět nevešel.
Celá ROM je zaměřená především pro snadné programování aplikací pro Ondru, vylepšené psaní na klávesnici, čeština a možnost nahrávání programů i po síti. Měl to být určitý nádech pro Ondru, při té příležitosti byly portovány hry ze ZX Spectra a také vydána první a poslední oficiální hra Město robotů. K tomu též editor assembleru EDITASM a Pascal, tudíž se mi zdá, že tvůrci měli BASIC až na vedlejší koleji. Nová ROM si nezachovává jakoukoli kompatibilitu s MIKOSem (odlišný formát záznamu na pásce, odlišné rozdělení paměti, odlišná znaková sada, rozlišení obrazovky, význam LED diod…). To bylo velmi nešťastné, protože ze stejného hardware se stala další nová platforma. Přes to všechno ji vidím pro Ondru jako vhodnější. Už jen přivítání „Zdraví Vás ONDRA“ je pro mne jasným vítězem místo suchého „Ondra V5“. Malé dítě, co je stále ve mne je rádo, když mě Ondra vždy hezky pozdraví. A každé dítě si chtělo především hrát, tzn. rychle nahrát hru. Až když došly hry, začalo zkoumat co jiného se na tom vlastně dá dělat. Avšak pro MIKOS nebyla ani jedna hra!
Pozn.: prakticky jsem zkoušel, že všechny tehdejší hry nejsou závislé na SSM ROM, nekolidují s pamětí a lze je převést pro MIKOS kromě hry Město robotů, nevylučuji tedy, že tyto hry někdy někdo pro MIKOS převedl
Pro novou SSM ROM tu tedy bylo bohatší programové vybavení a najednou i několik her či známý Karel. Z dnešního pohledu dále podpora „sítě“ umožňuje používat moderní úložiště OndraSD, které s původním MIKOSem nelze použít. Takže není divu, že většina Ondrů dnes používá SSM ROM. Bohužel po zapnutí Ondry a vroucím přivítání mu dojde dech a nic víc už neuvidíme, protože ten velký kus práce je skryt před zraky uživatele, který má jednu jedinou možnost a to libovolnou klávesou spustit nahrávání programu z kazety nebo sítě (OndraSD) po zadání #. Působí to, že celá SSM ROM je jen jakýsi loader. A co kdyby se nám zachtělo BASICu? Přeci jen pro malé děti a zřejmě i učitele byl tehdy přijatelnější než dostupný Pascal. BASIC skončil podle mých informací v úvahách a Ondra se ocitl de facto bez něj, pokud jste nechtěli absolvovat ještě větší opruz než s původní ROM, t.j. nahrát z pásky původní systém MIKOS, v něm pak nahrát z pásky BASIC … naprostá zrůdnost. Takže si necháme zajít chuť. Buď mít Ondru bez her a s BASICEM z pásky nebo s hrami, Pascalem, lepším ovládáním, ale dá se říci bez BASICU…obojí je tak nějak špatné. Tento stav trval do této chvíle.
Jsem přesvědčen, že se jednalo o mezikrok a cílem bylo přepsat původní BASIC pro novou SSM ROM. A při dostupnosti 8kB pamětí se pokusit jej umístit do ROM přesně tak, jak jsem to udělal já. Nicméně svět počítačů se měnil tak rychle, že bylo zřejmé, jak nevýhodné je investovat omezenou kapacitu malé země jako je ČSSR do počítačů nekompatibilních se světovými tahouny. Vždyť i sám Ing. Smutný v té době už pracoval na počítači Honza, s CP/M a ve verzi s CPU 8088 dokonce PC-XT kompatibilní. V Tuzexu již šel zakoupit například Sord M5 sice za bony, ale s nákupní hodnotou podobně jako Ondra a stejně jako Ondra neměl BASIC v sobě, ale měl lepší klávesnici, rychlost, zvuk, sprity, barvy a BASIC v podobě přídavného modulu. Proto si myslím, Ondra už se nechal být tak, jak je. Pár převedených her, jedno Město robotů a výborná ROM, která ale bez nativního BASICU neměla moc šancí zaujmout.
Ondra od výroby, návrhu Ing. Smutného dokáže pracovat s až 16kB ROM. Pokud někoho tehdy tedy napadlo do této velikosti umístit jak SSM ROM (4kB) tak BASIC (12,7kB), jednoduchým součtem bylo hned jasné, že to nejde a to nepočítáme úpravu BASICU. Ve mne ale hlodala myšlenka a především touha dodělat to, na co už tehdy nebyl čas a využít všechny možnosti, co nám Ondra dává a udělat to způsobem odpovídajícím nejbližšímu možnému roku vzniku, čili 1987.
Myšlenka zrála a zrála – zkomprimovat moderní metodou modifikovaný BASIC a umístit do ROM. Ze zbylého volného místa vymáčknout maximum.
Takže jsem si jednoho dne zkusil zkomprimovat binární BASIC EXP v5.0/G, kde jsem se dostal na nějakých 10,5kB a po přičtení dekompresní utility (68B) jsem získal poměrně „velké místo“ cca 2kB. Tudíž udělat upravený BASIC do ROM najednou nevypadalo zcela nemožně. Volné místo tedy bylo dáno a omezovalo prostor pro novou tzv. mezivrstvu kompatibility – dále „MK“, úvodní obrazovku a obslužné procedury. MK má za úkol přijímat volání programu psaného pro MIKOS (v tomto případě BASIC), převést ji na volání SSM ROM, tuto službu provést a případně výsledek převést zpět ve tvaru MIKOSu zpět do programu. Bohužel služby MIKOS a SSM ROM jsou rozdílné i v případech, kdy by to vůbec nemuselo tak být a musel jsem tedy naprogramovat všechny. Díky geniálně navržené SSM ROM (a dostupnosti výpisu), která umožňuje využívat téměř celou RAM, tzn. že program může být uložen i do spodních 16kB, mohl být BASIC umístěn na jeho původní místo, tzn. od adresy 1000h. To mi zjednodušilo práci po disassemblování BASICU, protože jsem nemusel všechny skoky relativizovat.
V disassemblovaném BASICU jsem hledal všechna volání MIKOS služeb začínajících na 100h. Vytvořil jsem si vlastní tabulku služeb, která je pak volána v MK. Velkým problémem při realizaci bylo to, že SSM ROM tak jak je, je zrcadlená. Opakovaně se zobrazuje v adresovém prostoru do 16kB (je vícekrát popsáno v jiných zdrojích). A největší šíleností je, že jsou tam skoky sebe sama ze zrcadla na zrcadlo. Pokud bychom si označili 2kB bloky jako I. až VIII., tak SSM ROM pracuje s bloky I. IV. a V., kde první blok zabezpečuje volání instrukcí RST a základních funkcí SSM ROM. No a kam vecpat ten komprimovaný BASIC a MK? Bylo nutno zabalený BASIC rozseknout a umístit do zbylých bloků II., III., VI., VII., VIII.
Úprava samotného BASICU tak, aby pracoval s novými službami pod SSM ROM byla naprosto nejnáročnější část práce a noční můrou. Vše jsem musel dělat pomocí reverzního inženýrství. Na jednu stranu jsem měl hodně práce za sebou, ale další a další problémy se nabalovaly, které jsem byl nucen řešit, protože jsem nedokázal zahodit již odvedenou práci… Přepracování na celoobrazovkový editor si vyžádalo mnoho a mnoho úprav. Zároveň jsem udělal určité patche do SSM ROM aby byl co nejvíce používán režim fast. Přinutit k funkci grafické příkazy také nebylo vůbec jednoduché. Implementace češtiny si vyžádala též své, protože BASIC používá tokenizaci (tzn. příkaz má zdvihnut poslední bit stejně jako kódování KOI-8-ČS), takže toto původní BASIC řešil uživatelským zapisováním detokenizujícího tokenu a to ještě s nutností zavedení české abecedy z pásky. I v příručce je zmíněno, že další verze BASICU toto bude mít vestavěno a vidíte? Měli pravdu 🙂
Místo dalších nudných komplikací musím uvést jednu zajímavost a to, že BASIC měl ochranu proti pirátství. Pokud se podíváte na binární výpis BASICU, najdete řetězec „ING. PERINA“ a k tomu už známý výpis BASIC EXP TESLA DIZ. atp… Ing. Petr Peřina je uveden jako autor všeho možného z Tesly Eltos. Jako autor je psán např. u BASICU, dokonce CP/M pro SAPI-1. O původních autorech Microsoft nebo Digital Research tu není ani stopa. Přesto při každém zadaném příkazu v BASICU a odeslání Enter, se spočítá kontrolní součet (CRC) celého řetězce od ING. PERINA po TESLA DIZ a pokud součet není 0, BASIC se restartuje! Ano.. chudák pomalý Ondra musel po každém Enteru ještě počítat CRC…! Domnívám se, že tato ochrana tam byla již od Microsoftu a v Tesle tam zvolili vhodný řetězec tak, aby vyšlo CRC 0. Já tedy tuto ochranu zcela vypustil, protože je zbytečná a zpomaluje běh.
A jak to tedy celé funguje?
Po zapnutí ONDRY+ se děje toto: Inicializuje se SSM ROM až po tzv. WARM start, pak se odskokem spustí startovací procedury, kde se nejprve zkopíruje dekompresní utilita do horní paměti, pomocí této utility se dekomprimuje startovací menu do horní paměti a spustí. Uživatel vybere akci, kde nejzajímavější je spuštění BASICU. Tam se provede vykopírování postupně všech komprimovaných bloků z ROM do horní RAM hezky za sebou, z horní RAM se dekomprimuje na konečné umístění od 1000h. Poté se použitá horní pamět vymaže, nastaví se WARM adresy pro BASIC a provede se skok do BASICu. BASIC pak provádí volání procedur MK umístěnou v dolní RAM, která provádí volání procedur z SSM ROM. Uživatelská paměť pro BASIC tedy zůstává téměř stejná jako v případě MIKOSu na úctyhodných asi 35kB.
Zcela nové jsou kazetopáskové procedury v BASICU. BASIC nechával téměř vše na MIKOSu, který měl tyto procedury dokonalejší než SSM ROM. Musel jsem je tedy nově napsat. Snažil jsem se o přímočarost a jednoduchost tak, aby bylo použití pro děti snadnější než „strohý“ MIKOS.
Tato softwarová změna, která z Ondry dělá pocitově mnohem vyspělejší počítač, dokazuje důležitost software a důležitost jeho včasné implementace. Pokud mi dovolíte, budu zde polemizovat o tehdejším stavu počítačů v ČSSR a co by Ondra+ mohl znamenat. V roce 1987 byly dostupné pro školy počítače IQ-151 a PMD-85. V tomto roce už byly v produkci SSSR EPROM čipy s kapacitou 8kB vhodné pro Ondru. Na školách stejně probíhala výuka především BASICu, potažmo Karel. Cenově byl Ondra na třetině (!) výše zmíněných počítačů. Propracovaný, ihned spustitelný Ondrův+ (Microsoft) BASIC s grafickými možnostmi, celoobrazovkovým editorem, češtinou atp. by byl vážným konkurentem těchto tří uvedených strojů. Navíc odlišné a daleko intuitivnější ovládání shiftů v SSM ROM oproti MIKOSu zmírňovalo obtížnost psaní textů na skromné Ondrově klávesnici. Ostatně… kdo si tuto novou ROM do svého Ondry umístíte, posoudíte sami. Já osobně se na Ondrovi cítím již podobně jako na svém oblíbeném C64, až na to, že Ondra má lepší BASIC. Implementace češtiny, ovládání rekordéru SP210, práce v síti nebo tisk v CP852 jsou už další libůstky, které se mi podařilo ještě vměstnat.
Jelikož se mi líbí myšlenka alternativní historie, všechny parametry nové ROM jsem sepsal do další příručky tak, aby vypadala jako čerstvě vydaná v roce 1987. V ní se rovněž dozvíte, jak pracovat v novém BASICU, kterému jsem dal příponu SSM, čili „BASIC EXP v5.0/G SSM„.
Ondra+ ROM je zatím v raném stadiu, ale plně použitelná. Předpokládám, že další vývoj bude pokračovat na základě dalších zkušeností nebo podnětů. Vše co stačí udělat pro vdechnutí nového života do vašich Ondrů, je sehnat si 2x 2764 EPROM, vypálit a přepojit propojku na desce. Takže vzhůru do alternativní historie roku 1987!
Odkaz ke stažení: https://github.com/72ka/Tesla_Ondra/tree/main/Ondra%2B