Ни один из этих терминов не подходит для ошибки в аркадной игре, которая была запрограммирована на ассемблере и работает без использования аппаратных средств защиты памяти или операционной системы.
«Неопределенное поведение» - это термин «искусство» на C и родственных языках, разработанный Комитетом по стандартам C еще в 1989 году. Код имеет неопределенное поведение, когда спецификация языка не определяет, что он будет делать. В ассемблере Z80 такого нет: эффект каждого кода операции с каждым возможным вводом четко определен. Общепринятое английское значение «неопределенного поведения» можно прочитать, чтобы применить - экран уничтожения - это поведение, не определенное людьми, которые написали игру, - но я бы не стал использовать его в этом контексте, потому что это слишком вероятно, чтобы дать неверное представление впечатление.
«Ошибка сегментации» - это современный термин в POSIX, полученный в конечном итоге из жаргона программирования системы PDP. Ошибки сегментации возникают, когда программа пытается получить доступ к адресу памяти, который ни на что не «привязан»: аппаратное обеспечение и операционная система обнаруживают это и закрывают неисправную программу тщательно определенным способом, который дает программе возможность восстановить , Что-то вродеэто могло произойти из-за ошибки в игровой программе Pac-Man, потому что печатная плата Pac-Man заполняет чуть менее половины 64-килобайтного адресного пространства Z80 ПЗУ, ОЗУ и периферийными устройствами, но у меня нет Я не смог выяснить, что будет делать реальное оборудование, если оно попытается получить доступ к неотображенной памяти. Что бы это ни делало, это было бы неуместно называть «ошибкой сегментации», потому что «операционная система» для Pac-Man (в той степени, в которой она даже есть ) не является реализацией Unix и, опять же, она даст неправильное впечатление.
Между тем, ошибка уровня 256 не позволяет получить доступ к неотображенной памяти, поэтому это спорный вопрос.
Можно с уверенностью сказать, что в игре есть ошибка, которая проявляется при переходе на уровень 256. Также можно с уверенностью сказать, что основной причиной ошибки является целочисленное переполнение и что ее последствия - повреждение памяти (или, что то же самое, нарушение из памяти и безопасности типа ). Все это термины CS общего назначения, определенные без ссылки на какой-либо конкретный язык или среду ОС.
Точно также можно заметить, что последствия ошибки аналогичны последствиям в современной среде ошибок повреждения памяти, которые не вызывают ошибок сегментации. Если вы прочтете какие-либо описания эксплойтов Project Zero , вы увидите замечательное сходство с анализом Дона Ходжеса экрана убийства Pac-Man .
Обратите внимание, что эмулятор, который точно не воспроизводит экран уничтожения при загрузке ПЗУ Pac-Man, неправильно эмулирует игровое оборудование.