Я продолжаю тему программного эмулятора для PlayStation 2 и PlayStation Portable — Omega Red. Более подробно:
- PS2/PSP эмулятор + game play streaming (YouTube, Facebook, Twitch) = новая версия Omega Red
- PS2/PSP эмулятор + Google Drive + YouTube = «безумие» продолжается
- Как я подружил PlayStation 2 и PlayStation Portable (спойлер — объединил в один эмулятор)
- Красный Омега PS2 эмулятор
Данную публикацию я написал в связи с добавлением программного эмулятора для PlayStation 1.
Добро пожаловать под «кат».
Как понятно из заголовка — данная статья представляет результат моего исследования в интеграции PCSX-Reloaded эмулятора PlayStation 1. Идея добавить поддержку эмуляции первой игровой приставки линейки PlayStation логична, однако при попытке реализации возникла проблема — OpenSource версия лет 15-ть, как перестала поддерживаться сообществом и интеграция в проект с технологиями DirectX11 и WPF представила реальную проблему. Версия видео рендерера представлена в виде программной реализации и после создания итогового изображения в системной памяти этот результат копируется в видео память DirectX11. На первый взгляд подобное решение кажется не эффективным, но оно позволяет использовать уже отлаженный код программного рендерера, и для первой версии более чем подходящее решение.
Дополнительно я добавил ряд функций для совместимости с PCSX-Reloaded:
- Визуальная вибрация — игровой контроллер «Dualshock» для игровых приставок линейки PlayStation имеет функционал «обратной отдачи» для более глубокого погружения игровой процесс. Эмулятор Omega Red поддерживает подобную функцию для внешнего игрового контроллера, но «обратная отдача» для сенсорного экрана пока что из области фантастики. Однако, исследуя код PCSX-Reloaded я наткнулся на указатель функции обратного вызова от эмулятора игрового контроллера к графическому рендереру. Идея отображать «обратную отдачу» через визуальную трансформацию изображения занятна и я решил реализовать её в своём проекте.
- Общая карта памяти — оригинальный проект Omega Red создаёт карту памяти для игры на основе уникального серийного номера игрового диска, что позволяет предотвратить затирание сохранения одной игры из игровой сессии другой игры. Этот приём работает для игр PlayStation 2, занимающие один диск DVD, но в случае с играми PlayStation 1 возникает проблема переноса сохранения с игровой сессии на одном диске на игровую сессию на другом игровом диске — игры на PlayStation 1 могут занимать два и более диска. Для решения подобной проблемы я добавил общую карту памяти.
Кроме требований совместимости, я добавил несколько общих улучшений, среди них:
- Выбор видео битрэйта для видео записи игрового процесса:
Выбор размера целевого файла видео записи:
- Разделение БИОСов и игровых дисков по группам для PlayStation 1, PlayStation 2 и PlayStation Portable.
- Вывод имени текущих БИОСа и игрового диска в названии соответствующих разделов.
Демонстрацию работы игр для всех трёх платформ можно увидеть в демо:
В настоящий момент программа доступна по ссылке: Omega Red и представлена на GitHub: OmegaRed.