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

0 Membros e 1 Visitante estão vendo este tópico.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Firmware MT13x9: Log de Descobertas
« Online: Julho 06, 2007, 09: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;
« Última modificação: Março 11, 2008, 06:12:30 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Rotina Sub_Style do DVP5965K/93 (DVP5965K/55)
« Responder #1 Online: Julho 06, 2007, 09: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
« Última modificação: Julho 19, 2007, 05:17:32 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

FORUM.RYAN.COM.BR

Rotina Sub_Style do DVP5965K/93 (DVP5965K/55)
« Responder #1 Online: Julho 06, 2007, 09:10:28 am »

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Sub_Style do Lenoxx DV-406
« Responder #2 Online: Julho 06, 2007, 09: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

« Última modificação: Julho 19, 2007, 05:26:44 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Sub_Style do DVP5960/37
« Responder #3 Online: Julho 06, 2007, 09: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
« Última modificação: Julho 19, 2007, 05:40:39 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #4 Online: Julho 06, 2007, 10: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
« Última modificação: Julho 06, 2007, 05:57:48 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #5 Online: Julho 06, 2007, 10: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
« Última modificação: Julho 06, 2007, 11:25:51 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #6 Online: Julho 06, 2007, 12:05:04 pm »
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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #7 Online: Julho 06, 2007, 12:14:26 pm »
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.
« Última modificação: Agosto 18, 2007, 08:57:01 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #8 Online: Julho 06, 2007, 12:43:01 pm »
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.
« Última modificação: Agosto 18, 2007, 08:59:57 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #9 Online: Julho 06, 2007, 02:41:26 pm »
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
« Última modificação: Julho 18, 2007, 04:49:11 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #10 Online: Julho 06, 2007, 02:52:30 pm »
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

« Última modificação: Julho 06, 2007, 02:56:20 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #11 Online: Julho 06, 2007, 03:40:26 pm »
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

« Última modificação: Julho 30, 2007, 05:47:18 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #12 Online: Julho 06, 2007, 03:45:12 pm »
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.
« Última modificação: Julho 07, 2007, 07:13:04 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #13 Online: Julho 06, 2007, 04: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
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #14 Online: Julho 06, 2007, 04: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!

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #15 Online: Julho 06, 2007, 04: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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #16 Online: Julho 06, 2007, 04: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.

« Última modificação: Julho 06, 2007, 08:37:01 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #17 Online: Julho 06, 2007, 04: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.
« Última modificação: Agosto 20, 2007, 12:05:18 am por jmaraujo »

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #18 Online: Julho 06, 2007, 05: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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #19 Online: Julho 06, 2007, 05: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ê.

« Última modificação: Julho 07, 2007, 07:16:30 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #20 Online: Julho 06, 2007, 07: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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #21 Online: Julho 06, 2007, 08: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
  • *
  • Mensagens: 188
  • Aprovação: +3/-0
    • Ver Perfil
Re: Firmware: log de descobertas
« Responder #22 Online: Julho 06, 2007, 09: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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #23 Online: Julho 06, 2007, 10: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
  • *
  • Mensagens: 188
  • Aprovação: +3/-0
    • Ver Perfil
Re: Firmware: log de descobertas
« Responder #24 Online: Julho 06, 2007, 10:20:47 pm »
Agora resolveu abrir.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #25 Online: Julho 07, 2007, 09: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
  • *
  • Mensagens: 7
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware: log de descobertas
« Responder #26 Online: Julho 07, 2007, 11: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?
« Última modificação: Julho 07, 2007, 11:54:46 am por attentus »

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #27 Online: Julho 07, 2007, 12:11:34 pm »

[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
  • *
  • Mensagens: 7
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware: log de descobertas
« Responder #28 Online: Julho 07, 2007, 01:27:28 pm »

[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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #29 Online: Julho 07, 2007, 01:46:20 pm »
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
  • *
  • Mensagens: 7
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware: log de descobertas
« Responder #30 Online: Julho 07, 2007, 01:59:36 pm »
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
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #31 Online: Julho 07, 2007, 08: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.
« Última modificação: Julho 07, 2007, 09:09:41 pm por Jefferson »
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #32 Online: Julho 07, 2007, 09: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.
« Última modificação: Julho 07, 2007, 09:15:25 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #33 Online: Julho 09, 2007, 10: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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #34 Online: Julho 14, 2007, 02:28:48 am »
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.
« Última modificação: Julho 14, 2007, 02:34:22 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #35 Online: Julho 14, 2007, 03:36:42 am »
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.
« Última modificação: Julho 14, 2007, 09:45:35 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #36 Online: Julho 14, 2007, 04: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)
« Última modificação: Julho 14, 2007, 03:53:51 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #37 Online: Julho 14, 2007, 05: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.

« Última modificação: Julho 20, 2007, 02:56:42 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #38 Online: Julho 14, 2007, 06: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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #39 Online: Julho 15, 2007, 12:29:02 am »
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)

« Última modificação: Janeiro 12, 2008, 02:54:03 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #40 Online: Julho 15, 2007, 04: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

« Última modificação: Julho 18, 2007, 04:39:26 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #41 Online: Julho 16, 2007, 02:33:42 am »
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.
« Última modificação: Julho 19, 2007, 12:55:47 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #42 Online: Julho 19, 2007, 12:06:06 am »
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.


Código: [Selecionar]
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


Código: [Selecionar]
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. 
« Última modificação: Julho 21, 2007, 10:27:21 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #43 Online: Julho 19, 2007, 12:33:55 am »
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.




« Última modificação: Julho 19, 2007, 12:53:03 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #44 Online: Julho 19, 2007, 10: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..
« Última modificação: Julho 21, 2007, 10:44:25 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #45 Online: Julho 19, 2007, 11: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.
« Última modificação: Agosto 02, 2007, 12:09:41 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #46 Online: Julho 20, 2007, 01:04:57 am »
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.


« Última modificação: Julho 20, 2007, 04:37:23 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #47 Online: Julho 22, 2007, 05: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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #48 Online: Julho 22, 2007, 06: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.
« Última modificação: Julho 22, 2007, 07:05:21 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline eneris

  • Novato Prolixo
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #49 Online: Julho 26, 2007, 12:10:45 am »
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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #50 Online: Julho 26, 2007, 12:26:26 am »
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
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #51 Online: Julho 26, 2007, 12:28:16 am »
O Philips 5965K tem este problema.
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #52 Online: Julho 26, 2007, 03:28:41 am »
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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #53 Online: Julho 26, 2007, 06: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
« Última modificação: Julho 27, 2007, 01:38:57 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #54 Online: Julho 26, 2007, 11: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.
« Última modificação: Agosto 27, 2007, 08:47:41 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #55 Online: Julho 27, 2007, 12:03:22 am »
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.
« Última modificação: Julho 28, 2007, 05:18:47 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #56 Online: Julho 27, 2007, 09: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
« Última modificação: Julho 31, 2007, 05:55:13 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #57 Online: Julho 27, 2007, 09: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]

« Última modificação: Julho 28, 2007, 08:02:03 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline eneris

  • Novato Prolixo
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #58 Online: Julho 27, 2007, 12:12:23 pm »
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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #59 Online: Julho 27, 2007, 12:20:16 pm »
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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #60 Online: Julho 27, 2007, 12:23:19 pm »
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
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #61 Online: Julho 27, 2007, 03:54:25 pm »
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
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #62 Online: Julho 27, 2007, 04: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...  ;)

Offline eneris

  • Novato Prolixo
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #63 Online: Julho 27, 2007, 05: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
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #64 Online: Julho 27, 2007, 05: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...

Offline eneris

  • Novato Prolixo
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #65 Online: Julho 27, 2007, 05: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

« Última modificação: Julho 28, 2007, 12:50:27 pm por eneris »
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #66 Online: Julho 28, 2007, 03:37:28 am »
Muito obrigado, Eneris.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #67 Online: Julho 28, 2007, 04: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.

« Última modificação: Julho 28, 2007, 09:16:18 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #68 Online: Julho 28, 2007, 04: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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #69 Online: Julho 28, 2007, 05: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
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #70 Online: Julho 28, 2007, 11: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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #71 Online: Julho 28, 2007, 12:10:43 pm »

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
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #72 Online: Julho 28, 2007, 03:36:39 pm »
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.
« Última modificação: Julho 28, 2007, 03:40:10 pm por jmaraujo »

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #73 Online: Julho 28, 2007, 03:57:12 pm »
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.
« Última modificação: Julho 28, 2007, 04:22:03 pm por jmaraujo »

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #74 Online: Julho 28, 2007, 05: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
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #75 Online: Julho 28, 2007, 05: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)

« Última modificação: Julho 28, 2007, 05:33:59 pm por jmaraujo »

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #76 Online: Julho 29, 2007, 12:53:57 pm »

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.
« Última modificação: Agosto 02, 2007, 10:26:18 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline eneris

  • Novato Prolixo
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #77 Online: Julho 29, 2007, 01:28:20 pm »
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.
« Última modificação: Julho 29, 2007, 01:32:07 pm por eneris »
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #78 Online: Julho 29, 2007, 01:41:40 pm »
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
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #79 Online: Julho 29, 2007, 01:51:53 pm »
Agora captei.  :dashhead1:

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #80 Online: Julho 30, 2007, 07: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.
« Última modificação: Setembro 01, 2007, 08:39:17 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #81 Online: Julho 30, 2007, 11: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...  ;)

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #82 Online: Julho 30, 2007, 12:07:27 pm »
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
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #83 Online: Julho 30, 2007, 12:09:48 pm »
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
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #84 Online: Julho 30, 2007, 12:18:58 pm »
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...  ;)
« Última modificação: Julho 30, 2007, 12:26:37 pm por jmaraujo »

Offline eneris

  • Novato Prolixo
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #85 Online: Julho 30, 2007, 12:28:23 pm »
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.
« Última modificação: Julho 30, 2007, 01:03:52 pm por eneris »
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #86 Online: Julho 30, 2007, 12:35:34 pm »
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!  ;)

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #87 Online: Julho 30, 2007, 12:39:48 pm »
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
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #88 Online: Julho 30, 2007, 12:40:56 pm »
Muito obrigado!!!  :yahoo!: 8)

Offline Jefferson

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

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

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

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

Offline Jefferson

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

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

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

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

Offline jmaraujo

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

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

Offline eneris

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

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

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

Offline Jefferson

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

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

O procedimento funcionou nos seguintes firmwares


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

Não funcionou nos seguintes

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

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

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




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

Tela de Versão



Procure por:

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

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

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


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

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

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

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

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


A senha é 9596

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

Tela de escolha de Região




Procure por:

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

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

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



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


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

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


A senha é 8343

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


Notas:

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

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

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

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

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

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

Offline jmaraujo

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

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

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

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

Saudações!

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

Offline Jefferson

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

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

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

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



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

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

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

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

90 FB 00    mov     DPTR, #XRAM_FB00


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

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

Offline jmaraujo

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

Eneris: Busque os seguintes dois pontos nos ArmCodes:

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


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


Modificações:

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


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



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

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


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

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

Offline jmaraujo

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

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

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

ou

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

Offline jmaraujo

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #100 Online: Julho 30, 2007, 06:13:23 pm »
É só um chute:

7F 71       mov     R7, #0x71 ; 'q'       ; Endereço 0x71 da eeprom
7E 00       mov     R6, #0
12 19 E4    lcall   Pref_Getchar_B1BS


Você tem que colocar aqui a chamada correta para Pref_Getchar no banco escolhido. Eu não sei qual é

EF          mov     A, R7
FD          mov     R5, A
90 FB A4    mov     DPTR, #XRAM_FBA4


Acima, eu já corrigi o endereço XRAM para o usado no DVP5100

74 02       mov     A, #2
F0          movx    @DPTR, A
A3          inc     DPTR
ED          mov     A, R5
F0          movx    @DPTR, A


Cor de preenchimento default do DVP5100

E4          clr     A
7B 03       mov     R3, #3
FD          mov     R5, A

       

No DVP5100, R3 é carregado com uma cor diferente de zero

E o ID da janela precisa ser recuperado :

90 FB 8D    mov     DPTR, #XRAM_FB8D      ; Window_ID?
E0          movx    A, @DPTR
FF          mov     R7, A
22          ret



Uma chamada na rotina subStyleSec ficaria assim:

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 12 xx xx     lcall Endereço_da_rotina
B3:5473 nop
B3:5474 nop
B3:5475 nop
B3:5476 nop
B3:5479 nop
B3:547A nop
B3:547B nop
B3:547D nop
B3:547E nop
B3:5480 nop
B3:5481 nop         
B3:5482 12 D4 73    lcall   OSD_TextColorB1BS
 



Como a rotina SubStyle Primária fica em outro banco, você vai ter que fazer outro patch lá.

Editado:
O caso da SubStyle Primária parece ser mais complicado. Ela não parece chamar em lugar nenhum OSD_TextColor, mas certamente o banco 1 tem um ponto de entrada para ela na BTT. Talvez seja possível contruir uma rotina para isso, mas já está chegando a minha hora de ir dormir e o raciocínio está mais lento.
« Última modificação: Julho 30, 2007, 06:24:50 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #101 Online: Julho 30, 2007, 06:21:14 pm »
Muito obrigado!!!  :yahoo!:  Vou testar hoje a noite, e posto aquí o resultado.  8)

Offline eneris

  • Novato Prolixo
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #102 Online: Julho 30, 2007, 06:23:19 pm »
Muito obrigado jmaraujo pelo patch pro browser.

PS: Ryan, o 5965 estar com um bug no visor ao aplicar o primeiro patch, apenas a primeira parte  (B1:56C0 e B1:FA32), o bug: no visor fica aparcendo varios caracteres piscando, some e volta.

OBS: (B1:56C0 e B1:FA32) ao inves de mostrar (mov A,) aqui estar aparecendo (mov R7,) isto é normal?
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline Jefferson

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


OBS: (B1:56C0 e B1:FA32) ao inves de mostrar (mov A,) aqui estar aparecendo (mov R7,) isto é normal?

Não é a primeira vez que eu misturo as instruções 7F e 74  :dashhead1:

Eu já corrigi o post

« Última modificação: Julho 30, 2007, 06:39:13 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline evb62

  • Novato
  • *
  • Mensagens: 14
  • Aprovação: +0/-0
    • Ver Perfil
PUOs - Prohibited User Operations
« Responder #104 Online: Julho 30, 2007, 06:33:33 pm »
Boa tarde a todos!

Venho acompanhando este tópico há alguns dias, e hoje resolvi me cadastrar para compartilhar uma experiência com o firmware do Proview DVP-858.

Acho que este seria o tópico apropriado, embora não seja o assunto em discussão no momento. Espero não estar atrapalhando!

Vocês já devem ter encontrado vários DVDs que proíbem o usuário de alterar o áudio ou a legenda pelo controle remoto. Nesses discos, é obrigatório usar o menu do disco. Isso é bastante comum em títulos da Disney, ou da Barbie. Para quem tem filhos em idade pré-escolar, é especialmente irritante quando você põe o desenho animado e tem que voltar ao menu para assistir em português.

Eu achei um documento escrito pelo Lee (aka mosarella) que ensina a desativar essa proibição para o DVP-720: DVP720_ RC_audio_ selection_&_prohibit_functions.rtf

Seguindo as explicações do documento a partir da tabela do controle remoto do DVP-858, encontrei diversas funções no código 8032:

B4:505B MtkCmd_Parser
B4:D665 MtkCmd_Audio
B1:A382 MtkCmd_IncAudioTrack
B0:E87A ARM_GetChar
e (talvez) B3:DCC3 SetOperationMode

Mas o interessante mesmo é a função no código ARM que cuida das proibições de operações do usuário. Não foi possível encontrar do jeito descrito pelo mosarella, mas após investigar um pouquinho, descobri que ela fica no endereço 0x8798C.

No meio da função, temos esta linha:
Código: [Selecionar]
ROM:000879DA    E2 4A         LDR     R2, =0xFFFDFFF8  ; Prohibit Filter Mask
ROM:000879DA                                           ; bit22=angle, bit21=subtitle
ROM:000879DA                                           ; bit20=audio
ROM:000879DA                                           ; bit='0': prohibit disable
ROM:000879DA                                           ; bit='1': prohibit enable
Para alterar o comportamento da função, basta trocar essa máscara (que fica na área de dados da rotina). Zerando os bits 20 e 21, o usuário já pode trocar o áudio e as legendas em muitos DVDs. Na área de dados, a máscara fica assim:
Código: [Selecionar]
ROM:00087D64 F8 FF CD FF  dword_87D64     DCD 0xFFCDFFF8
Segundo o mosarella, alguns DVDs precisariam de um patch adicional. No DVP-858, a chamada dele na função principal seria assim:
Código: [Selecionar]
ROM:0008799E CA F7 0F F9   BL    PATCH_ProhibitFilter
E o patch seria este:

Código: [Selecionar]
ROM:00051BC0   ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
ROM:00051BC0
ROM:00051BC0
ROM:00051BC0    PATCH_ProhibitFilter           ; CODE XREF: sub_8798C+12_p
ROM:00051BC0 41 7A             LDRB  R1, [R0,#9]
ROM:00051BC2 02 4A             LDR   R2, =0xFFFFFFCF
ROM:00051BC4 11 40             AND   R1, R2
ROM:00051BC6 A1 76             STRB  R1, [R4,#0x1A]
ROM:00051BC8 70 47             BX    LR
ROM:00051BC8         ; End of function PATCH_ProhibitFilter
ROM:00051BC8
ROM:00051BC8         ; ----------------------------------------------
ROM:00051BCA FF                DCB 0xFF
ROM:00051BCB FF                DCB 0xFF
ROM:00051BCC CF FF FF FF dword_51BCC DCD 0xFFFFFFCF  ; DATA XREF: PATCH_ProhibitFilter+2_r

Infelizmente, eu não consegui fazer o patch funcionar. Além do endereço 0x51BC0 acima, tentei 0x503C8, 0x4FF30, e outros, todos em áreas de mensagens de erro no código ARM. Em todos os casos, o aparelho travou ao inserir um DVD-Vídeo. Então eu deixei só o patch da nova máscara, na linha 0x879DA.

O título escolhido para o teste foi "A Era do Gelo", que é muito apropriado para o tempo infernal (ou melhor, glacial) dos últimos dias. Adeus proibições de troca de legenda e áudio! Mas infelizmente, isso não é suficiente para os DVDs da Barbie, que continuam a testar a paciência dos pais.

Eu poderia tentar um resize, como o jmaraujo sugere num post logo acima. Porém o MTKArmResizer não funciona em ARM de 3 códigos, como é o caso do DVP-858. E fazer um resize manual está fora de questão para mim. Então fiquei restrito à nova máscara. Se alguém tiver alguma sugestão, fico grato.

Offline eneris

  • Novato Prolixo
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #105 Online: Julho 30, 2007, 07:25:00 pm »
Muito obrigado Ryan, agora sim, o bug sumiu. :yahoo!: :clapping:

PS: Jmaraujo gostei da ideia de mover a imagem JPEG, vou procurar as rotinas agora.
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: PUOs - Prohibited User Operations
« Responder #106 Online: Julho 30, 2007, 08:42:03 pm »
Então fiquei restrito à nova máscara. Se alguém tiver alguma sugestão, fico grato.

Parabéns pelo mod  :yahoo!:

Quanto à ajuda, eu acho que quem está mais perto de ajudar você nisso é jmaraujo. Eu não sei lhufas de ARM ainda, porque estou me concentrando 100% em compreender o código 8032.
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #107 Online: Julho 31, 2007, 04:23:02 am »
No firmware jmaraujo 1.1 eu somente usei o patch do foncreator para remover os UOPs (estou anexando o documento).

Infelizmente ese patch não funciona em todos os casos, mas permite pular trailers, warnings, etcétera, onde anteriormente não era possivel.

O patch do Lee (mosarella) ainda não testei, mas parece mais completo que o do foncreator, porém com objetivos diferentes. (O do Lee está focado nos UOPs de audio e legenda, o do foncreator a mais tipos de UOPs)

Se o MtkArmResizer não permitir ampliar os ARMs com tres ArmCodes, faça com eu expliquei mais acima: Sobreescreva a seção de erros C+.

Offline eneris

  • Novato Prolixo
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #108 Online: Julho 31, 2007, 12:23:12 pm »
jmaraujo, quais os valores que você usou na nova posição das cordenadas das Tag Mp3? Achei a posição muito boa. 8)
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #109 Online: Julho 31, 2007, 03:25:02 pm »
Olá, eneris! Sorte que eu guardei as mudanças em um arquivo de texto...  ;)

Arquivos no Filebrowser:

Primeiro que nada é preciso levantar os arquivos do filebrowser*.

Archivo_1
ROM:22B5 00 3E                 .word 0x3E                    ; Y1 = 62
ROM:22B7 02 22                 .word 0x0222                  ; X2 = 546
ROM:22B9 00 7C                 .word 0x7C                    ; Y2 = 92
Archivo_2
ROM:22BD 00 5E                 .word 0x5E                    ; Y1 = 94
ROM:22BF 02 22                 .word 0x0222                  ; X2 = 546
ROM:22C1 00 7C                 .word 0x7C                    ; Y2 = 124
Archivo_3
ROM:22C5 00 7E                 .word 0x7E                    ; Y1 = 126
ROM:22C7 02 22                 .word 0x0222                  ; X2 = 546
ROM:22C9 00 9C                 .word 0x9C                    ; Y2 = 156
Archivo_4
ROM:22CD 00 9E                 .word 0x9E                    ; Y1 = 158
ROM:22CF 02 22                 .word 0x0222                  ; X2 = 546
ROM:22D1 00 BC                 .word 0xBC                    ; Y2 = 188

Note que não foi necesario mexer em X1, que continúa sendo o mesmo para os quatro arquivos: X=0x1E (x=30). Não foi o caso do X2, que eu moví para a esquerda para não interferir com a nova posição das setas.

Posição das setas:

Seta de cima:
X1 = 0x0224 -> 548
Y1 = 0x003E -> 62

Seta de baixo:
X1 = 0x0224 -> 548
Y1 = 0x009E -> 158

Aquí, além de trocar as coordenadas horizontais, mexí nas coordenadas verticais das setas (principalmente a de baixo) para fazer lugar para os tags mp3s. Note que a posição vertical de cada seta é a mesma que as do 1º e 4º arquivo do filebrowser (3E, 9E).

Posição dos ID3 tags:

X1 = 0x1E (30)
Y1 (offset) = 0xBE (190)

Área de limpeza:
X1= 0x1E, Y1=0xBE, largura: 0x0242, altura (o sugerido por Jefferson, acho que era 6C)

* Voçê pode comparar com o meu post anterior com as coordenadas originais (acho que na página 2 de este tópico).

Saudações!  ;)

Offline eneris

  • Novato Prolixo
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #110 Online: Julho 31, 2007, 03:30:19 pm »
Valeu Jmaraujo,  :yahoo!:

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #111 Online: Julho 31, 2007, 04:31:00 pm »
Jefferson, ¿voçê tem este documento que estou anexando? Pode ser que ele resulte útil na hora de olhar as modificações no Sub_Style do DVP5100...

Saudações!

EDIT: Links relacionados - Patch do Sidekick:
http://tech.groups.yahoo.com/group/mt13x9/message/8098
http://tech.groups.yahoo.com/group/mt13x9/message/8102


PS: Antes de abrir renomeie e extensão do arquivo para rtf. (Update: Acho que não é preciso. O MS Word reconhece o arquivo mesmo com a extensão trocada).
PS2: Anexo imagen do exemplo do patch do Sidekick.
« Última modificação: Julho 31, 2007, 06:11:06 pm por jmaraujo »

Offline ramos80

  • Novato
  • *
  • Mensagens: 2
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware: log de descobertas
« Responder #112 Online: Julho 31, 2007, 06:17:32 pm »
Primeiramente gostaria de parabenizar ao Ryan pelo fórum (achei pelo Google e estou gostando demais) e pelas novas descobertas.  :clapping: Acompanho tambem o forum do jmaraujo e as novidades do site do eneris.
Estou fazendo um mod no meu Philips 5960/12 seguindo o tópico do Ryan estou tentando alterar a posição da idTag como foi postado abaixo.


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 ;

Não compreendi onde deve ser modificado na rotina acima (os 3 bytes) e por qual valor.



Offline eneris

  • Novato Prolixo
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #113 Online: Julho 31, 2007, 06:27:37 pm »
Baixei o doc jmaraujo, chegar em casa vou testar ele. Acho que este doc eu nao tinha.
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline eneris

  • Novato Prolixo
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #114 Online: Julho 31, 2007, 07:36:35 pm »
Seja bem ao forum ramos80. As trocas são feitas onde estão os #

B1:5799 74 00       mov     A, #0        (0)
B1:579D 74 25       mov     A, #0x25 ; (25)
B1:57A7 24 F0       add     A, #0xF0 ;  (F0)

Abra o banco 8032 em um editor hexadecimal, procure pelos endereços e substitua pelos novos valores.
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline evb62

  • Novato
  • *
  • Mensagens: 14
  • Aprovação: +0/-0
    • Ver Perfil
Re: PUOs - Prohibited User Operations
« Responder #115 Online: Agosto 01, 2007, 01:49:14 am »
jmaraujo, muito obrigado!

Esse documento sobre UOPs foi muito útil. Eu não achava nada no grupo mt13x9 porque procurava "PUOs", que é como esse (inconveniente) 'feature' era chamado no site Doom9. Mas a Wikipedia menciona UOP, mesmo.

Não consegui achar a função Set_UOP, mesmo examinando todas as referências a "UOP_Bytes" no firmware (são muitas). Porém a função ReadNStore_UOP é a mesma que eu já tinha achado antes, só lhe faltava um nome. Então apliquei os patches apenas nessa função. Funcionou para "A Era do Gelo" (que eu já tinha testado com o patch da troca de máscara) e funcionou com o DVD da Barbie "As 12 Princesas Bailarinas", que tem uma quantidade infindável de menus e avisos com todo tipo de proibição. O DVD da Barbie era resistente à simples troca de máscara.

Ah, e tudo isso funcionou com a máscara original, mesmo sem a troca sugerida pelo mosarella.

Citar
Infelizmente ese patch não funciona em todos os casos, mas permite pular trailers, warnings, etcétera, onde anteriormente não era possivel.
Funcionou para o DVD da Barbie, então já fiquei feliz!

Aqui estão as modificações para o Proview DVP-858 (incluindo a troca da máscara):

Original:
Código: [Selecionar]
ROM:0008799A 01 7A          LDRB    R1, [R0,#8]     ; R1 = Prohibit Byte 3
...
ROM:0008799E 41 7A          LDRB    R1, [R0,#9]     ; R1 = Prohibit Byte 2
...
ROM:000879A2 81 7A          LDRB    R1, [R0,#0xA]  ; R1 = Prohibit Byte 1
...
ROM:000879A6 C0 7A          LDRB    R0, [R0,#0xB]  ; R1 = Prohibit Byte 0
...
ROM:000879CC 08 43          ORR     R0, R1
...
ROM:000879F4 08 43          ORR     R0, R1
...
ROM:00087D64 F8 FF FD FF  dword_87D64     DCD 0xFFFDFFF8

Alterado:
Código: [Selecionar]
ROM:0008799A 00 21          MOV R1, #0
...
ROM:0008799E 00 21          MOV R1, #0
...
ROM:000879A2 00 21          MOV R1, #0
...
ROM:000879A6 00 21          MOV R1, #0
...
ROM:000879CC 00 21          MOV R1, #0
...
ROM:000879F4 00 21          MOV R1, #0
...
ROM:00087D64 F8 FF CD FF  dword_87D64     DCD 0xFFCDFFF8

Offline Jefferson

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

Esta rotina é responsável pela exibição das imagens de background.

Minha investigação teve como ponto de partida este post de teo_abs. A seqüência indicada por ele não funcionou comigo, mas foi fácil adaptá-la.

Exemplo do DVP5960/37:

Nota: analisar esta rotina não é realmente importante. Estou transcrevendo-a aqui para que se possa tentar localizá-la por comparação, se minha seqüência de busca não funcionar em algum firmware específico.

[size=08pt]
B3:BE2E             ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B3:BE2E
B3:BE2E
B3:BE2E             vPlayerShowLogo:              ; DATA XREF: B0:B0_BS_162_B3_BE2Eo
B3:BE2E                                           ; vPlayerShowLogoB1_BSo ...
B3:BE2E 90 FB B4    mov     DPTR, #XRAM_FBB4
B3:BE31 EF          mov     A, R7
B3:BE32 F0          movx    @DPTR, A
B3:BE33 A3          inc     DPTR
B3:BE34 EC          mov     A, R4
B3:BE35 F0          movx    @DPTR, A
B3:BE36 A3          inc     DPTR
B3:BE37 ED          mov     A, R5
B3:BE38 F0          movx    @DPTR, A
B3:BE39 90 FB B4    mov     DPTR, #XRAM_FBB4
B3:BE3C E0          movx    A, @DPTR
B3:BE3D FF          mov     R7, A
B3:BE3E 64 04       xrl     A, #4
B3:BE40 70 03       jnz     B3_BE45
B3:BE42 02 BE F1    ljmp    B3_BEF1
B3:BE45             ; ---------------------------------------------------------------------------
B3:BE45
B3:BE45             B3_BE45:                      ; CODE XREF: vPlayerShowLogo+12j
B3:BE45 EF          mov     A, R7
B3:BE46 64 03       xrl     A, #3
B3:BE48 60 03       jz      B3_BE4D
B3:BE4A 02 BE DD    ljmp    B3_BEDD
B3:BE4D             ; ---------------------------------------------------------------------------
B3:BE4D
B3:BE4D             B3_BE4D:                      ; CODE XREF: vPlayerShowLogo+1Aj
B3:BE4D 90 FB B6    mov     DPTR, #XRAM_FBB6
B3:BE50 E0          movx    A, @DPTR
B3:BE51 54 0F       anl     A, #0xF
B3:BE53 C4          swap    A
B3:BE54 F8          mov     R0, A
B3:BE55 54 0F       anl     A, #0xF
B3:BE57 C8          xch     A, R0
B3:BE58 68          xrl     A, R0
B3:BE59 FF          mov     R7, A
B3:BE5A E4          clr     A
B3:BE5B C4          swap    A
B3:BE5C 54 F0       anl     A, #0xF0
B3:BE5E 48          orl     A, R0
B3:BE5F A3          inc     DPTR
B3:BE60 EF          mov     A, R7
B3:BE61 F0          movx    @DPTR, A
B3:BE62 FD          mov     R5, A
B3:BE63 7F 50       mov     R7, #0x50 ; 'P'
B3:BE65 7E 00       mov     R6, #0
B3:BE67 12 1B A8    lcall   B3_BS_104_B0_E9CC
B3:BE6A 90 FB B5    mov     DPTR, #XRAM_FBB5
B3:BE6D E0          movx    A, @DPTR
B3:BE6E C4          swap    A
B3:BE6F F8          mov     R0, A
B3:BE70 54 F0       anl     A, #0xF0
B3:BE72 C8          xch     A, R0
B3:BE73 68          xrl     A, R0
B3:BE74 FE          mov     R6, A
B3:BE75 A3          inc     DPTR
B3:BE76 E0          movx    A, @DPTR
B3:BE77 C4          swap    A
B3:BE78 54 0F       anl     A, #0xF
B3:BE7A 48          orl     A, R0
B3:BE7B FF          mov     R7, A
B3:BE7C 90 FB B5    mov     DPTR, #XRAM_FBB5
B3:BE7F EE          mov     A, R6
B3:BE80 F0          movx    @DPTR, A
B3:BE81 A3          inc     DPTR
B3:BE82 EF          mov     A, R7
B3:BE83 F0          movx    @DPTR, A
B3:BE84 54 0F       anl     A, #0xF
B3:BE86 C4          swap    A
B3:BE87 F8          mov     R0, A
B3:BE88 54 0F       anl     A, #0xF
B3:BE8A C8          xch     A, R0
B3:BE8B 68          xrl     A, R0
B3:BE8C FF          mov     R7, A
B3:BE8D E4          clr     A
B3:BE8E C4          swap    A
B3:BE8F 54 F0       anl     A, #0xF0
B3:BE91 48          orl     A, R0
B3:BE92 A3          inc     DPTR
B3:BE93 EF          mov     A, R7
B3:BE94 F0          movx    @DPTR, A
B3:BE95 FD          mov     R5, A
B3:BE96 7F 51       mov     R7, #0x51 ; 'Q'
B3:BE98 7E 00       mov     R6, #0
B3:BE9A 12 1B A8    lcall   B3_BS_104_B0_E9CC
B3:BE9D 90 FB B5    mov     DPTR, #XRAM_FBB5
B3:BEA0 E0          movx    A, @DPTR
B3:BEA1 C4          swap    A
B3:BEA2 F8          mov     R0, A
B3:BEA3 54 F0       anl     A, #0xF0
B3:BEA5 C8          xch     A, R0
B3:BEA6 68          xrl     A, R0
B3:BEA7 FE          mov     R6, A
B3:BEA8 A3          inc     DPTR
B3:BEA9 E0          movx    A, @DPTR
B3:BEAA C4          swap    A
B3:BEAB 54 0F       anl     A, #0xF
B3:BEAD 48          orl     A, R0
B3:BEAE FF          mov     R7, A
B3:BEAF 90 FB B5    mov     DPTR, #XRAM_FBB5
B3:BEB2 EE          mov     A, R6
B3:BEB3 F0          movx    @DPTR, A
B3:BEB4 A3          inc     DPTR
B3:BEB5 EF          mov     A, R7
B3:BEB6 F0          movx    @DPTR, A
B3:BEB7 54 0F       anl     A, #0xF
B3:BEB9 C4          swap    A
B3:BEBA F8          mov     R0, A
B3:BEBB 54 0F       anl     A, #0xF
B3:BEBD C8          xch     A, R0
B3:BEBE 68          xrl     A, R0
B3:BEBF FF          mov     R7, A
B3:BEC0 E4          clr     A
B3:BEC1 C4          swap    A
B3:BEC2 54 F0       anl     A, #0xF0
B3:BEC4 48          orl     A, R0
B3:BEC5 A3          inc     DPTR
B3:BEC6 EF          mov     A, R7
B3:BEC7 F0          movx    @DPTR, A
B3:BEC8 FD          mov     R5, A
B3:BEC9 7F 52       mov     R7, #0x52 ; 'R'
B3:BECB 7E 00       mov     R6, #0
B3:BECD 12 1B A8    lcall   B3_BS_104_B0_E9CC
B3:BED0 E4          clr     A
B3:BED1 90 FB F5    mov     DPTR, #XRAM_FBF5
B3:BED4 F0          movx    @DPTR, A
B3:BED5 FB          mov     R3, A
B3:BED6 7D 03       mov     R5, #3
B3:BED8 7F 30       mov     R7, #0x30 ; '0'
B3:BEDA 02 DE 81    ljmp    BankSw_102_B3_DE81
B3:BEDD             ; ---------------------------------------------------------------------------
B3:BEDD
B3:BEDD             B3_BEDD:                      ; CODE XREF: vPlayerShowLogo+1Cj
B3:BEDD 90 FB B4    mov     DPTR, #XRAM_FBB4
B3:BEE0 E0          movx    A, @DPTR
B3:BEE1 FD          mov     R5, A
B3:BEE2 90 FB B6    mov     DPTR, #XRAM_FBB6
B3:BEE5 E0          movx    A, @DPTR
B3:BEE6 FB          mov     R3, A
B3:BEE7 E4          clr     A
B3:BEE8 90 FB F5    mov     DPTR, #XRAM_FBF5
B3:BEEB F0          movx    @DPTR, A
B3:BEEC 7F 30       mov     R7, #0x30 ; '0'
B3:BEEE 12 DE 81    lcall   BankSw_102_B3_DE81
B3:BEF1
B3:BEF1             B3_BEF1:                      ; CODE XREF: vPlayerShowLogo+14j
B3:BEF1 22          ret
B3:BEF1             ; End of function vPlayerShowLogo
[/size]

Para encontrá-la, procure por:

90 ? ? EF F0 A3 EC F0 A3 ED F0 90 ? ? E0 FF 64 04 70 03 02 ? ? EF

Esta seqüência aparece uma vez em todos os firmwares que testei, no topo da rotina vPlayerShowLogo

Testado com:

  • Philips DVP3040K/55
  • Philips DVP5100K/78
  • Philips DVP5960/37
  • Philips DVP5965K/55
  • Philips DVP5980/12
  • Philips DVP5140/37
  • Proview DVP-858
  • Lenoxx DV-406

Não funcionou com:
  • Philips PET725


Para exibir o background à sua escolha entre os existentes no firmware, basta chamar a rotina assim:

B1:5667 7D 02       mov     R5, #2 //02 é o número do background (veja no mtkRemaker)
B1:5669 7C 00       mov     R4, #0
B1:566B 7F 01       mov     R7, #1
B1:566D 12 1D 04    lcall   vPlayerShowLogoB1_BS
 
« Última modificação: Agosto 01, 2007, 01:54:09 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #117 Online: Agosto 01, 2007, 01:23:05 pm »
Como definir uma imagem de background só para MP3/WMA

Em vários firmwares, isso é facílimo. Já existe uma chamada para vPlayerShowLogo no início de  MP3_TagDisplay. Você só precisa inserir no firmware um background extra e mudar o valor carregado em R5 para que aponte para ele.

Por exemplo, no DVP5960/37, MP3_TagDisplay começa assim:

B1:565C             MP3_TagDisplay:               ; CODE XREF: B1_6AC0:B1_6BF4j
B1:565C                                           ; B1_AB8D+B1p
B1:565C                                           ; DATA XREF: ...
B1:565C E4          clr     A                     ; Rotina de exibiþÒo das TAGS ID3
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                 
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   vPlayerShowLogoB1_BS


Eu usei o mtkremaker para inserir um novo background como MPEG1 (esta posição existe, mas é vazia no firmware) e fiz a simples modificação:

B1:5667 7D 01       mov     R5, #1

E agora ao selecionar um MP3 qualquer o meu background específico é carregado.

Isso deve abrir muitas possibilidades estéticas para nós, criadores de firmware. No espaço "morto" que vai ficar quando redimensionarmos o browser para reposicionar as tags MP3, podemos fazer uma decoração ou colocar outras informações.


Agora resta saber como acrescentar mais backgrounds além do limite de 3 da maioria dos firmwares. Isso permitiria ter um background específico para imagens.
« Última modificação: Agosto 01, 2007, 01:30:34 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline eneris

  • Novato Prolixo
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #118 Online: Agosto 01, 2007, 01:32:01 pm »
Para inserir varios background usando o remaker, eu substituo o parte SKIN toda com outra que possui varias imagens MPEG.
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #119 Online: Agosto 01, 2007, 01:34:32 pm »
A do DVP720, por exemplo, que tem 5 lugares...

Offline Jefferson

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

Não compreendi onde deve ser modificado na rotina acima (os 3 bytes) e por qual valor.

No seu monitor/browser você não consegue enxergar o destaque em negrito que dei aos 3 bytes?
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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #121 Online: Agosto 01, 2007, 01:40:32 pm »
Para inserir varios background usando o remaker, eu substituo o parte SKIN toda com outra que possui varias imagens MPEG.

Ótimo!

Desde que haja espaço no firmware, deve dar para fazer uns experimentos bem interessantes :)
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
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #122 Online: Agosto 01, 2007, 01:41:57 pm »
O firmware que tem mais imagens MPEG que eu ja vir, é o LG_DK194g , que possui 18 imagens MPEG. 8)
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline eneris

  • Novato Prolixo
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #123 Online: Agosto 01, 2007, 01:58:37 pm »
Ryan, você conseguiu que a altura da legenda ficasse selecionavel via menu no Proview?
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #124 Online: Agosto 01, 2007, 02:00:46 pm »
O firmware que tem mais imagens MPEG que eu ja vir, é o LG_DK194g , que possui 18 imagens MPEG. 8)

Isso mesmo!

Apenas 17 imagens desse firmware são válidas e dá um total de 581KB, que não vai caber no espaço livre da maioria dos aparelhos (o LG DK194G tem uma flash de 4MB), mas basta trocar algumas dessas posições por imagens "zeradas" para podermos colocar quantas imagens quisermos, até esbarrar nos limites de 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #125 Online: Agosto 01, 2007, 02:01:34 pm »
Ryan, você conseguiu que a altura da legenda ficasse selecionavel via menu no Proview?

Eu me aborreci com os resultados que estava tendo e parei completamente os testes. Vou voltar a esse problema outro dia.
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 ramos80

  • Novato
  • *
  • Mensagens: 2
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware: log de descobertas
« Responder #126 Online: Agosto 01, 2007, 06:13:27 pm »

Primeiramente, obrigado eneris, testei e funcionou aqui. :yahoo!:
Ryan, eu utilizo o Firefox 2.0.0.6 e o texto aparece todo igual (sem negrito), testei tambem em outro computador com o Internet Explorer 7, e tambem nao é exibido o negrito nos 3 bytes.

Eu uso o Firefox 2.0.0.4

Com ele, no meu PC principal, o negrito é visível, mesmo numa resolução de 1600x1440 (a que eu uso diariamente). A 1280x1024 (meu monitor secundário) fica ainda mais claro.

Já no IE7, realmente não dá para distinguir nada!

Eu vou ter que analisar cada página no IE7 um outro dia. Agora estou ocupado com outra(s) coisa(s).
« Última modificação: Agosto 01, 2007, 06:28:00 pm por Jefferson »

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #127 Online: Agosto 02, 2007, 11:46:13 am »
Alguns Scripts IDA

Uma coisa que me aborrece terrivelmente é que depois de localizar rotinas em um determinado firmware, é preciso fazer todas as identificações em todos os outros fimrwares compatíveis, incluindo outras versões do mesmo firmware, por isso decidi aprender a fazer alguns scripts do IDA para automatizar as tarefas, assim toda vez que eu abrir um firmware posso rapidamente incluir nele uma parte do que já aprendi com outros.

Eu ainda não domino a criação de scripts, mas já dá para fazer alguns que funcionam:

MP3_TagDisplay

// *************************************************************
// Find MP3_TagDisplay Function usually on Bank 1
static findMP3_TagDisplay()
{
   auto      ea,ps,po ;
     
ea = FindBinary (0, SEARCH_DOWN,"7F 4A 7E ? 12 ? ? 90 ? ? EF F0 7F 4B 7E ? 12 ? ? 90 ? ? EF F0 7F 4C 7E ? 12 ? ? 90 ? ? EF F0 7F 4D 7E ? 12 ? ? 90 ? ? ");   
     if (ea != -1)
       {
        ps = PrevFunction (ea+0);
        Message(" MP3_TagDisplay function at %x \n",ps );
        MakeComm (ea, "As quatro chamadas a ARM_Getchar seguintes obtem o endereco inicial do bloco de tags (4 bytes) na shared memory");
             
   MakeCode(ps);
        MakeFunction(ps,BADADDR);
        Wait ();
   MakeName(ps,"MP3_TagDisplay");
        MakeRptCmt (ps,"Rotina de exibicao das TAGS ID3");



       po = FindFuncEnd (ps);
      if (po != -1)
      {
ea = FindBinary (ea, SEARCH_DOWN,"7B  ? 7A ? 7D ? 7C ? 7F ? 12");
     if (ea != -1) // string localizada?
       { 
     if (ea < po)   // a string está dentro da função?
       {
        Message(" Clearrect em Mp3_tagDisplay at %x \n",ps );

        MakeComm (ea, "R2R3 = altura");
        MakeComm (ea+4, "R4R5 = Largura");
        MakeComm (ea+10, "Chama ClearRect para limpar o retangulo");
        } //if (ea < po)
        } // if (ea != -1)
        } //if (po != -1)




       po = FindFuncEnd (ps);
      if (po != -1)
      {
ea = FindBinary (ea, SEARCH_DOWN,"94 0E 40 03 74 0E");
     if (ea != -1) // string localizada?
       { 
     if (ea < po)   // a string está dentro da função?
       {
        Message("Encontrada limitação de exibição para 14 caracteres em Mp3_tagDisplay at %x \n",ps );

        MakeComm (ea, "Se o numero de caracteres for 14 ou menos, continua");
        MakeComm (ea+4, "Se for maior que 14, limitar a 14");
        } //if (ea < po)
        } // if (ea != -1)
        } //if (po != -1)




       po = FindFuncEnd (ps);
      if (po != -1)
      {
ea = FindBinary (ea, SEARCH_DOWN,"74 ? F0 EF 75 F0 ? A4 AE F0 24 ?");
     if (ea != -1) // string localizada?
       { 
     if (ea < po)   // a string está dentro da função?
       {
        Message("Encontrada a definição de coordenadas de exibicao das tags em Mp3_tagDisplay at %x \n",ps );

        MakeComm (ea+2, "offset horizontal. Quanto menor, mais à esquerda a linha começa.");
        MakeComm (ea+3, "R7 contem o numero da TAG (linha) sendo exibida? ");
       MakeComm (ea+4, "Altura presumida de cada linha ");
       MakeComm (ea+8, "R6 contem agora a coordenada vertical de impressao da linha? ");
       MakeComm (ea+10, "Offset vertical. Quanto menor, mais proximas do topo da janela");
   
     } //if (ea < po)
        } // if (ea != -1)
        } //if (po != -1)




       po = FindFuncEnd (ps);
      if (po != -1)
      {
ea = FindBinary (ea, SEARCH_DOWN,"D3 94 10 ?");
     if (ea != -1) // string localizada?
       { 
     if (ea < po)   // a string está dentro da função?
       {
        Message("Encontrado o limitador de caracteres em Mp3_tagDisplay at %x \n",ps );

        MakeComm (ea+1, "Numero máximo de caracteres a exibir por TAG");

   
     } //if (ea < po)
        } // if (ea != -1)
        } //if (po != -1)


}   
}


CheckVersionPass

// *************************************************************
// Find CheckVersionPass Function usually on Bank 2
static findCheckVersionPass()
{
   auto      ea,ps ;
     
ea = FindBinary (0, SEARCH_DOWN,"90 ? ? E0 64 ? 70 ? 90 ? ? E0 FF 54 0F FE 64 0F 60 ? EE C3 94 ? 50 ? EE 90 ? ? 93 FE 90 FB 00");   
     if (ea != -1)
       {
        ps = PrevFunction (ea+01);
        Message(" CheckVersionPass function at %x \n",ps );
        MakeComm (ea+05, "Este e´ o menu esperado"+ltoa(Byte(ea+06),4));
             
   MakeCode(ps);
        MakeFunction(ps,BADADDR);
        Wait ();
   MakeName(ps,"CheckVersionPass");
        MakeRptCmt (ps,"Rotina que verifica a senha para a tela de versao");
        }   
}

CheckRegionPass

// *************************************************************
// Find CheckRegionPass Function usually on Bank 2
static findCheckRegionPass()
{
   auto      ea,ps ;
     
ea = FindBinary (0, SEARCH_DOWN,"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");
 
     if (ea != -1)
       {
        ps = PrevFunction (ea+01);
        Message(" CheckRegionPass function at %x \n",ps );
        MakeComm (ea+05, "Este e´ o menu esperado");
             
   MakeCode(ps);
        MakeFunction(ps,BADADDR);
        Wait ();
   MakeName(ps,"CheckRegionPass");
        MakeRptCmt (ps,"Rotina que verifica a senha para a tela de regiao");
        }   
}


vPlayerShowLogo

// *************************************************************
// Find vPlayerShowLogo Function
static findvPlayerShowLogo()
{
   auto      ea,ps ;
     
ea = FindBinary (0, SEARCH_DOWN,"90 ? ? EF F0 A3 EC F0 A3 ED F0 90 ? ? E0 FF 64 04 70 03 02 ? ? EF");
 
     if (ea != -1)
       {
        ps = PrevFunction (ea+01);
        Message(" vPlayerShowLogo function at %x \n",ps );
                     
   MakeCode(ps);
        MakeFunction(ps,BADADDR);
        Wait ();
   MakeName(ps,"vPlayerShowLogo");
        MakeRptCmt (ps,"Rotina que exibe as imagens de background ");
        }   
}
 

Estes scripts estão todos relacionados a textos já publicados aqui, por isso dentro de alguns dias eles serão movidos para os respectivos posts.
« Última modificação: Agosto 02, 2007, 11:49:21 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #128 Online: Agosto 02, 2007, 06:15:02 pm »
Jefferson, ¿cómo voçê fez as mudanças do seu background? ¿Foi "a olho" mesmo, ou voçê calculou as coordenadas?

Foi a olho. Eu fiz umas 4 imagens até posicionar corretamente.
Acabo de perceber que no mtkModToolbox tem uma seção ("Dedução de coordenadas com auxílio de screenshot") que resulta muito útil para este tipo de tarefas...

Com essa ajuda fica bem mais fácil.  :yahoo!:

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #129 Online: Agosto 02, 2007, 06:22:27 pm »
Acabo de perceber que no mtkModToolbox tem uma seção ("Dedução de coordenadas com auxílio de screenshot") que resulta muito útil para este tipo de tarefas...

Com essa ajuda fica bem mais fácil.  :yahoo!:

Aquela seção era só um experimento. Se você achou úitl então vai babar com o que eu estou preparando, neste exato momento  ;D
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #130 Online: Agosto 02, 2007, 06:36:15 pm »
Aquela seção era só um experimento. Se você achou úitl então vai babar com o que eu estou preparando, neste exato momento  ;D
Excelente noticia! :yahoo!: Se planejar tradução, novamente me ofereço como voluntario para traduzir ao espanhol...

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #131 Online: Agosto 02, 2007, 06:44:19 pm »
Excelente noticia! :yahoo!: Se planejar tradução, novamente me ofereço como voluntario para traduzir ao espanhol...

Eu estou tentando manter isso em mente enquanto desenvolvo, mas a primeira versão vai precisar sair exclusivamente em Português. Depois que a funcionalidade estiver OK, vou trabalhar na Localização.

Foi algo que comecei na semana passada, só para me ajudar com a compreensão daquela rotina ClearRect das tags MP3, mas que acabou evoluindo para algo muito mais complexo e útil.

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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #132 Online: Agosto 02, 2007, 08:05:35 pm »
Scrollbar para firmwares Philips

  • Philips DVP5960
  • Philips DVP5100
  • Philips DVP5965
  • Philips DVP5980

Sempre achei estranho que, apesar dos firmwares Philips não terem uma scrollbar, a rotina de exibição é detectada neles, inclusive pelo meu mtkModToolbox. Mas até bem pouco tempo eu não tinha o conhecimento necessário para tentar entender isso e sempre "deixei prá lá".

Hoje eu estava justamente aperfeiçoando a rotina de detecção da scrollbar no mtkModToolbox quando decidi parar um pouco para estudar essa esquisitice no IDA. Seguindo o caminho até a rotina chamada DirDispScrollbar no DVP5960 descobri que ela começava em uma rotina órfã:

B4:83A2
B4:83A2             ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B4:83A2
B4:83A2
B4:83A2             BankSw_240_B4_83A2:           ; DATA XREF: B0:B0_BS_240_B4_83A2o
B4:83A2                                           ; B1_BS_240_B4_83A2o ...
B4:83A2 90 FB A0    mov     DPTR, #XRAM_FBA0
B4:83A5 EC          mov     A, R4
B4:83A6 F0          movx    @DPTR, A
B4:83A7 A3          inc     DPTR
B4:83A8 ED          mov     A, R5
B4:83A9 F0          movx    @DPTR, A
B4:83AA CB          xch     A, R3
B4:83AB EF          mov     A, R7
B4:83AC CB          xch     A, R3
B4:83AD CA          xch     A, R2
B4:83AE EE          mov     A, R6
B4:83AF CA          xch     A, R2
B4:83B0 22          ret
B4:83B0             ; End of function BankSw_240_B4_83A2
B4:83B0
B4:83B1             ; ---------------------------------------------------------------------------
B4:83B1 90 FB A0    mov     DPTR, #XRAM_FBA0      ; Função orfã!!!!!!!!!!!!!

B4:83B4 E0          movx    A, @DPTR
B4:83B5 FC          mov     R4, A
B4:83B6 A3          inc     DPTR
B4:83B7 E0          movx    A, @DPTR
B4:83B8 FD          mov     R5, A
B4:83B9 64 01       xrl     A, #1
B4:83BB 4C          orl     A, R4
B4:83BC 70 12       jnz     B4_83D0
B4:83BE 90 FB A4    mov     DPTR, #XRAM_FBA4
B4:83C1 F0          movx    @DPTR, A
B4:83C2 A3          inc     DPTR
B4:83C3 74 B6       mov     A, #0xB6 ; 'Â'
B4:83C5 F0          movx    @DPTR, A
B4:83C6 E4          clr     A
B4:83C7 90 FB A2    mov     DPTR, #XRAM_FBA2
B4:83CA F0          movx    @DPTR, A
B4:83CB A3          inc     DPTR
B4:83CC F0          movx    @DPTR, A
B4:83CD 02 84 8A    ljmp    DIR_DispScrollBar

Eu passei algum tempo tentando imaginar um jeito de chamar essa rotina de dentro da rotina principal do FileBrowser para ver o que aconteceria, mas depois decidi dar uma olhada em um firmware com scrollbar ativa para ver se aparecia alguma pista. O que encontrei me surpreendeu.

Este é o mesmo trecho de código, no firmware do Proview DVP-858

B4:6602             ; ---------------------------------------------------------------------------
B4:6602             ; START OF FUNCTION CHUNK FOR BankSw_210_B4_DD71
B4:6602
B4:6602             BankSw_214_B4_6602:           ; CODE XREF: BankSw_210_B4_DD71+2j
B4:6602                                           ; DATA XREF: B0:B0_BS_214_B4_6602o ...
B4:6602 90 FB 9D    mov     DPTR, #XRAM_FB9D
B4:6605 EC          mov     A, R4
B4:6606 F0          movx    @DPTR, A
B4:6607 A3          inc     DPTR
B4:6608 ED          mov     A, R5
B4:6609 F0          movx    @DPTR, A
B4:660A CB          xch     A, R3
B4:660B EF          mov     A, R7
B4:660C CB          xch     A, R3
B4:660D CA          xch     A, R2
B4:660E EE          mov     A, R6
B4:660F CA          xch     A, R2
B4:6610 90 FB 9D    mov     DPTR, #XRAM_FB9D

B4:6613 E0          movx    A, @DPTR
B4:6614 FE          mov     R6, A
B4:6615 A3          inc     DPTR
B4:6616 E0          movx    A, @DPTR
B4:6617 FF          mov     R7, A
B4:6618 4E          orl     A, R6
B4:6619 70 03       jnz     B4_661E
B4:661B 02 67 7D    ljmp    B4_677D
B4:661E             ; ---------------------------------------------------------------------------
B4:661E
B4:661E             B4_661E:                      ; CODE XREF: BankSw_210_B4_DD71-7758j
B4:661E C3          clr     C
B4:661F EF          mov     A, R7
B4:6620 9B          subb    A, R3
B4:6621 EE          mov     A, R6
B4:6622 9A          subb    A, R2
B4:6623 50 03       jnc     B4_6628
B4:6625 02 67 7D    ljmp    B4_677D
B4:6628             ; ---------------------------------------------------------------------------
B4:6628
B4:6628             B4_6628:                      ; CODE XREF: BankSw_210_B4_DD71-774Ej
B4:6628 90 FB 9D    mov     DPTR, #XRAM_FB9D
B4:662B E0          movx    A, @DPTR
B4:662C FC          mov     R4, A
B4:662D A3          inc     DPTR
B4:662E E0          movx    A, @DPTR
B4:662F FD          mov     R5, A
B4:6630 64 01       xrl     A, #1
B4:6632 4C          orl     A, R4
B4:6633 70 12       jnz     B4_6647
B4:6635 90 FB A1    mov     DPTR, #XRAM_FBA1
B4:6638 F0          movx    @DPTR, A
B4:6639 A3          inc     DPTR
B4:663A 74 B6       mov     A, #0xB6 ; 'Â'
B4:663C F0          movx    @DPTR, A
B4:663D E4          clr     A
B4:663E 90 FB 9F    mov     DPTR, #XRAM_FB9F
B4:6641 F0          movx    @DPTR, A
B4:6642 A3          inc     DPTR
B4:6643 F0          movx    @DPTR, A
B4:6644 02 67 01    ljmp    Dir_DispScrollBar
B4:6647             ; ---------------------------------------------------------------------------
B4:6647


A rotina do DVP-858 é um pouco mais longa, mas foi o início que me chamou a atenção. Parecia que a mesma rotina "órfã" do DVP5960 tinha sido emendada com a anterior, com o "ret" removido. Eu destaquei em vermelho.

Eu pensei: nãooooooooo... não pode ser tão fácil! Mas já que era simples, experimentei substituir o "22" por "00" para re-unir as duas rotinas e ver o que aconteceria.

Honestamente, eu não pensei mesmo que fosse tão fácil.

Philips DVP5960, firmware original modificado:

Note que por pouco a scrollbar não aparece na posição certinha :)

Philips DVP5100, firmware Jmaraujo 1.04b modificado:



um mísero byte!!!


A capacidade de ativar a scrollbar e desativar as setas idiotas dos firmwares Philips vai ser, claro, incorporada à versão do mtkModToolbox que estou preparando.

Para localizar o ponto de modificação no seu firmware, procure por:

CB EF CB CA EE CA 22

Funcionou com:

  • DVP5965
  • DVP5960
  • DVP5980
  • DVP5100

Não funcionou com:

  • PET 725 (acho que neste a rotina realmente não existe)
  • DVP3040 (acho que neste a rotina realmente não existe)
  • DVP5140
« Última modificação: Agosto 02, 2007, 09:50:44 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline eneris

  • Novato Prolixo
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #133 Online: Agosto 02, 2007, 09:57:28 pm »
Ryan, estar faltando alguma coisa na explicação de como colocar o menu de seleção de legenda e cor no Proview, pois com a explicação da pagina 2, o DVD nem liga. O primeiro erro que encontrei comparando seu post e o seu segundo firmware experimental foi na parte abaixo.

No seu firmware experimental tem toda linha hexadecimal abaixo.

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 00 CF 00 00 06 FF ED 5A 00 00 17 05 19 02 FF ED 6D FF ED 74 00 08 FF FF 05 15 05 15 00 71 00 00 00 01 00 0F FF ED 7B 00 00 FF EC 50 FF EC 79 FF EC 98 FF EC F3 FF ED 58 FF ED 81 03 00 CF 00 00 06 FF ED 96 00 00

Ja no seu post mostrando como fazer, so tem a parte abaixo.

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

Os codigos estão diferentes.

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #134 Online: Agosto 02, 2007, 10:07:00 pm »
Em quase 100% dos casos, quando o DVD nem liga é porque você fez alguma bobagem ao inserir os dados e em vez de sobreescrever exatamente, inseriu ou deletou algo.

Basta deletar (reduzindo o tamanho do firmware) um único byte do código 8032 por engano no bloco 2 para o DVD nem ligar. Eu sei, porque eu fiz isso umas cinco vezes num único dia  ;)

Já quanto à diferença, o meu firmware experimental é uma "gambiarra" e o código que está sobrando é o resto de um menu maior que eu testei antes e não apaguei. Se quiser conferir, simplesmente copie o código inteiro do meu firmware experimental, mas isso só vai ocupar espaço sem necessidade.

Depois eu vou testar minhas instruções para ver se há algum erro, mas de antemão eu acho que se o aparelho nem liga, não é por causa dos menus, mas de algum deslize no uso do editor hexadecimal.

Certifique-se de que ao dar o "paste" no editor hexadecimal você realmente está sobreescrevendo. O XVI32 insere por default.
« Última modificação: Agosto 02, 2007, 10:10:41 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #135 Online: Agosto 02, 2007, 10:09:38 pm »
Olá, Jefferson. Duas consultas:

Ainda continúo mexendo no filebrowser e hoje me deparei com um problema que não tinha percebido. O meu firmware está limitando o nome dos arquivos em 40 caracteres (sem importar o largo ou tamanho da fonte utilizada).

Como ja disse, anteriormente não tinha percebido esse comportamento porque o máximo do firmware era 42 (não fazía muita diferença). Agora que ampliei o número de caracteres para 50 o problema ficou evidente... ¿Voçê tem ideia de quál possa ser esse problema?

A minha outra dúvida é relativa a "selection bar": Agora que os arquivos ficam um pouco mais acima no filebrowser, estou tendo um comportamento estranho da "selection bar" do filebrowser:
  • 1) Quando o primer "lugar" do filebrowser é um diretório, a primeira linha não é visualizada (é visualizada mas logo apagada). O problema não acontece quando o primer lugar for um arquivo.
  • 2) O primeiro arquivo fica seleccionado em cor laranja, mas o segundo arquivo também fica laranja (como se estivese seleccionado). Esse comportamente somente ocorre quando o primer arquivo for seleccionado. Ao seleccionar o segundo, tercer e quarto arquivos o comportamento do filebrowser é normal (somente o arquivo seleccionado fica laranja, os restantes ficam com a cor normal).

Se precisar do meu firmware para dar uma olhada é so avisar.
Obrigado pela ajuda!

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #136 Online: Agosto 02, 2007, 10:29:12 pm »
Como ja disse, anteriormente não tinha percebido esse comportamento porque o máximo do firmware era 42 (não fazía muita diferença). Agora que ampliei o número de caracteres para 50 o problema ficou evidente... ¿Voçê tem ideia de quál possa ser esse problema?

É só um palpite, mas eu me lembro de que você falou algo sobre o seu firmware e suporte a Unicode. Se o ARM do seu firmware está trabalhando com Unicode, o browser só vai receber metade dos caracteres que poderia, se estivesse usando uma codepage comum.

Experimente expandir o número máximo de caracteres para 100 no mtkModToolbox.

A minha outra dúvida é relativa a "selection bar": Agora que os arquivos ficam um pouco mais acima no filebrowser, estou tendo um comportamento estranho da "selection bar" do filebrowser:


Eu nunca tentei mover as linhas do browser, por isso no momento não saberia nem por onde começar. E estou ocupado com outro problema. Se eu pensar em algo, aviso.

E meus testes estão limitados, porque o meu único DVP5100 que está funcionando não lê nem CD-RW nem DVDs. Além disso, por algum estranho motivo não exibe mais pastas, não importa que firmware eu coloque nele. Todos os arquivos ficam misturados na raiz.
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
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #137 Online: Agosto 02, 2007, 10:32:42 pm »
Agora foi, você tinha razão, o Xvi32 estava inserindo ao invés de sobrescrever, o cabecinha a minha  :dashhead1:

Valeu!

Ryan, a string hexa pode ser inserida apenas em 2EC00 se sim, qual a razão? Caso eu possa inserir onde eu quiser no banco 2 a string hexa, preciso fazer alguma alteração em outro lugar?

help :-[
« Última modificação: Agosto 02, 2007, 10:46:23 pm por eneris »
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #138 Online: Agosto 02, 2007, 10:44:01 pm »
Não tem problema. O límite dos 40 caracteres não acho que seja o problema do Unicode. Hoje, olhando o seu review do firmware jmaraujo 1.04b, percebí que os arquivos naquele firmware também tinham 40 caracteres.

O problema 1 acho que é alguma rotina de limpeza... (ligada a exhibição de diretorios?) O 2 problema pode ser um problema de coordenadas... Em realidade, não tenho idéia. Nunca tinha olhado na parte do "selection bar" do DVP5100.

E meus testes estão limitados, porque o meu único DVP5100 que está funcionando não lê nem CD-RW nem DVDs. Além disso, por algum estranho motivo não exibe mais pastas, não importa que firmware eu coloque nele. Todos os arquivos ficam misturados na raiz.

¿Tem certeza que não é na configuração, na opção "Nav mp3/jpeg"? (PÁG. PREFERÊNCIAS -> Nav MP3/JPEG).

Citar
Sem menu: Selecione esta função para exibir todos os arquivos contidos no CD.
Com menu: Selecione esta função para exibir somente o menu de pastas do CD.
« Última modificação: Agosto 02, 2007, 10:46:49 pm por jmaraujo »

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #139 Online: Agosto 02, 2007, 10:50:35 pm »
¿Tem certeza que não é na configuração, na opção "Nav mp3/jpeg"? (PÁG. PREFERÊNCIAS -> Nav MP3/JPEG).

ERA!

 :dashhead1:
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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #140 Online: Agosto 02, 2007, 10:54:44 pm »

Ryan, a string hexa pode ser inserida apenas em 2EC00 se sim, qual a razão? Caso eu possa inserir onde eu quiser no banco 2 a string hexa, preciso fazer alguma alteração em outro lugar?

help :-[

Somente no endereço indicado. Você não faz idéia do quanto precisa ser recalculado naquela string se você mover um byte sequer. Quase um terço daquilo lá são endereços.
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
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #141 Online: Agosto 02, 2007, 11:13:51 pm »
Uma dúvida: Movendo a rotina FF00 para outro endereço é necessário alguma mudança na string hexa?
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #142 Online: Agosto 02, 2007, 11:25:02 pm »
Uma dúvida: Movendo a rotina FF00 para outro endereço é necessário alguma mudança na string hexa?

Não. Tirando os endereços de EEPROM, a string do menu é completamente independente da modificação no assembly.
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
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #143 Online: Agosto 02, 2007, 11:30:08 pm »
Uma dúvida: Movendo a rotina FF00 para outro endereço é necessário alguma mudança na string hexa?

Não. Tirando os endereços de EEPROM, a string do menu é completamente independente da modificação no assembly.

OK, muitissimo obrigado Ryan,  :yahoo!:

PS: Alterei 2 bytes no ARM e agora conseguir que legendas SRT sejam exibidas no browser, só ainda não encontrei uma funcionalidade pra isso. :o

A alteração é super simples.
Salva o ARM code descompactado usando o Remaker. Depois abre o ARM usando um editor hexadecimal, procura pelo texto: DST, depois é só substituir:

44 => 53
53 => 52
« Última modificação: Agosto 02, 2007, 11:42:35 pm por eneris »
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #144 Online: Agosto 02, 2007, 11:38:24 pm »

PS: Alterei 3 bytes no ARM e agora conseguir que legendas SRT sejam exibidas no browser, só ainda não encontrei uma funcionalidade pra isso. :o

Aquela da mudança DST=>SRT?

A única utilidade é você poder ver que as legendas estão lá.
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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #145 Online: Agosto 03, 2007, 12:38:53 pm »
Firmwares Philips: Improvisando uma mensagem de versão

Como todos vocês que tem um aparelho da Philips devem saber, ao apertar EJECT + 55 é exibido na tela o nome do arquivo que o aparelho espera encontrar no CD de upgrade. Até esta semana, eu achava que o nome exibido vinha da mesma string usada para fazer a conferência, mas não vem!



Na verdade, todos os firmwares Philips tem diversas strings em lugares diferentes, mas eu localizei a string exata que é usada ao apertar EJECT + 55.

Procure pela seguinte seqüência:

4F 46 46

Isto é o código ASCII para a string "OFF"

Após encontrar essa string (que ainda não sei quando é exibida) menos de 100 bytes antes você encontrará a string com o nome do arquivo.

Busca funciona com:
  • DVP3040
  • DVP5965
  • DVP5960
  • DVP5100

Busca não funciona com:

  • DVP5980 (no lugar existe a string "CLEAR MODE TYPE")
  • DVP3040

Você pode susbstituí-la pelo que você quiser, observando duas regras:

  • No máximo, 20 caracteres;
  • Não use espaços



A utilidade disso? O usuário fica livre para escolher o background que quiser, sem perder o rastro de que versão do firmware modificado está realmente instalada no aparelho. E o desenvolvedor pode usar um background só, sem precisar escrever pelo menos um texto diferente em cada tela inicial.

Eu tentei de vários modos descobrir que rotina exibe essa mensagem, porque isso seria a chave para poder exibir mensagens personalizadas, do tamanho que quisessemos, mas depois de analisar vários firmwares Philips eu não consegui encontrar nenhum padrão. Não faço a menor idéia no momento.

No DVP5960 existe uma XREF bem próxima que eu não sei o que lê,  mas no DVP5100 e no DVP3040 a XREF mais próxima já é a usada para coletar a senha de CheckVersionPass.


A única pista que tenho é que a mensagem é exibida em uma janela. No caso do DVP5100 é na janela 01.
« Última modificação: Agosto 03, 2007, 01:41:27 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #146 Online: Agosto 03, 2007, 01:53:16 pm »
Alguém sabe onde são usadas essas strings?

Em todos os firmwares que abri (e não apenas nos Philips), a string "OFF" pode ser encontrada uma vez (e apenas uma). Não apenas ela,, mas pelo menos esta seqüência:

B2:3D8A 46          .byte 0x46 ; F
B2:3D8B 55          .byte 0x55 ; U
B2:3D8C 4C          .byte 0x4C ; L
B2:3D8D 4C          .byte 0x4C ; L
B2:3D8E 03          B2_3D8E:.byte    3            ; DATA XREF: BankSw_223_B2_2949:B2_2B0Fo
B2:3D8E                                           ; BankSw_223_B2_2949+1D6o
B2:3D8F 33          .byte 0x33 ; 3
B2:3D90 2F          .byte 0x2F ; /
B2:3D91 34          .byte 0x34 ; 4
B2:3D92 03          B2_3D92:.byte    3            ; DATA XREF: BankSw_223_B2_2949:B2_2B58o
B2:3D92                                           ; BankSw_223_B2_2949+21Fo
B2:3D93 31          .byte 0x31 ; 1
B2:3D94 2F          .byte 0x2F ; /
B2:3D95 32          .byte 0x32 ; 2
B2:3D96 03          B2_3D96:.byte    3            ; DATA XREF: BankSw_223_B2_2949:B2_2BA1o
B2:3D96                                           ; BankSw_223_B2_2949+268o
B2:3D97 31          .byte 0x31 ; 1
B2:3D98 2F          .byte 0x2F ; /
B2:3D99 34          .byte 0x34 ; 4
B2:3D9A 03          B2_3D9A:.byte    3            ; DATA XREF: BankSw_223_B2_2949:B2_2C5Do
B2:3D9A                                           ; BankSw_223_B2_2949+324o
B2:3D9B 4F          .byte 0x4F ; O
B2:3D9C 46          .byte 0x46 ; F
B2:3D9D 46          .byte 0x46 ; F


FULL, 3/4, 1/2, 1/4 e OFF

Como o ZOOM tira as suas mensagens dos Language Codes, eu não entendo quando essas strings são exibidas, se é que são. Se você prestar atenção, verá que antes de cada string existe um byte que é igual ao número de caracteres na mesma e que esse ponto é acessado por uma rotina. Pode ser possível manipular isso para escrever nossas mensagens, mas é preciso primeiro saber se essas mensagens são realmente exibidas, e quando. 
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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #147 Online: Agosto 03, 2007, 05:10:12 pm »
Achei!


São strings do Dolby Digital Setup

Veja a palavra FULL nas duas imagens:



Estudando como a exibição funciona eu aprendi coisas que eu não sabia sobre a rotina OSD_DispMSG/OSD_DispMSG2. Mais tarde (ou outro dia) eu vou relatar aqui o que aprendi.
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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #148 Online: Agosto 04, 2007, 09:10:41 pm »
"MT1369 RESETDISC UPGRADE"

Essa string pode ser concontrada em todo firmware MT13x9. Confirmado com:

  • Proview DVP-858
  • Philips DVP5100
  • Philips DVP5960
  • Philips DVP5965
  • Philips DVP5140
  • Philips DVP5980
  • Philips DVP3040
  • Philips PET725
  • LG DK194G
  • LG série 8xxx
  • LG série 9xxx
  • Pioneer 575
  • JTEC MTK7000

Tanto que vou passar a usá-la no mtkModToolbox para reconhecer se um firmware é válido.

Ao contrário do que parece, é a junção das strings:

MT1369 RESET
DISC UPGRADE

Minha investigação sobre o propósito dessas strings foi interessante. Existe uma rotina no Bloco 0 que verifica se uma dessas strings está na memória, a apaga e toma uma ação dependendo de qual das duas foi encontrada.

Eu suponho que "MT1369 RESET" seja a condição normal, que acontece toda vez que o aparelho é ligado e que "DISC UPGRADE", logicamente, só aconteça num upgrade. É possível que o firmware use isso para determinar, ao ligar, se vai ser preciso fazer alguma inicialização extra. Talvez carregar novos valores default na EEPROM. Se for este o caso, talvez até exista uma diferença funcional entre instalar um firmware por cabo e por CD.

Rotinas do Proview DVP-858 20.07

B0:E568             Esta rotina retorna "2" se encontrar "DISC UPGRADE" na memória
B0:E568             "1" se encontrar "MT1369 RESET" e "0" se não encontrar nada.
B0:E568
B0:E568             ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B0:E568
B0:E568
B0:E568             B0_E568:                      ; CODE XREF: B0_E26Bp
B0:E568 E4          clr     A                     ; Verifica se "MT1369 RESET" está na memória
B0:E569 F5 35       mov     RAM_35, A             ; RAM_35 conta as interações pelo loop
B0:E56B
B0:E56B             B0_E56B:                      ; CODE XREF: B0_E568+1Ej
B0:E56B E5 35       mov     A, RAM_35
B0:E56D 24 97       add     A, #0x97 ; 'ù'
B0:E56F FF          mov     R7, A                 ; Primeira passagem: R7=97
B0:E570 E4          clr     A
B0:E571 33          rlc     A                     ; Neste ponto A sempre tem "1"
B0:E572 FE          mov     R6, A
B0:E573 12 F3 20    lcall   BankSw_1_B0_F320      ; Lê a XRAM, 0xC bytes desde F997, com retorno em R7
B0:E576 E5 35       mov     A, RAM_35
B0:E578 90 18 5B    mov     DPTR, #B0_185B
B0:E57B 93          movc    A, @A+DPTR
B0:E57C 6F          xrl     A, R7
B0:E57D 70 09       jnz     B0_E588               ; Salta se não corresponde
B0:E57F 05 35       inc     RAM_35
B0:E581 E5 35       mov     A, RAM_35
B0:E583 C3          clr     C
B0:E584 94 0C       subb    A, #0xC               ; "RESET MT13x9" tem 0xC caracteres
B0:E586 40 E3       jc      B0_E56B
B0:E588
B0:E588             B0_E588:                      ; CODE XREF: B0_E568+15j
B0:E588 E5 35       mov     A, RAM_35
B0:E58A B4 0C 08    cjne    A, #0xC, Disc_Upgrade? ; Verifica se o loop chegou a ser completado
B0:E58A                                           ; (todos os caracteres encontrados). Se negativo salta para a próxima.
B0:E58A                                           ; Se positivo, encerra.
B0:E58D C2 34       clr     RAM_26.4              ; Determina o apagamento da string
B0:E58F 12 AE 60    lcall   B0_AE60               ; Grava (ou apaga) "MT1369 RESET" de XRAM_F897 a XRAM_F8A2
B0:E592 7F 01       mov     R7, #1                ; 1 = "MT1369 RESET"
B0:E594 22          ret
B0:E595             ; ---------------------------------------------------------------------------
B0:E595
B0:E595             Disc_Upgrade?:                ; CODE XREF: B0_E568+22j
B0:E595 E4          clr     A                     ; verifica se a string "DISC UPGRADE" está na memória
B0:E596 F5 35       mov     RAM_35, A             ; RAM_35 conta as interações pelo loop
B0:E598
B0:E598             B0_E598:                      ; CODE XREF: B0_E568+4Bj
B0:E598 E5 35       mov     A, RAM_35
B0:E59A 24 97       add     A, #0x97 ; 'ù'
B0:E59C FF          mov     R7, A                 ; Primeira passagem: R7=97
B0:E59D E4          clr     A
B0:E59E 33          rlc     A                     ; Neste ponto A sempre tem "1"
B0:E59F FE          mov     R6, A
B0:E5A0 12 F3 20    lcall   BankSw_1_B0_F320      ; Lê a XRAM, 0xC bytes desde F997, com retorno em R7
B0:E5A3 E5 35       mov     A, RAM_35
B0:E5A5 90 18 67    mov     DPTR, #DISC_UPGRADE
B0:E5A8 93          movc    A, @A+DPTR
B0:E5A9 6F          xrl     A, R7
B0:E5AA 70 09       jnz     B0_E5B5               ; Salta se não corresponde
B0:E5AC 05 35       inc     RAM_35
B0:E5AE E5 35       mov     A, RAM_35
B0:E5B0 C3          clr     C
B0:E5B1 94 0C       subb    A, #0xC               ; "DISC UPGRADE" tem 0xC caracteres
B0:E5B3 40 E3       jc      B0_E598
B0:E5B5
B0:E5B5             B0_E5B5:                      ; CODE XREF: B0_E568+42j
B0:E5B5 E5 35       mov     A, RAM_35
B0:E5B7 B4 0C 08    cjne    A, #0xC, B0_E5C2      ; Verifica se o loop chegou a ser completado (todos os caracteres encontrados)
B0:E5BA C2 34       clr     RAM_26.4              ; Determina o apagamento da string
B0:E5BC 12 AE 60    lcall   B0_AE60               ; Grava (ou apaga) "MT1369 RESET" de XRAM_F897 a XRAM_F8A2
B0:E5BF 7F 02       mov     R7, #2                ; 2= "DISC UPGRADE" estava na memória
B0:E5C1 22          ret
B0:E5C2             ; ---------------------------------------------------------------------------
B0:E5C2
B0:E5C2             B0_E5C2:                      ; CODE XREF: B0_E568+4Fj
B0:E5C2 7F 00       mov     R7, #0
B0:E5C4 22          ret
B0:E5C4             ; End of function B0_E568



Esta é uma das rotinas que escreve ou apaga:

B0:AE60             Se esta rotina for chamada com bit RAM_26.4 setado, a
B0:AE60             string será escrita. Se o bit estiver estiver resetado,
B0:AE60             os 0xC bytes serão zerados.
B0:AE60
B0:AE60             ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B0:AE60
B0:AE60             ; Grava (ou apaga) "MT1369 RESET" de XRAM_F897 a XRAM_F8A2
B0:AE60
B0:AE60             B0_AE60:                      ; CODE XREF: B0_8F1D+E2p
B0:AE60                                           ; B0_8F1D+189j ...
B0:AE60 20 34 03    jb      RAM_26.4, B0_AE66     ; "1", escreve, "0", apaga.
B0:AE63 02 AF 02    ljmp    B0_AF02               ; Zera a memória de XRAM_F897 a XRAM_F8A2
B0:AE66             ; ---------------------------------------------------------------------------
B0:AE66
B0:AE66             B0_AE66:                      ; CODE XREF: B0_AE60j
B0:AE66 90 18 5B    mov     DPTR, #B0_185B        ; M
B0:AE69 E4          clr     A
B0:AE6A 93          movc    A, @A+DPTR
B0:AE6B FD          mov     R5, A
B0:AE6C 7F 97       mov     R7, #0x97 ; 'ù'
B0:AE6E 7E 00       mov     R6, #0
B0:AE70 12 F3 2C    lcall   BankSw_3_B0_F32C
B0:AE73 90 18 5C    mov     DPTR, #B0_185C        ; T
B0:AE76 E4          clr     A
B0:AE77 93          movc    A, @A+DPTR
B0:AE78 FD          mov     R5, A
B0:AE79 7F 98       mov     R7, #0x98 ; 'ÿ'
B0:AE7B 7E 00       mov     R6, #0
B0:AE7D 12 F3 2C    lcall   BankSw_3_B0_F32C
B0:AE80 90 18 5D    mov     DPTR, #B0_185D        ; 1
B0:AE83 E4          clr     A
B0:AE84 93          movc    A, @A+DPTR
B0:AE85 FD          mov     R5, A
B0:AE86 7F 99       mov     R7, #0x99 ; 'Ö'
B0:AE88 7E 00       mov     R6, #0
B0:AE8A 12 F3 2C    lcall   BankSw_3_B0_F32C
B0:AE8D 90 18 5E    mov     DPTR, #B0_185E        ; 3
B0:AE90 E4          clr     A
B0:AE91 93          movc    A, @A+DPTR
B0:AE92 FD          mov     R5, A
B0:AE93 7F 9A       mov     R7, #0x9A ; 'Ü'
B0:AE95 7E 00       mov     R6, #0
B0:AE97 12 F3 2C    lcall   BankSw_3_B0_F32C
B0:AE9A 90 18 5F    mov     DPTR, #B0_185F        ; 6
B0:AE9D E4          clr     A
B0:AE9E 93          movc    A, @A+DPTR
B0:AE9F FD          mov     R5, A
B0:AEA0 7F 9B       mov     R7, #0x9B ; 'ø'
B0:AEA2 7E 00       mov     R6, #0
B0:AEA4 12 F3 2C    lcall   BankSw_3_B0_F32C
B0:AEA7 90 18 60    mov     DPTR, #B0_1860        ; 9
B0:AEAA E4          clr     A
B0:AEAB 93          movc    A, @A+DPTR
B0:AEAC FD          mov     R5, A
B0:AEAD 7F 9C       mov     R7, #0x9C ; '£'
B0:AEAF 7E 00       mov     R6, #0
B0:AEB1 12 F3 2C    lcall   BankSw_3_B0_F32C
B0:AEB4 90 18 61    mov     DPTR, #B0_1861        ; " "
B0:AEB7 E4          clr     A
B0:AEB8 93          movc    A, @A+DPTR
B0:AEB9 FD          mov     R5, A
B0:AEBA 7F 9D       mov     R7, #0x9D ; 'Ø'
B0:AEBC 7E 00       mov     R6, #0
B0:AEBE 12 F3 2C    lcall   BankSw_3_B0_F32C
B0:AEC1 90 18 62    mov     DPTR, #B0_1862        ; R
B0:AEC4 E4          clr     A
B0:AEC5 93          movc    A, @A+DPTR
B0:AEC6 FD          mov     R5, A
B0:AEC7 7F 9E       mov     R7, #0x9E ; '×'
B0:AEC9 7E 00       mov     R6, #0
B0:AECB 12 F3 2C    lcall   BankSw_3_B0_F32C
B0:AECE 90 18 63    mov     DPTR, #B0_1863        ; E
B0:AED1 E4          clr     A
B0:AED2 93          movc    A, @A+DPTR
B0:AED3 FD          mov     R5, A
B0:AED4 7F 9F       mov     R7, #0x9F ; 'ƒ'
B0:AED6 7E 00       mov     R6, #0
B0:AED8 12 F3 2C    lcall   BankSw_3_B0_F32C
B0:AEDB 90 18 64    mov     DPTR, #B0_1864        ; S
B0:AEDE E4          clr     A
B0:AEDF 93          movc    A, @A+DPTR
B0:AEE0 FD          mov     R5, A
B0:AEE1 7F A0       mov     R7, #0xA0 ; 'á'
B0:AEE3 7E 00       mov     R6, #0
B0:AEE5 12 F3 2C    lcall   BankSw_3_B0_F32C
B0:AEE8 90 18 65    mov     DPTR, #B0_1865        ; E
B0:AEEB E4          clr     A
B0:AEEC 93          movc    A, @A+DPTR
B0:AEED FD          mov     R5, A
B0:AEEE 7F A1       mov     R7, #0xA1 ; 'í'
B0:AEF0 7E 00       mov     R6, #0
B0:AEF2 12 F3 2C    lcall   BankSw_3_B0_F32C
B0:AEF5 90 18 66    mov     DPTR, #B0_1866        ; T
B0:AEF8 E4          clr     A
B0:AEF9 93          movc    A, @A+DPTR
B0:AEFA FD          mov     R5, A
B0:AEFB 7F A2       mov     R7, #0xA2 ; 'ó'
B0:AEFD 7E 00       mov     R6, #0
B0:AEFF 02 F3 2C    ljmp    BankSw_3_B0_F32C      ; Neste ponto os registradores tem a string "MT1369 RESET"
B0:AEFF                                           ; Atente para o fato de que aqui a instrução é "ljmp" e não "lcall"
B0:AEFF                                           ; Por isso o RET não é necessário (já existe um na rotina)
B0:AF02             ; ---------------------------------------------------------------------------
B0:AF02
B0:AF02             B0_AF02:                      ; CODE XREF: B0_AE60+3j
B0:AF02 E4          clr     A                     ; Zera a memória de XRAM_F897 a XRAM_F8A2
B0:AF03 FD          mov     R5, A
B0:AF04 7F 97       mov     R7, #0x97 ; 'ù'
B0:AF06 FE          mov     R6, A
B0:AF07 12 F3 2C    lcall   BankSw_3_B0_F32C
B0:AF0A E4          clr     A
B0:AF0B FD          mov     R5, A
B0:AF0C 7F 98       mov     R7, #0x98 ; 'ÿ'
B0:AF0E FE          mov     R6, A
B0:AF0F 12 F3 2C    lcall   BankSw_3_B0_F32C
B0:AF12 E4          clr     A
B0:AF13 FD          mov     R5, A
B0:AF14 7F 99       mov     R7, #0x99 ; 'Ö'
B0:AF16 FE          mov     R6, A
B0:AF17 12 F3 2C    lcall   BankSw_3_B0_F32C
B0:AF1A E4          clr     A
B0:AF1B FD          mov     R5, A
B0:AF1C 7F 9A       mov     R7, #0x9A ; 'Ü'
B0:AF1E FE          mov     R6, A
B0:AF1F 12 F3 2C    lcall   BankSw_3_B0_F32C
B0:AF22 E4          clr     A
B0:AF23 FD          mov     R5, A
B0:AF24 7F 9B       mov     R7, #0x9B ; 'ø'
B0:AF26 FE          mov     R6, A
B0:AF27 12 F3 2C    lcall   BankSw_3_B0_F32C
B0:AF2A E4          clr     A
B0:AF2B FD          mov     R5, A
B0:AF2C 7F 9C       mov     R7, #0x9C ; '£'
B0:AF2E FE          mov     R6, A
B0:AF2F 12 F3 2C    lcall   BankSw_3_B0_F32C
B0:AF32 E4          clr     A
B0:AF33 FD          mov     R5, A
B0:AF34 7F 9D       mov     R7, #0x9D ; 'Ø'
B0:AF36 FE          mov     R6, A
B0:AF37 12 F3 2C    lcall   BankSw_3_B0_F32C
B0:AF3A E4          clr     A
B0:AF3B FD          mov     R5, A
B0:AF3C 7F 9E       mov     R7, #0x9E ; '×'
B0:AF3E FE          mov     R6, A
B0:AF3F 12 F3 2C    lcall   BankSw_3_B0_F32C
B0:AF42 E4          clr     A
B0:AF43 FD          mov     R5, A
B0:AF44 7F 9F       mov     R7, #0x9F ; 'ƒ'
B0:AF46 FE          mov     R6, A
B0:AF47 12 F3 2C    lcall   BankSw_3_B0_F32C
B0:AF4A E4          clr     A
B0:AF4B FD          mov     R5, A
B0:AF4C 7F A0       mov     R7, #0xA0 ; 'á'
B0:AF4E FE          mov     R6, A
B0:AF4F 12 F3 2C    lcall   BankSw_3_B0_F32C
B0:AF52 E4          clr     A
B0:AF53 FD          mov     R5, A
B0:AF54 7F A1       mov     R7, #0xA1 ; 'í'
B0:AF56 FE          mov     R6, A
B0:AF57 12 F3 2C    lcall   BankSw_3_B0_F32C
B0:AF5A E4          clr     A
B0:AF5B FD          mov     R5, A
B0:AF5C 7F A2       mov     R7, #0xA2 ; 'ó'
B0:AF5E FE          mov     R6, A
B0:AF5F 12 F3 2C    lcall   BankSw_3_B0_F32C
B0:AF62 22          ret
B0:AF62             ; End of function B0_AE60


E esta outra rotina decide qual das rotinas escrever. Ela faz isso de um modo bem mais elegante.

B0:EAAA             ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B0:EAAA
B0:EAAA
B0:EAAA             B0_EAAA:                      ; CODE XREF: B0_B617+B0p
B0:EAAA                                           ; B0_B617+DDp ...
B0:EAAA EF          mov     A, R7
B0:EAAB 24 FE       add     A, #0xFE ; '¦'
B0:EAAD 60 22       jz      B0_EAD1               ; Grava "DISC UPGRADE" em XRAM_F997
B0:EAAF 04          inc     A
B0:EAB0 70 3E       jnz     B0_EAF0               ; Apaga os registradores de XRAM_F897 a XRAM_F8A2
B0:EAB2 E4          clr     A                     ; Grava "MT1369 RESET" em XRAM_F997
B0:EAB3 F5 40       mov     RAM_40, A
B0:EAB5
B0:EAB5             B0_EAB5:                      ; CODE XREF: B0_EAAA+24j
B0:EAB5 E5 40       mov     A, RAM_40
B0:EAB7 24 97       add     A, #0x97 ; 'ù'
B0:EAB9 FF          mov     R7, A
B0:EABA E4          clr     A
B0:EABB 33          rlc     A
B0:EABC FE          mov     R6, A
B0:EABD E5 40       mov     A, RAM_40
B0:EABF 90 18 5B    mov     DPTR, #B0_185B
B0:EAC2 93          movc    A, @A+DPTR
B0:EAC3 FD          mov     R5, A
B0:EAC4 12 F3 2C    lcall   BankSw_3_B0_F32C
B0:EAC7 05 40       inc     RAM_40
B0:EAC9 E5 40       mov     A, RAM_40
B0:EACB C3          clr     C
B0:EACC 94 0C       subb    A, #0xC
B0:EACE 40 E5       jc      B0_EAB5
B0:EAD0 22          ret
B0:EAD1             ; ---------------------------------------------------------------------------
B0:EAD1
B0:EAD1             B0_EAD1:                      ; CODE XREF: B0_EAAA+3j
B0:EAD1 E4          clr     A                     ; Grava "DISC UPGRADE" em XRAM_F997
B0:EAD2 F5 40       mov     RAM_40, A
B0:EAD4
B0:EAD4             B0_EAD4:                      ; CODE XREF: B0_EAAA+43j
B0:EAD4 E5 40       mov     A, RAM_40
B0:EAD6 24 97       add     A, #0x97 ; 'ù'
B0:EAD8 FF          mov     R7, A
B0:EAD9 E4          clr     A
B0:EADA 33          rlc     A
B0:EADB FE          mov     R6, A
B0:EADC E5 40       mov     A, RAM_40
B0:EADE 90 18 67    mov     DPTR, #DISC_UPGRADE
B0:EAE1 93          movc    A, @A+DPTR
B0:EAE2 FD          mov     R5, A
B0:EAE3 12 F3 2C    lcall   BankSw_3_B0_F32C
B0:EAE6 05 40       inc     RAM_40
B0:EAE8 E5 40       mov     A, RAM_40
B0:EAEA C3          clr     C
B0:EAEB 94 0C       subb    A, #0xC
B0:EAED 40 E5       jc      B0_EAD4
B0:EAEF 22          ret
B0:EAF0             ; ---------------------------------------------------------------------------
B0:EAF0
B0:EAF0             B0_EAF0:                      ; CODE XREF: B0_EAAA+6j
B0:EAF0 C2 34       clr     RAM_26.4              ; Apaga os registradores de XRAM_F897 a XRAM_F8A2
B0:EAF2 12 AE 60    lcall   B0_AE60               ; Grava (ou apaga) "MT1369 RESET" de XRAM_F897 a XRAM_F8A2
B0:EAF5 22          ret
B0:EAF5             ; End of function B0_EAAA

 

Para compreender essas rotinas só está me faltando entender qual o valor de "A" na linha destacada em vermelho acima. Só pode ser ou "0" ou "1". Se for "1" bagunça a lógica de endereçamento, porque uma rotina vai estar escrevendo a partir de XRAM_F897 enquanto a outra vai estar escrevendo a partir de XRAM_F997. Se for "0" o endereçamento "bate", mas a presença da instrução "rlc A" deixa de ter qualquer propósito.

Nota: para compreender as rotinas é preciso olhar o código no IDA e seguir algumas "lcall" para ver o que é feito nelas. Só olhar as listagens acima não basta.
« Última modificação: Agosto 05, 2007, 12:35:57 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #149 Online: Agosto 05, 2007, 12:27:55 pm »
Legendas MPEG4 do Proview DVP-858

  • Como eliminar o limite de tamanho da fonte
  • Como eliminar o limite de três linhas nas legendas

Publicado originalmente por mim neste post do htfoum. Estou trazendo para cá para a informação não se perder.

Como já foi explicado pelo eneris, o firmware oficial Proview aceita qualquer tamanho de fonte, mas fontes maiores que "x" (não lembro agora) fazem com que a linha seguinte seja suprimida. E de jeito nenhum é possível fazer com que mais de três linhas de legenda apareçam, não importando o tamanho da fonte ou o tamanho da janela. Este hack elimina estas limitações.

A modificação é feita na rotina SetMPeg4SubtitleParams que citei anteriormente neste tópico.

B1:F4DD             ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B1:F4DD
B1:F4DD
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
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)
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


Coloque a janela 0x13 na altura original: 328
Aumente sua altura para 144 (0x90)

Modifique a linha destacada em vermelho:

[B1:F4FB] 5A => 90

Pronto!

Como funciona

O firmware escreve a legenda em uma janela dentro da janela 0x13. Esta janela no firmware original está com uma altura fixa em 90 pontos (0x5A), exatamente a mesma altura definida para a janela 0x13. Por isso aumentar a janela 0x13 no mtkWindows não estava adiantando nada. A janela dentro dela continuava pequena.

Colocando com uma altura de 144 cabem 3 linhas da fonte 8 do meu firmware experimental (a maior de todas, exagerada) e quatro linhas da fonte 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 ygor.almeida

  • Novato Prolixo
  • **
  • Mensagens: 73
  • Aprovação: +1/-0
  • My Name is Neo
    • Ver Perfil
    • eXtremeMods
Re: Firmware: log de descobertas
« Responder #150 Online: Agosto 05, 2007, 02:32:35 pm »
 :dashhead1:
Agora esse tópico pra mim parece grego  >:D

Porque eu fugi das aulas de programação e lógica no colegial ?  :dashhead1: :dashhead1: :rtfm:
Bom que tal mudar isso pra Patching MediaTek FirmWare From A to Z !

Quer saber qual vai ser a "surpresa" do suposto engenheiro da Proview ?? Um emprego pro Ryan pra trabalhar com FirmWare de DivX  >:D ::) :P

www.eXtremeMods.com.br
Hardware IT News & OverClock

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #151 Online: Agosto 05, 2007, 02:51:50 pm »

Porque eu fugi das aulas de programação e lógica no colegial ?  :dashhead1: :dashhead1: :rtfm:

Não é tãoooo difícil. Já vi gente muito boa dizer no MT13x9 (acho que foi até o New Age) que nunca havia mexido com Assembly até querer hacker seu DivX player. E acabou se tornando fera!

Eu nunca tive aulas de programação. Levo uma certa vantagem por ser autodidata em eletrônica (assembly usa muitos conceitos difíceis para quem não entende eletrônica) e em Delphi (que uso para tornar mais fáceis certas contas, verificações e manipulações tediosas).

Bom que tal mudar isso pra Patching MediaTek FirmWare From A to Z !

No futuro, a informação aqui poderá ser condensada em documentos no meu site. Este tópico funciona como um diário onde eu vou colocando informação, mesmo que não tenha utilidade prática imediata.

Quer saber qual vai ser a "surpresa" do suposto engenheiro da Proview ?? Um emprego pro Ryan pra trabalhar com FirmWare de DivX  >:D ::) :P

Eu não acho que seja nada "para mim" e sim para a "comunidade". Pode ser inclusive a queda do preço do Proview que aconteceu ontem, para R$109.

Se fosse algo para mim teria sido falado em particular, por e-mail.
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
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #152 Online: Agosto 05, 2007, 03:45:13 pm »
É como disse Ryan no post acima, eu tambem quando via este enorme quantidade de numero e letras achava que era pior que grego (inclusive eu disse isso em um topico neste mesmo forum), mas foi quando eu comprei o Philips 5965 e revirei a internet inteira procurando um firmware pra ele pela mesma razão de todos: as legendas divx, como nao encontrei nenhum firmware eu mesmo comecei a pesquisar sobre firmware mediatek, dai encontrei o forum do nosso amigo Jmaraujo, o site do Ryan e do grupo mtk do yahoo, montei meu cabo de dados (pra mim foi mais facil pois ja conserto aparelhos eletronicos) e entrei no mundo dos firmware mediatek, e continuo aprendendo, e eu tambem nao entendia uma linha de assembly.
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #153 Online: Agosto 06, 2007, 02:34:05 pm »
Como localizar Sub_Style

Este método é experimental.

Existem duas maneiras. Uma relativamente rápida, fácil de implementar em um script (já implementei na nova versão do mtk ModTooolbox) e outra tortuosa, que ainda requer julgamento humano.


Método 1

Para este método, precisamos de duas coisas:

  • O número da janela de exibição das legendas (verifique no mtkWindows)
  • O offset de OSD_textColor na BTT

Se você não sabe o offset de OSD_textColor, procure a seguinte string:

EF 70 ? D2 ? 12

Esta string ocorre uma vez e leva a um código semelhante a este:
(o propósito original desta string é localizar Dir_DispDirline)

B1:A4EC EF          mov     A, R7
B1:A4ED 70 07       jnz     DIR_FB_HasParent?
B1:A4EF D2 45       setb    RAM_28.5
B1:A4F1 12 78 FB    lcall   Dir_Disp_Dirline
B1:A4F4 80 05       sjmp    DIR_FB_SetColor
B1:A4F6             ; ---------------------------------------------------------------------------
B1:A4F6
B1:A4F6             DIR_FB_HasParent?:            ; CODE XREF: DIR_FileBrowser+6Cj
B1:A4F6 C2 45       clr     RAM_28.5
B1:A4F8 12 78 FB    lcall   Dir_Disp_Dirline
B1:A4FB
B1:A4FB             DIR_FB_SetColor:              ; CODE XREF: DIR_FileBrowser+55j
B1:A4FB                                           ; DIR_FileBrowser+73j
B1:A4FB 90 FD 86    mov     DPTR, #XRAM_FD86
B1:A4FE E0          movx    A, @DPTR
B1:A4FF 54 F7       anl     A, #0xF7
B1:A501 F0          movx    @DPTR, A
B1:A502 90 FC 07    mov     DPTR, #XRAM_FC07      ; OSD_Colors
B1:A505 74 02       mov     A, #2
B1:A507 F0          movx    @DPTR, A
B1:A508 A3          inc     DPTR
B1:A509 04          inc     A
B1:A50A F0          movx    @DPTR, A
B1:A50B E4          clr     A
B1:A50C FB          mov     R3, A
B1:A50D FD          mov     R5, A
B1:A50E 7F 10       mov     R7, #0x10
B1:A510 12 1D E0    lcall   OSD_TextColor_B1BS
B1:A513 E4          clr     A
B1:A514 90 FB 98    mov     DPTR, #XRAM_FB98
B1:A517 F0          movx    @DPTR, A


O endereço destacado em vermelho é o que queremos.

Agora procure por:

'7F' + <Número da janela de legenda> + '12' +<offset OSD_textColor>

Se o número da janela de legendas for 12 e o offset for '1D E0' teremos a seguinte string:

7F 12 12 1D E0

Que equivale a:

mov     R7, #0x12
lcall   OSD_TextColor

As ocorrências desta string no firmware estão nas rotinas SubStyle primária e secundária apenas.

Este método localiza a SubStyle de

Proview DVP-858 (ambas)
Lenoxx DV-406
Philips DVP5960 (apenas primária)
Philips DVP5965 (apenas primária)

Mas não funciona com

Philips DVP5980
Philips DVP5100
Philips DVP5140
Philips DVP3040

Problema: Alguns firmwares Philips não chamam OSD_TextColor carregando R7 com o número da janela de legendas explicitamente. O número é carregado, mas indiretamente, vindo de um endereço XRAM.

Existe um método tortuoso, que envolve localizar a rotina OSD_textInit, mas falarei sobre isso depois
« Última modificação: Agosto 06, 2007, 02:37:44 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #154 Online: Agosto 06, 2007, 06:35:58 pm »
Alguns Scripts IDA

Uma coisa que me aborrece terrivelmente é que depois de localizar rotinas em um determinado firmware, é preciso fazer todas as identificações em todos os outros fimrwares compatíveis, incluindo outras versões do mesmo firmware, por isso decidi aprender a fazer alguns scripts do IDA para automatizar as tarefas, assim toda vez que eu abrir um firmware posso rapidamente incluir nele uma parte do que já aprendi com outros.
Não sei se fiz alguma coisa errada mas estou recebendo uma mensagem "Variable 'SEARCH_DOWN' is undefined" por parte do IDA (tanto no 4.8 como no 5.0)

Offline eneris

  • Novato Prolixo
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #155 Online: Agosto 06, 2007, 06:54:10 pm »
Jmaraujo você tentou com a nova versão do IDA? Eu vinha recebendo esta mensagem na versão 5.0, dai baixei a nova versão ontem, e testei, e o problema se foi.
Tente aí com a versão 5.1 e veja se o problema não é sanado.
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #156 Online: Agosto 06, 2007, 07:18:07 pm »
Jmaraujo você tentou com a nova versão do IDA? Eu vinha recebendo esta mensagem na versão 5.0, dai baixei a nova versão ontem, e testei, e o problema se foi.
Tente aí com a versão 5.1 e veja se o problema não é sanado.
Obrigado pela dica, Eneris. Vou testar sim.

Eu até que intentei adicionar "#define SEARCH_DOWN     0x01            // search forward" e "#include "idc.idc"" mas não funcionou.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #157 Online: Agosto 07, 2007, 12:04:43 am »
Jmaraujo você tentou com a nova versão do IDA? Eu vinha recebendo esta mensagem na versão 5.0, dai baixei a nova versão ontem, e testei, e o problema se foi.
Tente aí com a versão 5.1 e veja se o problema não é sanado.

Eu uso a 5.0.

Eu não sei se faz alguma diferença, mas meus scripts foram baseados e incluídos no MT1389_misc.idc do Farox.

Editado:

Se insistir em não funcionar, substitua toda ocorrência de SEARCH_DOWN por 0x01. SEARCH_DOWN é apenas uma constante com função de mnenônico, para você não ter que lembrar que procurar adiante é "1".



« Última modificação: Agosto 07, 2007, 12:13:38 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #158 Online: Agosto 09, 2007, 03:21:28 am »
Localizando SHOW_ZOOM_MSG

O método que utilizei até agora no mtk ModToolbox foi explicado por mim aqui. Mas esse método é completamente dependente de análise humana e tedioso demais, por isso eu desenvolvi um novo, muito simples, que já foi implantado na próxima versão do mtk ModToolbox.


Basta procurar por:

D3 94 00 40 ? 90 ?? e0 b4 03 1b 90 ?? 74 01

Que encontrará algo assim:

B2:C31B             Show_ZOOM_MSG:                ; CODE XREF: BankSw_485_B2_C2AA+2Dj
B2:C31B 90 FB 8A    mov     DPTR, #XRAM_FB8A
B2:C31E E0          movx    A, @DPTR
B2:C31F D3          setb    C
B2:C320 94 00       subb    A, #0
B2:C322 40 3D       jc      B2_C361
B2:C324 90 FC AB    mov     DPTR, #XRAM_FCAB      ; Tipo de mídia em execução 3=ISO
B2:C327 E0          movx    A, @DPTR
B2:C328 B4 03 1B    cjne    A, #3, Show_ZOOM_MSG_DVD
B2:C32B 90 FB FC    mov     DPTR, #XRAM_FBFC      ; Aqui é exibida a mensagem do ZOOM para ISO
B2:C32E 74 01       mov     A, #1
B2:C330 F0          movx    @DPTR, A
B2:C331 A3          inc     DPTR
B2:C332 74 FB       mov     A, #0xFB ; '¹'
B2:C334 F0          movx    @DPTR, A
B2:C335 A3          inc     DPTR
B2:C336 74 8A       mov     A, #0x8A ; 'è'
B2:C338 F0          movx    @DPTR, A
B2:C339 7B FF       mov     R3, #0xFF             ; Tempo de exibição. "FF": permanente
B2:C33B 7D 29       mov     R5, #0x29 ; ')'       ; 0x0229 é o código da mensagem de ZOOM. Depende do Language Code.
B2:C33D 7C 02       mov     R4, #2
B2:C33F 7F 15       mov     R7, #0x15             ; Os valores em R6 e R7 determinam onde a mensagem será exibida
B2:C33F                                           ; Consulte a aba "OSD Messages Positions" do mtkWindows
B2:C341 7E 00       mov     R6, #0
B2:C343 02 1E 40    ljmp    OSD_DispMsg2_B2_BS
B2:C346             ; ---------------------------------------------------------------------------
B2:C346
B2:C346             Show_ZOOM_MSG_DVD:            ; CODE XREF: BankSw_485_B2_C2AA+7Ej
B2:C346 90 FB FC    mov     DPTR, #XRAM_FBFC      ; Aqui é exibida a mensagem do ZOOM para DVD-Video
B2:C349 74 01       mov     A, #1
B2:C34B F0          movx    @DPTR, A
B2:C34C A3          inc     DPTR
B2:C34D 74 FB       mov     A, #0xFB ; '¹'
B2:C34F F0          movx    @DPTR, A
B2:C350 A3          inc     DPTR
B2:C351 74 8A       mov     A, #0x8A ; 'è'
B2:C353 F0          movx    @DPTR, A
B2:C354 7B FF       mov     R3, #0xFF
B2:C356 7D 29       mov     R5, #0x29 ; ')'
B2:C358 7C 02       mov     R4, #2
B2:C35A 7F 08       mov     R7, #8
B2:C35C 7E 00       mov     R6, #0
B2:C35E 12 1E 40    lcall   OSD_DispMsg2_B2_BS
B2:C361
B2:C361             B2_C361:                      ; CODE XREF: BankSw_485_B2_C2AA+78j
B2:C361 22          ret


Com esse método, não é necessário saber o número da mensagem de ZOOM.


Funciona com:

  • Philips DVP5980
  • Philips DVP5100
  • Philips DVP3040K
  • Philips DVP5960
  • Philips DVP5965
  • Philips DVP5140
  • Lenoxx DV406
  • Proview DVP-858

Não funciona com:

  • Philips PET 725
  • JTEC MTK7000
Mas é incerto se mesmo o método antigo funciona com esses últimos.

« Última modificação: Agosto 09, 2007, 03:23:44 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #159 Online: Agosto 09, 2007, 04:08:21 pm »
Proview DVP-858 - Volume/MUTE em DivX
Isto foi publicado por mim originalmente no HTFORUM em 17/06/07


Quando você muda o tamanho ou a posição da janela de exibição de legendas (0x13), pode provocar o sumiço do controle do volume em DivX (0x1F). Isso é provocado por sobreposição das janelas.

Encontrar uma posição favorável para a janela 0x1F pode ser complicado. Eu não consegui encontrar uma outra posição vertical onde ela ficasse visível, mesmo trocando de lugar com a janela 0x13.

Porém eu encontrei uma alternativa: redirecionar a mensagem de volume/mute para outra janela. Testei com sucesso as janelas 0x00 e 0x06. Baseado no documento "Patching_HU3899_from_A_to_Z.txt" do Borus.

A 0x00 é a janela usada para exibir as mensagens "Carregando", "abrir", "fechar", etc.



A janela 0x06 é a usada para exibir que legenda ou trilha de áudio está sendo usada:



Note que a mensagem de volume assume os atributos de cor da janela onde é exibida.

Como fazer a mudança:

Com um editor hexadecimal, procure pelo padrão:
02 30 00 00 06 00 00 00 00 02 30 00 00 1F

E mude "1F" para a janela onde você quer colocar a mensagem de volume.

Por exemplo, para as janelas 0x00 e 0x06, respectivamente:
02 30 00 00 06 00 00 00 00 02 30 00 00 00
02 30 00 00 06 00 00 00 00 02 30 00 00 06

Essa mudança redireciona TUDO o que seria exibido na janela 0x1F para a janela de sua escolha.

Você também pode redirecionar para a janela 0x04 (transparente), que fica logo acima da 0x06 e ainda não sei para que é usada no firmware. A 0x02 é onde é exibido o tempo decorrido.
« Última modificação: Agosto 09, 2007, 04:12:20 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #160 Online: Agosto 11, 2007, 04:27:42 pm »
Eu reuni a maioria dos firmwares usados por mim em minhas análises em um ZIP e deixei disponível aqui.

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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #161 Online: Agosto 18, 2007, 12:57:11 am »
O correto funcionamento da Sub_Style do Philips DVP-5100

Há semanas eu mostrei a vocês o que eu chamei de "sub_style secundária" do DVP5100, seguido pela contribuição de jmaraujo, que indicou a Sub_Style primária. Aquela informação não está correta e vou precisar fazer edições naqueles posts um outro dia.

Embora muitos firmwares tenham uma rotina "Sub_style" que só é chamada após sair do Setup, não é o caso do DVP5100. Aquela rotina que eu concluí ser a Sub_Style secundária faz parte da rotina que eu conheço como OSD_text_Init. E essa rotina é chamada pela sub_style primária do DVP5100.

Embora esse trecho de código possa eventualmente ser chamado sozinho, não dá para dizer que ele seja "secundário" porque ele complementa a rotina principal. Nos outros firmwares, mudanças feitas na sub_style secundária só tem efeito quando você entra e sai do setup. No DVP5100 elas tem efeito também ao executar o filme.

Na falta de um nome melhor, vou chamar temporariamente essa rotina de "Sub_Style_2"

Entender isso é importante para a aplicação do próximo hack.
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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #162 Online: Agosto 18, 2007, 01:15:53 am »
Fontes "normais" no Philips DVP-5100

Este post é o primeiro de dois, onde explico como fazer cores de legenda selecionáveis pelo menu, no Philips DVP5100, atendendo ao pedido feito por jmaraujo logo depois que implementei isso no Proview.

Semanas atrás eu expliquei como mudar o firmware dos aparelhos Philips para ser possível remover aquela transparência e poder usar fontes "normais" sem a necessidade daquela conversão inconveniente de cores. Eu usei como exemplo o Philips DVP5960. Neste post, mostro como é aplicado no DVP-5100.

Além de eliminar o fundo (possibilitando a remoção da transparência com o mtkWindows) este hack permitirá que o contorno das fontes seja exibido.

O alvo é a Sub_Style2, porque é aqui que as cores são definidas:

B3:545E             Sub_Style_2:                  ; DATA XREF: OSD_Text_Init+63o
B3:545E 90 FB 8D    mov     DPTR, #XRAM_FB8D      ; Guarda número da janela (OSD_TextInit)?
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   OSD_Text_Params_ARM
B3:5468 90 FB 8D    mov     DPTR, #XRAM_FB8D      ; Guarda número da janela (OSD_TextInit)?
B3:546B E0          movx    A, @DPTR
B3:546C FF          mov     R7, A
B3:546D 12 68 22    lcall   OSD_Text_Params
B3:5470 90 FB 8D    mov     DPTR, #XRAM_FB8D      ; Guarda número da janela (OSD_TextInit)?
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_Colors
B3:5479 F0          movx    @DPTR, A
B3:547A A3          inc     DPTR
B3:547B 74 02       mov     A, #2
B3:547D F0          movx    @DPTR, A              ; Cor de contorno=0; cor de preenchimento = 2
B3:547E 7B 03       mov     R3, #3                ; Cor de background
B3:5480 E4          clr     A

B3:5481 FD          mov     R5, A
B3:5482 12 D4 73    lcall   OSD_Text_Color
B3:5485 90 FB 8D    mov     DPTR, #XRAM_FB8D      ; Guarda número da janela (OSD_TextInit)?
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    OSD_Text_Init_End
B3:548F             ; ---------------------------------------------------------------------------


Nós vamos mudar o trecho destacado em vermelho. As mudanças são sutis, mas todo o trecho precisa ser deslocado. O que é diferente mesmo está destacado em azul. O resto é o mesmo código, deslocado um byte para a frente.

B3:5475 74 03          mov     A, #3
B3:5477 90 FB A4    mov     DPTR, #XRAM_FBA4      ; OSD_Colors
B3:547A F0          movx    @DPTR, A
B3:547B A3          inc     DPTR
B3:547C 74 02       mov     A, #2
B3:547E F0          movx    @DPTR, A              ; Cor de contorno=3; cor de preenchimento = 2
B3:547F E4          clr     A               
B3:5480 FB         mov     R3, A                 ; Cor de background=0


Depois disso, use o mtkWindows para desligar a transparência da janela 0x11 (blend=3) e troque as fontes 0xD e 0xF por fontes "normais" com contorno, como as usadas no Proview DVP-858 e no Lenoxx DV-406.
« Última modificação: Agosto 18, 2007, 01:29:56 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #163 Online: Agosto 18, 2007, 03:12:45 am »
Cor de legenda selecionável para DVP5100

Eu não vou explicar aqui como é feita a parte do menu, porque eu não estou fazendo mods para DVP5100 e jmaraujo já sabe como fazer. Neste post eu explicarei apenas a mudança necessária no código assembly.

Note que tudo o que eu expliquei no post anterior vai ser descartado e refeito. A explicação anterior ajuda a entender o que é feito aqui, mas não é necessário fazer nada daquilo antes.

Os firmwares Philips tem um modo diferente de chamar a rotina OSD_TextColor. Enquanto a maioria dos firmwares coloca o número da janela explícitamente em R7, nos firmwares Philips isso é sempre indireto. No caso do Philips DVP5100 o número da janela fica guardado na variável XRAM_FB8D e o valor dessa variável é copiado para R7 sempre que queremos usar o número da janela.

No caso:

B3:545E 90 FB 8D    mov     DPTR, #XRAM_FB8D   
B3:5461 E0          movx    A, @DPTR
B3:5462 FF          mov     R7, A

Na Sub_Style_2 equivale a:

B3:545E 7F 11     Mov R7, #0x11   

No meu entendimento não é necessário fazer esse rodeio todo e podemos ganhar vários bytes fazendo uma referência explicita ao número da janela, como esse rodeio é feito 4 vezes na rotina Sub_Style_2, podemos ganhar um monte de bytes:

B3:545E             Sub_Style_2:                  ; DATA XREF: OSD_Text_Init+63o
B3:545E 90 FB 8D    mov     DPTR, #XRAM_FB8D      ; Guarda número da janela (OSD_TextInit)?
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   OSD_Text_Params_ARM
B3:5468 90 FB 8D    mov     DPTR, #XRAM_FB8D      ; Guarda número da janela (OSD_TextInit)?
B3:546B E0          movx    A, @DPTR
B3:546C FF          mov     R7, A

B3:546D 12 68 22    lcall   OSD_Text_Params
B3:5470 90 FB 8D    mov     DPTR, #XRAM_FB8D      ; Guarda número da janela (OSD_TextInit)?
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_Colors
B3:5479 F0          movx    @DPTR, A
B3:547A A3          inc     DPTR
B3:547B 74 02       mov     A, #2
B3:547D F0          movx    @DPTR, A              ; Cor de contorno=0; cor de preenchimento = 2
B3:547E 7B 03       mov     R3, #3                ; Cor de background
B3:5480 E4          clr     A
B3:5481 FD          mov     R5, A
B3:5482 12 D4 73    lcall   OSD_Text_Color
B3:5485 90 FB 8D    mov     DPTR, #XRAM_FB8D      ; Guarda número da janela (OSD_TextInit)?
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    OSD_Text_Init_End
B3:548F             ; ---------------------------------------------------------------------------
 


O ganho é suficiente para implementar a rotina que lê o valor da eeprom, sem precisar inserir código no firmware. E ainda sobra espaço!

Nota: Esse desperdício ocorre 50 vezes dentro do CASE de OSD_Text_Init. Dá para ganhar um total de 150 bytes nessa rotina, se um dia for necessário.

B3:545E             Sub_Style_2:                  ; DATA XREF: OSD_Text_Init+63o
B3:545E 7F 11       mov     R7, #0x11
B3:5460 D2 75       setb    RAM_2E.5
B3:5462 12 28 F1    lcall   OSD_Text_Params_ARM
B3:5462
B3:5465 7F 11       mov     R7, #0x11
B3:5467 12 68 22    lcall   OSD_Text_Params
B3:5467
B3:546A 00          nop
B3:546B 00          nop
B3:546C 00          nop
B3:546D 00          nop
B3:546E 00          nop
B3:546F 7F 06       mov     R7, #6                ; Cor de Preenchimento=6 (azul)

B3:5471 90 FB A4    mov     DPTR, #XRAM_FBA4      ; OSD_Colors
B3:5474 74 03       mov     A, #3                 ; Cor de Contorno=3 (preto)
B3:5476 F0          movx    @DPTR, A
B3:5477 A3          inc     DPTR
B3:5478 EF          mov     A, R7
B3:5479 F0          movx    @DPTR, A
B3:547A E4          clr     A
B3:547B FB          mov     R3, A
B3:547C FD          mov     R5, A
B3:547D 7F 11       mov     R7, #0x11
B3:547F 12 D4 73    lcall   OSD_Text_Color
B3:547F
B3:5482 7F 11       mov     R7, #0x11
B3:5484 E4          clr     A
B3:5485 FD          mov     R5, A
B3:5486 00          nop
B3:5487 00          nop
B3:5488 00          nop
B3:5489 00          nop
B3:548A 00          nop
B3:548B 00          nop
B3:548C 02 EF D7    ljmp    OSD_Text_Init_End
B3:548C
B3:548F             ; ---------------------------------------------------------------------------


Perceba o trecho destacado em vermelho. Nele eu estou definindo explicitamente a cor azul para as legendas, para facilitar os testes apenas (fica na cara que está funcionando). Quando você estiver certo de que está funcionando e já tiver o endereço de memória eeprom para usar, você vai substituir o trecho em vermelho por:

7F xx         mov R7, #xx   ;onde "xx" é o endereço de eeprom
7E 00         mov R6, #0
12 05 D7     lcall Pref_GetChar



Para inserir rapidamente minha modificação, em B3:545E, substitua:

90 FB 8D E0 FF D2 75 12 28 F1 90 FB 8D E0 FF 12 68 22 90 FB 8D E0 FF E4
90 FB A4 F0 A3 74 02 F0 7B 03 E4 FD 12 D4 73 90 FB 8D E0 FF E4 FD 02 EF D7

por:

7F 11 D2 75 12 28 F1 7F 11 12 68 22 00 00 00 00 00 7F 06 90 FB A4 74 03
F0 A3 EF F0 E4 FB FD 7F 11 12 D4 73 7F 11 E4 FD 00 00 00 00 00 00 02 EF D7

Tenha em mente que neste mod eu desligo o fundo e ativo a exibição do contorno, por isso desligue a transparência da janela 0x11 com o mtkWindows e substitua as fontes 0xD e 0xF por fontes "normais" com contorno.
« Última modificação: Agosto 18, 2007, 05:29:56 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #164 Online: Agosto 18, 2007, 03:33:22 am »
Muito obrigado, Jefferson.  :yahoo!:  Ficou tudo muito claro.  8)

Vou testar e comentar aquí.  ;)

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #165 Online: Agosto 18, 2007, 05:53:34 am »
Como criar seu próprio salto para outro banco


Um mês atrás, quando eu expliquei o básico sobre Bank Switching, ficou em aberto se seria possível criar nossos próprios saltos. Hoje eu consegui com sucesso fazer um.

Primeiro, você precisa descobrir qual a rotina que faz o "switch" para o banco que você deseja. Com a ajuda do IDA isso não é difícil. Por exemplo, se queremos saltar para uma rotina no banco 3 (exemplo do Philips DVP5960):

B0:2958             ; ---------------------------------------------------------------------------
B0:2958
B0:2958             B0_BS_688_B3_F49A:
B0:2958 90 F4 9A    mov     DPTR, #BankSw_688_B3_F49A
B0:295B 02 18 BF    ljmp    B0_Bank_3
B0:295E             ; ---------------------------------------------------------------------------
B0:295E
B0:295E             B0_BS_689_B3_AEB8:
B0:295E 90 AE B8    mov     DPTR, #set_Volume_2
B0:2961 02 18 BF    ljmp    B0_Bank_3
B0:2964             ; ---------------------------------------------------------------------------


Então, se quisermos saltar para uma rotina no offset 5B99 do banco 3:

90 5B 99    mov     DPTR, #5B99
02 18 BF    ljmp    B0_Bank_3


Essa rotina para onde você vai saltar precisa terminar com uma instrução RET

Em um outro post eu vou dar um exemplo de aplicação disto.
« Última modificação: Janeiro 11, 2008, 12:23:07 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #166 Online: Agosto 18, 2007, 06:56:36 am »
Cor de legenda selecionável para DVP5960

Para entender a teoria básica, leia o que já postei hoje sobre o DVP5100.

No caso do DVP5960 existe uma pequena diferença: Como existem duas rotinas Sub_Style as duas precisam ser modificadas.

Primeiro, Sub_Style_Sec:

B3:5B87             Sub_Style_Sec:                ; DATA XREF: OSD_Text_Init+6Bo
B3:5B87 7F 12       mov     R7, #0x12
B3:5B89 D2 75       setb    RAM_2E.5
B3:5B8B 12 4C F4    lcall   OSD_Text_Params_ARM
B3:5B8B
B3:5B8E 7F 12       mov     R7, #0x12
B3:5B90 12 72 CE    lcall   OSD_Text_Params
B3:5B90
B3:5B93 12 5B 98    lcall   B3_5B98
B3:5B93
B3:5B96 80 19       sjmp    B3_5BB1
B3:5B96
B3:5B98             ; ---------------------------------------------------------------------------
B3:5B98
B3:5B98             B3_5B98:                      ; CODE XREF: OSD_Text_Init+2D9p
B3:5B98 00          nop
B3:5B99 00          nop
B3:5B9A 00          nop
B3:5B9B 00          nop
B3:5B9C 00          nop
B3:5B9D 7F 02       mov     R7, #2                ; Preenchimento
B3:5B9F 90 FC 1E    mov     DPTR, #XRAM_FC1E      ; OSD_Colors
B3:5BA2 74 03       mov     A, #3                 ; Contorno
B3:5BA4 F0          movx    @DPTR, A
B3:5BA5 A3          inc     DPTR
B3:5BA6 EF          mov     A, R7
B3:5BA7 F0          movx    @DPTR, A              ; Preenchimento=2, contorno=3
B3:5BA8 E4          clr     A
B3:5BA9 FB          mov     R3, A
B3:5BAA FD          mov     R5, A
B3:5BAB 7F 12       mov     R7, #0x12
B3:5BAD 12 C3 50    lcall   OSD_Text_Color
B3:5BAD
B3:5BB0 22          ret
B3:5BB0
B3:5BB1             ; ---------------------------------------------------------------------------
B3:5BB1
B3:5BB1             B3_5BB1:                      ; CODE XREF: OSD_Text_Init+2DCj
B3:5BB1 7F 12       mov     R7, #0x12
B3:5BB3 E4          clr     A
B3:5BB4 FD          mov     R5, A
B3:5BB5 02 E4 1D    ljmp    OSD_Text_Init_End
B3:5BB5
B3:5BB8             ; ---------------------------------------------------------------------------
B3:5BB8


A string hexa, para poupar a digitação:

7F 12 D2 75 12 4C F4 7F 12 12 72 CE 12 5B 98 80 19 00 00 00 00 00 7F 02
90 FC 1E 74 03 F0 A3 EF F0 E4 FB FD 7F 12 12 C3 50 22 7F 12 E4 FD 02 E4 1D

Essa rotina segue o mesmo princípio da feita para o DVP5100, mas duas outras modificações foram necessárias para que eu possa aproveitá-la outra vez.

Agora, Sub_Style:

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:D2BF
B1:D2C1 14          dec     A
B1:D2C2 60 58       jz      B1_D31C
B1:D2C2
B1:D2C4 14          dec     A
B1:D2C5 60 61       jz      B1_D328
B1:D2C5
B1:D2C7 24 03       add     A, #3
B1:D2C9 70 60       jnz     B1_D32B
B1:D2C9
B1:D2CB E4          clr     A
B1:D2CC FF          mov     R7, A
B1:D2CD 12 1E EA    lcall   OSD_SetFont_B1BS
B1:D2CD
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:D2D4
B1:D2D7 7F 12       mov     R7, #0x12
B1:D2D9 12 1D 70    lcall   OSD_Text_Params_B1BS
B1:D2D9
B1:D2DC 90 5B 99    mov     DPTR, #0x5B99
B1:D2DF 02 18 BF    ljmp    B1_Bank_3
B1:D2DF
B1:D2DF             ; ---------------------------------------------------------------------------
B1:D2E2 00          .byte    0
B1:D2E3 00          .byte    0
B1:D2E4 00          .byte    0
B1:D2E5 00          .byte    0
B1:D2E6 00          .byte    0
B1:D2E7 00          .byte    0
B1:D2E8 00          .byte    0
B1:D2E9 00          .byte    0
B1:D2EA 00          .byte    0
B1:D2EB 00          .byte    0
B1:D2EC 00          .byte    0
B1:D2ED 00          .byte    0

B1:D2EE             ; ---------------------------------------------------------------------------
B1:D2EE E4          clr     A
B1:D2EF FD          mov     R5, A
B1:D2F0 7F 12       mov     R7, #0x12
B1:D2F2 12 1F 50    lcall   OSD_Text_Init_End_B1BS


Note que eu uso aqui o método explicado no post anterior de criar um salto particular para outro banco. Se eu não fizesse dessa forma, precisaria inserir código em algum lugar. Assim só precisei mudar código já existente, o que torna o patch mais fácil de aplicar, embora um pouco mias difícil de entender.

Eu testei no DVP5960 que está comigo, e funciona como esperado. Em tese dá para fazer a mesma coisa no DVP5965, apenas mudando alguns endereços.
« Última modificação: Agosto 18, 2007, 05:33:42 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #167 Online: Agosto 18, 2007, 08:41:27 am »
A esquisita troca de fontes do DVP5960/DVP5965

Eu já havia descoberto em julho que o DVP5960 tem o estranho problema de começar executando um DivX com a fonte 1, mas ao entrar e sair do do setup passar a usar a fonte 7.

Acabei de descobrir onde isso ocorre.

Tanto no DVP5960 quanto no DVP5965 existe previsão em parte do assembly para se usar até 4 fontes diferentes para legendas DivX. Mas todas as opções foram travadas em uma fonte só: a sete.

Porém não há como ativar isso facilmente, porque estranhamente o menu desses aparelhos não permite a seleção: o item existe no menu, mas só existe uma opção.



Tremenda "gambiarra" da Philips. Quiseram "matar" as opções de fonte, mas tiveram preguiça de remover o item no menu, que agora não serve para nada, provavelmente porque isso iria requerer mais modificações no programa para não ler nada da eeprom.

Esta é a rotina que lê o valor da eeprom e seleciona a fonte de acordo (somente ao sair do setup):

B1:E5B3             ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B1:E5B3
B1:E5B3
B1:E5B3             BankSw_681_B1_E5B3:           ; DATA XREF: B0:B0_BS_681_B1_E5B3o
B1:E5B3                                           ; B1:B1_BS_681_B1_E5B3o ...
B1:E5B3 7F E2       mov     R7, #0xE2 ; 'Ô'
B1:E5B5 7E 07       mov     R6, #7
B1:E5B7 12 1B 96    lcall   ARM_GetChar_B1_BS
B1:E5BA BF 01 05    cjne    R7, #1, B1_E5C2
B1:E5BD D2 74       setb    RAM_2E.4
B1:E5BF 12 1D 2E    lcall   B1_BS_169_B4_AB59
B1:E5C2
B1:E5C2             B1_E5C2:                      ; CODE XREF: BankSw_681_B1_E5B3+7j
B1:E5C2 7F 44       mov     R7, #0x44 ; 'D'       ; Verifica o valor de "DivX Subtitle" na eeprom (sempre "0")
B1:E5C4 7E 00       mov     R6, #0
B1:E5C6 12 1B A2    lcall   Pref_GetChar_B1BS
B1:E5C9 BF 01 07    cjne    R7, #1, B1_E5D3
B1:E5CC 7F 0B       mov     R7, #0xB              ; Se for "1" (nunca é)
B1:E5CE 12 1E EA    lcall   OSD_SetFont_B1_BS
B1:E5D1 80 27       sjmp    B1_E5FA
B1:E5D3             ; ---------------------------------------------------------------------------
B1:E5D3
B1:E5D3             B1_E5D3:                      ; CODE XREF: BankSw_681_B1_E5B3+16j
B1:E5D3 7F 44       mov     R7, #0x44 ; 'D'
B1:E5D5 7E 00       mov     R6, #0
B1:E5D7 12 1B A2    lcall   Pref_GetChar_B1BS
B1:E5DA EF          mov     A, R7
B1:E5DB 70 07       jnz     B1_E5E4
B1:E5DD 7F 0B       mov     R7, #0xB              ; Se for "0" (sempre é)
B1:E5DF 12 1E EA    lcall   OSD_SetFont_B1_BS
B1:E5E2 80 16       sjmp    B1_E5FA
B1:E5E4             ; ---------------------------------------------------------------------------
B1:E5E4
B1:E5E4             B1_E5E4:                      ; CODE XREF: BankSw_681_B1_E5B3+28j
B1:E5E4 7F 44       mov     R7, #0x44 ; 'D'
B1:E5E6 7E 00       mov     R6, #0
B1:E5E8 12 1B A2    lcall   Pref_GetChar_B1BS
B1:E5EB BF 02 07    cjne    R7, #2, B1_E5F5
B1:E5EE 7F 0B       mov     R7, #0xB              ; Se for "2" (nunca é)
B1:E5F0 12 1E EA    lcall   OSD_SetFont_B1_BS
B1:E5F3 80 05       sjmp    B1_E5FA
B1:E5F5             ; ---------------------------------------------------------------------------
B1:E5F5
B1:E5F5             B1_E5F5:                      ; CODE XREF: BankSw_681_B1_E5B3+38j
B1:E5F5 7F 0B       mov     R7, #0xB              ; Se for qualquer valor maior que "2" (nunca é)
B1:E5F7 12 1E EA    lcall   OSD_SetFont_B1_BS
B1:E5FA
B1:E5FA             B1_E5FA:                      ; CODE XREF: BankSw_681_B1_E5B3+1Ej
B1:E5FA                                           ; BankSw_681_B1_E5B3+2Fj ...
B1:E5FA 7F 12       mov     R7, #0x12
B1:E5FC 12 1D 7C    lcall   OSD_Text_Init_B1BS
B1:E5FF 7F 12       mov     R7, #0x12
B1:E601 02 1D 82    ljmp    B1_BS_183_B3_E8F5
B1:E601             ; End of function BankSw_681_B1_E5B3


Basta mudar a linha em vermelho para escolher a fonte que você quiser. Por exemplo, para usar a fonte 2:

B1:E5DD 7F 02       mov     R7, #0x2

Note a forma tortuosa como é feita a seleção de fontes. Não seria necessário fazer tantas leituras no valor da eeprom se a Philips armazenasse lá diretamente o número da fonte, como eu fiz no meu firmware experimental para o Proview. Essas leituras e comparações só são necessárias porque a Philips quer armazenar na eeprom os valores 0, 1, 2... mesmo que as fontes não tenham esses números.

Essa forma tortuosa de escolher a fonte também é usada na Sub_Style do DVP5100, mas falarei mais sobre isso em outro post.

Modificando isto e fazendo uma modificação correspondente na sub_style você pode ter finalmente uma fonte exclusiva para legendas DivX no DVP5960/DVP6965

A rotina acima, no DVP5965:

B1:E60B             ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B1:E60B
B1:E60B
B1:E60B             BankSw_681_B1_E60B:           ; DATA XREF: B0:B0_BS_681_B1_E60Bo
B1:E60B                                           ; B1:B1_BS_681_B1_E60Bo ...
B1:E60B 7F E2       mov     R7, #0xE2 ; 'Ô'
B1:E60D 7E 07       mov     R6, #7
B1:E60F 12 1B 84    lcall   ARM_GetChar_B1_BS
B1:E612 BF 01 05    cjne    R7, #1, B1_E61A
B1:E615 D2 74       setb    RAM_2E.4
B1:E617 12 1D 1C    lcall   B1_BS_166_B4_ABBB
B1:E61A
B1:E61A             B1_E61A:                      ; CODE XREF: BankSw_681_B1_E60B+7j
B1:E61A 7F 44       mov     R7, #0x44 ; 'D'       ; Verifica o valor de "DivX Subtitle" na eeprom (sempre "0")
B1:E61C 7E 00       mov     R6, #0
B1:E61E 12 1B 90    lcall   Pref_GetChar_B1BS
B1:E621 BF 01 07    cjne    R7, #1, B1_E62B
B1:E624 7F 0B       mov     R7, #0xB              ; Se for "1" (nunca é)
B1:E626 12 1E D8    lcall   OSD_SetFont_B1_BS
B1:E629 80 27       sjmp    B1_E652
B1:E62B             ; ---------------------------------------------------------------------------
B1:E62B
B1:E62B             B1_E62B:                      ; CODE XREF: BankSw_681_B1_E60B+16j
B1:E62B 7F 44       mov     R7, #0x44 ; 'D'       ; Verifica o valor de "DivX Subtitle" na eeprom (sempre "0")
B1:E62D 7E 00       mov     R6, #0
B1:E62F 12 1B 90    lcall   Pref_GetChar_B1BS
B1:E632 EF          mov     A, R7
B1:E633 70 07       jnz     B1_E63C
B1:E635 7F 0B       mov     R7, #0xB              ; Se for "0" (sempre é)
B1:E637 12 1E D8    lcall   OSD_SetFont_B1_BS
B1:E63A 80 16       sjmp    B1_E652
B1:E63C             ; ---------------------------------------------------------------------------
B1:E63C
B1:E63C             B1_E63C:                      ; CODE XREF: BankSw_681_B1_E60B+28j
B1:E63C 7F 44       mov     R7, #0x44 ; 'D'       ; Verifica o valor de "DivX Subtitle" na eeprom (sempre "0")
B1:E63E 7E 00       mov     R6, #0
B1:E640 12 1B 90    lcall   Pref_GetChar_B1BS
B1:E643 BF 02 07    cjne    R7, #2, B1_E64D
B1:E646 7F 0B       mov     R7, #0xB              ; Se for "2" (nunca é)
B1:E648 12 1E D8    lcall   OSD_SetFont_B1_BS
B1:E64B 80 05       sjmp    B1_E652
B1:E64D             ; ---------------------------------------------------------------------------
B1:E64D
B1:E64D             B1_E64D:                      ; CODE XREF: BankSw_681_B1_E60B+38j
B1:E64D 7F 0B       mov     R7, #0xB              ; Se for qualquer valor maior que "2" (nunca é)
B1:E64F 12 1E D8    lcall   OSD_SetFont_B1_BS
B1:E652
B1:E652             B1_E652:                      ; CODE XREF: BankSw_681_B1_E60B+1Ej
B1:E652                                           ; BankSw_681_B1_E60B+2Fj ...
B1:E652 7F 12       mov     R7, #0x12
B1:E654 12 1D 6A    lcall   OSD_Text_Init_B1BS
B1:E657 7F 12       mov     R7, #0x12
B1:E659 02 1D 70    ljmp    B1_BS_180_B3_E9AF
B1:E659             ; End of function BankSw_681_B1_E60B


« Última modificação: Agosto 18, 2007, 06:12:40 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #168 Online: Agosto 18, 2007, 09:41:09 am »
Otimizando a Sub_Style do DVP5100

Neste post eu vou explicar parte do que é necessário para ultrapassar o limite de duas fontes selecionáveis pelo menu do DVP5100.

Sub_Style original

B1:CF79             ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B1:CF79
B1:CF79
B1:CF79             SUB_Style:                    ; CODE XREF: B1_DBA6+3Ep
B1:CF79 90 FB 60    mov     DPTR, #XRAM_FB60
B1:CF7C EE          mov     A, R6
B1:CF7D F0          movx    @DPTR, A
B1:CF7E A3          inc     DPTR
B1:CF7F EF          mov     A, R7
B1:CF80 F0          movx    @DPTR, A
B1:CF81 7F 03       mov     R7, #3
B1:CF83 12 07 21    lcall   B1_BS_180_B3_11FC
B1:CF86 7F 01       mov     R7, #1
B1:CF88 12 07 21    lcall   B1_BS_180_B3_11FC
B1:CF8B 7F 03       mov     R7, #3
B1:CF8D 12 F1 84    lcall   B1_F184
B1:CF90 7B FF       mov     R3, #0xFF
B1:CF92 7D EB       mov     R5, #0xEB ; 'Ù'
B1:CF94 7C 01       mov     R4, #1
B1:CF96 74 01       mov     A, #1
B1:CF98 FF          mov     R7, A
B1:CF99 FE          mov     R6, A
B1:CF9A 12 06 5B    lcall   OSD_DispMSG2_B1BS
B1:CF9D 7F 0E       mov     R7, #0xE
B1:CF9F 12 06 FD    lcall   B1_BS_174_B4_E80B
B1:CFA2 7F 59       mov     R7, #0x59 ; 'Y'       ; Lê o valor de "DivX Subtitle" na eeprom
B1:CFA4 7E 00       mov     R6, #0
B1:CFA6 12 05 D7    lcall   Pref_Getchar_B1BS
B1:CFA9 BF 01 07    cjne    R7, #1, B1_CFB3
B1:CFAC 7F 0F       mov     R7, #0xF              ; Se for 1, uso a fonte 0xF
B1:CFAE 12 08 59    lcall   Sub_SetFont_B1BS
B1:CFB1 80 27       sjmp    B1_CFDA
B1:CFB3             ; ---------------------------------------------------------------------------
B1:CFB3
B1:CFB3             B1_CFB3:                      ; CODE XREF: SUB_Style+30j
B1:CFB3 7F 59       mov     R7, #0x59 ; 'Y'       ; Lê o valor de "DivX Subtitle" na eeprom
B1:CFB5 7E 00       mov     R6, #0
B1:CFB7 12 05 D7    lcall   Pref_Getchar_B1BS
B1:CFBA EF          mov     A, R7
B1:CFBB 70 07       jnz     B1_CFC4
B1:CFBD 7F 0D       mov     R7, #0xD              ; Se for 0, uso a fonte 0xD
B1:CFBF 12 08 59    lcall   Sub_SetFont_B1BS
B1:CFC2 80 16       sjmp    B1_CFDA
B1:CFC4             ; ---------------------------------------------------------------------------
B1:CFC4
B1:CFC4             B1_CFC4:                      ; CODE XREF: SUB_Style+42j
B1:CFC4 7F 59       mov     R7, #0x59 ; 'Y'       ; Lê o valor de "DivX Subtitle" na eeprom
B1:CFC6 7E 00       mov     R6, #0
B1:CFC8 12 05 D7    lcall   Pref_Getchar_B1BS
B1:CFCB BF 02 07    cjne    R7, #2, B1_CFD5
B1:CFCE 7F 11       mov     R7, #0x11             ; Se for 2, uso a fonte 0x11
B1:CFD0 12 08 59    lcall   Sub_SetFont_B1BS
B1:CFD3 80 05       sjmp    B1_CFDA
B1:CFD5             ; ---------------------------------------------------------------------------
B1:CFD5
B1:CFD5             B1_CFD5:                      ; CODE XREF: SUB_Style+52j
B1:CFD5 7F 0D       mov     R7, #0xD              ; Se for maior que 2, uso a fonte 0xD
B1:CFD7 12 08 59    lcall   Sub_SetFont_B1BS
B1:CFDA
B1:CFDA             B1_CFDA:                      ; CODE XREF: SUB_Style+38j
B1:CFDA                                           ; SUB_Style+49j ...
B1:CFDA 7F 11       mov     R7, #0x11
B1:CFDC 12 08 23    lcall   OSD_TextInit_B1BS
B1:CFDF 7F 11       mov     R7, #0x11
B1:CFE1 12 08 29    lcall   B1_BS_224_B3_F310
B1:CFE4 22          ret
B1:CFE4             ; End of function SUB_Style


No meu post anterior eu comentei o jeito tortuoso da Philips de fazer a seleção de fontes. Note que mais da metade da rotina acima é dedicada apenas a escolher uma entre 4 fontes possíveis, embora no menu do DVP5100 só existam duas opções.

Primeiro mude o menu para que carregue na eeprom diretamente os números das fontes

Substitua:
04BE 04BE 0561 00 0507 0507 0561 01
por
04BE 04BE 0561 0D 0507 0507 0561 0F
 
Nota: Talvez as strings acima só existam no firmware original, que usa as palavras "standard" e "cyrilic". Os firmwares já modificados trocaram isso por algo como "font 1" e "font 2"
 
Na primeira vez que você usar o menu depois disso vai haver um comportamento estranho, mas funcionará.

Depois faça a alteração na Sub_Style:

B1:CF79             Sub_Style:                    ; CODE XREF: B1_DBA6+3Ep
B1:CF79 90 FB 60    mov     DPTR, #XRAM_FB60
B1:CF7C EE          mov     A, R6
B1:CF7D F0          movx    @DPTR, A
B1:CF7E A3          inc     DPTR
B1:CF7F EF          mov     A, R7
B1:CF80 F0          movx    @DPTR, A
B1:CF81 7F 03       mov     R7, #3
B1:CF83 12 07 21    lcall   B1_BS_180_B3_11FC
B1:CF83
B1:CF86 7F 01       mov     R7, #1
B1:CF88 12 07 21    lcall   B1_BS_180_B3_11FC
B1:CF88
B1:CF8B 7F 03       mov     R7, #3
B1:CF8D 12 F1 84    lcall   B1_F184
B1:CF8D
B1:CF90 7B FF       mov     R3, #0xFF
B1:CF92 7D EB       mov     R5, #0xEB ; 'Ù'
B1:CF94 7C 01       mov     R4, #1
B1:CF96 74 01       mov     A, #1
B1:CF98 FF          mov     R7, A
B1:CF99 FE          mov     R6, A
B1:CF9A 12 06 5B    lcall   OSD_DispMSG2_B1BS
B1:CF9A
B1:CF9D 7F 0E       mov     R7, #0xE
B1:CF9F 12 06 FD    lcall   B1_BS_174_B4_E80B
B1:CF9F
B1:CFA2 7F 59       mov     R7, #0x59 ; 'Y'       ; Lê o valor de "DivX Subtitle" na eeprom
B1:CFA4 7E 00       mov     R6, #0
B1:CFA6 12 05 D7    lcall   Pref_Getchar_B1BS
B1:CFA6
B1:CFA9 12 08 59    lcall   Sub_SetFont_B1BS      ; Uso diretamente o valor armazenado na eeprom
B1:CFA9                                           ; para definir a fonte. Lembre-se de que Pref_Getchar
B1:CFA9                                           ; devolve o valor em R7 e que Sub_SetFont recebe
B1:CFA9                                           ; o valor também em R7. Daí é possível cascatear
B1:CFA9                                           ; as rotinas.
B1:CFAC 00          nop
B1:CFAD 00          nop
B1:CFAE 00          nop
B1:CFAF 00          nop
B1:CFB0 00          nop
B1:CFB1 00          nop
B1:CFB2 00          nop
B1:CFB3 00          nop
B1:CFB4 00          nop
B1:CFB5 00          nop
B1:CFB6 00          nop
B1:CFB7 00          nop
B1:CFB8 00          nop
B1:CFB9 00          nop
B1:CFBA 00          nop
B1:CFBB 00          nop
B1:CFBC 00          nop
B1:CFBD 00          nop
B1:CFBE 00          nop
B1:CFBF 00          nop
B1:CFC0 00          nop
B1:CFC1 00          nop
B1:CFC2 00          nop
B1:CFC3 00          nop
B1:CFC4 00          nop
B1:CFC5 00          nop
B1:CFC6 00          nop
B1:CFC7 00          nop
B1:CFC8 00          nop
B1:CFC9 00          nop
B1:CFCA 00          nop
B1:CFCB 00          nop
B1:CFCC 00          nop
B1:CFCD 00          nop
B1:CFCE 00          nop
B1:CFCF 00          nop
B1:CFD0 00          nop
B1:CFD1 00          nop
B1:CFD2 00          nop
B1:CFD3 00          nop
B1:CFD4 00          nop
B1:CFD5 00          nop
B1:CFD6 00          nop
B1:CFD7 00          nop
B1:CFD8 00          nop
B1:CFD9 00          nop

B1:CFDA 7F 11       mov     R7, #0x11
B1:CFDC 12 08 23    lcall   OSD_TextInit_B1BS
B1:CFDC
B1:CFDF 7F 11       mov     R7, #0x11
B1:CFE1 12 08 29    lcall   B1_BS_224_B3_F310
B1:CFE1
B1:CFE4 22          ret


As únicas diferenças estão destacadas em vermelho.

Parece difícil de acreditar que funcione do mesmo jeito com tantas instruções a menos, mas funciona!

Para ter mais fontes no menu, tudo o que você precisa é criar um novo menu com as novas opções e adcionar mais fontes ao firmware (ou trocar aquelas em chinês, japonês ou sei lá o quê). Não é preciso mudar mais nada em Sub_Style para acomodar quantas fontes você quiser.
« Última modificação: Agosto 18, 2007, 06:14:20 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #169 Online: Agosto 18, 2007, 12:38:24 pm »
 :yahoo!: Funcionou perfeitamente. Agora o firmware permite a troca das cores (14 cores) e fontes (8 fontes). Obrigadão mesmo!!!  ;D

Mais tarde vou postear alguma fotografía e nos próximos días postearei o firmware (alternativo 2.3) aquí no fórum.

Um abraço,
jmaraujo

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #170 Online: Agosto 18, 2007, 11:23:38 pm »
Olá, Jefferson. O menú de escolha de cores está funcionando perfeitamente... Já com as fontes estou tendo um comportamente meio esquisito: Se você trocar a fonte mais de duas vezes a fonte começa a ficar sempre a mesma (e algumas vezes o player trava produzindo um som bem agudo nos altofalantes).

Por agora estou usando 3 fontes (uma a mais que o firmware original) trocando o byte 11 por o valor de uma nova fonte inserida:

B1:CFC4             B1_CFC4:                      ; CODE XREF: SUB_Style+42j
B1:CFC4 7F 59       mov     R7, #0x59 ; 'Y'       ; Lê o valor de "DivX Subtitle" na eeprom
B1:CFC6 7E 00       mov     R6, #0
B1:CFC8 12 05 D7    lcall   Pref_Getchar_B1BS
B1:CFCB BF 02 07    cjne    R7, #2, B1_CFD5
B1:CFCE 7F 11       mov     R7, #0x11             ; Se for 2, uso a fonte 0x11
B1:CFD0 12 08 59    lcall   Sub_SetFont_B1BS
B1:CFD3 80 05       sjmp    B1_CFDA


Vou ver se hoje a noite adiciono algumas fontes mais, usando esse mesmo padrão.

Algumas fotografías do firmware:






Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #171 Online: Agosto 18, 2007, 11:40:34 pm »
Anexe o firmware com o problema das fontes para que eu possa testar aqui.
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #172 Online: Agosto 19, 2007, 12:09:53 am »

Anexe o firmware com o problema das fontes para que eu possa testar aqui.


Já vou anexar (tenho que ver qual exatamente é o arquivo do problema), mas básicamente o que eu fiz foi:

    * Fazer um call para Sub_SetFont e nopear parte da rutina substyle (de CFAC a CFD9).
    * Adicionar fontes mantendo a estrutura (a fonte dos ícones continúa sendo 0x0C).

    * Fontes: 00 (também usada pelo filebrowser), 02, 04, 06, 08, 0A, 0C (incambiada, ícones), 0D e 0F).

    * Criar um menú para as fontes usando como opção os valores das fontes.



Novo menú:

  1. No Pic. | Subtitle font | Set the subtitle font
     0008 FFFF 056A 05B3 0059 0000 0007 000D FFF8E7 0000 - ROM:F8B4
 => 1. Font 1 | Font 1 | [00]
       05A0 05A0 0561 0D - ROM:F8A0
    2. Font 2 | Font 2 | [00]
       05A1 05A1 0561 0F - ROM:F8A7
    3. Font 3 | Font 3 | [00]
       05B0 05B0 0561 02 - ROM:FBFC
    4. Font 4 | Font 4 | [00]
       05B1 05B1 0561 04 - ROM:FC03
    5. Font 5 | Font 5 | [00]
       05B4 05B4 0561 06 - ROM:FC0A
    6. Font 6 | Font 6 | [00]
       05B5 05B5 0561 08 - ROM:FC11
    7. Font 7 | Font 7 | [00]
       05B6 05B6 0561 0A - ROM:FC18
    8. Font 8 | Font 8 | [00]
       05B7 05B7 0561 00 - ROM:FC1F

Nos próximos minutos estarei anexando o firmware para analise.



Editado por Jefferson: Eu modifiquei seu post em vez de responder. Tive que refazer a partir de uma cópia.
« Última modificação: Agosto 19, 2007, 12:57:08 am por Jefferson »

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #173 Online: Agosto 19, 2007, 01:34:38 am »
jmaraujo,

Eu ainda não chequei o firmware que você me mandou por PM, mas eu acho que sei o que pode estar havendo.

Existe outra rotina no firmware DVP5100 que seleciona a fonte baseado no valor da eeprom:

B1:DFEA             ; START OF FUNCTION CHUNK FOR BankSw_337_B1_F2FD
B1:DFEA
B1:DFEA             B1_DFEA:                      ; CODE XREF: BankSw_337_B1_F2FD:B1_F317j
B1:DFEA 7F E2       mov     R7, #0xE2 ; 'Ô'
B1:DFEC 7E 07       mov     R6, #7
B1:DFEE 12 04 7B    lcall   ARM_Getchar_B1BS
B1:DFF1 BF 01 05    cjne    R7, #1, B1_DFF9
B1:DFF4 D2 74       setb    RAM_2E.4
B1:DFF6 12 A1 CD    lcall   BankSw_578_B1_A1CD
B1:DFF9
B1:DFF9             B1_DFF9:                      ; CODE XREF: BankSw_337_B1_F2FD-130Cj
B1:DFF9 7F 59       mov     R7, #0x59 ; 'Y'       ; Lê o valor de "DivX Subtitle" na eeprom
B1:DFFB 7E 00       mov     R6, #0
B1:DFFD 12 05 D7    lcall   Pref_Getchar_B1BS
B1:E000 BF 01 07    cjne    R7, #1, B1_E00A
B1:E003 7F 0F       mov     R7, #0xF              ; Se for 1, uso a fonte 0xF
B1:E005 12 08 59    lcall   Sub_SetFont_B1BS
B1:E008 80 27       sjmp    B1_E031
B1:E00A             ; ---------------------------------------------------------------------------
B1:E00A
B1:E00A             B1_E00A:                      ; CODE XREF: BankSw_337_B1_F2FD-12FDj
B1:E00A 7F 59       mov     R7, #0x59 ; 'Y'       ; Lê o valor de "DivX Subtitle" na eeprom
B1:E00C 7E 00       mov     R6, #0
B1:E00E 12 05 D7    lcall   Pref_Getchar_B1BS
B1:E011 EF          mov     A, R7
B1:E012 70 07       jnz     B1_E01B
B1:E014 7F 0D       mov     R7, #0xD              ; Se for 0, uso a fonte 0xD
B1:E016 12 08 59    lcall   Sub_SetFont_B1BS
B1:E019 80 16       sjmp    B1_E031
B1:E01B             ; ---------------------------------------------------------------------------
B1:E01B
B1:E01B             B1_E01B:                      ; CODE XREF: BankSw_337_B1_F2FD-12EBj
B1:E01B 7F 59       mov     R7, #0x59 ; 'Y'       ; Lê o valor de "DivX Subtitle" na eeprom
B1:E01D 7E 00       mov     R6, #0
B1:E01F 12 05 D7    lcall   Pref_Getchar_B1BS
B1:E022 BF 02 07    cjne    R7, #2, B1_E02C
B1:E025 7F 11       mov     R7, #0x11             ; Se for 2, uso a fonte 0x11
B1:E027 12 08 59    lcall   Sub_SetFont_B1BS
B1:E02A 80 05       sjmp    B1_E031
B1:E02C             ; ---------------------------------------------------------------------------
B1:E02C
B1:E02C             B1_E02C:                      ; CODE XREF: BankSw_337_B1_F2FD-12DBj
B1:E02C 7F 0D       mov     R7, #0xD              ; Se for maior que 2, uso a fonte 0xD
B1:E02E 12 08 59    lcall   Sub_SetFont_B1BS
B1:E031
B1:E031             B1_E031:                      ; CODE XREF: BankSw_337_B1_F2FD-12F5j
B1:E031                                           ; BankSw_337_B1_F2FD-12E4j ...
B1:E031 7F 11       mov     R7, #0x11
B1:E033 12 08 23    lcall   OSD_TextInit_B1BS
B1:E036 7F 11       mov     R7, #0x11
B1:E038 02 08 29    ljmp    B1_BS_224_B3_F310
B1:E038             ; END OF FUNCTION CHUNK FOR BankSw_337_B1_F2FD


A rotina acima é exatamente igual, byte por byte, à que existe em Sub_Style.

String hexa:
7F 59 7E 00 12 05 D7 BF 01 07 7F 0F 12 08 59 80 27 7F 59 7E 00 12 05 D7 EF 70 07 7F 0D 12 08 59 80 16 7F 59 7E 00 12 05 D7 BF 02 07 7F 11 12 08 59 80 05 7F 0D 12 08 59 7F 11 12 08 23 7F 11 02 08 29

Substitua por:
7F 59 7E 00 12 05  D7 12 08 59 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7F 11 12 08 23 7F 11 12 08 29

Se meu palpite estiver correto, é quando esta rotina é chamada que o firmware trava. E estudando as condições do travamento poderemos saber em que condições essa rotina é chamada..

E fazer o mesmo patch da Sub_Style aqui deve resolver o problema.

Essa duplicidade de rotinas também ocorre no DVP5960/DVP5965.

« Última modificação: Agosto 19, 2007, 01:59:21 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #174 Online: Agosto 19, 2007, 02:02:08 am »
Está parecendo que esta segunda rotina é chamada quando entramos e saímos do setup apenas.
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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #175 Online: Agosto 19, 2007, 02:48:40 am »
Confirmado. A rotina é mesmo executada quando você entra e sai do setup.

Eu fiz o patch aqui e parece estar OK. Se bem que mesmo antes de fazer o patch eu não consegui fazer travar nenhuma vez.

Mas como a rotina é chamada ao sair do setup e na modificação existiam valores maiores que 1 na eeprom, ao passar por essa rotina estavam sendo chamadas as fontes 0xD (inválida para legendas) e 0x11 (inexistente) dependendo da fonte escolhida no setup.

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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #176 Online: Agosto 19, 2007, 04:33:20 am »
Finalmente, Sub_Style do DVP-3040K


B1:EDC3             Sub_Style:                    ; CODE XREF: B1_DD81+3Ep
B1:EDC3 90 FB 46    mov     DPTR, #XRAM_FB46
B1:EDC6 EE          mov     A, R6
B1:EDC7 F0          movx    @DPTR, A
B1:EDC8 A3          inc     DPTR
B1:EDC9 EF          mov     A, R7
B1:EDCA F0          movx    @DPTR, A
B1:EDCB 7F 03       mov     R7, #3
B1:EDCD 12 07 15    lcall   B1_BS_178_B3_4B4F
B1:EDD0 7F 01       mov     R7, #1
B1:EDD2 12 07 15    lcall   B1_BS_178_B3_4B4F
B1:EDD5 7F 03       mov     R7, #3
B1:EDD7 12 F3 52    lcall   B1_F352
B1:EDDA 7B FF       mov     R3, #0xFF
B1:EDDC 7D EB       mov     R5, #0xEB ; 'Ù'
B1:EDDE 7C 01       mov     R4, #1
B1:EDE0 74 01       mov     A, #1
B1:EDE2 FF          mov     R7, A
B1:EDE3 FE          mov     R6, A
B1:EDE4 12 06 5B    lcall   OSD_DISpMSG2_B1BS
B1:EDE7 7F 0E       mov     R7, #0xE
B1:EDE9 12 06 F1    lcall   B1_BS_172_B4_EE0F
B1:EDEC 12 D4 17    lcall   SetMeg4SubtitleParams
B1:EDEF 7F 11       mov     R7, #0x11
B1:EDF1 12 08 17    lcall   OSD_TextInit_B1BS
B1:EDF4 7F 11       mov     R7, #0x11
B1:EDF6 12 08 1D    lcall   B1_BS_222_B3_EFBB
B1:EDF9 22          ret
B1:EDF9             ; End of function Sub_Style


Note a chamada para SetMeg4SubtitleParams.

Agora, o complemento (Sub_Style_2) em OSD_Text_Init:

B3:593C             Sub_Style_2:                  ; DATA XREF: OSD_Text_Init+63o
B3:593C 90 FB 88    mov     DPTR, #XRAM_FB88      ; FB88 sempre será 11 nesta rotina
B3:593F E0          movx    A, @DPTR
B3:5940 FF          mov     R7, A
B3:5941 D2 45       setb    RAM_28.5
B3:5943 12 28 40    lcall   OSD_Text_Params_ARM
B3:5946 90 FB 88    mov     DPTR, #XRAM_FB88      ; Armazena o número da janela (OSD_Text_Init)
B3:5949 E0          movx    A, @DPTR
B3:594A FF          mov     R7, A
B3:594B 12 6C EF    lcall   OSD_Text_Params
B3:594E 90 FB 88    mov     DPTR, #XRAM_FB88      ; Armazena o número da janela (OSD_Text_Init)
B3:5951 E0          movx    A, @DPTR
B3:5952 FF          mov     R7, A
B3:5953 E4          clr     A
B3:5954 90 FB A5    mov     DPTR, #XRAM_FBA5      ; OSD_Colors
B3:5957 F0          movx    @DPTR, A
B3:5958 A3          inc     DPTR
B3:5959 74 02       mov     A, #2
B3:595B F0          movx    @DPTR, A
B3:595C 7B 03       mov     R3, #3
B3:595E E4          clr     A
B3:595F FD          mov     R5, A
B3:5960 12 D1 B9    lcall   OSD_Text_Color
B3:5963 90 FB 88    mov     DPTR, #XRAM_FB88      ; Armazena o número da janela (OSD_Text_Init)
B3:5966 E0          movx    A, @DPTR
B3:5967 FF          mov     R7, A
B3:5968 E4          clr     A
B3:5969 FD          mov     R5, A
B3:596A 02 EC 82    ljmp    OSD_TextInit_END


Note que é a mesma rotina encontrada no DVP5100. Eu já testei o suporte ao patch para a mudança de cor da fonte e funcionou como esperado. Mudando esta rotina podemos ter fontes normais também para o DVP_3040K.

Sub_Style chama uma versão estranha de SetMpeg4SubtitleParams, que é uma mistura da rotina que já conhecemos, com as rotinas de escolha de fontes da Philips:

B1:D417             ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B1:D417
B1:D417
B1:D417             SetMeg4SubtitleParams:        ; CODE XREF: Sub_Style+29p
B1:D417                                           ; BankSw_335_B1_F4CB:B1_F7D9p
B1:D417 E4          clr     A
B1:D418 90 FB ED    mov     DPTR, #XRAM_FBED      ; Coordenada Horizontal (HI)
B1:D41B F0          movx    @DPTR, A
B1:D41C A3          inc     DPTR
B1:D41D F0          movx    @DPTR, A
B1:D41E 90 FB F0    mov     DPTR, #XRAM_FBF0      ; Coordenada Vertical (HI)
B1:D421 F0          movx    @DPTR, A
B1:D422 A3          inc     DPTR
B1:D423 F0          movx    @DPTR, A
B1:D424 90 FB F4    mov     DPTR, #XRAM_FBF4      ; wX2.high
B1:D427 74 02       mov     A, #2
B1:D429 F0          movx    @DPTR, A
B1:D42A A3          inc     DPTR
B1:D42B 74 30       mov     A, #0x30 ; '0'        ; 0x230=560
B1:D42D F0          movx    @DPTR, A
B1:D42E 90 FB F8    mov     DPTR, #XRAM_FBF8      ; wY2.high (define a altura)
B1:D431 E4          clr     A
B1:D432 F0          movx    @DPTR, A
B1:D433 A3          inc     DPTR
B1:D434 74 60       mov     A, #0x60 ; '`'        ; Altura da janela
B1:D436 F0          movx    @DPTR, A
B1:D437 E4          clr     A
B1:D438 FD          mov     R5, A
B1:D439 7F 17       mov     R7, #0x17
B1:D43B 7E 01       mov     R6, #1
B1:D43D 12 05 F5    lcall   ARM_PutChar_B1BS
B1:D440 7F 03       mov     R7, #3                ; Este ponto define a fonte usada nas legendas
B1:D442 12 08 4D    lcall   OSD_SetFont?_B1BS
B1:D445 E4          clr     A
B1:D446 90 FB 5F    mov     DPTR, #XRAM_FB5F      ; Espaço entre linhas
B1:D449 F0          movx    @DPTR, A
B1:D44A 7B 09       mov     R3, #9                ; 9=Todos 256 caracteres + Bottom align
B1:D44C 7D 01       mov     R5, #1                ; alinhamento = 0x00 (esquerda), 0x01 (Centro), 0x02 (Direita)
B1:D44E 7F 11       mov     R7, #0x11             ; Janela da legenda
B1:D450 12 92 42    lcall   PSB_Set_Param
B1:D453 7F 59       mov     R7, #0x59 ; 'Y'       ; Verifica "DivX Subtitle" na eeprom
B1:D455 7E 00       mov     R6, #0
B1:D457 12 04 E7    lcall   Pref_Getchar_B1BS
B1:D45A EF          mov     A, R7                 ; A sempre será zero
B1:D45B 24 FE       add     A, #0xFE ; '¦'
B1:D45D 60 11       jz      B1_D470               ; Dependendo da fonte, faria uma outra escolha de parâmetros
B1:D45F 14          dec     A
B1:D460 60 09       jz      B1_D46B
B1:D462 24 02       add     A, #2
B1:D464 70 18       jnz     B1_D47E
B1:D466 7F 05       mov     R7, #5
B1:D468 02 08 4D    ljmp    OSD_SetFont?_B1BS
B1:D46B             ; ---------------------------------------------------------------------------
B1:D46B
B1:D46B             B1_D46B:                      ; CODE XREF: SetMeg4SubtitleParams+49j
B1:D46B 7F 07       mov     R7, #7
B1:D46D 02 08 4D    ljmp    OSD_SetFont?_B1BS
B1:D470             ; ---------------------------------------------------------------------------
B1:D470
B1:D470             B1_D470:                      ; CODE XREF: SetMeg4SubtitleParams+46j
B1:D470 E4          clr     A                     ; Este trecho nunca é chamado, porque o número da fonte nunca coincide
B1:D471 90 FB 5F    mov     DPTR, #XRAM_FB5F      ; Espaço entre linhas
B1:D474 F0          movx    @DPTR, A
B1:D475 7B 01       mov     R3, #1
B1:D477 7D 01       mov     R5, #1                ; alinhamento = 0x00 (esquerda), 0x01 (Centro)
B1:D479 7F 11       mov     R7, #0x11             ; Janela da legenda
B1:D47B 12 92 42    lcall   PSB_Set_Param
B1:D47E
B1:D47E             B1_D47E:                      ; CODE XREF: SetMeg4SubtitleParams+4Dj
B1:D47E 22          ret
B1:D47E             ; End of function SetMeg4SubtitleParams


Note o ponto destacado em vermelho. Mudando seu valor podemos escolher a fonte usada nas legendas Eu já testei selecionando duas fontes mas talvez não dê para selecionar muito mais que isso por causa da limitação no tamanho deste firmware, que só pode ter até 1MB.

A seleção de fontes, como no DVP5960 e no DVP5965, está completamente desativada porque o valor na eeprom é sempre zero. Apagando o código inoperante deve sobrar espaço suficiente em SetMeg4SubtitleParams para fazer o patch de escolha de altura. Por sorte, existe também bastante espaço livre no banco 2 que podemos usar para criar um menu de seleção de fontes e cores tão comlpeto quanto o que fiz para o Proview DVP-858. Faltam apenas os endereços de eeprom extras para armazenar a cor e a altura.


« Última modificação: Agosto 19, 2007, 05:37:14 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #177 Online: Agosto 19, 2007, 05:59:37 am »
Como encontrar OSD_SetFont em aparelhos Philips

  • DVP5100
  • DVP5140
  • DVP3040K
  • PET725

C2 AF 30 ? 0A 90 F8 86 E0 30 E3 03 20 ? F6 90 F8 E0
E4 F0 A3 74 37 F0 A3 EF F0 30 ? 0D 90 F8 60 E0 20 E5 F9 90 F8 86 74 08 F0 D2 AF 22

  • DVP5980
  • DVP5965
  • DVP5960

A rotina é radicalmente diferente

E4 FD 7F E0 FE 12 19 ? 7D 37 7F E1 7E 00 12 19 ? 90 FB ? E0 FD 7F E2 7E 00
12 19 ? 30 ? 14 7F 60 7E 00 12 19 ? EF 20 E5 F5 7D 08 7F 86 7E 00 12 19 ? D2 AF 22


Exemplo do DVP3040K:

B3:F045             OSD_SetFont:                  ; CODE XREF: B3_9091+6Fp
B3:F045                                           ; DATA XREF: B0:OSD_SetFont?_B0BSo ...
B3:F045 C2 AF       clr     IEN0.7                ; Interrupt Enable Register 0
B3:F047 30 1C 0A    jnb     RAM_23.4, B3_F054
B3:F04A
B3:F04A             B3_F04A:                      ; CODE XREF: OSD_SetFont+Cj
B3:F04A 90 F8 86    mov     DPTR, #BIM_ASSI       ; Assert RISC Interrupt Register
B3:F04D E0          movx    A, @DPTR
B3:F04E 30 E3 03    jnb     ACC.3, B3_F054        ; Accumulator
B3:F051 20 1C F6    jb      RAM_23.4, B3_F04A
B3:F054
B3:F054             B3_F054:                      ; CODE XREF: OSD_SetFont+2j
B3:F054                                           ; OSD_SetFont+9j
B3:F054 90 F8 E0    mov     DPTR, #BIM_GPR0       ; General Purpose Registers 0
B3:F057 E4          clr     A
B3:F058 F0          movx    @DPTR, A
B3:F059 A3          inc     DPTR
B3:F05A 74 37       mov     A, #0x37 ; '7'
B3:F05C F0          movx    @DPTR, A
B3:F05D A3          inc     DPTR
B3:F05E EF          mov     A, R7
B3:F05F F0          movx    @DPTR, A
B3:F060 30 1C 0D    jnb     RAM_23.4, B3_F070
B3:F063
B3:F063             B3_F063:                      ; CODE XREF: OSD_SetFont+22j
B3:F063 90 F8 60    mov     DPTR, #BIM_STAT
B3:F066 E0          movx    A, @DPTR
B3:F067 20 E5 F9    jb      ACC.5, B3_F063        ; Accumulator
B3:F06A 90 F8 86    mov     DPTR, #BIM_ASSI       ; Assert RISC Interrupt Register
B3:F06D 74 08       mov     A, #8
B3:F06F F0          movx    @DPTR, A
B3:F070
B3:F070             B3_F070:                      ; CODE XREF: OSD_SetFont+1Bj
B3:F070 D2 AF       setb    IEN0.7                ; Interrupt Enable Register 0
B3:F072 22          ret
B3:F072             ; End of function OSD_SetFont



Exemplo do DVP5965[/b]

B3:E9FE             OSD_SetFont:                  ; CODE XREF: B3_99EC+F8p
B3:E9FE                                           ; DATA XREF: B0:B0_BS_240_B3_E9FEo ...
B3:E9FE 90 FB B6    mov     DPTR, #XRAM_FBB6
B3:EA01 EF          mov     A, R7
B3:EA02 F0          movx    @DPTR, A
B3:EA03 C2 AF       clr     IEN0.7                ; Interrupt Enable Register 0
B3:EA05 30 1E 0E    jnb     RAM_23.6, B3_EA16
B3:EA08
B3:EA08             B3_EA08:                      ; CODE XREF: OSD_SetFont+15j
B3:EA08 7F 86       mov     R7, #0x86 ; 'å'
B3:EA0A 7E 00       mov     R6, #0
B3:EA0C 12 19 3E    lcall   B3_BS_1_B0_F320
B3:EA0F EF          mov     A, R7
B3:EA10 30 E3 03    jnb     ACC.3, B3_EA16        ; Accumulator
B3:EA13 20 1E F2    jb      RAM_23.6, B3_EA08
B3:EA16
B3:EA16             B3_EA16:                      ; CODE XREF: OSD_SetFont+7j
B3:EA16                                           ; OSD_SetFont+12j
B3:EA16 E4          clr     A
B3:EA17 FD          mov     R5, A
B3:EA18 7F E0       mov     R7, #0xE0 ; 'Ó'
B3:EA1A FE          mov     R6, A
B3:EA1B 12 19 50    lcall   B3_BS_4_B0_F32C
B3:EA1E 7D 37       mov     R5, #0x37 ; '7'
B3:EA20 7F E1       mov     R7, #0xE1 ; 'ß'
B3:EA22 7E 00       mov     R6, #0
B3:EA24 12 19 50    lcall   B3_BS_4_B0_F32C
B3:EA27 90 FB B6    mov     DPTR, #XRAM_FBB6
B3:EA2A E0          movx    A, @DPTR
B3:EA2B FD          mov     R5, A
B3:EA2C 7F E2       mov     R7, #0xE2 ; 'Ô'
B3:EA2E 7E 00       mov     R6, #0
B3:EA30 12 19 50    lcall   B3_BS_4_B0_F32C
B3:EA33 30 1E 14    jnb     RAM_23.6, B3_EA4A
B3:EA36
B3:EA36             B3_EA36:                      ; CODE XREF: OSD_SetFont+40j
B3:EA36 7F 60       mov     R7, #0x60 ; '`'
B3:EA38 7E 00       mov     R6, #0
B3:EA3A 12 19 3E    lcall   B3_BS_1_B0_F320
B3:EA3D EF          mov     A, R7
B3:EA3E 20 E5 F5    jb      ACC.5, B3_EA36        ; Accumulator
B3:EA41 7D 08       mov     R5, #8
B3:EA43 7F 86       mov     R7, #0x86 ; 'å'
B3:EA45 7E 00       mov     R6, #0
B3:EA47 12 19 50    lcall   B3_BS_4_B0_F32C
B3:EA4A
B3:EA4A             B3_EA4A:                      ; CODE XREF: OSD_SetFont+35j
B3:EA4A D2 AF       setb    IEN0.7                ; Interrupt Enable Register 0
B3:EA4C 22          ret
B3:EA4C             ; End of function OSD_SetFont


Localizar OSD_SetFont foi essencial para que eu pudesse localizar Sub_style no DVP3040K, no Pet725 e no DVP5140.

« Última modificação: Agosto 19, 2007, 07:30:31 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #178 Online: Agosto 19, 2007, 06:07:02 am »
SUB_Style do Philips PET_725


B1:C16B             Sub_Style:                    ; CODE XREF: B1_D2D5+31p
B1:C16B 90 FB AF    mov     DPTR, #XRAM_FBAF
B1:C16E EE          mov     A, R6
B1:C16F F0          movx    @DPTR, A
B1:C170 A3          inc     DPTR
B1:C171 EF          mov     A, R7
B1:C172 F0          movx    @DPTR, A
B1:C173 7F 0F       mov     R7, #0xF
B1:C175 12 06 4F    lcall   B1_BS_145_B3_DE0F
B1:C175
B1:C178 7F 0E       mov     R7, #0xE
B1:C17A 12 06 4F    lcall   B1_BS_145_B3_DE0F
B1:C17A
B1:C17D 7F 01       mov     R7, #1
B1:C17F 12 06 4F    lcall   B1_BS_145_B3_DE0F
B1:C17F
B1:C182 7F 04       mov     R7, #4
B1:C184 12 05 0B    lcall   B1_BS_91_B3_2949
B1:C184
B1:C187 7F 02       mov     R7, #2
B1:C189 12 05 FB    lcall   OSD_TextInit_B1BS
B1:C189
B1:C18C 7F 02       mov     R7, #2
B1:C18E 12 06 01    lcall   B1_BS_132_B3_E31B
B1:C18E
B1:C191 7F 03       mov     R7, #3
B1:C193 12 DD 55    lcall   B1_DD55
B1:C193
B1:C196 E4          clr     A
B1:C197 FF          mov     R7, A
B1:C198 12 06 49    lcall   OSD_SetFont_B1BS
B1:C198
B1:C19B D2 49       setb    RAM_29.1
B1:C19D 7F 12       mov     R7, #0x12
B1:C19F 12 05 DD    lcall   B1_BS_126_B3_400F
B1:C19F
B1:C1A2 7F 12       mov     R7, #0x12
B1:C1A4 12 05 E3    lcall   B1_BS_127_B3_5B71
B1:C1A4
B1:C1A7 90 FB F1    mov     DPTR, #XRAM_FBF1      ; OSD_Colors
B1:C1AA 74 06       mov     A, #6                 ; Cor de contorno = 6
B1:C1AC F0          movx    @DPTR, A
B1:C1AD A3          inc     DPTR
B1:C1AE 74 02       mov     A, #2                 ; Cor do preenchimento = 2
B1:C1B0 F0          movx    @DPTR, A
B1:C1B1 7B 06       mov     R3, #6                ; Cor do background
B1:C1B3 E4          clr     A
B1:C1B4 FD          mov     R5, A
B1:C1B5 7F 12       mov     R7, #0x12             ; Janela
B1:C1B7 12 05 1D    lcall   OSD_TextColor_B1BS
B1:C1B7
B1:C1BA E4          clr     A
B1:C1BB FD          mov     R5, A
B1:C1BC 7F 12       mov     R7, #0x12
B1:C1BE 12 06 9D    lcall   B1_BS_158_B3_E074
B1:C1BE
B1:C1C1 7F 12       mov     R7, #0x12
B1:C1C3 12 05 FB    lcall   OSD_TextInit_B1BS
B1:C1C3
B1:C1C6 7F 12       mov     R7, #0x12
B1:C1C8 12 06 01    lcall   B1_BS_132_B3_E31B
B1:C1C8
B1:C1CB 90 FC 71    mov     DPTR, #XRAM_FC71
B1:C1CE E0          movx    A, @DPTR
B1:C1CF 54 C7       anl     A, #0xC7
B1:C1D1 F0          movx    @DPTR, A
B1:C1D2 22          ret
B1:C1D2
B1:C1D2             ; End of function Sub_Style


Como o PET725 tem espaço sobrando, com essa informação já é possível eliminar o background (tornando as fontes "normais") e criar menus de escolha de fontes e cores.

Mesmo sem ter o trabalho de fazer menus já dá para separar a fonte das legendas da usada no browser e corrigir as cores da fonte.

Note que pode existir uma Sub_Style_Sec, que não encontrei ainda.
« Última modificação: Agosto 19, 2007, 06:10:08 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #179 Online: Agosto 19, 2007, 06:42:55 am »
Philips DVP5140: Sub_style e SetMeg4SubtitleParams

O DVP5140 não é vendido no Brasil, mas faz parte dos meus testes porque tem caracterísiticas interessantes, não sendo igual a nenhum outro aparelho Philips que eu conheça. E quanto mais aparelhos distintos você analisar, mas fácil fica encontrar padrões.

Você poderá notar que o DVP5140 tem um código muito parecido com o do DVP3040

B1:F16C             Sub_Style:                              ; CODE XREF: B1_E132+3Ep
B1:F16C 90 FB 46              mov   DPTR, #XRAM_FB46
B1:F16F EE                    mov   A, R6
B1:F170 F0                    movx  @DPTR, A
B1:F171 A3                    inc   DPTR
B1:F172 EF                    mov   A, R7
B1:F173 F0                    movx  @DPTR, A
B1:F174 7F 03                 mov   R7, #3
B1:F176 12 07 1B              lcall B1_BS_179_B3_4B4F
B1:F176
B1:F179 7F 01                 mov   R7, #1
B1:F17B 12 07 1B              lcall B1_BS_179_B3_4B4F
B1:F17B
B1:F17E 7F 03                 mov   R7, #3
B1:F180 12 F6 C7              lcall B1_F6C7
B1:F180
B1:F183 7B FF                 mov   R3, #0xFF
B1:F185 7D EB                 mov   R5, #0xEB ; 'Ù'
B1:F187 7C 01                 mov   R4, #1
B1:F189 74 01                 mov   A, #1
B1:F18B FF                    mov   R7, A
B1:F18C FE                    mov   R6, A
B1:F18D 12 06 61              lcall OSD_DispMSG2_B1BS
B1:F18D
B1:F190 7F 0E                 mov   R7, #0xE
B1:F192 12 06 F7              lcall B1_BS_173_B4_EE4A
B1:F192
B1:F195 12 D7 CA              lcall SetMeg4SubtitleParams
B1:F195
B1:F198 7F 11                 mov   R7, #0x11
B1:F19A 12 08 1D              lcall OSD_textInit_B1BS
B1:F19A
B1:F19D 7F 11                 mov   R7, #0x11
B1:F19F 12 08 23              lcall B1_BS_223_B3_F09F
B1:F19F
B1:F1A2 22                    ret
B1:F1A2
B1:F1A2             ; End of function Sub_Style



B3:593C             Sub_Style_Sec:                          ; DATA XREF: OSD_Text_Init+63o
B3:593C 90 FB 88              mov   DPTR, #XRAM_FB88        ; Tem o número da janela (OSD_Text_Init)
B3:593F E0                    movx  A, @DPTR
B3:5940 FF                    mov   R7, A
B3:5941 D2 45                 setb  RAM_28.5
B3:5943 12 28 67              lcall OSD_Text_Params_ARM
B3:5943
B3:5946 90 FB 88              mov   DPTR, #XRAM_FB88        ; Tem o número da janela (OSD_Text_Init)
B3:5949 E0                    movx  A, @DPTR
B3:594A FF                    mov   R7, A
B3:594B 12 6C EF              lcall OSD_Text_Params
B3:594B
B3:594E 90 FB 88              mov   DPTR, #XRAM_FB88        ; Tem o número da janela (OSD_Text_Init)
B3:5951 E0                    movx  A, @DPTR
B3:5952 FF                    mov   R7, A
B3:5953 E4                    clr   A
B3:5954 90 FB A5              mov   DPTR, #XRAM_FBA5        ; OSD Colors
B3:5957 F0                    movx  @DPTR, A
B3:5958 A3                    inc   DPTR
B3:5959 74 02                 mov   A, #2
B3:595B F0                    movx  @DPTR, A
B3:595C 7B 03                 mov   R3, #3
B3:595E E4                    clr   A
B3:595F FD                    mov   R5, A
B3:5960 12 D2 9D              lcall OSD_Text_Color
B3:5960
B3:5963 90 FB 88              mov   DPTR, #XRAM_FB88        ; Tem o número da janela (OSD_Text_Init)
B3:5966 E0                    movx  A, @DPTR
B3:5967 FF                    mov   R7, A
B3:5968 E4                    clr   A
B3:5969 FD                    mov   R5, A
B3:596A 02 ED 66              ljmp  OSD_Text_Init_End




B1:D7CA             SetMeg4SubtitleParams:                  ; CODE XREF: Sub_Style+29p
B1:D7CA                                                     ; BankSw_336_B1_F860:B1_FB4Fp
B1:D7CA E4                    clr   A
B1:D7CB 90 FB ED              mov   DPTR, #XRAM_FBED        ; wX1.high
B1:D7CE F0                    movx  @DPTR, A
B1:D7CF A3                    inc   DPTR
B1:D7D0 F0                    movx  @DPTR, A
B1:D7D1 90 FB F0              mov   DPTR, #XRAM_FBF0        ; wY1.high
B1:D7D4 F0                    movx  @DPTR, A
B1:D7D5 A3                    inc   DPTR
B1:D7D6 F0                    movx  @DPTR, A
B1:D7D7 90 FB F4              mov   DPTR, #XRAM_FBF4        ; wX2.high
B1:D7DA 74 02                 mov   A, #2
B1:D7DC F0                    movx  @DPTR, A
B1:D7DD A3                    inc   DPTR
B1:D7DE 74 30                 mov   A, #0x30 ; '0'          ; 0x230 = 560
B1:D7E0 F0                    movx  @DPTR, A
B1:D7E1 90 FB F8              mov   DPTR, #XRAM_FBF8        ; wY2.high (define a altura)
B1:D7E4 E4                    clr   A
B1:D7E5 F0                    movx  @DPTR, A
B1:D7E6 A3                    inc   DPTR
B1:D7E7 74 60                 mov   A, #0x60 ; '`'          ; Altura da janela
B1:D7E9 F0                    movx  @DPTR, A
B1:D7EA E4                    clr   A
B1:D7EB FD                    mov   R5, A
B1:D7EC 7F 17                 mov   R7, #0x17
B1:D7EE 7E 01                 mov   R6, #1
B1:D7F0 12 05 FB              lcall Arm_PutChar_B1BS
B1:D7F0
B1:D7F3 7F 03                 mov   R7, #3                  ; Determina a fonte usada nas legendas
B1:D7F5 12 08 53              lcall OSD_SetFont_B1BS
B1:D7F5
B1:D7F8 E4                    clr   A
B1:D7F9 90 FB 5F              mov   DPTR, #XRAM_FB5F        ; Espaço entre linhas
B1:D7FC F0                    movx  @DPTR, A
B1:D7FD 7B 09                 mov   R3, #9                  ; 9= todos 255 caracteres + alinhamento bottom
B1:D7FF 7D 01                 mov   R5, #1                  ; alinhamento = 0x00 (esquerda), 0x01 (Centro), 0x02 (Direita)
B1:D801 7F 11                 mov   R7, #0x11               ; Janela da legenda
B1:D803 12 94 46              lcall PSB_Set_Param
B1:D803
B1:D806 7F 59                 mov   R7, #0x59 ; 'Y'         ; Pega o valor de "DivX Subtitle" na eeprom
B1:D808 7E 00                 mov   R6, #0
B1:D80A 12 04 ED              lcall Pref_Getchar_B1BS
B1:D80A
B1:D80D EF                    mov   A, R7
B1:D80E 24 FE                 add   A, #0xFE ; '¦'
B1:D810 60 11                 jz    B1_D823
B1:D810
B1:D812 14                    dec   A
B1:D813 60 09                 jz    B1_D81E
B1:D813
B1:D815 24 02                 add   A, #2
B1:D817 70 18                 jnz   B1_D831
B1:D817
B1:D819 7F 05                 mov   R7, #5
B1:D81B 02 08 53              ljmp  OSD_SetFont_B1BS
B1:D81B
B1:D81E             ; ---------------------------------------------------------------------------
B1:D81E
B1:D81E             B1_D81E:                                ; CODE XREF: SetMeg4SubtitleParams+49j
B1:D81E 7F 07                 mov   R7, #7
B1:D820 02 08 53              ljmp  OSD_SetFont_B1BS
B1:D820
B1:D823             ; ---------------------------------------------------------------------------
B1:D823
B1:D823             B1_D823:                                ; CODE XREF: SetMeg4SubtitleParams+46j
B1:D823 E4                    clr   A
B1:D824 90 FB 5F              mov   DPTR, #XRAM_FB5F        ; Espaço entre linhas
B1:D827 F0                    movx  @DPTR, A
B1:D828 7B 01                 mov   R3, #1                  ; Alinhamento bottom. Apenas 127 chars
B1:D82A 7D 01                 mov   R5, #1                  ; alinhamento = 0x00 (esquerda), 0x01 (Centro), 0x02 (Direita)
B1:D82C 7F 11                 mov   R7, #0x11               ; Janela da legenda
B1:D82E 12 94 46              lcall PSB_Set_Param
B1:D82E
B1:D831
B1:D831             B1_D831:                                ; CODE XREF: SetMeg4SubtitleParams+4Dj
B1:D831 22                    ret
B1:D831
B1:D831             ; End of function SetMeg4SubtitleParams



Uma surpresa: o DVP5140 tem uma segunda rotina SetMpeg4SubtitleParams:

B1:F366             SetMpeg4SubtitleParams2:                ; CODE XREF: BankSw_250_B1_D832+10p
B1:F366 E4                    clr   A
B1:F367 90 FB ED              mov   DPTR, #XRAM_FBED        ; wX1.high
B1:F36A F0                    movx  @DPTR, A
B1:F36B A3                    inc   DPTR
B1:F36C F0                    movx  @DPTR, A
B1:F36D 90 FB F0              mov   DPTR, #XRAM_FBF0        ; wY1.high
B1:F370 F0                    movx  @DPTR, A
B1:F371 A3                    inc   DPTR
B1:F372 F0                    movx  @DPTR, A
B1:F373 90 FB F4              mov   DPTR, #XRAM_FBF4        ; wX2.high
B1:F376 74 02                 mov   A, #2
B1:F378 F0                    movx  @DPTR, A
B1:F379 A3                    inc   DPTR
B1:F37A 74 30                 mov   A, #0x30 ; '0'          ; 0x230 = 560
B1:F37C F0                    movx  @DPTR, A
B1:F37D 90 FB F8              mov   DPTR, #XRAM_FBF8        ; wY2.high
B1:F380 E4                    clr   A
B1:F381 F0                    movx  @DPTR, A
B1:F382 A3                    inc   DPTR
B1:F383 74 60                 mov   A, #0x60 ; '`'          ; Altura da janela
B1:F385 F0                    movx  @DPTR, A
B1:F386 E4                    clr   A
B1:F387 90 FB 5F              mov   DPTR, #XRAM_FB5F        ; Espaço entre linhas
B1:F38A F0                    movx  @DPTR, A
B1:F38B 7B 09                 mov   R3, #9
B1:F38D 7D 01                 mov   R5, #1
B1:F38F 7F 11                 mov   R7, #0x11
B1:F391 12 94 46              lcall PSB_Set_Param
B1:F391
B1:F394 D3                    setb  C
B1:F395 22                    ret
B1:F395
B1:F395             ; End of function SetMpeg4SubtitleParams2

« Última modificação: Agosto 19, 2007, 07:33:08 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #180 Online: Agosto 19, 2007, 07:48:47 am »
SUB_Style e SetMPeg4SubtitleParams do Philips DVP5980

A Sub_Style Primária do DVP5980 se confunde com a rotina conhecida como Video_Play

B1:F6FE             Sub_Style:                    ; DATA XREF: B0:B0_BS_689_B1_F6FEo
B1:F6FE                                           ; B1:B1_BS_689_B1_F6FEo ...
B1:F6FE 90 FB D2    mov     DPTR, #XRAM_FBD2
B1:F701 EE          mov     A, R6
B1:F702 F0          movx    @DPTR, A
B1:F703 A3          inc     DPTR
B1:F704 EF          mov     A, R7
B1:F705 F0          movx    @DPTR, A
B1:F706 E4          clr     A
B1:F707 FD          mov     R5, A                 ; Carrega o background zero
B1:F708 FC          mov     R4, A
B1:F709 7F 01       mov     R7, #1
B1:F70B 12 1D 2A    lcall   vPlayerShowLogo_B1BS
B1:F70B
B1:F70E 7F 03       mov     R7, #3
B1:F710 12 1D 30    lcall   B1_BS_173_B3_4C8F
B1:F710
B1:F713 7F 01       mov     R7, #1
B1:F715 12 1D 30    lcall   B1_BS_173_B3_4C8F
B1:F715
B1:F718 7F 03       mov     R7, #3
B1:F71A 12 1F 0A    lcall   B1_BS_252_B4_EA05
B1:F71A
B1:F71D 12 E2 25    lcall   SetMPeg4SubtitleParams
B1:F71D
B1:F720 7F 12       mov     R7, #0x12
B1:F722 12 1E 50    lcall   OSD_TextInit_B1BS
B1:F722
B1:F725 7F 12       mov     R7, #0x12
B1:F727 12 1E 56    lcall   B1_BS_222_B3_CE38
B1:F727
B1:F72A 22          ret


Sub_Style Secundária

B3:16B7             Sub_Style_Sec:                ; DATA XREF: OSD_Text_Init+6Bo
B3:16B7 90 FC 5B    mov     DPTR, #XRAM_FC5B      ; Tem o número da janela (OSD_Text_Init)
B3:16BA E0          movx    A, @DPTR
B3:16BB FF          mov     R7, A
B3:16BC D2 49       setb    RAM_29.1
B3:16BE 12 51 4D    lcall   OSD_Text_Params_ARM
B3:16BE
B3:16C1 90 FC 5B    mov     DPTR, #XRAM_FC5B      ; Tem o número da janela (OSD_Text_Init)
B3:16C4 E0          movx    A, @DPTR
B3:16C5 FF          mov     R7, A
B3:16C6 12 73 23    lcall   OSD_Text_Params
B3:16C6
B3:16C9 90 FC 5B    mov     DPTR, #XRAM_FC5B      ; Tem o número da janela (OSD_Text_Init)
B3:16CC E0          movx    A, @DPTR
B3:16CD FF          mov     R7, A
B3:16CE E4          clr     A                     ; Cor de contorno = 0
B3:16CF 90 FC 60    mov     DPTR, #XRAM_FC60      ; OSD_Colors
B3:16D2 F0          movx    @DPTR, A
B3:16D3 A3          inc     DPTR
B3:16D4 74 02       mov     A, #2                 ; Cor de Preenchimento = 2
B3:16D6 F0          movx    @DPTR, A
B3:16D7 7B 03       mov     R3, #3                ; Cor do fundo
B3:16D9 E4          clr     A
B3:16DA FD          mov     R5, A
B3:16DB 12 AE CA    lcall   OSD_Text_Color
B3:16DB
B3:16DE 90 FC 5B    mov     DPTR, #XRAM_FC5B      ; Tem o número da janela (OSD_Text_Init)
B3:16E1 E0          movx    A, @DPTR
B3:16E2 FF          mov     R7, A
B3:16E3 E4          clr     A
B3:16E4 FD          mov     R5, A
B3:16E5 02 C9 50    ljmp    BankSw_268_B3_C950





B1:E225             SetMPeg4SubtitleParams:       ; CODE XREF: BankSw_689_B1_F6FE+1Fp
B1:E225                                           ; BankSw_698_B1_FB93:B1_FBA2p
B1:E225 E4          clr     A                     ; Rotina onde podem ser ajustada a posicao das legendas, altura das linhas, etc
B1:E226 90 FC BD    mov     DPTR, #XRAM_FCBD      ; wX1.high
B1:E229 F0          movx    @DPTR, A
B1:E22A A3          inc     DPTR
B1:E22B F0          movx    @DPTR, A
B1:E22C 90 FC C0    mov     DPTR, #XRAM_FCC0      ; wY1.high
B1:E22F F0          movx    @DPTR, A
B1:E230 A3          inc     DPTR
B1:E231 F0          movx    @DPTR, A
B1:E232 90 FC C3    mov     DPTR, #XRAM_FCC3      ; wX2.high
B1:E235 74 02       mov     A, #2
B1:E237 F0          movx    @DPTR, A
B1:E238 A3          inc     DPTR
B1:E239 74 30       mov     A, #0x30 ; '0'
B1:E23B F0          movx    @DPTR, A
B1:E23C 90 FC C7    mov     DPTR, #XRAM_FCC7      ; wY2.high
B1:E23F E4          clr     A
B1:E240 F0          movx    @DPTR, A
B1:E241 A3          inc     DPTR
B1:E242 74 60       mov     A, #0x60 ; '`'        ; Altura da janela. Aumente se linhas estiverem deixando de aparecer
B1:E244 F0          movx    @DPTR, A
B1:E245 E4          clr     A
B1:E246 FD          mov     R5, A
B1:E247 7F 1D       mov     R7, #0x1D
B1:E249 7E 01       mov     R6, #1
B1:E24B 12 19 E8    lcall   B1_BS_33_B6_B7A7
B1:E24B
B1:E24E 7F 0A       mov     R7, #0xA              ; Fonte para as legendas DivX
B1:E250 12 1E BC    lcall   OSD_SetFont_B1BS
B1:E250
B1:E253 E4          clr     A
B1:E254 90 FB E6    mov     DPTR, #XRAM_FBE6      ; Espaço entre linhas
B1:E257 F0          movx    @DPTR, A
B1:E258 7B 09       mov     R3, #9                ; bit options
B1:E25A 7D 01       mov     R5, #1
B1:E25C 7F 12       mov     R7, #0x12
B1:E25E 12 1F 7C    lcall   PSB_Set_Param_B1BS
B1:E25E
B1:E261 7F 2C       mov     R7, #0x2C ; ','
B1:E263 7E 00       mov     R6, #0
B1:E265 12 1B C8    lcall   B1_BS_113_B5_DB60
B1:E265
B1:E268 EF          mov     A, R7
B1:E269 24 FE       add     A, #0xFE ; '¦'
B1:E26B 60 0C       jz      B1_E279
B1:E26B
B1:E26D 14          dec     A
B1:E26E 60 0E       jz      B1_E27E
B1:E26E
B1:E270 24 02       add     A, #2
B1:E272 70 18       jnz     B1_E28C
B1:E272
B1:E274 7F 0E       mov     R7, #0xE
B1:E276 02 1E BC    ljmp    OSD_SetFont_B1BS
B1:E276
B1:E279             ; ---------------------------------------------------------------------------
B1:E279
B1:E279             B1_E279:                      ; CODE XREF: SetMPeg4SubtitleParams+46j
B1:E279 7F 0C       mov     R7, #0xC
B1:E27B 02 1E BC    ljmp    OSD_SetFont_B1BS
B1:E27B
B1:E27E             ; ---------------------------------------------------------------------------
B1:E27E
B1:E27E             B1_E27E:                      ; CODE XREF: SetMPeg4SubtitleParams+49j
B1:E27E E4          clr     A
B1:E27F 90 FB E6    mov     DPTR, #XRAM_FBE6      ; Espaço entre linhas
B1:E282 F0          movx    @DPTR, A
B1:E283 7B 01       mov     R3, #1                ; bit Options
B1:E285 7D 01       mov     R5, #1
B1:E287 7F 12       mov     R7, #0x12
B1:E289 12 1F 7C    lcall   PSB_Set_Param_B1BS
B1:E289
B1:E28C
B1:E28C             B1_E28C:                      ; CODE XREF: SetMPeg4SubtitleParams+4Dj
B1:E28C 22          ret
B1:E28C
B1:E28C             ; End of function SetMPeg4SubtitleParams



Assim como o DVP5140, o DVP5980 também tem uma segunda SetMPeg4SubtitleParams:

B1:F646             SetMPeg4SubtitleParams_2:     ; DATA XREF: B0:B0_BS_682_B1_F646o
B1:F646                                           ; B1:B1_BS_682_B1_F646o ...
B1:F646 E4          clr     A                     ; Rotina onde podem ser ajustada a posicao das legendas, altura das linhas, etc
B1:F647 90 FC BD    mov     DPTR, #XRAM_FCBD      ; wX1.high
B1:F64A F0          movx    @DPTR, A
B1:F64B A3          inc     DPTR
B1:F64C F0          movx    @DPTR, A
B1:F64D 90 FC C0    mov     DPTR, #XRAM_FCC0      ; wY1.high
B1:F650 F0          movx    @DPTR, A
B1:F651 A3          inc     DPTR
B1:F652 F0          movx    @DPTR, A
B1:F653 90 FC C3    mov     DPTR, #XRAM_FCC3      ; wX2.high
B1:F656 74 02       mov     A, #2
B1:F658 F0          movx    @DPTR, A
B1:F659 A3          inc     DPTR
B1:F65A 74 30       mov     A, #0x30 ; '0'
B1:F65C F0          movx    @DPTR, A
B1:F65D 90 FC C7    mov     DPTR, #XRAM_FCC7      ; wY2.high
B1:F660 E4          clr     A
B1:F661 F0          movx    @DPTR, A
B1:F662 A3          inc     DPTR
B1:F663 74 60       mov     A, #0x60 ; '`'        ; Altura da janela. Aumente se linhas estiverem deixando de aparecer
B1:F665 F0          movx    @DPTR, A
B1:F666 E4          clr     A
B1:F667 90 FB E6    mov     DPTR, #XRAM_FBE6      ; Espaço entre linhas
B1:F66A F0          movx    @DPTR, A
B1:F66B 7B 09       mov     R3, #9                ; Bit Options
B1:F66D 7D 01       mov     R5, #1                ; alinhamento = 0x00 (esquerda), 0x01 (Centro)
B1:F66F 7F 12       mov     R7, #0x12             ; Janela da legenda
B1:F671 12 1F 7C    lcall   PSB_Set_Param_B1BS
B1:F671
B1:F674 D3          setb    C
B1:F675 22          ret
B1:F675
B1:F675             ; End of function SetMPeg4SubtitleParams_2


Com isso, temos os elementos necessários para criar menus com escolha de fontes, cor e posição para as legendas.
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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #181 Online: Agosto 19, 2007, 08:09:32 am »
Dicas para localização de rotinas

Tenho que escrever essas coisas, antes que eu esqueça. Não espere entender muito do que está aqui, porque é um rascunho que posso usar para elaborar outro texto um outro dia :)

Se o firmware tiver uma SetMPeg4SubtitleParams mista (com leitura da eeprom), esta rotina é diretamente chamada por Sub_Style.

Para descobrir se o firmware tem rotinas de leituras de fontes na eeprom, mesmo que desativadas, procure pela string "DivX Subtitle" na estrutura de menus no mtkRemaker. Se o mtkRemaker não estiver achando os menus, vá no Language Code 00 e procure a string lá, pegue o seu código hexa e procure duas ocorrências seguidas dele com um editor hexadecimal. Alguns bytes à frente está o endereço eeprom usado pela fonte DivX.

Por exemplo, no DVP5980 o mtkRemaker não encontra os menus, mas o código hexa para o texto "DivX Subtitle" é 0503. Procurando "0503 0503" no firmware encontramos:

0008 FFFF 0503 0503 002C 0000 0000 0000 FF40 7000 00FF 402F FF40 36 

E 0x2C é o endereço eeprom procurado (a maioria dos firmwares Philips usa o 0x59).   

Sabendo o endereço eeprom onde está o número da fonte, procuramos por:

7F 2C 7E 00 

Todas as ocorrências dessa string são pontos onde o número da fonte é lido. Teoricamente isso só vai ocorrer na rotina SubStyle ou em rotinas chamadas por ela, como a SetMPeg4SubtitleParams mista.     

Sub_Style sempre tem pelo menos uma chamada do tipo:

B1:F720 7F 12       mov     R7, #0x12     ; onde 12 é o número da janela de legendas
B1:F722 12 1E 50    lcall   OSD_TextInit_B1BS


Sabendo onde está OSD_text_Init, olhe no seu CASE a chamada que usa o número de janela das legendas. Seguindo essa chamada você encontrará Sub_Style_Sec ou Sub_Style_2

Localizar OSD_SetFont pode ser essencial para achar Sub_Style direta ou indiretamente
« Última modificação: Agosto 27, 2007, 06:15:05 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #182 Online: Agosto 19, 2007, 12:02:13 pm »
DVP3040K/55 : 1MB sobrando na flash!

Eu não sei porque raios eu estive assumindo até agora que o DVP3040K tinha apenas 1MB de flash. Eu imagino que foi uma combinação de fatores:

  • Todos os firmwares que vi até agora, mesmo modificados, não passavam de 1MB;
  • Todas as modificações que vi até agora foram "tímidas"
  • O mtkRemaker diz que a flash é de 1MB;
  • Eu tenho certeza de que li mais de uma vez comentários de que o DVP3040K não podia ser melhor por causa da flash limitada;

Mas o fato é que a flash do meu tem 2MB!
Vai dar para fazer muuuita coisa com o bicho!  :yahoo!:

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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #183 Online: Agosto 19, 2007, 12:17:59 pm »
Eu acabo de instalar o firmware do DVP5140 no DVP3040K e adivinhem...

Tá tudo funcionando!

Eu sou o feliz proprietário do primeiro DVP3040K do mundo com suporte a DivX Ultra:yahoo!:
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #184 Online: Agosto 19, 2007, 10:35:12 pm »
¡Quantas novidades em um so día!  ;D

En quanto ao patch do DVP510, agora sim as fontes estão funcionando devidamente. Usei por 6-8 horas seguidas e não ouve nenhuma falha.  :yahoo!:

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #185 Online: Agosto 20, 2007, 02:40:41 am »
[/b]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.
Interessante... ¿Você sabe qual é o wildcard '?' no UltraEdit?

Faz um tempão que estou buscando (já li a ajuda, busquei no Google e nada...)  :-[

Offline fabianr

  • Novato
  • *
  • Mensagens: 9
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware: log de descobertas
« Responder #186 Online: Agosto 20, 2007, 02:59:50 am »
Hola Jmaraujo.... en Ultraedit, elije la opcion de "regular expressions" y luego utiliza "?" como wild card para
cada uno... por ejemplo... jm?raujo, encontrara jmaraujo, jmbraujo, etc...

Saludos,
FabianR

Offline fabianr

  • Novato
  • *
  • Mensagens: 9
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware: log de descobertas
« Responder #187 Online: Agosto 20, 2007, 03:11:36 am »
Eu acabo de instalar o firmware do DVP5140 no DVP3040K e adivinhem...

Tá tudo funcionando!

Eu sou o feliz proprietário do primeiro DVP3040K do mundo com suporte a DivX Ultra:yahoo!:

Excelente Jefferson! Me encantaria tener Divx Ultra en mi 3040k.... :)   :yahoo!: 

Ahora una duda...  estuve probando tu mtkModToolbox, informa que el tamaño del frimware 5140 y 3040,
es de 1MB... al menos los dos que estan en tu "pack de firmwares de referencia".

Como te diste cuenta que tu 3040k tiene 2MB?

Saludos,
FabianR

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #188 Online: Agosto 20, 2007, 03:25:34 am »
Hola Jmaraujo.... en Ultraedit, elije la opcion de "regular expressions" y luego utiliza "?" como wild card

O UltraEdit dix "Expresões regulares (ASCII somente)" e eu preciso poder usar um wildcard nas buscas hexadecimais.

El UltraEdit señala "Expresiones regulares (solamente ASCII)" y yo necesito el uso de un wildcard para las búsquedas hexadecimales.

Offline fabianr

  • Novato
  • *
  • Mensagens: 9
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware: log de descobertas
« Responder #189 Online: Agosto 20, 2007, 03:39:59 am »
Hola Jmaraujo.... en Ultraedit, elije la opcion de "regular expressions" y luego utiliza "?" como wild card

O UltraEdit dix "Expresões regulares (ASCII somente)" e eu preciso poder usar um wildcard nas buscas hexadecimais.

El UltraEdit señala "Expresiones regulares (solamente ASCII)" y yo necesito el uso de un wildcard para las búsquedas hexadecimales.

Hmmm... tenes razon... :(    Yo prefiero utilizar el Hex Workshop para estas cosas... ;)

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #190 Online: Agosto 20, 2007, 05:21:04 am »

Ahora una duda...  estuve probando tu mtkModToolbox, informa que el tamaño del frimware 5140 y 3040,
es de 1MB... al menos los dos que estan en tu "pack de firmwares de referencia".

Como te diste cuenta que tu 3040k tiene 2MB?

Porque eu abri e olhei o chip de memória flash. Não há jeito mais seguro que este.
Além disso, o mtktool reconhece como um chip de 2MB.
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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #191 Online: Agosto 20, 2007, 05:27:54 am »
Interessante... ¿Você sabe qual é o wildcard '?' no UltraEdit?

Faz um tempão que estou buscando (já li a ajuda, busquei no Google e nada...)  :-[

Desculpe. Eu estava tão acostumado com o XVI que achei que fosse algo "natural" em qualquer editor hexadecimal.

Até olhei agora o Hex Workshop e também não encontrei opção nem no software e nem no help para usar wildcards.  :o

O danado é que me parece "absurdo", porque até o mtkModToolbox faz busca baseado em wildcards. Não é nenhum segredo o algoritmo para se fazer isso.
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #192 Online: Agosto 20, 2007, 07:19:47 am »
Firmwares Philips: Improvisando uma mensagem de versão

Como todos vocês que tem um aparelho da Philips devem saber, ao apertar EJECT + 55 é exibido na tela o nome do arquivo que o aparelho espera encontrar no CD de upgrade. Até esta semana, eu achava que o nome exibido vinha da mesma string usada para fazer a conferência, mas não vem!

O mosarella fez um patch similar onde adiciona os detalhes do firmware em outra linha:

> http://tech.groups.yahoo.com/group/mt13x9/message/3871
> http://tech.groups.yahoo.com/group/mt13x9/message/3878

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #193 Online: Agosto 20, 2007, 08:16:11 am »

 mosarella fez um patch similar onde adiciona os detalhes do firmware em outra linha:

> http://tech.groups.yahoo.com/group/mt13x9/message/3871
> http://tech.groups.yahoo.com/group/mt13x9/message/3878

Eu já havia visto isso, mas achei complicado demais, para pouco ganho prático.

Se fosse só uma questão de copiar e colar, eu já teria feito. Mas há um monte de endereços XRAM e de sub-rotinas que precisam ser adaptados.

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 Acheron

  • Novato
  • *
  • Mensagens: 4
  • Aprovação: +1/-0
    • Ver Perfil
Re: Firmware: log de descobertas
« Responder #194 Online: Agosto 20, 2007, 03:55:53 pm »
Eu acabo de instalar o firmware do DVP5140 no DVP3040K e adivinhem...

Tá tudo funcionando!

Eu sou o feliz proprietário do primeiro DVP3040K do mundo com suporte a DivX Ultra:yahoo!:

Hola Jefferson, podrias por favor probar si es posible instalar el firmware del DVP5140 en el DVP3040 mediante CD (cambiándole el nombre al archivo DVP5140_37.BIN a DVP3040K_55.BIN (FW 5140 renombrado) y luego probar si se puede regresar al firmware del DVP3040, esta vez cambiándole de nombre al archivo DVP3040k_55.BIN a DVP5140_37.BIN (FW 3040 renombrado). Quiero confirmar si es un proceso seguro pues yo no tengo cable serial.

Tambien si podrias habilitar el parche GOTO para DVP5140 en el MTK MODToolbox. Gracias de antemano.

DVP3040K/55 : 1MB sobrando na flash!

Eu não sei porque raios eu estive assumindo até agora que o DVP3040K tinha apenas 1MB de flash.

(...)

Mas o fato é que a flash do meu tem 2MB!
Vai dar para fazer muuuita coisa com o bicho!  :yahoo!:


¿Haz logrado instalar un firmware de mas de 1MB? Cuando yo lo hago (con CD) siempre me sale con errores, especialmente en el filebrowser. Quizas realmente el DVP3040K/55 tiene 2MB de flash de hardware, pero es el firmware mismo el que no permite actualizar correctamente más de 1 MB.

Saludos.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #195 Online: Agosto 20, 2007, 05:43:09 pm »
Hola Jefferson, podrias por favor probar si es posible instalar el firmware del DVP5140 en el DVP3040 mediante CD (cambiándole el nombre al archivo DVP5140_37.BIN a DVP3040K_55.BIN (FW 5140 renombrado) y luego probar si se puede regresar al firmware del DVP3040, esta vez cambiándole de nombre al archivo DVP3040k_55.BIN a DVP5140_37.BIN (FW 3040 renombrado). Quiero confirmar si es un proceso seguro pues yo no tengo cable serial.

Acabo de fazer o teste, usando os firmwares oficiais que estão no meu pacote de referência. O DVP3040K/55 se "transforma" em um DVP5140/37 e depois volta a ser um DVP3040K/55

Mas atenção:
  • É preciso que seu aparelho seja especificamente um submodelo /55. Eu preciso testar antes os firmwares de outros submodelos para saber até onde vai a compatibilidade. O sub-modelo /51, como você sabe, não é compatível com o /55
  • Use o arquivo que está no meu pacote de referência. O DVP5140/37 tem um outro firmware, chamado de DVP5140S_37.BIN que "mata" o DVP3040K/55. Não use.

Tambien si podrias habilitar el parche GOTO para DVP5140 en el MTK MODToolbox. Gracias de antemano.

Isso vai demorar um pouco. Eu abandonei o desenvolvimento de mtkModToolbox para me concentrar em seu sucessor, que não está pronto para uso ainda.

¿Haz logrado instalar un firmware de mas de 1MB? Cuando yo lo hago (con CD) siempre me sale con errores, especialmente en el filebrowser. Quizas realmente el DVP3040K/55 tiene 2MB de flash de hardware, pero es el firmware mismo el que no permite actualizar correctamente más de 1 MB.

Saludos.

Eu fiz um teste, colocando o bloco MPEG do LG DK194g no firmware do DVP3040K/55. O firmware ficou com 1,5MB. Instalei por cabo e por CD, sem problema aparente. Mas não leu mais nenhum DVD  :-[

Curiosamente, CDs são lidos normalmente. Só não reconhece mais a mídia DVD.

Vou reinstalar o original e fazer mais testes. Talvez seja o tamnho exagerado do bloco MPEG que está criando problemas.
« Última modificação: Agosto 28, 2007, 10:32:39 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #196 Online: Agosto 20, 2007, 06:20:22 pm »
Já testei.

Instalado via cabo o firmware de 1.5MB funciona sem problema aparente. Instalado via CD dá vários problemas. É possível até que a rotina de upgrade por CD esteja lendo apenas 1MB, dos 1,5MB do arquivo.

Vou estudar uma maneira de resolver isso. Mas pode demorar.
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 fabianr

  • Novato
  • *
  • Mensagens: 9
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware: log de descobertas
« Responder #197 Online: Agosto 20, 2007, 09:13:33 pm »
Interessante... ¿Você sabe qual é o wildcard '?' no UltraEdit?

Faz um tempão que estou buscando (já li a ajuda, busquei no Google e nada...)  :-[

Desculpe. Eu estava tão acostumado com o XVI que achei que fosse algo "natural" em qualquer editor hexadecimal.

Até olhei agora o Hex Workshop e também não encontrei opção nem no software e nem no help para usar wildcards.  :o

O danado é que me parece "absurdo", porque até o mtkModToolbox faz busca baseado em wildcards. Não é nenhum segredo o algoritmo para se fazer isso.

El X-Ways Winhex o X-Ways Forensics tiene opcion de wildcards en modo hexa...  :yahoo!:

Offline eneris

  • Novato Prolixo
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #198 Online: Agosto 21, 2007, 11:49:36 pm »
Ryan, como ja sabemos o 5965 tem no menu a opção de selecionar legendas (so que não funciona :-[), teria como adicionar mais fontes neste menu, ou só apagando este menu e criando outro do zero? E a opção de seleção de cor via setup (branca e amarela) teria como você dar um help? Ainda não compreendir a parte de criação do menu.

Agradeço muito.
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline fabianr

  • Novato
  • *
  • Mensagens: 9
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware: log de descobertas
« Responder #199 Online: Agosto 22, 2007, 12:52:47 am »
Já testei.

Instalado via cabo o firmware de 1.5MB funciona sem problema aparente. Instalado via CD dá vários problemas. É possível até que a rotina de upgrade por CD esteja lendo apenas 1MB, dos 1,5MB do arquivo.

Vou estudar uma maneira de resolver isso. Mas pode demorar.

Hmmm... pensando en voz alta... Si ya han encontrado la referencia al nombre del archivo de firmware, ahi debe estar la subrutina que carga el firmware.....  y si hay una limitacion del tamaño que lee deberia estar ahi...  :)   Tengo que estudiar un poco del assembler de estos equipos....

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #200 Online: Agosto 22, 2007, 12:54:43 am »
Eneris,

Tem como dar isso tudo ao DVP5965, fazendo algumas modificações no menu original. Eu sei como trabalhar com menus, mas ensinar é muito complicado.

No caso dos Philips, que já tem menus "cheios", é mais prático criar um gancho para uma nova página (você pode ter até oito) e construi-la toda no espaço livre do mesmo banco. É quase a mesma coisa que fiz no Proview, mas como o Proview já tinha uma página quase vazia, a mudança no código original dos menus foi mínima. Para Philips é consideravelmente mais complicado, mas ainda é mais razoável do que tentar enxertar opções nos menus existentes.

Eu já tenho na fila os menus do DVP5960, DVP5980, DVP3040 e do Lenoxx DV-406. Posso fazer também do DVP5965, mas vai demorar.

Jefferson

 
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #201 Online: Agosto 22, 2007, 02:14:29 am »
Eneris,

Se entendí bem (não estou familiarizado com o firmware do DVP5965), para o menú de fontes já existe um menú de seleção, então não é preciso uma nova página. O mais fácil é aumentar o número de items do menú:

  8. No Pic. | Divx Subtitle | Divx Subtitle
     0008 FFFF 0505 0505 0059 0000 0001 0000 FF365A 0000 - ROM:3660
 => 1. Standard | Standard | [00]
       04BE 04BE 0561 00 - ROM:364C
    2. Cyrillic | Cyrillic | [00]
       0507 0507 0561 01 - ROM:3653


01 = número de items-1 (ou seja se quiser 6 items, 6-1=5 então 01 -> 05
365A = Pointer a pointer dos ítems de menú.

A primeira coisa e trocar o número de ítems (em vermelho). A segunda coisa e mudar o endereço dos pointers de ítems (em azul).

No exemplo, em ROM:365A temos os seguintes datos: FF 36 4C FF 36 53 (ou seja dois pointers, apontando a ROM:364C e ROM:3653).

Mude o pointer FF365A para, por exemplo, FFFA00. Em ROM:FA00 coloque todos os pointers para os items de menú. Asumindo que vamos manter as opções 1 y 2 e adicionar 4 opções novas: FF 36 4C FF 36 53 FF aa aa FF bb bb FF cc cc FF dd dd, onde aaaa, bbbb, cccc e dddd são os pointers para as novas definiçoes de idioma e valor de escolha da opção do menú.

  8. No Pic. | Divx Subtitle | Divx Subtitle
     0008 FFFF 0505 0505 0059 0000 0005 0000 FFFA00 0000 - ROM:3660
 => 1. Standard | Standard | [00]
       04BE 04BE 0561 00 - ROM:364C
    2. Cyrillic | Cyrillic | [00]
       0507 0507 0561 01 - ROM:3653
    3. Opcão 3 | Opcão 3 | [00]
       ???? ???? 0561 ? - ROM:aaaa
    4. Opcão 4 | Opcão 4 | [00]
       ???? ???? 0561 ? - ROM:bbbb
    5. Opcão 5 | Opcão 5 | [00]
       ???? ???? 0561 ? - ROM:cccc
    6. Opcão 6 | Opcão 6 | [00]
       ???? ???? 0561 ? - ROM:dddd


Espero que fique comprensivel... Jefferson tem razão, é mais fácil entender como funcionan os menús do que explicar.

Um abraço.
« Última modificação: Agosto 22, 2007, 02:16:18 am por jmaraujo »

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #202 Online: Agosto 22, 2007, 02:39:47 am »
Eneris,

Assim fica a mudança em um editor hexadecimal:

  8. No Pic. | Divx Subtitle | Divx Subtitle
     0008 FFFF 0505 0505 0059 0000 0001 0000 FF365A 0000 - ROM:3660


Em ROM:3660 está contida a linha a modificar:

Modificar pointer e número de opções de menú:
Antes:
00003660h: 00 08 FF FF 05 05 05 05 00 59 00 00 00 01 00 00
00003670h: FF 36 5A 00 00 02 60 00 9F 02 60 00 02 5C 00 9E


Depois:
00003660h: 00 08 FF FF 05 05 05 05 00 59 00 00 00 05 00 00
00003670h: FF FA 00 00 00 02 60 00 9F 02 60 00 02 5C 00 9E


Pointer a novas opções de menú:
0000fa00h: FF 36 4C FF 36 53 FF aa aa FF bb bb FF cc cc FF
0000fa10h: dd dd FF FF FF FF FF FF FF FF FF FF FF FF FF FF


É preciso adicionar também (em ROM:aaaa, ROM:bbbb... etc.) os bytes das definições de idioma e escolha de opção.

Os endereços no seu firmware são diferentes mas o procedimento é o mesmo.

Offline eneris

  • Novato Prolixo
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #203 Online: Agosto 22, 2007, 01:22:17 pm »
Ryan e Jmaraujo, obrigado pelas super dicas, vou tentar hoje a noite, qualquer coisa eu posto aqui.
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline eneris

  • Novato Prolixo
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Responder #204 Online: Agosto 23, 2007, 02:49:32 am »
Jmaraujo, quem são os bytes das definições de idioma e escolha de opção?

Este é o menu existente no 5965.

8. No Pic. | Divx Subtitle | Divx Subtitle
     0008 FFFF 0447 0447 0044 0000 0000 0000 FF3EA6 0000 - ROM:3EA9
 => 1. Standard | Standard | [00]
       0401 0401 051E 00 - ROM:3E91


Agradeço.

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #205 Online: Agosto 23, 2007, 04:14:06 am »
8. No Pic. | Divx Subtitle | Divx Subtitle
     0008 FFFF 0447 0447 0044 0000 0000 0000 FF3EA6 0000 - ROM:3EA9
 => 1. Standard | Standard | [00]
       0401 0401 051E 00 - ROM:3E91


Vermelho = Definição 1 (no seu caso: "Standard")
Azul = Definição 2 (no seu caso: "Standard")
Verde = Definição 3 (no seu cazo: vazío) - Os firmwares Philips geralmente não usam a def.3 na escolha de opções.
Laranja = Opção a escolher

Veja no MTK Remaker, na parte "Languages", que 0x0401=Standard.
Faça novas definições de idioma para as novas opções.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #206 Online: Agosto 28, 2007, 06:47:35 am »
Como localizar Dir_Disp_DirLine

(também chamada de DirDispDirLine e DDDL)

Para refrescar a memória, essa rotina é responsável pela exibição da linha que mostra o diretório (pasta) onde você está:



Procure por:
EF 70 ? D2 ? 12 ? ? 80

Esta string não encontra a rotina, mas uma chamada para ela. Apenas um ponto será encontrado, parecido com este:

B1:9468 EF          mov     A, R7
B1:9469 70 07       jnz     B1_9472
B1:9469
B1:946B D2 43       setb    RAM_28.3
B1:946D 12 68 89    lcall   DirDispDirline


Como você pode ver, a primeira lcall é para DDDL

Funciona com:

  • Philips DVP5960
  • Philips DVP5965
  • Philips DVP5980
  • Philips DVP5100
  • Philips DVP3040
  • Philips DVP5140
  • Punktal PK-DV246
  • Proview DVP-858
  • Lenoxx DV-406
  • JTEC MTK7000

Não funciona com
  • Philips PET 725

Para esse, use a string:
80 02 c2 ? 12 ? ? 90


DDDL é importante por algumas razões:

  • É nela que você faz o patch que corrige o número de caracteres exibidos na linha de diretório, como explicado por mim váaarios posts atrás;
  • Ela sempre tem tem duas chamadas a OSD_SetFont, uma chamada para OSD_TextColor e termina com uma chamada para ClearRect. De uma tacada só você descobre os endereços dessas rotinas e mais a janela usada pelo browser.

DDDL sempre inicia mais ou menos assim:

B1:6889             DirDispDirline:               ; CODE XREF: B1_93FD+70p
B1:6889                                           ; B1_93FD+77p
B1:6889 20 43 03    jb      RAM_28.3, B1_688F
B1:6889
B1:688C 02 69 B4    ljmp    Dir_DirLineClear


Dir_DirLineClear sempre é emendada ao final de DDDL, assim você sempre saberá onde a rotina termina

Este conhecimento está sendo incorporado ao MTK Patcher, para que este no futuro possa permitir a escolha da fonte usada na DirLine e corrigir seus bugs.
 
« Última modificação: Agosto 28, 2007, 06:59:44 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #207 Online: Agosto 28, 2007, 10:08:45 am »
O tamanho da flash do DVP3040

Eu pesquisei o assunto, mas a melhor informação que obtive (praticamente a única), foi este post de Lisa_tv.

Citar
First about flash size, U can read it in the firmware, 8032 part
block 0:

first 3 bytes is a jump to Startup1 label: (example from 6700 fw)

ROM:0000 start:
ROM:0000 02 22 7B ljmp Startup1

At this label:

ROM:227B Startup1:
ROM:227B mov DPTR, #0xF86C
ROM:227E movx A, @DPTR
ROM:227F anl A, #0xF0

This 0xF0 ends with 4 zeroes, so number of address bits for flash =
4 + 16 = 20 bits -> 1MB flash

In 6600 fw:

ROM:22B2 Startup1:
ROM:22B2 mov DPTR, #0xF86C
ROM:22B5 movx A, @DPTR
ROM:22B6 anl A, #0xE0

this is a 0xE0, has 5 zeroes at the end, flash address is 5 + 15 =
21 bits -> 2 MB flash

I think this is true for all mt1389 firmwares.


Mas isso só serviu para tornar a coisa ainda mais confusa, porque o ponto indicado no firmware do DVP3040 é este:

B0:2294             B0_Start_Handler:             ; CODE XREF: FLASH_Reset:B0_Startj
B0:2294 90 F8 6C    mov     DPTR, #BIM_IODOM
B0:2297 E0          movx    A, @DPTR
B0:2298 54 E0       anl     A, #0xE0
B0:229A F0          movx    @DPTR, A
B0:229B 90 F8 69    mov     DPTR, #BIM_IOENM
B0:229E E0          movx    A, @DPTR
B0:229F 44 1F       orl     A, #0x1F
B0:22A1 F0          movx    @DPTR, A
B0:22A2 90 F8 66    mov     DPTR, #BIM_PCTL1      ; Pin Control 1 Register
B0:22A5 E0          movx    A, @DPTR
B0:22A6 44 30       orl     A, #0x30
B0:22A8 F0          movx    @DPTR, A
B0:22A9 C2 90       clr     P1.0                  ; Port 1
B0:22AB C2 91       clr     P1.1                  ; Port 1
B0:22AD C2 92       clr     P1.2                  ; Port 1
B0:22AF 90 F8 66    mov     DPTR, #BIM_PCTL1      ; Pin Control 1 Register
B0:22B2 E0          movx    A, @DPTR
B0:22B3 54 F8       anl     A, #0xF8
B0:22B5 F0          movx    @DPTR, A
B0:22B6 74 24       mov     A, #0x24 ; '$'
B0:22B8 90 F8 25    mov     DPTR, #AUD_IECCFG     ; IEC958 Configuration
B0:22BB F0          movx    @DPTR, A
B0:22BC 78 7F       mov     R0, #0x7F ; ''
B0:22BE E4          clr     A
B0:22BF
B0:22BF             B0_22BF:                      ; CODE XREF: FLASH_Reset-CD40j
B0:22BF F6          mov     @R0, A
B0:22C0 D8 FD       djnz    R0, B0_22BF
B0:22C2 75 A0 F9    mov     P2, #0xF9 ; '¨'       ; Port 2
B0:22C5 75 81 AE    mov     SP, #WMKEY            ; Stack Pointer
B0:22C8 02 23 06    ljmp    B0_2306
B0:22C8             ; END OF FUNCTION CHUNK FOR FLASH_Reset


E0 = flash de 2MB


já no firmware do DVP5140...


B0:2294             B0_Start_Handler:                       ; CODE XREF: FLASH_Reset:B0_Startj
B0:2294 90 F8 6C              mov   DPTR, #BIM_IODOM
B0:2297 E0                    movx  A, @DPTR
B0:2298 54 F0                 anl   A, #0xF0
B0:229A F0                    movx  @DPTR, A
B0:229B 90 F8 69              mov   DPTR, #BIM_IOENM
B0:229E E0                    movx  A, @DPTR
B0:229F 44 0F                 orl   A, #0xF
B0:22A1 F0                    movx  @DPTR, A
B0:22A2 90 F8 66              mov   DPTR, #BIM_PCTL1        ; Pin Control 1 Register
B0:22A5 E0                    movx  A, @DPTR
B0:22A6 44 10                 orl   A, #0x10
B0:22A8 54 DF                 anl   A, #0xDF
B0:22AA F0                    movx  @DPTR, A
B0:22AB C2 90                 clr   T2                      ; T2
B0:22AD C2 91                 clr   P1.A17                  ; A17
B0:22AF C2 92                 clr   P1.A18                  ; A18
B0:22B1 90 F8 66              mov   DPTR, #BIM_PCTL1        ; Pin Control 1 Register
B0:22B4 E0                    movx  A, @DPTR
B0:22B5 54 F8                 anl   A, #0xF8
B0:22B7 F0                    movx  @DPTR, A
B0:22B8 74 24                 mov   A, #0x24 ; '$'
B0:22BA 90 F8 25              mov   DPTR, #AUD_IECCFG       ; IEC958 Configuration
B0:22BD F0                    movx  @DPTR, A
B0:22BE 78 7F                 mov   R0, #0x7F ; ''
B0:22C0 E4                    clr   A
B0:22C0
B0:22C1
B0:22C1             B0_22C1:                                ; CODE XREF: FLASH_Reset-CD3Ej
B0:22C1 F6                    mov   @R0, A
B0:22C2 D8 FD                 djnz  R0, B0_22C1
B0:22C2
B0:22C4 75 A0 F9              mov   P2, #0xF9 ; '¨'         ; Port 2
B0:22C7 75 81 AE              mov   SP, #WMKEY              ; Stack Pointer
B0:22CA 02 23 08              ljmp  B0_2308
B0:22CA
B0:22CA             ; END OF FUNCTION CHUNK FOR FLASH_Reset


F0 =  Flash de 1MB

E é bom lembrar que mtkRemaker diz que ambos são de aparelhos com 1MB. Logo o mtkRemaker olha em outro lugar.
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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #208 Online: Agosto 28, 2007, 11:00:21 am »
Mais testes de flash no DVP3040K

Usando dois firmwares oficiais e dois propositalmente modificados (bloco MPEG) para ficarem com 1,5MB

Sempre instalando por CD (não usei o cabo)

Começando com firmware DVP5140 de 1,5MB instalado

Não lê mídia DVD

Instalei firmware DVP5140 oficial

Lê mídia DVD

Instalei firmware DVP3040K oficial

Continua lendo mídia DVD

Instalei firmware DVP3040K com 1,5MB

Continua lendo mídia DVD

Reinstalei firmware DVP5140 com 1,5MB

Não lê mais DVD

Com um editor hexa, modifiquei o byte (post anterior) que define o tamanho da flash para "E0" e instalei de novo.

Continua sem ler DVD


Conclusão até agora: Dá para ter DivX Ultra no DVP3040K, mas em um firmware pouco melhor que o oficial (respeitando o limite de 1MB do DVP5140), ou ter um firmware de DVP3040K bem incrementado :)


Note que eu estou usando a leitura de mídia DVD como teste porque foi o único efeito colateral que se manifestou até agora, mas podem existir outros problemas.


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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #209 Online: Agosto 28, 2007, 01:19:48 pm »
Problemas com o IDA

Eu não sei quanto ao resto de vocês, mas depois que eu instalei o IDA, meu Windows ficou ainda mais esquisito que o habitual.

Antes do IDA eu já tinha um problema sem solução: As hints/tooltips só aparecem quando querem. Mas surgiram outros.

Com o IDA aberto, dependendo da combinação de outros programas abertos, todo tipo de coisa esquisita acontece.

  • Às vezes o Delphi dá uma grande variedade de erros sem sentido e entra em colapso;
  • às vezes "Pesquisar" do Windows abre mas não exibe as opções;
  • Às vezes as caixas de diálogo (abrir, salvar, etc) dos programas (qualquer um, aleatoriamente) não querem abrir;
  • Etc, etc, etc.

A solução é sempre fechar alguns programas. Até parece o que acontece com o Windows 9X, quando os recursos do sistema são drenados e você tem que fechar algumas coisas para recuperá-los. Nunca soube de algo desse tipo ocorrendo com o Windows XP/2000, mas acontece na minha máquina por causa do IDA.

Eu tenho 1GB de RAM nesta máquina.

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 fabianr

  • Novato
  • *
  • Mensagens: 9
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware: log de descobertas
« Responder #210 Online: Agosto 29, 2007, 01:12:23 am »
O tamanho da flash do DVP3040

Eu pesquisei o assunto, mas a melhor informação que obtive (praticamente a única), foi este post de Lisa_tv.


Hola  Jefferson... mirando el fw del 3040k encontre el codigo tambien en los otros bancos:

B1:2294
B2:2294
B3:2294
B4:2294
                   
No lo mire en el 5140 pero debe ser igual.... Cuando modficaste el byte F0 en el 5140 de 1.5MB lo hiciste
en todos los bancos?

Saludos,
FabianR
« Última modificação: Agosto 29, 2007, 06:09:11 am por Jefferson »

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #211 Online: Agosto 29, 2007, 06:16:17 am »
Hola  Jefferson... mirando el fw del 3040k encontre el codigo tambien en los otros bancos:

B1:2294
B2:2294
B3:2294
B4:2294
                   
No lo mire en el 5140 pero debe ser igual.... Cuando modficaste el byte F0 en el 5140 de 1.5MB lo hiciste
en todos los bancos?

Saludos,
FabianR

Não tinha. Nem sequer vi isso.

Eu fiz o teste agora 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #212 Online: Agosto 30, 2007, 01:28:04 pm »
Firmwares Philips: Controle das Setas

Um mês atrás eu identifiquei as rotinas que exibem as setas do browser e expliquei aqui como movê-las. Mas ficaram faltando  respostas para alguns problemas, que espero ter solucionado agora.

Neste post eu vou introduzir três novas rotinas, temporariamente batizadas por mim por não conhecer nenhum trabalho anterior a respeito no grupo MT13x9:

  • ShowIcon - Espera coordenadas X e Y, janela e ícone a ser exibido;
  • ClearRect2 - Muito parecida com ClearRect, mas recebe os parâmetros de forma diferente. Enquanto ClearRect espera pelas coordenadas do ponto superior esquerdo do retângulo mais sua largura e altura, ClearRect2 recebe as coordenadas do ponto superior esquerdo e do ponto inferior direito. São duas formas de se fazer a mesma coisa. Deve haver alguma diferença para o firmware optar por usar uma ou outra, mas não captei ainda (exceto a troca dos registradores por endereços XRAM).
  • Arrows_Control - A rotina que explico adiante.

Arrows_Control

Esta rotina é responsável pela exibição das setas e é dividida em quatro sub-rotinas:

  • Arrows_ShowBoth - Exibe as duas setas;
  • Arrows_ShowUp - Exibe apenas a seta superior
  • Arrows_ShowDown - Exibe apenas a seta inferior
  • Arrows_Clear - Apaga as duas setas;

Arrows_Clear é a principal novidade deste post em relação ao meu post anterior sobre o assunto. Este procedimento desenha um retângulo acima e um retângulo abaixo da lista de arquivos, com o propósito de apagar as setas. O rpoblema é que quando mudamos as coordenadas das setas precisamos mudar as coordenadas desses retângulos também, senão as setas nunca vão ser apagadas quando você chegar no topo ou no fundo da lista de arquivos. 

A montagem abaixo mostra meu software MTK Patcher exibindo os dois retângulos criados por Arrows_Clear:



Para encontrar Arrows_Control na maioria dos firmwares Philips (exceto PET725), procure por
02 ? ? 14 70 03 02 ? ? 14 60 03 02.
O método que ensinei no post anterior, que requeria saber os números dos ícones com as setas, não é mais necessário.
 
Eu comentei o código abaixo (DVP5960/37) de forma a ser auto-explicativo:

B1:9E44             ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B1:9E44
B1:9E44
B1:9E44             Arrows_Control:               ; CODE XREF: B1_89A3+5Dp
B1:9E44                                           ; B1_89A3+117p
B1:9E44 EF          mov     A, R7                 ; Esta rotina recebe um valor de 1 a 4 em R7, que determina o que será feito
B1:9E45 54 03       anl     A, #3
B1:9E47 FF          mov     R7, A
B1:9E48 60 44       jz      Arrows_Clear          ; Se R7 tinha #4
B1:9E4A 14          dec     A
B1:9E4B 70 03       jnz     B1_9E50
B1:9E4D 02 9E E1    ljmp    Arrows_ShowUP         ; Se R7 tinha #1
B1:9E50             ; ---------------------------------------------------------------------------
B1:9E50
B1:9E50             B1_9E50:                      ; CODE XREF: Arrows_Control+7j
B1:9E50 14          dec     A
B1:9E51 70 03       jnz     B1_9E56
B1:9E53 02 9E FA    ljmp    Arrows_ShowDown       ; Se R7 tinha #2
B1:9E56             ; ---------------------------------------------------------------------------
B1:9E56
B1:9E56             B1_9E56:                      ; CODE XREF: Arrows_Control+Dj
B1:9E56 14          dec     A
B1:9E57 60 03       jz      Arrows_ShowBoth       ; Se R7 tinha #3
B1:9E59 02 9F 13    ljmp    FunctionRET
B1:9E5C             ; ---------------------------------------------------------------------------
B1:9E5C
B1:9E5C             Arrows_ShowBoth:              ; CODE XREF: Arrows_Control+13j
B1:9E5C 90 FC 76    mov     DPTR, #XRAM_FC76      ; CoordX1.hiByte
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      ; CoordY1.HiByte
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   ShowIconB1BS
B1:9E75 90 FC 76    mov     DPTR, #XRAM_FC76      ; CoordX1.hiByte
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      ; CoordY1.HiByte
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    ShowIconB1BS
B1:9E8E             ; ---------------------------------------------------------------------------
B1:9E8E
B1:9E8E             Arrows_Clear:                 ; CODE XREF: Arrows_Control+4j
B1:9E8E 90 FC 76    mov     DPTR, #XRAM_FC76      ; CoordX1.hiByte
B1:9E91 E4          clr     A
B1:9E92 F0          movx    @DPTR, A
B1:9E93 A3          inc     DPTR
B1:9E94 74 1E       mov     A, #0x1E
B1:9E96 F0          movx    @DPTR, A
B1:9E97 90 FC 79    mov     DPTR, #XRAM_FC79      ; CoordY1.HiByte
B1:9E9A E4          clr     A
B1:9E9B F0          movx    @DPTR, A
B1:9E9C A3          inc     DPTR
B1:9E9D 74 3E       mov     A, #0x3E ; '>'
B1:9E9F F0          movx    @DPTR, A              ; Canto Superior Esquerdo= 30,62
B1:9EA0 90 FC 7C    mov     DPTR, #XRAM_FC7C      ; CoordX2.HiByte
B1:9EA3 74 01       mov     A, #1
B1:9EA5 F0          movx    @DPTR, A
B1:9EA6 A3          inc     DPTR
B1:9EA7 74 4A       mov     A, #0x4A ; 'J'
B1:9EA9 F0          movx    @DPTR, A
B1:9EAA 90 FC 80    mov     DPTR, #XRAM_FC80      ; CoordY2.HiByte
B1:9EAD E4          clr     A
B1:9EAE F0          movx    @DPTR, A
B1:9EAF A3          inc     DPTR
B1:9EB0 74 5C       mov     A, #0x5C ; '\'
B1:9EB2 F0          movx    @DPTR, A              ; Canto Inferior Direito: 330x92
B1:9EB3 D2 75       setb    RAM_2E.5
B1:9EB5 E4          clr     A
B1:9EB6 90 FB FD    mov     DPTR, #XRAM_FBFD
B1:9EB9 F0          movx    @DPTR, A
B1:9EBA FB          mov     R3, A
B1:9EBB FD          mov     R5, A
B1:9EBC 7F 0F       mov     R7, #0xF
B1:9EBE 12 1D 52    lcall   ClearRect2_B1BS       ; Apaga a seta superior, desenhando um retângulo em sua posição
B1:9EC1 90 FC 79    mov     DPTR, #XRAM_FC79      ; CoordY1.HiByte
B1:9EC4 E4          clr     A
B1:9EC5 F0          movx    @DPTR, A
B1:9EC6 A3          inc     DPTR
B1:9EC7 74 DE       mov     A, #0xDE ; 'Ì'
B1:9EC9 F0          movx    @DPTR, A              ; Canto Superior Esquerdo agora é = 30,222
B1:9ECA 90 FC 80    mov     DPTR, #XRAM_FC80      ; CoordY2.HiByte
B1:9ECD E4          clr     A
B1:9ECE F0          movx    @DPTR, A
B1:9ECF A3          inc     DPTR
B1:9ED0 74 FC       mov     A, #0xFC ; '³'
B1:9ED2 F0          movx    @DPTR, A              ; Canto Inferior Direito agora é: 330x252
B1:9ED3 D2 75       setb    RAM_2E.5
B1:9ED5 E4          clr     A
B1:9ED6 90 FB FD    mov     DPTR, #XRAM_FBFD
B1:9ED9 F0          movx    @DPTR, A
B1:9EDA FB          mov     R3, A
B1:9EDB FD          mov     R5, A
B1:9EDC 7F 0F       mov     R7, #0xF
B1:9EDE 02 1D 52    ljmp    ClearRect2_B1BS       ; Apaga a seta inferior
B1:9EE1             ; ---------------------------------------------------------------------------
B1:9EE1
B1:9EE1             Arrows_ShowUP:                ; CODE XREF: Arrows_Control+9j
B1:9EE1 90 FC 76    mov     DPTR, #XRAM_FC76      ; CoordX1.hiByte
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      ; CoordY1.HiByte
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    ShowIconB1BS
B1:9EFA             ; ---------------------------------------------------------------------------
B1:9EFA
B1:9EFA             Arrows_ShowDown:              ; CODE XREF: Arrows_Control+Fj
B1:9EFA 90 FC 76    mov     DPTR, #XRAM_FC76      ; CoordX1.hiByte
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      ; CoordY1.HiByte
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   ShowIconB1BS
B1:9F13
B1:9F13             FunctionRET:                  ; CODE XREF: Arrows_Control+15j
B1:9F13 22          ret
B1:9F13             ; End of function Arrows_Control



Eu descobri o funcionamento da rotina enquanto implementava a movimentação das setas no MTK Patcher. Eu já fiz isso, mas resta um problema: Por causa da forma como as rotinas são chamadas não é possível colocar as setas em qualquer lugar da tela por enquanto (talvez em um versão futura). 

Problema 1:  X1, da forma como está escrita a rotina, não pode ser maior que 255, embora X2 possa. Então se eu quiser colocar os ícones no canto direito da tela, tenho que desenhar um retângulo começando na coordenada 255 até eles. Se X1 pudesse ser maior que 255 eu poderia desenha um retângulo da largura exata do ícone.

Problema 2: Nem Y1 nem Y2 podem ser maiores que 255. Assim os ícones precisam ficar mais ou menos nos três quartos superiores da tela.

Os dois problemas podem ser resolvidos através de patches. O Problema 1 é bem simples, mas o Problema 2 requer acréscimo de código.

Como se livrar das setas

Isso é o mais simples. No início de Arrows_Control, substitua a instrução mov por uma ret, assim:

B1:9E44             ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B1:9E44
B1:9E44
B1:9E44             Arrows_Control:               ; CODE XREF: B1_89A3+5Dp
B1:9E44                                           ; B1_89A3+117p
B1:9E44 22          ret
B1:9E45 54 03       anl     A, #3
B1:9E47 FF          mov     R7, A
B1:9E48 60 44       jz      Arrows_Clear          ; Se R7 tinha #4
B1:9E4A 14          dec     A
B1:9E4B 70 03       jnz     B1_9E50
B1:9E4D 02 9E E1    ljmp    Arrows_ShowUP         ; Se R7 tinha #1


E nada do código será executado. Mas aí é recomendável que você ative a exibição da scrollbar no firmware, como eu já expliquei.

Isso tudo já foi implementado na próxima versão 0.12 do MTK Patcher.
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #213 Online: Agosto 30, 2007, 03:06:15 pm »
Felizmente eu consegui me livrar de dos problemas que estava tendo com o filebrowser...

http://ryan.com.br/smf/index.php?topic=179.msg9172233#msg9172233

Citação de: jmaraujo
1) Quando o primer "lugar" do filebrowser é um diretório, a primeira linha não é visualizada (é visualizada mas logo apagada). O problema não acontece quando o primer lugar for um arquivo.
O primeiro problema era essa rotina de limpeza maldita que custou achar... Eu buscava rotinas que chamassem PS_ClearRect!!!

Não sei se é a mesma que voçê achou porque não comparei. Eu so achei ela porque contei com a ajuda visual invaluable do MTK Patcher!  ;D Sem ele não tería achado nunca...  :P

No momento que inseri as coordenadas já sabía que o problema estava aí. O que eu fiz foi zerar as coordenadas:

ROM:988F             ROM_988F:                               ; CODE XREF: ROM_9845+4j
ROM:988F 90 FB EC              mov   DPTR, #0xFBEC           ; x1 High
ROM:9892 E4                    clr   A
ROM:9893 F0                    movx  @DPTR, A
ROM:9894 A3                    inc   DPTR
ROM:9895 74 00                 mov   A, #0                   ; x1 = 0x001E
ROM:9897 F0                    movx  @DPTR, A
ROM:9898 90 FB EF              mov   DPTR, #0xFBEF           ; y1 High
ROM:989B E4                    clr   A
ROM:989C F0                    movx  @DPTR, A
ROM:989D A3                    inc   DPTR
ROM:989E 74 00                 mov   A, #0                   ; y1 = 0x003E
ROM:98A0 F0                    movx  @DPTR, A
ROM:98A1 90 FB F3              mov   DPTR, #0xFBF3           ; x2 High
ROM:98A4 74 00                 mov   A, #0
ROM:98A6 F0                    movx  @DPTR, A
ROM:98A7 A3                    inc   DPTR
ROM:98A8 74 00                 mov   A, #0                   ; x2 = 0x014A
ROM:98AA F0                    movx  @DPTR, A
ROM:98AB 90 FB F7              mov   DPTR, #0xFBF7           ; y2 High
ROM:98AE E4                    clr   A
ROM:98AF F0                    movx  @DPTR, A
ROM:98B0 A3                    inc   DPTR
ROM:98B1 74 00                 mov   A, #0                   ; y2 = 0x005C
ROM:98B3 F0                    movx  @DPTR, A
ROM:98B4 D2 75                 setb  RAM_2E.5
ROM:98B6 E4                    clr   A
ROM:98B7 90 FB A4              mov   DPTR, #0xFBA4
ROM:98BA F0                    movx  @DPTR, A
ROM:98BB FB                    mov   R3, A
ROM:98BC FD                    mov   R5, A
ROM:98BD 7F 0E                 mov   R7, #0xE
ROM:98BF 12 08 41              lcall PS_Rectangle
ROM:98BF
ROM:98C2 90 FB EF              mov   DPTR, #0xFBEF           ; y1 High
ROM:98C5 E4                    clr   A
ROM:98C6 F0                    movx  @DPTR, A
ROM:98C7 A3                    inc   DPTR
ROM:98C8 74 00                 mov   A, #0                   ; y1 = 0x00DE
ROM:98CA F0                    movx  @DPTR, A
ROM:98CB 90 FB F7              mov   DPTR, #0xFBF7           ; y2 High
ROM:98CE E4                    clr   A
ROM:98CF F0                    movx  @DPTR, A
ROM:98D0 A3                    inc   DPTR
ROM:98D1 74 00                 mov   A, #0                   ; y2 = 0x00FC
ROM:98D3 F0                    movx  @DPTR, A
ROM:98D4 D2 75                 setb  RAM_2E.5
ROM:98D6 E4                    clr   A
ROM:98D7 90 FB A4              mov   DPTR, #0xFBA4
ROM:98DA F0                    movx  @DPTR, A
ROM:98DB FB                    mov   R3, A
ROM:98DC FD                    mov   R5, A
ROM:98DD 7F 0E                 mov   R7, #0xE
ROM:98DF 02 08 41              ljmp  PS_Rectangle


Porém no meu caso não tive nenhum problema em por as setas na parte direita da tela. Mais tarde vou postar uma fotografía.

Citação de: jmaraujo
2) O primeiro arquivo fica seleccionado em cor laranja, mas o segundo arquivo também fica laranja (como se estivese seleccionado). Esse comportamente somente ocorre quando o primer arquivo for seleccionado. Ao seleccionar o segundo, tercer e quarto arquivos o comportamento do filebrowser é normal (somente o arquivo seleccionado fica laranja, os restantes ficam com a cor normal).

O segundo problema era um erro nas coordenadas do primeiro arquivo do filelist. Como as coordenadas também controlam o "selection bar", a barra era mais grande do que devería.

So está faltando um pequeno detalhe: O browser se comporta normalmente, exceto quando estou navegando de baixo para cima (de uma página inferior para uma superior), quando o filelist atua como se fosse de quatro arquivos.

Offline Jefferson

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

Não sei se é a mesma que voçê achou porque não comparei.

É a mesma coisa, mas no caso do DVP5100 existe uma estranha diferença.

No DVP5960, a rotina que batizei de "ClearRect2" (e você chama de "PS_Rectangle") parece ser completamente independente. Já no DVP5100, pelo menos na análise que fiz aqui, é a mesma rotina OSD_textColor!

O DVP5960 usa inclusive endereços XRAM distintos para as duas rotinas.

Isso me fez entender a razão de existirem duas rotinas. A rotina que chamei (erradamente) de "ClearRect2", na verdade não serve apenas para limpar um retângulo. Colocado as cores corretas nos respectivos endereços XRAM deve ser possível desenhar um retângulo de uma determinada cor. Eu vou renomear minha rotina para algo mais apropriado.

A propósito, você sabe o que raios significa esse prefixo "PS_" em "PS_Rectangle"? Eu vejo isso com frequencia sendo usado pelo MT13x9 mas não entendi ainda.

Eu so achei ela porque contei com a ajuda visual invaluable do MTK Patcher!  ;D Sem ele não tería achado nunca...  :P

Obrigado. É bom saber que ajuda mais alguém :)

Para quem faz um patch casual aquilo parece inútil. Mas para quem analisa o assembly, facilita muuuito mesmo. Foi dessa necessidade que nasceu o MTK Patcher :)


Porém no meu caso não tive nenhum problema em por as setas na parte direita da tela. Mais tarde vou postar uma fotografía.

Isso é muito estranho. Você anulou o retângulo e por isso as setas não teriam como ser apagadas. Outro dia eu vou analisar o firmware do DVP5100.

O segundo problema era um erro nas coordenadas do primeiro arquivo do filelist. Como as coordenadas também controlam o "selection bar", a barra era mais grande do que devería.

Verifique se a nova versão do MTK Patcher ajuda a fazer isso sem erros no DVP5100. Mas eu não implementei nenhuma redução na distância entre as linhas, nem na altura delas.

So está faltando um pequeno detalhe: O browser se comporta normalmente, exceto quando estou navegando de baixo para cima (de uma página inferior para uma superior), quando o filelist atua como se fosse de quatro arquivos.

Ahhhh... você está falando da sua nova versão com 6 arquivos..
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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #215 Online: Agosto 30, 2007, 04:13:16 pm »
Consultando o documento "PScalls.doc" de Lisatv, constatei que a rotina que eu havia nomeado "ClearRect2" é mesmo a "PS_Rectangle", como jmaraujo havia nomeado. Mais tarde eu farei as devidas correções no post.

Eu cheguei a "PSCalls.doc" fazendo uma busca de texto por "PS_Rectangle" em todo o meu diretório de documentos. Essa é uma rotina da qual se fala pouquissimo (só achei quatro posts no MT13x9).

http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #216 Online: Agosto 30, 2007, 04:41:21 pm »
Isso é muito estranho. Você anulou o retângulo e por isso as setas não teriam como ser apagadas. Outro dia eu vou analisar o firmware do DVP5100.
É, a rotina parece ser básicamente a mesma. No meu caso as setas sao limpas pela propia rotina de limpeza dos arquivos. Cada vez que voçê troca de página a rotina limpa a lista de arquivos, ¿certo?, e no meu caso a área é suficientemente larga para incluir as setas. Se for preciso, novas setas são desenhadas. Ao trocar de página o procedimento se repete. (So achei um "bug"... ao voltar do menú apareceu uma seta que não devia)

Estou postando as fotos que prometí. Não são de boa qualidade porque não sei tirar fotos da tv (acho que apagar todas as luzes não ajuda muito).

No DVP5960, a rotina que batizei de "ClearRect2" (e você chama de "PS_Rectangle") parece ser completamente independente. Já no DVP5100, pelo menos na análise que fiz aqui, é a mesma rotina OSD_textColor!
É possivel. Nos meus analises não achei nenhuma rotina chamada OSD_TextColor, achei OSD_SetColor (B3:D473), não é a mesma coisa, ¿certo? (Tenho PS_Rectangle em B3:C794 e PS_Rectangle2 em B3:E420)

Algums dos nomes eu tirei do documento PS_Calls.doc que estou anexando...

A propósito, você sabe o que raios significa esse prefixo "PS_" em "PS_Rectangle"? Eu vejo isso com frequencia sendo usado pelo MT13x9 mas não entendi ainda.
Eu sabía o significado exato de PS, mas agora não estou lembrando...

Update: Lembrei! PS = Packet Switching... Enquanto postava a mensagem vi que você achou o documento que anexei...
« Última modificação: Agosto 30, 2007, 04:42:55 pm por jmaraujo »

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #217 Online: Agosto 30, 2007, 04:47:46 pm »
Achei um firmware original e modificado (para comparação) com a posição dos MP3 tags separados (movidos separadamente).

Ainda não verifiquei mas se funcionar, amanhã eu posto aquí como foi feito em esse firmware... Todo o procedimento é feito na rotina MP3_TagsDisplay que Jefferson identificou (ver páginas anteriores).

No final da rotina a um jump para novo código no final do banco, mas acho que a parte nova é somente para adicionar as etiquetas "Album", "Song", "Artist" etc. antes dos tags mp3.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #218 Online: Agosto 30, 2007, 05:05:29 pm »
É, a rotina parece ser básicamente a mesma. No meu caso as setas sao limpas pela propia rotina de limpeza dos arquivos. Cada vez que voçê troca de página a rotina limpa a lista de arquivos, ¿certo?,  e no meu caso a área é suficientemente larga para incluir as setas.

Na verdade, pelo menos na maioria dos firmwares, Dir_DispFileList chama ClearRect desenhando um retângulo em cima de cada nome de arquivo, em um loop. É possível que no caso do DVP5100 o loop comece uma linha antes e termine uma linha depois. Isso resolveria o problema.

Isso está explicado no documento "Info - File Browser.rtf", do MaBreaker:

ROM:B663 7B 1E                 mov   R3, #0x1E
ROM:B665 7A 00                 mov   R2, #0x00       ; R2R3 = Height = 0x001E = 30
ROM:B667 7D 1C                 mov   R5, #0x1C
ROM:B669 7C 01                 mov   R4, #0x01       ; R4R5 = Width  = 0x011C = 284
ROM:B669                                             ; 310 - 26
ROM:B66B 7F 0E                 mov   R7, #0x0E       ; Cleared area is
ROM:B66B                                             ; from 1A to (1A+11C=136)
ROM:B66D 12 05 71              lcall OSD_Clear_DirLine
ROM:B670 90 FB 52              mov   DPTR, #XRAM_FB52
ROM:B673 E0                    movx  A, @DPTR
ROM:B674 04                    inc   A
ROM:B675 F0                    movx  @DPTR, A
ROM:B676 E0                    movx  A, @DPTR
ROM:B677 C3                    clr   C
ROM:B678 94 06                 subb  A, #6
ROM:B67A 40 AB                 jc    Loop_clear_6_lines
ROM:B67C 22                    ret


Nota: Mabreaker chama a rotina de OSD_ClearLine ou OSD_ClearDirLine (ele faz uma confusão com os dois nomes no mesmo texto). Para completar, no documento "Info - File Browser (HowTo).rtf" ele chama a mesma rotina de OSD_Clear_Filename. Imagine a confusão que isso cria na cabeça de quem está aprendendo. Não é que MaBreaker não saiba o que está fazendo (ele sabe), mas seus documentos são muito antigos e desatualizados e se perde muito tempo com as inconsistências.

No DVP5960 é ClearRect que faz o serviço:

B1:E138 93          movc    A, @A+DPTR
B1:E139 90 FC 79    mov     DPTR, #XRAM_FC79      ; CoordY1.HiByte
B1:E13C CF          xch     A, R7                 ; A coordenada não é fixa, porque esta rotina é chamada
B1:E13C                                           ; uma vez para cada linha do browser
B1:E13D F0          movx    @DPTR, A
B1:E13E A3          inc     DPTR
B1:E13F EF          mov     A, R7
B1:E140 F0          movx    @DPTR, A
B1:E141 7B 1E       mov     R3, #0x1E             ; É aqui que o retângulo de cada linha da lista de arquivos é apagado
B1:E143 7A 00       mov     R2, #0
B1:E145 7D 2C       mov     R5, #0x2C ; ','       ; R5 e R4 precisam ser mudados se aumentarmos o número de caracteres
B1:E147 7C 01       mov     R4, #1
B1:E149 7F 0F       mov     R7, #0xF              ; Janela 0xF
B1:E14B 12 1E 54    lcall   ClearRectB1BS
B1:E14E 90 FB AF    mov     DPTR, #XRAM_FBAF
B1:E151 E0          movx    A, @DPTR
B1:E152 04          inc     A
B1:E153 F0          movx    @DPTR, A
B1:E154 E0          movx    A, @DPTR
B1:E155 C3          clr     C
B1:E156 94 04       subb    A, #4                 ; São 4 linhas no DVP5960
B1:E158 40 AB       jc      B1_E105
B1:E15A 22          ret


No DVP5100 parece ser a mesma coisa, com quatro passagens pelo loop (seria preciso haver duas a mais). Daí não sei ainda como suas setas são apagadas.

B1:D9CA 7B 1E       mov     R3, #0x1E
B1:D9CC 7A 00       mov     R2, #0
B1:D9CE 7D 2C       mov     R5, #0x2C ; ','
B1:D9D0 7C 01       mov     R4, #1
B1:D9D2 7F 0E       mov     R7, #0xE
B1:D9D4 12 08 11    lcall   ClearRectB1BS
B1:D9D7 90 FB 6C    mov     DPTR, #XRAM_FB6C
B1:D9DA E0          movx    A, @DPTR
B1:D9DB 04          inc     A
B1:D9DC F0          movx    @DPTR, A
B1:D9DD E0          movx    A, @DPTR
B1:D9DE C3          clr     C
B1:D9DF 94 04       subb    A, #4                 ; Número de arquivos
B1:D9E1 40 AB       jc      B1_D98E
B1:D9E3 22          ret



Update: Lembrei! PS = Packet Switching...

Obrigado!

Mas não faz o menor sentido para mim. Acho que vou usar os nomes sem esse prefixo, quando não criar nenhuma ambiguidade.
« Última modificação: Agosto 30, 2007, 06:17:54 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #219 Online: Agosto 30, 2007, 05:18:22 pm »
É possivel. Nos meus analises não achei nenhuma rotina chamada OSD_TextColor, achei OSD_SetColor (B3:D473), não é a mesma coisa, ¿certo? (Tenho PS_Rectangle em B3:C794 e PS_Rectangle2 em B3:E420)

Não conheço "OSD_SetColor". Fiz uma busca de texto nos meus documentos e não achei nenhuma referência. Também não retorna nenhum resultado na pesquisa do grupo MT13x9.

Eu acho que o que você chama de "OSD_SetColor" é a rotina "OSD_TextColor". Veja que esse último apareçe no documento "Info - File Browser.doc".

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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #220 Online: Agosto 30, 2007, 05:41:55 pm »
Eu verifiquei todos os firmwares Philips que fazem parte da minha bateria de testes e o resultado foi este:

Rotina PS_Rectangle e OSD_textColor são uma só:

DVP5100
DVP3040

Rotinas distintas:

DVP5140
DVP5960
DVP5965
DVP5980


Não tenho como verificar o PET725 agora porque a única pista de PS_Rectangle que eu tenho é a rotina Arrows_Control, que aparentemente nem existe no PET725.
« Última modificação: Agosto 30, 2007, 05:44:17 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #221 Online: Agosto 30, 2007, 07:07:41 pm »
Eu acho que o que você chama de "OSD_SetColor" é a rotina "OSD_TextColor". Veja que esse último apareçe no documento "Info - File Browser.doc".
Já me deparei varias vezes com acabar encontrando uma rotina com nome distinto dado pelos modders.

Eu não sabía que nome usar é acabei usando a primeira referencia que achei: "OSD_SetColor" na verdade e chamado PS_SetColor (é a PS_B_0x09) no documento PS_Calls do LisaTV.

Aquí é mencionado um par de vezes...
http://tech.groups.yahoo.com/group/mt13x9/msearch?query=setcolor&submit=Search&charset=windows-1252
« Última modificação: Agosto 30, 2007, 07:10:29 pm por jmaraujo »

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #222 Online: Agosto 30, 2007, 11:37:09 pm »

So está faltando um pequeno detalhe: O browser se comporta normalmente, exceto quando estou navegando de baixo para cima (de uma página inferior para uma superior), quando o filelist atua como se fosse de quatro arquivos.

Eu implementei 6 linhas no firmware do DVP5960 e estou com o mesmo problema. :blink:
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #223 Online: Agosto 31, 2007, 08:45:48 am »
É, a rotina parece ser básicamente a mesma. No meu caso as setas sao limpas pela propia rotina de limpeza dos arquivos. Cada vez que voçê troca de página a rotina limpa a lista de arquivos, ¿certo?,  e no meu caso a área é suficientemente larga para incluir as setas.

No DVP5100 parece ser a mesma coisa, com quatro passagens pelo loop (seria preciso haver duas a mais). Daí não sei ainda como suas setas são apagadas.

B1:D9CA 7B 1E       mov     R3, #0x1E
B1:D9CC 7A 00       mov     R2, #0
B1:D9CE 7D 2C       mov     R5, #0x2C ; ','
B1:D9D0 7C 01       mov     R4, #1
B1:D9D2 7F 0E       mov     R7, #0xE
B1:D9D4 12 08 11    lcall   ClearRectB1BS
B1:D9D7 90 FB 6C    mov     DPTR, #XRAM_FB6C
B1:D9DA E0          movx    A, @DPTR
B1:D9DB 04          inc     A
B1:D9DC F0          movx    @DPTR, A
B1:D9DD E0          movx    A, @DPTR
B1:D9DE C3          clr     C
B1:D9DF 94 04       subb    A, #4                 ; Número de arquivos
B1:D9E1 40 AB       jc      B1_D98E
B1:D9E3 22          ret

Exato, mas no meu caso as setas estam na mesma altura que os arquivos 1 e 6 da filelist... Estou anexando imagem (Nota: As setas e a segunda -sexta, na verdade- área de limpeza foram adicionadas com Photoshop).

Também é preciso mudar o "subb A, #4" (94 04) por "subb A, #6" (94 06).

ROM:D9CA             Área de limpieza del filebrowser
ROM:D9CA 7B 1E                 mov   R3, #0x1E
ROM:D9CC 7A 00                 mov   R2, #0
ROM:D9CE 7D 36                 mov   R5, #0x36 ; '6'
ROM:D9D0 7C 02                 mov   R4, #2
ROM:D9D2 7F 0E                 mov   R7, #0xE
ROM:D9D4 12 08 11              lcall PS_ClearRect            ; Limpia lista de archivos
ROM:D9D4
ROM:D9D7 90 FB 6C              mov   DPTR, #0xFB6C
ROM:D9DA E0                    movx  A, @DPTR
ROM:D9DB 04                    inc   A
ROM:D9DC F0                    movx  @DPTR, A
ROM:D9DD E0                    movx  A, @DPTR
ROM:D9DE C3                    clr   C
ROM:D9DF 94 06                 subb  A, #6
ROM:D9E1 40 AB                 jc    Loop_clear_6_lines
ROM:D9E1
ROM:D9E3 22                    ret

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #224 Online: Agosto 31, 2007, 04:45:53 pm »

So está faltando um pequeno detalhe: O browser se comporta normalmente, exceto quando estou navegando de baixo para cima (de uma página inferior para uma superior), quando o filelist atua como se fosse de quatro arquivos.

Eu implementei 6 linhas no firmware do DVP5960 e estou com o mesmo problema. :blink:

Eu coloquei 8 linhas no Proview DVP-858 e além do problema que se manifesta no Philips, ganhei mais um: Ao selecionar o sétimo ou o oitavo arquivos da lista o browser pára de funcionar.

O player continua funcionando. Posso entrar no setup. Mas o browser não responde mais a não ser que eu desligue o aparelho.

As oito linhas:



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

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #225 Online: Agosto 31, 2007, 06:55:36 pm »
O problema não é exclusivo do Proview. Coloquei 8 linhas no DVP5960 e este também congela o browser se eu escolher o sétimo ou o oitavo arquivo da lista.

O DVP5960 com oito linhas (usando background do firmware eneris para DVP5965):



Estou sem pistas de onde olhar para corrigir o 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 Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #226 Online: Agosto 31, 2007, 06:58:44 pm »

Exato, mas no meu caso as setas estam na mesma altura que os arquivos 1 e 6 da filelist... Estou anexando imagem (Nota: As setas e a segunda -sexta, na verdade- área de limpeza foram adicionadas com Photoshop).

Ahhhh... Certo. Isso explica como as setas são apagadas  :)
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #227 Online: Agosto 31, 2007, 09:51:10 pm »
O problema não é exclusivo do Proview. Coloquei 8 linhas no DVP5960 e este também congela o browser se eu escolher o sétimo ou o oitavo arquivo da lista.

O DVP5960 com oito linhas (usando background do firmware eneris para DVP5965):



Estou sem pistas de onde olhar para corrigir o problema.
Busque por "8 rows" no grupo do Yahoo! Há uma discussão ao respeito.

Update: A discussão começa com o assunto "Dirname mess & 8 rows" e termina como "8-rows filebrowser for Pio470/575 is almost ready"...

Off-topic: Mais tarde vou enviar por email o documento com o patch dos tags mp3. Não apliquei no firmware do DVP5100 porque achei algumas partes diferentes na rotina... O que sim consegui aplicar com éxito foi uma rotina de word wrap no RISC do DVP5140 (na minha opinião gostei mais do que o wordwrap do NA).

Um abraço.
« Última modificação: Agosto 31, 2007, 09:55:25 pm por jmaraujo »

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #228 Online: Agosto 31, 2007, 10:02:49 pm »

Busque por "8 rows" no grupo do Yahoo! Há uma discussão ao respeito.

Ahhhh... "rows"...

Eu estava teimando com "lines"  ;D

De qualquer forma, já achei a causa do problema. Mas vou ler os tópicos no Yahoo mais tarde para ver se aprendo mais alguma coisa.

Estou testando o browser do DVP5960 com oito linhas neste momento e parece OK, com exceção do problema do retorno para a quarta linha, que você tem com o DVP5100.

Mas pelo menos não congela mais...


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 alvarux

  • Novato
  • *
  • Mensagens: 1
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware: log de descobertas
« Responder #229 Online: Setembro 01, 2007, 12:09:43 pm »
Hola Jefferson:

Yo tengo un Pioneer 578 convertido a 575 con el Firmware Mod de Guffiak.
El File Browser soporta 8 renglones y funciona perfectamente.
Aunque los firmware de Pioneer tienen sus particularidades, a lo mejor te sirva analizar ese firmware.

Salu2.

Alvaro.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #230 Online: Setembro 01, 2007, 12:11:06 pm »
MtkWindows e palettes

Na semana passada eu entendi como se localiza as palettes no firmware. É muito simples, depois que você identifica as janelas, porque cada definição de janela tem um ponteiro para a palette que usa. Então eu tive a idéia adicionar ao MTK Patcher a capacidade de criar novas palettes para acabar com o velho problema que temos de alterar uma cor em uma janela e bagunçar outras. Cada palette apenas precisa de 32 bytes livres no código e assim como os menus pode ser colocada em qualquer lugar do mesmo banco.

O que surpreendentemente eu só descobri ontem é que o mtkWindows já faz isso! :dashhead1:

Por muito tempo eu usei o mtkWindows 0.8, que não cria novas palettes e nunca usei o recurso de abrir e salvar palettes, por isso ao passar para a versão 0.8.3 eu nunca me dei conta de que havia um minúsculo botão branco adicional que cria uma nova palette no firmware, para a janela selecionada.



Usando esse simples recurso você pode ter uma palette exclusiva para a janela e não se preocupar mais com a propagação de mudanças por outras janelas.

Arghhhhh. Deveria ter notado isso há meses!  :dashhead1:





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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #231 Online: Setembro 01, 2007, 12:17:24 pm »
Hola Jefferson:

Yo tengo un Pioneer 578 convertido a 575 con el Firmware Mod de Guffiak.
El File Browser soporta 8 renglones y funciona perfectamente.
Aunque los firmware de Pioneer tienen sus particularidades, a lo mejor te sirva analizar ese firmware.

Salu2.

Alvaro.

Alvaro,


Eu ainda nem comecei a tentar entender as particularidades dos firmwares LG e Pioneer. Mesmo entre os Philips já existem variações bem complicadas de se entender e sem ter dominado o funcionamento do browser nos firmwares que eu entendo melhor, tentar encontrar as respostas em firmwares que não entendo de jeito nenhum (nem os scripts entendem) só vai me complicar  ;D

Eu preciso de um firmware com oito linhas que seja ou da Philips ou Mediatek "padrão".

Lembrando: meu único problema agora é o mesmo de jmaraujo: ao rolar o browser de baixo para cima a barra de selação começa no quarto arquivo e não no oitavo.

« Última modificação: Setembro 01, 2007, 12:20:05 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #232 Online: Setembro 01, 2007, 03:33:07 pm »
Tags MP3 no DVP5980

De todos os Philips, este é o que está dando mais trabalho. Embora os indicadores do tamanho das tags (após a keyword "TAG" no 8032) indiquem que este é o primeiro firmware Philips com suporte a tags com mais de 30 caracteres (diz suportar 60), não consigo nem chegar aos 30 que dei ao DVP5960. Existe algum limitador extra que não encontrei ainda.

Eu investiguei a memória do aparelho com o MTKDump e as tags aparecem com 30 caracteres cada. Logo não deve ser um problema no ARM.
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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #233 Online: Setembro 02, 2007, 02:18:50 am »
Todo este trecho do firmware do Proview DVP-858 pode ser apagado para usar o espaço em outra coisa:

B1:A143 90 FC 44    mov     DPTR, #XRAM_FC44      ; Coordenada horizontal (HI)
B1:A146 F0          movx    @DPTR, A
B1:A147 A3          inc     DPTR
B1:A148 74 D0       mov     A, #0xD0 ; 'ð'
B1:A14A F0          movx    @DPTR, A
B1:A14B 90 FC 46    mov     DPTR, #XRAM_FC46      ; Coordenada vertical (HI)
B1:A14E E4          clr     A
B1:A14F F0          movx    @DPTR, A
B1:A150 A3          inc     DPTR
B1:A151 74 04       mov     A, #4
B1:A153 F0          movx    @DPTR, A
B1:A154 7D 12       mov     R5, #0x12             ; "Slide Show" em chinês
B1:A156 7F 11       mov     R7, #0x11
B1:A158 12 1E 22    lcall   ShowIconB1BS
B1:A15B 90 FC 44    mov     DPTR, #XRAM_FC44      ; Coordenada horizontal (HI)
B1:A15E 74 01       mov     A, #1
B1:A160 F0          movx    @DPTR, A
B1:A161 A3          inc     DPTR
B1:A162 74 38       mov     A, #0x38 ; '8'
B1:A164 F0          movx    @DPTR, A
B1:A165 90 FC 46    mov     DPTR, #XRAM_FC46      ; Coordenada vertical (HI)
B1:A168 E4          clr     A
B1:A169 F0          movx    @DPTR, A
B1:A16A A3          inc     DPTR
B1:A16B 74 04       mov     A, #4
B1:A16D F0          movx    @DPTR, A
B1:A16E 7D 13       mov     R5, #0x13             ; "Menu" em chinês
B1:A170 7F 11       mov     R7, #0x11
B1:A172 12 1E 22    lcall   ShowIconB1BS
B1:A175 90 FC 44    mov     DPTR, #XRAM_FC44      ; Coordenada horizontal (HI)
B1:A178 74 01       mov     A, #1
B1:A17A F0          movx    @DPTR, A
B1:A17B A3          inc     DPTR
B1:A17C 74 84       mov     A, #0x84 ; 'ä'
B1:A17E F0          movx    @DPTR, A
B1:A17F 90 FC 46    mov     DPTR, #XRAM_FC46      ; Coordenada vertical (HI)
B1:A182 E4          clr     A
B1:A183 F0          movx    @DPTR, A
B1:A184 A3          inc     DPTR
B1:A185 74 04       mov     A, #4
B1:A187 F0          movx    @DPTR, A
B1:A188 7D 14       mov     R5, #0x14             ; ícone "< PREV"em chinês
B1:A18A 7F 11       mov     R7, #0x11
B1:A18C 12 1E 22    lcall   ShowIconB1BS
B1:A18F 90 FC 44    mov     DPTR, #XRAM_FC44      ; Coordenada horizontal (HI)
B1:A192 74 01       mov     A, #1
B1:A194 F0          movx    @DPTR, A
B1:A195 A3          inc     DPTR
B1:A196 74 CC       mov     A, #0xCC ; '¦'
B1:A198 F0          movx    @DPTR, A
B1:A199 90 FC 46    mov     DPTR, #XRAM_FC46      ; Coordenada vertical (HI)
B1:A19C E4          clr     A
B1:A19D F0          movx    @DPTR, A
B1:A19E A3          inc     DPTR
B1:A19F 74 04       mov     A, #4
B1:A1A1 F0          movx    @DPTR, A
B1:A1A2 7D 15       mov     R5, #0x15             ; ícone "NEXT >"em chinês
B1:A1A4 7F 11       mov     R7, #0x11
B1:A1A6 02 1E 22    ljmp    ShowIconB1BS


Ele só é executado se o valor da EEPROM para "OSD Language" for "3". E o maior valor armazenado lá é "2".

De qualquer forma, quantos proprietários brasileiros iriam setar o player para chinês?  ;)
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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #234 Online: Setembro 02, 2007, 02:23:15 pm »
SetMpeg4SubtitleParams e Janela de Legenda


Eu descobri um método alternativo para identificar ambos no firmware, de forma automática.


Procure por

7F xx 12 ? ? D3 22

Substituindo "xx" com 0x10 até 0x13 em um loop.

Mesmo tentando de 0x10 até 0x13 você vai encontrar uma e apenas uma ocorrência dessa string, em SetMpeg4SubtitleParams.

E quando encontrar um resultado, o número usado será a janela de legendas.

Eu já implementei esse novo método no MTK Patcher. O método que estava usando até agora ficava inutilizado se  SetMpeg4SubtitleParams tivesse sido modificada (patch de ajuste de posição vertical pelo menu).

Funciona com:

  • Punktal PK-DV246
  • Proview DVP-858
  • Lenoxx DV-406
  • Philips DVP5965
  • Philips DVP5960
  • Philips DVP5980
  • Philips DVP5140
  • Philips DVP3040
  • Philips DVP5100
  • Philips PET725
  • Philips DVP720

Não funciona com

JTEC MTK7000 (este não tem nada sequer parecido)
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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #235 Online: Setembro 05, 2007, 11:50:24 pm »
Como localizar de uma vez só:
  • ARM_PutChar
  • OSD_text_params
  • OSD_text_params_ARM
  • OSD_Text_Color (ou OSD_SetColor)
  • O número da janela do browser;
  • As cores usadas no texto do browser;
  • O número da janela do cabeçalho;
  • As cores usadas no texto do cabeçalho


Funciona para:
  • Philips DVP5100
  • Philips DVP5980
  • Philips DVP3040
  • Philips DVP5965
  • Philips DVP5960
  • Philips DVP5140
  • Philips PET725
  • Punktal PK-DV246
  • Proview DVP-858
  • Lenoxx DV406
  • Pioneer 575

Não funciona para:

  • LG DV8XXX
  • LG DK194g
  • JTEC MTK7000

Procure por:
7F ? 12 ? ? 7D ? 7F ? 7E 02 12 ? ? 7D ? 7F

Você vai ter uma, e apenas uma, resposta (exemplo do DVP5960/55):

B1:5233 7F 0E       mov     R7, #0xE
B1:5235 12 1D 6A    lcall   OSD_Text_Params_ARM_B1
B1:5238 7F 0E       mov     R7, #0xE
B1:523A 12 1D 70    lcall   OSD_Text_Params_B1BS
B1:523D 90 FC 1E    mov     DPTR, #XRAM_FC1E           ; OSD_colors
B1:5240 74 02       mov     A, #2                      ; Cor #2 para o contorno
B1:5242 F0          movx    @DPTR, A
B1:5243 A3          inc     DPTR
B1:5244 04          inc     A                          ; Cor #3 para o preenchimento
B1:5245 F0          movx    @DPTR, A
B1:5246 E4          clr     A
B1:5247 FB          mov     R3, A
B1:5248 FD          mov     R5, A
B1:5249 7F 0E       mov     R7, #0xE
B1:524B 12 1D 76    lcall   OSD_TextColor_B1_BS
B1:524E D2 75       setb    RAM_2E.5
B1:5250 7F 0F       mov     R7, #0xF                   ; Janela do Browser
B1:5252 12 1D 6A    lcall   OSD_Text_Params_ARM_B1
B1:5255 7F 0F       mov     R7, #0xF                   ; Janela do Browser
B1:5257 12 1D 70    lcall   OSD_Text_Params_B1BS
B1:525A E4          clr     A                          ; Cor #0 (transparente) para o contorno
B1:525B 90 FC 1E    mov     DPTR, #XRAM_FC1E           ; OSD_colors
B1:525E F0          movx    @DPTR, A
B1:525F A3          inc     DPTR
B1:5260 74 0E       mov     A, #0xE                    ; Cor #14 para o preenchimento
B1:5262 F0          movx    @DPTR, A
B1:5263 E4          clr     A
B1:5264 FB          mov     R3, A
B1:5265 FD          mov     R5, A
B1:5266 7F 0F       mov     R7, #0xF                   ; Janela do Browser
B1:5268 12 1D 76    lcall   OSD_TextColor_B1_BS
B1:526B 7D 01       mov     R5, #1
B1:526D 7F 9A       mov     R7, #0x9A ; 'Ü'
B1:526F 7E 02       mov     R6, #2
B1:5271 12 1B A8    lcall   Arm_PutCharB1BS
B1:5274 7D 6A       mov     R5, #0x6A ; 'j'
B1:5276 7F 9B       mov     R7, #0x9B ; 'ø'
B1:5278 7E 02       mov     R6, #2
B1:527A 12 1B A8    lcall   Arm_PutCharB1BS
B1:527D 7D 2C       mov     R5, #0x2C ; ','
B1:527F 7F 9C       mov     R7, #0x9C ; '£'
B1:5281 7E 02       mov     R6, #2
B1:5283 12 1B A8    lcall   Arm_PutCharB1BS



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 ygor.almeida

  • Novato Prolixo
  • **
  • Mensagens: 73
  • Aprovação: +1/-0
  • My Name is Neo
    • Ver Perfil
    • eXtremeMods
Re: Firmware: log de descobertas
« Responder #236 Online: Setembro 07, 2007, 12:25:40 am »
Ryan,

Estive lendo e relendo o tópico - quem sabe não aprendo algo  :P ::)
Mas para efeito de curiosidade, algumas vezes percebi que você menciona o Jtec Mtk7000 - dizendo que não localizou determinadas rotinas na firmware...

O MTKRemaker 0.23 B5 / B6 - com a firmware modificada 1.0e 1.0f - habilita aquele curioso recurso de patch das cores da legenda. A curiosidade é que até onde me lembro nenhuma outra firmware que eu tenha aberto no MtkRemaker o recurso é habilitado - como DVP5100 modificadas pelo JmAraujo / Umbanda / Lennox / Proview / LG / e outros Philips.

Porque !? Algum tipo de rotina diferente das que vocês usam !?

Não seria o motivo das suas buscas não retornarem nenhum padrão proximo para essa firmware ? Achei curioso que o programa do MaBreaker consiga achar a rotina nessa firmware e em outras varias firmwares não.

« Última modificação: Setembro 07, 2007, 12:27:44 am por ygor.almeida »
www.eXtremeMods.com.br
Hardware IT News & OverClock

Offline fabianr

  • Novato
  • *
  • Mensagens: 9
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware: log de descobertas
« Responder #237 Online: Setembro 08, 2007, 03:24:55 am »
Eu acabo de instalar o firmware do DVP5140 no DVP3040K e adivinhem...

Tá tudo funcionando!

Eu sou o feliz proprietário do primeiro DVP3040K do mundo com suporte a DivX Ultra:yahoo!:

Jefferson,

Una duda... el codigo perteneciente a las funiones de divx ultra.... es parte del codigo 8032 o del codigo ARM?

Saludos,
FabianR

Offline Jefferson

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

O MTKRemaker 0.23 B5 / B6 - com a firmware modificada 1.0e 1.0f - habilita aquele curioso recurso de patch das cores da legenda. A curiosidade é que até onde me lembro nenhuma outra firmware que eu tenha aberto no MtkRemaker o recurso é habilitado - como DVP5100 modificadas pelo JmAraujo / Umbanda / Lennox / Proview / LG / e outros Philips.

Eu não havia notado isso. Depois de não encontrar o recurso habilitado em vários firmwares eu já nem olho mais aquele menu.

Mas eu testei agora e o firmware do Punktal PK-DV246 também habilita as opções.

Porque !? Algum tipo de rotina diferente das que vocês usam !?

Sim. Sempre é esse o problema.

Não seria o motivo das suas buscas não retornarem nenhum padrão proximo para essa firmware ? Achei curioso que o programa do MaBreaker consiga achar a rotina nessa firmware e em outras varias firmwares não.

Às vezes ligeiras diferenças no código impedem um "match" durante a busca. Quando você me vê dizendo para usar o padrão " xx ?? YY ?? ..." e dar uma lista de vários firmwares onde o padrão funciona, não imagine que eu cheguei a esse padrão na primeira tentativa. Eu começo com um padrão que parece identificar a rotina e testo em cada um dos firmwares. Se não funcionar com um, refaço o padrão e tento de novo. Se funcionar com o novo padrão, analiso porque não funcionou com o primeiro e se for viável retesto com todos os outros.

No caso do JTEC, se não funcionar na primeira tentativa eu simplesmente anoto que com ele não funciona. Trata-se de um aparelho pouco popular, que já saiu de linha e que eu não possuo. Não vale a pena para mim perder tempo ajustando padrões para ele.

Porém ele tem diversas semelhanças com o Punktal e vai acabar se beneficiando do meu esforço para identificar as rotinas do uruguaio.

O caso do menu do mtkRemaker é especialmente complicado. Aquele patch é feito em Sub_Style, que é especialmente difícil de achar automaticamente.

A propósito, os firmwares do Punktal e do JTEC também são os únicos que conheço a ativar o patch de SetMPEG4SubtitleParams no mtkWindows. Confira.
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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #239 Online: Setembro 08, 2007, 05:18:28 pm »
Una duda... el codigo perteneciente a las funiones de divx ultra.... es parte del codigo 8032 o del codigo ARM?

Pelo que eu sei, quase tudo está no ARM.
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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #240 Online: Setembro 09, 2007, 11:10:25 pm »
A tabela de tipos de mídia no ARM

Entender o conteúdo deste post será importante para entender meus próximos posts.

Todo firmware Mediatek 13x9 tem uma tabela no ARM CODE que define quais são as extensões de mídia conhecidas pelo aparelho e, em parte, como tratar cada uma delas.

Fatos:

  • Se uma extensão não estiver na tabela, nem vai aparecer no browser;
  • Mesmo que uma extensão esteja na tabela, não significa que o arquivo vai aparecer no browser ou se aparecer, que é suportado de alguma forma.
  • É possível fazer com que um arquivo válido, mas com extensão desconhecida, seja reconhecido e executado pelo aparelho, editando essa tabela.

A estrutura de cada item na tabela é a seguinte:

  • "Tipo" de arquivo - um byte - Define como o arquivo vai ser tratado;
  • Tamanho da extensão - um byte
  • Extensão - cinco bytes - A extensão em ASCII


Para encontrar a tabela no firmware, salve o ARM CODES descomprimido e faça uma busca pela string "MP3".

A tabela do Proview DVP-858.
Estou usando o DVP-858 como exemplo por ser um dos aparelhos com suporte mais abrangente.

A extensão textual à direita foi adicionada por mim (ASCII já decodificado) para identificar cada item.

00 03 41 43 33 00 00 AC3
01 03 4D 50 33 00 00 MP3
02 03 4D 50 32 00 00 MP2
03 03 4D 50 31 00 00 MP1
04 03 57 41 56 00 00 WAV
05 03 4A 50 47 00 00 JPG
06 03 4D 4C 50 00 00 MLP
07 03 57 4D 41 00 00 WMA
08 03 41 53 46 00 00 ASF
09 03 4D 50 47 00 00 MPG
0A 03 44 41 54 00 00 DAT
0B 03 56 4F 42 00 00 VOB
0D 03 44 53 44 00 00 DSD
09 03 4D 50 45 00 00 MPE
09 03 4D 31 56 00 00 M1V
09 03 4D 32 56 00 00 M2V
05 03 4A 50 45 00 00 JPE
0C 03 41 41 43 00 00 AAC
09 04 4D 50 45 47 00 MPEG
05 04 4A 50 45 47 00 JPEG
0E 03 50 4D 46 00 00 PMF
0F 03 43 44 41 00 00 CDA
12 03 41 56 49 00 00 AVI
12 03 56 49 44 00 00 VID
12 04 44 49 56 58 00 DIVX
14 03 4D 50 34 00 00 MP4
14 03 4D 34 41 00 00 M4A
15 03 33 47 50 00 00 3GP
16 03 4D 34 56 00 00 M4V
17 03 44 53 54 00 00 DST
18 03 4F 47 47 00 00 OGG
18 03 4F 47 4D 00 00 OGM
19 02 52 41 00 00 00 RA
19 02 52 4D 00 00 00 RM
19 03 52 41 4D 00 00 RAM
19 03 52 4D 4D 00 00 RMM
19 04 52 4D 56 42 00 RMVB

A tabela do Punktal PK-246 é idêntica, mas sem o registro para a extensão .M4A

A mesma tabela, ordenada por código:
Os asteriscos sinalizam extensões que eu já testei e aparecem

00 03 41 43 33 00 00 AC3 - nem aparece no browser
01 03 4D 50 33 00 00 *MP3
02 03 4D 50 32 00 00 MP2
03 03 4D 50 31 00 00 MP1
04 03 57 41 56 00 00 WAV
05 03 4A 50 47 00 00 *JPG
05 04 4A 50 45 47 00 JPEG
05 03 4A 50 45 00 00 JPE
06 03 4D 4C 50 00 00 MLP
07 03 57 4D 41 00 00 *WMA
08 03 41 53 46 00 00 ASF
09 03 4D 50 47 00 00 *MPG
09 03 4D 50 45 00 00 MPE
09 04 4D 50 45 47 00 MPEG
09 03 4D 31 56 00 00 M1V
09 03 4D 32 56 00 00 M2V
0A 03 44 41 54 00 00 DAT
0B 03 56 4F 42 00 00 VOB
0C 03 41 41 43 00 00 AAC
0D 03 44 53 44 00 00 DSD
0E 03 50 4D 46 00 00 PMF
0F 03 43 44 41 00 00 CDA
12 03 41 56 49 00 00 *AVI
12 03 56 49 44 00 00 VID
12 04 44 49 56 58 00 *DIVX
14 03 4D 50 34 00 00 *MP4
14 03 4D 34 41 00 00 *M4A
15 03 33 47 50 00 00 *3GP
16 03 4D 34 56 00 00 M4V
17 03 44 53 54 00 00 DST
18 03 4F 47 47 00 00 *OGG
18 03 4F 47 4D 00 00 *OGM
19 02 52 41 00 00 00 RA - nem aparece no browser
19 02 52 4D 00 00 00 RM - nem aparece no browser
19 03 52 41 4D 00 00 RAM - nem aparece no browser
19 03 52 4D 4D 00 00 RMM - nem aparece no browser
19 04 52 4D 56 42 00 RMVB - nem aparece no browser

Manipulando a tabela do Proview DVP-858 já verifiquei o seguinte:

  • É possível fazer com que arquivos .aac sejam executados. Perceba que curiosamente consta um item para a extensão na tabela, mas nós já sabemos que arquivos .aac nem aparecem no browser (você precisa renomear para .m4a). Basta trocar o "0C" por "14" no tipo do item para corrigir isso.
  • Podemos adicionar até cinco extensões novas facilmente, apenas editando os cinco últimos itens;
  • Infelizmente, não dá para fazer com que AAC seja manipulado como se fosse MP3, dando a ele o código "01". Deve haver uma outra verificação mais adiante que rejeita o arquivo e volta para o browser;
  • Não adianta atribuir os códigos "14" ou "12" para AC3. O arquivo aparece no browser, mas é rejeitado.
  • Se você quiser que as legendas apareçam no browser, basta usar por exemplo os itens inúteis de RA a RMVB e atribuir um "tipo" que tenha visibilidade. É claro que selecionar as legendas não vai servir para nada e poderá até travar o aparelho.
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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #241 Online: Setembro 09, 2007, 11:33:38 pm »
DIR_SET_ICON (ou DIR_SetIcon)

Esta rotina determina que ícone vai ser exibido no browser para cada tipo de arquivo.

No documento "Info - File Browser.rtf", Mabreaker cita de passagem essa rotina, sem entrar em detalhes. Tão de passagem que eu passei várias vezes pelo parágrafo sem nunca entender do que ele estava falando.

Neste post eu explico em detalhes como a rotina funciona.

Para encontrar a rotina no seu firmware, procure por:
CE EF CE EE F4


Funciona com:

  • Philips DVP5960
  • Philips DVP5965
  • Philips DVP5980
  • Philips DVP5100
  • Philips DVP3040
  • Philips DVP5140
  • JTEC MTK 7000
  • Proview DVP-858
  • Punktal PK-DV246
  • Lenoxx DV-406

Não funciona com:
  • Philips PET725 (use EF F4 60 06  ou 90 ? ? 93 FF 22)
  • LG DK194g
  • Pioneer 575

Você vai encontrar algo assim (Proview DVP-858 20.07):

B1:FBC5             DIR_Set_Icon:                 ; CODE XREF: Dir_Disp_FileList+11Fp
B1:FBC5 CE          xch     A, R6
B1:FBC6 EF          mov     A, R7
B1:FBC7 CE          xch     A, R6
B1:FBC8 EE          mov     A, R6
B1:FBC9 F4          cpl     A
B1:FBCA 60 06       jz      Retorna6              ; Se o tipo for 0xFF, retorna 6
B1:FBCC EE          mov     A, R6
B1:FBCD D3          setb    C
B1:FBCE 94 1A       subb    A, #0x1A              ; Só manipula tipos de 1A para baixo
B1:FBD0 40 03       jc      IconLookup
B1:FBD2
B1:FBD2             Retorna6:                     ; CODE XREF: DIR_Set_Icon+5j
B1:FBD2 7F 06       mov     R7, #6                ; Qualquer tipo acima de 1A exibirá o ícone 6 (unknown)
B1:FBD4 22          ret
B1:FBD5             ; ---------------------------------------------------------------------------
B1:FBD5
B1:FBD5             IconLookup:                   ; CODE XREF: DIR_Set_Icon+Bj
B1:FBD5 EE          mov     A, R6
B1:FBD6 90 33 B5    mov     DPTR, #B1_33B5
B1:FBD9 93          movc    A, @A+DPTR            ; B1:33B5 + tipo = ícone a usar
B1:FBDA FF          mov     R7, A
B1:FBDB 22          ret
B1:FBDB             ; End of function DIR_Set_Icon


Em resumo, a rotina pega o "tipo" atribuído no ARM para cada extensão (veja o meu post anterior) e consulta uma pequena tabela no firmware, que começa no endereço destacado em vermelho, para saber qual o ícone será exibido para aquele tipo.

Veja a tabela:

B1:33B5 06          B1_33B5:.byte    6            ; DATA XREF: DIR_Set_Icon+11o
B1:33B6 04          .byte    4
B1:33B7 0C          .byte  0xC
B1:33B8 0B          .byte  0xB
B1:33B9 06          .byte    6
B1:33BA 05          .byte    5
B1:33BB 06          .byte    6
B1:33BC 0D          .byte  0xD
B1:33BD 0D          .byte  0xD
B1:33BE 0A          .byte  0xA
B1:33BF 0A          .byte  0xA
B1:33C0 0A          .byte  0xA
B1:33C1 06          .byte    6
B1:33C2 06          .byte    6
B1:33C3 06          .byte    6
B1:33C4 06          .byte    6
B1:33C5 07          .byte    7
B1:33C6 06          .byte    6
B1:33C7 2D          .byte 0x2D ; -
B1:33C8 06          .byte    6
B1:33C9 2F          .byte 0x2F ; /
B1:33CA 32          .byte 0x32 ; 2
B1:33CB 06          .byte    6
B1:33CC 06          .byte    6
B1:33CD 31          .byte 0x31 ; 1
B1:33CE 06          .byte    6


Olhando assim não fica nada claro, então eu fiz uma ilustração que ajuda (atenção: alguns ícones parecem idênticos, mas não são):



Notas:

  • Os tipos de arquivo não-exibíveis são filtrados antes de chegar a essa rotina. Se chegassem, exibiriam o ícone "unknown". Eu ainda não sei se a filtragem ocorre no ARM ou no 8032 (pode ser em DIR_FilenameFilter);
  • Os números de ícone indicados podem variar de firmware para firmware, principalmente de 0xE em diante. Olhe no mtkRemaker qual a numeração correta do seu;
  • Mabreaker diz que além deste tipo de rotina existe um que usa um CASE para determinar o ícone. Eu ainda não vi esse tipo (e ele não dá nenhum exemplo), mas é provável que seja o tipo usado por Pioneer e LG;
  • Perceba que eu não coloquei descrição para os tipos 0x10, 0x11 e 0x13 porque eles não estão na tabela do ARM. Sabemos agora que 0x10 é "pasta" por causa de seu ícone, mas 0x11 e 0x13 eu ainda não sei o que são.
  • Manipulando esta tabela você pode dar ícones diferentes a tipos diferentes que estão usando o mesmo ícone, como é o caso de MPG, DAT e VOB. Mas não é possível dar ícones diferentes para arquivos de um mesmo tipo, como é o caso de AVI e DIVX;


DIR_SET_ICON é chamada apenas de um lugar no firmware, em DIR_DISP_FILELIST:

B1:6792 90 FB A0    mov     DPTR, #XRAM_FBA0      ; "Tipo" do arquivo
B1:6795 E0          movx    A, @DPTR
B1:6796 FF          mov     R7, A
B1:6797 12 FB C5    lcall   DIR_Set_Icon
B1:679A CD          xch     A, R5                 ; DIR_SET_ICON devolve o ícone em R7, mas SHOWICON espera
B1:679A                                           ; o ícone em R5, daí uma dança de bytes é necessária :)
B1:679B EF          mov     A, R7
B1:679C CD          xch     A, R5
B1:679D 7F 10       mov     R7, #0x10
B1:679F 12 1E 22    lcall   ShowIconB1


Nota: As instruções "xch" que você vê tanto aqui quanto na rotina DIR_SET_ICON me parecem desnecessárias e poderiam ser eliminadas reescrevendo DIR_SET_ICON, o que pouparia alguns bytes. Mas eu vou deixar para tentar provar essa teoria quando esses bytes livres forem úteis para alguma coisa  :)
« Última modificação: Janeiro 10, 2008, 11:46:26 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline ygor.almeida

  • Novato Prolixo
  • **
  • Mensagens: 73
  • Aprovação: +1/-0
  • My Name is Neo
    • Ver Perfil
    • eXtremeMods
Re: Firmware MT13x9: Log de Descobertas
« Responder #242 Online: Setembro 10, 2007, 12:30:55 am »
Ryan,

Não sei se neste ou talvez em um outro tópico, você saberia / poderia colocar do que se trata as demais extensões que parecem estranhas na sua lista.
Suponho que se estão em um DVD Player que pode reproduzir DVD's e DATA, se tratem todos de arquivos multimídia, mas não fui muito feliz no google em identificar o que são alguns menos conhecidos.

Ex:

.DSD
.DST
.VID
.PMF
.MLP ( Encontrei algo sobre DVD-Audio ) mas o formato tanto para encode quanto decode é restrito. Não tem nada aberto

Att
www.eXtremeMods.com.br
Hardware IT News & OverClock

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #243 Online: Setembro 10, 2007, 01:30:19 am »
Não sei se neste ou talvez em um outro tópico, você saberia / poderia colocar do que se trata as demais extensões que parecem estranhas na sua lista.

Eu não faço a menor idéia do formato dos arquivos que usam essas extensões.
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 evb62

  • Novato
  • *
  • Mensagens: 14
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #244 Online: Setembro 10, 2007, 12:13:41 pm »
.MLP ( Encontrei algo sobre DVD-Audio ) mas o formato tanto para encode quanto decode é restrito. Não tem nada aberto
Att
Meridian Lossless Packing. Comprime áudio PCM sem perda de qualidade (assim como FLAC, SHN, APE e outros). Suporta áudio estéreo ou multicanal. Existe um programa para codificar e decodificar esse formato.

Eu já usei algumas vezes. Baixei alguns DVDs Áudio decodificados em WAV, transformei em MLP, e "autorei" em DVD-A, com um programa próprio para isso. O DVD-A usa aquele diretório chamado AUDIO_TS dentro do DVD. As músicas e o conteúdo visual ficam em arquivos com extensão "AOB" dentro de AUDIO_TS.

Por que o DVD-A usa MLP? Além da economia de espaço, faça as contas: arquivos PCM com 24 bits, 96 kHz, multiplicados por 6 canais, por exemplo, ultrapassam o bitrate máximo de 9.6 Mbps do DVD. Se esse áudio é comprimido, o bitrate baixa na leitura, e o DVD-A player consegue lê-lo. Em seguida, a descompressão de MLP para PCM é feita no aparelho.

Não é necessário comprimir áudio estéreo de 24 bits, 192 kHz. Esse não ultrapassa o bitrate máximo do DVD.

Offline ygor.almeida

  • Novato Prolixo
  • **
  • Mensagens: 73
  • Aprovação: +1/-0
  • My Name is Neo
    • Ver Perfil
    • eXtremeMods
Re: Firmware MT13x9: Log de Descobertas
« Responder #245 Online: Setembro 10, 2007, 05:12:45 pm »
Interessante :)  :clapping: :yahoo!:
Evb62 - muito obrigado.
www.eXtremeMods.com.br
Hardware IT News & OverClock

Offline fabianr

  • Novato
  • *
  • Mensagens: 9
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware: log de descobertas
« Responder #246 Online: Setembro 10, 2007, 11:29:34 pm »
Una duda... el codigo perteneciente a las funiones de divx ultra.... es parte del codigo 8032 o del codigo ARM?

Pelo que eu sei, quase tudo está no ARM.

Hmmm... y se pueden cambiar el codigo ARM del 3040K por el del 5140? De esta forma tendriamos divx ultra en el 3040K pero mantenrdiamos el codigo 8032 que por lo que entiendo de todos los analisis que he visto esta mas analizado y entendido que el del 5140, y sin mencionar que por tus descubrimientos podriamos utilizar 2MB en vez de 1MB...

Saludos,
FabianR

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #247 Online: Setembro 14, 2007, 04:43:28 am »

Hmmm... y se pueden cambiar el codigo ARM del 3040K por el del 5140? De esta forma tendriamos divx ultra en el 3040K pero mantenrdiamos el codigo 8032 que por lo que entiendo de todos los analisis que he visto esta mas analizado y entendido que el del 5140, y sin mencionar que por tus descubrimientos podriamos utilizar 2MB en vez de 1MB...


Eu testei e apresenta o mesmo problema que ocorre ao colocar o RISC do DVP5140 no DVP5100: os menus DivX Ultra aparecem, mas você não consegue selecionar nada.
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #248 Online: Setembro 14, 2007, 06:46:01 am »

Hmmm... y se pueden cambiar el codigo ARM del 3040K por el del 5140? De esta forma tendriamos divx ultra en el 3040K pero mantenrdiamos el codigo 8032 que por lo que entiendo de todos los analisis que he visto esta mas analizado y entendido que el del 5140, y sin mencionar que por tus descubrimientos podriamos utilizar 2MB en vez de 1MB...


Eu testei e apresenta o mesmo problema que ocorre ao colocar o RISC do DVP5140 no DVP5100: os menus DivX Ultra aparecem, mas você não consegue selecionar nada.
Isso mesmo. É preciso adicionar código no 8032 (veja o firmware jmaraujo 1.2beta1 que postei no fórum: as teclas Ok/Play -11- e Title e Return -22 e 23- foram adicionadas. Falta somente o código das setas).

Offline Acheron

  • Novato
  • *
  • Mensagens: 4
  • Aprovação: +1/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #249 Online: Setembro 29, 2007, 07:30:53 am »
Gracias al hecho de que ahora tengo un cable USB para conectar a la PC, he logrado comprobar algo que sospechaba desde hace tiempo: el FW del 3010/02 es compatible con el 3040K/55. En realidad este FW no tiene ventajas sobre el FW del 3040K (yo tenia la esperanza de que soportara multisesión) excepto una... permite actualizar FW de mas de 1MB mediante CD!!!! ;D ;D ;D

Lamentablemente no es 100% compatible, por ejemplo, el audio se escucha horrible y el lector hace unos sonidos raros al cargar un video con varios subtitulos asi que no se puede usar. :(  :(  :(

Lo bueno es que podemos usarlo como herramienta para cargar mods del 3040K y del 5140 que tengan más de 1MB, mediante el siguiente procedimiento:

- Reducimos el FW del 3010 (DVP3010_02.BIN) a menos de 1MB (quitando idiomas y fuentes) y lo renombramos como DVP3040K_55.BIN
- Lo cargamos en el 3040K. En este punto, si el TV no soporta PAL, la imagen no se va a ver bien, hay ir al menu y seleccionar NTSC, ademas en la opción "component" se tiene que cambiar de RGB a YUV (Todo esto es opcional, pues el siguiente paso bien se puede hacer con la imagen en movimiento).
- Cargamos nuestro mod de más de 1MB previamente renombrado a DVP3010_02.BIN para que sea reconocido.

Y asi es como logramos sobrepasar el limite de 1MB de los FWs del 3040 y 5140 (yo ya lo he probado)  :yahoo!: :yahoo!: :yahoo!:
La verdad es que sólo Dios sabe porque Phillips pone 2MB de flash de hardware pero hace que el FW limite la actualización por CD a 1MB.

PD: Jefferson, por favor confirma que el procedimiento funciona.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #250 Online: Setembro 30, 2007, 05:04:13 am »
Depois de descobrir que o RISC do DVP5160 tem suporte a multisessão em DVD-R, fiz algumas experiências (quase todas fracassadas) que vou resumir aqui:

Firmware DVP5160/12 no DVP5100K/78 - Nem liga
RISC DVP5160/12 no firmware DVP5100K/78 - trava exibindo "HELLO" no VFD

Firmware DVP5160/12 no DVP3040K/55 - Nem liga
RISC DVP5160/12 no firmware DVP5140, instalado no DVP3040K/55 - trava exibindo "PHILIPS" no VFD

O único sucesso foi que o RISC funciona no DVP5960 (e reportadamente no DVP5980)

Acheron: Depois eu farei o seu teste. Estou ocupado com outra experiência agora.
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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #251 Online: Outubro 05, 2007, 07:33:35 am »
Acheron,

Eu parei hoje para seguir seu procedimento e estou com uma dúvida.

Por que você está usando o firmware do DVP3010 para poder instalar um firmware de DVP3040 de mais de 1MB?

No meu último teste, eu consegui instalar o firmware de DVP3040K de 1,5MB logo depois de instalar o firmware oficial, sem problemas aparentes.

Seguindo esse procedimento, o firmware de DVP5140 de 1,5MB lê DVDs?

Eu não cheguei nessa parte do teste ainda. Parei para estudar por que o sistema de vídeo do DVP3010 não é reconhecido pela minha placa de captura, nem pela entrada de video composto de minha TV, apesar de ambas suportarem PAL e NTSC.
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 Acheron

  • Novato
  • *
  • Mensagens: 4
  • Aprovação: +1/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #252 Online: Outubro 08, 2007, 07:53:44 pm »
Hola Jefferson,

Algunas aclaraciones sobre el tema:

Por que você está usando o firmware do DVP3010 para poder instalar um firmware de DVP3040 de mais de 1MB?

No meu último teste, eu consegui instalar o firmware de DVP3040K de 1,5MB logo depois de instalar o firmware oficial, sem problemas aparentes.
El procedimiento "FW 3040 oficial" --> "FW>1MB" no funciona. Me parece que el FW de 1,5MB que usaste en tus pruebas lo hiciste agregando el bloque MPEG de un LG, pero como el FW no usa los MPEGs extras, no se nota la diferencia.

Lo mejor para testear es usar el FW original pero reemplazando el Wallpaper y el Filebrowser por otros de mayor tamaño (unos 100KB cada uno). De esta forma te aseguras que el FW va a usar el espacio extra. Prueba de nuevo así y verás que no funciona (hay errores en el WP y FB).

Seguindo esse procedimento, o firmware de DVP5140 de 1,5MB lê DVDs?
Yo me equivoqué en este punto, lamentablemente mi procedimiento sólo sirve para el FW del 3040, no para el del 5140  :dashhead1:.

Depois de descobrir que o RISC do DVP5160 tem suporte a multisessão em DVD-R, fiz algumas experiências (quase todas fracassadas) que vou resumir aqui:

(...)

Firmware DVP5160/12 no DVP3040K/55 - Nem liga
RISC DVP5160/12 no firmware DVP5140, instalado no DVP3040K/55 - trava exibindo "PHILIPS" no VFD
Yo tengo entendido que para que funcione el soporte multisesión, tanto el RISC como el 8032 deben soportarlo. El problema del FW del 3040K es que su 8032 no soporta multisesión, por eso es que aunque se le ponga el RISC del 5140 (que si soporta multisesión) no se le puede hacer funcionar.


Respecto al FW del 3010, te aconsejo que no te dediques a entenderlo. No tiene ninguna ventaja sobre el FW del 3040 (excepto por el tema del flash de 2MB) y falla en varios otros aspectos al usarse en el DVP3040, como en el audio y la carga de subtitulos. Aunque si puedes reparar esas fallas entonces sí sería posible usarlo.


Pasando a otro tema, quisiera pedirte que cuando tengas tiempo me ayudes con el RISC del 5140 (para ser mas especifico, los ARM Codes), que por alguna razón sólo muestra un máximo de 40 caracteres (sin contar la extensión) de los nombres de archivos en el FB (no afecta a los nombres de directorios) sin importar a cuánto se le aumente el límite en el 8032.

Saludos.

Offline Acheron

  • Novato
  • *
  • Mensagens: 4
  • Aprovação: +1/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #253 Online: Outubro 15, 2007, 08:25:19 pm »
Una pequeña contribución que creo que no ha sido mencionada todavía (si ya es conocida, borren este post). Revisando el FW del 5140 noté la existencia de una opción de menú para activar los closed captions de los DVDs, la cual también está presente, aunque sin usar, en el FW del 3040 (y supongo que en otros modelos).

Una vez que sabe que "existe" es fácil de encontrar. Yo la puse como sexta opción en el menu "Video Setup Page" (en el DVP5140 estaba ahí) quedando así:

  6. No Pic. | Closed Captions | Closed Caption
     0008 FFFF 009C 00BF 0019 0033 0001 0001 FF36E1 0A15 - ROM:36E7
    1. On | Closed Caption On | On
       0260 009F 0260 00 - ROM:36D3
 => 2. Off | Closed Caption Off | Off
       025C 009E 025C 01 - ROM:36DA

En la Pag2 del 8032 del DVP3040 está en el ROM 36E7, para encontrarlo en otros modelos basta buscar la secuencia inicial "0008 FFFF 009C 00BF". Por ejemplo en el DVP5100 (si no me equivoco) está en el ROM 3689.

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware MT13x9: Log de Descobertas
« Responder #254 Online: Outubro 16, 2007, 02:38:05 am »
Descoberta muito interessante, Acheron.  :)

No caso do DVP5100 não se trata somente de um menú oculto, mas sim de um menú que não estava nem "linkeado" sequer... Nenhuma das páginas do menú (usadas ou ocultas) fazem referencia ao "closed captions".

Parabéms pela descoberta.  :clapping:

Offline LioZ

  • Novato
  • *
  • Mensagens: 3
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #255 Online: Outubro 19, 2007, 12:29:18 pm »
A tabela de tipos de mídia no ARM
Todo firmware Mediatek 13x9 tem uma tabela no ARM CODE que define quais são as extensões de mídia conhecidas pelo aparelho e, em parte, como tratar cada uma delas.

Bacana...
Como já devem saber, o Proview 858 não é compatível do DVD-VR (formato usado por gravadores de mesa em midia DVD-RW), porém consegue enchergar o disco

Como o arquivo de video do DVD-VR é a grosso um MPG2 com extensão VRO, daria p/ fazer o Proview 858 ler este VRO?

Pena q que sou totalmente ignorante nesta parte de assembler e ARM  :dashhead1:

Legal...
LioZ
« Última modificação: Fevereiro 03, 2008, 08:27:06 am por Jefferson »

Offline eneris

  • Novato Prolixo
  • **
  • Mensagens: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • Ver Perfil
    • ENERIS Online :: No Need To Argue
Re: Firmware MT13x9: Log de Descobertas
« Responder #256 Online: Outubro 23, 2007, 12:35:05 pm »
Olá a todos!!

Ryan, você irá publicar como é feito o ajuste de legendas no Proview?
(se ja foi mostrado, perdão e pode apagar este post)

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

Offline rafalibrenz

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 356
  • Aprovação: +28/-0
    • Ver Perfil
    • Blog
Re: Firmware MT13x9: Log de Descobertas
« Responder #257 Online: Outubro 24, 2007, 03:34:20 am »
Talvez esse não seja o lugar ideal para falar isso, mas não achei pertinente abrir um tópico só pra isso, e aqui tem um monte de gente que mexe com isso.

Então, Jefferson, se quiser pode deletar isso depois, pra manter o tópico organizado no propósito inicial.

Instalei o IDA 5.1 no meu PC, abri o código 8032 e executei os scripts. Não deu nenhum erro, mas a formatação do código na aba "IDA View-A" tá diferente da formatação que aparece nos códigos postados aqui.

Tirei um print screen da minha tela:


Como pode ser visto, o código (aquele que aparece no editor hexadecimal) não aparece. Mas ele funciona. Fiz uma procura por um trecho conhecido por mim e o IDA o encontrou, até levou o cursor até lá, apesar do código não aparecer.

O que pode estar errado?

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware MT13x9: Log de Descobertas
« Responder #258 Online: Outubro 24, 2007, 08:09:13 am »
Como pode ser visto, o código (aquele que aparece no editor hexadecimal) não aparece. Mas ele funciona. Fiz uma procura por um trecho conhecido por mim e o IDA o encontrou, até levou o cursor até lá, apesar do código não aparecer.

O que pode estar errado?
Tente com isto:

http://ryan.com.br/smf/index.php?topic=179.msg9171925;topicseen#msg9171925

Saudações!

Offline rafalibrenz

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 356
  • Aprovação: +28/-0
    • Ver Perfil
    • Blog
Re: Firmware MT13x9: Log de Descobertas
« Responder #259 Online: Outubro 24, 2007, 02:48:28 pm »
Tente com isto:

http://ryan.com.br/smf/index.php?topic=179.msg9171925;topicseen#msg9171925

Saudações!

Valeu, jmaraujo!!!!! :yahoo!:

Desculpa por perguntar algo que já tinha sido perguntado!

Eu até já tinha lido isso, mas faz tanto tempo que eu não lembrava mais.

Sem falar que quando li eu não entendi qual era a dúvida do Jefferson.

Offline rafalibrenz

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 356
  • Aprovação: +28/-0
    • Ver Perfil
    • Blog
Re: Firmware MT13x9: Log de Descobertas
« Responder #260 Online: Outubro 24, 2007, 05:55:45 pm »
Acho que ainda tem alguma coisa errada com o meu IDA.

Na verdade está tudo meio confuso ainda, mas acho que isso aqui não está certo.

Não encontro a palavra "remote" procurando no código, por exemplo, e acho que eu deveria encontrar.

Aí fui olhar uma parte do código (do firmware que estou trabalhando, DVP5980) postada pelo Ryan neste tópico e estava assim:

B1:F6FE             Sub_Style:                    ; DATA XREF: B0:B0_BS_689_B1_F6FEo
B1:F6FE                                           ; B1:B1_BS_689_B1_F6FEo ...
B1:F6FE 90 FB D2    mov     DPTR, #XRAM_FBD2
B1:F701 EE          mov     A, R6


Só que pra mim aparece assim:

B1:F6FE             BankSw_689_B1_F6FE:                     ; DATA XREF: B0:B0_BS_689_B1_F6FEo
B1:F6FE                                                     ; B1:B1_BS_689_B1_F6FEo ...
B1:F6FE 90 FB D2    mov     DPTR, #XRAM_FBD2
B1:F701 EE          mov     A, R6


Não deveria ser assim, não é mesmo?

Será que pode ser os scripts que rodei? Peguei ambos (MT1389_8032_FULL.idc e MT1389_Misc.idc) no grupo mt13x9 do Yahoo. Um é de 7 de fevereiro de 2007 e o outro é de 28 de Outubro de 2006, respectivamente.

Cheguei a desinstalar o IDA 5.1, colocar o 5.0 e processar o código todo novamente, mas não adiantou. :(
« Última modificação: Outubro 24, 2007, 06:00:42 pm por rafalibrenz »

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware MT13x9: Log de Descobertas
« Responder #261 Online: Outubro 24, 2007, 06:43:26 pm »
Nem todas as funções são identificadas pelos scripts. Você tem que fazer click sobre o nome da função (no seu caso "BankSw_689_B1_F6FE") e trocar o nome dela.

Offline fabianr

  • Novato
  • *
  • Mensagens: 9
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #262 Online: Outubro 24, 2007, 11:15:33 pm »
Nem todas as funções são identificadas pelos scripts. Você tem que fazer click sobre o nome da função (no seu caso "BankSw_689_B1_F6FE") e trocar o nome dela.

Creo que seria genial para los que somos nuevos en esto que Jefferson hiciera un dump a idc de sus bases de IDA
(idb) de los 8032/ARM codes de los diferentes modelos y los publicara. Es la forma que tiene IDA de poder "pasar el trabajo"
sin enviar el "ejecutable por temas legales" o incluir datos de usuario IDA, etc.

Estos idc comprimidos son bien pequeñitos... :)

Que opinan?

Han probado utilizar el Bindiff v2 de Sabre technologies para comparar firmwares? Es un plugin de IDA...


Saludos,
FabianR

PD el metodo es:


File-> Produce files -> Dump database to idc file


Offline rafalibrenz

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 356
  • Aprovação: +28/-0
    • Ver Perfil
    • Blog
Re: Firmware MT13x9: Log de Descobertas
« Responder #263 Online: Outubro 25, 2007, 03:26:53 pm »
Nem todas as funções são identificadas pelos scripts. Você tem que fazer click sobre o nome da função (no seu caso "BankSw_689_B1_F6FE") e trocar o nome dela.

Ah bom... É que eu achei que ele reconheceria essa. Na verdade eu achei que ele não tinha reconhecido nenhuma, mas já encontrei algumas (poucas) que ele reconheceu. Uma delas é a Video_Play.

Valeu, Jmaraujo. Agora estou começando a compreender o IDA. Já me foi útil para trocar a função de uma tecla do controle remoto.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #264 Online: Outubro 25, 2007, 04:22:42 pm »
Olá a todos!!

Ryan, você irá publicar como é feito o ajuste de legendas no Proview?
(se ja foi mostrado, perdão e pode apagar este post)


Não eu não mostrei ainda.

Eu pretendo fazer isso, mas não estou encontrando tempo no momento.

Você pode tentar comparando o código 8032 das minhas duas últimas versões do firmware com o UltraCompare.
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 rafalibrenz

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 356
  • Aprovação: +28/-0
    • Ver Perfil
    • Blog
Re: Firmware: log de descobertas
« Responder #265 Online: Outubro 29, 2007, 01:48:08 am »
Como usar o "Expert Mode" do mtkTool

[...]

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.

Testei isso aqui, com o DVP5980K/55.

Liguei o aparelho, deixei ele em uma pasta qualquer do disco que estava lendo, sem reproduzir nada.

Mandei o MtkTool ler 1024 bytes (é a capacidade do chip de memória eeprom que está na placa do DVD player) a partir do endereço 375E599 (como diz na mensagem de foncreator que o link indica e não 376E599 como disse o Jefferson, que provavelmente se enganou).

Salvei o conteúdo em um arquivo binário (eeprom01.bin).

Entrei no setup do aparelho e liguei o "Night Mode", em Audio Setup Page. Saí do Setup.

Li novamente o conteúdo da suposta eeprom e salvei novamente (eeprom02.bin).

Entrei no setup do aparelho e desliguei o "Night Mode". Saí do Setup.

Li novamente os 1024 bytes e salvei novamente (eeprom03.bin).

Deveria acontecer o seguinte, até onde eu sei:

Comparando eeprom01.bin com eeprom02.bin deveria haver um (ou alguns) bytes diferentes.

Comparando eeprom01.bin com eeprom03.bin deveria haver zero bytes diferentes. Os arquivos deveriam ser idênticos.

O que aconteceu:

Comparando eeprom01.bin com eeprom02.bin obtive um byte diferente: o primeiro. (obs.: outro dia fiz o mesmo teste mudando outra propriedade do setup, o Lip Sync, e o único byte que mudou também foi o primeiro!)

Comparando eeprom01.bin com eeprom03.bin obtive também um byte diferente: novamente o primeiro.

Comparando eeprom02.bin com eeprom03.bin obtive como resultado: os arquivos são idênticos.

Comparações feitas com o UltraCompare Professional 5.10.

Conclusão: Como disse o Jefferson, a maneira com que os bytes mudam é totalmente inconsistente. A teoria de que esse conteúdo é o da eeprom é, na minha opinião, uma inverdade. Hehe.

Talvez o furo do meu teste esteja no endereço da tal Shared Memory. Não sei o que é isso, e talvez isso mude de aparelho para aparelho, sei lá.

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware MT13x9: Log de Descobertas
« Responder #266 Online: Novembro 06, 2007, 02:57:16 am »
Una pequeña contribución que creo que no ha sido mencionada todavía (si ya es conocida, borren este post). Revisando el FW del 5140 noté la existencia de una opción de menú para activar los closed captions de los DVDs, la cual también está presente, aunque sin usar, en el FW del 3040 (y supongo que en otros modelos).
Após o "pequeno" susto que levei com o meu DVP5100, testei a descoberta do Acheron, e agora o DVP5100 tem -pela primeira vez- suporte a closed caption!!!

Obrigada, Acheron.

Offline pauloturij

  • Novato
  • *
  • Mensagens: 16
  • Aprovação: +1/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #267 Online: Novembro 12, 2007, 11:54:08 pm »
Jefferson você poderia me emviar os mpeg[2] desses topicos aqui:

http://ryan.com.br/smf/index.php?topic=179.msg9172124#msg9172124


http://ryan.com.br/smf/index.php?topic=179.msg9172087#msg9172087


se possivel tambem em formato bitmap o original pelo qual voce vez eles pois eu não consegui transformar o mpeg em bitmap.

para não vim aqui só para me aproveitar do forum e de voce, deicho minha sinjela ajuda, a maior pasta skin do firmware do lg dk194g com 18 espaços
« Última modificação: Novembro 13, 2007, 11:06:16 am por pauloturij »

Offline naasom

  • Novato
  • *
  • Mensagens: 4
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #268 Online: Novembro 19, 2007, 06:39:48 pm »
Olá Ryan.
Eneris e eu estamos "suando" para fazer o menu de fontes do 5965k - que a Philips tentou matar - funcionar. Fizemos, onde tinha só Standard, aparecer 4 opções para fonte, porém, quando acionadas não fazem nenhuma modificação. Creio que tem mudar algo no código Assembly, e issoé que não sei fazer nada, a não ser que me digam os códigos que inserir.
Estive também tentando mudar os códigos sub_style e sec. para o menu de cores, com os pulos de banco (o que você mensionou numa página anterior), mas não ficou idêntica, mesmo colocando os códigos que são específicos do 5965k.

Mas voltando ao menu de fontes, ele ficou assim:


[O Eneris testou e disse que o menu aparece como está acima, mas não modifica a fonte do filme quando selecionado qualquer uma delas].


[Aqui está os códigos hexadecimais que acrescentei: Os pointers, como o JMaraujo instruiu].

Se puder nos ajudar de alguma forma eu agradeceria. Estou entrando nesse mundo de firmware agora, mas já estou fascinado.

Grande abraço.

O que tentamos fazer está aqui:
http://www.4shared.com/file/29757260/9bab3442/DVP5965K_93mod_Naasom.html?dirPwdVerified=67cd922f

Offline ronison

  • Novato
  • *
  • Mensagens: 14
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #269 Online: Janeiro 07, 2008, 05:40:56 pm »
Olá Ryan.
Eneris e eu estamos "suando" para fazer o menu de fontes do 5965k - que a Philips tentou matar - funcionar. Fizemos, onde tinha só Standard, aparecer 4 opções para fonte, porém, quando acionadas não fazem nenhuma modificação. Creio que tem mudar algo no código Assembly, e issoé que não sei fazer nada, a não ser que me digam os códigos que inserir.
Estive também tentando mudar os códigos sub_style e sec. para o menu de cores, com os pulos de banco (o que você mensionou numa página anterior), mas não ficou idêntica, mesmo colocando os códigos que são específicos do 5965k.

Mas voltando ao menu de fontes, ele ficou assim:


[O Eneris testou e disse que o menu aparece como está acima, mas não modifica a fonte do filme quando selecionado qualquer uma delas].


[Aqui está os códigos hexadecimais que acrescentei: Os pointers, como o JMaraujo instruiu].

Se puder nos ajudar de alguma forma eu agradeceria. Estou entrando nesse mundo de firmware agora, mas já estou fascinado.

Grande abraço.

O que tentamos fazer está aqui:
http://www.4shared.com/file/29757260/9bab3442/DVP5965K_93mod_Naasom.html?dirPwdVerified=67cd922f

Me corrijam se eu estiver errado, mas o que o naason fez foi apenas adicionar opções ao menu. O próximo passo seria adicionar os novos tipos de fontes (ou usar as que já existem) na área de dados e usar a rotina que altera o tipo de fonte no registrador correspondente.

Um detalhe importante é que este item de menu não parece estar chamando nehuma rotina, pois sua posição 10 está com 0000. Isto está correto? Não seria interessante ele chamar a Sub_Style?

Outro detalhe é que a Font 1 é referenciada por 00-01 (Font[00-01]), Font 2 por 02-04, (Font 2[02-04]), e assim por diante,  no mtkRemaker. Não seria o caso de colocar estes valores: Font1=00, Font 2=02, Fonte 3=05, Font 4=07...

Abraço,
« Última modificação: Janeiro 08, 2008, 01:11:36 pm por ronison »

Offline ronison

  • Novato
  • *
  • Mensagens: 14
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #270 Online: Janeiro 08, 2008, 07:43:06 pm »
Senhores, tenho o prazer de anunciar que terminei o firmware do DVP5965K com fontes selecionáveis no Menu! Está 100% funcional. Estou melhorando as fontes e postarei aqui o que fiz para avaliação! (quando chegar em casa eu posto o firmware).

Considerações iniciais:
  • É preciso alterar a subrotina que o Ryan colocou neste post para destravar a fonte 7 (e otimizá-la)
  • É preciso alterar Sub_Style para que a fonte escolhida seja carregada no início (e não apenas quando entrar no setup)
  • É preciso alterar o menu de legendas divx, adicionando as novas opções (podemos ter até 5). Cada item deve conter o valor da respectiva fonte, e não 1, 2, 3... como prefere a Philips  ;) (Esta parte não vou mostrar aqui pois já foi bastante discutido no post)

As alterações:

Primeiro na rotina de seleção das fontes (a BankSw_681_B1_E60B)


B1:E60B             ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B1:E60B
B1:E60B
B1:E60B             BankSw_681_B1_E60B:           ; DATA XREF: B0:B0_BS_681_B1_E60Bo
B1:E60B 7F E2       mov     R7, #0xE2
B1:E60D 7E 07       mov     R6, #7
B1:E60F 12 1B 84    lcall   ARM_GetChar_B1_BS
B1:E612 BF 01 05    cjne    R7, #1, B1_E61A
B1:E615 D2 74       setb    RAM_2E.4
B1:E617 12 1D 1C    lcall   B1_BS_166_B4_ABBB
B1:E61A
B1:E61A             B1_E61A:                      ; Aqui começa o SWITCH-CASE das fontes
B1:E61A 7F 44       mov     R7, #0x44 ; 'D'       ; Pega o valor da epprom selecionada no menu  (que já existe)
B1:E61C 7E 00       mov     R6, #0
B1:E61E 12 1B 90    lcall   Pref_GetChar_B1BS
B1:E621 BF 01 07    cjne    R7, #1, B1_E62B
B1:E624 7F 0B       mov     R7, #0xB              ; Veja que aqui ele coloca, na marra, em R7 o valor da Fonte 7 (0xB)
B1:E626 12 1E D8    lcall   OSD_SetFont_B1_BS
B1:E629 80 27       sjmp    B1_E652
B1:E62B             ; ---------------------------------------------------------------------------
B1:E62B
B1:E62B             B1_E62B:                      ; CODE XREF: BankSw_681_B1_E60B+16j
B1:E62B 7F 44       mov     R7, #0x44 ; 'D'       ; Verifica o valor de "DivX Subtitle" na eeprom (sempre "0")
B1:E62D 7E 00       mov     R6, #0
B1:E62F 12 1B 90    lcall   Pref_GetChar_B1BS
B1:E632 EF          mov     A, R7
B1:E633 70 07       jnz     B1_E63C
B1:E635 7F 0B       mov     R7, #0xB              ; Aqui de novo R7 = 0xB
B1:E637 12 1E D8    lcall   OSD_SetFont_B1_BS
B1:E63A 80 16       sjmp    B1_E652
B1:E63C             ; ---------------------------------------------------------------------------
B1:E63C
B1:E63C             B1_E63C:                      ; CODE XREF: BankSw_681_B1_E60B+28j
B1:E63C 7F 44       mov     R7, #0x44 ; 'D'       ; Verifica o valor de "DivX Subtitle" na eeprom (sempre "0")
B1:E63E 7E 00       mov     R6, #0
B1:E640 12 1B 90    lcall   Pref_GetChar_B1BS
B1:E643 BF 02 07    cjne    R7, #2, B1_E64D
B1:E646 7F 0B       mov     R7, #0xB              ; Aqui de novo R7 = 0xB
B1:E648 12 1E D8    lcall   OSD_SetFont_B1_BS
B1:E64B 80 05       sjmp    B1_E652
B1:E64D             ; ---------------------------------------------------------------------------
B1:E64D
B1:E64D             B1_E64D:                      ; CODE XREF: BankSw_681_B1_E60B+38j
B1:E64D 7F 0B       mov     R7, #0xB              ; Aqui de novo R7 = 0xB - Enfim, numca será outra fonte diferente
B1:E64F 12 1E D8    lcall   OSD_SetFont_B1_BS
B1:E652
B1:E652             B1_E652:                      ; CODE XREF: BankSw_681_B1_E60B+1Ej
B1:E652                                           ; BankSw_681_B1_E60B+2Fj ...

B1:E652 7F 12       mov     R7, #0x12
B1:E654 12 1D 6A    lcall   OSD_Text_Init_B1BS
B1:E657 7F 12       mov     R7, #0x12
B1:E659 02 1D 70    ljmp    B1_BS_180_B3_E9AF
B1:E659             ; End of function BankSw_681_B1_E60B


O que está em vermelho some da rotina (há uma redundancia desnecessária aqui). O que está destacado em verde exeplicita como a Philips fez pra travar na fonte 7 (0xB).
A nova versão da rotina fica assim:


B1:E60B             ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B1:E60B
B1:E60B             BankSw_681_B1_E60B:           
B1:E60B 7F E2       mov     R7, #0xE2
B1:E60D 7E 07       mov     R6, #7
B1:E60F 12 1B 84    lcall   ARM_GetChar_B1_BS
B1:E612 BF 01 05    cjne    R7, #1, B1_E61A
B1:E615 D2 74       setb    RAM_2E.4
B1:E617 12 1D 1C    lcall   B1_BS_166_B4_ABBB
B1:E61A             B1_E61A:               
B1:E61A 7F 44       mov     R7, #0x44
B1:E61C 7E 00       mov     R6, #0
B1:E61E 12 1B 90    lcall   Pref_GetChar_B1BS

B1:E621 12 1E D8    lcall   OSD_SetFont_B1_BS
B1:E624 7F 12       mov     R7, #0x12
B1:E626 12 1D 6A    lcall   OSD_Text_Init_B1BS
B1:E629 7F 12       mov     R7, #0x12
B1:E62B 02 1D 70    ljmp    B1_BS_180_B3_E9AFB
B1:E62E ;-----------------------------------------------------------------------------------------------------------
B1:E62E 00         nop
B1:E62F 00         nop
B1:E630 00         nop
B1:E631 00         nop
B1:E632 00         nop
B1:E633 00         nop
B1:E634 00         nop
B1:E635 00         nop
B1:E636 00         nop
B1:E637 00         nop
B1:E638 00         nop
B1:E639 00         nop
B1:E63A 00         nop
B1:E63B 00         nop
B1:E63C 00         nop
B1:E63D 00         nop
B1:E63E 00         nop
B1:E63F 00         nop
B1:E640 00         nop
B1:E641 00         nop
B1:E642 00         nop
B1:E643 00         nop
B1:E644 00         nop
B1:E645 00         nop
B1:E646 00         nop
B1:E647 00         nop
B1:E648 00         nop
B1:E649 00         nop
B1:E64A 00         nop
B1:E64B 00         nop
B1:E64C 00         nop
B1:E64D 00         nop
B1:E64E 00         nop
B1:E64F 00         nop
B1:E650 00         nop
B1:E651 00         nop
B1:E652 00         nop
B1:E653 00         nop
B1:E654 00         nop
B1:E655 00         nop
B1:E656 00         nop
B1:E657 00         nop
B1:E658 00         nop
B1:E659 00         nop
B1:E659 ;-----------------------------------------------------------------------------------------------------------


A parte destacada em azul é a mais importante. Ela lê da EPPROM o valor selecionado no Menu e o considera como sendo o número real da fonte, passando em seguida para a rotina que faz o resto do trabalho (OSD_SetFont_B1_BS).

Agora vamos à Sub_Style:

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                   
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                     
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, #0                ; 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


Como já é sabido por todos, é no código marcado em vermelho que o tipo da fonte (no caso 0x0) é determinado pela Sub_Style. Como também já foi dito pelo Ryan em outro post, alterando este código por 7F XX (mov R7 XX), onde XX é o tipo da fonte, é possível alterar a fonte da legenda na inicialização.
Pois bem, no caso, o que queremos é que o tipo da fonte seja pego na EEPROM, no endereço usado pelo menu de seleção. Acontece que não temos como adicionar o código necessário nesta rotina sem deslocá-la. Para tanto, o que fiz foi tirar uma parte do código (vermelho + verde) e criei uma sub-rotina (aproveitando para liberar o espaço para a chamada) que realiza o trabalho de pegar o valor na EPPROM e altera o tipo de fonte.

Segue a Sub_Style alterada:

B1:D2B6             SUB_Style:
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 12 F8 DB    lcall   B1_F8DB
B1:D2C8 ;-----------------------------------------------------------------------------------------------------------
B1:D2C8 00         nop
B1:D2C9 00         nop
B1:D2CA 00         nop
B1:D2CB 00         nop
B1:D2CC 00         nop
B1:D2CD 00         nop
B1:D2CE 00         nop
B1:D2CF 00         nop
B1:D2D0 00         nop
B1:D2D1 00         nop
B1:D2D2 00         nop
B1:D2D3 00         nop
B1:D2D4 00         nop
B1:D2D5 00         nop
B1:D2D5 ;-----------------------------------------------------------------------------------------------------------

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:           
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:           
B1:D322 12 E0 FC    lcall   B1_E0FC
B1:D325
B1:D325             B1_D325:
B1:D325 22          ret
B1:D325             ; End of function SUB_Style


O que está em Azul é a chamada a sub-rotina que engloba a parte retirada do código e a parte que pega o valor na EPPROM.
Segue a sub-rotina:

B1:F8DB     ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ NOVA S U B R O  T I N A ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

B1:F8DB 7F 44       mov     R7, #0x44
B1:F8DD 7E 00       mov     R6, #0
B1:F8DF 12 1B 90    lcall   Pref_GetChar_B1BS

B1:F8E2 12 1E D8    lcall   B1_BS_240_B3_E9FE
B1:F8E5 D2 75       setb    RAM_2E.5
B1:F8E7 7F 12       mov     R7, #0x12
B1:F8E9 12 1D 58    lcall   B1_BS_176_B3_4CF4
B1:F8EC 7F 12       mov     R7, #0x12
B1:F8EE 12 1D 5E    lcall   B1_BS_177_B3_72CE
B1:F8F1 22          ret

Percebam aqui de novo a parte em azul que pega na EPPROM o valor da fonte selecionada no menu. Com isto está pronto.

E é isso pessoal, espero a avaliação e os comentários de vocês. Mais tarde coloco o firmware pra download. Quero discutir um pouco das minhas descobertas sobre o bug do "div by 4" das legendas.  8)

Abraços,
« Última modificação: Janeiro 09, 2008, 08:51:42 pm por ronison »

Offline doctorxyz

  • Novato Prolixo
  • **
  • Mensagens: 63
  • Aprovação: +4/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #271 Online: Janeiro 10, 2008, 04:12:57 am »
ronison,

Torço para que você consiga postar logo este novo firmware.

Se me permite, uma pergunta:

Você usou base o firmware do naasom (feito com apoio do eneris), postado no HTFORUM sob o título "NOVO FIRMWARE 5965K COM GO-TO!!!" no htforum em 18-12-2007?

Todos,

Humilde sugestão: Sempre que possível, mantenham nos novos firmwares as funções dos firmwares imediatamente anteriores.

Estou estudando como agregar no Philips DVP-5965K/55...
A) Carregamento automático de legenda
 How to - Detalhes a serem traduzidos e colocados no log de descobertas
 (http://tech.groups.yahoo.com/group/mt13x9/message/8340)
B) Nomes longos de arquivos a partir da USB
 Implentação bem sucedida no 5980/12
(http://board.softpedia.com/index.php?s=&showtopic=8736&view=findpost&p=30575)
 Detalhes técnicos a serem traduzidos e colocados no log de descobertas
 (http://tech.groups.yahoo.com/group/mt13x9/messages/8104?threaded=1&m=e&var=1&tidx=1)
 (http://tech.groups.yahoo.com/group/mt13x9/messages/8225?threaded=1&m=e&var=1&tidx=1)

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #272 Online: Janeiro 10, 2008, 10:49:08 am »
Gente,

Só estou vindo aqui agora porque recebi um e-mail de Ronison me pedindo para dar uma olhada neste tópico.

Infelizmente, estive "dando um tempo" com firmware porque preciso estudar coisas que são relacionadas com o meu ganha-pão. Talvez eu volte à ativa na próxima semana, mas isso ainda é incerto.

pauloturij,

Não faço a menor idéia agora de onde estão as imagens que você pediu. Lamento.
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 ronison

  • Novato
  • *
  • Mensagens: 14
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #273 Online: Janeiro 10, 2008, 02:27:51 pm »
ronison,

Torço para que você consiga postar logo este novo firmware.
Infelizmente, não tive tempo de fazer isso ontem.  De toda forma, estou tentando decifrar o enigma do "div by 4" antes de fechar. O que descobri é que, no firmware baixado do site da Philips esta regra não é atendida, como também não é atendida a regra de inversão das cores da fonte. Outro detalhe importante é que, a Fonte 01 do firmware original possui 279 caracteres, e não 256.

Se me permite, uma pergunta:

Você usou base o firmware do naasom (feito com apoio do eneris), postado no HTFORUM sob o título "NOVO FIRMWARE 5965K COM GO-TO!!!" no htforum em 18-12-2007?

Todos,

Humilde sugestão: Sempre que possível, mantenham nos novos firmwares as funções dos firmwares imediatamente anteriores.
Concordo. E sim, usei a versão do naason.

Estou estudando como agregar no Philips DVP-5965K/55...
A) Carregamento automático de legenda
 How to - Detalhes a serem traduzidos e colocados no log de descobertas
 (http://tech.groups.yahoo.com/group/mt13x9/message/8340)
B) Nomes longos de arquivos a partir da USB
 Implentação bem sucedida no 5980/12
(http://board.softpedia.com/index.php?s=&showtopic=8736&view=findpost&p=30575)
 Detalhes técnicos a serem traduzidos e colocados no log de descobertas
 (http://tech.groups.yahoo.com/group/mt13x9/messages/8104?threaded=1&m=e&var=1&tidx=1)
 (http://tech.groups.yahoo.com/group/mt13x9/messages/8225?threaded=1&m=e&var=1&tidx=1)
Pelo que eu já vi no assembly aqui não está tão difícil fazer o carregamento automático. Será a próxima empreitada.  8)

Offline doctorxyz

  • Novato Prolixo
  • **
  • Mensagens: 63
  • Aprovação: +4/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #274 Online: Janeiro 10, 2008, 10:09:51 pm »
A tabela de tipos de mídia no ARM do Philips DVP5965K/55 possui todos os registros do Proview DVP-858, e também um registro específico para a extensão .DIV:

12 03 44 49 56 00 00 DIV
« Última modificação: Janeiro 10, 2008, 10:37:41 pm por doctorxyz »

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #275 Online: Janeiro 11, 2008, 12:09:41 am »
Detalhes técnicos a serem traduzidos e colocados no log de descobertas
 (http://tech.groups.yahoo.com/group/mt13x9/messages/8104?threaded=1&m=e&var=1&tidx=1)
 (http://tech.groups.yahoo.com/group/mt13x9/messages/8225?threaded=1&m=e&var=1&tidx=1)

Se com "traduzir" você quer dizer "explicar de uma maneira mais clara", então OK.

Meras traduções de idioma não devem ser colocadas neste tópico.

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 doctorxyz

  • Novato Prolixo
  • **
  • Mensagens: 63
  • Aprovação: +4/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #276 Online: Janeiro 11, 2008, 09:14:21 pm »
Detalhes técnicos a serem traduzidos e colocados no log de descobertas
 (http://tech.groups.yahoo.com/group/mt13x9/messages/8104?threaded=1&m=e&var=1&tidx=1)
 (http://tech.groups.yahoo.com/group/mt13x9/messages/8225?threaded=1&m=e&var=1&tidx=1)

Se com "traduzir" você quer dizer "explicar de uma maneira mais clara", então OK.

Meras traduções de idioma não devem ser colocadas neste tópico.



Jefferson,

Sim, a idéia é explicar de uma maneira mais clara. Quando conseguir atingir o objetivo "carregamento automático de legendas no DVP5965K/55" faço um passo-a-passo explicando claramente, para que outros colegas possam fazer o mesmo.

Mas antes, gostaria de usar este tópico para compartilhar o que estou descobrindo em termos de tabela de códigos ARM e funções ARM / 8032.

É aqui o local correto para postar isso?

Se sim, mantenha o texto; senão, indique um tópico para eu postar/criar, apague, ou ainda, envie para o lixão ok... Obrigado!

Ronison e pessoal,

Sobre Carregamento automático de legendas no DVP5965K/55

Se alguem já tentou fazer isso lendo...
- Smart Loading of text subtitles in DMF -> http://hej456.fasthoster.de/Smart.Loading.of.subs.in.DMF.zip
- mt13x9 Message Re Doc Autoload subtitles in DMF firmware -> http://tech.groups.yahoo.com/group/mt13x9/message/8340

Saiba que eu também já tentei, mas travei em um determinado ponto.

Bom, descobri onde está a Tabela de tipos de mídia no ARM Code – Philips DVP5965K/55...

ROM:0004A996 12 03 41 56 49 00 00 AVI
ROM:0004A99D 12 03 56 49 44 00 00 VID
ROM:0004A9A4 12 04 44 49 56 58 00 DIVX
ROM:0004A9AB 12 03 44 49 56 00 00 DIV
ROM:0004A9B2 14 03 4D 50 34 00 00 MP4
ROM:0004A9B9 14 03 4D 34 41 00 00 M4A

... a word que indica o endereço de chamada para rotina 8032 Remote_DivxPlayback, após pressionar a tecla subtitle (29) no DVP5965K/55...

B4:5FE8 61 8F                 .word B4_618F
B4:5FEA 29                    .byte 0x29

... e por fim, a rotina 8032 Remote_DivxPlayback propriamente dita, que por sua vez chama a rotina 8032 Subtitle_loading (B4:2C28):

B4:618F             Remote_DivxPlayback:                          ; DATA XREF: B4:5FE8 o
B4:618F
B4:618F             ; FUNCTION CHUNK AT B4:6250 SIZE 00000003 BYTES
B4:618F
B4:618F 12 2C 28              lcall Subtitle_loading
B4:618F
B4:6192 EF                    mov   A, R7
B4:6193 24 FF                 add   A, #0xFF
B4:6195 92 6D                 mov   RAM_2D.5, C
B4:6197 02 62 50              ljmp  B4_6250
B4:6197
B4:6197             ; End of function DivX_Tecla_29
B4:6197

Se alguém me ajudar no que falta, podemos terminar, publicar o firmware, e testar. Daí, estando homologado, publico um passo-a-passo em português.

Lá vão as missões:

Missão 1: Achar a rotina 8032 GetFileType

Na documentação do hej456, logo após a rotina 8032 GetFileType, vem os ponteiros que indicam onde fazer as chamadas quando o tipo de mídia é MPG (byte 09) e quando é AVI (byte 12). Porém, no DVP5965K/55, "parece" que a rotina 8032 GetFileType fica num lugar e os ponteiros em outro.
Achei uma ***SUPOSTA*** GetFyleType, no endereço
B4:4D4D7

Missão 2: Achar os ponteiros (words de 2 bytes) que indicam onde fazer as chamadas quando o tipo de mídia é MPG (byte 09) e quando é AVI (byte 12).

Diante da suposição feita em "Missão 1", tenho três endereços ***SUSPEITOS***:
B3:58FE
B4:5F8B
B4:7AA5

Missão 3: Achar a rotina 8032 Video_play do DVP5965K/55

No DVP5965K/55, parece que a rotina 8032 Vídeo_play foi escrita um pouco diferente, então não dá para localizá-la usando a seqüência apontada por hej456 em
 - Smart Loading of text subtitles in DMF -> http://hej456.fasthoster.de/Smart.Loading.of.subs.in.DMF.zip

Achei uma rotina ***SUSPEITA*** em B1:D2B6 através de uma busca fragmentada de padrões e de suposições; a seqüência de bytes utilizada foi “EF 75 F0 10 A4 24 E5 FF E5 F0 34 08 FE”. É bom olhar código abaixo (do DVP5965K) e CONFIRMAR SE DE FATO ELA É A TAL Vídeo_play...

*** SUPOSTA *** "Rotina Video_play"
 
B1:D2B6            *** SUPOSTA *** Video_Play:                             ; CODE XREF: B1_8883+5C p
B1:D2B6 EF                    mov   A, R7
B1:D2B7 24 FE                 add   A, #0xFE ; '¦'
B1:D2B9 60 5B                 jz    B1_D316
B1:D2B9
B1:D2BB 14                    dec   A
B1:D2BC 60 58                 jz    B1_D316
B1:D2BC
B1:D2BE 14                    dec   A
B1:D2BF 60 61                 jz    B1_D322
B1:D2BF
B1:D2C1 24 03                 add   A, #3
B1:D2C3 70 60                 jnz   B1_D325
B1:D2C3
B1:D2C5 E4                    clr   A
B1:D2C6 FF                    mov   R7, A
B1:D2C7 12 1E D8              lcall B1_BS_240_B3_E9FE
B1:D2C7
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:D2CE
B1:D2D1 7F 12                 mov   R7, #0x12
B1:D2D3 12 1D 5E              lcall B1_BS_177_B3_72CE
B1:D2D3
B1:D2D6 E4                    clr   A
B1:D2D7 90 FC 1F              mov   DPTR, #XRAM_FC1F
B1:D2DA F0                    movx  @DPTR, A
B1:D2DB A3                    inc   DPTR
B1:D2DC 74 02                 mov   A, #2
B1:D2DE F0                    movx  @DPTR, A
B1:D2DF 7B 03                 mov   R3, #3
B1:D2E1 E4                    clr   A
B1:D2E2 FD                    mov   R5, A
B1:D2E3 7F 12                 mov   R7, #0x12
B1:D2E5 12 1D 64              lcall B1_BS_178_B3_C399
B1:D2E5
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:D2EC
B1:D2EF 7F 12                 mov   R7, #0x12
B1:D2F1 12 1D 6A              lcall B1_BS_179_B3_58BA
B1:D2F1
B1:D2F4 7F 12                 mov   R7, #0x12
B1:D2F6 12 1D 70              lcall B1_BS_180_B3_E9AF
B1:D2F6
B1:D2F9 12 E0 FC              lcall B1_E0FC
B1:D2F9
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:D300
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:D313
B1:D316             ; ---------------------------------------------------------------------------
B1:D316
B1:D316             B1_D316:                                ; CODE XREF: *** SUPOSTA *** Video_Play+3 j
B1:D316                                                     ; *** SUPOSTA *** Video_Play+6 j
B1:D316 7F 05                 mov   R7, #5
B1:D318 12 1E 36              lcall B1_BS_213_B6_6CEB
B1:D318
B1:D31B 50 08                 jnc   B1_D325
B1:D31B
B1:D31D 7F 01                 mov   R7, #1
B1:D31F 02 1E 54              ljmp  B1_BS_218_B4_2D0C
B1:D31F
B1:D322             ; ---------------------------------------------------------------------------
B1:D322
B1:D322             B1_D322:                                ; CODE XREF: *** SUPOSTA *** Video_Play+9 j
B1:D322 12 E0 FC              lcall B1_E0FC
B1:D322
B1:D325
B1:D325             B1_D325:                                ; CODE XREF: *** SUPOSTA *** Video_Play+D j
B1:D325                                                     ; *** SUPOSTA *** Video_Play+65 j
B1:D325 22                    ret
B1:D325
B1:D325             ; End of function *** SUPOSTA *** Video_Play
« Última modificação: Janeiro 17, 2008, 10:06:09 am por doctorxyz »

Offline doctorxyz

  • Novato Prolixo
  • **
  • Mensagens: 63
  • Aprovação: +4/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #277 Online: Janeiro 14, 2008, 10:55:03 pm »
estou tentando decifrar o enigma do "div by 4" antes de fechar. O que descobri é que, no firmware baixado do site da Philips esta regra não é atendida, como também não é atendida a regra de inversão das cores da fonte. Outro detalhe importante é que, a Fonte 01 do firmware original possui 279 caracteres, e não 256.

Ronison

Se eu entendi bem, você está amarrando o "bug" ao número de caracteres: Este tem que ser divisível por 4.

Mas pelo que li (posso estar equivocado), o "bug" está relacionado com largura dos caracteres: Isso sim tem que ser divísivel por 4.

Se meu entendimento está correto, então sugiro que não use o MTKReMaker para montar suas fontes, use o MTKFontCreator pois ele é específico para isso.

Neste link aqui (http://board.softpedia.com/lofiversion/index.php/t3474-50.html) juanma76 cita que fontes de 4 cores são ótimas com aparelhos Philips, mas alerta que você deve se assegurar de que a opção "Widths are div. by 4" está selecionada ou marcada, já que RISCs mais novos aceitam apenas fontes que são múltiplas de 4.
Esta opção, informa otuken, é nas configurações do utilitário "MTKFont Creator".
O MtkFontCreator v0.6.12 é encontrado no site do NA (http://newage.mpeg4-players.info/mt1389/tools/MtkFontCreator_0.6.12.rar)
E a opção está em
Font Creation -> Font Character Generation Options -> Widths are div. by 4.

O MTKFontCreator carregou automático como fonte inicial, a Arial Narrow (minha fonte predileta); note que:
- Com a opção desmarcada (é o valor default), a largura máxima é 22.
- Com a opção marcada, a largura máxima aumenta para 24 (número divisível por 4)!
É só olhar na última linha (linha de status), fique marcando e desmarcando a opção e confira.

Espero ter ajudado.

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware MT13x9: Log de Descobertas
« Responder #278 Online: Janeiro 14, 2008, 11:24:05 pm »
Para o problema dos RISC que requerem fontes com largura múltiplo de 4, sugiro que tente o seguinte patch, que apresenta uma solução ao problema, permitindo o uso de fontes de largura livre (bem melhores para legendas). Porém o patch não funciona em todos os RISCs (funcionou no meu do firmware "alternativo": RISC v05.00.05.07).

Funciona comprovadamente nos RISC v05.00.05.07, v05.00.05.09 e v05.00.06.00.

Vou explicar somento o problema mais comun ("tipo1").

Procedimento:

Tipo 1: Somente trocar algums bytes:

Busque:
04 93 01 23 09 9D 10 9A E8 18 40 08 40 06 06 0E 06 96 02 93

Troque por:
09 9D 04 93 E8 1C 80 08 80 06 06 0E 01 23 10 9A 02 93 06 96

O problema "tipo 2" apresentado en algums players (exemplo: Medion MD-80796) e mais complicado. Requer redimensionar os ArmCodes, adicionar código novo em espaço livre e fazer os saltos ao novo código...

Saudações!
Juan M. Araújo


PS: Aclaração...

Neste link aqui (http://board.softpedia.com/lofiversion/index.php/t3474-50.html) juanma76 cita que fontes de 4 cores são ótimas com aparelhos Philips, mas alerta que você deve se assegurar de que a opção "Widths are div. by 4" está selecionada ou marcada, já que RISCs mais novos aceitam apenas fontes que são múltiplas de 4.

O texto: "'Four color' fonts are fine with Philips players... Just be sure that you have the "Widths are div. by 4" selected (activated or marked)..." era em resposta a um usuario que indicava que tinha que se usar as fontes em "old-compatibility mode". Foi um mal entendido, eu achei que ele estava falando da primeira opção: fontes de duas cores. Daí a minha resposta (eu sou "juanma76"  :P) que fontes de quatro cores funcionavam bem...

Offline ronison

  • Novato
  • *
  • Mensagens: 14
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #279 Online: Janeiro 15, 2008, 12:03:14 am »
Olá Pessoal,

    Pra falar a verdade jpa consegui fazer o player funcionar com fontes sem o "div by 4". Fiz vários tipos de testes. Em grande parte deles o que ocorreu foi que os textos do Setup simplesmente sumiram. Mas já estou contornando a situação. Consegui fazer com que tudo funcionasse a contento, e o player ficou com 5 fontes selecionáveis. Porém, fiz uma besteira no 8032 e o player faleceu. Agora tenho que ressussitá-lo para continuar com os testes e experimentos (estou a procura do conector de 4 pinos para a porta serial do aparelho).

Offline doctorxyz

  • Novato Prolixo
  • **
  • Mensagens: 63
  • Aprovação: +4/-0
    • Ver Perfil
Sobre Carregamento automático de legendas no DVP5965K/55
« Responder #280 Online: Janeiro 16, 2008, 11:57:54 am »
jmaraujo,

Caso tenha disponibilidade, poderia me ajudar em alguma destas "missões" que postei acima?
Ficaria muito grato... Estou super empolgado tentando fazer o meu primeiro hack, mas confesso que está difícil... Até coloquei os códigos do firmware do hej546 e o do meu player (Firmware DVP5965K v2.2b by naasom -v.Packet Bitstream postado no htforum em 18.12.2007) lado a lado no Excel, mas não está adiantando. O código é diferente, não acho os padrões.

- Missão 1: Achar a rotina GetFileType do DVP5965K/55
- Missão 2: Achar os ponteiros (words de 2 bytes) que indicam onde fazer as chamadas quando o tipo de mídia é MPG (byte 09) e quando é AVI (byte 12) do DVP5965K/55
- Missão 3: Achar a rotina Video_play do DVP5965K/55

Grato

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Sobre Carregamento automático de legendas no DVP5965K/55
« Responder #281 Online: Janeiro 16, 2008, 02:54:53 pm »
jmaraujo,

Caso tenha disponibilidade, poderia me ajudar em alguma destas "missões" que postei acima?
Ficaria muito grato... Estou super empolgado tentando fazer o meu primeiro hack, mas confesso que está difícil... Até coloquei os códigos do firmware do hej546 e o do meu player (Firmware DVP5965K v2.2b by naasom -v.Packet Bitstream postado no htforum em 18.12.2007) lado a lado no Excel, mas não está adiantando. O código é diferente, não acho os padrões.

- Missão 1: Achar a rotina GetFileType do DVP5965K/55
- Missão 2: Achar os ponteiros (words de 2 bytes) que indicam onde fazer as chamadas quando o tipo de mídia é MPG (byte 09) e quando é AVI (byte 12) do DVP5965K/55
- Missão 3: Achar a rotina Video_play do DVP5965K/55

Claro. Me passe o link para download do seu firmware para que eu possa dar uma olhada.

Você já viu o meu post no fórum do DVP5100? (É mais completo que o que eu postei no MT13x9)

Mas para ir adiantando o assunto:

Para achar GetFileType, busque "EF 75 F0 10 A4 24 ? FF E5 F0 34 ? FE 12 ? ? EF 12"

Para achar Video_Play, busque "EF 24 FE 60 ? 14 60 ? 24 02 70 ? 74 FF 90 ? ? F0 A3 F0 90 ? ? F0 A3 F0 C2 ? 12"
ou
"EF 24 FE 60 ? 14 60 ? 24 02 70 ? 74 FF 90 ? ? F0 A3 F0 90 ? ? F0 A3 F0 C2 ? 02"

A única diferença entre as duas seqüencias para achar Video_Play e que uma faz um ljmp ("02") para a rotina "Start_Playback" e a outra faz um lcall ("12").

Saudações!

Offline doctorxyz

  • Novato Prolixo
  • **
  • Mensagens: 63
  • Aprovação: +4/-0
    • Ver Perfil
Re: Sobre Carregamento automático de legendas no DVP5965K/55
« Responder #282 Online: Janeiro 16, 2008, 07:27:40 pm »
jmaraujo,

Caso tenha disponibilidade, poderia me ajudar em alguma destas "missões" que postei acima?
Ficaria muito grato... Estou super empolgado tentando fazer o meu primeiro hack, mas confesso que está difícil... Até coloquei os códigos do firmware do hej546 e o do meu player (Firmware DVP5965K v2.2b by naasom -v.Packet Bitstream postado no htforum em 18.12.2007) lado a lado no Excel, mas não está adiantando. O código é diferente, não acho os padrões.

- Missão 1: Achar a rotina GetFileType do DVP5965K/55
- Missão 2: Achar os ponteiros (words de 2 bytes) que indicam onde fazer as chamadas quando o tipo de mídia é MPG (byte 09) e quando é AVI (byte 12) do DVP5965K/55
- Missão 3: Achar a rotina Video_play do DVP5965K/55

Claro. Me passe o link para download do seu firmware para que eu possa dar uma olhada.

Você já viu o meu post no fórum do DVP5100? (É mais completo que o que eu postei no MT13x9)

Mas para ir adiantando o assunto:

Para achar GetFileType, busque "EF 75 F0 10 A4 24 ? FF E5 F0 34 ? FE 12 ? ? EF 12"

Para achar Video_Play, busque "EF 24 FE 60 ? 14 60 ? 24 02 70 ? 74 FF 90 ? ? F0 A3 F0 90 ? ? F0 A3 F0 C2 ? 12"
ou
"EF 24 FE 60 ? 14 60 ? 24 02 70 ? 74 FF 90 ? ? F0 A3 F0 90 ? ? F0 A3 F0 C2 ? 02"

A única diferença entre as duas seqüencias para achar Video_Play e que uma faz um ljmp ("02") para a rotina "Start_Playback" e a outra faz um lcall ("12").

Saudações!

Mestre jmaraujo,

Acabei de ler e testar suas dicas daqui e do documento do forum DVP5100. Mesmo assim não consigo achar GetFileType e Video_Play com as sequências de busca informadas.

Nem no firmware modificado que estou usando...

(naasom, publicado no HT Forum em 18.12.2007, e baseado na v2.2 Packet Bitstream do Eneris
http://www.4shared.com/file/32413050/81d9a4b2/DVP5965K_93GOTO_PB.html?dirPwdVerified=67cd922f


...tampouco no firmware original da Philips...
https://www.p4c.philips.com/cgi-bin/dcbint/eula.pl?slg=BRP&link=https://www.p4c.philips.com/files/d/dvp5965k_55/dvp5965k_55_fus_eng.zip

:-( .......

Bom, os links de ambos firmwares estão funcionando. Se puder dar uma "olhadinha"...

Offline doctorxyz

  • Novato Prolixo
  • **
  • Mensagens: 63
  • Aprovação: +4/-0
    • Ver Perfil
RESOLVIDO! Philips DVP5965K_55 - Carregamento Automático de Legendas
« Responder #283 Online: Janeiro 20, 2008, 06:33:34 pm »
Ryan,

O que prefere, quando eu terminar a documentação das explicações (semana que vem)? Posto aqui ou em separado?

JMAraujo,

Não precisa mais esquentar a cabeça sobre o assunto carregamento automático de legendas no 5965K/55: Mistério resolvido!

Já achei as rotinas, o que era o mais difícil (elas não são descobertas pelas sequências de busca convencionais, tem que analisar código 8032 mesmo)...

Peguei o seu guia, entitulado "Carga automática de subtítulos (feito em cima daquele do hej456, porém mais completo e recente)", postado em http://www.forodvp5100.com.ar/viewtopic.php?f=16&t=591&sid=bfc4e9bfe41c1738f3b36daa306162a7

...e adaptei com as informações abaixo.

Fiz um patch beta - só para testar mesmo - alterando 5 bytes e funcionou (avi's carregam legenda automática, o único problema em potencial já que não pude testar - só li a teoria e apliquei - é que os arquivos DMF i.e. divx Ultra ficariam sem opção de seleção de legenda no menu interno).

E agora há pouco fiz o patch definitivo (muito mais trabalhoso, para endereçar a questão DMF adequadamente e pelo fato da rotina FileGetType ser diferente dos outros aparelhos), fiz o teste, funcionou e compartilho aqui (veja detalhes das rotinas no rodapé desta mensagem):

PASSO-A-PASSO

(Obs.: Ninguém é obrigado a usar os utilitários informados aqui)

- Executar o MTK ReMaker 0.2 (8 )

- Abrir o firmware-base (7) e no extrair o código 8032 e o ARM Code 1 dele
(opção File -> Open e MT13X9 -> Code Part -> 8032 -> Botão Direito -> Save)
e Code Part -> RISC -> ARM Codes -> ARM Code 1 -> Botão Direito -> Save)

- Executar o XVI32 2.51 (9)

- Abrir o bloco 1 do código ARM
 (opção File -> Open)

- Alterar um byte em B4:A996 (Está dentro da tabela de tipos de mídia do ARM Code)
 (opção Address -> Go to -> $4A996)

      De   12

      Para   09

- Salvar o bloco 1 do código ARM alterado com outro nome
  (opção File -> Save As)

- Fechar o bloco 1 do código ARM
 (opção File -> Close)

- Abrir o código 8032
 (opção File -> Open)

- Alterar 3 bytes em B4:D511 (Dentro da rotina GetFileType)
 (opção Address -> Go to -> $4D511)

      De   7F 04      mov   R7, #4
         22

      Para   02 FB 2C   ljmp  DMF_or_AVI

- Alterar 4 bytes em B4:FB2C (Criar rotina DMF_or_AVI onde só havia FF)
 (opção Address -> Go to -> $4FB2C)

      De   FF FF FF FF

      Para   24 08      add   A, #8
         70 10      jnz   B4_B1AVI_Counter

- Alterar 6 bytes em B4:FB30 (Criar rotina B4_B1DMF_Counter onde só havia FF)
 (opção Address -> Go to -> $4FB30)

      De   FF FF FF FF FF FF

      Para   90 FA F0   mov   DPTR, #DMF_Counter
         02 18 8F   ljmp  B4_Bank_1

- Alterar 6 bytes em B4:FB40 (Criar rotina B4_B1AVI_Counter onde só havia FF)
 (opção Address -> Go to -> $4FB40)

      De   FF FF FF FF FF FF

      Para   90 FB 00   mov   DPTR, #AVI_Counter
         02 18 8F   ljmp  B4_Bank_1

- Alterar 3 bytes em B1:D313 (Dentro da rotina Video_Play)
 (opção Address -> Go to -> $1D313)

      De   02 1D 1C   ljmp  B1_B4Playback_start

      Para   02 FB 10   ljmp  Autopress_subtitle

- Alterar 12 bytes em B1:FAF0 (Criar rotina DMF_Counter onde só havia FF)
 (opção Address -> Go to -> $1FAF0)

      De   FF FF FF FF FF FF FF FF FF FF FF FF

      Para   7F C4      mov   R7, #0xC4 ; '-'
         7E 13      mov   R6, #0x13
         7D 01      mov   R5, #1
         12 1B 96   lcall B1_B0Arm_PutChar
         74 04      mov   A, #4
         22      ret

- Alterar 12 bytes em B1:FB00 (Criar rotina AVI_Counter onde só havia FF)
 (opção Address -> Go to -> $1FB00)

      De   FF FF FF FF FF FF FF FF FF FF FF FF

      Para   7F C4      mov   R7, #0xC4 ; '-'
         7E 13      mov   R6, #0x13
         7D 00      mov   R5, #0
         12 1B 96   lcall B1_B0Arm_PutChar
         74 04      mov   A, #4
         22      ret

- Alterar 19 bytes em B1:FB10 (Criar rotina Autopress_subtitle onde só havia FF)
 (opção Address -> Go to -> $1FB10)

      De   FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

      Para   12 1D 1C   lcall B1_B4Playback_start
         7F C4      mov   R7, #0xC4 ; '-'
         7E 13      mov   R6, #0x13
         12 1B 84   lcall B1_B0Arm_PutChar
         EF      mov   A, R7
         64 01      xrl   A, #1
         60 03      jz    B1_FB22
         02 2C 28   ljmp  B1_B1Subtitle_loading
         22      ret

- Salvar o código 8032 alterado com outro nome
  (opção File -> Save As)

- Fechar o código 8032
 (opção File -> Close)

- Executar o MtkReplacer v0.5 (10)

- Criar uma nova versão de firmware a partir do firmware-base (7) (input firmware) e a alteração no código 8032 (8032 Block) que acaba de ser feita pelo XVI32
  Proceder nesta ordem
  1o. Input firmware -> informar o caminho e o nome do firmware-base (7)
  2o. 8032 Block -> informar o caminho e nome do código 8032 que acaba de ser alterado
  3o. ARM Code 1 (uncompressed) -> informar o caminho e nome do bloco 1 do código ARM que acaba de ser alterado
  4o. Output firmware -> É sugerido um nome para o novo firmware, porém (importante!) informe nome DVP5965K_93.BIN e numa pasta em separado.
  5o. Clicar em Replace   

- Executar o DeepBurner Free Portable 1.8 (10), visando obter um CD de dados monosessão com um arquivo somente, nome em maiúsculas DVP5965K_93.BIN. Todas as letras em maíusculo, se não tiver este cuidado, ao inserir no DVD Player o CD não reconhecido(Aparecerá a mensagem "Disco Desconhecido"):

- Colocar uma mídia CD-R ou CD-RW virgem (e de qualidade) no gravador de CD

- Criar CD de dados monosessão
   Select project type: -> Project type: -> Create data CD/DVD -> Next ->
   New Project: -> Multisession: -> No Multissession -> Next ->

- Selecionar ícone CDRoot

- Teclar F2 (Change volume label) -> Informe DOCTORXYZ1.1 (para fins de controle de versão)

- Clicar no ícone Add files -> localizar e selecionar o novo firmware DVP5965K_93.BIN
(se não estiver com este nome, renomeio agora. Tudo deve estar em maiúsculas, inclusive a extensão)

- Clicar no item Burn Disk -> Speed -> Selecionar a menor velocidade possível

- Clicar em Burn

- Atualizar o firmware colocando o CD de dados no DVD Player, confirmar a atualização apertando a tecla Play, retirar o CD na hora informada e esperar alguns minutos. Durante a atualização do firmware, não mexer nem desligar o aparelho, senão você poderá ter problemas. Caso isso ocorra, você deverá providenciar um cabo de dados para recuperá-lo. (12)

-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-

Não fiz o upload do novo firmware por uma questão de tempo e saco, quem quiser fazê-lo fique à vontade, só não esqueça de citar o novato aqui ;-)

Ainda esta semana devo postar as instruções detalhadas de como cheguei até aqui.

Saudações!

doctorxyz

PS: Críticas ***construtivas*** sempre são bem-vindas!

-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-

Rotinas 8032(nome, localização e breve descrição) - Philips DVP5965K/55

Remote_DivXplayback   B4:5F6D -> Chama a função correspondente ao botão pressionado

Tecla29      B4:5FE8 -> Trata-se de uma palavra (dois bytes) contendo o endereço da rotina DivX_Tecla29 (B4:618F) e um byte com o código do botão subtitle (0x29)

DivX_Tecla29   B4:618F -> Chama B4_B1Subtitle_loading

GetFileType      B4:D4D7 -> Obtêm o código de tipo de mídia no ARM (13)

B4_B0Arm_GetChar   B4:1B84 -> Chaveia o 8032 do bloco 4 para 0 e chama Arm_GetChar

B1_B0Arm_GetChar   B1:1B84 -> Chaveia o 8032 do bloco 1 para 0 e chama Arm_GetChar

Arm_GetChar      B0:E8BB -> Obtêm um caractere

B4_B0Arm_PutChar   B4:1B96 -> Chaveia o 8032 do bloco 4 para 0 e chama Arm_PutChar

B1_B0Arm_PutChar   B1:1B96 -> Chaveia o 8032 do bloco 1 para 0 e chama Arm_PutChar

Arm_PutChar      B0:EBEF -> Armazena um caractere

Video_play      B1:D2B6   -> No endereço B1:D313, executa lcall B1_B3Playback_start

B1_B4Playback_start   B1:1D1C   -> Chaveia o 8032 do bloco 1 para 4 e chama Playback_start

Playback_start      B4:ABBB -> Inicia a reprodução

B4_B1Subtitle_loading   B4:2C28 -> Chaveia o 8032 do bloco 4 para 1 e chama Subtitle_loading

B1_B1Subtitle_loading   B1:2C28 -> Chaveia o 8032 do bloco 1 para 1 e chama Subtitle_loading (só não entendi porque chavear blocos, se não precisa!)

Subtitle_loading   B1:C619 -> Produz o mesmo efeito do pressionamento da tecla subtitle

DMF_or_AVI      B4:FB2C -> Decide qual contador (AVI ou DMF) utiliza em função do valor do acumulador que recebe de GetFileType

B4_B1DMF_Counter   B4:FB30 -> Chaveia o 8032 do bloco 4 para 1 e chama DMF_Counter

B4_B1AVI_Counter   B4:FB40 -> Chaveia o 8032 do bloco 4 para 1 e chama AVI_Counter

DMF_Counter      B1:FAF0 -> Sinaliza num flag que o arquivo é DMF.

AVI_Counter      B1:FB00 -> Sinaliza num flag que o arquivo é AVI.

Autopress_subtitle    B1:FB10 -> Lê o flag (preenchido por DMF_Counter ou AVI_Counter). Se for arquivo AVI, carrega a legenda antes de reproduzí-lo.


Tabela de tipos de mídia no ARM Code – Philips DVP5965K/55
Começa em ARM Code 1, ROM:0004A8FC. Os tipos que interessam:

ROM:0004A93B 09 03 4D 50 47 00 00 MPG
...
ROM:0004A957 09 03 4D 50 45 00 00 MPE
ROM:0004A95E 09 03 4D 31 56 00 00 M1V
ROM:0004A965 09 03 4D 32 56 00 00 M2V
...
ROM:0004A97A 09 04 4D 50 45 47 00 MPEG
...
ROM:0004A996 12 03 41 56 49 00 00 AVI
ROM:0004A99D 12 03 56 49 44 00 00 VID
ROM:0004A9A4 12 04 44 49 56 58 00 DIVX
ROM:0004A9AB 12 03 44 49 56 00 00 DIV
ROM:0004A9B2 14 03 4D 50 34 00 00 MP4
ROM:0004A9B9 14 03 4D 34 41 00 00 M4A


-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-

Referências (algumas)

(1) Firmware MT13x9: Log de Descobertas
http://ryan.com.br/smf/index.php?topic=179.0

(2) Smart Loading of text subtitles in DMF (documento do hej456)
http://hej456.fasthoster.de/Smart.Loading.of.subs.in.DMF.zip

(3) Carga automática de subtítulos (documento do jmaraujo, feito em cima daquele do hej456, porém mais completo e recente)
http://www.forodvp5100.com.ar/viewtopic.php?f=16&t=591&sid=bfc4e9bfe41c1738f3b36daa306162a7

(4) Grupo MT13x9
http://tech.groups.yahoo.com/group/mt13x9/

(5) Grupo MEDIATEK1389 (do Cachirulo)
http://tech.groups.yahoo.com/group/MEDIATEK1389/

(6) Firmware Yamada 6700 Hej456.DSP.v5.0a (usado na explicação do documento do hej456)
http://www.hej456.com/forum/docs/Hej456.DSP.v5.0a.1252.zip

(7) Firmware DVP5965K by naasom -v.Packet Bitstream (18.12.2007)
(tem a função GO-TO e foi feito em cima do firmware do Eneris v2.2)
http://www.htforum.com/vb/showthread.php?t=60507&highlight=firmware

(8 ) MTK ReMaker 0.2
http://personal.inet.fi/cool/mediatek/programs/mtkremaker/MTKReMaker023b6.zip

(9) XVI32 2.51
http://www.chmaas.handshake.de

(10) MtkReplacer v0.5
http://newage.mpeg4-players.info/mt1389/tools/MtkReplacer_0.5.rar

(11) DeepBurner Free Portable 1.8
http://www.deepburner.com/

(12) “Ressuscitando” o Player pela Serial
http://ryan.com.br/mtk_porta_serial.htm

(13) Tabela de tipos de mídia no ARM Code
http://ryan.com.br/smf/index.php?PHPSESSID=d842fc529d9bac6e705db40ddd1e9733&topic=179.msg9172607#msg9172607

(14) Scripts IDA do Grupo MT13x9
 http://tech.groups.yahoo.com/group/mt13x9/
(Files -> Disassembling -> !IDA Scripts -> MT1389_8032_ARM_IDA_SCRIPTS_2007.feb.7.RAR)


-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-

Agradecimentos

"Se fui mais longe, é porque me escorei no ombro de gigantes":
Ryan, hej456, JMAraujo, NA, MaBreaker, Eneris, Naasom, cachirulo, grupo MT13x9, grupo MEDIATEK1389.
« Última modificação: Janeiro 27, 2008, 01:07:29 am por doctorxyz »

Offline ronison

  • Novato
  • *
  • Mensagens: 14
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #284 Online: Janeiro 21, 2008, 06:32:29 am »
Dois pontos:

1. A rotina Playback_start (B4:ABBB) é chamada em B1:D313, e não em B1:D2C7, conforme dito.

 e

2.Tem uma coisa aqui que eu não entendi:

ROM:FAF0 7F C4          mov   R7, #0xC4 ; '-'
ROM:FAF2 7E 13          mov   R6, #0x13
ROM:FAF4 7D 01          mov   R5, #1
ROM:FAF6 12 05 F5       lcall Arm_PutChar

Como  é que se coloca algo no endereço 0x13C4...

ROM:FB13 7F 46          mov   R7, #0x46 ; 'F'
ROM:FB15 7E 00          mov   R6, #0x00
ROM:FB17 12 04 7B       lcall Arm_GetChar

E depois lê do endereço 0x46? Alguem sabe explicar isso?

No mais, parabéns pelo trabalho doctorxyz.
« Última modificação: Janeiro 21, 2008, 06:59:20 am por ronison »

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware MT13x9: Log de Descobertas
« Responder #285 Online: Janeiro 21, 2008, 11:47:09 am »
Você está absolutamente certo, ronison.

Foi um error do Hej456 mesmo (eu nunca tinha percebido isso antes). Veja no documento do proprio Hej456:

ROM:0C13             play + press subtitle if avi:
ROM:0C13 12 A4 AD              lcall ROM_A4AD           ;the call that starts playback.
ROM:0C16 7F 46                 mov   R7, #0xC4 ; '-'
ROM:0C18 7E 00                 mov   R6, #13            ;get counter from shared memory
ROM:0C1A 12 F4 EF              lcall ARM_GetChar
ROM:0C1A
ROM:0C1D EF                    mov   A, R7
ROM:0C1E 64 01                 xrl   A, #1              ;if counter = 1 (divx)
ROM:0C20 60 03                 jz    ROM_C25            ;return
ROM:0C22 02 0B DD              ljmp  BS:382_B1:B753     ;else “press subtitle button”
ROM:0C25             ROM_C25:
ROM:0C25 22                    ret


Não coincide o disassembly (em azul) com os opcodes (vermelho).

Eu cometí o mesmo erro no meu firmware. Vou consertar agora mesmo.

Saudações!
« Última modificação: Janeiro 21, 2008, 11:53:18 am por jmaraujo »

Offline doctorxyz

  • Novato Prolixo
  • **
  • Mensagens: 63
  • Aprovação: +4/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #286 Online: Janeiro 21, 2008, 03:34:20 pm »
1. A rotina Playback_start (B4:ABBB) é chamada em B1:D313, e não em B1:D2C7, conforme dito.
Ronison,

Tem razão quanto ao endereço de chamada para Playback_start dentro da Video_Play

Já atualizei o texto no post principal (abaixo, colocos os detalhes a quem interessar possa):

Excluí a parte:
"- Alterar 2 bytes em B1:D2C8 (Dentro da rotina Video_Play)
 (opção Address -> Go to -> $1D2C8)

      De   1E D8

      Para   FB 10"

E coloquei em seu lugar:
"- Alterar 2 bytes em B1:D314 (Dentro da rotina Video_Play)
 (opção Address -> Go to -> $1D314)

      De   1D 1C

      Para   FB 10"



Excluí a parte:
"
- Alterar 19 bytes em B1:FB10 (Criar rotina Autopress_subtitle onde só havia FF)
 (opção Address -> Go to -> $1FB10)

      De   FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
      Para   12 1E D8
         7F C4
         7E 13
         12 1B 84
         EF
         64 01
         60 03
         02 2C 28
         22"

E coloquei em seu lugar:
"- Alterar 19 bytes em B1:FB10 (Criar rotina Autopress_subtitle onde só havia FF)
 (opção Address -> Go to -> $1FB10)

      De   FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
      Para   12 1D 1C
         7F C4
         7E 13
         12 1B 84
         EF
         64 01
         60 03
         02 2C 28
         22"


Excluí a parte:
"Video_play      B1:D2B6   -> No endereço B1:D2C7, executa lcall B1_B3Playback_start

B1_B3Playback_start   B1:1ED8   -> Chaveia o 8032 do bloco 1 para 3 e chama Playback_start

Playback_start      B3:E9FE -> Inicia a reprodução
"

E coloquei em seu lugar:
"Video_play      B1:D2B6   -> No endereço B1:D313, executa lcall B1_B3Playback_start

B1_B4Playback_start   B1:1D1C   -> Chaveia o 8032 do bloco 1 para 4 e chama Playback_start

Playback_start      B4:ABBB -> Inicia a reprodução"

2.Tem uma coisa aqui que eu não entendi:

ROM:FAF0 7F C4          mov   R7, #0xC4 ; '-'
ROM:FAF2 7E 13          mov   R6, #0x13
ROM:FAF4 7D 01          mov   R5, #1
ROM:FAF6 12 05 F5       lcall Arm_PutChar

Como  é que se coloca algo no endereço 0x13C4...

ROM:FB13 7F 46          mov   R7, #0x46 ; 'F'
ROM:FB15 7E 00          mov   R6, #0x00
ROM:FB17 12 04 7B       lcall Arm_GetChar

E depois lê do endereço 0x46? Alguem sabe explicar isso?

Você está absolutamente certo, ronison.

Foi um error do Hej456 mesmo (eu nunca tinha percebido isso antes). Veja no documento do proprio Hej456:

ROM:0C13             play + press subtitle if avi:
ROM:0C13 12 A4 AD              lcall ROM_A4AD           ;the call that starts playback.
ROM:0C16 7F 46                 mov   R7, #0xC4 ; '-'
ROM:0C18 7E 00                 mov   R6, #13            ;get counter from shared memory
ROM:0C1A 12 F4 EF              lcall ARM_GetChar
ROM:0C1A
ROM:0C1D EF                    mov   A, R7
ROM:0C1E 64 01                 xrl   A, #1              ;if counter = 1 (divx)
ROM:0C20 60 03                 jz    ROM_C25            ;return
ROM:0C22 02 0B DD              ljmp  BS:382_B1:B753     ;else “press subtitle button”
ROM:0C25             ROM_C25:
ROM:0C25 22                    ret


Não coincide o disassembly (em azul) com os opcodes (vermelho).

Eu cometí o mesmo erro no meu firmware. Vou consertar agora mesmo.

ronison e jmaraujo,

Obrigado pelo toque. Já consertei o meu texto lá em cima, conforme indicado abaixo:

"- Alterar 19 bytes em B1:FB10 (Criar rotina Autopress_subtitle onde só havia FF)
 (opção Address -> Go to -> $1FB10)


      De   FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
      Para   12 1E D8
         7F C4 <------------------------------------Consertado; antes, estava 46
         7E 13 <------------------------------------Consertado; antes, estava 00
         12 1B 84
         EF
         64 01
         60 03
         02 2C 28
         22

(...)"

ronison,

Consertei um bug - Não tinha feito corretamente o teste de mesa na sequência de comparações 8032 que se iniciam na GetFileType (B4:D4D7) a partir de B4:D4E8 e terminam em B4:D509.
Agora está assim: GetFileType, em B4:D511 desvia para DMF_or_AVI (localizada em B4:FB2C). A rotina DMF_or_AVI decide para se vai desviar para AVI_counter (B4:FB40) ou para DMF_counter (B4:FB30), que está imediatamente no byte seguinte, em função do conteúdo do acumulador:
- quando o código de mídia é 0x9 (mpeg/avi) -> acumulador = 0xFD
- quando o código de mídia é 0x12 (DMF=.divx) -> acumulador = 0xF8
« Última modificação: Janeiro 22, 2008, 03:53:24 pm por doctorxyz »

Offline ronison

  • Novato
  • *
  • Mensagens: 14
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #287 Online: Janeiro 21, 2008, 05:32:50 pm »
Temos algo estranho nesta função DMF_or_AVi:

24 08   ADD A, #0x08   ;Adiciona o valor 8 ao acumulador (qual seria o valor anterior?)
70 10   JNZ 10      ;Sempre salta para o endereço FB3E (FB2E + 0x10). O que tem neste endereço? Onde está a decisão de DMF ou AVI?


Abraço,
« Última modificação: Janeiro 21, 2008, 05:34:42 pm por ronison »

Offline doctorxyz

  • Novato Prolixo
  • **
  • Mensagens: 63
  • Aprovação: +4/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #288 Online: Janeiro 21, 2008, 07:35:37 pm »
Temos algo estranho nesta função DMF_or_AVi:

24 08   ADD A, #0x08   ;Adiciona o valor 8 ao acumulador (qual seria o valor anterior?)
70 10   JNZ 10      ;Sempre salta para o endereço FB3E (FB2E + 0x10). O que tem neste endereço? Onde está a decisão de DMF ou AVI?


Abraço,


Os valores anteriores do acumulador que podem chegar neste trecho de código é um destes aqui:
Acumulador = 0xFD -> chega assim quando o código de mídia é 0x09 (mpeg/avi)
Acumulador = 0xF8 -> chega assim quando o código de mídia é 0x12 (DMF=.divx)

Mestre Ronison,

Conferi no IDA Pro!

Na rotina DMF_or_AVI, no endereço B4:FB2E, o op code correto para jnz B4_FB40 é 70 10 mesmo.

É um salto para B4_B1_AVI_counter (B4:FB40).

A decisão de DMF ou AVI, vem quando somamos 0x08 ao acumulador e ele retorna flag "Zero" ou "Not Zero".

Exemplo1: Se chegar 0xF8, o código de mídia é 0x12 (DMF=.divx). 0xF8 + 0x08 = 0x00, ativando flag "Zero" e "Carry"("vai um"). Neste caso a jnz (Jump Not Zero) é ignorada e passamos para o próximo endereço de execução onde está B4_B1DMF_counter(FB30).

Exemplo1: Se chegar 0xFC, o código de mídia é 0x09 (mpeg/avi). 0xFC + 0x08 = 0x04, ativando flag "Not Zero" e "Carry"("vai um"). Neste caso a jnz (Jump Not Zero) é executada e passamos para endereço de execução onde está B4_B1AVI_counter(FB40).

Esta correção fiz após o teste de mesa (planilha Excel aqui anexa, tem a macro GetFileType dentro para testar o valor de entrada que quiser nela) na sequência de comparações 8032 que se iniciam na GetFileType (B4:D4D7) a partir de B4:D4E8 e terminam em B4:D509.

Por isso agora está assim: GetFileType, em B4:D511 desvia para DMF_or_AVI (localizada em B4:FB2C). A rotina DMF_or_AVI decide para se vai desviar para AVI_counter (B4:FB40) ou para DMF_counter (B4:FB30), que está imediatamente no byte seguinte, em função do conteúdo do acumulador:

Se tiver mais dúvidas, é só perguntar.

Saudações!
« Última modificação: Janeiro 22, 2008, 01:05:57 pm por doctorxyz »

Offline doctorxyz

  • Novato Prolixo
  • **
  • Mensagens: 63
  • Aprovação: +4/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #289 Online: Janeiro 22, 2008, 01:20:14 pm »
Ronison,

Por uma questão de controle de versões (e desencargo de consciência) faça um favor:

Certifique-se que no endereço B4:D517 (Dentro da rotina GetFileType) estão os op codes 7F 00 22.

É que tinha dito numa versão anterior do meu post
"- Alterar 3 bytes em B4:D517 (Dentro da rotina GetFileType)
 (opção Address -> Go to -> $4D517)

      De   7F 00
         22

      Para   02 FB 30"

Pois é, esqueça disso... Reverta! Tem que permanecer inalterado, ou seja, em B4:D517 (Dentro da rotina GetFileType) devem permanecer op codes 7F 00 22.

Poderia confirmar que leu?

Para evitarmos problemas no nosso glorioso firmware.

Grato!

Offline ronison

  • Novato
  • *
  • Mensagens: 14
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #290 Online: Janeiro 22, 2008, 03:07:31 pm »
Olá doctorxyz,

   Eu já tinha feito assim.  ;)

Abraço,

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware MT13x9: Log de Descobertas
« Responder #291 Online: Fevereiro 06, 2008, 10:21:01 pm »
Jefferson, para responder a sua pergunta no tópico de desenvolvimento do firmware do Proview DVP816, fui dar uma olhada nas minhas anotações e no firmware do DVP5100 e achei um tipo de menú bem interessante: 0014.

Nas minhas anotações ainda não tinha identificado este tipo de menú. Agora estou achando que é um tipo de link especial que permite chamar um (sub)menú desde as opções de escolha de um outro (sub)menú, em lugar de ser chamado desde um (sub)menú.

Por exemplo, no DVP5100, dentro do menú de ajustes de cores ha quatro opções de escolha: Standard, Bright, Soft e Personal (mas este último não é uma opção, mas um link)



  4. No Pic. | Picture Setting | Picture Setting
     0008 FFFF 04E9 04E9 005C 0000 0003 0000 FF3D05 0A7B - ROM:3D11
 => 1. Standard | Standard | [00]
       04BE 04BE 0561 00 - ROM:3CE9
    2. Bright | Bright | [00]
       048F 048F 0561 01 - ROM:3CF0
    3. Soft | Soft | [00]
       04BF 04BF 0561 02 - ROM:3CF7
    4. Personal | Go To Personal Page | [00]
       04EB 0553 0561 03 - ROM:3CFE

Seguindo o link do "Personal" temos a página de configuração de brilho, contraste, etcétera.

23. [00] | Personal Picture Setup
   02 0561 04EC 05 FF3525 0000 - ROM:3534
  1. No Pic. | 0 | 0
     0014 FFFF 0000 0000 FFFF 0000 0000 0000 000000 0000 - ROM:2D03


  2. No Pic. | Brightness %f8%11d %f0%3d | Brightness
     000A FFFF 0093 0092 0084 0078 0014 0000 000000 0A51 - ROM:34D1

  3. No Pic. | Contrast %f8%11d %f0%3d | Contrast
     000A FFFF 00CF 00CE 0085 0079 0010 0000 000000 0A51 - ROM:34E6

  4. No Pic. | Saturation %f8%11d %f0%3d | Tint
     000A FFFF 03DD 0181 0088 0043 0009 0000 000000 0A51 - ROM:34FB

  5. No Pic. | Hue %f8%11d %f0%3d | Color
     000A FFFF 0182 03DC 0087 007A 0009 0000 000000 0A51 - ROM:3510

O menú "Personal Picture Setup" tem cinco opções, más somente as quatro que começam com 000A aparecem na tela.

Estou quase certo que o primeiro funciona como link entre a opção "Personal" do menú "Picture Setting", e a página "Personal Picture Setup".

Ainda não conseguí achar uma relaçao entre eles.

A definiçao do menú 0014 está prácticamente vazía: "0014 FFFF 0000 0000 FFFF 0000 0000 0000 000000 0000" -> 0014 tipo de menú, FFFF sem ícone, o segundo FFFF ?????.
« Última modificação: Fevereiro 06, 2008, 10:38:22 pm por jmaraujo »

Offline doctorxyz

  • Novato Prolixo
  • **
  • Mensagens: 63
  • Aprovação: +4/-0
    • Ver Perfil
Re: PUOs - Prohibited User Operations
« Responder #292 Online: Fevereiro 06, 2008, 11:18:30 pm »
o MTKArmResizer não funciona em ARM de 3 códigos, como é o caso do DVP-858.
evb62,

Poderia confirmar e/ou completar esta afirmação?

O MTKArmResizer não funciona em nenhum firmware com três ARM Codes (ARM Code 1, ARM Code 2 e ARM Code 3), ou só não funcionou (empiricamente falando) no firmware do Proview DVP-858?

É que fiquei com a pulga atrás da orelha depois de ler a sua afirmação. O curioso é que no help do MKTArmResizer ele cita o código 3 desta forma:

"ARM Code 1 & 2 [&3]"

Grato

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware MT13x9: Log de Descobertas
« Responder #293 Online: Fevereiro 07, 2008, 02:35:18 am »
O MTKWindows (0.8.3.) não "suporta" janelas de 256 cores... Estou modificando o firmware (quero liberdade para escolher as cores do ícones) e o MTK Windows mostra isto (somente 20 cores):



Vou ter que por as cores individualmente, mas não entendo a lógica detrás da conversão bytes->cor. Até agora somente sei que Magenta é "FF FF".

Será possivel agrandar esa janela com um resource editor?

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #294 Online: Fevereiro 07, 2008, 01:21:12 pm »
O MTKWindows (0.8.3.) não "suporta" janelas de 256 cores... Estou modificando o firmware (quero liberdade para escolher as cores do ícones) e o MTK Windows mostra isto (somente 20 cores):


Antes de comentar sobre esse assunto eu preciso perguntar: Como você chegou a essa janela com 20 células? :blink:


Vou ter que por as cores individualmente, mas não entendo a lógica detrás da conversão bytes->cor. Até agora somente sei que Magenta é "FF FF".

Se tudo o que você precisa é saber o valores, basta usar outro programa do New Age: MtkColorSpace.

Será possivel agrandar esa janela com um resource editor?

Aumentar o tamanho da janela, sim.
Colocar mais células, talvez.
Fazer com que o programa use essas células, nã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 evb62

  • Novato
  • *
  • Mensagens: 14
  • Aprovação: +0/-0
    • Ver Perfil
Re: PUOs - Prohibited User Operations
« Responder #295 Online: Fevereiro 07, 2008, 01:28:46 pm »
Doctorxyz,

Realmente, o arquivo help mais recente, datado de 19/05/2005, menciona ARM de 3 codes. Em minha opinião, a menção não é uma afirmação de que há suporte para isso.

Em 23/05/2005, o NewAge afirmou que o MtkArmResizer e o MtkReplacer ainda não eram compatíveis com arms de 3 codes:
http://tech.groups.yahoo.com/group/mt13x9/message/5675

Quanto ao DVP-858, eu acho que tentei aplicar o MtkArmResizer e não deu certo. Mas é possível que eu nem tenha tentado, porque não liguei o cabo serial no meu aparelho. Faz tempo e não lembro direito. Para dizer a verdade, eu tinha esquecido tudo isso, mas felizmente tenho a assinatura deste tópico para visitá-lo quando há novidades.

o MTKArmResizer não funciona em ARM de 3 códigos, como é o caso do DVP-858.
evb62,
Poderia confirmar e/ou completar esta afirmação?
...
Grato

Offline ronison

  • Novato
  • *
  • Mensagens: 14
  • Aprovação: +0/-0
    • Ver Perfil
Re: PUOs - Prohibited User Operations
« Responder #296 Online: Fevereiro 07, 2008, 03:08:36 pm »
o MTKArmResizer não funciona em ARM de 3 códigos, como é o caso do DVP-858.
evb62,

Poderia confirmar e/ou completar esta afirmação?

O MTKArmResizer não funciona em nenhum firmware com três ARM Codes (ARM Code 1, ARM Code 2 e ARM Code 3), ou só não funcionou (empiricamente falando) no firmware do Proview DVP-858?

É que fiquei com a pulga atrás da orelha depois de ler a sua afirmação. O curioso é que no help do MKTArmResizer ele cita o código 3 desta forma:

"ARM Code 1 & 2 [&3]"

Grato
Doctorxyz,

   Estou usando a área de mensagens de erro para trabalhar códigos no ARM. Certamente você já deve saber, mas isto dispensa o Resizer.

Abraço,

Offline doctorxyz

  • Novato Prolixo
  • **
  • Mensagens: 63
  • Aprovação: +4/-0
    • Ver Perfil
Re: PUOs - Prohibited User Operations
« Responder #297 Online: Fevereiro 07, 2008, 03:33:10 pm »

Doctorxyz,

   Estou usando a área de mensagens de erro para trabalhar códigos no ARM. Certamente você já deve saber, mas isto dispensa o Resizer.

Abraço,
[/quote]

Legal Ronison,

Que bom que você já está conseguindo se virar com esta área.

Desabafo: Como ARM é bem mais complicado que 8051 hein!

Será que a gente conseguiria neste espaço alocar (no Philips 5965K/55) nomes longos a partir da USB + Word Wrap (algoritmo Danny Moroz) sem perder nenhuma funcionalidade (principalmente o HDMI)?

Bom, vou seguir a minha pesquisa sobre MtkArmResizer em paralelo, pode ser útil em algum momento para nós (ou para alguém da comunidade).

Estou querendo contribuir e documentar o Word Wrap com algoritmo Danny Moroz para a comunidade.

Caso seu word wrap seja Danny Moroz, esteja pronto e você tenha tempo (e não seja um incômodo) poderia disponibilizar as dicas no tópico específico que abri para isso neste fórum, dentro da seção Philips 5965K/55?

Obrigado

Offline doctorxyz

  • Novato Prolixo
  • **
  • Mensagens: 63
  • Aprovação: +4/-0
    • Ver Perfil
Re: PUOs - Prohibited User Operations
« Responder #298 Online: Fevereiro 07, 2008, 03:35:40 pm »
Quanto ao DVP-858, eu acho que tentei aplicar o MtkArmResizer e não deu certo. Mas é possível que eu nem tenha tentado, porque não liguei o cabo serial no meu aparelho. Faz tempo e não lembro direito. Para dizer a verdade, eu tinha esquecido tudo isso, mas felizmente tenho a assinatura deste tópico para visitá-lo quando há novidades.
evb62,

Obrigado pelo seu pronto retorno. É, o NewAge deve ter feito uma versão melhorada depois disso.

Amigos,

Diante do exposto pelo colega evb62 e dos testes que acabei de fazer (abaixo), ao que tudo indica o MtkArmResizer "não gosta" - pelo menos parcialmente - dos firmwares do Proview DVP-858.

No MtkArmResizer, temos 4 opções de análise (o NA por algum motivo considera a opção 4 a mais indicada), são elas:
- Opção 1:32bit values
- Opção 2:code search
- Opção 3:code search + 32bit values
- Opção 4:code search + 32bit values at ARM1 end

Abrindo os binários dos "ARM Codes" no MtkArmResizer, notem o que constatei.

No Proview DVP-858 nos firmwares...
- Proview DVP-858 v20.06 (Original)
        Version: 05.00.06.05
   Block 1 Size: 0x000536F8
   Block 2 Size: 0x00024AFC
   Block 3 Size: 0x000228B4
     Total Size: 0x0009AAA8
      File Size: 0x0009AAA8

- Proview DVP-858 v20.07 (Original)
        Version: 05.00.06.05
   Block 1 Size: 0x00054F18
   Block 2 Size: 0x0002574C
   Block 3 Size: 0x000227D4
     Total Size: 0x0009CE38
      File Size: 0x0009CE38

- Proview DVP-858 v3.0 (Eneris)
        Version: 05.00.06.05
   Block 1 Size: 0x00054F18
   Block 2 Size: 0x0002574C
   Block 3 Size: 0x000227D4
     Total Size: 0x0009CE38
      File Size: 0x0009CE38

...as opções 1 e 3 não dão erro, já nas opções 2 e 4 aparece o erro "List index of bounds (0)".

No Philips DVP-5965K/55, nos firmwares...
- Philips DVP5965K/55 V.93.06.37.34 (Original)
        Version: 05.00.06.05
   Block 1 Size: 0x0004FDEC
   Block 2 Size: 0x0001FD1C
   Block 3 Size: 0x0001BD8C
     Total Size: 0x0008B894
      File Size: 0x0008B894

- Philips DVP5965K/55 v2.2 (eneris) v.PB
        Version: 05.00.06.05
   Block 1 Size: 0x0004FDD0
   Block 2 Size: 0x0001FD6C
   Block 3 Size: 0x0001BD8C
     Total Size: 0x0008B8C8
      File Size: 0x0008B8C8

- Philips DVP5965K/55 v2.2 (eneris) v.HDMI
        Version: 05.00.06.05
   Block 1 Size: 0x0004FDEC
   Block 2 Size: 0x0001FD1C
   Block 3 Size: 0x0001BD8C
     Total Size: 0x0008B894
      File Size: 0x0008B894

- Philips DVP5965K/55 v2.2b (naasom) v.PB
        Version: 05.00.06.05
   Block 1 Size: 0x0004FDD0
   Block 2 Size: 0x0001FD6C
   Block 3 Size: 0x0001BD8C
     Total Size: 0x0008B8C8
      File Size: 0x0008B8C8

- Philips DVP5965K/55 Beta 5 (ronison=NKVT)v.HDMI
        Version: 05.00.06.05
   Block 1 Size: 0x0004FDEC
   Block 2 Size: 0x0001FD1C
   Block 3 Size: 0x0001BD8C
     Total Size: 0x0008B894
      File Size: 0x0008B894

...todas as opções (1, 2, 3 e 4) funcionam.

A pergunta que fica é: Qual opção de análise no MtkArmResizer é - de fato - a melhor para o Philips DVP-5965K/55?

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware MT13x9: Log de Descobertas
« Responder #299 Online: Fevereiro 07, 2008, 06:37:11 pm »
O MTKWindows (0.8.3.) não "suporta" janelas de 256 cores... Estou modificando o firmware (quero liberdade para escolher as cores do ícones) e o MTK Windows mostra isto (somente 20 cores):

Antes de comentar sobre esse assunto eu preciso perguntar: Como você chegou a essa janela com 20 células? :blink:

Antes que nada, esclareço que somente estou fazendo experimentos... Ainda há outras coisas a solucionar, como por exemplo: ¿Cómo faço um bitmap de 256 cores? ¿Um bitmap indexado de 256 cores serve? ¿Ou o bitmap, ao igual que os de 16 cores, é um tipo especial de arquivo?

Faz tempo (mais de um ano) que não tocava o tema das janelas no firmware... Bem, vamos ao que interessa:

Tenho lido e escutado sobre referencias no código fonte a 4/16/256/truecolor OSD bitmaps. (Aclaro que não chequei no código fonte).

No firmware do DVP5100, banco 3, temos a tabela (mais conhecida como OSD_AddrTable) das WB, ou White Boards, que é como as Windows IDs são chamadas no código fonte:
ROM:3BE7             OSD_AddrTable
ROM:3BE7 FF                    .byte 0xFF
ROM:3BE8 38 7A                 .word 0x387A                  ; Ventana 0x00
ROM:3BEA FF                    .byte 0xFF
ROM:3BEB 38 9C                 .word 0x389C                  ; Ventana 0x01
ROM:3BED FF                    .byte 0xFF
ROM:3BEE 38 8B                 .word 0x388B                  ; Ventana 0x02
...
ROM:3C11 FF                    .byte 0xFF
ROM:3C12 39 77                 .word 0x3977                  ; Ventana 0x0E
   <-- Link WB 0x0E

Seguindo o link da janela 0x0E:
ROM:3977             Ventana 0x0E
ROM:3977 00 34                 .word 0x34                    ; x1 = 52
ROM:3979 00 76                 .word 0x76                    ; y1 = 118
ROM:397B 02 A0                 .word 0x2A0                   ; x2 = 672
ROM:397D 01 AF                 .word 0x1AF                   ; y2 = 431
ROM:397F 00 30                 .word 0x30                    ; Pal DY (diferencia PAL-NTSC=DY)
ROM:3981 0E                    .byte  0xE                    ; Ventana 0x0E
ROM:3982 02                    .byte    2                    ; Cantidad de colores (1=4, 2=16)
ROM:3983 02                    .byte    2                    ; Transparencia
ROM:3984 00                    .byte    0                    ; ? ? ? ?
ROM:3985 FF                    .byte 0xFF                    ; Pointer byte
ROM:3986 39 44                 .word 0x3944                  ; Pointer a paleta de colores

Agora trocamos:
ROM:3982 02                    .byte    2
por
ROM:3982 08                    .byte    8

e...
ROM:3986 39 44                 .word 0x3944
por
ROM:3986 FA C2                 .word 0xFAC2

Abrindo o firmware com o MTK Windows obtem-se o resultado anteriomente descrito... Trocando as células visíveis e reanalizando o firmware com o IDA agora temos:



ROM:FAC2             Paleta de 256 colores - Ventana 0x0E
ROM:FAC2 5B D2                 .word 0x5BD2                  ; Color #00
ROM:FAC4 2E F1                 .word 0x2EF1                  ; Color #01
ROM:FAC6 8D D8                 .word 0x8DD8                  ; Color #02
ROM:FAC8 9C 49                 .word 0x9C49                  ; Color #03
ROM:FACA FF FF                 .word 0xFFFF                  ; Color #04 - FFFF=Magenta
ROM:FACC 85 F4                 .word 0x85F4                  ; Color #05
ROM:FACE E2 40                 .word 0xE240                  ; Color #06
ROM:FAD0 FF FF                 .word 0xFFFF                  ; Color #07 - FFFF=Magenta
ROM:FAD2 97 25                 .word 0x9725                  ; Color #08
ROM:FAD4 FF FF                 .word 0xFFFF                  ; Color #09 - FFFF=Magenta
ROM:FAD6 1D BF                 .word 0x1DBF                  ; Color #0A
ROM:FAD8 94 45                 .word 0x9445                  ; Color #0B
ROM:FADA 94 45                 .word 0x9445                  ; Color #0C
ROM:FADC 49 2A                 .word 0x492A                  ; Color #0D
ROM:FADE FF FF                 .word 0xFFFF                  ; Color #0F - FFFF=Magenta
ROM:FAE0 FF FF                 .word 0xFFFF                  ; Color #10 - FFFF=Magenta
ROM:FAE2 22 56                 .word 0x2256                  ; Color #11
ROM:FAE4 FF FF                 .word 0xFFFF                  ; Color #12 - FFFF=Magenta
ROM:FAE6 97 25                 .word 0x9725                  ; Color #13
ROM:FAE8 FF FF                 .word 0xFFFF                  ; Color #14 - FFFF=Magenta
ROM:FAEA FF FF                 .word 0xFFFF
ROM:FAEC FF FF                 .word 0xFFFF
ROM:FAEE FF FF                 .word 0xFFFF
ROM:FAF0 FF FF                 .word 0xFFFF
...

UPDATE: Se comparar as cores escritas no firmware pelo MTK Windows, com o MTKColorSpace que você sugeriu, vai ver que elas são exatamente as mesmas... ¡as 20 visíveis!


Se tudo o que você precisa é saber o valores, basta usar outro programa do New Age: MtkColorSpace.

Legal, vou tentar. UPDATE: Já testei, era exatamente o que eu procurava. Obrigado.

Aumentar o tamanho da janela, sim.
Colocar mais células, talvez.
Fazer com que o programa use essas células, não.

O programa usa as células... O problema é que eu somente posso modificar as células visíveis. Eu chequei o firmware após usar o programa e todas as 20 cores tinham sido corretamente trocadas...

Por outro lado, tentei agrandar a janela com os dois programas sugeridos no tópico do MTK Patcher (ResourceHacker e XNResourceEditor), mas nenhúm deles funciona corretamente com o arquivo executável do MTK Windows.
« Última modificação: Fevereiro 07, 2008, 06:51:13 pm por jmaraujo »

Offline ronison

  • Novato
  • *
  • Mensagens: 14
  • Aprovação: +0/-0
    • Ver Perfil
Re: PUOs - Prohibited User Operations
« Responder #300 Online: Fevereiro 07, 2008, 08:41:43 pm »
Legal Ronison,

Que bom que você já está conseguindo se virar com esta área.

Desabafo: Como ARM é bem mais complicado que 8051 hein!

Será que a gente conseguiria neste espaço alocar (no Philips 5965K/55) nomes longos a partir da USB + Word Wrap (algoritmo Danny Moroz) sem perder nenhuma funcionalidade (principalmente o HDMI)?

Bom, vou seguir a minha pesquisa sobre MtkArmResizer em paralelo, pode ser útil em algum momento para nós (ou para alguém da comunidade).

Estou querendo contribuir e documentar o Word Wrap com algoritmo Danny Moroz para a comunidade.

Temos, seguramente, 369 bytes de espaço nesta área. Existe uma área suspeita e o espaço pode aumentar para ~7,7K.

Não sei ainda o do USB, mas o algoritmo do wrodwrap usa 356 bytes.

Caso seu word wrap seja Danny Moroz, esteja pronto e você tenha tempo (e não seja um incômodo) poderia disponibilizar as dicas no tópico específico que abri para isso neste fórum, dentro da seção Philips 5965K/55?

Obrigado

Ainda não está ok. Assim que eu tiver um tempinho coloco aqui o estado atual.

Abraço,
« Última modificação: Fevereiro 07, 2008, 11:09:59 pm por ronison »

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #301 Online: Fevereiro 07, 2008, 10:43:08 pm »
O programa usa as células... O problema é que eu somente posso modificar as células visíveis. Eu chequei o firmware após usar o programa e todas as 20 cores tinham sido corretamente trocadas...

Ahhhhhhhhh...

Isso ocorre porque o NewAge programou a criação dinâmica das células em um loop baseado no número de cores. Ele não esperava por mais de 16 cores, mas o loop continua criando as células às cegas.

Por outro lado, tentei agrandar a janela com os dois programas sugeridos no tópico do MTK Patcher (ResourceHacker e XNResourceEditor), mas nenhúm deles funciona corretamente com o arquivo executável do MTK Windows.

O MTKWindows, assim como os meus programas, está comprimido com UPX. Antes de usar um resource editor qualquer você precisa descomprimir.

No caso, baixe o UPX e use o comando upx.exe -d mtkwindows.exe

Só que você vai encontrar um pequeno problema com o mtkWindows: aumentar o tamanho da janela não adianta. NewAge decide o tamanho da janela por programação, todas as vezes em que selecionamos a aba "Windows" do programa.

Mas existe um modo de contornar isso.

Abra o programa já descomprimido no Resource Hacker



Mude a palavra bsToolWindow, destacada em verde, para bsSizeToolWin Editado: Não adianta procurar no Help do programa. Para saber o que precisa ser mudado e pelo que, você precisa estar familiarizado com a VCL da Borland (Delphi, C++ Builder, etc).

Não adianta mudar ClientHeight e ClientWidth (em vermelho). Adiantaria, se New Age não estivesse definindo as dimensões da janela por programação.

Clique em Compile Script e salve

Execute o mtkWindows. Aparentemente, nada mudou. Mas mova o mouse sobre a borda da janela de palette e você irá poder redimensioná-la temporariamente para o tamanho que quiser.

« Última modificação: Fevereiro 08, 2008, 08:41:50 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #302 Online: Fevereiro 07, 2008, 11:12:24 pm »
Quando um executável Windows qualquer não funcionar com um Resource Editor, analise-o com o ExeInfo PE. Esse programa é capaz de identificar vários tipos de compressão e dá dicas de como lidar com elas.
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware MT13x9: Log de Descobertas
« Responder #303 Online: Fevereiro 07, 2008, 11:16:52 pm »
Obrigado. Agora ficou assim:



Na verdade, não sei nem para que servem estas mudanças (se é que funcionam). Agora, apos ter feito as mudanças, não acho muita utilidade em ter uma janela de 256 cores que vai ocupar 512 bytes que poderíam fazer falta no futuro.

Offline ronison

  • Novato
  • *
  • Mensagens: 14
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #304 Online: Fevereiro 07, 2008, 11:23:23 pm »
jmaraujo,

   Lembro que você falou sobre o uso de caracteres acentuados no filebrowser a um tempo atrás. Pois bem, estou com este problema. Caracteres especiais estão sendo substituídos por "_". Já vi muita coisa aqui e fiquei com uma dúvida: o UnicodeToCP (ARM) descrito no documento "Patching_HU3899_from_A_to_Z.txt" resolve este problema nos philips? Complementando, não encontrei na rotina Dir_FileNameFilter, no 8052, qualquer definição de limites dos caracteres possíveis.

PS: Infelizmente estou sem ter como testar pois meu player está na assistência.  :-[

Abraço,
« Última modificação: Fevereiro 07, 2008, 11:30:10 pm por ronison »

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #305 Online: Fevereiro 07, 2008, 11:25:05 pm »
Só para complementar, existe um modo, um tanto deselegante, de passar por cima da definição do tamanho da janela feita por New Age.

Mude os valores de ClientWidth e ClientHeight
Apague a linha OnShow = FormShow

Você verá que, antes de carregar qualquer firmware as duas novas dimensões são respeitadas, mas a altura é redefinida automaticamente quando é carregado um firmware. É possível que na sua versão experimental com mais células a altura acompanhe o número de células (eu acho difícil), mas isso é algo que você mesmo precisa testar.
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware MT13x9: Log de Descobertas
« Responder #306 Online: Fevereiro 07, 2008, 11:53:12 pm »
Caracteres especiais estão sendo substituídos por "_". Já vi muita coisa aqui e fiquei com uma dúvida: o UnicodeToCP (ARM) descrito no documento "Patching_HU3899_from_A_to_Z.txt" resolve este problema nos philips?
O CP125x que eu estou usando é bem simplezinho, mas não é a solução ao seu problema. O meu patch o que faz e trocar os carateres 250-255 por 0-5 (Há uma explicação técnica do Mabreaker sobre o porqué os carateres 250-255 não são lidos, o que não vem ao caso).

O seu problema é o filtro dos caracteres, então o mais fácil é mudar esse filtro.

¿O que o tal filtro faz? Ele verifica se o caractere pasado ao Arm é menor do que '20' (espaço), ou maior do que '7E' (~). Se for menor do que 20, ou maior do que 7E, o caracter e sustituido por um '_'.

O que você tem que fazer e mudar o '20' por '00', e o '7E' por 'FF', desse jeito ele vai buscar por carateres menores que 00 ou maiores que FF, o que claro, não existem.

Procedimento: Busque no bloco ArmCode completo a seqüencia "7E 22 20 21". No meu firmware (os valores já foram trocados):
ROM:0000DCF4 FF 22                       MOV     R2, #0xFF
ROM:0000DCF6 00 21                       MOV     R1, #0

Isso é tudo.

Só para complementar, existe um modo, um tanto deselegante, de passar por cima da definição do tamanho da janela feita por New Age.

Mude os valores de ClientWidth e ClientHeight
Apague a linha OnShow = FormShow

Você verá que, antes de carregar qualquer firmware as duas novas dimensões são respeitadas, mas a altura é redefinida automaticamente quando é carregado um firmware. É possível que na sua versão experimental com mais células a altura acompanhe o número de células (eu acho difícil), mas isso é algo que você mesmo precisa testar.
Não, as células seguem na mesma posição. Mas não se preocupe, estou desistindo de experimentar as mudanças no player...

Offline ronison

  • Novato
  • *
  • Mensagens: 14
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #307 Online: Fevereiro 08, 2008, 12:05:20 am »
Caracteres especiais estão sendo substituídos por "_". Já vi muita coisa aqui e fiquei com uma dúvida: o UnicodeToCP (ARM) descrito no documento "Patching_HU3899_from_A_to_Z.txt" resolve este problema nos philips?
O CP125x que eu estou usando é bem simplezinho, mas não é a solução ao seu problema. O meu patch o que faz e trocar os carateres 250-255 por 0-5 (Há uma explicação técnica do Mabreaker sobre o porqué os carateres 250-255 não são lidos, o que não vem ao caso).

O seu problema é o filtro dos caracteres, então o mais fácil é mudar esse filtro.

¿O que o tal filtro faz? Ele verifica se o caractere pasado ao Arm é menor do que '20' (espaço), ou maior do que '7E' (~). Se for menor do que 20, ou maior do que 7E, o caracter e sustituido por um '_'.

O que você tem que fazer e mudar o '20' por '00', e o '7E' por 'FF', desse jeito ele vai buscar por carateres menores que 00 ou maiores que FF, o que claro, não existem.

Procedimento: Busque no bloco ArmCode completo a seqüencia "7E 22 20 21". No meu firmware (os valores já foram trocados):
ROM:0000DCF4 FF 22                       MOV     R2, #0xFF
ROM:0000DCF6 00 21                       MOV     R1, #0

Isso é tudo.

Isso tudo eu tinha entendido. Agora ficou meio confuso o que você falou. O filtro deve estar no 8052, certo? Pois bem, como eu falei não existe a definição dos limites (20 e 7E) neste código. Entretanto, você fala em buscar no ARM Code uma sequência? O filtro então estaria no ARM Code?

Abraço,

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware MT13x9: Log de Descobertas
« Responder #308 Online: Fevereiro 08, 2008, 12:15:00 am »
O filtro deve estar no 8052, certo? Pois bem, como eu falei não existe a definição dos limites (20 e 7E) neste código. Entretanto, você fala em buscar no ARM Code uma sequência? O filtro então estaria no ARM Code?
Não, você está confundindo. O filtro está no ArmCodes.

Os firmwares Philips não tem o filtro no 8032. Caso tivessem, voçê tería que fazer o patch nos dois lugares: ArmCode e 8032.

Se quiser estar seguro, busque no 8032 por "90 ? ? E0 FF 90 ? ? E0 FE C3 9F 50 05 C3 EF", mas -como eu disse- nos firmwares Philips não tem ese filtro.

Saudações!

PS: Se quiser checar o filtro nos meus ArmCodes, olhe no endereço ROM:DCF4.

Offline ronison

  • Novato
  • *
  • Mensagens: 14
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #309 Online: Fevereiro 08, 2008, 12:20:12 am »
O filtro está no ArmCodes.
Os firmwares Philips não tem o filtro no 8032.
Isso era tudo que eu precisava saber.  ;D

Dei uma investigada profunda nas rotinas DIR_DispFileList e Dir_FileNameFilter tentando identificar o filtro porém só encontrei vestígios 8). Agora está tudo blz. :yahoo!:

Valeu mesmo.
« Última modificação: Fevereiro 08, 2008, 12:22:53 am por ronison »

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #310 Online: Fevereiro 08, 2008, 06:30:29 pm »
LG DK194g

Como reduzir o bloco OSD1 para ganhar tempo nos testes.

O grande número de bitmaps no firmware do DK194G atrapalha bastante o trabalho de quem faz experiências com o firmware. No meu caso (Semprom 2300+), a mais banal das mudanças com o mtkRemaker faz o software ficar aparentemente travado por cerca de 27s. Trocar 6 fontes, que leva uns 20-30 segundos em firmwares não-LG, leva 3 minutos no LG DK194G.

Um firmware MTK genérico relativamente complexo como o do DVP-858 tem 61 bitmaps. Um bloco de ícones da LG normalmente tem entre 320 e 330. No DK194G, por causa da função "game", são 1009.

Mas nem mtkRemaker nem mtkReplacer permitem a substituição do bloco "ícones" apenas. É preciso substituir o bloco OSD1 (fontes e ícones) inteiro. Apagar os ícones extras apenas não é viável, porque você só pode fazer um por um, e são centenas.

Eu comecei substituindo pelo bloco OSD1 do LG DV256K. Não deu certo e as evidências são de que os ícones de 0 a 321 do DV256K não seguem a mesma ordem usada no DK194G, porque fica uma bagunça:



Então eu tentei com o OSD1 do DK8321N e funcionou sem bagunça no browser. Mas como o 8321N tem menos fontes que o DK194G, a bagunça ficou na exibição das legendas. Isso é bem mais simples de resolver, porque bastou trocar manualmente as fontes do DK8321N pelas do DK194g. Como o excesso de bitmaps já tinha sido removido, trocar as fontes e acrescentar o que faltava levou bem menos tempo do que tentar fazer o mesmo com os ícones.

Como vantagem adicional, o bloco OSD1 é reduzido em tamanho de 834KB para 355KB. Uma redução de quase meio megabyte certamente faz diferença na hora de gravar o firmware.

O bloco criado por mim (ícones do DK8321N e fontes do DK194G) está anexo, para você não ter esse trabalho todo.
 
« Última modificação: Fevereiro 08, 2008, 11:07:51 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #311 Online: Fevereiro 08, 2008, 06:41:14 pm »
LG DK 194G

Como reduzir o firmware para acelerar os testes, pela redução do tempo de upgrade.

Aviso: Isso vai matar a função game completamente. Antes de distribuir o firmware você deve lembrar de restaurar tudo.

O tempo normal de upgrade por cabo do LG DK194G é de cerca de 8 minutos. Com esse procedimento o tempo cai para pouco menos de 4 minutos.



  • Substitua o bloco OSD1 inteiro usando o processo explicado no post anterior.
  • Substitua o bloco SKIN inteiro pelo do LG DV256K. O Tamanho cai para 62KB;
  • Substitua o item Unknown (1) pelo item Unknown (5) do mesmo firmware, que tem apenas 4 bytes; 

Ao final dessa operação o tamanho do firmware terá caido de 4003KB para 1844KB e o tempo de gravação de 8 minutos para pouco menos de 4 minutos. Além disso, com a redução do número de figuras o firmware vai abrir bem mais rápido no mtkRemaker.
« Última modificação: Fevereiro 08, 2008, 11:11:01 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #312 Online: Fevereiro 08, 2008, 08:12:42 pm »
Firmwares LG

Como localizar o bloco de paletes

Este procedimento também encontra os blocos em firmwares não-LG, mas só é realmente necessário quando o mtkWindows não consegue localizar as paletes, como é o caso dos aparelhos LG.

O "truque" se baseia no fato de que o "preto" em uma palete MTK geralmente é gravado como "0x12 0x10" no firmware, que esta é uma combinação relativamente incomum em assembly 8032 e que o preto ocorre várias vezes nas paletes.

Usando o IDA, procure por todas as ocorrências da string hexa "12 10". O maior bloco dentro de um único banco identificado como "byte" são as paletes. 



O mtkWindows não consegue achar as paletes porque o endereço de cada uma delas não está na definição de cada janela, como ocorre em outros firmwares. Os dois bytes reservados para cada endereço são sempre "00 00" nos firmwares LG que olhei.

Por conta disso, mesmo encontrando o bloco é um tanto complicado definir exatamente onde começa e termina cada palete. Em geral as paletes tem 32 bytes (16 células) mas aparentemente há pelo menos uma palete de 8 bytes  (4 células) nos firmwares LG, porque o total de bytes no bloco nos três firmwares indicados na figura acima é 8 mais um múltiplo de 32.   

Eu já descobri como localizar, por análise, o início da maioria das paletes. Mas o método ainda é muito confuso.
« Última modificação: Fevereiro 08, 2008, 11:34:02 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #313 Online: Fevereiro 08, 2008, 09:21:21 pm »
Firmwares LG

Como localizar as rotinas que carregam as paletes

As rotinas apontam para o início de cada palete.

Procure por:

90 ? ? E0 FD 25 E0 24 ? f5 82 e4 34 ? f5 83

O resultado são várias ocorrências parecidas com isto:

B7:C31C             B7_C31C:                      ; CODE XREF: BankSw_455_B7_C2D8+1Aj
B7:C31C 90 FC 94    mov     DPTR, #XRAM_FC94
B7:C31F E0          movx    A, @DPTR
B7:C320 FD          mov     R5, A
B7:C321 25 E0       add     A, ACC                ; Accumulator
B7:C323 24 84       add     A, #0x84 ; 'ä'
B7:C325 F5 82       mov     DPL, A                ; Data Pointer, Low Byte
B7:C327 E4          clr     A
B7:C328 34 2B       addc    A, #0x2B ; '+'
B7:C32A F5 83       mov     DPH, A                ; Data Pointer, High Byte


Esta rotina carrega DPTR com o endereço base da palete, no mesmo banco. No caso acima, a palete começa em 0x2B84.

Nos meus testes, a string de busca só encontrou as rotinas realmente relacionadas com carga de paletes, mas não encontrou todas. Ainda existem paletes no bloco que ou não são usadas ou são carregadas de outra maneira.

E ainda falta descobrir como se faz a associação palete-janela.
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware MT13x9: Log de Descobertas
« Responder #314 Online: Fevereiro 08, 2008, 09:26:36 pm »
Jefferson, você tem idéia de como e feito o "hold & press" (como NA chama a função que controla as teclas do controle remoto quando apretadas por um par de segundos)?

O DVP5100 não tem tal função... Mas o "stop" funciona como "eject" se apertado por dois segundos... Ainda não achei como e feito essa mudança de "14" para "7E".

Já fiz uma busca de texto por "0x14" ou "0x7E", mas sem resultados conclusivos...

Offline ronison

  • Novato
  • *
  • Mensagens: 14
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #315 Online: Fevereiro 08, 2008, 10:15:43 pm »
Jefferson, você tem idéia de como e feito o "hold & press" (como NA chama a função que controla as teclas do controle remoto quando apretadas por um par de segundos)?

O DVP5100 não tem tal função... Mas o "stop" funciona como "eject" se apertado por dois segundos... Ainda não achei como e feito essa mudança de "14" para "7E".

Já fiz uma busca de texto por "0x14" ou "0x7E", mas sem resultados conclusivos...
Sei que parece óbvio, mas você já tentou rastrear o fluxo de execução da tecla Stop?

Abraço,

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware MT13x9: Log de Descobertas
« Responder #316 Online: Fevereiro 08, 2008, 10:37:09 pm »
Sei que parece óbvio, mas você já tentou rastrear o fluxo de execução da tecla Stop?

Não. Como faço isso? :oops:

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #317 Online: Fevereiro 09, 2008, 03:49:58 am »
Firmwares LG

Como é feita a associação janela-palete

Procure pela seguinte string hexa:

B4 xx 00 40 03 02 ? ? 90 ? ? F8 28 28 73

Onde xx é o número da última janela do firmware, como visto no mtkWindows.

Em alguns casos você vai encontrar mais de uma ocorrência, mas apenas uma delas é a correta. O resultado é parecido com isto (LG DK194G):

B7:14B8             B7_14B8:                      ; CODE XREF: BankSw_64_B7_13FC+37j
B7:14B8 90 FC BC    mov     DPTR, #XRAM_FCBC      ; NUM_Janela?
B7:14BB E0          movx    A, @DPTR
B7:14BC 14          dec     A
B7:14BD B4 12 00    cjne    A, #0x12, B7_14C0
B7:14C0
B7:14C0             B7_14C0:
B7:14C0 40 03       jc      EscolhePalete
B7:14C0
B7:14C2 02 19 E8    ljmp    RET
B7:14C2
B7:14C5             ; ---------------------------------------------------------------------------
B7:14C5
B7:14C5             EscolhePalete:                ; CODE XREF: BankSw_64_B7_13FC:B7_14C0j
B7:14C5 90 14 CC    mov     DPTR, #0x14CC
B7:14C8 F8          mov     R0, A                 ; Aqui o conteúdo de A deve ser de 0 a 17 (0 a 0x11)
B7:14C9 28          add     A, R0
B7:14CA 28          add     A, R0                 ; Ao chegar aqui, o conteúdo do acumulador foi multiplicado por três
B7:14CB 73          jmp     @A+DPTR
B7:14CB
B7:14CC             ; ---------------------------------------------------------------------------
B7:14CC 02 15 7A    ljmp    CarregaPalete02
B7:14CC
B7:14CF             ; ---------------------------------------------------------------------------
B7:14CF 02 15 02    ljmp    CarregaPalete01
B7:14CF
B7:14D2             ; ---------------------------------------------------------------------------
B7:14D2 02 15 E4    ljmp    CarregaPalete03
B7:14D2
B7:14D5             ; ---------------------------------------------------------------------------
B7:14D5 02 17 22    ljmp    CarregaPalete07
B7:14D5
B7:14D8             ; ---------------------------------------------------------------------------
B7:14D8 02 17 45    ljmp    CarregaPalete08
B7:14D8
B7:14DB             ; ---------------------------------------------------------------------------
B7:14DB 02 19 07    ljmp    CarregaPalete19
B7:14DB
B7:14DE             ; ---------------------------------------------------------------------------
B7:14DE 02 18 E4    ljmp    CarregaPalete15
B7:14DE
B7:14E1             ; ---------------------------------------------------------------------------
B7:14E1 02 19 61    ljmp    CarregaPalete04
B7:14E1
B7:14E4             ; ---------------------------------------------------------------------------
B7:14E4 02 18 7E    ljmp    CarregaPalete05_2
B7:14E4
B7:14E7             ; ---------------------------------------------------------------------------
B7:14E7 02 16 1B    ljmp    CarregaPalete05_1
B7:14E7
B7:14EA             ; ---------------------------------------------------------------------------
B7:14EA 02 16 EB    ljmp    CarregaPalete06
B7:14EA
B7:14ED             ; ---------------------------------------------------------------------------
B7:14ED 02 16 85    ljmp    CarregaPalete05_3
B7:14ED
B7:14F0             ; ---------------------------------------------------------------------------
B7:14F0 02 17 AC    ljmp    CarregaPalete09
B7:14F0
B7:14F3             ; ---------------------------------------------------------------------------
B7:14F3 02 17 CF    ljmp    CarregaPalete12
B7:14F3
B7:14F6             ; ---------------------------------------------------------------------------
B7:14F6 02 17 F2    ljmp    CarregaPalete11
B7:14F6
B7:14F9             ; ---------------------------------------------------------------------------
B7:14F9 02 18 15    ljmp    CarregaPalete13
B7:14F9
B7:14FC             ; ---------------------------------------------------------------------------
B7:14FC 02 18 38    ljmp    CarregaPalete10
B7:14FC
B7:14FF             ; ---------------------------------------------------------------------------
B7:14FF 02 18 5B    ljmp    CarregaPalete14
B7:14FF
B7:1502             ; ---------------------------------------------------------------------------
B7:1502


Os nomes CarregaPaleteXX foram atribuídos por mim por análise manual do firmware.

No exemplo acima, se a janela for 8, 9 ou 11 é a palete 5 que é usada, por meio de três rotinas diferentes, que não vou mostrar aqui por enquanto.

A numeração das paletes é minha, atribuída de acordo com a posição da palete no bloco.
« Última modificação: Fevereiro 09, 2008, 03:52:33 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline ronison

  • Novato
  • *
  • Mensagens: 14
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #318 Online: Fevereiro 10, 2008, 07:26:01 am »
Não. Como faço isso? :oops:
Seria seguir o fluxo de execução desde a decodificação da tecla Stop até a execução da rotina de tratamento. Fiz um ensaio e encontrei um local bem suspeito de ser o que você está procurando. Pelo fluxo que segui, chega um ponto onde ele decide se vai repassar o código 5 (P&H + 1) ou o código 15 (Stop + 1) para o tratamento. A decisão é tomada baseando-se num valor lido 3 vezes num único endereço (acredito que este valor seja o tempo de pressionamento da tecla).

O que fiz:

1. Fui numa tabela de tratamento de códigos do RC (aquela usada no Auto Load).
2. Peguei o código #14 (Stop) e segui o fluxo.

Depois eu posto o código aqui, caso haja interesse.

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware MT13x9: Log de Descobertas
« Responder #319 Online: Fevereiro 10, 2008, 06:19:00 pm »
Sei que parece óbvio, mas você já tentou rastrear o fluxo de execução da tecla Stop?

Acho que agora entendí o que você quis dizer...

Em Remote_General não ha código de execução para "Stop".

Sim há em Remote_DVDPlayback e Remote_DivXPlayback, posso estar errado mas não quis olhar em essas rotinas porque o "press and hold" é feito sempre, e não somente em modo DVD ou ISO.

Agora vou dar uma olhada nas rotinas Remote_03 a Remote_08. (Remote_01 e Remote_02 nunca conseguí achar no meu firmware...)

Seria seguir o fluxo de execução desde a decodificação da tecla Stop até a execução da rotina de tratamento. Fiz um ensaio e encontrei um local bem suspeito de ser o que você está procurando. Pelo fluxo que segui, chega um ponto onde ele decide se vai repassar o código 5 (P&H + 1) ou o código 15 (Stop + 1) para o tratamento. A decisão é tomada baseando-se num valor lido 3 vezes num único endereço (acredito que este valor seja o tempo de pressionamento da tecla).

O que fiz:

1. Fui numa tabela de tratamento de códigos do RC (aquela usada no Auto Load).
2. Peguei o código #14 (Stop) e segui o fluxo.

Depois eu posto o código aqui, caso haja interesse.

Legal, obrigado ronison.

Offline rafalibrenz

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 356
  • Aprovação: +28/-0
    • Ver Perfil
    • Blog
Re: Firmware MT13x9: Log de Descobertas
« Responder #320 Online: Fevereiro 13, 2008, 12:55:39 pm »
O que você tem que fazer e mudar o '20' por '00', e o '7E' por 'FF', desse jeito ele vai buscar por carateres menores que 00 ou maiores que FF, o que claro, não existem.

Procedimento: Busque no bloco ArmCode completo a seqüencia "7E 22 20 21". [...] Isso é tudo.

Jmaraujo! :)

Eu tinha lido isso que você tinha falado, mas por algum descuido acabei esquecendo. Só depois que você me perguntou se eu tinha tentado isso é que eu tentei.

Mudou alguma coisa, mas não deu muito certo.

Vou te contar tim tim por tim tim o que eu fiz.

1. Abri o firmware (JE+RL v0.32a) no MtkReMaker, cliquei no "+" do RISC, botão direito em "Arm Codes", "Save". Perguntou se eu queria descompactar e eu disse SIM;
2. Abri o arquivo BIN no editor hexadecimal (Xvi32), procurei por "7E 22 20 21" e encontrei. Procurei novamente para ver se tinha mais uma vez e NÃO TINHA;
3. Alterei 7E para FF e 20 para 00. Ficou "FF 22 00 21". Salvei;
4. Voltei ao MtkRemaker, botão direito em "ArmCodes", "Replace" e peguei o arquivo BIN modificado;
5. Salvei o firmware e instalei no player.

Não sei se eu fiz algo de errado, mas pelo que eu entendi era isso.

Fui testar no player. Coloquei um DVD.

O que era pra ser "Ação" ficou assim:


"Invisível" ficou assim:


"Premonições" ficou assim.


Testei também via USB. Criei uma pasta chamada "ÇÔÁÃóã" (lindo nome, não?) no meu pendrive e ela apareceu assim:


Vale lembrar que o firmware está usando a fonte número 10 para exibir os nomes de arquivos e pastas no browser. Talvez seja esse o problema.

P.S.: Não estou conseguindo entrar no forodvp5100.com.ar! O Firefox está me dizendo que "A conexão atingiu o tempo limite".

Offline rafalibrenz

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 356
  • Aprovação: +28/-0
    • Ver Perfil
    • Blog
Re: Firmware MT13x9: Log de Descobertas
« Responder #321 Online: Fevereiro 13, 2008, 01:14:15 pm »
Mestre Jmaraujo!

Deu certo sim!

Era a fonte o problema. Aquela fonte não tinha acentos. Coloquei uma que eu fiz e deu certo!!!

Lendo um DVD:


Mas lendo um USB não deu muito certo, apesar de estar melhor que antes.
Os nomes das pastas eram para ser: "ÇÔÁÃóã", "Ação" e "Visível" (tudo sem aspas, claro), e ficou assim:


Agora vou tentar colocar contorno nessa fonte (não tem jeito do contorno aparecer, mas se eu não conseguir vou explicar bem o meu problema e pedir ajuda depois) e publicar uma nova versão do firmware.

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware MT13x9: Log de Descobertas
« Responder #322 Online: Fevereiro 13, 2008, 07:23:41 pm »
Que bom que tenha funcionado, Rafa!

1) Com o problema do filtro "não funcionar" em USB, não posso ajudar pois o meu RISC não tem suporte a USB e por mais que eu tente achar as referencias a função do filtro, não vou achar nada porque "não ha nada para achar", he-he!...

2) Na fotografía estou vendo que o problema está no nome das pastas... Em algums firmwares existe um filtro no 8032 também.

Por exemplo, Ronison confirmou que no DVP5965 esse filtro não existe. Também não existe no DVP5100. Mas em players de outras marcas é comúm ver o filtro, e como a v43 do firmware do 5980 é um pouco diferente, quem sabe ela tenha o tal filtro...

Offline rafalibrenz

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 356
  • Aprovação: +28/-0
    • Ver Perfil
    • Blog
Re: Firmware MT13x9: Log de Descobertas
« Responder #323 Online: Fevereiro 14, 2008, 10:45:20 am »
Em algums firmwares existe um filtro no 8032 também. [...] e como a v43 do firmware do 5980 é um pouco diferente, quem sabe ela tenha o tal filtro...

Jmaraujo,

Com certeza o problema não é o tal filtro no 8032.

Peguei o firmware em que os acentos apareceram no browser lendo disco e substituí o RISC pelo RISC do firmware do DVP5160.

Este firmware é aquele que faz o player perder a saída HDMI, mas dá a capacidade de ler mais caracteres (em torno de 23) via USB.

E para minha surpresa, os caracteres acentuados apareceram perfeitamente via USB, inclusive a pasta "ÇÔÁÃóã".

Conclusão: O problema dos nomes USB deve estar no ARM mesmo.

Muito obrigado pela ajuda, Jmaraujo!

Offline doctorxyz

  • Novato Prolixo
  • **
  • Mensagens: 63
  • Aprovação: +4/-0
    • Ver Perfil
Nomes Longos a Partir da USB (Philips DVP5965K/55)
« Responder #324 Online: Fevereiro 15, 2008, 10:56:13 pm »
Ronison,

Caso sobre um tempo, dê uma olhadinha em

Nomes Longos a Partir da USB (Philips DVP5965K/55) -> http://ryan.com.br/smf/index.php?topic=319.0

Ao que parece, falta pouco!

Saudações,
doctorxyz

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #325 Online: Março 04, 2008, 02:21:01 am »
Entendendo como os textos são armazenados no bloco Languages.

Ontem eu apanhei pela segunda vez com isso, por isso vou deixar a parte confusa documentada aqui. O básico sobre como localizar os textos está explicado no documento !Primeros_pasos_MT1389_v0_3b.rtf de Cachirulo. (evite tradução porca para o inglês de Mabreaker: Info - MT1389 v0.3b English.rtf, porque traduzir "IDA Pro" como "GOING Pro" é dose...), mas o que vou explicar aqui não está lá. Você só entende isso depois de fuçar com o MTK Lang Creator, o MTK Lang Editor e o próprio MTK Remaker.

Vou usar o MTK Remaker para mostrar como funciona:



Note que "\2dX" tem apenas quatro caracteres, mas na imagem eu digo que são cinco. Repare que existe um espaço antes da barra, que é o quinto caractere.

A lógica 8032 deve entender essa string mais ou menos assim:

  • Reserve um buffer de 6 caracteres;
  • Selecione a fonte 09 e pegue o seguinte (um) caractere;
  • Selecione a fonte 00 e pegue os seguintes (cinco) caracteres.
« Última modificação: Março 04, 2008, 02:41:50 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #326 Online: Março 04, 2008, 03:49:13 am »
Como saber que células da palete corrente um determinado ícone usa.

Depois que você sabe como a coisa funciona, percebe que é isso que o MTK Remaker mostra, na aba MEMO:



As letras que você vê compondo a imagem do ícone não são escolhidas ao acaso. Cada uma delas é o númro em hexadecimal da cor na palete, de 0 a F. Assim como você pode ver, o fundo do ícone está na cor 0x0 (que é geralmente tratada como transparente na exibição) e a maior parte do corpo do cadeado está na cor 0xE. Que cor realmente será essa depende da palete em vigor onde o ícone é exibido.

Toda a explicação necessária para entender como o "bitmap" do ícone é armazenado está no documento !Primeros_pasos_MT1389_v0_3b.rtf de Cachirulo. Com base nessas informações eu já consegui fazer rotinas em Delphi que desenham ícones Mediatek e pretendo usar isso em uma futura versão do MTK Patcher.
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware MT13x9: Log de Descobertas
« Responder #327 Online: Setembro 03, 2008, 06:36:29 pm »
Como mover os tags mp3 e jpg preview para parte de baixo da tela:

Bem, a primeira parte (mover os tags mp3) Jefferson já explicou muito claramente como é que se faz.

Para mover o jpeg preview tem de se trocar as coordenadas absolutas (a diferença dos tags, que usam coordenadas relativas) da imagem...

Buscar a seqüencia "7D ? 7F 9A 7E 02 12 ? ? 7D ? 7F 9B 7E 02 12 ? ? 7D ? 7F 9C 7E 02 12 ? ? 7D ? 7F 9D 7E 02 12 ? ? 7D ? 7F 9E 7E 02 12 ? ? ", para achar uma parte onde ArmPutChar (WriteSInfo) é chamado cinco vezes com os valores 0x029A, 0x029B, 0x029C, 0x029D e 0x029E.

Deslize a rotina para cima até o começo e de nome a função: fgFlMnInit.

Voltem novamente até a parte da seqüencia achada. Se quiser podem colocar um nome local nesta parte da rotina. Aquí é definido o tamanho e posição da miniatura jpeg:

ROM:4FF8             fgFlMnInit:
(...)
ROM:50D4             Jpg_preview
ROM:50D4 7D 01               mov     R5, #1                    ; Mostrar jpg preview (1=Sim 0=não)
ROM:50D6 7F 9A               mov     R7, #0x9A ; 'Ü'
ROM:50D8 7E 02               mov     R6, #2
ROM:50DA 12 05 F5            lcall   WriteSInfo                ; Arm_PutChar
ROM:50DA
ROM:50DD 7D 78               mov     R5, #0x78 ; 'x'           ; Preview JPG posX / 5 (coord. absoluta)
ROM:50DF 7F 9B               mov     R7, #0x9B ; 'ø'
ROM:50E1 7E 02               mov     R6, #2
ROM:50E3 12 05 F5            lcall   WriteSInfo                ; Arm_PutChar
ROM:50E3
ROM:50E6 7D 4F               mov     R5, #0x4F ; 'O'           ; Preview JPG posY / 4 (coord. absoluta)
ROM:50E8 7F 9C               mov     R7, #0x9C ; '£'
ROM:50EA 7E 02               mov     R6, #2
ROM:50EC 12 05 F5            lcall   WriteSInfo                ; Arm_PutChar
ROM:50EC
ROM:50EF 7D 23               mov     R5, #0x23 ; '#'           ; Preview JPG Largura / 5
ROM:50F1 7F 9D               mov     R7, #0x9D ; 'Ø'
ROM:50F3 7E 02               mov     R6, #2
ROM:50F5 12 05 F5            lcall   WriteSInfo                ; Arm_PutChar
ROM:50F5
ROM:50F8 7D 14               mov     R5, #0x14                 ; Preview JPG Altura / 4
ROM:50FA 7F 9E               mov     R7, #0x9E ; '×'
ROM:50FC 7E 02               mov     R6, #2
ROM:50FE 12 05 F5            lcall   WriteSInfo                ; Arm_PutChar


Troque os valores em vermelho para mudar posição e tamanho do jpeg preview.

Notem que os valores a insertar tem que ser divididos entre 4 ou 5. Ou seja, se quiser uma largura de 200px, tem que fazer 200 / 5 = 40, é depois convertir o resultado de hexadecimal em decimal 40 => 28.
« Última modificação: Setembro 03, 2008, 06:50:21 pm por jmaraujo »

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #328 Online: Setembro 04, 2008, 03:02:18 am »
Como funciona o esquema de bancos nos novos firmwares

Isso é só um rascunho.

Recapitulando:

  • A arquitetura 8051 só suporta 64K de memória;
  • O truque que permite ao MT1389 usar um código 8032 maior que 64K, divide o código em segmentos de 64KB chamados de bancos e requer o uso de Bank Switch Tables (BSTs) idênticas em cada banco para que seja possível que um banco possa chamar rotinas que estão gravadas em outro.

O código 8032 é agora organizado das duas maneiras a seguir:



Eu não tenho certeza ainda, mas aparentemente no novo formato a BST tem um tamanho fixo de 12K e o espaço para o código de cada banco é fixo em 52K.

O esquema antigo produz um desperdício natural com a repetição da BST em cada banco. O novo esquema tem o objetivo de reclamar esse espaço desperdiçado, mas tenha em mente que nem um byte é ganho no espaço do código 8032 para patches. Um banco que só teria 100 bytes livres no esquema antigo continua com 100 bytes livres no esquema novo. Todo o espaço economizado com o novo esquema pode ser aproveitado basicamente com mais fontes e imagens.


E ainda é mais complicado do que parece:

A arquitetura 8051 requer que, pelo menos na memória RAM, o truque de bank switching seja implementado da forma tradicional: BST + banco 0 + BST + banco 1 + BST + banco 2, então apesar do chip MT1389L estar programado para carregar apenas uma BST, ele precisa gravar o código 8032 na memória da mesma forma que o chip tradicional MT1389. Todo o endereçamento das rotinas considera (e precisa ser dessa forma) que as BSTs estão lá, no início de cada banco. Por conta disso você não pode mais simplesmente carregar a parte 8032 do código no IDA ou num editor hexadecimal e fazer patches, porque não sendo no banco zero, vai dar tudo errado.

Para ter um bloco 8032 normal a partir de um bloco 8032 "L" de três bancos basta fazer o seguinte:

copy /b BST+bloco0+BST+bloco1+BST+bloco2 8032_normal.bin


Se você analisar com um comparador binário, é exatamente isso que New Age faz com o novo MtkExtract:
  • 8032__normal.bin -> É o bloco 8032 do jeito que vai para a memória.
  • 8032__flash.bin  -> É o bloco 8032 do jeito que está no firmware.

Note que New Age chama de "common code" o que eu chamo de BST.

Então, para analisar no IDA PRO, você precisa usar 8032__normal.bin

Porém um problema permanece. Após a análise no IDA, você precisa fazer as edições tembém em 8032__normal.bin (não é mais possível editar diretamente o firmware, porque os endereços vistos no IDA só vão corresponder para o banco zero). Depois 8032__normal.bin precisa ser "recortado" e "remontado" como um novo 8032__flash.bin, para só então substituir no firmware.

Esse é mais um motivo para que as ferramentas existentes não tenham condição de lidar com os firmwares novos. Muita coisa precisa ser adaptada para lidar com as duas situações.

« Última modificação: Setembro 06, 2008, 03:00:57 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware MT13x9: Log de Descobertas
« Responder #329 Online: Setembro 08, 2008, 11:50:59 am »
Como ter uma selection bar "colorida" nos firmwares Philips

Estas são as instruções que passei para o pauloturij em maio deste ano.



Pessoalmente não gosto da barra de seleção desse jeito (também não gosto do scrollbar), por tanto não incluí -nem penso incluir- as mudanças no meu firmware. Mas acredito que muita gente prefira assim... por tanto aquí estão as mudanças:

ROM:50AA 02 -> 03

ROM:5AFC 7B -> E4
ROM:5AFD 03 -> FB

ROM:5F35 7B -> E4
ROM:5F36 03 -> FB

ROM:6178 7B -> E4
ROM:6179 03 -> FB

ROM:6EF7 7B -> E4
ROM:6EF8 03 -> FB
ROM:6FA1 7B -> E4
ROM:6FA2 03 -> FB

ROM:885C 7B -> E4
ROM:885D 03 -> E4
ROM:885E E4 -> FB

ROM:9E2A 02 -> 03

(Todos os endereços correspondem ao Banco 1 do firmware do DVP5100 v0E.0A)

Offline zeurt

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 333
  • Aprovação: +47/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #330 Online: Outubro 16, 2008, 12:44:29 am »
Estamos manejando duas hipóteses:

- A sugerida por ele usa o mesmo método do patch Unicode.

Criase uma fonte extendida com carateres normais nas posições normais, e carateres em itálico nas posições extendidas. Quando o Arm detecta a apertura do tag, soma-se um valor X ao valor de cada caratere, coincidindo com o mesmo caracter em itálico. Quando o Arm detecta o fechamento do tag, usa-se os carateres normais.

Se entendí bem, o sugerido por ele é o mesmo que o sugerido por você.

- O que eu sugerí foi: Criar quatro fontes normais e as quatro correspondentes em itálico. E no menu por somente escolha de quatro fontes (as fontes "normais": 1, 3, 5 e 7).

Exemplo:
Fonte 1: Fonte 1 normal
Fonte 2: Fonte 1 itálico
Fonte 3: Fonte 2 normal
Fonte 4: Fonte 2 itálico
Fonte 5: Fonte 3 normal
Fonte 6: Fonte 3 itálico
Fonte 7: Fonte 4 normal
Fonte 8: Fonte 4 itálico
Quando o Arm detecta a apertura do tag, soma 1 ao valor da fonte em uso. Quando detecta o fechamento do tag, resta (sustraí?) 1 ao valor da fonte...

Por enqüanto é tudo em teoría...

Oi, jmaraujo. Alguma novidade na tentativa de implementação do suporte a <i> tag em legendas .srt?

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware MT13x9: Log de Descobertas
« Responder #331 Online: Outubro 16, 2008, 01:41:33 am »
Todo mundo que participou nesse tópico sugeriu alguma coisa (sempre em hipótese), mas o Jor-El, que é programador, sumiu e o tópico ficou esquecido...

Na teoría foi um tópico muito interessante, mas na prática não sei se é possivel...

Offline zeurt

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 333
  • Aprovação: +47/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #332 Online: Janeiro 02, 2009, 01:27:45 am »
Como descobrir a Região do DVD dos Firmwares LGs, analisando os nomes dos arquivos de upgrade por CD

Descobri que a Região do DVD desses Firmwares fica a nossa disposição, nos nomes dos arquivos de upgrade por CD.
Na verdade, as regiões são representadas por letras e não por números (as letras de A a F correspondem as regiões de 1 a 6, enquanto que Region Free (0) é representada por 0 mesmo).
O local dessa letra pode variar um pouco, mas normalmente antecede imediatamente 3 letras como MIE, MIH, MIS, etc.

Vejam exemplos:

Região 4 ou D

DK8321N (extraído pelo Ryan): LV8B3220D.MIH
DK194g (extraído pelo Ryan): LVLV10B02207D.MIE
DV256K: LG_DV_LV070B222030DMIE.ROM
DV397H (Brasileiro, baseado na tela de versão relatada por 2 usuários): LG_DV_LV81F33B40DMSMIS.ROM

Região 2 ou B

LG9843 (Europeu): LV9E12203B.MIH

Região 0

DV397H (Firmware que enviei): LG_DV_LV81F33B400MSMIS.ROM

Destaquei em verde MS, pois foge um pouco dos nomes anteriores. Acho que tem haver com o Chipset MT1389S, já que o Firmware do DV383, que também é recente e tem Firmware MT1389L apresenta ML no lugar.

« Última modificação: Janeiro 02, 2009, 02:05:34 pm por zeurt »

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #333 Online: Setembro 26, 2009, 12:36:44 pm »
Philips DVP5980K/55 - O conteúdo da EEPROM

Eu arrumei disposição hoje para dessoldar o chip de um dos meus DVP5980 e ler no meu Willem.

Antes de dessoldar o chip eu dei um comando de RESET no setup do DVP5980 para carregar os valores default.

Depois de obtido o arquivo (anexo) eu dei uma olhada aleatória em alguns endereços e os valores armazenados correspondem ao default, por isso acredito que a leitura tenha sido um sucesso.



Notem o seguinte:

*Nenhum endereço a partir de 0x1F0 é usado.
*Todos os endereços com conteúdo FF são potencialmente endereços livres. E existe um monte deles mesmo na faixa de 0-255.

Próximo passo: descobrir qual byte é responsável pela identificação do sub-modelo.

« Última modificação: Setembro 27, 2009, 12:58:54 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #334 Online: Setembro 27, 2009, 12:58:25 pm »
Philips DVP5980 - Como é definido o sub-modelo

As posições de EEPROM que definem o sub-modelo são 0x04 e 0x05. A correspondência é esta:

00 FF = DVP5982_37
01 FE = DVP5980K_55 (default)
02 FD = DVP5980K_75
03 FC = DVP5986K_98
04 FB = DVP5986K_51
05 FA = DVP5986K_96
06 F9 = DVP5980K_78

Adicionalmente, qualquer outro par de valores faz o aparelho se identificar como DVP5980K_78. Isso faz algum sentido pois já que o DVP5980K_78 é o último da lista a rotina de identificação deve ser do tipo "se nenhuma opção confere, é o útimo".

É bom também tomar cuidado com as posições 0x01, 0x02 e 0x03. Mudar qualquer um dos valores nessas posições faz com que o aparelho execute uma espécie de RESET onde dezenas de bytes são alterados e as posições 0x04 e 0x05 recebem os valores correspondentes ao DVP5980K_78.

Em resumo, para configurar o sub-modelo é preciso alterar corretamente as posições de 0x01 a 0x05 da EEPROM.

Testes com firmware V43

Existem duas rotinas que lêem essas posições de EEPROM: B3:7CC7 e B5:A68E
Existe uma rotina que grava o sub-modelo em B4:A59C

É bom lembrar que o firmware tem uma função oculta que permite escolher o modelo. Isso é sugerido pela string "!PLS INPUT MODEL CODE:" (B3:39CC). Então não dá para saber se a rotina que grava o sub-modelo é chamada por esta rotina ou pela de RESET.
« Última modificação: Setembro 27, 2009, 01:05:20 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #335 Online: Setembro 27, 2009, 01:19:43 pm »
Philips DVP5980 - Experiências com o conteúdo da EEPROM

Eu coloquei um soquete no DVP5980 para permitir ficar mudando valores na EEPROM usando meu gravador Willem.


Se a EEPROM não estiver respondendo o aparelho trava exibindo "PHILIPS" no display.

Se você mudar todos os valores da EEPROM para zero, ao ligar pela primeira vez o conteúdo da EEPROM é refeito. Tudo fica de tal forma que o aparelho se identifica como um DVP5980K_55. A porta HDMI continua funcionando normalmente após isso, com um detalhe: se na primeira vez que o aparelho for ligado houver um disco dentro, a imagem pela HDMI fica bagunçada, mas basta apertar o botão HD UPSCALE para consertar imediatamente. Se não houver disco a imagem já aparece certa. Não entendi a razão.

Aparentemente o endereço 0xB7 guarda algum tipo de status do aparelho. O valor armazenado alterna entre 0x3E e 0x6E aparentemente dependendo de se a bandeja estava aberta ou fechada quando o aparelho perdeu a energia.
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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #336 Online: Setembro 28, 2009, 10:54:03 am »
É bom também tomar cuidado com as posições 0x01, 0x02 e 0x03. Mudar qualquer um dos valores nessas posições faz com que o aparelho execute uma espécie de RESET onde dezenas de bytes são alterados e as posições 0x04 e 0x05 recebem os valores correspondentes ao DVP5980K_78.
A explicação para isso está em um documento de Cachirulo chamado "Eeprom-Info-1Nov2004". Os quatro primeiro bytes da EEPROM são um HEADER que o player verifica para validar seu conteúdo através da função "EPR_CheckHeader()". Segundo Cachirulo esses quatro primeiros bytes tem a string "MT37", mas isso deve ser coisa de versões antigas. Notem que os bytes 0x03 e 0x04 do DVP5980 formam a string "39".

Eu ainda estou tentando descobrir como se lê o conteúdo da EEPROM diretamente na shared memory. Até agora eu não consegui acertar a localização, pois os valores de offset como 0x1999 simplesmente não conferem.
http://ryan.com.br/smf/index.php?topic=179.msg9171930#msg9171930
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
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #337 Online: Setembro 28, 2009, 12:20:38 pm »
Mais fontes de informação (não estão na lista do primeiro post):

Site de VB6ROCOD (não deixe de ver o fórum)
http://vb6rocod.euracks.com/

Site de HEJ456 (não deixe de ver o fórum)
http://hej456.com/
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

FORUM.RYAN.COM.BR

Re: Firmware MT13x9: Log de Descobertas
« Responder #337 Online: Setembro 28, 2009, 12:20:38 pm »