Firmware MT13x9

Firmwares Mediatek : Escolhendo Cores

Texto publicado em 05/07/2007 e ainda em rascunho

A explicação que vou dar a seguir é um dos fundamentos necessários para se implementar cores de fontes selecionáveis pelo setup. Mas também é importante quando você quer simplesmente corrigir alguns problemas de cores “amarradas” (muda a cor da legenda e bagunça a cor do texto no browser).

Eu uso como exemplo o firmware do Proview DVP-858, mas por comparação você poderá encontrar as rotinas necessárias na maioria dos outros firmwares. A provável exceção são LG e Pionneer, que são muito diferentes do “normal”.

O conceito de janelas

Um firmware MT13x9 tem a tela loteada em “janelas”. Todo desenho, seja de gráficos ou texto, é sempre feito tendo como alvo uma janela e não a tela. Isso provavelmente é feito para simplificar o posicionamento de objetos, porque você desenha tudo dentro da janela, com coordenadas relativas a ela e não às coordenadas físicas da tela. Aí você consegue reposicionar blocos inteiros de objetos simplesmente mudando as coordenadas da janela, sem precisar mexer nas coordenadas dos objetos.

Você pode ver todas as janelas definidas em um firmware com o software mtkWindows.

Falarei mais sobre janelas um outro dia.

Excetuando os vídeos, a cor de tudo o que é exibido em um firmware Mediatek MT13x9 (ou seja, tudo o que é desenhado pelo processador) depende de palettes (paletas). Cada janela é associada a uma e apenas uma palette (mas várias janelas podem usar a mesma palette). Você pode ver e alterar as palettes abrindo o firmware com o mtkWindows.

No mtkWindows as cores são numeradas de 0 a 15, mas tenha em mente que no firmware a numeração é hexadecimal, de 0x0 a 0xF.

Para evitar ambigüidades, eu vou chamar daqui em diante cada uma das 16 cores da palette de “célula”.

“Used by” mostra que janelas usam esta mesma palette.

Idealmente, cada janela deveria ter sua própria palette, mas nos firmwares Mediatek é comum que várias janelas compartilhem a mesma. Isso só é problema quando você quer trocar a cor de uma das 16 células da palette, porque a mudança tem resultados difíceis de prever. Na maioria das vezes a janela não usa todas as células da palette. Talvez, por exemplo, a janela 0x11 use apenas as células 2 e 3, enquanto a janela 0x0E usa apenas as céluals 4 e 5, mas não conte com isso. Às vezes duas ou mais janelas usam as mesmas células, sem necessidade. Se você pensar bem, verá que no caso de cada janela usar células diferentes da palette, isso justifica várias células com a mesma cor.

Para desenhar qualquer coisa, o firmware nunca diz explicitamente com que cor vai ser feito o desenho. Ele diz quais células vai usar.

Mudando as cores de uma operação

A forma mais básica de se fazer isso é clicando duas vezes sobre a célula cuja cor você quer mudar e selecionando uma nova cor. Mas como essa mudança afeta tudo o que é desenhado na janela e pode ter efeitos indesejáveis em outras janelas ou até mesmo em outros objetos na mesma janela (como é o caso dos ícones e do texto no browser), às vezes é necessáio mudar as células que uma operação de desenho específica usa. É isso que eu vou explicar como é feito.

O Proview DVP-858 usa os endereços XRAM_FC07 e XRAM_FC08 para armazenar as células que serão usadas para exibir um determinado texto. Esses endereços não são os mesmos de firmware para firmware.

A ordem das cores, pelo menos no firmware do Proview, é:

  • XRAM_FC07: Contorno
  • XRAM_FC08: Preenchimento

Para mudar as células, você precisa mudar os valores armazenados em XRAM_FC07 e XRAM_FC08 antes da rotina de desenho (OSD_TextColor) ser chamada.

As listagens abaixo são da versão 20.07 do firmware!

É aqui que são definidas as cores do texto do browser no DVP858.

B1:A502
B1:A505
B1:A507
B1:A508
B1:A509
B1:A50A
B1:A50B
B1:A50C
B1:A50D
B1:A50E
B1:A510
90 FC 07
74 02
F0
A3
04
F0
E4
FB
FD
7F 10
12 1D E0
mov DPTR, #XRAM_FC07
mov A, #2 ; Célula #2 – Contorno
movx @DPTR, A
inc DPTR
inc A ; Célula #3 – Preenchimento
movx @DPTR, A
clr A
mov R3, A
mov R5, A
mov R7, #0x10 ;Janela 0x10
lcall OSD_TextColor
Janela de exibição da duração de MP3, contagem de arquivos, etc
B1:6370
B1:6373
B1:6375
B1:6376
B1:6377
B1:6378
B1:6379
B1:637A
B1:637B
B1:637C
B1:637E
90 FC 07
74 03
F0
A3
14
F0
E4
FB
FD
7F 0F
12 1D E0
mov DPTR, #XRAM_FC07
mov A, #3 ; Célula #3 – Contorno
movx @DPTR, A
inc DPTR
dec A ; Célula #2 – Preenchimento
movx @DPTR, A
clr A
mov R3, A
mov R5, A
mov R7, #0xF ;Janela 0x0F
lcall OSD_TextColor
E agora um trecho de sub_style, onde é definida a cor da legenda:
B1:DCB1
B1:DCB4
B1:DCB6
B1:DCB7
B1:DCB8
B1:DCB9
B1:DCBA
B1:DCBB
B1:DCBC
B1:DCBD
B1:DCBF
90 FC 07
74 03
F0
A3
14
F0
E4
FB
FD
7F 13
12 1D E0
mov DPTR, #XRAM_FC07
mov A, #3 ; Célula #3 – Contorno
movx @DPTR, A
inc DPTR
dec A ; Célula #2 – Preenchimento
movx @DPTR, A
clr A
mov R3, A
mov R5, A
mov R7, #0x13 ;Janela 0x13
lcall OSD_TextColor

Perceba que as três janelas usam as mesmas células, mas o browser usa as cores invertidas. Note que a primeira célula declarada é a 2 e não a 3, como nos casos restantes.

Para fazer com que o browser deixe de ser invertido, basta mudar a primeira célula e trocar a instrução INC A por uma DEC A

B1:A505 mov A, #3
B1:A507 movx @DPTR, A
B1:A508 inc DPTR
B1:A509 DEC A

Você também pode experimentar usar células diferentes, mas perceba que por causa da forma como o assembly é otimizado você está preso a usar células adjacentes. Por exemplo, a mudança abaixo faz o browser usar as células 14 e 13

B1:A505 mov A, #0x0E
B1:A507 movx @DPTR, A
B1:A508 inc DPTR
B1:A509 DEC A

Usar células não-adjacentes é possível, mas requer a criação de novas sub-rotinas.

Como é possível usar essa informação para ter cores selecionáveis no setup?

Como eu disse no início do texto, esta é apenas uma das coisas que você precisa saber. Em resumo: depois de criar um novo menu para permitir a escolha da cor e gravar os valores selecionados na eeprom, você vai ter que mudar a rotina Sub_Style para em vez de usar números de células fixos usar números lidos da eeprom.

A criação de menus fica para um outro tutorial, depois que eu tiver aprendido, claro…

Esta página foi visualizada desde 5/07/07.

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>