📄 down.asm
字号:
dPcOk: .EQU 0x01
dEraseErr: .EQU 0x05
dPgmErr: .EQU 0x06
dPCCsErr: .EQU 0x07
dCardMessage: .EQU 0x07
ShakeWait1: .EQU 0xc000
ShakeWait2: .EQU 0x4000
_PcRecPage: .EQU 0x500
_FlashFlag: .EQU 0x500
_PgmSize: .EQU 0x501
_PgmErr: .EQU 0x502
DCount: .EQU 0x506
_DownLoadFlag: .EQU 0x510
_AckBook: .EQU 0x511
_CardFreePage: .EQU 0x512
_DownNandMaxBank: .EQU 0x513
_BookBlockBuf: .EQU 0x520
_BookNameBuf: .EQU 0x300
_NandLengthBuf0: .EQU 0x2c0
_NandLengthBuf1: .EQU 0x2c1
_NandLengthBuf2: .EQU 0x2c2
_NandLengthBuf3: .EQU 0x2c3
_BookNameSourceBuf: .EQU 0x2c4
_BookNameSourceBufEnd: .EQU 0x2e4
OldVersionBit: .EQU Bit0
DownLoad:
R1=0
[_DownLoadFlag]=R1
CALL ClearWatchDog
CALL DTDown
CALL ShakeHand
CMP R1, 0
JNE DownLoad_
PC=DownLoadErr8
DownLoad_:
CALL ClearWatchDog
CALL PcDataIn
R1=nINIT|_CEB
[P_IOB_Data]=R1
DownLoad0:
R1=[P_IOA_Data]
TEST R1, PcClkB
JE DownLoad0
R1=[P_IOA_Data]
TEST R1, PcClkB
JE DownLoad0
R1=[P_IOB_Data]
R1&=0xff
CMP R1,0x55
JNE DownLoad0
DownLoad1:
CALL ClearWatchDog
CALL PcRecByte
CMP R3, 0x55
JE DownLoad2
PC=DownLoadErr1
DownLoad2:
CALL PcRecByte
CMP R3, 0xaa
JE DownLoad3
PC=DownLoadErr2
DownLoad3:
CALL PcRecByte1
CMP R3, 0xd5
JNE DownLoad4
PC=DownLoadOldErase
DownLoad4:
R1=[_DownLoadFlag]
TEST R1, OldVersionBit
JE DownLoad5
CALL ClrPCAck
PC=DownLoadOldData
DownLoad5:
CALL ClrPCAck
CMP R3, 0x00
JNE DownLoad6
PC=DownLoadErr3
DownLoad6:
CMP R3, 0x08
JNE DownLoad7
PC=DownLoadData
DownLoad7:
CMP R3, 0x05
JNE DownLoad8
PC=DownLoadBookMess
DownLoad8:
CMP R3, 0x07
JCC DownLoad9
PC=DownLoadErr4
DownLoad9:
R1=R3
CALL TxHex
R3-=1
R3+=DownLoadTab
PC=[R3]
DownLoadTab:
.DW DownGetCardMess
.DW DownDeleteBook
.DW DownFinish
.DW DownFormate
.DW DownWait
.DW DownWait
DownLoadData:
CALL PcRecByte
CALL PcRecByte
DownLoadData_:
CALL DownASector
CMP R1, 0
JE DownLoadData1
PC=DownLoadErr5
DownLoadData1:
CALL PcDataOut
CALL ClearWatchDog
R1=[_PcRecPage]
CALL TxWord
R1=[_PcRecPage]
R1&=0x07
JNE DownLoadData2
CALL TxChg
DownLoadData2:
R1=[_DownLoadFlag]
TEST R1, OldVersionBit
JNE DownLoadData2__
R1=[_PcRecPage]
JE DownLoadData2__
CMP R1, 1
JNE DownLoadData2_
R1+=[_CardFreePage]
CALL EraseCurrentPageBlock
JMP DownLoadData2__
DownLoadData2_:
R1&=0x1f
JNE DownLoadData2__
R1=[_PcRecPage]
R1+=[_CardFreePage]
CALL EraseCurrentPageBlock
DownLoadData2__:
R1=[_PcRecPage]
R1+=[_CardFreePage]
CALL PgmSector
CMP R1, 0
JNE DownLoadPgmErr
// R1=[_PcRecPage]
// JE DownLoadDataFinish
DownLoadData3:
R1=dPcOk
CALL GivePcAck
PC=DownLoad_
DownLoadPgmErr:
CALL PrintPage
R1=dPgmErr
CALL GivePcAck
PC=DownLoadErr6
DownLoadDataFinish:
CALL PrOk
R1=[_DownLoadFlag]
TEST R1, OldVersionBit
JNE DownLoadOldDataFinish
PC=DownGetCardMess_
DownLoadOldData:
PC=DownLoadData_
DownLoadOldDataFinish:
PC=DownFinish_
DownGetCardMess:
R3=0xff
CALL PcRecByte1
DownGetCardMess_:
CALL PcDataOut
CALL IDChip
R1=[_NandMaxBank]
[_DownNandMaxBank]=R1
CALL GetCardMess
R1=[_HowManyBook]
JE DownGetCardMess__
R1=R1 LSL 4
R5=R1 LSL 1
R3=0x80
R4=0
R2=0x100
CALL ReadNandByteBuf
DownGetCardMess__:
R1=dCardMessage
CALL GivePcAck
R1=[_HowManyBook]
CALL AckByte
R1=[_DownNandMaxBank]
R1=R1 LSR 2
R1=R1 LSR 4
CALL AckByte
R1=[_HowManyBook]
JE DownGetCardMessEnd
R1=R1 LSL 4
R5=R1 LSL 1
R4=0x100
DownGetCardMessACK0:
R1=[R4++]
CALL AckByte
R5-=1
JNE DownGetCardMessACK0
DownGetCardMessEnd:
R3=[_EndAddr]
R4=[_EndBank]
R1=R3 LSR 4
R1=R1 LSR 4
R1=R1 LSR 1
R2=R4 LSL 4
R2=R2 LSL 3
R1|=R2
[_CardFreePage]=R1
PC=DownLoad_
DownLoadBookMess:
CALL PcRecByte
R4=0x100
R5=0
DownLoadBookMess0:
CALL PcRecByte
R5+=R3
[R4++]=R3
TEST R4, Bit5
JE DownLoadBookMess0
CALL PcRecByte
R4=R3 LSL 4
R4=R4 LSL 4
CALL PcRecByte1
R3|=R4
CMP R3, R5
JE DownLoadBookMove
PC=DownLoadErr7
DownLoadBookMove:
CALL PcDataOut
R3=0
R4=0
R2=0x200
R5=0x200
CALL ReadNandByteBuf
R1=[_HowManyBook]
R1+=1
[0x20a]=R1
R1=[_HowManyBook]
JNE DownLoadBookMove_
DownLoad1stBook:
R3=0x200
R4=CardCheckTab
DownLoad1stBook0:
R1=[R4++]
[R3++]=R1
TEST R3, Bit3
JE DownLoad1stBook0
DownLoadBookMove_:
R1=[_HowManyBook]
R1=R1 LSL 4
R1=R1 LSL 1
R3=R1+0x280
R4=0x100
DownLoadBookMove0:
R1=[R4++]
[R3++]=R1
TEST R4, Bit5
JE DownLoadBookMove0
R3-=8
R1=[_EndAddr]
R1&=0xff
[R3++]=R1
R1=[_EndAddr]
R1=R1 LSR 4
R1=R1 LSR 4
[R3++]=R1
R1=[_EndBank]
R1&=0xff
[R3++]=R1
R1=[_EndBank]
R1=R1 LSR 4
R1=R1 LSR 4
[R3++]=R1
R1=0
CALL EraseBlock
R1=0
CALL PgmSector
PC=DownGetCardMess_
DownDeleteBook:
CALL PcRecByte1
CALL PcDataOut
R1=[_HowManyBook]
JE DownDeleteBookEnd
R3=0
R4=0
R2=0x200
R5=0x200
CALL ReadNandByteBuf
R1=[_HowManyBook]
R1-=1
[0x20a]=R1
R1=0
CALL EraseBlock
R1=0
CALL PgmSector
DownDeleteBookEnd:
PC=DownGetCardMess_
DownFinish:
CALL PcRecByte1
CALL PcDataOut
DownFinish_:
R1=dPcOk
CALL GivePcAck
PC=UnitOff
DownWait:
CALL PcRecByte1
CALL PcDataOut
R1='*'
CALL TxByte
R1=dPcOk
CALL GivePcAck
PC=DownLoad_
DownFormate:
CALL PcRecByte1
CALL PcDataOut
CALL EraseAll
CMP R1, 0
JNE DownLoadErr9
PC=DownGetCardMess_
DownLoadOldErase:
CALL PcDataOut
CALL Delay1ms
CALL IDChip
CALL PrErase
CALL EraseAll
CMP R1, 0
JNE DownLoadErr9
DownLoadOldEraseOk:
R1=dPcOk
CALL GivePcAck
CALL PrPgm
R1=OldVersionBit
[_DownLoadFlag]=R1
R1=0
[_CardFreePage]=R1
PC=DownLoad_
DownLoadErr1:
R3=1
JMP DownLoadErr
DownLoadErr2:
R3=2
JMP DownLoadErr
DownLoadErr3:
R3=3
JMP DownLoadErr
DownLoadErr4:
R3=4
JMP DownLoadErr
DownLoadErr5:
R3=5
JMP DownLoadErr
DownLoadErr6:
R3=6
JMP DownLoadErr
DownLoadErr7:
R3=7
JMP DownLoadErr
DownLoadErr8:
R3=8
JMP DownLoadErr
DownLoadErr9:
R3=9
DownLoadErr:
CALL EnUart
R1='E'
CALL TxByte
R1='r'
CALL TxByte
R1='r'
CALL TxByte
R1=R3
CALL TxHex
CALL DiUart
PC=UnitOff
.ifdef DEBUG_PC
WaitDebug:
R2=R1
CALL EnUart
CALL Delay1ms
R4+=1
R1=R4&0x0ff
JNE WaitDebug2
R1=R4&0x1fff
JNE WaitDebug1
CALL TxChg
WaitDebug1:
R1=R2
CALL TxByte
CALL ClearWatchDog
WaitDebug2:
CALL DiUart
RETF
.endif
ShakeHand:
CALL ClearWatchDog
R5=8
R3=0
ShakeHand1:
R4=20
R2=ShakeWait2
ShakeHand10:
R2-=1
JNE ShakeHand1_
CALL ClearWatchDog
R2=ShakeWait2
R4-=1
JNE ShakeHand1_
PC=ShakeHand1Err
ShakeHand1_:
R1=[P_IOA_Data]
TEST R1, PcClkB
JE ShakeHand10
R1=[P_IOA_Data]
TEST R1, PcClkB
JE ShakeHand10
R1=[P_IOB_Data]
R1&=0x7f
CMP R1,0x55
JE ShakeHandOk
R1=[P_IOA_Buffer]
R1|=PcAckB
[P_IOA_Buffer]=R1
ShakeHand2:
CALL ClearWatchDog
R2=ShakeWait2
ShakeHand20:
R2-=1
JE ShakeHand2Err
R1=[P_IOA_Data]
TEST R1, PcClkB
JNE ShakeHand20
R1=[P_IOA_Data]
TEST R1, PcClkB
JNE ShakeHand20
CALL ClrPCAck
CALL EnUart
R1=R3
CALL TxHex
CALL DiUart
R3+=1
JMP ShakeHand1
ShakeHandOk:
R1=1
RETF
ShakeHand2Err:
CALL ClrPCAck
CALL PrintErr
CALL EnUart
R1=2
CALL TxHex
R1=R5
CALL TxHex
R1=R3
CALL TxHex
CALL DiUart
CALL Delay10ms
CALL Delay10ms
PC=ShakeHand1
ShakeHand1Err:
CALL PrintErr
CALL EnUart
R1=1
CALL TxHex
R1=R5
CALL TxHex
R1=R3
CALL TxHex
CALL DiUart
R5-=1
JE ShakeHand1Err_
PC=ShakeHand1
ShakeHand1Err_:
R1=0
RETF
DownASector:
R1='^'
CALL TxByte
R5=R3
R4=R3 LSL 4
R4=R4 LSL 4
[_PcRecPage]=R4
CALL PcRecByte
R5+=R3
R4=[_PcRecPage]
R4|=R3
[_PcRecPage]=R4
R3=0x200
R4=[P_IOA_Buffer]
CALL ClearWatchDog
R1=0x6000
[DCount]=R1
DownASector0:
R1=[DCount]
R1-=1
[DCount]=R1
JE DSErr1
R1=[P_IOA_Data]
TEST R1, PcClkB
JE DownASector0
R1=[P_IOA_Data]
TEST R1, PcClkB
JE DownASector0
R2=[P_IOB_Data]
R4|=PcAckB
[P_IOA_Buffer]=R4
R2&=0xff
[R3++]=R2
R5+=R2
R1=0x6000
[DCount]=R1
DownASector1:
R1=[DCount]
R1-=1
[DCount]=R1
JE DSErr2
R1=[P_IOA_Data]
TEST R1, PcClkB
JNE DownASector1
R1=[P_IOA_Data]
TEST R1, PcClkB
JNE DownASector1
CMP R3, 0x402
JE DownASectorEnd
R4&=PcAckB_
[P_IOA_Buffer]=R4
JMP DownASector0
DownASectorEnd:
R1='&'
CALL TxByte
R5-=[0x400]
R5-=[0x401]
R1=[0x400]
R1=R1 LSL 4
R1=R1 LSL 4
R1|=[0x401]
CMP R1, R5
JE DownASectorOk
DownASectorErr:
R1=1
RETF
DownASectorOk:
R1=0
RETF
DSErr1:
R1='#'
CALL TxByte
R1='1'
CALL TxByte
R1=R3
CALL TxWord
R1=1
RETF
DSErr2:
R1='#'
CALL TxByte
R1='2'
CALL TxByte
R1=R3
CALL TxWord
R1=1
RETF
AckByte:
R2=R1
R3=8
JMP GivePcAck1
GivePcAck:
R2=R1 LSL 4
R2=R2 LSL 1
R3=3
R1=[P_IOA_Buffer]
R1&=PcAckB_
[P_IOA_Buffer]=R1
GivePcAck1:
R1=[P_IOA_Data]
TEST R1, PcClkB
JE GivePcAck1
R1=[P_IOA_Data]
TEST R1, PcClkB
JE GivePcAck1
R1=[P_IOA_Buffer]
TEST R2, Bit7
JE GivePcAckLo
GivePcAckHi:
R1|=PcDatB
JMP GivePcAck_
GivePcAckLo:
R1&=PcDatB_
GivePcAck_:
[P_IOA_Buffer]=R1
R1=[P_IOA_Buffer]
R1|=PcAckB
[P_IOA_Buffer]=R1
GivePcAck2:
R1=[P_IOA_Data]
TEST R1, PcClkB
JNE GivePcAck2
R1=[P_IOA_Data]
TEST R1, PcClkB
JNE GivePcAck2
R1=[P_IOA_Buffer]
R1&=PcAckB_
[P_IOA_Buffer]=R1
R2=R2 LSL 1
R3-=1
JNE GivePcAck1
RETF
PcRecByte:
R1=[P_IOA_Data]
TEST R1, PcClkB
JE PcRecByte
R1=[P_IOA_Data]
TEST R1, PcClkB
JE PcRecByte
R3=[P_IOB_Data]
R3&=0xff
R1=[P_IOA_Buffer]
R1|=PcAckB
[P_IOA_Buffer]=R1
PcRecByte_:
R1=[P_IOA_Data]
TEST R1, PcClkB
JNE PcRecByte_
R1=[P_IOA_Data]
TEST R1, PcClkB
JNE PcRecByte_
R1=[P_IOA_Buffer]
R1&=PcAckB_
[P_IOA_Buffer]=R1
RETF
PcRecByte1:
R1=[P_IOA_Data]
TEST R1, PcClkB
JE PcRecByte1
R1=[P_IOA_Data]
TEST R1, PcClkB
JE PcRecByte1
R3=[P_IOB_Data]
R3&=0xff
R1=[P_IOA_Buffer]
R1|=PcAckB
[P_IOA_Buffer]=R1
PcRecByte1_:
R1=[P_IOA_Data]
TEST R1, PcClkB
JNE PcRecByte1_
R1=[P_IOA_Data]
TEST R1, PcClkB
JNE PcRecByte1_
RETF
ClrPCAck:
R1=[P_IOA_Buffer]
R1&=PcAckB_
[P_IOA_Buffer]=R1
RETF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -