FORUM.RYAN.COM.BR
February 08, 2010, 11:48:57 PM *
Welcome, Guest. Please login or register.

Login with username, password and session length
News:
 
  Home   Forum   Help Search Login Register  
Pages: « 1 2 3 4 5 6 7 8 9 »  All
  Print  
Author Topic: Firmware MT13x9: Log de Descobertas  (Read 49250 times)
0 Members and 1 Guest are viewing this topic.
Jefferson
Zelador
Hero Member
*****

Aprovação: +0/-0
Offline Offline

Posts: 1677



View Profile WWW
« Reply #120 on: August 01, 2007, 09:38:13 AM »


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

No seu monitor/browser você não consegue enxergar o destaque em negrito que dei aos 3 bytes?
Logged

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?!
Jefferson
Zelador
Hero Member
*****

Aprovação: +0/-0
Offline Offline

Posts: 1677



View Profile WWW
« Reply #121 on: August 01, 2007, 09:40:32 AM »

Para inserir varios background usando o remaker, eu substituo o parte SKIN toda com outra que possui varias imagens MPEG.

Ótimo!

Desde que haja espaço no firmware, deve dar para fazer uns experimentos bem interessantes Smiley
Logged

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?!
eneris
Novato Prolixo
**

Aprovação: +2/-0
Offline Offline

Posts: 85



View Profile WWW
« Reply #122 on: August 01, 2007, 09:41:57 AM »

O firmware que tem mais imagens MPEG que eu ja vir, é o LG_DK194g , que possui 18 imagens MPEG. Cool
Logged

eneris
Novato Prolixo
**

Aprovação: +2/-0
Offline Offline

Posts: 85



View Profile WWW
« Reply #123 on: August 01, 2007, 09:58:37 AM »

Ryan, você conseguiu que a altura da legenda ficasse selecionavel via menu no Proview?
Logged

Jefferson
Zelador
Hero Member
*****

Aprovação: +0/-0
Offline Offline

Posts: 1677



View Profile WWW
« Reply #124 on: August 01, 2007, 10:00:46 AM »

O firmware que tem mais imagens MPEG que eu ja vir, é o LG_DK194g , que possui 18 imagens MPEG. Cool

Isso mesmo!

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

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?!
Jefferson
Zelador
Hero Member
*****

Aprovação: +0/-0
Offline Offline

Posts: 1677



View Profile WWW
« Reply #125 on: August 01, 2007, 10:01:34 AM »

Ryan, você conseguiu que a altura da legenda ficasse selecionavel via menu no Proview?

Eu me aborreci com os resultados que estava tendo e parei completamente os testes. Vou voltar a esse problema outro dia.
Logged

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?!
ramos80
Novato
*

Aprovação: +0/-0
Offline Offline

Posts: 2


View Profile
« Reply #126 on: August 01, 2007, 02:13:27 PM »


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

Eu uso o Firefox 2.0.0.4

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

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

Eu vou ter que analisar cada página no IE7 um outro dia. Agora estou ocupado com outra(s) coisa(s).
« Last Edit: August 01, 2007, 02:28:00 PM by Jefferson » Logged
Jefferson
Zelador
Hero Member
*****

Aprovação: +0/-0
Offline Offline

Posts: 1677



View Profile WWW
« Reply #127 on: August 02, 2007, 07:46:13 AM »

Alguns Scripts IDA

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

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

MP3_TagDisplay

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



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

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




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

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




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

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




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

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

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


}   
}


CheckVersionPass

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

CheckRegionPass

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


vPlayerShowLogo

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

Estes scripts estão todos relacionados a textos já publicados aqui, por isso dentro de alguns dias eles serão movidos para os respectivos posts.
« Last Edit: August 02, 2007, 07:49:21 AM by Jefferson » Logged

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?!
jmaraujo
Seeder
Colaboradores
Papagaio
*

Aprovação: +41/-0
Offline Offline

Posts: 403


Saudações desde Rivera, Uruguay!!! ;)


View Profile WWW
« Reply #128 on: August 02, 2007, 02:15:02 PM »

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

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

Com essa ajuda fica bem mais fácil.  Yahoo!
Logged

Fórum do DVP5100
(novo endereço)
Jefferson
Zelador
Hero Member
*****

Aprovação: +0/-0
Offline Offline

Posts: 1677



View Profile WWW
« Reply #129 on: August 02, 2007, 02:22:27 PM »

Acabo de perceber que no mtkModToolbox tem uma seção ("Dedução de coordenadas com auxílio de screenshot") que resulta muito útil para este tipo de tarefas...

Com essa ajuda fica bem mais fácil.  Yahoo!

Aquela seção era só um experimento. Se você achou úitl então vai babar com o que eu estou preparando, neste exato momento  Grin
Logged

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?!
jmaraujo
Seeder
Colaboradores
Papagaio
*

Aprovação: +41/-0
Offline Offline

Posts: 403


Saudações desde Rivera, Uruguay!!! ;)


View Profile WWW
« Reply #130 on: August 02, 2007, 02:36:15 PM »

Aquela seção era só um experimento. Se você achou úitl então vai babar com o que eu estou preparando, neste exato momento  Grin
Excelente noticia! Yahoo! Se planejar tradução, novamente me ofereço como voluntario para traduzir ao espanhol...
Logged

Fórum do DVP5100
(novo endereço)
Jefferson
Zelador
Hero Member
*****

Aprovação: +0/-0
Offline Offline

Posts: 1677



View Profile WWW
« Reply #131 on: August 02, 2007, 02:44:19 PM »

Excelente noticia! Yahoo! Se planejar tradução, novamente me ofereço como voluntario para traduzir ao espanhol...

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

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

Logged

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?!
Jefferson
Zelador
Hero Member
*****

Aprovação: +0/-0
Offline Offline

Posts: 1677



View Profile WWW
« Reply #132 on: August 02, 2007, 04:05:35 PM »

Scrollbar para firmwares Philips

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

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

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

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

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

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

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

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

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


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

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

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

Philips DVP5960, firmware original modificado:

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

Philips DVP5100, firmware Jmaraujo 1.04b modificado:



um mísero byte!!!


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

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

CB EF CB CA EE CA 22

Funcionou com:

  • DVP5965
  • DVP5960
  • DVP5980
  • DVP5100

Não funcionou com:

  • PET 725 (acho que neste a rotina realmente não existe)
  • DVP3040 (acho que neste a rotina realmente não existe)
  • DVP5140
« Last Edit: August 02, 2007, 05:50:44 PM by Jefferson » Logged

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?!
eneris
Novato Prolixo
**

Aprovação: +2/-0
Offline Offline

Posts: 85



View Profile WWW
« Reply #133 on: August 02, 2007, 05:57:28 PM »

Ryan, estar faltando alguma coisa na explicação de como colocar o menu de seleção de legenda e cor no Proview, pois com a explicação da pagina 2, o DVD nem liga. O primeiro erro que encontrei comparando seu post e o seu segundo firmware experimental foi na parte abaixo.

No seu firmware experimental tem toda linha hexadecimal abaixo.

05 0D 05 0D 03 03 00 05 0E 05 0E 03 04 04 05 0F 05 0F 03 05 06 05 10 05 10 03 06 08 05 11 05 11 03 07 0A 05 12 05 12 03 08 0C 05 13 05 13 03 09 0E 05 14 05 14 03 0A 10 FF EC 00 FF EC 07 FF EC 0E FF EC 15 FF EC 1C FF EC 23 FF EC 2A FF EC 31 00 08 FF FF 05 0C 05 0C 00 06 00 00 00 07 00 00 FF EC 38 00 00 05 16 05 16 05 18 0F 05 17 05 17 05 19 02 FF EC 65 FF EC 6C 00 08 FF FF 05 15 05 15 00 71 00 00 00 01 00 0F FF EC 73 00 00 05 17 05 17 03 03 00 FF EC 8E 00 03 FF FF 01 A1 01 A1 00 15 00 00 00 00 00 00 FF EC 95 00 00 02 BF 02 BF 02 BF 00 02 C0 02 C0 02 C0 01 02 C1 02 C1 02 C1 02 02 C2 02 C2 02 C2 03 02 C3 02 C3 02 C3 04 02 C4 02 C4 02 C4 05 02 C5 02 C5 02 C5 06 FF EC AD FF EC B4 FF EC BB FF EC C2 FF EC C9 FF EC D0 FF EC D7 00 08 FF FF 01 EB 01 EB 00 16 00 3F 00 06 00 00 FF EC DE 00 00 01 78 01 78 04 F1 00 01 79 01 79 04 F2 01 FF ED 08 FF ED 0F 00 08 FF FF 00 D3 00 D3 00 14 00 00 00 01 00 00 FF ED 16 1F BA 01 2F 02 97 00 00 00 FF ED 31 00 08 FF FF 01 30 02 97 FF FF 00 00 00 00 00 00 FF ED 38 1F C0 FF EC 50 FF EC 79 FF EC 98 FF EC F3 FF ED 1C FF ED 3B 03 00 CF 00 00 06 FF ED 50 00 00 00 CF 00 00 06 FF ED 5A 00 00 17 05 19 02 FF ED 6D FF ED 74 00 08 FF FF 05 15 05 15 00 71 00 00 00 01 00 0F FF ED 7B 00 00 FF EC 50 FF EC 79 FF EC 98 FF EC F3 FF ED 58 FF ED 81 03 00 CF 00 00 06 FF ED 96 00 00

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

05 0D 05 0D 03 03 00 05 0E 05 0E 03 04 04 05 0F 05 0F 03 05 06 05 10 05 10 03 06 08 05 11 05 11 03 07 0A 05 12 05 12 03 08 0C 05 13 05 13 03 09 0E 05 14 05 14 03 0A 10 FF EC 00 FF EC 07 FF EC 0E FF EC 15 FF EC 1C FF EC 23 FF EC 2A FF EC 31 00 08 FF FF 05 0C 05 0C 00 06 00 00 00 07 00 00 FF EC 38 00 00 05 16 05 16 05 18 0F 05 17 05 17 05 19 02 FF EC 65 FF EC 6C 00 08 FF FF 05 15 05 15 00 71 00 00 00 01 00 0F FF EC 73 00 00 05 17 05 17 03 03 00 FF EC 8E 00 03 FF FF 01 A1 01 A1 00 15 00 00 00 00 00 00 FF EC 95 00 00 02 BF 02 BF 02 BF 00 02 C0 02 C0 02 C0 01 02 C1 02 C1 02 C1 02 02 C2 02 C2 02 C2 03 02 C3 02 C3 02 C3 04 02 C4 02 C4 02 C4 05 02 C5 02 C5 02 C5 06 FF EC AD FF EC B4 FF EC BB FF EC C2 FF EC C9 FF EC D0 FF EC D7 00 08 FF FF 01 EB 01 EB 00 16 00 3F 00 06 00 00 FF EC DE 00 00 01 78 01 78 04 F1 00 01 79 01 79 04 F2 01 FF ED 08 FF ED 0F 00 08 FF FF 00 D3 00 D3 00 14 00 00 00 01 00 00 FF ED 16 1F BA 01 2F 02 97 00 00 00 FF ED 31 00 08 FF FF 01 30 02 97 FF FF 00 00 00 00 00 00 FF ED 38 1F C0 FF EC 50 FF EC 79 FF EC 98 FF EC F3 FF ED 1C FF ED 3B 03 00 CF 00 00 06 FF ED 50 00 00

Os codigos estão diferentes.

Logged

Jefferson
Zelador
Hero Member
*****

Aprovação: +0/-0
Offline Offline

Posts: 1677



View Profile WWW
« Reply #134 on: August 02, 2007, 06:07:00 PM »

Em quase 100% dos casos, quando o DVD nem liga é porque você fez alguma bobagem ao inserir os dados e em vez de sobreescrever exatamente, inseriu ou deletou algo.

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

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

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

Certifique-se de que ao dar o "paste" no editor hexadecimal você realmente está sobreescrevendo. O XVI32 insere por default.
« Last Edit: August 02, 2007, 06:10:41 PM by Jefferson » Logged

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?!
jmaraujo
Seeder
Colaboradores
Papagaio
*

Aprovação: +41/-0
Offline Offline

Posts: 403


Saudações desde Rivera, Uruguay!!! ;)


View Profile WWW
« Reply #135 on: August 02, 2007, 06:09:38 PM »

Olá, Jefferson. Duas consultas:

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

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

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

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


* Exemplo1.jpg (31.78 KB, 183x150 - viewed 1076 times.)

* Exemplo2.jpg (38.01 KB, 185x150 - viewed 1072 times.)
Logged

Fórum do DVP5100
(novo endereço)
Jefferson
Zelador
Hero Member
*****

Aprovação: +0/-0
Offline Offline

Posts: 1677



View Profile WWW
« Reply #136 on: August 02, 2007, 06:29:12 PM »

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

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

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

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


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

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

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?!
eneris
Novato Prolixo
**

Aprovação: +2/-0
Offline Offline

Posts: 85



View Profile WWW
« Reply #137 on: August 02, 2007, 06:32:42 PM »

Agora foi, você tinha razão, o Xvi32 estava inserindo ao invés de sobrescrever, o cabecinha a minha 

Valeu!

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

help Embarrassed
« Last Edit: August 02, 2007, 06:46:23 PM by eneris » Logged

jmaraujo
Seeder
Colaboradores
Papagaio
*

Aprovação: +41/-0
Offline Offline

Posts: 403


Saudações desde Rivera, Uruguay!!! ;)


View Profile WWW
« Reply #138 on: August 02, 2007, 06:44:01 PM »

Não tem problema. O límite dos 40 caracteres não acho que seja o problema do Unicode. Hoje, olhando o seu review do firmware jmaraujo 1.04b, percebí que os arquivos naquele firmware também tinham 40 caracteres.

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

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

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

Quote
Sem menu: Selecione esta função para exibir todos os arquivos contidos no CD.
Com menu: Selecione esta função para exibir somente o menu de pastas do CD.
« Last Edit: August 02, 2007, 06:46:49 PM by jmaraujo » Logged

Fórum do DVP5100
(novo endereço)
Jefferson
Zelador
Hero Member
*****

Aprovação: +0/-0
Offline Offline

Posts: 1677



View Profile WWW
« Reply #139 on: August 02, 2007, 06:50:35 PM »

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

ERA!

 
Logged

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?!
Jefferson
Zelador
Hero Member
*****

Aprovação: +0/-0
Offline Offline

Posts: 1677



View Profile WWW
« Reply #140 on: August 02, 2007, 06:54:44 PM »


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

help Embarrassed

Somente no endereço indicado. Você não faz idéia do quanto precisa ser recalculado naquela string se você mover um byte sequer. Quase um terço daquilo lá são endereços.
Logged

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?!
eneris
Novato Prolixo
**

Aprovação: +2/-0
Offline Offline

Posts: 85



View Profile WWW
« Reply #141 on: August 02, 2007, 07:13:51 PM »

Uma dúvida: Movendo a rotina FF00 para outro endereço é necessário alguma mudança na string hexa?
Logged

Jefferson
Zelador
Hero Member
*****

Aprovação: +0/-0
Offline Offline

Posts: 1677



View Profile WWW
« Reply #142 on: August 02, 2007, 07:25:02 PM »

Uma dúvida: Movendo a rotina FF00 para outro endereço é necessário alguma mudança na string hexa?

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

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?!
eneris
Novato Prolixo
**

Aprovação: +2/-0
Offline Offline

Posts: 85



View Profile WWW
« Reply #143 on: August 02, 2007, 07:30:08 PM »

Uma dúvida: Movendo a rotina FF00 para outro endereço é necessário alguma mudança na string hexa?

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

OK, muitissimo obrigado Ryan,  Yahoo!

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

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

44 => 53
53 => 52
« Last Edit: August 02, 2007, 07:42:35 PM by eneris » Logged

Jefferson
Zelador
Hero Member
*****

Aprovação: +0/-0
Offline Offline

Posts: 1677



View Profile WWW
« Reply #144 on: August 02, 2007, 07:38:24 PM »


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

Aquela da mudança DST=>SRT?

A única utilidade é você poder ver que as legendas estão lá.
Logged

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?!
Jefferson
Zelador
Hero Member
*****

Aprovação: +0/-0
Offline Offline

Posts: 1677



View Profile WWW
« Reply #145 on: August 03, 2007, 08:38:53 AM »

Firmwares Philips: Improvisando uma mensagem de versão

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



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

Procure pela seguinte seqüência:

4F 46 46

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

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

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

Busca não funciona com:

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

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

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



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

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

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


A única pista que tenho é que a mensagem é exibida em uma janela. No caso do DVP5100 é na janela 01.
« Last Edit: August 03, 2007, 09:41:27 AM by Jefferson » Logged

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?!
Jefferson
Zelador
Hero Member
*****

Aprovação: +0/-0
Offline Offline

Posts: 1677



View Profile WWW
« Reply #146 on: August 03, 2007, 09:53:16 AM »

Alguém sabe onde são usadas essas strings?

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

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


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

Como o ZOOM tira as suas mensagens dos Language Codes, eu não entendo quando essas strings são exibidas, se é que são. Se você prestar atenção, verá que antes de cada string existe um byte que é igual ao número de caracteres na mesma e que esse ponto é acessado por uma rotina. Pode ser possível manipular isso para escrever nossas mensagens, mas é preciso primeiro saber se essas mensagens são realmente exibidas, e quando. 
Logged

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?!
Jefferson
Zelador
Hero Member
*****

Aprovação: +0/-0
Offline Offline

Posts: 1677



View Profile WWW
« Reply #147 on: August 03, 2007, 01:10:12 PM »

Achei!


São strings do Dolby Digital Setup

Veja a palavra FULL nas duas imagens:



Estudando como a exibição funciona eu aprendi coisas que eu não sabia sobre a rotina OSD_DispMSG/OSD_DispMSG2. Mais tarde (ou outro dia) eu vou relatar aqui o que aprendi.
Logged

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?!
Jefferson
Zelador
Hero Member
*****

Aprovação: +0/-0
Offline Offline

Posts: 1677



View Profile WWW
« Reply #148 on: August 04, 2007, 05:10:41 PM »

"MT1369 RESETDISC UPGRADE"

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

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

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

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

MT1369 RESET
DISC UPGRADE

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

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

Rotinas do Proview DVP-858 20.07

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



Esta é uma das rotinas que escreve ou apaga:

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


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

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

 

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

Nota: para compreender as rotinas é preciso olhar o código no IDA e seguir algumas "lcall" para ver o que é feito nelas. Só olhar as listagens acima não basta.
« Last Edit: August 05, 2007, 08:35:57 AM by Jefferson » Logged

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?!
Jefferson
Zelador
Hero Member
*****

Aprovação: +0/-0
Offline Offline

Posts: 1677



View Profile WWW
« Reply #149 on: August 05, 2007, 08:27:55 AM »

Legendas MPEG4 do Proview DVP-858

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

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

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

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

B1:F4DD             ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B1:F4DD
B1:F4DD
B1:F4DD             SetMPeg4SubtitleParams:       ; CODE XREF: BankSw_263_B1_E1E7+10p
B1:F4DD E4          clr     A
B1:F4DE 90 FC 44    mov     DPTR, #XRAM_FC44      ; wX1.high
B1:F4E1 F0          movx    @DPTR, A
B1:F4E2 A3          inc     DPTR
B1:F4E3 F0          movx    @DPTR, A
B1:F4E4 90 FC 46    mov     DPTR, #XRAM_FC46      ; wY1.high
B1:F4E7 F0          movx    @DPTR, A
B1:F4E8 A3          inc     DPTR
B1:F4E9 F0          movx    @DPTR, A
B1:F4EA 90 FC 49    mov     DPTR, #XRAM_FC49      ; wX2.high
B1:F4ED 74 02       mov     A, #2
B1:F4EF F0          movx    @DPTR, A
B1:F4F0 A3          inc     DPTR
B1:F4F1 74 30       mov     A, #0x30 ; '0'        ; 0x230 = 560
B1:F4F3 F0          movx    @DPTR, A
B1:F4F4 90 FC 4D    mov     DPTR, #XRAM_FC4D      ; wY2.high
B1:F4F7 E4          clr     A
B1:F4F8 F0          movx    @DPTR, A
B1:F4F9 A3          inc     DPTR
B1:F4FA 74 5A       mov     A, #0x5A ; 'Z'
B1:F4FC F0          movx    @DPTR, A
B1:F4FD E4          clr     A
B1:F4FE 90 FB 8E    mov     DPTR, #XRAM_FB8E      ; Espaço entre linhas
B1:F501 F0          movx    @DPTR, A
B1:F502 7B 08       mov     R3, #8                ; Ansi Codepage = 0x08 (all chars)
B1:F504 7D 01       mov     R5, #1                ; alinhamento = 0x00 (esquerda), 0x01 (Centro)
B1:F506 7F 13       mov     R7, #0x13             ; Janela da legenda
B1:F508 12 1E B8    lcall   PSB_Set_Param_B1_BS
B1:F50B D3          setb    C
B1:F50C 22          ret
B1:F50C             ; End of function SetMPeg4SubtitleParams


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

Modifique a linha destacada em vermelho:

[B1:F4FB] 5A => 90

Pronto!

Como funciona

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

Colocando com uma altura de 144 cabem 3 linhas da fonte 8 do meu firmware experimental (a maior de todas, exagerada) e quatro linhas da fonte 7.

Logged

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?!
ygor.almeida
Novato Prolixo
**

Aprovação: +1/-0
Offline Offline

Posts: 66


My Name is Neo


View Profile WWW
« Reply #150 on: August 05, 2007, 10:32:35 AM »

 
Agora esse tópico pra mim parece grego  Evil

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

Quer saber qual vai ser a "surpresa" do suposto engenheiro da Proview ?? Um emprego pro Ryan pra trabalhar com FirmWare de DivX  Evil Roll Eyes Tongue

Logged

www.eXtremeMods.com.br
Hardware IT News & OverClock
Jefferson
Zelador
Hero Member
*****

Aprovação: +0/-0
Offline Offline

Posts: 1677



View Profile WWW
« Reply #151 on: August 05, 2007, 10:51:50 AM »


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

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

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

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

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

Quer saber qual vai ser a "surpresa" do suposto engenheiro da Proview ?? Um emprego pro Ryan pra trabalhar com FirmWare de DivX  Evil Roll Eyes Tongue

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

Se fosse algo para mim teria sido falado em particular, por e-mail.
Logged

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?!
eneris
Novato Prolixo
**

Aprovação: +2/-0
Offline Offline

Posts: 85



View Profile WWW
« Reply #152 on: August 05, 2007, 11:45:13 AM »

É como disse Ryan no post acima, eu tambem quando via este enorme quantidade de numero e letras achava que era pior que grego (inclusive eu disse isso em um topico neste mesmo forum), mas foi quando eu comprei o Philips 5965 e revirei a internet inteira procurando um firmware pra ele pela mesma razão de todos: as legendas divx, como nao encontrei nenhum firmware eu mesmo comecei a pesquisar sobre firmware mediatek, dai encontrei o forum do nosso amigo Jmaraujo, o site do Ryan e do grupo mtk do yahoo, montei meu cabo de dados (pra mim foi mais facil pois ja conserto aparelhos eletronicos) e entrei no mundo dos firmware mediatek, e continuo aprendendo, e eu tambem nao entendia uma linha de assembly.
Logged

Jefferson
Zelador
Hero Member
*****

Aprovação: +0/-0
Offline Offline

Posts: 1677



View Profile WWW
« Reply #153 on: August 06, 2007, 10:34:05 AM »

Como localizar Sub_Style

Este método é experimental.

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


Método 1

Para este método, precisamos de duas coisas:

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

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

EF 70 ? D2 ? 12

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

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


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

Agora procure por:

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

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

7F 12 12 1D E0

Que equivale a:

mov     R7, #0x12
lcall   OSD_TextColor

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

Este método localiza a SubStyle de

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

Mas não funciona com

Philips DVP5980
Philips DVP5100
Philips DVP5140
Philips DVP3040

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

Existe um método tortuoso, que envolve localizar a rotina OSD_textInit, mas falarei sobre isso depois
« Last Edit: August 06, 2007, 10:37:44 AM by Jefferson » Logged

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?!
jmaraujo
Seeder
Colaboradores
Papagaio
*

Aprovação: +41/-0
Offline Offline

Posts: 403


Saudações desde Rivera, Uruguay!!! ;)


View Profile WWW
« Reply #154 on: August 06, 2007, 02:35:58 PM »

Alguns Scripts IDA

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

Fórum do DVP5100
(novo endereço)
eneris
Novato Prolixo
**

Aprovação: +2/-0
Offline Offline

Posts: 85



View Profile WWW
« Reply #155 on: August 06, 2007, 02:54:10 PM »

Jmaraujo você tentou com a nova versão do IDA? Eu vinha recebendo esta mensagem na versão 5.0, dai baixei a nova versão ontem, e testei, e o problema se foi.
Tente aí com a versão 5.1 e veja se o problema não é sanado.
Logged

jmaraujo
Seeder
Colaboradores
Papagaio
*

Aprovação: +41/-0
Offline Offline

Posts: 403


Saudações desde Rivera, Uruguay!!! ;)


View Profile WWW
« Reply #156 on: August 06, 2007, 03:18:07 PM »

Jmaraujo você tentou com a nova versão do IDA? Eu vinha recebendo esta mensagem na versão 5.0, dai baixei a nova versão ontem, e testei, e o problema se foi.
Tente aí com a versão 5.1 e veja se o problema não é sanado.
Obrigado pela dica, Eneris. Vou testar sim.

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

Fórum do DVP5100
(novo endereço)
Jefferson
Zelador
Hero Member
*****

Aprovação: +0/-0
Offline Offline

Posts: 1677



View Profile WWW
« Reply #157 on: August 06, 2007, 08:04:43 PM »

Jmaraujo você tentou com a nova versão do IDA? Eu vinha recebendo esta mensagem na versão 5.0, dai baixei a nova versão ontem, e testei, e o problema se foi.
Tente aí com a versão 5.1 e veja se o problema não é sanado.

Eu uso a 5.0.

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

Editado:

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



« Last Edit: August 06, 2007, 08:13:38 PM by Jefferson » Logged

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?!
Jefferson
Zelador
Hero Member
*****

Aprovação: +0/-0
Offline Offline

Posts: 1677



View Profile WWW
« Reply #158 on: August 08, 2007, 11:21:28 PM »

Localizando SHOW_ZOOM_MSG

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


Basta procurar por:

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

Que encontrará algo assim:

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


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


Funciona com:

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

Não funciona com:

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

« Last Edit: August 08, 2007, 11:23:44 PM by Jefferson » Logged

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?!
Jefferson
Zelador
Hero Member
*****

Aprovação: +0/-0
Offline Offline

Posts: 1677



View Profile WWW
« Reply #159 on: August 09, 2007, 12:08:21 PM »

Proview DVP-858 - Volume/MUTE em DivX
Isto foi publicado por mim originalmente no HTFORUM em 17/06/07


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

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

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

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



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



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

Como fazer a mudança:

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

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

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

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

Você também pode redirecionar para a janela 0x04 (transparente), que fica logo acima da 0x06 e ainda não sei para que é usada no firmware. A 0x02 é onde é exibido o tempo decorrido.
« Last Edit: August 09, 2007, 12:12:20 PM by Jefferson » Logged

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?!
Pages: « 1 2 3 4 5 6 7 8 9 »  All
  Print  
 
Jump to:  

TinyPortal v1.0 beta 3 © Bloc
Powered by MySQL Powered by PHP Powered by SMF 1.1.9 | SMF © 2006-2009, Simple Machines LLC Valid XHTML 1.0! Valid CSS!
Page created in 1.242 seconds with 36 queries.