Ну с датой вроде тоже немного прояснилось. DOS пользует функцию 04h прерывания 1ah для чтения даты. В CH должно вернуться столетие в BCD. Поисковый BIOS возвращает там 0xFF. DOS с такого расклада офигевает, потому как 0xFF нифига не валидное число в BCD, и уходит на ошибку, то есть устанавливает дату на свою дефолтную. Почему Поиск возвращает там 0xFF? Да хрен его знает. В обработчике Int 1Ah он честно возвращает значение столетия из ячейки 0x32h CMOS. Но большой вопрос - а не пишет ли он в эту ячейку свою карту дефектов RAM, и вообще, инициализирует ее хоть как-нибудь? Честно говоря, все сорцы BIOS (2.1) напоминают урывками нахватанные где-то куски кода, часть от Поиск-1, часть от сорцов IBM AT, часть еще откуда-то, кое как слепленные в нечто целое по быстрому, при этом разные куски разбросаны по разным файлам. Хочется взять и сжечь. Разбираться в этом совершенно не хочется.
Фиксится так же просто и беспощадно, в лучших традициях этого BIOS - в функции 04 прерывания Int 1Ah в регистре CH всегда возвращать 0x20h. Тем самым решается проблема 2000 года, так как год не может быть никакой другой, корме 20xx -))
- - - Добавлено - - -
Вообщем на скорую руку подправил BIOS v2.6 по вышеописанным методам. Должен теперь в ДОС аутоматически брать время/дату из RTC. Еще поправлен класс машины на FC (IBM AT) чтоб некоторые программы все-таки позволяли работать с CMOS. Другое остальное ничо не трогал, все как в оригинальной версии v2.6.




Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 

