ProjectPSX é um emulador codificado em C# do Sony Playstation original (Playstation 1/PS1/PSX)
Este é um projeto pessoal com o objetivo de aprender sobre hardware e desenvolvimento de emuladores.
ProjectPSX não usa nenhuma dependência externa e usa código C# bastante simplista.
Neste momento está implementado o seguinte:
O que não está implementado (mas deveria estar...):
Nota: É necessário um PlayStation Bios válido para executar o emulador. SCPH1001.BIN é o BIOS padrão no desenvolvimento, mas alguns outros, como SCPH5501 ou SCPH7001, funcionam.
Não há lista de compatibilidade. Muitos jogos inicializam e entram no jogo, embora alguns possam ter problemas aleatórios. Alguns dos jogos que testei e que acordaram foram: Ridge Racer, Castlevania Symphony of the Night, Final Fantasy 7, Crash Bandicoot 1, 2 e 3, Spyro the dragon, Tekken 1, 2 e 3, Toshinden, Time Crisis, Tobal 1 e 2, Vagrant Story, Street Fighter Zero 3, Rockman/Megaman 8/X4, Parasite Eve, Metal Gear Solid, Crash Team Racing... Alguns outros como Final Fantasy IX, Gran Turismo, Resident Evil 3 ou Marvel vs Capcom inicializam, mas apresentam problemas aleatórios para serem corrigidos.
Nota: Os arquivos do cartão de memória são codificados para "memcard.mcr" no diretório raiz. Se não houver ninguém, um novo será gerado ao salvar.
O próprio núcleo do ProjectPSX é uma biblioteca headless e sem dependências. A solução vem com 2 projetos adicionais ProjectPSX.Winforms e ProjectPSX.OpenTK. O projeto Winforms usa NAudio para emitir som.
Ao usar o projeto Winform, uma caixa de diálogo de arquivo solicitará a execução. Selecione um arquivo Bin (use track1) ou um arquivo Cue para gerar faixas de CD para alimentar o CDROM.
Ao usar o projeto OpenTK, basta arrastar e soltar um arquivo bin/cue na janela.
O BIOS e os arquivos de expansão são codificados na classe BUS.
Depois de ligado, a entrada é mapeada como:
Sim, você pode, mas não deveria. Existem muitos outros emuladores mais capazes por aí. Este é um projeto pessoal em andamento com o objetivo de aprender sobre emuladores e implementação de hardware. Ele pode e irá quebrar durante a emulação, pois há muitos recursos de hardware não implementados.
É o visualizador VRAM. Inclui todas as texturas, tabelas de bloqueio de cores e buffers de exibição usados pelo software playstation. É usado para fins de depuração. Você pode alterná-lo pressionando TAB no teclado.
Provavelmente devido a hardware não implementado ou implementado incorretamente, principalmente tempos de cdrom/dma/mdec.
Remova o comentário das funções bios.verbose() ou TTY() no loop principal da CPU. Você também pode dissasemble() as instruções da CPU MIPS e printRegs() no opcode atual.
Estou interessado em emular hardware há algum tempo. Comecei fazendo um Java Chip8 e um CPU C# Intel 8080 (usado no clássico arcade Space Invaders). Mais tarde, fiz o Nintendo Gameboy. Eu queria continuar fazendo 3D, então acabei com o PSX, pois ele tinha uma boa biblioteca de jogos...
Usei principalmente a documentação do Martin Korth PSX-SPX sobre o hardware do Playstation em https://problemkaputt.de/psx-spx.htm. Além disso, o pessoal do canal #playstation no discord emudev em https://discord.gg/dkmJAes estava muito útil.
Winforms foi a maneira mais fácil de obter resultados para mim, pois foi prototipado rapidamente. No momento, a UI está separada do núcleo para que qualquer sistema de janelas possa ser adicionado, desde que a interface IHostWindow seja implementada. Há também um projeto OpenTK na solução que roda em Linux.
No início deste projeto eu era um cara com um trabalho chato e não relacionado à codificação. Eu não queria fazer isso pelo resto da vida, então comecei a estudar para tentar mudar de carreira. Eventualmente aprendi (um pouco) e comecei a codificar tudo o que me deixava feliz. Eventualmente consegui um emprego como Android Dev...