{"id":13436762,"url":"https://github.com/simias/rustation","last_synced_at":"2026-02-15T22:35:05.063Z","repository":{"id":29411399,"uuid":"32946897","full_name":"simias/rustation","owner":"simias","description":"Playstation emulator in the Rust programing language","archived":false,"fork":false,"pushed_at":"2023-10-21T03:32:16.000Z","size":640,"stargazers_count":555,"open_issues_count":22,"forks_count":21,"subscribers_count":24,"default_branch":"master","last_synced_at":"2024-10-27T20:21:06.654Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/simias.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2015-03-26T19:12:09.000Z","updated_at":"2024-10-11T08:22:37.000Z","dependencies_parsed_at":"2024-04-05T00:32:56.895Z","dependency_job_id":"2c0a8257-1654-4da0-8af5-51475d17161d","html_url":"https://github.com/simias/rustation","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simias%2Frustation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simias%2Frustation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simias%2Frustation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simias%2Frustation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/simias","download_url":"https://codeload.github.com/simias/rustation/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244310505,"owners_count":20432549,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T03:00:51.934Z","updated_at":"2026-02-15T22:35:05.057Z","avatar_url":"https://github.com/simias.png","language":"Rust","funding_links":[],"categories":["Applications","Home Game Console Emulators","Sony PlayStation 1","Rust","Applications written in Rust","应用","应用 Applications"],"sub_categories":["Emulators","Sony","仿真器","模拟器 Emulators"],"readme":"[![Build Status](https://travis-ci.org/simias/rustation.svg)](https://travis-ci.org/simias/rustation)\n\n# This project is no longer being developed.\n\nI decided to restart from scratch to fix some architectural flaws in Rustation.\nSome of the code has been imported from this project, other bits have been\nthoroughly rewritten. The new repository is\n[rustation-ng](https://gitlab.com/flio/rustation-ng/). It's now more advanced\nthan this project, with proper sound support and generally more accurate\nemulation.\n\nOne significant difference between the two projects is than rustation-ng dropped\nthe GL renderer in favor of a threaded software one. The GL renderer of\nRustation has been ported to C++ and has been integrated in the Beetle PSX\nemulator however, so it's not completely dead.\n\n# Rustation PlayStation emulator\n\n![Rustation logo](https://raw.githubusercontent.com/wiki/simias/rustation/images/logo.png)\n\nPlayStation emulator in the Rust programing language.\n\nThis repository only contains the source code for the core of the\nemulator. The OpenGL renderer and the libretro interface is is the\n[rustation-libretro](https://github.com/simias/rustation-libretro)\nrepository.\n\nThe focus of this emulator is to write code that's clean, accurate and\nhopefully easy to understand. There's no plugin infrastructure, the\nemulator is monolithic.\n\nPerformance is pretty poor at the moment but it should be enough to\nrun close to realtime on a modern CPU.\n\nFor the time being it can only boot a few games. Crash Bandicoot\n(Japanese version) is mostly playable, although I've had random\ncrashes. Some other games (like Spyro) freeze after or during the\nintro.\n\nIf you have any questions, in particular if something in the code is\nnot clear or properly commented don't hesitate to fill an issue.\n\nI also created a [/psx/ board on 8chan](https://8ch.net/psx/) if you\nprefer something less formal to discuss this emulator and all things\nPlayStation. We'll see if this turns out to be a good idea...\n\n## Currently implemented (even partially)\n\n![Crash Bandicoot (Japan)](https://raw.githubusercontent.com/wiki/simias/rustation/images/crash_bandicoot-level1.png)\n\n* CPU\n* Basic GTE support (ported from mednafen PSX)\n* Instruction cache\n* Interrupts\n* Basic GPU (no semi-transparency or mask bit emulation)\n* Timers (incomplete)\n* DMA\n* Debugger\n* CDROM controller (missing many commands)\n* Gamepad controller (only digital pad for now)\n\n## Todo list\n\n* Many things in the GPU\n* MDEC\n* SPU\n* Memory card\n* CPU pipeline emulation\n* More accurate timings\n* Many, many other things...\n\n## Build\n\nYou'll need [Rust and its package manager Cargo](https://www.rust-lang.org/),\n[SDL2](https://www.libsdl.org/download-2.0.php) and a PlayStation\nBIOS. The emulator is mainly tested with BIOS version `SCPH1001` whose\nSHA-1 is `10155d8d6e6e832d6ea66db9bc098321fb5e8ebf`.\n\nYou should then be able to build the emulator with:\n\n```\ncargo build --release\n```\n\nDon't forget the `--release` flag in order to turn optimizations\non. Without them the resulting binary will be absurdly slow.\n\nIf the build is succesful you can run the emulator using:\n\n```\ncargo run --release /path/to/SCPH1001.BIN\n```\n\nFor Windows check issue [#12](https://github.com/simias/rustation/issues/12).\n\nUse the `Escape` key to exit the emulator, `Pause/Break` to \"break\" into the\ndebugger, the emulator will then listen on TCP port `9001` for a GDB\nconnection.\n\n## Debugger\n\nIn order to debug you'll need a GDB targetting\n`mipsel-unknown-elf`. Once the emulator is running press the\n`Pause/Break` key to trigger the debugger and then connect GDB to it\nusing (at the gdb command prompt):\n\n`target remote localhost:9001`\n\nGDB might complain about not finding symbols or the boundaries of the\ncurrent function but you can ignore that. From then you should be able\nto use the familiar [GDB commands](https://sourceware.org/gdb/onlinedocs/gdb/)\nto debug the live emulator.\n\nA few examples:\n\n```\n# Dump the CPU registers\ninfo registers\n# Disassemble 20 instructions around PC\ndisassemble $pc-40,+80\n# Display word at address 0x1f801814 (GPU status)\nx/x 0x1f801814\n# Add code breakpoint at address 0x00004588\nbreak *0x00004588\n# Add write watchpoint at address 0x1f801070 (IRQ ack)\nwatch *0x1f801070\n# Step over a single instruction\nstepi\n# Continue until a break/watchpoint is reached (or Pause/Break is pressed)\ncontinue\n```\n\nThe debugger support is pretty experimental and quircky but it works\nfor basic debugging needs.\n\n## Guide\n\nI'm also attempting to document the emulator writing process in a\nLaTeX document available in the\n[psx-guide repository](https://github.com/simias/psx-guide). It's\ngenerally lagging behind the actual code but I'll try to update it as\noften as possible.\n\n## Resources\n\nI try to cite all of my sources in the guide above but I'm mainly\nusing the priceless [No$ PSX\nspecifications](http://problemkaputt.de/psx-spx.htm) as well as\n[mednafen](http://mednafen.fobby.net/)'s source code when I feel like\ncheating.\n\nI also run tests on the real hardware and store them in the\n[psx-hardware-tests repository](https://github.com/simias/psx-hardware-tests/tree/master/tests).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimias%2Frustation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsimias%2Frustation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimias%2Frustation/lists"}