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

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

Offline ronison

  • Novato
  • *
  • Mensagens: 14
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #310 Online: Fevereiro 08, 2008, 12:20:12 am »
O filtro está no ArmCodes.
Os firmwares Philips não tem o filtro no 8032.
Isso era tudo que eu precisava saber.  ;D

Dei uma investigada profunda nas rotinas DIR_DispFileList e Dir_FileNameFilter tentando identificar o filtro porém só encontrei vestígios 8). Agora está tudo blz. :yahoo!:

Valeu mesmo.
« Última modificação: Fevereiro 08, 2008, 12:22:53 am por ronison »

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #311 Online: Fevereiro 08, 2008, 06:30:29 pm »
LG DK194g

Como reduzir o bloco OSD1 para ganhar tempo nos testes.

O grande número de bitmaps no firmware do DK194G atrapalha bastante o trabalho de quem faz experiências com o firmware. No meu caso (Semprom 2300+), a mais banal das mudanças com o mtkRemaker faz o software ficar aparentemente travado por cerca de 27s. Trocar 6 fontes, que leva uns 20-30 segundos em firmwares não-LG, leva 3 minutos no LG DK194G.

Um firmware MTK genérico relativamente complexo como o do DVP-858 tem 61 bitmaps. Um bloco de ícones da LG normalmente tem entre 320 e 330. No DK194G, por causa da função "game", são 1009.

Mas nem mtkRemaker nem mtkReplacer permitem a substituição do bloco "ícones" apenas. É preciso substituir o bloco OSD1 (fontes e ícones) inteiro. Apagar os ícones extras apenas não é viável, porque você só pode fazer um por um, e são centenas.

Eu comecei substituindo pelo bloco OSD1 do LG DV256K. Não deu certo e as evidências são de que os ícones de 0 a 321 do DV256K não seguem a mesma ordem usada no DK194G, porque fica uma bagunça:



Então eu tentei com o OSD1 do DK8321N e funcionou sem bagunça no browser. Mas como o 8321N tem menos fontes que o DK194G, a bagunça ficou na exibição das legendas. Isso é bem mais simples de resolver, porque bastou trocar manualmente as fontes do DK8321N pelas do DK194g. Como o excesso de bitmaps já tinha sido removido, trocar as fontes e acrescentar o que faltava levou bem menos tempo do que tentar fazer o mesmo com os ícones.

Como vantagem adicional, o bloco OSD1 é reduzido em tamanho de 834KB para 355KB. Uma redução de quase meio megabyte certamente faz diferença na hora de gravar o firmware.

O bloco criado por mim (ícones do DK8321N e fontes do DK194G) está anexo, para você não ter esse trabalho todo.
 
« Última modificação: Fevereiro 08, 2008, 11:07:51 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

FORUM.RYAN.COM.BR

Re: Firmware MT13x9: Log de Descobertas
« Responder #311 Online: Fevereiro 08, 2008, 06:30:29 pm »

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #312 Online: Fevereiro 08, 2008, 06:41:14 pm »
LG DK 194G

Como reduzir o firmware para acelerar os testes, pela redução do tempo de upgrade.

Aviso: Isso vai matar a função game completamente. Antes de distribuir o firmware você deve lembrar de restaurar tudo.

O tempo normal de upgrade por cabo do LG DK194G é de cerca de 8 minutos. Com esse procedimento o tempo cai para pouco menos de 4 minutos.



  • Substitua o bloco OSD1 inteiro usando o processo explicado no post anterior.
  • Substitua o bloco SKIN inteiro pelo do LG DV256K. O Tamanho cai para 62KB;
  • Substitua o item Unknown (1) pelo item Unknown (5) do mesmo firmware, que tem apenas 4 bytes; 

Ao final dessa operação o tamanho do firmware terá caido de 4003KB para 1844KB e o tempo de gravação de 8 minutos para pouco menos de 4 minutos. Além disso, com a redução do número de figuras o firmware vai abrir bem mais rápido no mtkRemaker.
« Última modificação: Fevereiro 08, 2008, 11:11:01 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #313 Online: Fevereiro 08, 2008, 08:12:42 pm »
Firmwares LG

Como localizar o bloco de paletes

Este procedimento também encontra os blocos em firmwares não-LG, mas só é realmente necessário quando o mtkWindows não consegue localizar as paletes, como é o caso dos aparelhos LG.

O "truque" se baseia no fato de que o "preto" em uma palete MTK geralmente é gravado como "0x12 0x10" no firmware, que esta é uma combinação relativamente incomum em assembly 8032 e que o preto ocorre várias vezes nas paletes.

Usando o IDA, procure por todas as ocorrências da string hexa "12 10". O maior bloco dentro de um único banco identificado como "byte" são as paletes. 



O mtkWindows não consegue achar as paletes porque o endereço de cada uma delas não está na definição de cada janela, como ocorre em outros firmwares. Os dois bytes reservados para cada endereço são sempre "00 00" nos firmwares LG que olhei.

Por conta disso, mesmo encontrando o bloco é um tanto complicado definir exatamente onde começa e termina cada palete. Em geral as paletes tem 32 bytes (16 células) mas aparentemente há pelo menos uma palete de 8 bytes  (4 células) nos firmwares LG, porque o total de bytes no bloco nos três firmwares indicados na figura acima é 8 mais um múltiplo de 32.   

Eu já descobri como localizar, por análise, o início da maioria das paletes. Mas o método ainda é muito confuso.
« Última modificação: Fevereiro 08, 2008, 11:34:02 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #314 Online: Fevereiro 08, 2008, 09:21:21 pm »
Firmwares LG

Como localizar as rotinas que carregam as paletes

As rotinas apontam para o início de cada palete.

Procure por:

90 ? ? E0 FD 25 E0 24 ? f5 82 e4 34 ? f5 83

O resultado são várias ocorrências parecidas com isto:

B7:C31C             B7_C31C:                      ; CODE XREF: BankSw_455_B7_C2D8+1Aj
B7:C31C 90 FC 94    mov     DPTR, #XRAM_FC94
B7:C31F E0          movx    A, @DPTR
B7:C320 FD          mov     R5, A
B7:C321 25 E0       add     A, ACC                ; Accumulator
B7:C323 24 84       add     A, #0x84 ; 'ä'
B7:C325 F5 82       mov     DPL, A                ; Data Pointer, Low Byte
B7:C327 E4          clr     A
B7:C328 34 2B       addc    A, #0x2B ; '+'
B7:C32A F5 83       mov     DPH, A                ; Data Pointer, High Byte


Esta rotina carrega DPTR com o endereço base da palete, no mesmo banco. No caso acima, a palete começa em 0x2B84.

Nos meus testes, a string de busca só encontrou as rotinas realmente relacionadas com carga de paletes, mas não encontrou todas. Ainda existem paletes no bloco que ou não são usadas ou são carregadas de outra maneira.

E ainda falta descobrir como se faz a associação palete-janela.
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware MT13x9: Log de Descobertas
« Responder #315 Online: Fevereiro 08, 2008, 09:26:36 pm »
Jefferson, você tem idéia de como e feito o "hold & press" (como NA chama a função que controla as teclas do controle remoto quando apretadas por um par de segundos)?

O DVP5100 não tem tal função... Mas o "stop" funciona como "eject" se apertado por dois segundos... Ainda não achei como e feito essa mudança de "14" para "7E".

Já fiz uma busca de texto por "0x14" ou "0x7E", mas sem resultados conclusivos...

Offline ronison

  • Novato
  • *
  • Mensagens: 14
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #316 Online: Fevereiro 08, 2008, 10:15:43 pm »
Jefferson, você tem idéia de como e feito o "hold & press" (como NA chama a função que controla as teclas do controle remoto quando apretadas por um par de segundos)?

O DVP5100 não tem tal função... Mas o "stop" funciona como "eject" se apertado por dois segundos... Ainda não achei como e feito essa mudança de "14" para "7E".

Já fiz uma busca de texto por "0x14" ou "0x7E", mas sem resultados conclusivos...
Sei que parece óbvio, mas você já tentou rastrear o fluxo de execução da tecla Stop?

Abraço,

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware MT13x9: Log de Descobertas
« Responder #317 Online: Fevereiro 08, 2008, 10:37:09 pm »
Sei que parece óbvio, mas você já tentou rastrear o fluxo de execução da tecla Stop?

Não. Como faço isso? :oops:

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware MT13x9: Log de Descobertas
« Responder #318 Online: Fevereiro 09, 2008, 03:49:58 am »
Firmwares LG

Como é feita a associação janela-palete

Procure pela seguinte string hexa:

B4 xx 00 40 03 02 ? ? 90 ? ? F8 28 28 73

Onde xx é o número da última janela do firmware, como visto no mtkWindows.

Em alguns casos você vai encontrar mais de uma ocorrência, mas apenas uma delas é a correta. O resultado é parecido com isto (LG DK194G):

B7:14B8             B7_14B8:                      ; CODE XREF: BankSw_64_B7_13FC+37j
B7:14B8 90 FC BC    mov     DPTR, #XRAM_FCBC      ; NUM_Janela?
B7:14BB E0          movx    A, @DPTR
B7:14BC 14          dec     A
B7:14BD B4 12 00    cjne    A, #0x12, B7_14C0
B7:14C0
B7:14C0             B7_14C0:
B7:14C0 40 03       jc      EscolhePalete
B7:14C0
B7:14C2 02 19 E8    ljmp    RET
B7:14C2
B7:14C5             ; ---------------------------------------------------------------------------
B7:14C5
B7:14C5             EscolhePalete:                ; CODE XREF: BankSw_64_B7_13FC:B7_14C0j
B7:14C5 90 14 CC    mov     DPTR, #0x14CC
B7:14C8 F8          mov     R0, A                 ; Aqui o conteúdo de A deve ser de 0 a 17 (0 a 0x11)
B7:14C9 28          add     A, R0
B7:14CA 28          add     A, R0                 ; Ao chegar aqui, o conteúdo do acumulador foi multiplicado por três
B7:14CB 73          jmp     @A+DPTR
B7:14CB
B7:14CC             ; ---------------------------------------------------------------------------
B7:14CC 02 15 7A    ljmp    CarregaPalete02
B7:14CC
B7:14CF             ; ---------------------------------------------------------------------------
B7:14CF 02 15 02    ljmp    CarregaPalete01
B7:14CF
B7:14D2             ; ---------------------------------------------------------------------------
B7:14D2 02 15 E4    ljmp    CarregaPalete03
B7:14D2
B7:14D5             ; ---------------------------------------------------------------------------
B7:14D5 02 17 22    ljmp    CarregaPalete07
B7:14D5
B7:14D8             ; ---------------------------------------------------------------------------
B7:14D8 02 17 45    ljmp    CarregaPalete08
B7:14D8
B7:14DB             ; ---------------------------------------------------------------------------
B7:14DB 02 19 07    ljmp    CarregaPalete19
B7:14DB
B7:14DE             ; ---------------------------------------------------------------------------
B7:14DE 02 18 E4    ljmp    CarregaPalete15
B7:14DE
B7:14E1             ; ---------------------------------------------------------------------------
B7:14E1 02 19 61    ljmp    CarregaPalete04
B7:14E1
B7:14E4             ; ---------------------------------------------------------------------------
B7:14E4 02 18 7E    ljmp    CarregaPalete05_2
B7:14E4
B7:14E7             ; ---------------------------------------------------------------------------
B7:14E7 02 16 1B    ljmp    CarregaPalete05_1
B7:14E7
B7:14EA             ; ---------------------------------------------------------------------------
B7:14EA 02 16 EB    ljmp    CarregaPalete06
B7:14EA
B7:14ED             ; ---------------------------------------------------------------------------
B7:14ED 02 16 85    ljmp    CarregaPalete05_3
B7:14ED
B7:14F0             ; ---------------------------------------------------------------------------
B7:14F0 02 17 AC    ljmp    CarregaPalete09
B7:14F0
B7:14F3             ; ---------------------------------------------------------------------------
B7:14F3 02 17 CF    ljmp    CarregaPalete12
B7:14F3
B7:14F6             ; ---------------------------------------------------------------------------
B7:14F6 02 17 F2    ljmp    CarregaPalete11
B7:14F6
B7:14F9             ; ---------------------------------------------------------------------------
B7:14F9 02 18 15    ljmp    CarregaPalete13
B7:14F9
B7:14FC             ; ---------------------------------------------------------------------------
B7:14FC 02 18 38    ljmp    CarregaPalete10
B7:14FC
B7:14FF             ; ---------------------------------------------------------------------------
B7:14FF 02 18 5B    ljmp    CarregaPalete14
B7:14FF
B7:1502             ; ---------------------------------------------------------------------------
B7:1502


Os nomes CarregaPaleteXX foram atribuídos por mim por análise manual do firmware.

No exemplo acima, se a janela for 8, 9 ou 11 é a palete 5 que é usada, por meio de três rotinas diferentes, que não vou mostrar aqui por enquanto.

A numeração das paletes é minha, atribuída de acordo com a posição da palete no bloco.
« Última modificação: Fevereiro 09, 2008, 03:52:33 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

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

Offline ronison

  • Novato
  • *
  • Mensagens: 14
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #319 Online: Fevereiro 10, 2008, 07:26:01 am »
Não. Como faço isso? :oops:
Seria seguir o fluxo de execução desde a decodificação da tecla Stop até a execução da rotina de tratamento. Fiz um ensaio e encontrei um local bem suspeito de ser o que você está procurando. Pelo fluxo que segui, chega um ponto onde ele decide se vai repassar o código 5 (P&H + 1) ou o código 15 (Stop + 1) para o tratamento. A decisão é tomada baseando-se num valor lido 3 vezes num único endereço (acredito que este valor seja o tempo de pressionamento da tecla).

O que fiz:

1. Fui numa tabela de tratamento de códigos do RC (aquela usada no Auto Load).
2. Peguei o código #14 (Stop) e segui o fluxo.

Depois eu posto o código aqui, caso haja interesse.

FORUM.RYAN.COM.BR

Re: Firmware MT13x9: Log de Descobertas
« Responder #319 Online: Fevereiro 10, 2008, 07:26:01 am »