PDA

Просмотр полной версии : Вопрос по синхронизции с прерываниями



TmK
21.11.2010, 01:54
Как известно команда HALT ждет прерывания, но прерывание начинается со смещением по тактам 0..+3 от синхроимпульса.
Чтобы всегда было одно и тоже значение надо использовать код кратный по тактам 4, но если это не всегда возможно, то по идее если строить на бордере out`ами чтото, то оно будет плавать...
Тема уже поднималась, но там так и не дали нормального решения вопроса. Можно ли сделать синхронизацию с помощью регистра R скажем? Где про него почитать желательно на русском?

И еще вопрос - какова попиксельная ширина/высота экрана с учетом бордера? (и какова видимая область?)

null_device
21.11.2010, 02:21
Можно ли сделать синхронизацию с помощью регистра R скажем? Где про него почитать желательно на русском?

Теоретически - думаю, как-то использовать регистр R для синхронизации, возможно. Вскользь о нем упоминается в книжке Ларченко/Родионова: ..Младшие семь разрядов этого регистра увеличиваются на еденицу, после выполнения очередной команды (точнее - цикла М1) микропроцессора... Более детально - расписано в даташите на МП (сколько циклов выполняется та, или иная команда и т.п.) - на Virtual TR-DOS в разделе books она, по-любому есть.


какова попиксельная ширина/высота экрана с учетом бордера? (и какова видимая область?)

Зависит от модели (реализации узла видеоконтроллера). В одном из ZX-Ревю озвучивались параметры по Пентагон 128 и "желтому" Scorpion.

jerri
21.11.2010, 09:28
в zx ревю был описан метод синхронизации отрисовки с точностью до такта
кстати ниже - в разделе программирование оно на форуме есь

GriV
21.11.2010, 13:39
А что - 0..3 такта так критично? Это для мульки какой то что ли? Даже для мульки... это около 6 пикселей... сильно критично?

Titus
21.11.2010, 13:41
А что - 0..3 такта так критично? Это для мульки какой то что ли? Даже для мульки... это около 6 пикселей... сильно критично?

Для мультиколора, имеющего видимые вертикальные преходы, критичен каждый такт.

psb
21.11.2010, 15:28
ставлю на то, что R вам ну никак не поможет.

goodboy
21.11.2010, 16:37
Как известно команда HALT ждет прерывания, но прерывание начинается со смещением по тактам 0..+3 от синхроимпульса.

и это если я не ошибаюсь только на наших клонах. на фирменных моделях (судя по выводу на бордюр) смещения нет

---------- Post added at 16:37 ---------- Previous post was at 16:35 ----------


И еще вопрос - какова попиксельная ширина/высота экрана с учетом бордера? (и какова видимая область?)

для Пентагона вот http://www.worldofspectrum.org/rusfaq/index.html#21

Sinus
21.11.2010, 16:51
и это если я не ошибаюсь только на наших клонах. на фирменных моделях (судя по выводу на бордюр) смещения нет

как раз наоборот. на всех фирменных Z80 HALT занимает ровно 4 такта, и по-этому, есть смещение.
а на каком-то советском клоне z80 HALT исполнялась с точностью до такта, так что не надо было "настраиваться" для вывода на бордер.

TmK
21.11.2010, 16:58
в zx ревю был описан метод синхронизации отрисовки с точностью до такта
кстати ниже - в разделе программирование оно на форуме есь

Как примерно тема называется? я помню что вроде чтото упоминалось, но не нашел((


А что - 0..3 такта так критично? Это для мульки какой то что ли? Даже для мульки... это около 6 пикселей... сильно критично?

критично ли когда статичная картинка будет дергаться на эти 6 пикселов?

Titus
21.11.2010, 17:09
ставлю на то, что R вам ну никак не поможет.
Мне когда-то именно регистр R и помоагал, на сколько я помню.

TmK
21.11.2010, 17:34
Нашел тему, прям перед глазами лежала))
http://zx.pk.ru/showthread.php?p=333333

Там кстати и высказал мысли по поводу устранения этого дрожания

GriV
23.11.2010, 22:16
критично ли когда статичная картинка будет дергаться на эти 6 пикселов?
Избегай этого. Обойди как нибудь. Для реалов картинка будет плясать от модели к модели.

Sinus
23.11.2010, 22:52
Для реалов картинка будет плясать от модели к модели.

нет, если реалы - одинаковые модели.
к примеру, если есть два пентагона, то на них ничего плсать не будет.
и таки да, проверено.

VNN_KCS
24.11.2010, 01:00
на фирменных моделях (судя по выводу на бордюр) смещения нет
Да, там смещение меньше, чем 4 такта не сделаешь, проверено. А на наших клонах (не на всех конечно) минимальное смещение 2 пиксела. дальше 2,4,6,8... и т.д.

pulsar
26.11.2010, 12:20
многие годы бордерные эффекты синхронизируют (при этом сам эффект будет исполняться с точностью до 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? вот только мне что-то подсказывает, что ничего нового, к сожалению там не будет.

Titus
26.11.2010, 12:44
Товарищи, давным давно уже синхронизация была с точностью до такта, а не до четырех. Загляните хотя бы в Insult мегадемо, скрытую часть. Уверен, что у RST7 там все до такта.

---------- Post added at 12:44 ---------- Previous post was at 12:40 ----------

Или в демке 'Rage' от X-Trade, в последней части.

GM BIT
26.11.2010, 21:33
Но увы эти люди наследство не передадут потомкам как это они Зделали!

Titus
26.11.2010, 23:10
Но увы эти люди наследство не передадут потомкам как это они Зделали!

А посмотреть в код?

VNN_KCS
27.11.2010, 13:46
А я использую для синхронизации такую п/программку. В своё время "стырил" у Code Busters. Ни разу не подвела. Всегда пиксел в пиксел.
Titus - "Товарищи, давным давно уже синхронизация была с точностью до такта, а не до четырех. Загляните хотя бы в Insult мегадемо, скрытую часть. Уверен, что у RST7 там все до такта."
Наверне это она и есть.

newart
27.11.2010, 22:30
Но увы эти люди наследство не передадут потомкам как это они Зделали!
Исходники RAGE летали по фидо. Но не уверен что там была бордюрная часть.

GM BIT
28.11.2010, 05:58
Она есть, без коментариев. Можно вместе разобрать, или кто умеет легко читать чужой код пусть напишет внятные коментарии

pulsar
28.11.2010, 12:24
я использую для синхронизации такую п/программку. В своё время "стырил" у 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 ----------

с удовольствием бы ошибся, однако, сами эффекты вполне располагают к оптимизации кода к кратности четырем.

GM BIT
28.11.2010, 12:35
есть заincbinеные файлы?
Сейчас проверил все работет, файл PR