Author Topic: Firmware MT13x9: Log de Descobertas  (Read 60684 times)

0 Members and 1 Guest are viewing this topic.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Firmware MT13x9: Log de Descobertas
« on: July 06, 2007, 05:08:27 AM »
Para não entulhar meu blog com informação bruta e que de qualquer forma a maioria dos meus leitores não vai entender, mas que pode interessar muito quem modifica firmwares Mediatek, eu vou de vez em quando colocar neste tópico informações sobre trechos de código encontrados nos firmwares que estou estudando e o resultado de outras experiências.

Para entender as listagens você precisa ter alguma noção de assembly 8051. Consulte este site.

Todas as listagens são geradas pelo disassembler belga/russo IDA Pro (geralmente referido nos textos apenas como "IDA"). Para apenas aplicar os conceitos que vou explicar aqui você só precisa de um editor hexadecimal, mas se você deseja avançar a ponto de criar seus próprios hacks, precisa conseguir uma cópia funcional desse programa, que em conjunto com os scripts apropriados deixam o código bem mais fácil de acompanhar.

Para quem tem noções de assembly, lógico.

Eu não sou programador Assembly. Meus hacks estão saindo por pura teimosia, com a ajuda do fato de que eu tenho algum conhecimento em eletrônica e programação.

Eu quero registrar aqui meu respeito e agradecimento aos mestres do grupo MT13x9 . Sem as informações publicadas no grupo, os documentos que eles escreveram e os programas que eles criaram, eu jamais teria chegado ao ponto de fazer meus próprios hacks, como estou fazendo hoje.

Respect.:clapping:

Outra importante referência é o grupo MEDIATEK1389, do Cachirulo, que parece redundante mas contém muita informação que não existe no MT13x9 ou que foi porcamente (Babelfish) traduzida lá (Cachirulo é espanhol). Vários documentos do MT13x9 difíceis de decifrar pelo inglês ruim podem ser encontrados no original espanhol apenas no grupo de Cachirulo.

Se você tem experiência com C/C++, o grupo MT13x9 tem cópias reais de códigos-fonte genéricos da Mediatek  encontrados em um fórum chinês, que embora não sejam suficientes para se compilar um firmware completo podem ser usados por alguém que entenda a linguagem para assimilar como a coisa funciona sem precisar entender o resultado em Assembly.

Como abrir o firmware no IDA:

    * Instale o IDA. Não é necessário fazer nenhuma configuração especial;
    * Extraia do firmware o bloco 8032 inteiro com o MtkRemaker;
    * Abra com o IDA;
    * Processor Type: 8051;
    * YES;
    * ROM Size: 0x00080000;
    * Device Name: C517;
    * Rode os scripts MT1389_8032_FULL.idc e MT1389_MISC.idc (um de cada vez e nesta ordem) disponíveis no grupo MT13x9. Se der qualquer erro, você fez algo errado.
    * Espere alguns minutos enquanto o script formata o código.


Como regra geral (e excetuando menção em contrário nos posts), não espere que as informações mostradas aqui se apliquem a firmwares Pioneer e LG sem grandes adaptações (se é que se aplicarão). Philips, LG e Pioneer personalizam bastante seus aparelhos, mas LG e Pioneer fazem as personalizações mais drásticas, que se desviam muito do firmware padrão MT13x9


Outros textos do meu site relacionados:


Alguns softwares úteis:

  • Ultra Compare - Trial (30 a 45 dias). O melhor sofware que conheço para comparação de arquivos binários. Mostra os arquivos lado a lado destacando os bytes diferentes;
  • Treediff - Shareware, mas não expira.  Compara de uma só vez, rapidamente, enormes estruturas de arquivos, mostrando quais são diferentes ou foram movidos;
  • MagicIso - Shareware, mas não expira. Usado para criar e editar arquivos ISO nos poucos casos em que isso é realmente necessário. A versão não registrada tem limitações mas estas não afetam o trabalho com arquivos ISO do tamanho usado em firmwares.
  • XVI32 - Freeware. Editor hexadecimal com suporte a busca por joker/wildcard;
  • Hex Workshop - Trial. Tem muitos pontos positivos e recursos que o XVI32 não tem, mas é instável no meu PC e muitas vezes não funciona exatamente como esperado. Só costumo usar nos casos em análises mais complicadas, basicamente por sua capacidade de destacar trechos idênticos de código;
« Last Edit: March 11, 2008, 02:12:30 PM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Rotina Sub_Style do DVP5965K/93 (DVP5965K/55)
« Reply #1 on: July 06, 2007, 05:10:28 AM »
Rotina Sub_Style do DVP5965K/93 (DVP5965K/55)

Primária

É esta rotina a chave para se ter fontes e cores de fontes selecionáveis por menus.

B1:D2B6             SUB_Style:                    ; CODE XREF: B1_8883+5Cp
B1:D2B6 EF          mov     A, R7
B1:D2B7 24 FE       add     A, #0xFE ; '¦'
B1:D2B9 60 5B       jz      B1_D316
B1:D2BB 14          dec     A
B1:D2BC 60 58       jz      B1_D316
B1:D2BE 14          dec     A
B1:D2BF 60 61       jz      B1_D322
B1:D2C1 24 03       add     A, #3
B1:D2C3 70 60       jnz     B1_D325
B1:D2C5 E4          clr     A                     ; Para tornar a fonte do browser independente da fonte de legendas e/ou fazer fontes selecionáveis,
B1:D2C5                                           ; é preciso mexer aqui. No caso, a fonte da legenda é a zero (clr A)
B1:D2C6 FF          mov     R7, A
B1:D2C7 12 1E D8    lcall   B1_BS_240_B3_E9FE
B1:D2CA D2 75       setb    RAM_2E.5
B1:D2CC 7F 12       mov     R7, #0x12
B1:D2CE 12 1D 58    lcall   B1_BS_176_B3_4CF4
B1:D2D1 7F 12       mov     R7, #0x12
B1:D2D3 12 1D 5E    lcall   B1_BS_177_B3_72CE
B1:D2D6 E4          clr     A                     ; Aqui a cor de contorno da legenda é definida como transparente (zero).
B1:D2D6                                           ; É preciso mudar isso, principalmente se você desligar o background
B1:D2D7 90 FC 1F    mov     DPTR, #XRAM_FC1F      ; OSD_Colors
B1:D2DA F0          movx    @DPTR, A
B1:D2DB A3          inc     DPTR
B1:D2DC 74 02       mov     A, #2                 ; Cor do preenchimento
B1:D2DE F0          movx    @DPTR, A
B1:D2DF 7B 03       mov     R3, #3                ; Define a cor de background. Coloque zero para livrar-se dela
B1:D2E1 E4          clr     A
B1:D2E2 FD          mov     R5, A
B1:D2E3 7F 12       mov     R7, #0x12
B1:D2E5 12 1D 64    lcall   OSD_TextColor_B1_BS_178_B3_C399
B1:D2E8 E4          clr     A
B1:D2E9 FD          mov     R5, A
B1:D2EA 7F 12       mov     R7, #0x12
B1:D2EC 12 1F 3E    lcall   B1_BS_257_B3_E4D7
B1:D2EF 7F 12       mov     R7, #0x12
B1:D2F1 12 1D 6A    lcall   B1_BS_179_B3_58BA
B1:D2F4 7F 12       mov     R7, #0x12
B1:D2F6 12 1D 70    lcall   B1_BS_180_B3_E9AF
B1:D2F9 12 E0 FC    lcall   B1_E0FC
B1:D2FC 7F 19       mov     R7, #0x19
B1:D2FE 7E 00       mov     R6, #0
B1:D300 12 1B BA    lcall   B1_BS_107_B3_B645
B1:D303 74 FF       mov     A, #0xFF
B1:D305 90 FD 77    mov     DPTR, #XRAM_FD77
B1:D308 F0          movx    @DPTR, A
B1:D309 A3          inc     DPTR
B1:D30A F0          movx    @DPTR, A
B1:D30B 90 FD 7E    mov     DPTR, #XRAM_FD7E
B1:D30E F0          movx    @DPTR, A
B1:D30F A3          inc     DPTR
B1:D310 F0          movx    @DPTR, A
B1:D311 C2 74       clr     RAM_2E.4
B1:D313 02 1D 1C    ljmp    B1_BS_166_B4_ABBB
B1:D316             ; ---------------------------------------------------------------------------
B1:D316
B1:D316             B1_D316:                      ; CODE XREF: SUB_Style+3j
B1:D316                                           ; SUB_Style+6j
B1:D316 7F 05       mov     R7, #5
B1:D318 12 1E 36    lcall   B1_BS_213_B6_6CEB
B1:D31B 50 08       jnc     B1_D325
B1:D31D 7F 01       mov     R7, #1
B1:D31F 02 1E 54    ljmp    B1_BS_218_B4_2D0C
B1:D322             ; ---------------------------------------------------------------------------
B1:D322
B1:D322             B1_D322:                      ; CODE XREF: SUB_Style+9j
B1:D322 12 E0 FC    lcall   B1_E0FC
B1:D325
B1:D325             B1_D325:                      ; CODE XREF: SUB_Style+Dj
B1:D325                                           ; SUB_Style+65j
B1:D325 22          ret
B1:D325             ; End of function SUB_Style


Provavelmente esta é a Sub_Style secundária
Eu não tenho como testar porque não tenho um DVP5965. Acredito que é esta por causa da semelhança com a do DVP5960

B3:5B87             Sub_Style_Sec:                ; DATA XREF: BankSw_179_B3_58BA+6Bo
B3:5B87 90 FC 1A    mov     DPTR, #XRAM_FC1A
B3:5B8A E0          movx    A, @DPTR
B3:5B8B FF          mov     R7, A
B3:5B8C D2 75       setb    RAM_2E.5
B3:5B8E 12 4C F4    lcall   BankSw_176_B3_4CF4
B3:5B91 90 FC 1A    mov     DPTR, #XRAM_FC1A
B3:5B94 E0          movx    A, @DPTR
B3:5B95 FF          mov     R7, A
B3:5B96 12 72 CE    lcall   BankSw_177_B3_72CE
B3:5B99 90 FC 1A    mov     DPTR, #XRAM_FC1A
B3:5B9C E0          movx    A, @DPTR
B3:5B9D FF          mov     R7, A
B3:5B9E E4          clr     A
B3:5B9F 90 FC 1F    mov     DPTR, #XRAM_FC1F      ; OSD_Colors
B3:5BA2 F0          movx    @DPTR, A
B3:5BA3 A3          inc     DPTR
B3:5BA4 74 02       mov     A, #2
B3:5BA6 F0          movx    @DPTR, A
B3:5BA7 7B 03       mov     R3, #3                ; Cor do background
B3:5BA9 E4          clr     A
B3:5BAA FD          mov     R5, A
B3:5BAB 12 C3 99    lcall   OSD_textColor_BS      ; OSD_TExtcolor
B3:5BAE 90 FC 1A    mov     DPTR, #XRAM_FC1A
B3:5BB1 E0          movx    A, @DPTR
B3:5BB2 FF          mov     R7, A
B3:5BB3 E4          clr     A
B3:5BB4 FD          mov     R5, A
B3:5BB5 02 E4 D7    ljmp    BankSw_257_B3_E4D7
« Last Edit: July 19, 2007, 01:17:32 PM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Sub_Style do Lenoxx DV-406
« Reply #2 on: July 06, 2007, 05:21:49 AM »
Sub_Style do Lenoxx DV-406

B1:A49A             ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B1:A49A
B1:A49A
B1:A49A             Sub_Style_B1_A49A:            ; CODE XREF: B1_E1B5+4Ap
B1:A49A EF          mov     A, R7
B1:A49B 24 FE       add     A, #0xFE ; '¦'
B1:A49D 70 03       jnz     B1_A4A2
B1:A49F 02 A5 35    ljmp    B1_A535
B1:A4A2             ; ---------------------------------------------------------------------------
B1:A4A2
B1:A4A2             B1_A4A2:                      ; CODE XREF: Sub_Style_B1_A49A+3j
B1:A4A2 14          dec     A
B1:A4A3 70 03       jnz     B1_A4A8
B1:A4A5 02 A5 35    ljmp    B1_A535
B1:A4A8             ; ---------------------------------------------------------------------------
B1:A4A8
B1:A4A8             B1_A4A8:                      ; CODE XREF: Sub_Style_B1_A49A+9j
B1:A4A8 24 02       add     A, #2
B1:A4AA 60 03       jz      B1_A4AF
B1:A4AC 02 A5 41    ljmp    B1_A541
B1:A4AF             ; ---------------------------------------------------------------------------
B1:A4AF
B1:A4AF             B1_A4AF:                      ; CODE XREF: Sub_Style_B1_A49A+10j
B1:A4AF 7F C9       mov     R7, #0xC9 ; '+'
B1:A4B1 7E 00       mov     R6, #0
B1:A4B3 12 04 63    lcall   B1_BS_63_B0_EA45
B1:A4B6 EF          mov     A, R7
B1:A4B7 60 3F       jz      B1_A4F8
B1:A4B9 90 FC 25    mov     DPTR, #XRAM_FC25
B1:A4BC E0          movx    A, @DPTR
B1:A4BD 70 06       jnz     B1_A4C5
B1:A4BF FF          mov     R7, A
B1:A4C0 12 06 F7    lcall   Set_Font_B1_BS
B1:A4C3 80 05       sjmp    B1_A4CA
B1:A4C5             ; ---------------------------------------------------------------------------
B1:A4C5
B1:A4C5             B1_A4C5:                      ; CODE XREF: Sub_Style_B1_A49A+23j
B1:A4C5 7F 06       mov     R7, #6                ; ;Número da fonte da legenda DivX
B1:A4C7 12 06 F7    lcall   Set_Font_B1_BS
B1:A4CA
B1:A4CA             B1_A4CA:                      ; CODE XREF: Sub_Style_B1_A49A+29j
B1:A4CA D2 44       setb    RAM_28.4
B1:A4CC 7F 12       mov     R7, #0x12
B1:A4CE 12 04 DB    lcall   B1_BS_83_B3_4717
B1:A4D1 7F 12       mov     R7, #0x12
B1:A4D3 12 04 E1    lcall   B1_BS_84_B3_70DD
B1:A4D6 90 FB DC    mov     DPTR, #XRAM_FBDC
B1:A4D9 74 03       mov     A, #3
B1:A4DB F0          movx    @DPTR, A
B1:A4DC A3          inc     DPTR
B1:A4DD 14          dec     A
B1:A4DE F0          movx    @DPTR, A
B1:A4DF E4          clr     A
B1:A4E0 FB          mov     R3, A
B1:A4E1 FD          mov     R5, A
B1:A4E2 7F 12       mov     R7, #0x12
B1:A4E4 12 04 AB    lcall   OSD_TextColor_B1_BS
B1:A4E7 E4          clr     A
B1:A4E8 FD          mov     R5, A
B1:A4E9 7F 12       mov     R7, #0x12
B1:A4EB 12 07 45    lcall   B1_BS_186_B3_EDE8
B1:A4EE 7F 12       mov     R7, #0x12
B1:A4F0 12 04 ED    lcall   B1_BS_86_B3_5810
B1:A4F3 7F 12       mov     R7, #0x12
B1:A4F5 12 04 F3    lcall   B1_BS_87_B3_F0C0
B1:A4F8
B1:A4F8             B1_A4F8:                      ; CODE XREF: Sub_Style_B1_A49A+1Dj
B1:A4F8 74 FF       mov     A, #0xFF
B1:A4FA 90 FC E8    mov     DPTR, #XRAM_FCE8
B1:A4FD F0          movx    @DPTR, A
B1:A4FE A3          inc     DPTR
B1:A4FF F0          movx    @DPTR, A
B1:A500 90 FC ED    mov     DPTR, #XRAM_FCED
B1:A503 F0          movx    @DPTR, A
B1:A504 A3          inc     DPTR
B1:A505 F0          movx    @DPTR, A
B1:A506 7D 6B       mov     R5, #0x6B ; 'k'
B1:A508 7F CB       mov     R7, #0xCB ; '-'
B1:A50A 7E 00       mov     R6, #0
B1:A50C 12 04 5D    lcall   B1_BS_62_B0_ED81
B1:A50F 7D 6F       mov     R5, #0x6F ; 'o'
B1:A511 7F CC       mov     R7, #0xCC ; '¦'
B1:A513 7E 00       mov     R6, #0
B1:A515 12 04 5D    lcall   B1_BS_62_B0_ED81
B1:A518 E4          clr     A
B1:A519 90 FB 48    mov     DPTR, #XRAM_FB48
B1:A51C F0          movx    @DPTR, A
B1:A51D
B1:A51D             B1_A51D:                      ; CODE XREF: Sub_Style_B1_A49A+94j
B1:A51D 7F CB       mov     R7, #0xCB ; '-'
B1:A51F 7E 00       mov     R6, #0
B1:A521 12 04 63    lcall   B1_BS_63_B0_EA45
B1:A524 90 FB 48    mov     DPTR, #XRAM_FB48
B1:A527 E0          movx    A, @DPTR
B1:A528 04          inc     A
B1:A529 F0          movx    @DPTR, A
B1:A52A E0          movx    A, @DPTR
B1:A52B C3          clr     C
B1:A52C 94 03       subb    A, #3
B1:A52E 40 ED       jc      B1_A51D
B1:A530 C2 43       clr     RAM_28.3
B1:A532 02 A8 6E    ljmp    B1_A86E
B1:A535             ; ---------------------------------------------------------------------------
B1:A535
B1:A535             B1_A535:                      ; CODE XREF: Sub_Style_B1_A49A+5j
B1:A535                                           ; Sub_Style_B1_A49A+Bj
B1:A535 7F 05       mov     R7, #5
B1:A537 12 F5 50    lcall   B1_F550
B1:A53A 50 05       jnc     B1_A541
B1:A53C 7F 01       mov     R7, #1
B1:A53E 12 C9 C6    lcall   B1_C9C6
B1:A541
B1:A541             B1_A541:                      ; CODE XREF: Sub_Style_B1_A49A+12j
B1:A541                                           ; Sub_Style_B1_A49A+A0j
B1:A541 22          ret
B1:A541             ; End of function Sub_Style_B1_A49A
B1:A541

« Last Edit: July 19, 2007, 01:26:44 PM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Sub_Style do DVP5960/37
« Reply #3 on: July 06, 2007, 05:35:54 AM »
Sub_Style do DVP5960/37

Primária
B1:D2BC             ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B1:D2BC
B1:D2BC
B1:D2BC             Sub_Style:                    ; CODE XREF: B1_8883+5Cp
B1:D2BC EF          mov     A, R7
B1:D2BD 24 FE       add     A, #0xFE ; '¦'
B1:D2BF 60 5B       jz      B1_D31C
B1:D2C1 14          dec     A
B1:D2C2 60 58       jz      B1_D31C
B1:D2C4 14          dec     A
B1:D2C5 60 61       jz      B1_D328
B1:D2C7 24 03       add     A, #3
B1:D2C9 70 60       jnz     B1_D32B
B1:D2CB E4          clr     A                     ; Número da fonte = 0
B1:D2CC FF          mov     R7, A
B1:D2CD 12 1E EA    lcall   OSD_SetFont_B1_BS
B1:D2D0 D2 75       setb    RAM_2E.5
B1:D2D2 7F 12       mov     R7, #0x12
B1:D2D4 12 1D 6A    lcall   B1_BS_179_B3_4CF4
B1:D2D7 7F 12       mov     R7, #0x12
B1:D2D9 12 1D 70    lcall   B1_BS_180_B3_72CE
B1:D2DC E4          clr     A
B1:D2DD 90 FC 1E    mov     DPTR, #XRAM_FC1E      ; OSD_colors
B1:D2E0 F0          movx    @DPTR, A
B1:D2E1 A3          inc     DPTR
B1:D2E2 74 02       mov     A, #2
B1:D2E4 F0          movx    @DPTR, A
B1:D2E5 7B 03       mov     R3, #3
B1:D2E7 E4          clr     A
B1:D2E8 FD          mov     R5, A
B1:D2E9 7F 12       mov     R7, #0x12
B1:D2EB 12 1D 76    lcall   OSD_TextColor_B1_BS
B1:D2EE E4          clr     A
B1:D2EF FD          mov     R5, A
B1:D2F0 7F 12       mov     R7, #0x12
B1:D2F2 12 1F 50    lcall   B1_BS_260_B3_E41D
B1:D2F5 7F 12       mov     R7, #0x12
B1:D2F7 12 1D 7C    lcall   B1_BS_182_B3_58BA
B1:D2FA 7F 12       mov     R7, #0x12
B1:D2FC 12 1D 82    lcall   B1_BS_183_B3_E8F5
B1:D2FF 12 E0 A4    lcall   B1_E0A4
B1:D302 7F 19       mov     R7, #0x19
B1:D304 7E 00       mov     R6, #0
B1:D306 12 1B CC    lcall   B1_BS_110_B3_B6D8
B1:D309 74 FF       mov     A, #0xFF
B1:D30B 90 FD 74    mov     DPTR, #XRAM_FD74
B1:D30E F0          movx    @DPTR, A
B1:D30F A3          inc     DPTR
B1:D310 F0          movx    @DPTR, A
B1:D311 90 FD 7B    mov     DPTR, #XRAM_FD7B
B1:D314 F0          movx    @DPTR, A
B1:D315 A3          inc     DPTR
B1:D316 F0          movx    @DPTR, A
B1:D317 C2 74       clr     RAM_2E.4
B1:D319 02 1D 2E    ljmp    B1_BS_169_B4_AB59
B1:D31C             ; ---------------------------------------------------------------------------
B1:D31C
B1:D31C             B1_D31C:                      ; CODE XREF: Sub_Style+3j
B1:D31C                                           ; Sub_Style+6j
B1:D31C 7F 05       mov     R7, #5
B1:D31E 12 1E 48    lcall   B1_BS_216_B6_6C4E
B1:D321 50 08       jnc     B1_D32B
B1:D323 7F 01       mov     R7, #1
B1:D325 02 1E 66    ljmp    B1_BS_221_B4_A8C0
B1:D328             ; ---------------------------------------------------------------------------
B1:D328
B1:D328             B1_D328:                      ; CODE XREF: Sub_Style+9j
B1:D328 12 E0 A4    lcall   B1_E0A4
B1:D32B
B1:D32B             B1_D32B:                      ; CODE XREF: Sub_Style+Dj
B1:D32B                                           ; Sub_Style+65j
B1:D32B 22          ret
B1:D32B             ; End of function Sub_Style


SECUNDÁRIA (Chamada quando você sai do Setup)



B3:5B87
B3:5B87             Sub_Style_Sec:                ; DATA XREF: BankSw_182_B3_58BA+6Bo
B3:5B87 90 FC 19    mov     DPTR, #XRAM_FC19      ; Sub_style secundária
B3:5B8A E0          movx    A, @DPTR
B3:5B8B FF          mov     R7, A
B3:5B8C D2 75       setb    RAM_2E.5
B3:5B8E 12 4C F4    lcall   BankSw_179_B3_4CF4
B3:5B91 90 FC 19    mov     DPTR, #XRAM_FC19
B3:5B94 E0          movx    A, @DPTR
B3:5B95 FF          mov     R7, A
B3:5B96 12 72 CE    lcall   BankSw_180_B3_72CE
B3:5B99 90 FC 19    mov     DPTR, #XRAM_FC19      ; o número da janela 0x12 foi guardado aqui ao entrar no setup
B3:5B9C E0          movx    A, @DPTR
B3:5B9D FF          mov     R7, A
B3:5B9E E4          clr     A
B3:5B9F 90 FC 1E    mov     DPTR, #XRAM_FC1E      ; OSD_colors
B3:5BA2 F0          movx    @DPTR, A
B3:5BA3 A3          inc     DPTR
B3:5BA4 74 02       mov     A, #2
B3:5BA6 F0          movx    @DPTR, A
B3:5BA7 7B 03       mov     R3, #3                ; A cor do background
B3:5BA9 E4          clr     A
B3:5BAA FD          mov     R5, A
B3:5BAB 12 C3 50    lcall   BankSw_181_B3_C350
B3:5BAE 90 FC 19    mov     DPTR, #XRAM_FC19
B3:5BB1 E0          movx    A, @DPTR
B3:5BB2 FF          mov     R7, A
B3:5BB3 E4          clr     A
B3:5BB4 FD          mov     R5, A
B3:5BB5 02 E4 1D    ljmp    BankSw_260_B3_E41D
« Last Edit: July 19, 2007, 01:40:39 PM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #4 on: July 06, 2007, 06:33:04 AM »
Sub_Style secundária

Este é um nome inventado por mim, porque descobri a existência dessas rotinas na marra, investigando um problema com o DVP-858. Eu não tinha ainda visto nenhuma referência a elas no grupo MT13x9.

Alguns firmwares tem uma segunda rotina sub_style que é chamada quando você sai do setup e também precisa ser modificada, junto com a principal. A existência dessa rotina secundária pode ser vantajosa, porque pode permitir que mudanças na escolha de fontes feitas no setup sejam ativadas imediatamente, sem que seja necessário parar o filme e começar de novo, já que a Sub_Style principal só é executada uma vez, logo ao carregar o filme.

O sintoma da existência de uma sub_style secundária é apenas que qualquer alteração que você faça na principal é revertida quando você entra e sai do setup.

Também tenha em mente que a Sub_Style secundária não faz necessáriamente tudo o que a primária faz. Mas como ela é chamada quando você sai do Setup, você pode alterá-la para chamar um código colocado em outra parte do firmware que faça tudo o que você quer.

Firmwares que sabidamente tem uma Sub_Style secundária:

  • Proview DVP-858
  • Philips DVP5960/37
  • Philips DVP5100K/78
« Last Edit: July 06, 2007, 01:57:48 PM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #5 on: July 06, 2007, 06:53:13 AM »
Philips DVP5960/37

A variável XRAM_FC19 pode conter o número da última janela desenhada

0x0A é a janela do Setup;
0x05 é a janela onde é exibida a mensagem "Press Play Key To Continue" do Resume DivX
« Last Edit: July 06, 2007, 07:25:51 AM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #6 on: July 06, 2007, 08:05:04 AM »
Uma coisa inédita para mim no firmware do DVP5960/37:

Inicialmente, a fonte usada por tudo é a 1, mas depois que você sai do Setup a fonte das legendas passa a ser a 7!

Isso me deu um nó aqui. Um hack que eu estou elaborando não parecia surtir efeito na rotina sub_style secundária, até eu me dar conta de que a fonte estava revertendo para a original!
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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #7 on: July 06, 2007, 08:14:26 AM »
Como fazer com que o firmware Philips use fontes com cores normais.

É sabido que nos firmwares da Philips é preciso fazer uma "gambiarra" com as cores para poder desativar o background.

Eu descobri como fazer com que o firmware aceite fontes "normais".

Substitua:

E4          clr     A
90 xx xx    mov     DPTR, #XRAM_OSD_Colors      ; OSD_colors
F0          movx    @DPTR, A
A3          inc     DPTR
74 02       mov     A, #2
F0          movx    @DPTR, A
7B 03       mov     R3, #3                ; Cor de fundo. Zero para desabilitar o fundo.
E4          clr     A


por:

90 xx xx    mov     DPTR, #XRAM_OSD_Colors      ; OSD_colors
74 03       mov     A, #3
F0          movx    @DPTR, A
A3          inc     DPTR
74 02       mov     A, #2
F0          movx    @DPTR, A
E4          clr     A
FB          mov     R3, A                ; Cor de fundo=zero, desabilita o fundo


Exemplo do DVP5960

Sub_Style primária

B1:D2BC             Sub_Style:                    ; CODE XREF: B1_8883+5Cp
B1:D2BC EF          mov     A, R7
B1:D2BD 24 FE       add     A, #0xFE ; '¦'
B1:D2BF 60 5B       jz      B1_D31C
B1:D2C1 14          dec     A
B1:D2C2 60 58       jz      B1_D31C
B1:D2C4 14          dec     A
B1:D2C5 60 61       jz      B1_D328
B1:D2C7 24 03       add     A, #3
B1:D2C9 70 60       jnz     B1_D32B
B1:D2CB E4          clr     A                     ; Número da fonte = 0
B1:D2CC FF          mov     R7, A
B1:D2CD 12 1E EA    lcall   OSD_SetFont_B1_BS
B1:D2D0 D2 75       setb    RAM_2E.5
B1:D2D2 7F 12       mov     R7, #0x12
B1:D2D4 12 1D 6A    lcall   OSD_Text_Params_ARM_B1BS
B1:D2D7 7F 12       mov     R7, #0x12
B1:D2D9 12 1D 70    lcall   OSD_Text_Params_B1BS
B1:D2DC E4          clr     A
B1:D2DD 90 FC 1E    mov     DPTR, #XRAM_FC1E      ; OSD_colors
B1:D2E0 F0          movx    @DPTR, A
B1:D2E1 A3          inc     DPTR
B1:D2E2 74 02       mov     A, #2
B1:D2E4 F0          movx    @DPTR, A
B1:D2E5 7B 03       mov     R3, #3                ; Cor de fundo. Zero para desabilitar o fundo.
B1:D2E7 E4          clr     A

B1:D2E8 FD          mov     R5, A
B1:D2E9 7F 12       mov     R7, #0x12
B1:D2EB 12 1D 76    lcall   OSD_TextColor_B1_BS


Substitua:
B1:D2DC - E4 90 FC 1E F0 A3 74 02 F0 7B 03 E4 FD 7F 12 12
por:
B1:D2DC - 90 FC 1E 74 03 F0 A3 74 02 F0 E4 FB FD 7F 12 12

Sub_Style secundária

B3:5B87             Sub_Style_Sec:                ; DATA XREF: OSD_Text_Init?+6Bo
B3:5B87 90 FC 19    mov     DPTR, #XRAM_FC19      ; Sub_style secundária
B3:5B8A E0          movx    A, @DPTR
B3:5B8B FF          mov     R7, A
B3:5B8C D2 75       setb    RAM_2E.5
B3:5B8E 12 4C F4    lcall   OSD_Text_Params_ARM
B3:5B91 90 FC 19    mov     DPTR, #XRAM_FC19      ; Número da Janela (OSD_TextInit)?
B3:5B94 E0          movx    A, @DPTR
B3:5B95 FF          mov     R7, A
B3:5B96 12 72 CE    lcall   OSD_Text_Params
B3:5B99 90 FC 19    mov     DPTR, #XRAM_FC19      ; Número da Janela (OSD_TextInit)?
B3:5B9C E0          movx    A, @DPTR
B3:5B9D FF          mov     R7, A
B3:5B9E E4          clr     A
B3:5B9F 90 FC 1E    mov     DPTR, #XRAM_FC1E      ; OSD_colors
B3:5BA2 F0          movx    @DPTR, A
B3:5BA3 A3          inc     DPTR
B3:5BA4 74 02       mov     A, #2
B3:5BA6 F0          movx    @DPTR, A
B3:5BA7 7B 03       mov     R3, #3                ; A cor do background
B3:5BA9 E4          clr     A

B3:5BAA FD          mov     R5, A
B3:5BAB 12 C3 50    lcall   OSD_Text_Color
B3:5BAE 90 FC 19    mov     DPTR, #XRAM_FC19      ; Número da Janela (OSD_TextInit)?
B3:5BB1 E0          movx    A, @DPTR
B3:5BB2 FF          mov     R7, A
B3:5BB3 E4          clr     A
B3:5BB4 FD          mov     R5, A
B3:5BB5 02 E4 1D    ljmp    OSD_Textinit_END


Substitua:
B3:5B9E - E4 90 FC 1E F0 A3 74 02 F0 7B 03 E4 FD 12 C3 50
por:
B3:5B9E - 90 FC 1E 74 03 F0 A3 74 02 F0 E4 FB FD 12 C3 50

Com o mtkWindows, coloque Blend=3 na janela 0x12

Com o mtkRemaker coloque fontes "normais" com contorno

É isso. Nada mais de precisar inverter as cores da fonte para uso no firmware Philips :)

O que meu patch faz é desligar a definição de uma cor de background e ao mesmo tempo definir uma cor sólida para o contorno.
« Last Edit: August 18, 2007, 04:57:01 AM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #8 on: July 06, 2007, 08:43:01 AM »
Como tornar a fonte de legendas independente da fonte do browser.
Este texto ja foi publicado por mim no htforum e estou repetindo aqui, porque está dose encontrar alguma coisa lá. :)

Tomando como exemplo o Proview DVP-858 (firmware original):

Em B1:DC89 substitua
E4 FF
por
7F xx

onde xx é o número da fonte que você quer usar para as legendas.


Como funciona:

Eu já sabia que a escolha da fonte possivelmente era feita em sub_style, mas não havia conseguido achar o código baseado nos exemplos que havia visto. Hoje fiz uma nova pesquisa de outra forma e descobri por outros exemplos que a coisa estava na cara:

B1:DC91             Sub_Style:                    ; CODE XREF: B1_998C+5Cp
B1:DC91 EF          mov     A, R7
B1:DC92 24 FE       add     A, #0xFE ; '¦'
B1:DC94 60 53       jz      B1_DCE9
B1:DC96 14          dec     A
B1:DC97 60 50       jz      B1_DCE9
B1:DC99 14          dec     A
B1:DC9A 60 59       jz      B1_DCF5
B1:DC9C 24 03       add     A, #3
B1:DC9E 70 58       jnz     B1_DCF8
B1:DCA0 E4          clr     A                     ; Determina a fonte (0x0)
B1:DCA1 FF          mov     R7, A

B1:DCA2 12 1E 70    lcall   OSD_SetFont_B1_BS



O código original carrega R7 com o valor zero (o número da fonte no Proview), do jeito implícito típico do assembly, e chama a rotina que carrega a fonte. O meu patch permite carregar R7 explicitamente com o número de outra fonte.

Preste atenção ao fato de que você deve usar o número que aparece entre parênteses no mtkRemaker e não o número sequencial da fonte

Preste atenção às listagens que eu publicar de Sub_Style que eu devo sinalizar onde é feita essa mudança em cada firmware.
« Last Edit: August 18, 2007, 04:59:57 AM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #9 on: July 06, 2007, 10:41:26 AM »
Sub_Style do Proview DVP-858 - Versão 20.07

Existe uma pequena diferença para a versão 20.06, que é devida à correção do bug da ausência de contorno de legendas pela Proview

Primária

B1:DC91             ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B1:DC91
B1:DC91
B1:DC91             Sub_Style:                    ; CODE XREF: B1_998C+5Cp
B1:DC91 EF          mov     A, R7
B1:DC92 24 FE       add     A, #0xFE ; '¦'
B1:DC94 60 53       jz      B1_DCE9
B1:DC96 14          dec     A
B1:DC97 60 50       jz      B1_DCE9
B1:DC99 14          dec     A
B1:DC9A 60 59       jz      B1_DCF5
B1:DC9C 24 03       add     A, #3
B1:DC9E 70 58       jnz     B1_DCF8
B1:DCA0 E4          clr     A                     ; Determina a fonte (0x0)
B1:DCA1 FF          mov     R7, A
B1:DCA2 12 1E 70    lcall   OSD_SetFont_B1_BS
B1:DCA5 D2 46       setb    RAM_28.6              ; Não sei para que serve. Zerei mas nada pareceu mudar
B1:DCA7 7F 13       mov     R7, #0x13
B1:DCA9 12 1D D4    lcall   B1_BS_190_B5_13E8
B1:DCAC 7F 13       mov     R7, #0x13
B1:DCAE 12 1D DA    lcall   B1_BS_191_B5_A4B2
B1:DCB1 90 FC 07    mov     DPTR, #XRAM_FC07      ; OSD_Colors
B1:DCB4 74 03       mov     A, #3                 ; Em FC07 vai a cor do contorno e em FC08 a cor de preenchimento
B1:DCB6 F0          movx    @DPTR, A
B1:DCB7 A3          inc     DPTR
B1:DCB8 14          dec     A
B1:DCB9 F0          movx    @DPTR, A
B1:DCBA E4          clr     A
B1:DCBB FB          mov     R3, A
B1:DCBC FD          mov     R5, A
B1:DCBD 7F 13       mov     R7, #0x13
B1:DCBF 12 1D E0    lcall   OSD_TextColor_B1_BS
B1:DCC2 E4          clr     A
B1:DCC3 FD          mov     R5, A
B1:DCC4 7F 13       mov     R7, #0x13
B1:DCC6 12 1E B2    lcall   B1_BS_227_B5_E5A1
B1:DCC9 7F 13       mov     R7, #0x13
B1:DCCB 12 1D EC    lcall   B1_BS_194_B3_6222
B1:DCCE 7F 13       mov     R7, #0x13
B1:DCD0 12 1D F2    lcall   B1_BS_195_B5_E98B
B1:DCD3 12 E2 45    lcall   B1_E245
B1:DCD6 74 FF       mov     A, #0xFF
B1:DCD8 90 FD 49    mov     DPTR, #XRAM_FD49
B1:DCDB F0          movx    @DPTR, A
B1:DCDC A3          inc     DPTR
B1:DCDD F0          movx    @DPTR, A
B1:DCDE 90 FD 4E    mov     DPTR, #XRAM_FD4E
B1:DCE1 F0          movx    @DPTR, A
B1:DCE2 A3          inc     DPTR
B1:DCE3 F0          movx    @DPTR, A
B1:DCE4 C2 45       clr     RAM_28.5
B1:DCE6 02 1E 52    ljmp    B1_BS_211_B3_B567


Secundária


B1:E9EF             ; START OF FUNCTION CHUNK FOR BankSw_338_B1_F916
B1:E9EF
B1:E9EF             Sub_StyleSec:                 ; CODE XREF: BankSw_338_B1_F916:B1_F930j
B1:E9EF 7F E2       mov     R7, #0xE2 ; 'Ô'
B1:E9F1 7E 07       mov     R6, #7
B1:E9F3 12 19 C6    lcall   B1_BS_17_B0_E87A
B1:E9F6 BF 01 05    cjne    R7, #1, B1_E9FE
B1:E9F9 D2 45       setb    RAM_28.5
B1:E9FB 12 1E 52    lcall   B1_BS_211_B3_B567
B1:E9FE
B1:E9FE             B1_E9FE:                      ; CODE XREF: BankSw_338_B1_F916-F20j
B1:E9FE 90 FC AB    mov     DPTR, #XRAM_FCAB
B1:EA01 E0          movx    A, @DPTR
B1:EA02 64 03       xrl     A, #3
B1:EA04 70 35       jnz     B1_EA3B
B1:EA06 7F 06       mov     R7, #6
B1:EA08 12 A9 48    lcall   BankSw_241_B1_A948
B1:EA0B 50 2E       jnc     B1_EA3B
B1:EA0D D2 46       setb    RAM_28.6
B1:EA0F 7F 13       mov     R7, #0x13
B1:EA11 12 1D D4    lcall   B1_BS_190_B5_13E8
B1:EA14 7F 13       mov     R7, #0x13
B1:EA16 12 1D DA    lcall   B1_BS_191_B5_A4B2
B1:EA19 90 FC 07    mov     DPTR, #XRAM_FC07      ; OSD_Colors
B1:EA1C 74 03       mov     A, #3
B1:EA1E F0          movx    @DPTR, A
B1:EA1F A3          inc     DPTR
B1:EA20 14          dec     A
B1:EA21 F0          movx    @DPTR, A
B1:EA22 E4          clr     A
B1:EA23 FB          mov     R3, A
B1:EA24 FD          mov     R5, A
B1:EA25 7F 13       mov     R7, #0x13
B1:EA27 12 1D E0    lcall   OSD_TextColor_B1_BS
B1:EA2A E4          clr     A
B1:EA2B FD          mov     R5, A
B1:EA2C 7F 13       mov     R7, #0x13
B1:EA2E 12 1E B2    lcall   B1_BS_227_B5_E5A1
B1:EA31 7F 13       mov     R7, #0x13
B1:EA33 12 1D EC    lcall   B1_BS_194_B3_6222
B1:EA36 7F 13       mov     R7, #0x13
B1:EA38 12 1D F2    lcall   B1_BS_195_B5_E98B
B1:EA3B
B1:EA3B             B1_EA3B:                      ; CODE XREF: BankSw_338_B1_F916-F12j
B1:EA3B                                           ; BankSw_338_B1_F916-F0Bj
B1:EA3B 22          ret
« Last Edit: July 18, 2007, 12:49:11 AM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #10 on: July 06, 2007, 10:52:30 AM »
Sub_Style do Proview DVP-858 - Versão 20.06

Primária

B1:DC7A Sub_Style:                              ; CODE XREF: B1_998C+5Cp
B1:DC7A                 mov     A, R7
B1:DC7B                 add     A, #0xFE ; '¦'
B1:DC7D                 jz      B1_DCD2
B1:DC7F                 dec     A
B1:DC80                 jz      B1_DCD2
B1:DC82                 dec     A
B1:DC83                 jz      B1_DCDE
B1:DC85                 add     A, #3
B1:DC87                 jnz     B1_DCE1
B1:DC89                 clr     A
B1:DC8A                 mov     R7, A
B1:DC8B                 lcall   SetFont_B1_BS_216_B5_E9E0
B1:DC8E                 setb    RAM_28.6
B1:DC90                 mov     R7, #0x13
B1:DC92                 lcall   B1_BS_190_B5_13F0
B1:DC95                 mov     R7, #0x13
B1:DC97                 lcall   B1_BS_191_B5_A4B2
B1:DC9A                 clr     A
B1:DC9B                 mov     DPTR, #XRAM_FC07 ; OSD_Colors
B1:DC9E                 movx    @DPTR, A
B1:DC9F                 inc     DPTR
B1:DCA0                 mov     A, #2
B1:DCA2                 movx    @DPTR, A
B1:DCA3                 clr     A
B1:DCA4                 mov     R3, A
B1:DCA5                 mov     R5, A
B1:DCA6                 mov     R7, #0x13
B1:DCA8                 lcall   OSD_TextColor_B1_BS_192_B5_D5F7 ; OSD_TextColor
B1:DCAB                 clr     A
B1:DCAC                 mov     R5, A
B1:DCAD                 mov     R7, #0x13
B1:DCAF                 lcall   B1_BS_227_B5_E5A7
B1:DCB2                 mov     R7, #0x13
B1:DCB4                 lcall   B1_BS_194_B3_6223
B1:DCB7                 mov     R7, #0x13
B1:DCB9                 lcall   B1_BS_195_B5_E991
B1:DCBC                 lcall   B1_E22E
B1:DCBF                 mov     A, #0xFF
B1:DCC1                 mov     DPTR, #XRAM_FD49
B1:DCC4                 movx    @DPTR, A
B1:DCC5                 inc     DPTR
B1:DCC6                 movx    @DPTR, A
B1:DCC7                 mov     DPTR, #XRAM_FD4E
B1:DCCA                 movx    @DPTR, A
B1:DCCB                 inc     DPTR
B1:DCCC                 movx    @DPTR, A
B1:DCCD                 clr     RAM_28.5
B1:DCCF                 ljmp    B1_BS_211_B3_B6E3


Secundária

B1:E9D8 Sub_StyleSec:                           ; CODE XREF: BankSw_338_B1_F907:B1_F921j
B1:E9D8                 mov     R7, #0xE2 ; 'Ô'
B1:E9DA                 mov     R6, #7
B1:E9DC                 lcall   ARM_GETCHAR_B1_BS_17_B0_E87D
B1:E9DF                 cjne    R7, #1, B1_E9E7
B1:E9E2                 setb    RAM_28.5
B1:E9E4                 lcall   B1_BS_211_B3_B6E3
B1:E9E7
B1:E9E7 B1_E9E7:                                ; CODE XREF: BankSw_338_B1_F907-F28j
B1:E9E7                 mov     DPTR, #XRAM_FCAB ; TipoMidia
B1:E9EA                 movx    A, @DPTR
B1:E9EB                 xrl     A, #3
B1:E9ED                 jnz     B1_EA24
B1:E9EF                 mov     R7, #6
B1:E9F1                 lcall   BankSw_241_B1_A87D
B1:E9F4                 jnc     B1_EA24
B1:E9F6                 setb    RAM_28.6
B1:E9F8                 mov     R7, #0x13
B1:E9FA                 lcall   B1_BS_190_B5_13F0
B1:E9FD                 mov     R7, #0x13
B1:E9FF                 lcall   B1_BS_191_B5_A4B2
B1:EA02                 clr     A
B1:EA03                 mov     DPTR, #XRAM_FC07 ; OSD_Colors
B1:EA06                 movx    @DPTR, A
B1:EA07                 inc     DPTR
B1:EA08                 mov     A, #2         
B1:EA0A                 movx    @DPTR, A
B1:EA0B                 clr     A
B1:EA0C                 mov     R3, A
B1:EA0D                 mov     R5, A
B1:EA0E                 mov     R7, #0x13
B1:EA10                 lcall   OSD_TextColor_B1_BS_192_B5_D5F7 ; OSD_TextColor
B1:EA13                 clr     A
B1:EA14                 mov     R5, A
B1:EA15                 mov     R7, #0x13
B1:EA17                 lcall   B1_BS_227_B5_E5A7
B1:EA1A                 mov     R7, #0x13
B1:EA1C                 lcall   B1_BS_194_B3_6223
B1:EA1F                 mov     R7, #0x13
B1:EA21                 lcall   B1_BS_195_B5_E991
B1:EA24
B1:EA24 B1_EA24:                                ; CODE XREF: BankSw_338_B1_F907-F1Aj
B1:EA24                                         ; BankSw_338_B1_F907-F13j
B1:EA24                 ret

« Last Edit: July 06, 2007, 10:56:20 AM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #11 on: July 06, 2007, 11:40:26 AM »
Sub_Style Philips DVP5100K/78 - Versão 0E.0A

Primária
Veja o post de JMARAUJO mais adiante


Secundária (já testado no meu DVP5100)

B3:545E             Sub_StyleSec:                 ; DATA XREF: BankSw_223_B3_519C+63o
B3:545E 90 FB 8D    mov     DPTR, #XRAM_FB8D      ; Window_ID?
B3:5461 E0          movx    A, @DPTR
B3:5462 FF          mov     R7, A
B3:5463 D2 75       setb    RAM_2E.5
B3:5465 12 28 F1    lcall   BankSw_217_B3_28F1
B3:5468 90 FB 8D    mov     DPTR, #XRAM_FB8D      ; Window_ID?
B3:546B E0          movx    A, @DPTR
B3:546C FF          mov     R7, A
B3:546D 12 68 22    lcall   BankSw_218_B3_6822
B3:5470 90 FB 8D    mov     DPTR, #XRAM_FB8D      ; Window_ID?
B3:5473 E0          movx    A, @DPTR
B3:5474 FF          mov     R7, A
B3:5475 E4          clr     A
B3:5476 90 FB A4    mov     DPTR, #XRAM_FBA4      ; OSD_TextColor
B3:5479 F0          movx    @DPTR, A
B3:547A A3          inc     DPTR
B3:547B 74 02       mov     A, #2
B3:547D F0          movx    @DPTR, A
B3:547E 7B 03       mov     R3, #3                ; Define a cor do background
B3:5480 E4          clr     A
B3:5481 FD          mov     R5, A
B3:5482 12 D4 73    lcall   OSD_TextColorB1BS
B3:5485 90 FB 8D    mov     DPTR, #XRAM_FB8D      ; Window_ID?
B3:5488 E0          movx    A, @DPTR
B3:5489 FF          mov     R7, A
B3:548A E4          clr     A
B3:548B FD          mov     R5, A
B3:548C 02 EF D7    ljmp    BankSw_484_B3_EFD7

« Last Edit: July 30, 2007, 01:47:18 PM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #12 on: July 06, 2007, 11:45:12 AM »
Como identificar a janela que é usada pelo bargraph no firmware

O bargraph a que me refiro não é o que aparece para MP3. É este, que existe no DVP-858, mas não pode ser exibido porque não existe comando no remoto para ele:



Saber em que janela é exibido é util caso você precise movê-lo para uma posição melhor.

Abra o firmware com o mtkWindows e procure por uma janela com uma palette parecida com esta:



Note que "Used by" mostra que esta palette é usada por uma janela apenas.

No Proview DVP-858, no Lenoxx DV-406 e nos Philips DVP3040, DVP5100, DVP5960 e DVP5965 é a janela 0x08

Atenção: Nem todo firmware tem bargraph ativo. No proview DVP-858 basta enviar o mtkCommand "4A" usando o Expert Mode do mtkTool para que ele apareça, mas isso não funciona com o DVP5960.
« Last Edit: July 07, 2007, 03:13:04 AM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #13 on: July 06, 2007, 12:07:00 PM »
A busca pela RC_TAB do Proview
publicado originalmente no tópico do HTFORUM

Todo firmware MT13x9 tem uma ou mais tabelas (os Philips sabidamente tem duas) onde é feita a correspondência entre o código recebido do controle remoto e o código que será repassado para as rotinas. Os hackers do MT13x9 chamam esse último de "mtkCommand".

Para que cada fabricante de DVD player possa usar a codificação de controle remoto que achar mais apropriada, geralmente para encaixar em sua linha produtos, essa correspondência é inevitável. Depois que o firmware passa por essa tabela, chamada de RC_TAB, o firmware passa a trabalhar só com os mtkCommands e fica independente do remoto usado. Isso facilita bastante a programação.

Localizando essa tabela é possível mudar globalmente um comando do remoto. É possível por exemplo fazer com que ao apertar o botão PLAY do remoto seja repassado para todas as funções do firmware o mtkCommand IR_PLAY_PAUSE e não o IR_PLAY.

O problema é achar uma tabela de uns 256 bytes em um bloco de dados com mais de 400 mil, sem saber exatamente como ela se parece.

Baseado em algumas horas de chutes, eu achei uma com os seguintes botões (endereços da versão 20.06):

    * DISPLAY (B4:31E3)
    * BOOKMARK (B4:31E7)
    * GOTO (B4:31FB)
    * STOP (B4:31FF)
    * USB (B4:3227)
    * HDMI (B4:322B)
    * P/N (B4:322F)
    * VIDEO (B4:3233)

E já posso "transformar" qualquer desses botões no mtkCommand que eu quiser (basta mudar o valor no offset entre parênteses). Mas a tabela com o botão PLAY está muito difícil de achar.
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
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #14 on: July 06, 2007, 12:25:31 PM »
Olá, Jefferson!

Infelizmente, eu não sei configurar o disassemblador para mostrar os códigos hexa ao lado dos mnemônicos, nem tenho tempo para fazer isso  manualmente.
Tente em:

Options -> General -> Disassembly -> Number of opcode bytes -> 4

Saudações!
Fórum do DVP5100
(novo endereço)

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #15 on: July 06, 2007, 12:32:18 PM »
Caramba!

MUITO OBRIGADO!
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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #16 on: July 06, 2007, 12:37:59 PM »
Como fazer sumir o guia de Pan & Scan (modo ZOOM)

Testado com sucesso no Proview DVP-858

O guia de Pan&Scan é a caixa que se vê na imagem abaixo




Descubra em que janela ele é exibido (oriente-se pela posição onde ele aparece na tela e compare com o mtkWindows).

Basta reduzir o tamanho da janela para 1x1 pixels que ele vai continuar sendo exibido, mas não será visível.

No Proview DVP-858, o guia é exibido na janela 0x1C.

« Last Edit: July 06, 2007, 04:37:01 PM by 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
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #17 on: July 06, 2007, 12:39:46 PM »
Sub_Style Philips DVP5100K/78 - Versão 0E.0A

Estou com dificuldade para achar a primária


Secundária (ainda não foi testado)

B3:545E Sub_StyleSec:                           ; DATA XREF: BankSw_223_B3_519C+63o
B3:545E                 mov     DPTR, #XRAM_FB8D ; Window_ID?
B3:5461                 movx    A, @DPTR
...

Seguindo as xrefs achei esta função ao qual estou 80% certo de ser a Sub_Style. Se puder confirmar isso ficarei muito grato...

No banco 1:
=========

ROM:CF79             ROM_CF79:
ROM:CF79 90 FB 60              mov   DPTR, #0xFB60
ROM:CF7C EE                    mov   A, R6
ROM:CF7D F0                    movx  @DPTR, A
ROM:CF7E A3                    inc   DPTR
ROM:CF7F EF                    mov   A, R7
ROM:CF80 F0                    movx  @DPTR, A
ROM:CF81 7F 03                 mov   R7, #3
ROM:CF83 12 07 21              lcall BS:180_B3:11FC
ROM:CF83
ROM:CF86 7F 01                 mov   R7, #1
ROM:CF88 12 07 21              lcall BS:180_B3:11FC
ROM:CF88
ROM:CF8B 7F 03                 mov   R7, #3
ROM:CF8D 12 F1 84              lcall ROM_F184
ROM:CF8D
ROM:CF90 7B FF                 mov   R3, #0xFF
ROM:CF92 7D EB                 mov   R5, #0xEB ; 'Ù'
ROM:CF94 7C 01                 mov   R4, #1
ROM:CF96 74 01                 mov   A, #1
ROM:CF98 FF                    mov   R7, A
ROM:CF99 FE                    mov   R6, A
ROM:CF9A 12 06 5B              lcall OSD_DispMsg2
ROM:CF9A
ROM:CF9D 7F 0E                 mov   R7, #0xE
ROM:CF9F 12 06 FD              lcall BS:174_B4:E80B
ROM:CF9F
ROM:CFA2 7F 59                 mov   R7, #0x59 ; 'Y'      <-- 59 = Valor EEPROM mudança fonte divx
ROM:CFA4 7E 00                 mov   R6, #0
ROM:CFA6 12 05 D7              lcall PREF_GetChar
ROM:CFA6
ROM:CFA9 BF 01 07              cjne  R7, #1, ROM_CFB3
ROM:CFA9
ROM:CFAC 7F 0F                 mov   R7, #0xF           <-- Fonte 0F (fonte 2)
ROM:CFAE 12 08 59              lcall SUB_SetFont
ROM:CFAE
ROM:CFB1 80 27                 sjmp  ROM_CFDA
ROM:CFB1
ROM:CFB3             ; ---------------------------------------------------------------------------
ROM:CFB3
ROM:CFB3             ROM_CFB3:
ROM:CFB3 7F 59                 mov   R7, #0x59 ; 'Y'     <-- EEPROM mudança fonte
ROM:CFB5 7E 00                 mov   R6, #0
ROM:CFB7 12 05 D7              lcall PREF_GetChar
ROM:CFB7
ROM:CFBA EF                    mov   A, R7
ROM:CFBB 70 07                 jnz   ROM_CFC4
ROM:CFBB
ROM:CFBD 7F 0D                 mov   R7, #0xD       <-- Fonte 0D (fonte 1)
ROM:CFBF 12 08 59              lcall SUB_SetFont
ROM:CFBF
ROM:CFC2 80 16                 sjmp  ROM_CFDA
ROM:CFC2
ROM:CFC4             ; ---------------------------------------------------------------------------
ROM:CFC4
ROM:CFC4             ROM_CFC4:
ROM:CFC4 7F 59                 mov   R7, #0x59 ; 'Y'
ROM:CFC6 7E 00                 mov   R6, #0
ROM:CFC8 12 05 D7              lcall PREF_GetChar
ROM:CFC8
ROM:CFCB BF 02 07              cjne  R7, #2, ROM_CFD5
ROM:CFCB
ROM:CFCE 7F 11                 mov   R7, #0x11         <-- Fonte 11 (não existente no fw orig)
ROM:CFD0 12 08 59              lcall SUB_SetFont
ROM:CFD0
ROM:CFD3 80 05                 sjmp  ROM_CFDA
ROM:CFD3
ROM:CFD5             ; ---------------------------------------------------------------------------
ROM:CFD5
ROM:CFD5             ROM_CFD5:
ROM:CFD5 7F 0D                 mov   R7, #0xD
ROM:CFD7 12 08 59              lcall SUB_SetFont
ROM:CFD7
ROM:CFDA
ROM:CFDA             ROM_CFDA:
ROM:CFDA 7F 11                 mov   R7, #0x11         <-- ID Janela legendas mpeg4
ROM:CFDC 12 08 23              lcall OSD_TextInit
ROM:CFDC
ROM:CFDF 7F 11                 mov   R7, #0x11
ROM:CFE1 12 08 29              lcall PS_A_0x04
ROM:CFE1
ROM:CFE4 22                    ret


EDIT: Atualizada rotina e comentarios adicionados.
« Last Edit: August 19, 2007, 08:05:18 PM by jmaraujo »
Fórum do DVP5100
(novo endereço)

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #18 on: July 06, 2007, 01:25:31 PM »
Já testei. É esta mesmo!

Obrigado!
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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #19 on: July 06, 2007, 01:31:26 PM »
Como usar o "Expert Mode" do mtkTool
Publicado originalmente no tópico do DVP-858 no HTFORUM, corrigido e ampliado

Embora para leitura da flash o mtktool funcione mesmo com o aparelho só ligado na tomada e até mesmo travado depois de uma leitura anterior, para que as outras funções do "Expert Mode" funcionem o aparelho precisa estar em operação normal.

Ou seja, para usar o "Expert Mode":

    * Ligue o aparelho;
    * Inicie o mtktool com o comando "mtktool prassi";
    * Não use a janela "flash upgrade" para nada!

Exemplo de uso:

    * Abra a janela "Memory Dump"
    * Em "type" selecione "DRAM (BYTE)"
    * Em "Address" coloque o endereço 376e599
    * Desmarque "Double Word" se existir essa opção na sua versão
    * Clique em Start

O resultado na tela será teóricamente o conteúdo da memória eeprom do aparelho.

Notas:

O endereço do conteúdo da eeprom não é fixo. É o endereço da Shared Memory (armAddressInfo) + 0x1999
http://tech.groups.yahoo.com/group/mt13x9/message/4339

Eu não estou certo de que 376e599 seja mesmo o endereço base da cópia da eeprom na Shared Memory. Os dados não batem com os exemplos que encontrei no MT13x9 e, embora os valores mudem quando eu mexo no setup, não estão mudando de forma consistente.


Outro exemplo de uso:

    * Ligue o aparelho e coloque um filme para rodar;
    * Habilite o Expert Mode;
    * Abra a janela R/W Register;
    * Em "type" selecione 8032 XDATA;
    * Em "Addr" coloque "FB00"
    * Em "Data" coloque "13"
    * Clique em "Write"

O aparelho vai entrar em pausa!

Explicação:

A janela R/W Register lê e escreve diretamente em endereços de memória do MT1389, um endereço por vez.

    * 8032 XDATA é a memória externa do controlador 8032 embutido no chip;
    * FB00 é o endereço nessa memória externa onde é colocado o código ("mtkCommmand") dos comandos decodificados do controle remoto;
    * 13 é o mtkCommand da tecla pause

A tabela completa de mtkCommands está no arquivo IR.CFG que vem com o mtktool 2.42. Existe outra ligeiramente diferente no arquivo keydef.h do código fonte. Eu tenho a tabela completa do proview, que descobri por tentativa e erro mesmo, porque não tinha achado esses arquivos ainda.

A tabela em keydef.h "bate" melhor com os aparelhos que já testei.

Então com esse simples recurso podemos testar o aparelho procurando por funções ocultas que não foram implementadas no DVP-858 (ou qualquer aparelho, porque o endereço FB00 parece ser comum a todos) por não existirem botões suficientes no remoto.

Algumas funções ocultas do Proview:

    * STEP Rewind;
    * STEP Forward;
    * SLOW Rewind;
    * ZOOM OUT (um comando que faz só ZOOM OUT sem entrar no ZOOM IN primeiro);
    * Duas funções para digitar a senha do disco;
    * Alternar entre Normal/PS, Normal/LB e Widescreen


Existem outras funções ocultas que poderiam ser acessadas com o remoto adequado (ou a gambiarra adequada):

    * 0x46: Alterna entre modos de reverberação
    * 0x58: escurece um pouco a iluminação (leds azuis)
    * 0x59: Iluminação normal (brilho máximo)


E outras coisas, incluindo algumas sem utilidade alguma nesse aparelho, como funções de Karaokê.

« Last Edit: July 07, 2007, 03:16:30 AM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #20 on: July 06, 2007, 03:45:42 PM »
Janelas já identificadas do Proview DVP-858

  • 0x13 - A janela onde são exibidas as legendas .avi/.mpg
  • 0x1F - A janela de exibição do volume. Você pode comprovar isso se colocar LEFT=200. Mas se mover a janela verticalmente, vai ser difícil encontrar uma posição onde ela possa aparecer.
  • 0x00 - A janela onde são exibidas as mensagens, "Abrir", "fechar" e "carregando" e de avanço ou retrocesso
  • 0x0F - A janela do bowser onde é exibida a duração de MP3, o indicador de volume, o bargraph e a numeração de arquivos
  • 0x02 - A janela onde é exibido o tempo decorrido, a mensagem de Repeat e a de Zoom
  • 0x06 - A janela onde é exibida que legenda ou faixa de áudio em DivX está selecionada
  • 0x10 - é a principal do browser. Se você mexer nela pode travar o aparelho logo ao exibir o browser, com artefatos estranhos por toda a tela;
  • 0x08 - Onde seria exibido o bargraph, se houvesse uma tecla no remoto para ativá-lo
  • 0x1C - Onde é exibido o guia de Pan&Scan
  • 0x14 - Onde é desenhado o logo "DVD-Video" do screen saver
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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #21 on: July 06, 2007, 04:06:16 PM »
Como identificar que janela é usada pelo screensaver.

Em todos os firmwares que olhei, ela fica nesta posição:



Geralmente é a única janela a ficar encostada na borda da tela.
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 Intruder_A6

  • Colaboradores
  • Tagarela
  • *
  • Posts: 175
  • Aprovação: +2/-0
    • View Profile
Re: Firmware: log de descobertas
« Reply #22 on: July 06, 2007, 05:51:15 PM »
Aprender assembler é que nem aprender a dirigir carro, mesmo que aprenda com um celta, fusca ou coisa parecida, se consegue dirigir muitos outros tipos de veículos. O meu aprendizado de assembler foi com o 6502, Z80 e 8088 ( e derivados ) bem antes de existir internet para nos ajudar ( para nós pobres mortais aqui no 4º Mundo ). Com o 8051 eu me sinto em casa, e consigo entender 99% das instruções do 8051 ( se não me falha a memória é um dos filhos do bom e velho Z80 ) mesmo tendo parado de mexer com assembler a mais de 10 anos ( só não sei o que faz um lcall, um movx e um ljump que tenho curiosidade de saber o que fazem exatamente ).

Muito bom este seu trabalho Jefferson, pena que eu não tenho mais a sua coragem, e nem tenho o seu conhecimento de eletrônica ( só arranho um pouco ), porque se não eu poderia meter as caras no firmware do RJTech 2100 . Mas infelizmente para mim não tem mais jeito, não tenho mais coragem nem de programar Pascal ou Delphi ( e olha que eu gostava muito de escrever em Pascal ), depois de trabalhar mais de 10 anos em informática ( em programação ) eu saturei de tal forma que não tenho mais saco de programar nada.

Obs. este link http://www.8052.com/tutorial.phtml do tutorial não está abrindo.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #23 on: July 06, 2007, 06:10:17 PM »
Obs. este link http://www.8052.com/tutorial.phtml do tutorial não está abrindo.

Aqui está abrindo.


# LCALL: Long Call
# LJMP: Long Jump
# MOVX: Move Extended Memory
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 Intruder_A6

  • Colaboradores
  • Tagarela
  • *
  • Posts: 175
  • Aprovação: +2/-0
    • View Profile
Re: Firmware: log de descobertas
« Reply #24 on: July 06, 2007, 06:20:47 PM »
Agora resolveu abrir.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #25 on: July 07, 2007, 05:18:54 AM »
Eu testei o LG DK194g com firmwares das séries 8xxx e 9xxx. Não dá o menor sinal de vida.
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 attentus

  • Novato
  • *
  • Posts: 7
  • Aprovação: +0/-0
    • View Profile
Re: Firmware: log de descobertas
« Reply #26 on: July 07, 2007, 07:48:47 AM »
Como fazer com que o firmware Philips use fontes com cores normais.

É sabido que nos firmwares da Philips é preciso fazer uma "gambiarra" com as cores para poder desativar o background.

Eu descobri como fazer com que o firmware aceite fontes "normais".

Exemplo do DVP5960

Sub_Style primária. Substitua:
B1:D2DC - E4 90 FC 1E F0 A3 74 02 F0 7B 03 E4 FD 7F 12 12
por:
B1:D2DC - 90 FC 1E 74 03 F0 A3 74 02 F0 E4 FB FD 7F 12 12


Sub_Style secundária. Substitua:
B3:5B9E - E4 90 FC 1E F0 A3 74 02 F0 7B 03 E4 FD 12 C3 50
por:
B3:5B9E - 90 FC 1E 74 03 F0 A3 74 02 F0 E4 FB FD 12 C3 50

Com o mtkWindows, coloque Blend=3 na janela 0x12

Com o mtkReplacer coloque fontes "normais" com contorno

É isso. Nada mais de precisar inverter as cores da fonte para uso no firmware Philips :)

O que meu patch faz é desligar a definição de uma cor de background e ao mesmo tempo definir uma cor sólida para o contorno.
Ryan.

olha só que eu encontrei:

[B1:D2DC] E4 90 FC 1E F0 A3 74 02 F0 7B 03 E4 FD 7F 12 12 [DVP5960]
[B1:D2DC] E4 90 FC 1F F0 A3 74 02 F0 7B 03 E4 FD 7F 12 12 [DVP5965]

[B3:5B9E] E4 90 FC 1E F0 A3 74 02 F0 7B 03 E4 FD 12 C3 50 [DVP5960]
[B3:5B9E] E4 90 FC 1F F0 A3 74 02 F0 7B 03 E4 FD 12 C3 99 [DVP5965]

Como seria as alteraçoes para que o DVP5965 use fontes com cores normais?
« Last Edit: July 07, 2007, 07:54:46 AM by attentus »

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #27 on: July 07, 2007, 08:11:34 AM »

[B1:D2DC] E4 90 FC 1E F0 A3 74 02 F0 7B 03 E4 FD 7F 12 12 [DVP5960]
[B1:D2DC] E4 90 FC 1F F0 A3 74 02 F0 7B 03 E4 FD 7F 12 12 [DVP5965]

[B3:5B9E] E4 90 FC 1E F0 A3 74 02 F0 7B 03 E4 FD 12 C3 50 [DVP5960]
[B3:5B9E] E4 90 FC 1F F0 A3 74 02 F0 7B 03 E4 FD 12 C3 99 [DVP5965]

Como seria as alteraçoes para que o DVP5965 use fontes com cores normais?


Parece simples. No meu patch:

onde tiver FC 1E coloque FC 1F (nas duas rotinas)
onde tiver C3 50 coloque C3 99

Porque só é preciso adaptar as diferenças de endereços entre os dois modelos. As rotinas são essencialmente iguais.
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 attentus

  • Novato
  • *
  • Posts: 7
  • Aprovação: +0/-0
    • View Profile
Re: Firmware: log de descobertas
« Reply #28 on: July 07, 2007, 09:27:28 AM »

[B1:D2DC] E4 90 FC 1E F0 A3 74 02 F0 7B 03 E4 FD 7F 12 12 [DVP5960]
[B1:D2DC] E4 90 FC 1F F0 A3 74 02 F0 7B 03 E4 FD 7F 12 12 [DVP5965]

[B3:5B9E] E4 90 FC 1E F0 A3 74 02 F0 7B 03 E4 FD 12 C3 50 [DVP5960]
[B3:5B9E] E4 90 FC 1F F0 A3 74 02 F0 7B 03 E4 FD 12 C3 99 [DVP5965]

Como seria as alteraçoes para que o DVP5965 use fontes com cores normais?


Parece simples. No meu patch:

onde tiver FC 1E coloque FC 1F (nas duas rotinas)
onde tiver C3 50 coloque C3 99

Porque só é preciso adaptar as diferenças de endereços entre os dois modelos. As rotinas são essencialmente iguais.

Caro Ryan.
Apliquei os Dois patches no FVP5965 conforme sua orientção.
resultado: Ao entrar e sair do Setup a legenda desaparece.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #29 on: July 07, 2007, 09:46:20 AM »
Apliquei os Dois patches no FVP5965 conforme sua orientção.
resultado: Ao entrar e sair do Setup a legenda desaparece.

Você sabe dizer se o DVP5965 tem o mesmo bug do DVP5960 de usar uma fonte diferente ao sair do setup? Se tiver e a segunda fonte for ruim de ler pode "parecer" que a legenda sumiu.

Isso aí não deveria acontecer. Funcionou comigo e as rotinas parecem idênticas.

Não posso ajudar nisso agora porque estou concentrado em outro problema.
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 attentus

  • Novato
  • *
  • Posts: 7
  • Aprovação: +0/-0
    • View Profile
Re: Firmware: log de descobertas
« Reply #30 on: July 07, 2007, 09:59:36 AM »
Apliquei os Dois patches no FVP5965 conforme sua orientção.
resultado: Ao entrar e sair do Setup a legenda desaparece.

Você sabe dizer se o DVP5965 tem o mesmo bug do DVP5960 de usar uma fonte diferente ao sair do setup? Se tiver e a segunda fonte for ruim de ler pode "parecer" que a legenda sumiu.

Isso aí não deveria acontecer. Funcionou comigo e as rotinas parecem idênticas.

Não posso ajudar nisso agora porque estou concentrado em outro problema.

Vou testar sobre o 'bug' e depois reporto aqui.

Offline eneris

  • Novato Prolixo
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #31 on: July 07, 2007, 04:51:49 PM »
Caro Ryan.
Apliquei os Dois patches no FVP5965 conforme sua orientção.
resultado: Ao entrar e sair do Setup a legenda desaparece.

Se bem entendir, vc você diz que a legenda aparece normal, so que ao entrar no Setup e sair, a legenda some, se for isso, é um bug do firmware do 5965K desde o original Philips.
« Last Edit: July 07, 2007, 05:09:41 PM by Jefferson »
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #32 on: July 07, 2007, 05:12:24 PM »
Então talvez o DVP5965 também esteja usando as fontes 1 e 7 para legendas. A fonte 1 antes de entrar no setup e a fonte 7 após sair.

Se você mudar só a primeira fonte 1 e não mudar a fonte 7, pode parecer que ela sumiu.
« Last Edit: July 07, 2007, 05:15:25 PM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #33 on: July 09, 2007, 06:13:37 PM »
Eu estava até agora escrevendo patches "na munheca" porque não conhecia um programa onde eu pudesse escrever em mnemônicos do 8051. Eu tinha que consultar o guia de referência o tempo todo, por não lembrar dos códigos para as instruções.

Mas não é que o NewAge tem um programa para isso há muito tempo?

O RunTime Assembler for Intel8051 v0.1.2.0 permite que você escreva o patch usando os mnemônicos e salve como listagem (.lst), como uma lista de códigos hexa pronta para fazer um paste em um editor hexadecimal (*.hex) e como um arquivo binário (*.bin).

Mas atenção: o programa só salva as linhas que você tiver selecionado do lado direito!

Isso é incomum para o New Age, mas este programa ele liberou com o código fonte em Delphi 7.
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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #34 on: July 13, 2007, 10:28:48 PM »
Menus Mediatek - Textos

Não espere entender muito do que vou mostrar abaixo. É parte de um projeto maior que só vai fazer sentido mesmo quando estiver pronto.

Você pode ver (mas não pode editar) a estrutura dos menus de um firmware no mtkRemaker:



Cada página de menu tem dois textos associados


No mtkRemaker:


Cada código hexadecimal destacado é o respectivo código do texto, como você pode ver no próprio mtkRemaker ou no mtkLangEditor. Se você mudar esse código, muda o texto exibido (mas eu não vou explicar como isso é feito agora).


Cada item de menu tem dois textos associados


No mtkRemaker:




Cada opção tem três textos associados


No mtkRemaker:


Eu estou mostrando textos em inglês porque esta costuma ser a linguagem default Mediatek. Os códigos dos textos são sempre os mesmos, não importando que linguagem você escolheu no Setup. Isso torna a adição e a alteração de textos algo relativamente simples.
« Last Edit: July 13, 2007, 10:34:22 PM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #35 on: July 13, 2007, 11:36:42 PM »
Menus Mediatek - Tipos de Itens

Item tipo 0008

Este tipo é o que exibe uma lista de opções:



No mtkRemaker:


1 (0008) - Tipo de Item
2 (FFFF) - Ícone associado ao item. "FFFF" significa "sem ícone" ("No Pic." no mtkRemaker)
3 (0092) - Primeiro Texto
4 (009A) - Segundo texto
5 (000D) - Endereço da EEPROM onde o valor é armazenado
6 (002B) - Endereço na shared memory onde o valor é armazenado
7 (0003) - É igual ao número de opções a exibir, menos um
8 (0000) - Valor default
9 (FF32B1) - Offset da lista de ponteiros para as opções (32B1) no mesmo banco
10 (1FD2) - Offset da rotina, no mesmo banco, que é chamada quando se seleciona qualquer das opções;


Item tipo 0003

Este tipo não exibe opção alguma. Selecioná-lo abre uma outra página de itens. Seis dos sete itens do menu Audio do Proview DVP-858 são do tipo 0003:



No mtkRemaker:


1 (0008) - Tipo de Item
2 (FFFF) - Ícone associado ao item. "FFFF" significa "sem ícone" ("No Pic." no mtkRemaker)
3 (008B) - Primeiro Texto
4 (00E4) - Segundo texto
5 (0002) - Número da página que será aberta quando este item for selecionado Nota: todos os documentos sobre menus do grupo MT13x9 dizem que aqui também tem um endereço EEPROM. Meus testes mostram que nisso os hackers do MT13x9 se enganaram ou não atualizaram os documentos.
6 (0000) - Aparentemente não é usado, mas sempre tem zeros
7 (0000) - Aparentemente não é usado, mas sempre tem zeros
8 (0000) - Aparentemente não é usado, mas sempre tem zeros
9 (000000) - Aparentemente não é usado, mas sempre tem zeros
10 (0000) - Aparentemente não é usado, mas sempre tem zeros


Item tipo 000D

Este tipo tem opções, mas elas são exibidas graficamente e não em forma de lista. Eu não tenho mais exemplos desse tipo por isso é difícil tirar conclusões. Mas parece que é usado exclusivamente para o ajuste Channel Delay.







Existem outros tipos de itens, mas falarei deles quando for oportuno.
« Last Edit: July 14, 2007, 05:45:35 AM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #36 on: July 14, 2007, 12:24:35 AM »
Menus Mediatek - Ícones





Perceba que existe uma pequena inconsistência no mtkRemaker. No mapa do menu ele chama o ícone 0019 de "Pic 25", porque 19 é 25 em hexadecimal. Até aí tudo normal. Mas na lista de ícones, como ele começa a contagem em "1", mas o primeiro ícone é o '00", a numeração decimal da lista não corresponde à hexadecimal entre colchetes. Fique atento a isso porque o código correto do item é o entre colchetes. É por esse número que ele é identificado em qualquer parte do firmware.

"FFFF" significa "sem ícone" ("No Pic." no mtkRemaker)
« Last Edit: July 14, 2007, 11:53:51 AM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #37 on: July 14, 2007, 01:36:16 AM »
Menus Mediatek - Números de página


Como eu disse anteriormente, itens do tipo 0003 não tem opções. Eles apontam para uma outra página. Você precisa converter para decimal e adicionar um:




Com esse número você pode localizar a página no mtkRemaker:


O firmware tem uma tabela de offsets com o endereço da definição de cada página. Sabendo onde está essa tabela, pelo número você encontra a localização da definição de qualquer página no firmware.

No firmware do Proview DVP-858, versão 20.07, a tabela começa no endereço 0x24473:
 


"FF" é uma espécie de "cabeçalho de ponteiro". Simplesmente ignore, porque apenas os próximos dois bytes são relevantes. Os destaques em vermelho são apenas para ajudar a demarcar os ponteiros visualmente. Não tem nenhum significado especial.

Na imagem eu estou destacando o offset para a definição da página 14 (password setup). Se você mudar esse offset poderá exibir uma outra página no lugar da página de senhas. Tanto uma página já existente no firmware quanto uma página criada por você, desde que esteja no mesmo banco (no caso, banco 2).

Por exemplo, o Proview DVP-858 tem uma página de escolha de região facilmente localizável com o mtkRemaker:


Mas que ninguém sabe ainda qual é a senha de acesso. Com um pequeno truque, você pode substituir a página Password (se você não tem filhos pequenos essa página não deve servir para nada) pela página de escolha de região.

O número da página é 27. Procure pelo 27o offset na tabela de offsets:



E troque o offset da posição 14 por esse. Ou seja: FF3140 => FF445D

Com isso, ao entrar no menu "Password", o que vai abrir é a página de escolha de região.

« Last Edit: July 19, 2007, 10:56:42 PM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #38 on: July 14, 2007, 02:03:24 PM »
Endereços EEPROM usados no Proview DVP-858

Obtidos no mtkRemaker, nos items do tipo 0008:

0004 | Component | Component
0005 | TV Mode | Set P-SCAN On/Off
0006 | Country Region | PG Country Region Code
0007 | Screen Saver | Screen Saver
0008 | Parental | Set Parental Control
0009 | Disc Menu | Preferred Menu Language
000A | Audio | Preferred Audio Language
000B | Subtitle | Preferred Subtitle Language
000C | TV Type | Set TV Standard
000D | TV Display | Set TV Display Mode
000E | OSD Lang | Set OSD Language
000F | Angle Mark | Set Angle Mark
0012 | PBC | Set PBC State
0013 | Last Memory | Set Last Memory State
0014 | Password Mode | Password Mode
0015 | Captions | Closed Caption
0016 | Region Code | Region Code
0022 | PanelŽlight | PanelŽlight
002A | SPDIF Output | Setup SPDIF
0030 | Downmix | Set Downmix Mode
0031 | Front Speaker | Setup Front Speaker
0032 | Center Speaker | SetupCenterŽSpeaker
0033 | Rear Speaker | Setup Rear Surround Speaker
0034 | Subwoofer | Setup Subwoofer
0037 | Test Tone | Test Tone
0038 | Post DRC | Post DRC
0039 | LPCM Out | Set LPCM SPDIF Output RATE
003D | EQ Type | Select Equalizer Type
0049 | MIC | MIC
0067 | PRO Logic II | PRO Logic II
006A | Reverb Mode | Reverb Mode
006E | Mode | Select PRO Logic II Mode
006F | Panorama | Set PRO Logic II Panorama Control
0070 | Center Width | Set PRO Logic II Center Width
0071 | Dimension | Set PRO Logic II Dimension Size
0072 | Bass Boost | Bass Boost
0073 | Super Bass | Super Bass
0074 | Treble Boost | Treble Boost
007A | Sharpness | Sharpness
007E | Gamma | Gamma
0080 | Luma Delay | Luma Delay
0087 | HDMI | HDMI
0088 | Resolution | Resolution
008F | Dual Mono | Dual Mono (1 + 1) Setup
0092 | Filter | Filter
00C8 | HD Mode | HD Mode

Dos itens acima, um deles talvez possa ser usado. "0049" é usado pelo Setup do Microfone, mas o Proview não pega microfone!

Outros endereços, obtidos pela análise da listagem feita pelo IDA, coletando chamadas a Pref_Getchar e excluindo os endereços já conhecidos:

0x17
0x18
0x19
0x1A
0x1B
0x1C
0x23
0x3A
0x4C
0x80
0x85

Podem existir outros endereços, que são usados indiretamente. Eu só compilei os que são usados carregando R7 explicitamente pouco antes de chamar Pref_Getchar. Existem umas 42 chamadas indiretas, precedidas por algo do tipo: "MOV R7,A", que podem se referir a endereços já da lista ou a outros. Eu vou tentar localizar Pref_Putchar para tentar determinar outros endereços antes de começar a chutar...
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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #39 on: July 14, 2007, 08:29:02 PM »
Como eu disse anteriormente, o item do tipo 0008 já inclui a definição do endereço de memória EEPROM usado. Esse endereço é usado imediatamente quando o item é exibido da tela sem que você precise escrever uma linha de código sequer. Se você criar um item do tipo 0008, no momento em que ele é exibido na tela o conteúdo do respectivo endereço EEPROM é lido. Se você mudar uma opção, o novo valor é imediatamente gravado. Não é necessário fazer nada em assembly.

Você pode ver o efeito disso se criar um item de menu que use o mesmo endereço de EEPROM usado por um outro item. Ao mudar em um e ir para a página onde está o outro, a mudança já estará lá, sem nem ser necessário sair e entrar no SETUP.

O endereço que existe no final da definição do tipo 0008 serve para quando você precisa que a mudança que você fez entre em vigor imediatamente (que ela seja interpretada imediatamente. Note que gravar e interpretar são dois passos distintos)

« Last Edit: January 12, 2008, 10:54:03 AM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #40 on: July 15, 2007, 12:30:34 AM »
Rotina SetMpeg4SubtitleParams do DVP-858;

Esta rotina é a chave do ajuste da posição da janela de legendas pelo setup;



B1:F4DD             SetMPeg4SubtitleParams:       ; CODE XREF: BankSw_263_B1_E1E7+10p
B1:F4DD E4          clr     A
B1:F4DE 90 FC 44    mov     DPTR, #XRAM_FC44      ; wX1.high
B1:F4E1 F0          movx    @DPTR, A
B1:F4E2 A3          inc     DPTR
B1:F4E3 F0          movx    @DPTR, A
B1:F4E4 90 FC 46    mov     DPTR, #XRAM_FC46      ; wY1.high
B1:F4E7 F0          movx    @DPTR, A
B1:F4E8 A3          inc     DPTR
B1:F4E9 F0          movx    @DPTR, A
B1:F4EA 90 FC 49    mov     DPTR, #XRAM_FC49      ; wX2.high
B1:F4ED 74 02       mov     A, #2
B1:F4EF F0          movx    @DPTR, A
B1:F4F0 A3          inc     DPTR
B1:F4F1 74 30       mov     A, #0x30 ; '0'        ; 0x230 = 560
B1:F4F3 F0          movx    @DPTR, A
B1:F4F4 90 FC 4D    mov     DPTR, #XRAM_FC4D      ; wY2.high (define a altura)
B1:F4F7 E4          clr     A
B1:F4F8 F0          movx    @DPTR, A
B1:F4F9 A3          inc     DPTR
B1:F4FA 74 5A       mov     A, #0x5A ; 'Z'
B1:F4FC F0          movx    @DPTR, A
B1:F4FD E4          clr     A
B1:F4FE 90 FB 8E    mov     DPTR, #XRAM_FB8E      ; Espaço entre linhas
B1:F501 F0          movx    @DPTR, A
B1:F502 7B 08       mov     R3, #8                ; Ansi Codepage = 0x08 (all chars)
B1:F504 7D 01       mov     R5, #1                ; alinhamento = 0x00 (esquerda), 0x01 (Centro), 0x02 (Direita)
B1:F506 7F 13       mov     R7, #0x13             ; Janela da legenda
B1:F508 12 1E B8    lcall   PSB_Set_Param_B1_BS
B1:F50B D3          setb    C
B1:F50C 22          ret
B1:F50C             ; End of function SetMPeg4SubtitleParams

« Last Edit: July 18, 2007, 12:39:26 AM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #41 on: July 15, 2007, 10:33:42 PM »
Proview DVP-858 : Como consertar a inversão de cores entre browser e legendas.
Publicado por mim originalmente no HTFORUM. Estou trazendo meus textos para cá.

Com isso, é possível ter fontes com contorno preto no browser, em vez dos contornos amarelo ou branco (dependendo da cor de preenchimento das legendas).

No firmware 20.07

B1:A506 02 => 03
B1:A509 04 => 14

Isso vai fazer com que o browser use as mesmas cores da legenda, na mesma ordem.

Para entender como isso funciona e também como separar as cores do browser das cores da legenda, leiam meu tutorial.
« Last Edit: July 18, 2007, 08:55:47 PM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #42 on: July 18, 2007, 08:06:06 PM »
O básico sobre "bank switching"

O microcontrolador 8032 embutido na CPU Mediatek só pode endereçar um programa de 64K. Para que o DVD player possa usar programas bem maiores, o firmware é dividido em bancos/páginas de 64K e usa-se uma técnica em que toda vez que é preciso acessar uma rotina que está em outro banco, esse banco é ativado (provavelmente é apenas um ponteiro apontando para o início dele), a rotina é executada e saindo dela o banco anterior é ativado de novo, continuando o programa. Por sorte, isso tudo ocorre bem rápido.

Rotinas que podem ser acessadas de qualquer lugar do programa tem seus "pontos de entrada" em uma tabela que existe no início de todos os bancos (a tabela é igual em todos), chamada Bank Transfer Table (BTT). Assim, se você acessa uma rotina que esteja na BTT usando a instrução LCALL 19E4, esse é o modo de acesso de qualquer lugar do firmware. É como se a rotina estivesse presente em todos os bancos, mas fisicamente pode estar em qualquer um deles. Se você seguir as instruções na BTT irá descobrir onde realmente está a rotina.

Se você quiser de um certo banco saltar para uma rotina que está em outro mas que não está na BTT, pode ser mais fácil fazer uma cópia dela no banco onde você quer usá-la.

O exemplo abaixo é de quatro entradas nas BTTs em dois bancos diferentes. Perceba que são idênticas em tudo, exceto o banco onde estão. Os rótulos que você vê são os dados pelo script MT13x9 no IDA. A primeira está nomeada "Pref_Getchar" porque eu dei o nome depois que a localizei no firmware. As outras três eu não sei para que servem por isso estão com os nomes "genéricos" dados pelo script.


Code: [Select]
B1:19E4 90 F2 2B    mov     DPTR, #Pref_Getchar
B1:19E7 02 19 17    ljmp    B1_Bank_5
B1:19EA 90 C9 4B    mov     DPTR, #BankSw_23_B4_C94B
B1:19ED 02 18 FF    ljmp    B1_Bank_4
B1:19F0 90 B0 0C    mov     DPTR, #BankSw_24_B1_B00C
B1:19F3 02 18 B7    ljmp    B1_Bank_1
B1:19F6 90 B1 7E    mov     DPTR, #BankSw_25_B1_B17E
B1:19F9 02 18 B7    ljmp    B1_Bank_1


Code: [Select]
B2:19E4 90 F2 2B    mov     DPTR, #Pref_Getchar
B2:19E7 02 19 17    ljmp    B2_Bank_5
B2:19EA 90 C9 4B    mov     DPTR, #BankSw_23_B4_C94B
B2:19ED 02 18 FF    ljmp    B2_Bank_4
B2:19F0 90 B0 0C    mov     DPTR, #BankSw_24_B1_B00C
B2:19F3 02 18 B7    ljmp    B2_Bank_1
B2:19F6 90 B1 7E    mov     DPTR, #BankSw_25_B1_B17E
B2:19F9 02 18 B7    ljmp    B2_Bank_1


Como você pode ver, estando em qualquer banco, se você der um LCALL 19E4 (Pref_Getchar, no Proview DVP-858), DPTR é carregado com F22B (o endereço real da rotina no banco destino) e a rotina que ativa o banco destino é chamada (LJMP 1917). Note que as duas últimas entradas são para o banco 1, por isso os dois saltos são para a mesma rotina (18B7), apenas mudando o valor carregado em DPTR.

Parece fácil, mas ainda não testei se dá para criar um salto próprio.

É importante que você entenda isso para que não se surpreenda com o fato de que todas as rotinas são chamadas com endereços de apenas 16 bits, quando o tamanho do firmware ultrapassa isso. E porque o firmware é dividido em bancos, claro.

Atenção: tenha em mente que uma chamada à rotina feita do próprio banco onde ela está será feita com o endereço real, sem passar pelo mecanismo de Bank Switch. Fique atento a isso, porque senão você poderá não identificar essas chamadas. 
« Last Edit: July 21, 2007, 06:27:21 PM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #43 on: July 18, 2007, 08:33:55 PM »
Como o firmware lê preferências do usuário

hardware

Todas as preferências são armazenadas no pequeno chip de memória EEPROM, que costuma ter de de 256 bytes (24C02) a 2000 bytes (24C16)

Lenoxx DV-406: 24C04 - 512 bytes
Philips DVP5100K: 24C08 - 1000 bytes
Philips DVP3040K: 24C08 - 1000 bytes

Os aparelhos com HDMI como o Philips DVP5965K e o Proview DVP-858 tem dois chips: um 24C08 (1000bytes) e um 24C16(2000 bytes). Pressupõe-se que o 24C16 seja destinado ao uso pelo chip HDMI.

software

O firmware tem rotinas específicas para escrever e ler na eeprom, um byte por vez. Os hackers do MT13x9 chamam essas rotinas de Pref_GetChar (ler) e Pref_PutChar (escrever). Para usar essas rotinas você só precisa carregar os registradores R6 e R7 com o endereço do byte que você quer acessar e, no caso de Pref_GetChar, receber o valor lido em R7.

O primeiro passo, claro, é descobrir em que endereço estão as rotinas no seu firmware. Isso não é padronizado. Como esta rotina específica costuma ser acessada por todos os bancos do firmware, ela é uma das rotinas na tabela "Bank Switch".

No caso do Proview DVP-858, para ler do endereço 0x87 da EEPROM e colocar o resultado no acumulador, basta fazer algo assim:

B2:7E49 7F 87       mov     R7, #0x87 ; 'ç'
B2:7E4B 7E 00       mov     R6, #0
B2:7E4D 12 19 E4    lcall   Pref_GetChar_B2_BS?
B2:7E50 EF          mov     A, R7

Daí você faz o que quiser. Nem é necessário usar o acumulador, porque você pode até chamar logo em seguida uma rotina que receba diretamente um de seus parâmetros por R7.

Em teoria, R6 é usado para compor o endereço e é maior que zero se o endereço a acessar for maior que 255. Mas nenhum dos endereços acima de 255 (e até alguns abaixo) funcionou nos meus testes.

A compreensão de Pref_GetChar é essencial para qualquer trabalho com menus Mediatek. Como os valores são gravados diretamente pelo próprio mecanismo de menus (como expliquei anteriomente), saber onde está Pref_Putchar (gravar) não é necessário na maioria dos casos.




« Last Edit: July 18, 2007, 08:53:03 PM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #44 on: July 19, 2007, 06:43:41 PM »
Como é feita a escolha de cores e fontes no meu firmware DVP-858

Primeira parte: o menu

Nota: Os menus podem ser quase que inteiramente testados sem uma única linha de assembly do firmware ser alterada (passo 2). Ao terminar este passo os itens precisam ser visíveis e você deve poder escolher opções normalmente.





Criação de menus é uma das coisas mais complexas e tediosas que estudei no firmware Mediatek. Os próprios documentos publicados pelo grupo MT13x9 são confusos demais, tralvez por estarem em um inglês capenga porque  essa não é a língua de nenhum dos hackers principais do grupo. Eu já comecei a arranhar o assunto em posts anteriores neste tópico, mas ainda não é o suficiente para saber como criar um do zero.

Como eu não estou preparado (nem com saco) para explicar como a criação de menus funciona, vou mostrar pelo menos como enxertar no firmware Proview DVP-858 20.07 o menu que criei para o meu firmware experimental, já com as opções de mudança de cor, 8 fontes, versão e escolha de região:

No endereço 2EC00, insira a seguinte string hexa:

05 0D 05 0D 03 03 00 05 0E 05 0E 03 04 04 05 0F 05 0F 03 05 06 05 10 05 10 03 06 08 05 11 05 11 03 07 0A 05 12 05 12 03 08 0C 05 13 05 13 03 09 0E 05 14 05 14 03 0A 10 FF EC 00 FF EC 07 FF EC 0E FF EC 15 FF EC 1C FF EC 23 FF EC 2A FF EC 31 00 08 FF FF 05 0C 05 0C 00 06 00 00 00 07 00 00 FF EC 38 00 00 05 16 05 16 05 18 0F 05 17 05 17 05 19 02 FF EC 65 FF EC 6C 00 08 FF FF 05 15 05 15 00 71 00 00 00 01 00 0F FF EC 73 00 00 05 17 05 17 03 03 00 FF EC 8E 00 03 FF FF 01 A1 01 A1 00 15 00 00 00 00 00 00 FF EC 95 00 00 02 BF 02 BF 02 BF 00 02 C0 02 C0 02 C0 01 02 C1 02 C1 02 C1 02 02 C2 02 C2 02 C2 03 02 C3 02 C3 02 C3 04 02 C4 02 C4 02 C4 05 02 C5 02 C5 02 C5 06 FF EC AD FF EC B4 FF EC BB FF EC C2 FF EC C9 FF EC D0 FF EC D7 00 08 FF FF 01 EB 01 EB 00 16 00 3F 00 06 00 00 FF EC DE 00 00 01 78 01 78 04 F1 00 01 79 01 79 04 F2 01 FF ED 08 FF ED 0F 00 08 FF FF 00 D3 00 D3 00 14 00 00 00 01 00 00 FF ED 16 1F BA 01 2F 02 97 00 00 00 FF ED 31 00 08 FF FF 01 30 02 97 FF FF 00 00 00 00 00 00 FF ED 38 1F C0 FF EC 50 FF EC 79 FF EC 98 FF EC F3 FF ED 1C FF ED 3B 03 00 CF 00 00 06 FF ED 50 00 00

Tudo aí em cima é a estrutura do menu. Não há uma única instrução de assembly aí.


Em negrito, os endereços EEPROM usados pelo meu firmware experimental. basta mudar esses números e as rotinas correspondentes (veja meu post seguinte) para experimentar com outros endereços de EEPROM.

Inserir o menu não basta. Falta ainda inserir o ponteiro para ele no meu principal.

No endereço 2449B

31 40 => ED 62

E o menu será exibido


No meu firmware, verifique que strings foram adicionadas por mim no final de Language 00 e coloque as versões em português em Language 01. Isso deve bastar para que você tenha escolha de cor e fontes no setup.

E, claro, coloque mais 5 fontes..
« Last Edit: July 21, 2007, 06:44:25 PM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #45 on: July 19, 2007, 07:42:47 PM »
Segunda parte: mudanças no código assembly

Nota: não serve para nada sem a criação dos menus


A rotina abaixo é a sub_style primária, mostrando os dois pontos que modifiquei para chamar as minhas rotinas 


B1:DC91             Sub_Style:                    ; CODE XREF: B1_998C+5Cp
B1:DC91 EF          mov     A, R7
B1:DC92 24 FE       add     A, #0xFE ; '¦'
B1:DC94 60 53       jz      B1_DCE9
B1:DC96 14          dec     A
B1:DC97 60 50       jz      B1_DCE9
B1:DC99 14          dec     A
B1:DC9A 60 59       jz      B1_DCF5
B1:DC9C 24 03       add     A, #3
B1:DC9E 70 58       jnz     B1_DCF8
B1:DCA0 12 FF 00    lcall   B1_FF00               ; Chama a rotina que escolhe a fonte
B1:DCA3 00          nop
B1:DCA4 00          nop
B1:DCA5 D2 46       setb    RAM_28.6
B1:DCA7 7F 13       mov     R7, #0x13
B1:DCA9 12 1D D4    lcall   B1_BS_190_B5_13E8
B1:DCAC 7F 13       mov     R7, #0x13
B1:DCAE 12 1D DA    lcall   B1_BS_191_B5_A4B2
B1:DCB1 12 FF 40    lcall   B1_FF40               ; Chama a rotina que define a cor da legenda
B1:DCB4 00          nop
B1:DCB5 00          nop
B1:DCB6 00          nop
B1:DCB7 00          nop
B1:DCB8 00          nop
B1:DCB9 00          nop
B1:DCBA 00          nop
B1:DCBB 00          nop
B1:DCBC 00          nop
B1:DCBD 00          nop
B1:DCBE 00          nop
B1:DCBF 12 1D E0    lcall   B1_BS_192_B5_D53E
B1:DCC2 E4          clr     A
B1:DCC3 FD          mov     R5, A
B1:DCC4 7F 13       mov     R7, #0x13
B1:DCC6 12 1E B2    lcall   B1_BS_227_B5_E5A1


Abaixo, trecho da Sub_Style secundária, mostrando o ponto de modificação

B1:E9FE 90 FC AB    mov     DPTR, #XRAM_FCAB
B1:EA01 E0          movx    A, @DPTR
B1:EA02 64 03       xrl     A, #3
B1:EA04 70 35       jnz     B1_EA3B
B1:EA06 7F 06       mov     R7, #6
B1:EA08 12 A9 48    lcall   BankSw_241_B1_A948
B1:EA0B 50 2E       jnc     B1_EA3B
B1:EA0D D2 46       setb    RAM_28.6
B1:EA0F 7F 13       mov     R7, #0x13
B1:EA11 12 1D D4    lcall   B1_BS_190_B5_13E8
B1:EA14 7F 13       mov     R7, #0x13
B1:EA16 12 1D DA    lcall   B1_BS_191_B5_A4B2
B1:EA19 12 FF 00    lcall   B1_FF00               ; Aqui eu chamo minha rotina que escolhe a fonte
B1:EA1C 12 FF 40    lcall   B1_FF40               ; E aqui a que escolhe a cor
B1:EA1F 00          nop
B1:EA20 00          nop
B1:EA21 00          nop
B1:EA22 00          nop
B1:EA23 00          nop
B1:EA24 00          nop
B1:EA25 00          nop
B1:EA26 00          nop
B1:EA27 12 1D E0    lcall   B1_BS_192_B5_D53E



Note que as duas Sub_style chamam as mesmas rotinas que eu criei. Não é preciso criar versões separadas.

Agora, as rotinas:


Escolha de fonte

B1:FF00 7F 06       mov     R7, #6                ; Endereço 0x06 da eeprom
B1:FF02 7E 00       mov     R6, #0
B1:FF04 12 19 E4    lcall   Pref_Getchar_B1BS
B1:FF07 12 1E 70    lcall   OSD_SetFont_B1BS
B1:FF0A 22          ret



Escolha da cor
É importante que você note que esta rotina é basicamente o que foi apagado da Sub_style, com o acréscimo inicial das instruções que pegam o valor na EEPROM e mínimas adaptações.
 
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


Nota 1: os endereços EEPROM que estou usando ainda são experimentais. Eles estão sendo usados por outras opções do menu, mas funcionam.

Nota 2: as duas rotinas estão bem espaçadas no espaço livre do banco 1. Isso é apenas para facilitar a identificação e o debug e os espaços devem ser removidos em uma versão final do firmware.
« Last Edit: August 02, 2007, 08:09:41 AM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #46 on: July 19, 2007, 09:04:57 PM »
Como definir que fonte é usada por cada string gravada no firmware

Talvez você tenha reparado dois posts atrás que na minha imagem das opções de fonte do meu firmware cada uma delas é mostrada com a respectiva fonte.



Quando eu vi isso pela primeira vez em um firmware do DVP5100 achei que fosse algo complexo de fazer, mas é ridiculamente simples, com as ferramentas existentes.

Use o mtkLangEditor:



Na coluna indicada, cada número corresponde à fonte que você deseja usar, conforme você pode ver no mtkRemaker. A numeração não é seqüencial como você pode ver. Confira no mtkRemaker.

Depois que você tiver salvo a modificação e abrir de novo o Language Code, verá algo estranho:



Isso é normal. As palavras foram apenas substituídas por uma representação numérica do texto considerando a ordem na respectiva fonte. O motivo disso eu não conheço. Nota: a numeração é hexadecimal e começa em zero, enquanto a vista no mtkremaker é decimal e começa em um.


« Last Edit: July 20, 2007, 12:37:23 AM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #47 on: July 22, 2007, 01:54:09 PM »
Configuração do IDA - i51.cfg

Apesar de não ser indispensável, existe um passo na instalação do IDA que pode ajudar no reconhecimento do código.

Numa instalação padrão do IDA, quando você escolhe o processador 8051 se depara com esta tela:



Onde você simplesmente dá OK para prosseguir. O procedimento a seguir vai mudar isso para que você possa escolher esta opção:



Dentro de alguns ZIPs com os scripts de parse (*.idc), você vai encontrar um arquivo i51.cfg. O conteúdo desse arquivo deve ser mesclado ao conteúdo do mesmo arquivo já existente na pasta CFG do IDA.

Por exemplo, este é o conteúdo que precisa ser mesclado. Eu dividi as duas seções do arquivo com cores diferentes:

.default MT1389

.MT1389
; Mediatek 1389

; MEMORY MAP
area DATA RAM            0x00000:0x00080
area DATA FSR            0x00080:0x00100
area XTRN XRAM           0x0F800:0x0FF00
area CODE ROM            0x00000:0x10000

;area CODE ROM1            0x10000:0x20000
;area CODE ROM2            0x20000:0x30000
;area CODE ROM3            0x30000:0x40000
;area CODE ROM4            0x40000:0x50000
;area CODE ROM5            0x50000:0x60000
;area CODE ROM6            0x60000:0x70000
;area CODE ROM7            0x70000:0x80000

; Interrupt and reset vector assignments
interrupt Reset       0x0000   RESET
interrupt ExtInt0     0x0003   External interrupt 0
interrupt TimInt0     0x000B   Timer 0 overflow
;interrupt IE1        0x0013   External interrupt 1
;interrupt TF1        0x001B   Timer 1 overflow
;interrupt RI0_TI0    0x0023   Serial channel 0
interrupt TimInt2     0x002B   Timer 2 overflow/ext. reload
;interrupt IADC       0x0043   A/D converter
;interrupt IEX2       0x004B   External interrupt 2
;interrupt IEX3       0x0053   External interrupt 3
;interrupt IEX4       0x005B   External interrupt 4
;interrupt IEX5       0x0063   External interrupt 5
;interrupt IEX6       0x006B   External interrupt 6
;interrupt RI1_TI1    0x0083   Serial channel 1
;interrupt CTF        0x009B   Compare timer overflow


; INPUT/OUTPUT PORTS
P0              0x0080   Port 0
P0.P0.7          7
P0.P0.6          6
P0.P0.5          5   
P0.P0.4          4   
P0.P0.3          3
P0.P0.2          2
P0.P0.1          1
P0.P0.0          0
SP              0x0081  Stack Pointer
DPL             0x0082  Data Pointer, Low Byte
DPH             0x0083  Data Pointer, High Byte
;RES84      0x0084  RESERVED
;RES85      0x0085  RESERVED
WDTREL          0x0086  Watchdog Timer Reload Reg.
PCON            0x0087  Power Control Register
TCON            0x0088  Timer Control Register
TMOD            0x0089  Timer Mode Register
TL0             0x008A  Timer 0, Low Byte
TL1             0x008B  Timer 1, Low Byte
TH0             0x008C  Timer 0, High Byte
TH1             0x008D  Timer 1, High Byte
;RESERVED008E    0x008E   RESERVED
;RESERVED008F    0x008F   RESERVED
P1              0x0090   Port 1
P1.SDA           7   SDA data EEPROM
P1.SCL           6   SCL clock EEPROM
P1.DATA_PIN      5   VFD DATA PIN
P1.STROBE_PIN    4   VFD STROBE PIN
P1.CLK_PIN       3   VFD CLK PIN
P1.P1.A18        2   A18
P1.P1.A17        1   A17
P1.T2            0   T2
;RESERVED0091    0x0091   RESERVED
DPSEL           0x0092   Data Pointer Select Register
;RESERVED0093    0x0093   RESERVED
;RESERVED0094    0x0094   RESERVED
ASCL            0x0095   
ADAT            0x0096   
ACON            0x0097   
SCON            0x0098   Serial Channel 0 Control Reg.
SBUF            0x0099   Serial Channel 0 Buffer Reg.
IEN2            0x009A   Interrupt Enable Register 2
SCON2           0x009B   Serial Channel 1 Control Reg.
SBUF2           0x009C   Serial Channel 1 Buffer Reg.,
SREL2           0x009D   Serial Channel 1 Reload Reg., low byte
;RESERVED009E    0x009E   RESERVED
;RESERVED009F    0x009F   RESERVED
P2              0x00A0   Port 2
P2.P2.7          7
P2.P2.6          6
P2.P2.5          5   
P2.P2.4          4   
P2.P2.3          3
P2.P2.2          2
P2.P2.1            1
P2.P2.0            0
IEN0            0x00A8   Interrupt Enable Register 0
IEN0.EA         7
IEN0.6          6
IEN0.5          5   
IEN0.4          4   
IEN0.3          3
IEN0.2          2
IEN0.1           1
IEN0.0           0
IP0             0x00A9   Interrupt Priority Register 0
;S0RELL         0x00AA   Serial Channel 0, Reload Reg., low byte
PWM4P           0x00AA
PWM4W           0x00AB
;RESERVED00AC    0x00AC   RESERVED
;RESERVED00AD    0x00AD   RESERVED
WMKEY           0x00AE
;RESERVED00AF    0x00AF   RESERVED
P3              0x00B0   Port 3
P3.P3.7         7
P3.P3.6           6
P3.T1           5   
P3.T0          4   
P3.P3.3           3
P3.P3.2       2   Select Flash
P3.P3.1           1
P3.P3.0           0
PSCL0L          0x00B1
PSCL0H          0x00B2   RESERVED
PSCL1L          0x00B3   RESERVED
PSCL1H          0x00B4   RESERVED
;RESERVED00B5    0x00B5   RESERVED
;RESERVED00B6    0x00B6   RESERVED
IPA             0x00B7   RESERVED
;IEN1            0x00B8   Interrupt Enable Register 1
IP              0x00B8   
IP1             0x00B9   Interrupt Priority Register 1
S0RELH          0x00BA   Serial Channel 0, Reload Reg., high byte
S1RELH          0x00BB   Serial Channel 1, Reload Reg.,high byte
;RESERVED00BC    0x00BC   RESERVED
;RESERVED00BD    0x00BD   RESERVED
;RESERVED00BE    0x00BE   RESERVED
;RESERVED00BF    0x00BF   RESERVED
;IRCON           0x00C0   Interrupt Request Control Register
P4              0x00C0   Interrupt Request Control Register
CCEN            0x00C1   Comp./Capture Enable Reg.
CCL1            0x00C2   Comp./Capture Reg. 1, Low Byte
CCH1            0x00C3   Comp./Capture Reg. 1, High Byte
CCL2            0x00C4   Comp./Capture Reg. 2, Low Byte
CCH2            0x00C5   Comp./Capture Reg. 2, High Byte
CCL3            0x00C6   Comp./Capture Reg. 3, Low Byte
CCH3            0x00C7   Comp./Capture Reg. 3, High Byte
T2CON           0x00C8   Timer 2 Control Register
;CC4EN           0x00C9   Comp./Capture Enable 4 Reg.
T2MOD           0x00C9   Comp./Capture Enable 4 Reg.
RCAP2L          0x00CA   Com./Rel./Capt. Reg. Low Byte
RCAP2H          0x00CB   Com./Rel./Capt. Reg. High Byte
TL2             0x00CC   Timer 2, Low Byte
TH2             0x00CD   Timer 2, High Byte
CCL4            0x00CE   Comp./Capture Reg. 4, Low Byte
CCH4            0x00CF   Comp./Capture Reg. 4, High Byte
PSW             0x00D0   Program Status Word Register
S1SETUP         0x00D1   
S2SETUP         0x00D2

RAMBUF          0x00D4
DDCDAT          0x00D5
DDCADR          0x00D6
DDCCON          0x00D7
S1CON           0x00D8
S1STA           0x00D9
S1DAT           0x00DA
S1ADR           0x00DB
S2CON           0x00DC
S2STA           0x00DD
S2DAT           0x00DE
S2ADR           0x00DF

;CML0            0x00D2   Compare Register 0, Low Byte
;CMH0            0x00D3   Compare Register 0, High Byte
;CML1            0x00D4   Compare Register 1, Low Byte
;CMH1            0x00D5   Compare Register 1, High Byte
;CML2            0x00D6   Compare Register 2, Low Byte
;CMH2            0x00D7   Compare Register 2, High Byte
;ADCON0          0x00D8   A/D Converter Control Register 0
;ADDAT           0x00D9   A/D Converter Data Register
;DAPR            0x00DA   D/AConverter Program Register
;P7              0x00DB   Port 7, Analog/Digital Input
;ADCON1          0x00DC   A/D Converter Control Register 1
;P8              0x00DD   Port 8, Analog/Digital Input, 4-bit 0DD
;CTRELL          0x00DE   Com. Timer Rel. Reg., Low Byte
;CTRELH          0x00DF   Com. Timer Rel. Reg., High Byte

ACC             0x00E0   Accumulator
;CTCON           0x00E1   Com. Timer Control Register
USCL            0x00E1
CML3            0x00E2   Compare Register 3, Low Byte
CMH3            0x00E3   Compare Register 3, High Byte
CML4            0x00E4   Compare Register 4, Low Byte
CMH4            0x00E5   Compare Register 4, High Byte

UDT1            0x00E6
UDT0            0x00E7

UISTA           0x00E8
UIEN            0x00E9
UCON0           0x00EA
UCON1           0x00EB
UCON2           0x00EC
USTA            0x00ED
UADR            0x00EE
UDR0            0x00EF

;CML5            0x00E6   Compare Register 5, Low Byte
;CMH5            0x00E7   Compare Register 5, High Byte
;P4              0x00E8   Port 4
;MD0             0x00E9   Multiplication/Division Register 0
;MD1             0x00EA   Multiplication/Division Register 1
;MD2             0x00EB   Multiplication/Division Register 2
;MD3             0x00EC   Multiplication/Division Register 3
;MD4             0x00ED   Multiplication/Division Register 4
;MD5             0x00EE   Multiplication/Division Register 5
;ARCON           0x00EF   Arithmetic Control Register

B               0x00F0   B-Register
;RESERVED00F1    0x00F1   RESERVED
CML6            0x00F2   Compare Register 6, Low Byte
CMH6            0x00F3   Compare Register 6, High Byte
CML7            0x00F4   Compare Register 7, Low Byte
CMH7            0x00F5   Compare Register 7, High Byte
CMEN            0x00F6   Compare Enable Register
CMSEL           0x00F7   Compare Input Select
P5              0x00F8   Port 5
;RESERVED00F9    0x00F9   RESERVED
P6              0x00FA   Port 6
;RESERVED00FB    0x00FB   RESERVED
;RESERVED00FC    0x00FC   RESERVED
;RESERVED00FD    0x00FD   RESERVED
;RESERVED00FE    0x00FE   RESERVED
;RESERVED00FF    0x00FF   RESERVED



A primeira linha é uma diretiva completa:

.default MT1389

Ela informa que a seção MT1389 (a seguinte inteira) é a seção default quando se escolhe o tipo de processador i51.

Você precisa substituir a diretiva .default já existente no arquivo pela diretiva acima. Normalmente, a diretiva que é instalada pelo IDA é esta:
.default C517

Veja na primeira figura deste texto como isso pré-seleciona "C517".

O restante, toda a seção .MT1389, precisa ser acrescentado ao arquivo i51.cfg.


Lembre-se: este procedimento não é indispensável. Dá para trabalhar perfeitamente no código usando as opções padrão do IDA. Os scripts não vão dar erro algum pela falta desta configuração. E eu não consegui perceber qualquer diferença entre usar ou não isto. Mas não estaria nos arquivos se não fosse para ajudar.

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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #48 on: July 22, 2007, 02:17:22 PM »
Configuração do IDA - IDA.CFG


Além do i51.cfg, os ZIPs do MT13x9 vem com outro arquivo de configuração: IDA.CFG. Eu vou explicar para que ele serve e como mesclar seu conteúdo com o IDA.CFG já criado na instalação.

Abaixo, o IDA.CFG do jeito que vem do grupo MT13x9, com separação de seções por cor (vermelho, preto e azul) dada por mim:

[size=07pt]DEFAULT_PROCESSOR = {
/* Extension    Processor */
  "com" :       ""                      // IDA will try the specified
  "exe" :       ""                      // extensions if no extension is
  "dll" :       ""                      // given.
  "drv" :       ""
  "sys" :       ""
//  "bin" :       ""                      // Empty processor means the default processor
  "bin" :       "8051"                  // i8051 for MTK 1389
  "ovl" :       ""
  "ovr" :       ""
  "ov?" :       ""
  "nlm" :       ""
  "lan" :       ""
  "dsk" :       ""
  "obj" :       ""
  "prc" :       "68000"                 // PalmPilot programs
  "axf" :       "arm710a"
  "h68" :       "68000"                 // MC68000 for *.H68 files
  "i51" :       "8051"                  // i8051   for *.I51 files
  "sav" :       "pdp11"                 // PDP-11  for *.SAV files
  "rom" :       "z80"                   // Z80     for *.ROM files
  "cla*":       "java"
  "s19":        "6811"
  "o":          ""
  "*":          ""                      // Default processor
}


//-------------------------------------------------------------------------

#ifdef __ARM__
//
// 17.07.98: I reenable the final analysis pass because
//           it makes the disassembly better.
//           The only case when it makes the disassembly worse
//           is for AIF/AOF file formats because they contain
//           many text ascii strings in the code segment and
//           IDA converts them to instructions.
//           But the final analysis pass does a good job
//           in other cases.
// ANALYSIS     = 0x7FFF        // Disable final analysis pass
//

//NameChars =
//        "_0123456789"
//        "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
//        "abcdefghijklmnopqrstuvwxyz";

ARM_SIMPLIFY     = YES          // Simplify instructions and replace them
                                // by pseudo-instructions

ARM_NO_PTR_DEREF = NO           // Disable using of =label notation
                                // This notation makes disassembly cleaner

ARM_USE_MACROS   = YES          // Use macro-instructions like MOVL

ARM_ARCHITECTURE_5 = YES        // Disassemble for ARM architecture 5 or higher

ARM_NO_ARM_THUMB_SWITCH = NO    // No automatic ARM-THUMB switch

SHOW_BORDERS            = YES
SHOW_SEGMENT_BORDERS    = YES
SHOW_BASIC_BLOCKS       = YES
OPCODE_BYTES            = 8
SHOW_SP                 = YES

#endif // __ARM__

//-------------------------------------------------------------------------

#ifdef __I51__                  // Intel 8051, 80251 processors

DUMMY_NAMES_TYPE = NM_SHORT

SHOW_BORDERS            = YES
SHOW_SEGMENT_BORDERS    = YES
OPCODE_BYTES            = 4
INDENTION               = 10
SHOW_BASIC_BLOCKS       = YES

#endif  // __I51__

[/size]

São três seções e todas elas já existem no IDA.CFG original. Você vai alterá-las.

Na seção DEFAULT_PROCESSOR, a única diferença para o original é esta aqui:

//  "bin" :       ""                      // Empty processor means the default processor
  "bin" :       "8051"                  // i8051 for MTK 1389

Esta mudança fará com que toda vez que você abrir um arquivo com extensão .bin o processador 8051 já esteja pré-selecionado. Não sei quanto a você, mas me enche o saco ter que escolher todas as vezes o processador na lista, por isso achei isso útil.

No caso das seções __ARM__ e __I51__, eu estou simplesmente substituindo o conteúdo original às cegas, sem me importar com o que fazem todas as opções. Mas esta aqui é óbvia:

OPCODE_BYTES            = 4 // Mostra automaticamente os opcodes à direita das instruções

o default do IDA é você ter que ir sempre em Options - General e colocar o número de opcodes que quer exibir. Com essa mudança na configuração todo firmware que você abrir já vai mostrando quatro opcodes (i51) ou oito (ARM)

INDENTION               = 10 // Ajusta a distância das instruções para a margem esquerda da tela

Equivale à opção Instructions Indention em Options - General.


Mesmo sem entender exatamente (ainda) o que todas essas configurações fazem, meu palpite é que apenas automatizam algumas configurações do IDA. Você não vai deixar de localizar rotinas por não fazer as configurações.
« Last Edit: July 22, 2007, 03:05:21 PM by 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 eneris

  • Novato Prolixo
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #49 on: July 25, 2007, 08:10:45 PM »
Olá Ryan.

Dei uma procurada la no grupo do yahoo, a procura de informação sobre como dar suporte a arquivos acentuados no browser mas nao tive muito sucesso, eu encontrei alguns documentos do newage e do borus, mas so que o unico que cheguei perto foi (Patching_HU3899_from_A_to_Z) onde mostra apenas o endereço no player HU3899, muito vago a explicação. Você tem alguma ideia de como pode ser feito isso?

PS: Se aqui não for o local certo pra esta postagem pode apagar ou mover sem problema. Postei aqui pois como é um topico de descobertas achei mais apropriado.

Obrigado!

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #50 on: July 25, 2007, 08:26:26 PM »
Eneris,

Eu ainda não procurei essa informação, porque ainda não precisei trabalhar com nenhum firmware sem suporte a acentuação no browser. O único de que me lembro agora é o do DVP642, que nem é Mediatek.

Que aparelho está com esse problema?

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 eneris

  • Novato Prolixo
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #51 on: July 25, 2007, 08:28:16 PM »
O Philips 5965K tem este problema.
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #52 on: July 25, 2007, 11:28:41 PM »
Tem razão!

Eu tenho até um item a respeito na Tabela Comparativa: "Suporta Acentuação em nomes de pastas" e tinha me esquecido dele.

Vou colocar isso na lista de coisas para descobrir.
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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #53 on: July 26, 2007, 02:11:11 AM »
Proview DVP-858 v20.07

  • Como definir a fonte usada na linha de diretório
  • Como definir a fonte usada no browser
  • Como aumentar o número de caracteres exibíveis na linha de diretório


Esta é a rotina que o grupo MT13x9 chama de Dir_DispDirline:

B1:78FB             ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B1:78FB
B1:78FB
B1:78FB             Dir_Disp_Dirline:             ; CODE XREF: B1_A481+70p
B1:78FB                                           ; B1_A481+77p ...
B1:78FB
B1:78FB 20 45 03    jb      RAM_28.5, B1_7901
B1:78FE 02 7A 26    ljmp    B1_7A26
B1:7901             ; ---------------------------------------------------------------------------
B1:7901
B1:7901             B1_7901:                      ; CODE XREF: Dir_Disp_Dirlinej
B1:7901 7F 2B       mov     R7, #0x2B ; '+'
B1:7903 7E 02       mov     R6, #2
B1:7905 12 1E 16    lcall   B1_BS_201_B3_DBEF
B1:7908 90 FB 9B    mov     DPTR, #XRAM_FB9B
B1:790B 12 0A 38    lcall   B1_?C?LSTXDATA
B1:790E 90 FB 9B    mov     DPTR, #XRAM_FB9B
B1:7911 E0          movx    A, @DPTR
B1:7912 FC          mov     R4, A
B1:7913 A3          inc     DPTR
B1:7914 E0          movx    A, @DPTR
B1:7915 FD          mov     R5, A
B1:7916 A3          inc     DPTR
B1:7917 E0          movx    A, @DPTR
B1:7918 FE          mov     R6, A
B1:7919 A3          inc     DPTR
B1:791A E0          movx    A, @DPTR
B1:791B 24 02       add     A, #2
B1:791D FF          mov     R7, A
B1:791E E4          clr     A
B1:791F 3E          addc    A, R6
B1:7920 FE          mov     R6, A
B1:7921 E4          clr     A
B1:7922 3D          addc    A, R5
B1:7923 FD          mov     R5, A
B1:7924 E4          clr     A
B1:7925 3C          addc    A, R4
B1:7926 FC          mov     R4, A
B1:7927 90 FB 9B    mov     DPTR, #XRAM_FB9B
B1:792A 12 0A 38    lcall   B1_?C?LSTXDATA
B1:792D 90 FB 9C    mov     DPTR, #XRAM_FB9C
B1:7930 E0          movx    A, @DPTR
B1:7931 FF          mov     R7, A
B1:7932 A3          inc     DPTR
B1:7933 E0          movx    A, @DPTR
B1:7934 FC          mov     R4, A
B1:7935 A3          inc     DPTR
B1:7936 E0          movx    A, @DPTR
B1:7937 FD          mov     R5, A
B1:7938 12 1E 1C    lcall   B1_BS_202_B0_E77B
B1:793B 90 FB 99    mov     DPTR, #XRAM_FB99
B1:793E EF          mov     A, R7
B1:793F F0          movx    @DPTR, A
B1:7940 90 FC 44    mov     DPTR, #XRAM_FC44      ; Coordenada horizontal (HI)
B1:7943 E4          clr     A
B1:7944 F0          movx    @DPTR, A
B1:7945 A3          inc     DPTR
B1:7946 74 22       mov     A, #0x22 ; '"'
B1:7948 F0          movx    @DPTR, A
B1:7949 90 FC 46    mov     DPTR, #XRAM_FC46      ; Coordenada vertical (HI)
B1:794C E4          clr     A
B1:794D F0          movx    @DPTR, A
B1:794E A3          inc     DPTR
B1:794F 74 06       mov     A, #6
B1:7951 F0          movx    @DPTR, A
B1:7952 7D 07       mov     R5, #7
B1:7954 7F 10       mov     R7, #0x10
B1:7956 12 1E 22    lcall   B1_BS_203_B5_CE44
B1:7959 90 FC 46    mov     DPTR, #XRAM_FC46      ; Coordenada vertical (HI)
B1:795C E4          clr     A
B1:795D F0          movx    @DPTR, A
B1:795E A3          inc     DPTR
B1:795F 74 04       mov     A, #4
B1:7961 F0          movx    @DPTR, A
B1:7962 90 FC 45    mov     DPTR, #XRAM_FC45      ; Coordenada horizontal (LO)
B1:7965 E0          movx    A, @DPTR
B1:7966 24 32       add     A, #0x32 ; '2'
B1:7968 F0          movx    @DPTR, A
B1:7969 90 FC 44    mov     DPTR, #XRAM_FC44      ; Coordenada horizontal (HI)
B1:796C E0          movx    A, @DPTR
B1:796D 34 00       addc    A, #0
B1:796F F0          movx    @DPTR, A
B1:7970 74 04       mov     A, #4
B1:7972 24 1E       add     A, #0x1E         
B1:7974 90 FC 4E    mov     DPTR, #XRAM_FC4E
B1:7977 F0          movx    @DPTR, A
B1:7978 E4          clr     A
B1:7979 33          rlc     A
B1:797A 90 FC 4D    mov     DPTR, #XRAM_FC4D
B1:797D F0          movx    @DPTR, A
B1:797E 90 FC 49    mov     DPTR, #XRAM_FC49
B1:7981 74 02       mov     A, #2
B1:7983 F0          movx    @DPTR, A
B1:7984 A3          inc     DPTR
B1:7985 74 56       mov     A, #0x56 ; 'V'
B1:7987 F0          movx    @DPTR, A
B1:7988 D2 46       setb    RAM_28.6
B1:798A E4          clr     A
B1:798B 90 FB EA    mov     DPTR, #XRAM_FBEA
B1:798E F0          movx    @DPTR, A
B1:798F FB          mov     R3, A
B1:7990 FD          mov     R5, A
B1:7991 7F 10       mov     R7, #0x10
B1:7993 12 1E 46    lcall   B1_BS_209_B5_CF3D
B1:7996 E4          clr     A                     ; Define a fonte usada na linha de diretório (0x0)
B1:7997 FF          mov     R7, A

B1:7998 12 1E 70    lcall   OSD_SetFont_B1_BS
B1:799B 90 FC 07    mov     DPTR, #XRAM_FC07      ; OSD_Colors
B1:799E 74 03       mov     A, #3
B1:79A0 F0          movx    @DPTR, A
B1:79A1 A3          inc     DPTR
B1:79A2 14          dec     A
B1:79A3 F0          movx    @DPTR, A
B1:79A4 E4          clr     A
B1:79A5 FB          mov     R3, A
B1:79A6 FD          mov     R5, A
B1:79A7 7F 10       mov     R7, #0x10
B1:79A9 12 1D E0    lcall   OSD_TextColor_B1_BS
B1:79AC 90 FB 99    mov     DPTR, #XRAM_FB99
B1:79AF E0          movx    A, @DPTR
B1:79B0 FF          mov     R7, A
B1:79B1 D3          setb    C
B1:79B2 94 36       subb    A, #0x36 ; '6'        ; 1o ponto a mudar para aumentar o número
B1:79B2                                           ; de caracteres na linha de diretório

B1:79B4 40 31       jc      B1_79E7
B1:79B6 90 FB 9B    mov     DPTR, #XRAM_FB9B
B1:79B9 E0          movx    A, @DPTR
B1:79BA F8          mov     R0, A
B1:79BB A3          inc     DPTR
B1:79BC E0          movx    A, @DPTR
B1:79BD F9          mov     R1, A
B1:79BE A3          inc     DPTR
B1:79BF E0          movx    A, @DPTR
B1:79C0 FA          mov     R2, A
B1:79C1 A3          inc     DPTR
B1:79C2 E0          movx    A, @DPTR
B1:79C3 FB          mov     R3, A
B1:79C4 EF          mov     A, R7
B1:79C5 24 CA       add     A, #0xCA ; '-'
B1:79C7 FF          mov     R7, A
B1:79C8 E4          clr     A
B1:79C9 34 FF       addc    A, #0xFF
B1:79CB FE          mov     R6, A
B1:79CC E4          clr     A
B1:79CD FC          mov     R4, A
B1:79CE FD          mov     R5, A
B1:79CF EB          mov     A, R3
B1:79D0 2F          add     A, R7
B1:79D1 FF          mov     R7, A
B1:79D2 EA          mov     A, R2
B1:79D3 3E          addc    A, R6
B1:79D4 FE          mov     R6, A
B1:79D5 ED          mov     A, R5
B1:79D6 39          addc    A, R1
B1:79D7 FD          mov     R5, A
B1:79D8 EC          mov     A, R4
B1:79D9 38          addc    A, R0
B1:79DA FC          mov     R4, A
B1:79DB 90 FB 9B    mov     DPTR, #XRAM_FB9B
B1:79DE 12 0A 38    lcall   B1_?C?LSTXDATA
B1:79E1 90 FB 99    mov     DPTR, #XRAM_FB99
B1:79E4 74 36       mov     A, #0x36 ; '6'        ; 2o ponto a mudar para aumentar o número
B1:79E4                                           ; de caracteres na linha de diretório

B1:79E6 F0          movx    @DPTR, A
B1:79E7
B1:79E7             B1_79E7:                      ; CODE XREF: Dir_Disp_Dirline+B9j
B1:79E7 7F 28       mov     R7, #0x28 ; '('
B1:79E9 7E 02       mov     R6, #2
B1:79EB 12 19 C6    lcall   B1_BS_17_B0_E87A
B1:79EE 90 FB B1    mov     DPTR, #XRAM_FBB1
B1:79F1 EF          mov     A, R7
B1:79F2 F0          movx    @DPTR, A
B1:79F3 90 FB 9B    mov     DPTR, #XRAM_FB9B
B1:79F6 E0          movx    A, @DPTR
B1:79F7 FC          mov     R4, A
B1:79F8 A3          inc     DPTR
B1:79F9 E0          movx    A, @DPTR
B1:79FA FD          mov     R5, A
B1:79FB A3          inc     DPTR
B1:79FC E0          movx    A, @DPTR
B1:79FD FE          mov     R6, A
B1:79FE A3          inc     DPTR
B1:79FF E0          movx    A, @DPTR
B1:7A00 24 01       add     A, #1
B1:7A02 FF          mov     R7, A
B1:7A03 E4          clr     A
B1:7A04 3E          addc    A, R6
B1:7A05 FE          mov     R6, A
B1:7A06 E4          clr     A
B1:7A07 3D          addc    A, R5
B1:7A08 FD          mov     R5, A
B1:7A09 E4          clr     A
B1:7A0A 3C          addc    A, R4
B1:7A0B FC          mov     R4, A
B1:7A0C 90 FB AC    mov     DPTR, #XRAM_FBAC
B1:7A0F 12 0A 38    lcall   B1_?C?LSTXDATA
B1:7A12 E4          clr     A
B1:7A13 90 FB B0    mov     DPTR, #XRAM_FBB0
B1:7A16 F0          movx    @DPTR, A
B1:7A17 90 FB 99    mov     DPTR, #XRAM_FB99
B1:7A1A E0          movx    A, @DPTR
B1:7A1B FD          mov     R5, A
B1:7A1C 7F 10       mov     R7, #0x10
B1:7A1E 12 1E 2E    lcall   B1_BS_205_B3_9509
B1:7A21 E4          clr     A                     ; Define a fonte usada no filebrowser (0x0)
B1:7A22 FF          mov     R7, A

B1:7A23 02 1E 70    ljmp    OSD_SetFont_B1_BS
B1:7A26             ; ---------------------------------------------------------------------------
B1:7A26
B1:7A26             B1_7A26:                      ; CODE XREF: Dir_Disp_Dirline+3j
B1:7A26 90 FC 44    mov     DPTR, #XRAM_FC44
B1:7A29 E4          clr     A
B1:7A2A F0          movx    @DPTR, A
B1:7A2B A3          inc     DPTR
B1:7A2C 74 22       mov     A, #0x22 ; '"'
B1:7A2E F0          movx    @DPTR, A
B1:7A2F 90 FC 46    mov     DPTR, #XRAM_FC46
B1:7A32 E4          clr     A
B1:7A33 F0          movx    @DPTR, A
B1:7A34 A3          inc     DPTR
B1:7A35 74 06       mov     A, #6
B1:7A37 F0          movx    @DPTR, A
B1:7A38 7B 1E       mov     R3, #0x1E
B1:7A3A 7A 00       mov     R2, #0
B1:7A3C 7D 68       mov     R5, #0x68 ; 'h'
B1:7A3E 7C 02       mov     R4, #2
B1:7A40 7F 10       mov     R7, #0x10
B1:7A42 12 1E 58    lcall   B1_BS_212_B5_BF1A
B1:7A45 22          ret
B1:7A45             ; End of function Dir_Disp_Dirline


Fontes:

Em vermelho eu destaquei os pontos para a troca de fontes. O modo "básico" de definir fontes específicas é trocar:

E4     CLR A
FF     MOV R7,A


por

7F xx       MOV R7,xx


Onde xx é o número da fonte que você quer usar

Nota: Tenha em mente que isso só funciona sem efeitos colaterais porque o valor de R7 não é diretamente reutilizado em seguida.

A utilidade principal disso é poder "desamarrar" a fonte do diretório da fonte do resto do browser. Mas você pode usar as mesmas técnicas que expliquei para selecionar fontes de legendas pelo setup para também selecionar fontes de browser pelo setup.


Número de caracteres na linha de diretório:


mov     A, #0x36

Se você contar o número de caracteres que o firmware original exibe, verá que são apenas 27. Mas 27 em hexadecimal é "0x1B" e não "0x36". O detalhe importante é lembrar que a seção ARM do Proview passa os nomes de diretório em Unicode, com dois bytes por caractere.

0x36 = 54d
54/2 = 27

Faz sentido agora, não é?

O número máximo real de caracteres depende da fonte escolhida (e é variável, porque a largura dos caracteres não é fixa). Com a fonte Impact que usei no meu firmware experimental cabem cerca de 40 caracteres. Multiplicando por dois, temos 80d = 0x50


Então, basta mudar as duas linhas para:
mov     A, #0x50 

Com a modificação:


Com a limitação do firmware oficial:


Referência: Grupo MT13x9
« Last Edit: July 26, 2007, 09:38:57 PM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #54 on: July 26, 2007, 07:30:05 PM »
Philips DVP5960/37
Philips DVP5965/55
Philips DVP5965/93
Punktal PK-DV246

  • Como definir a fonte usada na linha de diretório
  • Como definir a fonte usada no browser
  • Como aumentar o número de caracteres exibíveis na linha de diretório

O exemplo abaixo foi copiado da minha listagem do DVP5960, mas eu conferi os endereços com o DVP5965 e excetuado os endereços XRAM e de rotinas, tudo é exatamente igual. O caso do Punktal é quase idêntico.

A teoria é a mesma dada na explicação anterior, para o Proview, com uma única diferença, que vou explicar adiante:



B1:7EED             Dir_DispDirline:              ; CODE XREF: B1_89A3+84p
B1:7EED                                           ; B1_89A3+8Bp
B1:7EED 20 74 03    jb      RAM_2E.4, B1_7EF3
B1:7EF0 02 80 0D    ljmp    B1_800D
B1:7EF3             ; ---------------------------------------------------------------------------
B1:7EF3
B1:7EF3             B1_7EF3:                      ; CODE XREF: Dir_DispDirlinej
B1:7EF3 7F 2B       mov     R7, #0x2B ; '+'
B1:7EF5 7E 02       mov     R6, #2
B1:7EF7 12 1E B4    lcall   B1_BS_234_B4_CAD9
B1:7EFA 90 FB B1    mov     DPTR, #XRAM_FBB1
B1:7EFD 12 08 F5    lcall   B1_?C?LSTXDATA
B1:7F00 90 FB B1    mov     DPTR, #XRAM_FBB1
B1:7F03 E0          movx    A, @DPTR
B1:7F04 FC          mov     R4, A
B1:7F05 A3          inc     DPTR
B1:7F06 E0          movx    A, @DPTR
B1:7F07 FD          mov     R5, A
B1:7F08 A3          inc     DPTR
B1:7F09 E0          movx    A, @DPTR
B1:7F0A FE          mov     R6, A
B1:7F0B A3          inc     DPTR
B1:7F0C E0          movx    A, @DPTR
B1:7F0D 24 02       add     A, #2
B1:7F0F FF          mov     R7, A
B1:7F10 E4          clr     A
B1:7F11 3E          addc    A, R6
B1:7F12 FE          mov     R6, A
B1:7F13 E4          clr     A
B1:7F14 3D          addc    A, R5
B1:7F15 FD          mov     R5, A
B1:7F16 E4          clr     A
B1:7F17 3C          addc    A, R4
B1:7F18 FC          mov     R4, A
B1:7F19 90 FB B1    mov     DPTR, #XRAM_FBB1
B1:7F1C 12 08 F5    lcall   B1_?C?LSTXDATA
B1:7F1F 90 FB B2    mov     DPTR, #XRAM_FBB2
B1:7F22 E0          movx    A, @DPTR
B1:7F23 FF          mov     R7, A
B1:7F24 A3          inc     DPTR
B1:7F25 E0          movx    A, @DPTR
B1:7F26 FC          mov     R4, A
B1:7F27 A3          inc     DPTR
B1:7F28 E0          movx    A, @DPTR
B1:7F29 FD          mov     R5, A
B1:7F2A 12 1E A8    lcall   B1_BS_232_B0_E599
B1:7F2D 90 FB AF    mov     DPTR, #XRAM_FBAF
B1:7F30 EF          mov     A, R7
B1:7F31 F0          movx    @DPTR, A
B1:7F32 90 FC 76    mov     DPTR, #XRAM_FC76      ; Coordenada horizontal (HI)
B1:7F35 E4          clr     A
B1:7F36 F0          movx    @DPTR, A
B1:7F37 A3          inc     DPTR
B1:7F38 74 22       mov     A, #0x22 ; '"'
B1:7F3A F0          movx    @DPTR, A
B1:7F3B 90 FC 79    mov     DPTR, #XRAM_FC79      ; Coordenada vertical (HI)
B1:7F3E E4          clr     A
B1:7F3F F0          movx    @DPTR, A
B1:7F40 A3          inc     DPTR
B1:7F41 74 06       mov     A, #6
B1:7F43 F0          movx    @DPTR, A
B1:7F44 7D 08       mov     R5, #8
B1:7F46 7F 0F       mov     R7, #0xF
B1:7F48 12 1E BA    lcall   B1_BS_235_B3_2D12
B1:7F4B 90 FC 79    mov     DPTR, #XRAM_FC79      ; Coordenada vertical (HI)
B1:7F4E E4          clr     A
B1:7F4F F0          movx    @DPTR, A
B1:7F50 A3          inc     DPTR
B1:7F51 74 04       mov     A, #4
B1:7F53 F0          movx    @DPTR, A
B1:7F54 90 FC 77    mov     DPTR, #XRAM_FC77      ; Coordenada horizontal (LO)
B1:7F57 E0          movx    A, @DPTR
B1:7F58 24 32       add     A, #0x32 ; '2'
B1:7F5A F0          movx    @DPTR, A
B1:7F5B 90 FC 76    mov     DPTR, #XRAM_FC76      ; Coordenada horizontal (HI)
B1:7F5E E0          movx    A, @DPTR
B1:7F5F 34 00       addc    A, #0
B1:7F61 F0          movx    @DPTR, A
B1:7F62 74 04       mov     A, #4
B1:7F64 24 1E       add     A, #0x1E
B1:7F66 90 FC 81    mov     DPTR, #XRAM_FC81
B1:7F69 F0          movx    @DPTR, A
B1:7F6A E4          clr     A
B1:7F6B 33          rlc     A
B1:7F6C 90 FC 80    mov     DPTR, #XRAM_FC80
B1:7F6F F0          movx    @DPTR, A
B1:7F70 90 FC 7C    mov     DPTR, #XRAM_FC7C
B1:7F73 74 02       mov     A, #2
B1:7F75 F0          movx    @DPTR, A
B1:7F76 A3          inc     DPTR
B1:7F77 74 56       mov     A, #0x56 ; 'V'
B1:7F79 F0          movx    @DPTR, A
B1:7F7A D2 75       setb    RAM_2E.5
B1:7F7C E4          clr     A
B1:7F7D 90 FB FD    mov     DPTR, #XRAM_FBFD
B1:7F80 F0          movx    @DPTR, A
B1:7F81 FB          mov     R3, A
B1:7F82 FD          mov     R5, A
B1:7F83 7F 0F       mov     R7, #0xF
B1:7F85 12 1D 52    lcall   B1_BS_175_B3_B8B4
B1:7F88 E4          clr     A                     ; Define a fonte usada na linha de diretório (0x0)
B1:7F89 FF          mov     R7, A

B1:7F8A 12 1E EA    lcall   OSD_SetFont_B1_BS
B1:7F8D 90 FC 1E    mov     DPTR, #XRAM_FC1E      ; OSD_colors
B1:7F90 74 02       mov     A, #2                 ; Cor de contorno = 2
B1:7F92 F0          movx    @DPTR, A
B1:7F93 A3          inc     DPTR
B1:7F94 04          inc     A                     ; Cor de preenchimento = 3
B1:7F95 F0          movx    @DPTR, A
B1:7F96 E4          clr     A
B1:7F97 FB          mov     R3, A
B1:7F98 FD          mov     R5, A
B1:7F99 7F 0F       mov     R7, #0xF
B1:7F9B 12 1D 76    lcall   OSD_TextColor_B1_BS
B1:7F9E 90 FB AF    mov     DPTR, #XRAM_FBAF
B1:7FA1 E0          movx    A, @DPTR
B1:7FA2 FF          mov     R7, A
B1:7FA3 D3          setb    C
B1:7FA4 94 1E       subb    A, #0x1E              ; 1o ponto a mudar para aumentar o número
B1:7FA4                                           ; de caracteres na linha de diretório

B1:7FA6 40 31       jc      B1_7FD9
B1:7FA8 90 FB B1    mov     DPTR, #XRAM_FBB1
B1:7FAB E0          movx    A, @DPTR
B1:7FAC F8          mov     R0, A
B1:7FAD A3          inc     DPTR
B1:7FAE E0          movx    A, @DPTR
B1:7FAF F9          mov     R1, A
B1:7FB0 A3          inc     DPTR
B1:7FB1 E0          movx    A, @DPTR
B1:7FB2 FA          mov     R2, A
B1:7FB3 A3          inc     DPTR
B1:7FB4 E0          movx    A, @DPTR
B1:7FB5 FB          mov     R3, A
B1:7FB6 EF          mov     A, R7
B1:7FB7 24 E2       add     A, #0xE2 ; 'Ô'        ; 0x100-(número de caracteres a exibir)
B1:7FB7                                           ; No caso: 0x100-0x1E = 0xE2

B1:7FB9 FF          mov     R7, A
B1:7FBA E4          clr     A
B1:7FBB 34 FF       addc    A, #0xFF
B1:7FBD FE          mov     R6, A
B1:7FBE E4          clr     A
B1:7FBF FC          mov     R4, A
B1:7FC0 FD          mov     R5, A
B1:7FC1 EB          mov     A, R3
B1:7FC2 2F          add     A, R7
B1:7FC3 FF          mov     R7, A
B1:7FC4 EA          mov     A, R2
B1:7FC5 3E          addc    A, R6
B1:7FC6 FE          mov     R6, A
B1:7FC7 ED          mov     A, R5
B1:7FC8 39          addc    A, R1
B1:7FC9 FD          mov     R5, A
B1:7FCA EC          mov     A, R4
B1:7FCB 38          addc    A, R0
B1:7FCC FC          mov     R4, A
B1:7FCD 90 FB B1    mov     DPTR, #XRAM_FBB1
B1:7FD0 12 08 F5    lcall   B1_?C?LSTXDATA
B1:7FD3 90 FB AF    mov     DPTR, #XRAM_FBAF
B1:7FD6 74 1E       mov     A, #0x1E              ; 2o ponto a mudar para aumentar o número
B1:7FD6                                           ; de caracteres na linha de diretório

B1:7FD8 F0          movx    @DPTR, A
B1:7FD9
B1:7FD9             B1_7FD9:                      ; CODE XREF: Dir_DispDirline+B9j
B1:7FD9 90 FB B1    mov     DPTR, #XRAM_FBB1
B1:7FDC E0          movx    A, @DPTR
B1:7FDD FC          mov     R4, A
B1:7FDE A3          inc     DPTR
B1:7FDF E0          movx    A, @DPTR
B1:7FE0 FD          mov     R5, A
B1:7FE1 A3          inc     DPTR
B1:7FE2 E0          movx    A, @DPTR
B1:7FE3 FE          mov     R6, A
B1:7FE4 A3          inc     DPTR
B1:7FE5 E0          movx    A, @DPTR
B1:7FE6 24 01       add     A, #1
B1:7FE8 FF          mov     R7, A
B1:7FE9 E4          clr     A
B1:7FEA 3E          addc    A, R6
B1:7FEB FE          mov     R6, A
B1:7FEC E4          clr     A
B1:7FED 3D          addc    A, R5
B1:7FEE FD          mov     R5, A
B1:7FEF E4          clr     A
B1:7FF0 3C          addc    A, R4
B1:7FF1 FC          mov     R4, A
B1:7FF2 90 FB C2    mov     DPTR, #XRAM_FBC2
B1:7FF5 12 08 F5    lcall   B1_?C?LSTXDATA
B1:7FF8 90 FB C6    mov     DPTR, #XRAM_FBC6      ; Posição do último "."
B1:7FFB 74 5F       mov     A, #0x5F ; '_'
B1:7FFD F0          movx    @DPTR, A
B1:7FFE 90 FB AF    mov     DPTR, #XRAM_FBAF
B1:8001 E0          movx    A, @DPTR
B1:8002 FD          mov     R5, A
B1:8003 7F 0F       mov     R7, #0xF
B1:8005 12 1E C6    lcall   B1_BS_237_B4_8A43
B1:8008 E4          clr     A                     ; Define a fonte do browser (0x0)
B1:8009 FF          mov     R7, A

B1:800A 02 1E EA    ljmp    OSD_SetFont_B1_BS
B1:800D             ; ---------------------------------------------------------------------------
B1:800D
B1:800D             B1_800D:                      ; CODE XREF: Dir_DispDirline+3j
B1:800D 90 FC 76    mov     DPTR, #XRAM_FC76      ; Coordenada horizontal (HI)
B1:8010 E4          clr     A
B1:8011 F0          movx    @DPTR, A
B1:8012 A3          inc     DPTR
B1:8013 74 22       mov     A, #0x22 ; '"'
B1:8015 F0          movx    @DPTR, A
B1:8016 90 FC 79    mov     DPTR, #XRAM_FC79      ; Coordenada vertical (HI)
B1:8019 E4          clr     A
B1:801A F0          movx    @DPTR, A
B1:801B A3          inc     DPTR
B1:801C 74 06       mov     A, #6
B1:801E F0          movx    @DPTR, A
B1:801F 7B 1E       mov     R3, #0x1E
B1:8021 7A 00       mov     R2, #0
B1:8023 7D 68       mov     R5, #0x68 ; 'h'
B1:8025 7C 02       mov     R4, #2
B1:8027 7F 0F       mov     R7, #0xF
B1:8029 12 1E 54    lcall   ClearRect?
B1:802C 22          ret
B1:802C             ; End of function Dir_DispDirline
B1:802C


O DVP5960 tem um ponto a mais que precisa ser mudado:

B1:7FB7 24 E2       add     A, #0xE2 ; 'Ô'      

Exemplo: se você quiser aumentar o número de caracteres para 40 caracteres (0x28), esta linha intermediária precisa ser mudada para: 0x100 - 0x28 = 0xD8

B1:7FB7 24 D8       add     A, #0xD8

Note que o DVP5960, não tem o "problema" com unicode, assim não é preciso nem dobrar nem dividir ao fazer as contas.
« Last Edit: August 27, 2007, 04:47:41 PM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #55 on: July 26, 2007, 08:03:22 PM »
Como localizar a rotina Disp_DirLine no seu firmware

Conte exatamente quantos caracteres no máximo aparecem na linha de diretório, converta para hexa e substitua aqui:

FF D3 94 xx

onde xx é o número que você conseguiu

Esta sequencia de bytes só aparece uma vez no código 8032, na rotina Disp_dirLine.

Se não funcionar, o seu firmware pode usar Unicode, então dobre o valor e procure de novo.

Por exemplo, se você contar 30 caracteres, vai procurar pela seguinte seqüência:

FF D3 94 1E

e se não funcionar, pela seguinte:

FF D3 94 3C


Tendo localizado Dir_DispDirline, como essa rotina chama tanto OSD_SetFont quanto OSD_textColors, se você não tiver ainda localizado essas rotinas vai poder achá-las. Além da utilidade óbvia de se localizar e identificar rotinas, lembre-se de que Sub_textStyle, que é bem difiícil de achar, também chama essas rotinas, logo você fica um pouco mais perto de encontrá-la.
« Last Edit: July 28, 2007, 01:18:47 AM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #56 on: July 27, 2007, 05:38:46 AM »

Philips DVP5960/37

Philips DVP5965/55
Philips DVP5965/93


TAGS MP3

Isto foi testado em um DVP5960, mas deve funcionar em um DVP5965 com mínimas alterações


  • Como definir uma fonte separada da usada no browser
  • Como aumentar o número de caracteres exibidos de 14 para 30
  • Como mover o local de exibição para a parte inferior da tela

Quase 100% das mudanças no assembly são feitas dentro da rotina MP3_tagDisplay, que é uma rotina bem longa que transcrevo na íntegra no próximo post. Eu só localizei esta rotina graças a este post do Vladimir Boroda. A partir daí, tudo saiu por investigação própria. Eu ainda não decifrei todos os segredos da rotina, mas já tenho o suficiente para fazer muita coisa interessante.

Abaixo, como é no firmware original. Perceba o limite de 14 caracteres para cada tag.



A primeira mudança é na fonte. A fonte original do browser do DVP5960 além de desnecessariamente grande para isso, tem serifa, o que torna o espaço requerido entre linhas grande demais. Eu criei uma fonte nova com o mtkFontCreator, inseri no firmware como fonte 02 e fiz a seguinte modificação:

B1:56C0 74 02      mov A, 02                ; Fonte 0x02
B1:56C2 12 1E EA   lcall OSD_setFont      ;Faço uma chamada à rotina que seta a fonte
B1:56C5 12 FA 32   lcall rotina_movida     ;Chamo a rotina antiga
B1:56C8 00 nop
B1:56C9 00 nop
B1:56CA 00 nop
B1:56CB 00 nop
B1:56CC 00 nop
B1:56CD 00 nop


Atenção: A rotina OSD_SetFont do DVP5965 fica em 1ED8

Depois acrescentei a partir de 1FA32 o que eu precisei mover para liberar espaço:

B1:FA32 74 00      mov A, 0                     ; Cor de Outine
B1:FA34 90 FC 1E    mov     DPTR, #XRAM_FC1E      ; OSD_colors
B1:FA37 F0          movx    @DPTR, A
B1:FA38 A3          inc     DPTR
B1:FA39 74 0E       mov     A, #0xE               ; Cor de Preenchimento
B1:FA3B F0          movx    @DPTR, A
B1:FA3C E4          clr     A
B1:FA3D FB          mov     R3, A
B1:FA3E FD          mov     R5, A
B1:FA3F 7F 0F       mov     R7, #0xF
B1:FA41 22           ret


Note que eu aproveitei para fazer uma pequena modificação que me permite mudar a cor do contorno, se necessário.

O resultado imediato foi este:


Agora temos espaço sobrando, mas faltam caracteres. A limitação de 14 caracteres por tag é artificial, porque a seção ARM entrega 30. Então vamos aumentar isso.

Três bytes precisam ser mudados, em dois pontos diferentes:

B1:5785 94 FF       subb    A, #0xFF              
B1:5787 40 03       jc      B1_578C
B1:5789 74 FF       mov     A, #0xFF   

e

B1:57CA 94 FF       subb    A, #0xFF              ; Número máximo de caracteres a exibir por TAG

Eu poderia ter colocado apenas 30 e não 255, mas pode ser que algum firmware passe mais que 30 caracteres, por isso é melhor não impormos nossa própria limitação.

O resultado é esse. Note que os caracteres que não cabem aparecem do lado esquerdo da tela:



O espaço entre linhas é grande demais. Por sorte, isso é definido por um único byte na rotina:

B1:57A1 75 F0 14    mov     B, #0x14              ; Altura presumida de cada linha

O resultado é esse. Note que eu também movi ligeiramente as tags para a esquerda, mas só explico como isso é efeito mais adiante:



Agora sim, vamos mover as tags. São três bytes que determinam a coordenada do canto superior esquerdo do retângulo onde as tags começam a ser impressas:


B1:5796 90 FC 76    mov     DPTR, #XRAM_FC76      ; Coordenada horizontal (HI)
B1:5799 74 00       mov     A, #0
B1:579B F0          movx    @DPTR, A
B1:579C A3          inc     DPTR
B1:579D 74 25       mov     A, #0x25 ;
B1:579F F0          movx    @DPTR, A              ; FC76 e FC77 = 0x25
B1:579F                                           ; offset horizontal. Quanto menor, mais à esquerda a linha começa.
B1:57A0 EF          mov     A, R7                 ; R7 contém o número da TAG (linha) sendo exibida?
B1:57A1 75 F0 14    mov     B, #0x14              ; Altura presumida de cada linha
B1:57A1                                           ; 0x10 fará com que cada linha cubra a metade da anterior
B1:57A1                                           ; 0x16 funciona OK com a fonte original
B1:57A4 A4          mul     AB
B1:57A5 AE F0       mov     R6, B                 ; R6 contém agora a coordenada vertical de impressão da linha?
B1:57A7 24 F0       add     A, #0xF0 ;


Abaixo, o resultado com um novo background que fiz rapidamente só para testar como fica. Está bem mal-feito, mas serve para ter uma idéia. Também é preciso aumentar o tamanho da janela 0xF no mtkWindows.


É possível colocar as tags lado a lado em duas linhas, mas isso requer uma mudança mais drástica na rotina.

Nota: Neste texto eu ainda não explico como fazer para apagar o retângulo de exibição das tags, porque isso é feito em outro ponto do firmware. Depois eu explico, porque estou cansado agora.

E ainda é preciso fazer um ajuste, porque são cinco as tags que o DVP5960 pode exibir e o meu exemplo só previu quatro.



MP3_TagDisplay - ClearRect inicial


Logo no início de MP3_TagDisplay existe um procedimento ClearRect cuja função é remover as tags deixadas por uma música anterior. O procedimento, claro, é chamado antes das tags serem impressas.

B1:56A0 90 FC 76    mov     DPTR, #XRAM_FC76      ; Coordenada horizontal (HI)
B1:56A3 74 01       mov     A, #1
B1:56A5 F0          movx    @DPTR, A
B1:56A6 A3          inc     DPTR
B1:56A7 74 79       mov     A, #0x79 ; 'y'        ; Coordenada Horizontal: 0x179
B1:56A9 F0          movx    @DPTR, A
B1:56AA 90 FC 79    mov     DPTR, #XRAM_FC79      ; Coordenada vertical (HI)
B1:56AD E4          clr     A
B1:56AE F0          movx    @DPTR, A
B1:56AF A3          inc     DPTR
B1:56B0 74 37       mov     A, #0x37 ; '7'        ; Coordenada Vertical: 0x37
B1:56B2 F0          movx    @DPTR, A
B1:56B3 7B DC       mov     R3, #0xDC ; '_'       ; 0xDC = altura
B1:56B5 7A 00       mov     R2, #0
B1:56B7 7D DC       mov     R5, #0xDC ; '_'       ; 0xDC = Largura
B1:56B9 7C 00       mov     R4, #0
B1:56BB 7F 0F       mov     R7, #0xF
B1:56BD 12 1E 54    lcall   ClearRect             ; Limpa o retângulo



Como nós movemos o local de exibição das tags, é preciso mover e redimensionar o retângulo criado por essa rotina que já corrigida fica assim:

B1:56A0 90 FC 76    mov     DPTR, #XRAM_FC76      ; Coordenada horizontal (HI)
B1:56A3 74 00       mov     A, #0
B1:56A5 F0          movx    @DPTR, A
B1:56A6 A3          inc     DPTR
B1:56A7 74 25       mov     A, #0x25 ; 'y'        ; Coordenada Horizontal: 0x25
B1:56A9 F0          movx    @DPTR, A
B1:56AA 90 FC 79    mov     DPTR, #XRAM_FC79      ; Coordenada vertical (HI)
B1:56AD E4          clr     A
B1:56AE F0          movx    @DPTR, A
B1:56AF A3          inc     DPTR
B1:56B0 74 EF       mov     A, #0xEF ;       ; Coordenada Vertical: 0xEF
B1:56B2 F0          movx    @DPTR, A
B1:56B3 7B 6C       mov     R3, #0x6C            ; 0x6C = altura
B1:56B5 7A 00       mov     R2, #0
B1:56B7 7D 50       mov     R5, #0x50           ; 0x150 = Largura
B1:56B9 7C 01       mov     R4, #0x1
B1:56BB 7F 0F       mov     R7, #0xF
B1:56BD 12 1E 54    lcall   ClearRect             ; Limpa o retângulo
« Last Edit: July 31, 2007, 01:55:13 AM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #57 on: July 27, 2007, 05:53:19 AM »
DVP5960/37 - MP3_TagDisplay

Esta rotina é a mesma para o DVP5965/55 e DVP5965/93. Mudam apenas endereços XRAM e de subrotinas, mas o resto é idêntico.

Para localizar no seu firmware, procure por "EF F0 7F 4B". Só ocorre no topo de MP3_TagDisplay e todo o firmware onde eu não achei isso não tinha mesmo suporte a tags.


Esta rotina está em um post separado porque estoura o limite de 20000 caracteres por post.

[size=08pt]

B1:565C             ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B1:565C
B1:565C
B1:565C             MP3_TagDisplay:               ; CODE XREF: B1_6AC0:B1_6BF4j
B1:565C                                           ; B1_AB8D+B1p
B1:565C                                           ; DATA XREF: ...
B1:565C E4          clr     A
B1:565D 90 FB B3    mov     DPTR, #XRAM_FBB3
B1:5660 F0          movx    @DPTR, A
B1:5661 90 FB AC    mov     DPTR, #XRAM_FBAC
B1:5664 74 06       mov     A, #6                 ; Mudei para 0x5 mas nada pareceu mudar
B1:5666 F0          movx    @DPTR, A
B1:5667 7D 02       mov     R5, #2
B1:5669 7C 00       mov     R4, #0
B1:566B 7F 01       mov     R7, #1
B1:566D 12 1D 04    lcall   B1_BS_162_B3_BE2E
B1:5670 7F 4A       mov     R7, #0x4A ; 'J'       ; As quatro chamadas a ARM_Getchar seguintes obtem o endereço
B1:5670                                           ; inicial do bloco de tags (4 bytes) na shared memory
B1:5672 7E 02       mov     R6, #2
B1:5674 12 1B 96    lcall   ARM_GetChar_B1_BS
B1:5677 90 FB A3    mov     DPTR, #XRAM_FBA3
B1:567A EF          mov     A, R7
B1:567B F0          movx    @DPTR, A
B1:567C 7F 4B       mov     R7, #0x4B ; 'K'
B1:567E 7E 02       mov     R6, #2
B1:5680 12 1B 96    lcall   ARM_GetChar_B1_BS
B1:5683 90 FB A2    mov     DPTR, #XRAM_FBA2
B1:5686 EF          mov     A, R7
B1:5687 F0          movx    @DPTR, A
B1:5688 7F 4C       mov     R7, #0x4C ; 'L'
B1:568A 7E 02       mov     R6, #2
B1:568C 12 1B 96    lcall   ARM_GetChar_B1_BS
B1:568F 90 FB A1    mov     DPTR, #XRAM_FBA1
B1:5692 EF          mov     A, R7
B1:5693 F0          movx    @DPTR, A
B1:5694 7F 4D       mov     R7, #0x4D ; 'M'
B1:5696 7E 02       mov     R6, #2
B1:5698 12 1B 96    lcall   ARM_GetChar_B1_BS
B1:569B 90 FB A0    mov     DPTR, #XRAM_FBA0
B1:569E EF          mov     A, R7
B1:569F F0          movx    @DPTR, A
B1:56A0 90 FC 76    mov     DPTR, #XRAM_FC76      ; Coordenada horizontal (HI)
B1:56A3 74 01       mov     A, #1
B1:56A5 F0          movx    @DPTR, A
B1:56A6 A3          inc     DPTR
B1:56A7 74 79       mov     A, #0x79 ; 'y'        ; Coordenada Horizontal: 0x179
B1:56A9 F0          movx    @DPTR, A
B1:56AA 90 FC 79    mov     DPTR, #XRAM_FC79      ; Coordenada vertical (HI)
B1:56AD E4          clr     A
B1:56AE F0          movx    @DPTR, A
B1:56AF A3          inc     DPTR
B1:56B0 74 37       mov     A, #0x37 ; '7'        ; Coordenada Vertical: 0x37
B1:56B2 F0          movx    @DPTR, A
B1:56B3 7B DC       mov     R3, #0xDC ; '_'       ; R2R3 = altura
B1:56B5 7A 00       mov     R2, #0
B1:56B7 7D DC       mov     R5, #0xDC ; '_'       ; R4R5 = Largura
B1:56B9 7C 00       mov     R4, #0
B1:56BB 7F 0F       mov     R7, #0xF
B1:56BD 12 1E 54    lcall   ClearRect             ; Limpa o retângulo
B1:56C0 E4          clr     A                     ; Cor de Outine (0x0)
B1:56C1 90 FC 1E    mov     DPTR, #XRAM_FC1E      ; OSD_colors
B1:56C4 F0          movx    @DPTR, A
B1:56C5 A3          inc     DPTR
B1:56C6 74 0E       mov     A, #0xE               ; Cor de Preenchimento
B1:56C8 F0          movx    @DPTR, A
B1:56C9 E4          clr     A
B1:56CA FB          mov     R3, A
B1:56CB FD          mov     R5, A
B1:56CC 7F 0F       mov     R7, #0xF
B1:56CE 12 1D 76    lcall   OSD_TextColor_B1_BS
B1:56D1 74 FF       mov     A, #0xFF
B1:56D3 FF          mov     R7, A
B1:56D4 FE          mov     R6, A
B1:56D5 FD          mov     R5, A
B1:56D6 FC          mov     R4, A
B1:56D7 90 FB A0    mov     DPTR, #XRAM_FBA0
B1:56DA E0          movx    A, @DPTR
B1:56DB F8          mov     R0, A
B1:56DC A3          inc     DPTR
B1:56DD E0          movx    A, @DPTR
B1:56DE F9          mov     R1, A
B1:56DF A3          inc     DPTR
B1:56E0 E0          movx    A, @DPTR
B1:56E1 FA          mov     R2, A
B1:56E2 A3          inc     DPTR
B1:56E3 E0          movx    A, @DPTR
B1:56E4 FB          mov     R3, A
B1:56E5 C3          clr     C
B1:56E6 12 08 59    lcall   B1_?C?ULCMP
B1:56E9 70 03       jnz     B1_56EE
B1:56EB 02 58 AA    ljmp    B1_58AA
B1:56EE             ; ---------------------------------------------------------------------------
B1:56EE
B1:56EE             B1_56EE:                      ; CODE XREF: MP3_TagDisplay+8Dj
B1:56EE E4          clr     A
B1:56EF 90 FB A8    mov     DPTR, #XRAM_FBA8      ; Número sequencial da TAG?
B1:56F2 F0          movx    @DPTR, A
B1:56F3
B1:56F3             B1_56F3:                      ; CODE XREF: MP3_TagDisplay+24Bj
B1:56F3 90 FB A0    mov     DPTR, #XRAM_FBA0
B1:56F6 E0          movx    A, @DPTR
B1:56F7 FC          mov     R4, A
B1:56F8 A3          inc     DPTR
B1:56F9 E0          movx    A, @DPTR
B1:56FA FD          mov     R5, A
B1:56FB A3          inc     DPTR
B1:56FC E0          movx    A, @DPTR
B1:56FD FE          mov     R6, A
B1:56FE A3          inc     DPTR
B1:56FF E0          movx    A, @DPTR
B1:5700 FF          mov     R7, A
B1:5701 A3          inc     DPTR
B1:5702 12 08 F5    lcall   B1_?C?LSTXDATA
B1:5705 E4          clr     A
B1:5706 90 FB A9    mov     DPTR, #XRAM_FBA9
B1:5709 F0          movx    @DPTR, A
B1:570A
B1:570A             B1_570A:                      ; CODE XREF: MP3_TagDisplay+122j
B1:570A 90 FB A8    mov     DPTR, #XRAM_FBA8      ; Número sequencial da TAG?
B1:570D E0          movx    A, @DPTR
B1:570E 90 2F DB    mov     DPTR, #B1_2FDB
B1:5711 93          movc    A, @A+DPTR
B1:5712 FF          mov     R7, A
B1:5713 90 FB A9    mov     DPTR, #XRAM_FBA9
B1:5716 E0          movx    A, @DPTR
B1:5717 C3          clr     C
B1:5718 9F          subb    A, R7
B1:5719 50 65       jnc     B1_5780
B1:571B 90 FB A5    mov     DPTR, #XRAM_FBA5
B1:571E E0          movx    A, @DPTR
B1:571F FF          mov     R7, A
B1:5720 A3          inc     DPTR
B1:5721 E0          movx    A, @DPTR
B1:5722 FC          mov     R4, A
B1:5723 A3          inc     DPTR
B1:5724 E0          movx    A, @DPTR
B1:5725 FD          mov     R5, A
B1:5726 12 1E A8    lcall   B1_BS_232_B0_E599
B1:5729 90 FB A8    mov     DPTR, #XRAM_FBA8      ; Número sequencial da TAG?
B1:572C E0          movx    A, @DPTR
B1:572D FE          mov     R6, A
B1:572E 70 0C       jnz     B1_573C
B1:5730 A3          inc     DPTR
B1:5731 E0          movx    A, @DPTR
B1:5732 90 2F D8    mov     DPTR, #B1_2FD8
B1:5735 93          movc    A, @A+DPTR
B1:5736 6F          xrl     A, R7
B1:5737 60 03       jz      B1_573C
B1:5739 02 58 AA    ljmp    B1_58AA
B1:573C             ; ---------------------------------------------------------------------------
B1:573C
B1:573C             B1_573C:                      ; CODE XREF: MP3_TagDisplay+D2j
B1:573C                                           ; MP3_TagDisplay+DBj
B1:573C EF          mov     A, R7
B1:573D 70 08       jnz     B1_5747
B1:573F 90 FB A9    mov     DPTR, #XRAM_FBA9
B1:5742 E0          movx    A, @DPTR
B1:5743 A3          inc     DPTR
B1:5744 F0          movx    @DPTR, A
B1:5745 80 39       sjmp    B1_5780
B1:5747             ; ---------------------------------------------------------------------------
B1:5747
B1:5747             B1_5747:                      ; CODE XREF: MP3_TagDisplay+E1j
B1:5747 EE          mov     A, R6
B1:5748 90 2F DB    mov     DPTR, #B1_2FDB
B1:574B 93          movc    A, @A+DPTR
B1:574C FF          mov     R7, A
B1:574D 14          dec     A
B1:574E FE          mov     R6, A
B1:574F 90 FB A9    mov     DPTR, #XRAM_FBA9
B1:5752 E0          movx    A, @DPTR
B1:5753 6E          xrl     A, R6
B1:5754 70 03       jnz     B1_5759
B1:5756 A3          inc     DPTR
B1:5757 EF          mov     A, R7
B1:5758 F0          movx    @DPTR, A
B1:5759
B1:5759             B1_5759:                      ; CODE XREF: MP3_TagDisplay+F8j
B1:5759 90 FB A4    mov     DPTR, #XRAM_FBA4
B1:575C E0          movx    A, @DPTR
B1:575D FC          mov     R4, A
B1:575E A3          inc     DPTR
B1:575F E0          movx    A, @DPTR
B1:5760 FD          mov     R5, A
B1:5761 A3          inc     DPTR
B1:5762 E0          movx    A, @DPTR
B1:5763 FE          mov     R6, A
B1:5764 A3          inc     DPTR
B1:5765 E0          movx    A, @DPTR
B1:5766 24 01       add     A, #1
B1:5768 FF          mov     R7, A
B1:5769 E4          clr     A
B1:576A 3E          addc    A, R6
B1:576B FE          mov     R6, A
B1:576C E4          clr     A
B1:576D 3D          addc    A, R5
B1:576E FD          mov     R5, A
B1:576F E4          clr     A
B1:5770 3C          addc    A, R4
B1:5771 FC          mov     R4, A
B1:5772 90 FB A4    mov     DPTR, #XRAM_FBA4
B1:5775 12 08 F5    lcall   B1_?C?LSTXDATA
B1:5778 90 FB A9    mov     DPTR, #XRAM_FBA9
B1:577B E0          movx    A, @DPTR
B1:577C 04          inc     A
B1:577D F0          movx    @DPTR, A
B1:577E 80 8A       sjmp    B1_570A
B1:5780             ; ---------------------------------------------------------------------------
B1:5780
B1:5780             B1_5780:                      ; CODE XREF: MP3_TagDisplay+BDj
B1:5780                                           ; MP3_TagDisplay+E9j
B1:5780 90 FB AA    mov     DPTR, #XRAM_FBAA      ; Número de caracteres na TAG ID3?
B1:5783 E0          movx    A, @DPTR
B1:5784 C3          clr     C
B1:5785 94 0E       subb    A, #0xE               ; Se o número de caracteres for 14 ou menos, continua
B1:5787 40 03       jc      B1_578C
B1:5789 74 0E       mov     A, #0xE               ; Se for maior que 14, limitar a 14
B1:578B F0          movx    @DPTR, A
B1:578C
B1:578C             B1_578C:                      ; CODE XREF: MP3_TagDisplay+12Bj
B1:578C 90 FB A8    mov     DPTR, #XRAM_FBA8      ; Número sequencial da TAG?
B1:578F E0          movx    A, @DPTR
B1:5790 FF          mov     R7, A
B1:5791 70 03       jnz     B1_5796
B1:5793 02 58 6E    ljmp    B1_586E
B1:5796             ; ---------------------------------------------------------------------------
B1:5796
B1:5796             B1_5796:                      ; CODE XREF: MP3_TagDisplay+135j
B1:5796 90 FC 76    mov     DPTR, #XRAM_FC76      ; Coordenada horizontal (HI)
B1:5799 74 01       mov     A, #1
B1:579B F0          movx    @DPTR, A
B1:579C A3          inc     DPTR
B1:579D 74 79       mov     A, #0x79 ; 'y'
B1:579F F0          movx    @DPTR, A              ; FC76 e FC77 = 0x179
B1:579F                                           ; offset horizontal. Quanto menor, mais à esquerda a linha começa.
B1:57A0 EF          mov     A, R7                 ; R7 contém o número da TAG (linha) sendo exibida?
B1:57A1 75 F0 1E    mov     B, #0x1E              ; Altura presumida de cada linha
B1:57A1                                           ; 0x10 fará com que cada linha cubra a metade da anterior
B1:57A1                                           ; 0x16 funciona OK com a fonte original
B1:57A4 A4          mul     AB
B1:57A5 AE F0       mov     R6, B                 ; R6 contém agora a coordenada vertical de impressão da linha?
B1:57A7 24 37       add     A, #0x37 ; '7'        ; Offset vertical. Quanto menor, mais próxima do topo da janela
B1:57A7                                           ; a primeira linha das TAGs vai ser impressa.
B1:57A9 90 FC 7A    mov     DPTR, #XRAM_FC7A      ; Coordenada vertical (LO)
B1:57AC F0          movx    @DPTR, A
B1:57AD E4          clr     A
B1:57AE 3E          addc    A, R6
B1:57AF 90 FC 79    mov     DPTR, #XRAM_FC79      ; Coordenada vertical (HI)
B1:57B2 F0          movx    @DPTR, A
B1:57B3 90 FB A0    mov     DPTR, #XRAM_FBA0
B1:57B6 E0          movx    A, @DPTR
B1:57B7 FC          mov     R4, A
B1:57B8 A3          inc     DPTR
B1:57B9 E0          movx    A, @DPTR
B1:57BA FD          mov     R5, A
B1:57BB A3          inc     DPTR
B1:57BC E0          movx    A, @DPTR
B1:57BD FE          mov     R6, A
B1:57BE A3          inc     DPTR
B1:57BF E0          movx    A, @DPTR
B1:57C0 FF          mov     R7, A
B1:57C1 A3          inc     DPTR
B1:57C2 12 08 F5    lcall   B1_?C?LSTXDATA
B1:57C5 90 FB AA    mov     DPTR, #XRAM_FBAA      ; Número de caracteres na TAG ID3?
B1:57C8 E0          movx    A, @DPTR
B1:57C9 D3          setb    C
B1:57CA 94 10       subb    A, #0x10              ; Número máximo de caracteres a exibir por TAG
B1:57CC 40 6B       jc      B1_5839
B1:57CE 90 FB B3    mov     DPTR, #XRAM_FBB3
B1:57D1 E0          movx    A, @DPTR
B1:57D2 94 07       subb    A, #7
B1:57D4 50 1B       jnc     B1_57F1
B1:57D6 90 FB A4    mov     DPTR, #XRAM_FBA4
B1:57D9 E0          movx    A, @DPTR
B1:57DA FC          mov     R4, A
B1:57DB A3          inc     DPTR
B1:57DC E0          movx    A, @DPTR
B1:57DD FD          mov     R5, A
B1:57DE A3          inc     DPTR
B1:57DF E0          movx    A, @DPTR
B1:57E0 FE          mov     R6, A
B1:57E1 A3          inc     DPTR
B1:57E2 E0          movx    A, @DPTR
B1:57E3 FF          mov     R7, A
B1:57E4 90 FB B6    mov     DPTR, #XRAM_FBB6
B1:57E7 12 08 F5    lcall   B1_?C?LSTXDATA
B1:57EA 7D 10       mov     R5, #0x10
B1:57EC 7F 0F       mov     R7, #0xF
B1:57EE 12 1E AE    lcall   B1_BS_233_B3_A227
B1:57F1
B1:57F1             B1_57F1:                      ; CODE XREF: MP3_TagDisplay+178j
B1:57F1 90 FB B3    mov     DPTR, #XRAM_FBB3
B1:57F4 E0          movx    A, @DPTR
B1:57F5 04          inc     A
B1:57F6 F0          movx    @DPTR, A
B1:57F7 90 FB A4    mov     DPTR, #XRAM_FBA4
B1:57FA E0          movx    A, @DPTR
B1:57FB FC          mov     R4, A
B1:57FC A3          inc     DPTR
B1:57FD E0          movx    A, @DPTR
B1:57FE FD          mov     R5, A
B1:57FF A3          inc     DPTR
B1:5800 E0          movx    A, @DPTR
B1:5801 FE          mov     R6, A
B1:5802 A3          inc     DPTR
B1:5803 E0          movx    A, @DPTR
B1:5804 24 10       add     A, #0x10
B1:5806 FF          mov     R7, A
B1:5807 E4          clr     A
B1:5808 3E          addc    A, R6
B1:5809 FE          mov     R6, A
B1:580A E4          clr     A
B1:580B 3D          addc    A, R5
B1:580C FD          mov     R5, A
B1:580D E4          clr     A
B1:580E 3C          addc    A, R4
B1:580F FC          mov     R4, A
B1:5810 90 FB A4    mov     DPTR, #XRAM_FBA4
B1:5813 12 08 F5    lcall   B1_?C?LSTXDATA
B1:5816 90 FB AA    mov     DPTR, #XRAM_FBAA      ; Número de caracteres na TAG ID3?
B1:5819 E0          movx    A, @DPTR
B1:581A 24 F0       add     A, #0xF0 ; '­'
B1:581C F0          movx    @DPTR, A
B1:581D 90 FC 7A    mov     DPTR, #XRAM_FC7A      ; Coordenada vertical (LO)
B1:5820 E0          movx    A, @DPTR
B1:5821 24 1A       add     A, #0x1A
B1:5823 F0          movx    @DPTR, A
B1:5824 90 FC 79    mov     DPTR, #XRAM_FC79      ; Coordenada vertical (HI)
B1:5827 E0          movx    A, @DPTR
B1:5828 34 00       addc    A, #0
B1:582A F0          movx    @DPTR, A
B1:582B 90 FC 77    mov     DPTR, #XRAM_FC77      ; Coordenada horizontal (LO)
B1:582E E0          movx    A, @DPTR
B1:582F 24 0A       add     A, #0xA
B1:5831 F0          movx    @DPTR, A
B1:5832 90 FC 76    mov     DPTR, #XRAM_FC76      ; Coordenada horizontal (HI)
B1:5835 E0          movx    A, @DPTR
B1:5836 34 00       addc    A, #0
B1:5838 F0          movx    @DPTR, A
B1:5839
B1:5839             B1_5839:                      ; CODE XREF: MP3_TagDisplay+170j
B1:5839 90 FB AA    mov     DPTR, #XRAM_FBAA      ; Número de caracteres na TAG ID3?
B1:583C E0          movx    A, @DPTR
B1:583D FD          mov     R5, A
B1:583E 60 2E       jz      B1_586E
B1:5840 90 FB B3    mov     DPTR, #XRAM_FBB3
B1:5843 E0          movx    A, @DPTR
B1:5844 C3          clr     C
B1:5845 94 07       subb    A, #7
B1:5847 50 1F       jnc     B1_5868
B1:5849 ED          mov     A, R5
B1:584A C0 E0       push    ACC                   ; Accumulator
B1:584C 90 FB A4    mov     DPTR, #XRAM_FBA4
B1:584F E0          movx    A, @DPTR
B1:5850 FC          mov     R4, A
B1:5851 A3          inc     DPTR
B1:5852 E0          movx    A, @DPTR
B1:5853 FD          mov     R5, A
B1:5854 A3          inc     DPTR
B1:5855 E0          movx    A, @DPTR
B1:5856 FE          mov     R6, A
B1:5857 A3          inc     DPTR
B1:5858 E0          movx    A, @DPTR
B1:5859 FF          mov     R7, A
B1:585A 90 FB B6    mov     DPTR, #XRAM_FBB6
B1:585D 12 08 F5    lcall   B1_?C?LSTXDATA
B1:5860 D0 E0       pop     ACC                   ; Accumulator
B1:5862 FD          mov     R5, A
B1:5863 7F 0F       mov     R7, #0xF
B1:5865 12 1E AE    lcall   B1_BS_233_B3_A227
B1:5868
B1:5868             B1_5868:                      ; CODE XREF: MP3_TagDisplay+1EBj
B1:5868 90 FB B3    mov     DPTR, #XRAM_FBB3
B1:586B E0          movx    A, @DPTR
B1:586C 04          inc     A
B1:586D F0          movx    @DPTR, A
B1:586E
B1:586E             B1_586E:                      ; CODE XREF: MP3_TagDisplay+137j
B1:586E                                           ; MP3_TagDisplay+1E2j
B1:586E 90 FB A0    mov     DPTR, #XRAM_FBA0
B1:5871 E0          movx    A, @DPTR
B1:5872 F8          mov     R0, A
B1:5873 A3          inc     DPTR
B1:5874 E0          movx    A, @DPTR
B1:5875 F9          mov     R1, A
B1:5876 A3          inc     DPTR
B1:5877 E0          movx    A, @DPTR
B1:5878 FA          mov     R2, A
B1:5879 A3          inc     DPTR
B1:587A E0          movx    A, @DPTR
B1:587B FB          mov     R3, A
B1:587C 90 FB A8    mov     DPTR, #XRAM_FBA8      ; Número sequencial da TAG?
B1:587F E0          movx    A, @DPTR
B1:5880 90 2F DB    mov     DPTR, #B1_2FDB
B1:5883 93          movc    A, @A+DPTR
B1:5884 FF          mov     R7, A
B1:5885 E4          clr     A
B1:5886 FC          mov     R4, A
B1:5887 FD          mov     R5, A
B1:5888 FE          mov     R6, A
B1:5889 EB          mov     A, R3
B1:588A 2F          add     A, R7
B1:588B FF          mov     R7, A
B1:588C EE          mov     A, R6
B1:588D 3A          addc    A, R2
B1:588E FE          mov     R6, A
B1:588F ED          mov     A, R5
B1:5890 39          addc    A, R1
B1:5891 FD          mov     R5, A
B1:5892 EC          mov     A, R4
B1:5893 38          addc    A, R0
B1:5894 FC          mov     R4, A
B1:5895 90 FB A0    mov     DPTR, #XRAM_FBA0
B1:5898 12 08 F5    lcall   B1_?C?LSTXDATA
B1:589B 90 FB A8    mov     DPTR, #XRAM_FBA8      ; Número sequencial da TAG?
B1:589E E0          movx    A, @DPTR
B1:589F 04          inc     A
B1:58A0 F0          movx    @DPTR, A
B1:58A1 E0          movx    A, @DPTR
B1:58A2 C3          clr     C
B1:58A3 94 06       subb    A, #6
B1:58A5 50 03       jnc     B1_58AA
B1:58A7 02 56 F3    ljmp    B1_56F3
B1:58AA             ; ---------------------------------------------------------------------------
B1:58AA
B1:58AA             B1_58AA:                      ; CODE XREF: MP3_TagDisplay+8Fj
B1:58AA                                           ; MP3_TagDisplay+DDj ...
B1:58AA 22          ret
B1:58AA             ; End of function MP3_TagDisplay
[/size]

« Last Edit: July 28, 2007, 04:02:03 AM by 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 eneris

  • Novato Prolixo
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #58 on: July 27, 2007, 08:12:23 AM »
Eu fiz a mudança seguindo o tutorial do Vladmir mas sempre a TAG descia pra parte de baixo da tela e overscan acabava "comendo" pois eu nao estava conseguindo fazer que o caractere ficassem mais proximo, mas graças a seu tutorial acima agora ficou perfeito.

Valeu Ryan.

PS. Como fazer modificação diretamente usando o IDA? Tem como? Eu uso aqui uma versão de teste e nao conseguir, nao sei se é por ser TRIAL ou porque ele nao faz mesmo, como por exemplo inserir novas linhas como você fez acima.
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #59 on: July 27, 2007, 08:20:16 AM »
Não tem como modificar usando o IDA, infelizmente. Isso pouparia um trabalho danado.

As linhas modificadas acima foram redigidas manualmente por mim, para ajudar na compreensão do texto
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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #60 on: July 27, 2007, 08:23:19 AM »
O Vladimir fez um tutorial explicando como fazer isso?

Eu só vi aquele post onde ele ainda não sabia como fazer.

Raios... se eu tivesse pesquisado mais não teria passado horas analisando e testando valores.  :dashhead1:

Você tem o link fácil aí?
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 eneris

  • Novato Prolixo
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #61 on: July 27, 2007, 11:54:25 AM »
O Vladimir fez um tutorial explicando como fazer isso?

Eu só vi aquele post onde ele ainda não sabia como fazer.

Raios... se eu tivesse pesquisado mais não teria passado horas analisando e testando valores.  :dashhead1:

Você tem o link fácil aí?

Então provavelmente o documento que eu tenho que mostra as rotinas das TAG MP3 não é de autoria do Vladimir, eu econtrei no DreaMule um pacote zipado com o nome de (MTK_DOC_Vladimir-Boroda) dentro tem varios documentos bem interessante, a maioria é de autoria do NewAge, pois estão presente no grupo do yahoo.

Se você quizer dar uma olhada posso fazer um UP.
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #62 on: July 27, 2007, 12:32:54 PM »
Se você quizer dar uma olhada posso fazer um UP.
Desculpe me entrometer, mas se puder fazer o upload ficarei muito grato...  ;)
Fórum do DVP5100
(novo endereço)

Offline eneris

  • Novato Prolixo
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #63 on: July 27, 2007, 01:02:47 PM »
Olá Jmaraujo, tudo beleza?

O documento das TAG MP3 é bem pratico, tem apenas duas paginas, estou usando ele como base tambem para implementar MP3 TAG no Proview 858, fiz o UP apenas dele, os outros documentos tem 7MB, se interessar posso fazer o UP.

http://www.4shared.com/file/20785704/b56dcdf/Rout_-_MP3_TAGS.html
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #64 on: July 27, 2007, 01:10:36 PM »
Muito obrigado!!!  ;D

os outros documentos tem 7MB, se interessar posso fazer o UP.
Interessa sim, se não for muito incomodo...
Fórum do DVP5100
(novo endereço)

Offline eneris

  • Novato Prolixo
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #65 on: July 27, 2007, 01:31:14 PM »
Nenhum incômodo, compactei em .RAR pra diminuir um pouco o tamanho.

Download (4MB)
http://www.4shared.com/file/20787715/cf431583/Documentos_MTK.html

« Last Edit: July 28, 2007, 08:50:27 AM by eneris »
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #66 on: July 27, 2007, 11:37:28 PM »
Muito obrigado, Eneris.
Fórum do DVP5100
(novo endereço)

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #67 on: July 28, 2007, 12:42:53 AM »

O documento das TAG MP3 é bem pratico, tem apenas duas paginas,

http://www.4shared.com/file/20785704/b56dcdf/Rout_-_MP3_TAGS.html

Tem certeza de que foi esse o documento que você usou para mover as tags? Tudo o que eu consegui obter dele (não entendo C ainda) foram as pistas necessárias para encontrar a rotina MP3_tagDisplay em qualquer firmware.

Mesmo assim, ajudou bastante!

Editado: Esse é o mesmo documento Info - MP3 tags.rtfescrito por lisatv_ e disponível no MT13x9, mas que eu não havia lido ainda.

« Last Edit: July 28, 2007, 05:16:18 AM by 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #68 on: July 28, 2007, 12:46:48 AM »
Nenhum encomodo, compactei em .RAR pra diminuir um pouco o tamanho.

Download (4MB)
http://www.4shared.com/file/20787715/cf431583/Documentos_MTK.html

A maior parte dos documentos pode ser garimpada no grupo MT13x9, mas existem algumas novidades.

De qualquer forma, é bom poder encontrar todos esses documentos em um só pacote. Baixar um por um no MT13x9 é um saco!

Obrigado!
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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #69 on: July 28, 2007, 01:59:48 AM »
MT1389_MISC.idc

Eu perdi a conta de quantas horas perdi procurando pela rotina RC_DECODE e pelas rotinas PREF/SET_Char nos firmwares. Tudo por não saber que o script MT1389_MISC.idc encontra essas e várias outras rotinas automaticamente.

Eu achava que o script MT1389_8032_FULL.idc englobava tudo o que já havia sido descoberto pelo grupo MT13x9, mas quebrei a cara. Também é preciso rodar MT1389_MISC.idc e possivelmente existem outros scripts úteis.

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 eneris

  • Novato Prolixo
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #70 on: July 28, 2007, 07:56:04 AM »

O documento das TAG MP3 é bem pratico, tem apenas duas paginas,

http://www.4shared.com/file/20785704/b56dcdf/Rout_-_MP3_TAGS.html

Tem certeza de que foi esse o documento que você usou para mover as tags? Tudo o que eu consegui obter dele (não entendo C ainda) foram as pistas necessárias para encontrar a rotina MP3_tagDisplay em qualquer firmware.

Mesmo assim, ajudou bastante!

Editado: Esse é o mesmo documento Info - MP3 tags.rtfescrito por lisatv_ e disponível no MT13x9, mas que eu não havia lido ainda.



Como eu disse no post anterior ao jmaraujo, estou usando ele tambem pra implementar MP3 TAG ao Proview 858, mas no estou encontrando algumas rotinas, se nao me engano este documento estar incompleto.

PS. Ryan existe alguma maneira de dar autoload nas legendas no 5965 sem dar pane nos menu DivX Ultra? Eu usei um documento presente no grupo do yahoo e a legenda até autocarrega mas em compensação dar pane nos filmes como menu DivX Ultra, deste jeito nao acho interessante coloca a função de autoload nas legendas, pois eu tenho muito filme com menu DivX Ultra.
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #71 on: July 28, 2007, 08:10:43 AM »

PS. Ryan existe alguma maneira de dar autoload nas legendas no 5965 sem dar pane nos menu DivX Ultra? Eu usei um documento presente no grupo do yahoo e a legenda até autocarrega mas em compensação dar pane nos filmes como menu DivX Ultra, deste jeito nao acho interessante coloca a função de autoload nas legendas, pois eu tenho muito filme com menu DivX Ultra.

Eu nunca tentei fazer o autoload, mas eu dei uma olhada por alto no documento "Smart loading of text subtitles in DMF RISC’s" do HEJ e não deveria haver qualquer efeito colateral.

Outra hora eu darei uma olhada nisso. Neste momento eu estou estudando outra coisa.
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
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #72 on: July 28, 2007, 11:36:39 AM »
Eneris:
No grupo MT13x9 do Yahoo! tem um velho post meu (Jan 13, 2007) onde está explicado como eu fiz o "autoload" de legendas (é preciso ser usuario de Y! para acessar o grupo):

http://tech.groups.yahoo.com/group/mt13x9/message/8340

(Aclaração: Naquele momento eu não notei que deixei um par de comentarios em espanhol... por tanto "botón" = tecla)

Os endereços no meu post são do DVP5100. Voçê pode pegar o firmware jmaraujo 1.1 e o original 0E.0A (do fórum do DVP5100, ou do site do Ryan) para comparar. Também é preciso trocar o "12" (avi) nos ArmCodes, para "9" (mpeg).

Um abraço.
« Last Edit: July 28, 2007, 11:40:10 AM by jmaraujo »
Fórum do DVP5100
(novo endereço)

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #73 on: July 28, 2007, 11:57:12 AM »
Primeiro gostaría de parabenizar o Ryan pelas descobertas...  :clapping:

Se voçês precisarem fazer espaço para botar os tags mp3 na parte de abaixo da tela, é possivel apertar a parte dos nomes de arquivo no filebrowser, mexendo nas coordenadas.

Primeiro é preciso achar a função "DIR_Disp_Filelist":

ROM:593C             DIR_Disp_Filelist:
ROM:593C 90 FB 6C              mov   DPTR, #0xFB6C
ROM:593F EF                    mov   A, R7
ROM:5940 F0                    movx  @DPTR, A
ROM:5941 D2 74                 setb  RAM_2E.4
ROM:5943 E0                    movx  A, @DPTR
ROM:5944 75 F0 10              mov   B, #0x10                ; B-Register
ROM:5947 A4                    mul   AB
ROM:5948 24 E0                 add   A, #0xE0 ; 'Ó'
ROM:594A FF                    mov   R7, A
ROM:594B E5 F0                 mov   A, B                    ; B-Register
ROM:594D 34 08                 addc  A, #8
... (cont)


Seguindo a rotina "DIR_Disp_Filelist", mais abaixo há o seguinte código:

ROM:5A1A             ROM_5A1A:
ROM:5A1A 90 FB 6C              mov   DPTR, #0xFB6C
ROM:5A1D E0                    movx  A, @DPTR
ROM:5A1E FF                    mov   R7, A
ROM:5A1F 75 F0 08              mov   B, #8                   ; B-Register
ROM:5A22 A4                    mul   AB
ROM:5A23 24 B3                 add   A, #0xB3 ; '¦'          ; Pointer a tabla de coordenadas
ROM:5A25 F5 82                 mov   DPL, A                  ; Data Pointer, Low Byte
ROM:5A27 E4                    clr   A
ROM:5A28 34 22                 addc  A, #0x22 ; '"'          ; Pointer a tabla de coordenadas
ROM:5A2A F5 83                 mov   DPH, A                  ; Data Pointer, High Byte
ROM:5A2C E4                    clr   A
... (cont)


Ahí está o pointer para a tabela de coordenadas do filebrowser. No caso do DVP5100: 0x22B3

Tabela de coordenadas do filebrowser:

ROM:22B3             DIR_CoordTable
ROM:22B3 00 1E       Archivo_1:.word 0x1E                    ; X1 = 30
ROM:22B5 00 5E                 .word 0x5E                    ; Y1 = 94
ROM:22B7 02 4A                 .word 0x24A                   ; X2 = 586
ROM:22B9 00 7C                 .word 0x7C                    ; Y2 = 124
ROM:22BB 00 1E       Archivo_2:.word 0x1E                    ; X1 = 30
ROM:22BD 00 7E                 .word 0x7E                    ; Y1 = 126
ROM:22BF 02 4A                 .word 0x24A                   ; X2 = 586
ROM:22C1 00 9C                 .word 0x9C                    ; Y2 = 156
ROM:22C3 00 1E       Archivo_3:.word 0x1E                    ; X1 = 30
ROM:22C5 00 9E                 .word 0x9E                    ; Y1 = 158
ROM:22C7 02 4A                 .word 0x24A                   ; X2 = 586
ROM:22C9 00 BC                 .word 0xBC                    ; Y2 = 188
ROM:22CB 00 1E       Archivo_4:.word 0x1E                    ; X1 = 30
ROM:22CD 00 BE                 .word 0xBE                    ; Y1 = 190
ROM:22CF 02 4A                 .word 0x24A                   ; X2 = 586
ROM:22D1 00 DC                 .word 0xDC                    ; Y2 = 220



X1-Y1 é a coordenada do canto superior esquerdo. X2-Y2 é a coordenada do canto inferior direito. Ajustando os valores de Y1 e Y2 é possivel apertar um pouco a visualização dos arquivos no filebrowser.

Un abraço.
« Last Edit: July 28, 2007, 12:22:03 PM by jmaraujo »
Fórum do DVP5100
(novo endereço)

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #74 on: July 28, 2007, 01:23:43 PM »
Eu não tentei isso ainda, mas acho que não dá para ganhar muita coisa sem ter que mudar os ícones.

Se você ignorar os ícones ou conseguir ícones menores, aí já dá para ganhar bastante espaço.
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
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #75 on: July 28, 2007, 01:31:29 PM »
Não tinha pensado em isso...

Em teoría sería possivel apertar um pixel por linha, assim como levantar todas as quatro linhas em conjunto mais perto da seta (sem ter que mexer na janela). Isso liberaría um bom espaço na parte de baixo.

O problema é que ainda não achei a parte onde mover as setas. Uma boa alternativa sería acomodar as setas na parte direita da tela (como se fosse parte da barra de rolagem)

« Last Edit: July 28, 2007, 01:33:59 PM by jmaraujo »
Fórum do DVP5100
(novo endereço)

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #76 on: July 29, 2007, 08:53:57 AM »

O problema é que ainda não achei a parte onde mover as setas. Uma boa alternativa sería acomodar as setas na parte direita

da tela (como se fosse parte da barra de rolagem)

É mais fácil do que parece  :)

Philips DVP5960/37
Philips DVP5965K/55
Philips DVP5965/93
Philips DVP5980/12
Philips DVP3040/55
Philips DVP5100


  • Como localizar as rotinas que exibem as setas no browser
  • Como exibir as setas em outro lugar

Isto foi testado em um DVP5960/37 e as rotinas exibidas tem endereços desse aparelho, mas eu chequei os firmwares de todos os outros aparelhos indicados acima e as rotinas são exatamente iguais, em lugares diferentes, com janelas e números de ícones diferentes. Mas as idéias expostas aqui servem facilmente para todos eles.

Encontrar as rotinas é muito fácil, depois que você sabe como as setas são exibidas. Eu vou começar mostrando o jeito mais difícil, que foi o que usei por começar completamente no escuro.

Eu já sabia que as setas eram apenas ícones sendo exibidos (não são desenhadas). Então eu abri o firmware no mtkremaker e procurei pelos números dos respectivos ícones.

  • Seta superior: 0x26
  • Seta inferior: 0x25

E daí eu parti pro chute: No IDA, pedi para encontrar todas as ocorrências do byte 0x26 no firmware.

A princípio, parece coisa de doido. Eu sabia que teria uma quantidade enorme de respostas, mas eu esperava poder aplicar algum método extra para eliminar as possibilidades, e realmente pude.

Eu já sabia de antemão que as rotinas do browser no DVP5960 estão no banco 1, então eu supus que as rotinas de exibição das setas teriam que estar no mesmo banco. Isso já eliminou um monte de possibilidades, mas ainda assim sobrou muita coisa:



Das 305 ocorrências apenas 40 estavam no banco 1 (destacado em verde).

Eu estava disposto a testar todas as 40, mas não era preciso. Na maioria delas, "26" era parte de uma instrução mais complexa. Em apenas 4 pontos o byte significava mesmo "26" (destacado em vermelho) e destes apenas 3 estavam sendo usado em instruções MOV

Então em todas as três ocorrências com instruções MOV mudei "26" por "25" e, tcham! a seta inferior passou a aparecer também no lugar da superior!

Em mais cinco minutos eu já sabia quais eram os trechos corretos a mudar.

Este bloco é o responsável pela exibição das setas enquanto você se move pelo browser:

B1:9E5C
B1:9E5C             Exibe_Setas:                  ; CODE XREF: B1_9E44+13j
B1:9E5C 90 FC 76    mov     DPTR, #XRAM_FC76      ; Coordenada horizontal (HI)
B1:9E5F E4          clr     A
B1:9E60 F0          movx    @DPTR, A
B1:9E61 A3          inc     DPTR
B1:9E62 74 B4       mov     A, #0xB4 ; '¦'
B1:9E64 F0          movx    @DPTR, A
B1:9E65 90 FC 79    mov     DPTR, #XRAM_FC79
     ; Coordenada vertical (HI)
B1:9E68 E4          clr     A
B1:9E69 F0          movx    @DPTR, A
B1:9E6A A3          inc     DPTR
B1:9E6B 74 E8       mov     A, #0xE8 ; 'Þ'
B1:9E6D F0          movx    @DPTR, A
B1:9E6E 7D 25       mov     R5, #0x25 ; '%'       ; Seta inferior (ver no mtkremaker)
B1:9E70 7F 0F       mov     R7, #0xF
B1:9E72 12 1E BA    lcall   B1_BS_235_B3_2D12
B1:9E75 90 FC 76    mov     DPTR, #XRAM_FC76      ; Coordenada horizontal (HI)
B1:9E78 E4          clr     A
B1:9E79 F0          movx    @DPTR, A
B1:9E7A A3          inc     DPTR
B1:9E7B 74 B4       mov     A, #0xB4 ; '¦'
B1:9E7D F0          movx    @DPTR, A
B1:9E7E 90 FC 79    mov     DPTR, #XRAM_FC79 
    ; Coordenada vertical (HI)
B1:9E81 E4          clr     A
B1:9E82 F0          movx    @DPTR, A
B1:9E83 A3          inc     DPTR
B1:9E84 74 36       mov     A, #0x36 ; '6'
B1:9E86 F0          movx    @DPTR, A
B1:9E87 7D 26       mov     R5, #0x26 ; '&'       ; Seta superior (ver no mtkremaker)
B1:9E89 7F 0F       mov     R7, #0xF              ; janela
B1:9E8B 02 1E BA    ljmp    B1_BS_235_B3_2D12


E este bloco é responsável pela exibição inicial das setas


B1:9EE1
B1:9EE1             Config_SetaInferior:          ; CODE XREF: B1_9E44+9j
B1:9EE1 90 FC 76    mov     DPTR, #XRAM_FC76      ; Coordenada horizontal (HI)
B1:9EE4 E4          clr     A
B1:9EE5 F0          movx    @DPTR, A
B1:9EE6 A3          inc     DPTR                  ; XRAM_FC77
B1:9EE7 74 B4       mov     A, #0xB4 ; '¦'
B1:9EE9 F0          movx    @DPTR, A
B1:9EEA 90 FC 79    mov     DPTR, #XRAM_FC79
     ; Coordenada vertical (HI)
B1:9EED E4          clr     A
B1:9EEE F0          movx    @DPTR, A
B1:9EEF A3          inc     DPTR
B1:9EF0 74 36       mov     A, #0x36 ; '6'
B1:9EF2 F0          movx    @DPTR, A
B1:9EF3 7D 26       mov     R5, #0x26 ; '&'       ; Seta inferior
B1:9EF5 7F 0F       mov     R7, #0xF
B1:9EF7 02 1E BA    ljmp    B1_BS_235_B3_2D12
B1:9EFA             ; ---------------------------------------------------------------------------
B1:9EFA
B1:9EFA             Config_SetaSuperior:          ; CODE XREF: B1_9E44+Fj
B1:9EFA 90 FC 76    mov     DPTR, #XRAM_FC76      ; Coordenada horizontal (HI)
B1:9EFD E4          clr     A
B1:9EFE F0          movx    @DPTR, A
B1:9EFF A3          inc     DPTR
B1:9F00 74 B4       mov     A, #0xB4 ; '¦'
B1:9F02 F0          movx    @DPTR, A
B1:9F03 90 FC 79    mov     DPTR, #XRAM_FC79
     ; Coordenada vertical (HI)
B1:9F06 E4          clr     A
B1:9F07 F0          movx    @DPTR, A
B1:9F08 A3          inc     DPTR
B1:9F09 74 E8       mov     A, #0xE8 ; 'Þ'
B1:9F0B F0          movx    @DPTR, A
B1:9F0C 7D 25       mov     R5, #0x25 ; '%'       ; Seta superior
B1:9F0E 7F 0F       mov     R7, #0xF
B1:9F10 12 1E BA    lcall   B1_BS_235_B3_2D12
B1:9F13
B1:9F13             B1_9F13:                      ; CODE XREF: B1_9E44+15j
B1:9F13 22          ret
B1:9F13             ; End of function B1_9E44


Para poder deslocar as setas para a direita sem precisar escrever novas rotinas eu usei um pequeno truque.

Basta mudar em quatro lugares (os destacados em vermelho):

E4          clr     A
F0          movx    @DPTR, A
A3          inc     DPTR
74 B4       mov     A, #0xB4 ; '¦'
F0          movx    @DPTR, A
90 FC 79    mov     DPTR, #XRAM_FC79


por
74 02       mov     A, #0x2
F0          movx    @DPTR, A
A3          inc     DPTR
74 10       mov     A, #0x10
F0          movx    @DPTR, A
A3          inc     DPTR 
A3          inc     DPTR


Isto ocupa a mesma quantidade de bytes. O truque só é possível porque o próximo endereço XRAM carregado na rotina fica a apenas dois endereços de distância, daí fica mais "econômico" carregá-lo com duas instruções INC DPTR (dois bytes) do que uma instrução mov DPTR, # (três bytes).

O resultado foi esse:



Problemas pendentes


1) Ao selecionar um MP3 qualquer, a seta inferior está sumindo:



Resolvido! Tinha sido um erro meu ao inserir uma das modificações.

2) Ao mover a seleção para um arquivo diferente do que está tocando, uma faixa das tags é apagada e um grande retângulo à direita do browser também, o que apaga inclusive as duas setas:



O retângulo só é cortado no momento que você se move do arquivo que está tocando para outro ou quando o aparelho salta automaticamente para outra música. Esse problema do retângulo deve ser conhecido e simples de resolver e não tem nada a ver com a movimentação das tags e das setas. Eu estou trabalhando em um firmware "quase" original, daí os problemas.

Resolvido (o retângulo) ! Procure por isso no firmware:

B1:C77D 90 FC 76    mov     DPTR, #XRAM_FC76      ; Coordenada horizontal (HI)
B1:C780 74 01       mov     A, #1
B1:C782 F0          movx    @DPTR, A
B1:C783 A3          inc     DPTR
B1:C784 74 6F       mov     A, #0x6F ; 'o'
B1:C786 F0          movx    @DPTR, A
B1:C787 90 FC 79    mov     DPTR, #XRAM_FC79      ; Coordenada vertical (HI)
B1:C78A E4          clr     A
B1:C78B F0          movx    @DPTR, A
B1:C78C A3          inc     DPTR
B1:C78D 74 37       mov     A, #0x37 ; '7'   
B1:C78F F0          movx    @DPTR, A
B1:C790 7B B4       mov     R3, #0xB4 ; '¦'       ; 0xB4: largura
B1:C792 7A 00       mov     R2, #0
B1:C794 7D DC       mov     R5, #0xDC ; '_'       ; 0xDC: altura
B1:C796 7C 00       mov     R4, #0
B1:C798 7F 0F       mov     R7, #0xF
B1:C79A 12 1E 54    lcall   ClearRect


Para eliminar o apagamento, mude nas linhas em azul:

B4 => 00
DC => 00
 
Para fazer com que o apagamento seja feito em outras coordenadas (no lugar onde estão as tags, por exemplo), mude as coordenadas nas linhas em vermelho.


3) Ao paginar, o browser é refeito, mas outro pedaço das tags é cortado:


 
É importante notar que isso só é um problema porque eu estou tentando mudar o comportamento normal do aparelho. O normal é as tags serem completamente apagadas quando não é o arquivo que está tocando que é selecionado. Eu estou tentando manter na tela as tags da música em execução, daí o problema.

Se você ficar satisfeito com o comportamento normal, é só dar um jeito de apagar todas as tags ao mover a barra de seleção. Existe uma rotina que faz isso.


Como localizar as rotinas no seu firmware

Eu expliquei o modo difícil, que acabou se tornando um modo bem fácil, mas que requer intuição humana para funcionar. comparando todas as rotinas que olhei, encontrei um modo mais "técnico", que pode ser usado em um patch automático. Procure por:

7D xx 7F yy

Onde xx é o número do ícone e yy é o número da janela onde o browser é desenhado. Em todos os firmwares testados, isso leva direto e apenas às rotinas certas.

Se você não souber ainda o número da janela, procure por

7D xx 7F

Isso vai retornar mais resultados, mas rapidamente você descartará os errados, porque ocorrem em outros bancos.
« Last Edit: August 02, 2007, 06:26:18 AM by 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 eneris

  • Novato Prolixo
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #77 on: July 29, 2007, 09:28:20 AM »
Muito bom Ryan, Parabens! :clapping:

So nao captei a parte que troca 4 bytes.

EDITADO: Ryan, ao inves de mover as setas nao teria como apagar elas, e deixar como no Proview que as setas estao na imagem do background? O ruim é que nao iriamos saber se ainda tem mais arquivos abaixo ou acima, no Proview existe a barra de rolagem.
« Last Edit: July 29, 2007, 09:32:07 AM by eneris »
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #78 on: July 29, 2007, 09:41:40 AM »
Não é quatro bytes. É quatro lugares :)

Se ainda não estiver claro, me avise.

E para apagar as setas, basta mandar ver NOPs em todas as rotinas. Mas eu não acho que isso seja uma boa idéia
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 eneris

  • Novato Prolixo
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #79 on: July 29, 2007, 09:51:53 AM »
Agora captei.  :dashhead1:

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #80 on: July 30, 2007, 03:33:12 AM »
BUG!

Eu implantei do zero todas as modificações em um firmware limpo e acabei me deparando com um bug:

Esta é a exibição normal de thumbnails do DVP5960:



E como ficou com as minhas modificações:



Eu ainda não sei o que provocou isso. Além da definição de fonte própria para as tags, a mudança na posição das mesmas e a posição das setas eu também passei o firmware no mtkModToolbox para corrigir o browser

Não estou com tempo agora para testar uma coisa de cada vez e localizar o que provocou o problema, porque já me ocupei com outra coisa, mas depois eu verei isso.

[01/09/07] Eu ainda não descobri o que aconteceu, mas os patches feitos pelo meu programa MTK Patcher não estão provocando o problema. Eu ainda tenho curiosidade de saber o que ocorreu, porque ninguém sabe como mudar a posição de exibição do preview.
« Last Edit: September 01, 2007, 04:39:17 PM by 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
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #81 on: July 30, 2007, 07:48:03 AM »
Eu ainda não sei o que provocou isso. Além da definicção de fonte própria para as tags, a mudança na posição das mesmas e a posição das setas eu também passei o firmware no mtkModToolbox para corrigir o browser
Eu lembro ter lido -faz um tempão já- um post no grupo MT13x9 (acho que o post era do NA), onde dizia que a posição de algumas janelas é relativa, enquanto as de outras janelas é absoluta.

Quem sabe esse é o caso... Se voçê ampliou a janela do filebrowser, é possivel que isso possa ter alterado a posição da miniatura jpeg...  ;)
Fórum do DVP5100
(novo endereço)

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #82 on: July 30, 2007, 08:07:27 AM »
Não é isso. Reduzi a janela e nada mudou.
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 eneris

  • Novato Prolixo
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #83 on: July 30, 2007, 08:09:48 AM »
Realmente, testei aqui no 5965 e o bug acontece identico. :(
Mas a exibição JPEG pra mim nao tem importancia, pois eu ja desativei por definitivo,  ;D

PS: Ryan ou Jmaraujo, tem alguma maneira de encontrar o ARM_getChar e arm_putChar usando o proprio IDA? Pois seria bem mais pratico, eu dei uma caçada no grupo do yahoo e nao achei nada a respeito.
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #84 on: July 30, 2007, 08:18:58 AM »
Eneris:
Eles aparecem no MTK Remaker, no Banco 0. Pegue a direçao que o MTK Remaker mostra e busque:

"90 ? ? 02 02 28", onde ? ? é o endereço no Banco 0.

Por exemplo, olhando o firmware do DVP5100 no MTK Remaker, Arm_GetChar está no ROM:F2EC (do Banco 0).

Busque "90 F2 EC 02 02 28" em qualquer banco e voçê vai achar o endereço:

ROM:047B             Arm_GetChar:
ROM:047B 90 F2 EC              mov   DPTR, #0xF2EC
ROM:047E 02 02 28              ljmp  B_BANK0


No caso do meu exemplo: Arm_GetChar = 047B

Faça o mesmo procedimento para achar Arm_PutChar, Arm_GetDram e Arm_PutDram.

Saudações!

EDIT:
Ou busque a seqüencia "D3 10 AF 01 C3 C0 D0 8E ? 8F ? 90 F8 60" para achar Arm_GetChar e Arm_GetChar1C no banco 0.

Acho mais fácil o método do MTK Remaker...  ;)
« Last Edit: July 30, 2007, 08:26:37 AM by jmaraujo »
Fórum do DVP5100
(novo endereço)

Offline eneris

  • Novato Prolixo
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #85 on: July 30, 2007, 08:28:23 AM »
Valeu jmaraujo,

O primeiro metodo eu ja conhecia, o segundo nao, vou testar o segundo aqui.

Edit: O segundo metodo aqui nao funcionou, é encontrado um endereço diferente.
Edit 2: O primeiro metodo nem sempre funciona, pois nao sao todos os firmware que mostra no Banco 0 arm_getChar e arm_PutChar.
« Last Edit: July 30, 2007, 09:03:52 AM by eneris »
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #86 on: July 30, 2007, 08:35:34 AM »
Agora temos espaço sobrando, mas faltam caracteres. A limitação de 14 caracteres por tag é artificial, porque a seção ARM entrega 30. Então vamos aumentar isso.

Três bytes precisam ser mudados, em dois pontos diferentes:

B1:5785 94 FF       subb    A, #0xFF              
B1:5787 40 03       jc      B1_578C
B1:5789 74 FF       mov     A, #0xFF   

e

B1:57CA 94 FF       subb    A, #0xFF              ; Número máximo de caracteres a exibir por TAG
Jefferson, não estou conseguindo achar o último local a alterar. É a última coisa que me está faltando trocar...

Ponto 1 e 2 no firwmare do DVP5100:

ROM:48E4 94 1E                 subb  A, #0x1E                ; límite de caracteres en mp3 tags
ROM:48E6 40 03                 jc    ROM_48EB
ROM:48E8 74 1E                 mov   A, #0x1E                ; límite de caracteres en mp3 tags


Ponto 3???

¿Será que voçê podería me ajudar?

Obrigado!  ;)
Fórum do DVP5100
(novo endereço)

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #87 on: July 30, 2007, 08:39:48 AM »
DVP5100 0E.0A

B1:4929 94 10       subb    A, #0x10
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
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #88 on: July 30, 2007, 08:40:56 AM »
Muito obrigado!!!  :yahoo!: 8)
Fórum do DVP5100
(novo endereço)

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #89 on: July 30, 2007, 08:44:22 AM »
Não é dificil achar. Você provavelmente estava procurando po "0E". Mas se olhasse no exemplo, perceberia que nesta linha é "10".
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
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #90 on: July 30, 2007, 09:44:12 AM »
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?
« Last Edit: July 30, 2007, 10:08:14 AM by jmaraujo »
Fórum do DVP5100
(novo endereço)

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #91 on: July 30, 2007, 09:49:05 AM »

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?!

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #92 on: July 30, 2007, 09:59:09 AM »
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).
Fórum do DVP5100
(novo endereço)

Offline eneris

  • Novato Prolixo
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #93 on: July 30, 2007, 11:26:15 AM »
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
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #94 on: July 30, 2007, 11:38:23 AM »
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.
« Last Edit: February 09, 2010, 06:17:20 PM by 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
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #95 on: July 30, 2007, 12: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.
Fórum do DVP5100
(novo endereço)

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #96 on: July 30, 2007, 12: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


« Last Edit: August 04, 2007, 11:22:30 AM by 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
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #97 on: July 30, 2007, 12: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.
« Last Edit: July 30, 2007, 12:54:36 PM by jmaraujo »
Fórum do DVP5100
(novo endereço)

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #98 on: July 30, 2007, 12: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.
« Last Edit: July 30, 2007, 01:01:40 PM by jmaraujo »
Fórum do DVP5100
(novo endereço)

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #99 on: July 30, 2007, 01: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?  :-[
Fórum do DVP5100
(novo endereço)