Попробую объяснить эту кухню. В примерах адреса из прошивки HD2 1.10.03, в других прошивках адреса естественно другие, но алгоритм тот же.
Вот текст процедуры:
- Code: Select all
.text:00B98DB0 IRCodeTranslate: # CODE XREF: sub_40EBCC+3A8?p
.text:00B98DB0 # sub_12F50D0+1A0?p ...
.text:00B98DB0
.text:00B98DB0 var_18 = -0x18
.text:00B98DB0 var_10 = -0x10
.text:00B98DB0 var_C = -0xC
.text:00B98DB0 var_8 = -8
.text:00B98DB0 var_4 = -4
.text:00B98DB0 arg_0 = 0
.text:00B98DB0
.text:00B98DB0 5E 0F 1C 3C+ li $gp, 0xF5DAE90
.text:00B98DB8 21 E0 99 03 addu $gp, $t9
.text:00B98DBC D8 FF BD 27 addiu $sp, -0x28
.text:00B98DC0 24 00 BF AF sw $ra, 0x28+var_4($sp)
.text:00B98DC4 20 00 BE AF sw $fp, 0x28+var_8($sp)
.text:00B98DC8 21 F0 A0 03 move $fp, $sp
.text:00B98DCC 10 00 BC AF sw $gp, 0x28+var_18($sp)
.text:00B98DD0 28 00 C4 AF sw $a0, 0x28+arg_0($fp)
.text:00B98DD4 D8 81 84 8F la $a0, 0x1E40000
.text:00B98DD8 80 61 84 24 addiu $a0, (aSSCodeX - 0x1E40000) # "%s-%s: Code %x\n"
.text:00B98DDC D8 81 85 8F la $a1, 0x1E40000
.text:00B98DE0 90 61 A5 24 addiu $a1, (aRemotecontrol_ - 0x1E40000) # "RemoteControl.cpp"
.text:00B98DE4 D8 81 86 8F la $a2, 0x1E40000
.text:00B98DE8 70 61 C6 24 addiu $a2, (aIrcodetranslat - 0x1E40000) # "IRCodeTranslate"
.text:00B98DEC 28 00 C7 8F lw $a3, 0x28+arg_0($fp)
.text:00B98DF0 D0 73 99 8F la $t9, printf
.text:00B98DF4 09 F8 20 03 jalr $t9 ; printf
.text:00B98DF8 00 00 00 00 nop
.text:00B98DFC 10 00 DC 8F lw $gp, 0x28+var_18($fp)
.text:00B98E00 28 00 C2 8F lw $v0, 0x28+arg_0($fp)
.text:00B98E04 FF FF 43 30 andi $v1, $v0, 0xFFFF
.text:00B98E08 6C 68 02 24 li $v0, 0x686C
.text:00B98E0C 05 00 62 10 beq $v1, $v0, loc_B98E24
.text:00B98E10 00 00 00 00 nop
.text:00B98E14 FF FF 02 24 li $v0, 0xFFFFFFFF
.text:00B98E18 18 00 C2 AF sw $v0, 0x28+var_10($fp)
.text:00B98E1C 9E 00 00 10 b loc_B99098
.text:00B98E20 00 00 00 00 nop
.text:00B98E24 # ---------------------------------------------------------------------------
.text:00B98E24
.text:00B98E24 loc_B98E24: # CODE XREF: IRCodeTranslate+5C?j
.text:00B98E24 28 00 C3 8F lw $v1, 0x28+arg_0($fp)
.text:00B98E28 FF 00 02 3C lui $v0, 0xFF
.text:00B98E2C 24 10 62 00 and $v0, $v1, $v0
.text:00B98E30 03 14 02 00 sra $v0, 16
.text:00B98E34 FC FF 42 24 nop
.text:00B98E38 1C 00 C2 AF sw $v0, 0x28+var_C($fp)
.text:00B98E3C 1C 00 C3 8F lw $v1, 0x28+var_C($fp)
.text:00B98E40 5C 00 62 2C sltiu $v0, $v1, 0x5C
.text:00B98E44 92 00 40 10 beqz $v0, loc_B99090
.text:00B98E48 00 00 00 00 nop
.text:00B98E4C 1C 00 C2 8F lw $v0, 0x28+var_C($fp)
.text:00B98E50 80 18 02 00 sll $v1, $v0, 2
.text:00B98E54 D8 81 82 8F la $v0, 0x1E40000
.text:00B98E58 A4 61 42 24 addiu $v0, (dword_1E461A4 - 0x1E40000)
.text:00B98E5C 21 10 62 00 addu $v0, $v1, $v0
.text:00B98E60 00 00 42 8C lw $v0, 0($v0)
.text:00B98E64 21 10 5C 00 addu $v0, $gp
.text:00B98E68 08 00 40 00 jr $v0
.text:00B98E6C 00 00 00 00 nop
.text:00B98E70 # ---------------------------------------------------------------------------
.text:00B98E70 01 00 02 24 li $v0, 1
.text:00B98E74 18 00 C2 AF sw $v0, 0x28+var_10($fp)
.text:00B98E78 87 00 00 10 b loc_B99098
.text:00B98E7C 00 00 00 00 nop
.text:00B98E80 # ---------------------------------------------------------------------------
.text:00B98E80 02 00 03 24 li $v1, 2
.text:00B98E84 18 00 C3 AF sw $v1, 0x28+var_10($fp)
.text:00B98E88 83 00 00 10 b loc_B99098
.text:00B98E8C 00 00 00 00 nop
.text:00B98E90 # ---------------------------------------------------------------------------
.text:00B98E90 13 00 02 24 li $v0, 0x13
.text:00B98E94 18 00 C2 AF sw $v0, 0x28+var_10($fp)
.text:00B98E98 7F 00 00 10 b loc_B99098
.text:00B98E9C 00 00 00 00 nop
.text:00B98EA0 # ---------------------------------------------------------------------------
.text:00B98EA0 15 00 03 24 li $v1, 0x15
.text:00B98EA4 18 00 C3 AF sw $v1, 0x28+var_10($fp)
.text:00B98EA8 7B 00 00 10 b loc_B99098
.text:00B98EAC 00 00 00 00 nop
.text:00B98EB0 # ---------------------------------------------------------------------------
.text:00B98EB0 17 00 02 24 li $v0, 0x17
.text:00B98EB4 18 00 C2 AF sw $v0, 0x28+var_10($fp)
.text:00B98EB8 77 00 00 10 b loc_B99098
.text:00B98EBC 00 00 00 00 nop
.text:00B98EC0 # ---------------------------------------------------------------------------
.text:00B98EC0 16 00 03 24 li $v1, 0x16
.text:00B98EC4 18 00 C3 AF sw $v1, 0x28+var_10($fp)
.text:00B98EC8 73 00 00 10 b loc_B99098
.text:00B98ECC 00 00 00 00 nop
.text:00B98ED0 # ---------------------------------------------------------------------------
.text:00B98ED0 18 00 02 24 li $v0, 0x18
.text:00B98ED4 18 00 C2 AF sw $v0, 0x28+var_10($fp)
.text:00B98ED8 6F 00 00 10 b loc_B99098
.text:00B98EDC 00 00 00 00 nop
.text:00B98EE0 # ---------------------------------------------------------------------------
.text:00B98EE0 14 00 03 24 li $v1, 0x14
.text:00B98EE4 18 00 C3 AF sw $v1, 0x28+var_10($fp)
.text:00B98EE8 6B 00 00 10 b loc_B99098
.text:00B98EEC 00 00 00 00 nop
.text:00B98EF0 # ---------------------------------------------------------------------------
.text:00B98EF0 27 00 02 24 li $v0, 0x27
.text:00B98EF4 18 00 C2 AF sw $v0, 0x28+var_10($fp)
.text:00B98EF8 67 00 00 10 b loc_B99098
.text:00B98EFC 00 00 00 00 nop
.text:00B98F00 # ---------------------------------------------------------------------------
.text:00B98F00 29 00 03 24 li $v1, 0x29
.text:00B98F04 18 00 C3 AF sw $v1, 0x28+var_10($fp)
.text:00B98F08 63 00 00 10 b loc_B99098
.text:00B98F0C 00 00 00 00 nop
.text:00B98F10 # ---------------------------------------------------------------------------
.text:00B98F10 2D 00 02 24 li $v0, 0x2D
.text:00B98F14 18 00 C2 AF sw $v0, 0x28+var_10($fp)
.text:00B98F18 5F 00 00 10 b loc_B99098
.text:00B98F1C 00 00 00 00 nop
.text:00B98F20 # ---------------------------------------------------------------------------
.text:00B98F20 2C 00 03 24 li $v1, 0x2C
.text:00B98F24 18 00 C3 AF sw $v1, 0x28+var_10($fp)
.text:00B98F28 5B 00 00 10 b loc_B99098
.text:00B98F2C 00 00 00 00 nop
.text:00B98F30 # ---------------------------------------------------------------------------
.text:00B98F30 2B 00 02 24 li $v0, 0x2B
.text:00B98F34 18 00 C2 AF sw $v0, 0x28+var_10($fp)
.text:00B98F38 57 00 00 10 b loc_B99098
.text:00B98F3C 00 00 00 00 nop
.text:00B98F40 # ---------------------------------------------------------------------------
.text:00B98F40 2A 00 03 24 li $v1, 0x2A
.text:00B98F44 18 00 C3 AF sw $v1, 0x28+var_10($fp)
.text:00B98F48 53 00 00 10 b loc_B99098
.text:00B98F4C 00 00 00 00 nop
.text:00B98F50 # ---------------------------------------------------------------------------
.text:00B98F50 34 00 02 24 li $v0, 0x34
.text:00B98F54 18 00 C2 AF sw $v0, 0x28+var_10($fp)
.text:00B98F58 4F 00 00 10 b loc_B99098
.text:00B98F5C 00 00 00 00 nop
.text:00B98F60 # ---------------------------------------------------------------------------
.text:00B98F60 31 00 03 24 li $v1, 0x31
.text:00B98F64 18 00 C3 AF sw $v1, 0x28+var_10($fp)
.text:00B98F68 4B 00 00 10 b loc_B99098
.text:00B98F6C 00 00 00 00 nop
.text:00B98F70 # ---------------------------------------------------------------------------
.text:00B98F70 33 00 02 24 li $v0, 0x33
.text:00B98F74 18 00 C2 AF sw $v0, 0x28+var_10($fp)
.text:00B98F78 47 00 00 10 b loc_B99098
.text:00B98F7C 00 00 00 00 nop
.text:00B98F80 # ---------------------------------------------------------------------------
.text:00B98F80 12 00 03 24 li $v1, 0x12
.text:00B98F84 18 00 C3 AF sw $v1, 0x28+var_10($fp)
.text:00B98F88 43 00 00 10 b loc_B99098
.text:00B98F8C 00 00 00 00 nop
.text:00B98F90 # ---------------------------------------------------------------------------
.text:00B98F90 03 00 02 24 li $v0, 3
.text:00B98F94 18 00 C2 AF sw $v0, 0x28+var_10($fp)
.text:00B98F98 3F 00 00 10 b loc_B99098
.text:00B98F9C 00 00 00 00 nop
.text:00B98FA0 # ---------------------------------------------------------------------------
.text:00B98FA0 FE FF 03 24 li $v1, 0xFFFFFFFE
.text:00B98FA4 18 00 C3 AF sw $v1, 0x28+var_10($fp)
.text:00B98FA8 3B 00 00 10 b loc_B99098
.text:00B98FAC 00 00 00 00 nop
.text:00B98FB0 # ---------------------------------------------------------------------------
.text:00B98FB0 FD FF 02 24 li $v0, 0xFFFFFFFD
.text:00B98FB4 18 00 C2 AF sw $v0, 0x28+var_10($fp)
.text:00B98FB8 37 00 00 10 b loc_B99098
.text:00B98FBC 00 00 00 00 nop
.text:00B98FC0 # ---------------------------------------------------------------------------
.text:00B98FC0 FC FF 03 24 li $v1, 0xFFFFFFFC
.text:00B98FC4 18 00 C3 AF sw $v1, 0x28+var_10($fp)
.text:00B98FC8 33 00 00 10 b loc_B99098
.text:00B98FCC 00 00 00 00 nop
.text:00B98FD0 # ---------------------------------------------------------------------------
.text:00B98FD0 F5 FF 02 24 li $v0, 0xFFFFFFF5
.text:00B98FD4 18 00 C2 AF sw $v0, 0x28+var_10($fp)
.text:00B98FD8 2F 00 00 10 b loc_B99098
.text:00B98FDC 00 00 00 00 nop
.text:00B98FE0 # ---------------------------------------------------------------------------
.text:00B98FE0 36 00 03 24 li $v1, 0x36
.text:00B98FE4 18 00 C3 AF sw $v1, 0x28+var_10($fp)
.text:00B98FE8 2B 00 00 10 b loc_B99098
.text:00B98FEC 00 00 00 00 nop
.text:00B98FF0 # ---------------------------------------------------------------------------
.text:00B98FF0 FB FF 02 24 li $v0, 0xFFFFFFFB
.text:00B98FF4 18 00 C2 AF sw $v0, 0x28+var_10($fp)
.text:00B98FF8 27 00 00 10 b loc_B99098
.text:00B98FFC 00 00 00 00 nop
.text:00B99000 # ---------------------------------------------------------------------------
.text:00B99000 37 00 03 24 li $v1, 0x37
.text:00B99004 18 00 C3 AF sw $v1, 0x28+var_10($fp)
.text:00B99008 23 00 00 10 b loc_B99098
.text:00B9900C 00 00 00 00 nop
.text:00B99010 # ---------------------------------------------------------------------------
.text:00B99010 38 00 02 24 li $v0, 0x38
.text:00B99014 18 00 C2 AF sw $v0, 0x28+var_10($fp)
.text:00B99018 1F 00 00 10 b loc_B99098
.text:00B9901C 00 00 00 00 nop
.text:00B99020 # ---------------------------------------------------------------------------
.text:00B99020 11 00 03 24 li $v1, 0x11
.text:00B99024 18 00 C3 AF sw $v1, 0x28+var_10($fp)
.text:00B99028 1B 00 00 10 b loc_B99098
.text:00B9902C 00 00 00 00 nop
.text:00B99030 # ---------------------------------------------------------------------------
.text:00B99030 3E 00 02 24 li $v0, 0x3E
.text:00B99034 18 00 C2 AF sw $v0, 0x28+var_10($fp)
.text:00B99038 17 00 00 10 b loc_B99098
.text:00B9903C 00 00 00 00 nop
.text:00B99040 # ---------------------------------------------------------------------------
.text:00B99040 F3 FF 03 24 li $v1, 0xFFFFFFF3
.text:00B99044 18 00 C3 AF sw $v1, 0x28+var_10($fp)
.text:00B99048 13 00 00 10 b loc_B99098
.text:00B9904C 00 00 00 00 nop
.text:00B99050 # ---------------------------------------------------------------------------
.text:00B99050 F2 FF 02 24 li $v0, 0xFFFFFFF2
.text:00B99054 18 00 C2 AF sw $v0, 0x28+var_10($fp)
.text:00B99058 0F 00 00 10 b loc_B99098
.text:00B9905C 00 00 00 00 nop
.text:00B99060 # ---------------------------------------------------------------------------
.text:00B99060 63 00 03 24 li $v1, 0x63
.text:00B99064 18 00 C3 AF sw $v1, 0x28+var_10($fp)
.text:00B99068 0B 00 00 10 b loc_B99098
.text:00B9906C 00 00 00 00 nop
.text:00B99070 # ---------------------------------------------------------------------------
.text:00B99070 96 FF 02 24 li $v0, 0xFFFFFF96
.text:00B99074 18 00 C2 AF sw $v0, 0x28+var_10($fp)
.text:00B99078 07 00 00 10 b loc_B99098
.text:00B9907C 00 00 00 00 nop
.text:00B99080 # ---------------------------------------------------------------------------
.text:00B99080 39 00 02 24 li $v0, 0x39 # 7B3EE0
.text:00B99084 18 00 C2 AF sw $v0, 0x28+var_10($fp)
.text:00B99088 03 00 00 10 b loc_B99098
.text:00B9908C 00 00 00 00 nop
.text:00B99090 # ---------------------------------------------------------------------------
.text:00B99090
.text:00B99090 loc_B99090: # CODE XREF: IRCodeTranslate+94?j
.text:00B99090 FF FF 03 24 li $v1, 0xFFFFFFFF
.text:00B99094 18 00 C3 AF sw $v1, 0x28+var_10($fp)
.text:00B99098
.text:00B99098 loc_B99098: # CODE XREF: IRCodeTranslate+6C?j
.text:00B99098 # IRCodeTranslate+C8?j ...
.text:00B99098 18 00 C2 8F lw $v0, 0x28+var_10($fp)
.text:00B9909C 21 E8 C0 03 move $sp, $fp
.text:00B990A0 24 00 BF 8F lw $ra, 0x28+var_4($sp)
.text:00B990A4 20 00 BE 8F lw $fp, 0x28+var_8($sp)
.text:00B990A8 28 00 BD 27 addiu $sp, 0x28
.text:00B990AC 08 00 E0 03 jr $ra
.text:00B990B0 00 00 00 00 nop
.text:00B990B0 # End of function IRCodeTranslate
А вот таблица смещений:
- Code: Select all
.rodata:01E461A4 C0 52 A2 F0 .word 0xF0A252C0
.rodata:01E461A8 B0 53 A2 F0 .word 0xF0A253B0
.rodata:01E461AC 50 54 A2 F0 .word 0xF0A25450
.rodata:01E461B0 50 54 A2 F0 .word 0xF0A25450
.rodata:01E461B4 50 54 A2 F0 .word 0xF0A25450
.rodata:01E461B8 50 54 A2 F0 .word 0xF0A25450
.rodata:01E461BC 50 54 A2 F0 .word 0xF0A25450
.rodata:01E461C0 50 54 A2 F0 .word 0xF0A25450
.rodata:01E461C4 50 54 A2 F0 .word 0xF0A25450
.rodata:01E461C8 50 54 A2 F0 .word 0xF0A25450
.rodata:01E461CC 50 54 A2 F0 .word 0xF0A25450
.rodata:01E461D0 50 54 A2 F0 .word 0xF0A25450
.rodata:01E461D4 50 54 A2 F0 .word 0xF0A25450
.rodata:01E461D8 50 54 A2 F0 .word 0xF0A25450
.rodata:01E461DC 50 54 A2 F0 .word 0xF0A25450
.rodata:01E461E0 00 53 A2 F0 .word 0xF0A25300
.rodata:01E461E4 50 54 A2 F0 .word 0xF0A25450
.rodata:01E461E8 50 54 A2 F0 .word 0xF0A25450
.rodata:01E461EC 50 54 A2 F0 .word 0xF0A25450
.rodata:01E461F0 E0 52 A2 F0 .word 0xF0A252E0
.rodata:01E461F4 B0 52 A2 F0 .word 0xF0A252B0
.rodata:01E461F8 F0 52 A2 F0 .word 0xF0A252F0
.rodata:01E461FC 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46200 C0 53 A2 F0 .word 0xF0A253C0
.rodata:01E46204 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46208 50 54 A2 F0 .word 0xF0A25450
.rodata:01E4620C 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46210 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46214 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46218 50 54 A2 F0 .word 0xF0A25450
.rodata:01E4621C 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46220 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46224 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46228 50 54 A2 F0 .word 0xF0A25450
.rodata:01E4622C 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46230 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46234 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46238 50 54 A2 F0 .word 0xF0A25450
.rodata:01E4623C 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46240 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46244 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46248 50 54 A2 F0 .word 0xF0A25450
.rodata:01E4624C 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46250 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46254 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46258 50 54 A2 F0 .word 0xF0A25450
.rodata:01E4625C 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46260 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46264 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46268 50 54 A2 F0 .word 0xF0A25450
.rodata:01E4626C 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46270 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46274 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46278 50 54 A2 F0 .word 0xF0A25450
.rodata:01E4627C 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46280 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46284 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46288 50 54 A2 F0 .word 0xF0A25450
.rodata:01E4628C 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46290 50 54 A2 F0 .word 0xF0A25450
.rodata:01E46294 40 53 A2 F0 .word 0xF0A25340
.rodata:01E46298 D0 52 A2 F0 .word 0xF0A252D0
.rodata:01E4629C A0 53 A2 F0 .word 0xF0A253A0
.rodata:01E462A0 50 54 A2 F0 .word 0xF0A25450
.rodata:01E462A4 90 52 A2 F0 .word 0xF0A25290
.rodata:01E462A8 50 53 A2 F0 .word 0xF0A25350
.rodata:01E462AC 60 53 A2 F0 .word 0xF0A25360
.rodata:01E462B0 70 53 A2 F0 .word 0xF0A25370
.rodata:01E462B4 80 53 A2 F0 .word 0xF0A25380
.rodata:01E462B8 90 53 A2 F0 .word 0xF0A25390
.rodata:01E462BC E0 53 A2 F0 .word 0xF0A253E0
.rodata:01E462C0 F0 53 A2 F0 .word 0xF0A253F0
.rodata:01E462C4 D0 53 A2 F0 .word 0xF0A253D0
.rodata:01E462C8 00 54 A2 F0 .word 0xF0A25400
.rodata:01E462CC 10 54 A2 F0 .word 0xF0A25410
.rodata:01E462D0 20 54 A2 F0 .word 0xF0A25420
.rodata:01E462D4 30 54 A2 F0 .word 0xF0A25430
.rodata:01E462D8 40 54 A2 F0 .word 0xF0A25440
.rodata:01E462DC 50 54 A2 F0 .word 0xF0A25450
.rodata:01E462E0 50 54 A2 F0 .word 0xF0A25450
.rodata:01E462E4 40 52 A2 F0 .word 0xF0A25240
.rodata:01E462E8 50 54 A2 F0 .word 0xF0A25450
.rodata:01E462EC 30 52 A2 F0 .word 0xF0A25230
.rodata:01E462F0 10 53 A2 F0 .word 0xF0A25310
.rodata:01E462F4 60 52 A2 F0 .word 0xF0A25260
.rodata:01E462F8 50 54 A2 F0 .word 0xF0A25450
.rodata:01E462FC 20 53 A2 F0 .word 0xF0A25320
.rodata:01E46300 30 53 A2 F0 .word 0xF0A25330
.rodata:01E46304 A0 52 A2 F0 .word 0xF0A252A0
.rodata:01E46308 70 52 A2 F0 .word 0xF0A25270
.rodata:01E4630C 50 52 A2 F0 .word 0xF0A25250
.rodata:01E46310 80 52 A2 F0 .word 0xF0A25280
можете сильно не вникать
это на самом деле case. Реализован так: берётся код кнопки, вычитается 4 (у асус коды кнопок начинаются с 4) , умножается на 4. Берётся значение из таблицы с этим смещением и делается переход на это значение. Пример:
макс значение в табл - 450, оно указывает на 00B99090.
Для клавиши 4 - значение 2C0.
Считаем: 450 - 2C0 = 190. 00B99090 - 190 = B98F00
попадаем на
- Code: Select all
.text:00B98F00 # ---------------------------------------------------------------------------
.text:00B98F00 29 00 03 24 li $v1, 0x29
.text:00B98F04 18 00 C3 AF sw $v1, 0x28+var_10($fp)
.text:00B98F08 63 00 00 10 b loc_B99098
.text:00B98F0C 00 00 00 00 nop
Здесь запихивается значение 29 (код внутренней команды stop) в регистр, регистр кладётся в переменную и переход на конец
Т.е. мне на Асусе проще всего - я просто перетасовываю таблицу смещений так, как мне нужно, может быть, перебиваю коды внутренних команд и всё.
Теперь по кнопкам:
полный код кнопки, получаемый с IR - четыре байта
XXYYZZZZ
YY - код клавиши,
XX - код клавиши XOR FF (для проверки драйвером),
ZZZZ - код устройства (производителя)
Код устройства у нас 688C у IconBit HDS7L и подобных 9F00. Хранится по адресу 00798E08
Таблицы кодов пультов:
код внутреняя команда действие
- Code: Select all
IconBit
0x00 0x23 7
0x01 0x06 TV SYS
0x02 0x17 OK
0x03 0x2C >>
0x04 0x20 4
0x05 0x1D 1
0x06 0x15 LEFT
0x07 0x2D <<
0x08 0x21 5
0x09 0x1E 2
0x0A 0x14 DOWN
0x0B 0x2A >>|
0x0C 0x25 9
0x0D 0x30 GOTO
0x0E 0x16 RIGHT
0x0F 0x2B |<<
0x10 0x24 8
0x11 0x1C 0
0x13 0x29 STOP
0x14 0x22 6
0x15 0x1F 3
0x16 0x3E MENU
0x17 0x37 VOL+
0x1A 0x03 SETUP
0x40 0x3B ZOOM-
0x41 0x10 COPY
0x43 0x13 UP
0x44 0x36 ZOOM+
0x45 0x1B CM SKIP
0x46 0x1A INS REPLAY
0x47 0x12 HOME
0x48 0x33 SUBTITLE
0x49 0x34 AUDIO
0x4A 0x66 BROWSER
0x4C 0x32 A-B
0x4D 0x2E SLOW
0x4E 0x8F CONFIRM
0x4F 0x18 RETURN
0x50 0x27 PLAY
0x52 0x02 INFO
0x54 0x38 VOL-
0x55 0x90 SELECT
0x56 0x92 MUSIC
0x57 0x01 POWER
0x58 0x31 REPEAT
0x59 0x35 ANGLE
0x5A 0x28 PAUSE
0x5B 0x39 MUTE
- Code: Select all
ASUS
0x04 0x29 STOP
0x05 0xFFFFFFFB play_music (нет на пульте)
0x13 0x2A NEXT
0x17 0x2C FFWD
0x18 0x27 PLAY/PAUSE
0x19 0x2B PREV
0x1B 0x37 VOL+
0x40 0x12 GUIDE/HOME
0x41 0x2D FRWD
0x42 0x36 ZOOM
0x44 0x18 RETURN
0x45 0x03 SETUP
0x46 0xFFFFFFFE movies
0x47 0xFFFFFFFD music
0x48 0xFFFFFFFC photo
0x49 0xFFFFFFF5 RANDOM
0x4A 0x11 OPTION
0x4B 0x3E FILE
0x4C 0x38 VOL-
0x4D 0xFFFFFFF3 NAS
0x4E 0xFFFFFFF2 internet
0x4F 0x63 EJECT
0x50 0xFFFFFF96 DISC MENU
0x51 0x39 MUTE
0x54 0x02 DISPLAY/INFO
0x56 0x01 POWER
0x57 0x34 AUDIO
0x58 0x15 LEFT
0x5A 0x31 REPEAT
0x5B 0x33 SUBTITLE
0x5C 0x14 DOWN
0x5D 0x17 OK
0x5E 0x13 UP
0x5F 0x16 RIGHT
Ну и напоследок коды внутренних команд
- Code: Select all
13 up
14 down
15 left
16 right
3 setup
1 power
78 option_red
79 option_green
7B option_blue
7A option_yellow
2 display
4 eject
6 pscan
FFFFFF86 hdcp_on
FFFFFF85 hdcp_off
5 source
B hdd
C dvd
10 file_copy
9 schedule
3E option
11 menu
12 guide
FFFFFF99 timelogging
17 select
18 return
19 delete
28 pause
27 play
29 stop
2C ffwd
2D frwd
2E sfwd
22 srwd
41 next_file
2A next
42 prev_file
2B prev
1A instant_replay
1B cmskip
30 search
39 mute
31 repeat
34 audio
33 subtitle
35 angle
36 zoom
3A zoom_in
3B zoom_out
45 rotate
FFFFFF90 playattime
FFFFFF93 IM_Status
FFFFFF92 IM_File_Status
FFFFFF91 IM_MSG_TXT
Огромное спасибо LossLess, что разжевал мне всё это
Теперь передаю дальше.
Кст, он отказался от case и делает просто Command = array[Ir_code]
т.е. он набивает в таблицу коды внутренних команд и выбирает значение в зависимости от кода кнопки. Экономия места потрясающая
PS: Вот так можно вычислить коды пульта -
viewtopic.php?f=14&t=102