Хороший вариант, если не для современного винта, а для старого (сравнительно небольшого) или для CF, то твоя реализация FAT16 хорошо подходит. Ну и надо, чтобы фрагментации образа hdd не было.
Вид для печати
Я предлагаю проще, изменять константу тут:
И тогда не потребуется даже менять подпрограмму чтения/записи сектора... :)Код:LaD954: MOV A, E ; восстанавливаем номер диска
CALL LaD9B2 ; получаем ссылку на нужную таблицу
MOV M, C
INX H
MOV M, B
INX H ; запись в таблицу номера дискеты НЖМД
PUSH H ; сохр.в стек
LXI H, 0F3BEh ; = 2 - 0622h * 2
MVI A, 0FFh
INX B
LaD96A: LXI D, 00622h ; суммарное количество секторов на одной дискете
Чуть занудства - FFh в следующей строке тоже надо выделить
На всякий случай ссылка на тему с текущими реинкарнациями FAT b2mа в развитом PVV виде. Работа с SD оттуда вряд ли понадобится, а FATную часть можно подсмотреть/позаимствовать.
- - - Добавлено - - -
Кстати, а как станет работать такая система с суперзагрузчиком в эмуляторе? Меня больше всего смущает фрагментация. Разве что позиционировать такую систему только для реала.
Я пока не очень представляю, как это может быть организовано, но если внутрь эмулятора дать реальные параметры физического ПКшного диска, то может получиться нехорошо. И образ hdd наверняка будет фрагментирован (у меня точно) и вектор может накуролесить в ПКшном разделе и раздел современного диска вряд ли будет в FAT16. Как вариант - отдельный образ ПКшного диска с FAT16 и файлом с образом hdd внутри.
- - - Добавлено - - -
Ну или компромисс - отдельный раздел FAT16, но это не очень удобно.
Не забудь про доступ к дорожкам 0-7 и псевдо-дорожке 255.
- - - Добавлено - - -
Эмулятор не работает с физическими носителями, только файлы. Придётся копировать образ CF на ПК и обратно.
Либо учитывать в суперзагрузчике, что CF-карта не отформатирована под FAT и тогда в эмуляторе мдос будет работать по-старинке, без смещения. С указанием в конфиге образа (в старом формате) на CF-карте.
Хорошо, хотя к дорожкам 0-7 доступ нужен крайне редко, но можно это тоже поправить, изменив константу тут:
А к 255 (или нулевому сектору) вообще доступ будет не обязателен, если задать максимальное количество дискет на диске каким-либо другим способом. Хотя и его расположение тоже правится изменением константы.Код:LDA L_E86D ; дорожка, = FFh при инициализации НЖМД (чтении 1-го сектора)
CPI 008h
JNC L_D85F ; переход если дорожка >= 08h (несистемная область)
LXI D, 00002h
XRA A
JMP L_D86C