Skip to content

Releases: mpereiraesaa/prospero-win

prospero-win v0.2.0

Choose a tag to compare

@github-actions github-actions released this 10 Oct 13:13
644e32e

prospero-win v0.2.0 is the biggest update since the first release. 32-bit Windows games now run directly on the PS5's CPU instead of through the translator, Vulkan traffic is batched so DXVK games keep their frame rate, OpenGL games draw through Mesa's Zink, and Windows programs can finally reach the internet by name and over HTTPS.

New to prospero-win? The v0.1.0 release notes explain what it is, what you need and how to add your first game.

Highlights

  • 32-bit games run natively. No more instruction translation for 32-bit games by default; the translator stays available as a per-game option and as an automatic fallback.
  • Vulkan command batching for 32-bit games, so DXVK and Zink games aren't held back by the cost of switching between the game and the system.
  • OpenGL through Zink. OpenGL games no longer need a special build of the app; Mesa's Zink ships in the package.
  • Online-ready networking. Host names resolve through the console's own resolver, and Windows' TLS (schannel) works, with a pinned set of root certificates.
  • Many fixes found while bringing up GTA San Andreas, GTA IV, Counter-Strike 1.6, Atomic Bomberman, Pizza Tower and larger Windows programs.

What's new

32-bit games on the native CPU

Until now, every 32-bit game ran through prospero-win's x86 translator. In v0.2.0 a 32-bit game runs on the console's CPU in 32-bit mode, through a new WoW64 backend (#432). Games run their own code at full speed; only calls into the system cross over.

  • Works on any firmware. The native backend needs to register its signal handlers directly with the kernel. It now finds that entry point in libkernel itself instead of relying on one measured firmware build, and checks it before use, including the layout of the kernel's signal frame (#681).
  • Automatic fallback. If the native backend can't start on a console for any reason, the game now runs on the translator instead of closing (#677, thanks to leolobato).
  • Your choice per game. [runtime] cpu = translator in a game's profile keeps it on the translator. 64-bit games are unaffected; they always ran natively.
  • Stable under load. A rare timing window could send a game thread back into 32-bit code with the wrong thread state. It showed up as GTA San Andreas closing about two seconds after start, depending on its shader cache (#683, #682).

Vulkan batching and faster graphics

Each call from a game into the system costs a couple of microseconds on the console, and DXVK makes tens of thousands of Vulkan calls per frame. v0.2.0 queues those calls and sends them over in batches, always in order, and only waits where the game needs an answer (#432 and the batching work before it).

  • Counter-Strike 1.6 under Zink went from 2,234 to 24 crossings per frame, with no change in what's drawn, now that descriptor writes are batched too (#672, #674).
  • Shader compiles no longer stall other threads. Pipeline compiles run outside the batch lock, so one long compile no longer freezes the render thread (#676).
  • A real shader cache. RADV now keeps its compiled shaders between launches, under /data/prospero-win/cache/radv. Before, every launch compiled every pipeline again (#668).
  • prospero-win builds of DXVK. Game recipes can pin a tuned DXVK build. DXVK 2.6.2-prospero2 adds cheaper CS-thread work and options used by the GTA San Andreas and GTA IV recipes (#407, #680).

OpenGL games through Zink

OpenGL games now draw through Mesa's Zink on top of Vulkan, on the native CPU with batching. Zink ships inside the app, so OpenGL games work with the regular package; the separate PS5 OpenGL SDK build is gone (#438, #456–#466). Existing profiles with graphics = opengl switch over on their own.

Networking

  • Host names resolve. Windows programs could only reach numeric addresses before. Names now go through the console's own resolver, using its network settings, with bounded timeouts and a short cache for failed lookups (#384).
  • HTTPS through Windows' TLS. schannel now works on the console, backed by GnuTLS 3.8.13, and crypt32 verifies servers against Mozilla's root store as curl publishes it, pinned at the 2026-09-25 extract (#388).
  • A stable host name. Programs that look up their own computer name get one that resolves, which ends GTA IV's endless hostname lookups (#471).

Thanks to heydemoura for the resolver and TLS work.

Per-game runtime options

Profiles gain a [runtime] section for options that help some games and not others (docs):

  • cpu = native | translator: which CPU backend a 32-bit game uses.
  • thread_scheduling = true: round-robin scheduling and Windows thread priorities (#420, #424).
  • shared_input = true and fast_clock = true: faster key-state reads and a calibrated high-resolution clock (#462).

The library also lists up to 32 games now, instead of 16 (#679).

Fixes

  • Games that load data into shared sections (GameMaker titles such as Pizza Tower) start instead of failing with c000007b (#678, thanks to leolobato).
  • Memory reserved at a fixed address works. A 64-bit program that reserves memory at an address of its choosing and commits it later (Steam's protection layer does this) faulted on its first write; that memory is now backed like the rest (#417).
  • The right CPU count. Games now see the 13 CPUs they can actually use instead of 16, so worker pools sized to the CPU count no longer leave threads waiting (#419).
  • Correct floating-point state in exception handlers, which managed runtimes and __try/__except code rely on (#408).
  • Memory, CPU-time and folder-change reports work. Process memory counters, processor times and directory change notifications returned zeros or nothing on the console (#413, #414, #415).
  • Recommitted memory comes back zeroed, as Windows promises, even where the console's larger pages hold other data (#409).
  • ShadowMountPlus and similar loaders. When /data is visible but the app isn't elevated, it now asks for elevation instead of failing at startup (#423).
  • Atomic Bomberman plays: the translator handles the Watcom runtime's instructions, arrow keys arrive as arrow keys, and input no longer stalls the game (#425, #426, #428).

Thanks to kvaps for the loader and Atomic Bomberman fixes, and to inf1nit3 for the build setup fix (#658).

Diagnostics

  • The app's log is written from its own thread, so verbose logging no longer stalls a game every few seconds (#669).
  • Slow system calls are logged with the game's stack, and new per-frame profiles split each frame's time between the game, the system and the GPU driver (#673, #661, #662).
  • [debug] env in a profile adds diagnostic variables for one game without rebuilding anything (#469).

Known limitations

  • The native CPU backend has been validated on the maintainer's console. On other firmware it checks itself at startup and falls back to the translator if anything doesn't match, so games keep working either way; reports from other firmware versions are welcome.
  • Name lookups use the console's own DNS settings. A console whose network blocks DNS (some setups do, to keep the firmware from updating) won't resolve names for Windows programs either.
  • The firmware helper is unchanged from v0.1.1 ([Lapy v0.3.2-experimenta...
Read more

prospero-win v0.1.1

Choose a tag to compare

@github-actions github-actions released this 06 Oct 08:54
8086243

A maintenance release: support for more firmware versions, faster mod-heavy games, and a set of fixes that make larger Windows programs run better.

New to prospero-win? The v0.1.0 release notes explain what it is, what you need and which games are known to work.

What's new

More firmware versions

The app ships a small helper (lapy.elf) that gives it access to /data. This is the part of the app that depends on your firmware. This release bundles the helper's new version, v0.3.2-experimental, with two fixes from contributors:

Faster 32-bit games

  • Games that patch their own code run faster. Some games and mods change the game's code while it runs, and this used to cost a lot of time with 32-bit games. On the console, Grand Theft Auto: San Andreas with the Proper Shaders mod (medium preset) went from 37.9 to 41.9 fps on the same drive (#401).
  • Faster translation of switch statements and calls through DLL imports. The same San Andreas setup went from 41.4 to 42.5 fps (#402).

Fixes for larger programs

These came out of getting a big, browser-based Windows program to run on the console. Thanks to heydemoura for all of them.

  • Text through DirectWrite works now. Programs that measure or draw text with DirectWrite, such as anything with an embedded Chromium browser, used to fail on every call (#395).
  • A clean exit after a crash. When a game crashed with an error nothing handled, it took the whole app down to the PS5 home screen. Now you're back in prospero-win's launcher (#398).
  • More memory for 32-bit programs. The address range where Windows DLLs usually load is now set aside from the start, so loading many DLLs no longer uses up the console's smaller memory pool (#393).
  • Shared-memory bitmaps in 32-bit programs are placed where the program can reach them, instead of where it would crash on its first write (#383).
  • Memory protection reports match Windows when a program changes the protection of a page in its own image. Chromium checks this and stopped itself when it didn't match (#381).
  • SSE4.2 is no longer advertised to 32-bit programs, since the translator doesn't run those instructions. Programs that check for it now take their regular path instead of stopping (#379).
  • Linked files in game folders are kept. When a prefix made by Lutris or Proton is copied to the console, files that are links to outside the prefix (fonts and DLLs, usually) are now copied as files instead of turning into empty folders (#396).

Better diagnostics

The app's log now says what is using up memory when the console runs low (#397), and its timing report for 32-bit games lists the system calls each thread spends the most time in (#400). Both help when you report a problem.

Installing or updating

  1. Download prospero-win-v0.1.1.zip below and unzip it. You get a folder called PPSA99995.
  2. Upload that folder to /data/homebrew/ on your PS5 and let your loader register it.
  3. New users: follow Getting started to add your first game.

To update from v0.1.0, replace the whole PPSA99995 folder. Your games, profiles and saves live in /data/prospero-win and are kept.

Licensing

Same as v0.1.0: THIRD_PARTY.md in the folder explains which licence covers which file, LICENSES/ holds the licence texts, and SOURCES.txt names the exact source revision of every part.

Checking your download

SHA256SUMS holds the zip's SHA-256. Check it with sha256sum -c SHA256SUMS.

🤖 Generated with Claude Code

prospero-win v0.1.0

Choose a tag to compare

@github-actions github-actions released this 05 Oct 21:28
5d1c368

The first ready-made release of prospero-win: download one zip, copy a folder to your PS5, and play your own Windows games on the TV.

What prospero-win is

prospero-win is a homebrew app that runs Windows games directly on a PlayStation 5 that can run homebrew. It carries its own copy of Wine, so there is no PC streaming involved: the game runs on the console.

  • 64-bit Windows programs run natively on the PS5's x86-64 CPU. 32-bit games run through prospero-win's own x86 translator.
  • Direct3D 8, 9, 10 and 11 games draw through DXVK and Vulkan. Older OpenGL games are supported too, and so are 2D games and Windows programs that draw with GDI.
  • You can play with the DualSense (Xbox-style XInput, analog sticks, triggers and rumble, plus custom mappings for keyboard-and-mouse games) or with a USB keyboard and mouse.
  • Game audio comes out of the PS5's own audio output.
  • A launcher lists your games. Each game has a profile with its graphics and control settings.

It's experimental. Some games work well, and many haven't been tried yet.

What you need

  • A PS5 that can run homebrew, with an FTP server and an ELF loader. The ps5-payload-dev tools work; elfldr must listen on local port 9021.
  • An app loader that installs apps from /data/homebrew, such as ShadowMountPlus.
  • Your own copies of the games you want to play. prospero-win doesn't include any games.
  • A Linux PC (a VM or WSL works too), for installing games before you copy them to the console.

Testing was done on firmware 12.02. The app itself doesn't depend on a firmware version. The parts that do are your jailbreak, your loader and the small helper bundled in the app that gives it access to /data. If something doesn't work on your firmware, please open an issue with your firmware version and what happened.

Installing

  1. Download prospero-win-v0.1.0.zip below and unzip it. You get a folder called PPSA99995.
  2. Upload that whole folder to /data/homebrew/ on your PS5, then let your loader register it. It shows up on the home screen as prospero-win.
  3. Follow Getting started to add your first game, and Installing games for games that come with an installer.

Some FTP servers upload files without execute permission. If the app shows a launch error and goes straight back to Home, see the note in Getting started.

Ready-made game profiles, controller presets and install recipes are in prospero-win-profiles. Your games, profiles and saves live in /data/prospero-win, separate from the app. To update the app later, replace the PPSA99995 folder; your games stay where they are.

Games known to work

These results were measured on a PS5 (firmware 12.02, 1920x1080 output at 60 Hz). The profiles repository has the details of each setup.

Game How it runs
Half-Life 2 60 fps at High settings with DXVK; played from the train station through Kleiner's lab with the DualSense
Grand Theft Auto IV: The Complete Edition About 45–55 fps in the open city depending on the area and traffic, close to 59 on quiet streets, mid-40s in gunfights and crowds; with the DualSense
Grand Theft Auto: San Andreas (PC 1.0) 60 fps in Grove Street and on the road, intro movies with sound, the DualSense through GInput; also tested with CLEO 4, Mod Loader and Proper Shaders (preset 0), averaging about 59 fps on a Los Santos drive
Half-Life Plays with OpenGL, keyboard and mouse
Counter-Strike 1.6 Plays with OpenGL at 1920x1080 and 60 fps, keyboard and mouse
OpenArena 0.8.8 Plays with OpenGL, keyboard and mouse
Warcraft III: Reign of Chaos 1.27a Plays with DXVK, cinematics with sound; DualSense or keyboard and mouse
Space Cadet Pinball, Wine Minesweeper Play full-screen with the DualSense

Some of these need extras in the game's own folder, such as DXVK, LAV Filters for the movies, or a few mods. The profile and recipe for each game list them.

Known limits

  • Movies through DirectShow need LAV Filters. The console's Wine has no GStreamer, so install LAV Filters in the game's prefix (winetricks lavfilters). Without it, games that play movies this way can wait forever on the first one.
  • One program at a time. A game runs as a single process and can't start other programs. Games that need a launcher to start first, and installers, don't run on the console. Install games on your PC instead, as the guide describes.
  • 32-bit and 64-bit Windows only. 16-bit Windows and DOS programs aren't supported.
  • No mouse wheel yet. The USB mouse moves and clicks, but scrolling doesn't work.
  • No DRM or anti-cheat. prospero-win doesn't bypass either, so games that need them won't run.
  • Getting into a large game can take a while: GTA IV takes about 90–95 seconds to load.

Licensing

prospero-win's own code is under the LGPL, version 2.1 or later. The app folder also contains Wine, FreeType, the RADV Vulkan driver from Mesa, an OpenGL implementation built on Mesa, and the PS5 app runtime. Each of these has its own licence, and some of them make parts of the folder GPL-3.0. THIRD_PARTY.md in the folder explains which licence covers which file. LICENSES/ holds the licence texts, and SOURCES.txt names the exact source revision of every part, so you can get the source code that matches these files.

Checking your download

SHA256SUMS holds the zip's SHA-256. Check it with sha256sum -c SHA256SUMS.

🤖 Generated with Claude Code