Status of HLE (High-Level Emulation) implementations for PS3 system modules in ps3recomp.
Legend:
- Not Started: No implementation exists
- Stubbed: Functions exist but only log and return CELL_OK
- Partial: Core functions implemented, advanced features missing
- Complete: Fully functional for known game use cases
| Module | Category | Status | Notes |
|---|---|---|---|
| sysPrxForUser | Core Runtime | Complete | Real host threads, lwmutex (CRITICAL_SECTION/pthread), lwcond (CV/pthread_cond), heap alloc, printf/snprintf, string/mem ops |
| cellSysmodule | Module Loader | Complete | Load/unload tracking, 55+ module ID constants, name lookup |
| cellSysutil | System Utility | Complete | Callbacks, system params, BGM playback, system cache, disc game check, license area |
| sys_ppu_thread | Kernel Threading | Complete | Real host threads (CreateThread/pthreads), join, detach, priority, rename |
| sys_fs | Kernel Filesystem | Complete | Full file I/O with PS3-to-host path mapping, directory ops, stat, big-endian output |
| sys_memory | Kernel Memory | Complete | Bump allocator from VM, containers, shared memory, mmapper |
| sys_event | Kernel Events | Complete | Event queues (circular buffer), ports (connect/send), 64-bit event flags (AND/OR wait) |
| sys_mutex | Kernel Mutex | Complete | CRITICAL_SECTION/pthread_mutex, recursive, timed lock, deadlock detection |
| sys_cond | Kernel Condvar | Complete | CONDITION_VARIABLE/pthread_cond, timed wait, signal, broadcast |
| sys_semaphore | Kernel Semaphore | Complete | Win32 Semaphore/POSIX sem_t, timeout, multi-count post |
| sys_rwlock | Kernel RWLock | Complete | SRWLock/pthread_rwlock, full read/write/try variants |
| sys_timer | Kernel Timer | Complete | QueryPerformanceCounter/clock_gettime, periodic event timers, usleep, timebase freq |
| sys_interrupt | Kernel Interrupt | Complete | Interrupt tag/thread management, EOI (stub — no real interrupts) |
| Module | Category | Status | Notes |
|---|---|---|---|
| cellFs | Filesystem | Complete | Real file I/O, configurable path mapping, dir enumeration, stat, truncate, chmod |
| cellFsUtility | FS Utility | Complete | MkdirAll, GetFileSize, ReadFile, WriteFile, CopyFile, Exists |
| Module | Category | Status | Notes |
|---|---|---|---|
| cellPad | Gamepad | Complete | XInput (Windows) / SDL2 backends, analog sticks, triggers, pressure buttons, rumble |
| cellKb | Keyboard | Complete | Key event injection, raw/ASCII modes, modifier/LED tracking |
| cellMouse | Mouse | Complete | Delta accumulation, buttons, wheel, buffered ring-buffer mode |
| Module | Category | Status | Notes |
|---|---|---|---|
| cellGcmSys | RSX System | Complete | Command buffer control, local mem allocator, IO mapping with offset tables, flip handler/VBlank callbacks, tile/zcull config, report/label areas, timestamps, 27+ functions |
| RSX Command Processor | GPU Commands | Complete | NV47xx FIFO parsing, state tracking (surfaces, viewport, scissor, blend, depth/stencil, cull, color mask, alpha test, 16 texture units, 16 vertex attribs, shader programs), draw arrays/indexed dispatch, rsx_backend callback interface. D3D12 backend renders real titles — the guest's own NV4097 vertex and fragment programs, indexed draws, per-draw constants and textures, render-to-texture, MRT. A Metal backend covers macOS. Vulkan is still unwritten, and is what Linux and Android need. |
| cellResc | Resolution | Complete | Init, display modes, buffer management, aspect ratio, interlace, flip/vblank handlers |
| cellVideoOut | Video Output | Complete | Resolution config, device info, all PS3 resolution IDs, default 720p |
| Module | Category | Status | Notes |
|---|---|---|---|
| cellAudio | Audio Output | Complete | WASAPI (Win) / SDL2 backends, mixing thread @ 5.33ms, multi-port mixing, 7.1 downmix |
| cellVoice | Voice Chat | Complete | Port management, connect/disconnect, start/stop, read/write (no actual voice data) |
| cellMic | Microphone | Complete | Init/end, all queries report no microphone attached |
| Module | Category | Status | Notes |
|---|---|---|---|
| cellPamf | PAMF Container | Complete | Big-endian PAMF header parser, stream queries, entry points, AVC/ATRAC3+/LPCM/AC3 info |
| cellVdec | Video Decode | Partial | H.264 and MPEG-2 decode through FFmpeg loaded at run time (-DPS3RECOMP_FFMPEG_RUNTIME=ON, libavcodec present): pictures in display order with PICOUT, pts/dts/userData and picture type in the PicItem, YUV420/UYVY/ARGB/RGBA output, EndSeq flush. Without FFmpeg: AUDONE+PICOUT per AU and a black picture, as before |
| cellAdec | Audio Decode | Partial | Open/close, start/end seq, AU submit with AUDONE+PCMOUT callbacks (populated PcmItem), no actual AAC/ATRAC3+ decode (needs FFmpeg) |
| cellDmux | Demuxer | Partial | Open/close, ES enable/disable, stream set with callback sequencing, AU retrieval, flush |
| cellVpost | Video Post | Complete | Handle management, query, exec stub (no actual color conversion/scaling) |
| cellJpgDec | JPEG Decode | Complete | Header parsing + stb_image decode, file/buffer sources |
| cellPngDec | PNG Decode | Complete | Header parsing + stb_image decode, RGBA/ARGB/RGB output |
| cellGifDec | GIF Decode | Complete | Header parsing + stb_image decode |
| cellJpgEnc | JPEG Encode | Complete | Handle management, encode returns NOT_SUPPORTED (needs stb_image_write) |
| cellPngEnc | PNG Encode | Complete | Handle management, encode returns NOT_SUPPORTED (needs stb_image_write) |
| cellSail | Media Player | Complete | Player lifecycle/state machine, open/start/stop/pause, immediate finish (no actual playback) |
| cellAtrac | ATRAC3plus | Partial | All-data-on-memory decode of ATRAC3plus RIFF files with looping, through FFmpeg loaded at run time. No streaming, no plain ATRAC3 |
| cellAdecAtrac3p | ATRAC3+ Decode | Partial | Open/close/decode/reset, mono/stereo, 44.1/48kHz; outputs silence (2048 samples/frame). Real ATRAC3plus is in cellAtrac |
| cellAdecCelp8 | CELP8 Decode | Complete | CELP8 voice codec — open/close/decode/reset, outputs silence (160 samples/frame @ 8kHz mono), multiple bitrate modes |
| cellVdecDivx | DivX Decode | Complete | DivX video decoder — open/close/decode/reset, outputs black frames, Mobile/Home/HD profiles |
| Module | Category | Status | Notes |
|---|---|---|---|
| cellFont | Font Rendering | Complete | Full lifecycle, stb_truetype backend, fallback metrics without STB |
| cellFontFT | FreeType Font | Complete | FreeType-based rendering, 16 font slots, fallback metrics (ascender=0.8×size, descender=-0.2×size), empty glyph bitmaps, kerning stub |
| cellFreeType | FreeType | Complete | FreeType2 library wrapper, reports version 2.4.12 (PS3 firmware 4.x), init/end lifecycle |
| cellL10n | Localization | Complete | UTF-8/16/32/UCS-2 bidirectional, ISO-8859-1, ASCII, generic converter API |
| Module | Category | Status | Notes |
|---|---|---|---|
| sys_net | BSD Sockets | Complete | Full BSD socket API — socket, bind, listen, accept, connect, send/recv/sendto/recvfrom, poll, select, setsockopt/getsockopt, shutdown, close, gethostbyname, inet_aton, errno |
| cellNet | Network Core | Complete | Winsock/POSIX init, DNS resolver with real getaddrinfo, async poll |
| cellNetCtl | Network Control | Complete | Real host IP detection, NAT type, connection state, handler callbacks |
| cellHttp | HTTP Client | Complete | Real HTTP/1.1 via native sockets (Winsock2/POSIX), DNS resolve, send/recv, header parsing, Content-Length, custom headers, timeouts |
| cellHttps | HTTPS Client | Complete | TLS/SSL client stub — init/end lifecycle, CA cert and client cert management, verify level config, no actual TLS (needs crypto lib) |
| cellHttpUtil | HTTP Utility | Complete | URL parsing/building, percent-encoding, form encoding, Base64 codec |
| cellSsl | SSL/TLS | Complete | Init/end lifecycle, certificate stubs, RNG via BCryptGenRandom/urandom |
| cellRudp | Reliable UDP | Complete | Context management, bind/close work, connect/send/recv return NOT_CONNECTED |
| Module | Category | Status | Notes |
|---|---|---|---|
| sceNp | NP Core | Complete | Configurable username, fake NP IDs, account region/age |
| sceNpBasic | NP Basic | Complete | Friends list, presence, messaging, invitations, block list (offline stub) |
| sceNpCommerce | NP Commerce | Complete | Context management, store operations return NOT_CONNECTED (offline stub) |
| sceNpClans | NP Clans | Complete | Create/join/leave/search clans, all return NOT_CONNECTED (offline stub) |
| sceNpTus | NP TUS | Complete | Local variable/data storage, set/get/add/delete, per-slot with async polling |
| sceNpMatching2 | NP Matching | Complete | Rooms, signaling and callbacks over a psnr server with PS3_NET_ONLINE; offline, operations return SERVER_NOT_AVAILABLE |
| sceNpSignaling | NP Signaling | Complete | Context management, connection ops return NOT_CONNECTED, local net info |
| sceNpSns | NP SNS | Complete | Facebook/Twitter stubs, operations return NOT_CONNECTED |
| sceNpTrophy | NP Trophies | Complete | Persistent JSON storage, unlock with timestamps, progress tracking |
| sceNpUtil | NP Utility | Complete | Bandwidth test (fake 100Mbps), NP environment, online ID validation, parental control |
| Module | Category | Status | Notes |
|---|---|---|---|
| cellSaveData | Save Data | Complete | Callback-driven save/load, directory enumeration, file ops, simplified PARAM.SFO |
| cellGame | Game Utility | Complete | Boot check, content permit, param read, data directory management |
| cellMsgDialog | Message Dialog | Complete | Prints to stdout, auto-responds YES/OK, progress bar tracking |
| cellOskDialog | OSK Dialog | Complete | UTF-16 support, configurable default response, async pattern |
| cellVideoUpload | Video Upload | Complete | Init/term, upload returns NOT_SUPPORTED |
| cellScreenshot | Screenshot | Complete | Enable/disable, parameter/overlay tracking (capture via GCM integration) |
| cellBGDL | Background DL | Complete | Init/term, download list always empty, start returns BUSY |
| cellUserInfo | User Info | Complete | Default user (00000001/"User"), GetStat/GetList/SelectUser |
| Module | Category | Status | Notes |
|---|---|---|---|
| cellSpurs | SPURS | Partial | Management APIs, workloads, tasks, tasksets, event flags with real blocking (CRITICAL_SECTION/pthread condvars). Tasks, job chains and workloads run lifted SPU code; see SPU_LIFTER.md |
| cellSpursJq | SPURS Job Queue | Complete | Job queue create/destroy, push with completion tracking, wait/tryWait with proper BUSY returns, port create/destroy, 16 max queues |
| cellDaisy | Daisy Chain | Complete | Lock-free FIFO pipes with real ring buffer, push/pop/try variants, 32 max pipes, 256 max depth, count/free queries |
| cellFiber | Fiber | Complete | PPU fibers via Windows Fibers/ucontext: scheduler, create, RunFibers, WaitSignal/SendSignal, JoinFiber, Yield, Exit, Self |
| cellSync | Sync Primitives | Complete | Atomic spinlock mutex, counter barrier, RWM, bounded queue, lock-free queue |
| cellSync2 | Sync Primitives 2 | Complete | OS-backed mutex/cond/semaphore/queue with timeouts |
| Module | Category | Status | Notes |
|---|---|---|---|
| cellUsbd | USB Driver | Complete | LDD registration, device list returns empty, pipe/transfer ops return NO_DEVICE |
| cellCamera | Camera | Complete | Init/end, all device queries return DEVICE_NOT_FOUND / not attached |
| cellGem | Move Controller | Complete | Init/end, GetInfo reports 0 connected, all queries return NOT_CONNECTED |
| cellAvconfExt | AV Config | Complete | Audio output device info, sound availability, configuration, gamma control |
| Module | Category | Status | Notes |
|---|---|---|---|
| cellRtc | Real-Time Clock | Complete | Host time -> PS3 ticks, DateTime, time arithmetic, RFC formatting, day-of-week |
| cellOvis | Overlay | Complete | Init/term, overlay create/destroy/invalidate (no-op stubs) |
| cellSheap | Shared Heap | Complete | Bump allocator with block tracking, alloc/free/query, up to 8 heaps |
| cellKey2char | Key to Char | Complete | HID scancode to Unicode, US-101 layout, shift/caps handling, dead key mode |
| cellSubdisplay | Sub-display | Complete | PS Vita Remote Play stub — init/end/start/stop lifecycle, always reports not connected, touch data returns empty |
| cellImeJp | IME Japanese | Complete | Japanese IME — open/close/reset, input mode config, add/backspace/confirm, passthrough conversion (no kanji), 4 handles |
| cellGameExec | Game Execute | Complete | Exit params, boot game info, ExitToShelf |
| cellLicenseArea | License Area | Complete | Region check (Americas default), all areas valid |
| cellMusicDecode | Music Decode | Complete | Init/finish, decode returns NOT_SUPPORTED |
| cellMusicDecode2 | Music Decode 2 | Complete | Init/finalize, decode returns NOT_SUPPORTED, format info stub |
| cellVideoExport | Video Export | Complete | Video export to XMB — init/end, export/abort/progress, returns NOT_SUPPORTED with callback |
| cellMusicExport | Music Export | Complete | Music export to XMB — init/end, export/progress, returns NOT_SUPPORTED with callback |
| cellGameRecording | Game Recording | Complete | In-game recording — init/end/start/stop/pause/resume, IsRecording, duration query (no actual capture) |
| cellPhotoExport | Photo Export | Complete | Photo export to XMB — init/end, export returns NOT_SUPPORTED with callback |
| cellPhotoImport | Photo Import | Complete | Photo import from XMB — init/end, import returns NOT_SUPPORTED with callback |
| cellPrint | Print Utility | Complete | USB printer support — init/end, GetPrinterCount always returns 0 |
| cellRemotePlay | Remote Play | Complete | Remote Play availability — init/end, IsAvailable returns 0, status reports disconnected |
| Status | Count |
|---|---|
| Complete | 91 |
| Partial | 6 |
| Stubbed | 0 |
| Not Started | 0 |
| Total | 97 |
Counts are the module rows above (the ones with a Category column) whose Status
column holds each value. Recount one status with
grep -c '^| [^|]* | [^|]* | Partial |' docs/MODULE_STATUS.md; for Complete use
\*\*Complete\*\* in place of Partial.
- Metal and Vulkan at D3D12 parity — the shared draw engine runs guest shaders on both; a title has yet to run on either from this tree
- cellSpurs — the remaining SPURS surface (Taskset2, workload edge cases)
- cellAdec / cellDmux / cellSail — Real audio decode and PAMF demux on the run-time FFmpeg loader cellVdec uses (
libs/codec/ffmpeg_runtime.c) - cellJpgEnc / cellPngEnc — Integrate stb_image_write for actual encoding
- Remaining niche modules — cellAdecExt, cellAudioExt, and any other game-specific needs