• Updated 2023-07-12: Hello, Guest! Welcome back, and be sure to check out this follow-up post about our outage a week or so ago.

iMac G3 DV, remove CRT.

Snial

Well-known member
Hi folks,

This is a follow-up post to the previous one: iMac G3 DV VGA out terrible . I intend to remove the CRT on whatever iMac G3 ends up being the frankiMac.

There's quite a long thread on a related project: using an iMac G3 CRT with another computer on a MacRumors forum:

https://forums.macrumors.com/threads/imac-g3-mod-video-connector.1712095/

To summarise the key goal: the iMac G3 CRT has a video interface which is basically VGA + an I2C interface which gets fed with a setup sequence to active it. The setup sequence is fairly specific because the CRT only supports a few resolutions & frequencies: e.g. 1024x768@75Hz / 800x600@ whatever going up to 640x480@117Hz. They did it by rigging up an Arduino to generate this sequence on boot and then making sure whatever computer is driving the CRT also outputs that.

My understanding is that an iMac G3 doesn't boot if the CRT isn't attached. Can anyone confirm this before I start removing the CRT itself? This is why people who messed up the CRT display when upgrading to the 4.1.9 firmware ended up having to splice the video into another working iMac G3 (I'm guessing the other iMac G3 initialises the CRT correctly, then the user can see the firmware dialog box, so they can click on the right choice).

However, the Arduino project made me think that this could also be the reason the iMac won't start up, because if it's sending an I2C sequence and expects ACKs back after each byte, then it might hang if it doesn't find them. If this is the only reason (and I can't think of another, unless the iMac somehow measures the load on the CRT and refuses to boot if the CRT isn't drawing enough power); then an Arduino script that mimics the CRT response should also work. And that would be simple:

// iMac G3 CRT Sim // Based on Wire slave example by // Nicholas Zambetti <http://www.zambetti.com> // Created 29 March 2006 // This example code is in the public domain. #include <Wire.h> void setup() { Wire.begin([B]0x53[/B]); // join i2c bus with address #0x53 (perhaps 0x50) Wire.onReceive(receiveEvent); // register event Serial.begin(9600); // start serial for output } void loop() { delay(100); } // function that executes whenever data is received from master // this function is registered as an event, see setup() void receiveEvent(int howMany) { while(Wire.available()>0) // loop through all but the last { char c = Wire.read(); // receive byte as a character Serial.print(c); // print the character } }

The Wire CRT simulator wouldn't even care what the data is, it just needs to pass the iMac G3 test. I'm hoping no-one is going to reply to say I shouldn't bother with this, on the grounds that people have been quite willing to throw in a lot of effort to get an iMac G3 CRT to work with other hardware, and it seems like it'd take a whole lot less effort to get an iMac G3 to work without a CRT.


Thanks in advance, from Julz
 
Top