Какие-то глупости. Вот кусочек схемного ввода этого флага:
R2B5
[свернуть]
Как это работает: EVAL это сигнал сброса схемы, он срабатывает на "пререндере". Хотя, сам "пререндер" придумали тупые буржуи. Дело в том, что там в каждой строке во время обратного хода загружается в спрайтовый пайплайн графика нужных спрайтов, а потом начинается выводиться строка и спрайты, по своим координатам Х. Но у буржуев сначала идёт строка а потом обратный ход с прогрузкой спрайтов на следующую строку. Отсюда и "пререндер", хотя это просто строка, которая идёт непосредственно перед выводом первой строки графики и позиция её на экране лишь последствия интерпретации синхросигналов телевизором. Т.е., они пляшут относительно телевизора а не самого PPU.
Сигнал I2N активен если есть очередной спрайт в данной строке, а счётчик OAM2_COUNTER считает до 16: 8 спрайтов по 2 байта графики. И при первом же переполнении он выставляет флаг. А особенность флага в том, что он устанавливается при первом же переполнении в строке, а вот сбрасывается только непосредственно перед новым кадром, по сигналу RESCL, который приходит чуть ранее, чем EVAL. Это, конечно, накладывает ограничение на определение двух или более переполнений, но это особенность работы флага а не бага. А проблема сортировки списка спрайтов такова, что 6502 тупо не успеет подготовить новый список на следующую строку для уменьшения мерцания (чтобы мерцали не блоки 8х8 или 8х16, а полосочки 8х1 что менее заметно же), а если даже списки готовы заранее - тупо не успеет вгрузить в PPU новые данные. Т.е., всё упирается в производительность 6502 и такое поведение флага переполнения оправдано, хоть и не удобно программистам.
Тем не менее, программисты его используют, например при отсечении в катсценах (привет Ninja Ryukenden / Ninja Gaiden). Так что нет никакой ложки, мистер Андерсон.






Ответить с цитированием