Příklad DLI vs DLI

raster/c.p.u., 2009

První příklad demonstruje v horní části klasické DLI přerušení prováděné třikrát pod sebou, během něhož se vždy změní barva pozadí na barvu s jasem o 4 větším než je obsah proměnné "color", počká se 16 mikrořádků, poté se pro jeden mikrořádek změní barva na bílou, pak se barva pozadí nastaví na černou, obnoví se obsah proměnné "color" a přerušení se ukončí.

Modré mihotání vyznačuje práci hlavní rutiny, která bere náhodné číslo, upraví jej pro odstíny modré barvy, zapisuje jako barvu pozadí a čeká na ESC pro ukončení celého programu.

V dolní části je pak vidět, že když řádky displaylistu s nastaveným bitem 7 následují častěji než je doba potřebná k dokončení činnosti DLI, klidně jej další DLI přeruší a začne se provádět. Barva je tedy jasnější o 4 a stihne se vykreslit opět jen 8 mikrořádků, než jej přeruší DLI potřetí. To opět zvýší barvu o 4, vykreslí všech 16 mikrořádků (neboť ho již nikdo nepřeruší), na konci udělá bílý mikrořádek a následuje návrat ke zpracování předchozí DLI rutiny. Zbývá v ní dokončit 8 řádků čekání během nichž barva zůstává černá (protože rutina ji ve smyčce opakovaně nenastavuje). Na závěr opět bílý mikrořádek a návrat k prvnímu DLI, opět zbývajících 8 řádků černé barvy, jeden bílý a konec.

Podotýkám, že přerušování DLI dalším DLI nemá v praxi žádný rozumný smysl. Příklad má jen demonstrovat, že to takto opravdu funguje. Pokud tedy budete mít více DLI a neohlídáte si jejich délku, můžete některé změny prováděné v prvním DLI vidět na obrazovce až pod změnami prováděnými druhým DLI, což vás zřejmě udiví. Případně, pokud změnu vektoru pro druhé DLI provádíte až na konci první DLI rutiny, může k přerušení dojít dříve než se tak stane, a tím se vyvolá opakovaně ta první DLI rutina místo druhé, což může také nemile překvapit.

Hledání takových chyb bývá zdlouhavé - někdy pomůže pro ladění označkovat si začátek a konec DLI právě třeba změnou barvy pozadí a podle toho si ověřit, kdy jednotlivá DLI začínají a končí a zda nedochází k jejich křížení.