Cor de legenda selecionável para DVP5100Eu não vou explicar aqui como é feita a parte do menu, porque eu não estou fazendo mods para DVP5100 e jmaraujo já sabe como fazer. Neste post eu explicarei apenas a mudança necessária no código assembly.
Note que tudo o que eu expliquei no post anterior vai ser descartado e refeito. A explicação anterior ajuda a entender o que é feito aqui, mas não é necessário fazer nada daquilo antes.
Os firmwares Philips tem um modo diferente de chamar a rotina OSD_TextColor. Enquanto a maioria dos firmwares coloca o número da janela explícitamente em R7, nos firmwares Philips isso é sempre indireto. No caso do Philips DVP5100 o número da janela fica guardado na variável XRAM_FB8D e o valor dessa variável é copiado para R7 sempre que queremos usar o número da janela.
No caso:B3:545E 90 FB 8D mov DPTR, #XRAM_FB8D
B3:5461 E0 movx A, @DPTR
B3:5462 FF mov R7, A
Na Sub_Style_2 equivale a:B3:545E 7F 11 Mov R7, #0x11
No meu entendimento não é necessário fazer esse rodeio todo e podemos ganhar vários bytes fazendo uma referência explicita ao número da janela, como esse rodeio é feito 4 vezes na rotina Sub_Style_2, podemos ganhar um monte de bytes:
B3:545E Sub_Style_2: ; DATA XREF: OSD_Text_Init+63o
B3:545E 90 FB 8D mov DPTR, #XRAM_FB8D ; Guarda número da janela (OSD_TextInit)?
B3:5461 E0 movx A, @DPTR
B3:5462 FF mov R7, A
B3:5463 D2 75 setb RAM_2E.5
B3:5465 12 28 F1 lcall OSD_Text_Params_ARM
B3:5468 90 FB 8D mov DPTR, #XRAM_FB8D ; Guarda número da janela (OSD_TextInit)?
B3:546B E0 movx A, @DPTR
B3:546C FF mov R7, A
B3:546D 12 68 22 lcall OSD_Text_Params
B3:5470 90 FB 8D mov DPTR, #XRAM_FB8D ; Guarda número da janela (OSD_TextInit)?
B3:5473 E0 movx A, @DPTR
B3:5474 FF mov R7, A
B3:5475 E4 clr A
B3:5476 90 FB A4 mov DPTR, #XRAM_FBA4 ; OSD_Colors
B3:5479 F0 movx @DPTR, A
B3:547A A3 inc DPTR
B3:547B 74 02 mov A, #2
B3:547D F0 movx @DPTR, A ; Cor de contorno=0; cor de preenchimento = 2
B3:547E 7B 03 mov R3, #3 ; Cor de background
B3:5480 E4 clr A
B3:5481 FD mov R5, A
B3:5482 12 D4 73 lcall OSD_Text_Color
B3:5485 90 FB 8D mov DPTR, #XRAM_FB8D ; Guarda número da janela (OSD_TextInit)?
B3:5488 E0 movx A, @DPTR
B3:5489 FF mov R7, A
B3:548A E4 clr A
B3:548B FD mov R5, A
B3:548C 02 EF D7 ljmp OSD_Text_Init_End
B3:548F ; ---------------------------------------------------------------------------
O ganho é suficiente para implementar a rotina que lê o valor da eeprom, sem precisar inserir código no firmware. E ainda sobra espaço!
Nota: Esse desperdício ocorre
50 vezes dentro do CASE de OSD_Text_Init. Dá para ganhar um total de 150 bytes nessa rotina, se um dia for necessário.
B3:545E Sub_Style_2: ; DATA XREF: OSD_Text_Init+63o
B3:545E 7F 11 mov R7, #0x11
B3:5460 D2 75 setb RAM_2E.5
B3:5462 12 28 F1 lcall OSD_Text_Params_ARM
B3:5462
B3:5465 7F 11 mov R7, #0x11
B3:5467 12 68 22 lcall OSD_Text_Params
B3:5467
B3:546A 00 nop
B3:546B 00 nop
B3:546C 00 nop
B3:546D 00 nop
B3:546E 00 nop
B3:546F 7F 06 mov R7, #6 ; Cor de Preenchimento=6 (azul)
B3:5471 90 FB A4 mov DPTR, #XRAM_FBA4 ; OSD_Colors
B3:5474 74 03 mov A, #3 ; Cor de Contorno=3 (preto)
B3:5476 F0 movx @DPTR, A
B3:5477 A3 inc DPTR
B3:5478 EF mov A, R7
B3:5479 F0 movx @DPTR, A
B3:547A E4 clr A
B3:547B FB mov R3, A
B3:547C FD mov R5, A
B3:547D 7F 11 mov R7, #0x11
B3:547F 12 D4 73 lcall OSD_Text_Color
B3:547F
B3:5482 7F 11 mov R7, #0x11
B3:5484 E4 clr A
B3:5485 FD mov R5, A
B3:5486 00 nop
B3:5487 00 nop
B3:5488 00 nop
B3:5489 00 nop
B3:548A 00 nop
B3:548B 00 nop
B3:548C 02 EF D7 ljmp OSD_Text_Init_End
B3:548C
B3:548F ; ---------------------------------------------------------------------------
Perceba o trecho destacado em vermelho. Nele eu estou definindo explicitamente a cor azul para as legendas, para facilitar os testes apenas (fica na cara que está funcionando). Quando você estiver certo de que está funcionando e já tiver o endereço de memória eeprom para usar, você vai substituir o trecho em vermelho por:
7F xx mov R7, #xx ;onde "xx" é o endereço de eeprom
7E 00 mov R6, #0
12 05 D7 lcall Pref_GetChar
Para inserir rapidamente minha modificação, em B3:545E, substitua:
90 FB 8D E0 FF D2 75 12 28 F1 90 FB 8D E0 FF 12 68 22 90 FB 8D E0 FF E4
90 FB A4 F0 A3 74 02 F0 7B 03 E4 FD 12 D4 73 90 FB 8D E0 FF E4 FD 02 EF D7
por:
7F 11 D2 75 12 28 F1 7F 11 12 68 22 00 00 00 00 00 7F 06 90 FB A4 74 03
F0 A3 EF F0 E4 FB FD 7F 11 12 D4 73 7F 11 E4 FD 00 00 00 00 00 00 02 EF D7
Tenha em mente que neste mod eu desligo o fundo e ativo a exibição do contorno, por isso desligue a transparência da janela 0x11 com o mtkWindows e substitua as fontes 0xD e 0xF por fontes "normais" com contorno.