Просмотр полной версии : Вопрос по синхронизции с прерываниями
Как известно команда HALT ждет прерывания, но прерывание начинается со смещением по тактам 0..+3 от синхроимпульса.
Чтобы всегда было одно и тоже значение надо использовать код кратный по тактам 4, но если это не всегда возможно, то по идее если строить на бордере out`ами чтото, то оно будет плавать...
Тема уже поднималась, но там так и не дали нормального решения вопроса. Можно ли сделать синхронизацию с помощью регистра R скажем? Где про него почитать желательно на русском?
И еще вопрос - какова попиксельная ширина/высота экрана с учетом бордера? (и какова видимая область?)
null_device
21.11.2010, 02:21
Можно ли сделать синхронизацию с помощью регистра R скажем? Где про него почитать желательно на русском?
Теоретически - думаю, как-то использовать регистр R для синхронизации, возможно. Вскользь о нем упоминается в книжке Ларченко/Родионова: ..Младшие семь разрядов этого регистра увеличиваются на еденицу, после выполнения очередной команды (точнее - цикла М1) микропроцессора... Более детально - расписано в даташите на МП (сколько циклов выполняется та, или иная команда и т.п.) - на Virtual TR-DOS в разделе books она, по-любому есть.
какова попиксельная ширина/высота экрана с учетом бордера? (и какова видимая область?)
Зависит от модели (реализации узла видеоконтроллера). В одном из ZX-Ревю озвучивались параметры по Пентагон 128 и "желтому" Scorpion.
в zx ревю был описан метод синхронизации отрисовки с точностью до такта
кстати ниже - в разделе программирование оно на форуме есь
А что - 0..3 такта так критично? Это для мульки какой то что ли? Даже для мульки... это около 6 пикселей... сильно критично?
А что - 0..3 такта так критично? Это для мульки какой то что ли? Даже для мульки... это около 6 пикселей... сильно критично?
Для мультиколора, имеющего видимые вертикальные преходы, критичен каждый такт.
ставлю на то, что R вам ну никак не поможет.
Как известно команда HALT ждет прерывания, но прерывание начинается со смещением по тактам 0..+3 от синхроимпульса.
и это если я не ошибаюсь только на наших клонах. на фирменных моделях (судя по выводу на бордюр) смещения нет
---------- Post added at 16:37 ---------- Previous post was at 16:35 ----------
И еще вопрос - какова попиксельная ширина/высота экрана с учетом бордера? (и какова видимая область?)
для Пентагона вот http://www.worldofspectrum.org/rusfaq/index.html#21
и это если я не ошибаюсь только на наших клонах. на фирменных моделях (судя по выводу на бордюр) смещения нет
как раз наоборот. на всех фирменных Z80 HALT занимает ровно 4 такта, и по-этому, есть смещение.
а на каком-то советском клоне z80 HALT исполнялась с точностью до такта, так что не надо было "настраиваться" для вывода на бордер.
в zx ревю был описан метод синхронизации отрисовки с точностью до такта
кстати ниже - в разделе программирование оно на форуме есь
Как примерно тема называется? я помню что вроде чтото упоминалось, но не нашел((
А что - 0..3 такта так критично? Это для мульки какой то что ли? Даже для мульки... это около 6 пикселей... сильно критично?
критично ли когда статичная картинка будет дергаться на эти 6 пикселов?
ставлю на то, что R вам ну никак не поможет.
Мне когда-то именно регистр R и помоагал, на сколько я помню.
Нашел тему, прям перед глазами лежала))
http://zx.pk.ru/showthread.php?p=333333
Там кстати и высказал мысли по поводу устранения этого дрожания
критично ли когда статичная картинка будет дергаться на эти 6 пикселов?
Избегай этого. Обойди как нибудь. Для реалов картинка будет плясать от модели к модели.
Для реалов картинка будет плясать от модели к модели.
нет, если реалы - одинаковые модели.
к примеру, если есть два пентагона, то на них ничего плсать не будет.
и таки да, проверено.
на фирменных моделях (судя по выводу на бордюр) смещения нет
Да, там смещение меньше, чем 4 такта не сделаешь, проверено. А на наших клонах (не на всех конечно) минимальное смещение 2 пиксела. дальше 2,4,6,8... и т.д.
многие годы бордерные эффекты синхронизируют (при этом сам эффект будет исполняться с точностью до 4 тактов. при этом время исполнения может изменяться в широком диапазоне, но должно оставаться кратным 4), применяя код вида (реально использованный код):
;подстройка под начало отсчета
DUP 2 ;1й раз подготовка R по тактам, 2й раз установка в C - "кол-во команд в прерывании"
EI: HALT
LD A,R,C,A
JP $+3
INC HL: LD A,0,R,A
JP $+3
EDUP
sync EI: HALT ;время исполнения тоже(^^^)+1 такт
LD A,R: CP C
JP NZ,mloop ;начало отсчета, стартуем
LD A,0,A,0,R,A
JP sync
внимательно анализируя код становится понятно, что psb на 100% прав:
ставлю на то, что R вам ну никак не поможет.
и к сожалению этот путь (с использованием регистра R) точно утопичен. однако всем бы хотелось иметь нормальное рабочее решение. быть может и вправду стоит поднять старые статьи из zx-ревю как советует jerri? вот только мне что-то подсказывает, что ничего нового, к сожалению там не будет.
Товарищи, давным давно уже синхронизация была с точностью до такта, а не до четырех. Загляните хотя бы в Insult мегадемо, скрытую часть. Уверен, что у RST7 там все до такта.
---------- Post added at 12:44 ---------- Previous post was at 12:40 ----------
Или в демке 'Rage' от X-Trade, в последней части.
Но увы эти люди наследство не передадут потомкам как это они Зделали!
Но увы эти люди наследство не передадут потомкам как это они Зделали!
А посмотреть в код?
А я использую для синхронизации такую п/программку. В своё время "стырил" у Code Busters. Ни разу не подвела. Всегда пиксел в пиксел.
Titus - "Товарищи, давным давно уже синхронизация была с точностью до такта, а не до четырех. Загляните хотя бы в Insult мегадемо, скрытую часть. Уверен, что у RST7 там все до такта."
Наверне это она и есть.
Но увы эти люди наследство не передадут потомкам как это они Зделали!
Исходники RAGE летали по фидо. Но не уверен что там была бордюрная часть.
Она есть, без коментариев. Можно вместе разобрать, или кто умеет легко читать чужой код пусть напишет внятные коментарии
я использую для синхронизации такую п/программку. В своё время "стырил" у Code Busters. Ни разу не подвела. Всегда пиксел в пиксел.
приведенный мной (чуть выше) участок кода аналогичен. естественно, что этот код позволяет подогнать с точностью до пиксела бордюрные эффекты и до такта начало отсчета, но смысл в другом - сама прога после этого должна будет выполняться за время (в тактах) кратное 4 (вспоминаем команду HALT). при этом еще раз хочу отметить, что время исполнения кода из фрейма в фрейм может отличаться, но должно оставаться кратным четырем.
---------- Post added at 13:52 ---------- Previous post was at 13:46 ----------
GM BIT, есть заincbinеные файлы? хочется проверить код в действии.
---------- Post added at 14:01 ---------- Previous post was at 13:52 ----------
GM BIT, судя по исходнику музон раскрянченный это раз, одна из основных причин - экономия тактов (хотели плеер музыки за стабильные 800-1000 тактов? получите, распишитесь...), но в его плеере наблюдаем подгонку под одинаковое время выполнения - два. скорее всего про волшебство стоит забыть.
---------- Post added at 14:24 ---------- Previous post was at 14:01 ----------
с удовольствием бы ошибся, однако, сами эффекты вполне располагают к оптимизации кода к кратности четырем.
есть заincbinеные файлы?
Сейчас проверил все работет, файл PR
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot