Hallo, ich bin ganz neu hier und über den Umbau meiner S100 auf das Forum hier gestoßen. Ich mich den Vormittag mal eingelesen. Ist ja alles sehr interessant was ihr schon geschafft habe. Vor allem in der recht kurzen Zeit.
Ich könnte vielleicht behilflich sein bei der Programmierung des Modechip. Ich habe schon ein paar Sachen mit AVRs gemacht und hätte auch Lust meinen Beitrag zu leisten. Ich habe zwar noch keine Box aber macht ja nix.
@plenkk: Ich würde mich freuen wenn ich dir behilflich sein darf.
Wie weit bist du denn schon? Vielleicht können wir uns ein bisschen austauschen.
Arbeitet sonst noch wer daran?
Ich habe mir mal den Code angeschaut, weiß aber nicht ob ich das richtig verstanden habe.
Eigentlich muss doch nur die bootloderversion ermittelt werden und dann die Endsprechenden Daten an die richtige Adressen geschrieben werden, oder?
Also vereinfacht dargestellt müsste es diese Funktion sein um die Version zu bekommen
void apply_patch(char *filename, unsigned int start, unsigned int length)
{
if (!patchOk)
{
patchOk = patch1053();
}
if (!patchOk)
{
patchOk = patch1051();
}
if (!patchOk)
{
patchOk = patch1039();
}
if (patchOk)
{
printf("Patch applied !\n");
printf("... now press OK Button on the X300T.\n");
}
else
{
printf("unknown Bootloader version. please dump it !\n");
}
}
und diese um die Daten zu lesen und zu schreiben. Dazu muss natürlich eine JTAG Kommunikation mit dem Prozessor aufgebaut werden und vielleicht noch einen seriellen Output um zu sehen was passier.
boolean patch1053()
{
unsigned int addr1, addr2, data1, data2, data3, data4;
addr1 = 0x93640150;
data1 = ejtag_read(addr1);
data2 = ejtag_read(addr1+4);
// printf("0x93640150: %x%x\n", data1, data2);
if (data1 != 0x0cd8dce4 || data2 != 0x24040001) // Auswerten der Daten
{
return false;
}
addr2 = 0x93640250;
data3 = ejtag_read(addr2);
data4 = ejtag_read(addr2+4);
// printf("0x93640250: %x%x\n", data3, data4);
if (data3 != 0x0cd8dce4 || data4 != 0x24040001)
{
return false;
}
printf("Bootloader Version 1053 found\n");
ejtag_write(addr1, 0x10000019); // jal 0x93637390 --> b 0x936401B8
ejtag_write(addr1+4, 0x00);
ejtag_write(addr2, 0x1000ffd9); // jal 0x93637390 --> b 0x936401B8
ejtag_write(addr2+4, 0x00);
// hash always correct
ejtag_write(0x93641E90, 0x00000000); // b loc_93641EA8 --> NOP //Wenn alle daten zu der Version passen schreibe an die Adresse
// signature skip flag
addr1 = 0x937E1728;
ejtag_write(addr1, 0x01000000); //Signatur skip flag immer gleich!!!!
return true;
}
boolean patch1051()
{usw.
Habe ich in dem Code was übersehen? Sind noch mehr Sachen nötig um den bootloader zu patchen, oder sind das nur die zwei Adressen die da geändert werden?
1. Also JTAG Verbindung zu dem Prozessor aufbauen
2. Adressen 1, 2, 3, 4, lesen und vergleichen zu welcher Version das passt
3. Passende Daten schreiben
Fertig!
Würde mich freuen wenn das was werden würde.
Die Box scheint ja wirklich ein sehr interessantes Gerät zu sein.
Mfg
Jabberwock