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