OSDev

для всех
Текущее время: 28 апр 2024, 00:50

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 15 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: как грузить DOS с жёсткого диска
СообщениеДобавлено: 30 ноя 2013, 12:41 

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 277
решил запихнуть дос с командером на жёсткий диск,
а он как то не грузится boot который для флопика не срабатывает на жёстком диске,
исходник загрузчика достать не могу не получилось,

вся основная проблема в том что функция биоса int 13h ah=02h не работает по отношению к жёсткому диску.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как грузить DOS с жёсткого диска
СообщениеДобавлено: 30 ноя 2013, 13:19 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Обычно "sys c:" и дос ставит правильный загрузчик.
Загрузчик с НЖМД отличается от загрузчика с НГМД. Но у меня есть подозрения что у вас диск больше 8ГБ а такие DOS не поддерживает.

Цитата:
вся основная проблема в том что функция биоса int 13h ah=02h не работает по отношению к жёсткому диску.

Работает. Первый десяток функций работает и для жёсткого диска и для флопика. Только их поведение малость отличается. Не работать или давать неправильные результаты может если диск больше 8ГБ. В таких случаях надо пользоваться ah=42. Установщик ОС когда увидит диск более 8ГБ должен поставить версию MBR с поддержкой больших дисков.
Но проблема как я уже писал в том что ДОС не поддерживает диски больше 8ГБ.
А процесс его загрузки напоминает протягивания себя левой рукой за голову через угольное ушко.
Вначале грузиться MBR потом BR- раздела. Потом первый кластер IO.SYS. А затем этот кластер подгружает весь IO.SYS


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как грузить DOS с жёсткого диска
СообщениеДобавлено: 30 ноя 2013, 13:51 

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 277
я поставил MBR и он работает,
а загрузчик из флопика взял, и он не работает,
на сколько я понял надо загрузить 2 файла (MSDOS SYS) и (IO SYS),
а вот как их грузить так и не понятно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как грузить DOS с жёсткого диска
СообщениеДобавлено: 30 ноя 2013, 15:25 

Зарегистрирован: 26 мар 2012, 17:32
Сообщения: 209
msdos.sys - пережиток древних времён. В 7м досе (который берётся из Win9x) в нём тупо текст закомментированный.
В случае не-древнего (да, в этом есть ирония) MS-DOS необходимы io.sys и command.com.
Ну и не помешают config.sys (с настройками буферов и драйверов) и autoexec.bat (PATH указать, vgaga или ruskey запустить и ещё так по мелочи).
Есть и другие реализации (ibm, freedos), в которых файлы иначе называются.
sys.com нужно запускать от своей реализации - запишет правильный MBR и скопирует необходимые^W достаточные файлы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как грузить DOS с жёсткого диска
СообщениеДобавлено: 30 ноя 2013, 15:41 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Таки вспомнил что есть сие чудо.
http://clem.plouc.net/oldutils/dos6/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как грузить DOS с жёсткого диска
СообщениеДобавлено: 30 ноя 2013, 22:40 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Не нужно использовать MS чудо меньше 7 версии, потому что FAT32 оно не знает, диски больше 2ГБ не знает, и вообще.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как грузить DOS с жёсткого диска
СообщениеДобавлено: 30 ноя 2013, 23:12 

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 277
решил попробовать написать загрузчик,
пока получается выдать корневую папку,
а вот куда и как это дело грузить пока не разобрался.
кстати по поводу вычисления корневой папки,
я не уверен что правильно её вычислил.
Код:
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


Вложения:
test.png
test.png [ 5.42 КБ | Просмотров: 9464 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как грузить DOS с жёсткого диска
СообщениеДобавлено: 01 дек 2013, 00:41 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Чтобы выделять память под буферы, используй менеджер памяти типа такого

Код:
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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как грузить DOS с жёсткого диска
СообщениеДобавлено: 01 дек 2013, 01:06 

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 277
Himik писал(а):
Чтобы выделять память под буферы, используй менеджер памяти типа такого

и какие сдвиги делать под ДОС,
и куда этот сдвиг вставлять, то есть куда грузить?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как грузить DOS с жёсткого диска
СообщениеДобавлено: 01 дек 2013, 11:20 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
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 (смотри ниже).



Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB