📄 l55b4.asm
字号:
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 + -