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

0 Members and 2 Guests are viewing this topic.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #100 on: July 30, 2007, 02: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.
« Last Edit: July 30, 2007, 02:24:50 PM by Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #101 on: July 30, 2007, 02:21:14 PM »
Muito obrigado!!!  :yahoo!:  Vou testar hoje a noite, e posto aquí o resultado.  8)
Fórum do DVP5100
(novo endereço)

Offline eneris

  • Novato Prolixo
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #102 on: July 30, 2007, 02: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
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #103 on: July 30, 2007, 02: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

« Last Edit: July 30, 2007, 02:39:13 PM by Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline evb62

  • Novato
  • *
  • Posts: 14
  • Aprovação: +0/-0
    • View Profile
PUOs - Prohibited User Operations
« Reply #104 on: July 30, 2007, 02: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:
Code: [Select]
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:
Code: [Select]
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:
Code: [Select]
ROM:0008799E CA F7 0F F9   BL    PATCH_ProhibitFilter
E o patch seria este:

Code: [Select]
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
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #105 on: July 30, 2007, 03: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
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: PUOs - Prohibited User Operations
« Reply #106 on: July 30, 2007, 04: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
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #107 on: July 31, 2007, 12: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+.
Fórum do DVP5100
(novo endereço)

Offline eneris

  • Novato Prolixo
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #108 on: July 31, 2007, 08:23:12 AM »
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
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #109 on: July 31, 2007, 11:25:02 AM »
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!  ;)
Fórum do DVP5100
(novo endereço)

Offline eneris

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

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

Offline jmaraujo

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

Offline ramos80

  • Novato
  • *
  • Posts: 2
  • Aprovação: +0/-0
    • View Profile
Re: Firmware: log de descobertas
« Reply #112 on: July 31, 2007, 02: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
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #113 on: July 31, 2007, 02: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
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #114 on: July 31, 2007, 03: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
  • *
  • Posts: 14
  • Aprovação: +0/-0
    • View Profile
Re: PUOs - Prohibited User Operations
« Reply #115 on: July 31, 2007, 09:49:14 PM »
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.

Quote
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:
Code: [Select]
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:
Code: [Select]
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
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #116 on: August 01, 2007, 09:22:01 AM »
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
 
« Last Edit: August 01, 2007, 09:54:09 AM by Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #117 on: August 01, 2007, 09:23:05 AM »
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.
« Last Edit: August 01, 2007, 09:30:34 AM by Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline eneris

  • Novato Prolixo
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #118 on: August 01, 2007, 09:32:01 AM »
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
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #119 on: August 01, 2007, 09:34:32 AM »
A do DVP720, por exemplo, que tem 5 lugares...
Fórum do DVP5100
(novo endereço)

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #120 on: August 01, 2007, 09:38:13 AM »

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
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #121 on: August 01, 2007, 09:40:32 AM »
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
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #122 on: August 01, 2007, 09:41:57 AM »
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
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #123 on: August 01, 2007, 09:58:37 AM »
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
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #124 on: August 01, 2007, 10:00:46 AM »
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
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #125 on: August 01, 2007, 10:01:34 AM »
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
  • *
  • Posts: 2
  • Aprovação: +0/-0
    • View Profile
Re: Firmware: log de descobertas
« Reply #126 on: August 01, 2007, 02: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).
« Last Edit: August 01, 2007, 02:28:00 PM by Jefferson »

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #127 on: August 02, 2007, 07: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.
« Last Edit: August 02, 2007, 07:49:21 AM by Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #129 on: August 02, 2007, 02: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
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #130 on: August 02, 2007, 02: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...
Fórum do DVP5100
(novo endereço)

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #131 on: August 02, 2007, 02: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
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #132 on: August 02, 2007, 04: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
« Last Edit: August 02, 2007, 05:50:44 PM by Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline eneris

  • Novato Prolixo
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #133 on: August 02, 2007, 05: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
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #134 on: August 02, 2007, 06: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.
« Last Edit: August 02, 2007, 06:10:41 PM by Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #136 on: August 02, 2007, 06: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
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #137 on: August 02, 2007, 06: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 :-[
« Last Edit: August 02, 2007, 06:46:23 PM by eneris »
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #138 on: August 02, 2007, 06: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).

Quote
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.
« Last Edit: August 02, 2007, 06:46:49 PM by jmaraujo »
Fórum do DVP5100
(novo endereço)

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #139 on: August 02, 2007, 06: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
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #140 on: August 02, 2007, 06: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
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #141 on: August 02, 2007, 07: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
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #142 on: August 02, 2007, 07: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
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #143 on: August 02, 2007, 07: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
« Last Edit: August 02, 2007, 07:42:35 PM by eneris »
The Cranberries - em Recife Outubro/2010
Estarei la colado! Ta perto.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #144 on: August 02, 2007, 07: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
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #145 on: August 03, 2007, 08:38:53 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!



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.
« Last Edit: August 03, 2007, 09:41:27 AM by Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #146 on: August 03, 2007, 09:53:16 AM »
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
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #147 on: August 03, 2007, 01: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
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #148 on: August 04, 2007, 05: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.
« Last Edit: August 05, 2007, 08:35:57 AM by Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #149 on: August 05, 2007, 08:27:55 AM »
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
  • **
  • Posts: 71
  • Aprovação: +1/-0
  • My Name is Neo
    • View Profile
    • eXtremeMods
Re: Firmware: log de descobertas
« Reply #150 on: August 05, 2007, 10:32:35 AM »
 :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
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #151 on: August 05, 2007, 10:51:50 AM »

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
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #152 on: August 05, 2007, 11:45:13 AM »
É 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
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #153 on: August 06, 2007, 10:34:05 AM »
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
« Last Edit: August 06, 2007, 10:37:44 AM by Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

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

Offline eneris

  • Novato Prolixo
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #155 on: August 06, 2007, 02: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
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #156 on: August 06, 2007, 03: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.
Fórum do DVP5100
(novo endereço)

Offline Jefferson

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

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".



« Last Edit: August 06, 2007, 08:13:38 PM by Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #158 on: August 08, 2007, 11:21:28 PM »
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.

« Last Edit: August 08, 2007, 11:23:44 PM by Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #159 on: August 09, 2007, 12: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.
« Last Edit: August 09, 2007, 12:12:20 PM by Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #160 on: August 11, 2007, 12: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
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #161 on: August 17, 2007, 08:57:11 PM »
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
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #162 on: August 17, 2007, 09:15:53 PM »
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.
« Last Edit: August 17, 2007, 09:29:56 PM by Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #163 on: August 17, 2007, 11:12:45 PM »
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.
« Last Edit: August 18, 2007, 01:29:56 PM by Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #164 on: August 17, 2007, 11:33:22 PM »
Muito obrigado, Jefferson.  :yahoo!:  Ficou tudo muito claro.  8)

Vou testar e comentar aquí.  ;)
Fórum do DVP5100
(novo endereço)

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #165 on: August 18, 2007, 01: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.
« Last Edit: January 10, 2008, 08:23:07 PM by Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #166 on: August 18, 2007, 02: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.
« Last Edit: August 18, 2007, 01:33:42 PM by Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

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


« Last Edit: August 18, 2007, 02:12:40 PM by Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #168 on: August 18, 2007, 05: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.
« Last Edit: August 18, 2007, 02:14:20 PM by Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #170 on: August 18, 2007, 07: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:





Fórum do DVP5100
(novo endereço)

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #171 on: August 18, 2007, 07: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
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #172 on: August 18, 2007, 08:09:53 PM »

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.
« Last Edit: August 18, 2007, 08:57:08 PM by Jefferson »
Fórum do DVP5100
(novo endereço)

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #173 on: August 18, 2007, 09:34:38 PM »
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.

« Last Edit: August 18, 2007, 09:59:21 PM by Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #174 on: August 18, 2007, 10:02:08 PM »
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
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #175 on: August 18, 2007, 10:48:40 PM »
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
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #176 on: August 19, 2007, 12: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.


« Last Edit: August 19, 2007, 01:37:14 AM by Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

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

« Last Edit: August 19, 2007, 03:30:31 AM by Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #178 on: August 19, 2007, 02: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.
« Last Edit: August 19, 2007, 02:10:08 AM by Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

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

« Last Edit: August 19, 2007, 03:33:08 AM by Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #180 on: August 19, 2007, 03: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
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #181 on: August 19, 2007, 04: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
« Last Edit: August 27, 2007, 02:15:05 PM by Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #182 on: August 19, 2007, 08:02:13 AM »
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
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #183 on: August 19, 2007, 08:17:59 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!:
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

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

Offline jmaraujo

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

Offline fabianr

  • Novato
  • *
  • Posts: 9
  • Aprovação: +0/-0
    • View Profile
Re: Firmware: log de descobertas
« Reply #186 on: August 19, 2007, 10:59:50 PM »
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
  • *
  • Posts: 9
  • Aprovação: +0/-0
    • View Profile
Re: Firmware: log de descobertas
« Reply #187 on: August 19, 2007, 11:11:36 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!:

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
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #188 on: August 19, 2007, 11:25:34 PM »
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.
Fórum do DVP5100
(novo endereço)

Offline fabianr

  • Novato
  • *
  • Posts: 9
  • Aprovação: +0/-0
    • View Profile
Re: Firmware: log de descobertas
« Reply #189 on: August 19, 2007, 11:39:59 PM »
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
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #190 on: August 20, 2007, 01: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
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #191 on: August 20, 2007, 01: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
  • *
  • Posts: 404
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • View Profile
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Reply #192 on: August 20, 2007, 03: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
Fórum do DVP5100
(novo endereço)

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #193 on: August 20, 2007, 04: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
  • *
  • Posts: 4
  • Aprovação: +1/-0
    • View Profile
Re: Firmware: log de descobertas
« Reply #194 on: August 20, 2007, 11:55:53 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!:

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
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #195 on: August 20, 2007, 01: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.
« Last Edit: August 28, 2007, 06:32:39 AM by Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Posts: 1705
  • Aprovação: +0/-0
    • View Profile
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Reply #196 on: August 20, 2007, 02: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
  • *
  • Posts: 9
  • Aprovação: +0/-0
    • View Profile
Re: Firmware: log de descobertas
« Reply #197 on: August 20, 2007, 05: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
  • **
  • Posts: 85
  • Aprovação: +2/-0
  • The Cranberries em Recife Outubro/2010 Eu Vou!
    • View Profile
    • ENERIS Online :: No Need To Argue
Re: Firmware: log de descobertas
« Reply #198 on: August 21, 2007, 07: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
  • *
  • Posts: 9
  • Aprovação: +0/-0
    • View Profile
Re: Firmware: log de descobertas
« Reply #199 on: August 21, 2007, 08:52:47 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.

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....