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

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

Offline ronison

  • Novato
  • *
  • Mensagens: 14
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #280 Online: Janeiro 15, 2008, 12:03:14 am »
Olá Pessoal,

    Pra falar a verdade jpa consegui fazer o player funcionar com fontes sem o "div by 4". Fiz vários tipos de testes. Em grande parte deles o que ocorreu foi que os textos do Setup simplesmente sumiram. Mas já estou contornando a situação. Consegui fazer com que tudo funcionasse a contento, e o player ficou com 5 fontes selecionáveis. Porém, fiz uma besteira no 8032 e o player faleceu. Agora tenho que ressussitá-lo para continuar com os testes e experimentos (estou a procura do conector de 4 pinos para a porta serial do aparelho).

Offline doctorxyz

  • Novato Prolixo
  • **
  • Mensagens: 63
  • Aprovação: +4/-0
    • Ver Perfil
Sobre Carregamento automático de legendas no DVP5965K/55
« Responder #281 Online: Janeiro 16, 2008, 11:57:54 am »
jmaraujo,

Caso tenha disponibilidade, poderia me ajudar em alguma destas "missões" que postei acima?
Ficaria muito grato... Estou super empolgado tentando fazer o meu primeiro hack, mas confesso que está difícil... Até coloquei os códigos do firmware do hej546 e o do meu player (Firmware DVP5965K v2.2b by naasom -v.Packet Bitstream postado no htforum em 18.12.2007) lado a lado no Excel, mas não está adiantando. O código é diferente, não acho os padrões.

- Missão 1: Achar a rotina GetFileType do DVP5965K/55
- Missão 2: Achar os ponteiros (words de 2 bytes) que indicam onde fazer as chamadas quando o tipo de mídia é MPG (byte 09) e quando é AVI (byte 12) do DVP5965K/55
- Missão 3: Achar a rotina Video_play do DVP5965K/55

Grato

FORUM.RYAN.COM.BR

Sobre Carregamento automático de legendas no DVP5965K/55
« Responder #281 Online: Janeiro 16, 2008, 11:57:54 am »

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Sobre Carregamento automático de legendas no DVP5965K/55
« Responder #282 Online: Janeiro 16, 2008, 02:54:53 pm »
jmaraujo,

Caso tenha disponibilidade, poderia me ajudar em alguma destas "missões" que postei acima?
Ficaria muito grato... Estou super empolgado tentando fazer o meu primeiro hack, mas confesso que está difícil... Até coloquei os códigos do firmware do hej546 e o do meu player (Firmware DVP5965K v2.2b by naasom -v.Packet Bitstream postado no htforum em 18.12.2007) lado a lado no Excel, mas não está adiantando. O código é diferente, não acho os padrões.

- Missão 1: Achar a rotina GetFileType do DVP5965K/55
- Missão 2: Achar os ponteiros (words de 2 bytes) que indicam onde fazer as chamadas quando o tipo de mídia é MPG (byte 09) e quando é AVI (byte 12) do DVP5965K/55
- Missão 3: Achar a rotina Video_play do DVP5965K/55

Claro. Me passe o link para download do seu firmware para que eu possa dar uma olhada.

Você já viu o meu post no fórum do DVP5100? (É mais completo que o que eu postei no MT13x9)

Mas para ir adiantando o assunto:

Para achar GetFileType, busque "EF 75 F0 10 A4 24 ? FF E5 F0 34 ? FE 12 ? ? EF 12"

Para achar Video_Play, busque "EF 24 FE 60 ? 14 60 ? 24 02 70 ? 74 FF 90 ? ? F0 A3 F0 90 ? ? F0 A3 F0 C2 ? 12"
ou
"EF 24 FE 60 ? 14 60 ? 24 02 70 ? 74 FF 90 ? ? F0 A3 F0 90 ? ? F0 A3 F0 C2 ? 02"

A única diferença entre as duas seqüencias para achar Video_Play e que uma faz um ljmp ("02") para a rotina "Start_Playback" e a outra faz um lcall ("12").

Saudações!

Offline doctorxyz

  • Novato Prolixo
  • **
  • Mensagens: 63
  • Aprovação: +4/-0
    • Ver Perfil
Re: Sobre Carregamento automático de legendas no DVP5965K/55
« Responder #283 Online: Janeiro 16, 2008, 07:27:40 pm »
jmaraujo,

Caso tenha disponibilidade, poderia me ajudar em alguma destas "missões" que postei acima?
Ficaria muito grato... Estou super empolgado tentando fazer o meu primeiro hack, mas confesso que está difícil... Até coloquei os códigos do firmware do hej546 e o do meu player (Firmware DVP5965K v2.2b by naasom -v.Packet Bitstream postado no htforum em 18.12.2007) lado a lado no Excel, mas não está adiantando. O código é diferente, não acho os padrões.

- Missão 1: Achar a rotina GetFileType do DVP5965K/55
- Missão 2: Achar os ponteiros (words de 2 bytes) que indicam onde fazer as chamadas quando o tipo de mídia é MPG (byte 09) e quando é AVI (byte 12) do DVP5965K/55
- Missão 3: Achar a rotina Video_play do DVP5965K/55

Claro. Me passe o link para download do seu firmware para que eu possa dar uma olhada.

Você já viu o meu post no fórum do DVP5100? (É mais completo que o que eu postei no MT13x9)

Mas para ir adiantando o assunto:

Para achar GetFileType, busque "EF 75 F0 10 A4 24 ? FF E5 F0 34 ? FE 12 ? ? EF 12"

Para achar Video_Play, busque "EF 24 FE 60 ? 14 60 ? 24 02 70 ? 74 FF 90 ? ? F0 A3 F0 90 ? ? F0 A3 F0 C2 ? 12"
ou
"EF 24 FE 60 ? 14 60 ? 24 02 70 ? 74 FF 90 ? ? F0 A3 F0 90 ? ? F0 A3 F0 C2 ? 02"

A única diferença entre as duas seqüencias para achar Video_Play e que uma faz um ljmp ("02") para a rotina "Start_Playback" e a outra faz um lcall ("12").

Saudações!

Mestre jmaraujo,

Acabei de ler e testar suas dicas daqui e do documento do forum DVP5100. Mesmo assim não consigo achar GetFileType e Video_Play com as sequências de busca informadas.

Nem no firmware modificado que estou usando...

(naasom, publicado no HT Forum em 18.12.2007, e baseado na v2.2 Packet Bitstream do Eneris
http://www.4shared.com/file/32413050/81d9a4b2/DVP5965K_93GOTO_PB.html?dirPwdVerified=67cd922f


...tampouco no firmware original da Philips...
https://www.p4c.philips.com/cgi-bin/dcbint/eula.pl?slg=BRP&link=https://www.p4c.philips.com/files/d/dvp5965k_55/dvp5965k_55_fus_eng.zip

:-( .......

Bom, os links de ambos firmwares estão funcionando. Se puder dar uma "olhadinha"...

Offline doctorxyz

  • Novato Prolixo
  • **
  • Mensagens: 63
  • Aprovação: +4/-0
    • Ver Perfil
RESOLVIDO! Philips DVP5965K_55 - Carregamento Automático de Legendas
« Responder #284 Online: Janeiro 20, 2008, 06:33:34 pm »
Ryan,

O que prefere, quando eu terminar a documentação das explicações (semana que vem)? Posto aqui ou em separado?

JMAraujo,

Não precisa mais esquentar a cabeça sobre o assunto carregamento automático de legendas no 5965K/55: 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 seu guia, 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.

Fiz um patch beta - só para testar mesmo - alterando 5 bytes e funcionou (avi's carregam legenda automática, o único problema em potencial já que não pude testar - só li a teoria e apliquei - é que os arquivos DMF i.e. divx Ultra ficariam sem opção de seleção de legenda no menu interno).

E agora há pouco fiz o patch definitivo (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: Janeiro 27, 2008, 01:07:29 am por doctorxyz »

Offline ronison

  • Novato
  • *
  • Mensagens: 14
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #285 Online: Janeiro 21, 2008, 06:32:29 am »
Dois pontos:

1. A rotina Playback_start (B4:ABBB) é chamada em B1:D313, e não em B1:D2C7, conforme dito.

 e

2.Tem uma coisa aqui que eu não entendi:

ROM:FAF0 7F C4          mov   R7, #0xC4 ; '-'
ROM:FAF2 7E 13          mov   R6, #0x13
ROM:FAF4 7D 01          mov   R5, #1
ROM:FAF6 12 05 F5       lcall Arm_PutChar

Como  é que se coloca algo no endereço 0x13C4...

ROM:FB13 7F 46          mov   R7, #0x46 ; 'F'
ROM:FB15 7E 00          mov   R6, #0x00
ROM:FB17 12 04 7B       lcall Arm_GetChar

E depois lê do endereço 0x46? Alguem sabe explicar isso?

No mais, parabéns pelo trabalho doctorxyz.
« Última modificação: Janeiro 21, 2008, 06:59:20 am por ronison »

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware MT13x9: Log de Descobertas
« Responder #286 Online: Janeiro 21, 2008, 11:47:09 am »
Você está absolutamente certo, ronison.

Foi um error do Hej456 mesmo (eu nunca tinha percebido isso antes). Veja no documento do proprio Hej456:

ROM:0C13             play + press subtitle if avi:
ROM:0C13 12 A4 AD              lcall ROM_A4AD           ;the call that starts playback.
ROM:0C16 7F 46                 mov   R7, #0xC4 ; '-'
ROM:0C18 7E 00                 mov   R6, #13            ;get counter from shared memory
ROM:0C1A 12 F4 EF              lcall ARM_GetChar
ROM:0C1A
ROM:0C1D EF                    mov   A, R7
ROM:0C1E 64 01                 xrl   A, #1              ;if counter = 1 (divx)
ROM:0C20 60 03                 jz    ROM_C25            ;return
ROM:0C22 02 0B DD              ljmp  BS:382_B1:B753     ;else “press subtitle button”
ROM:0C25             ROM_C25:
ROM:0C25 22                    ret


Não coincide o disassembly (em azul) com os opcodes (vermelho).

Eu cometí o mesmo erro no meu firmware. Vou consertar agora mesmo.

Saudações!
« Última modificação: Janeiro 21, 2008, 11:53:18 am por jmaraujo »

Offline doctorxyz

  • Novato Prolixo
  • **
  • Mensagens: 63
  • Aprovação: +4/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #287 Online: Janeiro 21, 2008, 03:34:20 pm »
1. A rotina Playback_start (B4:ABBB) é chamada em B1:D313, e não em B1:D2C7, conforme dito.
Ronison,

Tem razão quanto ao endereço de chamada para Playback_start dentro da Video_Play

Já atualizei o texto no post principal (abaixo, colocos os detalhes a quem interessar possa):

Excluí a parte:
"- Alterar 2 bytes em B1:D2C8 (Dentro da rotina Video_Play)
 (opção Address -> Go to -> $1D2C8)

      De   1E D8

      Para   FB 10"

E coloquei em seu lugar:
"- Alterar 2 bytes em B1:D314 (Dentro da rotina Video_Play)
 (opção Address -> Go to -> $1D314)

      De   1D 1C

      Para   FB 10"



Excluí a parte:
"
- 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 1E D8
         7F C4
         7E 13
         12 1B 84
         EF
         64 01
         60 03
         02 2C 28
         22"

E coloquei em seu lugar:
"- 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
         7F C4
         7E 13
         12 1B 84
         EF
         64 01
         60 03
         02 2C 28
         22"


Excluí a parte:
"Video_play      B1:D2B6   -> No endereço B1:D2C7, executa lcall B1_B3Playback_start

B1_B3Playback_start   B1:1ED8   -> Chaveia o 8032 do bloco 1 para 3 e chama Playback_start

Playback_start      B3:E9FE -> Inicia a reprodução
"

E coloquei em seu lugar:
"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"

2.Tem uma coisa aqui que eu não entendi:

ROM:FAF0 7F C4          mov   R7, #0xC4 ; '-'
ROM:FAF2 7E 13          mov   R6, #0x13
ROM:FAF4 7D 01          mov   R5, #1
ROM:FAF6 12 05 F5       lcall Arm_PutChar

Como  é que se coloca algo no endereço 0x13C4...

ROM:FB13 7F 46          mov   R7, #0x46 ; 'F'
ROM:FB15 7E 00          mov   R6, #0x00
ROM:FB17 12 04 7B       lcall Arm_GetChar

E depois lê do endereço 0x46? Alguem sabe explicar isso?

Você está absolutamente certo, ronison.

Foi um error do Hej456 mesmo (eu nunca tinha percebido isso antes). Veja no documento do proprio Hej456:

ROM:0C13             play + press subtitle if avi:
ROM:0C13 12 A4 AD              lcall ROM_A4AD           ;the call that starts playback.
ROM:0C16 7F 46                 mov   R7, #0xC4 ; '-'
ROM:0C18 7E 00                 mov   R6, #13            ;get counter from shared memory
ROM:0C1A 12 F4 EF              lcall ARM_GetChar
ROM:0C1A
ROM:0C1D EF                    mov   A, R7
ROM:0C1E 64 01                 xrl   A, #1              ;if counter = 1 (divx)
ROM:0C20 60 03                 jz    ROM_C25            ;return
ROM:0C22 02 0B DD              ljmp  BS:382_B1:B753     ;else “press subtitle button”
ROM:0C25             ROM_C25:
ROM:0C25 22                    ret


Não coincide o disassembly (em azul) com os opcodes (vermelho).

Eu cometí o mesmo erro no meu firmware. Vou consertar agora mesmo.

ronison e jmaraujo,

Obrigado pelo toque. Já consertei o meu texto lá em cima, conforme indicado abaixo:

"- 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 1E D8
         7F C4 <------------------------------------Consertado; antes, estava 46
         7E 13 <------------------------------------Consertado; antes, estava 00
         12 1B 84
         EF
         64 01
         60 03
         02 2C 28
         22

(...)"

ronison,

Consertei um bug - Não tinha feito corretamente o teste de mesa na sequência de comparações 8032 que se iniciam na GetFileType (B4:D4D7) a partir de B4:D4E8 e terminam em B4:D509.
Agora está assim: GetFileType, em B4:D511 desvia para DMF_or_AVI (localizada em B4:FB2C). A rotina DMF_or_AVI decide para se vai desviar para AVI_counter (B4:FB40) ou para DMF_counter (B4:FB30), que está imediatamente no byte seguinte, em função do conteúdo do acumulador:
- quando o código de mídia é 0x9 (mpeg/avi) -> acumulador = 0xFD
- quando o código de mídia é 0x12 (DMF=.divx) -> acumulador = 0xF8
« Última modificação: Janeiro 22, 2008, 03:53:24 pm por doctorxyz »

Offline ronison

  • Novato
  • *
  • Mensagens: 14
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #288 Online: Janeiro 21, 2008, 05:32:50 pm »
Temos algo estranho nesta função DMF_or_AVi:

24 08   ADD A, #0x08   ;Adiciona o valor 8 ao acumulador (qual seria o valor anterior?)
70 10   JNZ 10      ;Sempre salta para o endereço FB3E (FB2E + 0x10). O que tem neste endereço? Onde está a decisão de DMF ou AVI?


Abraço,
« Última modificação: Janeiro 21, 2008, 05:34:42 pm por ronison »

Offline doctorxyz

  • Novato Prolixo
  • **
  • Mensagens: 63
  • Aprovação: +4/-0
    • Ver Perfil
Re: Firmware MT13x9: Log de Descobertas
« Responder #289 Online: Janeiro 21, 2008, 07:35:37 pm »
Temos algo estranho nesta função DMF_or_AVi:

24 08   ADD A, #0x08   ;Adiciona o valor 8 ao acumulador (qual seria o valor anterior?)
70 10   JNZ 10      ;Sempre salta para o endereço FB3E (FB2E + 0x10). O que tem neste endereço? Onde está a decisão de DMF ou AVI?


Abraço,


Os valores anteriores do acumulador que podem chegar neste trecho de código é um destes aqui:
Acumulador = 0xFD -> chega assim quando o código de mídia é 0x09 (mpeg/avi)
Acumulador = 0xF8 -> chega assim quando o código de mídia é 0x12 (DMF=.divx)

Mestre Ronison,

Conferi no IDA Pro!

Na rotina DMF_or_AVI, no endereço B4:FB2E, o op code correto para jnz B4_FB40 é 70 10 mesmo.

É um salto para B4_B1_AVI_counter (B4:FB40).

A decisão de DMF ou AVI, vem quando somamos 0x08 ao acumulador e ele retorna flag "Zero" ou "Not Zero".

Exemplo1: Se chegar 0xF8, o código de mídia é 0x12 (DMF=.divx). 0xF8 + 0x08 = 0x00, ativando flag "Zero" e "Carry"("vai um"). Neste caso a jnz (Jump Not Zero) é ignorada e passamos para o próximo endereço de execução onde está B4_B1DMF_counter(FB30).

Exemplo1: Se chegar 0xFC, o código de mídia é 0x09 (mpeg/avi). 0xFC + 0x08 = 0x04, ativando flag "Not Zero" e "Carry"("vai um"). Neste caso a jnz (Jump Not Zero) é executada e passamos para endereço de execução onde está B4_B1AVI_counter(FB40).

Esta correção fiz após o teste de mesa (planilha Excel aqui anexa, tem a macro GetFileType dentro para testar o valor de entrada que quiser nela) na sequência de comparações 8032 que se iniciam na GetFileType (B4:D4D7) a partir de B4:D4E8 e terminam em B4:D509.

Por isso agora está assim: GetFileType, em B4:D511 desvia para DMF_or_AVI (localizada em B4:FB2C). A rotina DMF_or_AVI decide para se vai desviar para AVI_counter (B4:FB40) ou para DMF_counter (B4:FB30), que está imediatamente no byte seguinte, em função do conteúdo do acumulador:

Se tiver mais dúvidas, é só perguntar.

Saudações!
« Última modificação: Janeiro 22, 2008, 01:05:57 pm por doctorxyz »

FORUM.RYAN.COM.BR

Re: Firmware MT13x9: Log de Descobertas
« Responder #289 Online: Janeiro 21, 2008, 07:35:37 pm »