Protože jsem v mírně řečeno dosti nechutné časové tísni, nebudu vám tentokrát ukazovat nějakou svou rutinu, ale rutinu od MC, autora spousty dobrých programů a především připravované hry Power Up. Jelikož se jedná o eliminaci borderu, dá se považovat rutina za prakticky využitelnou pouze na počítačích řady ST/STE běžících na 8 Mhz. První screen bez okrajů vznikl v roce 1990, tudíž na něj kódeři přišli asi až 5 let po vzniku ST. Ostatně, mě osobně není vůbec jasné, jak se jim to mohlo vůbec podařit, protože se jedná o něco natolik nepochopitelného, že je lepší vědět jen, jak to používat.
Kód je napsán v opravdu srozumitelném stylu s českými helpy a pokecy. I přesto se k němu ještě vyjádřím, protože jinak by v tomto díle MOTOROLy nebylo o čem psát ;).
Samotná obrazovka bude mít po zapnutí asi 384*257 bodů, číslo 384 sice není vůbec jisté (záleží na seřízení zobrazovací jednotky), ale bylo použito v popisu hardware ATARI 800, takže ho každý převzal ;). Velikost celé obrazovky je něco kolem 60 Kb a šířká jednoho řádku je přesně 230 byte. Ano, slyšíte správně. Šířka řádku není dělitelná 8, tudíž v neviditelné části na konci či začátku řádku se musí dít s barvami něco děsného.
Po inicializaci supervizor modu, nadchází několik velmi důležitých kroků. Nejdříve je nutné napsat Copyrightový nápis, poté nějakou dobu posečkat, aby si ho všichni užili. Doznáme-li, že je tato čekací smyčka dostatečně dlouhá, spustíme vlastní program ;).
Vyčistíme oblast, kde bude obrazovka s borderem, zakážeme všechna existující přerušení, protože pokud by se smyčka v určitých fázích lišila jen o jediný NOP, nefungovala by. Poté otestujeme počítač, protože STE má oproti ST smyčku poněkud odlišnou. Nutno říci, že na Demobitu 95 v demu Tribute to Franz Kafka jsem použil rutinu, která fungovala na obou počítačích beze změny :) (rutina byla převzata z úvodu od Elite, ale v konečné verzi jsem tam zase neměl horní a spodní border, nebyl čas). A teď už je zbývá zapnout BORDER, což vlastně spočívá v spuštění nového VBL přerušení.
Co však dělá vlastní VLB rutina?
Dělá toho až příliš, nejdříve vypne horní okraj, což udělá pomocí přesného načasování a přepnutí rozlišení a synchronizace (50/60 Hz). Dále, až se dostane k vlastní obrazovce, tak na začátku a konci řádku dělá něco obdobného, tedy přepíná frekvence a rozlišení???? A na konci obrazovky, po uběhnutí všech obvyklých řádků opět pracuje s těmito dvěma pamětovými oblastmi. Nevím, jakým způsobem MC rutinu naprogramoval, já ji pokaždé pouze převzal, protože mi unikala jakákoliv její logická souvislost s kódováním rozlišení a frekvence. Každopádně mi tato rutina mi připadá poněkud odlišná od všech ostatních, co jsem kdy viděl, takže ji snad MC naprogramoval sám :-OOO.
Pro ostatní, co budou chtít využít i vnitřek VBL smyčky. Principiálně to samozřejmě možné je, nutností se však stává přesné načasování. Programátoři tento problém řeší mnoha způsoby. Viděl jsem dokonce demo, které si každý řádek bez borderu naprogramovalo zvlášť až po spuštění. Potom to vypadalo opravdu úchvatně, hvězdičky a nápisy lítaly ze strany na stranu, navíc to doprovázel MÓD (na ST) a já čuměl.
Teoreticky udělat něco tak rychle není až tak veliký problém, ale pokud se to někomu opravdu nakonec podaří, musí být v kódování řádně sběhlý. Vy ostatní radějí používejte pouze čas, který zbývá mezi VBL (témeř žádný ;) a maximálně první náběh před spuštěním prvního borderu (4250 NOPů). Taková část se dá ještě vcelku smyluplně načasovat a naprogramovat. K tomu, aby se vám to podařilo, příště uvedu konečně taktovací tabulky (dám je do archívu) instrukcí MC68000. Upozorňuji, že tyto tabulky od vás budou vyžadovat trochu znalostí angličtiny či němčiny (dám tam obě mutace).
A s poděkováním za kód se s MC loučím a příště zase ahoy ;).
HEAD