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

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

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

FORUM.RYAN.COM.BR

Re: Firmware: log de descobertas
« Responder #161 Online: Agosto 18, 2007, 12:57:11 am »

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

FORUM.RYAN.COM.BR

Re: Firmware: log de descobertas
« Responder #169 Online: Agosto 18, 2007, 12:38:24 pm »