Autor Tópico: Firmware MT13x9: Log de Descobertas  (Lida 272661 vezes)

0 Membros e 2 Visitantes estão vendo este tópico.

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #90 Online: Julho 30, 2007, 01:44:12 pm »
Finalmente já está tomando forma o filebrowser após as minhas mudanças... Mudei a posição das setas, não só horizontalmente, mas verticalemente também. Subí as coordenadas dos arquivos, e deixei a área das coordenadas levemente menos larga para não interferir com as setas.

A área dos tags mp3s ainda pode ser movida um pouco para cima. A área a direita dos tags pode ser utilizado para colocar a miniatura .jpg naquele espaço.

Terei que criar um background novo, mas não acho que seja problema.

Jefferson, ¿cómo voçê fez as mudanças do seu background? ¿Foi "a olho" mesmo, ou voçê calculou as coordenadas?
« Última modificação: Julho 30, 2007, 02:08:14 pm por jmaraujo »

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #91 Online: Julho 30, 2007, 01:49:05 pm »

Jefferson, ¿cómo voçê fez as mudanças do seu background? ¿Foi "a olho" mesmo, ou voçê calculou as coordenadas?

Foi a olho. Eu fiz umas 4 imagens até posicionar corretamente.
http://jefferson-ryan.blogspot.com
http://ryan.com.br

Se o que você escreve não merece sua atenção, vai merecer a atenção de quem?!

FORUM.RYAN.COM.BR

Re: Firmware: log de descobertas
« Responder #91 Online: Julho 30, 2007, 01:49:05 pm »

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #92 Online: Julho 30, 2007, 01:59:09 pm »
A próposito... Eu troquei as coordenadas da área de limpeza dos em tres lugares, do jeito que voçê escreveu no post "MP3_TagDisplay - ClearRect inicial". Até agora tudo funcionou normalmente...

No DVP5100: Nas rotinas "ROM:480B", "ROM:5FD5" e a partir de "ROM:BD11" (todas no banco 1).

Offline eneris

  • Novato Prolixo
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #93 Online: Julho 30, 2007, 03:26:15 pm »
Jmaraujo, você sabe como exibir caracteres acentuados no browser?

PS: Como encontro o getChar e putChar quando o remaker nao exibe as informações no banco 0?

help...
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #94 Online: Julho 30, 2007, 03:38:23 pm »
SENHAS
E um pouco sobre menus ocultos

Como descobrir os procedimentos de exibição da tela de versão e de escolha de regiões, incluindo senhas, da maioria dos aparelhos baseado em MT13x9 por análise do seu firmware.

O procedimento funcionou nos seguintes firmwares


  • Proview DVP-858
  • Philips DVP5100
  • Philips DVP3040K
  • Philips DVP5965
  • Philips DVP5980
  • Philips DVP5140
  • Lenoxx DV-406

Não funcionou nos seguintes

  • Pioneer 575 (possivelmente nenhum Pioneer)
  • possivelmente, nenhum LG)

Também funciona com o Philips PET725, mas as strings de busca são diferentes

Eu tomei como ponto de partida o documento MenusOcultos.rtf de Cachirulo :clapping:. Somente lendo o documento eu não entendi nada, por isso baixei o firmware em que ele se baseia e depois de abri-lo no IDA e rodar os scripts de análise, tudo ficou claro. O documento não fornece strings de busca, nem explica como localizar as rotinas em seu firmware. Eu vou preencher estas lacunas neste post.




Como exemplo, vou usar o firmware do Proview DVP-858, v20.07, cujas senhas eram um mistério até eu descobrir esse procedimento.

Tela de Versão



Procure por:

90 ? ? E0 64 ? 70 ? 90 ? ? E0 FF 54 0F FE 64 0F 60 ? EE C3 94 ? 50 ? EE 90 ? ? 93 FE 90 FB 00

Esta string só ocorre uma vez, na rotina que o Cachirulo batizou de CheckVersPass, mas que eu vou chamar aqui de CheckVersionPass (não faz diferença).

B2:D849             ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B2:D849
B2:D849
B2:D849             CheckVersionPass:             ; CODE XREF: BankSw_593_B2_5195+16p
B2:D849 90 FD 74    mov     DPTR, #XRAM_FD74      ; Número do menu corrente
B2:D84C E0          movx    A, @DPTR
B2:D84D 64 01       xrl     A, #1                 ; Estamos no menu 1 (General)?
B2:D84F 70 5E       jnz     B2_D8AF
B2:D851 90 FC B7    mov     DPTR, #XRAM_FCB7
B2:D854 E0          movx    A, @DPTR
B2:D855 FF          mov     R7, A
B2:D856 54 0F       anl     A, #0xF
B2:D858 FE          mov     R6, A
B2:D859 64 0F       xrl     A, #0xF
B2:D85B 60 52       jz      B2_D8AF
B2:D85D EE          mov     A, R6
B2:D85E C3          clr     C
B2:D85F 94 04       subb    A, #4                 ; Número de dígitos da senha
B2:D861 50 1C       jnc     B2_D87F
B2:D863 EE          mov     A, R6
B2:D864 90 44 F4    mov     DPTR, #VersionPass
B2:D867 93          movc    A, @A+DPTR
B2:D868 FE          mov     R6, A
B2:D869 90 FB 00    mov     DPTR, #XRAM_FB00      ; Buffer_Remoto
B2:D86C E0          movx    A, @DPTR
B2:D86D 6E          xrl     A, R6
B2:D86E 70 0F       jnz     B2_D87F
B2:D870 EF          mov     A, R7
B2:D871 54 F0       anl     A, #0xF0
B2:D873 FE          mov     R6, A
B2:D874 EF          mov     A, R7
B2:D875 04          inc     A
B2:D876 54 0F       anl     A, #0xF
B2:D878 4E          orl     A, R6
B2:D879 90 FC B7    mov     DPTR, #XRAM_FCB7
B2:D87C F0          movx    @DPTR, A
B2:D87D 80 07       sjmp    B2_D886
B2:D87F             ; ---------------------------------------------------------------------------
B2:D87F
B2:D87F             B2_D87F:                      ; CODE XREF: CheckVersionPass+18j
B2:D87F                                           ; CheckVersionPass+25j
B2:D87F EF          mov     A, R7
B2:D880 54 F0       anl     A, #0xF0
B2:D882 90 FC B7    mov     DPTR, #XRAM_FCB7
B2:D885 F0          movx    @DPTR, A
B2:D886
B2:D886             B2_D886:                      ; CODE XREF: CheckVersionPass+34j
B2:D886 90 FC B7    mov     DPTR, #XRAM_FCB7
B2:D889 E0          movx    A, @DPTR
B2:D88A FF          mov     R7, A
B2:D88B 54 0F       anl     A, #0xF
B2:D88D FE          mov     R6, A
B2:D88E BE 04 1E    cjne    R6, #4, B2_D8AF
B2:D891 EF          mov     A, R7
B2:D892 44 0F       orl     A, #0xF
B2:D894 F0          movx    @DPTR, A
B2:D895 90 FD 69    mov     DPTR, #XRAM_FD69
B2:D898 74 0A       mov     A, #0xA
B2:D89A F0          movx    @DPTR, A
B2:D89B 90 FC C8    mov     DPTR, #XRAM_FCC8
B2:D89E E0          movx    A, @DPTR
B2:D89F 54 80       anl     A, #0x80
B2:D8A1 44 07       orl     A, #7
B2:D8A3 F0          movx    @DPTR, A
B2:D8A4 90 FD 74    mov     DPTR, #XRAM_FD74      ; Número do menu corrente
B2:D8A7 74 15       mov     A, #0x15              ; Carrega com o novo menu (versão)
B2:D8A9 F0          movx    @DPTR, A
B2:D8AA 7F 01       mov     R7, #1
B2:D8AC 12 E6 DC    lcall   B2_E6DC
B2:D8AF
B2:D8AF             B2_D8AF:                      ; CODE XREF: CheckVersionPass+6j
B2:D8AF                                           ; CheckVersionPass+12j ...
B2:D8AF 22          ret
B2:D8AF             ; End of function CheckVersionPass


O menu onde é preciso estar para que a senha seja válida está destacado em verde. Você precisa conferir os números dos menus no mtkRemaker, mas esse é um problema menor, porque sabendo a senha basta entrar em cada um dos menus principais e digitar a senha, até achar o menu correto. Normalmente, são os menus General e Preferences.

O endereço do offset no mesmo banco onde está a senha está destacado em azul (0x44F4) e o número de bytes está destacado em vermelho (4);

Olhando então no offset 0x44F4 do mesmo banco encontramos a senha:

B2:44F4 09          VersionPass:.byte    9        ; DATA XREF: CheckVersionPass+1Bo
B2:44F5 05          .byte    5
B2:44F6 09          .byte    9
B2:44F7 06          .byte    6

B2:44F8 01          .byte    1
B2:44F9 02          .byte    2
B2:44FA 03          .byte    3
B2:44FB 04          .byte    4
B2:44FC 0E          .byte  0xE
B2:44FD 0E          .byte  0xE
B2:44FE 0E          .byte  0xE
B2:44FF 0F          .byte  0xF


A senha é 9596

O offset está com o nome "VersionPass" porque eu dei esse nome a ele. No seu IDA ele vai aparecer com o número do endereço mesmo.

Tela de escolha de Região




Procure por:

90 ? ? E0 FF 64 ? 70 ? 90 ? ? E0 FE 54 0F FD 64 0F 60 ? ED C3 94 ? 50 ? ED 90 ? ? 93 FD 90 FB 00

Esta string só ocorre uma vez, na rotina que o Cachirulo batizou de CheckMenuPass, mas que eu vou chamar aqui de CheckRegionPass porque me parece bem mais descritivo.

B2:D1E2             ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B2:D1E2
B2:D1E2
B2:D1E2             CheckRegionPass:              ; CODE XREF: BankSw_593_B2_5195+13p
B2:D1E2 90 FD 74    mov     DPTR, #XRAM_FD74      ; Número do menu corrente
B2:D1E5 E0          movx    A, @DPTR
B2:D1E6 FF          mov     R7, A
B2:D1E7 64 06       xrl     A, #6                 ; Página de Preferências
B2:D1E9 70 35       jnz     B2_D220
B2:D1EB 90 FC B6    mov     DPTR, #XRAM_FCB6
B2:D1EE E0          movx    A, @DPTR
B2:D1EF FE          mov     R6, A
B2:D1F0 54 0F       anl     A, #0xF
B2:D1F2 FD          mov     R5, A
B2:D1F3 64 0F       xrl     A, #0xF
B2:D1F5 60 29       jz      B2_D220
B2:D1F7 ED          mov     A, R5
B2:D1F8 C3          clr     C
B2:D1F9 94 04       subb    A, #4                 ; Número de dígitos da senha
B2:D1FB 50 1C       jnc     B2_D219
B2:D1FD ED          mov     A, R5
B2:D1FE 90 44 F0    mov     DPTR, #RegionPass
B2:D201 93          movc    A, @A+DPTR
B2:D202 FD          mov     R5, A
B2:D203 90 FB 00    mov     DPTR, #XRAM_FB00      ; Buffer_Remoto
B2:D206 E0          movx    A, @DPTR
B2:D207 6D          xrl     A, R5
B2:D208 70 0F       jnz     B2_D219
B2:D20A EE          mov     A, R6
B2:D20B 54 F0       anl     A, #0xF0
B2:D20D FD          mov     R5, A
B2:D20E EE          mov     A, R6
B2:D20F 04          inc     A
B2:D210 54 0F       anl     A, #0xF
B2:D212 4D          orl     A, R5
B2:D213 90 FC B6    mov     DPTR, #XRAM_FCB6
B2:D216 F0          movx    @DPTR, A
B2:D217 80 07       sjmp    B2_D220
B2:D219             ; ---------------------------------------------------------------------------
B2:D219
B2:D219             B2_D219:                      ; CODE XREF: CheckRegionPass+19j
B2:D219                                           ; CheckRegionPass+26j
B2:D219 EE          mov     A, R6
B2:D21A 54 F0       anl     A, #0xF0
B2:D21C 90 FC B6    mov     DPTR, #XRAM_FCB6
B2:D21F F0          movx    @DPTR, A
B2:D220
B2:D220             B2_D220:                      ; CODE XREF: CheckRegionPass+7j
B2:D220                                           ; CheckRegionPass+13j ...
B2:D220 EF          mov     A, R7
B2:D221 64 06       xrl     A, #6
B2:D223 70 3D       jnz     B2_D262
B2:D225 90 FC B6    mov     DPTR, #XRAM_FCB6
B2:D228 E0          movx    A, @DPTR
B2:D229 54 0F       anl     A, #0xF
B2:D22B 64 04       xrl     A, #4
B2:D22D 70 33       jnz     B2_D262
B2:D22F FD          mov     R5, A
B2:D230 7F 0A       mov     R7, #0xA
B2:D232 12 1B 82    lcall   B2_BS_91_B5_E422
B2:D235 90 FD 73    mov     DPTR, #XRAM_FD73
B2:D238 74 01       mov     A, #1
B2:D23A F0          movx    @DPTR, A
B2:D23B 90 FC B6    mov     DPTR, #XRAM_FCB6
B2:D23E E0          movx    A, @DPTR
B2:D23F 44 0F       orl     A, #0xF
B2:D241 F0          movx    @DPTR, A
B2:D242 90 FD 69    mov     DPTR, #XRAM_FD69
B2:D245 74 0B       mov     A, #0xB
B2:D247 F0          movx    @DPTR, A
B2:D248 90 FC C8    mov     DPTR, #XRAM_FCC8
B2:D24B E0          movx    A, @DPTR
B2:D24C 54 80       anl     A, #0x80
B2:D24E 44 04       orl     A, #4
B2:D250 F0          movx    @DPTR, A
B2:D251 90 FD 74    mov     DPTR, #XRAM_FD74      ; Número do menu corrente
B2:D254 74 1A       mov     A, #0x1A              ; Número do menu a exibir (Excolha de Região)
B2:D256 F0          movx    @DPTR, A
B2:D257 7F 01       mov     R7, #1
B2:D259 12 E6 DC    lcall   B2_E6DC
B2:D25C 90 FD 7B    mov     DPTR, #XRAM_FD7B
B2:D25F 74 06       mov     A, #6
B2:D261 F0          movx    @DPTR, A
B2:D262
B2:D262             B2_D262:                      ; CODE XREF: CheckRegionPass+41j
B2:D262                                           ; CheckRegionPass+4Bj
B2:D262 22          ret
B2:D262             ; End of function CheckRegionPass



Daqui, o procedimento para achar a senha é o mesmo. E temos:


B2:44F0 08          RegionPass:.byte    8         ; DATA XREF: CheckRegionPass+1Co
B2:44F1 03          .byte    3
B2:44F2 04          .byte    4
B2:44F3 03          .byte    3

B2:44F4 09          VersionPass:.byte    9        ; DATA XREF: CheckVersionPass+1Bo
B2:44F5 05          .byte    5
B2:44F6 09          .byte    9
B2:44F7 06          .byte    6
B2:44F8 01          .byte    1
B2:44F9 02          .byte    2
B2:44FA 03          .byte    3
B2:44FB 04          .byte    4
B2:44FC 0E          .byte  0xE
B2:44FD 0E          .byte  0xE
B2:44FE 0E          .byte  0xE
B2:44FF 0F          .byte  0xF


A senha é 8343

Aqui você também pode ver que as duas senhas ficam bem próximas. Foi a mesma coisa em todos os firmwares que eu verifiquei. Se você encontrar uma, basta olhar nas proximidades para encontrar a outra.


Notas:

1) Apesar do Lenoxx DV-406 ter uma rotina de escolha de região, ela é orfã (nenhuma rotina a chama). Mesmo sabendo o procedimento você não vai conseguir entrar na tela de escolha. Para isso será necessário uma correção no firmware.

2) Para o Philips PET 725 as strings são:

Versão
90 ? ? E0 64 ? 70 ? 90 ? ? E0 54 0F FF 64 0F 60 ? EF C3 94 ? 50 ? EF 90 ? ? 93 FF 90 FB 00

Região
90 ? ? E0 FC 64 ? 70 ? 90 ? ? E0 54 0F FE 64 0F 60 ? EE C3 94 ? 50 ? EE 90 ? ? 93 FE 90 FB 00

3) Você não precisa do IDA. Se você souber usar qualquer editor hexadecimal que faça buscas de strings hexa você pode localizar as senhas adaptando as strings que vou fornecer para a sintaxe do editor. No XVI32, por exemplo, basta susbstituir todos os "?" das strings por "2E" para fazer a busca.
« Última modificação: Fevereiro 09, 2010, 10:17:20 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

Se o que você escreve não merece sua atenção, vai merecer a atenção de quem?!

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #95 Online: Julho 30, 2007, 04:05:30 pm »
Exhibir caracteres acentuados é uma das novas características do meu novo firmware (jmaraujo 1.2). Básicamente o que voçê tem que fazer é adicionar nos ArmCodes uma rotina (Unicode to CP) para converter os caracteres 250-255 nos caracteres 0-5. (É preciso modificar as fontes, também)

No grupo MT13x9 o Mabreaker explicou que por limitação técnica (agora não me lembro bem a explicação que ele deu), o firmware somente lé as fontes até o caracter 250.

Se me der um par de horas (ainda não fui dormir  :(), mas tarde eu posto aquí como foi que eu fiz.

Igualmente, se tiver um pouco de pressa, a explicação está postada no grupo MT13x9 (busque Unicode to CP125x) e no documento "Patching... from A to Z" do Borusss.

Saudações!

PS: Para Arm_GetChar eu já expliquei no post anterior (busque a seqüencia "D3 10 AF 01 C3 C0 D0 8E ? 8F ? 90 F8 60"). Para Arm_PutChar, um método simples e alternativo e buscar a seqüencia "ED F0 D0 D0 92 AF 22" no banco 0. O principio de essa função e Arm_PutChar.
Depois com os endereços certos é so buscar os bank jumps.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #96 Online: Julho 30, 2007, 04:47:30 pm »
Menu Handler

A partir da identificação de qualquer das rotinas CheckVersionPass ou CheckRegionPass, basta procurar quem as chama para encontrar uma rotina muito interessante que vou chamar de MenuHandler

B2:5195             ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B2:5195
B2:5195
B2:5195             MenuHandler:                  ; DATA XREF: B0:B0_BS_593_B2_5195o
B2:5195                                           ; B1:B1_BS_593_B2_5195o ...
B2:5195 78 7E       mov     R0, #0x7E ; '~'
B2:5197 7C FB       mov     R4, #0xFB ; '¹'
B2:5199 7D 01       mov     R5, #1
B2:519B 7B FF       mov     R3, #0xFF
B2:519D 7A 45       mov     R2, #0x45 ; 'E'
B2:519F 79 0E       mov     R1, #0xE
B2:51A1 7E 00       mov     R6, #0
B2:51A3 7F 02       mov     R7, #2
B2:51A5 12 06 22    lcall   B2_?C?COPY
B2:51A8 12 D1 E2    lcall   CheckRegionPass
B2:51AB 12 D8 49    lcall   CheckVersionPass

B2:51AE 90 FB 00    mov     DPTR, #XRAM_FB00      ; Buffer_Remoto
B2:51B1 E0          movx    A, @DPTR
B2:51B2 B4 FF 02    cjne    A, #0xFF, B2_51B7     ; Se o buffer do remoto tiver um comando válido, salta para 51B7
B2:51B5 D3          setb    C
B2:51B6 22          ret
B2:51B7             ; ---------------------------------------------------------------------------
B2:51B7



Como você pode ver, as duas rotinas de checagem de senha são chamadas a partir daqui. Eu não testei, mas acho que não seria difícil incluir nossa própria rotina de checagem de senha em algum lugar e inserir uma chamada para ela aqui (para dar acesso a outras opções criadas por nós). Esta rotina é chamada quando você está no SETUP toda vez que uma tecla qualquer do controle remoto é apertada, por isso podem aparecer outras utilidades.

Para achar MenuHandler sem ter achado as outras rotinas antes, procure por:

78 ? 7C ? 7D ? 7B ? 7A ? 79 ? 7E ? 7F ? 12 ? ? 12

Esta seqüência aparece várias vezes no firmware, mas o MenuHandler é a única rotina onde você pode encontrar a uma curta distância:

90 FB 00    mov     DPTR, #XRAM_FB00


« Última modificação: Agosto 04, 2007, 03:22:30 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

Se o que você escreve não merece sua atenção, vai merecer a atenção de quem?!

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #97 Online: Julho 30, 2007, 04:52:48 pm »
Rotina de conversão Unicode to CP125x

Eneris: Busque os seguintes dois pontos nos ArmCodes:

Lugar 1:
ROM:00025132             loc_25132
ROM:00025132 02 98                       LDR     R0, [SP,#0x30+var_28]
ROM:00025134 01 99                       LDR     R1, [SP,#0x30+var_2C]
ROM:00025136 80 19                       ADD     R0, R0, R6
ROM:00025138 41 18                       ADD     R1, R0, R1
ROM:0002513A 10 39                       SUB     R1, #0x10
ROM:0002513C C9 7B                       LDRB    R1, [R1,#0xF]


Lugar 2:
ROM:00025166             loc_25166
ROM:00025166 A8 19                       ADD     R0, R5, R6
ROM:00025168 01 99                       LDR     R1, [SP,#0x30+var_2C]
ROM:0002516A 05 06                       LSL     R5, R0, #0x18
ROM:0002516C 41 18                       ADD     R1, R0, R1
ROM:0002516E 10 39                       SUB     R1, #0x10
ROM:00025170 C9 7B                       LDRB    R1, [R1,#0xF]


Modificações:

Lugar a modificar 1:
ROM:00025132             loc_25132
ROM:00025132 02 98                       LDR     R0, [SP,#0x30+var_28]
ROM:00025134 01 99                       LDR     R1, [SP,#0x30+var_2C]
ROM:00025136 80 19                       ADD     R0, R0, R6
ROM:00025138 41 18                       ADD     R1, R0, R1
ROM:0002513A 50 F0 F9 F8                 BL      CP_conversion_routine


Lugar a modificar 2:
ROM:00025166             loc_25166
ROM:00025166 A8 19                       ADD     R0, R5, R6
ROM:00025168 01 99                       LDR     R1, [SP,#0x30+var_2C]
ROM:0002516A 05 06                       LSL     R5, R0, #0x18
ROM:0002516C 41 18                       ADD     R1, R0, R1
ROM:0002516E 50 F0 DF F8                 BL      CP_conversion_routine



Nova rotina: (exemplo com o firmware jmaraujo 1.x - RISC do Philips DVP5140)

ROM:00075330             CP_conversion_routine
ROM:00075330 10 39                       SUB     R1, #0x10
ROM:00075332 02 B4                       PUSH    {R1}
ROM:00075334 89 7B                       LDRB    R1, [R1,#0xE]
ROM:00075336 01 29                       CMP     R1, #1
ROM:00075338 02 BC                       POP     {R1}
ROM:0007533A C9 7B                       LDRB    R1, [R1,#0xF]
ROM:0007533C 03 D1                       BNE     loc_75346
ROM:0007533E 01 B4                       PUSH    {R0}
ROM:00075340 08 48                       LDR     R0, =unk_75368
ROM:00075342 41 5C                       LDRB    R1, [R0,R1]
ROM:00075344 01 BC                       POP     {R0}
ROM:00075346
ROM:00075346             loc_75346
ROM:00075346 C0 46                       NOP
ROM:00075348 F9 29                       CMP     R1, #0xF9 ; '¨'
ROM:0007534A 00 D9                       BLS     locret_7534E
ROM:0007534C FA 39                       SUB     R1, #0xFA ; '·'
ROM:0007534E
ROM:0007534E             locret_7534E
ROM:0007534E 70 47                       BX      LR


A nova rotina pode ser escrita por cima das mensagems de erros de C+, ou como no meu caso, após ampliar o RISC.

Para calcular os saltos BL, use o utilitario BCalc do grupo MT13x9.
« Última modificação: Julho 30, 2007, 04:54:36 pm por jmaraujo »

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #98 Online: Julho 30, 2007, 04:57:59 pm »
A nova rotina pode ser escrita por cima das mensagems de erros de C+, ou como no meu caso, após ampliar o RISC.
Acho que não ficou bem explicado o que eu quis dizer...

No final dos ArmCodes geralmente (ou sempre?) não há espaço livre como nos bancos do 8032, por tanto para adicionar novas rotinas voçe pode:

1) Ou bem sobreescrever a rotina de erros C+ (busque cadeias de texto com o IDA, como "Invalid Operation", "Divide By Zero", "Overflow", "Underflow", "Inexact Result", "Heap memory corrupted", "Unknown signal", etcétera...)

ou

2) Ampliar o espaço dos ArmCodes ("resize") para criar espaço livre no final.
« Última modificação: Julho 30, 2007, 05:01:40 pm por jmaraujo »

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #99 Online: Julho 30, 2007, 05:22:13 pm »
Escolha da cor
 
B1:FF40 7F 71       mov     R7, #0x71 ; 'q'       ; Endereço 0x71 da eeprom
B1:FF42 7E 00       mov     R6, #0
B1:FF44 12 19 E4    lcall   Pref_Getchar_B1BS
B1:FF47 EF          mov     A, R7
B1:FF48 FD          mov     R5, A
B1:FF49 90 FC 07    mov     DPTR, #XRAM_FC07
B1:FF4C 74 03       mov     A, #3
B1:FF4E F0          movx    @DPTR, A
B1:FF4F A3          inc     DPTR
B1:FF50 ED          mov     A, R5
B1:FF51 F0          movx    @DPTR, A
B1:FF52 E4          clr     A
B1:FF53 FB          mov     R3, A
B1:FF54 FD          mov     R5, A
B1:FF55 7F 13       mov     R7, #0x13
B1:FF57 22          ret
Jefferson, ¿podería me dizer cómo ficaría o patch este no DVP5100?  :-[

FORUM.RYAN.COM.BR

Re: Firmware: log de descobertas
« Responder #99 Online: Julho 30, 2007, 05:22:13 pm »