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

> Discover how webMAN MOD mounts games using ISO, JB folders, and network formats. Explore its core functionalities for seamless game access and virtual disc creation.

- Repository: [Aldo Vargas/webman-mod](https://github.com/aldostools/webman-mod)
- Tags: how-to-guide
- Published: 2026-02-24

---

**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`](https://github.com/aldostools/webman-mod/blob/main/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`](https://github.com/aldostools/webman-mod/blob/main/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`](https://github.com/aldostools/webman-mod/blob/main/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`](https://github.com/aldostools/webman-mod/blob/main/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<M>-<V>**: Applies per-game RSX overclocking (e.g., `RSX300-400`) through the `overclock()` function in [`mount.c`](https://github.com/aldostools/webman-mod/blob/main/mount.c).

## Practical Code Examples

### Mounting a Local NTFS ISO

Send an HTTP GET request to the webMAN MOD server:

```http
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:

```http
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:

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

```

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

```c
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:

```http
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:

```c
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`](https://github.com/aldostools/webman-mod/blob/main/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`](https://github.com/aldostools/webman-mod/blob/main/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`](https://github.com/aldostools/webman-mod/blob/main/include/mount/netiso.h)**: Network driver with `netiso_thread()` and remote file reading capabilities for SMB/HTTP streaming.
- **[`include/mount/psxemu.h`](https://github.com/aldostools/webman-mod/blob/main/include/mount/psxemu.h)**: PlayStation 1 emulation support through `mount_psxemu()`, handling BIOS loading and cue sheet parsing.
- **[`include/mount/ps2_disc.h`](https://github.com/aldostools/webman-mod/blob/main/include/mount/ps2_disc.h)**: PS2 classic mounting via `mount_ps2disc()` with track table generation for folder-based games.
- **[`include/www/www_page.h`](https://github.com/aldostools/webman-mod/blob/main/include/www/www_page.h)**: HTTP endpoint definitions for `/mount.ps3`, `/mount_ps2`, and unmount operations.
- **[`include/setup.h`](https://github.com/aldostools/webman-mod/blob/main/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`](https://github.com/aldostools/webman-mod/blob/main/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`](https://github.com/aldostools/webman-mod/blob/main/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`](https://github.com/aldostools/webman-mod/blob/main/include/mount/rawseciso.h)) accesses local USB/NTFS storage directly via `sys_storage_read()` for maximum throughput, while **netiso** (in [`include/mount/netiso.h`](https://github.com/aldostools/webman-mod/blob/main/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.