ProjectPSX — это эмулятор оригинальной Sony Playstation (Playstation 1/PS1/PSX) на языке C#.
Это личный проект, целью которого является изучение аппаратного обеспечения и разработки эмуляторов.
ProjectPSX не использует никаких внешних зависимостей и использует довольно упрощенный код C#.
На данный момент реализовано следующее:
Что не реализовано (но должно быть...):
Примечание. Для запуска эмулятора необходима действующая версия PlayStation Bios. SCPH1001.BIN является биосом по умолчанию при разработке, но некоторые другие, такие как SCPH5501 или SCPH7001, как сообщается, работают.
Списка совместимости нет. Многие игры загружаются и запускаются в игру, хотя в некоторых могут возникать случайные проблемы. Некоторые из протестированных мной игр, которые проснулись, были: Ridge Racer, Castlevania Symphony of the Night, Final Fantasy 7, Crash Bandicoot 1, 2 и 3, Spyro the Dragon, Tekken 1, 2 и 3, Toshinden, Time Crisis, Tobal 1 и 2, Vagrant Story, Street Fighter Zero 3, Rockman/Megaman 8/X4, Parasite Eve, Metal Gear Solid, Краш Командные гонки... Некоторые другие, такие как Final Fantasy IX, Gran Turismo, Resident Evil 3 или загрузка Marvel vs Capcom, имеют случайные проблемы, которые необходимо исправить.
Примечание. Файлы карты памяти жестко запрограммированы как «memcard.mcr» в корневом каталоге. Если никого нет, при сохранении будет создан новый.
Ядро ProjectPSX само по себе представляет собой обезглавленную библиотеку без каких-либо зависимостей. Решение поставляется с двумя дополнительными проектами ProjectPSX.Winforms и ProjectPSX.OpenTK. Проект Winforms использует NAudio для вывода звука.
При использовании проекта Winform в диалоговом окне файла появится запрос на выполнение. Выберите файл Bin (используйте track1) или файл Cue для создания дорожек компакт-диска для загрузки на компакт-диск.
При использовании проекта OpenTK просто перетащите файл bin/cue в окно.
Файлы биоса и расширения жестко закодированы в классе BUS.
После включения питания вход отображается как:
Да, можно, но не следует. Есть много других, более функциональных эмуляторов. Это личный проект в стадии разработки, цель которого — узнать об эмуляторах и аппаратной реализации. Он может и сломается во время эмуляции, поскольку существует множество нереализованных аппаратных функций.
Это программа просмотра VRAM. Он включает в себя все текстуры, таблицы блокировки цветов и буферы отображения, используемые программным обеспечением PlayStation. Он используется в целях отладки. Вы можете переключить его, нажав TAB на клавиатуре.
Вероятно, из-за не реализованного оборудования или его неправильной реализации, в основном из-за таймингов cdrom/dma/mdec.
Раскомментируйте функции bios.verbose() или TTY() в основном цикле ЦП. Вы также можете дизассемблировать() инструкции процессора MIPS и printRegs() для текущего кода операции.
Я уже некоторое время интересуюсь эмуляцией оборудования. Я начал создавать Java Chip8 и процессор C# Intel 8080 (используемый в классической аркадной игре Space Invaders). Немного позже я сделал Nintendo Gameboy. Я хотел продолжить работу над 3D, поэтому остановился на PSX, поскольку у него была хорошая библиотека игр...
В основном я использовал документацию Martin Korth PSX-SPX об оборудовании Playstation по адресу https://problemkaputt.de/psx-spx.htm. Также люди на канале #playstation в дискорде emudev по адресу https://discord.gg/dkmJAes были очень полезно.
Winforms был для меня самым простым способом получения результатов, поскольку он был быстро прототипирован. На данный момент пользовательский интерфейс отделен от ядра, поэтому можно добавить любую оконную систему, если реализован интерфейс IHostWindow. Также существует проект OpenTK по решению, работающему на Linux.
В начале этого проекта я был парнем с скучной работой, не связанной с программированием. Я не хотел заниматься этим всю оставшуюся жизнь, поэтому начал учиться, чтобы попытаться сменить карьеру. В конце концов научился (немного) и начал программировать то, что меня радовало. В конце концов получил работу Android-разработчика...