V minulém čísle jsme uvedli OUR5OFT demo. Až dodatečně jsme zjistili drobný problém.
Na některých počítačích neběží toto demo úplně bezchybně - přesněji - střední část obrazu v grafice 9 je zobrazena jakoby inverzně. Když jsme tento fakt objevili, byli jsme dost překvapeni, neboť jsme se s něčím takovým ještě nesetkali. Na některých počítačích běží vše správně (např. na Zdeňkově 800XL nebo na Honzově 800XE), ale na mém 800XE a na jednom 130XE (které měl Zdeněk zapůjčeno) se objevoval výše popsaný "efekt".
Jediné zdůvodnění, které mě napadá, je nějaký rozdíl v hardware těchto počítačů. Že je ale tento rozdíl i u dvou typů 800XE, mě překvapuje. Jedná se specielně o rozdílné zobrazování při použití tak "drastické" metody, jako je třeba v OUR5OFT demu (už jsem ji viděl i v jiných demách se stejnými problémy při spouštění na různých počítačích).
Tato metoda umožňuje zobrazovat více grafických módů na jednom řádku. Už tato věta zní dost nesmyslně, protože každý atarista ví, že něco takového přece nejde. Vždyť rozložení grafických módů na obrazovce zajišťuje DisplayList a v tom je pro každý řádek pouze jedno číslo - a tedy jeden grafický mód... Ale existuje jedna možnost:
Každý jistě zná adresu 623 - tato umožňuje m.j. i aktivovat některý z GTIA módů (gr.9, 10 a 11). Pokud v DLI změníme obsah její sledující adresy (t.j. PRIOR: 53275), můžeme rozhodnout, zda na jednotlivých částech obrazovky bude některý z GTIA módů nebo zda tam bude "normální" mód (0 až 8, 12 až 15).
Někoho ale napadlo zkusit změnit obsah této adresy uprostřed jednoho řádku. Vyrobil DLI s rutinou načasovanou tak, aby ke změně obsahu PRIOR došlo až při vykreslování řádku (a ne již při návratu paprsku zprava doleva, kdy nic nevykresluje). Takto načasovat změnu adresy je obtížné, většinou se před instrukci STA 53275 přidávají instrukce NOP tak dlouho, až je zlom grafiky zhruba na tom místě, kde chceme. Nelze to ovlivnit úplně přesně, protože přidáním jednoho NOPu se může grafický "předěl" posunout třeba i o 1/5 šířky řádku, ale funguje to. Tímto způsobem můžeme mít v levé části třeba gr.8 a vpravo 9.
A co ta gr.15 úplně vpravo v OUR5OFT demu??? Tomu říkám tajemství HW...
Pokusničil jsem s nastavováním a vypínáním GTIA módu na jednom řádku ... a na co jsem nepřišel:
Mějme třeba takový docela normální řádek s grafikou 8. Zhruba ve třetině (zleva doprava) změňme obsah 53275 na hodnotu 64. Tím pádem bude od tohoto místa v tomto řádku pokračovat gr.9. A teď zkusme (zhruba) ve druhé třetině nastavit 53275 zpět na 0.
Bude tam zase gr.8?? NE! Bude tam gr.15!!!
Proč?? Na to se dá odpovědět snad jen: PROTO!! Žádné jiné logické vysvětlení neznám. Prostě nastavením adresy PRIOR v jednom řádku na GTIA mód a následným vrácením nuly (v témže řádku) dostaneme gr.15. Nevím proč to tak je, ale je to tak! :-)
Tvůrcům demonstračních programů to umožňuje předvádět přímo "nadpřirozené" věci, protože něco takového vlastně opravdu teoreticky nelze udělat. Myslím si, že na takovou věc se dá přijít jenom náhodou.
Dnes už vím, že tento efekt nebude zcela dobře fungovat na všech počítačích. Kvůli tomu bych ho asi snad raději ani nepoužíval. I když je to škoda, nemyslíte?!