DarkBear Пионер дизассемблинга Телефонист Откуда: Россия, Ульяновск С нами с: 30.01.2002 Плодовитость: 86
Рейтинг
Подано 125 (120/5) голосов
|
Нужны добровольцы для редактирования ленгпака х35...
цитата: Skylord пишет:Сначала преамбула: написал я тулзу для редактирования ленгпаков. Уже работает и опробована на х35/х45/х50.
Вот я и дождался когда кто нибудь накропает эту утилиту. Жаль не было времени заняться этим самому, ну да ладно. ;)
А насчет универсальности функции ConvSiemensToUnicode(та, которую мы патчим при руссификации) я оказался таки прав и LG Pack раскодируется именно ей.
Но IMHO основная польза не в редактировании строк пакета, а в том что теперь по ссылкам на тексты из него можно раскрутить остальную прошивку, чем я и займусь если опять-же будет время. 8)
seg000:EAB4EC ; --------------- S U B R O U T I N E ---------------------------------------
seg000:EAB4EC
seg000:EAB4EC
seg000:EAB4EC ConvSiemensToUnicode: ; CODE XREF: sub_C58E98+3CP
seg000:EAB4EC ; Gate3+36P
seg000:EAB4EC mov [-r0], r9
seg000:EAB4EE mov [-r0], r8
seg000:EAB4F0 mov [-r0], r7
seg000:EAB4F2 mov [-r0], r6
seg000:EAB4F4 movb rl1, [r0+0Ah] ; R5 - 90h
seg000:EAB4F8 mov r2, [r0+8]
seg000:EAB4FC mov r7, [r0+10h]
seg000:EAB500 mov r6, #1
seg000:EAB502 mov r3, r7
seg000:EAB504 shl r3, #1
seg000:EAB506 mov r4, [r0+0Ch] ; 3168h
seg000:EAB50A mov r5, [r0+0Eh] ; 3E3h F8F168
seg000:EAB50E add r4, r3
seg000:EAB510 extp r5, #1
seg000:EAB512 mov r9, [r4] ; Кодовая страница по умолчанию
seg000:EAB514 mov r8, #0
seg000:EAB516 extp r15, #1
seg000:EAB518 movb rl3, [r14]
seg000:EAB51A cmpb rl3, rl1 ; Сравниваем с 90h
seg000:EAB51C jmpa cc_UGT, SymbolCycle
seg000:EAB520 cmp r7, #1
seg000:EAB522 jmpa cc_NZ, SymbolCycle
seg000:EAB526 mov r7, r1
seg000:EAB528 mov [-r0], r2
seg000:EAB52A mov [-r0], r13
seg000:EAB52C mov [-r0], r12
seg000:EAB52E mov [-r0], r14
seg000:EAB530 mov [-r0], r15
seg000:EAB532 mov r3, [r0+1Eh]
seg000:EAB536 mov [-r0], r3
seg000:EAB538 mov r4, #3048h ; F8F048
seg000:EAB53C mov r10, #3E3h
seg000:EAB540 mov [-r0], r10
seg000:EAB542 mov [-r0], r4
seg000:EAB544 mov [-r0], r6
seg000:EAB546 mov [-r0], r2
seg000:EAB548 calls 0EAh, GetCharFromTable
seg000:EAB54C add r0, #0Ah
seg000:EAB550 mov r6, r4
seg000:EAB552 mov r15, [r0+]
seg000:EAB554 mov r14, [r0+]
seg000:EAB556 mov r12, [r0+]
seg000:EAB558 mov r13, [r0+]
seg000:EAB55A mov r2, [r0+]
seg000:EAB55C mov r1, r7
seg000:EAB55E sub r14, #1
seg000:EAB560 add r14, r6
seg000:EAB562 jmpa cc_UC, SymbolCycle
seg000:EAB566 ; ---------------------------------------------------------------------------
seg000:EAB566
seg000:EAB566 NextSymbol: ; CODE XREF: ConvSiemensToUnicode+152j
seg000:EAB566 extp r15, #1
seg000:EAB568 movb rl7, [r14]
seg000:EAB56A cmpb rl7, rl1
seg000:EAB56C jmpa cc_ULE, LowerThan0x90
seg000:EAB570 extp r15, #1
seg000:EAB572 movb rl7, [r14]
seg000:EAB574 movbz r9, rl7
seg000:EAB576 movbz r7, rl1 ; - 90
seg000:EAB578 sub r9, r7 ; Код после 90
seg000:EAB57A extp r15, #1
seg000:EAB57C movb rl7, [r14]
seg000:EAB57E cmpb rl7, #0FEh ; '¦'
seg000:EAB582 jmpr cc_NZ, loc_EAB5A2
seg000:EAB584 mov r7, r6
seg000:EAB586 add r7, r8
seg000:EAB588 mov r3, [r0+12h]
seg000:EAB58C cmp r7, r3
seg000:EAB58E jmpr cc_UGT, loc_EAB592
seg000:EAB590 add r8, #1
seg000:EAB592
seg000:EAB592 loc_EAB592: ; CODE XREF: ConvSiemensToUnicode+A2j
seg000:EAB592 add r14, #1
seg000:EAB594 extp r15, #1
seg000:EAB596 movb rl7, [r14]
seg000:EAB598 movbz r7, rl7
seg000:EAB59A movbz r3, rl1
seg000:EAB59C sub r7, r3
seg000:EAB59E sub r7, #1
seg000:EAB5A0 add r9, r7
seg000:EAB5A2
seg000:EAB5A2 loc_EAB5A2: ; CODE XREF: ConvSiemensToUnicode+96j
seg000:EAB5A2 mov r7, r6 ; R6 текущий символ строки по номеру
seg000:EAB5A4 add r7, r8
seg000:EAB5A6 mov r3, [r0+12h]
seg000:EAB5AA cmp r7, r3
seg000:EAB5AC jmpr cc_UGT, loc_EAB5B0
seg000:EAB5AE add r8, #1
seg000:EAB5B0
seg000:EAB5B0 loc_EAB5B0: ; CODE XREF: ConvSiemensToUnicode+C0j
seg000:EAB5B0 cmp r9, #1 ; 0x91?
seg000:EAB5B2 jmpr cc_NZ, Non0x91Page
seg000:EAB5B4 mov [-r0], r1
seg000:EAB5B6 mov [-r0], r2
seg000:EAB5B8 mov [-r0], r13
seg000:EAB5BA mov [-r0], r12
seg000:EAB5BC mov [-r0], r14
seg000:EAB5BE mov [-r0], r15
seg000:EAB5C0 mov r3, [r0+20h]
seg000:EAB5C4 mov [-r0], r3
seg000:EAB5C6 mov r4, #3048h ; F8F048
seg000:EAB5CA mov r5, #3E3h
seg000:EAB5CE mov [-r0], r5
seg000:EAB5D0 mov [-r0], r4
seg000:EAB5D2 mov [-r0], r6
seg000:EAB5D4 mov [-r0], r2
seg000:EAB5D6 add r14, #1
seg000:EAB5D8 calls 0EAh, GetCharFromTable
seg000:EAB5DC add r0, #0Ah
seg000:EAB5E0 mov r7, r4
seg000:EAB5E2 mov r15, [r0+]
seg000:EAB5E4 mov r14, [r0+]
seg000:EAB5E6 mov r12, [r0+]
seg000:EAB5E8 mov r13, [r0+]
seg000:EAB5EA mov r2, [r0+]
seg000:EAB5EC mov r1, [r0+]
seg000:EAB5EE mov r3, r7
seg000:EAB5F0 sub r3, r6
seg000:EAB5F2 mov r6, #0
seg000:EAB5F4 add r14, r3
seg000:EAB5F6 mov r6, r7
seg000:EAB5F8 jmpr cc_UC, loc_EAB60C
seg000:EAB5FA ; ---------------------------------------------------------------------------
seg000:EAB5FA
seg000:EAB5FA Non0x91Page: ; CODE XREF: ConvSiemensToUnicode+C6j
seg000:EAB5FA shl r9, #1 ; R9=R9*2
seg000:EAB5FC mov r7, [r0+0Ch] ; F8F168
seg000:EAB600 mov r3, [r0+0Eh] ; Берем символ больше 90h из таблицы R7:R3
seg000:EAB604 add r7, r9 ; Например код 9Bh - кириллица; +0x16; F8F17E
seg000:EAB606 extp r3, #1
seg000:EAB608 mov r9, [r7] ; В этом случае R9 == 0x0008
seg000:EAB60A shl r9, #7 ; Сдвигаем вверх, *128; В нашем случае тут 0x0400
seg000:EAB60C
seg000:EAB60C loc_EAB60C: ; CODE XREF: ConvSiemensToUnicode+10Cj
seg000:EAB60C sub r6, #1
seg000:EAB60E jmpr cc_UC, loc_EAB632
seg000:EAB610 ; ---------------------------------------------------------------------------
seg000:EAB610
seg000:EAB610 LowerThan0x90: ; CODE XREF: ConvSiemensToUnicode+80j
seg000:EAB610 extp r15, #1
seg000:EAB612 movb rl7, [r14] ; Берем символ из строки
seg000:EAB614 movbz r7, rl7
seg000:EAB616 and r7, #7Fh ; Режем по 128
seg000:EAB61A mov r3, r9
seg000:EAB61C add r3, r7 ; Добавляем кодовую страницу
seg000:EAB61E extp r13, #2
seg000:EAB620 mov r7, [r12+2]
seg000:EAB624 mov r4, [r12+4]
seg000:EAB628 mov r5, r6
seg000:EAB62A shl r5, #1
seg000:EAB62C add r7, r5
seg000:EAB62E extp r4, #1
seg000:EAB630 mov [r7], r3 ; Результат пишем в буфер
seg000:EAB632
seg000:EAB632 loc_EAB632: ; CODE XREF: ConvSiemensToUnicode+122j
seg000:EAB632 add r14, #1
seg000:EAB634 add r6, #1
seg000:EAB636
seg000:EAB636 SymbolCycle: ; CODE XREF: seg000:DFF406J
seg000:EAB636 ; seg000:DFF446J ...
seg000:EAB636 extp r15, #1
seg000:EAB638 movb rl7, [r14] ; 0, последний байт строки ASCZ
seg000:EAB63A jmpr cc_Z, ZeroFound
seg000:EAB63C cmp r6, r2
seg000:EAB63E jmpr cc_C, NextSymbol
seg000:EAB640
seg000:EAB640 ZeroFound: ; CODE XREF: ConvSiemensToUnicode+14Ej
seg000:EAB640 sub r6, #1
seg000:EAB642 extp r13, #2
seg000:EAB644 mov r9, [r12+2]
seg000:EAB648 mov r7, [r12+4]
seg000:EAB64C extp r7, #1
seg000:EAB64E mov [r9], r6
seg000:EAB650 mov r4, r8
seg000:EAB652 mov r6, [r0+]
seg000:EAB654 mov r7, [r0+]
seg000:EAB656 mov r8, [r0+]
seg000:EAB658 mov r9, [r0+]
seg000:EAB65A rets
seg000:EAB65A ; End of function ConvSiemensToUnicode
seg000:EAB65A
|