Нетрадиционная обработка прерываний

Микропроцессоры и микроконтроллеры от фирмы Zilog, а также компьютеры на них построенные

Moderator: Shaos

User avatar
masterspammer
Fanat
Posts: 95
Joined: 13 Dec 2020 21:11

Re: Нетрадиционная обработка прерываний

Post by masterspammer »

Теперь осталось найти требуемые микросхемы (и выбрать вариант, конечно же) - вопрос - смогу ли уместиться на левую макетку к процессору (на фото позирует другая микросхема, но Z80 тоже есть) и оставить место для тактового генератора, если нет, то соберу часть, инвариантную к способу снятия сигнала (регистры, шифратор, если он будет), а выходные буферы/триггеры - уже для отдельных прерываний, приходящих извне.
You do not have the required permissions to view the files attached to this post.
User avatar
masterspammer
Fanat
Posts: 95
Joined: 13 Dec 2020 21:11

Re: Нетрадиционная обработка прерываний

Post by masterspammer »

Не решаюсь отредактировать сообщение (был матёрый глюк с их дублированием), нашёл ошибку при перерисовывании схемы - сигнал IB должен браться с инверсного вывода триггера / регистра.
Alekcandr
Doomed
Posts: 665
Joined: 01 Oct 2007 10:30
Location: Ukraine

Re: Нетрадиционная обработка прерываний

Post by Alekcandr »

Интересно. По первой схеме. Если вернутся в начало. За каждое прерывание отвечает один бит (INT1 – 000 0001, INT2 – 000 0010 и т.д.). Вроде нормально пока не прилетит два прерывания одновременно, тогда получится 000 0011 (вектор). И как на этот вектор реагировать программе? При условии, что прерывания подтверждаются сразу аппаратно автоматически на стороне источника (как я понял). А если одновременно прерываний будет 3...7?
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
User avatar
masterspammer
Fanat
Posts: 95
Joined: 13 Dec 2020 21:11

Re: Нетрадиционная обработка прерываний

Post by masterspammer »

Alekcandr wrote:Интересно. По первой схеме. Если вернутся в начало. За каждое прерывание отвечает один бит (INT1 – 000 0001, INT2 – 000 0010 и т.д.). Вроде нормально пока не прилетит два прерывания одновременно, тогда получится 000 0011 (вектор). И как на этот вектор реагировать программе? При условии, что прерывания подтверждаются сразу аппаратно автоматически на стороне источника (как я понял). А если одновременно прерываний будет 3...7?
Тут надо (по причинам, которые станут понятнее чуть дальше) пихать не с нулевого бита, а, например со второго (точно будет хорошо).

Тогда пусть у нас вектор будет 0000 0100 ... 1111 1100, а таблица такая:

Code: Select all

адрес    что там
00000000 00 00 00 00  - тут можно хранить что угодно
00000100 C3 XX XX 00 - JP INT_1
00001000 C3 XX XX 00 - JP INT_2
00001100 C3 XX XX 00 - JP INT_1_2
00010000 C3 XX XX 00 - JP INT_3
00010100 C3 XX XX 00 - JP INT_1_3
00011000 C3 XX XX 00 - JP INT_2_3
00011100 C3 XX XX 00 - JP INT_1_2_3 ... и так далее
где INT_1 INT_2 INT_3... - обычные обработчики, а вот необычные - такие:
INT_1_2: CALL INT_1
JP INT_2
или наоборот - вот именно так (порядком вызова в составных обработчиков) и реализуется любой приоритет без перепайки..
INT_1_2: CALL INT_2
JP INT_1
и так далее
INT_1_2_3: CALL INT_1
CALL INT_2
JP INT_3
...так до 6 прерываний, если поиграть с JR, то можно сделать и 7 (но через :obye: )

Думал попробовать с дешифрацией (должно прикольно отщёлкивать триггеры по одному), да не нашёл ИВ1, а заказывать издалека влом.
User avatar
masterspammer
Fanat
Posts: 95
Joined: 13 Dec 2020 21:11

Re: Нетрадиционная обработка прерываний

Post by masterspammer »

P.S. Если схему делать без аппаратного снятия сигналов, то вообще простая получается - буфер и логический элемент.
User avatar
masterspammer
Fanat
Posts: 95
Joined: 13 Dec 2020 21:11

Re: Нетрадиционная обработка прерываний

Post by masterspammer »

Выше я напутал, глядя на mode 0, на самом деле подаются 7 бит, а в таблице не JP ADDR, а просто ADDR, так что легко получить честные 7 прерываний с софтовым приоритетом.

Code: Select all

адрес    что там
00000000 00 00  - тут можно хранить что угодно
00000010 XX XX - INT_1
00000100 XX XX - INT_2
00000110 XX XX - INT_1_2
00001000 XX XX - INT_3
00001010 XX XX - INT_1_3
00001100 XX XX - INT_2_3
00001110 XX XX - INT_1_2_3 ... и так далее
Alekcandr
Doomed
Posts: 665
Joined: 01 Oct 2007 10:30
Location: Ukraine

Re: Нетрадиционная обработка прерываний

Post by Alekcandr »

masterspammer wrote:Выше я напутал, глядя на mode 0, на самом деле подаются 7 бит, а в таблице не JP ADDR, а просто ADDR, так что легко получить честные 7 прерываний с софтовым приоритетом.
Я сообразил :), не надо уточнений. Тема у нас ведь "Нетрадиционная обработка прерываний".
Эмулятор OrionEXT:
http://www.orion-ext.narod.ru
User avatar
masterspammer
Fanat
Posts: 95
Joined: 13 Dec 2020 21:11

Re: Нетрадиционная обработка прерываний

Post by masterspammer »

Маленький постскриптум - ради чего это придумывалось (в том числе и в процессе обсуждения)

Во-первых, для возможности аппаратно конфигурировать устройство с шиной - если сделать параллельную шину с разъёмами, примерно как у RC2014, то на неё можно вывесить INT1, INT2... INT_ASK и установить конфигурацию джамперами (привет, ISA); для Daisy Chain надо вставлять устройства в определённой последовательности и замыкать пропуски.

Во-вторых, ради возможности подключать сильно разные источники прерывания; например, что-то Zilogовское, а что-то - самодельное. Делать свою реализацию Daisy Chain почему-то не хочется (будет не сильно проще, причём по экземпляру на устройство). Ограничиваться Zilogовскими контроллерами - тоже.

В третьих для собственно программной установки приоритета.

Что держалось в голове в качестве примерной конфигурации:

Условный COVOX (скорее всего тут максимальный приоритет); пара последовательных портов на Z85C3; параллельный порт на ВВ55; какой-нибудь таймер плюс ещё свободные прерывания на вырост. При этом не хочется заранее делать предположений о приоритетах свободных прерываний, да и те же последовательные порты при работе на разных скоростях имеют разную важность.

----
Где-то там же (скорее всего на буфере шины данных) нужно блокировать выставление вектора контроллером (если я не напутал и это не отключается программно), точнее - не читать ничего с шины данных, когда идёт чтение вектора с регистра ИРчто-то_там.
apendix
Junior
Posts: 1
Joined: 14 Feb 2022 16:22

Re: Нетрадиционная обработка прерываний

Post by apendix »

masterspammer wrote:Маленький постскриптум - ради чего это придумывалось (в том числе и в процессе обсуждения)

Во-первых, для возможности аппаратно конфигурировать устройство с шиной - если сделать параллельную шину с разъёмами, примерно как у RC2014, то на неё можно вывесить INT1, INT2... INT_ASK и установить конфигурацию джамперами (привет, ISA); для Daisy Chain надо вставлять устройства в определённой последовательности и замыкать пропуски.

......
Тема ещё актуальна?
User avatar
masterspammer
Fanat
Posts: 95
Joined: 13 Dec 2020 21:11

Re: Нетрадиционная обработка прерываний

Post by masterspammer »

apendix wrote: Тема ещё актуальна?
Пардон, не отследил момент.
Тут получилось попасть в два переезда подряд (в сумме всего км. на 20, но два раза это два раза), доперевожу запчасти.
Максимум покупал детальки и продумывал логику. Так что актуально, но приторможено.