oops-sdk documentation
What target-side payloads in OOPS share: the display, the controller, sound, memory the GPU can see, the clock, threads and sockets - behind one set of headers, in freestanding C.
Not one of the four. This is infrastructure underneath them, and a repository rather than a project. Its Rust counterpart is oops-libs, which is what the host-side tools share; nothing links both.
New here? The root README has the subsystems, the two display backends, and how a consumer wires it into a Makefile.
Guide
- USER_GUIDE.md - Step-by-step developer tutorial covering Makefile setup, display scanning, DualSense polling, fixed-function 3D graphics, PCM audio, JIT compilation, and privilege escalation.
- API_REFERENCE.md -
Technical reference for the subsystem headers in
include/oops/, their C functions, error codes, and hardware invariants. - BUILDING.md -
bin/oops-sdk, what each verb does, why the build is a cross-compile even on Linux, and what a consumer has to do to link the result. - PORTING.md - for someone holding a GL 1.x program: what of GL, GLU, GLUT and the C library is here, what is absent and fails to link rather than misbehaving, the entry point a payload needs, and the symbol-table check that catches what a clean build does not.
Project memory
- DECISIONS.md - a generated index over
decisions/, one file per entry. Every non-obvious choice, numbered, with the reasoning.
Shared rules - provenance, naming, decision logs, honest failure, gates - are in the OOPS conventions and not restated here.
The words
Vocabulary is the collection's, not this repository's. Nothing here defines a term of its own:
- the
collection's glossary - standard ELF,
DT_/PT_, and the cross-repository word collisions - SELFish - NID, fSELF, PFS, packages, the generation split
- obSCEne
- checks, the census,
ps4_modeagainst native
payload, target and
host are defined for all repositories in CONVENTIONS.md
section 2 and are not repeated here. They are the three words this
repository turns on: it is built for the target, linked
into a payload, and its host display
backend is the one that runs nowhere near either.
Adding to a log
The long-running documents are directories with a generated
index. Add a file under decisions/, then
regenerate the table:
tools/split-decisions.sh --index oops-sdkDo not edit the index by hand - it is overwritten. The split exists because two sessions appending to one file collide, and because a log past half a megabyte stops rendering on GitHub entirely.