📄 protocol.asm
字号:
******************************************************
* FUNCTION DEF : _wr_crc_send
******************************************************
_wr_crc_send:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,3
LAR AR0,*0+,AR2
.sym _m,1,14,1,16
.sym _len,2,12,1,16
.line 5
;>>>> len = viccdata[0];
LARK AR2,2
MAR *0+
BLKD #_viccdata,*
.line 6
;>>>> len -= 3;
LAC *
SUBK 3
SACL *
.line 7
;>>>> m = crc16Calculate(viccdata+1,len); //
LAC * ,AR1
SACL *+
LALK _viccdata+1
SACL *+
CALL _crc16Calculate
SBRK 2
MAR * ,AR2
LARK AR2,1
MAR *0+
SACL *+
.line 8
;>>>> len ++;
LAC *
ADDK 1
SACL *-
.line 9
;>>>> viccdata[len++] = m&0x00ff; //crc_low
LACK 255
AND *+,AR1
SACL * ,AR2
LAC *
ADDK 1
SACL *-,AR0
SUBK 1
ADLK _viccdata+0,0
SACL *
LAR AR3,* ,AR1
LAC * ,AR3
SACL * ,AR2
.line 10
;>>>> viccdata[len] = m>>8; //crc_high
RSXM
LAC *+,7,AR1
SACH * ,1,AR2
LAC * ,AR0
ADLK _viccdata+0,0
SACL *
LAR AR3,* ,AR1
LAC * ,AR3
SACL * ,AR1
EPI0_6:
.line 11
SBRK 4
LAR AR0,*-
PSHD *
RET
.endfunc 126,000000000H,3
.sect ".cinit"
.word IS1,_curSlot
.long 0
IS1 .set 2
.sym _curSlot,_curSlot,63,3,512,,16
.word IS2,_curSlot1
.long 0
IS2 .set 2
.sym _curSlot1,_curSlot1,63,3,512,,16
.word IS3,_collFlag0
.word 0
IS3 .set 1
.sym _collFlag0,_collFlag0,60,3,256,,16
.word IS4,_collFlag1
.word 0
IS4 .set 1
.sym _collFlag1,_collFlag1,60,3,256,,16
.text
.sym _invStayQuiet,_invStayQuiet,32,2,0
.globl _invStayQuiet
.func 141
;>>>> void invStayQuiet()
******************************************************
* FUNCTION DEF : _invStayQuiet
******************************************************
_invStayQuiet:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,5
LAR AR0,*0+,AR2
.sym _flags,1,12,1,16
.sym _i,2,12,1,16
.sym _m,3,12,1,16
.sym _num,4,12,1,16
.line 3
;>>>> uchar flags = 0;
;>>>> uchar i,m,num;
LACK 0
LARK AR2,1
MAR *0+
SACL *
.line 6
;>>>> num = invUid[0];
ADRK 3
BLKD #_invUid,*
.line 7
;>>>> if(num>0) //keep quiet
LAC *
BZ L11
.line 9
;>>>> for(m=0;m<num;m++)
LACK 0
MAR *-
SACL *
ZALS *+
SUBS *
BGEZ L11
SBRK 3
L12:
.line 11
;>>>> flags = ISOFlagsSys|0x0020; //address_flag
LACK 32
LDPK _ISOFlagsSys
OR _ISOFlagsSys
SACL *
.line 12
;>>>> viccdata[0] = 0x0d; //len
LACK 13
LDPK _viccdata
SACL _viccdata
.line 13
;>>>> viccdata[1] = flags; //flags
BLDD *+,#_viccdata+1
.line 14
;>>>> viccdata[2] = Stay_quit_cmd; //cmd
LACK 2
LDPK _viccdata+2
SACL _viccdata+2
.line 15
;>>>> for(i=0;i<8;i++) { viccdata[3+i] = invUid[m*8+8-i]; }//copy uid
LACK 0
SACL *
ZALS *
SUBK 8
BGEZ L15
MAR *+
RSXM ;;;
L14:
LAC *-,3
ADDK 8
ADLK _invUid+0,0
SUB * ,AR0
SACL *
LAR AR3,* ,AR2
LAC * ,AR0
ADLK _viccdata+3,0
SACL *
LAR AR4,* ,AR3
LAC * ,AR4
SACL * ,AR2
LAC *
ADDK 1
SACL *
ZALS *+
SUBK 8
BLZ L14
L15:
.line 16
;>>>> wr_crc_send();
CALL _wr_crc_send,AR1
.line 18
;>>>> ISOMode = ISOModeSys;
LDPK _ISOModeSys
BLDD _ISOModeSys,#_ISOMode
.line 19
;>>>> sendISOCmd();
CALL _sendISOCmd
.line 20
;>>>> CS_RAM_1;
LACK 63487
LDPK _MCRC
AND _MCRC
SACL _MCRC
LACK 2056
LDPK _PFDATDIR
OR _PFDATDIR
SACL _PFDATDIR
.line 9
MAR * ,AR2
LARK AR2,3
MAR *0+
LAC *
ADDK 1
SACL *
ZALS *+
SUBS *
SBRK 3
BLZ L12
L11:
.line 23
;>>>> for(i=0;i<145;i++)
LACK 0
LARK AR2,2
MAR *0+
SACL *
ZALS *
SUBK 145
BGEZ L17
L16:
.line 24
;>>>> invUid[i] = 0; // clr to 0
LAC * ,AR0
ADLK _invUid+0,0
SACL *
LAR AR3,* ,AR3
LACK 0
SACL * ,AR2
.line 23
LAC *
ADDK 1
SACL *
ZALS *
SUBK 145
BLZ L16
L17:
EPI0_7:
.line 25
MAR * ,AR1
SBRK 6
LAR AR0,*-
PSHD *
RET
.endfunc 165,000000000H,5
.sect ".cinit"
.word 1,_globalErrFlag
.word 0
.sym _globalErrFlag,_globalErrFlag,12,2,16
.globl _globalErrFlag
.text
.sym _myInvOut,_myInvOut,32,2,0
.globl _myInvOut
.func 167
;>>>> void myInvOut()
;>>>> int i,ii,m,j,slotCounter,num_card;
******************************************************
* FUNCTION DEF : _myInvOut
******************************************************
_myInvOut:
POPD *+
SAR AR0,*+
SAR AR1,*
LARK AR0,10
LAR AR0,*0+,AR2
.sym _i,1,4,1,16
.sym _ii,2,4,1,16
.sym _m,3,4,1,16
.sym _j,4,4,1,16
.sym _slotCounter,5,4,1,16
.sym _num_card,6,4,1,16
.sym _flags,7,12,1,16
.line 4
;>>>> uchar flags =0;
LACK 0
LARK AR2,7
MAR *0+
SACL *
.line 6
;>>>> labeldata[0]=0;
LDPK _labeldata
SACL _labeldata
.line 7
;>>>> invUid[0] = 0;
;>>>> /////////////////////////////1///////////////////////////////
LDPK _invUid
SACL _invUid
.line 9
;>>>> for(slotCounter=0;slotCounter<16;slotCounter++)
SBRK 2
SACL *
SSXM
LAC *
SUBK 16
BGEZ L19
ADRK 2
L18:
.line 11
;>>>> flags = ISOFlagsSys | 0x0004; //inventory_flag
LACK 4
LDPK _ISOFlagsSys
OR _ISOFlagsSys
SACL *
.line 12
;>>>> viccdata[0] = 0x06; //len
LACK 6
LDPK _viccdata
SACL _viccdata
.line 13
;>>>> viccdata[1] = flags; //flags
BLDD * ,#_viccdata+1,AR1
.line 14
;>>>> viccdata[2] = 0x01; //cmd
LACK 1
LDPK _viccdata+2
SACL _viccdata+2
.line 15
;>>>> viccdata[3] = 0; //mask length
LACK 0
LDPK _viccdata+3
SACL _viccdata+3
.line 16
;>>>> wr_crc_send(); //without optional afi
CALL _wr_crc_send
.line 18
;>>>> ISOMode = ISOModeSys&0xe7; //read all,read,wr_op
LACK 231
LDPK _ISOModeSys
AND _ISOModeSys
LDPK _ISOMode
SACL _ISOMode
.line 19
;>>>> if(slotCounter!=0)ISOMode |= 0x80; //next slot
MAR * ,AR2
LARK AR2,5
MAR *0+
LAC *
BZ L20
LACK 128
OR _ISOMode
SACL _ISOMode
L20:
.line 20
;>>>> m = sendISOCmd();
CALL _sendISOCmd,AR1
MAR * ,AR2
LARK AR2,3
MAR *0+
SACL *
.line 21
;>>>> CS_RAM_1;
LACK 63487
LDPK _MCRC
AND _MCRC
SACL _MCRC
LACK 2056
LDPK _PFDATDIR
OR _PFDATDIR
SACL _PFDATDIR
.line 23
;>>>> if(viccdata[0] == 1)globalErrFlag = 0xff; // iso error
LDPK _viccdata
LAC _viccdata
SUBK 1
BNZ L21
LACK 255
LDPK _globalErrFlag
SACL _globalErrFlag
L21:
.line 25
;>>>> if(m==2) {collFlag0[slotCounter]=0xaa;} //collision flag
LAC *
SUBK 2
BNZ L22
ADRK 2
LAC * ,AR0
ADLK _collFlag0+0,0
SACL *
LAR AR3,* ,AR3
LACK 170
SACL *
B L23
L22:
.line 26
;>>>> else if(m==1)
LAC *
SUBK 1
BNZ L23
.line 28
;>>>> labeldata[0] += 1;
LDPK _labeldata
LAC _labeldata
ADDK 1
SACL _labeldata
.line 29
;>>>> invUid[0] += 1;
LDPK _invUid
LAC _invUid
ADDK 1
SACL _invUid
.line 30
;>>>> labeldata[ (labeldata[0]-1)*10 + 1 ] = 0x03; //tr-type
LDPK _labeldata
LAC _labeldata
SUBK 1
MAR *+,AR0
SACL *
LT *
MPYK 10
PAC
ADLK _labeldata+1,0
SACL *
LAR AR3,* ,AR3
LACK 3
SACL * ,AR0
.line 31
;>>>> labeldata[ (labeldata[0]-1)*10 + 2 ] = viccdata[2];//dsfid
LAC _labeldata
SUBK 1
SACL *
LT *
MPYK 10
PAC
ADLK _labeldata+2,0
SACL *
LAR AR3,* ,AR3
BLKD #_viccdata+2,* ,AR2
.line 32
;>>>> for(j=0;j<8;j++)
LACK 0
SACL *
SSXM
LAC *
SUBK 8
BGEZ L23
MAR * ,AR0
L25:
.line 34
;>>>> labeldata[ (labeldata[0]-1)*10+3+j ] = viccdata[10-j];//uid
LDPK _labeldata
LAC _labeldata
SUBK 1
SACL *
LT * ,AR2
MPYK 10
PAC
ADDK 3
RSXM
ADLK _labeldata+0,0
ADD * ,AR0
SACL *
LAR AR3,* ,AR2
LALK _viccdata+10
SUB * ,AR0
SACL *
LAR AR4,* ,AR4
LAC * ,AR3
SACL * ,AR2
.line 35
;>>>> invUid[ (invUid[0]-1)*8+1+j ] = viccdata[10-j];
LDPK _invUid
LAC _invUid,3
SUBK 7
ADLK _invUid+0,0
ADD * ,AR0
SACL *
LAR AR3,* ,AR2
LALK _viccdata+10
SUB * ,AR0
SACL *
LAR AR4,* ,AR4
LAC * ,AR3
SACL * ,AR2
.line 32
LAC *
ADDK 1
SACL *
SSXM
LAC * ,AR0
SUBK 8
BLZ L25
L23:
.line 9
MAR * ,AR2
LARK AR2,5
MAR *0+
LAC *
ADDK 1
SACL *
SSXM
LAC *
SUBK 16
ADRK 2
BLZ L18
L19:
.line 39
;>>>> invStayQuiet();
;>>>> /////////////////////////////2//////////////////////////////////////
CALL _invStayQuiet,AR1
.line 41
;>>>> for(i=0;i<16;i++)
LACK 0
MAR * ,AR2
LARK AR2,1
MAR *0+
SACL *
SSXM
LAC *
SUBK 16
BGEZ L28
L27:
.line 43
;>>>> if(collFlag0[i] == 0xaa)
LAC * ,AR0
ADLK _collFlag0+0,0
SACL *
LAR AR3,* ,AR3
LAC *
SUBK 170
BNZ L29
.line 45
;>>>> collFlag0[i] = 0x0; // clr collision flag
MAR * ,AR2
LAC * ,AR0
ADLK _collFlag0+0,0
SACL *
LAR AR3,* ,AR3
LACK 0
SACL * ,AR2
.line 46
;>>>> for(slotCounter=0;slotCounter<16;slotCounter++)
ADRK 4
SACL *
SSXM
LAC *
SUBK 16
BGEZ L31
ADRK 2
L30:
.line 48
;>>>> flags = ISOFlagsSys|0x04; //inventory_flag
LACK 4
LDPK _ISOFlagsSys
OR _ISOFlagsSys
SACL *
.line 49
;>>>> viccdata[0] = 0x07; //len
LACK 7
LDPK _viccdata
SACL _viccdata
.line 50
;>>>> viccdata[1] = flags; //flags
BLDD * ,#_viccdata+1
.line 51
;>>>> viccdata[2] = 0x01; //cmd
LACK 1
LDPK _viccdata+2
SACL _viccdata+2
.line 52
;>>>> viccdata[3] = 0x04; //mask length
LACK 4
LDPK _viccdata+3
SACL _viccdata+3
.line 53
;>>>> viccdata[4] = i; //mask value
SBRK 6
BLDD * ,#_viccdata+4,AR1
.line 54
;>>>> wr_crc_send(); //without optional afi
CALL _wr_crc_send
.line 56
;>>>> ISOMode = ISOModeSys&0xe7; //read all,read,wr_op
LACK 231
LDPK _ISOModeSys
AND _ISOModeSys
LDPK _ISOMode
SACL _ISOMode
.line 57
;>>>> if(slotCounter!=0)ISOMode |= 0x80; //next slot
MAR * ,AR2
LARK AR2,5
MAR *0+
LAC *
BZ L32
LACK 128
OR _ISOMode
SACL _ISOMode
L32:
.line 58
;>>>> m = sendISOCmd();
CALL _sendISOCmd,AR1
MAR * ,AR2
LARK AR2,3
MAR *0+
SACL *
.line 59
;>>>> CS_RAM_1;
LACK 63487
LDPK _MCRC
AND _MCRC
SACL _MCRC
LACK 2056
LDPK _PFDATDIR
OR _PFDATDIR
SACL _PFDATDIR
.line 61
;>>>> if(viccdata[0] == 1)globalErrFlag = 0xff; // iso error
LDPK _viccdata
LAC _viccdata
SUBK 1
BNZ L33
LACK 255
LDPK _globalErrFlag
SACL _globalErrFlag
L33:
.line 63
;>>>> if(m==2){collFlag1[i] = 0xaa;curSlot[slotCounter] = (slotCounter<<4) | i;}
LAC *
SUBK 2
BNZ L34
SBRK 2
LAC * ,AR0
ADLK _collFlag1+0,0
SACL *
LAR AR3,* ,AR3
LACK 170
SACL * ,AR2
ADRK 4
LAC * ,4
SBRK 4
OR * ,AR1
SACL *
SSXM
LAC * ,AR2
ADRK 7
SACL *+
SACH *
SBRK 4
LAC * ,1,AR0
ADLK _curSlot+0,0
SACL *
LAR AR3,* ,AR2
ADRK 3
ZALS *+
ADDH * ,AR3
SACL *+
SACH *-
B L35
L34:
.line 64
;>>>> else if(m==1)
LAC *
SUBK 1
BNZ L35
.line 66
;>>>> labeldata[0] += 1;
LDPK _labeldata
LAC _labeldata
ADDK 1
SACL _labeldata
.line 67
;>>>> invUid[0] += 1;
LDPK _invUid
LAC _invUid
ADDK 1
SACL _invUid
.line 68
;>>>> labeldata[ (labeldata[0]-1)*10 + 1 ] = 0x03; //tr-type
LDPK _labeldata
LAC _labeldata
SUBK 1
MAR *+,AR0
SACL *
LT *
MPYK 10
PAC
ADLK _labeldata+1,0
SACL *
LAR AR3,* ,AR3
LACK 3
SACL * ,AR0
.line 69
;>>>> labeldata[ (labeldata[0]-1)*10 + 2 ] = viccdata[2];//dsfid
LAC _labeldata
SUBK 1
SACL *
LT *
MPYK 10
PAC
ADLK _labeldata+2,0
SACL *
LAR AR3,* ,AR3
BLKD #_viccdata+2,* ,AR2
.line 70
;>>>> for(j=0;j<8;j++)
LACK 0
SACL *
SSXM
LAC *
SUBK 8
BGEZ L35
MAR * ,AR0
L37:
.line 72
;>>>> labeldata[ (labeldata[0]-1)*10+3+j ] = viccdata[10-j];//uid
LDPK _labeldata
LAC _labeldata
SUBK 1
SACL *
LT * ,AR2
MPYK 10
PAC
ADDK 3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -