Как создать файл на жестком диске в сборочном загрузчике, используя только прерывания BIOS?

Я написал базовый загрузчик сборки, чтобы очистить экран и напечатать X:

[BITS 16]
[ORG 0x7c00]

main:
   mov ax, 0x03
   int 10h

   mov ah, 0x0E
   mov al, 'X'
   int 10h

   jmp $

times 510 - ($-$$) db 0
DW 0xAA55

Теперь мне нужно создать файл на жестком диске. Я знаю, что могу легко сделать это с помощью прерываний DOS, используя этот код:

outputfile db "myfile.txt"
outhandle  db ?

mov dx, offset outputfile
mov cx, 0
mov ah, 3Ch
int 21h
mov outhandle, ax

А вот про работу с файлами через прерывания BIOS я не нашел.

Это возможно?


person MARSHMALLOW    schedule 04.05.2020    source источник
comment
Потому что BIOS не занимается файловыми системами. Вам нужно будет написать свой собственный код.   -  person Jester    schedule 04.05.2020
comment
@Jester А как написать свой код?   -  person MARSHMALLOW    schedule 04.05.2020
comment
@MARSHMALLOW Я рекомендую текстовый редактор. Тем не менее, если файловая система на диске представляет собой что-то простое, например FAT12, вы можете сами написать код простого драйвера файловой системы. Но в загрузчик он, скорее всего, не поместится.   -  person fuz    schedule 04.05.2020
comment
Есть ли конкретная причина, по которой вы хотите написать код, использующий в основном устаревший устаревший интерфейс BIOS? Я думаю, что в UEFI есть файловая система. (Его собственная файловая система, но вы можете смонтировать ее из основной ОС). Если вы просто хотите запустить какой-то код (например, эксперименты с производительностью), чтобы полная ОС не мешала, UEFI может быть лучшим выбором.   -  person Peter Cordes    schedule 04.05.2020


Ответы (1)


Идея вызовов прерывания BIOS состоит в том, чтобы абстрагироваться от кровавых деталей конкретных периферийных устройств. Таким образом, вместо того, чтобы знать, как вращать двигатель, двигать головой и т. Д., Существуют вызовы BIOS высокого уровня, аналогичные вызовам драйверов или системным вызовам в операционной системе, у вас есть эти вызовы для чтения этой записи.

Файловые системы и другие подобные вещи находятся на следующем более высоком уровне / слое. Вызовы BIOS в отношении жестких дисков помогают вам прочитать сектор, записать что-то вроде сектора, но файловые системы находятся на высоком уровне, и вы должны реализовать это в своем коде. (или выполните системные вызовы операционной системы).

Если вы хотите просто поэкспериментировать с чтением и записью, вы можете просто сделать это без файловой системы, потому что на этом уровне это просто биты / байты / сектора, а не файловые системы. Вы можете просто записать сектора с N по M, а затем прочитать их обратно или прочитать их в случайном порядке и т. Д., Чтобы почувствовать, что они там есть. Или вы можете использовать операционную систему для создания файловой системы и файлов, а затем использовать вызовы BIOS для чтения инфраструктуры файловой системы (зависит от файловой системы) и попытаться найти файлы и следовать информации каталога, чтобы собрать отдельные части этого файла по секторов. И используйте эту информацию в сочетании с любой качественной информацией, которую вы можете найти в Интернете для этого конкретного типа файловой системы, и сравните заметки и, возможно, разработайте свою собственную библиотеку файловой системы оттуда.

Если это ваше собственное дело, вы можете вообще не иметь файловой системы, просто отслеживайте данные на этом носителе, как хотите.

Обратите внимание, что есть бесплатные реализации DOS, в которых вы можете позаимствовать их код для этих вызовов dos, или учиться, или что-то еще. Точно так же вы все еще можете найти сторонние реализации, некоторые из которых будут с открытым исходным кодом.

И, как упоминалось в комментарии, в зависимости от ваших общих целей существуют более новые решения, которые заменяют прямой BIOS / DOS для загрузки ПК. Ожидается, что будет аналогичная модель / функциональность, только более новая и более соответствующая современным процессорам, чем что-то, разработанное на 8088/86.

person old_timer    schedule 04.05.2020
comment
не забудьте проголосовать за комментарии к вопросу, в котором в основном говорится то же самое. - person old_timer; 04.05.2020