Também diminuí o tempo em que a informação de zoom aparece na tela (achei 15 segundos muito tempo). Além disso, as legendas DivX agora continuam sendo exibidas em zoom acima de 100% (algumas pessoas podem querer assistir o filme com zoom, ainda que isso as faça perder partes das cenas). Vamos às últimas modificações (depois eu posto o novo firmware):
ZoomEsse é o começo da rotina que "desenha" o ícone de zoom e o valor:
B3:3C47 BankSw_379_B3_3C47: ; CODE XREF: B3:1529_p
B3:3C47 ; B3:1557_p ...
B3:3C47 90 FE 13 mov DPTR, #XRAM_FE13
B3:3C4A E0 movx A, @DPTR
B3:3C4B FC mov R4, A
B3:3C4C A3 inc DPTR
B3:3C4D E0 movx A, @DPTR
B3:3C4E FD mov R5, A
B3:3C4F A3 inc DPTR
B3:3C50 E0 movx A, @DPTR
B3:3C51 FE mov R6, A
B3:3C52 A3 inc DPTR
B3:3C53 E0 movx A, @DPTR
B3:3C54 54 04 anl A, #4
B3:3C56 FF mov R7, A
B3:3C57 E4 clr A
B3:3C58 FE mov R6, A
B3:3C59 FD mov R5, A
B3:3C5A FC mov R4, A
B3:3C5B EF mov A, R7
B3:3C5C 60 0A jz B3_3C68
B3:3C5E 7F 02 mov R7, #2
B3:3C60 12 06 49 lcall B3_BS_144_B2_EB30
B3:3C63 7F 02 mov R7, #2
B3:3C65 12 05 AD lcall B3_BS_118_B5_B085
....
No final dela, temos o seguinte (como ocorria com o menu da tecla display):
....
B3:405F B3_405F: ; CODE XREF: BankSw_379_B3_3C47+410_j
B3:405F 7F 0A mov R7, #0xA ; tempo para informacoes da tecla zoom
B3:4061 02 05 FB ljmp B3_BS_131_B2_FDBD
Alterei o valor para #2, o que dá a uns 3 segundos (o #0A dava uns 15 segundos).
Vendo quais rotinas chamam essa última, cheguei à seguinte (apenas começo):
B3:AD73
B3:AD73 BankSw_243_B3_AD73: ; DATA XREF: B0:B0_BS_243_B3_AD73_o
B3:AD73 ; B1:B1_BS_243_B3_AD73_o ...
B3:AD73 90 FB D2 mov DPTR, #XRAM_FBD2
B3:AD76 EF mov A, R7
B3:AD77 F0 movx @DPTR, A
B3:AD78 7F 0A mov R7, #0xA
B3:AD7A 12 05 AD lcall B3_BS_118_B5_B085
B3:AD7D 90 FE 13 mov DPTR, #XRAM_FE13
B3:AD80 E0 movx A, @DPTR
B3:AD81 FC mov R4, A
B3:AD82 A3 inc DPTR
B3:AD83 E0 movx A, @DPTR
B3:AD84 FD mov R5, A
B3:AD85 A3 inc DPTR
B3:AD86 E0 movx A, @DPTR
B3:AD87 FE mov R6, A
B3:AD88 A3 inc DPTR
B3:AD89 E0 movx A, @DPTR
B3:AD8A E4 clr A
B3:AD8B FF mov R7, A
B3:AD8C EE mov A, R6
B3:AD8D 54 02 anl A, #2
B3:AD8F FE mov R6, A
B3:AD90 E4 clr A
B3:AD91 FD mov R5, A
B3:AD92 FC mov R4, A
B3:AD93 EE mov A, R6
B3:AD94 60 05 jz B3_AD9B
B3:AD96 7F 09 mov R7, #9 ; desabilita legendas DviX em modo zoom
B3:AD98 12 07 27 lcall B3_BS_181_B5_D0EA
....
Em B3:AD94, trocando o
60 05 por
80 05 (jz por sjmp), faz saltar o trecho que desabilita as legendas. Assim, no momento em que ícone de zoom sumir, as legendas voltam normalmente (antes, dava para fazer as legendas voltarem, mas tinha que apertar a tecla subtitle, o que desligava o scan do zoom, e esperar a seleção de legenda sumir).
Fonte repetidaA rotina que escolhe o tipo de fonte (inicialmente o codepage) é a seguinte (início):
B3:C5D7 ; modifica fontes
B3:C5D7
B3:C5D7 BankSw_273_B3_C5D7: ; DATA XREF: B0:B0_BS_273_B3_C5D7_o
B3:C5D7 ; B1:B1_BS_273_B3_C5D7_o ...
B3:C5D7 90 FB 00 mov DPTR, #XRAM_FB00
B3:C5DA E0 movx A, @DPTR
B3:C5DB 24 F2 add A, #0xF2 ; '='
B3:C5DD 60 26 jz B3_C605
B3:C5DF 14 dec A
B3:C5E0 60 39 jz B3_C61B
B3:C5E2 24 FE add A, #0xFE ; '¦'
B3:C5E4 60 15 jz B3_C5FB
B3:C5E6 24 E8 add A, #0xE8 ; 'Þ'
B3:C5E8 60 31 jz B3_C61B
B3:C5EA 24 C8 add A, #0xC8 ; '+'
B3:C5EC 60 12 jz B3_C600
B3:C5EE 14 dec A
B3:C5EF 60 0F jz B3_C600
B3:C5F1 24 BC add A, #0xBC ; '+'
B3:C5F3 60 06 jz B3_C5FB
B3:C5F5 24 09 add A, #9
B3:C5F7 70 37 jnz B3_C630
B3:C5F9 C3 clr C
B3:C5FA 22 ret
....
Mais à frente, temos o seguinte trecho:
B3:C613
B3:C613 B3_C613: ; CODE XREF: BankSw_273_B3_C5D7+35_j
B3:C613 90 FD C8 mov DPTR, #XRAM_FDC8
B3:C616 74 06 mov A, #6 ; 7 fontes, reduzir para 6 (#5)
B3:C618 F0 movx @DPTR, A
B3:C619 80 17 sjmp B3_C632
B3:C61B ; ---------------------------------------------------------------------------
B3:C61B
B3:C61B B3_C61B: ; CODE XREF: BankSw_273_B3_C5D7+9_j
B3:C61B ; BankSw_273_B3_C5D7+11_j
B3:C61B 90 FD C8 mov DPTR, #XRAM_FDC8
B3:C61E E0 movx A, @DPTR
B3:C61F C3 clr C
B3:C620 94 06 subb A, #6 ; 7 fontes, reduzir para 6 (#5)
B3:C622 50 05 jnc B3_C629
B3:C624 E0 movx A, @DPTR
B3:C625 04 inc A
....
É só seguirmos as modificações propostas nos comentários (trocar o #6 por #5), o que reduzirá o número de fontes de 7 para 6. Esse trecho é justamente o que "passa" as fontes, de #0 a #6, e ainda roda de #0 para #6 ou de #6 para #0. Como as fontes #5 e #6 são iguais, é só cortarmos a última.
Uma outra solução seria mexer no trecho:
B3_C632: ; CODE XREF: BankSw_273_B3_C5D7+3A_j
B3:C632 ; BankSw_273_B3_C5D7+42_j ...
B3:C632 90 FD C8 mov DPTR, #XRAM_FDC8
B3:C635 E0 movx A, @DPTR
B3:C636 FF mov R7, A
B3:C637 24 FB add A, #0xFB ; '¹'
B3:C639 50 08 jnc B3_C643 ; se carry, faz algumas manobras nos codepages
B3:C639 ; (e repete a fonte #5)
....
Trocar
50 08 por
80 08 em B3:C639 faz com que todas as fontes sejam tratadas da mesma forma, seguindo a tabela de fontes de forma linear. Assim, a última fonte passa a ser a apontada no MTKRemaker como fonte 14. O problema é que o nome dela ainda continua repetido (igual ao da penúltima). Além disso, essa fonte 14 é a usada pelo filebrowser, sendo muito pequena. Ainda podemos brincar mais, aumentando para 8 fontes (substituindo os #6 por #7 nos trechos mostrados mais acima). Isso faz com que a fonte 15 mostrada no MTKRemaker também seja usada (mas ela não é cp1252, é pequena como a 14, além de não ter nome).
Opção de fonte gravávelVerifiquei que além da opção ser guardada na memória, é guardada também na EEPROM, como preferência (endereço #2E). Porém, ao iniciar o player, há uma rotina (BankSw_63_B1_C10D) que sempre coloca o valor #2 nesse endereço, fazendo com que a terceira fonte seja a inicial. Segue o trecho em que isso ocorre:
B1:C15E B1_C15E: ; CODE XREF: BankSw_63_B1_C10D+3D_j
B1:C15E 7F 44 mov R7, #0x44 ; 'D'
B1:C160 7E 00 mov R6, #0
B1:C162 12 F2 13 lcall PREF_GetChar
B1:C165 EF mov A, R7
B1:C166 60 09 jz B1_C171
B1:C168 7D 02 mov R5, #2 ; opcao de fonte de legenda inicial
B1:C16A 7F 2E mov R7, #0x2E ; '.'
B1:C16C 7E 00 mov R6, #0
B1:C16E 12 F3 3A lcall PREF_SetChar??
....
Eu removi essa verificação inicial do endereço #44, já que ela zerava (ou "doisava", para falar a verdade
) a opção de fonte, dependendo do seu conteúdo. Além de removê-la, incluí uma pequena checagem do endereço #2E, para verificar se o valor inicial não está fora dos limites das fontes (maior que #5). Somente se estiver é que atribui-se #2. Isso é feito pelo mesmo motivo que foi feito na opção de tempo incluída há alguns dias. Na primeira vez que você atualiza o firmware, o valor na EEPROM pode ser qualquer um (e de fato é, a fonte fica em árabe e demora muito para se acertar). Estando dentro dos limites (de #0 a 5#), nada é feito, mantendo a opção.