FASM- Kilka pytań odnośnie wczytwania sektorów dysku

0

Witam!
Mam kilka pytań odnośnie wczytywania sektorów dysku.
Ponieważ Ah=0x02 int 0x13 nie działa mi z niewiadomego powodu (kod jest na 1000% poprawny) postanowiłem użyć extended read a więc Ah = 0x42
Tu moje pytanie, w DAPie co oznacza "packets to read"? Jest tam wartość sektorów do wczytania ale co oznaczają te pakiety?
Drugie pytanie, jak już sobie to zasembluje to jak stworzyć dysk, który do bochsa bede mogl podlaczyc jako dysk ATA?
I jeszcze trzecie pytanie, jak bootuję z dysku to spotkałem się z rozwiązaniem że ludzie przesuwają cały kod o 512 bajtów w dół. To dlatego że na 0x7c00 będzie się znajdował mbr?
http://pastebin.com/fmyd0Pf1 -rozwiązanie o którym mówię

bump

1

Tu masz bardzo ładny przykład działania funkcji 0x42, przerwania 0x13.
https://github.com/akasei/Cyjon/blob/master/bootloader/stage1.asm
Dokumentacja:
http://www.ctyme.com/intr/rb-0708.htm

	; rozpoczynamy wczytanie programu rozruchowego do pamięci
	mov	ah,	0x42	; procedura - rozszerzony odczyt danych
	mov	si,	variable_table_disk_address_packet	; o rozmiarze i miejscu docelowym opisanym za pomocą pakietu danych
	int	0x13	; wykonaj funkcje - rozszerzony odczyt z nośnika
variable_table_disk_address_packet:
	db	0x10	; rozmiar struktury, czyli tej tablicy (nie zmieniać)
	db	0x00	; zarezerwowane
	dw	0x0001	; ilość sektorów do odczytania (0x01, 512 Bajtów)
	; gdzie zapisać odczytane sektory (0x00001000)
	dw	0x1000	; przesunięcie
	dw	0x0000	; segment
	; bezwzględny (LBA, liczony od zera) numer sektora do odczytu
	dq	0x0000000000000001	; drugi sektor, w pierwszym jest MBR

Widocznie "pakietem" nazywali jeden sektor... (dla zmylenia przeciwnika)

Druga odpowiedź:

Bochs rozpozna kod wynikowy asemblacji jako "warty" uwagi jeśli plik będzie większy lub równy 1 MiB, ustaw rozmiar skompilowanego kodu:

; dopisz na koniec kodu od nowej linii
align 0x00100000

Trzecia odpowiedź:

Z różnych przyczyn, na pierwszą i podstawową już sobie odpowiedziałeś (choć jest to niecodzienne zagranie). Częstym zachowaniem jest skopiowanie samego siebie pod adres 0x0000:0x1000 i skok w to miejsce, dzięki temu mamy dostęp do ponad 630 KiB pamięci.

Rozwijając myśl, gwarantowana wolna przestrzeń, którą możesz wykorzystać do własnych celów to adres od:

np. Bochs:
0x00000500 - 0x0009EFFF (o ten adres musisz zapytać BIOS, może się dynamicznie przemieszczać - za każdym restartem jednostki, choć pewnym jest 0x0007FFFF)

Daje nam to 634,75 KiB przestrzeni.

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