PoyrazDereli
Member
FASTNET
A Faster Network Path for the PlayStation 2
A Faster Network Path for the PlayStation 2
FASTNET is a dedicated high-speed receive path for moving Ethernet/IPv4/UDP traffic from a PC into EE memory through the PlayStation 2 network adapter.
It keeps Sony's DEV9/SMAP hardware ownership intact and specializes the receive delivery path for bulk DATA transfer.
Technical base
FASTNET is built on the SCE EENet architecture, the first-party path for the PS2 network hardware. SCE documentation defines EENet as an EE-side TCP/IP stack: `libeenet.a` contains the protocol stack body, while `ent_smap.a` and `ent_smap.irx` form the EE/IOP sides of the network adapter driver.
In this model, receive processing runs on the EE side, while DEV9/SMAP device control and link state remain on the IOP side.
FASTNET keeps this EE/IOP hardware split. DEV9/SMAP init, PHY/link state, descriptor ownership, DMA behavior, interrupt/recovery flow, and basic device ownership remain on the stock path.
Receive path
FASTNET redirects accepted RX frames into its own aggregation path before normal upper-layer delivery.
Code:
SMAP FIFO
-> stock ent_smap ownership / recovery
-> FASTNET IOP aggregation
-> ordered SIF DMA
-> EE ring publication
-> FASTNET DATA processing
The receive hook runs after the stock descriptor, frame length, MAC, and hardware-facing checks have accepted the frame.
The existing SMAP FIFO copy writes frame records into FASTNET aggregation memory. Protocol classification is done after the frame reaches the EE ring. FASTNET handles its own UDP DATA/control traffic directly; unrelated traffic is discarded.
The EE-side SMAP adapter remains available for interface state and the existing transmit path, including FASTNET replies.
IOP aggregation
FASTNET uses eight 32 KiB aggregation chunks.
Each stored record contains:
Code:
frame length
Ethernet frame
alignment padding
A chunk is queued when the next frame does not fit, when it reaches the DATA threshold, or when the idle seal releases short traffic.
The frame is copied from the SMAP FIFO into its final location inside the active chunk. Frame records are transferred to the EE in batches, reducing SIF requests, completion callbacks, and synchronization overhead.
SIF DMA and EE ring
Two DMA transfers can be active at the same time.
Each transfer uses one payload descriptor, or two when the EE ring wraps, followed by a commit descriptor.
Code:
payload DMA
-> commit DMA
-> records become visible to the EE
The EE consumes only committed records. After processing, the EE reports its read position so ring space and IOP chunks can be reused.
Non-wrapped records are parsed directly from the EE ring. Only records that wrap around the end of the ring use staging copy.
DATA format
The current FASTNET DATA path uses 1470-byte payload records.
Code:
UDP source port = transfer token
UDP payload = packet index + DATA payload
The stream state tracks packet order and detects gaps during the receive test.
Retail measurement
The current FASTNET receive path was measured on retail PS2 hardware with fixed-size DATA stages. Each stage transfers 128,000,000 bytes of payload and reports received payload, packet count, gap count and result code from the PS2 side.
Latest fine sweep result:
Code:
target payload rate rc gaps received payload
12.2 MB/s 97.6 Mbps 0 0 128000000/128000000
12.3 MB/s 98.4 Mbps -17 596 127123880/128000000
The 12.2 MB/s target completed cleanly with zero packet gaps. At this rate the DATA payload target is already 97.6 Mbps before Ethernet/IP/UDP framing overhead, so the test is operating in the practical upper region of a 100BASE-TX link.
The next step, 12.3 MB/s, reports packet gaps. This marks the first observed loss point in the current fine sweep.
Scope
FASTNET covers the network transport only. Disk access, file systems, and application-level protocols are outside this part of the project.
Requirements
* Windows 10 or Windows 11
* PowerShell 7 or newer
* Python 3
* PC and PS2 connected to the same local network
* UDP ports 31002 and 31003 allowed through the firewall
Default network addresses:
Retail PS2
1. Extract the package.
2. Start the host script:
3. Boot the EE ELF on the PS2:
4. Wait for the FASTNET session to connect.
5. Use the interactive host console.
Useful commands
Host logs are written under:
* Windows 10 or Windows 11
* PowerShell 7 or newer
* Python 3
* PC and PS2 connected to the same local network
* UDP ports 31002 and 31003 allowed through the firewall
Default network addresses:
Code:
PC: 192.168.1.101
PS2: 192.168.1.102
Retail PS2
1. Extract the package.
2. Start the host script:
Code:
pwsh .\tools\run_ps2nbd_host_probe.ps1
3. Boot the EE ELF on the PS2:
Code:
out\ps2nbd_ee.elf
4. Wait for the FASTNET session to connect.
5. Use the interactive host console.
Useful commands
Code:
help show available commands
hello start or refresh FASTNET handshake
fnstatus request FASTNET status from PS2
status show host/session/stream status
eestream run one DATA receive test
finesweep11mb run 11.0-12.5 MB/s fine sweep
stop stop active stream test
reset reset current session
poweroff request PS2 shutdown
Host logs are written under:
Code:
.tmp\host_probe
Trivia
As a small bonus, PS2NBD uses the original PlayStation 2 BIOS OSD font for its on-screen interface.
On a retail PS2, pressing the physical RESET button once performs a safe power-off sequence instead of an immediate reset.
PS2NBD — coming after FASTNET.
Attachments
Last edited: