da ich mal wieder nicht dazu komme, etwas selbst zu programmieren, und ich der Überzeugung bin, dass mehrere Köpfe besser denken und ggf. schneller umsetzten können, hier meine rein theoretischen Erkenntnisse, wie man möglicherweise ohne Aufnahme an das EPG ran kommt.
Die folgenden Aussagen betreffen sie September05-FW für den 5x00PVR, alles andere habe ich nicht analysiert (ich sach ja - keine Zeit).
Voraussetung ist noch, dass der Topf die passende PID empfangen will.
1a.) Man suche in der FW den IRQ.Handler, der ist immer bei 80000180
1b.) Man suche darin nach
Code: Alles auswählen
e0r 80000260: 40086800 mfc0 $t0,R13 # Cause
e4r 80000264: 31080400 andi $t0,0x400
e8r 80000268: 11000015 beq $t0,0,140r // hier 140r wegmasken!!!
ecr 8000026c: 00000000 nop
f0r 80000270: 0c00057b jal 0x800015ec # HwIrqHandle
Code: Alles auswählen
0r 800015ec: 27bdffc8 addiu $sp,-56
4r 800015f0: afb30024 sw $s3,36($sp)
8r 800015f4: afb40028 sw $s4,40($sp)
cr 800015f8: afb5002c sw $s5,44($sp)
10r 800015fc: afb60030 sw $s6,48($sp)
14r 80001600: afbe0034 sw $fp,52($sp)
18r 80001604: afbf0020 sw $ra,32($sp)
1cr 80001608: 3c19b000 lui $t9,0xb000
20r 8000160c: 8f3e0030 lw $fp,48($t9) # b0000030 @EMMA_BHIF_INT_ST_1
24r 80001610: 3c18b000 lui $t8,0xb000
28r 80001614: 8f160034 lw $s6,52($t8) # b0000034 @EMMA_BHIF_INT_ST_2
2cr 80001618: 24150001 move $s5,1
30r 8000161c: 0000a025 move $s4,0
34r 80001620: 3294ffff andi $s4,0xffff
38r 80001624: 2a810020 slti $at,$s4,32=0x0020
3cr 80001628: 1020001d beq $at,0,b4r
40r 8000162c: 00000000 nop
44r 80001630: 03d5c824 and $t9,$fp,$s5
48r 80001634: 13200016 beq $t9,0,a4r
4cr 80001638: 00000000 nop
50r 8000163c: 3c19b000 lui $t9,0xb000
54r 80001640: 8f390040 lw $t9,64($t9) # b0000040 @EMMA_BHIF_INT_EN_1
58r 80001644: 02b9c824 and $t9,$s5
5cr 80001648: 13200011 beq $t9,0,a4r
60r 8000164c: 00000000 nop
64r 80001650: 3c1981b4 lui $t9,0x81b4
68r 80001654: 2739b1a8 addiu $t9,-20056=0xb1a8 # 81b3b1a8 @HwIrqFuncTable1 -> 0
1e.) Man suche nach dem ersten jal (hier beginnt die Unsicherheit zwischen den verschiedenen FWs???)
Code: Alles auswählen
20r 80031540: 3c19b001 lui $t9,0xb001
24r 80031544: 8f39a150 lw $t9,-24240($t9) # b000a150 @EMMA_TTSD_SECTION_DETECT_INTERRUPT1
28r 80031548: 3c18b001 lui $t8,0xb001
2cr 8003154c: 8f18a190 lw $t8,-24176($t8) # b000a190 @EMMA_TTSD_SECTION_DETECT_INTERRUPT_MASK1
30r 80031550: 0338f024 and $fp,$t9,$t8
34r 80031554: 3c0fb001 lui $t7,0xb001
38r 80031558: 03de7027 nor $t6,$fp,$fp
3cr 8003155c: adeea150 sw $t6,-24240($t7) # b000a150 @EMMA_TTSD_SECTION_DETECT_INTERRUPT1
// ganz viel Code, um zu bestimmen, welche Sections neu entdeckt wurden.
// *$a0 & 0x00000001 = Filter 0, *$a0 & 0x00000001 = Filter 1 usw.
// *($a0+4) & 0x00000001 = Filter 32, *$(a0+4) & 0x00000001 = Filter 33 usw.
// *($a0+8) & 0x00000001 = Filter 64, *$(a0+8) & 0x00000001 = Filter 65 usw.
148r 80031668: 27240020 addiu $a0,$t9,32=0x0020
14cr 8003166c: 0c01ee44 jal 0x8007b910 # HandleSectionDetectIRQ
150r 80031670: 00000000 nop
1f.) 8007b910 vergleicht viele Bits und Bytes mit anderen, wertet hier aus und da aus mit mit verdammt großen Structs, und ich weiss nicht was. Aber es ruft nur ein mal jal auf.
Code: Alles auswählen
8cr 8007b99c: 02602025 move $a0,$s3 // s3 entspricht einem Index auf die Filternummer
90r 8007b9a0: 0c01edb0 jal 0x8007b6c0 # HandleSectionDetectCopySection
Code: Alles auswählen
// Weiss nicht wadder da kontrolliert, landet im Fehlerfall alles mit Return 0 (hoffe ich)
174r 8007b834: 26640001 addiu $a0,$s3,1
178r 8007b838: 0c000e87 jal 0x80003a1c # get16bitLE
17cr 8007b83c: 00000000 nop
180r 8007b840: 30500fff andi $s0,$v0,0xfff // Länge
184r 8007b844: 26100003 addiu $s0,3
188r 8007b848: 2e012000 sltiu $at,$s0,8192=0x2000
18cr 8007b84c: 14200004 bne $at,0,1a0r
190r 8007b850: 00000000 nop
194r 8007b854: 00001025 move $v0,0
198r 8007b858: 10000021 beq 0,0,220r
19cr 8007b85c: 00000000 nop
1a0r 8007b860: 0230082a slt $at,$s1,$s0
1a4r 8007b864: 10200004 beq $at,0,1b8r
1a8r 8007b868: 00000000 nop
1acr 8007b86c: 00001025 move $v0,0
1b0r 8007b870: 1000001b beq 0,0,220r
1b4r 8007b874: 00000000 nop
1b8r 8007b878: 3c168101 lui $s6,0x8101
1bcr 8007b87c: 26d6e93c addiu $s6,-5828=0xe93c # 8100e93c -> 51f1636d
1c0r 8007b880: 1a00000c blez $s0,1f4r
1c4r 8007b884: 00000000 nop
1c8r 8007b888: 92790000 lbu $t9,0($s3)
1ccr 8007b88c: a2d90000 sb $t9,0($s6)
1d0r 8007b890: 26d60001 addiu $s6,1
1d4r 8007b894: 26730001 addiu $s3,1
1d8r 8007b898: 0274082b sltu $at,$s3,$s4
1dcr 8007b89c: 14200002 bne $at,0,1e8r
1e0r 8007b8a0: 00000000 nop
1e4r 8007b8a4: 02a09825 move $s3,$s5
1e8r 8007b8a8: 2610ffff addiu $s0,-1=0xffff
1ecr 8007b8ac: 1000fff4 beq 0,0,1c0r
1f0r 8007b8b0: 00000000 nop
1f4r 8007b8b4: 3c1980f5 lui $t9,0x80f5
1f8r 8007b8b8: 2739e4b4 addiu $t9,-6988=0xe4b4 # 80f4e4b4 -> 0
1fcr 8007b8bc: 27390004 addiu $t9,4
200r 8007b8c0: 001ec0c0 sll $t8,$fp,3
204r 8007b8c4: 0338c821 addu $t9,$t8
208r 8007b8c8: 02757823 subu $t7,$s3,$s5
20cr 8007b8cc: 25ef0007 addiu $t7,7
210r 8007b8d0: 31ef3fff andi $t7,0x3fff
214r 8007b8d4: af2f0000 sw $t7,0($t9)
218r 8007b8d8: 3c028101 lui $v0,0x8101
21cr 8007b8dc: 2442e93c addiu $v0,-5828=0xe93c # 8100e93c -> 51f1636d
220r 8007b8e0: 8fbf0014 lw $ra,20($sp)
224r 8007b8e4: 8fb00018 lw $s0,24($sp)
228r 8007b8e8: 8fb1001c lw $s1,28($sp)
22cr 8007b8ec: 8fb20020 lw $s2,32($sp)
230r 8007b8f0: 8fb30024 lw $s3,36($sp)
234r 8007b8f4: 8fb40028 lw $s4,40($sp)
238r 8007b8f8: 8fb5002c lw $s5,44($sp)
23cr 8007b8fc: 8fb60030 lw $s6,48($sp)
240r 8007b900: 8fbe0034 lw $fp,52($sp)
244r 8007b904: 27bd0038 addiu $sp,56
248r 8007b908: 03e00008 jr $ra
24cr 8007b90c: 00000000 nop
2.) Hook einbauen, wo man das Return (8007b8e0) gefunden hat.
In dem Hook würde ich nicht mehr machen, als die Table-ID zu prüfen (1. Byte), die Länge zu bestimmen (Diskrepanz!!!: 3.Byte&15<<8 || 2.Byte laut dem Code, ich kenne es in einer anreren Doku als 2.Byte&15<<8 || 3.Byte ), und den Krempel in einen fix reservierten Bereich zu kopieren. Immerhin befindet man sich in der Interruptroutine.
2,5
Wenn jemand damit was anfangen kann möge er es verweden.
Wenn nicht, habe ich grade eine Sicherungskopie auf einem externen Server angelegt. Vor März wird das bei mir nichts.



