P② klad VBI vs DLI¢raster/c.p.u., 2009¢---------------------------------------¢¢⑧e m
əe DLI p②eru③it rozpracovan⑦ VBI jsme si uk⇧zali v p②edchoz m p② klad❎. Abych v③ak jednou provədy demonstroval, əe DLI a VBI jsou zcela rovnocenn⇧ p②eru③en , dovol m si v tomto p② klad❎ naopak p②eru③it VBI p②eru③en m rozpracovanou DLI rutinu. Slab③ m povah⇧m se z t⑦hle p②edstavy m
əe ud❎lat nevolno, vədy④ i samotn⑨ OS ROM budeme muset tro③ku p②esv❎d⇨it, aby na③emu z⇧m❎ru nebr⇧nil. ;-)¢¢Modr⑦ mihot⇧n op❎t vyzna⇨uje pr⇧ci hlavn rutiny. Ta je v doln ⇨⇧sti p②eru③en⇧ pomoc DLI, kter⑦ nastav hn❎dou barvu a odpo⇨ t⇧v⇧ 70 mikro②⇧dk
. Na doln hran❎ je v③ak jeho ⇨innost p②eru③ena VBI p②eru③en m, kter⑦ 700x opakuje cyklus s n⇧hodnou zm❎nou barvy v zelen⑨ch odst nech, takəe jeho pr⇧ce je dost dlouh⇧ aby byla vid❎t i na n⇧sleduj c m sn mku v horn ⇨⇧sti. VBI na sv⑦m konci nastav ⇨ernou barvu a procesor se vr⇧t k pokra⇨ov⇧n v rozpracovan⑦m DLI a dopo⇨ t⇧ je③t❎ zb⑨vaj c ②⇧dky. Ty jsou vid❎t jako ⇨ern⑨ ⑤sek (nebo④ barvu opakovan❎ nenastavuje) a na z⇧v❎r zobraz b lou linku. Pot⑦ op❎t dostane slovo hlavn rutina se sv⑨m modr⑨m mihot⇧n m.¢¢Te⇦ je③t❎ mus m vysv❎tlit zm nku o OS ROM a jeho snah⇧m znemoənit v⑨③e uveden⑨ experiment. Va③ pozornosti doporu⇨uji zaj mavou ⇨⇧st jeho kdu:¢c118 txs¢c119 lda $0104,x¢c11c and #$04¢c11e beq $c125¢c120 jmp $c28a¢c125 ...¢Jak vid te, bere ze z⇧sobn ku ⇨tvrtou hodnotu pod aktu⇧ln m vrcholem a ov❎②uje, zda je jej bit 2 nulov⑨. Pokud ano, pokra⇨uje norm⇧ln❎ ve sv⑦ dal③ pr⇧ci, pokud je v③ak nenulov⑨, sk⇧⇨e na $c28a, kde je okaməit⑦ ukon⇨en (tedy i bez skoku na vektor na③ VBI rutiny). Kdyə jsem tohle prvn❎ vid❎l, nech⇧pal jsem, co to m⇧ znamenat, neə mi do③lo, co je za⇨ ona hodnota 4 bajty pod vrcholem z⇧sobn ku. Takəe, ⑤pln❎ na vrcholu se nach⇧z uschovan⑨ Y registr, pod n m X, t②et je A. Pod nimi je status flag, kter⑨ se tam uloəil pr⇧v❎ v okaməiku, kdy se VBI vyvolalo (d⇧le jsou dva bajty n⇧vratov⑦ adresy, ale ta n⇧s te⇦ nezaj m⇧). Onen sledovan⑨ bit 2 odpov d⇧ "I" interrupt disable bitu. OS ROM tedy kontroluje, jak⑨ byl stav flagu "I" p②ed vyvol⇧n m VBI a byl-li nastaven, ukon⇨uje svou ⇨innost stejn❎ jako p②i aktivovan⑦ n⇧v❎sti CRITIC.¢¢Nyn jiə v me, əe n⇧m tedy v na③em p② klad❎ sta⇨ instrukc CLI vynulovat v DLI rutin❎ interrupt disable flag a OS ROM nebude proti vykon⇧n sv⑦ kompletn pr⇧ce v⇨etn❎ vol⇧n na③ VBI rutiny nic nam tat. Podstatn⑦ v③ak je, əe onen interrupt disable flag v
bec nezabrauje vyvol⇧n samotn⑦ho VBI p②eru③en (pat② c ho spolu s DLI do skupiny NMI p②eru③en ), pouze OS ROM ho sleduje a podle toho m❎n sv⑦ chov⇧n - je to tedy z⇧leəitost ⇨ist❎ programov⇧, nikoli hardwareov⇧. (Pozn⇧mka: Pokud si budete NMI p②eru③en kompletn❎ obsluhovat vlastn m kdem, je jen na v⇧s, zda si tam takovou podm nku d⇧te ⇨i nikoliv.)¢¢Op❎t se nab z ot⇧zka, k ⇨emu je dobr⑦ tohle v③echno v❎d❎t? Tak na to si odpov te sami, aə budete p⇧r hodin p⇧trat, jakto əe se z ni⇨eho nic p②estala prov⇧d❎t va③e doposud skv❎le funguj c VBI rutina, nebo pro⇨ se ty zatrolen⑦ doln registry nep②episuj do horn ch sleduj c ch. Nem⇧te n⇧hodou n❎jak⑦ DLI p② li③ n zko na obrazovce a/nebo nen tak dlouh⑦, əe se jeho ⇨innost nedokon⇨ p②ed dosaəen m doln hrany vykreslovan⑦ho obrazu? Pokud ano, v③e je r⇧zem jasn⑦.¢