7 falešných tónů. Tak by se daly nazvat zvukové možnosti Ondry od výroby. Byly určené pouze pro zvukovou signalizaci a vzhledem k celkovému návrhu Ondry se dá ještě říci, že jsou tyto možnosti docela slušné, protože to mohlo být například omezené na jeden tón. Ondra vlastně obsahuje 3-bitový tónový generátor, který generuje tón nezávisle na CPU, což je pro potřeby signalizace naprosto dostačující. O hudbě však nemůže být řeč. Existuje možnost jak na Ondrovi zahrát jakýkoli tón, což je vlastně hack, protože se periodicky spouští generátor tónu právě požadovanou frekvencí. Lze tak úspěšně vypípat melodii, nicméně je třeba mít zatemněné zobrazení nebo alespoň částečně zatemněné zobrazení s využitím přerušování – viz. demo úžasné demo GENESYS na Forever 2023 (https://sites.google.com/site/ondraspo186/8-programy/8-3-demo-genesys). Avšak tato metoda vyžaduje opět plné zatížení CPU a omezování zobrazení a toto celkově nedává prostor k realizaci především plnoobrazovkových ozvučených her s doprovodnou hudbou.
Motivace
Já jsem člověk hudebně založený, hudbě na počítači se věnuji amatérsky od mládí. Vždy u mne vítězily počítače, co měly hudební možnosti (C64, Amiga). Ondra je můj nejoblíbenější 8bit počítač, kde jsem díky oživování toho svého kusu byl donucen se naučit znát dokonale jeho HW a později se naučit jej programovat, to vedlo k prvotině a to konverzi hry FallingBlocks pro Ondru (http://www.ondraspo186.8u.cz/?p=471). Velmi mi chybělo, že je Ondra hudebně ošizen a proto jsem se rozhodl jej pozdvihnout a to i sám sebe ve svých zkušenostech.
Cíle
Od začátku jsem si stanovil jasné cíle, které mi dávají smysl:
- Možnost použití na Ondrovi bez HW úprav
- Kompatibilita s OndraSD/Joy
- Použití dobových součástek, tak, jak by asi mohl vzniknout například na přelomu 80-90let
- Minimální HW nároky na playrutinu
Jediný čip na trhu z mého pátrání, pro tyto účely použitelný a z té doby je SN76489. Je to 4 kanálový čip, generující 3x obdélníkový průběh a 1x šum. Pro definici a rozeznění tónu mu stačí poslat 2byte. Ondra je vybaven paralelním rozhraním, to je zde plně využito. Návrh nekoliduje s linkami OndraSD. Název jsem zvolil dle určité linie co je u Didaktiku a proto OndraMELODIK.
Vývoj
Nejdřív jsem si nakreslil schéma jak by to asi mohlo vypadat a postavil si prototyp na nepájivém kontaktním poli ze šuplíkových zásob. To bylo poměrně snadné. Pro mě nejhorší část byla, jak to rozeznít. A chtěl jsem začít rovnou tak, abych to mohl použít do budoucna. Takže jsem si napsal rutinu pro zápis byte na paralelní rozhraní tak, aby byla co nejrychlejší, protože těch bajtů se tam posílá docela hodně a na Ondrovi je potřeba šetřit s každým taktem CPU (bez nadsázky). Pak jsem si upravil opensource playrutinu pro Nyancat song a posílal na port a …. ono to hrálo!
Z prototypu bylo třeba vyřešit pár nepříjemností, především, že čip generuje tón, dokud mu nepošlete “ticho”, nebo že po zapnutí napájení si prostě začne pípat jak se mu zlíbí…. normálně u všech počítačů tohle řeší inicializační rutina v ROM, ale to bych porušil cíle projektu, kdyby OndraMELODIK vyžadoval upravenou ROM. Zvolil jsem tedy taktiku, kdy je čip odpojen od hodinového signálu, tudíž je blokovaný a nemůže pípat do doby, kdy na port přijde první byte. Ztlumení čipu před resetem z programu již řeším softwarově v daném programu. Toto hardwarové utlumení je realizováno klopným obvodem, který lze opět utlumit stiskem tlačítka, což se hodí v případě, když dojde z jakéhokoliv důvodu k nesprávnému resetu Ondry.
Dále jsem si říkal, že když už něco takového stavím a je tam místo, tak by bylo fajn vyvést konektor DB25 pro připojení tiskárny, což měl Ondra ve vínku od narození. Proto si každý může volitelně osadit modul i tímto konektorem a pak použitím přepínače MELODIK/TISK zvolit funkci. V poloze TISK je čip ve stavu vysoké impedance a nemá tedy vliv na datové signály. Ale pozor… přesto může náhodně hrát. Tudíž v režimu TISK je třeba vypnout reproduktory, pokud tedy nechcete poslouchat hudební interpretaci dat posílaných na tiskárnu čipem SN76489. Ukázka tisku zde
Také bylo nutno mít programovou možnost detekovat modul. To jsem vyřešil tak, že čip po každém přijetí byte pošle signál zpět, zapojil jsem na vstup /BUSY. Softwarově jsem pak vytvořil rutinu pro detekci, kdy pošlu byte na čip, kde jsem měřil na osciloskopu odezvu čipu v ms. Programově jsem pak dal čipu asi 3 násobné množství času, do kdy se musí “ozvat”. Pokud se ozve, vím že OndraMELODIK je přítomen.
Stavba
Po tomto vývoji a vychytání much jsem přistoupil k fyzické stavbě, což už bylo velice zábavné a šlo to rychle. Vyhrál jsem si s krabičkou, aby byla co nejvíce osobitá a odpovídala designu Ondry a zároveň bavila dětskou duši – pro kterou byl Ondra určen a domnívám se, že tuto duši máme v sobě my všichni, co si s těmito počítači hrajeme.
Všechny podklady ke stavbě jsem zveřejnil na Githubu pod svobodnou licencí a může si to vyrobit doslova každý (https://github.com/72ka/OndraMELODIK).
Software
No a na řadu přišla nejtěžší úloha. Co by byl sebedokonalejší HW bez patřičného software.
Jako první věc jsem vytvořil demo, ukazující možnosti OndraMELODIK při plném zobrazení, kde je plné rozlišení a navíc plynulý běžící text. V tomto demu je ukryt mnou modifikovaný VGM přehrávač, což mi přišlo jako nejlepší cesta, jak na tomto poli tvořit hudbu. Toto demo zároveň otestuje modul a automaticky zjistí jeho přítomnost, což se projeví i na běžícím textu.
A co dál?? Mám HW, mám demo… dál to nejnáročnější, být hudebníkem a programátorem. Nejsem ani jedno. Přesto jsem se do toho pustil. Na začátek jsem si dal raději jednodušší cíle a to, samotná hudba na pozadí ve třech kanálech s konstantní obálkou. Samotná hudba je upravený (zmenšený) VGM formát, kde jsou jen údaje o frekvenci a času – zatím jsem to ani nekomprimoval, s tím počítám do budoucna. Tón se generuje rutinou. Zatím je použita obálka typu “piano”. A proto to hraje jak hraje. Melodie jsem zatím vytvořil tři, jsou ve FallingBlocks v2. Jako zdrojový formát mám MIDI soubor, který si upravím na tři nezávislé kanály. MIDI pak překonvertuji na VGM pomocí dostupné utility. Obálku tónu si naposlouchám v aplikaci Deflemask ručně ji pak zadám do playrutiny v Ondrovi. U tohoto řešení jsem zůstal, nemám úplně ambice dělat chiptunera. Do budoucna budu rozšiřovat rutinu o vibrato a arpeggio, což by mělo přinést daleko lepší výsledky. Vše je o času.
Každopádně FallingBlocks v2 (http://www.ondraspo186.8u.cz/?p=566) je první hrou pro Ondru, co má podporu OndraMELODIK.
A co dál..?
Kdo byl na ByteFestu 2022, mohl vidět celou sestavu v akci
Také jsem soukromě ukazoval, co je pod pokličkou… což nechci úplně prozrazovat, ale já pevně věřím, že je na co se těšit, ne na hudbu, ale pracuji na další hře, která mi dává opravdu zabrat, a kde bude OndraMELODIK dělat především zvuky a hudbu ve hře neplánuji protože si myslím že se tam zkrátka ne úplně hodí.
Závěr
Bude mě nejvíce těšit, pokud si OndraMELODIK postaví co nejvíce lidí, protože o to víc pak moje práce dává smysl. A to i budoucí.
Mám zároveň radost, že vzniká i mutace OndraMELODIK od Solarise, avšak na jiných základech a to SMD verze integrovaná v Ondra JOY, která pochopitelně nebude mít vyveden konektor na tiskárnu, ale poskytne shodné zvukové možnosti. Uživatelé tak budou mít na výběr ke které technologii se přiklání.
Stažení pro ViLi ROM: demo_test.zip
Oficiální web: https://github.com/72ka/OndraMELODIK
Jan Heřman (aka 72ka)