Контроллер маскируемых прерываний
Posted:
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: Контроллер маскируемых прерываний
Posted:
Mon, 16.12.2013 09:07:18
by Sergey78
Когда будет во всех кинотеатрах в анриле?
Re: Контроллер маскируемых прерываний
Posted:
Mon, 16.12.2013 14:49:54
by Grey
а с внешних устройств можно будет вектор выставлять ?
например NeoGS ?
Re: Контроллер маскируемых прерываний
Posted:
Mon, 16.12.2013 15:40:15
by TS-Labs
А вот думаю...
---
Докладаю: для начала, на NeoGS линия ~INT не заведена на хзбас.
---
Докладаю №2:
в канонічной прошиве для пентевы, как и в тсконфе, ~INT на фпга работает на вывод. Отсюда два вывода:
1. Альтера никак не опрашивает инт от внешних уст-в и не знает о нем.
2. Оба инта могут прийти одновременно, как и одновременное выставление вектора на ШД от ус-ва и из фпга - факап.
Re: Контроллер маскируемых прерываний
Posted:
Mon, 16.12.2013 15:54:28
by LessNick
TS-Labs wrote:Докладаю: для начала, на NeoGS линия ~INT не заведена на хзбас.
физически (я имею ввиду недоработку ZXBUS) или идеологически, то есть дорожка есть, но не задействована?
TS-Labs wrote:Альтера никак не опрашивает инт от внешних уст-в и не знает о нем.
Я конечно понимаю, что это уже попахивает писизмом, но сделать можно?
TS-Labs wrote:Оба инта могут прийти одновременно, как и одновременное выставление вектора на ШД от ус-ва и из фпга - факап.
таки думаю приоритет должен быть у устройства, иначе проёб данных.
Re: Контроллер маскируемых прерываний
Posted:
Mon, 16.12.2013 22:37:09
by ZEK
TS-Labs wrote:~INT на фпга работает на вывод.
там пулапп есть, поэтому его можно как bidir настраивать
Re: Контроллер маскируемых прерываний
Posted:
Mon, 16.12.2013 22:52:12
by TS-Labs
Я знаю, но это не решает проблему коллизий внутреннего и внешнего интов.
Re: Контроллер маскируемых прерываний
Posted:
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: Контроллер маскируемых прерываний
Posted:
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: Контроллер маскируемых прерываний
Posted:
Wed, 16.04.2014 07:34:15
by TS-Labs
amixgris: применил твою рацуху + пофиксал бред про приоритеты в мануалах
Re: Контроллер маскируемых прерываний
Posted:
Thu, 17.04.2014 11:56:46
by amixgris
TS-Labs wrote:Какие идеи насчет NMI?
Я бы мог, сказать, что, например для какого-нибудь теневого суперотладчика. Но я точно знаю, что я его не напишу.
Re: Контроллер маскируемых прерываний
Posted:
Tue, 28.07.2015 10:17:45
by AndyD
amixgris wrote:Я бы мог, сказать, что, например для какого-нибудь теневого суперотладчика.
Да если просто STS прикрутить на NMI уже очень не плохо было бы.
Re: Контроллер маскируемых прерываний
Posted:
Tue, 28.07.2015 16:47:41
by TS-Labs
Можно. Я в децтве сто раз так делал =)
Re: Контроллер маскируемых прерываний
Posted:
Tue, 28.07.2015 18:44:37
by g0blinish
TS-Labs wrote:Можно. Я в децтве сто раз так делал =)
а я с помощью теневого ПЗУ:)
Re: Контроллер маскируемых прерываний
Posted:
Tue, 28.07.2015 21:30:40
by AndyD
g0blinish wrote:а я с помощью теневого ПЗУ:)
А я на скорпионе в децтве теневеком пользовался и про другие отладчики даже не думал,привык тогда к хорошему,сейчас мучаюсь ,подскажите как к ТС конфе прикрутить STS на NMI? с помощью теневого ПЗУ ,можно подробнее.
Re: Контроллер маскируемых прерываний
Posted:
Tue, 28.07.2015 22:56:57
by TS-Labs
Для начала я должен прикрутить НМИ к клавише - сейчас его нет.
Еще надо ввести какой то режим пейджинга, чтоб включалась нужная страница (необязательно из 0-3 ПЗУ) и могла потом выключаться назад.
Короче, приветствуются идеи. Как решим, так сразу зогпилю =)
Re: Контроллер маскируемых прерываний
Posted:
Sat, 19.08.2017 23:35:05
by idxi
Одно из возможных применений NMI, например, могла бы быть "удаленная" загрузка кода прямо в память и его старт, к примеру, посредством ZiFi (например, через инет..) и его запуск..
Второе "одно из" применений NMI могло бы быть, например, в виде как независимое
программируемое прерывание NMI с разными тиками (таймеры, события.. ?(типа как в контроллерах )...?