ProjectPSX는 원래 Sony Playstation(Playstation 1/PS1/PSX)의 C# 코딩 에뮬레이터입니다.
하드웨어와 에뮬레이터 개발에 대해 배울 수 있는 개인 프로젝트입니다.
ProjectPSX는 외부 종속성을 사용하지 않으며 다소 단순한 C# 코드를 사용합니다.
현재 다음이 구현됩니다.
구현되지 않은 것(그러나 구현되어야 하는 것...):
참고: 에뮬레이터를 실행하려면 유효한 PlayStation Bios가 필요합니다. SCPH1001.BIN은 개발의 기본 BIOS이지만 SCPH5501 또는 SCPH7001과 같은 일부 다른 BIOS도 작동하는 것으로 보고되었습니다.
호환성 목록이 없습니다. 많은 게임이 부팅되고 게임에 들어가지만 일부 게임에는 임의의 문제가 있을 수 있습니다. 제가 테스트한 게임으로는 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, 방랑자 스토리, 스트리트 파이터 제로 3, 록맨/메가맨 8/X4, 기생충 이브, 메탈 기어 솔리드, 크래시 팀 레이싱... 일부 Final Fantasy IX, Gran Turismo, Resident Evil 3 또는 Marvel vs Capcom 부팅과 같은 다른 게임도 있지만 해결해야 할 무작위 문제가 있습니다.
참고: 메모리 카드 파일은 루트 디렉터리의 "memcard.mcr"에 하드코딩되어 있습니다. 아무도 없으면 저장 시 새 항목이 생성됩니다.
ProjectPSX 코어 자체는 종속성이 없는 헤드리스 라이브러리입니다. 이 솔루션에는 2개의 추가 프로젝트 ProjectPSX.Winforms 및 ProjectPSX.OpenTK가 함께 제공됩니다. Winforms 프로젝트는 NAudio를 사용하여 사운드를 출력합니다.
Winform 프로젝트를 사용하는 경우 실행 시 파일 대화 상자가 표시됩니다. Bin 파일(track1 사용) 또는 Cue 파일을 선택하여 CDROM에 공급할 CD 트랙을 생성합니다.
OpenTK 프로젝트를 사용할 때 bin/cue 파일을 창에 끌어서 놓기만 하면 됩니다.
BIOS 및 확장 파일은 BUS 클래스에 하드코딩되어 있습니다.
전원을 켜면 입력이 다음과 같이 매핑됩니다.
예, 할 수 있습니다. 하지만 그렇게 해서는 안됩니다. 그 밖에도 더 많은 유능한 에뮬레이터가 있습니다. 이것은 에뮬레이터와 하드웨어 구현에 대해 배우는 것을 목표로 진행 중인 개인 프로젝트입니다. 구현되지 않은 하드웨어 기능이 많기 때문에 에뮬레이션 중에 중단될 수 있습니다.
VRAM 뷰어 입니다. 여기에는 PlayStation 소프트웨어에서 사용되는 모든 텍스처, 색상 잠금 테이블 및 디스플레이 버퍼가 포함됩니다. 디버깅 목적으로 사용됩니다. 키보드의 TAB을 눌러 전환할 수 있습니다.
하드웨어가 구현되지 않았거나 하드웨어가 잘못 구현되었기 때문일 수 있습니다. 주로 cdrom/dma/mdec 타이밍입니다.
CPU 메인 루프에서 bios.verbose() 또는 TTY() 함수의 주석 처리를 제거합니다. 또한 현재 opcode에서 MIPS CPU 명령어와 printRegs()를 dissemble()할 수 있습니다.
나는 한동안 하드웨어 에뮬레이션에 관심이 있었습니다. 저는 Java Chip8과 C# Intel 8080 CPU(클래식 아케이드 Space Invaders에 사용됨)를 사용하기 시작했습니다. 나중에는 Nintendo Gameboy를 했습니다. 저는 계속해서 3D 작업을 하고 싶었고 좋은 게임 라이브러리가 있는 PSX로 마무리했습니다...
나는 주로 https://problemkaputt.de/psx-spx.htm에 있는 Playstation 하드웨어에 관한 Martin Korth PSX-SPX 문서를 사용했습니다. 또한 https://discord.gg/dkmJAes에 있는 emudev discord의 #playstation 채널에 있는 사람들은 매우 도움이 됩니다.
Winforms는 빠른 프로토타입 제작이 가능했기 때문에 출력을 얻는 가장 쉬운 방법이었습니다. 현재 UI는 코어에서 분리되어 있으므로 IHostWindow 인터페이스가 구현되는 한 모든 윈도우 시스템을 추가할 수 있습니다. Linux에서 실행되는 솔루션에는 OpenTK 프로젝트도 있습니다.
이 프로젝트를 시작할 때 저는 코딩과 관련 없는 지루한 일을 하는 사람이었습니다. 평생 하고 싶지 않아서 진로를 바꿔보려고 공부를 시작했어요. 결국 (조금) 배우고 나를 행복하게 만드는 모든 것을 코딩하기 시작했습니다. 결국 안드로이드 개발자로 취업하게 되었어요..