Небольшой вопрос по следующему фрагменту кода в эмуляторе:
if ((pc == 0x8c0548e4) && (code == 0x6022)) code = 0x7001; // Psyvarriar
if ((pc == 0x0C14B2F2) && (code == 0x30E0)) code = 0x0009; // Gigawing 2
if ((pc == 0x8C033792) && (code == 0x30E0)) code = 0x0009; // Jedi Power Battles
Понятно что он делает, но немного неясно значение программного счетчика. Если с адресом 0x0C14B2F2 все более или менее понятно (это адрес из области Main System Memory), то вот с адресами начинающимися с 0x8C как то не очень. Что это за адреса, чему они принадлежат, что на них мэппится?
И еще вопрос. Как это работало на самом Дримкасте? Неужели был какой-то аппаратный прибамбас, который на каждом цикле процессора проверял значение PC и заменял опкод инструкции при совпадении адреса? Если нет, по почему это стало необходимым в эмуляторе?