gondoltam nem terhelem vele a topic-ot.
Na, akkor visszahozom ide a témát, remélem nem bánod, ha mégis, akkor mondd, és többet ilyet nem csinálok.
Először is szétválasztandó a dolog az én érdeklődésem szerint 2 dologra.
Az egyik az állapotgépes kérdés, amilyen módszerrel te a példádat lehoztad a levélben, ez sztm. a kevésbé fontos része a dolognak, én pld. más változókkal oldom meg a dolgot, és ez a konkrét állapotokra bontás az eredeti problémámhoz nem szorosan kötődik, csak részlet.
A második rész az eredeti probléma, és abban valóban van változás.
Az eredeti probléma felvetésem az volt, hogy akkor írhatom be az új LPT címet (mikor már a rajzolásom kész van és) mikor nem vagyok pont abban a pillanatban mikor a NICK beolvassa a címet, viszont a cím beolvasása a NICK által, és ezáltal a tényleges képváltás majd csak ez után, az alsó borderem alatt, a teljes kép végekor fog megtörténni, ekkortól van átkapcsolva a nick az új LPT -re, és ekkor kezdhetem csak pusztítani az előző kép tartalmat.
Én a jelenlegi implementációm szerint "hibásan" működök, mert amikor a képrajzolásom készen van, akkor főprogramból direktben semmit nem nézve (tehát nem biztonságosan) bevágom a NICK -be a címet, aztán várok a megszakra. A NICK majd beolvassa a kép legalján a címet, mellesleg ugyanott generál egy megszakot is, ami szól a főprogramnak, hogy mehet tovább és bonthatja az eddig megjelenített képet.
A Zozo által javasolt módszer az, ha a videomegszakot az LPT reload mellé tesszuk, igy a programom kap információt arról, mikor már az LPT lecserélődött.
Igen ám, de ahhoz előtte be kell írjam, hogy lecserélődhessen, viszont arról meg nincs infó, hogy mikor írhatom be biztonságosan.
Tehát ha az LPT reload -ot és a megszakot ugyanoda teszem, akkor mire megjön a megszakom a képváltásról, addigra lekéstem a beírásról.
Eredeti véleményedben az állt, hogy a videómegszakot oda rakhatom, ahol csak az stabilan lehet LPT címet váltani, és abból írjak LPT címet.
Ez így nem igaz, mert a képernyő látható részéről is lehet LPT címet váltani biztonságosan, de az előző (kintlevő) képet még nem kezdhetem lebontani, mindaddig míg nem olvasta be a NICK a címet a kép alján.
A priviben a megszaknak azonban már ki volt jelölve a helye a látható kép és az alsó border határára. Így már valóban jó lehet, bár erre csak a privi olvasgatása közben jöttem rá. Hogy azért mégsem kell teljes egészében megvárni a beolvasást a kép végén, elég csak az alsó border tetejéig várni, és ha ide tesszük a megszakot, akkor két legyet üthetünk vele egy csapásra, mert itt egyrészt biztonságosan írhatjuk az LPT címet, másrészt ez jelzési pontnak is jó a kirajzolásnak, hogy ennél tovább már nem kell várnia, mert innentől a border van, vagyis a szinkron LPB -k, amiket ugysem módosítunk a kirajzolással.
Magyarul mikor készvagyok a képpel (éppúgy, ahogy eddig, és az most mindegy, hogy milyen állapotgéppel, vagy milyen biteken jelzem ezt melyik program szálnak), akkor az LPT címet nem szabad beírnom egyből, úgy ahogy most, hanem várnom kell időzítésre a video megszak formájában.
Ezt a video megszakot azonban nem rakhatom a reload mellé, hisz a megszak érkezésekor az új LPT címe még nem lesz beírva, leghamarabb a video megszak megérkezése pillanatában kerülhet az új LPT cím beírásra. Ha pedig a reload és a video megszak egy LPB -ben van, akkor ponthogy a reload után fog csak megérkezni a video megszak.
( Hacsak nincs erre valami okosság ... Zozo, ha egy LPB -ben van LPT reload és video megszak is, akkor melyik történik meg előbb, a video megszak, vagy hogy a NICK beolvassa a címet ? )
Na tehát ha nincs erre automatikus okosság akkor a megszakomat nem rakhatom a reload mellé közvetlenül, hanem valamennyivel korábbra kell tennem, mikor még a video megszak és az LPT reload között van időm időzítetten beírni az LPT címet. Én először tévesen azt gondoltam, hogy mivel a kintlévő kép bontásával úgyis várni kell a reload - ig, akkor max 1 pixelsorral lehet (érdemes) korábbra rakni a megszakot a reloadnál. Ez mindenképp hulyeség. Valójában a video megszakot az LPT végén lévő reload és az alsó border kezdete között (tehát a teljes alsó borderen belül) bárhova lehet rakni, hisz azon a teljes részen a látható képünk kirajzolása már befejeződött, és igaz lesz, hogy egy megszakkal mindkét legyet üthetjuk.