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

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

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #210 Online: Agosto 28, 2007, 01:19:48 pm »
Problemas com o IDA

Eu não sei quanto ao resto de vocês, mas depois que eu instalei o IDA, meu Windows ficou ainda mais esquisito que o habitual.

Antes do IDA eu já tinha um problema sem solução: As hints/tooltips só aparecem quando querem. Mas surgiram outros.

Com o IDA aberto, dependendo da combinação de outros programas abertos, todo tipo de coisa esquisita acontece.

  • Às vezes o Delphi dá uma grande variedade de erros sem sentido e entra em colapso;
  • às vezes "Pesquisar" do Windows abre mas não exibe as opções;
  • Às vezes as caixas de diálogo (abrir, salvar, etc) dos programas (qualquer um, aleatoriamente) não querem abrir;
  • Etc, etc, etc.

A solução é sempre fechar alguns programas. Até parece o que acontece com o Windows 9X, quando os recursos do sistema são drenados e você tem que fechar algumas coisas para recuperá-los. Nunca soube de algo desse tipo ocorrendo com o Windows XP/2000, mas acontece na minha máquina por causa do IDA.

Eu tenho 1GB de RAM nesta máquina.

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?!

Offline fabianr

  • Novato
  • *
  • Mensagens: 9
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware: log de descobertas
« Responder #211 Online: Agosto 29, 2007, 01:12:23 am »
O tamanho da flash do DVP3040

Eu pesquisei o assunto, mas a melhor informação que obtive (praticamente a única), foi este post de Lisa_tv.


Hola  Jefferson... mirando el fw del 3040k encontre el codigo tambien en los otros bancos:

B1:2294
B2:2294
B3:2294
B4:2294
                   
No lo mire en el 5140 pero debe ser igual.... Cuando modficaste el byte F0 en el 5140 de 1.5MB lo hiciste
en todos los bancos?

Saludos,
FabianR
« Última modificação: Agosto 29, 2007, 06:09:11 am por Jefferson »

FORUM.RYAN.COM.BR

Re: Firmware: log de descobertas
« Responder #211 Online: Agosto 29, 2007, 01:12:23 am »

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #212 Online: Agosto 29, 2007, 06:16:17 am »
Hola  Jefferson... mirando el fw del 3040k encontre el codigo tambien en los otros bancos:

B1:2294
B2:2294
B3:2294
B4:2294
                   
No lo mire en el 5140 pero debe ser igual.... Cuando modficaste el byte F0 en el 5140 de 1.5MB lo hiciste
en todos los bancos?

Saludos,
FabianR

Não tinha. Nem sequer vi isso.

Eu fiz o teste agora e nada mudou.
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?!

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #213 Online: Agosto 30, 2007, 01:28:04 pm »
Firmwares Philips: Controle das Setas

Um mês atrás eu identifiquei as rotinas que exibem as setas do browser e expliquei aqui como movê-las. Mas ficaram faltando  respostas para alguns problemas, que espero ter solucionado agora.

Neste post eu vou introduzir três novas rotinas, temporariamente batizadas por mim por não conhecer nenhum trabalho anterior a respeito no grupo MT13x9:

  • ShowIcon - Espera coordenadas X e Y, janela e ícone a ser exibido;
  • ClearRect2 - Muito parecida com ClearRect, mas recebe os parâmetros de forma diferente. Enquanto ClearRect espera pelas coordenadas do ponto superior esquerdo do retângulo mais sua largura e altura, ClearRect2 recebe as coordenadas do ponto superior esquerdo e do ponto inferior direito. São duas formas de se fazer a mesma coisa. Deve haver alguma diferença para o firmware optar por usar uma ou outra, mas não captei ainda (exceto a troca dos registradores por endereços XRAM).
  • Arrows_Control - A rotina que explico adiante.

Arrows_Control

Esta rotina é responsável pela exibição das setas e é dividida em quatro sub-rotinas:

  • Arrows_ShowBoth - Exibe as duas setas;
  • Arrows_ShowUp - Exibe apenas a seta superior
  • Arrows_ShowDown - Exibe apenas a seta inferior
  • Arrows_Clear - Apaga as duas setas;

Arrows_Clear é a principal novidade deste post em relação ao meu post anterior sobre o assunto. Este procedimento desenha um retângulo acima e um retângulo abaixo da lista de arquivos, com o propósito de apagar as setas. O rpoblema é que quando mudamos as coordenadas das setas precisamos mudar as coordenadas desses retângulos também, senão as setas nunca vão ser apagadas quando você chegar no topo ou no fundo da lista de arquivos. 

A montagem abaixo mostra meu software MTK Patcher exibindo os dois retângulos criados por Arrows_Clear:



Para encontrar Arrows_Control na maioria dos firmwares Philips (exceto PET725), procure por
02 ? ? 14 70 03 02 ? ? 14 60 03 02.
O método que ensinei no post anterior, que requeria saber os números dos ícones com as setas, não é mais necessário.
 
Eu comentei o código abaixo (DVP5960/37) de forma a ser auto-explicativo:

B1:9E44             ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B1:9E44
B1:9E44
B1:9E44             Arrows_Control:               ; CODE XREF: B1_89A3+5Dp
B1:9E44                                           ; B1_89A3+117p
B1:9E44 EF          mov     A, R7                 ; Esta rotina recebe um valor de 1 a 4 em R7, que determina o que será feito
B1:9E45 54 03       anl     A, #3
B1:9E47 FF          mov     R7, A
B1:9E48 60 44       jz      Arrows_Clear          ; Se R7 tinha #4
B1:9E4A 14          dec     A
B1:9E4B 70 03       jnz     B1_9E50
B1:9E4D 02 9E E1    ljmp    Arrows_ShowUP         ; Se R7 tinha #1
B1:9E50             ; ---------------------------------------------------------------------------
B1:9E50
B1:9E50             B1_9E50:                      ; CODE XREF: Arrows_Control+7j
B1:9E50 14          dec     A
B1:9E51 70 03       jnz     B1_9E56
B1:9E53 02 9E FA    ljmp    Arrows_ShowDown       ; Se R7 tinha #2
B1:9E56             ; ---------------------------------------------------------------------------
B1:9E56
B1:9E56             B1_9E56:                      ; CODE XREF: Arrows_Control+Dj
B1:9E56 14          dec     A
B1:9E57 60 03       jz      Arrows_ShowBoth       ; Se R7 tinha #3
B1:9E59 02 9F 13    ljmp    FunctionRET
B1:9E5C             ; ---------------------------------------------------------------------------
B1:9E5C
B1:9E5C             Arrows_ShowBoth:              ; CODE XREF: Arrows_Control+13j
B1:9E5C 90 FC 76    mov     DPTR, #XRAM_FC76      ; CoordX1.hiByte
B1:9E5F E4          clr     A
B1:9E60 F0          movx    @DPTR, A
B1:9E61 A3          inc     DPTR
B1:9E62 74 B4       mov     A, #0xB4 ; '¦'
B1:9E64 F0          movx    @DPTR, A
B1:9E65 90 FC 79    mov     DPTR, #XRAM_FC79      ; CoordY1.HiByte
B1:9E68 E4          clr     A
B1:9E69 F0          movx    @DPTR, A
B1:9E6A A3          inc     DPTR
B1:9E6B 74 E8       mov     A, #0xE8 ; 'Þ'
B1:9E6D F0          movx    @DPTR, A
B1:9E6E 7D 25       mov     R5, #0x25 ; '%'       ; Seta inferior (ver no mtkremaker)
B1:9E70 7F 0F       mov     R7, #0xF
B1:9E72 12 1E BA    lcall   ShowIconB1BS
B1:9E75 90 FC 76    mov     DPTR, #XRAM_FC76      ; CoordX1.hiByte
B1:9E78 E4          clr     A
B1:9E79 F0          movx    @DPTR, A
B1:9E7A A3          inc     DPTR
B1:9E7B 74 B4       mov     A, #0xB4 ; '¦'
B1:9E7D F0          movx    @DPTR, A
B1:9E7E 90 FC 79    mov     DPTR, #XRAM_FC79      ; CoordY1.HiByte
B1:9E81 E4          clr     A
B1:9E82 F0          movx    @DPTR, A
B1:9E83 A3          inc     DPTR
B1:9E84 74 36       mov     A, #0x36 ; '6'
B1:9E86 F0          movx    @DPTR, A
B1:9E87 7D 26       mov     R5, #0x26 ; '&'       ; Seta superior (ver no mtkremaker)
B1:9E89 7F 0F       mov     R7, #0xF              ; janela
B1:9E8B 02 1E BA    ljmp    ShowIconB1BS
B1:9E8E             ; ---------------------------------------------------------------------------
B1:9E8E
B1:9E8E             Arrows_Clear:                 ; CODE XREF: Arrows_Control+4j
B1:9E8E 90 FC 76    mov     DPTR, #XRAM_FC76      ; CoordX1.hiByte
B1:9E91 E4          clr     A
B1:9E92 F0          movx    @DPTR, A
B1:9E93 A3          inc     DPTR
B1:9E94 74 1E       mov     A, #0x1E
B1:9E96 F0          movx    @DPTR, A
B1:9E97 90 FC 79    mov     DPTR, #XRAM_FC79      ; CoordY1.HiByte
B1:9E9A E4          clr     A
B1:9E9B F0          movx    @DPTR, A
B1:9E9C A3          inc     DPTR
B1:9E9D 74 3E       mov     A, #0x3E ; '>'
B1:9E9F F0          movx    @DPTR, A              ; Canto Superior Esquerdo= 30,62
B1:9EA0 90 FC 7C    mov     DPTR, #XRAM_FC7C      ; CoordX2.HiByte
B1:9EA3 74 01       mov     A, #1
B1:9EA5 F0          movx    @DPTR, A
B1:9EA6 A3          inc     DPTR
B1:9EA7 74 4A       mov     A, #0x4A ; 'J'
B1:9EA9 F0          movx    @DPTR, A
B1:9EAA 90 FC 80    mov     DPTR, #XRAM_FC80      ; CoordY2.HiByte
B1:9EAD E4          clr     A
B1:9EAE F0          movx    @DPTR, A
B1:9EAF A3          inc     DPTR
B1:9EB0 74 5C       mov     A, #0x5C ; '\'
B1:9EB2 F0          movx    @DPTR, A              ; Canto Inferior Direito: 330x92
B1:9EB3 D2 75       setb    RAM_2E.5
B1:9EB5 E4          clr     A
B1:9EB6 90 FB FD    mov     DPTR, #XRAM_FBFD
B1:9EB9 F0          movx    @DPTR, A
B1:9EBA FB          mov     R3, A
B1:9EBB FD          mov     R5, A
B1:9EBC 7F 0F       mov     R7, #0xF
B1:9EBE 12 1D 52    lcall   ClearRect2_B1BS       ; Apaga a seta superior, desenhando um retângulo em sua posição
B1:9EC1 90 FC 79    mov     DPTR, #XRAM_FC79      ; CoordY1.HiByte
B1:9EC4 E4          clr     A
B1:9EC5 F0          movx    @DPTR, A
B1:9EC6 A3          inc     DPTR
B1:9EC7 74 DE       mov     A, #0xDE ; 'Ì'
B1:9EC9 F0          movx    @DPTR, A              ; Canto Superior Esquerdo agora é = 30,222
B1:9ECA 90 FC 80    mov     DPTR, #XRAM_FC80      ; CoordY2.HiByte
B1:9ECD E4          clr     A
B1:9ECE F0          movx    @DPTR, A
B1:9ECF A3          inc     DPTR
B1:9ED0 74 FC       mov     A, #0xFC ; '³'
B1:9ED2 F0          movx    @DPTR, A              ; Canto Inferior Direito agora é: 330x252
B1:9ED3 D2 75       setb    RAM_2E.5
B1:9ED5 E4          clr     A
B1:9ED6 90 FB FD    mov     DPTR, #XRAM_FBFD
B1:9ED9 F0          movx    @DPTR, A
B1:9EDA FB          mov     R3, A
B1:9EDB FD          mov     R5, A
B1:9EDC 7F 0F       mov     R7, #0xF
B1:9EDE 02 1D 52    ljmp    ClearRect2_B1BS       ; Apaga a seta inferior
B1:9EE1             ; ---------------------------------------------------------------------------
B1:9EE1
B1:9EE1             Arrows_ShowUP:                ; CODE XREF: Arrows_Control+9j
B1:9EE1 90 FC 76    mov     DPTR, #XRAM_FC76      ; CoordX1.hiByte
B1:9EE4 E4          clr     A
B1:9EE5 F0          movx    @DPTR, A
B1:9EE6 A3          inc     DPTR                  ; XRAM_FC77
B1:9EE7 74 B4       mov     A, #0xB4 ; '¦'
B1:9EE9 F0          movx    @DPTR, A
B1:9EEA 90 FC 79    mov     DPTR, #XRAM_FC79      ; CoordY1.HiByte
B1:9EED E4          clr     A
B1:9EEE F0          movx    @DPTR, A
B1:9EEF A3          inc     DPTR
B1:9EF0 74 36       mov     A, #0x36 ; '6'
B1:9EF2 F0          movx    @DPTR, A
B1:9EF3 7D 26       mov     R5, #0x26 ; '&'       ; Seta inferior
B1:9EF5 7F 0F       mov     R7, #0xF
B1:9EF7 02 1E BA    ljmp    ShowIconB1BS
B1:9EFA             ; ---------------------------------------------------------------------------
B1:9EFA
B1:9EFA             Arrows_ShowDown:              ; CODE XREF: Arrows_Control+Fj
B1:9EFA 90 FC 76    mov     DPTR, #XRAM_FC76      ; CoordX1.hiByte
B1:9EFD E4          clr     A
B1:9EFE F0          movx    @DPTR, A
B1:9EFF A3          inc     DPTR
B1:9F00 74 B4       mov     A, #0xB4 ; '¦'
B1:9F02 F0          movx    @DPTR, A
B1:9F03 90 FC 79    mov     DPTR, #XRAM_FC79      ; CoordY1.HiByte
B1:9F06 E4          clr     A
B1:9F07 F0          movx    @DPTR, A
B1:9F08 A3          inc     DPTR
B1:9F09 74 E8       mov     A, #0xE8 ; 'Þ'
B1:9F0B F0          movx    @DPTR, A
B1:9F0C 7D 25       mov     R5, #0x25 ; '%'       ; Seta superior
B1:9F0E 7F 0F       mov     R7, #0xF
B1:9F10 12 1E BA    lcall   ShowIconB1BS
B1:9F13
B1:9F13             FunctionRET:                  ; CODE XREF: Arrows_Control+15j
B1:9F13 22          ret
B1:9F13             ; End of function Arrows_Control



Eu descobri o funcionamento da rotina enquanto implementava a movimentação das setas no MTK Patcher. Eu já fiz isso, mas resta um problema: Por causa da forma como as rotinas são chamadas não é possível colocar as setas em qualquer lugar da tela por enquanto (talvez em um versão futura). 

Problema 1:  X1, da forma como está escrita a rotina, não pode ser maior que 255, embora X2 possa. Então se eu quiser colocar os ícones no canto direito da tela, tenho que desenhar um retângulo começando na coordenada 255 até eles. Se X1 pudesse ser maior que 255 eu poderia desenha um retângulo da largura exata do ícone.

Problema 2: Nem Y1 nem Y2 podem ser maiores que 255. Assim os ícones precisam ficar mais ou menos nos três quartos superiores da tela.

Os dois problemas podem ser resolvidos através de patches. O Problema 1 é bem simples, mas o Problema 2 requer acréscimo de código.

Como se livrar das setas

Isso é o mais simples. No início de Arrows_Control, substitua a instrução mov por uma ret, assim:

B1:9E44             ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B1:9E44
B1:9E44
B1:9E44             Arrows_Control:               ; CODE XREF: B1_89A3+5Dp
B1:9E44                                           ; B1_89A3+117p
B1:9E44 22          ret
B1:9E45 54 03       anl     A, #3
B1:9E47 FF          mov     R7, A
B1:9E48 60 44       jz      Arrows_Clear          ; Se R7 tinha #4
B1:9E4A 14          dec     A
B1:9E4B 70 03       jnz     B1_9E50
B1:9E4D 02 9E E1    ljmp    Arrows_ShowUP         ; Se R7 tinha #1


E nada do código será executado. Mas aí é recomendável que você ative a exibição da scrollbar no firmware, como eu já expliquei.

Isso tudo já foi implementado na próxima versão 0.12 do MTK Patcher.
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?!

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #214 Online: Agosto 30, 2007, 03:06:15 pm »
Felizmente eu consegui me livrar de dos problemas que estava tendo com o filebrowser...

http://ryan.com.br/smf/index.php?topic=179.msg9172233#msg9172233

Citação de: jmaraujo
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.
O primeiro problema era essa rotina de limpeza maldita que custou achar... Eu buscava rotinas que chamassem PS_ClearRect!!!

Não sei se é a mesma que voçê achou porque não comparei. Eu so achei ela porque contei com a ajuda visual invaluable do MTK Patcher!  ;D Sem ele não tería achado nunca...  :P

No momento que inseri as coordenadas já sabía que o problema estava aí. O que eu fiz foi zerar as coordenadas:

ROM:988F             ROM_988F:                               ; CODE XREF: ROM_9845+4j
ROM:988F 90 FB EC              mov   DPTR, #0xFBEC           ; x1 High
ROM:9892 E4                    clr   A
ROM:9893 F0                    movx  @DPTR, A
ROM:9894 A3                    inc   DPTR
ROM:9895 74 00                 mov   A, #0                   ; x1 = 0x001E
ROM:9897 F0                    movx  @DPTR, A
ROM:9898 90 FB EF              mov   DPTR, #0xFBEF           ; y1 High
ROM:989B E4                    clr   A
ROM:989C F0                    movx  @DPTR, A
ROM:989D A3                    inc   DPTR
ROM:989E 74 00                 mov   A, #0                   ; y1 = 0x003E
ROM:98A0 F0                    movx  @DPTR, A
ROM:98A1 90 FB F3              mov   DPTR, #0xFBF3           ; x2 High
ROM:98A4 74 00                 mov   A, #0
ROM:98A6 F0                    movx  @DPTR, A
ROM:98A7 A3                    inc   DPTR
ROM:98A8 74 00                 mov   A, #0                   ; x2 = 0x014A
ROM:98AA F0                    movx  @DPTR, A
ROM:98AB 90 FB F7              mov   DPTR, #0xFBF7           ; y2 High
ROM:98AE E4                    clr   A
ROM:98AF F0                    movx  @DPTR, A
ROM:98B0 A3                    inc   DPTR
ROM:98B1 74 00                 mov   A, #0                   ; y2 = 0x005C
ROM:98B3 F0                    movx  @DPTR, A
ROM:98B4 D2 75                 setb  RAM_2E.5
ROM:98B6 E4                    clr   A
ROM:98B7 90 FB A4              mov   DPTR, #0xFBA4
ROM:98BA F0                    movx  @DPTR, A
ROM:98BB FB                    mov   R3, A
ROM:98BC FD                    mov   R5, A
ROM:98BD 7F 0E                 mov   R7, #0xE
ROM:98BF 12 08 41              lcall PS_Rectangle
ROM:98BF
ROM:98C2 90 FB EF              mov   DPTR, #0xFBEF           ; y1 High
ROM:98C5 E4                    clr   A
ROM:98C6 F0                    movx  @DPTR, A
ROM:98C7 A3                    inc   DPTR
ROM:98C8 74 00                 mov   A, #0                   ; y1 = 0x00DE
ROM:98CA F0                    movx  @DPTR, A
ROM:98CB 90 FB F7              mov   DPTR, #0xFBF7           ; y2 High
ROM:98CE E4                    clr   A
ROM:98CF F0                    movx  @DPTR, A
ROM:98D0 A3                    inc   DPTR
ROM:98D1 74 00                 mov   A, #0                   ; y2 = 0x00FC
ROM:98D3 F0                    movx  @DPTR, A
ROM:98D4 D2 75                 setb  RAM_2E.5
ROM:98D6 E4                    clr   A
ROM:98D7 90 FB A4              mov   DPTR, #0xFBA4
ROM:98DA F0                    movx  @DPTR, A
ROM:98DB FB                    mov   R3, A
ROM:98DC FD                    mov   R5, A
ROM:98DD 7F 0E                 mov   R7, #0xE
ROM:98DF 02 08 41              ljmp  PS_Rectangle


Porém no meu caso não tive nenhum problema em por as setas na parte direita da tela. Mais tarde vou postar uma fotografía.

Citação de: jmaraujo
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).

O segundo problema era um erro nas coordenadas do primeiro arquivo do filelist. Como as coordenadas também controlam o "selection bar", a barra era mais grande do que devería.

So está faltando um pequeno detalhe: O browser se comporta normalmente, exceto quando estou navegando de baixo para cima (de uma página inferior para uma superior), quando o filelist atua como se fosse de quatro arquivos.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #215 Online: Agosto 30, 2007, 03:54:54 pm »

Não sei se é a mesma que voçê achou porque não comparei.

É a mesma coisa, mas no caso do DVP5100 existe uma estranha diferença.

No DVP5960, a rotina que batizei de "ClearRect2" (e você chama de "PS_Rectangle") parece ser completamente independente. Já no DVP5100, pelo menos na análise que fiz aqui, é a mesma rotina OSD_textColor!

O DVP5960 usa inclusive endereços XRAM distintos para as duas rotinas.

Isso me fez entender a razão de existirem duas rotinas. A rotina que chamei (erradamente) de "ClearRect2", na verdade não serve apenas para limpar um retângulo. Colocado as cores corretas nos respectivos endereços XRAM deve ser possível desenhar um retângulo de uma determinada cor. Eu vou renomear minha rotina para algo mais apropriado.

A propósito, você sabe o que raios significa esse prefixo "PS_" em "PS_Rectangle"? Eu vejo isso com frequencia sendo usado pelo MT13x9 mas não entendi ainda.

Eu so achei ela porque contei com a ajuda visual invaluable do MTK Patcher!  ;D Sem ele não tería achado nunca...  :P

Obrigado. É bom saber que ajuda mais alguém :)

Para quem faz um patch casual aquilo parece inútil. Mas para quem analisa o assembly, facilita muuuito mesmo. Foi dessa necessidade que nasceu o MTK Patcher :)


Porém no meu caso não tive nenhum problema em por as setas na parte direita da tela. Mais tarde vou postar uma fotografía.

Isso é muito estranho. Você anulou o retângulo e por isso as setas não teriam como ser apagadas. Outro dia eu vou analisar o firmware do DVP5100.

O segundo problema era um erro nas coordenadas do primeiro arquivo do filelist. Como as coordenadas também controlam o "selection bar", a barra era mais grande do que devería.

Verifique se a nova versão do MTK Patcher ajuda a fazer isso sem erros no DVP5100. Mas eu não implementei nenhuma redução na distância entre as linhas, nem na altura delas.

So está faltando um pequeno detalhe: O browser se comporta normalmente, exceto quando estou navegando de baixo para cima (de uma página inferior para uma superior), quando o filelist atua como se fosse de quatro arquivos.

Ahhhh... você está falando da sua nova versão com 6 arquivos..
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?!

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #216 Online: Agosto 30, 2007, 04:13:16 pm »
Consultando o documento "PScalls.doc" de Lisatv, constatei que a rotina que eu havia nomeado "ClearRect2" é mesmo a "PS_Rectangle", como jmaraujo havia nomeado. Mais tarde eu farei as devidas correções no post.

Eu cheguei a "PSCalls.doc" fazendo uma busca de texto por "PS_Rectangle" em todo o meu diretório de documentos. Essa é uma rotina da qual se fala pouquissimo (só achei quatro posts no MT13x9).

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?!

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #217 Online: Agosto 30, 2007, 04:41:21 pm »
Isso é muito estranho. Você anulou o retângulo e por isso as setas não teriam como ser apagadas. Outro dia eu vou analisar o firmware do DVP5100.
É, a rotina parece ser básicamente a mesma. No meu caso as setas sao limpas pela propia rotina de limpeza dos arquivos. Cada vez que voçê troca de página a rotina limpa a lista de arquivos, ¿certo?, e no meu caso a área é suficientemente larga para incluir as setas. Se for preciso, novas setas são desenhadas. Ao trocar de página o procedimento se repete. (So achei um "bug"... ao voltar do menú apareceu uma seta que não devia)

Estou postando as fotos que prometí. Não são de boa qualidade porque não sei tirar fotos da tv (acho que apagar todas as luzes não ajuda muito).

No DVP5960, a rotina que batizei de "ClearRect2" (e você chama de "PS_Rectangle") parece ser completamente independente. Já no DVP5100, pelo menos na análise que fiz aqui, é a mesma rotina OSD_textColor!
É possivel. Nos meus analises não achei nenhuma rotina chamada OSD_TextColor, achei OSD_SetColor (B3:D473), não é a mesma coisa, ¿certo? (Tenho PS_Rectangle em B3:C794 e PS_Rectangle2 em B3:E420)

Algums dos nomes eu tirei do documento PS_Calls.doc que estou anexando...

A propósito, você sabe o que raios significa esse prefixo "PS_" em "PS_Rectangle"? Eu vejo isso com frequencia sendo usado pelo MT13x9 mas não entendi ainda.
Eu sabía o significado exato de PS, mas agora não estou lembrando...

Update: Lembrei! PS = Packet Switching... Enquanto postava a mensagem vi que você achou o documento que anexei...
« Última modificação: Agosto 30, 2007, 04:42:55 pm por jmaraujo »

Offline jmaraujo

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 409
  • Aprovação: +41/-0
  • Saudações desde Rivera, Uruguay!!! ;)
    • Ver Perfil
    • Fórum DVP5100K
Re: Firmware: log de descobertas
« Responder #218 Online: Agosto 30, 2007, 04:47:46 pm »
Achei um firmware original e modificado (para comparação) com a posição dos MP3 tags separados (movidos separadamente).

Ainda não verifiquei mas se funcionar, amanhã eu posto aquí como foi feito em esse firmware... Todo o procedimento é feito na rotina MP3_TagsDisplay que Jefferson identificou (ver páginas anteriores).

No final da rotina a um jump para novo código no final do banco, mas acho que a parte nova é somente para adicionar as etiquetas "Album", "Song", "Artist" etc. antes dos tags mp3.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware: log de descobertas
« Responder #219 Online: Agosto 30, 2007, 05:05:29 pm »
É, a rotina parece ser básicamente a mesma. No meu caso as setas sao limpas pela propia rotina de limpeza dos arquivos. Cada vez que voçê troca de página a rotina limpa a lista de arquivos, ¿certo?,  e no meu caso a área é suficientemente larga para incluir as setas.

Na verdade, pelo menos na maioria dos firmwares, Dir_DispFileList chama ClearRect desenhando um retângulo em cima de cada nome de arquivo, em um loop. É possível que no caso do DVP5100 o loop comece uma linha antes e termine uma linha depois. Isso resolveria o problema.

Isso está explicado no documento "Info - File Browser.rtf", do MaBreaker:

ROM:B663 7B 1E                 mov   R3, #0x1E
ROM:B665 7A 00                 mov   R2, #0x00       ; R2R3 = Height = 0x001E = 30
ROM:B667 7D 1C                 mov   R5, #0x1C
ROM:B669 7C 01                 mov   R4, #0x01       ; R4R5 = Width  = 0x011C = 284
ROM:B669                                             ; 310 - 26
ROM:B66B 7F 0E                 mov   R7, #0x0E       ; Cleared area is
ROM:B66B                                             ; from 1A to (1A+11C=136)
ROM:B66D 12 05 71              lcall OSD_Clear_DirLine
ROM:B670 90 FB 52              mov   DPTR, #XRAM_FB52
ROM:B673 E0                    movx  A, @DPTR
ROM:B674 04                    inc   A
ROM:B675 F0                    movx  @DPTR, A
ROM:B676 E0                    movx  A, @DPTR
ROM:B677 C3                    clr   C
ROM:B678 94 06                 subb  A, #6
ROM:B67A 40 AB                 jc    Loop_clear_6_lines
ROM:B67C 22                    ret


Nota: Mabreaker chama a rotina de OSD_ClearLine ou OSD_ClearDirLine (ele faz uma confusão com os dois nomes no mesmo texto). Para completar, no documento "Info - File Browser (HowTo).rtf" ele chama a mesma rotina de OSD_Clear_Filename. Imagine a confusão que isso cria na cabeça de quem está aprendendo. Não é que MaBreaker não saiba o que está fazendo (ele sabe), mas seus documentos são muito antigos e desatualizados e se perde muito tempo com as inconsistências.

No DVP5960 é ClearRect que faz o serviço:

B1:E138 93          movc    A, @A+DPTR
B1:E139 90 FC 79    mov     DPTR, #XRAM_FC79      ; CoordY1.HiByte
B1:E13C CF          xch     A, R7                 ; A coordenada não é fixa, porque esta rotina é chamada
B1:E13C                                           ; uma vez para cada linha do browser
B1:E13D F0          movx    @DPTR, A
B1:E13E A3          inc     DPTR
B1:E13F EF          mov     A, R7
B1:E140 F0          movx    @DPTR, A
B1:E141 7B 1E       mov     R3, #0x1E             ; É aqui que o retângulo de cada linha da lista de arquivos é apagado
B1:E143 7A 00       mov     R2, #0
B1:E145 7D 2C       mov     R5, #0x2C ; ','       ; R5 e R4 precisam ser mudados se aumentarmos o número de caracteres
B1:E147 7C 01       mov     R4, #1
B1:E149 7F 0F       mov     R7, #0xF              ; Janela 0xF
B1:E14B 12 1E 54    lcall   ClearRectB1BS
B1:E14E 90 FB AF    mov     DPTR, #XRAM_FBAF
B1:E151 E0          movx    A, @DPTR
B1:E152 04          inc     A
B1:E153 F0          movx    @DPTR, A
B1:E154 E0          movx    A, @DPTR
B1:E155 C3          clr     C
B1:E156 94 04       subb    A, #4                 ; São 4 linhas no DVP5960
B1:E158 40 AB       jc      B1_E105
B1:E15A 22          ret


No DVP5100 parece ser a mesma coisa, com quatro passagens pelo loop (seria preciso haver duas a mais). Daí não sei ainda como suas setas são apagadas.

B1:D9CA 7B 1E       mov     R3, #0x1E
B1:D9CC 7A 00       mov     R2, #0
B1:D9CE 7D 2C       mov     R5, #0x2C ; ','
B1:D9D0 7C 01       mov     R4, #1
B1:D9D2 7F 0E       mov     R7, #0xE
B1:D9D4 12 08 11    lcall   ClearRectB1BS
B1:D9D7 90 FB 6C    mov     DPTR, #XRAM_FB6C
B1:D9DA E0          movx    A, @DPTR
B1:D9DB 04          inc     A
B1:D9DC F0          movx    @DPTR, A
B1:D9DD E0          movx    A, @DPTR
B1:D9DE C3          clr     C
B1:D9DF 94 04       subb    A, #4                 ; Número de arquivos
B1:D9E1 40 AB       jc      B1_D98E
B1:D9E3 22          ret



Update: Lembrei! PS = Packet Switching...

Obrigado!

Mas não faz o menor sentido para mim. Acho que vou usar os nomes sem esse prefixo, quando não criar nenhuma ambiguidade.
« Última modificação: Agosto 30, 2007, 06:17:54 pm por Jefferson »
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: log de descobertas
« Responder #219 Online: Agosto 30, 2007, 05:05:29 pm »