Closed holub closed 2 years ago
Часто замечаю смещение бордюра налево на 1 точку. Почему - ума не приложу. Что касательно именно пентагоновских таймингов, то там есть особеность в чтении пикселей/атрибутов. Как это сэмулировать, тоже пока не придумал.
Там может смещенте быть на 1,2,3 точки если тайминги перед HALT не кратны 4. Но тут вроде больше чем 1 точка. Может для инструкции спецефичных не правильно tstate эмулируется? Рад, что ты всеже над этим думаешь.
https://hype.retroscene.org/blog/773.html Набрел, может заинтересует
Вывод нового цвета бордюра в Пентагоне не выровнен на границу пикселей растрового поля. Поэтому пиксели бордюра слегка смещены по сравнению с пикселями растра. В частности, в конце демо Rage после остановки вращения сегментов на реальном Пентагоне видно, что вертикальная полоска на бордюре слегка смещена влево, по сравнению с полоской на растровом поле
Так это значит, что у меня всё правильно? :)
Выходит что да, если не брать во внимание, что Rage вообще под эмулем не запускатеся. :D
Rage грешит OUT (#FD),A и не работает на некоторых клонах А насчет вывода я проверил - у меня вообще сделана запись в порт после команды (т.е в конце 3го такта цикла iowr). и всё равно иногда бордюр сдвинут налево. но не везде.
Нет желания сделать поддрежку несколькоих клонов Pentagon? Ну хотябы чтобы 2 было...
Есть вот такая картинка. Не могу быть уверенным насколько она правдива. https://zxuno.com/forum/viewtopic.php?t=122 В эмуле видимый бордюр не в соответсвии с ней рисуется. Другие отсупы.
Поговорил с TmK из deMarche. Он сказал Across the Edge тестили на реальном железе, unreal, fuse. В Xpeccy я вижу на уровне скрина добавляются примерно 2 такта и картинка смещается вправо. (ну или над скрином теряются)
с этой "правдивой" картинкой всё разъезжается намного больше, ещё и по вертикали. попробую менять бордюр после 2го такта цикла iowr, а не после 3го. по идее на эти 2 точки и уезжает. странно, что не везде
0й такт. Захват прерывания происходит на последнем такте команды предыдущего кадра. Но, чтобы он был захвачен, импульс прерывания должен начаться ещё раньше, на предпоследнем такте команды. Т.е. самым первым тактом кадра, при программном выравнивании на начало кадра, фактически является предпоследний такт предыдущей команды. Поэтому, если такты нового кадра в эмуляторе нумеруются с начала цикла подтверждения прерывания, начиная с нулевого (а это практически стандарт), дальнейшие значения нужно уменьшать на 2.
Это не они?
Вот похоже нашел твой один плавающий пиксель: http://web.archive.org/web/20080509193736/http://www.ramsoft.bbk.org/floatingbus.html Тут про 48 и 128, но видимо рыть надо в этом направлении - для #4000 и #5800 отступ разный должен быть.
Последнее, скорее, применимо к медленной памяти и порту FF в ней. Даже если это оно, эффект будет заметен только при изменении экрана прямо под лучом, что маловероятно. Склоняюсь к проблеме с INT на последнем такте команды.
Захват INT на последнем такте ничего не решил. Это бы устранило захват INT-а, который попал на последний такт, но тогда смещение уже было в 8 точек (4 такта на ещё одну итерацию HALT). К геометрии экрана пентагона тоже никаких нареканий, она соответствует той, что описана здесь - https://hype.retroscene.org/blog/773.html Как костыль, можно сделать запись в порт после 2го такта цикла iowr. Сейчас после 3го. Это сдвинет бордюр на 2 точки налево. Других причин, почему имеется расхождение в 1 такт, я пока не вижу.
Славил очень прикольный эффект. Делаю снапшот, загружаю по F3 и каждый раз имею разную картинкую
Со снапшотами вообще мутная тема. Внутри не описано ни положение луча в момент снапшота, ни прошедшие от фронта INT-а такты. Предполагается, что он сделан на фронте INT-а, а по факту - после команды, по окончанию которой он словился. Из-за этого, если в деме не подстроено так, что это одно и то же время (а это хрен подстроишь), то луч плавает туда-сюда на несколько точек.
Нет-нет-нет. Эта картинкт через несколько секунд после восстановления сделаны. Перерывание статичеси сдвигается и экран так и продолжает рендерится до конца.
Я немного не про то. INT может попасть на 1й,2й или 3й такт HALT-а (на 4й, как выяснилось, оно уже не захватится после текущей итерации), который синхронизирует проц с видео. Это уже разница в 6 точек в ту или иную сторону. Сам по себе HALT не значит, что прерывание всегда будет захватываться в одном и том же положении луча. SNA это ну вообще никак не учитывает. ЗЫ: Исправленный IOWR я уже закоммитил
Мне кажется, что я скачки видел в 10 пикселей. Потещу еще. Но на текущий момент твое объяснение звучит правдопадобно.
Всеже ссылки вверху, по-моему, объясняют почему в AtE бордюр сдвинут вправо.
Это да, за 0й такт у меня считается такт на котором прерывание захватилось. Более точно можно смотреть по координатам луча справа. Внутри я не могу контролировать точный такт возникновения прерывания, т.к. каждый такт ничего не проверяется. Только в момент iowr/iord/memwr/memrd, перед последним тактом и после команды. Реализация CPU не потактовая. Предвидя, что "можно определять по отрисованным точкам с момента возникновения прерывания" - нетЪ. Для спектрума и CPU без турбы это сработает (1T = 2 точки), а для всего остального - нет. ЗЫ: Разве что вешать на видео коллбэк в точке INT-а и как-то там шаманить с тактами, потому что к счетчику они прибавляются всё равно после команды.
Так ты уже починил AtE. Почему даже не намекнул? Красота с бордюром неимоверная. Спасибо!
Новый челенж я придумал: https://youtu.be/b-kkzl2foaQ 0:40 - здесь основной картинка "статическая", а в xpeccy моргает. Либо тактов на цыкл не хватает, либо пепеключение экранов не правильно рендерится.
Отключи нофлик в анриле и снова посмотри этот момент. Так можно и в xpeccy его включить и ничего мерцать не будет.
Вот эти полосы как бы намекают, что он был включен при записи
Так ты уже починил AtE. Почему даже не намекнул?
https://github.com/samstyle/Xpeccy/issues/116#issuecomment-841646727
Был бы у меня анрыал на линуксе, я бы хорошим людям мозг не долбил бы. С noflick работает. Есть небольшие подергивания, но я, всеравно, счастлив вопреки этому.
И снова здравствуйте! С прыгающим INT после востановления снэпшота крайне неприятная штука. С одной стороны круто что можно потыкавшись в правильное состояние. Но врядли комуто это нужно - для игрух не критично. Я сохраняю sna из SjAsmPlus и он практически является начальным состоянием как после load "", а бордюр дергается. Может базовай INT всегда сбрасывать в одно состояние после востановления снэпшота?
Если судить по Across The Edge - Pentagon timing не совсем точный. https://zxaaa.net/view_demo.php?id=9284
В ShockMD также бордюр эфект не точен: https://zxart.ee/eng/software/demoscene/demo/shock-megademo/
Это проблема множественных клонов Pentagon, или ошибки в эмуляции?