Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Работа для программиста > Фриланс
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2010, 05:56   #61
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

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.
Mikl___ вне форума Ответить с цитированием
Старый 16.12.2010, 16:48   #62
I-Gor
 
Регистрация: 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.
I-Gor вне форума Ответить с цитированием
Старый 17.12.2010, 05:02   #63
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Цитата:
Сообщение от I-Gor
Если в указанном тобою последнем фрагменте в команде mov dx, [bx] заменить [bx] на константу, то это совершенно не влияет на работу как программы, так и устройства. Опытным путем установил, что push и pop там не обязательны. Более того, и резидент, и железка успешно работают, даже если в качестве номера порта использовать совершенно идиотские значения. И работают не менее хорошо, если mov dx, [bx] вообще выкинуть из фрагмента a03. Следовательно, смысл этой инструкции такой же, как и and al, 27h абзацем выше.
Бред! Откуда устройство берет номер порта? Если ты помнишь, был угадано значение порта номера аналоговых каналов, но при этом релейные входы отключились, еще раньше когда в DX помещалась константа 320h твой АЦП вообще перестал работать. Или ты пишешь только об одном фрагменте (район метки а03), где происходит передача номера порта из памяти? Я писал о четырех таких фрагментах и просто накидал общую схему эксперимента
Mikl___ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Драйвер 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