OSDev http://osdev.su/ |
|
как грузить DOS с жёсткого диска http://osdev.su/viewtopic.php?f=6&t=831 |
Страница 1 из 2 |
Автор: | scuter [ 30 ноя 2013, 12:41 ] |
Заголовок сообщения: | как грузить DOS с жёсткого диска |
решил запихнуть дос с командером на жёсткий диск, а он как то не грузится boot который для флопика не срабатывает на жёстком диске, исходник загрузчика достать не могу не получилось, вся основная проблема в том что функция биоса int 13h ah=02h не работает по отношению к жёсткому диску. |
Автор: | pavia [ 30 ноя 2013, 13:19 ] |
Заголовок сообщения: | Re: как грузить DOS с жёсткого диска |
Обычно "sys c:" и дос ставит правильный загрузчик. Загрузчик с НЖМД отличается от загрузчика с НГМД. Но у меня есть подозрения что у вас диск больше 8ГБ а такие DOS не поддерживает. Цитата: вся основная проблема в том что функция биоса int 13h ah=02h не работает по отношению к жёсткому диску. Работает. Первый десяток функций работает и для жёсткого диска и для флопика. Только их поведение малость отличается. Не работать или давать неправильные результаты может если диск больше 8ГБ. В таких случаях надо пользоваться ah=42. Установщик ОС когда увидит диск более 8ГБ должен поставить версию MBR с поддержкой больших дисков. Но проблема как я уже писал в том что ДОС не поддерживает диски больше 8ГБ. А процесс его загрузки напоминает протягивания себя левой рукой за голову через угольное ушко. Вначале грузиться MBR потом BR- раздела. Потом первый кластер IO.SYS. А затем этот кластер подгружает весь IO.SYS |
Автор: | scuter [ 30 ноя 2013, 13:51 ] |
Заголовок сообщения: | Re: как грузить DOS с жёсткого диска |
я поставил MBR и он работает, а загрузчик из флопика взял, и он не работает, на сколько я понял надо загрузить 2 файла (MSDOS SYS) и (IO SYS), а вот как их грузить так и не понятно. |
Автор: | Nable [ 30 ноя 2013, 15:25 ] |
Заголовок сообщения: | Re: как грузить DOS с жёсткого диска |
msdos.sys - пережиток древних времён. В 7м досе (который берётся из Win9x) в нём тупо текст закомментированный. В случае не-древнего (да, в этом есть ирония) MS-DOS необходимы io.sys и command.com. Ну и не помешают config.sys (с настройками буферов и драйверов) и autoexec.bat (PATH указать, vgaga или ruskey запустить и ещё так по мелочи). Есть и другие реализации (ibm, freedos), в которых файлы иначе называются. sys.com нужно запускать от своей реализации - запишет правильный MBR и скопирует необходимые^W достаточные файлы. |
Автор: | pavia [ 30 ноя 2013, 15:41 ] |
Заголовок сообщения: | Re: как грузить DOS с жёсткого диска |
Таки вспомнил что есть сие чудо. http://clem.plouc.net/oldutils/dos6/ |
Автор: | Himik [ 30 ноя 2013, 22:40 ] |
Заголовок сообщения: | Re: как грузить DOS с жёсткого диска |
Не нужно использовать MS чудо меньше 7 версии, потому что FAT32 оно не знает, диски больше 2ГБ не знает, и вообще. |
Автор: | scuter [ 30 ноя 2013, 23:12 ] | ||
Заголовок сообщения: | Re: как грузить DOS с жёсткого диска | ||
решил попробовать написать загрузчик, пока получается выдать корневую папку, а вот куда и как это дело грузить пока не разобрался. кстати по поводу вычисления корневой папки, я не уверен что правильно её вычислил. Код: jmp start
nop BS_OEMName db 'Ranish ' ; Название и версия Windows BPB_BytsPerSec dw 512 ; Количество байтов на сектор BPB_SecPerClus db 1 ; Количество секторов на кластер (всегда кратно двум в степени п) BPB_RsvdSecCnt dw 1 ; Количество зарезервированных секторов перед первой FAT BPB_NumFATs db 2 ; Количество таблиц FAT BPB_RootEntCnt dw 224 ; Количество элементов в корневом каталоге (максимальный предел) BPB_TotSec16 dw 2880 ; Общее число секторов (00 00 - если размер диска больше 32 Мб) BPB_Media db 0f0h ; Дескриптор среды; в данном случае F8, что идентифицирует диск как жесткий с любой емкостью BPB_FATSz16 dw 9 ; Количество секторов на элемент таблицы FAT BPB_SecPerTrk dw 18 ; Количество секторов на дорожку BPB_NumHeads dw 2 ; Число головок BPB_HiddSec dd 0 ; Количество скрытых секторов BPB_TotSec32 dd 0 ; Общее число секторов, если размер диска больше 32 Мб BS_DrvNum db 0 ; Номер диска; в данном случае 80, что идентифицирует основной раздел BS_Reserved db 0 ; Зарезервирован BS_BootSig db 29h ; Расширенная сигнатура (всегда 29h) BS_VolID dd 0 ; Серийный номер тома BS_VolLab db 'NO NAME ' ; Метка тома BS_FilSysType db 'FAT12 ' ; Тип файловой системы (12- или 16-разрядная) start: mov ax,[BPB_SecPerTrk] add ax,[BPB_RsvdSecCnt] mov [dir_root],ax
|
Автор: | Himik [ 01 дек 2013, 00:41 ] |
Заголовок сообщения: | Re: как грузить DOS с жёсткого диска |
Чтобы выделять память под буферы, используй менеджер памяти типа такого Код: DATASEG equ 7C0h
nMemFreePtr dw DATASEG + 20h ;Вход: ax Size ;Выход: bx Segment MemAlloc proc mov bx,[nMemFreePtr] add ax,0Fh ;Round to 16 shr ax,4 add [nMemFreePtr],ax ;Сдвигаем вершину кучи ret MemAlloc endp |
Автор: | scuter [ 01 дек 2013, 01:06 ] |
Заголовок сообщения: | Re: как грузить DOS с жёсткого диска |
Himik писал(а): Чтобы выделять память под буферы, используй менеджер памяти типа такого и какие сдвиги делать под ДОС, и куда этот сдвиг вставлять, то есть куда грузить? |
Автор: | pavia [ 01 дек 2013, 11:20 ] |
Заголовок сообщения: | Re: как грузить DOS с жёсткого диска |
scuter По поводу корневой директории, конечно неправильно. Читаем спецификацию на FAT http://express-os.googlecode.com/files/ ... 03-rus.doc Цитата: Директория FAT - ни что иное как “файл”, состоящий из списка 32-байтных структур. Лишь одна специальная директория, которая всегда должна присутствовать, это корневая директория. На дисках FAT12 и FAT16, корневая директория расположена в фиксированном месте - непосредственно после последней таблицы FAT, и состоит из фиксированного количества секторов, вычисляемого из BPB_RootEntCnt (смотри вычисление RootDirSectors выше). Для дисков FAT12 и FAT16, номер первого сектора корневой директории зависит от номера первого сектора таблицы FAT:
FirstRootDirSecNum = BPB_ResvdSecCnt + (BPB_NumFATs * BPB_FATSz16); Для FAT32, корневая директория может быть произвольного размера из последовательности кластеров, так же как любая другая директория. Номер первого кластера корневой директории FAT32 хранится в BPB_RootClus. В отличие от других директорий, корневая директория любой FAT не имеет штампа даты и времени, не имеет имени файла (кроме неявного имени “\”), и не содержит “.” и “..” в первых двух записях. Ещё один аспект - только в корневой директории может содержаться файл, у которого установлен единственный атрибут ATTR_VOLUME_ID (смотри ниже). |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |