Если делать полную поддержку FAT, то алгоритм будет примерно такой: - при начале работы с диском необходимо прочитать BPB из boot сектора FAT устройства, запомнить их в переменных (новых, расположенных в расширенном ОЗУ). Далее, при монтировании образа tr-dos диска, нужно посмотреть номер начального кластера. Используя номер начального кластера необходимо выбрать всю цепочку FAT из которых состоит файл .TRD. Далее, в процедурах TR-DOS чтения/записи сектора делаем анализ номера сектора (по сути в LBA формате, только относительно дискеты) - в какой номер кластера файла TRD от начала файла мы попадаем (используя ранее считанные параметры). Получив относительный номер кластера (Cluster from file start) просматриваем цепочку FAT считанную ранее, находим нужный номер кластера. Ну а далее совсем просто, используя параметры из BPB делаем расчеты в итоге получая номер сектора LBA HDD. Из номер сектора (как бы LBA 0-2559) диска TRDOS нужно получить номер сектора в кластере. Сделав and с маской кластера. Маска кластера = кол-во секторов в кластере -1. Вот и почти всё. Ещё придётся вводить буфер, т.к. программа от trdos вправе запросить для чтения 1 сектор или в запрошенном блоке секторов будет нечетное их количество. А т.к. размер сектора на hdd 512 байт, буфер необходим. (на самом деле для чтения можно сделать вариант и без буфера, если будет интересно - расскажу как).
Думаю да, использована расширенная память. Скорее всего используется возможность подключения страниц в любое окно процессора.
p.s. забыл сказать, что расчёты сектора делаются на кластер, полный или нет. Т.е. вполне может быть ситуация, когда мы начинаем обращение к последнему сектору кластера. А какой он именно выясняем сделав and номера сектора относительно начала файла TRD с маской кластера. Если кластеры идут подряд (файл не фрагментирован), то более искать кластеры и делать вычисления не нужно







Ответить с цитированием