This part of the site is about my hardware projects.

  1. Philips CD-i 18x system
  2. REALmagic Hollywood Plus
  3. Hauppauge WinTV
  4. Iomega Buz
  5. Commodore Plus/4
  6. Commodore 64

Philips CD-i 18x system


Philips CD-i 18x

This is a very early (developed in 1988, internally marketed at Philips about 1991) CD-i player. Actually it is not a consumer system, but a complete CD-i authoring system with floppy drives in front, a SCSI interface and a BNC network interface. Provided you use the right software (e.g. MediaMogul 1.2), you can interface the system from a self-built serial PC connection. I remember using a freeware software product called “Cyclone” under DOS. There’s even a ZCode (Infocom) interpreter for OS9 (Motorola 68070) available that can be played from the PC’s keyboard.

The schematic for this table was once (I found it in September 1997) on the “” site. That site is down, but the pages are still hosted by

180 Player to PC serial
6 ft.
(180 Player)
1 1 Chassis GND
2 2 TXD–>RXD
3 3 RXD<–TXD
7 5 GND
4 }Jumper together. RTS,CTS
6 }Jumper together. DSR,DCD,DTR

I used to have this machine connected to a Commodore 1084S monitor, but the monitor died about a year ago. I replaced it by a Philips CM8833, which has sharper image, but the stereo sound is not too good, and it has a Scart interface. Previously, the CD-i was connected using a self-built D15-to-D9 cable.

CD-i 180 Player to 1CM135 Monitor Video
6 ft.
(CD-i 180 Player)
1 3 Red
2 4 Green
3 5 Blue
7 1 GND
13 7 Sync

I did not make time to solder a D15-to-Scart cable, so the CD-i composite video (NTSC output only?) is used instead. Actually it is connected to a simple Commodore 1702 monitor. The CD-i also seems to suffer from old age, since it cannot play CD-i applications at the moment, only audio cds. However, the drive still recognizes discs correctly, for instance cd-i, or cd-i:dAtA.

REALmagic Hollywood Plus

I bought this card together with a simple Philips 4XDVD player (generation II?) at a well-known Duth computer event, called “de HCC-dagen” in 1999. It was quite cheap actually, and I’m still satisfied by the card and the drive’s capabilities.

[REALmagic Hollywood Plus]

It seems that just as many people love this card as there are that hate it. The card performs beautifully, but several problems may prevent it from being installed and running correctly. Many enthousiast people do their own “hobby” projects on it, for instance for writing Linux drivers, RGB support and a different, skinnable player at Eugene’s.

Previously, the sound was looped through my TV card (see below), which required me to turn that on as well (and minimize it) to watch DVDs. Luckily, there is a registry setting (apparently it once was available as “h-plus_audio.reg”) that allows you to use sound directly, without a passthrough cable. An excerpt from the following site:

“Rather than using the supplied 3.5mm stereo line-out to soundcard line-in, there is a registry setting which tells the HW+ drivers to send the audio data to your soundcard directly. This saves the audio signal going thru the D-to-A on the HW+ card incurring the resultant signal degradation.”

[HKEY_LOCAL_MACHINE\Software\Sigma Designs\REALmagic\13]

Hauppauge WinTV


Hauppauge capture card


I have been using the Hauppauge WinTV card since 1999. It brings television, radio and teletext to your computer. You can even use a remote control with it (that can be used in other programs as well, for instance the ever popular WinAmp).


Remote control

I wrote a program (of which I am the only user!) to support the following: the Hauppauge allows you to select either the tuner or a composite/S-Video source. This will also switch sound to a different source. I did not like this, as in some cases I wanted an external image source with internal tuner audio, for instance as a quality way of capturing from VHS. For hardware access of the I2C bus, it uses a driver that is also used by a program called “MoreTV”, hwiodrv (written by King Elli and released as freeware). Essentially, some of the register values were deduced under the Windows 9x kernel, with a BT848 register tool. These don’t seem to work under W2K. If you have one that does, please contact me. Excerpt from my code, I might decide never to release the program or its source code.

__fastcall TForm1::ATunerClick(TObject *Sender)

// just write the correct value directly to a register
DWORD nValue = (DWORD)16777144;
const int GPIO_DATA = 0x200;
MyBT848->WriteBT(GPIO_DATA, nValue);


Side note: My program was developed using a very old version (1, 0, 0, 1) of this driver. For W2K support, version 3.50 was tested, and 3.51 will probably work as well. Similar programs are TVicHW32 (of EnTech Taiwan) and IOCtrl, available in the Conexant Reference Drivers for BT8x8, BT8x9. If you use HWIO, you may run into the problem that suddenly the BT8x8/9 card is not found. Deleting the following key will solve this: “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HWIONT”.

Other tricks when you have no sound is running “rundll32.exe bt848dlg.dll,initialize” (apparently for the VFW drivers only, since bt file is not on my system, wchich uses newer WDM drivers). If the sound stays on after closing the application that accessed the capture card, try running “rundll32.exe bt848dlg.dll,disconnect” (same). Some of the files in the newer WDM are “BT848WST.dll”, “Bt848_32.dll” and “BTGPIO32.dll”. They seem they export interesting functions, for instance I2CSWWrite. Perhaps this allows for more direct hardware access without using an additional library. I think I just found a great reference document here. A very promising project is DScaler

The prerequisite to run the DLL with rundll32.exe (16-bit case is omitted here) is that the DLL exports a function with the following prototype:

void CALLBACK EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);

For instance, a DirectShow filter like DiVXG400 can be controlled by “rundll32.exe,Configure”. A control panel applet exports something like the following (just try “start /w rundll32 Shell32.dll,Control_RunDLL Desk.cpl @0,3″ from a command-line prompt):

extern “C” int __stdcall __declspec(dllexport) CPlApplet(HWND HwControlPanel, int Msg, int lParam1, int lParam2);

Of course, the real fun only begins if you can combine existing technologies. The following case demonstrates this well. Actually you do not see the whole of it, as the capture output is displayed on a separate monitor.




This is accomplish by using the latest WDM capture drivers for the Hauppauge card, Filter Graph Editor from the DirectX 8 SDK (version, and the Hollywood Plus YUV output filter from DiVXPlus. In effect, DiVXPlus makes the Hollywood Plus compatible with DirectShow. Similar results can be achieved by opening a media file (DiVX, Microsoft AVI, etc.), and replacing “Video Renderer” by “HPlus YUV Video Renderer” in the filter graph that has been rendered. The the picture is upside-down and not fullscreen and the DirectShow filter does not export properties for these settings.

Recently, I created a way to achieve the same goal from (Borland) C++ (Builder) using the IGraphBuilder interface, which worked well. According to a newsgroup post by Per Ådne Mugaas, the following should also work. WDM Filters are identified by their FriendlyName. You can add one to the graph as described in “Enumerate and Access Hardware Devices in DirectShow Applications” in the SDK. Alternatively you can create the filter graph with GraphEdit and save it as a Filter Graph file, pass the filename to RenderFile()and pass the WDM Filter’s FriendlyName to FindFilterByName() to get a pointer to the correct proxy filter.

I also tried opening a DirectShow filter the “old school” (i.e. using COM objects without using the COM intreface, just like a DLL), and that also worked fine. This was (partly) based on what I saw in some source code of the avifile project.

#include <control.h> // IMediaControl
GUID CLSID_HPlusYUV = { 0x4D4B1600, 0x33AC, 0x11CF, { 0xBF, 0x30, 0x00, 0xAA, 0x00, 0x55, 0x59, 0x5A}};
int EnumerateSDYUV()

HANDLE handle = NULL;
IClassFactory* factory = 0;
IUnknown* object = 0;
IBaseFilter* filter = 0;
IEnumPins* enum_pins = 0;try {

handle = LoadLibrary(“”);
if (handle != NULL) {

HRESULT (*DllGetClassObject)(REFCLSID rclsid, REFIID riid, void** ppv);


Iomega Buz

Recently I obtained an Iomega Buz. I had some problems with the motherboard, which was running out of IRQs. Therefore, I disabled the serial ports. It’s running fine now when the included MGI Videowave SE software is not used. I prefer VirtualDub over this product, as well as the older Windows Media Player (“mplayer2.exe”), which is still present in Windows Millennium (luckily).


Iomega Buz


Commodore Plus/4


Commodore Plus/4


Commodore 64


Commodore 64