Posted on December 1, 2003
And from the right to show the CPU fan and prove there are no unsightly bulges:
Finally the ultra low profile memory I was waiting for arrived and so at last I had Windows XP running inside my "Windows XP Box", and one of the most compact Mini-ITX projects ever. The cooling solution with two case fans and a ducted CPU fan works like a dream and is both quiet and effective. So far it has shown no tendency to burst into flames.
Windows XP is fine, but sometimes it's nice to be able to run Linux too. A dual boot system is the obvious solution, but it could provoke attack if I had Linux running in my "Windows XP Box". The only solution was to take a Linux boxed distribution and cut it to fit the support case to make a "Linux Box". There is a definite lack of industry standardisation in software distribution boxes. I was able to find a Red Hat Linux 9 boxed distribution that was 4mm narrower than my XP box, but obviously this was not usable as I had no room to spare and needed something the same size or bigger. But not too big as it would look silly to put the tiny support case into one of the massively wide Linux boxes that comes with dozens of manuals. In the end I was given an old Linux 7.1 box that was 15mm wider than the Windows XP box but otherwise the same depth and width. I used some roughly cut bits of Wonderboard to make packing pieces that would fit inside the Linux box on either side of the support case, and then cut the box to fit the support case.
The problem now was that I ran the risk of accidentally booting Linux from the "Windows XP Box" or even worse, booting Windows from the "Linux Box". That would not be good. It needed to be fool proof.
The solution is already visible in the picture of the Linux Box. It is cut for the inner support case orientated upside down from the way it is in the "Windows XP Box" (hint: the CD drive is at the bottom instead of the top).
In order to detect which way up the box is I built a little detector module. This is made out of a tilt switch and a resistor soldered on to a 10 pin IDC plug. This fits onto the internal serial port COM2 header on the Mini-ITX board just behind the parallel port connector. The resistor connects between the serial port DTR (Data Terminal Ready) output pin and the CTS (Clear To Send) input pin. The tilt switch connects between CTS and the serial port ground pin. By programming DTR high I can read the state of the tilt switch directly from the CTS line. It's a very small assembly so this photograph doesn't help much.
The final step was to take an assembly language MBR boot loader program and modify it to read the state of the tilt switch and make it boot the partition containing Windows XP or the partition containing Linux. To those that don't know the secret of how it works it looks like magic. It boots the right O/S for the box it is in.
... and Red Hat Linux 9 running in a Red Hat Linux box.