Napisałem sektor rozruchowy dla nośnika jakim jest dyskietka 3,5" wykorzystując system plików FAT12.
Poniżej zamieszczam pliki do pobrania obrazu dyskietki z w pełni działającym egzemplarzem oraz przykładowym plikiem, który zostanie załadowany przez sektor rozruchowy.
Obraz dystkietki:
http://wataha.net/system/boot/obraz%20dyskietki%20z%20sektorem%20rozruchowym%20fat12.imgSektor rozruchowy FAT12:
http://wataha.net/system/boot/sektor%20rozruchowy%20fat12.binPlik GRUB:
http://wataha.net/system/boot/GRUBPlik "obraz dyskietki z sektorem rozruchowym fat12.img" możemy uruchomić w oprogramowaniu Bochs, VirtualBox lub Qemu. Jest to czysty system plików + załadowany 'sektor rozruchowy.bin' + skopiowany plik 'GRUB'
Sektor rozruchowy ładuje plik znajdujący się w głównym katalogu systemu plików o nazwie GRUB (nazwa nie jest przypadkowa). Maksymalna dozwolona wielkość pliku GRUB to 475,5 KiB, uzależnione od miejsca w które sektor rozruchowy załaduje plik do pamięci (0x0000:0x9000).
Jestem całkowicie pewien, że ponad 475 KiB w pełni wystarczy na napisanie własnego oprogramowania do skonfigurowania GDT, włączenia linii A20, przełączenia procesora w tryb chroniony oraz załadowanie jądra w miejsce 1 MiB+
PS: Nie działa prawidłowo przycisk URL z panelu pisania postów.
Poprawka 0x1 (1 Maja 2013):Błąd w sektorze rozruchowym uniemożliwiał załadowanie pliku GRUB większego niż 512 Bajtów. Procedura zapisująca odczytany sektor w 0x0900:0x0000 nie zwiększała segmentu o 200h po umieszczeniu pierwszej partii danych w pamięci. Wynikiem był załadowany ostatni tylko sektor pliku GRUB pod adres 0x0900:0x0000. Naprawione.
Adnotacja 0x01 (2 Maja 2013):Postęp prac nad plikiem rozruchowym GRUB:
- odblokowanie linii a20
- konfiguracja globalnej tablicy deskryptorów (base: 0, limit: 4 GiB, DPL: 0
[kod/dane])
- przełączenie procesora w tryb chroniony
- wyświetlenie informacji o przebiegu prac w trybie rzeczywistym i chronionym[/list]
Adnotacja 0x02 (7 Maja 2013):Postęp prac nad plikiem rozruchowym GRUB:
- konfiguracja tablicy deskryptorów przerwań (otrzymane wsparcie w poszukiwaniu błędu przez "mangado" IRC: freenode.net kanał: #osdev.pl)
- konfiguracja przerwań sprzętowych (stacja dyskietek)
- przeadresowanie przerwań sprzętowych IRQ0-15 do tablicy deskryptorów w miejsce 0x20h - 0x2F
pozostało:
- sterownik stacji dyskietek
- operacja wyszukania i załadowania pliku KERNEL (jądra) do obszaru 1 MiB+