📄 protocol.asm
字号:
.func 555
;>>>> void lock_mul_blk_pro(void)
;>>>> uchar flags,addr,n_b;
;>>>> uchar i,j,l;
******************************************************
* FUNCTION DEF : _lock_mul_blk_pro
******************************************************
_lock_mul_blk_pro:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,8
LAR AR0,*0+,AR2
.sym _flags,1,12,1,16
.sym _addr,2,12,1,16
.sym _n_b,3,12,1,16
.sym _i,4,12,1,16
.sym _j,5,12,1,16
.sym _l,6,12,1,16
.sym _flag,7,12,1,16
.line 5
;>>>> uchar flag = 0;
LACK 0
LARK AR2,7
MAR *0+
SACL *
.line 7
;>>>> addr = pcdata[1];
SBRK 5
BLKD #_pcdata+1,*-
.line 9
;>>>> flags = pcdata[4]&0x07;
LACK 7
LDPK _pcdata+4
AND _pcdata+4
SACL *
.line 10
;>>>> if( (flags==0)||(flags==2) ) //不带uid
LAC *
BZ LL19
LAC *
SUBK 2
BNZ L110
LL19:
.line 12
;>>>> if(flags==0) { flags = ISOFlagsSys&0xcf;}
LAC *
BNZ L111
LACK 207
LDPK _ISOFlagsSys
AND _ISOFlagsSys
SACL *
B L112
L111:
.line 13
;>>>> else { flags = ISOFlagsSys|0x10;} //select_flag
LACK 16
LDPK _ISOFlagsSys
OR _ISOFlagsSys
SACL *
L112:
.line 14
;>>>> flags |= 0x40; //option_flag
ORK 64
SACL *
.line 16
;>>>> n_b = pcdata[6] ; //db_n
ADRK 2
BLKD #_pcdata+6,*
.line 17
;>>>> if(pcdata[5] >63) { flag = 1;} //db_adr ,首地址不能超过63
LDPK _pcdata+5
ZALS _pcdata+5
SUBK 63
BLEZ L113
LACK 1
ADRK 4
SACL *
L113:
.line 18
;>>>> if(n_b > 32) { flag = 1;} //一次锁定的块数不能超过32
LARK AR2,3
MAR *0+
ZALS *
SUBK 32
BLEZ L114
LACK 1
ADRK 4
SACL *
L114:
.line 19
;>>>> if(flag == 0)
LARK AR2,7
MAR *0+
LAC *
BNZ L115
.line 21
;>>>> ISOMode = ISOModeSys | 0x10; // write
LACK 16
LDPK _ISOModeSys
OR _ISOModeSys
LDPK _ISOMode
SACL _ISOMode
.line 22
;>>>> for(l=0;l<(n_b+1);l++)
LACK 0
MAR *-
SACL *
SBRK 3
ZALS *
ADDK 1
ANDK 0FFFFh
ADRK 3
SUBS *
BLEZ L117
SBRK 5
L116:
.line 24
;>>>> viccdata[0] = 6;
LACK 6
LDPK _viccdata
SACL _viccdata
.line 25
;>>>> viccdata[1] = flags;
BLDD * ,#_viccdata+1,AR1
.line 26
;>>>> viccdata[2] = 0x22;
LACK 34
LDPK _viccdata+2
SACL _viccdata+2
.line 27
;>>>> viccdata[3] = pcdata[5];
LDPK _pcdata+5
BLDD _pcdata+5,#_viccdata+3
.line 28
;>>>> wr_crc_send();
CALL _wr_crc_send
.line 29
;>>>> j = sendISOCmd();
CALL _sendISOCmd
MAR * ,AR2
LARK AR2,5
MAR *0+
SACL *
.line 30
;>>>> CS_RAM_1;
LACK 63487
LDPK _MCRC
AND _MCRC
SACL _MCRC
LACK 2056
LDPK _PFDATDIR
OR _PFDATDIR
SACL _PFDATDIR
.line 31
;>>>> if((j==0)||(viccdata[1]!=0)) {break;} //跳出循环并返回错误地址
LAC *
BZ L117
LDPK _viccdata+1
LAC _viccdata+1
BNZ L117
.line 32
;>>>> else { pcdata[5] ++ ; }
LDPK _pcdata+5
LAC _pcdata+5
ADDK 1
SACL _pcdata+5
.line 33
;>>>> mutiBlockWrDelay();
CALL _mutiBlockWrDelay,AR1
.line 22
MAR * ,AR2
LARK AR2,6
MAR *0+
LAC *
ADDK 1
SACL *
SBRK 3
ZALS *
ADDK 1
ANDK 0FFFFh
ADRK 3
SUBS *
SBRK 5
BGZ L116
L117:
.line 36
;>>>> if( deviceAddr == pcdata[1] ) //本机地址返回
LDPK _deviceAddr
LAC _deviceAddr
LDPK _pcdata+1
SUB _pcdata+1
BNZ L125
.line 38
;>>>> if(j==0) //无返
LARK AR2,5
MAR *0+
LAC *
BNZ L120
.line 40
;>>>> pcdata[0] = 7;
LACK 7
LDPK _pcdata
SACL _pcdata
.line 41
;>>>> pcdata[1] = deviceAddr;
LDPK _deviceAddr
BLDD _deviceAddr,#_pcdata+1
.line 42
;>>>> pcdata[2] = 0xb0;
LACK 176
LDPK _pcdata+2
SACL _pcdata+2
.line 43
;>>>> pcdata[3] = 0x03; //no response
LACK 3
LDPK _pcdata+3
SACL _pcdata+3
.line 44
;>>>> pcdata[4] = pcdata[5];
LDPK _pcdata+5
BLDD _pcdata+5,#_pcdata+4
.line 45
;>>>> wr_crc_resp();
CALL _wr_crc_resp,AR1
B L125
L120:
.line 47
;>>>> else if(viccdata[1]!=0)
LDPK _viccdata+1
LAC _viccdata+1
BZ L122
.line 49
;>>>> pcdata[0] = 8;
LACK 8
LDPK _pcdata
SACL _pcdata
.line 50
;>>>> pcdata[1] = deviceAddr;
LDPK _deviceAddr
BLDD _deviceAddr,#_pcdata+1
.line 51
;>>>> pcdata[2] = ISO_MANDATORY_CMD;
LACK 176
LDPK _pcdata+2
SACL _pcdata+2
.line 52
;>>>> pcdata[3] = ISO_ERR; //iso err 0x95
LACK 149
LDPK _pcdata+3
SACL _pcdata+3
.line 53
;>>>> pcdata[4] = viccdata[2]; //iso err code
LDPK _viccdata+2
BLDD _viccdata+2,#_pcdata+4
.line 54
;>>>> pcdata[5] = pcdata[5]; //err block addr
LDPK _pcdata+5
BLDD _pcdata+5,#_pcdata+5
.line 55
;>>>> wr_crc_resp();
;>>>> else
CALL _wr_crc_resp,AR1
B L125
L122:
.line 59
;>>>> pcdata[0] = 6;
LACK 6
LDPK _pcdata
SACL _pcdata
.line 60
;>>>> pcdata[1] = deviceAddr;
LDPK _deviceAddr
BLDD _deviceAddr,#_pcdata+1
.line 61
;>>>> pcdata[2] = ISO_MANDATORY_CMD;
LACK 176
LDPK _pcdata+2
SACL _pcdata+2
.line 62
;>>>> pcdata[3] = OK; // OK
LACK 0
LDPK _pcdata+3
SACL _pcdata+3
.line 63
;>>>> wr_crc_resp();
;>>>> else
CALL _wr_crc_resp,AR1
B L125
L115:
.line 69
;>>>> if( deviceAddr == pcdata[1]) ////本机地址返回 块数和地址错误
LDPK _deviceAddr
LAC _deviceAddr
LDPK _pcdata+1
SUB _pcdata+1
BNZ L125
.line 70
;>>>> resp_para_err();
CALL _resp_para_err,AR1
B L125
L110:
.line 73
;>>>> else if(flags==1) //带uid模式
LAC *
SUBK 1
BNZ L126
.line 75
;>>>> n_b = pcdata[14]; //块长度
ADRK 2
BLKD #_pcdata+14,*
.line 76
;>>>> flags = ISOFlagsSys|0x20; // address_flag
LACK 32
LDPK _ISOFlagsSys
OR _ISOFlagsSys
SBRK 2
SACL *
.line 77
;>>>> flags |= 0x40; // option_flag
ORK 64
SACL *
.line 79
;>>>> if(pcdata[13] >63) { flag = 1;} //首地址不能超过63
LDPK _pcdata+13
ZALS _pcdata+13
SUBK 63
BLEZ L127
LACK 1
ADRK 6
SACL *
L127:
.line 80
;>>>> if(n_b >32) { flag = 1; } //一次锁定的块数不能超过32
LARK AR2,3
MAR *0+
ZALS *
SUBK 32
BLEZ L128
LACK 1
ADRK 4
SACL *
L128:
.line 81
;>>>> if(flag == 0)
LARK AR2,7
MAR *0+
LAC *
BNZ L129
.line 83
;>>>> for(l=0;l<(n_b+1);l++)
LACK 0
MAR *-
SACL *
SBRK 3
ZALS *
ADDK 1
ANDK 0FFFFh
ADRK 3
SUBS *
BLEZ L131
SBRK 5
L130:
.line 85
;>>>> viccdata[0] = 14;
LACK 14
LDPK _viccdata
SACL _viccdata
.line 86
;>>>> viccdata[1] = flags;
BLDD * ,#_viccdata+1
.line 87
;>>>> viccdata[2] = 0x22;
LACK 34
LDPK _viccdata+2
SACL _viccdata+2
.line 88
;>>>> ISOMode = ISOModeSys | 0x10; // write
LACK 16
LDPK _ISOModeSys
OR _ISOModeSys
LDPK _ISOMode
SACL _ISOMode
.line 89
;>>>> for(i=3,j=12;i<11;i++,j--) { viccdata[i] = pcdata[j];}
LACK 3
ADRK 3
SACL *+
LACK 12
SACL *-
ZALS *
SUBK 11
BGEZ L133
MAR *+
L132:
LAC *-,AR0
ADLK _pcdata+0,0
SACL *
LAR AR3,* ,AR2
LAC * ,AR0
ADLK _viccdata+0,0
SACL *
LAR AR4,* ,AR3
LAC * ,AR4
SACL * ,AR2
LAC *
ADDK 1
SACL *+
LAC *
SUBK 1
SACL *-
ZALS *+
SUBK 11
BLZ L132
L133:
.line 90
;>>>> viccdata[11] = pcdata[13]; //block number
LDPK _pcdata+13
BLDD _pcdata+13,#_viccdata+11
.line 91
;>>>> wr_crc_send();
CALL _wr_crc_send,AR1
.line 92
;>>>> j = sendISOCmd();
CALL _sendISOCmd
MAR * ,AR2
LARK AR2,5
MAR *0+
SACL *
.line 93
;>>>> CS_RAM_1;
LACK 63487
LDPK _MCRC
AND _MCRC
SACL _MCRC
LACK 2056
LDPK _PFDATDIR
OR _PFDATDIR
SACL _PFDATDIR
.line 94
;>>>> if((j==0)||(viccdata[1]!=0)) {break;} //跳出循环并返回错误地址/
LAC *
BZ L131
LDPK _viccdata+1
LAC _viccdata+1
BNZ L131
.line 95
;>>>> else { pcdata[13] ++ ; }
LDPK _pcdata+13
LAC _pcdata+13
ADDK 1
SACL _pcdata+13
.line 83
MAR *+
LAC *
ADDK 1
SACL *
SBRK 3
ZALS *
ADDK 1
ANDK 0FFFFh
ADRK 3
SUBS *
SBRK 5
BGZ L130
L131:
.line 98
;>>>> if( deviceAddr == pcdata[1] ) //本机执行返回
LDPK _deviceAddr
LAC _deviceAddr
LDPK _pcdata+1
SUB _pcdata+1
BNZ L125
.line 100
;>>>> if(j==0) //无返
LARK AR2,5
MAR *0+
LAC *
BNZ L136
.line 102
;>>>> pcdata[0] = 7;
LACK 7
LDPK _pcdata
SACL _pcdata
.line 103
;>>>> pcdata[1] = deviceAddr;
LDPK _deviceAddr
BLDD _deviceAddr,#_pcdata+1
.line 104
;>>>> pcdata[2] = ISO_MANDATORY_CMD;
LACK 176
LDPK _pcdata+2
SACL _pcdata+2
.line 105
;>>>> pcdata[3] = 0x03; //no response
LACK 3
LDPK _pcdata+3
SACL _pcdata+3
.line 106
;>>>> pcdata[4] = pcdata[13];
LDPK _pcdata+13
BLDD _pcdata+13,#_pcdata+4
.line 107
;>>>> wr_crc_resp();
CALL _wr_crc_resp,AR1
B L125
L136:
.line 109
;>>>> else if(viccdata[1]!=0)
LDPK _viccdata+1
LAC _viccdata+1
BZ L138
.line 111
;>>>> pcdata[0] = 8;
LACK 8
LDPK _pcdata
SACL _pcdata
.line 112
;>>>> pcdata[1] = deviceAddr;
LDPK _deviceAddr
BLDD _deviceAddr,#_pcdata+1
.line 113
;>>>> pcdata[2] = ISO_MANDATORY_CMD;
LACK 176
LDPK _pcdata+2
SACL _pcdata+2
.line 114
;>>>> pcdata[3] = ISO_ERR; //iso err
LACK 149
LDPK _pcdata+3
SACL _pcdata+3
.line 115
;>>>> pcdata[4] = viccdata[2]; //iso err code
LDPK _viccdata+2
BLDD _viccdata+2,#_pcdata+4
.line 116
;>>>> pcdata[5] = pcdata[13]; //err block addr
LDPK _pcdata+13
BLDD _pcdata+13,#_pcdata+5
.line 117
;>>>> wr_crc_resp();
;>>>> else
CALL _wr_crc_resp,AR1
B L125
L138:
.line 121
;>>>> pcdata[0] = 6;
LACK 6
LDPK _pcdata
SACL _pcdata
.line 122
;>>>> pcdata[1] = deviceAddr;
LDPK _deviceAddr
BLDD _deviceAddr,#_pcdata+1
.line 123
;>>>> pcdata[2] = ISO_MANDATORY_CMD;
LACK 176
LDPK _pcdata+2
SACL _pcdata+2
.line 124
;>>>> pcdata[3] = OK; // OK
LACK 0
LDPK _pcdata+3
SACL _pcdata+3
.line 125
;>>>> wr_crc_resp();
;>>>> else
CALL _wr_crc_resp,AR1
B L125
L129:
.line 131
;>>>> if( deviceAddr == pcdata[1] ) //块数和地址错误
LDPK _deviceAddr
LAC _deviceAddr
LDPK _pcdata+1
SUB _pcdata+1
BNZ L125
.line 132
;>>>> resp_para_err();
;>>>> else //mode错误
CALL _resp_para_err,AR1
B L125
L126:
.line 137
;>>>> if( deviceAddr == pcdata[1] )
LDPK _deviceAddr
LAC _deviceAddr
LDPK _pcdata+1
SUB _pcdata+1
BNZ L125
.line 138
;>>>> resp_para_err();
CALL _resp_para_err,AR1
L125:
EPI0_13:
.line 140
MAR * ,AR1
SBRK 9
LAR AR0,*-
PSHD *
RET
.endfunc 694,000000000H,8
.sym _rd_mul_blk_pro,_rd_mul_blk_pro,32,2,0
.globl _rd_mul_blk_pro
.func 696
;>>>> void rd_mul_blk_pro(void)
;>>>> uchar flags,len,n_b,addr;
;>>>> uchar i,j,k;
******************************************************
* FUNCTION DEF : _rd_mul_blk_pro
******************************************************
_rd_mul_blk_pro:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,9
LAR AR0,*0+,AR2
.sym _flags,1,12,1,16
.sym _len,2,12,1,16
.sym _n_b,3,12,1,16
.sym _addr,4,12,1,16
.sym _i,5,12,1,16
.sym _j,6,12,1,16
.sym _k,7,12,1,16
.sym _flag,8,12,1,16
.line 5
;>>>> uchar flag = 0;
LACK 0
LARK AR2,8
MAR *0+
SACL *
.line 7
;>>>> addr = pcdata[1];
SBRK 4
BLKD #_pcdata+1,*
.line 8
;>>>> flags = pcdata[4]&0x07;
LACK 7
LDPK _pcdata+4
AND _pcdata+4
SBRK 3
SACL *
.line 9
;>>>> if( (flags==0)||(flags==2) ) //不带uid
LAC *
BZ LL24
LAC *
SUBK 2
BNZ L142
LL24:
.line 11
;>>>> if(pcdata[5] >63) { flag = 1;} // 块地址不超过64
LDPK _pcdata+5
ZALS _pcdata+5
SUBK 63
BLEZ L143
LACK 1
ADRK 7
SACL *
L143:
.line 12
;>>>> if(pcdata[6] >32) { flag = 1;} // 最多一次读取32个块
LDPK _pcdata+6
ZALS _pcdata+6
SUBK 32
BLEZ L144
LACK 1
LARK AR2,8
MAR *0+
SACL *
L144:
.line 13
;>>>> if(flag == 0)
LARK AR2,8
MAR *0+
LAC *
BNZ L149
.line 15
;>>>> n_b = pcdata[6]; //块长度
SBRK 5
BLKD #_pcdata+6,*
.line 16
;>>>> if(flags==0) { flags = ISOFlagsSys&0xcf;}
SBRK 2
LAC *
BNZ L146
LACK 207
LDPK _ISOFlagsSys
AND _ISOFlagsSys
SACL *
B L147
L146:
.line 17
;>>>> else { flags = ISOFlagsSys|0x10;} //select_flag
LACK 16
LDPK _ISOFlagsSys
OR _ISOFlagsSys
SACL *
L147:
.line 18
;>>>> if((ISOModeSys & 0x04) == 0x04) { flags |= 0x40; } //option_flag
LACK 4
LDPK _ISOModeSys
AND _ISOModeSys
SUBK 4
BNZ L148
LACK 64
OR *
SACL *
L148:
.line 19
;>>>> viccdata[0] = 7;
LACK 7
LDPK _viccdata
SACL _viccdata
.line 20
;>>>> viccdata[1] = flags;
BLDD
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -