First mentioned on the official SN Systems website on the 10th November 2000 the PS2 Network Development Kit (NDK) was a software development tool that allowed developers to add online networking features to their games.
Also a post from December 20th 2000 on Gamasutra mentions that the Analyzer features “ packet dropping, reordering, corruption, and bandwidth simulation, to test for application robustness in the event of poor quality or error-prone communication links” 1
Mentioned in the March 2001 issue of the Game Developer Magazine in the front line tools section by Daniel Huebner. The tool contains a “TCP/IP” stack to help developers add in networking features to their Playstation 2 Games. The tool also contains a PS2 “Packet Analyzer” which runs on the connected windows PC and requires the PS2 DTL-T1000 development hardware 2.
Image of SN Systems demonstrating their Network Development Kit for Playstation 2 at the 2002 Game Developer Conference 3.
On a post on their official website entitled “SN Systems supports the first PlayStation®2 online enabled game” (25th October 2001) they announce that “Tony Hawk’s Pro Skater™ 3” used their Network Development Kit to become the first online PS2 Game! 4. It was developed By Neversoft Entertainment and also used the SN Systems ProDG development kit.
Diagram from the official website explaining how the TCP/IP stack works.
It all starts from the Socket or Modem/Device API in the Emotion Engine (EE), this is the API that the game developers will use to make network calls and thus is the public interface for the library.
They have tried to make the library similar to the “BSD sockets” library but due to the nature of the Emotion Engine this was not easy. They needed to create a library which could be called by multiple threads simultaneously in the EE 5.
The TCP/IP Stack runs on the Playstation 2’s I/O Processor (IOP) rather than on the Emotion Engine CPUs in order to allow the game to use the ‘precious emotion engine processing time’ rather than the networking library slowing the game down. It supports both blocking and non-blocking sockets but suggests using the non-blocking sockets from non-main-game-loop threads 5.
|IOP memory usage||Emotion Engine memory usage|
|Sony Computer Entertainment PlayStation®2 Network Adaptor (Ethernet)||361k||39k|
|USB Ethernet adapter||439k||39k|
One big bonus feature of the SN Systems NDK is that it actually supports not just the official Sony PS2 Ethernet adapter but also third party USB ethernet adapters too! This allowed gamers (and development studios) to purchase much cheaper hardware to play games using the NDK.
According to the official specifications of the NDK it claims to support more than just TCP/IP :
TCP/IP - Transport Control Protocol / Internet Protocol
UDP - User Datagram Protocol
PPP - Point-to-Point Protocol (PPP is always built into the Stack irx file but will only be used when a modem driver is used)
PPPoE - PPP over Ethernet
ARP - Address Resolution Protocol (ARP will only be used when an Ethernet or DECI2 driver is loaded)
ICMP - Internet Control Message Protocol
DHCP - Dynamic Host Configuration Protocol
CHAP - Challenge-Handshake Authentication Protocol
PAP - Password Authentication Protocol
The SN Systems Network Development Kit Analyzer is a program that runs on the developers PC and can intercept all the network packets coming into and out from the Playstation 2 5.
It uses the DECI2 interface instead of relying on a PS2 ethernet adapter or usb modem. It seems to be able to test reliability by dropping network packets and simulating different levels of bandwidth, it can also show performance graphs, statistics etc 6.
I presume this system worked very similar to Wireshark, it would be great to get a screenshot of it running.
I wonder if there is a list of PS2 games built using the SN Systems NDK, it will be a subset of the games listed here and we know Tony Hawk 3, 4 and Underground are definitely using it according to the official website.
One way to look would be to search the game disk for an IRX in the modules folder that contains the NDK TCP/IP module (snstkrel.irx or wildcard sn**.irx). Even better would be to find a game with snstkdbg.irx as that would also have the debug information in it!
These are the library files that you can dynamically link your application code to and will run on the IOP in the PS2. You should be able to find some of these in the MODULES folder of a PS2 disk that used the NDK!
|sndrv001.irx||USB-Ethernet (not PPPoE) driver|
|snstkdbg.irx snstkrel.irx||TCP/IP Stack debug version - includes run-time debug logging TCP/IP Stack release version - no run-time debug logging|
|snstfdbg.irx snstfrel.irx||Fast API IOP component - includes run-time debug logging Fast API IOP component - no run-time debug logging|
|sndrv202.irx||Wrapper driver for SCE Ethernet (PPPoE variant) driver|
|sndrv201.irx||USB-Ethernet (PPPoE variant) driver|
|sndrv101.irx||Wrapper driver for SCE modem driver|
|sndrv100.irx||Wrapper driver for SCE Ethernet (not PPPoE) driver|
|sndrv003.irx||Conexant chip set USB modem driver|
|sndrv002.irx||Lucent chip set USB modem driver|
Also you will need the following irx modules that are distributed by Sony in their Official SDK:
|usbd.irx||USBD library - low-level USB functions used by all USB drivers.|
|dev9.irx||HDD/Ethernet/modem adapter low-level library|
|smap.irx||Ethernet driver - for Sony network adaptor (Ethernet/modem)|
|spduart.irx||Modem driver - for Sony network adaptor (Ethernet/modem)|
|ommodem.irx||Omron modem driver|
Gamasutra Feature on NDK - https://www.gamasutra.com/view/news/91158/SN_Systems_Brings_Internet_Gaming_Closer.php ↩
Game Developer Magazine - March 2001 ↩
First PS2 Online Game (25th October 2001) https://web.archive.org/web/20040817005855/http://www.snsys.com:80/news/25100101.htm ↩
Wayback Machine Archive for the Official SN Systems description of the NDK - https://web.archive.org/web/20060220113243/http://snsys.com:80/PlayStation2/ndk.htm ↩ ↩2 ↩3
The Game Developers Conference Report 2002 - http://www.tmstation.scei.co.jp/ps2/public/Newsletter0006/nl06e-gdc.html ↩