Oi rictad,
Depois de estudar bastante as suas modificações já pude fazer um esboço do Itálico Light para o LG DV256K. Fiz apenas o básico: falta as partes que corrigem a centralização e que cancelam o itálico no início de cada quadro. Porém, ainda tenho dúvidas, como:
1- Não entendi como você fez o artifício contra a problema do limite de tamaho do buffer primário. Assim, acho que no meu esboço falta isso.
2- Ainda não sei se poderei usar as áreas de erro para colocar a nova rotina do buffer primário. Isso porque o buffer primário fica no ARM code 2, e as áreas de erro no ARM code 1. Farei um teste rápido (desvio do buffer primário para área de erro, para legendas ficarem só com "aaaaaaaaaaa..."
), porém hoje não estou em casa e não posso fazer ainda.
Aqui vão os esboços das modificações:
Rotina do Buffer Primário Original (com o possível ponto para o desvio para nova rotina que filtra as tags de itálico)
ROM:0006DD10 ; =============== S U B R O U T I N E =======================================
ROM:0006DD10
ROM:0006DD10
ROM:0006DD10 sub_6DD10 ; CODE XREF: sub_6DE6C+52p
ROM:0006DD10 ; sub_6DE6C+62p
ROM:0006DD10 F8 B5 PUSH {R3-R7,LR}
ROM:0006DD12 00 26 MOVS R6, #0
ROM:0006DD14 00 25 MOVS R5, #0
ROM:0006DD16 00 20 MOVS R0, #0
ROM:0006DD18 F2 F7 56 F8 BL sub_5FDC8
ROM:0006DD1C 85 4F LDR R7, =unk_85FF4
ROM:0006DD1E
ROM:0006DD1E loc_6DD1E ; CODE XREF: sub_6DD10+7Ej
ROM:0006DD1E 00 24 MOVS R4, #0
ROM:0006DD20 23 E0 B loc_6DD6A
ROM:0006DD22 ; ---------------------------------------------------------------------------
ROM:0006DD22
ROM:0006DD22 loc_6DD22 ; CODE XREF: sub_6DD10+5Cj
ROM:0006DD22 80 48 LDR R0, =unk_865F0
ROM:0006DD24 00 5D LDRB R0, [R0,R4] ; COLOCAR O DESVIO PARA FILTROS DE ITALICO AQUI
ROM:0006DD26 0D 28 CMP R0, #0xD
ROM:0006DD28 16 D1 BNE loc_6DD58
ROM:0006DD2A 00 22 MOVS R2, #0
ROM:0006DD2C 01 21 MOVS R1, #1
ROM:0006DD2E 20 1C ADDS R0, R4, #0
ROM:0006DD30 F2 F7 20 F8 BL sub_5FD74
ROM:0006DD34 FF F7 5D FF BL sub_6DBF2
ROM:0006DD38 00 28 CMP R0, #0
ROM:0006DD3A 13 D0 BEQ loc_6DD64
ROM:0006DD3C 01 36 ADDS R6, #1
ROM:0006DD3E 01 2E CMP R6, #1
ROM:0006DD40 15 D1 BNE loc_6DD6E
ROM:0006DD42 B2 2D CMP R5, #0xB2 ; '¦'
ROM:0006DD44 13 D2 BCS loc_6DD6E
ROM:0006DD46 EA 19 ADDS R2, R5, R7
ROM:0006DD48 0D 21 MOVS R1, #0xD
ROM:0006DD4A 91 70 STRB R1, [R2,#2]
ROM:0006DD4C 68 1C ADDS R0, R5, #1
ROM:0006DD4E 45 1C ADDS R5, R0, #1
ROM:0006DD50 0A 21 MOVS R1, #0xA
ROM:0006DD52 C0 19 ADDS R0, R0, R7
ROM:0006DD54 81 70 STRB R1, [R0,#2]
ROM:0006DD56 0A E0 B loc_6DD6E
ROM:0006DD58 ; ---------------------------------------------------------------------------
ROM:0006DD58
ROM:0006DD58 loc_6DD58 ; CODE XREF: sub_6DD10+18j
ROM:0006DD58 01 1C ADDS R1, R0, #0
ROM:0006DD5A 28 1C ADDS R0, R5, #0
ROM:0006DD5C 01 35 ADDS R5, #1
ROM:0006DD5E C0 19 ADDS R0, R0, R7
ROM:0006DD60 81 70 STRB R1, [R0,#2]
ROM:0006DD62 00 26 MOVS R6, #0
ROM:0006DD64
ROM:0006DD64 loc_6DD64 ; CODE XREF: sub_6DD10+2Aj
ROM:0006DD64 01 34 ADDS R4, #1
ROM:0006DD66 08 2C CMP R4, #8
ROM:0006DD68 01 D2 BCS loc_6DD6E
ROM:0006DD6A
ROM:0006DD6A loc_6DD6A ; CODE XREF: sub_6DD10+10j
ROM:0006DD6A B4 2D CMP R5, #0xB4 ; '¦'
ROM:0006DD6C D9 D3 BCC loc_6DD22
ROM:0006DD6E
ROM:0006DD6E loc_6DD6E ; CODE XREF: sub_6DD10+30j
ROM:0006DD6E ; sub_6DD10+34j ...
ROM:0006DD6E 08 2C CMP R4, #8
ROM:0006DD70 04 D1 BNE loc_6DD7C
ROM:0006DD72 00 22 MOVS R2, #0
ROM:0006DD74 01 21 MOVS R1, #1
ROM:0006DD76 08 20 MOVS R0, #8
ROM:0006DD78 F1 F7 FC FF BL sub_5FD74
ROM:0006DD7C
ROM:0006DD7C loc_6DD7C ; CODE XREF: sub_6DD10+60j
ROM:0006DD7C 00 20 MOVS R0, #0
ROM:0006DD7E F2 F7 23 F8 BL sub_5FDC8
ROM:0006DD82 02 2E CMP R6, #2
ROM:0006DD84 02 D1 BNE loc_6DD8C
ROM:0006DD86 28 1C ADDS R0, R5, #0
ROM:0006DD88 FE 30 ADDS R0, #0xFE ; '¦'
ROM:0006DD8A 02 E0 B loc_6DD92
ROM:0006DD8C ; ---------------------------------------------------------------------------
ROM:0006DD8C
ROM:0006DD8C loc_6DD8C ; CODE XREF: sub_6DD10+74j
ROM:0006DD8C B4 2D CMP R5, #0xB4 ; '¦'
ROM:0006DD8E C6 D3 BCC loc_6DD1E
ROM:0006DD90 B4 20 MOVS R0, #0xB4 ; '¦'
ROM:0006DD92
ROM:0006DD92 loc_6DD92 ; CODE XREF: sub_6DD10+7Aj
ROM:0006DD92 78 70 STRB R0, [R7,#1]
ROM:0006DD94 61 49 LDR R1, =unk_86E2C
ROM:0006DD96 00 20 MOVS R0, #0
ROM:0006DD98 14 39 SUBS R1, #0x14
ROM:0006DD9A 08 60 STR R0, [R1]
ROM:0006DD9C F8 BC POP {R3-R7}
ROM:0006DD9E 08 BC POP {R3}
ROM:0006DDA0 18 47 BX R3
ROM:0006DDA0 ; End of function sub_6DD10
Nova Rotina, que filtra as tags de itálico:
12 B4 INICIO PUSH {R1,R4}
03 5D LDRB R3, [R0,R4]
3C 2B CMP R3, #0x3C ; '<'
XX D1 BNE FIM1
61 1C ADDS R1, R4, #1
43 5C LDRB R3, [R0,R1]
69 2B CMP R3, #0x69 ; 'i'
XX D1 BNE VERIFBARRA
01 31 ADDS R1, #1
43 5C LDRB R3, [R0,R1]
3E 2B CMP R3, #0x3E ; '>'
XX D1 BNE FIM1
03 20 MOVS R0, #3
0A E0 B FIM2
2F 2B VERIFBARRA CMP R3, #0x2F ; '/'
XX D1 BNE FIM1
01 31 ADDS R1, #1
43 5C LDRB R3, [R0,R1]
69 2B CMP R3, #0x69 ; 'i'
XX D1 BNE FIM1
01 31 ADDS R1, #1
43 5C LDRB R3, [R0,R1]
3E 2B CMP R3, #0x3E ; '>'
XX D1 BNE FIM1
04 20 MOVS R0, #4
0C 1C FIM2 ADDS R4, R1, #0
22 BC POP {R1,R4}
XX XX XX XX BL 6DD26 ; continua rotina anterior
00 5D FIM1 LDRB R0, [R0,R4] ; retorna sem mudar nada
12 BC POP {R1,R4}
XX XX XX XX BL 6DD26 ; continua rotina anterior
Rotinas do buffer secundário, ocupando o mesmo espaço da rotina original, e depois as áreas de erro:
; =============== S U B R O U T I N E =======================================
XX XX LDR R1, =unk_85FF4 ; end. inicial buffer secundario
08 18 ADDS R0, R1, R0
80 78 LDRB R0, [R0,#2]
70 47 BX LR
No espaço que sobra logo a seguir da rotina acima:
; =============== S U B R O U T I N E =======================================
XX XX LDR R1, =unk_85FF4
08 18 ADDS R0, R1, R0
XX XX LDR R2, =unk_800C8 ; end. que guarda opcoes da legenda
80 78 LDRB R0, [R0,#2]
D1 79 LDRB R1, [R2,#7] ; no DV256K o Alin. Horiz. fica em 800C8 + #7
00 B5 PUSH {LR}
XX XX XX XX BL NOVA ROTINA
08 BC POP {R3}
18 47 BX R3
Na área de erros:
; =============== S U B R O U T I N E =======================================
03 28 NOVA ROTINA CMP R0, #3
03 D1 BNE PARTE2
80 23 MOVS R3, #0x80
19 43 ORRS R1, R3 ; seta bit 7 do alin. horiz.
D1 71 STRB R1, [R2,#7]
70 47 BX LR
04 28 PARTE2 CMP R0, #4
03 D1 BNE PARTE3
7F 23 MOVS R3, #0x7F
19 40 ANDS R1, R3 ; reseta bit 7 do alin. horiz.
D1 71 STRB R1, [R2,#7]
70 47 BX LR
20 28 PARTE3 CMP R0, #0x20
09 D9 BLS FIM
D1 79 LDRB R1, [R2,#7]
70 22 MOVS R2, #0x70 ; retirar essas 4 linhas (checam se italico esta habilitado pelo menu)
0A 40 ANDS R2, R1 ; (idem)
50 2A CMP R2, #0x50 ; (idem)
04 D1 BNE FIM ; (idem)
80 22 MOVS R2, #0x80
0A 40 ANDS R2, R1
80 2A CMP R2, #0x80 ; checa se bit 7 esta setado
00 D1 BNE FIM
DF 30 ADDS R0, #0xDF
70 47 FIM BX LR
Rictad, se você detectar alguma coisa errada, avise.
Obrigado! Nesse fim-de-semana pretendo testar na prática...