Hi inet,"HIX CODER" >!
[particijo]
iC> Egyebkent nem azert hoztam fel ezt a temat, hogy csak vitatkozzunk rajta..
jovanna, elobb is szol6tal voona...;)))
iC> Szeretnek egy MBR programot irni:
iC> 1. Ez beolvassa az elso HDD-rol az MBR-t.
iC> 2. Utana megnezi, hogy melyik az "aktiv" :)
iC> boot-olhato particio.
iC> 3. Ha meg van, akkor beolvassa annak a particionak
iC> az 1. szektorat es elinditja...
> ----------------------------------------
iC> Ez eleg egyszerunek latszik, de a 2. pont az megsem olyan egyszeru...
iC> En azt szeretnem, hogy az en MBR programom kepes legyen
iC> olvasni meg akar egy 10 Gigas winchesterrol is!
no... hat eldonteni a parti meretet telleg nem egyszeru,
mivel egy dwordben is el van tarolva, amibe szerintem meg
mindig bele kene fernije meg a 10 gigas partinak is...;))))
de sejtem, hogy mi lehet a bajod... doxxot az extended
int13 funkcijokrol /pl 42h/ kuuttem... ide nem teszem fel,
mert kb 100k.. de az interXX szerves resze www.pobox.com/~ralf...
de akinek kell, elkuudom mail a kiollozott reszt az int13 rol..
na itt megy egy kod, ami csekkeli az extended int13h +letet,
es asztan ezzel az extended read nevu csodaval beolvassa
a parti tablat.... szerintem ebbol elindulva mar nem lesz
nagy kunszt +irni a proggyt /ha megse jonne ossze, szolj,
en megirom hejetted, ugyis raerek mostanaban....;)/ na jo,
komojra forditva, itt a peldaproggy, ami kezeli az extended
int13 funkcijokat.. /a doxx szerintem az osszes award,
es 386sx tol felfele az ami bijoszok is ismerik, de amugy
csekkelni is lehet a dolgot... na jo szorakozast...
> ----------------------------------------------------------------
mov ah,41h ;vajon vannak extended funckijok? /386dx+ vannak!:)
mov bx,55aah ;az id....
mov dl,80h ;az Lso vincsire...
int 13h ;es nezzuk a doogokat....
jnc byte j1 ;nincs carry-->eddig jo...
j2: ;nincs ext.13h-->na akko' huccsuk a cpu-t;)))
cli
jmp byte j2 ;ehehe, ez win95/98 alatt is muxxik... |\/|$ $|_|XX!:))))
j1:
cmp bx,0aa55h ;vajon jo az id string?!?!?
jne byte j2 ;nem-->hutes bekapcsolasa...;))))
sub eax,eax ;torojjuk csak a reget /parti tablat akarunk oovasni..
mov cs:[data_pos2],eax;32..63 bitek...
mov cs:[data_pos1],eax;00..31 bitek...
inc ax ;1 arva szektort /parti tabla/ akarunk oovasni;)
mov cs:[data_num],ax ;eszt todassuk masokkal is;))))
mov word cs:[data_bOfs],offset lastbyte ;igen, ide akarunk oovasni...
mov cs:[data_bSeg],cs ;es ebbe a szegmensbe....
mov ah,42h ;extended read... yuheyyyy....;)))
mov dl,80h ;az elso vincsirol....;)))
mov si,offset data ;ezen az offseten van a blokk...
push cs ;es ebben a szegmensben...;)))
pop ds
int 13h ;na akko' hayra...;)))
jc byte j2 ;hiba lepett fel-->tulmeleged-->hutes bekapcs;))))
ret ;mara ennyi legyen eleg mindenkinek;)))))
data:
data_size db 10h ;a blokk hossza, kotelezoen 10...
data_res0 db 0 ;ez itten reserved... 0 kell ide...;)
data_num dw ? ;hany szektort akarunk olvasni...
data_bOfs dw ? ;offset...
data_bSeg dw ? ;segmens...
data_pos1 dd ? ;vincsin pozicio...
data_pos2 dd ? ;6 esse az ide inferfacere tervesztek... 64 bit...;)))
lastbyte:
> ----------------------------------------------------------------
remelem teccett... a hibakezelesem szerintem tulsagosan informativra
sikerult, szoval azt meg nem artana finomitani, de a lenyeg bennevan;))))
na jo kodolast, stb.... csao amigo....
Mc
|
>Szeretnek egy MBR programot irni:
>
>1. Ez beolvassa az elso HDD-rol az MBR-t.
>2. Utana megnezi, hogy melyik az "aktiv" :)
>boot-olhato particio.
>3. Ha meg van, akkor beolvassa annak a particionak
>az 1. szektorat es elinditja...
>
> ----------------------------------------
>Ez eleg egyszerunek latszik,
>de a 2. pont az megsem olyan egyszeru...
>En azt szeretnem, hogy az en MBR programom kepes legyen
>olvasni meg akar egy 10 Gigas winchesterrol is!
>Ehhez viszont az kellene, hogy megtudjam egyaltalan,
>hogy mekkora a winchester. 8 Gigas? 10 Gigas? 2 Gigas?
>810 Megas? 5.2 Gigas? .......
>
>Ezt hogyan lehet lekerdezni?
Minek azt tudni? (Mellesleg, osszeadod a particiok hosszat es maris
tudod.)
Egyszeruen a kivalasztott/aktiv particios-tabla sorbol kiveszed a
cim-informaciot
betoltod a megfelelo regiszterekbe (meg kitoltod a memoria-cimet,
funkciokodot)
es meghivod a INT13-at. A boot-rutin beolvasodik.
Ha bootolni akarsz egy nem-aktiv particiorol (ugye boot-szelektet akarsz
csinalni),
akkor a tovabbi boot elott aktivva kell azt tenni. (Vissza kell irni az
MBR-t ugy,
hogy a kivalasztott legyen az aktiv. Nekem maskepp nem bootolt. Lehet, azota
valtozott a helyzet, nehany eve probaltam.)
A 80 (aktiv/bootolhato jelzo) azert 80, mert ezt tolti az INT13 drive-select
registerbe (a DH hje). Es az elso vincsi kodja.
Talaltam egy multiboot rutint, ha valaki keri elkuldom (<50k).
Veres Sandor
|