Contribute
Register

I have decided to hack eMac's CRT (To work with any standard motherboard)

Joined
Aug 7, 2013
Messages
44
Motherboard
Asrock H81m-vg4 r2.0
CPU
Intel Celeron 1820
Graphics
Ati HD5570
Mac
iMac
Classic Mac
eMac
Here i found the printed paper with the data:
eMac edid.JPG
 
Joined
Dec 26, 2016
Messages
27
I manually typed all of the hex numbers in the image into a hex editor and saved it to a file called 1280x960.bin
I then used edid-decode and it passed the test.
here's an image

I think this can be easily coded into an arduino sketch.

edidTest.png
 
Joined
Aug 7, 2013
Messages
44
Motherboard
Asrock H81m-vg4 r2.0
CPU
Intel Celeron 1820
Graphics
Ati HD5570
Mac
iMac
Classic Mac
eMac
I manually typed all of the hex numbers in the image into a hex editor and saved it to a file called 1280x960.bin
I then used edid-decode and it passed the test.
here's an image

I think this can be easily coded into an arduino sketch.

View attachment 230070
I was thinking that if the arduino could be present on the i2c rail betwen the host pc and eMac CRT it will be terrific that it can provide the desired protocol to the CRT (7 seconds after powering up seems to be a good idea) and stay put, present as address 50 with the edid protocol to answer on the PC request.

------eMac CRT
l
l
l---- Arduino sends proper protocol to eMac CRT and stay put on adress 50 with EDID info to answer any one who request it.
l
l
l
-----Vga PC (Will look for address 50 on i2c rail and read edid).
 
Joined
Dec 26, 2016
Messages
27
I actually started coding it last night but I still need to test it. I have a day off today so I might work on it some more later on.







#include <Wire.h>

const int i2c_port = 0x50;
byte edid[] =
{ 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x06, 0x10, 0x07, 0x9d, 0x01, 0x01, 0x01, 0x01,
0x00, 0x1a, 0x01, 0x03, 0x68, 0x21, 0x18, 0x6f, 0x08, 0xf6, 0x29, 0xa2, 0x53, 0x47, 0x99, 0x25,
0x10, 0x48, 0x4c, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xc0, 0x2f, 0x00, 0xa0, 0x51, 0xc0, 0x2a, 0x30, 0x30, 0x60,
0x13, 0x00, 0x40, 0xf0, 0x10, 0x00, 0x00, 0x1e, 0xbf, 0x26, 0x00, 0x60, 0x41, 0x00, 0x2a, 0x30,
0x30, 0x60, 0x13, 0x00, 0x40, 0xf0, 0x10, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x46,
0x8c, 0x47, 0x49, 0x0d, 0x00, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0xfc,
0x00, 0x65, 0x4d, 0x61, 0x63, 0x20, 0x43, 0x52, 0x54, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x00, 0x2e
};







void setup() {
pinMode(2, OUTPUT);
pinMode(4, OUTPUT);
digitalWrite(2, LOW);
digitalWrite(4, LOW);
digitalWrite(2, HIGH);
digitalWrite(4, HIGH);

Serial.begin(9600);
Serial.write("initiating\n");
Wire.begin(i2c_port); // join i2c bus (address optional for master)
Wire.onRequest(requestEvent);

}


void loop() {

delay(100);






}


void writeToIvad(int address, int message) {
Wire.beginTransmission(address);
Wire.write(message);
Wire.endTransmission();

}//end method



void readFromIvad(int address, int bytes) {
char buf[bytes + 1];
int bytesRead = 0;
Wire.requestFrom(address, bytes);
while (Wire.available())
{
char c = Wire.read();
buf[bytesRead++] = c;
}
buf[bytesRead] = '\0';
//return buf;


}//end method






void sendEdid() {

for (int i = 0 ; i < 128 ; i++) {

Wire.write(edid);



//readFromIvad(i2c_port,1);

}//end for

}//end

// function that executes whenever data is requested by master
// this function is registered as an event, see setup()
void requestEvent() {

Serial.write("request received\n");
sendEdid();

}
 
Joined
Aug 7, 2013
Messages
44
Motherboard
Asrock H81m-vg4 r2.0
CPU
Intel Celeron 1820
Graphics
Ati HD5570
Mac
iMac
Classic Mac
eMac
I actually started coding it last night but I still need to test it. I have a day off today so I might work on it some more later on.







#include <Wire.h>

const int i2c_port = 0x50;
byte edid[] =
{ 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x06, 0x10, 0x07, 0x9d, 0x01, 0x01, 0x01, 0x01,
0x00, 0x1a, 0x01, 0x03, 0x68, 0x21, 0x18, 0x6f, 0x08, 0xf6, 0x29, 0xa2, 0x53, 0x47, 0x99, 0x25,
0x10, 0x48, 0x4c, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xc0, 0x2f, 0x00, 0xa0, 0x51, 0xc0, 0x2a, 0x30, 0x30, 0x60,
0x13, 0x00, 0x40, 0xf0, 0x10, 0x00, 0x00, 0x1e, 0xbf, 0x26, 0x00, 0x60, 0x41, 0x00, 0x2a, 0x30,
0x30, 0x60, 0x13, 0x00, 0x40, 0xf0, 0x10, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x46,
0x8c, 0x47, 0x49, 0x0d, 0x00, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0xfc,
0x00, 0x65, 0x4d, 0x61, 0x63, 0x20, 0x43, 0x52, 0x54, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x00, 0x2e
};







void setup() {
pinMode(2, OUTPUT);
pinMode(4, OUTPUT);
digitalWrite(2, LOW);
digitalWrite(4, LOW);
digitalWrite(2, HIGH);
digitalWrite(4, HIGH);

Serial.begin(9600);
Serial.write("initiating\n");
Wire.begin(i2c_port); // join i2c bus (address optional for master)
Wire.onRequest(requestEvent);

}


void loop() {

delay(100);






}


void writeToIvad(int address, int message) {
Wire.beginTransmission(address);
Wire.write(message);
Wire.endTransmission();

}//end method



void readFromIvad(int address, int bytes) {
char buf[bytes + 1];
int bytesRead = 0;
Wire.requestFrom(address, bytes);
while (Wire.available())
{
char c = Wire.read();
buf[bytesRead++] = c;
}
buf[bytesRead] = '\0';
//return buf;


}//end method






void sendEdid() {

for (int i = 0 ; i < 128 ; i++) {

Wire.write(edid);



//readFromIvad(i2c_port,1);

}//end for

}//end

// function that executes whenever data is requested by master
// this function is registered as an event, see setup()
void requestEvent() {

Serial.write("request received\n");
sendEdid();

}
You are a genius (And so am i).
Like the movie said: "If you build it, they will come"
 
Top