Всем привет Пытаюсь разобраться в реализации механизма задействования блоков верхней памяти для загрузки в них резидентных частей программ в config.sys командой devicehigh. Проблема заключается в том, что при загрузке любого драйвера таким образом, EMM386 выдает ошибку "EMM386 has detected error # 6 in an application at memory address 00B8: 1202. To minimize the chance of data loss, EMM386 has halted your computer. To restart your computer, press ENTER " Запустить Soft-Ice и посмотреть откуда и почему прыгаем по неправильному адресу (попытка выполнить неизвестную инструкцию - по этому адресу какие-то левые данные) не получается, из за загруженного EMM386. Может у кого есть какие идеи в какую сторону копать, поделитесь плз. Сам EMM386 (да и еще некоторые схожие программы типа QEMM) корректно устанавливает эти UMBs (смотрю с помощью mem), с использованием ключей RAM или NOEMS, но вот использовать эти блоки не получается. Уже перепробовал все возможные комбинации ключей EMM386, каким либо образом связанных с этой проблемой, но пока безрезультатно. В общем подскажите плз, где наиболее полно можно почитать о том, как EMM386 предоставляет доступ к блокам верхней памяти.
Хотелось бы услышать хоть какие-нить предположения, потестирую любые.. Странно - почему-то перед загрузкой драйвера (функцией 4Bh 21 прерывания) выполняется 21 прерывание в функцией 58h - ax=5803, bx=0 - т.е. устанавливаем новое состояние UMB- не используется. Зачем ДОС (6.22) отключает использование UMBs, если мы собираемся загружать туда драйвер? При выполнении кода по включению UMB (int 21h ax=5803 bx=1), машина виснет. Странно, что не работает только на этой (AMD LX800) машине, на остальных все ок. Также неважно сколько памяти и по каким адресам (могу использовать от C800 до DC00) выделяю под UMB - все равно валиццо на 6-й ошибке. уф...
Если я ничего не забыл за 15 лет, то - 1. Для того, чтобы DOS смогла пользоваться UMB, первыми строками в config.sys должны быть: DOS=HIGH,UMB DEVICE=HIMEM.SYS DEVICE=EMM386.EXE NOEMS 2. Ни himem, ни emm386 не могут быть загруженными директивой DEVICEHIGH. 3. Некоторые программы могут игнорировать директивы DEVICEHIGH или INSTALLHIGH (если не ошибаюсь - smartdrv). 4. EMM386 не предоставляет доступ к блокам верхней памяти, - он "обманывает" DOS, показывая ей наличие там RAM, которую заимствует у HIMEM.SYS