Soviet Union ZX Spectrum CommunityВоскресенье, 24.11.2024, 20:53
Вы вошли как Гость | Группа "Гости" | RSS
 [ · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Формирователь сигнала INT
HazarДата: Суббота, 09.08.2014, 17:54 | Сообщение # 1
80h
Группа: Пользователи
Сообщений: 231
Статус: Offline
Формирователь сигнала INT с автоматическим определением длительности,
Длительность сигнала зависит от времени прихода сигнала Interrupt (подтверждение маскируемого прерывания).
Для работы схемы требуется внешние сигналы частотой 50Гц и тактовый сигнал для счетчика частотой ~447 кГц , скважность сигналов значения не имеет.

В случае если сигнал «Interrupt» отсутствует, (прерывания могут быть запрещены программно) тогда формируется длительность INT равная 10 мКс.
Прикрепления: __INT.zip (45.4 Kb)


Spectrum жив в нашей душе навсегда
 
Black_CatДата: Суббота, 14.05.2016, 00:16 | Сообщение # 2
Координатор
Группа: Координаторы
Сообщений: 730
Статус: Offline
Как-то очень сложно. В Спектруме прерывание стартует по определённой экранной строке и определённому такту в ней. А вот с прекращением синала INT/ тут хитрее. В оригинальном Спектруме не хватило пина чтоб завести сигнал M1/ на ULA, поэтому длительность INT/ сделали фиксированной (около 32 тактов процессора), такой, чтоб была больше максимального времени остановки процессора + 1 такт + максимально возможной длины команды, и в то же время была не достаточно длинной, чтоб не произошёл его повторный захват. На этом некоторые далёкие от железа спектрумисты несколько подвинулись умом, занимаясь такой глупостью, как тестирование длины сигнала INT/. На самом деле это всё бред, и ничего этого не надо, просто надо сбрасывать INT/ по запросу вектора от процессора IORQ/ or M1/ = 0, а не как бог на душу положит. Т.е. всё дело в правильной схемотехнике формирования INT/. Скажу более, для современных клонов, юзающих правильную шину NemoBus (а не Хрен Знает что в поделках от NedoPC), она по умолчанию предоставляет возможность независимого и неарбитрируемого выставления запросов маскируемого прерывания устройствами, а так же выставления ими арбитрируемого приоритетного вектора прерывания. Дык вот возвращаясь к формированию INT/ в реалиях применения шины NemoBus, там правильно кадровое прерывание сбрасывается по IORQG/ or M1/ = 0, а не по IORQ/ or M1/ = 0.

P.S. Решение со сбросом только по IORQ/ or M1/ = 0 кадрового прерывания к сожалению не позволяет корректно работать фреймовому софту синхронизирующемуся по HALT и выставляющему DI более чем на кадр, поэтому предложение снимается. Проблема здесь не в самом способе, а в том, что софт рассчитан на строго определённое положение прерывания, поэтому схема должна быть сложнее.


"Трудно найти чёрную кошку в тёмной комнате.. ...особенно, если её там нет", "Forever!".
"Я никогда не причиняю им зла. Я говорю им правду, и они думают, что это - зло."
Гарри Трумэн
 
HazarДата: Понедельник, 26.12.2016, 15:14 | Сообщение # 3
80h
Группа: Пользователи
Сообщений: 231
Статус: Offline
Цитата Black_Cat ()
в реалиях применения шины NemoBus, там правильно кадровое прерывание сбрасывается по IORQG/ or M1/ = 0, а не по IORQ/ or M1/ = 0.


Цитата Black_Cat ()
P.S. Решение со сбросом только по IORQ/ or M1/ = 0 кадрового прерывания к сожалению не позволяет корректно работать фреймовому софту синхронизирующемуся по HALT и выставляющему DI более чем на кадр, поэтому предложение снимается. Проблема здесь не в самом способе, а в том, что софт рассчитан на строго определённое положение прерывания, поэтому схема должна быть сложнее.


1. IORQG (S) от IORQ почти ничем не отличается (разве что задержка 20 ... 40 nS) за такое время на экране ничего не изменится.

2. Да я думал какое -то время об этом поэтому и разработал привязку индивидуально к каждой строке (см схему Border формирователь с компаратором)
там только в последствии частоту добавил 200 hZ - 60 = 140 hZ у меня вроде как (но на демо не проверял не до этого)
140 кадров для бордера за секунду, с таким раскладом по моему не имеет значения где вы запретите прерывания.

Подробности по схеме -
Опорная частота ~447 kHZ получается из тактовой CPU 3500000 /8 = 437500 HZ по длительности это 2,285714 mKs (у меня получилось больше так как другой кварц стоит).
то есть эта длительность используется как минимальный шаг для отслеживания "начала " вывода border. За счет этого появление сигнала INT синфазно с работой CPU +- лаг
из-за биения частот 447 KHz и 50 Hz. Но так как одна и та же линия выводится за кадр
многократно то визуально дрожание линии должно быть не заметно.

Для правильного отображения border имеет значение скорость выполнения команд
OUT ©,A: самая часто используемая команда для отправки в порт, занимает 12 тактов. ( время выполнения этой команды ~3,4285 mKs) при частоте CPU 3,5 mHz.
Время выполнения команды OUT должно быть больше чем интервал опорной частоты
Что уже предусмотрено в схеме.

IORQ/ or M1/ = 0 кадрового прерывания к сожалению не позволяет корректно работать фреймовому софту синхронизирующемуся по HALT

Это извечный вопрос кто главнее железо компьютера или софт который этот самый
компьютер оживляет, как я понимаю если прерывания разрешены программистом
то все железу ставится приоритет на работу (иначе просто смысла в системе прерываний
не будет) . Можно конечно схему усложнить поставить 3 триггер для (HALTa) но
imho это мало что даст для новых разрабатываемых клонах, так как задача разработчика
не в абсолютном повторении всех нюансов (а порой и ошибок) а в функциональности
старых полезных идей на новой элементной базе, по возможности добавление нового что не противоречит духу (а не железки) начальной идеи.

Добавлено (11.12.2016, 23:17)
---------------------------------------------

Цитата Black_Cat ()
На этом некоторые далёкие от железа спектрумисты несколько подвинулись умом, занимаясь такой глупостью, как тестирование длины сигнала INT/. На самом деле это всё бред, и ничего этого не надо, просто надо сбрасывать INT/ по запросу вектора от процессора IORQ/ or M1/ = 0, а не как бог на душу положит


Что только не делали кучу кондеров напаивали и все что то все равно не устраивало

А де-
ло в том, что у Фирменного Speccy кадро-
вая развёртка составляет 312 строк, а на
Pentagon 128 почему-то 320. Поэтому фир-
менный speccy показывает 69888 тактов в
прерывании, а Pent - 71680 (по тесту в JC
4.01). Но тут проявляет себя одна ошибка
(или неточность) в некоторых вариантах
схемы Pentagon 128. Это входной конденса-
тор С6 на прерывании. Если он равен 22н,
то тест покажет уже 71649 тактов. (В иде-
але С6 должен быть 6н8). Вроде бы ничего
страшного и нет в потере 31 такта и в
том, что длительность INT-a стала рав-
няться двум (по тесту ТЕСТ 128). Но в
этом случае обеспечен 100%-ий повторный
захват прерываний (Даже без TURBO). Но и
это ещё не самое страшное.
Дело в том, что многие кодеры стали
использовать в своих muLticoLor -ах и
бордюрных эффектах автоподстройку, опре-
деляя Pentagon это или нет. Учитывая вы-
шесказанное, нужно делать поправку +/- 60
тактов (встречались машины, на которых
С6=47н, что не мешает multicoloRить, но
заваливает проверки). Многие кодеры при-
нимают свои машины за идеал, что не явля-
ется фактом (т.к. на большинстве Pentagon
128 C6=22н).
Этим грешит демонстрация с ENLIGHT 96
- PRSG 128, отказываясь мультиколорить на
правильных пентагоновских прерываниях,
однако, если на время инсталляции вклю-
чить TURBO, а потом выключить - muLtico-
LoRiT, как миленькая.
Сразу хочу сказать, что на Peнтagon
128 невозможно получить фирменные преры-
вания. Даже если формировать INT по спаду
кадрового синхроимпульса, собрав схему на
конденсаторе и резисторах, придётся ещё
вешать дерево логики на 2 и 3 выводы D11,
сужая развёртку до 312 строк, иначе эф-
фекты, сделанные под псевдофирменные пре-
рывания не будут работать ни на нормаль-
ном Pent-e, ни на нормальных фирменных
прерываниях.

В заключение хочу подвести ИТОГИ всего
вышесказанного:
1. Практически на любой машине можно,
замкнув сброс счётчика строк на массу,
получить пентагоновские прерывания.
2. С6 на схеме Pentagon 128 должен
быть 6н8, а не 22н, на Pentagon-e должно
быть 71680 тактов 320*224=71680, а не
71649. На фирменном Speccy - 69888 тактов
312*224=69888; 224 - количество тактов в
строке развёртки.
3. При автоподстройке под прерывания
учитывать погрешность +/-60 тактов или
даже больше (из-за разного значения кон-
денсатора С6).
4. muLticoLor-ы под фирменные прерыва-
ния нельзя сделать на Pentagon 128 с
псевдофирменными прерываниями.

А мою схему при необходимости можно подстраивать как угодно без конденсаторов

Добавлено (26.12.2016, 15:14)
---------------------------------------------

Цитата Black_Cat ()
что софт рассчитан на строго определённое положение прерывания, поэтому схема должна быть сложнее.


Если под этим понимать вывод эффектов разных мультиколоров то сигнал INT тут вообще
Не причем. Все времянки зависят от каждой конкретной программы и от скорости работы процессора. Если не правильно работает значит либо программа делалась на другое Количество строк (то есть проблема с видеоконтроллером) либо во время написания программы использовался компьютер с другой тактовой частотой не равной 3,5 mHz. А INT не причем потому что HALT для того и ставят что-бы привязать видео-вывод к конкретному сигналу
INT даже если он и сдвинут немного, это не должно отражаться на выводимых эффектах


Spectrum жив в нашей душе навсегда

Сообщение отредактировал Hazar - Вторник, 08.11.2016, 20:34
 
HazarДата: Четверг, 16.02.2017, 19:07 | Сообщение # 4
80h
Группа: Пользователи
Сообщений: 231
Статус: Offline
Схема эмуляции видео-контроллера для чтения атрибутов экрана
И регулирования времени появления INT
Прикрепления: __3.zip (31.8 Kb)


Spectrum жив в нашей душе навсегда

Сообщение отредактировал Hazar - Четверг, 16.02.2017, 20:03
 
HazarДата: Воскресенье, 19.02.2017, 05:02 | Сообщение # 5
80h
Группа: Пользователи
Сообщений: 231
Статус: Offline
Обновление схемы

Прикрепления: 9495057.gif (11.0 Kb) · __4.zip (26.0 Kb)


Spectrum жив в нашей душе навсегда
 
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2006Сайт управляется системой uCoz