2 DooD тогда советую сделать такую схему: 1) Boot sector + расположен в нулевом секторе + занимает 1 сектор (512) байт + имеет в себе код: - настройка стека - настройка первоначального текстового режима (80*25) - чтение следующего сектора в память - вывод сообщения о своей загрузке - грузит в ближайший свободный сегмент(по оффсету 100h) ядро из файловой системы - передаёт управление на него если оно найдено было - или выводит сообщение что отсутствует ядро + в себе хранит данные - параметры диска (кол-во секторов + кол-во секторов на дорожке + кол-во дорожек на стороне + кол-во сторон) - первый сектор файловой системы (2 байта достаточно) 2) Второй сектор - чисто функции + преобразование линейного адреса сектора в дисковый + загрузка файла в память из файловой системы (работа только с корневым каталогом) + функцию вывода сообщений на экран (чтобы не писать постоянно одно и тоже) 3) ядро + расположено хз где. + имеет любой размер но не более 64 кил - 100h байт (чтобы целиком вместилось в один сегмент) + по факту это стандартный COM файл с org 100h + выполняет код: - опять настраивает сегментные регистры (уже с учетом того где оно находится) - настраивает стек (который выше себя) - ставит обработчик прерываний на реализуемые им функции. Допустим можно как в DOS - прерывание 21h (т.е. тупо записывает адрес обработчика по адресу 0000:0084 (4 байта сегмент + смещение)) - в обработчике 21h прерывания проверяет значение регистра AH и на основе этого выполняет нужную функцию. Если с загрузочным сектором проблем не должно возникнуть, то второй сектор делается так 1) преобразование линейного адреса сектора в дисковый - можешь взять из моего исходника, только подправь с учётом того, какая дискета (это из бутсектора возьмешь) 2) функцию вывода сообщений на экран - это проблем не составит 3) а вот функция чтения файла из ФС в оперативу - это сложнее уже. Но всё только кажется, на самом деле тут намного проще. К приму можно заюзать самописную систему на основе FAT16. Основная идея в следующем 1) в Boot секторе находится адрес сектора корневого каталога. 2) первые 2 сектора заняты Boot сектором и его продолжением. 3) дискета (1 440 килобайтаная) максимум имеет 2 880 секторов. значит каждый сектор можно идентифицировать 2-мя байтами. (т.е. максимум можно поддерживать до 32 метров накопители) 4) после второго сектора идет таблица секторов которая содержит массив из WORD. Кол-во элементов в массиве = кол-во секторов. значит для дискеты это будет 5760 байт (~12 секторов) в этой таблице записаны связи секторов. По значениям 0 - свободный сектор 1 - последний сектор 2 - сбойный сектор любое другое значение является номером следующего сектора для файла. Эту таблицу всю придется тоже загрузить сразу в память. благо она не большая. И загрузить её можно сразу из boot сектора 5) таблица файлов содержит такую структуру - 8 байт имя - 3 байта расширение файла - 1 байт тип файла - 4 байта размер файла - 2 байта - номер первого сектора файла (если файл нулевой длинный то можно указать 0 типа не заюзан сектор) т.е. 18 байт каждый элемент таблицы. значит в 512 байт (1 сектор) влезет инфа о 28 файлах (для корневого хватит) к тому же еще останется 8 байт свободных. их можно заюзать так метку тома ))) хотя можно и игнорить. хотя 1 байт выделить под кол-во уже записанных файлов. 6) чтобы считать файл (допустим в ds:si указан адрес имени файла, а ES:BX адрес куда засунуть файл) и вот из BOOT сектора берешь адрес таблицы файлов. проходишься по всем элементам её и ищешь нужное имя. Если нашел, то берешь номер сектора начала файла. Считываешь его. Затем берешь этот номер сектора и используешь как индекс в таблице секторов. И берешь от туда 2 байта. которые указывают на следующий сектор. Далее считываешь следующий сектор но уже BX передвинув на 512 байт. и повторяешь заново, пока не упрешься в значение меньше 3-х. т.е. сама функция которая загрузит файла по такому механизму довольно проста и максимум байт 200 байт. Вот таким вот образом уже есть основы файловой системы и прочая хрень. Запись файла тоже проста и имеет принцип: 1) в таблице секторов нашел свободный сектор 2) записал 512 байт файла в этот сектор. затем ищещь второй свободный сектор, когда нашел, то в таблицу в поле первого записываешь номер второго, далее всё повторяешь. 3) записываешь в таблицу файлов данные 4) сохраняешь таблицу секторов обратно на дискету. 5) сохранил таблицу файлов тоже Удаление файла: 1) в таблице ищещь файл 2) берешь номер первого сектора 3) в таблице файлов удаляешь запись 4) сохраняешь таблицу файлов 5) пробегаешься по таблице секторов и ставишь 0 для всех секторов которые были заняты файлом 6) сохраняешь таблицу секторов Но это уже в ядре можно делать. А в бут секторе только функция приметивного чтений без учёта каталогов. Первоначально создать файловую систему очень просто. пишешь любую прогу которая сделает следующее (создаст файл и будет вписывать туда) 1) впишет бутсектор (сразу занесет адрес таблицы файлов ) 2) впишет второй сектор 3) впишет пустую таблицу секторов (только пометит какие сектора заняты за таблицей файлов + составит список секторов для файла ядра) 4) после таблицы секторов впишет 1 элемент таблицы файлов. 5) сам файл ядра будет лежать в следующих секторах. Это даже в HEX редакторе можно сделать. Или вообще на стадии компиляции.