Консультация № 181264
12.12.2010, 23:10
54.50 руб.
0 9 1
Здравствуйте, уважаемые эксперты! Прошу Вас ответить на следующий вопрос:
Имеется программный эмулятор устройства ввода-вывода NTVDM.
Необходимо с произвольного адреса, с опросом флага готовности, записать в устройство блок данных.
Среда выполнения: DOS 6.22 или выше
TASM 5.0
Модель памяти SMALL

Обсуждение

давно
Посетитель
7438
7205
13.12.2010, 00:35
общий
Сразу куча вопросов:
1) Что представляет собой указанный Вами программный эмулятор устройства ввода-вывода NTVDM?
2) Произвольный адрес - это что: память, номер порта?
3) Флаг готовности - опять же, где он находится? В памяти, в порту?
4) Что за устройство, какой блок данных надо писать?
И было бы неплохо предоставить какую-нибудь дополнительную информацию о данном эмуляторе.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
13.12.2010, 01:01
общий
1. Не могу объяснить, могу скинуть только сам этот эмулятор.
В общем то все остальное станет ясно, если вы увидите сам эмулятор.
Неизвестный
13.12.2010, 01:22
общий
Эмулятор представляет собой драйвер виртуального устройства и приложение,
обеспечивающее внешний интерфейс пользователя. Драйвер принимает запросы на
чтение/запись портов от NTVDM в диапазоне адресов от 0300h до 030Fh и размещает их в
области разделяемой памяти. Кроме того, драйвер способен инициировать эмуляцию
модулем NTVDM аппаратного прерывания IRQ7.
Приложение постоянно просматривает область разделяемой памяти и обрабатывает
запросы на чтение/запись портов в соответствие с логикой функционирования устройства.
Таким образом, для приложения MS-DOS эмулятор является полным аналогом
реально устройства, нет никакого отличия в его поведении и способах взаимодействия с
ним.
Эмулируется работа устройства хранения емкостью 265 байт, поддерживающего
обмен в режимах по флагу готовности, по прерыванию (IRQ7), цепочечными командами,
прямым доступом памяти (используя эмулируемый NTVDM стандартный котроллер
ПДП). Устройство представляется набором четырех регистров.

есть описание назначений регистров устройства
давно
Посетитель
7438
7205
13.12.2010, 03:00
общий
Давайте эмулятор и все, что есть.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
13.12.2010, 11:03
общий
Адресаты:

в архиве в прикрепленных файлах.
Прикрепленные файлы:
8894cb9290996a8e81c2eeed453271fc.rar
давно
Посетитель
7438
7205
13.12.2010, 16:33
общий
это ответ
Здравствуйте, katbka!
Что-то типа такого?
Код:
.MODEL SMALL
.386
.STACK 200h
.DATA
block db 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

.CODE
ENTRY_POINT:
mov ax, @DATA
mov ds, ax

mov DX, 0302h ;регистр управления
mov AL, 00001001h ;разрешаем устройство и включаем автоинкримент при записи
out DX, AL
call WAIT ;ожидаем готовность устройства

mov DX, 0301h ;регистр адреса
mov AL, 10h ;будем писать с адреса 10h
out DX, AL
call WAIT ;ожидаем готовность устройства

lea si, block ;адрес передаваемого блока
mov cx, 10h ;количество
mov DX, 0300h ;регистр данных
copy_loop:
lodsb ;читаем очередной
out DX, AL
call WAIT ;ожидаем готовность
loop copy_loop ;по всем

mov AX, 4C00h
int 21h

;Wait while device busy - bit F
WAIT: mov DX, 303h ;регистр состояния
WAIT_LOOP: in AL, DX
test AL, 01h ;ждем 1
jz WAIT_LOOP
ret

END ENTRY_POINT

Мда, забавный эмулятор. Чего только не придумают, чтобы замутить голову студентам
5
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
13.12.2010, 20:54
общий
Адресаты:
эмулятор почему-то вылетает при попытке запуска...
давно
Посетитель
7438
7205
13.12.2010, 21:05
общий
Ну уж не знаю... С этим вопросом Вам надо, пожалуй, обратиться до преподавателя...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
13.12.2010, 21:13
общий
Адресаты:
спасибо вам за помощь)
Форма ответа