Obrigado jmaraujo! Já resolvi o problema. Eu estava colocando a rotina num local inadequado (27100). Mudei para o endereço 2711A e deu certinho:
ROM:0002711A
ROM:0002711A ; =============== S U B R O U T I N E =======================================
ROM:0002711A
ROM:0002711A
ROM:0002711A sub_2711A ; CODE XREF: sub_25B8C+12Ep
ROM:0002711A ; sub_25B8C+162p
ROM:0002711A SUBS R1, #0x10
ROM:0002711C PUSH {R1}
ROM:0002711E LDRB R1, [R1,#0xE]
ROM:00027120 CMP R1, #1
ROM:00027122 POP {R1}
ROM:00027124 LDRB R1, [R1,#0xF]
ROM:00027126 BNE loc_27130
ROM:00027126 ; End of function sub_2711A
ROM:00027126
ROM:00027128
ROM:00027128 ; =============== S U B R O U T I N E =======================================
ROM:00027128
ROM:00027128
ROM:00027128 sub_27128 ; DATA XREF: sub_27060+30o
ROM:00027128 PUSH {R0}
ROM:0002712A LDR R0, =loc_746C
ROM:0002712C LDRB R1, [R0,R1]
ROM:0002712E POP {R0}
ROM:00027130
ROM:00027130 loc_27130 ; CODE XREF: sub_2711A+Cj
ROM:00027130 NOP
ROM:00027132 CMP R1, #0xF9 ; '¨'
ROM:00027134
ROM:00027134 loc_27134 ; DATA XREF: sub_27060+38o
ROM:00027134 BLS locret_27138
ROM:00027136 SUBS R1, #0xFA ; '·'
ROM:00027138
ROM:00027138 locret_27138 ; CODE XREF: sub_27128:loc_27134j
ROM:00027138 BX LR
ROM:00027138 ; End of function sub_27128
ROM:00027138
ROM:00027138 ; ---------------------------------------------------------------------------
Agora, estou com um novo e mais complicado problema.
Fiz o patch da Rotina Convert Unicode to 125x (alterando corretamente os pontos 1 e 2), criei as fontes adequadas (colocando os caracteres 250-255 nos locais 0-5), porém o aparelho continuou não mostrando os caracteres acentuados e especiais (mostra o caracter "_" no lugar). Eu já havia lido o documento Patching...A to Z, que mencionava um outro patch, desta vez no 8032, que deveria ser aplicado em conjunto com o do ARM (em alguns players):
==================================================================
3) Show cyrillics in file browser instead of '_' chars.
This patch works together with corresponding patch in ARM section - so you need to apply
both of them to see the result.
To see all chars in filebrowser patch the following bytes:
12DA4: 20 => 00
12DAA: 7E => FE
15EEC: 20 => 00
15EF2: 7E => FE
7F 06 02 05 9B
----------------------------------------------------------------
Howto:
In 8032 code look for ("XX" is a wildcard char):
90 XX XX E0 FF 90 XX XX E0 FE C3 9F 50 05 C3 EF (I found it at 15E9E).
Then skip until the following section of code and patch #0x20 and #0x7E:
ROM:00015EEB 94 20 subb A, #0x20
ROM:00015EED 40 06 jc ROM_5EF5
ROM:00015EEF E0 movx A, @DPTR
ROM:00015EF0 D3 setb C
ROM:00015EF1 94 7E subb A, #0x7E
ROM:00015EF3 40 10 jc ROM_5F05
This code appears twice:
first time for current directory,
second time for names of files in the file browser
Note: it can be your firmware doesn't check the char boundaries.
In this case you cannot and don't need to apply this patch.
===============================================
Eu encontrei 2 sequencias assim: 90 XX XX E0 FF 90 XX XX E0 FE C3 9F 50 05 (os 2 últimos bytes da sequencia - C3 EF - não coincidiram). Estão nos endereços 7B82 e 7D8A. Transcrevo os trechos:
B0:7B82 ; ---------------------------------------------------------------------------
B0:7B82
B0:7B82 B0_7B82: ; CODE XREF: B0_79F6+166j
B0:7B82 ; B0_79F6+172j
B0:7B82 mov DPTR, #XRAM_FDF1
B0:7B85 movx A, @DPTR
B0:7B86 mov R7, A
B0:7B87 mov DPTR, #XRAM_FDF0
B0:7B8A movx A, @DPTR
B0:7B8B mov R6, A
B0:7B8C clr C
B0:7B8D subb A, R7
B0:7B8E jnc B0_7B95
B0:7B90 mov DPTR, #XRAM_FDF1
B0:7B93 mov A, R6
B0:7B94 movx @DPTR, A
B0:7B95
B0:7B95 B0_7B95: ; CODE XREF: B0_79F6+198j
B0:7B95 mov DPTR, #XRAM_FDF2
B0:7B98 movx A, @DPTR
B0:7B99 mov R7, A
B0:7B9A mov A, R6
B0:7B9B setb C
B0:7B9C subb A, R7
B0:7B9D jc B0_7BA1
B0:7B9F mov A, R6
B0:7BA0 movx @DPTR, A
B0:7BA1
B0:7BA1 B0_7BA1: ; CODE XREF: B0_79F6+12Dj
B0:7BA1 ; B0_79F6+1A7j
B0:7BA1 mov DPTR, #XRAM_FDF0
B0:7BA4 movx A, @DPTR
B0:7BA5 mov DPTR, #XRAM_FDF4
B0:7BA8 movx @DPTR, A
B0:7BA9 ljmp B0_7ADB
B0:7BAC ; ---------------------------------------------------------------------------
B0:7D8A ; ---------------------------------------------------------------------------
B0:7D8A
B0:7D8A B0_7D8A: ; CODE XREF: B0_7BFE+166j
B0:7D8A ; B0_7BFE+172j
B0:7D8A mov DPTR, #XRAM_FDF1
B0:7D8D movx A, @DPTR
B0:7D8E mov R7, A
B0:7D8F mov DPTR, #XRAM_FDF0
B0:7D92 movx A, @DPTR
B0:7D93 mov R6, A
B0:7D94 clr C
B0:7D95 subb A, R7
B0:7D96 jnc B0_7D9D
B0:7D98 mov DPTR, #XRAM_FDF1
B0:7D9B mov A, R6
B0:7D9C movx @DPTR, A
B0:7D9D
B0:7D9D B0_7D9D: ; CODE XREF: B0_7BFE+198j
B0:7D9D mov DPTR, #XRAM_FDF2
B0:7DA0 movx A, @DPTR
B0:7DA1 mov R7, A
B0:7DA2 mov A, R6
B0:7DA3 setb C
B0:7DA4 subb A, R7
B0:7DA5 jc B0_7DA9
B0:7DA7 mov A, R6
B0:7DA8 movx @DPTR, A
B0:7DA9
B0:7DA9 B0_7DA9: ; CODE XREF: B0_7BFE+12Dj
B0:7DA9 ; B0_7BFE+1A7j
B0:7DA9 mov DPTR, #XRAM_FDF0
B0:7DAC movx A, @DPTR
B0:7DAD mov DPTR, #XRAM_FDF4
B0:7DB0 movx @DPTR, A
B0:7DB1 ljmp B0_7CE3
B0:7DB4 ; ---------------------------------------------------------------------------
O problema é: esses trechos tem algumas semelhanças, mas não apresentam os pontos que deveriam ser trocados facilmente como descrito no documento. Meus limitadíssimos conhecimentos de Assembly 8052 estão me impedindo de avançar na tentativa de fazer patches nesses trechos, que sejam equivalentes ao descrito no documento Patching...A to Z. Aguardo a ajuda dos Mestres aqui do Forum. Enquanto isso vou tentando aprender um pouco mais sobre o assunto. Obrigado!