Skip to main content
The system module API provides functions to load and unload PS3 system libraries at runtime. Many PSL1GHT APIs require their corresponding system module to be loaded before use.

Overview

System modules are dynamic libraries that provide functionality for various hardware and software features. Instead of linking all libraries statically, you can load only the modules you need at runtime, reducing memory usage.
Some modules may already be loaded by the system or other libraries. Use sysModuleIsLoaded() to check before loading.

Error Codes

CodeValueDescription
SYSMODULE_OK0x00Operation successful
SYSMODULE_LOADED0x00Module is loaded
SYSMODULE_ERR_DUPLICATE0x80012001Module already loaded
SYSMODULE_ERR_UNKNOWN0x80012002Unknown module ID
SYSMODULE_ERR_UNLOADED0x80012003Module already unloaded
SYSMODULE_ERR_INVALID_MEM0x80012004Invalid memory container
SYSMODULE_ERR_FATAL0x800120ffFatal error occurred

Module IDs

sysModuleId
enum
Available system modules that can be loaded.

Network Modules

Module IDValueDescription
SYSMODULE_NET0x0Network library
SYSMODULE_HTTP0x1HTTP client library
SYSMODULE_HTTP_UTIL0x2HTTP utility functions
SYSMODULE_SSL0x3SSL/TLS library
SYSMODULE_HTTPS0x4HTTPS client library
SYSMODULE_NETCTL0x14Network control library
SYSMODULE_RUDP0x57Reliable UDP library

Multimedia Modules

Module IDValueDescription
SYSMODULE_VDEC0x5Video decoder base
SYSMODULE_ADEC0x6Audio decoder base
SYSMODULE_DMUX0x7Demultiplexer
SYSMODULE_VPOST0x8Video post-processing
SYSMODULE_PAMF0x12PAMF container format

Video Codec Modules

Module IDValueDescription
SYSMODULE_VDEC_MPEG20x24MPEG-2 video decoder
SYSMODULE_VDEC_H2640x25H.264/AVC video decoder
SYSMODULE_VDEC_DIVX0x3cDivX video decoder

Audio Codec Modules

Module IDValueDescription
SYSMODULE_ADEC_LPCM0x26LPCM audio decoder
SYSMODULE_ADEC_AC30x27AC-3 audio decoder
SYSMODULE_ADEC_ATX0x28ATRAC-X audio decoder
SYSMODULE_ADEC_AT30x29ATRAC3 audio decoder
SYSMODULE_ADEC_PAMF0x2aPAMF audio decoder
SYSMODULE_ADEC_MP30xf01eMP3 audio decoder
SYSMODULE_ADEC_CELP80x47CELP8 audio decoder
SYSMODULE_ATRAC30x13ATRAC3 encoder/decoder

Image Codec Modules

Module IDValueDescription
SYSMODULE_JPGDEC0xfJPEG decoder
SYSMODULE_JPGENC0x3dJPEG encoder
SYSMODULE_PNGDEC0x18PNG decoder
SYSMODULE_PNGENC0x52PNG encoder
SYSMODULE_GIFDEC0xf0a0GIF decoder

Graphics Modules

Module IDValueDescription
SYSMODULE_GCM_SYS0x10GCM graphics library
SYSMODULE_RESC0x1fResolution scaler
SYSMODULE_SAIL0x1dSAIL graphics utility

Font Modules

Module IDValueDescription
SYSMODULE_FONT0x19Font rendering
SYSMODULE_FONTFT0x1aFreeType font rendering
SYSMODULE_FREETYPE0x1bFreeType library
SYSMODULE_FREETYPE_TT0x40TrueType support

System Utility Modules

Module IDValueDescription
SYSMODULE_SYSUTIL0x15System utility library
SYSMODULE_SYSUTIL_NP0x16Network Platform utilities
SYSMODULE_USERINFO0x32User information
SYSMODULE_SAVEDATA0x33Save data management

I/O Modules

Module IDValueDescription
SYSMODULE_IO0x17I/O library
SYSMODULE_FS0xeFile system library
SYSMODULE_USB0x1cUSB device support

Audio Modules

Module IDValueDescription
SYSMODULE_AUDIO0x11Audio output library
SYSMODULE_MIC0x22Microphone input
SYSMODULE_VOICE0x46Voice processing
SYSMODULE_MUSIC20x4aMusic player v2
SYSMODULE_MUSIC_DEC0x4fMusic decoder
SYSMODULE_MUSIC_DEC20x53Music decoder v2

Threading Modules

Module IDValueDescription
SYSMODULE_SPURS0xaSPURS job system
SYSMODULE_SPURS_JQ0x50SPURS job queue
SYSMODULE_FIBER0x43Fiber library
SYSMODULE_SYNC0xdSynchronization primitives
SYSMODULE_SYNC20x55Synchronization v2

Miscellaneous Modules

Module IDValueDescription
SYSMODULE_RTC0x9Real-time clock
SYSMODULE_OVIS0xbOVIS library
SYSMODULE_SHEAP0xcShared heap
SYSMODULE_CAMERA0x23PlayStation Eye camera
SYSMODULE_GEM0x5aPlayStation Move
SYSMODULE_KEY2CHAR0x21Key to character conversion
SYSMODULE_DAISY0x20DAISY audio book
SYSMODULE_LV2DBG0x2eLV2 debugging
SYSMODULE_CELP8ENC0x48CELP8 encoder

Core Functions

sysModuleLoad

s32 sysModuleLoad(sysModuleId id);
Loads a system module.
id
sysModuleId
Module ID to load (see Module IDs section).
Returns: SYSMODULE_OK on success, error code otherwise.
Loading an already-loaded module returns SYSMODULE_ERR_DUPLICATE, which can usually be ignored.

sysModuleUnload

s32 sysModuleUnload(sysModuleId id);
Unloads a system module.
id
sysModuleId
Module ID to unload.
Returns: SYSMODULE_OK on success, error code otherwise.
Only unload modules when you’re completely done with them. Unloading a module that’s still in use will cause crashes.

sysModuleIsLoaded

s32 sysModuleIsLoaded(sysModuleId id);
Checks if a system module is currently loaded.
id
sysModuleId
Module ID to check.
Returns: SYSMODULE_LOADED (0) if loaded, SYSMODULE_ERR_UNLOADED if not loaded, or other error code.

Usage Example

#include <sysmodule/sysmodule.h>
#include <stdio.h>

int main() {
    s32 ret;

    // Check if module is already loaded
    ret = sysModuleIsLoaded(SYSMODULE_JPGDEC);
    if (ret == SYSMODULE_LOADED) {
        printf("JPGDEC module already loaded\n");
    } else {
        // Load JPEG decoder module
        ret = sysModuleLoad(SYSMODULE_JPGDEC);
        if (ret == SYSMODULE_OK || ret == SYSMODULE_ERR_DUPLICATE) {
            printf("JPGDEC module loaded successfully\n");
        } else {
            printf("Failed to load JPGDEC module: 0x%x\n", ret);
            return -1;
        }
    }

    // Use JPEG decoder functions...
    // ...

    // Unload module when done
    ret = sysModuleUnload(SYSMODULE_JPGDEC);
    if (ret == SYSMODULE_OK) {
        printf("JPGDEC module unloaded\n");
    }

    return 0;
}

Multiple Module Example

Loading multiple related modules:
#include <sysmodule/sysmodule.h>
#include <stdio.h>

int load_video_modules(void) {
    s32 ret;

    // Load base video decoder
    ret = sysModuleLoad(SYSMODULE_VDEC);
    if (ret != SYSMODULE_OK && ret != SYSMODULE_ERR_DUPLICATE) {
        printf("Failed to load VDEC: 0x%x\n", ret);
        return -1;
    }

    // Load H.264 codec
    ret = sysModuleLoad(SYSMODULE_VDEC_H264);
    if (ret != SYSMODULE_OK && ret != SYSMODULE_ERR_DUPLICATE) {
        printf("Failed to load H.264 decoder: 0x%x\n", ret);
        sysModuleUnload(SYSMODULE_VDEC);
        return -1;
    }

    // Load demuxer for container formats
    ret = sysModuleLoad(SYSMODULE_DMUX);
    if (ret != SYSMODULE_OK && ret != SYSMODULE_ERR_DUPLICATE) {
        printf("Failed to load DMUX: 0x%x\n", ret);
        sysModuleUnload(SYSMODULE_VDEC_H264);
        sysModuleUnload(SYSMODULE_VDEC);
        return -1;
    }

    printf("Video modules loaded successfully\n");
    return 0;
}

void unload_video_modules(void) {
    sysModuleUnload(SYSMODULE_DMUX);
    sysModuleUnload(SYSMODULE_VDEC_H264);
    sysModuleUnload(SYSMODULE_VDEC);
}

Network Stack Example

#include <sysmodule/sysmodule.h>
#include <stdio.h>

int init_network(void) {
    s32 ret;

    // Load base network module
    ret = sysModuleLoad(SYSMODULE_NET);
    if (ret != SYSMODULE_OK && ret != SYSMODULE_ERR_DUPLICATE) {
        return -1;
    }

    // Load SSL for secure connections
    ret = sysModuleLoad(SYSMODULE_SSL);
    if (ret != SYSMODULE_OK && ret != SYSMODULE_ERR_DUPLICATE) {
        sysModuleUnload(SYSMODULE_NET);
        return -1;
    }

    // Load HTTP client
    ret = sysModuleLoad(SYSMODULE_HTTP);
    if (ret != SYSMODULE_OK && ret != SYSMODULE_ERR_DUPLICATE) {
        sysModuleUnload(SYSMODULE_SSL);
        sysModuleUnload(SYSMODULE_NET);
        return -1;
    }

    // Load HTTPS (combines HTTP + SSL)
    ret = sysModuleLoad(SYSMODULE_HTTPS);
    if (ret != SYSMODULE_OK && ret != SYSMODULE_ERR_DUPLICATE) {
        sysModuleUnload(SYSMODULE_HTTP);
        sysModuleUnload(SYSMODULE_SSL);
        sysModuleUnload(SYSMODULE_NET);
        return -1;
    }

    printf("Network modules loaded\n");
    return 0;
}

Module Dependencies

Some modules have dependencies on other modules:
  • Base: SYSMODULE_VDEC
  • Codec: SYSMODULE_VDEC_MPEG2, SYSMODULE_VDEC_H264, or SYSMODULE_VDEC_DIVX
  • Optional: SYSMODULE_DMUX (for container formats), SYSMODULE_VPOST (for post-processing)
  • Base: SYSMODULE_ADEC
  • Codec: SYSMODULE_ADEC_LPCM, SYSMODULE_ADEC_AC3, SYSMODULE_ADEC_MP3, etc.
  • Optional: SYSMODULE_DMUX (for container formats)
  • Base: SYSMODULE_NET
  • HTTP: SYSMODULE_HTTP + SYSMODULE_HTTP_UTIL
  • Secure: SYSMODULE_SSL + SYSMODULE_HTTPS
  • Control: SYSMODULE_NETCTL
  • Base: SYSMODULE_FONT
  • FreeType: SYSMODULE_FREETYPE + SYSMODULE_FONTFT
  • TrueType: SYSMODULE_FREETYPE_TT

Best Practices

Important: Always load modules in the correct order, with base modules before dependent modules.
  1. Check for duplicates: It’s safe to ignore SYSMODULE_ERR_DUPLICATE errors
  2. Load early: Load modules during initialization, not during time-critical operations
  3. Unload late: Only unload modules during cleanup or when completely done
  4. Error handling: Always check return values and handle failures appropriately
  5. Module lifetime: Keep modules loaded for the duration they’re needed

Common Module Groups

Frequently used module combinations:
// Image decoding
sysModuleLoad(SYSMODULE_JPGDEC);
sysModuleLoad(SYSMODULE_PNGDEC);

// Video playback
sysModuleLoad(SYSMODULE_VDEC);
sysModuleLoad(SYSMODULE_VDEC_H264);
sysModuleLoad(SYSMODULE_ADEC);
sysModuleLoad(SYSMODULE_ADEC_AC3);
sysModuleLoad(SYSMODULE_DMUX);

// Graphics
sysModuleLoad(SYSMODULE_GCM_SYS);
sysModuleLoad(SYSMODULE_RESC);

// System UI
sysModuleLoad(SYSMODULE_SYSUTIL);
sysModuleLoad(SYSMODULE_SAVEDATA);
sysModuleLoad(SYSMODULE_USERINFO);

Build docs developers (and LLMs) love