|
8 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 32
|
||||||
Резидент14.03.2013, 23:09. Показов 3621. Ответов 9
Метки нет (Все метки)
Сейчас разбираюсь с резидентом, вот код
Запускаю все под dosbox. Спасибо за любую помощь!
0
|
||||||
| 14.03.2013, 23:09 | |
|
Ответы с готовыми решениями:
9
Резидент глючит Резидент. Борьба с мусором Резидент не создает файл |
|
Клюг
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
|
|||||||||||
| 14.03.2013, 23:18 | |||||||||||
|
Перед стр.19 вставить
1
|
|||||||||||
|
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
|
|
| 14.03.2013, 23:35 | |
|
Нельзя из обработчика аппаратного прерывания вызывать INT 21h.
Ибо такое прерывание может произойти в момент когда INT 21h уже исполняется. В обработчике аппаратного прерывания 9 ты вызовешь снова INT 21h, этот вызов изменит контекст MS-DOS, ты из обработчика прерывания 9 выйдешь и вернешься в прерванное INT 21h, это прерванное INT 21h продолжит свое исполнение, но уже С ИСПОРЧЕННЫМ КОНТЕКСТОМ. И наступит крах MS-DOS. Вот это свойство INT 21h, заключающееся в том, что INT 21h нельзя прерывать и тут-же повторно в него входить называется нереентерабельностью (нереентрантностью). Так вот, как уже выше сказали, обработчик INT 21h не реентерабелен. Поэтому, если тебе нужно в резидентной программе вызывать INT 21h, то используется совсем другая техника. Только о ней надо отдельно написать. Но в данном случае, если тебе надо в обработчике прерывания 9 лишь строку на экран вывести, то вали данные прямо в видеопамять и все дела.
1
|
|
|
8 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 32
|
||||
| 14.03.2013, 23:40 [ТС] | ||||
Добавлено через 4 минуты
0
|
||||
|
Клюг
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
|
|
| 14.03.2013, 23:45 | |
|
Клава перехватывается по int 15h/ah=4Fh, на экран выводится по int 29h.
1
|
|
|
8 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 32
|
||
| 14.03.2013, 23:45 [ТС] | ||
0
|
||
|
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
|
|
| 15.03.2013, 00:37 | |
|
Добавлено через 45 минут
Техника обхода нереентерабельности INT 21h 1.) Подготовка. Перед перехватом прерываний вызываешь недокументированную функцию AH=34h INT 21h. В ES:BX она возвратит указатель на байт. Этот байт есть флаг занятости DOS. Если он не ноль - MS-DOS занята. Если ноль - свободна. Указатель на этот флаг сохраняешь в своей резидентной программе. 2.) Перехват прерываний. Кроме нужного тебе аппаратного прерывания (в твоем случае 9-го) также перехватываешь еще 8-е прерывание от таймера (будет вызываться 18.2 раза в секунду) и 28h-е прерывание от MS-DOS. В твоем случае 28h прерывание не понадобится, но для общности я и о нем напишу. Также вместо 8-го прерывания можно перехватить прерывание 1Ch. Оно тоже вызывается 18.2 раза в секунду. Использование что 8-го, что 1Ch-го прерывания одинаково. 3.) Отлов событий. Когда внутри обработчика аппаратного прерывания (в твоем случае 9-го) будет обнаружено событие, по которому твоей резидентной программе нужно поработать с INT 21h, то ты к MS-DOS не обращаешься, а вместо этого выставляешь в своей резидентной программе некий флажок. Этот флажок будет иметь смысл признака стоящей прямо сейчас задачи поработать с MS-DOS. И пока этот флажок не сброшен обработчик перехваченного тобой аппаратного прерывания не должен больше делать ничего. Только тупо передавать управление дальше по цепочке обработчиков прерывания. До тех пор пока флажок не будет сброшен в другом месте. Т.е. упомянутый флажок также будет являться СЕМАФОРОМ, перекрывающим проход по одной из "железнодорожных веток" твоего обработчика прерывания до тех пор пока не будет опущен. 4.) Реакция на семафор в обработчике INT 28h. MS-DOS систематически вызывает INT 28h из функций AH<=0Ch INT 21h и пока стоит в простое при ожидании нажатия клавиши на клавиатуре. А значит из обработчика INT 28h можно безопасно вызывать функции AH>0Ch INT 21h. Если твоя задача по работе с MS-DOS при возникновении события состоит только из таких функций, то делаешь так : если внутри обработчика INT 28h обнаруживаешь, что семафор выставлен, то проделываешь работу с MS-DOS и после этого семафор сбрасываешь. 5.) Реакция на семафор в обработчике INT 8 (или INT 1Ch). Делаешь так : если внутри обработчика INT 8/1Ch обнаруживаешь, что семафор выставлен, то проверяешь по сохраненному указателю флажок занятости MS-DOS. Если MS-DOS свободна, то проделываешь работу с MS-DOS и после этого семафор сбрасываешь. В общем, у тебя должны быть два или три обработчика прерываний и каждый из них должен передавать управление дальше по цепочке обработчиков прерывания. Т.е. тихо, мирно висеть и никому не мешать. Но иметь содержательную функцию : - Обработчик аппаратного прерывания должен, если семафор сброшен, проверить на наступление события (в твоем случае нажатие F12) и если событие наступило, то семафор выставить - Обработчик INT 28h должен, если семафор выставлен, исполнить работу с MS-DOS (применяя только функции AH>0Ch INT 21h) требуемую по наступлению события и семафор сбросить - Обработчик прерывания от таймера (INT 8 или INT 1Ch) должен, если семафор выставлен и MS-DOS свободна, исполнить работу с MS-DOS требуемую по наступлению события и семафор сбросить
1
|
|
|
Клюг
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
|
||||
| 15.03.2013, 00:51 | ||||
0
|
||||
|
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
|
||
| 15.03.2013, 01:06 | ||
|
по цепочке обработчиков, т.е. сам не должен делать ничего с контроллером прерываний. Передавать управление дальше через абсолютный дальний переход по прерыдущему вектору прерывания, если нужно уточнение. Я писал не про обработчики прерываний 8 и 1Ch вообще, а про обработчики прерываний при описываемой мною технике обхода нереентерабельности.
0
|
||
|
8 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 32
|
|
| 15.03.2013, 02:02 [ТС] | |
|
Charles Kludge, Ethereal, громадное спасибо, я намного лучше стал продвигаться в написании программы
0
|
|
| 15.03.2013, 02:02 | |
|
Помогаю со студенческими работами здесь
10
Резидент (приведение к верх. регистру) Резидент, запрещающий доступ к файлу
Резидент, который блокирует веб сайты Не работает простой резидент ни в Win98 ни в Win7 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|