Пишу просто чтобы поделиться, до чего может довести кризис среднего возраста. А заодно, может быть, найти единомышленников для проекта (если это вообще кому-то покажется дееспособным). Сам не являюсь кодером, максимум что освоил — веб-разработку и простенькое ПО.
В общем, в качестве эксперимента решил проверить AI-редактор Cursor. Потратил на генерацию энное количество учетных записей и месяц времени, и получилось то что получилось.
Концепция фронтендаМинималистичный интерфейс чисто под любимую на пространствах бывшего СНГ SMD и, возможно, немножко Mega CD. Для эмуляции использовать самое актуальное ядро — Genesis Plus GX. В настройках использовать только самое необходимое и характерное для SMD. Сделать просто хороший полноэкранный OneSystem ретроарч с обложками и базовыми метаданными. Чтоб без пердолинга — запустил и играй. И при этом чтоб красиво. Что-то типа Sega MD Mini, но на ПК.
Инструментарий — Cursor App + LOVE2DCursor App задуман как AI-ассистент, чтобы помочь прогерам выполнять рутинные задачи, но на практике он может помочь и такому не программисту, как я, написать с нуля сабж.
LOVE2D — движок (фреймворк) для языка Lua. Имеет как плюсы, так и минусы. Для меня главный плюс в том, что не надо настраивать среду разработки, а еще я однажды уже модил фронтенд на этом же LOVE2D. Можно прям сырцы запускать. Легко собрать приложение, хотя повторюсь, можно и так запускать через батник без сборки.
Было бы лучше выбрать родной для libretro C++, но это для меня совсем уж темный лес.
Что реализовано сейчас-Вывод изображения
Только целочисленное масштабирование в двух возможных для ядра параметрах (PAL и NTSC).
PAL на широких мониторах смотрится более удобоваримо. Многие объекты в игре при таком соотношении сторон имеют правильные формы кругов, квадратов и т.п. Для любителей NTSC есть NTSC, который по сути является около 4:3.
-Фильтры
Есть blargg ntsc filter (только композит и тот для дизеринга). Встроенные фильтры, они же шейдеры — есть возможность прикрутить шейдеры glsl, на данный момент внедрил шейдер crt-easymode.glsl прямо в код + билинейная фильтрация. Если очень коротко — love2d не сможет в навороченные slang шейдеры. Для этого нужно было писать на плюсах, а это для моего ума — высшая магия.
Была попытка сделать комбинацию из gdapt (для дизеринга) и crt-easymode, но gdapt не удалось сделать толковым. Он то все смешивает, и получается мыло, то не совсем все, и получается полудизеринг. Так что на данный момент реализовано все минимально в этом плане. Чтобы реализовать самые толковые фильтры — нужен переезд на плюсы, поэтому в плане шейдеров все будет аскетично.
-Звук
Он тут есть, и на этом все. Наблюдаются проблемы с синхронизацией иногда, пока не понятно из-за чего.
-Управление
При первом включении фронтенд предлагает вам забиндить кнопки ABCXYZ и т.д. Далее все это дело просто работает, как и задумано, без дополнительных настроек и ремапов. Можно настроить как одного, так и двух игроков.
Настройки управления (имя + ID геймпада + маппинг) сохраняются в конфиг в директории приложения. В него же позже будут подтягиваться другие настройки.
-Функции ядра
Сохранение и загрузка SRAM
Сохранение и загрузка квик-сейвов (1 слот)
Перемотка вперед/назад (по горячим клавишам)
ПроблемыПрежде чем внедрять что-то еще и полировать результат, решил плотно потестировать производительность, и понял, что не так уж все радужно, как казалось поначалу. Наблюдаю иногда рассинхрон звука. Если пытаться мониторить с FPS Monitor, то еще и микрофризы появляются. При включении настройки VDP=50Hz наблюдается неравномерная скорость музыки. Не форсится частота экрана на монитор. У меня он 180 Гц, 180 и показывается всегда.
В общем, самая базовая база, а именно правильная работа с ядром, видимо, реализована на троечку. И никакой анализ через нейросети и попытки что-то улучшить в этом плане меня уже никуда не приводят. Это опять же очень сложный для меня раздел, так что я даже в теории не могу представить, как это все вообще должно быть организовано и подходящий ли вообще выбрал путь.
Так зачем, собственно, пишу это. Возможно, среди нас есть умельцы, кто хоть как-то понимает — как должно работать ядро. Как правильно все сделать и оптимизировать. Если вам интересно, можно попробовать вытащить это, и, может быть, получится нужная и интересная штука. А если нет — я еще попробую какое-то время, но скорее всего заброшу. Ибо уперся в потолок своих мозгов. Возможно не стоило вообще на этом lua писать. Очень много вопросов.

Весь код разбит на модули. Исходники пока не хочу публиковать, уж слишком там все страшно. Хочу сперва изучить интерес.
Не исключаю, что идея тупая лезть в такое без навыков вообще.