Jmaraujo,
Consegui fazer o itálico funcionar junto com as opções de alinhamento e consegui fazer com que as opções se tornem
dinâmicas!
Vamos às modificações:
Em primeiro lugar, as opções de alinhamento vertical e horizontal no firmware 1.4
estão trocadas (verifica isso lá) e bugando a legenda. Troquei os endereços no menu e tudo ficou certo.
Em segundo lugar, não sei o porquê, os valores para o alinhamento vertical, 00 e 01, não deixavam o itálico funcionar, mesmo que eu usasse o endereços do alinhamento horizontal emprestado para o itálico (não o vertical
). Tive que alterar para os padrões dos firmwares mediatek, que são 08 e 09. Veja como ficou os menus dos alinhamentos. Tudo que está em vermelho foi alterado:
4. No Pic. | Horizontal alignment | Set the horizontal alignment
0008 FFFF 056D 058D 0063 0000 0002 0001 FFF9A7 0000 - ROM:F935
1. Left | Left | [00]
0578 0578 0561 00 - ROM:F992
=> 2. Center | Center | [00]
0579 0579 0561 01 - ROM:F999
3. Right | Right | [00]
057A 057A 0561 02 - ROM:F9A0
5. No Pic. | Vertical alignment | Set the vertical alignment
0008 FFFF 056C 058E 0062 0000 0009 0001 FFF989 0000 - ROM:F920
1. Top | Top | [00]
0590 0590 0561 08 - ROM:F974
=> 2. Bottom | Bottom | [00]
058F 058F 0561 09 - ROM:F97BAí o itálico passou a funcionar.
Agora, vamos ao alinhamento dinâmico. Eu vi que você usou a seguinte rotina para interceptar os valores do alinhamento:
B1:FF54 ; aplica alinhamentos legenda
B1:FF54
B1:FF54 B1_FF54: ; CODE XREF: B1_EE21+25_p
B1:FF54 7F 57 mov R7, #0x57 ; 'W'
B1:FF56 7E 00 mov R6, #0
B1:FF58 12 05 D7 lcall B1_BS_125_B4_E0AE
B1:FF5B 74 28 mov A, #0x28 ; '('
B1:FF5D C3 clr C
B1:FF5E 9F subb A, R7
B1:FF5F 90 FB F0 mov DPTR, #XRAM_FBF0
B1:FF62 F0 movx @DPTR, A
B1:FF63 C3 clr C
B1:FF64 24 82 add A, #0x82 ; 'é'
B1:FF66 90 FB F8 mov DPTR, #XRAM_FBF8
B1:FF69 F0 movx @DPTR, A
B1:FF6A 7F 62 mov R7, #0x62 ; 'b'
B1:FF6C 7E 00 mov R6, #0
B1:FF6E 12 05 D7 lcall B1_BS_125_B4_E0AE
B1:FF71 EF mov A, R7
B1:FF72 FB mov R3, A
B1:FF73 7F 63 mov R7, #0x63 ; 'c'
B1:FF75 7E 00 mov R6, #0
B1:FF77 12 05 D7 lcall B1_BS_125_B4_E0AE
B1:FF7A EF mov A, R7
B1:FF7B 22 ret
Pelo visto, essa rotina só é chamada 1 vez, ao iniciar um CD.
Mas a rotina que você criou para tratar as opções de cor da legenda é chamada várias vezes (possivelmente por todas as Sub_Style, secundárias e primária). Daí, foi só fazer como eu fiz no meu firmware: um salto (com bank switch) da rotina que aplica as cores para a rotina que aplica os alinhamentos. Ela era assim:
B3:FAC2 ; aplica cores legenda
B3:FAC2
B3:FAC2 B3_FAC2: ; CODE XREF: BankSw_223_B3_519C+2CE_p
B3:FAC2 7F 4E mov R7, #0x4E ; 'N'
B3:FAC4 7E 00 mov R6, #0
B3:FAC6 12 05 D7 lcall B3_BS_125_B4_E0AE
B3:FAC9 EF mov A, R7
B3:FACA FB mov R3, A
B3:FACB 7F 7B mov R7, #0x7B ; '{'
B3:FACD 7E 00 mov R6, #0
B3:FACF 12 05 D7 lcall B3_BS_125_B4_E0AE
B3:FAD2 EF mov A, R7
B3:FAD3 FA mov R2, A
B3:FAD4 7F 2E mov R7, #0x2E ; '.'
B3:FAD6 7E 00 mov R6, #0
B3:FAD8 12 05 D7 lcall B3_BS_125_B4_E0AE
B3:FADB EF mov A, R7
B3:FADC F9 mov R1, A
B3:FADD 7D 00 mov R5, #0
B3:FADF 7F 11 mov R7, #0x11
B3:FAE1 90 FB A4 mov DPTR, #XRAM_FBA4
B3:FAE4 EA mov A, R2
B3:FAE5 F0 movx @DPTR, A
B3:FAE6 A3 inc DPTR
B3:FAE7 E9 mov A, R1
B3:FAE8 F0 movx @DPTR, A
B3:FAE9 22 ret
Ficou assim:
B3:FAC2 ; aplica cores legenda
B3:FAC2
B3:FAC2 B3_FAC2: ; CODE XREF: BankSw_223_B3_519C+2CE_p
B3:FAC2 90 EE 21 mov DPTR, #0xEE21 ; primeiro, chama rotina que aplica alinhamento
B3:FAC5 12 02 40 lcall B3_Bank_1
B3:FAC8 7F 4E mov R7, #0x4E ; 'N'
B3:FACA 7E 00 mov R6, #0
B3:FACC 12 05 D7 lcall B3_BS_125_B4_E0AE
B3:FACF EF mov A, R7
B3:FAD0 FB mov R3, A
B3:FAD1 7F 7B mov R7, #0x7B ; '{'
B3:FAD3 7E 00 mov R6, #0
B3:FAD5 12 05 D7 lcall B3_BS_125_B4_E0AE
B3:FAD8 EF mov A, R7
B3:FAD9 FA mov R2, A
B3:FADA 7F 2E mov R7, #0x2E ; '.'
B3:FADC 7E 00 mov R6, #0
B3:FADE 12 05 D7 lcall B3_BS_125_B4_E0AE
B3:FAE1 EF mov A, R7
B3:FAE2 F9 mov R1, A
B3:FAE3 7D 00 mov R5, #0
B3:FAE5 7F 11 mov R7, #0x11
B3:FAE7 90 FB A4 mov DPTR, #XRAM_FBA4
B3:FAEA EA mov A, R2
B3:FAEB F0 movx @DPTR, A
B3:FAEC A3 inc DPTR
B3:FAED E9 mov A, R1
B3:FAEE F0 movx @DPTR, A
B3:FAEF 22 ret
Pronto, alinhamentos dinâmicos!
.
Agora, vou explicar como você deverá fazer com as opções de itálico, já que tenho os pontos de alteração do seu firmware:
Como dito antes, você deve criar um menu com as seguintes opções (só podem ser esses valores, pois são os esperados na rotina do itálico no ARM):
"mostrar todas as tags" --> valor #40
"esconder todas as tags" --> valor #20
"habilitar o itálico" --> valor #00
Você pode usar o endeço de EEPROM que quiser (que estiver disponível). Vamos considerar que você use o endereço
XX. Após criar o menu, você deverá fazer a seguinte modificação na rotina que aplica o alinhamento:
B1:FF54 ; aplica alinhamentos legenda
B1:FF54
B1:FF54 B1_FF54: ; CODE XREF: B1_EE21+25_p
B1:FF54 7F 57 mov R7, #0x57 ; 'W'
B1:FF56 7E 00 mov R6, #0
B1:FF58 12 05 D7 lcall B1_BS_125_B4_E0AE
B1:FF5B 74 28 mov A, #0x28 ; '('
B1:FF5D C3 clr C
B1:FF5E 9F subb A, R7
B1:FF5F 90 FB F0 mov DPTR, #XRAM_FBF0
B1:FF62 F0 movx @DPTR, A
B1:FF63 C3 clr C
B1:FF64 24 82 add A, #0x82 ; 'é'
B1:FF66 90 FB F8 mov DPTR, #XRAM_FBF8
B1:FF69 F0 movx @DPTR, A
B1:FF6A 7F 62 mov R7, #0x62 ; 'b'
B1:FF6C 7E 00 mov R6, #0
B1:FF6E 12 05 D7 lcall B1_BS_125_B4_E0AE
B1:FF71 EF mov A, R7
B1:FF72 FB mov R3, A
B1:FF73 7F 63 mov R7, #0x63 ; 'c' ; alinhamento horizontal agora é em 63!
B1:FF75 7E 00 mov R6, #0
B1:FF77 12 05 D7 lcall B1_BS_125_B4_E0AE
B1:FF7A EF mov A, R7
B1:FF7B FA mov R2, A ; alinhamento horizontal guardado temporariamente em R2
B1:FF7C 7F XX mov R7, #0xXX ; 'c' ; valor da nova opção de itálico, endereço XX da eeprom
B1:FF7E 7E 00 mov R6, #0
B1:FF80 12 05 D7 lcall B1_BS_125_B4_E0AE
B1:FF83 EF mov A, R7
B1:FF85 4A orl A, R2 ; OR entre opção de itálico e alinhamento horizontal
B1:FF7B 22 ret
Assim, as duas opções serão mescladas e chegarão no mesmo byte ao endereço #7A380 + 9 da RAM para o ARM. Como as rotinas que processam o alinhamento horizontal apenas consideram os bits finais, não fará diferença no alinhamento. Já as rotinas do itálico vão filtrar apenas os bits 6 e 5 para processarem a opção.
Vou enviar um email para você com o firmware 1.4 modificado e com 1 fonte com itálicos. Você precisará fazer a nova opção de menu, com os valores que falei, e a modificação acima (senão o itálico sempre ficará habilitado e as demais tags serão filtradas), além de mais algumas fontes com itálicos para ficar tudo em 100%.