Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

elvisa

macrumors newbie
Feb 1, 2020
19
4
Jumping on to the end of this thread, however please let me know if I should start a separate one.

Rocky pointed out to me earlier that my iMac 333 (G3, Rev. D) was a much simpler setup than the later slot load models, and should work with just a straight RGBHV connection and no other modifications or I2C commands needed.

I made myself a connector to convert from the DE15 VGA connection on my laptop to the DB15 connected on my iMac, fed a 1024x768@75Hz mode to the screen via the DB15 RGB cable, and with the logic board plugged in (custom ATX connector and "audio" header that includes connections to the power button), I get a picture. Wonderful!

I've then removed the logic board, and powered on the CRT portion itself by shorting pins 23 and 24 of the power connector via a ~500ohm resistor to send +5V to the power on header. This turns the power light from off to orange/red, and gets the system fan spinning.

I then feed the same 1024x768@75Hz signal to the screen, the power light turns green, and I can hear the fan spin a little harder as well as the degausse coil click on and off, as if the CRT itself is turning on. However I get no picture, just a black screen.

Is there anything else I need to do here to get a picture? Zero changes to the RGB cable (swapping the logic board back in brings the picture back)

Pictures of it working with the logic board plugged in (RGB cable to my laptop, and not the header on the logic board):

IMG_20200809_123014.jpg

IMG_20200809_123019.jpg
IMG_20200809_123032.jpg
 
Last edited:

elvisa

macrumors newbie
Feb 1, 2020
19
4
Jumping on to the end of this thread, however please let me know if I should start a separate one.

Rocky pointed out to me earlier that my iMac 333 (G3, Rev. D) was a much simpler setup than the later slot load models, and should work with just a straight RGBHV connection and no other modifications or I2C commands needed.

I made myself a connector to convert from the DE15 VGA connection on my laptop to the DB15 connected on my iMac, fed a 1024x768@75Hz mode to the screen via the DB15 RGB cable, and with the logic board plugged in (custom ATX connector and "audio" header that includes connections to the power button), I get a picture. Wonderful!

I've then removed the logic board, and powered on the CRT portion itself by shorting pins 23 and 24 of the power connector via a ~500ohm resistor to send +5V to the power on header. This turns the power light from off to orange/red, and gets the system fan spinning.

I then feed the same 1024x768@75Hz signal to the screen, the power light turns green, and I can hear the fan spin a little harder as well as the degausse coil click on and off, as if the CRT itself is turning on. However I get no picture, just a black screen.

Is there anything else I need to do here to get a picture? Zero changes to the RGB cable (swapping the logic board back in brings the picture back)

Pictures of it working with the logic board plugged in (RGB cable to my laptop, and not the header on the logic board):

View attachment 942289

View attachment 942288
View attachment 942290

-----

[edit] A clue has emerged - with the logic board attached (no front panel connectors, shorting pins 23 and 24 to power on), the 12V lines all measure 12V.

With the logic board removed, they drop back to +8.5V. I suspect I need load on a couple of pins kick it into gear.

[edit-edit]

Putting a 5W resistor on the +5V line brought the +12V up to spec, and displayed a picture. Easy as that.
 
Last edited:

elvisa

macrumors newbie
Feb 1, 2020
19
4
I really wish I had a version of your G3 to go along with you because it sounds like your almost there!
I know your battle has been a tough one, but you've cracked open the mystery of a whole series of machines that nobody else has publicly documented to that level. As tough as it's been, you've done amazing work.

From what I can tell, I2C commands are still required on the 233 through 333 MHz G3 model CRTs to control geometry, brightness, etc. I'm hoping that the documented commands are identical for this monitor. If not, it looks like I'll be hunting down a copy of Apple's OS9 based control software and sniffing them, which will be all new territory for me.
 
  • Like
Reactions: rockyhill

rockyhill

macrumors regular
Dec 24, 2016
214
67
Miami Fl, United States
I know your battle has been a tough one, but you've cracked open the mystery of a whole series of machines that nobody else has publicly documented to that level. As tough as it's been, you've done amazing work.

From what I can tell, I2C commands are still required on the 233 through 333 MHz G3 model CRTs to control geometry, brightness, etc. I'm hoping that the documented commands are identical for this monitor. If not, it looks like I'll be hunting down a copy of Apple's OS9 based control software and sniffing them, which will be all new territory for me.

Thanks!


Well, I think your theory that they share the same i2c commands is a good one and I don't see why Apple would redesign that part of it given that you can use the same software to control screen properties on the different versions of the iMac G3. That would mean different pieces of software for each machine. Here's some more evidence, jamie-g sniffed some of the screen properties for the eMac and a lot of them seem to match the ones for the G3s. I think if you wire your raspberry pis i2c pins to the G3s i2c lines you'll be able to send the commands you need via a python script.
 
  • Like
Reactions: elvisa

elvisa

macrumors newbie
Feb 1, 2020
19
4
I think if you wire your raspberry pis i2c pins to the G3s i2c lines you'll be able to send the commands you need via a python script
That's definitely my plan. I'm on holiday for a week, but when I return I'll be trying this out. Will post results in here either way.
 

elvisa

macrumors newbie
Feb 1, 2020
19
4
Kinda stuck at the moment, not sure where to go from here.

I've connected my RPi's GPIO pins up to the iMac's RGB cable, pins 7 and 10. i2cdetect shows:

Code:
$ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 51 -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

And I can see data on one of those addresses

Code:
$ i2cdump -y 1 0x50
No size specified (using byte-data access)
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 00 ff ff ff ff ff ff 00 06 10 01 9d 01 01 01 01    ........????????
10: 00 09 01 01 08 1b 14 28 e8 66 e9 9c 57 4c 96 26    .??????(?f??WL?&
20: 10 48 4c 00 02 00 01 01 01 01 01 01 01 01 01 01    ?HL.?.??????????
30: 01 01 01 01 01 01 88 13 80 c0 20 e0 22 10 10 40    ?????????? ?"??@
40: 13 00 0e c8 10 00 00 1e 60 18 20 f0 30 58 20 20    ?.???..?`? ?0X 
50: 10 50 13 00 0e c8 10 00 00 1e 00 00 00 fd 00 4b    ?P?.???..?...?.K
60: 75 3c 3c 08 00 0a 20 20 20 20 20 20 00 00 00 fc    u<<?.?      ...?
70: 00 69 4d 61 63 0a 20 20 20 20 20 20 20 20 00 3a    .iMac?        .:
80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................

Likewise I can read an individual bank:
Code:
$ i2cget -y 1 0x50 0x11
0x09

Attempting to write any values back to those, either with i2cset or python, gives me:
Code:
$ i2cset -y 1 0x50 0x11 0x09
Error: Write failed

Same goes for everything else on 0x50 and 0x51. If anyone's got any ideas, I'd be grateful.

[edit] Hrm, am I just looking at EDID info here, and not actually tapping into the CRT's i2c control bus?

[edit2] Yes, I think this is just EDID. I decoded it with this:

So now I have to find out where I actually need to attach in to control this monitor.
 
Last edited:

rockyhill

macrumors regular
Dec 24, 2016
214
67
Miami Fl, United States
Kinda stuck at the moment, not sure where to go from here.

I've connected my RPi's GPIO pins up to the iMac's RGB cable, pins 7 and 10. i2cdetect shows:

Code:
$ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 51 -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

And I can see data on one of those addresses

Code:
$ i2cdump -y 1 0x50
No size specified (using byte-data access)
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 00 ff ff ff ff ff ff 00 06 10 01 9d 01 01 01 01    ........????????
10: 00 09 01 01 08 1b 14 28 e8 66 e9 9c 57 4c 96 26    .??????(?f??WL?&
20: 10 48 4c 00 02 00 01 01 01 01 01 01 01 01 01 01    ?HL.?.??????????
30: 01 01 01 01 01 01 88 13 80 c0 20 e0 22 10 10 40    ?????????? ?"??@
40: 13 00 0e c8 10 00 00 1e 60 18 20 f0 30 58 20 20    ?.???..?`? ?0X
50: 10 50 13 00 0e c8 10 00 00 1e 00 00 00 fd 00 4b    ?P?.???..?...?.K
60: 75 3c 3c 08 00 0a 20 20 20 20 20 20 00 00 00 fc    u<<?.?      ...?
70: 00 69 4d 61 63 0a 20 20 20 20 20 20 20 20 00 3a    .iMac?        .:
80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................

Likewise I can read an individual bank:
Code:
$ i2cget -y 1 0x50 0x11
0x09

Attempting to write any values back to those, either with i2cset or python, gives me:
Code:
$ i2cset -y 1 0x50 0x11 0x09
Error: Write failed

Same goes for everything else on 0x50 and 0x51. If anyone's got any ideas, I'd be grateful.

[edit] Hrm, am I just looking at EDID info here, and not actually tapping into the CRT's i2c control bus?

[edit2] Yes, I think this is just EDID. I decoded it with this:

So now I have to find out where I actually need to attach in to control this monitor.





@elvisa

First off, I really wish I had one of these to follow you!

2nd, I went ahead and decoded the EDID as well via a different method just for kicks(because I think it's cool) and it looks good.

I kind of remember you saying that the picture was off of the screen and that's why you wanted to adjust the settings so I have a couple of questions.

-When you wired the the iMac video connector to the VGA breakout did you use this guide?
If so and you wired it the same way, I think iMac pin7 should go to pin 15 of the VGA connector in order
to automatically send the EDID info.

-When you plugged it into your laptop did the OS automatically configure itself or did you have to manually configure the settings?

Address 0x50 is the address used for monitor EDID requests so it looks like it's pretty much a standard connection so
I think if you can get it to send the EDID automatically via the correct pins then you might be able to disable the video
configuration for the pi and it will automatically configure itself.

On the slot loaders the geometry configuration happens on address , 0x46, which doesn't even show up for you.
There might even be a separate i2c bus used to configure the monitor settings but I have no idea, do you see
anything that might be communications lines?

This is the part where I start to guess so be careful if you try the following.

After wiring the video up, several pins are left unused on the iMac video connector 3, 4 and, 8.
It's possible that two of these(plus a ground) are used as an i2c bus for configuring the monitor.
You can try i2cdetect on some combination of these.
 
  • Like
Reactions: elvisa

elvisa

macrumors newbie
Feb 1, 2020
19
4
-When you wired the the iMac video connector to the VGA breakout did you use this guide?
If so and you wired it the same way, I think iMac pin7 should go to pin 15 of the VGA connector in order
to automatically send the EDID info.
Yup, that's all good. Got RGBHV and respective grounds all wired up as per that pinout.

-When you plugged it into your laptop did the OS automatically configure itself or did you have to manually configure the settings?
I skipped that part, and went straight ahead and created a custom modeline (I do a lot of arcade CRT stuff, so that's pretty familiar territory to me). Never even thought to try EDID, heh.

End goal for this project is an RPi, so the laptop test was short lived. I'm now using an RPi into a HDMI-to-VGA converter using hdmi_group=2 andhdmi_mode=18 that forces 1024x768@75Hz output from boot. Works fine and the iMac shows a picture immediately (as long as there's a load on the 5V line to bring 12V up and power on the monitor).


On the slot loaders the geometry configuration happens on address , 0x46, which doesn't even show up for you.
There might even be a separate i2c bus used to configure the monitor settings but I have no idea, do you see
anything that might be communications lines?

This is the part where I start to guess so be careful if you try the following.

After wiring the video up, several pins are left unused on the iMac video connector 3, 4 and, 8.
It's possible that two of these(plus a ground) are used as an i2c bus for configuring the monitor.
You can try i2cdetect on some combination of these.
4 was a common ground from memory, which I used on the RPi's GPIO ground pin to read 7/10 (4 was chosen because it's always part of the "monitor sense" triplet, so I figured if it was grounded that was probably the best choice).

I'll give those other two a go as well. I saw 8 free and poked at it, although didn't try it in combination with 3 (only 7 and 10, which obviously yielded nothing).

There's definitely got to be a way to control video settings, as the user manual demonstrates an OS9 based boot disk that allowed complete control (I never used it, as this thing was always running OSX when I used it eons ago). But even then, OSX could at least control brightness.

I thought last night maybe the front panel / audio header ("J14" on this model) would have something on it i2c related as a few wires disappear into the CRT space, but on second thought that might be wrong as there's the microphone inside, and the big fat shielded cable that is in the bundle is likely the mic shield.

I've located a few front audio connectors just with dumb resistance probing, so that's good. Still need to work out where the speakers attach, and whether I need to amplify them myself (pretty sure I do, so I've got a tiny sub-5W amp on order).

I'll check out pins 3/4/8 on the RGB cable and report back.

However this all works, I'll doco it all up somewhere when I'm done. Probably follow your lead and use GitHub, as that'll likely outlast my own private web space (and get archived to the tundra for future generations, hahaha).
 
  • Like
Reactions: rockyhill

elvisa

macrumors newbie
Feb 1, 2020
19
4
Confirming pin 4 is definitely common ground.

Tried all combinations of 3/7/8/10, and only 7-SDA / 10-SCL work to produce read-only EDID information.

Might have to pull the case off and dig further to see if I can see any other magic points running to the CRT chassis that look like digital control lines. I was hoping I could get away with being lazy on this one, but no. :)

[edit]

All audio header pins (J14) accounted for. 2x headphones plus sense pins, 1x speakers, 1x microphone, power button. Nothing crazy there.

The only things that connect back to the logic board are the RGB cable, power and the audio header. So I'm kinda stumped now. Not sure what to try next. Watching some videos of folks running OS9 I can see geometry settings in the OS, so I assume there was some sort of software control of these CRTs and they weren't just locked as-is out of the factory.
 
Last edited:
  • Like
Reactions: rockyhill

rockyhill

macrumors regular
Dec 24, 2016
214
67
Miami Fl, United States
Confirming pin 4 is definitely common ground.

Tried all combinations of 3/7/8/10, and only 7-SDA / 10-SCL work to produce read-only EDID information.

Might have to pull the case off and dig further to see if I can see any other magic points running to the CRT chassis that look like digital control lines. I was hoping I could get away with being lazy on this one, but no. :)

[edit]

All audio header pins (J14) accounted for. 2x headphones plus sense pins, 1x speakers, 1x microphone, power button. Nothing crazy there.

The only things that connect back to the logic board are the RGB cable, power and the audio header. So I'm kinda stumped now. Not sure what to try next. Watching some videos of folks running OS9 I can see geometry settings in the OS, so I assume there was some sort of software control of these CRTs and they weren't just locked as-is out of the factory.




I agree, there is definitely a way to control the picture settings.....
Are you going to try and sniff the comms with your pi?
I wonder if it's done via rs232?
 

elvisa

macrumors newbie
Feb 1, 2020
19
4
I agree, there is definitely a way to control the picture settings.....
Are you going to try and sniff the comms with your pi?
I wonder if it's done via rs232?
Yup that's the next plan. Means I need to track down an OS9 installer and a laptop IDE CDROM to install from (as my original one stopped reading discs years ago). Should be easy enough to get the parts, just need to find the time to do it all.

Definitely not giving up on this, but there might be a delay.
 

jmbarker

macrumors newbie
Oct 21, 2020
3
1
@elvisa
Did you have any success sniffing the geometry control? Believe it or not, you're not the only one with a tray-loading trying the same thing (although I'm testing with a Rev-B 233MHz Bondi Blue so there may be some differences). Here's a quick video of UFOtest. Drive doesn't play it back very well (I think it limits to 30fps) but if you download and play with QuickTime it will show the 240fps version. You can see the 640x480 image is squeezed a bit and not centred. Different resolutions have different problems - 1280x960 stretches slightly beyond the edges of the screen, for example. I'm hoping you've figured out a starting point for geometry controls, I'm not really sure where to begin digging with that. If not, I have OS 9 installed on the drive that used to be in the iMac, so if there's anything at all I can do to help let me know!

For anyone else reading this wanting confirmation, I was able to get the display to turn on with only a resistor shorting pins 23 and 24 on the power connector (I've tested 510ohm and 610ohm resistors, both of which were enough load) and the correct signal being sent to the monitor. Any resolution with a horizontal refresh <=60kHz will work; I tested 640x480@117Hz, 800x600@95Hz, 1024x768@75Hz, and 1280x960@60Hz, all of which it happily accepted. Higher should also work, assuming you continue to drop refresh rate (for example, 1920x1440@39Hz and 2560x1920@29Hz should be accepted, but probably won't look very good). The only problem is the image not being correctly position on the monitor (and the colour reproduction isn't as good as it used to be). The adapter I'm using to connect to the DB15 video cable from VGA is this one. The DIP switches don't seem to have any effect on any machine I've been using, but I may not be using them correctly.
 

elvisa

macrumors newbie
Feb 1, 2020
19
4
@elvisa
Did you have any success sniffing the geometry control?
Sadly no, I haven't had a lot of time to look. @rockyhill suggested other serial protocols might be an option, so my next task is to hook up my TTL-to-USB cables and try to figure out how to poll that (I've only ever used them to program Arduinos, so that's new for me).

Some Sony monitors have tools that can adjust their settings via TTL-serial connectors, although usually that's a dedicated connector on the back of the monitor. There aren't any other connections I can see into the CRT of the iMac tray load models, so I'm only assuming at this point that all control from the logic board to the CRT itself is done through the DB15 cable's spare pins (there's five spare I mention above all up that aren't RGBHV or matching ground, and pin 4 is confirmed common ground). That's enough for TTL (needs 4 pins - ground, +5V, RX, TX).

But again, I need to go on a learning journey to even figure out how to use that (I'll personally want to either use a tool straight off the Linux CLI, or Python).

I have OS 9 installed on the drive that used to be in the iMac, so if there's anything at all I can do to help let me know!
I've been loathing the idea of trying to get OS9 back on my iMac (it's had OSX 10.3 on there for ages, and the optical drive is stuffed, so going back to OS9 is going to be a chore as it means I need to find out how the custom 50 pin cable on the iMac logic board maps back to the 44 pins used for standard ATA+power so that I can use a standard IDE CD-ROM. Either that, or install MacOS9 in an emulator and transfer it to a real hard disk). But if you've got it handy, I'd love to know if installing OS9 and using the built in geometry/brightness/colour adjustment tools, do those values stick around even after you remove the logic board?

Would be nice to know if they need to be set on every boot, or if they're something that can be "set and forget".

With all that said, I still really want to find a way to do it outside of MacOS. Sniffing lines with a scope is probably something I can figure out how to do? (I have one of those really cheap oscilloscopes, but not a logic analyser). But that's going to have to wait until I'm on Christmas holidays with my current real life workload. :(
 

jmbarker

macrumors newbie
Oct 21, 2020
3
1
But if you've got it handy, I'd love to know if installing OS9 and using the built in geometry/brightness/colour adjustment tools, do those values stick around even after you remove the logic board?

Unfortunately it looks like they don't. I set up the geometry perfectly for 640x480@117Hz in OS 9, unplugged the video cable and immediately plugged it into my test MacBook set to 640x480@117Hz and it looked exactly the same as before I adjusted the geometry. I then plugged the video cable back into the logic board, and the geometry was correct. I'm thinking that OS 9 has some built-in presets that are "usually right-ish" that is uses as a baseline (which is what the "Reset to Factory Settings" button does in the geometry control panel), and it applies user corrections based on those. That's conjecture though, I have no proof of that other than watching how it behaves.

Sniffing lines with a scope is probably something I can figure out how to do? (I have one of those really cheap oscilloscopes, but not a logic analyser).

I've got a scope/logic analyzer combo that may be up to the task. Likewise I'm short on time at the moment, but I'll see if I can get some useful readings off the non-video pins at some point in the near future.
 
  • Like
Reactions: elvisa

philgxxd

macrumors 6502
Feb 11, 2017
423
342
Malaga, Spain
On the slotload iMac you can overwrite the iMac's default "Reset to factory settings".
Just consult the service manual.
Maybe there is something similar for the older model?
 

jmbarker

macrumors newbie
Oct 21, 2020
3
1
On the slotload iMac you can overwrite the iMac's default "Reset to factory settings".
Just consult the service manual.
Maybe there is something similar for the older model?

That's maybe a possibility! I'll read through the service manual and see if there's anything I can do. I'm used to physical manual adjustment, but I'll see what the manual says.

Edit: it appears as though the jumper method will only work on later iMacs - the correct connectors don't appear to exist on mine to save to factory settings.

Regardless, I don't think this method would work, since the factory settings are very good on Mac OS 9 (the image is a little bit too small, but otherwise very good). Unless I can use some sort of hardware adjustment I'm thinking the communication method between OS 9's geometry settings and the video board will need to be reverse engineered.
 
Last edited:

elvisa

macrumors newbie
Feb 1, 2020
19
4
I notice peak brightness on a real logic board with MacOS (or even openfirmware) is much higher than what my connected Raspberry Pi is with the defaults.

From memory the iMac screens had a gamma of 1.8, whereas sRGB assumes 2.2 (and newer Rec709/BT.1886 assumes 2.4), so that also changes things a bit.

Even ignoring colour accuracy, I'd really like to get software control working just to fix the black and white levels alone.
 

rockyhill

macrumors regular
Dec 24, 2016
214
67
Miami Fl, United States
I notice peak brightness on a real logic board with MacOS (or even openfirmware) is much higher than what my connected Raspberry Pi is with the defaults.

From memory the iMac screens had a gamma of 1.8, whereas sRGB assumes 2.2 (and newer Rec709/BT.1886 assumes 2.4), so that also changes things a bit.

Even ignoring colour accuracy, I'd really like to get software control working just to fix the black and white levels alone.


Just wondering if you've made any progress with the software control. I'm currently looking for a tray loader to
follow you with this.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.