Thanks!
Looking around I actually found a local PCB made to order manufacturer that produces locally. So that's plan B for now.
I think it might be easy to hack in auto on/off. Basically I think one just watches VGA PIN 14 for regular VSYNC using pulseIn or something. No VSYNC = No picture = turn off. Otherwise turn on.
I will try to hack that in and maybe I can provide a patch when I get it working, but I can really only start end of next week. I will report how it goes.
That's a really good idea! I made two of the IO lines available on a header on the J20 board so maybe I'll try and play with the idea as well.
Please let me know how it goes, because that would be a really nice addition to the circuit.
Here's the initIvadBoard method for my iMac g3
I have this model iMac M8582LL/A* - PowerMac4,1 - M5521https://everymac.com/systems/apple/imac/specs/imac_500_indigo.html
This is giving me good looking color and brightness. On the MacBook I connected to it I set the resolution to Scaled 1280x960.
Code:void initIvadBoard() { writeToIvad( 0x46,0x13,0x00); writeToIvad(0x46,0x13,0x00); readFromIvad(0x46,1); writeToIvad(0x46,0x09,0x00); writeToIvad(0x53,0x33); readFromIvad(0x53,1); writeToIvad(0x46,0x13,0x0b); writeToIvad(0x46,0x00,0x00); writeToIvad(0x46,0x08,0xe4); writeToIvad(0x46,0x12,0xc9); writeToIvad(0x53,0x00); readFromIvad(0x53,10); writeToIvad(0x53,0x0a); readFromIvad(0x53,10); writeToIvad(0x53,0x14); readFromIvad(0x53,10); writeToIvad(0x53,0x1e); readFromIvad(0x53,10); writeToIvad(0x53,0x28); readFromIvad(0x53,10); writeToIvad(0x53,0x32); readFromIvad(0x53,10); writeToIvad(0x53,0x3c); readFromIvad(0x53,10); writeToIvad(0x53,0x46); readFromIvad(0x53,10); writeToIvad(0x53,0x50); readFromIvad(0x53,10); writeToIvad(0x53,0x5a); readFromIvad(0x53,10); writeToIvad(0x46,0x01,0x82); writeToIvad(0x46,0x02,0x82); writeToIvad(0x46,0x03,0x82); writeToIvad(0x46,0x04,0xa0); writeToIvad(0x46,0x05,0xa0); writeToIvad(0x46,0x06,0xa0); writeToIvad(0x46,0x07,0xad); writeToIvad(0x46,0x08,0xe4); writeToIvad(0x46,0x09,0x3d); writeToIvad(0x46,0x0a,0x9e); writeToIvad(0x46,0x0b,0xb4); writeToIvad(0x46,0x0c,0xc4); writeToIvad(0x46,0x0d,0x27); writeToIvad(0x46,0x0e,0xbf); writeToIvad(0x46,0x0f,0xc0); writeToIvad(0x46,0x10,0x40); writeToIvad(0x46,0x11,0x0a); writeToIvad(0x46,0x12,0x5b); writeToIvad(0x46,0x00,0xff); writeToIvad(0x53,0x00); readFromIvad(0x53,10); writeToIvad(0x53,0x10); readFromIvad(0x53,10); writeToIvad(0x53,0x20); readFromIvad(0x53,10); writeToIvad(0x53,0x30); readFromIvad(0x53,10); writeToIvad(0x46,0x11,0x05); writeToIvad(0x46,0x00,0xff); writeToIvad(0x46,0x00,0x00); writeToIvad(0x46,0x07,0xb1); writeToIvad(0x46,0x0d,0x10); writeToIvad(0x46,0x0c,0xc7); writeToIvad(0x46,0x09,0x4a); writeToIvad(0x46,0x08,0xea); writeToIvad(0x46,0x0f,0xc0); writeToIvad(0x46,0x0b,0xae); writeToIvad(0x46,0x12,0x5b); writeToIvad(0x46,0x00,0xff); writeToIvad(0x46,0x11,0x05); writeToIvad(0x46,0x00,0xff); writeToIvad(0x46,0x10,0x40); writeToIvad(0x46,0x06,0xa0); writeToIvad(0x46,0x05,0xa0); writeToIvad(0x46,0x04,0xa0); writeToIvad(0x46,0x03,0x82); writeToIvad(0x46,0x02,0x82); writeToIvad(0x46,0x01,0x82); writeToIvad(0x46,0x11,0x05); writeToIvad(0x46,0x00,0xff); writeToIvad(0x46,0x11,0x05); writeToIvad(0x46,0x00,0xff); writeToIvad(0x46,0x10,0x40); writeToIvad(0x46,0x06,0xa0); writeToIvad(0x46,0x05,0xa0); writeToIvad(0x46,0x04,0xa0); writeToIvad(0x46,0x03,0x82); writeToIvad(0x46,0x02,0x82); writeToIvad(0x46,0x01,0x82); writeToIvad(0x46,0x11,0x05); writeToIvad(0x46,0x00,0xff); }
That looks nice, I'll add it to the code as another init sequence. I think once we have enough of them we could come up with a generic
sequence with bullet proof register addresses and offsets. What I think happens is that each CRT was calibrated at the factory
and/or by the user. These settings are saved in the NVRAM and applied when the CRT is initialized. If not present then the default values are sent.
[automerge]1586380321[/automerge]
Something else I'm thinking about is that in this initIvadBoard function were ignoring all the data coming back from the monitor board. I wonder if it's sending information about itself back. Maybe some kind of identifier that Mac OS knows about. If so it might be possible to update the Arduino sketch to do a case statement on the monitor data and run init code for this particular monitor. That way we could have the code for all iMac g3's in one sketch.
I agree, these data need to be deciphered. I'm sure there are nice bits of useful information in there.
Have you tried looking at any of it?
One init sequence to rule them all!........ hopefully