- Таймер 50 Гц
-
? tim@ - 12.02.2011 19:29
Если таймер, который висит на прерывании, сделать не на 50 а на 60 Гц. чем это будет грозить ? Отразится это на воспроизведении музыки сопроцессором в тех прогах, которые делают это на прерывании ? А так же будет ли возможна работа фотопистолета к примеру ? Т.е. проблема вот в чем. Насколько я помню игры с пистолетом на БК-0011 работали с таймером. Если нажимался курок - на 1 кадр (использовалось прерывание таймера) включался второй экран, где на месте мишени был белый квадратик. Если развертка будет 60-герцовой, а таймер будет 50-герцовый, возможна корректная работа данного алгоритма? или надо это делать тоже в соответствии с разверткой ?
-
? Дмитрий - 12.02.2011 22:07
Надо смотреть плееры - есть ли в них привязка к частоте вызовов по таймеру. А вот насчет пистолета хз. По идее там получается последовательность действий такова: на таймер вешается программа обработки пистолета и 50 раз в сек (в твоем варианте 60 раз) происходит прерывание и проверка на "нажатость" курка. Если нажат, то выводится второй буфер экрана и анализируется попадание. Если не нажат - просто выходим из прерывания. Просто опрос будет происходить чаще. А вот как это скажется на скорости выполнения основной программы (не будет ли тормозов) - тут я вообще хз, могут быть и тормоза (нагрузка выше на 20%).
-
? anonymous - 12.02.2011 22:43
Немного не так, если бы было нужно проверять только нажатие, таймер не требовался бы, три команды не сильно напрягут процессор, смысл был именно переключать экраны по прерыванию от смены кадра, чтоб разбежек и мерцаний половинной картинки избежать, которые повлияли бы не столько на зрителя, сколько на результат определялки попадания, в противном случае, если действовать только по нажатию, надо оставлять второй экран активным на время гарантированного его перерисовывания, а это уже нарушит восприятие изображения играющим.
-
? tim@ - 13.02.2011 08:17
Тогда продолжаем думать дальше. Был просмотрщик картинок разрешением 512х512, в режиме interlace, т.е. черезстрочно картинка разбивалась на 2 экрана, затем по каждому прерыванию таймера буфера экранов переключались и было круто :) Если развертка будет происходить в режиме 60 Гц, а таймер будет работать на 50 Гц будет муар или какая-нибудь ползущая по экрану полоса за счет разности частот ? В играс с пистолетом, насколько я понимаю, будет примерно та же проблема. Т.е. вопрос в том нужно ли частоту таймера привязывать к частоте развертки. Или как вариант сделать переключаемым 50/60 Гц.
ЗЫЖ Может для LCD экрана это вообще не критично ???
-
? Александр...@ - 13.02.2011 10:20
Для interlaced картинки частота будет без разницы.
-
? Дмитрий - 13.02.2011 11:03
2 anonymous: А для чего было делать 50 раз в сек переключение? Я просто не разбирался что да как в свое время, да и пистолета не было. Ведь проще вести опрос состояния курка в прерывании по таймеру и переключать буферы именно при нажатии. В таком случае частота таймера пофигу, она будет влиять на скорость опроса и скорость реакции игры на "стрельбу".
-
? anonymous - 13.02.2011 13:38
Дмитрий, какое переключение? Экран 1 раз переключается только если нажата клавиша. Частота таймера нужна не как частота, а как признак того, что перерисовка экрана завершена, это можно делать и программно, если завести кадровую частоту на какой-либо порт и командой ее проверять.
-
? Дмитрий - 13.02.2011 14:35
Можно, но в реальной БК такого порта нет, так что если и делать, то придется переписывать либо игры под этот порт, либо под 60Гц. Что не есть гут.
¤
Железячники, можно, думаю, реализовать для БК видеоадаптер со своей памятью, экранными плоскостями, режимами и прочей атрибутикой? Но этот вариант совершенно не подходит для всех старых игр и программ.
-
? Дмитрий - 13.02.2011 14:39
Есть еще вариант. Емнип, контакт В1 в БК10 разъема УП - это и есть вход таймера (на 10-ке вектор 100 не задействован). Что если подать туда сигналы генератора 50 или 60Гц в зависимости от потребности? Тогда и переписывать не придется. И будет универсально. Если неиспользуется кодер - частота 50Гц, используется - 60Гц.
-
? anonymous - 13.02.2011 14:53
А какой прок это делать на 10ке, у нее же один экран. Для 11й там прерывание по 0270 вектору, а 0100й берется с DD3.2, на который приходит с DD28 и ее окружения.
-
? tim@ - 13.02.2011 19:37
Короче я понял, что желательно сделать и 50 и 60 Гц, а там переключать, если нужно. Смысла делать видеоадаптер с несколькими плоскостями, атрибутами и пр. не вижу, т.к. софта нового скорее всего не будет, а старому и того хватало, переписывать опять же некому :)
-
? anonymous - 14.02.2011 11:50
Самым было бы рациональным для разработчиков БК в плане создания удобств для программистов - задерживать смену выводимого экрана до кадрового импульса аппаратно, для этого всего еще один дополнительный триггер бы потребовался, а вместо DD21.4 надо было бы установить логический элемент, прерывающий сигнал таймера, с заведением 2го разряда DD35 на его вход, а не на DD3.2.RST, первый же разряд подать на вход этого дополнительного триггера, а его тактовый вход соединить с выходом DD3.2, сброс - общий с DD35. Ну и бит read-back'а где-нибудь, чтоб программа знала, что переключение произошло, если прерывание сигнала таймера сделать на элементе с ОК, то остальные элементы этой микросхемы можно было бы использовать для схемы чтения состояния бита, тогда бы сейчас ничего придумывать не приходилось бы вам. Но на 2 микросхемах экономию проявили...
-
? anonymous - 14.02.2011 12:15
P.S. Смысл сего удобства был им неочевиден, т.к. ни частоту разверток, нои частоту таймера они менять не собирались, но все же было бы как во "взрослых" машинах. Таймер - отдельный обработчик исключительно для времени, при том, что его переписывать никак нельзя, т.к. он используется множеством компонент системы, даже в минимальной конфигурации БКшки с однозадачным вариантом ОС на нем сидят и счетчик времени суток, и счетчик таймаута на отключение двигателя дисковода, и задержка при повторе от клавиатуры (последнее - не во всех версиях монитора ОС). Видео - отдельно на усмотрение пользователя, с тем, чтоб программами, работающими с экраном, не нарушать работу часов и таймеров ОС, а в тех же проигрывателях использовать стандартные вызовы ОС, типа .MRKT и пр.
- << Форум