Firmware MT13x9

MTK Firmware : FAQ de Desenvolvimento

publicado em 12/08/2007

Como regra geral, tenha em mente que Engenharia Reversa é algo muito complicado e não sou especialista nisso (não sou especialista em PN). Eu preciso me basear em documentação e/ou exemplos pré-existentes. Se já não existe um aparelho que faça o que você quer, existem boas chances de que eu não possa fazer. Não é exatamente assim, porque eu conheço aparelhos e firmwares que muitos de vocês não conhecem, mas usem isso como regra geral.

E mesmo que exista um aparelho que faz, isso pode ter sido conseguido com o auxílio do código-fonte (e não por Engenharia Reversa), podendo ser extremamente complicado de duplicar.

A maioria das questões abordadas neste FAQ tem resposta “não” e “talvez”, porque o que tem resposta “SIM” já foi implantado ou está devidamente documentado em algum lugar no meu blog ou no meu fórum.

Este FAQ não se aplica apenas ao Proview DVP-858.

Dá para corrigir o problema do Packet Bitstream em XviD?
Dá para dar suporte a multisessão em mídia -R/+R?

Muito complicado. Ainda não existe um modo de resolver isso que não seja usando partes do firmware de outro aparelho. Além de ser naturalmente complicado emendar partes do firmware de aparelhos diferentes, quando funciona geralmente provoca efeitos colaterais. Eu só pretendo dar atenção a esses assuntos quando tiver notícia de que algum hacker conseguiu resolver o problema modificando diretamente o código.

É possível fazer um ZOOM mais “fluido”?
É possível dar ZOOM Out a um aparelho que não tem a função?

Não existe nenhuma documentação sobre como funciona o ZOOM, nem tenho qualquer notícia de alguém que tenha conseguido isso por Engenharia Reversa.

É possível dar suporte a tags ID3 a um aparelho que não tem?

Talvez. Existe documentação sobre isso e já analisei o problema no Proview DVP-858, mas dá muito trabalho. Envolve implantar muito código, descobrir muitos endereços livres (ou pelo menos “usáveis”) de memória, requer bastante espaço sobrando no banco certo do firmware, etc. E não temos nem mesmo a certeza de que todo o trabalho vai dar resultado, por isso não é uma tarefa que qualquer um vá abraçar à toa.

É possível fazer a seleção de legendas com nome diferente do filme, direto por escolha no browser?

Talvez. Mas não existe documentação nem qualquer precendente.

É possível fazer com que o aparelho suporte a carga de legendas em mídia diferente da do filme, como ocorre no Philips DVP642?

Em primeiro lugar, é bom ter em mente que o DVP642 provavelmente consegue fazer isso por acaso. É um “efeito colateral” da forma como foi programado. Uma programação mais cuidadosa certamente apagaria a memória toda vez que a mídia fosse trocada. E como o programador do DVP642 não teve esse cuidado o usuário acabou ganhando esse recurso extra.

Tendo isso em mente, talvez seja possível implantar isso em um firmware Mediatek. Mas antes disso é necessário conseguir fazer com que as legendas sejam selecionáveis no browser, como no DVP642. Depois se certificar de que a mudança de mídia não apague as regiões de memória que contém a legenda ou apontam para ela. E desligar a carga de arquivos de legenda com mesmo nome que o filme. Não existe documentação sobre como isso pode ser feito, mas é algo que parece viável. Porém tudo isso é feito no código ARM, com o qual eu ainda tenho familiaridade ZERO.

Dá para ter suporte a outros codecs?

Primeiro, vamos usar a terminologia correta: não existem codecs em um DivX player. O que existe é um decodificador. Tendo estabelecido isso: do ponto de vista eletrônico, não é razoável crer que o decodificador seja atualizável por firmware. Acredita-se que toda decodificação esteja fisicamente implantada no chip.

É possível dar suporte a outros containers, como o Matroska?

Talvez. Porém ainda não se sabe como funciona a extração dos streams de audio e video de um container no firmware (é toda feita no código ARM) por isso não há nenhuma indicação clara de que o suporte a um novo container seja possível. Ainda assim, continuará sendo obrigatório que os streams de áudio e vídeo dentro do container sejam suportados.

Dá para quebrar a proteção (HDCP, Macrovision, etc)?

Não existe documentação sobre isso e mesmo que houvesse colocaria o meu trabalho em terreno perigoso. Não pretendo trabalhar com nada disso.

Tem como fazer o aparelho ser compatível com DivX HD (qualquer coisa maior que 720×576)?

Não. Isso requer processadores mais poderosos e mais memória.

A legenda em DivX está boa, mas a dos DVDs é diferente!

Ao contrário da legenda externa DivX, cuja aparência é determinada pelo aparelho, a aparência das legendas de um DVD-Video é deteminada pela produtora do filme e não pode ser alterada por nenhum hack no aparelho.

Eu estou com o problema X, que mesmo tendo instalado a versão Y do firmware Z não foi resolvido!

Era para ser? Está na lista de melhorias divulgada pelo desenvolvedor do firmware?

A versão X do firmware alternativo possui a característica Y?

Se essa é uma característica ausente no firmware oficial no qual o autor do firmware se baseou e este autor não colocou-a na lista de novidades, não. Se você não sabe o que o firmware oficial faz ou não, instale, teste e compare.

Dá para você portar a modificação que você fez no aparelho X para o aparelho Y?

Se eu tenho o aparelho Y, vai depender do meu tempo e das condições oferecidas pelo firmware do aparelho para suportar as mudanças. Se eu não tenho o aparelho Y, esqueça. Já é suficientemente complicado e demorado desenvolver modificações tendo o aparelho para testá-las.

Quando…?
Você tem previsão…?

Deixe para fazer esse tipo de pergunta a quem você estiver pagando. Quem trabalha de graça não gosta de ouvir essas questões (eu fico indignado com elas).

(copyright 2007 – Jefferson Ryan)

Esta página foi visualizada vezes desde desde 12/08/07

Firmware MT13x9

Firmwares Mediatek : Escolhendo Cores

Texto publicado em 05/07/2007 e ainda em rascunho

A explicação que vou dar a seguir é um dos fundamentos necessários para se implementar cores de fontes selecionáveis pelo setup. Mas também é importante quando você quer simplesmente corrigir alguns problemas de cores “amarradas” (muda a cor da legenda e bagunça a cor do texto no browser).

Eu uso como exemplo o firmware do Proview DVP-858, mas por comparação você poderá encontrar as rotinas necessárias na maioria dos outros firmwares. A provável exceção são LG e Pionneer, que são muito diferentes do “normal”.

O conceito de janelas

Um firmware MT13x9 tem a tela loteada em “janelas”. Todo desenho, seja de gráficos ou texto, é sempre feito tendo como alvo uma janela e não a tela. Isso provavelmente é feito para simplificar o posicionamento de objetos, porque você desenha tudo dentro da janela, com coordenadas relativas a ela e não às coordenadas físicas da tela. Aí você consegue reposicionar blocos inteiros de objetos simplesmente mudando as coordenadas da janela, sem precisar mexer nas coordenadas dos objetos.

Você pode ver todas as janelas definidas em um firmware com o software mtkWindows.

Falarei mais sobre janelas um outro dia.

Excetuando os vídeos, a cor de tudo o que é exibido em um firmware Mediatek MT13x9 (ou seja, tudo o que é desenhado pelo processador) depende de palettes (paletas). Cada janela é associada a uma e apenas uma palette (mas várias janelas podem usar a mesma palette). Você pode ver e alterar as palettes abrindo o firmware com o mtkWindows.

No mtkWindows as cores são numeradas de 0 a 15, mas tenha em mente que no firmware a numeração é hexadecimal, de 0x0 a 0xF.

Para evitar ambigüidades, eu vou chamar daqui em diante cada uma das 16 cores da palette de “célula”.

“Used by” mostra que janelas usam esta mesma palette.

Idealmente, cada janela deveria ter sua própria palette, mas nos firmwares Mediatek é comum que várias janelas compartilhem a mesma. Isso só é problema quando você quer trocar a cor de uma das 16 células da palette, porque a mudança tem resultados difíceis de prever. Na maioria das vezes a janela não usa todas as células da palette. Talvez, por exemplo, a janela 0x11 use apenas as células 2 e 3, enquanto a janela 0x0E usa apenas as céluals 4 e 5, mas não conte com isso. Às vezes duas ou mais janelas usam as mesmas células, sem necessidade. Se você pensar bem, verá que no caso de cada janela usar células diferentes da palette, isso justifica várias células com a mesma cor.

Para desenhar qualquer coisa, o firmware nunca diz explicitamente com que cor vai ser feito o desenho. Ele diz quais células vai usar.

Mudando as cores de uma operação

A forma mais básica de se fazer isso é clicando duas vezes sobre a célula cuja cor você quer mudar e selecionando uma nova cor. Mas como essa mudança afeta tudo o que é desenhado na janela e pode ter efeitos indesejáveis em outras janelas ou até mesmo em outros objetos na mesma janela (como é o caso dos ícones e do texto no browser), às vezes é necessáio mudar as células que uma operação de desenho específica usa. É isso que eu vou explicar como é feito.

O Proview DVP-858 usa os endereços XRAM_FC07 e XRAM_FC08 para armazenar as células que serão usadas para exibir um determinado texto. Esses endereços não são os mesmos de firmware para firmware.

A ordem das cores, pelo menos no firmware do Proview, é:

  • XRAM_FC07: Contorno
  • XRAM_FC08: Preenchimento

Para mudar as células, você precisa mudar os valores armazenados em XRAM_FC07 e XRAM_FC08 antes da rotina de desenho (OSD_TextColor) ser chamada.

As listagens abaixo são da versão 20.07 do firmware!

É aqui que são definidas as cores do texto do browser no DVP858.

B1:A502
B1:A505
B1:A507
B1:A508
B1:A509
B1:A50A
B1:A50B
B1:A50C
B1:A50D
B1:A50E
B1:A510
90 FC 07
74 02
F0
A3
04
F0
E4
FB
FD
7F 10
12 1D E0
mov DPTR, #XRAM_FC07
mov A, #2 ; Célula #2 – Contorno
movx @DPTR, A
inc DPTR
inc A ; Célula #3 – Preenchimento
movx @DPTR, A
clr A
mov R3, A
mov R5, A
mov R7, #0x10 ;Janela 0x10
lcall OSD_TextColor
Janela de exibição da duração de MP3, contagem de arquivos, etc
B1:6370
B1:6373
B1:6375
B1:6376
B1:6377
B1:6378
B1:6379
B1:637A
B1:637B
B1:637C
B1:637E
90 FC 07
74 03
F0
A3
14
F0
E4
FB
FD
7F 0F
12 1D E0
mov DPTR, #XRAM_FC07
mov A, #3 ; Célula #3 – Contorno
movx @DPTR, A
inc DPTR
dec A ; Célula #2 – Preenchimento
movx @DPTR, A
clr A
mov R3, A
mov R5, A
mov R7, #0xF ;Janela 0x0F
lcall OSD_TextColor
E agora um trecho de sub_style, onde é definida a cor da legenda:
B1:DCB1
B1:DCB4
B1:DCB6
B1:DCB7
B1:DCB8
B1:DCB9
B1:DCBA
B1:DCBB
B1:DCBC
B1:DCBD
B1:DCBF
90 FC 07
74 03
F0
A3
14
F0
E4
FB
FD
7F 13
12 1D E0
mov DPTR, #XRAM_FC07
mov A, #3 ; Célula #3 – Contorno
movx @DPTR, A
inc DPTR
dec A ; Célula #2 – Preenchimento
movx @DPTR, A
clr A
mov R3, A
mov R5, A
mov R7, #0x13 ;Janela 0x13
lcall OSD_TextColor

Perceba que as três janelas usam as mesmas células, mas o browser usa as cores invertidas. Note que a primeira célula declarada é a 2 e não a 3, como nos casos restantes.

Para fazer com que o browser deixe de ser invertido, basta mudar a primeira célula e trocar a instrução INC A por uma DEC A

B1:A505 mov A, #3
B1:A507 movx @DPTR, A
B1:A508 inc DPTR
B1:A509 DEC A

Você também pode experimentar usar células diferentes, mas perceba que por causa da forma como o assembly é otimizado você está preso a usar células adjacentes. Por exemplo, a mudança abaixo faz o browser usar as células 14 e 13

B1:A505 mov A, #0x0E
B1:A507 movx @DPTR, A
B1:A508 inc DPTR
B1:A509 DEC A

Usar células não-adjacentes é possível, mas requer a criação de novas sub-rotinas.

Como é possível usar essa informação para ter cores selecionáveis no setup?

Como eu disse no início do texto, esta é apenas uma das coisas que você precisa saber. Em resumo: depois de criar um novo menu para permitir a escolha da cor e gravar os valores selecionados na eeprom, você vai ter que mudar a rotina Sub_Style para em vez de usar números de células fixos usar números lidos da eeprom.

A criação de menus fica para um outro tutorial, depois que eu tiver aprendido, claro…

Esta página foi visualizada desde 5/07/07.

Firmware MT13x9

Firmwares Mediatek – Controle Remoto

Este texto tem status de rascunho – publicado em 30/06/2007

Algumas coisas que você precisa ter em mente para entender o texto desta página

  • O disassemblador usado pelos programadores do grupo MT13x9 é o IDA. O IDA não é indispensável, mas ajuda muito a localizar código e entender o que se passa. Você precisa do IDA e dos scripts criados pelo grupo MT13x9, que formatam o código de uma forma “legível” (se é que se pode dizer isso de assembly);
  • Você não pode modificar código no IDA. Para editar o arquivo você ainda precisa de um editor hexadecimal;
  • Examinando os arquivos de script (*.idc) você pode aprender coisas interessantes, incluindo qual a seqüência de bytes usada para localizar determinadas rotinas. Quando uma determinada rotina não é detectada automaticamente você pode examinar a seqüência no script e buscando por partes dela pode acabar determinando a seqüência usada no seu firmware;
  • Na notação usada pelos programadores do MT13x9, “B4:13C4” significa “offset 13C4 da página (bloco) 4 do código”. Em alguns lugares você também vai ver “B4_13C4”, que significa a mesma coisa;
  • A notação hexadecimal usual para um técnico em eletrônica (pelo menos foi essa que eu aprendi) consiste em colocar o sufixo ‘h’ (ex: 22h). Neste texto eu vou usar a forma usada por programadores C, que consiste em colocar o prefixo ‘0x’ (ex: 0x22), porque esta é a notação usada no IDA e pelos programadores do grupo MT13x9;
  • “XRAM” é a memória externa do 8032. Ela é usada como rascunho e para transferir valores entre rotinas.

As tabelas de controle remoto

Usualmente, um firmware Mediatek contém duas grandes tabelas que definem o que é feito quando cada tecla do controle remoto é pressionada. Uma tabela é exclusiva para DVD-Video e a outra para *.avi/*.mpg. Para simplificar, vamos chamar essas tabelas de “DVD” e “ISO” (esse é o termo usado no código-fonte).

O formato da tabela segue a estrutura de uma grande instrução CASE. Com um endereço de 16 bits (o endereço da função a executar) seguido por um valor de 8 bits (o código da respectiva tecla do remoto).

É importante notar que esse código nada tem a ver com o código transmitido pelo remoto, que pode ser completamente diferente. Esse código já é o resultado da função que decodifica o sinal do remoto e nesse ponto geralmente são os mesmos, não importando o aparelho ou remoto usado. Não é possível usar um outro controle remoto mexendo nos valores destas tabelas.

Você encontra uma relação completa dos códigos-padrão para teclas da Mediatek no arquivo IR.CFG do mtkTools 2.42 e no arquivo keydef.h do código-fonte. Nenhuma das duas tabelas bate 100% com os aparelhos que testei, mas a keydef.h é a mais próxima.

Outra coisa que vale a pena notar é que em todos os firmwares que olhei, o buffer do controle remoto sempre está no endereço XRAM_FB00. Basta procurar por menções a esse endereço no firmware para localizar todos os pontos onde o controle remoto é verificado.

Como diferenciar a tabela DVD da tabela ISO.

Em todos os firmwares que verifiquei, os códigos 0x22 e 0x23 sempre estão presentes na tabela DVD, apontando para endereços distintos. E quando estão presentes na tabela ISO, apontam para o mesmo endereço. Esses botões devem ser TITLE e MENU (no DVP-858, certamente são), que não tem função precisa quando você não está vendo um DVD-Video.

Exemplo de Tabela
B4:4F76 .word B4_501F
B4:4F78 .byte 0
B4:4F79 .word B4_501F
B4:4F7B .byte 1
B4:4F7C .word B4_501F
B4:4F7E .byte 2
B4:4F7F .word B4_501F
B4:4F81 .byte 3
B4:4F82 .word B4_501F
B4:4F84 .byte 4
B4:4F85 .word B4_501F
B4:4F87 .byte 5
B4:4F88 .word B4_501F
B4:4F8A .byte 6
B4:4F8B .word B4_501F
B4:4F8D .byte 7
B4:4F8E .word B4_501F
B4:4F90 .byte 8
B4:4F91 .word B4_501F
B4:4F93 .byte 9
B4:4F94 .word B4_501F

B4:4F96 .byte 0xA
B4:4F97 .word B4_5027
B4:4F99 .byte 0xD
B4:4F9A .word B4_5027
B4:4F9C .byte 0xE
B4:4F9D .word B4_5027
B4:4F9F .byte 0xF
B4:4FA0 .word B4_5027
B4:4FA2 .byte 0x10

B4:4FA3 .word B4_502F
B4:4FA5 .byte 0x11
B4:4FA6 .word B4_5037
B4:4FA8 .byte 0x12
No exemplo ao lado temos o início de uma tabela, como visto no IDA. Os códigos de 0x0 a 0xA (geralmente, as teclas numéricas) retornam o endereço B4:501F e os códigos 0xD a 0x10 (geralmente as quatro setas) retornam o endereço B4: 5027

Note que esse é um padrão que serve para identificar esse bloco como uma tabela de controle remoto: A sequëncia de bytes de 0 a 9 intercalada por uma seqüência de words idênticas, seguida por uma seqüência de 0xD a 0x10 que também é intercalada por uma certa word, diferente da anterior.

A partir desse ponto, cada tecla tem geralmente sua própria função. Só os blocos numéricos e de setas compartilham o mesmo endereço.

Para localizar as tabelas

No IDA, procure por: ? ? 00 ? ? 01 ? ? 02 ? ? 03 ? ? 04 ? ? 05 ? ? 06 ? ? 07

No XVI32, procure por: E2 E2 00 E2 E2 01 E2 E2 02 E2 E2 03 E2 E2 04 E2 E2 05 E2 E2 06 E2 E2 07

Como eliminar possibilidades

Você pode sobreescrever uma parte do banco com FFFF e depois testar todas as teclas. As teclas que deveriam funcionar e passarem a apresentar o sinal de proibido estão na parte que você sobreescreveu.

Mas sobreescreva endereço e código. Senão você poderá travar o aparelho ao apertar uma tecla cujo endereço foi sobreescrito.

Dissecando as tabelas do Proview DVP-858

Abaixo, eu fiz uma tabela que agrupa as duas tabelas de remoto do Proview DVP-858. Células em preto significam que o Proview não tem uma atribuição para a respectiva tecla. Linhas inteiras em preto são códigos saltados. Células coloridas de uma mesma cor são células que apontam para a mesma rotina. Eu testei cada um dos códigos para confirmar suas funções, porque no dia do teste eu sequer sabia da existência de IR.CFG e keydef.h.

Códigos sem um “Botão Existente” são funções que poderiam ser usadas se o controle remoto tivesse as respectivas teclas.

A tabela ISO do Proview vai de B4:453F a B4:45C3 e a DVD vai de B4:4F76 a B4:501E

Código
Botão Existente
ISO DVD
Observações
0x00
0
B4:45C4
B4:501F
0x01
1
B4:45C4
B4:501F
0x02
2
B4:45C4
B4:501F
0x03
3
B4:45C4
B4:501F
0x04
4
B4:45C4
B4:501F
0x05
5
B4:45C4
B4:501F
0x06
6
B4:45C4
B4:501F
0x07
7
B4:45C4
B4:501F
0x08
8
B4:45C4
B4:501F
0x09
9
B4:45C4
B4:501F
0x0A
_/__
B4:45C4
B4:501F
0x0D
UP
B4:45CF
B4:5027
0x0E
LEFT
B4:45CF
B4:5027
0x0F
RIGHT
B4:45CF
B4:5027
0x10
DOWN
B4:45CF
B4:5027
0x11
B4:45CF
B4:502F
0x12
Play
B4:45DA
B4:5037
0x13
Pause
B4:45E5
B4:503F
0x14
Stop
B4:460D
B4:5047
0x15
Next >>|
B4:4618
B4:504F
0x16
Prev |<<
B4:4623
B4:5057
0x17
Repeat
B4:462E
B4:505F
0x18
B4:4660
B4:5067
Não identifiquei
0x19
FF
B4:466B
B4:506F
0x1A
REW
B4:4693
B4:5077
0x1B
Slow Forward
B4:46BB
B4:507F
0x1C
B4:5087
DVD: Slow Rewind
0x1D
B4:46C6
B4:508F
DVD/ISO: STEP Forward
0x1E
B4:46D1
B4:5097
DVD: STEP Rewind. DivX:Não identifiquei
0x20
A-B
B4:46DC
B4:509F
0x22
Title
B4:46E7
B4:50A7
0x23
Menu
B4:46E7
B4:50AF
0x24
B4:4656
B4:50B7
Não identifiquei
0x25
B4:50BF
Não identifiquei
0x26
B4:50C7
Não identifiquei
0x28
Audio
B4:473E
B4:50CF
0x29
Subtitle
B4:4749
B4:50D7
0x2B
Angle
B4:4754
B4:50E7
0x2C
Display
B4:475F
B4:50EE
0x2E
GOTO
B4:4787
B4:50F5
0x2F
Bookmark
B4:4791
B4:50FE
0x31
B4:5105
Não identifiquei
0x32
Browse
B4:479B
B4:510C
0x33
Prog
B4:47A5
B4:5113
0x34
B4:47AF
B4:511A
ISO: A mesma função da tecla Repeat. DVD:Shuffle
0x35
Virtual
B4:5121
0x39
B4:5128
Alterna entre Normal/PS, Normal/LB e Widescreen
0x3D
Zoom
B4:47D2
B4:512F
0x3E
B4:47F4
B4:5136
ISO/DVD: Zoom Out
0x41
B4:513D
DVD: Parece a mesma função da tecla Audio
0x42
B4:5144
Não identifiquei
0x57
B4:514B
DVD: Não acontece nada. Nem mesmo o sinal de proibido.
0x68
B4:5152
DVD: Aparece:”Digitar Senha ” na tela, com um campo para digitação de seis dígitos.
0x69
B4:5159
DVD:Exibe “Senha do Disco” na tela e aguarda às cegas um número e PLAY
0x70
Skip
B4:50DF

Teclas cujos códigos não constam da tabela acima, porque são tratadas em outros lugares:

  • MUTE
  • VOL+
  • VOL-
  • POWER
  • EJECT
  • SETUP
  • VIDEO
  • P/N
  • HDMI
  • USB/CARD

Como mudar o comportamento das teclas

Se todas as teclas envolvidas estiverem na tabela, é simples. Basta trocar os respectivos endereços de salto.

Por exemplo, vamos fazer com que as teclas de direção façam o papel das teclas teclas NEXT, PREV, FF e REW. O exemplo abaixo mostra os saltos originais:

Código
Botão
ISO DVD
Observações
0x0D
UP
B4:45CF
B4:5027
0x0E
LEFT
B4:45CF
B4:5027
0x0F
RIGHT
B4:45CF
B4:5027
0x10
DOWN
B4:45CF
B4:5027
0x15
Next >>|
B4:4618
B4:504F
0x16
Prev |<<
B4:4623
B4:5057
0x19
FF
B4:466B
B4:506F
0x1A
REW
B4:4693
B4:5077

Agora, com a modificação:

Código
Botão
ISO DVD
Observações
0x0D
UP
B4:4618
B4:504F
Agora faz o mesmo que NEXT
0x0E
LEFT
B4:4693
B4:5077
Agora faz o mesmo que REW
0x0F
RIGHT
B4:466B
B4:506F
Agora faz o mesmo que FF
0x10
DOWN
B4:4623
B4:5057
Agora faz o mesmo que FWD
0x15
Next >>|
B4:4618
B4:504F
Inalterado
0x16
Prev |<<
B4:4623
B4:5057
Inalterado
0x19
FF
B4:466B
B4:506F
Inalterado
0x1A
REW
B4:4693
B4:5077
Inalterado

Note que eu não mexi no comportamento das teclas originais NEXT, PREV, FF e REW, mas se eu quisesse que elas assumissem o comportamento original das telas UP, LEFT, RIGHT e DOWN, teria sido só uma questão de usar os endereços que sobreescrevi. Note também que eu mudei o comportamento ao mesmo tempo para ISO e DVD, mas poderia ter mudado apenas um dos dois.

Outro exemplo: Ativar uma das funções ocultas do aparelho.

Como você pode ver na minha tabela, a função STEP forward do DVP-858 existe, mas não está atribuída a tecla alguma. Vamos fazer com que ela funcione quando usarmos a tecla ANGLE em modo ISO

Original:

0x1D
B4:46C6
B4:508F
DVD/ISO: STEP Forward
0x2B
Angle
B4:4754
B4:50E7

Modificado

0x2B
Angle
B4:46C6
B4:50E7
Em DVD a tecla vai continuar a agir da mesma forma, mas em ISO será STEP Forward

A tabela em outros aparelhos

Philips DVP 5965K/55 – ISO

B4:5F6D ; ---------------------------------------------------------------------------
B4:5F6D
B4:5F6D BankSw_625_B4_5F6D:                     ; DATA XREF: B0:B0_BS_625_B4_5F6Do
B4:5F6D                                         ; B1:B1_BS_625_B4_5F6Do ...
B4:5F6D                 clr     RAM_2D.5
B4:5F6F                 lcall   BankSw_550_B4_975A
B4:5F72                 jnc     B4_5F7C
B4:5F74                 mov     DPTR, #XRAM_FB00
B4:5F77                 mov     A, #0xFF
B4:5F79                 movx    @DPTR, A
B4:5F7A                 clr     C
B4:5F7B                 ret
B4:5F7C ; ---------------------------------------------------------------------------
B4:5F7C
B4:5F7C B4_5F7C:                                ; CODE XREF: B4:5F72j
B4:5F7C                 mov     DPTR, #XRAM_FB00
B4:5F7F                 movx    A, @DPTR
B4:5F80                 mov     R7, A
B4:5F81                 clr     C
B4:5F82                 subb    A, #0x71 ; 'q'
B4:5F84                 jc      B4_5F87
B4:5F86                 ret
B4:5F87 ; ---------------------------------------------------------------------------
B4:5F87
B4:5F87 B4_5F87:                                ; CODE XREF: B4:5F84j
B4:5F87                 mov     A, R7
B4:5F88                 lcall   B4_?C?CCASE
B4:5F88 ; ---------------------------------------------------------------------------
B4:5F8B                 .word B4_600A
B4:5F8D                 .byte 0
B4:5F8E                 .word B4_600A
B4:5F90                 .byte 1
B4:5F91                 .word B4_600A
B4:5F93                 .byte 2
B4:5F94                 .word B4_600A
B4:5F96                 .byte 3
B4:5F97                 .word B4_600A
B4:5F99                 .byte 4
B4:5F9A                 .word B4_600A
B4:5F9C                 .byte 5
B4:5F9D                 .word B4_600A
B4:5F9F                 .byte 6
B4:5FA0                 .word B4_600A
B4:5FA2                 .byte 7
B4:5FA3                 .word B4_600A
B4:5FA5                 .byte 8
B4:5FA6                 .word B4_600A
B4:5FA8                 .byte 9
B4:5FA9                 .word B4_6015
B4:5FAB                 .byte 0xD
B4:5FAC                 .word B4_6015
B4:5FAE                 .byte 0xE
B4:5FAF                 .word B4_6015
B4:5FB1                 .byte 0xF
B4:5FB2                 .word B4_6015
B4:5FB4                 .byte 0x10
B4:5FB5                 .word B4_6020
B4:5FB7                 .byte 0x12
B4:5FB8                 .word B4_602B
B4:5FBA                 .byte 0x13
B4:5FBB                 .word B4_6053
B4:5FBD                 .byte 0x14
B4:5FBE                 .word B4_605E
B4:5FC0                 .byte 0x15
B4:5FC1                 .word B4_6069
B4:5FC3                 .byte 0x16
B4:5FC4                 .word B4_6074
B4:5FC6                 .byte 0x17
B4:5FC7                 .word B4_60A6
B4:5FC9                 .byte 0x18
B4:5FCA                 .word B4_60B1
B4:5FCC                 .byte 0x19
B4:5FCD                 .word B4_60D9
B4:5FCF                 .byte 0x1A
B4:5FD0                 .word B4_6101
B4:5FD2                 .byte 0x1B
B4:5FD3                 .word B4_610C
B4:5FD5                 .byte 0x1D
B4:5FD6                 .word B4_6117
B4:5FD8                 .byte 0x1E
B4:5FD9                 .word B4_6122
B4:5FDB                 .byte 0x20
B4:5FDC                 .word B4_612D
B4:5FDE                 .byte 0x22
B4:5FDF                 .word B4_612D
B4:5FE1                 .byte 0x23
B4:5FE2                 .word B4_609C
B4:5FE4                 .byte 0x24
B4:5FE5                 .word B4_6184
B4:5FE7                 .byte 0x28
B4:5FE8                 .word B4_618F
B4:5FEA                 .byte 0x29
B4:5FEB                 .word B4_619A
B4:5FED                 .byte 0x2B
B4:5FEE                 .word B4_61A5
B4:5FF0                 .byte 0x2C
B4:5FF1                 .word B4_61CD
B4:5FF3                 .byte 0x2E
B4:5FF4                 .word B4_61D7
B4:5FF6                 .byte 0x2F
B4:5FF7                 .word B4_61E1
B4:5FF9                 .byte 0x32
B4:5FFA                 .word B4_61EB
B4:5FFC                 .byte 0x33


B4:5FFD                 .word B4_61F5
B4:5FFF                 .byte 0x34
B4:6000                 .word B4_6218
B4:6002                 .byte 0x3D
B4:6003                 .word B4_623A
B4:6005                 .byte 0x3E
B4:6006                 .byte    0
B4:6007                 .byte    0
B4:6008                 .word B4_6244
B4:600A ; ---------------------------------------------------------------------------

Philips DVP 5965K/55 – DVD

B4:7A9C ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B4:7A9C
B4:7A9C
B4:7A9C BankSw_626_B4_7A9C:                     ; DATA XREF: B0:B0_BS_626_B4_7A9Co
B4:7A9C                                         ; B1:B1_BS_626_B4_7A9Co ...
B4:7A9C
B4:7A9C ; FUNCTION CHUNK AT B4:787B SIZE 00000004 BYTES
B4:7A9C ; FUNCTION CHUNK AT B4:7880 SIZE 00000026 BYTES
B4:7A9C ; FUNCTION CHUNK AT B4:78E0 SIZE 00000003 BYTES
B4:7A9C
B4:7A9C                 clr     RAM_2D.5
B4:7A9E                 mov     DPTR, #XRAM_FB00
B4:7AA1                 movx    A, @DPTR
B4:7AA2                 lcall   B4_?C?CCASE
B4:7AA2 ; ---------------------------------------------------------------------------
B4:7AA5                 .word B4_7B36
B4:7AA7                 .byte 0
B4:7AA8                 .word B4_7B36
B4:7AAA                 .byte 1
B4:7AAB                 .word B4_7B36
B4:7AAB ; End of function BankSw_626_B4_7A9C
B4:7AAB
B4:7AAD                 .byte 2
B4:7AAE                 .word B4_7B36
B4:7AB0                 .byte 3
B4:7AB1                 .word B4_7B36
B4:7AB3                 .byte 4
B4:7AB4                 .word B4_7B36
B4:7AB6                 .byte 5
B4:7AB7                 .word B4_7B36
B4:7AB9                 .byte 6
B4:7ABA                 .word B4_7B36
B4:7ABC                 .byte 7
B4:7ABD                 .word B4_7B36
B4:7ABF                 .byte 8
B4:7AC0                 .word B4_7B36
B4:7AC2                 .byte 9
B4:7AC3                 .word B4_7B3E
B4:7AC5                 .byte 0xD
B4:7AC6                 .word B4_7B3E
B4:7AC8                 .byte 0xE
B4:7AC9                 .word B4_7B3E
B4:7ACB                 .byte 0xF
B4:7ACC                 .word B4_7B3E
B4:7ACE                 .byte 0x10
B4:7ACF                 .word B4_7B46
B4:7AD1                 .byte 0x11
B4:7AD2                 .word B4_7B4E
B4:7AD4                 .byte 0x12
B4:7AD5                 .word B4_7B56
B4:7AD7                 .byte 0x13
B4:7AD8                 .word B4_7B5E
B4:7ADA                 .byte 0x14
B4:7ADB                 .word B4_7B66
B4:7ADD                 .byte 0x15
B4:7ADE                 .word B4_7B6E
B4:7AE0                 .byte 0x16
B4:7AE1                 .word B4_7B76
B4:7AE3                 .byte 0x17
B4:7AE4                 .word B4_7B7E
B4:7AE6                 .byte 0x18
B4:7AE7                 .word B4_7B86
B4:7AE9                 .byte 0x19
B4:7AEA                 .word B4_7B8E
B4:7AEC                 .byte 0x1A
B4:7AED                 .word B4_7B96
B4:7AEF                 .byte 0x1B
B4:7AF0                 .word B4_7B9E
B4:7AF2                 .byte 0x1C
B4:7AF3                 .word B4_7BA6
B4:7AF5                 .byte 0x1D
B4:7AF6                 .word B4_7BAE
B4:7AF8                 .byte 0x1E
B4:7AF9                 .word B4_7BB6
B4:7AFB                 .byte 0x20
B4:7AFC                 .word B4_7BBE
B4:7AFE                 .byte 0x22
B4:7AFF                 .word B4_7BC6
B4:7B01                 .byte 0x23
B4:7B02                 .word B4_7BCD
B4:7B04                 .byte 0x24
B4:7B05                 .word B4_7BD4
B4:7B07                 .byte 0x28
B4:7B08                 .word B4_7BDB
B4:7B0A                 .byte 0x29
B4:7B0B                 .word B4_7BE2
B4:7B0D                 .byte 0x2B
B4:7B0E                 .word B4_7BE9
B4:7B10                 .byte 0x2C
B4:7B11                 .word B4_7BF0
B4:7B13                 .byte 0x2E
B4:7B14                 .word B4_7BF9
B4:7B16                 .byte 0x2F
B4:7B17                 .word B4_7C00
B4:7B19                 .byte 0x31
B4:7B1A                 .word B4_7C07
B4:7B1C                 .byte 0x32
B4:7B1D                 .word B4_7C0E
B4:7B1F                 .byte 0x33
B4:7B20                 .word B4_7C15
B4:7B22                 .byte 0x34
B4:7B23                 .word B4_7C1C
B4:7B25                 .byte 0x39
B4:7B26                 .word B4_7C23
B4:7B28                 .byte 0x3D
B4:7B29                 .word B4_7C2A
B4:7B2B                 .byte 0x3E
B4:7B2C                 .word B4_7C31
B4:7B2E                 .byte 0x57
B4:7B2F                 .word B4_7C38
B4:7B31                 .byte 0x68
B4:7B32                 .byte    0
B4:7B33                 .byte    0
B4:7B34                 .word B4_7C3F
B4:7B36 ; ---------------------------------------------------------------------------

Lenoxx DV-406 – ISO

B4:13FC ; ---------------------------------------------------------------------------
B4:13FC
B4:13FC BankSw_485_B4_13FC:                     ; DATA XREF: B0:B0_BS_485_B4_13FCo
B4:13FC                                         ; B1:B1_BS_485_B4_13FCo ...
B4:13FC                 clr     RAM_27.4
B4:13FE                 mov     DPTR, #XRAM_FB00
B4:1401                 movx    A, @DPTR
B4:1402                 mov     R7, A
B4:1403                 xrl     A, #0x2B
B4:1405                 jz      B4_1410
B4:1407                 mov     A, R7
B4:1408                 xrl     A, #0x3D
B4:140A                 jz      B4_1410
B4:140C                 mov     A, R7
B4:140D                 cjne    A, #0x29, B4_1424 ; ')'
B4:1410
B4:1410 B4_1410:                                ; CODE XREF: B4:1405j B4:140Aj
B4:1410                 mov     R7, #2
B4:1412                 lcall   B4_BS_45_B1_9285
B4:1415                 jnc     B4_1424
B4:1417                 mov     R3, #4
B4:1419                 mov     R5, #0x39 ; '9'
B4:141B                 mov     R4, #0
B4:141D                 mov     R7, #2
B4:141F                 mov     R6, #7
B4:1421                 lcall   B4_BS_101_B3_6B05
B4:1424
B4:1424 B4_1424:                                ; CODE XREF: B4:140Dj B4:1415j
B4:1424                 lcall   B4_BS_405_B1_7B1E
B4:1427                 jnc     B4_142B
B4:1429                 clr     C
B4:142A                 ret
B4:142B ; ---------------------------------------------------------------------------
B4:142B
B4:142B B4_142B:                                ; CODE XREF: B4:1427j
B4:142B                 mov     DPTR, #XRAM_FB00
B4:142E                 movx    A, @DPTR
B4:142F                 mov     R7, A
B4:1430                 clr     C
B4:1431                 subb    A, #0x84 ; 'ä'
B4:1433                 jc      B4_1436
B4:1435                 ret
B4:1436 ; ---------------------------------------------------------------------------
B4:1436
B4:1436 B4_1436:                                ; CODE XREF: B4:1433j
B4:1436                 mov     A, R7
B4:1437                 lcall   B4_?C?CCASE
B4:1437 ; ---------------------------------------------------------------------------
B4:143A                 .word B4_14B0
B4:143C                 .byte 0
B4:143D                 .word B4_14B0
B4:143F                 .byte 1
B4:1440                 .word B4_14B0
B4:1442                 .byte 2
B4:1443                 .word B4_14B0
B4:1445                 .byte 3
B4:1446                 .word B4_14B0
B4:1448                 .byte 4
B4:1449                 .word B4_14B0
B4:144B                 .byte 5
B4:144C                 .word B4_14B0
B4:144E                 .byte 6
B4:144F                 .word B4_14B0
B4:1451                 .byte 7
B4:1452                 .word B4_14B0
B4:1454                 .byte 8
B4:1455                 .word B4_14B0
B4:1457                 .byte 9
B4:1458                 .word B4_14BB
B4:145A                 .byte 0xD
B4:145B                 .word B4_14BB
B4:145D                 .byte 0xE
B4:145E                 .word B4_14BB
B4:1460                 .byte 0xF
B4:1461                 .word B4_14BB
B4:1463                 .byte 0x10
B4:1464                 .word B4_14C6
B4:1466                 .byte 0x12
B4:1467                 .word B4_14D1
B4:1469                 .byte 0x13
B4:146A                 .word B4_14F9
B4:146C                 .byte 0x14
B4:146D                 .word B4_1544
B4:146F                 .byte 0x15
B4:1470                 .word B4_1583
B4:1472                 .byte 0x16
B4:1473                 .word B4_15C2
B4:1475                 .byte 0x17
B4:1476                 .word B4_15EA
B4:1478                 .byte 0x18
B4:1479                 .word B4_15F5
B4:147B                 .byte 0x19
B4:147C                 .word B4_1652
B4:147E                 .byte 0x1A
B4:147F                 .word B4_16AF
B4:1481                 .byte 0x1B
B4:1482                 .word B4_16BA
B4:1484                 .byte 0x1D
B4:1485                 .word B4_16C5
B4:1487                 .byte 0x1E
B4:1488                 .word B4_16D0
B4:148A                 .byte 0x20
B4:148B                 .word B4_16F2
B4:148D                 .byte 0x28
B4:148E                 .word B4_1714
B4:1490                 .byte 0x29
B4:1491                 .word B4_171F
B4:1493                 .byte 0x2B
B4:1494                 .word B4_172A
B4:1496                 .byte 0x2C
B4:1497                 .word B4_1787
B4:1499                 .byte 0x2E
B4:149A                 .word B4_1792
B4:149C                 .byte 0x2F
B4:149D                 .word B4_17BA
B4:149F                 .byte 0x32
B4:14A0                 .word B4_17DC
B4:14A2                 .byte 0x33
B4:14A3                 .word B4_1803
B4:14A5                 .byte 0x34
B4:14A6                 .word B4_1834
B4:14A8                 .byte 0x3D
B4:14A9                 .word B4_1851
B4:14AB                 .byte 0x3E
B4:14AC                 .byte    0
B4:14AD                 .byte    0
B4:14AE                 .word B4_185B
B4:14B0 ; ---------------------------------------------------------------------------

Lenoxx DV-406 – DVD

B4:2D01 ; ---------------------------------------------------------------------------
B4:2D01
B4:2D01 BankSw_486_B4_2D01:                     ; DATA XREF: B0:B0_BS_486_B4_2D01o
B4:2D01                                         ; B1:B1_BS_486_B4_2D01o ...
B4:2D01                 clr     RAM_27.4
B4:2D03                 mov     DPTR, #XRAM_FC17
B4:2D06                 movx    A, @DPTR
B4:2D07                 anl     A, #0xFD
B4:2D09                 movx    @DPTR, A
B4:2D0A                 mov     DPTR, #XRAM_FB00
B4:2D0D                 movx    A, @DPTR
B4:2D0E                 lcall   B4_?C?CCASE
B4:2D0E ; ---------------------------------------------------------------------------
B4:2D11                 .word B4_2DA5
B4:2D13                 .byte 0
B4:2D14                 .word B4_2DA5
B4:2D16                 .byte 1
B4:2D17                 .word B4_2DA5
B4:2D19                 .byte 2
B4:2D1A                 .word B4_2DA5
B4:2D1C                 .byte 3
B4:2D1D                 .word B4_2DA5
B4:2D1F                 .byte 4
B4:2D20                 .word B4_2DA5
B4:2D22                 .byte 5
B4:2D23                 .word B4_2DA5
B4:2D25                 .byte 6
B4:2D26                 .word B4_2DA5
B4:2D28                 .byte 7
B4:2D29                 .word B4_2DA5
B4:2D2B                 .byte 8
B4:2D2C                 .word B4_2DA5
B4:2D2E                 .byte 9
B4:2D2F                 .word B4_2DAD
B4:2D31                 .byte 0xD
B4:2D32                 .word B4_2DAD
B4:2D34                 .byte 0xE
B4:2D35                 .word B4_2DAD
B4:2D37                 .byte 0xF
B4:2D38                 .word B4_2DAD
B4:2D3A                 .byte 0x10
B4:2D3B                 .word B4_2DB5
B4:2D3D                 .byte 0x11
B4:2D3E                 .word B4_2DBD
B4:2D40                 .byte 0x12
B4:2D41                 .word B4_2DC5
B4:2D43                 .byte 0x13
B4:2D44                 .word B4_2DCD
B4:2D46                 .byte 0x14
B4:2D47                 .word B4_2DD5
B4:2D49                 .byte 0x15
B4:2D4A                 .word B4_2DDD
B4:2D4C                 .byte 0x16
B4:2D4D                 .word B4_2DE5
B4:2D4F                 .byte 0x17
B4:2D50                 .word B4_2DED
B4:2D52                 .byte 0x18
B4:2D53                 .word B4_2DF5
B4:2D55                 .byte 0x19
B4:2D56                 .word B4_2DFD
B4:2D58                 .byte 0x1A
B4:2D59                 .word B4_2E05
B4:2D5B                 .byte 0x1B
B4:2D5C                 .word B4_2E0D
B4:2D5E                 .byte 0x1C
B4:2D5F                 .word B4_2E15
B4:2D61                 .byte 0x1D
B4:2D62                 .word B4_2E1D
B4:2D64                 .byte 0x1E
B4:2D65                 .word B4_2E25
B4:2D67                 .byte 0x20
B4:2D68                 .word B4_2E2D
B4:2D6A                 .byte 0x22
B4:2D6B                 .word B4_2E35
B4:2D6D                 .byte 0x23
B4:2D6E                 .word B4_2E3D
B4:2D70                 .byte 0x24
B4:2D71                 .word B4_2E45
B4:2D73                 .byte 0x28
B4:2D74                 .word B4_2E58
B4:2D76                 .byte 0x29
B4:2D77                 .word B4_2E5F
B4:2D79                 .byte 0x2B
B4:2D7A                 .word B4_2E66
B4:2D7C                 .byte 0x2C
B4:2D7D                 .word B4_2E6D
B4:2D7F                 .byte 0x2E
B4:2D80                 .word B4_2E76
B4:2D82                 .byte 0x2F
B4:2D83                 .word B4_2E7D
B4:2D85                 .byte 0x31
B4:2D86                 .word B4_2E84
B4:2D88                 .byte 0x32
B4:2D89                 .word B4_2E8B
B4:2D8B                 .byte 0x33
B4:2D8C                 .word B4_2E92
B4:2D8E                 .byte 0x34
B4:2D8F                 .word B4_2E99
B4:2D91                 .byte 0x39
B4:2D92                 .word B4_2EA0
B4:2D94                 .byte 0x3D
B4:2D95                 .word B4_2EA7
B4:2D97                 .byte 0x3E
B4:2D98                 .word B4_2E4C
B4:2D9A                 .byte 0x51
B4:2D9B                 .word B4_2EAE
B4:2D9D                 .byte 0x57
B4:2D9E                 .word B4_2EB5
B4:2DA0                 .byte 0x7F
B4:2DA1                 .byte    0
B4:2DA2                 .byte    0
B4:2DA3                 .word B4_2EBC
B4:2DA5 ; ---------------------------------------------------------------------------

Philips DVP3040K/55 – ISO

B1:48EB ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B1:48EB
B1:48EB
B1:48EB BankSw_483_B1_48EB:                     ; DATA XREF: B0:B0_BS_483_B1_48EBo
B1:48EB                                         ; B1:B1_BS_483_B1_48EBo ...
B1:48EB                 clr     RAM_27.5
B1:48ED                 lcall   BankSw_603_B1_879C
B1:48F0                 jnc     B1_48FA
B1:48F2                 mov     DPTR, #XRAM_FB00
B1:48F5                 mov     A, #0xFF
B1:48F7                 movx    @DPTR, A
B1:48F8                 clr     C
B1:48F9                 ret
B1:48FA ; ---------------------------------------------------------------------------
B1:48FA
B1:48FA B1_48FA:                                ; CODE XREF: BankSw_483_B1_48EB+5j
B1:48FA                 mov     DPTR, #XRAM_FB00
B1:48FD                 movx    A, @DPTR
B1:48FE                 mov     R7, A
B1:48FF                 clr     C
B1:4900                 subb    A, #0x71 ; 'q'
B1:4902                 jc      B1_4905
B1:4904                 ret
B1:4905 ; ---------------------------------------------------------------------------
B1:4905
B1:4905 B1_4905:                                ; CODE XREF: BankSw_483_B1_48EB+17j
B1:4905                 mov     A, R7
B1:4906                 lcall   B1_?C?CCASE
B1:4906 ; ---------------------------------------------------------------------------
B1:4909                 .word B1_497F
B1:490B                 .byte 0
B1:490C                 .word B1_497F
B1:490E                 .byte 1
B1:490F                 .word B1_497F
B1:4911                 .byte 2
B1:4912                 .word B1_497F
B1:4914                 .byte 3
B1:4915                 .word B1_497F
B1:4917                 .byte 4
B1:4918                 .word B1_497F
B1:491A                 .byte 5
B1:491B                 .word B1_497F
B1:491D                 .byte 6
B1:491E                 .word B1_497F
B1:4920                 .byte 7
B1:4921                 .word B1_497F
B1:4923                 .byte 8
B1:4924                 .word B1_497F
B1:4926                 .byte 9
B1:4927                 .word B1_498A
B1:4929                 .byte 0xD
B1:492A                 .word B1_498A
B1:492C                 .byte 0xE
B1:492D                 .word B1_498A
B1:492F                 .byte 0xF
B1:4930                 .word B1_498A
B1:4932                 .byte 0x10
B1:4933                 .word B1_4995
B1:4935                 .byte 0x12
B1:4936                 .word B1_49A0
B1:4938                 .byte 0x13
B1:4939                 .word B1_49C8
B1:493B                 .byte 0x14
B1:493C                 .word B1_49D3
B1:493E                 .byte 0x15
B1:493F                 .word B1_49DE
B1:4941                 .byte 0x16
B1:4942                 .word B1_49E9
B1:4944                 .byte 0x17
B1:4945                 .word B1_4A11
B1:4947                 .byte 0x18
B1:4948                 .word B1_4A1C
B1:494A                 .byte 0x19
B1:494B                 .word B1_4A44
B1:494D                 .byte 0x1A
B1:494E                 .word B1_4A6C
B1:4950                 .byte 0x1B
B1:4951                 .word B1_4A77
B1:4953                 .byte 0x1D
B1:4954                 .word B1_4A82
B1:4956                 .byte 0x1E
B1:4957                 .word B1_4A8D
B1:4959                 .byte 0x20
B1:495A                 .word B1_4A98
B1:495C                 .byte 0x28
B1:495D                 .word B1_4AA3
B1:495F                 .byte 0x29
B1:4960                 .word B1_4AAE
B1:4962                 .byte 0x2B
B1:4963                 .word B1_4AB9
B1:4965                 .byte 0x2C
B1:4966                 .word B1_4AE1
B1:4968                 .byte 0x2E
B1:4969                 .word B1_4AEB
B1:496B                 .byte 0x2F
B1:496C                 .word B1_4AF5
B1:496E                 .byte 0x32
B1:496F                 .word B1_4AFF
B1:4971                 .byte 0x33
B1:4972                 .word B1_4B09
B1:4974                 .byte 0x34
B1:4975                 .word B1_4B2C
B1:4977                 .byte 0x3D
B1:4978                 .word B1_4B4E


B1:497A                 .byte 0x3E
B1:497B                 .byte    0
B1:497C                 .byte    0
B1:497D                 .word B1_4B58
B1:497F ; ---------------------------------------------------------------------------

Philips DVP3040K/55 – DVD

B1:5F9E ; ---------------------------------------------------------------------------
B1:5F9E
B1:5F9E BankSw_484_B1_5F9E:                     ; DATA XREF: B0:B0_BS_484_B1_5F9Eo
B1:5F9E                                         ; B1:B1_BS_484_B1_5F9Eo ...
B1:5F9E                 clr     RAM_27.5
B1:5FA0                 mov     DPTR, #XRAM_FB00
B1:5FA3                 movx    A, @DPTR
B1:5FA4                 lcall   B1_?C?CCASE
B1:5FA4 ; ---------------------------------------------------------------------------
B1:5FA7                 .word B1_6038
B1:5FA9                 .byte 0
B1:5FAA                 .word B1_6038
B1:5FAC                 .byte 1
B1:5FAD                 .word B1_6038
B1:5FAF                 .byte 2
B1:5FB0                 .word B1_6038
B1:5FB2                 .byte 3
B1:5FB3                 .word B1_6038
B1:5FB5                 .byte 4
B1:5FB6                 .word B1_6038
B1:5FB8                 .byte 5
B1:5FB9                 .word B1_6038
B1:5FBB                 .byte 6
B1:5FBC                 .word B1_6038
B1:5FBE                 .byte 7
B1:5FBF                 .word B1_6038
B1:5FC1                 .byte 8
B1:5FC2                 .word B1_6038
B1:5FC4                 .byte 9
B1:5FC5                 .word B1_6040
B1:5FC7                 .byte 0xD
B1:5FC8                 .word B1_6040
B1:5FCA                 .byte 0xE
B1:5FCB                 .word B1_6040
B1:5FCD                 .byte 0xF
B1:5FCE                 .word B1_6040
B1:5FD0                 .byte 0x10
B1:5FD1                 .word B1_6048
B1:5FD3                 .byte 0x11
B1:5FD4                 .word B1_6050
B1:5FD6                 .byte 0x12
B1:5FD7                 .word B1_6058
B1:5FD9                 .byte 0x13
B1:5FDA                 .word B1_6060
B1:5FDC                 .byte 0x14
B1:5FDD                 .word B1_6068
B1:5FDF                 .byte 0x15
B1:5FE0                 .word B1_6070
B1:5FE2                 .byte 0x16
B1:5FE3                 .word B1_6078
B1:5FE5                 .byte 0x17
B1:5FE6                 .word B1_6080
B1:5FE8                 .byte 0x18
B1:5FE9                 .word B1_6088
B1:5FEB                 .byte 0x19
B1:5FEC                 .word B1_6090
B1:5FEE                 .byte 0x1A
B1:5FEF                 .word B1_6098
B1:5FF1                 .byte 0x1B
B1:5FF2                 .word B1_60A0
B1:5FF4                 .byte 0x1C
B1:5FF5                 .word B1_60A8
B1:5FF7                 .byte 0x1D
B1:5FF8                 .word B1_60B0
B1:5FFA                 .byte 0x1E
B1:5FFB                 .word B1_60B8
B1:5FFD                 .byte 0x20
B1:5FFE                 .word B1_60C0
B1:6000                 .byte 0x22
B1:6001                 .word B1_60C8
B1:6003                 .byte 0x23
B1:6004                 .word B1_60CF
B1:6006                 .byte 0x24
B1:6007                 .word B1_60D6
B1:6009                 .byte 0x28
B1:600A                 .word B1_60DD
B1:600C                 .byte 0x29
B1:600D                 .word B1_60E4
B1:600F                 .byte 0x2B
B1:6010                 .word B1_60EB
B1:6012                 .byte 0x2C
B1:6013                 .word B1_60F2
B1:6015                 .byte 0x2E
B1:6016                 .word B1_60FB
B1:6018                 .byte 0x2F
B1:6019                 .word B1_6102
B1:601B                 .byte 0x31
B1:601C                 .word B1_6109
B1:601E                 .byte 0x32
B1:601F                 .word B1_6110
B1:6021                 .byte 0x33
B1:6022                 .word B1_6117
B1:6024                 .byte 0x34
B1:6025                 .word B1_611E
B1:6027                 .byte 0x39
B1:6028                 .word B1_6125
B1:602A                 .byte 0x3D
B1:602B                 .word B1_612C
B1:602D                 .byte 0x3E
B1:602E                 .word B1_6133
B1:6030                 .byte 0x57
B1:6031                 .word B1_613A
B1:6033                 .byte 0x68
B1:6034                 .byte    0
B1:6035                 .byte    0
B1:6036                 .word B1_6141
B1:6038 ; ---------------------------------------------------------------------------

JTEC MTK 7000 – ISO

B4:3C40 ; ---------------------------------------------------------------------------
B4:3C40
B4:3C40 BankSw_505_B4_3C40:                     ; DATA XREF: B0:B0_BS_505_B4_3C40o
B4:3C40                                         ; B1:B1_BS_505_B4_3C40o ...
B4:3C40                 clr     RAM_27.4
B4:3C42                 lcall   B4_BS_428_B1_7B99
B4:3C45                 jnc     B4_3C49
B4:3C47                 clr     C
B4:3C48                 ret
B4:3C49 ; ---------------------------------------------------------------------------
B4:3C49
B4:3C49 B4_3C49:                                ; CODE XREF: B4:3C45j
B4:3C49                 mov     DPTR, #XRAM_FB00
B4:3C4C                 movx    A, @DPTR
B4:3C4D                 mov     R7, A
B4:3C4E                 clr     C
B4:3C4F                 subb    A, #0x6D ; 'm'
B4:3C51                 jc      B4_3C55
B4:3C53                 clr     C
B4:3C54                 ret
B4:3C55 ; ---------------------------------------------------------------------------
B4:3C55
B4:3C55 B4_3C55:                                ; CODE XREF: B4:3C51j
B4:3C55                 mov     A, R7
B4:3C56                 lcall   B4_?C?CCASE
B4:3C56 ; ---------------------------------------------------------------------------
B4:3C59                 .word B4_3CD2
B4:3C5B                 .byte 0
B4:3C5C                 .word B4_3CD2
B4:3C5E                 .byte 1
B4:3C5F                 .word B4_3CD2
B4:3C61                 .byte 2
B4:3C62                 .word B4_3CD2
B4:3C64                 .byte 3
B4:3C65                 .word B4_3CD2
B4:3C67                 .byte 4
B4:3C68                 .word B4_3CD2
B4:3C6A                 .byte 5
B4:3C6B                 .word B4_3CD2
B4:3C6D                 .byte 6
B4:3C6E                 .word B4_3CD2
B4:3C70                 .byte 7
B4:3C71                 .word B4_3CD2
B4:3C73                 .byte 8
B4:3C74                 .word B4_3CD2
B4:3C76                 .byte 9
B4:3C77                 .word B4_3CD2
B4:3C79                 .byte 0xA
B4:3C7A                 .word B4_3CDD
B4:3C7C                 .byte 0xD
B4:3C7D                 .word B4_3CDD
B4:3C7F                 .byte 0xE
B4:3C80                 .word B4_3CDD
B4:3C82                 .byte 0xF
B4:3C83                 .word B4_3CDD
B4:3C85                 .byte 0x10
B4:3C86                 .word B4_3CE8
B4:3C88                 .byte 0x12
B4:3C89                 .word B4_3CF3
B4:3C8B                 .byte 0x13
B4:3C8C                 .word B4_3D1B
B4:3C8E                 .byte 0x14
B4:3C8F                 .word B4_3D26
B4:3C91                 .byte 0x15
B4:3C92                 .word B4_3D31
B4:3C94                 .byte 0x16
B4:3C95                 .word B4_3D3C
B4:3C97                 .byte 0x17
B4:3C98                 .word B4_3D64
B4:3C9A                 .byte 0x18
B4:3C9B                 .word B4_3D6F
B4:3C9D                 .byte 0x19
B4:3C9E                 .word B4_3D97
B4:3CA0                 .byte 0x1A
B4:3CA1                 .word B4_3DBF
B4:3CA3                 .byte 0x1B
B4:3CA4                 .word B4_3DCA
B4:3CA6                 .byte 0x1D
B4:3CA7                 .word B4_3DD5
B4:3CA9                 .byte 0x1E
B4:3CAA                 .word B4_3DE0
B4:3CAC                 .byte 0x20
B4:3CAD                 .word B4_3DEB
B4:3CAF                 .byte 0x28
B4:3CB0                 .word B4_3DF6
B4:3CB2                 .byte 0x29
B4:3CB3                 .word B4_3E01
B4:3CB5                 .byte 0x2B
B4:3CB6                 .word B4_3E0C
B4:3CB8                 .byte 0x2C
B4:3CB9                 .word B4_3E34
B4:3CBB                 .byte 0x2E
B4:3CBC                 .word B4_3E3E
B4:3CBE                 .byte 0x2F
B4:3CBF                 .word B4_3E48
B4:3CC1                 .byte 0x32
B4:3CC2                 .word B4_3E52
B4:3CC4                 .byte 0x33
B4:3CC5                 .word B4_3E5C
B4:3CC7                 .byte 0x34
B4:3CC8                 .word B4_3E7F
B4:3CCA                 .byte 0x3D
B4:3CCB                 .word B4_3EA1
B4:3CCD                 .byte 0x3E
B4:3CCE                 .byte    0
B4:3CCF                 .byte    0
B4:3CD0                 .word B4_3EAB
B4:3CD2 ; ---------------------------------------------------------------------------

JTEC MTK 7000 – DVD

B4:4293 ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B4:4293
B4:4293
B4:4293 BankSw_506_B4_4293:                     ; DATA XREF: B0:B0_BS_506_B4_4293o
B4:4293                                         ; B1:B1_BS_506_B4_4293o ...
B4:4293                 clr     RAM_27.4
B4:4295                 mov     DPTR, #XRAM_FB00
B4:4298                 movx    A, @DPTR
B4:4299                 lcall   B4_?C?CCASE
B4:4299 ; ---------------------------------------------------------------------------
B4:429C                 .word B4_4333
B4:429E                 .byte 0
B4:429F                 .word B4_4333
B4:42A1                 .byte 1
B4:42A2                 .word B4_4333
B4:42A4                 .byte 2
B4:42A5                 .word B4_4333
B4:42A7                 .byte 3
B4:42A8                 .word B4_4333
B4:42AA                 .byte 4
B4:42AB                 .word B4_4333
B4:42AD                 .byte 5
B4:42AE                 .word B4_4333
B4:42B0                 .byte 6
B4:42B1                 .word B4_4333
B4:42B3                 .byte 7
B4:42B4                 .word B4_4333
B4:42B6                 .byte 8
B4:42B7                 .word B4_4333
B4:42B9                 .byte 9
B4:42BA                 .word B4_4333
B4:42BC                 .byte 0xA
B4:42BD                 .word B4_433B
B4:42BF                 .byte 0xD
B4:42C0                 .word B4_433B
B4:42C2                 .byte 0xE
B4:42C3                 .word B4_433B
B4:42C5                 .byte 0xF
B4:42C6                 .word B4_433B
B4:42C8                 .byte 0x10
B4:42C9                 .word B4_4343
B4:42CB                 .byte 0x11
B4:42CC                 .word B4_434B
B4:42CE                 .byte 0x12
B4:42CF                 .word B4_4353
B4:42D1                 .byte 0x13
B4:42D2                 .word B4_435B
B4:42D4                 .byte 0x14
B4:42D5                 .word B4_4363
B4:42D7                 .byte 0x15
B4:42D8                 .word B4_436B
B4:42DA                 .byte 0x16
B4:42DB                 .word B4_4373
B4:42DD                 .byte 0x17
B4:42DE                 .word B4_437B
B4:42E0                 .byte 0x18
B4:42E1                 .word B4_4383
B4:42E3                 .byte 0x19
B4:42E4                 .word B4_438B
B4:42E6                 .byte 0x1A
B4:42E7                 .word B4_4393
B4:42E9                 .byte 0x1B
B4:42EA                 .word B4_439B
B4:42EC                 .byte 0x1C
B4:42ED                 .word B4_43A3
B4:42EF                 .byte 0x1D
B4:42F0                 .word B4_43AB
B4:42F2                 .byte 0x1E
B4:42F3                 .word B4_43B3
B4:42F5                 .byte 0x20
B4:42F6                 .word B4_43BB
B4:42F8                 .byte 0x22
B4:42F9                 .word B4_43C3
B4:42FB                 .byte 0x23
B4:42FC                 .word B4_43CB
B4:42FE                 .byte 0x24
B4:42FF                 .word B4_43D3
B4:4301                 .byte 0x28
B4:4302                 .word B4_43DA
B4:4304                 .byte 0x29
B4:4305                 .word B4_43E1
B4:4307                 .byte 0x2B
B4:4308                 .word B4_43E8
B4:430A                 .byte 0x2C
B4:430B                 .word B4_43EF
B4:430D                 .byte 0x2E
B4:430E                 .word B4_43F8
B4:4310                 .byte 0x2F
B4:4311                 .word B4_43FF
B4:4313                 .byte 0x31
B4:4314                 .word B4_4406
B4:4316                 .byte 0x32
B4:4316 ; End of function BankSw_506_B4_4293
B4:4316
B4:4317                 .word B4_440D
B4:4319                 .byte 0x33
B4:431A                 .word B4_4414
B4:431C                 .byte 0x34
B4:431D                 .word B4_441B
B4:431F                 .byte 0x35
B4:4320                 .word B4_4422
B4:4322                 .byte 0x39
B4:4323                 .word B4_4429
B4:4325                 .byte 0x3D
B4:4326                 .word B4_4430
B4:4328                 .byte 0x3E
B4:4329                 .word B4_4437
B4:432B                 .byte 0x57
B4:432C                 .word B4_443E
B4:432E                 .byte 0x68
B4:432F                 .byte    0
B4:4330                 .byte    0
B4:4331                 .word B4_4445
B4:4333 ; ---------------------------------------------------------------------------

Textos Relacionados

Esta página foi visualizada vezes desde 30/06/07.

Firmware MT13x9

Editando Firmwares Mediatek : O ícone do ZOOM

Texto publicado em 07/06/2007

Em vários firmwares Mediatek (mas não em todos) quando você seleciona um nível de zoom, o ícone de zoom fica na tela permanentemente, junto com um texto indicando o nível de zoom escolhido (vamos chamar isso de “mensagem de zoom”).

Eu acho que esse é o comportamento correto e desejável, porque eu quero saber a qualquer momento que a imagem que está na tela não é a “normal” do filme. Porém algumas pessoas consideram a presença da mensagem na tela terrívelmente incômoda. Eu não tenho problemas com isso por dois motivos:

  • Considero que assistir qualquer coisa com o zoom (IN) ativado é um sacrilégio 🙂
  • Meu cérebro filtra imagens estáticas na tela. Depois de um curto intervalo de tempo eu deixo de notar a mensagem.

De qualquer forma, este texto explica como modificar o firmware para que a mensagem de zoom desapareça após cerca de 5 segundos. É baseado no Proview DVP-858, mas a técnica é a mesma para outros aparelhos, mudando apenas alguns valores.

Nota: Este patch/hack só desliga a mensagem de zoom. No DVP-858, apenas em DVD-Video, também é exibido um guia de Pan&Scan no canto direito inferior que vai permanecer na tela enquanto o zoom estiver ativado. Veja o exemplo abaixo:

A imagem é de um DVD-Video widescreen com um zoom de 4X no DVP-858 (a imagem deveria estar ocupando a tela toda na altura, mas falarei sobre esse problema no review do aparelho). A mensagem de zoom é a branca superior. O guia de Pan&Scan é o quadrado translúcido branco com um quadrado translúcido azul interno. Esse guia não é removido pelo patch.

A explicação de como o patch é feito foi dada pelo hacker Stanislav “cax” Borutsky (a.k.a borus) no documento Patching_HU3899_from_A_to_Z.txt. O trecho que nos interessa é este aqui:

The hex sequence we are going to search appears twice:
once for DivX/MPG mode, another for DVD playback.

After the sequence there should be code that loads into registers R4,R5
number of zoom message in "Data Part->OSD->OSD Languages2->Language 1[00]" (MTK ReMaker).
The number is a 2-byte long value HHLL (for example, 0x207 means HH=0x02, LL=0x07)

You can read more about it in the "Info - OSD Text Initialization.rtf" document.

Usually loading of HHLL into R4,R5 looks like the following:

7D LL     mov R5, LL
7C HH     mov R4, HH

and the sequence you should use in this case is:
90 xx xx 74 01 F0 A3 74 xx F0 A3 74 xx F0 7B FF 7D LL 7C HH
(xx is "any byte can be here" wildcard)

What to patch in it: 7B FF => 7B 08

Neste texto eu vou traduzir a explicação de borus de um jeito mais didático. 🙂

No final, você também terá aprendido uma ou duas coisas sobre firmwares Mediatek que serão úteis em outros hacks.

Números de mensagem

Cada mensagem exibida na tela tem um número. Para podermos localizar no firmware os pontos onde a mensagem de zoom é exibida, primeiro precisamos saber o número da mensagem de zoom. Isso pode ser feito facilmente com o mtkremaker:

  1. Expanda a árvore até selecionar Language 1 (00);
  2. Clique na primeira mensagem e depois com as setas do teclado vá rolando as mensagens até…
  3. … o ícone que representa o zoom ser exibido na seção inferior. Esta mensagem é a mensagem de zoom.

No exemplo, o número que procurávamos é 0229h

“\3d” é uma variável. Em seu lugar é exibido 2X, 3X, 4X, 1/2X, 1/3X, 1/4X… dependendo do nível de zoom escolhido

No firmware existem dois pontos onde a mensagem de zoom é exibida: um para DVD-Video e outro para avi/.mpg. Nos dois pontos precisamos mudar o tempo de exibição. Devemos procurar pela seguinte sequëncia de bytes:

90 xx xx 74 01 F0 A3 74 xx F0 A3 74 xx F0 7B FF 7D LL 7C HH

Onde “xx” é um coringa que quer dizer “qualquer valor” e “LL HH” é o número da mensagem de zoom, com os bytes invertidos. Como determinamos que para esse firmware o número é 0229, a seqüência que devemos procurar é:

90 xx xx 74 01 F0 A3 74 xx F0 A3 74 xx F0 7B FF 7D 29 7C 02

Procurando a seqüência de bytes no firmware

O trecho que procuramos sempre estará na seção 8032 do firmware. Como a seção 8032 não é armazenada comprimida, como acontece com a seção ARM, você pode procurar diretamente com um editor hexa no firmware. Porém é sempre recomendável que você trabalhe apenas com a seção 8032, para não acabar alterando outras seções por acidente. Para fazer isso, use o mtkremaker para salvar a seção 8032 inteira em um arquivo separado.

Se você sabe usar um editor hexadecimal qualquer, use-o. Aqui eu vou explicar como é feito no freeware XVI32, que permite a busca fácil de seqüências hexa com caracteres coringa.

Abra a seção 8032 do firmware no XVI32

Certifique-se de que o editor está no modo overwrite

Clique em Search – Find para abrir o diálogo de busca:

Certifique-se de que tudo está selecionado como acima.

Você vai preencher com a string:

90 2E 2E 74 01 F0 A3 74 2E F0 A3 74 2E F0 7B FF 7D 29 7C 02

Note que essa é a mesma string da qual falamos antes, com os coringas substituídos por “2E”

90 xx xx 74 01 F0 A3 74 xx F0 A3 74 xx F0 7B FF 7D 29 7C 02

porque este é o “coringa” (joker) default do XVI32:

Na imagem acima, a seqüência começa com “90”. O “9” não coube na tela.

O XVI32 vai se posicionar no início da primeira ocorrência:

clique sobre o primeiro “FF” e digite “08”

Tecle F3 para procurar a próxima ocorrência e repita a edição (lembre-se de que existe uma ocorrência para DVD-Video e outra para .avi/.mpg)

Atenção: se a string aparecer mais de duas vezes, algo está errado.

Se a string não for encontrada, seu caso é mais complicado que o padrão.

Salve a seção 8032

Com o mtkRemaker, substitua a seção 8032 original pela que você acabou de modificar.

Teste o novo firmware no aparelho.

Esta página usa a biblioteca javascript freeware overlib

Esta página foi visualizada vezes desde desde 07/06/2007

Firmware MT13x9

Firmwares Mediatek : Como criar suas próprias fontes

atualizado em 06/06/2007

Neste texto (e em qualquer texto onde eu estiver falando de um DivX player) quando eu falar em browser estou falando de file browser (o “menu” onde se escolhem arquivos) e não de Internet Browser, que é o que a maioria das pessoas associa à palavra “browser”.

Este procedimento está longe de ser completo. Ele funciona com vários aparelhos, incluindo fazer as fontes de browser para o Lenoxx DV-406 e as fontes de legendas para o DVP5100/DVP5965. Possivelmente ocorrerão problemas não abordados aqui na hora de escolher fontes que serão usadas para outros propósitos e/ou em outros aparelhos. Parte dos problemas podem ser resolvidos usando outro software do Cherry: o mtkWindows, mas ainda não entendi realmente como a coisa funciona.

Este procedimento explica como remover o fundo translúcido dos firmwares Philips. São dois passos distintos: a remoção do fundo e a remoção da transparência .

Este procedimento cria uma fonte branca com contorno preto. Se você quiser outra cor, provavelmente vai ter que mexer com o mtkWindows.

O melhor tutorial que já encontrei foi este aqui. Porém acho muito confuso, talvez por ter sido mal traduzido do francês para o Inglês. E não aborda os problemas de cor e fundo. Talvez você tenha mais sorte com ele do que eu 🙂

Agora que eu já dominei (ou assim penso) esta fração do processo, talvez fique mais fácil descobrir nas próximas semanas como funciona o processo inteiro de criação de fontes.

Programas necessários:

Você pode escolher a fonte que quiser, mas algumas evidentemente serão mais “eficientes” que outras. Este tutorial vai usar a fonte Impact, por ser razoávelmente visível, bonita e compacta (cabem mais caracteres na tela); O resultado, quando a fonte for aplicada ao file browser, ficará parecido com este (na seção onde está a barra laranja):

Nem sempre uma fonte que alcance ótima legibilidade no browser vai ficar igualmente boa nas legendas DivX e vice-versa. Por sorte, na maioria dos firmwares as fontes são independentes .

Passo 1 – Criando uma fonte compatível

Execute o MtkFontCreator. Se ele fizer a solicitação abaixo, indique o arquivo mtkfontcreator.ini (no mesmo diretório onde está o .exe) e clique em “abrir”.

  1. Para exibir todos os caracteres acentuados da lingua portuguesa, é preciso selecionar a Windows Code Page 1252 aqui;
  2. Você pode escolher a fonte que quiser. Este tutorial vai usar a fonte Impact, por ser razoávelmente visível, bonita e compacta (cabem mais caracteres na tela). É importante frisar aqui que é perda de tempo tentar escolher a cor da fonte, porque isso será ignorado;
  3. O tamanho da fonte é crítico. Será 16 neste exemplo, mas você poderá escolher outros valores, tendo em mente que quanto maior a fonte, menos caracteres caberão na tela;
  4. Para assegurar a legibilidade quando a imagem sob o texto tiver a mesma cor que a fonte, é necessário que exista um contorno (outline). Este exemplo usará um contorno de apenas um ponto;
  5. Em alguns firmwares (o DVP5100 é um exemplo) é imprescindível que “widths are div. by” esteja marcada e que o valor seja “4”, senão o texto será corrompido na tela, como no exemplo abaixo:
  6. Isso é inteiramente opcional. Desmarcar esta opção deixa o texto um pouco mais compacto;
  7. Mande salvar o arquivo. O nome sugerido pelo mtkFontCreator descreve os parâmetros usados para criar a fonte. É aconselhável que você salve como sugerido.

Passo 2 – Substituindo no firmware

Abra o firmware que você deseja modificar com o mtkRemaker e expanda a árvore como indicado até chegar em “Fonts”

Você sempre vai encontrar “Fonts” no mesmo lugar, mas a quantidade de fontes (no exemplo são 5) varia de firmware para firmware. Também não existe uma regra geral que permita saber qual o papel de cada fonte (na verdade, nem dá para saber quais estão mesmo sendo usadas), por isso para determinar qual fonte dever ser trocada você tem dois métodos básicos:

  • Seguir a dica de alguém que já descobriu;
  • Testar uma por uma

Se você tiver que apelar para o segundo método, pelo menos pode tentar chutar de uma forma mais ou menos inteligente. Aproveite-se do fato de que o mtkRemaker exibe a aparência de cada fonte para tentar descobrir qual a fonte certa por comparação com o que é visto na tela quando o aparelho está em funcionamento. Não se anime, porque isso pode ser mais difícil do que parece e talvez você só consiga eliminar as alternativas “absurdas”, como as fonte que mostram caracteres exclusivamente orientais.

Neste tutorial, vamos substituir a fonte 4, que é a fonte do browser no Lenoxx DV-406.

Clique com o botão direito no nome da fonte e escolha “Replace”

Uma caixa de seleção de arquivos vai se abrir. Selecione o arquivo que você criou com o mtkFontCreator.

A nova aparência da fonte já deverá aparecer

Salve o firmware modificado

Passo 2.1

Se a fonte original tem transparência, a modificada também ficará transparente. Para tornar a fonte opaca, você precisa agora abrir o firmware no mtkWindows, selecionar a janela de legenda (é a 0x11 para firmwares Philips e 0x12 para o Lenoxx) e colocar blend=3.

[06/06/07] Para os Philips DVP5960 e DVP5965 a janela é a 0x12.

Salve e teste no DivX player.

As pedras no caminho

Se você já tinha seguido o procedimento de troca das imagens de background antes, provavelmente vai achar que a troca das fontes, do jeito que descevi, é ainda mais fácil. Infelizmente, em muitos casos você vai ter que pegar desvios entre os passos 1 e 2.

Para Lenoxx DV-406 – Estude o passo 1.5
Para Philips –
Estude os passos 1.5 e 1.6

Passo 1.5 – Inverter a cor da fonte

Se você seguir o procedimento exatamente do jeito descrito acima para a fonte do browser no Lenoxx DV-406, o resultado não vai ser bem o que você esperava:

Não era para a fonte ser branca com contorno preto?

Você não precisa ler isto aqui.

Infelizmente, é o programa no firmware que decide como tratar cada cor da fonte. E o programa do Lenoxx diz que a cor exibida será o inverso da que realmente está lá.

Eu apanhei muito tempo com esse problema, bem antes de ter o Lenoxx. Se existe opção no mtkFontCreator para salvar com a cor invertida, eu não a encontrei. Eu fiz duas tentativas de aprender como se criava fontes ao longo do último ano e desisti quando esbarrava nesse problema de não conseguir acertar a cor da fonte.

Até que na semana passada eu esbarrei em um post na Softpedia de um cara explicando como se resolvia, pelo menos para alguns aparelhos (como o Lenoxx). Basta usar um editor de imagens para inverter as cores da fonte. Mas como usar um editor de imagens se a fonte salva pelo mtkFontCreator não é uma imagem?

Aí é que está… ela é, se você quiser. mtkFontCreator permite a você exportar como BMP, fazer a alteração no editor de imagens, importar de volta o BMP alterado e salvar como fonte Mediatek.

Minha primeira experiência foi usando a ferramenta Color Replacement Pen do Ulead PhotoImpact (UPI). Foi um sucesso, mas o processo é um saco para fazer e ainda mais chato para criar um tutorial. Além disso, eu tenho o UPI, mas a maioria dos meus leitores provavelmente usa outro programa e o menor demo que você pode baixar da Ulead tem dezenas de megabytes e emporcalha seu HD (os softwares novos da Ulead estão parecendo com os drivers da HP). Depois de procurar por algumas horas por um freeware que desse conta do recado, sem êxito, decidi verificar se dava para criar um programa só para fazer isso, em Delphi.

Foi mais fácil (e muito mais divertido) que procurar o freeware 🙂

Prepare a fonte no mtFontCreator e exporte como BMP de arquivo único, usando o botão indicado

Abra a fonte no mtkSwapColors. Você a verá como uma “tira”, pois é assim que o arquivo é salvo.

[02/06/2007] Se você quer fazer uma fonte para Philips, sem o fundo translúcido, pule para o passo 1.6

Clique em Processar. O resultado da inversão já aparecerá na tela.

Passo 1.6 – Remover o fundo

Se você está criando uma fonte de legendas (não se aplica ao browser) para um aparelho Philips, ainda há um passo a mais antes de salvar, se você quiser se livrar do fundo translúcido que a Philips coloca por trás da legenda.

Para isso é necessária a versão 0.12 de mtkSwapColors. Clique no botão “Converter para Philips…”. A fonte deverá ficar parecida com isto:

[06/06/2007] A versão do mtkSwapColors disponível online hoje, apesar de indicar “0.12”, é diferente. Eu me enrolei em algum momento quando a cópia no drive 4shared foi apagada e eu tive que fazer o upload de uma nova cópia. Com ela, se for um firmware Philips, você deve clicar direto em “converter…” sem clicar em “processar” antes.

Salve o arquivo.

Abra o arquivo no mtkFontCreator, usando o botão de importação de BMP indicado

Se tudo correu bem, a fonte já deverá aparecer invertida. Se a fonte não aparecer, algo deu errado no processo. Repita com atenção.

Salve como uma fonte Mediatek

Agora você pode inserir a fonte no firmware, seguindo o passo 2 deste tutorial.

Apêndice

Que fonte mudar?

Lenoxx DV-406

Fonte 1 Legendas DivX, seções 1 e 2 do browser e no Setup
Fonte 2 nula
Fonte 4 Seção 3 do browser (lista de arquivos)
Fonte 3 Diversos ícones
Fonte 5 Existe uma fonte, mas não sei se ou onde é usada

Philips DVP5100

Fonte 1 browser
Fonte 2 caracteres orientais
Fonte 3 caracteres orientais
Fonte 4 caracteres orientais
Fonte 5 caracteres árabes ?
Fonte 6 Diversos ícones
Fonte 7 Legenda DivX 1
Fonte 8 Legenda DivX 2

Philips DVP5965K

Fonte 1 Legendas DivX (segundo um leitor)
Fonte 2 Caracteres orientais
Fonte 3 Caracteres orientais
Fonte 4 Caracteres orientais
Fonte 5 Caracteres ??
Fonte 6 Diversos ícones
Fonte 7 browser ?

Textos Relacionados

Esta página foi visualizada vezes desde desde 14/01/07.

Firmware MT13x9

Mediatek 13×9: Como alterar a imagem de background

Texto publicado em 18/09/2005 e atualizado em 29/11/2006

Nos firmwares Mediatek existem duas imagens de background. A primeira, que você vê assim que liga o aparelho, e a segunda, onde é exibido o “file browser”. Este tutorial mostra explícitamente apenas como mudar a primeira. Para mudar a segunda, você terá dicas no texto.

Para este tutorial você precisará de duas ferramentas criadas pelo MaBreaker:

Este procedimento é composto de dois passos, sendo que no primeiro passo você tem duas possibilidades

  • Primeiro Passo – Preparar a nova imagem
    • Opção 1: usando a imagem de um outro firmware (brincadeira de criança)
    • Opção 2: usando uma imagem qualquer (você vai se enrolar todo se não prestar atenção)
  • Segundo Passo – Substituição

Notas Gerais:

  • Seja qual for a imagem e o método escolhidos, você deve atentar para os efeitos do overscan de sua TV. A imagem na TV ficará sem uma parte das bordas. Se você não quiser perder nada nas bordas precisará acrescentar uma moldura à imagem antes de iniciar o processamento.
  • Se você for usar a foto de uma pessoa, poderá ficar evidente uma certa distorção (a pessoa poderá parecer mais magra ou mais gorda que o real), por causa da adaptação que os players fazem entre as resoluções PAL e NTSC. É possível reduzir essa distorção, mas isso não é explicado ainda neste texto.

Primeiro Passo – Preparar a Nova Imagem

Opção 1: usando a imagem de um outro firmware

Abra no MtkRemaker o firmware cuja imagem de background você deseja copiar. Expanda a estrutura até chegar a “MPEG 0”, como mostra a figura abaixo:

Nota: Se você escolher “MPEG 2” ao lado, vai trabalhar na tela de background do file browser. Este tutorial trabalha apenas com “MPEG 0” , mas o procedimento é o mesmo para mudar “MPEG 2”

Nos LGs, “MPEG 1” também pode ser mudado, no Philips, não.

A imagem que você deseja deve aparecer do lado direito

Clique com o botão direito sobre o item MPEG 0 e escolha Save

Na caixa que se abre dê um nome ao arquivo, que será salvo com a extensão .mpg (mas não é um filme)

O arquivo extraído já está no formato requerido para a inserção. Você já pode ir para o Segundo Passo

Opção 2: usando uma imagem qualquer

Este procedimento parece complicado, mas uma vez decorado você verá que a parte mais difícil vai ser compor uma imagem de bom gosto para usar 🙂

[11/12/2006] – Eu ainda não tive tempo de reescrever este tutorial, mas se você usar meu software bkgComposer vai facilitar o trabalho, porque ele é mais “esperto” que o MpegTool

Execute o Mpeg Tool

Com ele, abra a imagem que você deseja transformar.

Atenção: É aconselhável que você copie a imagem desejada para o diretório do Mpeg Tool e abra-a lá, para evitar problemas ao longo do processo!

Eu estou usando uma imagem comum usada em papel de parede do Windows, com 800×600:

Clique na aba “Output Image”. Se sua imagem não estiver com o aspect ratio correto, você perceberá uma distorção. No exemplo abaixo, a imagem ficou achatada na altura porque o original era 800×600 (1,3333) e agora está exibido como 720×480 (1,5).

Eu sugiro que você mude o Target para PAL, que vai dar um aspect ratio de 1,25 e uma distorção notavelmente menor.

O Mpeg Tool permite que você recorte apenas o pedaço da imagem que você deseja, mas eu prefiro fazer isso em um editor de imagens à parte e não vou explicar isto neste tutorial.

Mande salvar o arquivo. Ele será salvo como .mpg

Atenção: É aconselhável que você salve no diretório do Mpeg Tool para evitar problemas no passo a seguir!

Agora vem um detalhe interessante. Por algum motivo, o Mpeg Tool não cria o arquivo com a qualidade que precisamos (talvez seja para manter compatibilidade com aparelhos antigos de pouca memória), por isso precisamos fazer uma pequena alteração.

Vá até o diretório onde está o Mpeg Tool e edite o arquivo convert.bat que está lá:

Este arquivo é recriado todas as vezes que você manda salvar no programa, por isso você terá sempre que repetir este passo.

Abra o arquivo no notepad. O conteúdo do arquivo é mais ou menos assim (o destaque em negrito é meu):

“I:\MTKMpegTool01b1\jpeg2yuv.exe” -Ip -L0 -n1 -v0 -f25 -j “I:\_MTZ tools\MTKMpegTool01b1\manga75(800×600).jpg” | “I:\MTKMpegTool01b1\mpeg2enc.exe” -f3 -n p -b 1000 -a 1 -v 0 -o “I:\MTKMpegTool01b1\manga75(800×600).mpg”

Este é um comando para processar o .seu JPG com o programa jpeg2yuv e passar o resultado para ser codificado com o programa mpeg2enc. Nós precisamos mudar o parâmetro em negrito para aumentar a bitrate do arquivo .mpg resultante. A recomendação que li é mudar de 1000 para 9000, mas não sei como se chegou a esse número.

O resultado ficará assim:

“I:\MTKMpegTool01b1\jpeg2yuv.exe” -Ip -L0 -n1 -v0 -f25 -j “I:\_MTZ tools\MTKMpegTool01b1\manga75(800×600).jpg” | “I:\MTKMpegTool01b1\mpeg2enc.exe” -f3 -n p -b 9000 -a 1 -v 0 -o “I:\MTKMpegTool01b1\manga75(800×600).mpg”

Salve convert.bat e execute-o. Isso vai substituir o arquivo criado pelo MpegTool pela cópia corrigida.

Segundo Passo – Substituição

Agora vamos para o firmware destino. Abra-o no MtkRemaker e expanda a estrutura até chegar a “MPEG 0” como indicado abaixo:

Nota: Se você escolher “MPEG 2” ao lado, vai trabalhar na tela de background do file browser. Este tutorial trabalha apenas com “MPEG 0” , mas o procedimento é o mesmo para mudar “MPEG 2”

Nos LGs, “MPEG 1” também pode ser mudado, no Philips, não.

Ao clicar aí, o background pré-existente deve aparecer do lado direito:

Clique com o botão direito sobre o item MPEG 0 e escolha Replace

Use a caixa de diálogo que se abre para encontrar e selecionar o arquivo .mpg que você criou no Primeiro Passo.

A imagem acima é da Opção 2 do tutorial. Se você tiver seguido a Opção 1 será a mostrada a imagem correspondente.

Somente para quem usou a opção 2: É a partir deste momento que aquela pequena alteração que fizemos no arquivo batch começa a mostrar sua diferença. Abaixo, eu mostro em detalhe como já aparece no MtkRemaker:

mpg do jeito que é criado pelo Mpeg Tool (1000) mpg recriado (9000)

Prestou atenção da cintura para baixo? 😉

Acredite: A diferença é ainda mais acentuada (fica gritante mesmo) na TV!

Agora só falta salvar o firmware modificado:

E gravar no CD ou transferir por cabo.

Note que eu escolhi colocar a imagem no formato PAL, mas não consegui notar nenhuma distorção de aspecto quando esta é exibida na minha TV no modo NTSC.

O Umbanda_Violento (autor do primeiro firmware modificado para o DVP5100) criou um grande tutorial em flash (uns 3MB), em inglês, bem mais detalhado graficamente, que você pode baixar aqui.

Textos Relacionados

Firmware MT13x9

Como usar a porta serial dos players baseados em chipset Mediatek 1389

Texto publicado em 11/09/2005 e atualizado em 22/09/2008

Atenção: Se seu aparelho é um modelo novo que usa memória flash do tipo serial, você precisará ler isto aqui também.

Aparelhos de DVD com DivX baseados em chipset Mediatek 1389 tem uma característica única: seu firmware pode ser lido ou gravado com o auxílio de um cabo ligado ao computador. Mesmo que o aparelho tenha ficado totalmente inoperante e aparentemente morto por causa de um upgrade de firmware desastrado feito via CD, a atualização por cabo continuará funcionando e poderá “ressuscitar” o aparelho. Eu mesmo já trouxe de volta do “céu dos DVD players” vários aparelhos, meus e de pessoas que contrataram os meus serviços.

Até o presente momento, os únicos aparelhos do mercado brasileiro que sabidamente usam chipset Mediatek MT1389 são:

  • LG DK194G
  • LG DV256K
  • LG DK8321N
  • LG DK9923N
  • LG DVD9913N
  • LG DVD9513N
  • LG DV397H – Requer a leitura também disto aqui.
  • LG DV383
  • Proview DVP-858
  • Proview DVP-801
  • Proview DVP-801L
  • Proview DVP-816
  • Punktal PK-DV246 (vendido na fronteira com o Uruguai)
  • Pioneer 575/578
  • Pioneer 588
  • Pioneer DV 383
  • Powerpack X600
  • Philco DV-PIX20
  • Philips DVP5100
  • Philips DVP5980K (Todos os Philips DVP598x são presumidamente Mediatek)
  • Philips DVP3040K – Apenas o lote com número de série xx1Axxxxxxxxxx
  • Philips DVP5965K (Todos os Philips DVP596x são presumidamente Mediatek)
  • Philips DVP3254 (K, KX e KMX);
  • Philips DVP5990
  • Philips PET 725
  • Philips HTS 3300
  • Lenoxx DV-406
  • JTEC MTK7000
  • Suzuki SZ915
  • Eletrovision EV407 – Cuidado! A Eletrovision muda o que tem dentro sem mudar o modelo!
  • Eletrovision EV597 – Requer a leitura também disto aqui. Cuidado! A Eletrovision muda o que tem dentro sem mudar o modelo!

O que você precisa:

  • Software MTKTOOL (ou MT1389 Flasher) – Atenção: nem sempre a versão mais recente do Mtktool é a melhor.
  • Software MTKRemaker;
  • Um PC com uma porta serial livre;
  • Um cabo especial de fácil obtenção.

Para conectar o PC ao seu DVD player, você precisa de um cabo especial. O cabo é tecnicamente muito simples: trata-se de um cabo serial de três fios com um conversor CMOS -> RS232

Eu fiz meu próprio conversor com um CI HIN232, um punhado de capacitores e alimentei com os 5V da porta USB do meu micro (isso dispensa o 78L05). Por sorte, você não precisa construir seu próprio conversor, porque alguns cabos de comunicação seriais para telefones celulares, do tipo usado para transferir toques e fotos, servem perfeitamente!

Em meus testes, eu usei os cabos dos telefones Siemens C45 e C55. Os cabos tem conectores diferentes, mas internamente são a mesma coisa.

Notas:

Nem todos os cabos de celular servem para esse propósito e a maioria esmagadora dos que serve é do tipo serial.

Não tente conectar o PC diretamente ao DVD player sem o cabo adequado. Ao PC você não fará mal algum, mas provavelmente fritará a porta serial do chip Mediatek e talvez inutilize o aparelho para sempre. O PC segue o padrão RS232 e, geralmente, suas portas seriais apresentam tensões de -12V a +12V. A porta serial Mediatek vai de 0 a +3.2V, por isso é preciso usar um adaptador apropriado.

O cabo serial de celular não requer alimentação externa, porque usa componentes de baixíssimo consumo sendo assim possível alimentá-lo com os próprios sinais da porta serial. Mas se você for construir seu próprio cabo provavelmente só vai encontrar componentes de consumo “normal” que precisarão de alimentação externa.

A soldagem requerida na placa pode ser delicada. No DVP5100, por exemplo, os pontos são muito pequenos e próximos. Se você não tem experiência com soldagem eletrônica pode provocar um dano sério à placa, curto-circuitando trilhas adjacentes com solda ou descolando as ilhas por excesso de calor. No DK8321 a soldagem é mais fácil, mas em compensação você tem que desmontar praticamente todo o aparelho para chegar aos pontos de soldagem no fundo da placa.

De três cabos que comprei, apenas um foi capaz de ler o firmware, embora os três tenham sido capazes de gravar (é o mais importante) normalmente. Ainda não descobri a razão disso.

Comunicação usando cabos USB:

Usar um cabo USB para celulares Siemens é possível, mas um tanto mais complicado e não tem o mesmo resultado que usar um cabo serial. Somente é possível porque os cabos USB Siemens vem com um driver que instala uma porta serial virtual que pode ser acessada pelo MTKtool.

Nos meus testes, usei cabos de dois fabricantes. Em todos os casos, é preciso determinar que a porta serial virtual instalada pelo driver use uma denominação de porta serial livre de COM1 a COM4.

O primeiro, que usava chip Prolific PL-2303, funciona precáriamente. O processo é tão rápido quanto com cabo serial, mas coisas estranhas acontecem, incluindo a reinicialização espontânea do computador durante o processo de upgrade, provocada por erro no arquivo ser2pl.sys (a porta serial virtual instalada pela Prolific), versões 2.0.0.18 e 1.3.0.1. Tanto com o MTktool 1.29 quanto com o 1.31

O segundo, com chip SILABS CP2101, funciona, mas é extremamente lento para o upgrade (versão 4.28.0.2700). Gravar um novo firmware leva cerca de 26 minutos com o cabo USB. E não houve nada que eu pudesse fazer na configuração da porta virtual ou do MTKTool que resolvesse o problema. Mas ler com o cabo USB parece ser tão rápido quanto com o cabo serial. Isso foi testado em dois computadores diferentes, com duas instalações do Windows diferentes.

Resumindo: se não quiser ter dores de cabeça, escolha um cabo serial.

Notas

Geralmente, o driver escolhe uma porta serial livre (COM3, COM4, etc) e “amarra” essa porta serial à porta USB onde o cabo estava conectado quando o driver foi instalado. Se você plugar o cabo em outra porta USB do mesmo micro, ele vai ser redetectado e uma outra porta serial será atribuída a ele. Mas se você voltar a plugar na porta anterior, verá que a porta anterior será assumida. Por causa disso é sempre bom ir no Gerenciador de Dispositivos e se certificar de que porta o cabo está usando.

Ao desplugar o cabo, aguarde alguns segundos antes de plugar novamente.

Acima, o cabo para C55 que comprei.

Em teoria, esse é o mesmo cabo para os modelos Siemens A52, A55, A56, A60, C55, C56, C60, C65, CF62, CT56, M55, MC60, MT55, S55, S56, S57, S65, SL5C, SL55, SL56, 2218, SX1. Note que o próprio cabo já veio marcado como MC60/CF62 embora eu tenha pedido um para C55.

Acima, o cabo do C45.

Em teoria, esse é o mesmo cabo para os modelos Siemens A35, A36, A40, C25, C35, C45, M35, M35i, M50, ME45, MT50, S25, S35, S45, SL-42, SL45 e 3118

Ambos os conectores tem 12 pinos, mas os cabos tem apenas três fios, por isso não há muita margem para erro. Baseando-se pela figura acima, os fios são:

A52, A55, A56, A60, C55, C56, C60, C65, CF62, CT56, M55, MC60, MT55, S55, S56, S57, S65, SL5C, SL55, SL56, 2218, SX1 A35, A36, A40, C25, C35, C45, M35, M35i, M50, ME45, MT50, S25, S35, S45, SL-42, SL45 e 3118
GND 2 (amarelo) 1 (verde)
TX 3 (azul) 5 (azul)
RX 4 (verde) 6 (branco)

Atenção: Eu coloquei as cores dos fios para meu registro apenas. Não se guie por elas, porque as cores mudam de um fabricante de cabo para outro.

Apenas os modelos em negrito foram confirmados pessoalmente por mim.

Abra o conector (o conector do lado do celular nunca é selado), anote que fios vão em que pinos (ou seja, anote a função de cada fio) e dessolde ou corte os fios.

Na placa do DVD player você vai soldar esses fios nos pontos correspondentes, da seguinte forma:

cabo placa
GND GND
TX RX
RX TX

Dica: Se o cabo estiver conectado ao PC e um programa de comunicação estiver corretamente configurado, você poderá identicar quem é o RX tocando no mesmo. O PC mostrará a recepção de dados aleatórios enquanto você estiver tocando no fio RX, desde que este não esteja conectado a mais nada. Pode ser necessário que você esteja descalço e tocando com o pé no chão para que esse teste funcione.

Você precisará saber, no seu aparelho, onde fica a porta serial e qual a seqüencia dos fios. Isso varia de aparelho para aparelho. Para obter essas informações sobre o Philips DVP5100 e LG DK8321N, que são aparelhos que eu possuo, consulte meus reviews correspondentes.

Importante: Se você está em um processo de copiar o firmware original, jamais manipule a porta serial (nem sequer toque nela ou nos fios ligados a ela) com o aparelho ligado na tomada. Essa operação pode apagar o firmware e você não vai querer que isso aconteça se você ainda não fez uma cópia.

Abaixo, um exemplo de como fica quando soldado no Phlips DVP5100:

Mas é recomendável que você não solde o cabo do celular diretamente à placa. Eu estou preferindo soldar um cabo mais fino, comprido e flexível, que me permita fazer as conexões fora do aparelho, como no exemplo abaixo:

Acima, eu usei um pedaço de flat cable colorido. Você está vendo a placa de Karaokê do DVP5100 solta porque o único orifício no fundo do aparelho grande o suficiente para a passagem do cabo é o que fica embaixo dela. O nó no fio é para “travar” o cabo, impedindo que o ponto de solda “sinta” os movimentos feitos externamente. Depois de passar o cabo pelo orifício é só parafusar a placa de volta em seu lugar.

Para conectar o flat cable ao cabo do celular, estou usando um conector sindal:

Atenção: Desligue o aparelho da tomada enquanto estiver fazendo qualquer coisa com a porta serial. Usar ferro de solda na porta serial ou simplesmente pegar na ponta dos fios com o DivX player ligado na tomada pode apagar o firmware!

Serviços Prestados

Se você preferir, eu posso fazer o serviço no seu aparelho. Custa R$50 +fretes. Pode não valer a pena para você, dependendo de quanto o aparelho custou (ou quanto custa um novo), mas é isso que custa o meu tempo.

Atenção: Se você tiver um aparelho que eu nunca tive em mãos, faço o serviço de graça. Leia os termos aqui.

Calcule o frete usando a calculadora dos correios. Use como CEP destino: 50000-000. Se você achar que o custo total não vale a pena e você vai jogar o aparelho fora, entre em contato, porque talvez eu possa adquirir o seu aparelho.

Para baratear o frete, você pode me enviar apenas a placa CPU, desde que seja de um aparelho que eu possua ou compatível (Philips DVP3040, Philips DVP5100, Philips DVP5960, Philips DVP5980, Lenoxx DV-406, LG 8XXX, LG DK194g, Punktal PK-DV246 e Proview DVP858 ).

Eu devolvo o aparelho com o firmware que você escolher. Posso também personalizar a tela de background de acordo com sua preferência, usando um JPG enviado por você ou copiando de um outro firmware.

Condições: Eu prefiro prestar esse serviço apenas em aparelhos “clinicamente mortos” por uma instalação desastrada de firmware. Só me envie seu aparelho se tiver total confiança em meus serviços. Eu não posso aceitar reclamações do tipo “o aparelho não tinha esse problema antes!”

Se não aceita 100% das minhas condições, procure outra pessoa ou faça o serviço você mesmo. Todas as instruções estão nesta página.

Formas de pagamento aceitas:

Nota: Eu costumava vender apenas o cabo, mas depois de comprar 10 cabos que vieram todos defeituosos e levar calote do vendedor, deixei de comprá-los.

Os interessados devem enviar e-mail para . Não use este e-mail para nenhum outro contato, sob nenhum pretexto; pois se o fizer será devidamente ignorado e adicionado à minha “lista negra”. Você foi avisado!

Certifique-se de que seu cabo está OK antes de começar

Vai poupar muita dor de cabeça se você tiver certeza de que seu cabo está funcionando antes de conectá-lo ao player. Para fazer isso, simplesmente encoste RX com TX na extremidade CMOS do cabo e transmita algo com um programa de comunicação qualquer, como o Hyperterminal. Se o cabo estiver bom, tudo o que você transmitir deverá ser ecoado de volta.

Após o início de qualquer leitura ou escrita, o aparelho sempre fica travado e é necessário desligá-lo da tomada e ligá-lo novamente para que ele volte a funcionar

Para que a comunicação seja possível, a CPU precisa estar energizada. Para que isso ocorra, pode ser necessário apenas que o aparelho esteja plugado na tomada, mas alguns precisam disso e que o aparelho também esteja fora de standby (ou seja, que você plugue na tomada e aperte o botão LIGA). Sempre tente as duas opções.

Exemplos:

  • LG DK8321N – Precisa estar fora de standby
  • Philips HTS 3300 – Precisa estar fora de standby
  • LG DK9923N – Só precisa estar plugado na tomada
  • Philips DVP5100 – Só precisa estar plugado na tomada
  • LG DK194G – Só precisa estar plugado na tomada

Um jeito simples de saber se a CPU está energizada é ligar o aparelho e, depois de uns 30 segundos, colocar o dedo sobre a CPU. Se estiver morna, está energizada.

Nota: Não é aconselhável que você inicie um processo com um disco no loader. Em um dos meus testes, fiz uma leitura do firmware sem nem dar importância ao que o player estava fazendo. Uma hora depois percebi um ruído estranho no quarto (era madrugada) e segui-o até o DK8321N. Notei então que eu não desligará o aparelho após a leitura e este ainda estava travado. O laser ainda estava ligado, o motor do disco estava parado e o barulho que eu estava ouvindo aparentemente vinha do sistema que controla a posição do laser, que possivelmente “endoidou” por ter sido interrompido durante uma leitura.

A mesma coisa ocorreu outro dia com o DVP5100. Eu iniciei um processo quando tinha acabado de ligar o aparelho e com isso o motor de tracionamento ficou o tempo todo girando.

Bastou resetar os aparelhos para tudo voltar ao normal, mas é melhor evitar.

Óbviamente, vamos testar o processo fazendo primeiro um backup, antes de gravar.

Inicie o MtkTool

Tudo o que você precisa fazer é:

1)Selecionar a porta serial

2)Clicar em “Backup”

Ao selecionar a porta, Mtktool imediatamente ativa os sinais DTR e RTS da porta serial, mas em um cabo construído por você mesmo você não precisa deles. Apenas TX, RX e GND são realmente usados na comunicação. Os sinais DTS e RTS são levantados permanentemente apenas para alimentar cabos seriais que são alimentados pela própria porta (como os de celulares). Isso, claro, somente funciona com circuitos de baixíssimo consumo, porque a porta serial não foi feita para alimentar coisa alguma.

A primeira coisa que o MtkTool faz ao iniciar-se a comunicação é indicar exatamente o modelo de chip flash que é usado no aparelho. O aparelho interromperá imediatamente qualquer coisa que esteja fazendo.

A leitura do firmware de 2MB leva cerca de três minutos a 115200bps. Não faz diferença se Verify está marcado para o tempo de leitura. Se o chip flash no seu aparelho for da EON o processo será mais rápido.

Se você receber uma mensagem “BaudRate AutoSet Fail! Please reset the taget board“, não há comunicação nenhuma entre o software e o aparelho.

Se o seu processo ficar parado em “Init OK”, ou “Start to upgrade” você nem começou a se comunicar. As causas podem ser muitas. Entre elas:

  • Se você tem certeza de que seu cabo está OK, inverta RX com TX e tente novamente;
  • Tem certeza de que o aparelho está ligado? Quando você está no meio de várias tentativas de recuperar um aparelho “morto” é muito fácil se confundir e esquecer de ligar o aparelho;
  • Desligue o aparelho da tomada, aguarde alguns segundos e ligue novamente. A simples manipulação dos fios conectados à serial do aparelho pode travar a CPU. Já aconteceu mais de uma vez comigo e sempre na instalação do cabo (a primeira tentativa de comunicação, mesmo com tudo ligado certinho, não funciona).
  • Experimente reduzir o comprimento da parte não blindada do seu cabo, ou usar um cabo inteiramente blindado;
  • Experimente desligar qualquer fonte de interferência eletromagnética próxima, como lâmpadas fluorescentes e motores;

Problemas no processo de upgrade

LOG: Start to upgrade
LOG: Flash Type – MXIC(MX29LV160/1(A)T)
LOG:Check & Backup…
LOG: Erasing….
LOG:Restore…
LOG: Updating….
LOG: begin : Mon Feb 06 00:33:34 2006
process 1
process 2
process 3
process 4
process 5
ERR: verify flash failed!
Fail Addr : 0
retry 5
Se o processo de update terminar como ao lado, você tem um problema na comunicação. Estou tendo diversos problemas como esse com um lote novo de cabos que comprei. No momento, a “solução” está sendo trocar de cabo.

Se a comunicação ocorre, mas sempre dá algum tipo de erro, teste com todas as versões do MtkTool e do Mtkcomm possíveis antes de desistir. Se a comunicação nem começa, o problema não é no software.

LOG: Start to backup
LOG: Init OK
LOG: Flash Type - Unknown Flash Memory
LOG: Reading....
“Unknown Flash Memory” significa que o player respondeu à identificação do chip flash, mas o código de resposta não está na sua lista de chips suportados. Experimente com versões mais recentes do Mtktool ou com o mtkCom. Na maioria das vezes é apenas um chip que o MtkTool não conhece. Note que o MtkCom pode ser ensinado a reconhecer novos chips editando-se MtkCom.INI.

Em alguns casos, a gravação pode saltar de, por exemplo, 85% a 100% de uma vez, sem acusar erros. Isso é normal e acontece quando o final do arquivo está vazio (cheio de “FF”s)
Evite usar o computador durante o processo. Ele ficará lento (isso é normal, mesmo para um P4 1.7) e, se for sobrecarregado, o processo poderá travar.

Importante: Após o término do backup, abra o arquivo no MTK Remaker. Se o programa avisar que o checksum está incorreto ou, pior, que o arquivo “não é um firmware mtk”, o backup está corrompido e precisa ser refeito!

Se tentar uma segunda vez e o firmware continuar corrompido, experimente usar outra versão do MtkTool, mesmo uma mais antiga. Eu mantenho as versões 1.29, 1.31, 2.35 e 2.42. O DVP3040K, por exemplo, só funciona com o mtktool 1.31. Outros aparelhos só funcionarão com o MtkCom.

Salve todas as suas tentativas de backup em arquivos separados

Quando terminar, o aparelho sempre estará travado. Desligue da tomada, aguarde alguns segundos e ligue novamente.

Como localizar a porta serial do aparelho

Importante: Em todo o tempo que trabalho analisando esses aparelhos baseados em Mediatek, ainda não consegui encontrar nenhum que não tivesse uma porta serial. Ela pode não estar identificada e até só ser visível examinando a placa por baixo, mas sempre está lá.

Isso requer um multímetro (preferencialmente o que tem teste de continuidade sonoro), paciência e mãos firmes.

Primeiro, você deve procurar um agrupamento qualquer de quatro pontos de solda ou orifícios na placa. Em alguns casos você encontrará uma marcação semelhante a “GND, TX, RX e 3.3V” próxima a esses pontos, mas não espere que seja tão fácil. Talvez você encontre o agrupamento, mas terá que identificar se é realmente a porta serial.

Se olhando a placa por cima você não conseguir encontrar a porta de jeito nenhum, experimente retirar a placa e observar por baixo. Alguns aparelhos tem uma indicação em silk-screen por baixo indicando onde é a porta, enquanto em outros a porta está mesmo do lado de baixo da placa e não é acessível por cima.

Abaixo, a porta serial dos LGs (quase todos que lêem DivX são iguais):

Para saber mais sobre a porta serial dos LG, leia minha página correspondente.

Agora, a porta do DVP5100, que também pode ser vista em outras imagens desta página:

Geralmente, os pontos das extremidades são GND e +3.3V. Você poderá identificá-los simplesmente medindo continuidade para a alimentação do chip EEPROM (que em geral é a mesma). Já os pontos RX e TX estão diretamente conectados respectivamente ao pinos 106 e 107 do chip MT1389.

22/09/08: No chip MT1389-F (Proview DVP801), que é menor que o tradicional mas maior que o MT1389-L, a porta serial fica nos pinos 97 e 98.

Se você não entendeu nada do que eu disse acima, desista de fazê-lo sozinho e passe estas instruções para alguém que entenda.

Meus agradecimentos ao MaBreaker por ter criado ferramentas que tornam a tarefa de modificar firmwares acessível a pobres mortais como eu, ao MTZ por popularizar a idéia de que a recuperação era possível e a todos os hackers da comunidade Mt13x9.

Leia também: