Computer music

Raster/c.p.u. 1990

Z nejhlubších hlubin archívu mé vlastní produkce jsem pro dnešek vylovil hudební demonstrační prográmek "Computer music". Letopočet jeho výroby je 1990, z čehož si každý zdatnější počtář může spočítat, že od jeho vzniku uplynulo již neuvěřitelných 17 let.

Než se dáte do poslechu této nefalšované basicové "old school" hudby, rád bych vás ještě obeznámil s jednou zajímavou okolností ohledně výroby tohoto programu.

Počátky mé hudební tvorby v Basicu byly spjaty s objevem basicového hudebního programu "Axel-F". Byl jsem naprosto udiven, že se v Basicu dá něco takhle úžasného stvořit. Zkoumal jsem zdrojový kód a okoukal, jak se dá v Basicu udělat přehrávání vícestopé hudby se sólem, basovou a bicí linkou. Následně jsem produkoval spoustu více či méně zdařilých basicových hudeb. Když už jsem jich měl slušnou hromádku, rozhodl jsem se vytvořit hudební demo obsahující výběr některých z nich.

Nastala nelehká práce s postupným načítáním jednotlivých skladeb, přečíslováváním řádků, exporty přes LIST"T:" (T2000 kilové bloky). Nakonec pak kompletace ENTER"T:" všeho do jednoho velkého celku - a významný nepříjemný objev: Čím je basicový program delší, tím je pomalejší! Přesněji jde o to, že u skoků a smyček se musí najít cílové číslo řádku, což Atari Basic dělá prohledáváním celého (tokenizovaného) kódu od začátku. První hudba tedy běžela správně rychle, druhá se trošku zpomalila, třetí už výrazně atd. až k poslední, která se sotva vlekla.

Lámal jsem si hlavu, jak to vyřešit. Naštěstí jsem v té době už pracoval i se strojovým kódem a použil rutinu, která se využívala pro spouštění Basic programů (inicializace všech systémových vektorů pro Basic a odstartování). Vytvořil jsem si tedy strojový podprogram, který hlídal stlačení kláves 1-8 a podle toho vždy nainicializoval systémové vektory a spustil jeden z 8mi samostatných Basic programů, umístěných v paměti postupně za sebou - každý měl posunutý LOMEM (adresa začátku paměti pro Basic) kousek za konec předchozího, samozřejmě včetně mezírky pro runtime stack pro GOSUB a FOR-NEXT návratové adresy.

Uprostřed hlavní smyčky každého z těch 8mi samostatných basicových programů, přehrávajících jednu jedinou hudbu, byl tedy odskok A=USR(...). V případě, že nebyla stlačena žádná klávesa, vrátil se běh poslušně ze strojového podprogramu a příslušný Basic program pokračoval, zatímco v případě kláves 1-8 se nainicializoval a spustil jiný.

Během testování tohoto způsobu jsem pak radostně pozoroval, že rychlost jednotlivých Basiců byla správně zachována. Krásně efektně také vypadala skutečnost, že jsem vždy RUNem spustil nějaký program, stisknul číslo jiné skladby, pak klávesu BREAK, a po povelu LIST se vypsal pokaždé jiný listing. :-)