Posted By: PePan (Petr Pan) on 'CZprogram'
Title:     Re: Preruseni
Date:      Wed Feb 25 15:04:11 1998

> > 
> >   Potreboval bych napojit svuj program v C na preruseni, ale neznam
> potrebny
> >   vektory (teda aspon doufam, ze se to dela pres vektory jako na Ami).
> >   Za kazdou radu dik.
> > 
> >                     tWisT
> Zdarec, takze k veci...
  
  Opravim jenom par chybicek a doplnim dalsi malinke detailky.

  Je to uplne jednoduche, takze k veci...

> Je to uplne jednoduche - DOS ma 256 preruseni (00h..FFh), ktere slouzi

  DOS nema 256 preruseni, ale PC ma 256 vektoru hardwareovych preruseni (pozn. 
DOS z toho vyuziva jen nekolik vektoru preruseni, nejznamejsi je asi vektor 
21h) navic vektory 00-20h jsou vyhrazeny Intelem pro jeho interni pouziti, 
napriklad int 00h se vola pri deleni 0 (nebo, kdyz je vysledek natolik velky, 
ze se nevejde do vysledneho registru), ovsem to konstrukteri IBM PC 
nedodrzuji, takze nektere vektory mezi 00-20h jsou navic obsazeny vnejsimi 
periferiemi (viz casovac, klavesnice, EGA, atd.). 

> pro obsluhu ruznych veci, nektere jsou dokonce volne. 
> Vektory preruseni jsou 4-bytove hodnoty (segment:offset),ktere ukazuji na
> obsluhu daneho preruseni. Tabulka vektoru (onech 256 4-bytovych hodnot)
> je ulozena v real modu uplne na zacatku pameti
> (segment:=0,offset:=4*cislo_pr.)

  Vektory preruseni jsou ulozeny od zacatku pameti (tedy 0000:0000) pouze v PC 
s procesory 086, 088, 186 a 286, ostatni procesory maji tuto tabulku vektoru 
ulozenou v sestibytovem registru IDT (2 byty segment, 4 byty offset), ktera 
je po resetu procesoru nastavena na 0000:00000000. (pozn. tento registr
zustava v real modu prakticky nezmenen a jeho vyznam se uplatni az v 
protected modu, ovsem to neznamena, ze by se hodnota registru IDT nedala v 
real modu menit).

> Svoji obsluhu muzes na preruseni nainstalovat v zasade dvema zpusoby:
> bud pomoci fci DOSu 25h a 35h nebo primym zapisem do pameti na prislusne
> misto.
> Fce DOSu jsou slouceny pod prerusenim 21h. Doporucuji sehnat SYSMANa nebo
> jiny (temer jakykoliv) systemovy help. Kdyz instalujes obsluhu sveho
> preruseni,je dobre uschovat puvodni vektor a pak ho volat (napr. jmp far
> nebo pushf, call far) aby se vykonala puvodni obsluha. pokud se odinstalujes
> z pameti,mel by's v ramci korektnosti (a pokud nechces, aby ti comp
> zatuhl:-))

  Pokud nechces volat na konci sve rutiny puvodni obsluhu preruseni (napriklad 
kvuli rychlosti ap.) staci na konci vlastni rutiny provest nasledujici 
magickou sekvenci instrukci: (psano v assembleru pro Intel 0x86 IDEAL mode)
         ...
         mov ax, 020h
         out 020h, ax
         ;nasleduje iret

 neboli na port 20h posli hodnotu 20h, coz provede reset radice preruseni.

> obnovit puvodni obsluhu. Dalsi vec, na kterou si musis davat pozor 
> (pokud vektory zapisujes primo) je to, ze intel pouziva pro zapis do pameti 
> little endian - tzn. vyssi byte(word) je na vyssi adrewse. 
> Tzn. v pameti je nejdrive offset (word s prehozenymi byty) a pak segment 
> (...taktez). Uff, z toho bych mel v hlave asi pekny chaos...:)) 
> Pokud jsi neco nepochopil, tak mi mejlni (treba tady nebo na floyda)... 
>                            Cafte
>                                         SpirIt
  Pokud jsi neco nepochopil, tak mu mejlni (treba tady nebo tam)...

    Petr Pan.
Do you believe in Peter Pan, do you believe in Frankestein...

Search the boards