Scrollbar para firmwares Philips- Philips DVP5960
- Philips DVP5100
- Philips DVP5965
- Philips DVP5980
Sempre achei estranho que, apesar dos firmwares Philips não terem uma scrollbar, a rotina de exibição é detectada neles, inclusive pelo meu mtkModToolbox. Mas até bem pouco tempo eu não tinha o conhecimento necessário para tentar entender isso e sempre "deixei prá lá".
Hoje eu estava justamente aperfeiçoando a rotina de detecção da scrollbar no mtkModToolbox quando decidi parar um pouco para estudar essa esquisitice no IDA. Seguindo o caminho até a rotina chamada DirDispScrollbar no DVP5960 descobri que ela começava em uma rotina órfã:
B4:83A2
B4:83A2 ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
B4:83A2
B4:83A2
B4:83A2 BankSw_240_B4_83A2: ; DATA XREF: B0:B0_BS_240_B4_83A2o
B4:83A2 ; B1_BS_240_B4_83A2o ...
B4:83A2 90 FB A0 mov DPTR, #XRAM_FBA0
B4:83A5 EC mov A, R4
B4:83A6 F0 movx @DPTR, A
B4:83A7 A3 inc DPTR
B4:83A8 ED mov A, R5
B4:83A9 F0 movx @DPTR, A
B4:83AA CB xch A, R3
B4:83AB EF mov A, R7
B4:83AC CB xch A, R3
B4:83AD CA xch A, R2
B4:83AE EE mov A, R6
B4:83AF CA xch A, R2
B4:83B0 22 ret
B4:83B0 ; End of function BankSw_240_B4_83A2
B4:83B0
B4:83B1 ; ---------------------------------------------------------------------------
B4:83B1 90 FB A0 mov DPTR, #XRAM_FBA0 ; Função orfã!!!!!!!!!!!!!
B4:83B4 E0 movx A, @DPTR
B4:83B5 FC mov R4, A
B4:83B6 A3 inc DPTR
B4:83B7 E0 movx A, @DPTR
B4:83B8 FD mov R5, A
B4:83B9 64 01 xrl A, #1
B4:83BB 4C orl A, R4
B4:83BC 70 12 jnz B4_83D0
B4:83BE 90 FB A4 mov DPTR, #XRAM_FBA4
B4:83C1 F0 movx @DPTR, A
B4:83C2 A3 inc DPTR
B4:83C3 74 B6 mov A, #0xB6 ; 'Â'
B4:83C5 F0 movx @DPTR, A
B4:83C6 E4 clr A
B4:83C7 90 FB A2 mov DPTR, #XRAM_FBA2
B4:83CA F0 movx @DPTR, A
B4:83CB A3 inc DPTR
B4:83CC F0 movx @DPTR, A
B4:83CD 02 84 8A ljmp DIR_DispScrollBar
Eu passei algum tempo tentando imaginar um jeito de chamar essa rotina de dentro da rotina principal do FileBrowser para ver o que aconteceria, mas depois decidi dar uma olhada em um firmware com scrollbar ativa para ver se aparecia alguma pista. O que encontrei me surpreendeu.
Este é o mesmo trecho de código, no firmware do Proview DVP-858
B4:6602 ; ---------------------------------------------------------------------------
B4:6602 ; START OF FUNCTION CHUNK FOR BankSw_210_B4_DD71
B4:6602
B4:6602 BankSw_214_B4_6602: ; CODE XREF: BankSw_210_B4_DD71+2j
B4:6602 ; DATA XREF: B0:B0_BS_214_B4_6602o ...
B4:6602 90 FB 9D mov DPTR, #XRAM_FB9D
B4:6605 EC mov A, R4
B4:6606 F0 movx @DPTR, A
B4:6607 A3 inc DPTR
B4:6608 ED mov A, R5
B4:6609 F0 movx @DPTR, A
B4:660A CB xch A, R3
B4:660B EF mov A, R7
B4:660C CB xch A, R3
B4:660D CA xch A, R2
B4:660E EE mov A, R6
B4:660F CA xch A, R2
B4:6610 90 FB 9D mov DPTR, #XRAM_FB9D
B4:6613 E0 movx A, @DPTR
B4:6614 FE mov R6, A
B4:6615 A3 inc DPTR
B4:6616 E0 movx A, @DPTR
B4:6617 FF mov R7, A
B4:6618 4E orl A, R6
B4:6619 70 03 jnz B4_661E
B4:661B 02 67 7D ljmp B4_677D
B4:661E ; ---------------------------------------------------------------------------
B4:661E
B4:661E B4_661E: ; CODE XREF: BankSw_210_B4_DD71-7758j
B4:661E C3 clr C
B4:661F EF mov A, R7
B4:6620 9B subb A, R3
B4:6621 EE mov A, R6
B4:6622 9A subb A, R2
B4:6623 50 03 jnc B4_6628
B4:6625 02 67 7D ljmp B4_677D
B4:6628 ; ---------------------------------------------------------------------------
B4:6628
B4:6628 B4_6628: ; CODE XREF: BankSw_210_B4_DD71-774Ej
B4:6628 90 FB 9D mov DPTR, #XRAM_FB9D
B4:662B E0 movx A, @DPTR
B4:662C FC mov R4, A
B4:662D A3 inc DPTR
B4:662E E0 movx A, @DPTR
B4:662F FD mov R5, A
B4:6630 64 01 xrl A, #1
B4:6632 4C orl A, R4
B4:6633 70 12 jnz B4_6647
B4:6635 90 FB A1 mov DPTR, #XRAM_FBA1
B4:6638 F0 movx @DPTR, A
B4:6639 A3 inc DPTR
B4:663A 74 B6 mov A, #0xB6 ; 'Â'
B4:663C F0 movx @DPTR, A
B4:663D E4 clr A
B4:663E 90 FB 9F mov DPTR, #XRAM_FB9F
B4:6641 F0 movx @DPTR, A
B4:6642 A3 inc DPTR
B4:6643 F0 movx @DPTR, A
B4:6644 02 67 01 ljmp Dir_DispScrollBar
B4:6647 ; ---------------------------------------------------------------------------
B4:6647
A rotina do DVP-858 é um pouco mais longa, mas foi o início que me chamou a atenção. Parecia que a mesma rotina "órfã" do DVP5960 tinha sido emendada com a anterior, com o "ret" removido. Eu destaquei em vermelho.
Eu pensei: nãooooooooo... não pode ser tão fácil! Mas já que era simples, experimentei substituir o "22" por "00" para re-unir as duas rotinas e ver o que aconteceria.
Honestamente, eu não pensei
mesmo que fosse tão fácil.
Philips DVP5960, firmware original modificado:
Note que por pouco a scrollbar não aparece na posição certinha
Philips DVP5100, firmware Jmaraujo 1.04b modificado:
um mísero byte!!!A capacidade de ativar a scrollbar e desativar as setas idiotas dos firmwares Philips vai ser, claro, incorporada à versão do mtkModToolbox que estou preparando.
Para localizar o ponto de modificação no seu firmware, procure por:CB EF CB CA EE CA 22
Funcionou com:
- DVP5965
- DVP5960
- DVP5980
- DVP5100
Não funcionou com:
- PET 725 (acho que neste a rotina realmente não existe)
- DVP3040 (acho que neste a rotina realmente não existe)
- DVP5140