Контроллер прерываний для ZXM MoonSound
|
|
Black_Cat | Дата: Понедельник, 13.07.2015, 22:37 | Сообщение # 1 |
Координатор
Группа: Координаторы
Сообщений: 731
Статус: Offline
| Ниже представлена схема контроллера прерываний для звуковой карты ZXM-MoonSound. Синим обозначена эквивалентная логика, реализованная в CPLD, красным - сигнал кадрового прерывания подаваемый с помощью выкидыша с материнской платы компьютера ZXM-Phoenix, или другого компьютера. Сигнал IOGE - это сигнал захвата диапазона портов, от дешифратора ZXM-MoonSound. Контроллер позволяет работать совместно с другими контроллерами прерываний, выполненными в соответствии со стандартом шины NemoBus, и позволяет одновременно обрабатывать до двух независимых прерываний в режиме IM2 процессора - прерывание от YMF278B ZXM-MoonSound, и кадровое прерывание компьютера (если оно заведено через выкидыш). Контроллер позволяет выставлять три вектора прерывания для разных комбинаций запросов прерывания:
#77 - запрос прерывания от YMF278B ZXM-MoonSound; #F7 - запрос прерывания от YMF278B ZXM-MoonSound и кадрового прерывания компьютера; #FF - запрос прерывания от кадрового прерывания компьютера или от неизвестного источника;
Совместная работа контроллера прерываний с другими контроллерами обеспечивается с помощью арбитра захвата диапазона портов, исполняющего так же роль арбитра разрешения выставления вектора прерывания на шину компьютера в цикле чтения вектора прерывания. Соответственно, контроллер находящийся в master-слоте (первый слот) будет иметь наивысший приоритет, а контроллер в последнем слоте будет иметь низший приоритет выставления вектора прерывания на шину компьютера в цикле чтения вектора прерывания. Пока прерывание от контроллера с более высоким приоритетом обрабатывается, контроллеры с более низким приоритетом ждут, не сбрасывая свои запросы прерывания, пока команда EI, завершающая обработчик прерывания, не вернёт процессору чувствительность к запросам перывания. При наличии контроллера с более высоким приоритетом, обработка кадрового прерывания должна производиться в нём. В соответствии с логикой работы шины NemoBus, приоритеты контролеров прерываний жёстко привязаны к приоритетам слотов и не могут меняться. Прерывание от YMF278B ZXM-MoonSound может программно запрещаться путём записи нуля во внутренний регистр #04 YMF278B.
"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!". "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло." Гарри Трумэн
|
|
| |
Hazar | Дата: Четверг, 16.07.2015, 12:43 | Сообщение # 2 |
80h
Группа: Пользователи
Сообщений: 231
Статус: Offline
| Цитата Black_Cat ( ) позволяет одновременно обрабатывать до двух независимых прерываний в режиме IM2 процессора - прерывание от YMF278B ZXM-MoonSound, и кадровое прерывание компьютера
осталось только решить проблему большой загрузки процессора в режиме работы IM2
Цитата Black_Cat ( ) #FF - запрос прерывания от кадрового прерывания компьютера или от неизвестного источника;
Запрос это сигнал INT (16 вывод CPU) Почему неизвестного - сама шина данных источник
Добавлено (16.07.2015, 12:43) --------------------------------------------- Режим IM0
Этот режим включается сразу после включения питания и полностью аналогичен применяемому в микропроцессоре INTEL 8080. При каждом поступлении сигнала прерываний (INT),устройство вызвавшее прерывание, должно было бы выдать на шину данные (код команды перехода) после чего должна исполнятся программа обработчика прерывания. В Спектруме на шину данных вечно выдается код #FF что соответствует команде (RST #38), поэтому режим IM0 почти эквивалентен IM1.
Режим IM1
Этот режим стандартно включает операционная система Спектрума. По получении сигнала прерываний процессор передает управление на адрес #38, т.е выполняется команда RST #38, где в Спектруме находиться Стандартная процедура обработки прерываний (опрос клавиатуры) .
Режим IM2
Этот режим дает возможность программисту указывать адрес обработки прерываний. При поступлении сигнала прерывания Младший байт вектора прерывания берется с шины данных а старший байт перед этим записывают в регистр I. Далее по полученному адресу из памяти считывается значение, которое является адресом программы обработки прерываний.
Возврат из маскируемых прерываний следует выполнять командой RETI
Spectrum жив в нашей душе навсегда
Сообщение отредактировал Hazar - Четверг, 16.07.2015, 13:12 |
|
| |
Hazar | Дата: Пятница, 17.07.2015, 02:29 | Сообщение # 3 |
80h
Группа: Пользователи
Сообщений: 231
Статус: Offline
|
Spectrum жив в нашей душе навсегда
|
|
| |
Black_Cat | Дата: Пятница, 17.07.2015, 14:26 | Сообщение # 4 |
Координатор
Группа: Координаторы
Сообщений: 731
Статус: Offline
| Цитата Hazar ( ) осталось только решить проблему большой загрузки процессора в режиме работы IM2
нет там никакой загрузки, всё как обычно
Цитата Hazar ( ) Почему неизвестного
Потому, что известные источники все заведены в контроллер, а остальные - неизвестные.
"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!". "Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло." Гарри Трумэн
|
|
| |
Hazar | Дата: Пятница, 17.07.2015, 20:00 | Сообщение # 5 |
80h
Группа: Пользователи
Сообщений: 231
Статус: Offline
| Цитата Black_Cat ( ) Потому, что известные источники все заведены в контроллер, а остальные - неизвестные.
остальные = вектор прерывания ( Registr I 1111 1111 шина данных)-----> чтение 16 битного адреса ------->переход на адрес.
Spectrum жив в нашей душе навсегда
|
|
| |