Posted By: online (online) on 'CZprogram'
Title:     Re: Preruseni pod WIN/DPMI
Date:      Mon May 12 12:24:49 1997

> Hi !
> 
>    Potreboval bych poradit, jak napsat pod Windows nebo obecne v protected 
> modu kod v Pascalu (ASM) vyuzivajici DOSovsky preruseni (konkretne mi de o
> INT 
> 13). Odkazy na Intr() neberu. Konkretne potrebuju sluzby zapsani/nacteni 
> sektoru.
> 
>   A dal bych moooc potreboval zjistit jak ve Windows precist fyzicky pamet 
> (napriklad 10 bajtu od nejake adresy) bez toho, aby mi to hodilo GPF.
> 
>                                             D~y'k
>                                                                 Dzemen.
>  


  Zdarec Dzemene !!!

     Proc to sem pises, kdyz jsem ti rikal, ze ti to napisu.....
No, ale napisu ti alespon, jak se to dela:
      existuje sluzba DPMI, ktera simuluje DOSovy preruseni, no napsal bych to
      asi takhle:

       mov ax,300h
       mov bl,13h            ;cislo preruseni, ktery se bude simulovat
       xor cx,cx
       
       ;zde se bude plnit tabulka prenasenych registru do simulace
       
       mov ax,ds             ;tu tabulku MUSIS mit v datasegmentu !!!!
       mov es,ax
       mov edi,offset tabulka   ;offset na tu tabulku
       int 31h                  ;zavolani jadra DPMI

;nasledujici definice umistis do datasegmentu:

tabulka:
        dd ?                    ;registr EDI
        dd ?                    ;registr ESI
        dd ?                    ;registr EBP
        dd 0                    ;reserved.... ;-)
        dd ?                    ;registr EBX
        dd ?                    ;registr EDX
        dd ?                    ;registr ECX
        dd ?                    ;registr EAX
        dd ?                    ;registr EFLAGS
        dw ?                    ;registr ES
        dw ?                    ;registr DS
        dw ?                    ;registr FS
        dw ?                    ;registr GS
        dw ?                    ;registr IP (ale je to ignorovano !)
        dw ?                    ;registr CS (     -//-     )
        dw ?                    ;registr SP
        dw ?                    ;registr SS

;do teto tabulky ulozis hodnoty registru, ktere chces prislusnemu preruseni
;poslat a po vykonani si muzes z teto opet precist zmenene hodnoty



;upozorneni !!!!!: pokud pouzijes nejakou sluzbu, ktera pouziva nejaky pametovy
;buffer, musis mu ho naalokovat (ovsem musis mu naalokovat REALnou pamet !!)


;zde ti napisu, jak se alokuje realna p[amet, protoze bys urcite zase otravoval

       mov ax,100h
       mov bx,pocet paragrafu
       int 31h
  
;fce vraci : CY=1 >>chyba
          IF CY=0 >>AX=real.mode segmentova adresa pocatku alok. bloku
                    DX=selector (protected mode segment...:-) ) toho 
                       alokovaneho bloku



   Doufam, ze ti to uz staci a ze jsem nikde neudelal chybu.
 
Tel.: +420-35-611-81-62 (outside CZ)                  X
      (035)611-81-62 (in CZ)                         x x
                                                    x   x
E-mail: online@hermes.zcu.cz                       xxx   x
        online@students.zcu.cz                    xxxxxx  x
        vsiman@freenet.hut.fi                    xxxxxxxxx x OnLine (TM)

Search the boards