Autor Tópico: Firmware do LG DV397H  (Lida 302060 vezes)

0 Membros e 1 Visitante estão vendo este tópico.

Offline rictad

  • Hacker Honorário
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 285
  • Aprovação: +59/-0
    • Ver Perfil
Re: Firmware do LG DV397H
« Responder #70 Online: Fevereiro 02, 2009, 12:06:02 am »
Temos que ser bem detalhistas nesse negócio... Só uma dúvida: acho que teria que colocar CLR A antes de MOV A,#14. Pois, caso contrário, A ficará com um valor muito alto podendo corromper esse trecho...
Ontem eu também esqueçi disso e enviei a sugestão sem esse detalhe (hoje cedo corrigi).

Não entendi. O MOV A,#14 é atribuir 14 hex ao acumulador, não e? Então não precisa zerar o acumulador antes para fazer isso. É diferente de ADD A,#14.

Eu agora estou comparando com o firmware do Proview DP-858. Interessante que o valor para distância entre linhas é colocado junto com o alinhamento horizontal antes de chamar a outra função no final da sub-rotina:

Firmware do Proview DP-858:
Código: [Selecionar]
B1:F4FD E4     clr     A
B1:F4FE 90 FB 8E     mov     DPTR, #XRAM_FB8E ;      Distância entre as linhas
B1:F501 F0     movx    @DPTR, A
B1:F502 7B 08     mov     R3, #8;      Código Caracteres
B1:F504 7D 01     mov     R5, #1;      Alinhamento Horizontal
B1:F506 7F 13     mov     R7, #0x13;   Janela de Legenda
B1:F508 12 1E B8     lcall   B1_BS_228_B3_93B4

Estou tentando seguir as chamadas de sub-rotinas para ver onde esse valor é utilizado e comparar com sub-rotinas semelhantes no LG DV397H.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware do LG DV397H
« Responder #71 Online: Fevereiro 02, 2009, 12:08:06 am »
Temos que ser bem detalhistas nesse negócio... Só uma dúvida: acho que teria que colocar CLR A antes de MOV A,#14. Pois, caso contrário, A ficará com um valor muito alto podendo corromper esse trecho...
(olhando a rotina, A ficaria com o valor de  #87 + #14).

Não, nada disso. MOV não soma. Isso é tarefa de ADD.

CLR A = MOV A, #0
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 do LG DV397H
« Responder #71 Online: Fevereiro 02, 2009, 12:08:06 am »

Offline zeurt

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 333
  • Aprovação: +47/-0
    • Ver Perfil
Re: Firmware do LG DV397H
« Responder #72 Online: Fevereiro 02, 2009, 12:27:44 am »
Tá certo gente, falei besteira...  :dashhead1:

Offline zeurt

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 333
  • Aprovação: +47/-0
    • Ver Perfil
Re: Firmware do LG DV397H
« Responder #73 Online: Fevereiro 02, 2009, 12:48:46 am »
Estou enviando a Rotina Equivalente do LG DV256K (que não apresenta esse problema dos caracteres cortados):

B2:D767             ; =============== S U B R O U T I N E =======================================
B2:D767
B2:D767
B2:D767             BankSw_447_B2_D767:                     ; CODE XREF: B2_B940+110p
B2:D767                                                     ; DATA XREF: B0:B0_BS_447_B2_D767o ...
B2:D767 90 FC DD                    mov     DPTR, #XRAM_FCDD
B2:D76A E0                          movx    A, @DPTR
B2:D76B FF                          mov     R7, A
B2:D76C 13                          rrc     A
B2:D76D 13                          rrc     A
B2:D76E 54 3F                       anl     A, #0x3F
B2:D770 20 E0 03                    jb      ACC.0, B2_D776  ; Accumulator
B2:D773 02 D8 1A                    ljmp    B2_D81A
B2:D776             ; ---------------------------------------------------------------------------
B2:D776
B2:D776             B2_D776:                                ; CODE XREF: BankSw_447_B2_D767+9j
B2:D776 7F 02                       mov     R7, #2
B2:D778 12 04 F9                    lcall   B2_BS_88_B4_CE62
B2:D77B D2 2B                       setb    RAM_25.3
B2:D77D 7F 09                       mov     R7, #9
B2:D77F 12 04 BD                    lcall   B2_BS_78_B4_4CAB
B2:D782 7F 09                       mov     R7, #9
B2:D784 12 04 C3                    lcall   B2_BS_79_B4_47CF
B2:D787 90 FB EB                    mov     DPTR, #XRAM_FBEB
B2:D78A 74 0B                       mov     A, #0xB
B2:D78C F0                          movx    @DPTR, A
B2:D78D A3                          inc     DPTR
B2:D78E 74 07                       mov     A, #7
B2:D790 F0                          movx    @DPTR, A
B2:D791 E4                          clr     A
B2:D792 FB                          mov     R3, A
B2:D793 FD                          mov     R5, A
B2:D794 7F 09                       mov     R7, #9
B2:D796 12 04 E1                    lcall   B2_BS_84_B4_D9E6
B2:D799 E4                          clr     A
B2:D79A 90 FB 39                    mov     DPTR, #XRAM_FB39
B2:D79D F0                          movx    @DPTR, A
B2:D79E A3                          inc     DPTR
B2:D79F F0                          movx    @DPTR, A
B2:D7A0 90 FB 3B                    mov     DPTR, #XRAM_FB3B
B2:D7A3 F0                          movx    @DPTR, A
B2:D7A4 A3                          inc     DPTR
B2:D7A5 F0                          movx    @DPTR, A
B2:D7A6 90 FB 3E                    mov     DPTR, #XRAM_FB3E
B2:D7A9 74 02                       mov     A, #2
B2:D7AB F0                          movx    @DPTR, A
B2:D7AC A3                          inc     DPTR
B2:D7AD 74 BB                       mov     A, #0xBB ; '+'
B2:D7AF F0                          movx    @DPTR, A
B2:D7B0 90 FB 42                    mov     DPTR, #XRAM_FB42
B2:D7B3 E4                          clr     A
B2:D7B4 F0                          movx    @DPTR, A
B2:D7B5 A3                          inc     DPTR
B2:D7B6 74 87                       mov     A, #0x87 ; 'ç'
B2:D7B8 F0                          movx    @DPTR, A
B2:D7B9 D2 30                       setb    RAM_26.0
B2:D7BB E4                          clr     A
B2:D7BC 90 FB EB                    mov     DPTR, #XRAM_FBEB
B2:D7BF F0                          movx    @DPTR, A
B2:D7C0 FB                          mov     R3, A
B2:D7C1 FD                          mov     R5, A
B2:D7C2 7F 09                       mov     R7, #9
B2:D7C4 12 04 CF                    lcall   B2_BS_81_B4_DA67
B2:D7C7 E4                          clr     A
B2:D7C8 FD                          mov     R5, A
B2:D7C9 7F 09                       mov     R7, #9
B2:D7CB 12 04 C9                    lcall   B2_BS_80_B4_EE7F
B2:D7CE 7F 09                       mov     R7, #9
B2:D7D0 12 04 D5                    lcall   B2_BS_82_B4_EF6F
B2:D7D3 90 FB 39                    mov     DPTR, #XRAM_FB39
B2:D7D6 E4                          clr     A
B2:D7D7 F0                          movx    @DPTR, A
B2:D7D8 A3                          inc     DPTR
B2:D7D9 74 28                       mov     A, #0x28 ; '('
B2:D7DB F0                          movx    @DPTR, A
B2:D7DC 90 FB 3B                    mov     DPTR, #XRAM_FB3B
B2:D7DF E4                          clr     A
B2:D7E0 F0                          movx    @DPTR, A
B2:D7E1 A3                          inc     DPTR
B2:D7E2 74 04                       mov     A, #4
B2:D7E4 F0                          movx    @DPTR, A
B2:D7E5 90 FB 3E                    mov     DPTR, #XRAM_FB3E
B2:D7E8 74 02                       mov     A, #2
B2:D7EA F0                          movx    @DPTR, A
B2:D7EB A3                          inc     DPTR
B2:D7EC 74 94                       mov     A, #0x94 ; 'ö'
B2:D7EE F0                          movx    @DPTR, A
B2:D7EF 90 FB 42                    mov     DPTR, #XRAM_FB42
B2:D7F2 E4                          clr     A
B2:D7F3 F0                          movx    @DPTR, A
B2:D7F4 A3                          inc     DPTR
B2:D7F5 74 88                       mov     A, #0x88 ; 'ê'
B2:D7F7 F0                          movx    @DPTR, A
B2:D7F8 7D 81                       mov     R5, #0x81 ; 'ü'
B2:D7FA 7F 09                       mov     R7, #9
B2:D7FC 12 0B CB                    lcall   B2_BS_379_B4_C12B
B2:D7FF D2 70                       setb    RAM_2E.0
B2:D801 7F 8D                       mov     R7, #0x8D ; 'ì'
B2:D803 7E 00                       mov     R6, #0
B2:D805 12 04 5D                    lcall   B2_BS_62_B0_EBE6
B2:D808 BF 08 0D                    cjne    R7, #8, B2_D818
B2:D80B 90 FB 35                    mov     DPTR, #XRAM_FB35
B2:D80E E0                          movx    A, @DPTR
B2:D80F 64 11                       xrl     A, #0x11
B2:D811 60 05                       jz      B2_D818
B2:D813 7F 08                       mov     R7, #8
B2:D815 12 7D A3                    lcall   BankSw_112_B2_7DA3
B2:D818
B2:D818             B2_D818:                                ; CODE XREF: BankSw_447_B2_D767+A1j
B2:D818                                                     ; BankSw_447_B2_D767+AAj
B2:D818 C2 70                       clr     RAM_2E.0
B2:D81A
B2:D81A             B2_D81A:                                ; CODE XREF: BankSw_447_B2_D767+Cj
B2:D81A 22                          ret
B2:D81A             ; End of function BankSw_447_B2_D767
B2:D81A
B2:D81B


Ainda não analisei com muito cuidado, mas já notei algumas coisas diferentes:

a-)Aqui não tem mov R3,#8:
B2:D7F4 A3                          inc     DPTR
B2:D7F5 74 88                       mov     A, #0x88 ; 'ê'
B2:D7F7 F0                          movx    @DPTR, A
B2:D7F8 7D 81                       mov     R5, #0x81 ; 'ü'
B2:D7FA 7F 09                       mov     R7, #9
B2:D7FC 12 0B CB                    lcall   B2_BS_379_B4_C12B

b-)Os valores de wX1 e wY2 são diferentes (na segunda parte, já que na primeira parte são iguais).




« Última modificação: Fevereiro 02, 2009, 12:53:47 am por zeurt »

Offline rictad

  • Hacker Honorário
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 285
  • Aprovação: +59/-0
    • Ver Perfil
Re: Firmware do LG DV397H
« Responder #74 Online: Fevereiro 03, 2009, 04:23:31 pm »
Bom, dei um tempo aqui porque tive que fazer um cabo USB serial ;D. Quem está na chuva é para se molhar. O bom é que funcionou, mas agora estou com um problema esquisito! Acho que a saída HDMI queimou.

Pois é, comparando com a rotina do DV256K, a diferença é pouca. Então eu segui as rotinas até a chamada a uma função que o IDA chama de ARM_GetChar, que deve ser familiar a vocês. Eu achei que essa rotina deve ser responsável por algo referente a exibição de caracteres no Player, seja legenda ou qualquer outro. Então, vi uma pequena diferença:

DV397H:
Código: [Selecionar]
B4:F1F1 B4_F1F1:                                ; CODE XREF: ARM_GetChar+Fj
B4:F1F1 90 F8 60                    mov     DPTR, #BIM_STAT
B4:F1F4 E0                          movx    A, @DPTR
B4:F1F5 20 E5 F9                    jb      ACC.5, B4_F1F1  ; Accumulator
B4:F1F8 90 F8 61                    mov     DPTR, #BIM_MARH ; DRAM write port address High
B4:F1FB 74 74                       mov     A, #0x74 ; 't'
B4:F1FD F0                          movx    @DPTR, A
B4:F1FE 25 61                       add     A, RAM_61
B4:F200 A3                          inc     DPTR
B4:F201 F0                          movx    @DPTR, A
B4:F202 A3                          inc     DPTR
B4:F203 E5 62                       mov     A, RAM_62
B4:F205 F0                          movx    @DPTR, A
B4:F206 A3                          inc     DPTR
B4:F207 E0                          movx    A, @DPTR
B4:F208 F5 62                       mov     RAM_62, A

DV256K:
Código: [Selecionar]
B0:EBF1 B0_EBF1:                                ; CODE XREF: ARM_GetChar+Fj
B0:EBF1                 mov     DPTR, #BIM_STAT
B0:EBF4                 movx    A, @DPTR
B0:EBF5                 jb      ACC.5, B0_EBF1  ; Accumulator
B0:EBF8                 mov     DPTR, #BIM_MARH ; DRAM write port address High
B0:EBFB                 mov     A, #0x75 ; 'u'
B0:EBFD                 movx    @DPTR, A
B0:EBFE                 mov     A, RAM_5A
B0:EC00                 add     A, #0x4C ; 'L'
B0:EC02                 inc     DPTR
B0:EC03                 movx    @DPTR, A
B0:EC04                 inc     DPTR
B0:EC05                 mov     A, RAM_5B
B0:EC07                 movx    @DPTR, A
B0:EC08                 inc     DPTR
B0:EC09                 movx    A, @DPTR
B0:EC0A                 mov     RAM_5B, A

Além da soma colocada na posição de memória interna ser diferente (#74+alguma coisa implícita no DV397H e #75+#4C explícito no DV256K), o valor inicial carregado em uma posição da memória externa é diferente em 1 (#75 e #74). Pois bem, como sempre mantive a idéia de fazer o cabo de recuperação, não me importo em fazer testes quaisquer. Assim, alterei o valor de #75 para #74 no firmware do DV397H. Ao reiniciar, vi que após o HELLO aparecer no visor, a palavra seguinte ficou toda truncada. Não dava para ler. Além disso, a tela (eu uso a saída HDMI) ficou preta. Mas ao ligar a TV na saída AV do aparelho, vi que a janela de background estava aparecendo, mas travada. Ou seja, o HDMI não estava funcionando mas o AV sim. Os botões eject e liga-desliga estavam funcionando, mas o aparelho não lia mais cd e nem usb. Então, finalmente tinha que fazer o cabo. Segui os passos indicados pelo Ryan. O cabo é um USB de celular siemens e ficou ótimo. Soldei um conector de placa de som na placa controladora e deixei um rabicho com conector para fora. Além disso, no Linux, o upgrade com o MTKTOOL no WINE levou de 3 a 4 minutos usando o cabo USB (o driver para os cabos Prolific 2303 são nativos no linux desde o kernel 2.4 e parece ser menos problemático que o do Windows - você conecta o cabo e a porta serial é criada). Após a gravação do firmware original, a surpresa!! O player voltou a funcionar, mas a saída HDMI não!! Continua em tela preta e sem áudio. Mas a AV funciona normalmente. Verifiquei todas as conexões internas. Gravei outros firmware e continua sem funcionar o HDMI. E não achei nada na Internet a esse respeito.

Sem querer fugir muito do assunto do tópico, alguém já viu isso acontecer? Uma alteração no firmware pode danificar a saída HDMI do player ou a entrada HDMI da TV?

Voltando ao assunto do tópico, posso disponibilizar o firmware que deu problema para alguém, que tenha conexão por cabo e coragem, testar ;D! É só pedir! Vou fazer mais testes aqui e tentar usar outro cabo ou adaptadores para saber se o problema é no player ou na TV.
« Última modificação: Fevereiro 03, 2009, 05:51:10 pm por rictad »

Offline zeurt

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 333
  • Aprovação: +47/-0
    • Ver Perfil
Re: Firmware do LG DV397H
« Responder #75 Online: Fevereiro 03, 2009, 06:31:30 pm »
Então eu segui as rotinas até a chamada a uma função que o IDA chama de ARM_GetChar, que deve ser familiar a vocês.
ARM_GetChar serve para o 8032 ler conteúdo da memória em determinado endereço do ARM.
Para maiores detalhes veja esse site - tópico MTK FIRMWARE ARM.

Sem querer fugir muito do assunto do tópico, alguém já viu isso acontecer? Uma alteração no firmware pode danificar a saída HDMI do player ou a entrada HDMI da TV?
Que pena esse efeito colateral que você teve... :( Os maiores danos que eu já ouvi falar, relacionados a modificações e atualizações de firmware foram na maioria devido a atualização mal-sucedida, seguida de tentativas intempestivas de soldagem do cabo, o que danificava a placa e/ou a porta serial, inutilizando o aparelho. Já no seu caso foi algo estranho que nunca ouvi falar. Talvez outros colegas do forum possam opinar com mais propriedade...

Offline zeurt

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 333
  • Aprovação: +47/-0
    • Ver Perfil
Re: Firmware do LG DV397H
« Responder #76 Online: Fevereiro 04, 2009, 01:45:41 am »
Comparando a Rotina do DV397H com as de outros players, chego a conclusão que o tipo de alinhamento vertical pode ser definido em (destacado em verde):
B2:DAC4 7B 08                       mov     R3, #8
B2:DAC6 7D 81                       mov     R5, #0x81 ; 'ü'
B2:DAC8 7F 09                       mov     R7, #9

rictad, como você observou que o tipo de alinhamento vertical do DV397H é MIDDLE-BOTTOM, enquanto o do DV256K é MIDDLE-TOP, talvez mudar isso possa corrigir o problema dos caracteres cortados. O curioso é que no LG DV256K esse parametro não é definido nesse trecho (como disse alguns post atrás R3 não é usado).
De acordo com as observações do Ryan, nas rotinas que ele descreveu, mov R3,#8 nesses trechos pode definir não apenas o tipo de alinhamento vertical, como também o suporte a todos os caracteres (256 caracteres). Teria que testar outros valores para ver o que acontece. Você tem razão: nas rotinas dos outros firmwares, a distância entre as linhas é enviada junto com os 3 parametros acima (R3, R5 e R7).
Não sei se você está com disposição para insistir com isso tudo, considerando o problema que aconteceu com o seu player, mas caso estiver, está aqui mais uma sugestão...

Offline rictad

  • Hacker Honorário
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 285
  • Aprovação: +59/-0
    • Ver Perfil
Re: Firmware do LG DV397H
« Responder #77 Online: Fevereiro 04, 2009, 02:30:52 am »
Comparando a Rotina do DV397H com as de outros players, chego a conclusão que o tipo de alinhamento vertical pode ser definido em (destacado em verde):
B2:DAC4 7B 08                       mov     R3, #8
B2:DAC6 7D 81                       mov     R5, #0x81 ; 'ü'
B2:DAC8 7F 09                       mov     R7, #9

rictad, como você observou que o tipo de alinhamento vertical do DV397H é MIDDLE-BOTTOM, enquanto o do DV256K é MIDDLE-TOP, talvez mudar isso possa corrigir o problema dos caracteres cortados. O curioso é que no LG DV256K esse parametro não é definido nesse trecho (como disse alguns post atrás R3 não é usado).
De acordo com as observações do Ryan, nas rotinas que ele descreveu, mov R3,#8 nesses trechos pode definir não apenas o tipo de alinhamento vertical, como também o suporte a todos os caracteres (256 caracteres). Teria que testar outros valores para ver o que acontece. Você tem razão: nas rotinas dos outros firmwares, a distância entre as linhas é enviada junto com os 3 parametros acima (R3, R5 e R7).
Não sei se você está com disposição para insistir com isso tudo, considerando o problema que aconteceu com o seu player, mas caso estiver, está aqui mais uma sugestão...

Obrigado pela informação, zeurt! Certamente vou continuar com os testes, afinal o video componente ainda está funcionando. Vou testar vários valores para R3 nesse trecho. Mas vai ser um pouco mais lento porque também estou tentando descobrir o que aconteceu com o HDMI.

Offline zeurt

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 333
  • Aprovação: +47/-0
    • Ver Perfil
Re: Firmware do LG DV397H
« Responder #78 Online: Fevereiro 05, 2009, 03:32:43 pm »
Oi rictad, vale a pena ler o documento do NewAge: MPEG4 Subtitle Display in ARM (do yahoo group mt13x9). Tem muitas informações lá que podem ajudar a achar o que estamos buscando.
Tirei uma parte de lá:
 
"Let’s see what is passed to ARM:

byte Window ID   : the mpeg4 subtitle window
word X1      : subtitle_rect.left
word Y1      : subtitle_rect.top
word X2      : subtitle_rect.right
word Y2      : subtitle_rect.bottom
byte H_Align   : Horizontal alignment
            0x00: Left
            0x01: Center
            0x02: Right
byte Settings   : Miscellaneous purpose (bits)
            .......0: 0x00 Top alignment
            .......1: 0x01 Bottom alignment
            ....1...: 0x08 display all 256 characters in subtitles
            ...1....: 0x10 only ASCII 0x20..0x7E characters will be displayed
byte Space      : line spacing (space between subtitle lines in pixels)

So to call SetMpeg4SubtitleParams the input parameters must be in.

   Window ID      : R7
X1, Y1, X2, Y2   : global variables in xram
H_Align      : R5
Settings      : R3
Space         : xram"


Nesse Firmware analisado, R3 também é responsável por Settings. Veja que a opção TOP Alignment seria 0x00.

Estou enviando o documento.

Offline rictad

  • Hacker Honorário
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 285
  • Aprovação: +59/-0
    • Ver Perfil
Re: Firmware do LG DV397H
« Responder #79 Online: Fevereiro 05, 2009, 05:25:16 pm »
Olá zeurt! Sim, já havia percebido que valores ímpares (bit 0 setado) causavam alinhamento superior. Isso quer dizer que é ao contrário do texto. Por exemṕlo, o valor original #08=#B00001000. De qualquer forma, o alinhamento superior não funciona corretamente. Quando seto o bit 0 (#09, #01 etc) aparece só a primeira linha da legenda, alinhada a cima, e com um efeito flicker. Os testes continuam... :)

Editado: Após fazer as modificações para o firmware 1.3 (postado mais abaixo), verifiquei que o bit 0 setado é responsável pelo alinhamento inferior, mas o parâmetro de espaçamento entre linhas estava bugado, fazendo com que a legenda ficasse alta, o que parecia alinhamento superior. Para mais informações, veja os próximos posts.
« Última modificação: Fevereiro 15, 2009, 05:24:02 pm por rictad »

FORUM.RYAN.COM.BR

Re: Firmware do LG DV397H
« Responder #79 Online: Fevereiro 05, 2009, 05:25:16 pm »