Learning route
Start here
Learn enough C++ and machine behavior to follow KytyPS5, then prove a small change with evidence.
The project you are learning
KytyPS5 recreates parts of a console environment inside a PC process. It loads the guest program, adapts calls into console services, and translates GPU work for the host. On its native x86-64 path, guest CPU instructions run on the host CPU. The course builds these ideas from small C++ programs before tracing the real source.
Choose your entry point
New to C++ or emulation: begin with B1: your first C++ program and follow the core route. You need a computer, an editor and a C++ toolchain. The first five lessons use only the standard library; no emulator checkout, Vulkan device or game is required.
Already comfortable with C++: try the readiness questions below. Start at emulation foundations if you can answer them, or use the linked beginner lesson to fill a gap.
Ready to contribute: use the developer gates and the existing project practice checklist. The book, architecture tour and interactive tools are alternate views and references, not additional prerequisite courses.
The core route
1 · C++ essentials
Read and do: B1: compile and debug, B2: bytes, B3: ownership
Keep: A working program, a corrected compiler error, a checked byte read and a lifetime sketch.
2 · Machine essentials
Read and do: B4: instructions and addresses, B5: completion
Keep: A four-instruction trace and a resource-retirement timeline.
3 · Emulation foundations
Read and do: Emulation, native execution, calling conventions and virtual memory.
Keep: Explain the guest/host boundary, how a call crosses it, and what a protected page does.
4 · Project orientation
Read and do: Codebase map, project C++ by example, then build/setup.
Keep: Find each subsystem and distinguish the learning-lab build from the emulator build. Record which build you actually verified.
5 · Loading and execution
Read and do: Guest address space and project pointers; ELF, mapping, linking, assembly and patching; threads, HLE and console services; then the boot trace.
Keep: Named functions, an address worksheet, and a trace from file bytes to guest entry.
6 · Graphics and performance
Read and do: GPU basics, packets, registers, shaders, Vulkan and the program cache; coherency and concurrency; then the draw trace and performance.
Keep: A packet → state → shader → resource → submission → completion ledger. Use each lesson's first-pass guide before its implementation reference.
7 · First contribution
Read and do: Evidence gates, diagnostics, log reading, a worked diagnosis, debugging labs, then a bounded change.
Keep: A reproducible failure, explained correction and ordinary, boundary and error checks.
The sidebar step numbers, home progress grid and Previous/Next links follow this core route. C++ and subsystem lessons appear alongside the concepts they support. B/C/D codes identify lessons; the step numbers give the reading order. Advanced research, visual tools and the glossary remain outside the core route. Allow time to stop, predict, run and explain; reading time is not a completion deadline.
Readiness questions
Can you explain the compiler, linker and debugger?
The compiler translates a source file; the linker connects compiled definitions and libraries into an executable; the debugger lets you pause an executable and inspect its state. Complete B1's broken-build exercise if these are new.
What are the last four readable bytes in a five-byte buffer?
Offsets 1 through 4. A four-byte read may start at 0 or 1. Check the offset before subtracting it from the size; checking offset + 4 alone can wrap. See B2.
Does a span keep its vector alive?
No. The vector's storage must remain alive and valid for the view. Reallocation can invalidate the view while the vector object still exists. See B3.
Does KytyPS5 interpret every guest CPU instruction like the teaching CPU?
No. On its native x86-64 path it maps guest code into the host process and executes it, while adapting calls, instructions and services at specific boundaries. The interpreter in B4 is a model for learning instruction execution, not KytyPS5's implementation.
Can resource 1 be freed when submission 7 completes if submission 9 also uses it?
No. Its last use is 9, so a completed value of 7 is insufficient. A CPU mutex does not itself wait for a device submission. See B5, then C4 before working on threaded code.
What a code box means
- Runnable teaching program: complete source, build/run instructions, expected output and checks. The beginner programs are original teaching fixtures.
- Project excerpt: selected lines from a named KytyPS5 file or function. Its surrounding declarations and build configuration are required; it is not a standalone program.
- Conceptual pseudocode: a simplified sequence or invented format. It explains a relationship, not a callable project API or a valid console binary.
The code-reading pages identify their source next to excerpts. Ellipses and schematic comments indicate omitted detail. Do not paste such a fragment into a compiler and expect a complete program.
What completing this route means
You should be able to follow a selected boot and draw path, explain the main ownership and execution boundaries, and verify a small regression fix. It does not mean every shader opcode, platform ABI, audio pipeline or console behavior is covered. Use the coverage map to choose a deeper track: loader/HLE, memory/threads, graphics/shaders, or system services. Ray tracing is an advanced branch after the graphics prerequisites.
Source snapshot: d2413fc2ebd91d1b7234197c2dd5bd48e1cb6a51 (7 October 2026). Named source functions are reading anchors, not guarantees about a different checkout.
Before moving on
Ticks record your own assessment. Keep your prediction, actual output and explanation; a tick alone is not evidence of understanding.