Philips DVP5140: Sub_style e SetMeg4SubtitleParamsO DVP5140 não é vendido no Brasil, mas faz parte dos meus testes porque tem caracterísiticas interessantes, não sendo igual a nenhum outro aparelho Philips que eu conheça. E quanto mais aparelhos distintos você analisar, mas fácil fica encontrar padrões.
Você poderá notar que o DVP5140 tem um código
muito parecido com o do DVP3040
B1:F16C Sub_Style: ; CODE XREF: B1_E132+3Ep
B1:F16C 90 FB 46 mov DPTR, #XRAM_FB46
B1:F16F EE mov A, R6
B1:F170 F0 movx @DPTR, A
B1:F171 A3 inc DPTR
B1:F172 EF mov A, R7
B1:F173 F0 movx @DPTR, A
B1:F174 7F 03 mov R7, #3
B1:F176 12 07 1B lcall B1_BS_179_B3_4B4F
B1:F176
B1:F179 7F 01 mov R7, #1
B1:F17B 12 07 1B lcall B1_BS_179_B3_4B4F
B1:F17B
B1:F17E 7F 03 mov R7, #3
B1:F180 12 F6 C7 lcall B1_F6C7
B1:F180
B1:F183 7B FF mov R3, #0xFF
B1:F185 7D EB mov R5, #0xEB ; 'Ù'
B1:F187 7C 01 mov R4, #1
B1:F189 74 01 mov A, #1
B1:F18B FF mov R7, A
B1:F18C FE mov R6, A
B1:F18D 12 06 61 lcall OSD_DispMSG2_B1BS
B1:F18D
B1:F190 7F 0E mov R7, #0xE
B1:F192 12 06 F7 lcall B1_BS_173_B4_EE4A
B1:F192
B1:F195 12 D7 CA lcall SetMeg4SubtitleParams
B1:F195
B1:F198 7F 11 mov R7, #0x11
B1:F19A 12 08 1D lcall OSD_textInit_B1BS
B1:F19A
B1:F19D 7F 11 mov R7, #0x11
B1:F19F 12 08 23 lcall B1_BS_223_B3_F09F
B1:F19F
B1:F1A2 22 ret
B1:F1A2
B1:F1A2 ; End of function Sub_Style
B3:593C Sub_Style_Sec: ; DATA XREF: OSD_Text_Init+63o
B3:593C 90 FB 88 mov DPTR, #XRAM_FB88 ; Tem o número da janela (OSD_Text_Init)
B3:593F E0 movx A, @DPTR
B3:5940 FF mov R7, A
B3:5941 D2 45 setb RAM_28.5
B3:5943 12 28 67 lcall OSD_Text_Params_ARM
B3:5943
B3:5946 90 FB 88 mov DPTR, #XRAM_FB88 ; Tem o número da janela (OSD_Text_Init)
B3:5949 E0 movx A, @DPTR
B3:594A FF mov R7, A
B3:594B 12 6C EF lcall OSD_Text_Params
B3:594B
B3:594E 90 FB 88 mov DPTR, #XRAM_FB88 ; Tem o número da janela (OSD_Text_Init)
B3:5951 E0 movx A, @DPTR
B3:5952 FF mov R7, A
B3:5953 E4 clr A
B3:5954 90 FB A5 mov DPTR, #XRAM_FBA5 ; OSD Colors
B3:5957 F0 movx @DPTR, A
B3:5958 A3 inc DPTR
B3:5959 74 02 mov A, #2
B3:595B F0 movx @DPTR, A
B3:595C 7B 03 mov R3, #3
B3:595E E4 clr A
B3:595F FD mov R5, A
B3:5960 12 D2 9D lcall OSD_Text_Color
B3:5960
B3:5963 90 FB 88 mov DPTR, #XRAM_FB88 ; Tem o número da janela (OSD_Text_Init)
B3:5966 E0 movx A, @DPTR
B3:5967 FF mov R7, A
B3:5968 E4 clr A
B3:5969 FD mov R5, A
B3:596A 02 ED 66 ljmp OSD_Text_Init_End
B1:D7CA SetMeg4SubtitleParams: ; CODE XREF: Sub_Style+29p
B1:D7CA ; BankSw_336_B1_F860:B1_FB4Fp
B1:D7CA E4 clr A
B1:D7CB 90 FB ED mov DPTR, #XRAM_FBED ; wX1.high
B1:D7CE F0 movx @DPTR, A
B1:D7CF A3 inc DPTR
B1:D7D0 F0 movx @DPTR, A
B1:D7D1 90 FB F0 mov DPTR, #XRAM_FBF0 ; wY1.high
B1:D7D4 F0 movx @DPTR, A
B1:D7D5 A3 inc DPTR
B1:D7D6 F0 movx @DPTR, A
B1:D7D7 90 FB F4 mov DPTR, #XRAM_FBF4 ; wX2.high
B1:D7DA 74 02 mov A, #2
B1:D7DC F0 movx @DPTR, A
B1:D7DD A3 inc DPTR
B1:D7DE 74 30 mov A, #0x30 ; '0' ; 0x230 = 560
B1:D7E0 F0 movx @DPTR, A
B1:D7E1 90 FB F8 mov DPTR, #XRAM_FBF8 ; wY2.high (define a altura)
B1:D7E4 E4 clr A
B1:D7E5 F0 movx @DPTR, A
B1:D7E6 A3 inc DPTR
B1:D7E7 74 60 mov A, #0x60 ; '`' ; Altura da janela
B1:D7E9 F0 movx @DPTR, A
B1:D7EA E4 clr A
B1:D7EB FD mov R5, A
B1:D7EC 7F 17 mov R7, #0x17
B1:D7EE 7E 01 mov R6, #1
B1:D7F0 12 05 FB lcall Arm_PutChar_B1BS
B1:D7F0
B1:D7F3 7F 03 mov R7, #3 ; Determina a fonte usada nas legendas
B1:D7F5 12 08 53 lcall OSD_SetFont_B1BS
B1:D7F5
B1:D7F8 E4 clr A
B1:D7F9 90 FB 5F mov DPTR, #XRAM_FB5F ; Espaço entre linhas
B1:D7FC F0 movx @DPTR, A
B1:D7FD 7B 09 mov R3, #9 ; 9= todos 255 caracteres + alinhamento bottom
B1:D7FF 7D 01 mov R5, #1 ; alinhamento = 0x00 (esquerda), 0x01 (Centro), 0x02 (Direita)
B1:D801 7F 11 mov R7, #0x11 ; Janela da legenda
B1:D803 12 94 46 lcall PSB_Set_Param
B1:D803
B1:D806 7F 59 mov R7, #0x59 ; 'Y' ; Pega o valor de "DivX Subtitle" na eeprom
B1:D808 7E 00 mov R6, #0
B1:D80A 12 04 ED lcall Pref_Getchar_B1BS
B1:D80A
B1:D80D EF mov A, R7
B1:D80E 24 FE add A, #0xFE ; '¦'
B1:D810 60 11 jz B1_D823
B1:D810
B1:D812 14 dec A
B1:D813 60 09 jz B1_D81E
B1:D813
B1:D815 24 02 add A, #2
B1:D817 70 18 jnz B1_D831
B1:D817
B1:D819 7F 05 mov R7, #5
B1:D81B 02 08 53 ljmp OSD_SetFont_B1BS
B1:D81B
B1:D81E ; ---------------------------------------------------------------------------
B1:D81E
B1:D81E B1_D81E: ; CODE XREF: SetMeg4SubtitleParams+49j
B1:D81E 7F 07 mov R7, #7
B1:D820 02 08 53 ljmp OSD_SetFont_B1BS
B1:D820
B1:D823 ; ---------------------------------------------------------------------------
B1:D823
B1:D823 B1_D823: ; CODE XREF: SetMeg4SubtitleParams+46j
B1:D823 E4 clr A
B1:D824 90 FB 5F mov DPTR, #XRAM_FB5F ; Espaço entre linhas
B1:D827 F0 movx @DPTR, A
B1:D828 7B 01 mov R3, #1 ; Alinhamento bottom. Apenas 127 chars
B1:D82A 7D 01 mov R5, #1 ; alinhamento = 0x00 (esquerda), 0x01 (Centro), 0x02 (Direita)
B1:D82C 7F 11 mov R7, #0x11 ; Janela da legenda
B1:D82E 12 94 46 lcall PSB_Set_Param
B1:D82E
B1:D831
B1:D831 B1_D831: ; CODE XREF: SetMeg4SubtitleParams+4Dj
B1:D831 22 ret
B1:D831
B1:D831 ; End of function SetMeg4SubtitleParams
Uma surpresa: o DVP5140 tem uma segunda rotina SetMpeg4SubtitleParams:
B1:F366 SetMpeg4SubtitleParams2: ; CODE XREF: BankSw_250_B1_D832+10p
B1:F366 E4 clr A
B1:F367 90 FB ED mov DPTR, #XRAM_FBED ; wX1.high
B1:F36A F0 movx @DPTR, A
B1:F36B A3 inc DPTR
B1:F36C F0 movx @DPTR, A
B1:F36D 90 FB F0 mov DPTR, #XRAM_FBF0 ; wY1.high
B1:F370 F0 movx @DPTR, A
B1:F371 A3 inc DPTR
B1:F372 F0 movx @DPTR, A
B1:F373 90 FB F4 mov DPTR, #XRAM_FBF4 ; wX2.high
B1:F376 74 02 mov A, #2
B1:F378 F0 movx @DPTR, A
B1:F379 A3 inc DPTR
B1:F37A 74 30 mov A, #0x30 ; '0' ; 0x230 = 560
B1:F37C F0 movx @DPTR, A
B1:F37D 90 FB F8 mov DPTR, #XRAM_FBF8 ; wY2.high
B1:F380 E4 clr A
B1:F381 F0 movx @DPTR, A
B1:F382 A3 inc DPTR
B1:F383 74 60 mov A, #0x60 ; '`' ; Altura da janela
B1:F385 F0 movx @DPTR, A
B1:F386 E4 clr A
B1:F387 90 FB 5F mov DPTR, #XRAM_FB5F ; Espaço entre linhas
B1:F38A F0 movx @DPTR, A
B1:F38B 7B 09 mov R3, #9
B1:F38D 7D 01 mov R5, #1
B1:F38F 7F 11 mov R7, #0x11
B1:F391 12 94 46 lcall PSB_Set_Param
B1:F391
B1:F394 D3 setb C
B1:F395 22 ret
B1:F395
B1:F395 ; End of function SetMpeg4SubtitleParams2