Autor Tópico: Carregamento Automático de Legendas (Philips DVP5965K/55)  (Lida 5657 vezes)

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

Offline doctorxyz

  • Novato Prolixo
  • **
  • Mensagens: 63
  • Aprovação: +4/-0
    • Ver Perfil
Carregamento Automático de Legendas (Philips DVP5965K/55)
« Online: Janeiro 31, 2008, 08:28:32 pm »
Ryan,

A casa é sua, veja se está de acordo que este tópico pronto fique aqui.

Pessoal,

Segue how to, que devo aprimorar em um segundo momento. Os agradecimentos vão em especial para o JMAraujo.

Saudações!

doctorxyz

-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-

Mistério resolvido!

Já achei as rotinas, o que era o mais difícil (elas não são descobertas pelas sequências de busca convencionais, tem que analisar código 8032 mesmo)...

Peguei o guia do JMAraujo, entitulado "Carga automática de subtítulos (feito em cima daquele do hej456, porém mais completo e recente)", postado em http://www.forodvp5100.com.ar/viewtopic.php?f=16&t=591&sid=bfc4e9bfe41c1738f3b36daa306162a7

...e adaptei com as informações abaixo.

Tinha feito um patch beta alterando 5 bytes e funcionou (avi's carregam legenda automática, o único problema em potencial era com os arquivos DMF i.e. .divx que ficariam sem opção de seleção de legenda no menu interno).

No patch abaixo, o definitivo, foi muito mais trabalhoso, para endereçar a questão DMF adequadamente e pelo fato da rotina FileGetType ser diferente dos outros aparelhos.

Fiz o teste, funcionou e compartilho aqui (veja detalhes das rotinas no rodapé desta mensagem).

PASSO-A-PASSO

(Obs.: Ninguém é obrigado a usar os utilitários informados aqui)

- Executar o MTK ReMaker 0.2 (8 )

- Abrir o firmware-base (7) e no extrair o código 8032 e o ARM Code 1 dele
(opção File -> Open e MT13X9 -> Code Part -> 8032 -> Botão Direito -> Save)
e Code Part -> RISC -> ARM Codes -> ARM Code 1 -> Botão Direito -> Save)

- Executar o XVI32 2.51 (9)

- Abrir o bloco 1 do código ARM
 (opção File -> Open)

- Alterar um byte em B4:A996 (Está dentro da tabela de tipos de mídia do ARM Code)
 (opção Address -> Go to -> $4A996)

      De   12

      Para   09

- Salvar o bloco 1 do código ARM alterado com outro nome
  (opção File -> Save As)

- Fechar o bloco 1 do código ARM
 (opção File -> Close)

- Abrir o código 8032
 (opção File -> Open)

- Alterar 3 bytes em B4:D511 (Dentro da rotina GetFileType)
 (opção Address -> Go to -> $4D511)

      De   7F 04      mov   R7, #4
         22

      Para   02 FB 2C   ljmp  DMF_or_AVI

- Alterar 4 bytes em B4:FB2C (Criar rotina DMF_or_AVI onde só havia FF)
 (opção Address -> Go to -> $4FB2C)

      De   FF FF FF FF

      Para   24 08      add   A, #8
         70 10      jnz   B4_B1AVI_Counter

- Alterar 6 bytes em B4:FB30 (Criar rotina B4_B1DMF_Counter onde só havia FF)
 (opção Address -> Go to -> $4FB30)

      De   FF FF FF FF FF FF

      Para   90 FA F0   mov   DPTR, #DMF_Counter
         02 18 8F   ljmp  B4_Bank_1

- Alterar 6 bytes em B4:FB40 (Criar rotina B4_B1AVI_Counter onde só havia FF)
 (opção Address -> Go to -> $4FB40)

      De   FF FF FF FF FF FF

      Para   90 FB 00   mov   DPTR, #AVI_Counter
         02 18 8F   ljmp  B4_Bank_1

- Alterar 3 bytes em B1:D313 (Dentro da rotina Video_Play)
 (opção Address -> Go to -> $1D313)

      De   02 1D 1C   ljmp  B1_B4Playback_start

      Para   02 FB 10   ljmp  Autopress_subtitle

- Alterar 12 bytes em B1:FAF0 (Criar rotina DMF_Counter onde só havia FF)
 (opção Address -> Go to -> $1FAF0)

      De   FF FF FF FF FF FF FF FF FF FF FF FF

      Para   7F C4      mov   R7, #0xC4 ; '-'
         7E 13      mov   R6, #0x13
         7D 01      mov   R5, #1
         12 1B 96   lcall B1_B0Arm_PutChar
         74 04      mov   A, #4
         22      ret

- Alterar 12 bytes em B1:FB00 (Criar rotina AVI_Counter onde só havia FF)
 (opção Address -> Go to -> $1FB00)

      De   FF FF FF FF FF FF FF FF FF FF FF FF

      Para   7F C4      mov   R7, #0xC4 ; '-'
         7E 13      mov   R6, #0x13
         7D 00      mov   R5, #0
         12 1B 96   lcall B1_B0Arm_PutChar
         74 04      mov   A, #4
         22      ret

- Alterar 19 bytes em B1:FB10 (Criar rotina Autopress_subtitle onde só havia FF)
 (opção Address -> Go to -> $1FB10)

      De   FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

      Para   12 1D 1C   lcall B1_B4Playback_start
         7F C4      mov   R7, #0xC4 ; '-'
         7E 13      mov   R6, #0x13
         12 1B 84   lcall B1_B0Arm_PutChar
         EF      mov   A, R7
         64 01      xrl   A, #1
         60 03      jz    B1_FB22
         02 2C 28   ljmp  B1_B1Subtitle_loading
         22      ret

- Salvar o código 8032 alterado com outro nome
  (opção File -> Save As)

- Fechar o código 8032
 (opção File -> Close)

- Executar o MtkReplacer v0.5 (10)

- Criar uma nova versão de firmware a partir do firmware-base (7) (input firmware) e a alteração no código 8032 (8032 Block) que acaba de ser feita pelo XVI32
  Proceder nesta ordem
  1o. Input firmware -> informar o caminho e o nome do firmware-base (7)
  2o. 8032 Block -> informar o caminho e nome do código 8032 que acaba de ser alterado
  3o. ARM Code 1 (uncompressed) -> informar o caminho e nome do bloco 1 do código ARM que acaba de ser alterado
  4o. Output firmware -> É sugerido um nome para o novo firmware, porém (importante!) informe nome DVP5965K_93.BIN e numa pasta em separado.
  5o. Clicar em Replace   

- Executar o DeepBurner Free Portable 1.8 (10), visando obter um CD de dados monosessão com um arquivo somente, nome em maiúsculas DVP5965K_93.BIN. Todas as letras em maíusculo, se não tiver este cuidado, ao inserir no DVD Player o CD não reconhecido(Aparecerá a mensagem "Disco Desconhecido"):

- Colocar uma mídia CD-R ou CD-RW virgem (e de qualidade) no gravador de CD

- Criar CD de dados monosessão
   Select project type: -> Project type: -> Create data CD/DVD -> Next ->
   New Project: -> Multisession: -> No Multissession -> Next ->

- Selecionar ícone CDRoot

- Teclar F2 (Change volume label) -> Informe DOCTORXYZ1.1 (para fins de controle de versão)

- Clicar no ícone Add files -> localizar e selecionar o novo firmware DVP5965K_93.BIN
(se não estiver com este nome, renomeio agora. Tudo deve estar em maiúsculas, inclusive a extensão)

- Clicar no item Burn Disk -> Speed -> Selecionar a menor velocidade possível

- Clicar em Burn

- Atualizar o firmware colocando o CD de dados no DVD Player, confirmar a atualização apertando a tecla Play, retirar o CD na hora informada e esperar alguns minutos. Durante a atualização do firmware, não mexer nem desligar o aparelho, senão você poderá ter problemas. Caso isso ocorra, você deverá providenciar um cabo de dados para recuperá-lo. (12)

-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-

Não fiz o upload do novo firmware por uma questão de tempo e saco, quem quiser fazê-lo fique à vontade, só não esqueça de citar o novato aqui ;-)

Ainda esta semana devo postar as instruções detalhadas de como cheguei até aqui.

Saudações!

doctorxyz

PS: Críticas ***construtivas*** sempre são bem-vindas!

-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-

Rotinas 8032(nome, localização e breve descrição) - Philips DVP5965K/55

Remote_DivXplayback   B4:5F6D -> Chama a função correspondente ao botão pressionado

Tecla29      B4:5FE8 -> Trata-se de uma palavra (dois bytes) contendo o endereço da rotina DivX_Tecla29 (B4:618F) e um byte com o código do botão subtitle (0x29)

DivX_Tecla29   B4:618F -> Chama B4_B1Subtitle_loading

GetFileType      B4:D4D7 -> Obtêm o código de tipo de mídia no ARM (13)

B4_B0Arm_GetChar   B4:1B84 -> Chaveia o 8032 do bloco 4 para 0 e chama Arm_GetChar

B1_B0Arm_GetChar   B1:1B84 -> Chaveia o 8032 do bloco 1 para 0 e chama Arm_GetChar

Arm_GetChar      B0:E8BB -> Obtêm um caractere

B4_B0Arm_PutChar   B4:1B96 -> Chaveia o 8032 do bloco 4 para 0 e chama Arm_PutChar

B1_B0Arm_PutChar   B1:1B96 -> Chaveia o 8032 do bloco 1 para 0 e chama Arm_PutChar

Arm_PutChar      B0:EBEF -> Armazena um caractere

Video_play      B1:D2B6   -> No endereço B1:D313, executa lcall B1_B3Playback_start

B1_B4Playback_start   B1:1D1C   -> Chaveia o 8032 do bloco 1 para 4 e chama Playback_start

Playback_start      B4:ABBB -> Inicia a reprodução

B4_B1Subtitle_loading   B4:2C28 -> Chaveia o 8032 do bloco 4 para 1 e chama Subtitle_loading

B1_B1Subtitle_loading   B1:2C28 -> Chaveia o 8032 do bloco 1 para 1 e chama Subtitle_loading (só não entendi porque chavear blocos, se não precisa!)

Subtitle_loading   B1:C619 -> Produz o mesmo efeito do pressionamento da tecla subtitle

DMF_or_AVI      B4:FB2C -> Decide qual contador (AVI ou DMF) utiliza em função do valor do acumulador que recebe de GetFileType

B4_B1DMF_Counter   B4:FB30 -> Chaveia o 8032 do bloco 4 para 1 e chama DMF_Counter

B4_B1AVI_Counter   B4:FB40 -> Chaveia o 8032 do bloco 4 para 1 e chama AVI_Counter

DMF_Counter      B1:FAF0 -> Sinaliza num flag que o arquivo é DMF.

AVI_Counter      B1:FB00 -> Sinaliza num flag que o arquivo é AVI.

Autopress_subtitle    B1:FB10 -> Lê o flag (preenchido por DMF_Counter ou AVI_Counter). Se for arquivo AVI, carrega a legenda antes de reproduzí-lo.

Tabela de tipos de mídia no ARM Code – Philips DVP5965K/55
Começa em ARM Code 1, ROM:0004A8FC. Os tipos que interessam:

ROM:0004A93B 09 03 4D 50 47 00 00 MPG
...
ROM:0004A957 09 03 4D 50 45 00 00 MPE
ROM:0004A95E 09 03 4D 31 56 00 00 M1V
ROM:0004A965 09 03 4D 32 56 00 00 M2V
...
ROM:0004A97A 09 04 4D 50 45 47 00 MPEG
...
ROM:0004A996 12 03 41 56 49 00 00 AVI
ROM:0004A99D 12 03 56 49 44 00 00 VID
ROM:0004A9A4 12 04 44 49 56 58 00 DIVX
ROM:0004A9AB 12 03 44 49 56 00 00 DIV
ROM:0004A9B2 14 03 4D 50 34 00 00 MP4
ROM:0004A9B9 14 03 4D 34 41 00 00 M4A


-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-

Referências (algumas)

(1) Firmware MT13x9: Log de Descobertas
http://ryan.com.br/smf/index.php?topic=179.0

(2) Smart Loading of text subtitles in DMF (documento do hej456)
http://hej456.fasthoster.de/Smart.Loading.of.subs.in.DMF.zip

(3) Carga automática de subtítulos (documento do jmaraujo, feito em cima daquele do hej456, porém mais completo e recente)
http://www.forodvp5100.com.ar/viewtopic.php?f=16&t=591&sid=bfc4e9bfe41c1738f3b36daa306162a7

(4) Grupo MT13x9
http://tech.groups.yahoo.com/group/mt13x9/

(5) Grupo MEDIATEK1389 (do Cachirulo)
http://tech.groups.yahoo.com/group/MEDIATEK1389/

(6) Firmware Yamada 6700 Hej456.DSP.v5.0a (usado na explicação do documento do hej456)
http://www.hej456.com/forum/docs/Hej456.DSP.v5.0a.1252.zip

(7) Firmware DVP5965K by naasom -v.Packet Bitstream (18.12.2007)
(tem a função GO-TO e foi feito em cima do firmware do Eneris v2.2)
http://www.htforum.com/vb/showthread.php?t=60507&highlight=firmware

(8 ) MTK ReMaker 0.2
http://personal.inet.fi/cool/mediatek/programs/mtkremaker/MTKReMaker023b6.zip

(9) XVI32 2.51
http://www.chmaas.handshake.de

(10) MtkReplacer v0.5
http://newage.mpeg4-players.info/mt1389/tools/MtkReplacer_0.5.rar

(11) DeepBurner Free Portable 1.8
http://www.deepburner.com/

(12) “Ressuscitando” o Player pela Serial
http://ryan.com.br/mtk_porta_serial.htm

(13) Tabela de tipos de mídia no ARM Code
http://ryan.com.br/smf/index.php?PHPSESSID=d842fc529d9bac6e705db40ddd1e9733&topic=179.msg9172607#msg9172607

(14) Scripts IDA do Grupo MT13x9
 http://tech.groups.yahoo.com/group/mt13x9/
(Files -> Disassembling -> !IDA Scripts -> MT1389_8032_ARM_IDA_SCRIPTS_2007.feb.7.RAR)


-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-

Agradecimentos

"Se fui mais longe, é porque me escorei no ombro de gigantes":
Ryan, hej456, JMAraujo, NA, MaBreaker, Eneris, Naasom, cachirulo, grupo MT13x9, grupo MEDIATEK1389.
« Última modificação: Fevereiro 06, 2008, 04:43:19 pm por Jefferson »

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Carregamento Automático de Legendas (Philips DVP5965K/55)
« Responder #1 Online: Fevereiro 05, 2008, 07:54:07 pm »
Opcodes do NOP em ARM => "C0 46"

FORUM.RYAN.COM.BR

Re: Carregamento Automático de Legendas (Philips DVP5965K/55)
« Responder #1 Online: Fevereiro 05, 2008, 07:54:07 pm »

Offline doctorxyz

  • Novato Prolixo
  • **
  • Mensagens: 63
  • Aprovação: +4/-0
    • Ver Perfil
Re: Carregamento Automático de Legendas (Philips DVP5965K/55)
« Responder #2 Online: Fevereiro 06, 2008, 04:02:15 pm »
Opcodes do NOP em ARM => "C0 46"

Obrigado pela dica JMAraujo!!!

Por questões de organização, transferi o post que estava aqui (erroneamente) e coloquei no local adequado, ou seja: "Reformatação e Quebra automática de Legendas (Philips DVP5965K/55)".

« Última modificação: Fevereiro 06, 2008, 04:04:07 pm por doctorxyz »

FORUM.RYAN.COM.BR

Re: Carregamento Automático de Legendas (Philips DVP5965K/55)
« Responder #2 Online: Fevereiro 06, 2008, 04:02:15 pm »