Forum

Z PMD 85 Infoserver

:: späť na začiatok témy :: späť na zoznam tém ::
Správa
Autor  Autor ::  Roman Bórik
Poslaná  Poslaná ::  07.07.2011 09:46:45
Predmet  Predmet ::  Re: Myš Poly - 08 a myš 602 .
Musím (po)opraviť svoje tvrdenia o probléme s prerušením a rutinami v Monitore.

Pri tlači znaku v rutine na adrese 854Ah sa nastavuje register SP na hodnotu 0FFC0h, čo je -64 a predstavuje offset pre prechod na predchádzajúci mikroriadok VRAM. Na to je tam použitá inštrukcia DAD SP (HL ukazuje do VRAM). Pokiaľ v tomto čase, kedy má SP hodnotu 0FFC0h, dôjde k prerušeniu, tak sa pochopiteľne na "zásobník" uloží návratová hodnota a hodnoty ostatných registrov odpamätávaných v obsluhe prerušenia. Keďže od adresy 0FFC0h k nižším adresám nič nie je, tak to v prípade MTESTu nevadí a všetko chodí ako má. Možno si to overiť v emulátore tak, že si v debuggeri do MEM dajte adresu 0FFB0h a spustite MTEST. Po zapnutí PMD 85 by tam mali byť samé nuly, ale pri behu MTESTu je od adresy 0FFB4h vidieť hodnoty, ktoré sa tam uložili pri vyvolaní prerušenia.

Väčší problém je v rutine pre zmazanie obrazovky na adrese 85A7h. Tam sa SP register používa na dva účely. V prvom prípade je to ukazateľ do VRAM, kedy sa inštrukciou PUSH B vypĺňa VRAM nulami. Tu platí to, čo som uviedol v predošlom príspevku. Pokiaľ sa SP dostane do ľavej časti obrazovky, vyvolané prerušenie môže poškodiť niektoré systémové premenné. Druhý prípad je kritickejší, pretože sa SP nastavuje na hodnotu 0040h, opäť ako offset pre prechod na nasledujúci mikroriadok VRAM. I keď má SP túto hodnotu iba veľmi krátko (20 taktov pre každý mikroriadok), tak v prípade vyvolania prerušenia, samotná rutina obsluhy prerušenia si prepíše skokovú inštrukciu JP xxxx, ktorá je na adrese 0038h. MDRIVER sa pri prerušení vnára o 12 bytov, 0040h - 000Ch = 0034h. Pri nasledujúcom prerušení sú už na adrese 0038h nezmysly a to je dôvod k nepredvídateľnému chovaniu. MTEST maže obrazovku iba pri spustení (po inicializácii a povolení prerušenia), takže preto mi program padal iba pri jeho spúšťaní.
:: späť na začiatok témy :: späť na zoznam tém ::