Historky s BT-100 a loadermi programov

Čítať takýto článok o tlačiarňach spred 20 rokov, sa vníma inak, keď píše o problémoch, ktoré som sám riešil programovaním.

Jeden z nejlepších ovladačů pro BT-100, „BT-100+“ od bratří Flašků (skupina NOP, ovladač pro Desktop prodávala firma JHCS), si v některých režimech pohyb hlavy řídí sám bez ohledu na zářezy v kotoučích a dosáhne tak téměř kvality 24jehličkové tiskárny, a to bez jakékoliv úpravy BT-100. Pochopitelně za cenu velmi pomalého a ne vždy zcela přesného tisku (pro lepší soutisk bylo lepší nechat hlavu tisknout jen když jel vozík jedním směrem, což bylo ale pomalejší než obousměrný tisk).

Sám som presne to isté riešil pri programovaní ovládačov na túto tlačiareň. V prvom rade som naozaj prišiel na fakt, že jednosmerka bola vyššia kvalita. Pokiaľ si dobre pamätám, tak „drivre“ som proste robil dva a jeden z nich bola kvalitnejšia pomalá jednosmerka.
Nikto však nepovedal jednu maličkosť. Tlačenie A4 trvalo tak pol hodiny. To na akúkoľvek podvratnú činnosť proti štátu bolo absolútne smiešne. Mohol som si pomôcť dvomi kopirákmi a takzvaným „preklepovým“ papierom, čo bol proste riedky papier, cez ktorý sa ihlica prebojovala až k ďalšej kópii. Moja najdlhšia tlač bola 24 hodín, kedy som vytlačil zdrojový kód mojej hry Bony a klid po slovensky.
Viem, že som ešte riešil tlač na D-100, ktorú som ale nevlastnil. To už bola naozaj iná trieda. Autor článku si veľmi dobre pamätá tie nepríjemné rozdiely v protokoloch, ktoré spôsobovali, že drivre sa programovali pre konkrétny model. Unifikácia sa však aj dlhé roky po tom nestala samozrejmosťou. Pamätáme si ju z čias Windows a to takmer do súčasnosti.
ZX-Spectrum-48k+
Dnešok už absolútne nechápe ďalšiu oblasť programovania. Neviem či k nemu dnes existuje akákoľvek obdoba. Venoval som sa programovaniu vlastných loaderov pre ZX Spectrum. Aby som to nejako vysvetlil…
Programy sa nahrávali z kazetovej mechaniky, na páske bol akýsi „škvrkot“ a ten si počítač snímal a skladal do bajtov. Toto skladanie bolo v Spectre zakódované v ROM ale mohol som si naprogramovať vlastnú verziu tohto kódu. Čiže na páske bol nahratý môj program. Ten som do počítača nahral ako prvý, hneď potom ako sa spustil už riešil snímanie z pásky môj program.
Originál z ROM totiž na okrajoch obrazovky zobrazoval akési prúžky. Naša snaha bola túto fádnu vec zmeniť a dokonca dosiahnuť nebývalé efekty.
Trápnosť bola, keď sa tri minúty nič nedialo a nanajvýš sa výrobca programu uvolil, že najskôr natiahne z pásky obsah obrazovky s akým si „intro“ obrázkom. Dve minúty sa naň pozerať nudilo.
Menili sme však aj veci, ktoré sa zdali pevne dané. Napríklad pred každým samostatným blokom (dnes to voláme súbor) bol dlhší tón (písknutie). My sme dosiahli, že sa bloky dát dali zaradiť za sebou aj bez neho. Efektom bolo, že po prvom bloku sa rýchlo spustil náš program a prevzal kontrolu nad ďalším načítavaním.
Jedna z obrovsky používaných fínt bolo schovanie strojového kód do prvého riadku načítavaného „loadera“. Ono sa totiž ako prvý blok dal načítať iba program v Basicu, takže sme do prvého riadka s „poznámkou REM“ schovali strojový kód. Prečo? Aby sme proste nemuseli program rozdeliť na príliš veľa blokov za sebou.
Vrátim sa k loaderom. Skoro triviálne zmeny boli zmeny vo farbách a tvare prúžkov. Potom sa pár ľudí odhodlalo kresliť počas načítavania dát z pásky aj po obrazovke.
Ja som však môj loader poprepletal hrou, ktorú dnes poznáte ako Arkanoid. Odrážanie loptičky a vyrážanie tehličiek.
Potom som si upravoval nahrávanie bežných programov týmto loaderom a mohol som si dve tri minúty zahrať moju hru.
Textom sa to veľmi ťažko vysvetľuje ale programovanie spočívalo okrem hrubej práce aj v absolútnych detailoch. Každá inštrukcia programu trvala procesoru istý počet taktov (jednotka času). A keď som zistil, že sa mi loader „fláka“, tak som mohol urobiť dve veci:
* zrýchliť nahrávanie: použiť rýchlejší prúd dát z pásky a k tomu ale aj upravený loader,
* využiť čas na niečo iné: ak som dobre časoval takty, tak pomedzi príjem dát z pásky som mohol robiť, čo som chcel ale zasa presne obmedzený čas.

Na tomto videu chlapík dosiahol rekord v rýchlosti nahrávania dát.

Loadery s obligátnymi zmenami farieb prúžkov, verte, že to bola skôr trápnosť ako nejaké neobvyklé umenie. Ten okraj obrazovky sa dal ovládať jediným príkazom, parametrom bola jedna farba a keď si ho posielal s istou frekvenciou, tak sa farby nestihli meniť a vznikali prúžky. Stačilo využiť nedokonalosť „grafického“ obvodu (ULA) a vedieť poslať príkaz v správnom čase. Didaktik Gama mal však iný obvod a nesedeli „časy“.

Vo videu vidíte, že najskôr sa načíta maličky Basic program, potom sa načíta (Bytes) program v strojovom kóde (to je ten loader). Autor sa hrdí, že najlepší loader. Pch. Rotovanie číselníka, ktorý vôbec nepotreboval žiadne vstupy (dnes to voláte eventy) a proste len tupo cykloval dve veci za sebou. Nič zložité. Môj program ale sledoval vstupy z klávesnice a hráč sa rozhodoval kedy čo urobí. A dianie v hre bolo treba časovať a ako urobíš animáciu nárazu, schovanie tehličky, keď každé čosi trvá? Ha?

Ďalší sa hrali so spôsobom vykresľovania obrazovky. Normálne ak som šiel v RAM bajt za bajtom, tak sa na obrazovke kreslili vodorovné čiary s odstupom, videli ste to v predošlom videu. A tento rus proste ohromil vykresľovaním „inak“. Opäť trošku trápne, nechcelo to priveľa premýšľania. Buď si si v loaderi nahral „matrix“, čo bolo len pozmenené poradie v akom sa bajty vkladali na obrazovku alebo si medzi nahrávanými dátami mal vždy aj adresu, kam čo uložiť.

Priznávam sa, že František Fuka ma k programovaniu loaderu motivoval práve týmto svojim. Jeho program mal vtip a ten som videl, že ide prekonať. Proste som do toho pridal vstup z klávesnice a aby to malo zmysel tak aj to vyrážanie tehličiek.
Vidíte v tom Fukovom loaderi predzvesť slideshow a Powerpoint prezentácii?

Keď som dokončil môj loader s „arkanoidom“, tak sa mi to zdalo také triviálne a pritom nikto to presne takto neurobil. Viacmenej sa venovali vyššie uvedeným efektom.

Áno, to sú základy multitaskingu. Procesor sa venuje raz tomu, raz tomu a navonok to vyzerá, že robí naraz viac vecí.
A vy si na Windowse maximalizujete okno, čím to všetko zabijete len preto, že sa nedokážete sústrediť na prácu.

Written by rony