KonstanT Признанный телефонист Откуда: UA, Kyiv, UMC С нами с: 20.09.2002 Плодовитость: 544
Рейтинг
Подано 69 (48/21) голосов
|
ИРИАИРИ...ШАШР!
|
А какие нужны опции, чтобы L166 готовый бинарник выдавал, без всякой требухи. Чтобы его в флеш закатывать. В мануале дофига страниц читать.., кой-чего убрал, но не до конца.
И ещё: вот пример функции GetMem из С25-го.
Выбрал его, поскольку в любой прошиве есть она... Интересно узнать, сильно изменена она в других аппаратах...
ROM:14CF2E ; --------------- S U B R O U T I N E ---------------------------------------
ROM:14CF2E
ROM:14CF2E ; R12=^Heap, R13=Length(var)
ROM:14CF2E
ROM:14CF2E GetMem: ; CODE XREF: sub_10E990+12P
ROM:14CF2E ; sub_14C1E6+CP ...
ROM:14CF2E mov [-r0], r13
ROM:14CF2E Находит в "куче" свободный указатель, способный разместить строку
ROM:14CF2E необходимой длины (R13 -длина строки, R12 - адрес управляющего блока)
ROM:14CF2E На выходе: R4=адрес начала строки; R4=0 в случае неудачи.
ROM:14CF30 mov [-r0], r12
ROM:14CF32 mov [-r0], r9
ROM:14CF34 mov [-r0], r8
ROM:14CF36 mov [-r0], r7
ROM:14CF38 mov [-r0], r6
ROM:14CF3A sub r0, #4
ROM:14CF3C mov r6, [r0+0Eh]
ROM:14CF40 and r6, #7FFEh
ROM:14CF44 mov r4, [r0+0Ch]
ROM:14CF48 mov r9, [r4+8]
ROM:14CF4C mov r5, [r9]
ROM:14CF4E jmpr cc_Z, ToResetHeap
ROM:14CF50 jmpr cc_UC, loc_14CF5C
ROM:14CF52 ; ---------------------------------------------------------------------------
ROM:14CF52
ROM:14CF52 loc_14CF52: ; CODE XREF: GetMem+32j
ROM:14CF52 mov r4, [r9] ; Сначала отслеживается цепь указателей,
ROM:14CF54 and r4, #0FFFEh ; пока не обнаружится "свободный" указатель
ROM:14CF58 mov [r0], r4 ; (у которого сброшен бит 0)
ROM:14CF5A mov r9, r4
ROM:14CF5C
ROM:14CF5C loc_14CF5C: ; CODE XREF: GetMem+22j
ROM:14CF5C mov r4, [r9]
ROM:14CF5E and r4, #1
ROM:14CF60 jmpr cc_NZ, loc_14CF52
ROM:14CF62 mov r4, [r9]
ROM:14CF64 jmpr cc_Z, ToResetHeap
ROM:14CF66 mov r4, [r0+0Ch]
ROM:14CF6A mov [r4+8], r9 ; R9 - "свободный" указатель
ROM:14CF6E
ROM:14CF6E CollectFreeSpaces: ; CODE XREF: GetMem+F0j
ROM:14CF6E mov r8, [r9] ; R8 - следующий указатель
ROM:14CF70 jmpr cc_UC, loc_14CF84
ROM:14CF72 ; ---------------------------------------------------------------------------
ROM:14CF72
ROM:14CF72 loc_14CF72: ; CODE XREF: GetMem+5Ej
ROM:14CF72 mov r4, [r8] ; Если следующий указатель указывает
ROM:14CF74 mov r8, r4 ; на свободный указатель, то он принимает
ROM:14CF76 mov [r9], r8 ; его значение.
ROM:14CF78 mov r4, [r0+0Ch] ; (Объединение свободных мест)
ROM:14CF7C add r4, #6
ROM:14CF7E mov r5, [r4]
ROM:14CF80 add r5, #2
ROM:14CF82 mov [r4], r5
ROM:14CF84
ROM:14CF84 loc_14CF84: ; CODE XREF: GetMem+42j
ROM:14CF84 mov r4, [r8]
ROM:14CF86 and r4, #1
ROM:14CF88 jmpr cc_NZ, loc_14CF8E
ROM:14CF8A mov r4, [r8]
ROM:14CF8C jmpr cc_NZ, loc_14CF72
ROM:14CF8E
ROM:14CF8E loc_14CF8E: ; CODE XREF: GetMem+5Aj
ROM:14CF8E mov r4, [r9]
ROM:14CF90 and r4, #0FFFEh
ROM:14CF94 mov [r0], r4
ROM:14CF96 mov r7, r4
ROM:14CF98 mov r2, r9
ROM:14CF9A sub r7, r2
ROM:14CF9C sub r7, #2
ROM:14CF9E sub r7, r6
ROM:14CFA0 cmp r7, #0 ; R7=разнице свободного места и длины строки
ROM:14CFA2 jmpr cc_SLT, InsuffGap ; Если строка не помещается...
ROM:14CFA4 mov r5, r6
ROM:14CFA6 add r5, r7
ROM:14CFA8 mov r2, [r0+0Ch]
ROM:14CFAC add r2, #6
ROM:14CFAE mov r3, [r2]
ROM:14CFB0 sub r3, r5
ROM:14CFB2 mov [r2], r3
ROM:14CFB4 mov r4, r7
ROM:14CFB6 sub r4, #0Ah ; Если длина "остатка" строки
ROM:14CFBA cmp r4, #0 ; больше 10 байт,
ROM:14CFBC jmpr cc_SLT, NoRecalcPointers
ROM:14CFBE mov r4, r9 ; то указатели переносятся,
ROM:14CFC0 add r4, #2 ; чтобы сделать его доступным
ROM:14CFC2 add r4, r6
ROM:14CFC4 mov [r0+2], r4
ROM:14CFC8 mov [r4], r8
ROM:14CFCA mov r4, [r0+2]
ROM:14CFCE mov [r9], r4
ROM:14CFD0 mov r4, r7
ROM:14CFD2 sub r4, #2
ROM:14CFD4 mov r5, [r0+0Ch]
ROM:14CFD8 add r5, #6
ROM:14CFDA mov r2, [r5]
ROM:14CFDC add r2, r4
ROM:14CFDE mov [r5], r2
ROM:14CFE0
ROM:14CFE0 NoRecalcPointers: ; CODE XREF: GetMem+8Ej
ROM:14CFE0 mov r4, [r9]
ROM:14CFE2 or r4, #1
ROM:14CFE4 mov [r9], r4
ROM:14CFE6 mov r4, [r0+0Ch]
ROM:14CFEA mov r5, [r4+6]
ROM:14CFEE mov r2, [r4+4]
ROM:14CFF2 cmp r5, r2
ROM:14CFF4 jmpr cc_NC, loc_14CFFE
ROM:14CFF6 mov r5, [r4+6]
ROM:14CFFA mov [r4+4], r5
ROM:14CFFE
ROM:14CFFE loc_14CFFE: ; CODE XREF: GetMem+C6j
ROM:14CFFE mov r4, r9
ROM:14D000 add r4, #2
ROM:14D002 jmpr cc_UC, SuccExit
ROM:14D004 ; ---------------------------------------------------------------------------
ROM:14D004
ROM:14D004 InsuffGap: ; CODE XREF: GetMem+74j
ROM:14D004 cmp r8, #0
ROM:14D006 jmpr cc_Z, ToResetHeap
ROM:14D008 mov r9, r8
ROM:14D00A jmpr cc_UC, FindNextPointer
ROM:14D00C ; ---------------------------------------------------------------------------
ROM:14D00C
ROM:14D00C loc_14D00C: ; CODE XREF: GetMem+ECj
ROM:14D00C mov r4, [r9]
ROM:14D00E and r4, #0FFFEh
ROM:14D012 mov [r0], r4
ROM:14D014 mov r9, r4
ROM:14D016
ROM:14D016 FindNextPointer: ; CODE XREF: GetMem+DCj
ROM:14D016 mov r4, [r9]
ROM:14D018 and r4, #1
ROM:14D01A jmpr cc_NZ, loc_14D00C
ROM:14D01C mov r4, [r9]
ROM:14D01E jmpr cc_NZ, CollectFreeSpaces
ROM:14D020
ROM:14D020 ToResetHeap: ; CODE XREF: GetMem+20j
ROM:14D020 ; GetMem+36j ...
ROM:14D020 mov r4, [r0+0Eh]
ROM:14D024 and r4, #8000h
ROM:14D028 jmpr cc_Z, ErrExit
ROM:14D02A mov r12, [r0+0Ch]
ROM:14D02E calls 14h, RefreshHeap
ROM:14D032
ROM:14D032 ErrExit: ; CODE XREF: GetMem+FAj
ROM:14D032 mov r4, #0
ROM:14D034
ROM:14D034 SuccExit: ; CODE XREF: GetMem+D4j
ROM:14D034 add r0, #4
ROM:14D036 mov r6, [r0+]
ROM:14D038 mov r7, [r0+]
ROM:14D03A mov r8, [r0+]
ROM:14D03C mov r9, [r0+]
ROM:14D03E add r0, #4
ROM:14D040 rets
ROM:14D040 ; End of function GetMem
P.S. Siemens-club - это диагноз... |
____________________________
... |
|