LBA32 v čistém assambleru pro Nasm – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

LBA32 v čistém assambleru pro Nasm – Assembler – Fórum – Programujte.comLBA32 v čistém assambleru pro Nasm – Assembler – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Paulí An
~ Anonymní uživatel
1 příspěvek
2. 8. 2009   #1
-
0
-

Dobrý den,
prosím Vás o pomoc.

Mám stále jeden a ten samej problém. Hledám všude na netu, píšu do různých forech pro assembler a odesílám e-maily programátorům, ale nikde jsem zatím nenašel odpověď.

V assembleru (kompiluji přes Nasm) si vyrábím boot loader (kod v boot sektoru). Chtěl bych z HDD do RAM (a nazpět) načíst velké množství dat (třeba až 500MB). Metoda CHS by pro mě byla moc zdlouhavá (čtení tak po 70sektorech a přecházení do protected či flat mode, atd.) a omezovalo se to na malé velikosti HDD a navíc musím počítat hlavy atd.
Slyšel jsem o metodě LBA32, která je schopna pracovat s diskem až do kapacity 8 bilionů TB a prý nepotřebuje přechod do protected či flat mode pro přístup k 4GB RAM paměti. Jenže, jak tuto metodu použít ?
Na internetu ( http://www.icq.unas.cz/download/zos.htm ) jsem našel kod, ale nepodařilo se mě ho zprovoznit:



;ES:BX - adresa alokované paměti
MOV AH,42H ; funkce pro čtení dat LBA
MOV DL,80H ; disk
MOV SI,OFFSET(LBA) ; ofsetová část struktury
MOV WORD PTR [Adr][2],ES ; segmentová cílová adresa
MOV WORD PTR [Adr][0],BX ; ofsetová cílová adresa
INT 13H ; volání služby BIOSu
NOP ; prázdná instrukce

LBA: ; struktura LBA paketu
VelPack DB 10H ; velikost paketu
Rez DB 00H ; rezervováno
VelBlk DW 0001H ; velikost bloku k přenosu
Adr DD 00000000H ; cílová adresa buferu
Pozice DQ 000000000009D5BFH ; hodnota LBA32
AdrEMS DB 08H DUP(0) ; adresa rozšířené paměti


A jeden maník na foru mi napsal tohle, ale taky jsem nezprovoznil:


Format of disk address packet:
Offset Size Description (Table 00272)
00h BYTE size of packet (10h or 18h)
01h BYTE reserved (0)
02h WORD number of blocks to transfer (max 007Fh for Phoenix EDD)
04h DWORD -> transfer buffer
08h QWORD starting absolute block number
(for non-LBA devices, compute as
(Cylinder*NumHeads + SelectedHead) * SectorPerTrack +
SelectedSector - 1
10h QWORD (EDD-3.0, optional) 64-bit flat address of transfer buffer;
used if DWORD at 04h is FFFFh:FFFFh


Tak už si teda fakt nevím rady.

Pro CHS, jsem dokázal ukuchťat toto a funguje to:


; funkce na přečtení 2. sektoru boot zařízení do 0:8000
mov ax,0h
mov es,ax
mov ah,02h ; čtení dat
;mov dl,80 ; zařízení - již je v paměti
mov dh,0h; číslo hlavy
mov cx,1 ; číslo sektoru+cylindru
mov al,1 ; pocet sectoru k nahrani
mov bx,8000h
; adresa = 0:8000
int 13h ; volání služeb biosu


Jak by vypadal podobně zapsaný kod, ale pro LBA32 ?

Děkuji moc za pomoc.
S pozdravem Paulí.

Nahlásit jako SPAM
IP: 90.176.121.–
Reklama
Reklama
hkmaly
~ Anonymní uživatel
1 příspěvek
8. 9. 2009   #2
-
0
-

Proc vynalezas kolo? <a href=""http://freshmeat.net/projects/lilo/>LILO</a>, <a href="http://www.gnu.org/software/grub/">grub</a>. Nicmene, pokud na tom trvas ...

; funkce na přečtení 2. sektoru boot zařízení do 0:8000
xor ax,ax
mov es,ax
mov bx.8000h
MOV AH,42H ; funkce pro čtení dat LBA
MOV DL,80H ; disk
MOV SI,LBA ; ofsetová část struktury
MOV [Adr+2],ES ; segmentová cílová adresa
MOV [Adr+0],BX ; ofsetová cílová adresa
mov [VelBlk],1 ; pocet sektoru
mov [Pozice],1 ; cislo sektoru (pocitano od 0 pokud se nepletu)
mov [Pozice+4],0 ; vyssi byte cisla sektoru
INT 13H ; volání služby BIOSu
NOP ; prázdná instrukce

...

LBA: ; struktura LBA paketu
VelPack DB 10H ; velikost paketu
Rez DB 00H ; rezervováno
VelBlk DW 0001H ; velikost bloku k přenosu
Adr DD 00000000H ; cílová adresa buferu
Pozice dd 0,0 ; hodnota LBA32
AdrEMS dd 0,0 ; adresa rozšířené paměti



....

a mimochodem, to EMS zni jako ze kdyz ho pouzijes (coz tenhle kod nedela) bude stejne prechazet do toho chraneneho modu a navic ze ti to nebude bez DOSu fungovat. Pokud chces byt vazne frajer, nepouzivej BIOS vubec, nastuduj si <a href="http://suif.stanford.edu/~csapuntz/specs/idems100.ps">IDE Bus-master DMA</a> a jak ho zapnout na svem chipsetu a delej to rovnou z chraneneho modu.

Nahlásit jako SPAM
IP: 86.49.117.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 349 hostů

Podobná vlákna

Hra (NASM+WinAPI) — založil m->29

Malý Kernel v NASM — založil _Radek_

NASM - výměna bitů — založil Thomasso

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý