This is a Grape rev. D iMac that I modified
to fit a Zotac IONITX-D-E motherboard. The
IONITX-D-E features an Intel Atom 330 CPU, and
the NVidia MPC79 chipset also used in the Mac
Mini. I also replaced the hard drive and optical
drive with new SATA equivilents. This mod should
work with any rev. A through rev. D tray loading
iMac G3.
As you will see, I only modified the
chassis, leaving the original power supply and
CRT in place. The power supply supplies 80 watts,
so if you attempt this yourself, be sure to get
a very low power motherboard. I initially tried
Intel's Atom 330 mini-itx board, and it didn't
work.
There is a myth that the display will not
display video if the iMac's motherboard is not
installed, but this is not true. I hooked it's
cable up to another machine and it worked fine.
The issue is that the screen only supports a
60kHz horizontal refresh rate, so you're
limited to one vertical rate for each resolution.
640x480 only works on 117Hz, 800x600@95, and
1024x768@75. There are other resolutions that
will work as well, but you have to figure out
the right vertical refresh rate to keep the
horizontal refresh rate at 60kHz. I plan to only
use 1024x768@75Hz.
The link below describes the process of installing
the iMac's logic board in a new case using standard ATX
components. I used it as a guide to do the opposite.
iMac to ATX conversion
You'll see that an inverter circuit is required to turn
the machine on and off. This is because the iMac's power
on wire takes a +5v signal from the iMac's logic board
to turn on, whereas an ATX power on wire takes a ground
signal. The iMac to ATX conversion uses an NPN 3904
transistor with a couple of resistors to do the job.
Since I was doing the opposite, I picked up a PNP 3906
transistor, connected the constant 5v trickle to the
collector, the ATX power on wire to the base, and the
iMac power supply's power on wire to the emitter. That
way when the transistor's base gets grounded by the
motherboard's power on signal, it sends the +5v signal
to the iMac power supply's power on wire, and it turns on.
Since the rev. A through D iMacs use a standard Mac db15
video connector for the internal monitor, connecting it
to the VGA output of the ITX motherboard is a simple
matter of using an adapter. I had three of these adapters
lying around, but if I used one, I would have this big
thing sticking out the side of the computer. I didn't
want that, so instead I made my own adapter that would
contact the pins of the VGA connector that stuck out
underneath the motherboard. I used the guide linked
below to make it.
VGA to Mac monitor
One problem with this monitor is that the EDID data
doesn't get detected. Right now I have my dsdt injecting
the right EDID into ioreg, but after a sleep session or
a click on "Detect Displays", this gets reset to the unknown
EDID. Also, PC_EFI and Chameleon cannot set the refresh rate
correctly during boot, so you don't see anything on the
screen until the login screen, or the desktop. This is because
a function called generateCRTCTimings is commented out,
and if you uncomment it, it will crash PC_EFI/Chameleon. I
found a fix for it that will keep it from crashing while
still being uncommented, but it still doesn't set the
refresh rate that I specify in my boot.plist, it just
runs at 60Hz still.
Another issue is that you can't see the bios when you boot.
The way I built this, it's possible to plug an external
monitor into either the VGA or the DVI outputs, and get
into the bios that way, and then just disconnect it when
you're done.
Obviously I wouldn't want to run Windows on this, and probably not Linux. I contributed to and followed this thread on insanelymac.com to install Snow Leopard. Since OS X doesn't know what an Atom CPU is, it gets detected as a Core 2 Duo, which explains picture 15 above. Unfortunately, the bootloader that allows OS X to run on PCs doesn't currently support refresh rates other than 60Hz on boot, so I am unable to see the boot process due to the limitations of the CRT. Having made sure to set the display to a supported mode, you can then shutdown and restart etc and it should work fine.