Давай уточним, чтобы я понял. Значит, в микродосе в DPB нет поля DRVMASK, а маска для записи в регистр вычилсяется прямо в коде исходя из номера дисковода? Это плохо. Очень плохо.
Может, тогда вообще забить на работу с реальными дисководами в микродосе, и оставить только эмуляцию для всех 4 дисков? Не так уж и нужны дисководы при наличии EXTROM.
Или, действительно, придется где-то в биосе выделить место, положить туда карту отображения дисков, и как-то сообщить программе mount адрес этой таблицы. Ну и сам биос научить определять тип диска по этой таблице. Задачка еще та
Я на это уже нарывался. Поэтому для своего дефлотного биоса просто вбил в mount абсолютные адреса блоков DPB. С этим биосом все работает без вопросов.cp/m если нет диска в дисководе - заманутить его невозможно
при seldsk возвращается 0
Придурки разработчики CР/M не могли, блин, предусмотреть способ передать программе адрес DPB не трогая диска.
Это ты про CP/M или микродос? Не знаю как в микродосе, но в CP/M SELDSK при C=FF штатно отдает адрес таблицы векторов прерываний. Нам же нужен способ получить адрес DPB нужного диска, не трогая его, то есть не вызывая процедуру GETINFO (которая при невставленной дискете начинает сыпать ошибки).т.е. предлагаю ввести таки апи внутри биоса
например при тот-же seldsk при c=0xff
дополнительно верунть de=табличка маппинга, bc=0x55aa как флаг
Я уже думал над расширением функции SELDSK, уже даже хотел выносить на обсуждение, а вот теперь и ты нарвался на то же самое. SELDSK в существующем виде не подходит для получения адреса DPB.
То есть в С придется оставить номер диска, для которого мы хотим получить адрес DPB. А в качестве флага того, что мы хотим просто получить адрес DPB, можно установить B=AA. AA я предлагаю потому, что FF или 00 могут оказаться в B чисто случайно, ведь по стандарту этот регистр параметров не содержит, и при вызове в нем может оказаться любой мусор.
Итак, вызов SELDSK:
C= #диска
B=AA - отдать DPB
не AA - вызвать GETINFO, а потом уже отдать DPB
Проверочный образец 55AA в данном случае не нужен, поскольку адрес DPB отдается в любом случае.
А вот что делать с микродосом... имхо проще плюнуть на физические диски. Ну а если нет - давай договариваться о формате таблицы дисков и об интерфейсе получения ее адреса. Хотя бы почти как ты предлагал, только C не FF, а что-нибудь другое, например AA или 55.
Я смотрю, биосы уже прямо распухают от патчей. Также твой загрузчик и программа MOUNT толстеют на глазах. Вот она, цена совместимости...






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