|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.12.2010, 05:56 | #61 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
I-Gor
1)Списано из какого-то мануала "Адреса портов ВВОД/ВЫВОДА от 00FFh до 00FFh зарезервированы для использования INTEL. Цифровые сопроцессоры также постоянно хранятся в данном пространстве ВВОДА/ВЫВОДА в ячейках: 8000000F8h-800000FCh". (здесь явная ошибка так как чуть выше "пространство ВВОД/ВЫВОДА состоит из 64Кбайт." а 8000000F8h >> 65535) часть портов закреплена за устройствами исторически Диапазон адресов | Устройство 000h-01Fh Контроллер 1 ПДП 020h-03Fh Ведущий контроллер прерываний 040h-05Fh Таймер 040h Канал 0 (генерирует IRQ0) 041h Канал 1 (поддержка обновления памяти) 042h Канал 2 (управление динамиком) 043h Управляющий регистр первого таймера 044h-047h Второй таймер компьютеров с шиной Microchannel 048h-04Bh Второй таймер компьютеров с шиной EISA 060h-06Fh Контроллер клавиатуры 070h-07Fh Устройство часов реального времени, триггер маски NMI 080h Порт для записи контрольной точки диагностики. Также соответствует одному из регистров записи/чтения в регистре страниц ПДП. 081h-09Fh Регистр страниц ПДП 0A0h-0BFh Ведомый контроллер прерываний 0C0h-0DFh Контроллер 2 ПДП 0F0h Сброс занятости сопроцессора 0F1h Сброс сопроцессора 080h-09Fh Сопроцессор 100h-3FFh Адреса в этом диапазоне принадлежат устройствам канала ввода/вывода (дальше этот диапазон расписан конкретно по устройствам) 1F0h-1F8h Контроллер винчестера 200h-20Fh Игровой порт 220h-22Fh Sound Blaster 278h-27Fh Порт параллельного принтера 2 2F8h-2FFh Последовательный порт 2 378h-37Fh Порт параллельного принтера 1 3C0h-3DFh Порты графического адаптера 3F0h-3F7h Контроллер флоппи-дисковода 3F8h-3FFh Последовательный порт 1 Значит твой АЦП должен иметь номера портов, которые не попадают в выше перечисленный диапазон. адрес порта мы получаем из памяти (делаем поиск DX по исходнику драйвера) по косвенному обращению к содержимому в [BX] ;-------------------------------------------------- "В примерах применения КР580ВВ55А я нашел, что при подключении к ISA микросхема обычно использует 4 последовательных адреса портов (3 для доступа к портам ввода-вывода микросхемы и один - для регистра управляющего слова)." один из адресов портов равен 320h, скорее всего это адрес порта состояния (регистра управляющего слова), опытным путем нашли, что адрес порта номера аналоговых каналов равен 322h, остаются порты с номерами 321h и 323h ;--------------------------------------------------- mov bx, offset n2; n2 dw 320h . . . mov dx, [bx] ; DX = 320h xor ax, ax call proc_5 jmp short a05 ;----------------------------------------- push dx mov dx, [bx] call proc_5 ;---------------------------------------- mov dx, [bx] and al, 27h out dx, al or al, 8 out dx, al add bx, 20 jmp short a03 ;------------------------------------------------ a09: mov bx,offset n2;<--- mov si, offset n3 mov cx, count2 inc cx a10: dec cx jz short exit1 push cx mov cx,8;cl, 8 mov di, offset n4 mov dx, [bx] add dx, 2;эквивалентно mov dx,322h или mov dx,323h a11: mov al,cl; dec al ; out dx, al; in al, dx; xor al, 3; stosb loop a11 ;-------------------------------------------------------- 2) от тебя не было ответа, что происходит при удалении команды and al,27h из процедуры proc_5? 3) перед вызовом команд IN/OUT можно поэкспериментировать с содержимым DX, т.е. вместо ;--------------------------------------------- mov dx, [bx] xor ax, ax call proc_5 jmp short a05 ;---------------------------------------- написать ;---------------------------------------- mov dx, [bx] push dx; <-- сохраняем содержимое из DX в стек, вдруг оно используется дальше mov DX,320h;<-- не пойдет с 320h поставить 321h или 322h или 323h xor ax, ax; но добиться устойчивой работы call proc_5 pop dx; <-- восстанавливаем содержимое в DX jmp short a05 ;--------------------------------------- там где происходит обращение к портам попробуй использовать конкретное значение, но чтобы это не влияло на дальнейшую работу программы "экранируй" командами PUSH DX и POP DX Последний раз редактировалось Mikl___; 14.12.2010 в 06:09. |
16.12.2010, 16:48 | #62 |
Регистрация: 08.11.2010
Сообщений: 6
|
Прямым экспериментом подтверждаю, что удаление команды and al, 27h из proc_5 ни коим образом не влияет на логику работы устройства. Просто, ты до поры до времени об этом не спрашивал, а я без нужды не стал повторять сказанное тобою ввиду очевидности. Итак, смысл этой команды в данном случае такой же, как и инструкций NOP, которыми так богат оказался разбираемый резидент.
Если в указанном тобою последнем фрагменте в команде mov dx, [bx] заменить [bx] на константу, то это совершенно не влияет на работу как программы, так и устройства. Опытным путем установил, что push и pop там не обязательны. Более того, и резидент, и железка успешно работают, даже если в качестве номера порта использовать совершенно идиотские значения. И работают не менее хорошо, если mov dx, [bx] вообще выкинуть из фрагмента a03. Следовательно, смысл этой инструкции такой же, как и and al, 27h абзацем выше. Меня не покидает идея отдебажить «живого» резидента (в компании с железкой и проч.). Turbo Debugger’ом не получается. Я об этом уже говорил. Может, есть смысл использовать майкрософтовский debug, тот самый, который в стандартный комплект MS-DOS/Win9x/Me входит? К стыду своему признаю, что у меня совершенно нет с ним опыта работы. Нас только TD учили. Последний раз редактировалось I-Gor; 16.12.2010 в 17:43. |
17.12.2010, 05:02 | #63 | |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
Цитата:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Драйвер ISA устройства для DOS | I-Gor | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 6 | 12.11.2010 06:49 |
Драйвер для hp laserjet 1010 для windows 7 | Юзер7 | Общие вопросы C/C++ | 6 | 04.08.2010 09:17 |
драйвер мыши для C++3.0 for dos | masta777 | Общие вопросы C/C++ | 3 | 20.06.2009 17:31 |
Разработка драйвер USB-HID устройства | _dx | Win Api | 5 | 10.06.2009 18:34 |
Для кадого ли устройства есть свой контроллер? | Elm0 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 6 | 21.06.2007 20:42 |