Контроллер маскируемых прерываний
Контроллер маскируемых прерываний
В 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.
- кадровый (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: Контроллер маскируемых прерываний
Когда будет во всех кинотеатрах в анриле?
Re: Контроллер маскируемых прерываний
а с внешних устройств можно будет вектор выставлять ?
например NeoGS ?
например NeoGS ?
Re: Контроллер маскируемых прерываний
А вот думаю...
---
Докладаю: для начала, на NeoGS линия ~INT не заведена на хзбас.
---
Докладаю №2:
в канонічной прошиве для пентевы, как и в тсконфе, ~INT на фпга работает на вывод. Отсюда два вывода:
1. Альтера никак не опрашивает инт от внешних уст-в и не знает о нем.
2. Оба инта могут прийти одновременно, как и одновременное выставление вектора на ШД от ус-ва и из фпга - факап.
---
Докладаю: для начала, на NeoGS линия ~INT не заведена на хзбас.

---
Докладаю №2:
в канонічной прошиве для пентевы, как и в тсконфе, ~INT на фпга работает на вывод. Отсюда два вывода:
1. Альтера никак не опрашивает инт от внешних уст-в и не знает о нем.
2. Оба инта могут прийти одновременно, как и одновременное выставление вектора на ШД от ус-ва и из фпга - факап.
- LessNick
- грей сашу — сашу грей
- Сообщения: 972
- Зарегистрирован: Чт, 26.07.2012 15:00:53
- Контактная информация:
Re: Контроллер маскируемых прерываний
TS-Labs писал(а):Докладаю: для начала, на NeoGS линия ~INT не заведена на хзбас.
физически (я имею ввиду недоработку ZXBUS) или идеологически, то есть дорожка есть, но не задействована?
TS-Labs писал(а):Альтера никак не опрашивает инт от внешних уст-в и не знает о нем.
Я конечно понимаю, что это уже попахивает писизмом, но сделать можно?

TS-Labs писал(а):Оба инта могут прийти одновременно, как и одновременное выставление вектора на ШД от ус-ва и из фпга - факап.
таки думаю приоритет должен быть у устройства, иначе проёб данных.
(∩。•o•。)っ.゚☆。・ TS-Conf для PentEvo — это классический Pentagon 128k для тех кто хочет больше!
Re: Контроллер маскируемых прерываний
Физически не разведена.
Re: Контроллер маскируемых прерываний
TS-Labs писал(а):~INT на фпга работает на вывод.
там пулапп есть, поэтому его можно как bidir настраивать
KOE сказал заработает, значит заработает. Он кандидат наук, а не радиолюбитель. (c) alone
Re: Контроллер маскируемых прерываний
Я знаю, но это не решает проблему коллизий внутреннего и внешнего интов.
Re: Контроллер маскируемых прерываний
1.
Здесь всё правильно?
2. Объясните, пожалуйста, в чём выгода от 8 векторов в пулле? Ведь для изменения обработчика прервываний, достаточно занести новый адрес в один единственный вектор: ld (vector),rp.
А для изменения обработчика с помощью выбора другого вектора, нужно сделать запись в порт: ld bc,port : out (c),r , что расточительней и по татктам и по байтам.
Может, если лишнее убрать, то высвободится логика для чего-нибудь более полезного, например NMI?
TS-Labs писал(а):сначала обработается прерывание с меньшим приоритетом
Здесь всё правильно?

2. Объясните, пожалуйста, в чём выгода от 8 векторов в пулле? Ведь для изменения обработчика прервываний, достаточно занести новый адрес в один единственный вектор: ld (vector),rp.
А для изменения обработчика с помощью выбора другого вектора, нужно сделать запись в порт: ld bc,port : out (c),r , что расточительней и по татктам и по байтам.
Может, если лишнее убрать, то высвободится логика для чего-нибудь более полезного, например NMI?
Re: Контроллер маскируемых прерываний
amixgris писал(а):Здесь всё правильно?
С меньшим индексом приоритета. Т.е. 0 раньше чем 1.
amixgris писал(а):Объясните, пожалуйста, в чём выгода от 8 векторов в пулле? Ведь для изменения обработчика прервываний, достаточно занести новый адрес в один единственный вектор: ld (vector),rp.
В том, что 8 адресов могут быть забиты в таблицу, надо только поменять выбор одного из 8. Альтернатива: 1 адрес на источник, менять адрес в таблице. 2-е сейчас тоже работает.
amixgris писал(а):А для изменения обработчика с помощью выбора другого вектора, нужно сделать запись в порт: ld bc,port : out (c),r , что расточительней и по татктам и по байтам.
Ну в общем да. Возможно, пул выпилю, если не понадобится.
amixgris писал(а):Может, если лишнее убрать, то высвободится логика для чего-нибудь более полезного
Посмотрим.
amixgris писал(а):например NMI
Какие идеи насчет NMI?
Re: Контроллер маскируемых прерываний
amixgris: применил твою рацуху + пофиксал бред про приоритеты в мануалах 

Re: Контроллер маскируемых прерываний
TS-Labs писал(а):amixgris: применил твою рацуху + пофиксал бред про приоритеты в мануалах
Еа!

Re: Контроллер маскируемых прерываний
TS-Labs писал(а):Какие идеи насчет NMI?
Я бы мог, сказать, что, например для какого-нибудь теневого суперотладчика. Но я точно знаю, что я его не напишу.
Re: Контроллер маскируемых прерываний
amixgris писал(а):Я бы мог, сказать, что, например для какого-нибудь теневого суперотладчика.
Да если просто STS прикрутить на NMI уже очень не плохо было бы.
Re: Контроллер маскируемых прерываний
Можно. Я в децтве сто раз так делал =)
Re: Контроллер маскируемых прерываний
TS-Labs писал(а):Можно. Я в децтве сто раз так делал =)
а я с помощью теневого ПЗУ:)
[x] No Screenshot
Re: Контроллер маскируемых прерываний
g0blinish писал(а):а я с помощью теневого ПЗУ:)
А я на скорпионе в децтве теневеком пользовался и про другие отладчики даже не думал,привык тогда к хорошему,сейчас мучаюсь ,подскажите как к ТС конфе прикрутить STS на NMI? с помощью теневого ПЗУ ,можно подробнее.
Re: Контроллер маскируемых прерываний
Для начала я должен прикрутить НМИ к клавише - сейчас его нет.
Еще надо ввести какой то режим пейджинга, чтоб включалась нужная страница (необязательно из 0-3 ПЗУ) и могла потом выключаться назад.
Короче, приветствуются идеи. Как решим, так сразу зогпилю =)
Еще надо ввести какой то режим пейджинга, чтоб включалась нужная страница (необязательно из 0-3 ПЗУ) и могла потом выключаться назад.
Короче, приветствуются идеи. Как решим, так сразу зогпилю =)
Re: Контроллер маскируемых прерываний
Одно из возможных применений NMI, например, могла бы быть "удаленная" загрузка кода прямо в память и его старт, к примеру, посредством ZiFi (например, через инет..) и его запуск..
Второе "одно из" применений NMI могло бы быть, например, в виде как независимое программируемое прерывание NMI с разными тиками (таймеры, события.. ?(типа как в контроллерах
)...?
Второе "одно из" применений NMI могло бы быть, например, в виде как независимое программируемое прерывание NMI с разными тиками (таймеры, события.. ?(типа как в контроллерах
