FASM ругается на DPMI, как быть?

Тема в разделе "WASM.ASSEMBLER", создана пользователем VaStaNi, 9 ноя 2005.

  1. VaStaNi

    VaStaNi Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    203
    Адрес:
    Ukraine
    Привет всем! Итак, исходно: мне необходимо иметь "мобильную среду" для изучения железяк(порты, бряки на них) и своего кода (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



    Что кто подскажет, присоветует, может я на правильном пути и можно хоть грубо, но обойти в порядке исключения эту гадость? Т.е. подредактить чё-нить, а?
     
  2. ava

    ava New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2003
    Сообщения:
    169
    Если FASM действительно вылетает после test bl,1, значит, установленный DPMI-сервер не поддерживает 32-хбитные программы (либо поддерживает, но забывает об этом сообщить).
     
  3. VaStaNi

    VaStaNi Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    203
    Адрес:
    Ukraine
    Мужики, неточность вышла, если точно, то переход происходит чуть выше, т.е. здесь:

    dpmi:

    mov ax,1687h

    int 2Fh

    or ax,ax ; DPMI installed?

    jnz no_dpmi :---->>>>

    тогда получается, что ему "не нравится" ОТСУТСТВИЕ DPMI ???

    Вообще ничего не понимаю, накой она ему понадобилась и почему? Да и вообще с этим зверем DMPI не знаком...

    Может листинг FASM имеет некорректность определения среды из которой запущен и все легко поправить???
     
  4. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    VaStaNi

    Смысл в том, что fasm перед переходом на метку dpmi обнаружил, что его запустили из виртуального режима, и проверяет, есть ли у него способ выбраться в защищенный ... и не обнаруживает такового. Скорее всего виноват в этом драйвер RAM-диска.
     
  5. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    запусти пе файл под досом.... че не работает? это потому что нет доступа к апи сервисам. так и с дпми фасм видит что дпми нет а свой он запустить не может поскольку запустить его мона тока с реал мода.
     
  6. VaStaNi

    VaStaNi Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    203
    Адрес:
    Ukraine
    Black_mirror



    нет он тут ни при чем. HIMEM и затем EMM386 дают тоже самое. А вот если юзаешь только HIMEM, FASM работает нормально.

    Да уж, что то там несовершенно... видимо так и не светит создать "среду" для изысканий, очень жаль.
     
  7. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    VaStaNi

    Я не внимательно прочитал первое сообщение и не заметил, что конфликт именно с S-ICE.



    Не знаю, поможет ли это договориться с S-ICE, но c EMM386 вполне можно договориться, и выйти из виртуального в защищенный режим. Называется этот способ VCPI. Висит эта гадость на прерывании 67h. Прежде чем её использовать, нужно убедиться что на этом прерывании есть какой-либо обработчик, а так же что после его вызова с AX=0DE00h, регистр AH обнуляется, в противном случае VCPI там нет. Из всех его функций наибольший интерес представляют 01h и 0Сh, первая позволяет получить информацию необходимую чтобы вернуться обратно из защищенного режима в виртуальный, а вторая как раз и выполняет переключения между режимами.



    Теоретически можно сделать так, чтобы fasm переключался в защищенный режим через VCPI, а для вызова int21 переключался обратно, но мне кажется придется вносить много изменений. Да и не факт, что S-ICE поддерживает VCPI.



    [​IMG] 2057304589__VCPI.txt
     
  8. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759
    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-брекпоинты ставятся.
     
  9. VaStaNi

    VaStaNi Member

    Публикаций:
    0
    Регистрация:
    1 июн 2004
    Сообщения:
    203
    Адрес:
    Ukraine
    Спасибо всем за конкретные вещи, весьма проясняют ситуацию.

    Итак, тестовыми прогами выясняется, что 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.
     
  10. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759




    У Soft-Ice свой EMS-менеджер. См. доку по Soft-Ice 2.80, ключевое слово для поиска-- "emmsetup".