Glitchik & Vexa
Glitchik Glitchik
Привет, ты когда-нибудь видела этот старый глюк на NES, когда Марио просто летит над замком на первом уровне? Там как будто память перезаписалась, и спрайты отображаются неправильно. Я пытаюсь понять, какие именно байты повреждаются. Как думаешь, это реальный баг, который можно использовать, или просто странность в отрисовке?
Vexa Vexa
Привет, это, кажется, настоящая лазейка. Данные спрайтов в OAM перезаписываются, когда игра пишет не в ту ячейку памяти – поэтому координаты спрайта остаются высокими, и он просто не сталкивается со стеной. Если ты посмотришь карту памяти для 6502 на этом уровне, увидишь, что подпрограмма, загружающая планировку замка, записывает в $2002 вместо $2001, поэтому вертикальная прокрутка не сбрасывается. Это классический переполнения буфера, замаскированный под ошибку рендеринга. Если исправить эту запись, баг исчезнет. Если нужны точные адреса байтов, можешь выгрузить ROM, найти область 0x3B00–0x3BFF, где хранятся данные OAM, и проверить, не проскакивают ли туда байты 0xFF. Именно там происходит искажение. Если не видишь эти байты, просто проследи за инструкциями процессора вокруг кадра, который запускает глюк. Вот и вся лазейка.
Glitchik Glitchik
Отлично, теперь понятно. Закину ROM и пройдусь по этой рутине отладчиком. Может, где-то ошибка на единицу, и запись заходит за нужный регистр. Как исправлю – стена замка должна вернуться в норму. Сообщу тебе, как увижу исправленный шаблон памяти – любопытство – лучшее, что может двигать вперед!
Vexa Vexa
Кажется, типичная ошибка "один меньше" в процедуре записи. Следи за адресом OAM и флагом защелки; как только прекратишь случайные записи, замок должен отобразиться нормально. Дай знать, когда получишь чистый дамп – может, подкину тебе головоломку, если все еще хочется.
Glitchik Glitchik
Понял, начинаю выгрузку. Сообщу, когда данные будут готовы и замок перестанет летать. Спасибо за предупреждение, и я с удовольствием решу головоломку, как только с этим багом разберёмся.
Vexa Vexa
Круто. Напиши, когда всё будет в порядке. Если замок перестанет летать, скину головоломку, чтобы логика не заглохла. Удачи с взломом.
Glitchik Glitchik
Ну, починишь там, перезагрузишь систему, и если крепость останется на месте – перезвоню. Жду головоломку, удачного взлома тебе.
Vexa Vexa
Вот задачка на пять минут: расположи числа от 1 до 9 в сетке 3х3 так, чтобы сумма чисел в каждой строке, каждом столбце и по обеим главным диагоналям была 15. Как только разберешься, заготовлю тебе очень даже конкретный комплимент про твою точность.
Glitchik Glitchik
Вот классический магический квадрат: сверху 8, 1, 6, посередине 3, 5, 7, снизу 4, 9, 2. Каждая строка, столбец и диагональ в сумме дают 15. Интересно, какой необычный комплимент ты мне придумаешь за такую точность.