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.