⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 l55b4.asm

📁 Delphi Source for work with Siemens Mobile phones
💻 ASM
📖 第 1 页 / 共 2 页
字号:
Cmd_J:
                call    Rx_r1_r7
                call    FindEEPblk ; Use: r0, r2. r1 - num, r7 - len. r4:r5 = addr
                jmp     cc_Z, EntryNotFound  ;Z=1 "Entry not Found"
                mov     rl3, #4Eh       ; 'N'
                call    Tx_rl3
                mov     rl3, rh0        ; EEP ver
                call    Tx_rl3
                xor     r6, r6
                jmp     SendRamBuf      ; r4:r5=addr, r6:r7=size
; --------------- S U B R O U T I N E ---------------------------------------
Cmd_I:
                xor     r4, r4
                mov     r5, #SegEELITE
                xor     r6, r6
                mov     r7, #40h
                jmp     SendRamBuf     ; r4:r5=addr, r6:r7=size
; --------------- S U B R O U T I N E ---------------------------------------
Cmd_X:
                call    Rx_r4r5_r6r7
                call    Setr1r5 ; r4:r5 -> r1:r5
                mov     DPP1, r1
                add     r5, #4000h
                xor     r4, r4  ; CRC=0
loc_wrx1:
                mov     r0, r6
                or      r0, r7
                jmp     cc_Z, SendR4AndNextCmd ; SendCRC r4
                call    Rx_rl3
                mov     [r5], rl3
                mov     rl3, [r5+]
                xor     rl4, rl3
                add     rh4, rl3
                sub     r7, #1
                subc    r6, #0
                jnb     r5.14, loc_wrx1
                add     DPP1, #1
                mov     r5, #4000h
                jmp     loc_wrx1
; ---------------------------------------------------------------------------
Send_R4:
                mov     rl3, rl4
                call    Tx_rl3
                mov     rl3, rh4
$IF A70 or A75 or AX75
Tx_rl3:
                bclr    S0EIR
                extr    #1
                movbz   PP3, rl3
loc_9C4:
                jnb     S0EIR, loc_9C4
                ret

Rx_rl3:
                jnb     SSCTIR, Rx_rl3
                bclr    SSCTIR
                extr    #1
                movbz   r3, byte_F040
                ret
$IF ENABLE_INT3
Int_T3:
                bmovn   T2CON.9, T2CON.9
                extr    #1
                mov     word_F0C8, #632Ch
                reti
$ENDIF
$ELSE
Tx_rl3:
                bclr    S0TIR
                movbz   S0TBUF, rl3
loc_866:
                jnb     S0TIR, loc_866
                ret
Rx_rl3:
                jnb     S0RIR, Rx_rl3
                bclr    S0RIR
                movbz   r3, S0RBUF
                ret
$IF ENABLE_INT3
Int_T3:
                bmovn   P4.1, P4.1
$IF A50
                mov     T3, #0C62h
$ELSE
                mov     T3, #632Ch
                bmovn   P4.2, P4.2
$ENDIF
                reti
$ENDIF
$ENDIF
; ---------------------------------------------------------------------------
Rx_r4r5_r6r7:
                xor     r4, r4
                call    Rx_rl3
                mov     rl4, rl3
                call    Rx_rl3
                mov     rh5, rl3
                call    Rx_rl3
                mov     rl5, rl3
Rx_r6r7:
                xor     r6, r6
                call    Rx_rl3
                mov     rl6, rl3
                call    Rx_rl3
                mov     rh7, rl3
                call    Rx_rl3
                mov     rl7, rl3
                                ret
; --------------- S U B R O U T I N E ---------------------------------------
FindEELITE:
                mov     DPP1, SegEELITE ; assume dpp1: 1E8h (page 0x7A0000);r0
FindEELITE_:
find_next_ees:
                mov     r5, #4010h
find_next_eel:
                mov     r3, [r5+#0]
                cmp     r3, #0FEFEh
                jmp     cc_NZ, noeel
                mov     r3, [r5+#2]
                cmp     r3, #04545h
                jmp     cc_NZ, noeel
                mov     r3, [r5+#4]
$IF A50
                cmp     r3, #05546h
                jmp     cc_NZ, noeel
                mov     r3, [r5+#6]
                cmp     r3, #04C4Ch
$ELSE
                cmp     r3, #0494Ch
                jmp     cc_NZ, noeel
                mov     r3, [r5+#6]
                cmp     r3, #04554h
$ENDIF
                jmp     cc_Z, find_eeilte_ok
noeel:
                add     r5, #70h
                jb      r5.7, find_next_eel
                add     DPP1, #1
                mov     r3, DPP1
                and     r3, #03FFh      ;03FFh<<14=0xFFC000
                jmp     cc_NZ, find_next_ees
find_eeilte_ok:
                mov     r3, #SegEELITE
                mov     [r3], DPP1
                or      r3, r3
                ret                    ;NZ -> Ok, Z=1  -> "Entry not Found"
; ---------------------------------------------------------------------------
; r1 - num
; r7 - len
; Out:
; NZ -> Ok, r4:r5 addr, rh0 = ver
; Z=1  -> "Entry not Found"
FindEEPblk:
;                mov     r3, SegEELITE
                call    FindEELITE
;                mov     DPP1, r3 ; assume dpp1: 1E8h (page 0x7A0000);r0
;                or      r3, r3
                jmp     cc_Z, loc_noeel
                mov     r5, #5000h
find_next_addr:
                mov     r0, [r5]          ; ID + EEP ver
                cmp     rl0, #0FCh
                jmp     cc_NZ, noblkeep
                mov     r3, [r5+#02h]       ; EEP len
                cmp     r3, r7
                jmp     cc_NZ, noblkeep
                mov     r3, [r5+#08h]       ; EEP number
                cmp     r3, r1
                jmp     cc_NZ, noblkeep
                mov     r3, [r5+#0Ah]      ; ID 00FCh
                cmp     r3, #0FC00h
                jmp     cc_NZ, noblkeep
                mov     r4, [r5+#06h]       ; seg
                mov     r5, [r5+#04h]       ; off
                and     r4, #000FFh
                ret                    ;NZ -> Ok, Z=1  -> "Entry not Found"
noblkeep:
                add     r5, #4
                cmp     r5, #07FF5h    ;8000h-12=07FF4h
                jmp     cc_C, find_next_addr
                add     DPP1, #1
                mov     r5, #4000h
loc_tstad1:
                mov     r3, DPP1
                and     r3, #003Fh     ;3Fh<<14=0xFC000+0x4000=0x100000>>14=0x40
                jmp     cc_NZ, find_next_addr
yesblkeep:
                or      r3, r3         ;NZ(Z=0) -> Ok
loc_noeel:
                ret                    ;Z=1 -> "Entry not Found"
; --------------- S U B R O U T I N E ---------------------------------------
Cmd_F:
                call    Rx_rl3
                mov     rh1, rl3
                call    Rx_rl3
                mov     rl1, rl3
                call    Test_FlashPar
                jmp     cc_Z, SendRl3AndNextCmd
                call    ClearFlashSeg
                call    Tx_rl2
                call    RxBlkToBufRam
                call    ClearFlashSegTest
                mov     r3, r7
                call    Tx_rl3
                mov     rl3, rh7
                call    Tx_rl3
                call    WriteFlashBlk
                call    SetBaseSegFlash
                call    SecSiFlashExit          ; call    FlashExit
                call    Calk_CRC
                jmp     SendR4AndNextCmd        ; Next_cmd
; --------------- S U B R O U T I N E ---------------------------------------
SetBaseSegFlash:
                mov     r5, r1       ;0FA0h
                shr     r5, #2       ;0FA0h>>2=0x3E8
                mov     DPP1, r5     ;0x3E8<<14=0xFA0000
                mov     r5, r1       ;0FA0h
                shl     r5, #0Ch     ;0FA0h<<12=0x0000
                and     r5, #03FFFh   ;0x4000&0x7FFF=0x4000
                add     r5, #04000h
                ret
; --------------- S U B R O U T I N E ---------------------------------------
Test_FlashPar:
                mov     r0, r1
                sub     r2, r2
                mov     r3, #FlashSize  ;=800h =400h
                mov     r8, #1000h
                sub     r8, [r3]      ;1000h-0800h=0800h 1000h-0400h=0C00h
;$IF A70 or A75 or AX75
                cmp     r8, #0801h
                jmp     cc_C, loc_above8meg
                mov     r8, #0800h
loc_above8meg:
;$ENDIF
                sub     r0, r8        ;0FA0h-0800h=07A0h 0BA0h-0800h=03A0h
                jmp     cc_C, calk_reg_err
                mov     r3, #CFISegs
                movb    rl5, [r3+] ;CFISegs
calk_reg_x1:
                mov     r8, [r3+]  ;CFISegN1 3Fh
                add     r8, #1     ;40h
                mov     r2, [r3+]  ;CFISegS1 =200h
                shr     r2, #4     ;200h>>4=20h
calk_reg_x2:
                sub     r0, r2     ; 7A0h/20h=0x3D
                jmp     cc_C, calk_reg_ok
                sub     r8, #1
                jmp     cc_NZ, calk_reg_x2
                sub     rl5, #1
                jmp     cc_NZ, calk_reg_x1
calk_reg_err:
                mov     r3, #0ffh
                sub     r2, r2
                ret
calk_reg_ok:
                mov     r3, r2
$IF AX75
                mov     CCM4, #20h
                cmp     r1, #200h
                jmp     cc_NC, calk_reg_end
                mov     CCM4, #0
                add     r1, #800h
$ENDIF
;$IF A75
;                mov     CCM4, #20h
;                cmp     r1, #200h
;                jmp     cc_NC, calk_reg_end
;                mov     CCM4, #0
;                add     r1, #800h
;$ENDIF
$IF A65
                mov     P8, #0
                mov     DP8, #1801h
                cmp     r1, #200h
                jmp     cc_NC, calk_reg_end
                mov     P8, #0
                mov     DP8, #0
                add     r1, #800h
$ENDIF
$IF M55
                cmp     r1, #200h
                jmp     cc_NC, loc_m55sf1
                extr    #2
                mov     word_F134, #9002h
                mov     word_F136, #2
                mov     P8, #1000h
                mov     DP8, #1800h
                add     r1, #800h
                jmp     calk_reg_end
loc_m55sf1:
                extr    #3
                mov     word_F134, #9802h
                mov     word_F136, #802h
                mov     word_F13E, #66h
                mov     P8, #0FFFFh
                mov     DP8, #0FFFFh
$ENDIF
calk_reg_end:
                cmp     r2, #0
                ret
; --------------- S U B R O U T I N E ---------------------------------------
; r2 - 觐

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -