Страница 1 из 2

Шина ISA, доступ из винды

Добавлено: Сб апр 14, 2012 20:36:19
TripleKill
Имеется комп с материнкой Chaintech 7AJA2. На последней есть ISA-слот.
Можно ли к нему обращаться напрямую, скажем из Delphi? Если да, то что для этого нужно, и где можно почитать об этом?
Нашёл книгу Блохнин С.М. - Шина ISA персонального компьютера IBM PC/AT, но там приведены технические подробности, а меня интересуют программные.
Может, кому-то доводилось делать приставки к компу по этой шине?
Спасибо.

Re: Шина ISA, доступ из винды

Добавлено: Сб апр 14, 2012 21:00:27
Flasher
Что значит "обращаться к слоту"? Это же шина, и она не имеет каких-либо ответных частей. Вешаться туда очень легко- лепишь дешифратор адреса и вуаля...

Re: Шина ISA, доступ из винды

Добавлено: Сб апр 14, 2012 21:24:12
Evgeny1
вот пример реализации
http://radiokot.ru/circuit/digital/pcmod/09/

Re: Шина ISA, доступ из винды

Добавлено: Сб апр 14, 2012 21:47:28
TripleKill
Evgeny1, спасибо за ссылку.

Может, я не совсем корректно выразился. Меня интересует именно программное обращение к ней.
Например, к LPT я могу обратиться по адресу $378. Это самое обращение можно легко описать с помощью asm-вставок в пресловутом delphi: mov al, $378; out al, dx - как-то так.
Дешифратор же адреса вроде как железка, или я вас неправильно понял?
Допустим, у меня есть плата из статьи, приведённой Evgeny1, которая вставлена в ISA. Как мне теперь получить на компе данные с этой платы?
Если допустим проводить аналогию с тем же LPT, я должен установить в регистрах AL, AH адрес, и считать с него данные?

Re: Шина ISA, доступ из винды

Добавлено: Сб апр 14, 2012 21:49:56
Flasher
да

Re: Шина ISA, доступ из винды

Добавлено: Сб апр 14, 2012 22:02:24
Леонид Иванович
TripleKill писал(а):Например, к LPT я могу обратиться по адресу $378. Это самое обращение можно легко описать с помощью asm-вставок в пресловутом delphi: mov al, $378; out al, dx - как-то так.


Это проходит под Win98, но не проходит под XP. Нужно или писать свой драйвер устройства, или использовать готовый универсальный драйвер, который открывает доступ к портам IO.

Приходилось делать много разных плат на ISA-шину, сначала на простой логике, потом на CPLD. В промышленных компьютерах эта шина используется по сей день.

Re: Шина ISA, доступ из винды

Добавлено: Сб апр 14, 2012 22:09:50
TripleKill
Flasher, спасибо, это и хотел услышать.

Леонид Иванович писал(а):универсальный драйвер


PortTalk прокатит? С программатором работает через COM. C дельфи тоже эту же прогу юзал, всё работало.

И ещё момент: а какой диапазон адресов я могу задавать? Т.е. я прочитал, что есть 24 линии адреса, но где у этого диапазона начало и конец? Опять же, обращаясь по адресу 378 я знаю, что попаду в LPT. А как тут?

P.S. В диспетчере устройств есть "Порт чтения данных ISAPNP". Там три диапазона ввода-вывода, 0А79-0А79, 0279-0279 и 0274-0277. Если, конечно, это что-нибудь значит. Система XP.

Re: Шина ISA, доступ из винды

Добавлено: Сб апр 14, 2012 22:25:27
Леонид Иванович
TripleKill писал(а):PortTalk прокатит?


По идее, покатит.

В адресном пространстве есть "дырки", не занятые стандартным оборудованием. По памяти все возможные адреса своих плат не скажу, нужно смотреть в книгах. Но обычно использовал что-то из диапазона 100Н - 16FH. Для того, чтобы можно было поставить сразу несколько плат, устанавливал dip-переключатель на некоторые линии адреса.

Re: Шина ISA, доступ из винды

Добавлено: Сб апр 14, 2012 22:31:53
TripleKill
Спасибо, буду изучать дальше)

Re: Шина ISA, доступ из винды

Добавлено: Вс апр 15, 2012 02:44:20
Tolmi
TripleKill писал(а):И ещё момент: а какой диапазон адресов я могу задавать? Т.е. я прочитал, что есть 24 линии адреса, но где у этого диапазона начало и конец? Опять же, обращаясь по адресу 378 я знаю, что попаду в LPT. А как тут?

В шине ISA изначально практиковалась неполная дешифрация портов ввода-вывода. Поэтому реально там используются три младших байта ( в смысле весь диапазон 0000-0FFF ) 24 разряда - это полная адресная шина памяти. Там полный диапазон 000000-FFFFFF (16 мегабайт), но реально только 00000-FFFFF, (первый мегабайт) а остальное - пляски с бубном.
P.S. В диспетчере устройств есть "Порт чтения данных ISAPNP". Там три диапазона ввода-вывода, 0А79-0А79, 0279-0279 и 0274-0277. Если, конечно, это что-нибудь значит. Система XP.

Это чуть не то. Чип на материнке, который делает гейт на шину ISA, кроме всего прочего, умеет отыскивать на шине ISA платы расширения, которые умеют PnP, и через эти порты можно считать конфигурацию имеющегося оборудования. Поскольку всё это было придумано под самый закат эры ISA, то практической пользы от этого особо никакой. Сетевые карточки 3COM, помню, хорошо умели PnP, да ещё кое-какие модемы. Но если знать отуда надо читать, то на все эти плаг-энд-плеи можно смело забить, оно и без них хорошо работает.

Re: Шина ISA, доступ из винды

Добавлено: Вс апр 15, 2012 08:58:11
astinis
Леонид Иванович писал(а):
TripleKill писал(а):PortTalk прокатит?


По идее, покатит.

В адресном пространстве есть "дырки", не занятые стандартным оборудованием. По памяти все возможные адреса своих плат не скажу, нужно смотреть в книгах. Но обычно использовал что-то из диапазона 100Н - 16FH. Для того, чтобы можно было поставить сразу несколько плат, устанавливал dip-переключатель на некоторые линии адреса.


Леонид Иванович, при всем уважении, хочу немного поправить на счет адресного пространства(в свое время тоже немало проектировал и делал железок на ISA), адреса 100Н - 16FH можно использовать, но очень осторожно. 100Н - 16FH работают без проблем на i88-286, а вот с i386 и выше начнутся проблемы(порты бывают заняты), сам с этим сталкивался.
Исходя из выше и ссылаясь на официальную документацию - лучше использовать адресное пространство с 300Н - конец не помню, но по 360Н можно.:)

P.S. Минимально, для работы с ISA нужны сигналы - AEN, IOR, IOW, D0-D7, A0-A13

Re: Шина ISA, доступ из винды

Добавлено: Вс апр 15, 2012 09:17:52
astinis
Tolmi писал(а):
TripleKill писал(а):И ещё момент: а какой диапазон адресов я могу задавать? Т.е. я прочитал, что есть 24 линии адреса, но где у этого диапазона начало и конец? Опять же, обращаясь по адресу 378 я знаю, что попаду в LPT. А как тут?

В шине ISA изначально практиковалась неполная дешифрация портов ввода-вывода. Поэтому реально там используются три младших байта ( в смысле весь диапазон 0000-0FFF ) 24 разряда - это полная адресная шина памяти. Там полный диапазон 000000-FFFFFF (16 мегабайт), но реально только 00000-FFFFF, (первый мегабайт) а остальное - пляски с бубном.

Чуть-чуть не так - реальный адрес вычисляется, насколько я помню Питера Абеля, путем сложения значений 2х регистров - CS(регистр сегмента кода) и IP, со смещением последнего на 4 бита вправо.
Что же касается портов, то напрямую можно обратится только (вот здесь у меня провал в памяти - уж очень давно это было) к определенному диапазону адресов, выше - только косвенная (через регистры) адресация.
По моему так - если не ошибаюсь:)

Re: Шина ISA, доступ из винды

Добавлено: Вс апр 15, 2012 10:19:57
astinis
TripleKill писал(а):
И ещё момент: а какой диапазон адресов я могу задавать? Т.е. я прочитал, что есть 24 линии адреса, но где у этого диапазона начало и конец? Опять же, обращаясь по адресу 378 я знаю, что попаду в LPT. А как тут?


В принципе ничего сложного с работой шины ISA нет. Правда предложенная http://radiokot.ru/circuit/digital/pcmod/09/ в качестве примера для осмысления не подойдет -у нее логика дешифрации в ПЛМке (черный ящик).
Вот эта схемка isa пост-кодов ближе к осмыслению -правда у нее один адрес дешифрации 80Н
Изображение
НО, если в ней заменить ЛЕ1 и Ла2 на ИД4/ИД7 + цифровой компаратор LS86 (нашего аналога не помню) получится полноценный дешифратор универсального контроллера на необходимое количество портов. Не забываем при этом, что шину данных между ISA и устройством нужно тоже развязать, установив что-то двунаправленное типа АП6 (LS245).

Re: Шина ISA, доступ из винды

Добавлено: Вс апр 15, 2012 10:27:30
Леонид Иванович
astinis писал(а):100Н - 16FH работают без проблем на i88-286, а вот с i386 и выше начнутся проблемы


Всё может быть. Но, по крайней мере, в книге "Руководство по архитектуре IBM PC AT" (помните, черная такая, большая, 949 страниц) диапазон 100Н - 16FH значится как "резерв". Лично я ни разу не сталкивался с занятостью этих портов, большинство плат работают по сей день именно в этой "дырке", причем не только на 386, но и на 486, а чаще всего на старых пентиумах. Производство "Интеграла" до сих пор берет ISA платы для автоматизации техпроцессов, в цехах стоят компьютеры с ISA.

astinis писал(а):Исходя из выше и ссылаясь на официальную документацию - лучше использовать адресное пространство с 300Н - конец не помню, но по 360Н можно.:)


Диапазон 300Н - 31FH значится как "prototype card", он свободен. А вот с 320H идет жесткий диск, потом может быть сетевая плата и прочее железо. Я еще использовал "дырку" 3E0 - 3EF, что между видеоадаптером и гибкими дисками. Программатор и эмулятор ПЗУ работали именно там, причем на всех доступных машинах.

astinis писал(а):цифровой компаратор LS86 (нашего аналога не помню)


Не LS86, а LS85, аналог - К555СП1.


В качестве примера присоединил схемы плат ISA на логике и на ПЛИС.

Re: Шина ISA, доступ из винды

Добавлено: Вс апр 15, 2012 10:35:35
astinis
Вот, нашел в качестве примера

Re: Шина ISA, доступ из винды

Добавлено: Вс апр 15, 2012 10:55:30
Мурик
TripleKill писал(а):[Это самое обращение можно легко описать с помощью asm-вставок в пресловутом delphi: mov al, $378; out al, dx - как-то так.
Под NT системой не прокатит.
Нужен драйвер, например такой как во вложении (он в месте с исходниками).

Re: Шина ISA, доступ из винды

Добавлено: Вс апр 15, 2012 10:57:16
astinis
Леонид Иванович писал(а):
astinis писал(а):100Н - 16FH работают без проблем на i88-286, а вот с i386 и выше начнутся проблемы


Всё может быть. Но, по крайней мере, в книге "Руководство по архитектуре IBM PC AT" (помните, черная такая, большая, 949 страниц) диапазон 100Н - 16FH значится как "резерв". Лично я ни разу не сталкивался с занятостью этих портов, большинство плат работают по сей день именно в этой "дырке", причем не только на 386, но и на 486, а чаще всего на старых пентиумах. Производство "Интеграла" до сих пор берет ISA платы для автоматизации техпроцессов, в цехах стоят компьютеры с ISA.

Я, когда читал ваш пост, тоже вспомнил об этой книге, именно ссылаясь на нее данные я делал для себя универсальный программатор на ISA шине и адресное пространство брал со 100Н. Все великолепно работало на 88/286, потом к нам пришли 386 и вот здесь начались проблемы. Переделал программатор на 300Н - проблемы ушли. Вот после этого я, в своих разработках использовал адресс начиная с 300Н.

Диапазон 300Н - 31FH значится как "prototype card", он свободен. А вот с 320H идет жесткий диск, потом может быть сетевая плата и прочее железо. Я еще использовал "дырку" 3E0 - 3EF, что между видеоадаптером и гибкими дисками. Программатор и эмулятор ПЗУ работали именно там, причем на всех доступных машинах.

Совершенно верно.

Не LS86, а LS85, аналог - К555СП1.


Точно.
Прошло каких то 20 лет, но как же давно это было.:)

Re: Шина ISA, доступ из винды

Добавлено: Вс апр 15, 2012 14:30:35
TripleKill
Всем большое спасибо, информация действительно очень полезная.
Имеет ли какое-то значение то, что шина в компе 16-битная, длинная? Она совместима с 8-битной?

Re: Шина ISA, доступ из винды

Добавлено: Вс апр 15, 2012 14:32:53
Леонид Иванович
Хотите, используйте 8 бит, хотите - 16.

Re: Шина ISA, доступ из винды

Добавлено: Вс апр 15, 2012 18:11:55
Tolmi
astinis писал(а):
Tolmi писал(а):В шине ISA изначально практиковалась неполная дешифрация портов ввода-вывода. Поэтому реально там используются три младших байта ( в смысле весь диапазон 0000-0FFF ) 24 разряда - это полная адресная шина памяти. Там полный диапазон 000000-FFFFFF (16 мегабайт), но реально только 00000-FFFFF, (первый мегабайт) а остальное - пляски с бубном.

Чуть-чуть не так - реальный адрес вычисляется, насколько я помню Питера Абеля, путем сложения значений 2х регистров - CS(регистр сегмента кода) и IP, со смещением последнего на 4 бита вправо.

Это в точки зрения работы процессора. С точки зрения шины изначальная 8-битная версия ISA поддерживала только 20 разрядов адресной шины, а потому адресоваться там может только первый мегабайт адресного пространства памяти. в 16-ти битной версии ISA добавили ещё 4 адресных ноги и чуть перемудрили с управлением. В целях обеспечения совместимости между 8-ми и 16-ти битными картами работа с последними была упрощена, поэтому я и написал, что полный 16-мегабайтный доступ к адресному пространству делается ... не совсем уж элементарно. Но ещё раз, это касается прямого отображения в адресное пространство памяти. Адресация портов ввода-вывода в интеловской архитектуре реализована отдельно и теоретически для 8088/8086/80286 16-ти битная. На практике из-за неполного адресного декодирования зачастую даже это невозможно, и в мостах в ISA реализуют только диапазон 0000-03FF. В принципе, любой незанятый в данном компе диапазон можно смело занимать под свои нужды, вопрос лишь в соместимости такого решения. Собственно именно с вопросов совместимости плат расширения между собой зародился стандарт Plug-N-Play, а потом и шина PCI.