Skip to content
SP4C3B4R-8Public
forked from boykopovar/AnyPS5

About

AnyPS5 fork: Astro Bot (PPSA21564) on Windows

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

 
 

Latest commit

 

History

2,095 Commits

Folders and files

Repository files navigation

Astro Bot (PPSA21564) on Windows

This branch is oneandonlydean/AnyPS5 astrobot as is, with only this README section on top. The Windows fixes it once needed (#282, #283, #284) are now in that branch, so it builds and runs on Windows directly: use it. This branch only follows it and records how it behaves on Windows; any further Windows fix goes upstream as a pull request.

Tested on Windows 11, Ryzen 7 7800X3D, RTX 5070 Ti, MinGW-w64 GCC 15.2.0, with APS5_HOST_IMPORT_MIB=20480.

Status on Windows (2026-10-08, astrobot 88d7bb62):

  • eboot.exe -lvl <level file> starts straight in a level (names in app0/data/prein/product_levels.xml); the first level of the Gorilla Nebula (underwater_aerial_garden) loads and renders.
  • In that level the first launches run at about 0.1 fps while the pipeline and shader caches fill; with warm caches it runs at about 3.0 fps (0.7 to 0.8 on 2026-10-06). It is now bound by the GPU: draws take about 184 ms of GPU time per frame. Details in discussion #357.
  • APS5_NO_SNAPSHOT_CHECK=1 is still needed: without it the boot stops at about 46 s with guest snapshot differs from registered memory. Earlier (2026-10-03), with a controller and that flag, a new game went through the save-slot selection and the tutorial (Crash Site) into the Gorilla Nebula.

Pull requests from this work

PR Change State
#286 libkernel: mapping address hints and no-overwrite fixed mappings on Windows merged
#287 libScePad: scePadSetTiltCorrectionState merged
#289 libs: missing AudioPropagation, AudioIn, NpSessionSignaling and dialog exports merged
#281 build: copy the MinGW runtime next to test executables merged
#282 libSceAgcDriver: prefer a discrete GPU merged
#283 libSceFiber: fiber stack switching under write tracking on Windows open
#284 libSceAgcDriver: destroy host imports of a replaced Vulkan device merged
#285 libSceAgcDriver: back the global data share with driver-owned guest memory open
#452 libSceAgcDriver: accept scissors that apply the zero window offset merged
#453 libSceAgcDriver: skip depth and stencil tests whose plane is absent merged
#454 libSceAgcDriver: read a depth surface's memory as a texture when its format is not a depth view open

The README below is the one of the Linux branch this one is based on.


AnyPS5: Astro Bot (PPSA21564) fork

This fork's main mirrors astrobot, my integration branch for running Astro Bot (PPSA21564) on Linux with AnyPS5: upstream main plus fixes that are still on their way upstream or specific to this setup. Pull requests to upstream are always cut from upstream main.

Astro Bot status

Linux, measured on my machine (8 October 2026: CachyOS, i9-14900KF, RTX 4090). Frame rates are the game's own, with no frame generation.

Part State Frame rate
Boot, PlayStation Studios video, logos Renders video at about 57 fps
Title screen Renders, including the copyright line (console fonts or the Noto substitutes) about 60 fps
NEW GAME menu Renders about 60 fps
Intro cinematic and space scene Renders about 50 fps, robot crowd about 23 fps
Tutorial (Crash Site hub) Playable with a DualSense about 16 fps on foot
World map, controller ship flight Renders about 32 fps
Sky Garden Reached and flown about 4.4 fps
Snowy Canyon Reached about 5.5 fps
Space Station Reached (ship fly-in) about 7.4 fps
Dirty Bath Reached, hot spring water renders about 4.2 fps
Other levels 24 levels booted with -lvl: all load, no GPU hangs 3 to 53 fps (see below)
Windows In game up to the first Gorilla Nebula level (report)

Level sweep (7 October, 150 s per level from a -lvl start, mostly the arrival fly-in and first platform): main levels run at about 3 to 14 fps (Pirate Island about 3, Clock Tower 4, Cymbal Party 4.6, Sky Aztec and Construction 5, Gulliver 8, Penguin Atlantis 8.7, Casino 9.3, Day and Night 14), bosses, heroes and minis at 10 to 40 fps, the hub dioramas at 20 to 53 fps. The two levels that hung the GPU on 4 October (Astro skin diorama, Cymbal Party) run clean now.

Known issues: the frame rate in levels (the queue worker's CPU time per draw is the main limit; indirect draws and occlusion box draws are the biggest items in Pirate Island and Space Station), shader compile stalls of several seconds up to about a minute on the first visit to a level after a shader change, thin crossing shards at the end of the Frozen Meal (ice_iceberg) fly-in, a short white flash on the world map, and occasional minor glitches.

New on this branch (7 and 8 October):

  • NGG passthrough fix: passthrough geometry now takes the vertex path, with its allocation, export mask and wave fields proved exactly. The same code runs Dreaming Sarah clean at about 60 fps and Astro Bot. Those draws now hit the draw templates: the hub on foot is about 16% faster, the world map about 10%, the final boss arena went from about 25 to 40 fps.
  • Vertex reuse in NGG draws: the robot crowd in the intro went from about 11 to 23 fps.
  • Texture host copies: under host memory pressure the host copy of a sampled texture is released instead of the texture itself. Space Station frame time went from about 286 to 220 ms (about 3.5 to 4.5 fps, +30%), Pirate Island about 7% faster (APS5_NO_TEXTURE_HOST_RELEASE=1 turns it off).
  • Texture cache size: the sampled-texture cache may now use half of the device budget instead of 3/8, and cached textures are charged the bytes their image actually holds (accounting by ThisIsAkill). Cache evictions on Space Station dropped from about 2000 to a handful per 10 s; frame time went from about 224 to 135 ms (about 4.5 to 7.4 fps, +66%) and Pirate Island from about 306 to 257 ms (+19%). Peak VRAM use is about 2.5 GiB higher; on 8 and 12 GB cards the hard limit already applies, so nothing changes there.
  • CMASK fast clears: fast clears on colour targets without DCC are now applied (a GPU pass in stream order). This fixes the stale lavender rectangles and the opaque tan water in Dirty Bath; the hot spring is translucent again (before and after below).
  • Level sweep: 24 levels from all six galaxies, the hub dioramas, bosses, heroes and minis load with 0 crashes and 0 GPU hangs. The slowest are Pirate Island, Space Station and Dirty Bath at about 3 to 5 fps.
  • Next: the per-draw CPU cost on the queue worker (indirect draws at 50 to 90 us each, the occlusion box-draw sequence), then the iceberg shards.

Title screen NEW GAME menu Intro space scene Robot crowd in the intro Crash Site hub World map Slo-Mo Casino Space Station Dirty Bath before the CMASK fix: opaque water with stale rectangles Dirty Bath after the CMASK fix

Dirty Bath water before (left) and after (right) the CMASK fix.

Level select (F2)

A level select for testing: it restarts the game straight into any level in the game's own list, without playing through to it or needing a save. Linux only for now.

APS5_LEVEL_MENU=1 ./app.elf

Press F2 in game to open it. It opens as a separate window and lists the 114 entries of the game's level list (product_levels.xml) grouped by category: hub, main levels by galaxy, secret levels, bosses, heroes, minis and so on, with the game's internal Meta entries last.

  • Up/Down, PgUp/PgDn, Home/End or the mouse wheel move the selection. Typing filters the list (words match the category, name or level file, in any order); Backspace deletes, Ctrl+Backspace clears.
  • Enter (or a double click) restarts into the selected level: the process re-executes itself with the same command line and environment plus the game's own -lvl <level file> argument. Pending save-data writes get up to 2 s to finish first.
  • F2 or Esc closes the menu.

F2 level select filtered to G1

To pick a level without touching the keyboard, for scripted runs:

APS5_LEVEL_MENU=1 APS5_LEVEL_MENU_AUTOSELECT=20:rocket_space_station ./app.elf

After 20 seconds this opens the menu, types rocket_space_station as the filter and presses Enter on the first match. The variable is dropped on the restart, so it fires once. Booting a level directly with ./app.elf -lvl rocket_space_station does the same without the menu.

Caveats: sublevels such as enemy_final start standalone. diorama_zoo loads but the game reports an empty level name. The menu falls back to a built-in bitmap font when no DejaVu, Noto or Liberation font is installed (APS5_LEVEL_MENU_FONT names another TrueType file).

Upstream contributions

110 pull requests from this work are merged into boykopovar/AnyPS5, among them Linux write tracking (#120, #121), the shader disk and pipeline cache (#129), NGG geometry as mesh shaders (#133), resident 10-bit scanout (#278), the Linux argv fix behind -lvl (#418), flips that complete after the frame's GPU work (#417), large DMA copies on the GPU in queue order (#439), triangle fan geometry input (#440), occlusion counter dumps on the GPU (#463), cross-queue submission order (#465), exact reciprocals for --to-intel (#464) and DualSense output and audio (#179, #180). Open: #626.


About

Tool for automatic executables porting to Linux and Windows.

Includes a relinker that converts executable to the target system's native format and implementations of system prx libraries suitable for dynamic linking. No emulation or separate runtime process.

Usage, Build instructions, Technical debt of the project, code style conventions, contributing

Status

libraries shaders

progress map

* System libraries: percentage of the functions known to the project so far (declared in core/libs/prx), not of every PS5 system function. The total grows as more functions are declared.

List of verified games

Dreaming Sarah (2D platformer) runs at a stable 60 fps on a GTX 1050 Ti / i5-7500 3.4GHz.

Unsupported or unexpected states strictly throw std::runtime_error. what() is printed to stderr and the process terminates.

The shader recompiler successfully produces SPIR-V (validated via Spirv-Tools when built with ANYPS5_ENABLE_SPIRV_TOOLS).

Compatibility

See the game compatibility list for tested games and known issues.

Input mapping

SDL-mapped game controllers are supported, including analog sticks and triggers. Keyboard and mouse controls can be configured with an anyps5-input.ini file. See input mapping for the supported devices and configuration format.

System fonts

Games that open the console's system font sets need font files in an anyps5-fonts directory beside the generated game executable; set ANYPS5_SYSTEM_FONTS to use another directory. Files dumped from the console are used under their own names (SST-Roman.otf, SST-Bold.otf, SSTJpPro-Regular.otf, ...). Without them, these openly licensed substitutes are used when present: NotoSans-{Light,Regular,Medium,Bold}.ttf and NotoSans-{LightItalic,Italic,MediumItalic,BoldItalic}.ttf (Latin and Vietnamese), NotoSansMono-{Light,Regular,Medium,Bold}.ttf (typewriter), NotoSansThai-{Light,Regular,Medium,Bold}.ttf (Thai) and NotoSansCJK-{Light,Regular,Medium,Bold}.ttc (Japanese and Chinese). Without either, opening a system font set fails and the game shows no text in those fonts.

Disclaimer

This project is intended for interoperability, research, preservation, and compatibility purposes. It does not include, distribute, or require copyrighted software, firmware, cryptographic keys, or proprietary libraries. Users are responsible for ensuring that any binaries used with this project are obtained and used in accordance with applicable laws and their respective license terms.

License

This project is licensed under the GNU General Public License version 2 only.

About

AnyPS5 fork: Astro Bot (PPSA21564) on Windows

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages