Ist doch ganz klahr,
der HIC10306+CAMXP DD ist ein mix zwischen
3.2 von PH und bc 1.0 DDvon bc und das Autoswitching von 3.2 +CAM.
Meine Meinung ist wer kein Autoswitching braucht soll bc verwenden die anderen 3.2 XP
wenn sie DD brauchen ansonsten reicht 3.2 +CAM. Der 4.1 NL ist nur auf Dutch übersetzt
worden und der 4.1 DE halt wieder zurück.
Deshalb auch die komische Übersetzung.
Poltergeist
So wurde der HIC10306+CAMXP erstellt:
Erweiterung des "+CAM PH 3.2" mit der DD-Fähigkeit des "+CAM 1.0 BC"
====================================================================
Achtung: Diese Anleitung ist nur für Leute, die auch wissen was sie tun !!
1. Disassemblieren von beiden Patches: "+CAM PH 3.2" und "+CAM 1.0 BC".
Davor müssen die HDF-Dateien mit dem HDFTOOL entpackt werden:
HDFTOOL u
Die resultierenden Listings können zum Download bereitgestellt werden.
2. Vergleichen der Listings zur Bestimmung des DD-Teils im
"+CAM 1.0 BC"-Patch.
Und hier ist er:
seg000:9FD353E4 00 00 00 00 nop
seg000:9FD353E8 90 88 00 0B lbu $t0, 0xB($a0)
seg000:9FD353EC 34 19 00 01 li $t9, 1
seg000:9FD353F0 17 28 00 0D bne $t9, $t0, loc_9FD35428
seg000:9FD353F4 00 00 00 00 nop
seg000:9FD353F8 A0 80 00 13 sb $0, 0x13($a0)
seg000:9FD353FC 90 99 00 0C lbu $t9, 0xC($a0)
seg000:9FD35400 27 39 00 01 addiu $t9, 1
seg000:9FD35404 A0 99 00 10 sb $t9, 0x10($a0)
seg000:9FD35408 34 19 00 03 li $t9, 3
seg000:9FD3540C A0 99 00 11 sb $t9, 0x11($a0)
seg000:9FD35410 34 19 00 02 li $t9, 2
seg000:9FD35414 A0 99 00 0B sb $t9, 0xB($a0)
seg000:9FD35418 00 00 00 00 nop
seg000:9FD3541C 00 00 00 00 nop
seg000:9FD35420 00 00 00 00 nop
seg000:9FD35424 00 00 00 00 nop
3. Anfügen des Hex-Codes vom gefundenen DD-Teil-Patches an die RAW-Datei
des "+CAM PH 3.2" - Patches:
Um den DD-Patch in den 3.2er-Patch zu integrieren, wird ein Hex-Editor
benötigt. Ein möglicher Editor ist das Programm HexEdit.
Man kann sich den Hex-Editor dort holen:
http://www.tecchannel.de/freeshareware/ ... index.html Nach dem Programmstart öffnet man die Datei 'hdfbin-1-00000.raw' mit der
Firmware und setzt den Cursor an das Ende der letzten Hex-Code-Zeile der
Datei.
Nun wird mit dem Menü-Befehl 'Einfügen' der Hex-Code des DD-Patches
angefügt.
Das sieht dann so aus:
0x125C40: 0F F4 1A E7 00 00 00 00 3C 0C 8C 0C 8D 9F 42 58
0x125C50: 00 00 00 00 00 00 00 00 03 E0 00 08 00 00 00 00 (Ende +CAM 3.2)
0x125C60: 00 00 00 00 00 00 00 00 90 88 00 0B 34 19 00 01 (Anfang
DD-Teil)
...
0x125C90: 34 19 00 02 A0 99 00 0B 00 00 00 00 00 00 00 00
0x125CA0: 00 00 00 00 00 00 00 00 xx xx xx xx 00 00 00 00
Am Dateiende wurde noch die letzte Zeile mit Nullen aufgefüllt, damit der
Rücksprung-Befehl in den 3.2er-Patch an der mit xx markierten Stelle
plaziert werden kann.
Nach dem Vergleich des BC-Patches mit dem 3.2-Patch findet man heraus,
dass die Einfügestelle des DD-Patches die Adresse 0x9FD3582C ist.
Dort muss der Sprungbefehl zum angehängten DD-Patch positioniert sein.
Der vorhandene NOP-Befehl (00 00 00 00 = no operation) wird dazu
überschieben.
Laut Assembler-Dokumentation (siehe Link's beim Casablanca-Projekt)
beginnt ein einfacher Sprung (Assembler-Befehl "b") mit "10 00".
Danach folgen 2 Byte mit der Distanz zwischen der Adresse des Sprunges
und dessen Zieladresse geteilt durch 4.
Weil die RAW-Datei auf die Adresse 0x9FC1000 im Humax positioniert wird,
muß dieser Wert abgezogen werden, um die Position in der Datei zu erhalten.
9FD3582C - 9FC10000 = 12582C (= Dateiposition für den Sprung zum DD-Patch)
125820: 00 00 00 00 00 00 00 00 00 00 00 00 10 00 yy yy
Für die "yy yy" steht die Sprungdistanz: (0x125C60 - 0x12582C) / 4 = 010D
Nun der Rücksprung am Ende des DD-Patches (Die Zieladresse ist die Adresse
hinter dem Sprung zum DD-Patch):
(0x125830 - 0x125CAC) / 4 = FFFFFEE1 (also "xx xx xx xx" = 10 00 FE E1)
Wenn man sich nun noch das Assembler-Listing vom 3.2er-Patch ansieht...
9FD35828: 00 00 00 00 nop
9FD3582C: 00 00 00 00 nop # <- Stelle für Sprung zum
DD-Patch
9FD35830: 00 00 00 00 nop
9FD35834:
9FD35834: loc_9FD35834: # CODE XREF: seg000:9FD35778
9FD35834: 3C 01 8C 0C 8C 3F 42 30 lw $ra, 0x8C0C4230
9FD3583C: 8C 24 42 34 lw $a0, 0x8C0C4234
...dann bemerkt man, dass auf Adresse 0x9FD35778 (siehe CODE XREF) ein
Sprung
auf loc_9FD35834 existieren muss. Dieser Sprung muß auf die Zieladresse
0x9FD35828 korrigiert werden. Dazu ist eine Änderung des Sprunges in der
Datei auf Position 0x9FD35778 - 0x9FC10000 = 0x125778 notwendig:
0x125770: 00 00 00 00 34 0E 05 00 17 2E 00 2E 00 00 00 00
Das letzte "2E" muss auf "2B" geändert werden (3 Befehle zurück).
Nun ist die RAW-Datei fertig, also die modifizierte RAW-Datei speichern.
4. Kontrolle der Ergebnisdatei durch erneutes Disassemblieren der
geänderten Stellen. Überprüfung der Sprünge und dessen Zieladressen.
5. Komprimieren der zwei RAW-Dateien (eine davon geändert) zu einer
HDF-Datei
mit dem HDFTOOL. Dazu folgenden Befehl ausführen:
HDFTOOL c -id1=0016.0000 -id2=0016.0600 CAMXP.HDF
Und schon ist die neue HDF-Datei fertig !!
6. Wer unsicher ist oder die Anleitung nicht verstanden hat, sollte auf
die fertige HDF-Datei warten.
7. Wer sich sicher ist, dass er alles richtig gemacht hat:
Den neuen Patch in den Humax einspielen und freuen!
Viel Spaß