Soviet Union ZX Spectrum CommunityВторник, 25.04.2017, 07:41
Вы вошли как Гость | Группа "Гости" | RSS
 [ · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Soviet Union ZX Spectrum Community » ZX-строительство » Концепции » Концепция “теневых” портов для устройств расширения ZX
Концепция “теневых” портов для устройств расширения ZX
HazarДата: Понедельник, 13.07.2015, 00:23 | Сообщение # 1
80h
Группа: Пользователи
Сообщений: 227
Статус: Offline
“теневое устройство” в общем смысле представляет из себя устройство которое может
Получать доступ к аппаратным ресурсам без явного вызова (нестандартного обращения) программы (драйвера) обеспечивающей дополнительные функции системы.
Доступ к ресурсам осуществляется после проверки некоторого “особого” условия. Это может быть например перехват управления с помощью специального порта или даже комбинация нажатий условных клавиш . Подключение теневого устройства производится на ограниченный промежуток времени, только на время работы теневого устройства.

Одним из ярких примеров использования этой идеи это дисковый интерфейс -
Beta Disc Interface (BDI 6/7) . Как наверное все помнят для активации интерфейса использовалась на первый взгляд странная команда randomize usr 15616 , известно что адрес 15616 (как и 15619) входит в область размещения символов стандартного знакогенератора ZX Spectrum. Программный переход в эту область является бессмысленным и обычно не используется в программах, если конечно мы специально не пишем программу для TR-DOS.

в BDI используется довольно большое количество служебных портов
(#1F #3F #5F #7F #FF) все порты пересекаются со стандартными портами и тем не менее на работе системы в целом при грамотном Подключении интерфейса это никак не отражается.

При активации интерфейса производится подключение собственного ПЗУ что тоже не маловажно так как дает возможность программировать совершенно сторонний девайс не думая при этом об экономии памяти ведь теневое устройство не занимает ресурсы
основной системы и может содержать в своем составе не только память, но и другие
собственные аппаратные ресурсы .
Что мне также нравится в этом подходе что можно добавить в стандартную систему
Довольно сложное новое устройство с минимальным вмешательством и без переделок
стандартной схемы.

Давайте теперь рассмотрим гипотетическую ситуацию когда вдруг захотелось
Сделать новую чудо-звуковую карточку, для сгущения красок я добавлю что надо подключить 4 музыкальных сопроцессора (AY-3-8910) естественно это автоматом
Устанавливает дополнительные условия в частности потребуется 6 портов для
программирования дополнительных трех AY8910. Вот это как раз тот случай
Когда теневые порты должны существенно облегчить разработку и подключение новых устройств.

Но а поскольку тема посвящена подключению новой периферии с использованием теневых портов постараемся разобраться как это сделать с минимальным вмешательством в оригинальную Схемотехнику ZX Spectrum.
Для начала придется немного вспомнить как процессор осуществляет операцию записи чтения в портовые устройства см рис.
Прикрепления: 5210649.jpg(227Kb)


Spectrum жив в нашей душе навсегда
 
HazarДата: Понедельник, 13.07.2015, 00:25 | Сообщение # 2
80h
Группа: Пользователи
Сообщений: 227
Статус: Offline
Из диаграммы видно что цикл записи либо чтения производится за 4 рабочих такта
Процессора (это 4 периода тактового сигнала процессора 3,5 МГц ).В течение этих 4
тактов активизируется сигнал IORQ который и используется для дешифрации портов различных устройств. Из анализа диаграммы можно приблизительно установить длительность сигнала IORQ у меня получилось ~678 nS (при тактовой частоте 3,5 мГц).
Я также провел небольшое собственное исследование и снял осциллограммы сигнала
IORQ с реального процессора, результаты получились близкие к значениями из пересчитанных данных приведенных в документации от производителя.

Добавлено (13.07.2015, 00:25)
---------------------------------------------
Следует только различать что существует 2 разных цикла “IORQ “ помимо обычного когда сигнал M1 установлен в “1” есть также цикл когда Совместно с IORQ активизируется сигнал M1 – что свидетельствует о выполнении Процессором машинного цикла загрузки кода команды (код операции считывается с шины данных во время обработки прерывания INT). Поэтому для того чтобы теневые порты правильно определялись при дешифрации портов требуется использовать сигнал M1 совместно с IORQ .

Так как сигнал IORQ в основном цикле ввода вывода длится почти 2,5 такта
у нас есть в запасе время для предварительных операций, это время можно использовать для предварительной дешифрации Теневых портов (на диаграмме эта область выделена серым цветом) . А также если необходимо можно сформировать и другие “особые”
условия для активации теневых устройств (например дешифровать какой-нибудь
условный адрес (15616) или диапазон адресов как сделано в BDI).
В связи тем что новых теневых портов как и условий их дешифрации может быть множество, удобно для этих целей завести отдельное устройство
(“арбитр теневых портов”) которое будет заниматься детектированием только теневых портов ( стандартные порты при этом не трогаем). После того как теневой порт
прошел проверку и перешел в активное сост, арбитром проводится пере-коммутация сигнала IORQ непосредственно на устройство которое используется в текущей программе. Другими словами для каждого устройства заводится индивидуальный IORQ
(ARB_IORQ1. ARB_IORQ2. ARB_IORQ3. ARB_IORQ4 ) И далее окончательный
выбор порта и считывание данных производится в самом устройстве в обычном порядке работы (Это время соответствует зеленой и желтой области выделено на диаграмме) .
В случае если не один из теневых портов не используется в текущем цикле ввода вывода,
То исходный сигнал IORQ без изменений (кроме небольшой задержки 10 …20 NS) поступает как обычно на стандартные устройства.

Прикрепления: 9476080.gif(30Kb)


Spectrum жив в нашей душе навсегда
 
HazarДата: Понедельник, 13.07.2015, 00:49 | Сообщение # 3
80h
Группа: Пользователи
Сообщений: 227
Статус: Offline
Прикрепления: 1634648.gif(27Kb)


Spectrum жив в нашей душе навсегда
 
Black_CatДата: Понедельник, 13.07.2015, 19:19 | Сообщение # 4
Координатор
Группа: Координаторы
Сообщений: 511
Статус: Offline
Цитата Hazar ()
надо подключить 4 музыкальных сопроцессора (AY-3-8910)

Они бы подключались по той же системе, что и второй в TurboSound.

А вообще, теневые порты это только допустимое зло, когда необходимо подключить к Спеку что-то чужеродное без переписывания его софта. Чем их меньше - тем лучше. Поэтому я и объединил теневые режимы BDI и глюкочасов в один, активный по сигналу IODOS/, да и на шине NenoBus свободных пинов нет.


"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!".
"Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
Гарри Трумэн
 
HazarДата: Вторник, 14.07.2015, 06:35 | Сообщение # 5
80h
Группа: Пользователи
Сообщений: 227
Статус: Offline
Цитата Black_Cat ()
Они бы подключались по той же системе, что и второй в TurboSound.


Насколько я понимаю только 2 сопроцессора будут работать, а остальным надо индивидуально порты заводить
не будут же они одно и тоже проигрывать.

Цитата Black_Cat ()
А вообще, теневые порты это только допустимое зло, когда необходимо подключить к Спеку что-то чужеродное без переписывания его софта


Если "зло" никто не замечает и делает полезное дело разве можно это называть злом, С моей точки зрения BDI это наверно единственный здравый пример как надо
делать периферию для Speccy (Сравните работу BDI с DIVide ) Вот какая необходимость была NMI использовать ?

NMI menu appears after pressing NMI key on divIDE. Drives C and D will initiate after first
reseting. After seek-reseting (SPACE+reset) it can be set device fd0 to the drive A and device
fd1 to the drive B (even if didnt exist). Settins of all drives can be changed. For example:
drive A = virtual disc, drive B = device fd0 (formerly drive A), or drive A = device fd0,
drive B = virtual disc, drive C = device fd0, or anyhow else. Return of the heads of the
disk drives are done after the return of NMI menu, and then are set same parameters for
the virtual discs (94 tracks).

Цитата Black_Cat ()
Поэтому я и объединил теневые режимы BDI и глюкочасов в один, активный по сигналу IODOS/, да и


Ну вот и правильно это все в одну карту можно собрать, выделяем ей диапазон адресов и работаем без ноу проблем

Цитата Black_Cat ()
на шине NenoBus свободных пинов нет


Новых пинов и не понадобится а "ARB_IORQ" это все тот --же IORQ

Добавлено (14.07.2015, 06:35)
---------------------------------------------

Цитата Black_Cat ()
IODOS/


кое в чем пересекаются идеи?

2) На Фениксе интегрирована мультикарта Caro ZXMC-2, но с небольшими отличиями от оригинала. Одним из отличий является поддержка мультикартой джойстика (точнее стандартного геймпада), что на программировании никак не сказывается, т.к. видится он как обычный Kempston.
Вторым отличием мультикарты на Фениксе является расширенные возможности управления теневыми портами через D7 #EFF7 - сигнал IODOS. Здесь D7 #EFF7 выполняет роль включателя абсолютно всех теневых портов, а не только Gluk RTC (для тех, кто не знал - Gluk RTC использует собственные теневые порты, активируемые D7 #EFF7). В Фениксе же включение всех теневыех портов - и TR-DOS и Gluk RTC - объединено вместе. Функционально это сопоставимо с включением теневых портов в Профи и Кворуме при работе с ними в CP/M. При таком включении ПЗУ TR-DOS не активируется и можно работать с теневыми портами прямо из ПЗУ Спектрума. Вот краткое описание логики работы:

Цитата:

D7 #EFF7 - IODOS: 0-off, 1-on - D7=1 - открывает доступ ко всем портам доступным в режиме DOS, а так же портам Gluk RTC, при этом ПЗУ TR-DOS не активируется, кроме того вырабатывает инверсный сигнал IODOS/, подаваемый на линию B20 шины NemoBus v.1.1, предназначенный для активации DOS портов внешних устройств. По сбросу устанавливается в ноль.


Такое использование D7 #EFF7 является программно-прозрачным и совместимым сверху вниз со всеми клонами, не создаёт для них никаких проблем, и может сразу включаться в алгоритмы программ, дабы они работали везде.
Т.е. программы использующие эту фунцию будут корректно и прозрачно выполняться и на других клонах! А потому предлагается при написании программ сразу учитывать эту расширенную возможность Феникса, и включать её в драйвера всех клонов - им от этого хуже не будет, но программа при этом станет универсальной, и будет работать так же и на Фениксе!
Учитывать это необходимо в программах работающих одновременно с TR-DOS и Gluk RTC (т.е. с глюкочасами), а так же с устройствами, пересекающимися по портам в теневом и обычном режиме, например Kempston Joystick, который нельзя будет опрашивать при открытых постоянно теневых портах, а надо будет закрывать их на время опроса.

P.S. В заключение хочу сказать, что внедрённое в Фениксе новшество по открытию теневых портов - очень нужное и удачное решение, открывающее новые возможности работы не только с ВГ93, но и со SMUC. И особенно это новшество будет полезно при портировании CP/M, т.к. позволяет избавиться от доступа к флопу через открытие ПЗУ TR-DOS.
Поэтому рекомендую доработтать таким образом и другие компьютеры - это очень облегчит вам жизнь при работе с теневыми портами!


Spectrum жив в нашей душе навсегда
 
Black_CatДата: Вторник, 14.07.2015, 09:34 | Сообщение # 6
Координатор
Группа: Координаторы
Сообщений: 511
Статус: Offline
Цитата Hazar ()
Насколько я понимаю только 2 сопроцессора будут работать, а остальным надо индивидуально порты заводить
не будут же они одно и тоже проигрывать.


Не, там реализована схема перебора AY для программирования по стандартным адресам. Сейчас там выбирается из 2х AY, но с таким же успехом их может быть больше, просто больше не надо. Т.е. фактически это схема косвенной адресации, когда сначала по порту адреса задаётся номер AY, а потом адрес его внутреннего регистра.

Цитата Hazar ()
С моей точки зрения BDI это наверно единственный здравый пример как надо
делать периферию для Speccy


С BDI там другие причины - он разрабатывался изначально не под Спектрум. Аналогтчная ситуация с конфигом PentEvoдля девборды ZXEvo - там NedoPC скрещивали ATM с Пентагоном, и часть портов пересекалась, не говоря уже, что и в Пенте и в ATM уже были свои теневые порты. В результате там щаз адъ - пять!! всевозможных способов включения теневого режима. А если они захотят ещё кусок от какого компа прикрутить, имеющий пересекающиеся порты? smile

Цитата Hazar ()
(Сравните работу BDI с DIVide ) Вот какая необходимость была NMI использовать ?


smile NMI/ там не для того, чтоб теневые порты открывать smile . NMI там для аппаратного переключения задач, фактически для обеспечения двухзадачного режима - режима ядра, в котором с диска в память грузится программа, и режима Спектрума, в котором эта программа запускается.


"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!".
"Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
Гарри Трумэн
 
HazarДата: Вторник, 14.07.2015, 18:25 | Сообщение # 7
80h
Группа: Пользователи
Сообщений: 227
Статус: Offline
Цитата Black_Cat ()
Не, там реализована схема перебора AY для программирования по стандартным адресам. Сейчас там выбирается из 2х AY, но с таким же успехом их может быть больше, просто больше не надо. Т.е. фактически это схема косвенной адресации, когда сначала по порту адреса задаётся номер AY, а потом адрес его внутреннего регистра.


А вы не думали почему так сделали не из-за того ли что тяжело новые порты в систему вводить.
Мне думается с этой косвенной адресацией не очень то удобно программировать даже 2 сопроцессора
а Если еще COVOX добавить к списку "Темных желаний" то наверно будет перебор wacko

Цитата Black_Cat ()
пять!! всевозможных способов включения теневого режима. А если они захотят ещё кусок от какого компа прикрутить, имеющий пересекающиеся порты? smile


Это все из-з жадности Вот для этого арбитр теневых портов и нужен, раз у всех такая мания началась (скрещивать одно с другим ) хотя я понимаю что это нехорошо

Цитата Black_Cat ()
smile NMI/ там не для того, чтоб теневые порты открывать smile . NMI там для аппаратного переключения задач, фактически для обеспечения двухзадачного режима - режима ядра, в котором с диска в память грузится программа, и режима Спектрума, в котором эта программа запускается.


А почему обязательно переключение делать по NMI. (Это же аппаратное прерывание которое для целей отладки по идеи надо применять.)

BDI тоже-самое делает . Сначала грузим с диска потом запускаем программу , TR-DOS отключается после загрузки и увсе работает

Добавлено (14.07.2015, 18:25)
---------------------------------------------
Вот еще хотел поинтересоваться
Имеем допустим такую ситуацию есть у пользователя системная плата
Но на ней только один свободный слот и также есть в наличии 2 карты для накопителей
(BDI + NEMO IDE + часики) и вторая это divIDE что выбрать .


Spectrum жив в нашей душе навсегда
 
Black_CatДата: Вторник, 14.07.2015, 18:36 | Сообщение # 8
Координатор
Группа: Координаторы
Сообщений: 511
Статус: Offline
Цитата Hazar ()
А вы не думали почему так сделали не из-за того ли что тяжело новые порты в систему вводить.


Нет, порты найти не тяжело, более того, изначально была схема где AYки были на разных портах, но она не прижилась. Гораздо проще оказалось юзать старые процедуры обращения к AY, добавив подпрограмму смены самих AY.

Цитата Hazar ()
Мне думается с этой косвенной адресацией не очень то удобно программировать даже 2 сопроцессора
а Если еще COVOX добавить к списку "Темных желаний" то наверно будет перебор


smile Ковокс добавлять - перебор, но не потому, что трудно, а потому, что никому не нужно smile . У ковокса уже есть стандартный порт, и переделывать софт под какой-то левый порт никто не будет.

Цитата Hazar ()
А почему обязательно переключение делать по NMI. (Это же аппаратное прерывание которое для целей отладки по идеи надо применять.)


Нет, NMI можно применять для чего угодно smile Переключение по NMI сделано потому, что это безусловное прерывание, и для аппаратного переключения задач оно подходит идеально smile

Цитата Hazar ()
BDI тоже-самое делает . Сначала грузим с диска потом запускаем программу , TR-DOS отключается после загрузки и увсе работает


Не то же самое, если бы было то же самое, то в BDI не заводили бы кнопку MAGIK, по которой генерится NMI smile


"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!".
"Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
Гарри Трумэн
 
HazarДата: Среда, 15.07.2015, 09:22 | Сообщение # 9
80h
Группа: Пользователи
Сообщений: 227
Статус: Offline
Цитата Black_Cat ()

smile Ковокс добавлять - перебор, но не потому, что трудно, а потому, что никому не нужно smile . У ковокса уже есть стандартный порт, и переделывать софт под какой-то левый порт никто не будет.


Значит с музыкальными картами все нормально и развивать это направление (FM синтез никому особо не нужно) и проблем с портами не
предвидится. Хотя я знаю что были еще какие то желания насчет MIDI но особой поддержки направление не получило ?

Добавлено (15.07.2015, 09:22)
---------------------------------------------
Конечно не надо переделывать просто на разных машинах использовались разные порты

нашел в своей свалке архиве (вопрос чисто теоретический)
И почему то все проблемы должны решать юзе…….и STEREO PROFI COVOX (порт #3F, #5F)
одноканальный COVOX - порт #FB , COVOX LPRINT порт #7B
DD - порт Covox на компьютере Scorpion?

предлагаю их все назначить на звуковую карту, COVOX почти никто не использует ущерб
Только “теневой” все порты становятся теневыми, а так как ковокса на карте нет то будет
Резерв может для миди сгодится или для декодеров MP3.

При определении портов ковокса проводится проверка на разрядность порта (8bit 16bit) формируется отдельный IORQ только для звуковой платы.


Spectrum жив в нашей душе навсегда
 
Black_CatДата: Пятница, 17.07.2015, 13:47 | Сообщение # 10
Координатор
Группа: Координаторы
Сообщений: 511
Статус: Offline
Цитата Hazar ()
Значит с музыкальными картами все нормально и развивать это направление (FM синтез никому особо не нужно) и проблем с портами не
предвидится. Хотя я знаю что были еще какие то желания насчет MIDI но особой поддержки направление не получило ?


Ковокс никаким боком к FM-синтезу не относится, и проблем с портами особо нет.

Цитата Hazar ()
нашел в своей свалке архиве (вопрос чисто теоретический)
И почему то все проблемы должны решать юзе…….и STEREO PROFI COVOX (порт #3F, #5F)
одноканальный COVOX - порт #FB , COVOX LPRINT порт #7B
DD - порт Covox на компьютере Scorpion?


Ковокс на Спектруме - это #FB, остальное от глупости и убогости.

Цитата Hazar ()
предлагаю их все назначить на звуковую карту


..ага, уже на SounDrive назначили smile


"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!".
"Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
Гарри Трумэн
 
HazarДата: Суббота, 18.07.2015, 08:57 | Сообщение # 11
80h
Группа: Пользователи
Сообщений: 227
Статус: Offline
Цитата Black_Cat ()
отличием мультикарты на Фениксе является расширенные возможности управления теневыми портами через D7 #EFF7 - сигнал IODOS. Здесь D7 #EFF7 выполняет роль включателя абсолютно всех теневых портов,:


Порт для управления теневыми портами- (по моему это роскошь)
теневые порты могут работать в автоматическом режиме . По необходимости активируется сами в зависимости от текущих выполняемых программ (драйверов).

Добавлено (17.07.2015, 19:34)
---------------------------------------------
Цитата Black_Cat ()
Kempston Joystick, который нельзя будет опрашивать при открытых постоянно теневых портах, а надо будет закрывать их на время опроса


И эта проблема решается автоматом

Добавлено (18.07.2015, 08:57)
---------------------------------------------

Цитата Black_Cat ()
Ковокс никаким боком к FM-синтезу не относится, и проблем с портами особо нет.


Ну да согласен разные вещи / хотелось чтобы все на одной карте было, разные методы синтеза а если COVOX не нужен то его порт(ы)
пригодятся

Цитата Black_Cat ()
ага, уже на SounDrive назначили

SounDrive о сейчас такую карточку не найти . да и не нужно особо , сейчас OPL4 руль последнее жел........ в темных планах
А так низя сделать 2 * AY3-8910 + OPL4 YAMAHA wacko
Прикрепления: 4205955.gif(15Kb)


Spectrum жив в нашей душе навсегда

Сообщение отредактировал Hazar - Суббота, 18.07.2015, 03:36
 
Black_CatДата: Суббота, 18.07.2015, 18:40 | Сообщение # 12
Координатор
Группа: Координаторы
Сообщений: 511
Статус: Offline
Цитата Hazar ()
Порт для управления теневыми портами- (по моему это роскошь)

Он уже был в Глюке, поэтому он дармовой.

Цитата Hazar ()
И эта проблема решается автоматом


Это не проблема, это фича, не надо её "решать" на шине нет места лишним сигналам, там всё уже занято.

Цитата Hazar ()
А так низя сделать 2 * AY3-8910 + OPL4 YAMAHA


Поставь вместе TurboSound и MoonSound.


"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!".
"Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
Гарри Трумэн
 
Soviet Union ZX Spectrum Community » ZX-строительство » Концепции » Концепция “теневых” портов для устройств расширения ZX
Страница 1 из 11
Поиск:

Copyright MyCorp © 2006Сайт управляется системой uCoz