Zintor & MegaMan8
Zintor Zintor
Привет, я копался в старых ромов – похоже, там какая-то цифровая душа раскололась на осколки. Ты когда-нибудь сталкивался с битым спрайтом, который зациклился, как пиксельный сбой, который не хочет исчезать?
MegaMan8 MegaMan8
Да, эти зависшие спрайты – просто кошмар. Как будто зацикленный баг, который не устраняется, и каждый пиксель не на месте. У меня даже таблица, в которой я фиксирую каждую аномалию и проверяю её кадр за кадром. Скучно, конечно, но я обычно улавливаю закономерность – чаще всего это проблема с таймингом в рутине рендеринга. Запущу ROM под отладчиком, пройдусь по обновлению спрайтов, посмотрю, где данные сбиваются. Если ты пришлешь конкретный кадр или адрес, я быстро найду причину. Бесит, конечно, но как только исправлю, вся сцена заработает как часы. Давай детали, и мы выловим этого глюка.
Zintor Zintor
Кажется, ты всё делаешь правильно – отслеживай каждое изменение, даже самое незначительное. Главное – фиксируй точное количество циклов при загрузке данных спрайта и при его отрисовке. Даже один цикл может всё испортить. Если пришлешь номер кадра и адрес памяти, где хранятся атрибуты спрайта, я быстро проверю разницу здесь, на своей стороне, и посмотрю, есть ли постоянный сдвиг. Только не забудь фиксировать количество циклов процессора для каждого шага – обычно там и проявляется проблема с таймингом. Давай посмотрим, что у тебя получилось.
MegaMan8 MegaMan8
Конечно, сейчас гляну логи. Запишу точный цикл, когда спрайты загружаются в память по адресу $0040, и цикл, когда они впервые отображаются на экране. Сделаю короткий дамп для кадра 128 и отправлю тебе дамп с указанием смещений циклов. Просто будь внимателен на сдвиги на один или два цикла — обычно они все портят. Как только выровняем, глюк должен пропасть. Если не поможет, подкорректируем тайминги. Погоди немного, данные через минуту будут у тебя.
Zintor Zintor
Понял—жду выгрузку. Если сдвиг цикла всего один, возможно, придётся подправить обработчик прерываний или триггер спрайтов DMA. Следи за таймингом VBLANK, он часто сбивается на один такт. Как только пришлёшь данные, проверю расчёты и посмотрю, сходятся ли они с ожидаемой работой конвейера отрисовки. Спасибо, что поддерживаешь таблицу в порядке; такой уровень детализации обычно решает эти странные графические артефакты. Давайте сделаем всё правильно.
MegaMan8 MegaMan8
Всё, дампы будут через пару минут. Запишу цикл загрузки на $0040 и цикл рендеринга, потом сравним с таймингом VBLANK. Как только отправлю цифры, посмотрим, проявится ли ошибка смещения на один в окне прерываний. Таблица открыта, будем отслеживать каждый байт и каждый цикл. Разберёмся с этой заглючкой вместе.
Zintor Zintor
Конечно, скидывай номера, как будешь готов. Я свежу с графиком VBLANK и посмотрю, не выбился ли по одному в окно прерывания. Как выровняем циклы, спрайт заработает. Давай данные.