screenshots/: the game list, the send screen during and after an upload and its page in a
browser, the DOOM II title, MAP01 and shooting the first zombies, taken on the console.
Testing the send screen with a browser and the 643 MB collection 7Z found two faults. The body
was written as recv handed it over, about 20 KB per write, and writes to /app0 cost more the
larger the file: the upload fell to 0.4 MB/s past 400 MB (1.6 ms per write at first, 47 ms past
480 MB). It now writes whole 256 KB chunks, which stay at 4 ms each; the whole 7Z arrived at
11 MB/s and its games were added 8 s later. Leaving the screen during an upload froze the game
until the upload ended, because the stop was only checked when recv timed out; it is now checked
before every recv, and the partial file is deleted.
console_test.py launches through the PS5Upload helper when the Payload Manager's port is dead
after rest mode. TODO: an unreproduced crash on The Ultimate DOOM's attract demos, games already
installed counted as added, and the page's status waiting for a running upload.
The send screen's server handled one connection at a time and waited up to 30 s for its
request, and browsers open connections before they need them and may leave them quiet, which
stalled the page and every upload. It now keeps up to eight waiting and serves whichever sends a
request first. Replies are two sends; with Nagle the second waited for Windows' delayed
acknowledgement (up to 200 ms), so the server sets TCP_NODELAY.
The same changes were measured on the console in the OpenRCT2 port; built here for the PS5 and
the PC, not run on the console.
A short link to a folder could not be imported: the listing's relative links were resolved against
the typed address instead of the one the redirect ended at. plat_http_get now reports the final
address. The PS5 backend follows Location headers itself, since sceHttp's automatic redirects do
not say where they land; the PC backend asks libcurl. The importer resolves listings against that
address and sends later range requests straight to it.
The URL helpers move from the launcher's listing code to src/platform/url.c so the PS5 backend can
resolve Location headers with them, and the upload server reuses url_file_name for file names.
Add games gets a first row, Send from PC or phone. Its screen runs a small HTTP server for as long
as it is open (port 9666, or the next one the sandbox allows) and shows the address as text and as
a QR code. The page it serves takes dropped files and whole folders, uploads them one at a time with
progress, and lists what the console did with each. Game WADs are moved into place, archives go
through the importer and are deleted afterwards, add-ons and other files are refused with a reason.
qrcodegen 1.8.0 joins the pinned third-party fetch, renamed to fetch-third-party.sh; the page is
embedded at build time by tools/embed-file.py. tools/send.py does what the page does, for console
tests with test/console-send.cfg.
Prompts used to ask for keys ("press y or n", "press y to quit", "press a key"). Text now carries
glyph characters for the face buttons, drawn in their PlayStation colours by both Doom's menu font
and the launcher, so prompts read "Cross yes, Circle no" and the launcher footers show the symbols
instead of X and O.
The first Read This! page shows the controller controls instead of id's keyboard help, and DOOM II
keeps its Read This! entry when the WAD has the graphic, so every game can show it.
DOOM now opens on a game list. The package bundles id's freely
distributable shareware DOOM1.WAD; players add The Ultimate DOOM, DOOM II,
TNT and Plutonia (or Freedoom) from their own files:
- copied into /data/homebrew/PPSA99666/wads, as WADs or inside ZIP, 7Z or
RAR archives, which are imported once at the next start;
- downloaded from an http:// or https:// link typed on the system
keyboard: a WAD, an archive, or a folder listing to pick from. Archives
are read in place over HTTP range requests, so a large solid 7Z needs no
room on the console beyond the game WADs it holds.
The console uses sceHttp/sceSsl and the IME dialog; the PC build uses
libcurl. Archives go through libarchive, liblzma and zlib, fetched pinned
and built for both targets, with large allocations taken from mmap.
Engine fixes that came with it: IdentifyVersion takes the launcher's
choice and sets gamemission, so TNT and Plutonia get their own level names
and finale texts; the sky check no longer gives The Ultimate DOOM the
DOOM II skies; saves are per game; widescreen full-screen pictures from the
2024 re-release are drawn centred instead of rejected.
The console test runner receives doom.log over the capture connection
instead of reading the kernel log.
id Software's original engine, made 64-bit clean, on a new platform layer:
VideoOut with tiled scanout, an AGC compute presenter, ScePad, AudioOut,
an OPL FM synth with a DMX-style MUS player, and a headless PC build for
testing. Ships Freedoom as the bundled game; id's own IWADs take priority.