PC Games over broadband
This system consisted of multiple elements:
- A virtual CD device driver client capable of retrieving CD-image data over TCP.
- A CD Image server capable of supporting large numbers of virtual CD drive clients
- Test and performance measurement tools
- Client browser plug-in for initiating virtual device operations (load, eject, etc)
- A web interface for presenting available game content to end users.
Corvus was responsible for the design and development of 1-3 while the client was responsible for 4 & 5.
Virtual CD device
This was a virtual CD device for Windows 9x (an NT driver was produced later) written as a VxD using VToolsD and SoftIce. This component required significant reverse-engineering of the behavior of physical CD devices (due to minimal documentation by Microsoft). A close match to the behavior of physical devices and disks was required to convince games that the CD was really in the drive (to the point of being to emulate audio tracks and bad blocks). The virtual CD driver retrieved image data in two ways -- via a ring 0 network interface (TDI layer -- also minimally documented) and via a local hard-disk cache (which the device driver also managed).
CD Image server
This was a TCP/IP based server package that served up CD image data in a manner analogous to an FTP server, for example. The CD Image server, written in C++, was a cross platform product, available as a Windows NT application, Windows NT service, or Unix/Linux daemon. A custom cross-platform library for resolving differences between Windows and Unix threads, sockets, and file/directory operations was used to accomplish this. High performance and reliability were basic requirements of the CD Image Server and considerable effort was spent on testing and performance tuning.
Follow up
The system was successfully completed and deployed. As planned, development was gradually transferred to a growing in-house development team at the client. Several million dollars of venture capital was raised on the basis of the initial version.