Nová hračka odo mňa:
Variablespeed LOAD rutina. (c) PotPalo 2020
Umožní nahrať štandardnú nahrávku akoukoľvek rýchlosťou od 28% do 335% pôvodnej rýchlosti. Rýchlosť sa môže počas nahrávania akokoľvek meniť, jediná podmienka je aby sa menila relatívne plynulo, nie moc veľkými skokmi. Tiež sa dá nahrať nahrávka vytvorená s TurboROM. Ja som klasickú nahrávku otvoril v GoldWave, tam sa dá nastaviť rýchlosť aj bez editácie. Stačí dať 3,35 a PLAY, Didaktik priamo pripojený káblom to pekne nahral bez chyby. Nahrávku z kwiksave to už ale neberie, na nej niesu dodržané proporcie impulzov.
Program má dva režimy, ktoré bežia až do BREAKu:
1. LOAD SCREEN$ - nahrá obrazovku bez hlavičky. Vhodné na hrajkanie s rýchlosťami a vytešovanie sa. Tu je nahrávka SCREEN$ premenlivou rýchlosťou na skúšanie:
mp3 2. LOAD CODE - nahrá dáta, vypíše ich dĺžku, a v prípade nejakých zvyšných bitov (zdravím busyho) vypíše aj tie (to isté sa dá spraviť aj LOAD rutinou v ROM (205,98,5), akurát iba klasickou rýchlosťou). Bez úpravy je režim iba LOAD-výpis. V BASICU programu sa dá nastaviť aby sa nahraný blok následne po pauze aj uložil na pásku cez SAVE rutinu v ROM. Zvyšné bity sa samozrejme neuložia.
Ešte jedna vec sa dá nastaviť v BASICu: hysteréza alias Schmitt trigger. Funguje iba pri Didaktik M model 91 a novších, a Kompaktoch. Využíva sa prepojenie zvukového výstupu cez odpor s audio vstupom ktoré tam je. Skrátka to OUTuje na reproduktor prijatý signál, ktorý následne ovplyvňuje vstup vytváraním hysterézy. Funkčnosť sa dá zistiť takto: pri normálnom režime treba znížiť hlasitosť na úroveň kde to prestane nahrávať. Vtedy pri zapnutom režime hysteréza by sa malo dať ešte nahrávať aj s hlasitosťou trochu nižšou.
Ako rutina funguje:
Najprv program zistí že je na vstupe nejaký impulz. Jeho dĺžka sa berie že je 1. Zvyšok sa rovnako ako aj počas nahrávania dopočítava, vypočíta sa stred medzi 1 a 0 ktorým sa porovnáva čo reprezentuje prijatý impulz podľa jeho dĺžky. Nakoľko 1 je dva krát tak dlhá ako 0, stačí ju vydeliť dvoma. Následne vynásobiť 1,5 krát a máme stred medzi 1 a 0. Tento sa vypočítava po prijatí každého impulzu/dvojimpulzu. Zo synchronizačného impulzu sa počíta iba podľa prvej polovice, druhá sa ignoruje. Rutina je dosť tolerantná, pri porovnávaní prijatá 0 môže byť akokoľvek kratšia, prijatá 1 môže byť maximálne dlhá ako 1+0 dokopy (čo by značilo vynechaný impulz). Minimálnu dĺžku zavádzacieho tónu je možné poznať podľa zmeny farby pásikov v borderi.
Prikladám aj zdrojový kód v exceli. Áno, písal som to na papier plus v exceli. Ako inšpirácia mi slúžil komentovaný výpis ROM ZX Spectra.