How webMAN MOD Mounts Games: Core Support for ISO, JB Folders, and Network Formats

webMAN MOD mounts games by exposing ISO files, JB folders, and network images as a virtual /dev_bdvd disc through a layered architecture of HTTP request parsers, mount type selectors, and kernel-level sector streaming drivers.

webMAN MOD is a sophisticated PlayStation 3 plugin that transforms how users launch games from diverse storage sources. The webMAN MOD game mounting system supports everything from local NTFS ISOs to remote SMB shares and extracted Jailbreak folders, presenting them to the console as standard Blu-ray discs. This flexibility relies on a modular architecture that cleanly separates command parsing, format detection, and low-level device emulation.

Three-Layer Mounting Architecture

The mounting engine in aldostools/webman-mod is organized into three distinct layers, each handling specific responsibilities from HTTP request to kernel registration.

Request Parsing and HTTP Command Handling

The first layer interprets incoming HTTP commands through endpoints like /mount.ps3, /mount_ps2, and /mount.ps3/unmount. Located in the web server implementation within include/www/www_page.h, this layer normalizes file paths by stripping /PS3_GAME suffixes and extracting query flags such as ?emu=ps1_emu.self via get_flag(). The normalized path is then passed to the central dispatcher for routing.

Mount Type Selection and Driver Routing

The second layer determines which driver handles the request. In include/mount/mount.h, the mount_game() function calls set_mount_type() (lines 444-452) to analyze file extensions and special tags. This routine checks for .iso, .ntfs[PS3ISO], .cue, and identifiers like [raw], [net], or [PS2] to route the request to the appropriate handler: rawseciso for local storage, netiso for network streams, or specialized emulators for PSX/PS2 content.

Kernel-Level Driver Execution

The third layer launches dedicated PPU threads that communicate with the kernel's disc-file plugin. For local ISOs, rawseciso_thread() in include/mount/rawseciso.h opens USB devices via sys_storage_open() and registers the proxy through sys_storage_ext_mount_discfile_proxy(). Network mounts use netiso_thread() from include/mount/netiso.h to establish TCP sockets and proxy sector reads remotely. PSX and PS2 formats invoke mount_psxemu() or mount_ps2disc() to construct virtual disc images from folders or cue sheets.

Step-by-Step Game Mounting Workflow

The complete mounting process follows a strict sequence from URL reception to virtual disc presentation.

URL Parsing and Command Extraction

When the built-in web server receives a request like /mount.ps3/USB0000/ISO/game.iso, it strips the /mount prefix and processes query parameters. The normalize_path() function ensures consistent path formatting across different storage devices and network locations.

Mount Type Detection via set_mount_type()

The set_mount_type() function examines the request for specific markers:

  • File extensions (.iso, .cue, .psx)
  • Storage tags ([raw] for NTFS, [net] for HTTP/SMB)
  • Platform identifiers ([PS2] for classics, [psn] for PSN packages)
  • Performance flags (RSX300-400 for overclocking)

Driver Initialization and Thread Launch

Based on the detected type, the system initializes the appropriate driver:

  • Raw ISO: Builds a rawseciso_args structure with device handles and emulation modes
  • Network ISO: Opens sockets to remote servers using read_remote_file_critical()
  • JB Folders: Maps /app_home to the extracted game directory via map_app_home()

Sector Reading and Caching

Once registered with the kernel plugin, the driver handles CMD_READ_ISO, CMD_READ_CD_2048, and CMD_READ_CD_2352 events. Raw mode uses sys_storage_read() for direct sector access, while network mode fetches specific byte ranges. Both drivers implement a 128 KB CD cache (cd_cache) to optimize repeated 2352-byte sector reads, significantly improving performance for CD-based games.

Unmounting and Cleanup

The do_umount() or do_umount_iso() functions issue fake eject events to the system, release the disc-file plugin through sys_storage_ext_umount_discfile(), and remove temporary cached files when the DEL_CACHED_ISO flag is set. This ensures clean transitions between different game formats.

Supported Formats and Special Tags

webMAN MOD recognizes specific tags that alter mounting behavior:

  • [raw]: Forces the rawseciso driver for local NTFS/ISO files, enabling direct sector access without filesystem abstraction.
  • [net]: Activates the netiso driver for remote HTTP or SMB shares, streaming data over the network interface.
  • [PS2]: Triggers PS2 classic emulation using mount_ps2disc(), expecting a folder structure containing a TRACKS file.
  • [psn]: Maps /dev_hdd0/game/[TITLE_ID] to /dev_bdvd/PS3_GAME, allowing PSN content to appear as disc-based games.
  • [bios]: Loads an external ps1_bios.bin for PlayStation 1 emulation via mount_psxemu().
  • RSX-: Applies per-game RSX overclocking (e.g., RSX300-400) through the overclock() function in mount.c.

Practical Code Examples

Mounting a Local NTFS ISO

Send an HTTP GET request to the webMAN MOD server:

GET /mount.ps3/USB0000/ISO/BLUS12345.iso

The system detects the .iso extension, routes to rawseciso_thread(), and streams the image as /dev_bdvd.

Mounting a Network ISO via SMB/HTTP

For remote storage, prefix the path with network indicators:

GET /mount.ps3/net0/http://192.168.1.10/games/BLUS12345.iso

The [net] tag forces netiso_thread() to open a TCP connection to the remote server and proxy all sector reads through the network interface.

Mounting an Extracted JB Folder

Extracted Jailbreak folders mount directly as game directories:

GET /mount.ps3/dev_hdd0/GAMES/MyGame/

Alternatively, map the folder to /app_home for XMB integration:

mount_game("/dev_hdd0/GAMES/MyGame", MOUNT_SILENT);
mount_app_home = true;  // Maps /app_home to /dev_bdvd
map_app_home();         // Updates XMB shortcuts

PS2 Classic Disc Mounting

For PlayStation 2 games in folder format:

GET /mount.ps2/USB0000/PS2DISC/Spyro_Triangle/

mount_ps2disc() recognizes the /mount.ps2 prefix, sets emu_mode to EMU_PS2_DVD, and constructs the track table from the folder's metadata.

Enabling Auto-Play After Mount

Configure automatic game launch after successful mounting:

if (webman_config->autoplay) {
    auto_play(param, false);  // Monitors XMB state and launches game icon
}

The auto_play() function waits for the disc ready state, then simulates user input to start the game automatically.

Key Source Files and Functions

Understanding the codebase requires familiarity with these critical components:

  • include/mount/mount.h: Central dispatcher containing mount_game() and set_mount_type() (lines 444-452) for request routing and mount type determination.
  • include/mount/rawseciso.h: Implements rawseciso_thread() and rawseciso_stop_thread() for local ISO/NTFS mounting, including multi-disc support and sector caching.
  • include/mount/netiso.h: Network driver with netiso_thread() and remote file reading capabilities for SMB/HTTP streaming.
  • include/mount/psxemu.h: PlayStation 1 emulation support through mount_psxemu(), handling BIOS loading and cue sheet parsing.
  • include/mount/ps2_disc.h: PS2 classic mounting via mount_ps2disc() with track table generation for folder-based games.
  • include/www/www_page.h: HTTP endpoint definitions for /mount.ps3, /mount_ps2, and unmount operations.
  • include/setup.h: Configuration structures enabling auto-mount, autoplay, and overclocking tag processing.

Summary

  • webMAN MOD presents ISO files, JB folders, and network images as a unified /dev_bdvd virtual disc through a three-layer architecture.
  • The system uses rawseciso for local storage, netiso for network shares, and specialized emulators for PSX/PS2 content.
  • Mount type detection relies on file extensions and special tags ([raw], [net], [PS2]) processed by set_mount_type() in include/mount/mount.h.
  • Kernel-level integration occurs through sys_storage_ext_mount_discfile_proxy(), with dedicated PPU threads handling sector reads and 128 KB CD caching.
  • Cleanup operations via do_umount() ensure proper resource release when switching between games.

Frequently Asked Questions

How does webMAN MOD handle different game formats?

webMAN MOD uses the set_mount_type() function in include/mount/mount.h to inspect file extensions and tags. It routes ISO files to rawseciso_thread(), network paths to netiso_thread(), and PS2 folders to mount_ps2disc(), each registering the appropriate kernel plugin to emulate /dev_bdvd.

What is the difference between rawseciso and netiso drivers?

rawseciso (in include/mount/rawseciso.h) accesses local USB/NTFS storage directly via sys_storage_read() for maximum throughput, while netiso (in include/mount/netiso.h) streams sectors over TCP sockets using read_remote_file_critical(), enabling games to run from remote servers without local copying.

How does JB folder mounting work in webMAN MOD?

JB (Jailbreak) folders mount through the standard path parsing logic, with optional remapping via map_app_home() to associate /app_home with the mounted content. This allows the XMB to display the game as a disc icon while the actual files reside in /dev_hdd0/GAMES/ or external USB paths.

Can webMAN MOD automatically launch games after mounting?

Yes. When webman_config->autoplay is enabled, the auto_play() function monitors the mount state and automatically selects the game icon in the XMB once the virtual disc is ready, eliminating manual navigation to start the application.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →