Algumas explicações sobre o MTK PatcherÉ importante salientar que MTK Patcher é uma ferramenta para facilitar a vida de quem já faz modificações avançadas em firmwares MT13x9 e muitas vezes sabe fazê-las "na munheca" mas acha mortalmente tedioso (é o meu caso). Não espere entender a maioria dos conceitos se você sequer entender notação hexadecimal, porque não vou descer a esse nível nas minhas explicações. E eu também espero que qualquer um que vá usar essa ferramenta também esteja acompanhando meu
LOG de Descobertas e esteja a par do que está explicado lá.
Dá para usar a maioria dos recursos do MTK Patcher sem entender lhufas dos conceitos envolvidos. Só não espere que eu vá explicar. Pelo menos não de uma forma que qualquer um entenda
A aba "RECT" (e um pouco de história)
Como usar:
Uma chamada típica a ClearRect se parece com isso (da MP3_TagDisplay do DVP5960):
B1:56A0 90 FC 76 mov DPTR, #XRAM_FC76 ; Coordenada horizontal (HI)
B1:56A3 74 01 mov A, #1
B1:56A5 F0 movx @DPTR, A
B1:56A6 A3 inc DPTR
B1:56A7 74 79 mov A, #0x79 ; 'y' ; Coordenada Horizontal: 0x179
B1:56A9 F0 movx @DPTR, A
B1:56AA 90 FC 79 mov DPTR, #XRAM_FC79 ; Coordenada vertical (HI)
B1:56AD E4 clr A
B1:56AE F0 movx @DPTR, A
B1:56AF A3 inc DPTR
B1:56B0 74 37 mov A, #0x37 ; '7' ; Coordenada Vertical: 0x37
B1:56B2 F0 movx @DPTR, A
B1:56B3 7B DC mov R3, #0xDC ; '_' ; R2R3 = altura (0xDC)
B1:56B5 7A 00 mov R2, #0
B1:56B7 7D DC mov R5, #0xDC ; '_' ; R4R5 = Largura (0xDC)
B1:56B9 7C 00 mov R4, #0
B1:56BB 7F 0F mov R7, #0xF ; Janela
B1:56BD 12 1E 54 lcall ClearRect ; Chama ClearRect para limpar o retangulo
Você irá notar que os valores presentes acima são os mesmos valores default de MTK Patcher. Para saber onde um retângulo será desenhado basta escolher a janela correspondente (no caso: 0xF) e fornecer coordenadas e dimensões. Se você mover o slider "janela" enquanto estiver na aba RECT, verá como o retângulo seria desenhado se você mudasse a janela-alvo.
Mas tenha em mente que se qualquer parte do retângulo cair fora da janela-alvo, a função provavelmente será cancelada (ou você poderá ter outros resultados estranhos). A capacidade de mover a janela é útil nos casos em que R7 é carregado com um valor não literal, que você não sabe de onde vem. Carregando os valores e movendo entre janelas até encontrar em quais o retângulo seria exibido corretamente ajudará a descobrir a janela correta.
A parte "Texto" da aba RECT ainda não está funcionando.
Quando eu estava estudando a forma como as tags MP3 são exibidas e como mudar a posição de exibição, uma das tarefas que me consumiu mais tempo foi determinar as coordenadas corretas para que a função ClearRect fizesse a limpeza no local certo. Nem mais, nem menos. Eu tive que instalar o firmware várias vezes, chutando novos valores até acertar. Então fiquei de saco cheio (odeio trabalho repetitivo) e criei um programa que exibisse para mim como seria o retângulo na tela baseado em quaisquer coordenadas que eu desse. Daí nasceu "MTK ClearRect", que vocês nunca conheceram, porque o conhecimento que eu precisei adquirir para criá-lo me fez abandonar o projeto mtkModToolbox e "dar a luz" ao MTK Patcher.
O problema é que entre 95 e 100% de todas as coordenadas no firmware são relativas a uma janela. Então para saber onde um retângulo ClearRect estava sendo desenhado eu precisava antes saber onde estava a respectiva janela. Estudando a documentação do MT13x9 aprendi a localizar as estruturas e desenhar as janelas. Não saber onde estavam as janelas eram a única coisa que me impedia de desenhar as linhas do browser (um desejo tão antigo quanto o mtkModToolbox), daí mais uns dois dias de estudo e eu aprendi não apenas a desenhá-las, mas a localizá-las por análise do código assembly. O método anterior, por busca de padrões (que desenvolvi a partir das técnicas usadas no
MTK Subtitle Patcher do Borus), era lento, chato de usar e impreciso.
A Segunda JanelaAssim como no mtkWindows, é possível exibir duas janelas ao mesmo tempo. A função dessa segunda janela é apenas verificar visualmente se não está havendo sobreposição de duas janelas que eventualmente irão ser exibidas ao mesmo tempo.
Log TotalMTK Patcher usa um método experimental de modificação e desenho em tempo real que está me criando problemas, por criar alguma "referências circulares" indesejáveis. Um dos efeitos colaterais dessas referências circulares é que a cada movimentação de slider para a posição deseja é disparada uma enorma quantidade de modificações no firmware e TODAS serão exibidas no log, dificultando sua legibilidade. O ideal é que apenas a última modificação fosse exibida, mas para isso eu precisaria abandonar o desenho em tempo real e determinar que as modificações só tivessem efeito quando você clicasse em um botão "aplicar", o que não é minha intenção neste momento.
Ou seja: Deixando "Log Total " desligado você vai deixar de ver alguns patches no LOG, mas se o ativar você vai cansar de vê-los.
Nomes usados no LOGNo LOG eu uso nomes já escolhidos pelos hackers do MT13x9 sempre que possível, mas muitos nomes também são inventados por mim e referem-se a nomes de variáveis no meu programa.
Por exemplo (exemplo de LOG):Procurando parâmetros do browser e janelas
Possivel OSDAddrTable em: 0x0354FD
OffsetCoordStructures em: 0x033512
DirDispFileList em: 0x0172A8
DirDispFileList diz que a janela do browser é: 0x0F
Número de linhas no browser: 4
OffsetCoordTable em: 0x01308E
Procurando local do patch para nomes longos no browser
Usando método tradicional (Philips, etc)...
offSetPatchFnameSize1: 0x19CE5
offSetPatchFnameSize2: 0x19CE9
"DirDispFileList" é um nome conhecido no MT13x9, mas "OffsetCoordStructures" é inventado por mim. Em geral, tudo o que começar por "Offset" é criação minha e não adianta procurar na documentação do MT13x9. Fora isso, não há nenhuma "regra" para diferenciar o que existe na documentação do MT13x9 do que é criação minha. Talvez eu estabeleça alguma, mas não agora.
A aba BrowserQuando você entra na aba Browser, se eu tiver identificado qual a janela do browser (isso é feito seguindo pistas no código assembly) ela já será selecionada automáticamente e se a seleção estiver correta você verá os outros elementos (linhas, scrollbar) também desehados corretamente.
Os retângulos amarelos mostram as coordenadas de exibição da Barra de Seleção. Seu tamanho afeta apenas o tamanho da barra, sem nenhum outro efeito na exibição dos caracteres
"Exibir Retângulo List Clearing" (fora da aba) mostra as coordenadas do ClearRect que é responsável por apagar a lsita de arquivos e não deixar que o resto de nomes compridos seja esquecido na tela quando você rolar a lista de arquivos. Eu exibo apenas uma linha de list clearing, mas apenas para não entulhar a exibição. Na verdade o list clearing se repete para cada linha do browser.
Perceba que eu não dou opção para fazer ajustes na largura de List Clearing, porque para reduzir o número de ajustes necessários eu fiz com que sua largura fosse modificada automaticamente com a largura da Barra de Seleção. É normal que List Clearing seja mais larga que a barra.
A scrollbar "real" é apenas o que eu exibo em amarelo. o retângulo pontilhado que a segue é apenas uma guia para facilitar a visualização. Sua largura pode ser modificada (pretendo incluir isso), mas a altura é calculada automaticamente.