Это ведь явно признак того, что игра писалась на ассемблере? На Си такого не сделать же?
На чём писали Landstalker, я не знаю. Могли писать на Си + асм или inline асм. Или сишные макросы, не знаю, можно ли так делать.
Сжатый или даже просто динамический код я на Сеге не видел, но сильно не изучал этот вопрос. Зачем сжимать код, если РОМ достаточно большой, доля кода в роме обычно 10%, а оперативки как раз не очень много. А лишняя возни. Лучше данные сжимать.
Имхо, надо переходить на модульные и открытые решения, интерактивные языки, interoperability / межпроцессное взаимодействие, специализированные продукты под разные нужды вроде баз данных. Сегодня ПК достаточно мощные, тем более, интерактивные языки нужны только для отладки, а не всей эмуляции. Кстати, в Visual Studio есть интерактивный режим C#, но куцый, а ещё перекомпиляция методов на лету в отладочном режиме.
Условно, VS Code + node.js / Javascript / IPython + терминалы + QT/TK + база данных + переписанный эмулятор со всеми нужными хуками, ну либо уже специально написанный под это дело, но это долго (но может, ИИ сам перепишет с C++ на Питон?

) Хотя переделывать тоже сложно. Под каждую из старых консолей сегодня есть с десяток эмуляторов, в каждом по паре тысяч файлов и под 100-300 тысяч строк сишного кода, ковыряться в этом ну то ещё занятие. А так на данный момент мы имеем emulator-lock: в каждом эмуляторе авторы слепили свой отладчик, свои окна, свой функционал, вот пользуйся тем, что есть. И везде, блин, надо кликать мышкой. Никакой автоматизации. Хочешь что-то своё - ковыряй ИХ эмулятор в ИХ языке и доделывай ЕГО. Ну максимум плагин могут позволить написать. С ИХ интерфейсом.
VS Code я сам не люблю, но других альтернатив не знаю.
Javascript и Python медленные, у них свои приколы, но они гибкие. В Питоне есть разные костыли для быстрого кода.
Julia интерактивно компилируемая, но весьма деревянная и совсем не такая удобная и быстрая, как может показаться, и это вообще не типичный язык программирования. Это смесь из парадигм / научные расчёты / Fortran-стиль / математические символы / ещё хрен пойми что. Это язык не для программистов.
Mojo уже 3-й год как в разработке, куча "сахара" для низкого уровня, не такой гибкий, как Python. Но зато супер-быстрый. Можно из него вызывать Питон, а наоборот - нет, увы. Под винду не сделали. Собрать библиотеку нельзя. У авторов своё видение вектора развития.
Про Lua не скажу.
Для базы данных: SQlite / DuckDB / Clickhouse / NoSQL (графы для анализа, вектора для эмбеддингов) / wide-column (?)
IDA - это громоздкая закрытая программа, и по-моему изначально сделана для другого. Много лет назад читал интервью Ильфака, он сказал, что там 300 тысяч строк сишного кода. Сегодня ещё больше, наверно. Я не спорю, это м.б. мощный инструмент в умелых руках и для конкретных дел, но мне она не нравится. И доработки сложные. Посчитайте сами. Эта тема появилась 10 лет назад. Плагин gensida - 10 тысяч строк, внутри Генса вижу 2 файла ida* - ещё пара тысяч, ещё лоадеры - пара тысяч, и ещё я наверно что-то не учёл. Сколько времени уйдёт у человека, который не сишник, мало знаком с ИДОй, не знает досконально архитектуру приставки, не знаком с написанием плагинов для ИДЫ и исходниками Генса? Несколько месяцев упорного труда? Год? И всё это всего лишь, чтобы скрестить эти 2 программы.
Что в ней есть такого для отладки Сеговских игр? Прямой анализатор кода? Это 20 строчек на Питоне, если уже реализована функции is_valid_opcode и parse_opcode, а их можно взять в модульном дизассемблере / отладчике / эмуляторе. Анализатор от противного, что делал я? Ну, 50 строчек. Редактирование текста? Ну. Граф условных переходов внутри субрутины? Я всегда путаюсь, как понимать все эти BCC, BCS и т.д. Можно сделать простейший декомпилятор, которые перепишет всё на нормальные if, и граф не нужен. На худой конец ИИ это может сделать. Граф зависимостей всех субрутин? Когда их тысяча, это не работает, получается жуткая каша.
Сколько времени занял дизасм одного Соника? В начале 2000-х один чувак по несколько месяцев, что ли, тратил на каждую часть, что-то покомментил, потом коммьюнити допиливало. До сих пор допиливают. Результат: пара мегабайт исходник Соника 1, десятки тысяч строк кода на асме с комментами плюс куча вставок. Если хочешь сделать "масштабный мод", сиди в этом тоже ковыряйся.
Чтобы быстро делать "масштабные моды", надо уходить от концепции делать хак игры для нативной платформы. Я вижу такие варианты:
- переделывать всё в родном асме + м.б. вставки скомпилирванного Си, но целевая платформа - всё равно нативная. В нашем случае, Сега. Очень долго, сложно, нужен аккуратный дизасм и аккуратные вставки, чтобы не сломать фиксированные адреса, упираемся в ограничения железа, но можно запускать на железе / железном эмуляторе / обычном эмуляторе.
- рекомпилить всю игру на ЯВУ (язык высокого уровня) и моддить уже её. Очень много сложностей, сделать автоматически почти нереально на сегодня. Плюс в эту полученную программу надо по сути включить всё поведение эмулятора.
- гибрид ближе к нативному исполнению. Незатронутый машинный код выполняется нативно в эмуляторе, моднутый код выполняется в "расширенном режиме" на произвольном языке. Надо сильно переделывать эмуляторы.
- гибрид ближе к ЯВУ. Весь код выполняется на ЯВУ, но оригинальные ассемблерные инструкции эмулируются. Хочешь написать ЯВУ-шный код - пожалуйста. Гибридный код может выглядеть так
# эмуляция ассемблерной команды add.l (A0)+, D0
# здесь на входе, конечно же, не сама строка, а либо двоичные данные,
# либо уже распарсенные детали инструкции
run_asm( "add.l (A0)+, D0" )
# высокоуровневый код
unpacked_sprite = unzip( packed_sprite )