[FAT12] Zamiana klastra na sektor

0

Witam
Jeżeli zły dział to z góry przepraszam.
Jak zamienić klaster na sektor? Ja wymyśliłem coś takiego:

function ClusterToSector(cluster: integer): integer;
begin
ClusterToSector:= (ord(BootSector[$e]) + (ord(BootSector[$16]) * ord(BootSector[$10]))) + ((ord(BootSector[$11]) * 32) div 512) - 2 + cluster;
end;

Ale to raz działa a raz nie.

0

Poszukaj sobie na http://www.brokenthorn.com, tam gdzieś przy pisaniu bootloadera z obsługą FAT12 jest taka funkcja "ClusterLBA", która zdaje się robi to, o co ci chodzi... No i co z tego, że język asemblera? Idę zakład, że ci to do OSDevu potrzebne, a wtedy asm raczej się przydaje, więc powinieneś sobie poradzić.

0

Znalazłem tam tylko to:
LBA=(cluster - 2 ) * sectors per cluster I zastanawiam się co za idiota to napisał

0

Mike "neon" jakiśtam ;).
http://wiki.osdev.org/FAT

0

Może ja po prostu numer klastra źle odczytuję. Używam pierwszych 8bitów chociaż na to jest przeznaczone 16. Tylko z tym zrobić.

np. mam bajty 8C 01 jak to zamienić na numer sektora.
W przypadku 03 00 czytam to jako klaster 3 i funkcja działa poprawnie

0

8C 01 => 018C. Sam wykombinuj, co z tym dalej :P

0

Wszystko od początku było ok. W błąd wprowadzał mnie tylko mój zły sterownik do floppa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1