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-400for overclocking)
Driver Initialization and Thread Launch
Based on the detected type, the system initializes the appropriate driver:
- Raw ISO: Builds a
rawseciso_argsstructure with device handles and emulation modes - Network ISO: Opens sockets to remote servers using
read_remote_file_critical() - JB Folders: Maps
/app_hometo the extracted game directory viamap_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 aTRACKSfile. - [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.binfor PlayStation 1 emulation viamount_psxemu(). - RSX-: Applies per-game RSX overclocking (e.g.,
RSX300-400) through theoverclock()function inmount.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 containingmount_game()andset_mount_type()(lines 444-452) for request routing and mount type determination.include/mount/rawseciso.h: Implementsrawseciso_thread()andrawseciso_stop_thread()for local ISO/NTFS mounting, including multi-disc support and sector caching.include/mount/netiso.h: Network driver withnetiso_thread()and remote file reading capabilities for SMB/HTTP streaming.include/mount/psxemu.h: PlayStation 1 emulation support throughmount_psxemu(), handling BIOS loading and cue sheet parsing.include/mount/ps2_disc.h: PS2 classic mounting viamount_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 byset_mount_type()ininclude/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:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →