Page 1 of 1

Контроллер маскируемых прерываний

PostPosted: Mon, 16.12.2013 06:32:05
by TS-Labs
В TS-Conf можно запрограммировать несколько источников маскируемого прерывания. Среди них:

- кадровый (frame, индекс 0),
- строчный (line, индекс 1),
- окончание DMA транзакции (dma, индекс 2).

Источник frame срабатывает, когда значение счетчиков растра совпадает с регистрами HSINT и VSINT. Источник line срабатывает в каждой строке, когда горизонтальный счетчик растра равен 0. Источник dma срабатывает после окончания любой транзакции DMA.

Каждый источник прерывания формирует сигнал ~INT и выставляет собственный байт D[7:0] на ШД в цикле ~IORQ || ~M1.

- $FF - кадровый,
- $FD - строчный,
- $FB - DMA.

В случае прихода нескольких событий одновременно, сначала обработается прерывание с меньшим индексом. При завершении ISR инструкциями EI : RET сразу произойдет обработка следующего по порядку ~INT, который разпознается в последнем машцикле инструкции RET.

Регистр конфигурации INTMask содержит биты разрешения индивидуального источника маскируемого прерывания, 0 - запрещен / 1 - разрешен. По ~RESET туда записывается значение $01: разрешен frame, все остальные запрещены. Если из ISR прерывания с меньшим приоритетом записать 0 в соответствующий бит маски источника прерывания, ожидающего в данный момент обработки, то произойдет его сброс и прерывание обработано не будет. Запись 1 не влияет на состояние ожидающего прерывания. Структура INTMask следующая:

бит 0, FRAME - разрешение источника frame,
бит 1, LINE - разрешение источника line,
бит 2, DMA - разрешение источника dma,
биты 3-7 - не используются, записывать 0.

Re: Контроллер маскируемых прерываний

PostPosted: Mon, 16.12.2013 07:55:49
by g0blinish
В натуре rocketscience :bang:

Re: Контроллер маскируемых прерываний

PostPosted: Mon, 16.12.2013 09:07:18
by Sergey78
Когда будет во всех кинотеатрах в анриле?

Re: Контроллер маскируемых прерываний

PostPosted: Mon, 16.12.2013 09:11:58
by TS-Labs
Будет )

Re: Контроллер маскируемых прерываний

PostPosted: Mon, 16.12.2013 14:49:54
by Grey
а с внешних устройств можно будет вектор выставлять ?
например NeoGS ?

Re: Контроллер маскируемых прерываний

PostPosted: Mon, 16.12.2013 15:40:15
by TS-Labs
А вот думаю...

---

Докладаю: для начала, на NeoGS линия ~INT не заведена на хзбас. :1tooth:

---

Докладаю №2:
в канонічной прошиве для пентевы, как и в тсконфе, ~INT на фпга работает на вывод. Отсюда два вывода:
1. Альтера никак не опрашивает инт от внешних уст-в и не знает о нем.
2. Оба инта могут прийти одновременно, как и одновременное выставление вектора на ШД от ус-ва и из фпга - факап.

Re: Контроллер маскируемых прерываний

PostPosted: Mon, 16.12.2013 15:54:28
by LessNick
TS-Labs wrote:Докладаю: для начала, на NeoGS линия ~INT не заведена на хзбас.


физически (я имею ввиду недоработку ZXBUS) или идеологически, то есть дорожка есть, но не задействована?

TS-Labs wrote:Альтера никак не опрашивает инт от внешних уст-в и не знает о нем.


Я конечно понимаю, что это уже попахивает писизмом, но сделать можно? :)

TS-Labs wrote:Оба инта могут прийти одновременно, как и одновременное выставление вектора на ШД от ус-ва и из фпга - факап.


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

Re: Контроллер маскируемых прерываний

PostPosted: Mon, 16.12.2013 15:56:16
by TS-Labs
Физически не разведена.

Re: Контроллер маскируемых прерываний

PostPosted: Mon, 16.12.2013 22:37:09
by ZEK
TS-Labs wrote:~INT на фпга работает на вывод.

там пулапп есть, поэтому его можно как bidir настраивать

Re: Контроллер маскируемых прерываний

PostPosted: Mon, 16.12.2013 22:52:12
by TS-Labs
Я знаю, но это не решает проблему коллизий внутреннего и внешнего интов.

Re: Контроллер маскируемых прерываний

PostPosted: Thu, 03.04.2014 14:58:51
by amixgris
1.
TS-Labs wrote:сначала обработается прерывание с меньшим приоритетом

Здесь всё правильно? :)

2. Объясните, пожалуйста, в чём выгода от 8 векторов в пулле? Ведь для изменения обработчика прервываний, достаточно занести новый адрес в один единственный вектор: ld (vector),rp.
А для изменения обработчика с помощью выбора другого вектора, нужно сделать запись в порт: ld bc,port : out (c),r , что расточительней и по татктам и по байтам.

Может, если лишнее убрать, то высвободится логика для чего-нибудь более полезного, например NMI?

Re: Контроллер маскируемых прерываний

PostPosted: Thu, 03.04.2014 16:46:51
by TS-Labs
amixgris wrote:Здесь всё правильно?

С меньшим индексом приоритета. Т.е. 0 раньше чем 1.
amixgris wrote:Объясните, пожалуйста, в чём выгода от 8 векторов в пулле? Ведь для изменения обработчика прервываний, достаточно занести новый адрес в один единственный вектор: ld (vector),rp.

В том, что 8 адресов могут быть забиты в таблицу, надо только поменять выбор одного из 8. Альтернатива: 1 адрес на источник, менять адрес в таблице. 2-е сейчас тоже работает.
amixgris wrote:А для изменения обработчика с помощью выбора другого вектора, нужно сделать запись в порт: ld bc,port : out (c),r , что расточительней и по татктам и по байтам.

Ну в общем да. Возможно, пул выпилю, если не понадобится.
amixgris wrote:Может, если лишнее убрать, то высвободится логика для чего-нибудь более полезного

Посмотрим.
amixgris wrote:например NMI

Какие идеи насчет NMI?

Re: Контроллер маскируемых прерываний

PostPosted: Wed, 16.04.2014 07:34:15
by TS-Labs
amixgris: применил твою рацуху + пофиксал бред про приоритеты в мануалах :1tooth:

Re: Контроллер маскируемых прерываний

PostPosted: Thu, 17.04.2014 11:53:18
by amixgris
TS-Labs wrote:amixgris: применил твою рацуху + пофиксал бред про приоритеты в мануалах

Еа! :pank:

Re: Контроллер маскируемых прерываний

PostPosted: Thu, 17.04.2014 11:56:46
by amixgris
TS-Labs wrote:Какие идеи насчет NMI?

Я бы мог, сказать, что, например для какого-нибудь теневого суперотладчика. Но я точно знаю, что я его не напишу.

Re: Контроллер маскируемых прерываний

PostPosted: Tue, 28.07.2015 10:17:45
by AndyD
amixgris wrote:Я бы мог, сказать, что, например для какого-нибудь теневого суперотладчика.

Да если просто STS прикрутить на NMI уже очень не плохо было бы.

Re: Контроллер маскируемых прерываний

PostPosted: Tue, 28.07.2015 16:47:41
by TS-Labs
Можно. Я в децтве сто раз так делал =)

Re: Контроллер маскируемых прерываний

PostPosted: Tue, 28.07.2015 18:44:37
by g0blinish
TS-Labs wrote:Можно. Я в децтве сто раз так делал =)

а я с помощью теневого ПЗУ:)

Re: Контроллер маскируемых прерываний

PostPosted: Tue, 28.07.2015 21:30:40
by AndyD
g0blinish wrote:а я с помощью теневого ПЗУ:)

А я на скорпионе в децтве теневеком пользовался и про другие отладчики даже не думал,привык тогда к хорошему,сейчас мучаюсь ,подскажите как к ТС конфе прикрутить STS на NMI? с помощью теневого ПЗУ ,можно подробнее.

Re: Контроллер маскируемых прерываний

PostPosted: Tue, 28.07.2015 22:56:57
by TS-Labs
Для начала я должен прикрутить НМИ к клавише - сейчас его нет.
Еще надо ввести какой то режим пейджинга, чтоб включалась нужная страница (необязательно из 0-3 ПЗУ) и могла потом выключаться назад.
Короче, приветствуются идеи. Как решим, так сразу зогпилю =)

Re: Контроллер маскируемых прерываний

PostPosted: Sat, 19.08.2017 23:35:05
by idxi
Одно из возможных применений NMI, например, могла бы быть "удаленная" загрузка кода прямо в память и его старт, к примеру, посредством ZiFi (например, через инет..) и его запуск..

Второе "одно из" применений NMI могло бы быть, например, в виде как независимое программируемое прерывание NMI с разными тиками (таймеры, события.. ?(типа как в контроллерах :) )...?