Привет всем! Итак, исходно: мне необходимо иметь "мобильную среду" для изучения железяк(порты, бряки на них) и своего кода (FASM), который вообщем то вполне помещается на дискетку вместе с исходниками + оболочка-навигатор-редактор... Создаю системную дискету, как никак, флопы еще не перевелись и засунуть ее в некую "интересующую машину", дабы проверить на ней работет ли мой код и как, проще, чем прикручивать HDD или CD-ROM... да и не моя она вовсе! Что нужно для этого? Системные файлы с command.com. Хорошо, завалялись вот от PC-DOS еще, мало места жрут и они работают с SoftIce v.2.80 под досярой (чего не скажешь о файлах от Win9x...!). Создаем CONFIG.SYS: DOS = HIGH DOS = UMB FILES = 30 BUFFERS = 10 DEVICE = S-ICE.EXE DEVICE = HIMEM.SYS DEVICE = UMB.SYS DEVICEHIGH = RAMDRIVE.SYS 4096 /E INSTALLHIGH = KEYRUS.COM Работает. Хорошо. Создаем Autoexec.bat, который вообщем то быренько копирует пожатый файл на RAM диск и там роспускает все это обилие во всей красе. Итого имею вроде одни плюсы, на RAM диске все работает просто реактивно! Даже HDD не снилось COMSPEC для сommand.com указывает тудаже и не требует загрузочного флопика каждый раз при смене флопика, это повышает ограниченную операбельность и возможности "досунуть ему", если... Dos Navigator - удобная боевая, походная среда текущего редактирования исходника с подсветкой и пр. Отличный встроенный редактор...НО! ПОпытка запускать FASM, очень обескураживает, т.к. error: system is in protected mode without DPMI services Кошмар! Вся красивая идея и шанс, коту под... из-за...!??? Кто виноват? Выключаем, SoftIce и все в норме, оказывается. Но без него "нюхать порты" то чем мне? Ладно, еще серия "телодвижений" и оказывается, что ситуация аналогична,если имеется DEVICE=EMM386.EXE конфиге. Ну что дальше? Лезу в исходники FASM v.1.64 в DOS подкаталог, нахожу это(MODES.INC): dpmi: mov ax,1687h int 2Fh or ax,ax ; DPMI installed? jnz no_dpmi test bl,1 jz no_dpmi ; ---> ВОТ ТУТ Я УЛЕТАЮ! НА СООБЩЕНИЕ. mov word [cs:mode_switch],di mov word [cs:mode_switch+2],es mov bx,si ; allocate memory for DPMI data mov ah,48h int 21h jc not_enough_memory mov ds,[environment_segment] mov es,ax mov ax,1 call far [cs:mode_switch] ; switch to protected mode jc no_dpmi .......... .......... no_dpmi: call init_error db 'system is in protected mode without DPMI services',24h Что кто подскажет, присоветует, может я на правильном пути и можно хоть грубо, но обойти в порядке исключения эту гадость? Т.е. подредактить чё-нить, а?
Если FASM действительно вылетает после test bl,1, значит, установленный DPMI-сервер не поддерживает 32-хбитные программы (либо поддерживает, но забывает об этом сообщить).
Мужики, неточность вышла, если точно, то переход происходит чуть выше, т.е. здесь: dpmi: mov ax,1687h int 2Fh or ax,ax ; DPMI installed? jnz no_dpmi :---->>>> тогда получается, что ему "не нравится" ОТСУТСТВИЕ DPMI ??? Вообще ничего не понимаю, накой она ему понадобилась и почему? Да и вообще с этим зверем DMPI не знаком... Может листинг FASM имеет некорректность определения среды из которой запущен и все легко поправить???
VaStaNi Смысл в том, что fasm перед переходом на метку dpmi обнаружил, что его запустили из виртуального режима, и проверяет, есть ли у него способ выбраться в защищенный ... и не обнаруживает такового. Скорее всего виноват в этом драйвер RAM-диска.
запусти пе файл под досом.... че не работает? это потому что нет доступа к апи сервисам. так и с дпми фасм видит что дпми нет а свой он запустить не может поскольку запустить его мона тока с реал мода.
Black_mirror нет он тут ни при чем. HIMEM и затем EMM386 дают тоже самое. А вот если юзаешь только HIMEM, FASM работает нормально. Да уж, что то там несовершенно... видимо так и не светит создать "среду" для изысканий, очень жаль.
VaStaNi Я не внимательно прочитал первое сообщение и не заметил, что конфликт именно с S-ICE. Не знаю, поможет ли это договориться с S-ICE, но c EMM386 вполне можно договориться, и выйти из виртуального в защищенный режим. Называется этот способ VCPI. Висит эта гадость на прерывании 67h. Прежде чем её использовать, нужно убедиться что на этом прерывании есть какой-либо обработчик, а так же что после его вызова с AX=0DE00h, регистр AH обнуляется, в противном случае VCPI там нет. Из всех его функций наибольший интерес представляют 01h и 0Сh, первая позволяет получить информацию необходимую чтобы вернуться обратно из защищенного режима в виртуальный, а вторая как раз и выполняет переключения между режимами. Теоретически можно сделать так, чтобы fasm переключался в защищенный режим через VCPI, а для вызова int21 переключался обратно, но мне кажется придется вносить много изменений. Да и не факт, что S-ICE поддерживает VCPI. 2057304589__VCPI.txt
1. faszm, учуяв PM, как честная PM-прикладушка ищет dpmi, который пользует для своих грязных flat-нужд. Если PM/V86 не обнаруживает, лезет в PM сам. 2. Soft-Ice/DOS при запуске устанавливает V86-режим (как и EMM386 кстати) и всё что запускается после него, запускается в V86. DPMI Soft-Ice НЕ ПОДДЕРЖИВАЕТ, есть только поддержка EMS/XMS; запустить dpmi прогу можно только под SoftICE/W. VCPI программы Soft-Ice поддерживает, но только запуск оных, отлаживать их насколько я помню он не могет. Отлаживать фасм вряд ли понадобится, поэтому поддержка VCPI фасмом позволила бы достигнуть совместимости последнего с Soft-Ice под DOS. Но фасм VCPI не поддерживает и вряд ли его автора когда-либо снизойдут до желаний народных масс, добавив поддержку VCPI. Решить проблему можно многими способами, например, отказаться от использования фасма... Вариант похуже -- раздобыть отладчик, работающий под DPMI -- фасм запускается, порты мониторятся, hw-брекпоинты ставятся.
Спасибо всем за конкретные вещи, весьма проясняют ситуацию. Итак, тестовыми прогами выясняется, что EMM386 организует VCPI v.1.0 и является обработчиком INT67! (имеется в виду если он прописан как DEVICE=...) Он (EMM386) не может быть использован совместно с SoftIce и "ругается" по этому поводу, т.к. по "правилам игры" SoftIce`а он должен быть прописан самым первым(!) DEVICE=... DOS4GW, DOS32A тоже невозможно использовать после SoftIce... Итого получается картина ПОЛНОЙ несовместимости программ, т.е.: - FASM несовместим с EMM386, SoftIce; - EMM386 несовместим с SoftIce - DOS4GW(DOS32A) несовместимы с SoftIce. Итог - метод тыка и подбора совместимых софтин эффекта не имееет! Остается один вариант - нормальная редакция FASM`а, который бы работал в среде V86 (SoftIce) и пр.(VCPI,DPMI) или "в наглую" юзал Unreal для своих широких нужд, без заглядывания во всякие поросшие мохом сервисы и прерывания Dos.