История изменений
Исправление firkax, (текущая версия) :
Но инт21 то он вполне может под в86 гонять. И более того, в присутствии емм386 нет альтернативы - обязательно будет под в86 его гонять.
Да что ж такое то, сколько повторять? Нет нигде реалистичной спецификации на то, что может оказаться внутри int21. Начиная от разных несовместимых версий доса и заканчивая произвольными резидентными программами, безо всякой вежливости перехватывающими его и меняющими как угодно. Это чёрный ящик, лезть внутрь в автоматическом режиме чревато неожиданными проблемами. Да даже штатное: ну представь, юзер с помощью int21 читает файл, там получается ошибка диска, выводится abort/retry/fail, юзер жмёт abort, и всё - управление назад уже не возвращается, продолжается работа проги, из которой твой экстендер был запущен, а сам экстендер перетирается в памяти чем-то другим, но проц до сих пор в V86 режиме и в итоге всё крашится.
Любое прерывание, хоть аппаратное, хоть програмное, может содержать внутри кражу потока управления, и экстендер должен быть готов к тому, что возврата из прерывания уже не будет, его код затрут и больше не вспомнят. А значит, там должен быть полноценный самодостаточный реальный режим.
Исходная версия firkax, :
Но инт21 то он вполне может под в86 гонять. И более того, в присутствии емм386 нет альтернативы - обязательно будет под в86 его гонять.
Да что ж такое то, сколько повторять? Нет нигде реалистичной спецификации на то, что может оказаться внутри int21. Начиная от разных несовместимых версий доса и заканчивая произвольными резидентными программами, безо всякой вежливости перехватывающими его и меняющими как угодно. Это чёрный ящик, лезть внутрь в автоматическом режиме чревато неожиданными проблемами. Да даже штатное: ну представь, юзер с помощью int21 читает файл, там получается ошибка диска, выводится abort/retry/fail, юзер жмёт abort, и всё - управление назад уже не возвращается, продолжается работа проги, из которой твой экстендер был запущен, а сам экстендер перетирается в памяти чем-то другим, но проц до сих пор в V86 режиме и в итоге всё крашится.