📄 mifare1.src
字号:
SETB C
SUBB A,#03H
JC ?C0004
; {
; SOURCE LINE # 110
; cnt = 0;
; SOURCE LINE # 111
CLR A
MOVX @DPTR,A
; beep(3, 25);
; SOURCE LINE # 112
MOV R5,#019H
MOV R7,#03H
LCALL _beep
; }
; SOURCE LINE # 113
; }
; SOURCE LINE # 114
; }
; SOURCE LINE # 115
; }
; SOURCE LINE # 116
; }
; SOURCE LINE # 117
SJMP ?C0004
?C0005:
; else
; {
; SOURCE LINE # 119
; cnt = 0;
; SOURCE LINE # 120
CLR A
MOV DPTR,#cnt?144
MOVX @DPTR,A
; if(fCardIn)
; SOURCE LINE # 121
JNB fCardIn?143,?C0004
; {
; SOURCE LINE # 122
; fCardIn = 0;
; SOURCE LINE # 123
CLR fCardIn?143
; fWaitCmd = 0;
; SOURCE LINE # 124
CLR fWaitCmd
;
; if(fRFCBeep)
; SOURCE LINE # 126
JNB fRFCBeep,?C0016
; {
; SOURCE LINE # 127
; beep(1, 40);
; SOURCE LINE # 128
MOV R5,#028H
MOV R7,#01H
LCALL _beep
; }
; SOURCE LINE # 129
?C0016:
;
; CardLed(1, 0);
; SOURCE LINE # 131
SETB ?CardLed?BIT
CLR ?CardLed?BIT+01H
LCALL CardLed
;
; if(fNotice)
; SOURCE LINE # 133
JNB fNotice,?C0004
; {
; SOURCE LINE # 134
; buf[0] = RFCARD;
; SOURCE LINE # 135
MOV DPTR,#buf?142
MOV A,#0FEH
MOVX @DPTR,A
; buf[1] = 0;
; SOURCE LINE # 136
CLR A
INC DPTR
MOVX @DPTR,A
;
; #if 1
; CommSendNotWaitAck(buf, 2); /////////////////////////////////////
; SOURCE LINE # 139
MOV R3,#01H
MOV R2,#HIGH (buf?142)
MOV R1,#LOW (buf?142)
MOV R5,#02H
MOV R4,A
LCALL _CommSendNotWaitAck
; #else
; CommSend(buf, 2);
; #endif
; }
; SOURCE LINE # 143
; }
; SOURCE LINE # 144
; }
; SOURCE LINE # 145
; }
; SOURCE LINE # 146
?C0004:
;
; if(fWaitCmd)
; SOURCE LINE # 148
JNB fWaitCmd,?C0020
; {
; SOURCE LINE # 149
; if(GetTickCount() - waitcmdtime >= 1000)
; SOURCE LINE # 150
LCALL GetTickCount
MOV DPTR,#waitcmdtime?141
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
CLR C
MOV A,R7
SUBB A,R5
MOV R7,A
MOV A,R6
SUBB A,R4
MOV R6,A
CLR C
MOV A,R7
SUBB A,#0E8H
MOV A,R6
SUBB A,#03H
JC ?C0020
; {
; SOURCE LINE # 151
; fCardIn = 0;
; SOURCE LINE # 152
CLR fCardIn?143
; fWaitCmd = 0;
; SOURCE LINE # 153
CLR fWaitCmd
; beep(3, 25);
; SOURCE LINE # 154
MOV R5,#019H
MOV R7,#03H
LCALL _beep
; }
; SOURCE LINE # 155
; }
; SOURCE LINE # 156
; }
; SOURCE LINE # 157
?C0020:
RET
; END OF M1Card
;
; // excute the command for m1 card from host
; unsigned int M1Command(unsigned char *cmd, unsigned int len)
RSEG ?PR?_M1Command?MIFARE1
_M1Command:
USING 0
; SOURCE LINE # 160
MOV DPTR,#cmd?245
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
INC DPTR
MOV A,R4
MOVX @DPTR,A
INC DPTR
MOV A,R5
MOVX @DPTR,A
; {
; SOURCE LINE # 161
; unsigned char m1sector; // m1卡命令针对的扇区
; unsigned char m1block; // m1卡命令针对的块号
; long epvalue;
; long oldepvalue;
; unsigned char epstatus = 0x03;
; SOURCE LINE # 166
MOV DPTR,#epstatus?266
MOV A,#03H
MOVX @DPTR,A
; unsigned char m1keyidx;
; bit fkeypassed;
; unsigned char *m1data;
; int i;
;
; // clear waiting cmd flag
; fWaitCmd = 0;
; SOURCE LINE # 173
CLR fWaitCmd
;
; m1sector = cmd[2];
; SOURCE LINE # 175
MOV DPTR,#cmd?245
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#02H
LCALL ?C?CLDOPTR
MOV DPTR,#m1sector?262
MOVX @DPTR,A
; m1block = cmd[3];
; SOURCE LINE # 176
MOV DPTR,#03H
LCALL ?C?CLDOPTR
MOV DPTR,#m1block?263
MOVX @DPTR,A
; m1data = cmd + 4;
; SOURCE LINE # 177
MOV A,R1
ADD A,#04H
MOV R1,A
CLR A
ADDC A,R2
MOV R2,A
MOV DPTR,#m1data?269
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
;
; ///////////////////////////////////////
; // request card!
; if(!M1Search(snr))
; SOURCE LINE # 181
LCALL L?0267
JC ?C0021
; {
; SOURCE LINE # 182
; // error
; cmd[0] = FAIL;
; SOURCE LINE # 184
MOV DPTR,#cmd?245
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV A,#01H
LCALL ?C?CSTPTR
; cmd[1] = MI_NOTAGERR;
; SOURCE LINE # 185
MOV DPTR,#cmd?245
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#01H
MOV A,#01H
; return 2;
; SOURCE LINE # 186
LJMP ?C0246
; }
; SOURCE LINE # 187
?C0021:
;
; if(cmd[1] == CMD_GETSNR) // get card snr
; SOURCE LINE # 189
MOV DPTR,#cmd?245
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#01H
LCALL ?C?CLDOPTR
JNZ ?C0023
; {
; SOURCE LINE # 190
; if(len != 2)
; SOURCE LINE # 191
MOV DPTR,#len?246
MOVX A,@DPTR
JNZ ?C0184
INC DPTR
MOVX A,@DPTR
XRL A,#02H
?C0184:
JZ ?C0024
; {
; SOURCE LINE # 192
; cmd[0] = ERRORCMDLEN;
; SOURCE LINE # 193
; return 1;
; SOURCE LINE # 194
LJMP ?C0250
; }
; SOURCE LINE # 195
?C0024:
;
; // copy snr to cmd
; cmd[0] = SUCCESS;
; SOURCE LINE # 198
CLR A
LCALL ?C?CSTPTR
; memcpy(cmd+1, snr, 4);
; SOURCE LINE # 199
MOV DPTR,#cmd?245
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
ADD A,#01H
MOV R1,A
CLR A
ADDC A,R2
XCH A,R0
MOV A,R1
XCH A,R0
MOV R4,A
XCH A,R5
MOV A,R3
XCH A,R5
MOV R3,#01H
MOV R2,#HIGH (snr)
MOV R1,#LOW (snr)
MOV R6,#00H
MOV R7,#04H
LCALL ?C?COPY
; return 5;
; SOURCE LINE # 200
LJMP ?C0249
; }
; SOURCE LINE # 201
?C0023:
;
; if(cmd[1] == CMD_AUTH) // auth card with specified key
; SOURCE LINE # 203
MOV DPTR,#cmd?245
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#01H
LCALL ?C?CLDOPTR
XRL A,#01H
JNZ ?C0025
; {
; SOURCE LINE # 204
; if(len != 10)
; SOURCE LINE # 205
MOV DPTR,#len?246
MOVX A,@DPTR
JNZ ?C0185
INC DPTR
MOVX A,@DPTR
XRL A,#0AH
?C0185:
JZ ?C0026
; {
; SOURCE LINE # 206
; cmd[0] = ERRORCMDLEN;
; SOURCE LINE # 207
?C0207:
; return 1;
; SOURCE LINE # 208
LJMP ?C0250
; }
; SOURCE LINE # 209
?C0026:
;
; m1sector &= 0x7f; // mask the invalid msb
; SOURCE LINE # 211
MOV DPTR,#m1sector?262
MOVX A,@DPTR
ANL A,#07FH
MOVX @DPTR,A
MOV R6,A
; i = M1Auth(m1block, m1data, m1sector);
; SOURCE LINE # 212
INC DPTR
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#m1data?269
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#?_M1Auth?BYTE+04H
MOV A,R6
MOVX @DPTR,A
LCALL _M1Auth
MOV R6,#00H
MOV DPTR,#i?270
MOV A,R6
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
; if(MI_OK != i)
; SOURCE LINE # 213
MOV DPTR,#cmd?245
JZ ?C0027
; {
; SOURCE LINE # 214
; cmd[0] = FAIL;
; SOURCE LINE # 215
; cmd[1] = i;
; SOURCE LINE # 216
; return 2;
; SOURCE LINE # 217
LJMP ?C0227
; }
; SOURCE LINE # 218
?C0027:
; else
; {
; SOURCE LINE # 220
; cmd[0] = SUCCESS;
; SOURCE LINE # 221
; return 1;
; SOURCE LINE # 222
LJMP ?C0211
; }
; SOURCE LINE # 223
; }
; SOURCE LINE # 224
?C0025:
; else if(cmd[1] == CMD_LDKEY)
; SOURCE LINE # 225
MOV DPTR,#cmd?245
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#01H
LCALL ?C?CLDOPTR
XRL A,#0BH
JZ $ + 5H
LJMP ?C0029
; {
; SOURCE LINE # 226
; if((len < 10) && (len != 2))
; SOURCE LINE # 227
MOV DPTR,#len?246
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
CLR C
SUBB A,#0AH
MOV A,R6
SUBB A,#00H
JNC ?C0031
MOV A,R7
XRL A,#02H
ORL A,R6
JZ ?C0031
; {
; SOURCE LINE # 228
; cmd[0] = ERRORCMDLEN;
; SOURCE LINE # 229
?C0209:
; return 1;
; SOURCE LINE # 230
LJMP ?C0250
; }
; SOURCE LINE # 231
?C0031:
;
; len -= 2;
; SOURCE LINE # 233
MOV DPTR,#len?246+01H
MOVX A,@DPTR
ADD A,#0FEH
MOVX @DPTR,A
MOV DPTR,#len?246
MOVX A,@DPTR
ADDC A,#0FFH
MOVX @DPTR,A
; if((len & 0x07) != 0) // len % 8
; SOURCE LINE # 234
INC DPTR
MOVX A,@DPTR
ANL A,#07H
JZ ?C0032
; {
; SOURCE LINE # 235
; cmd[0] = ERRORCMDLEN;
; SOURCE LINE # 236
?C0212:
; return 1;
; SOURCE LINE # 237
LJMP ?C0250
; }
; SOURCE LINE # 238
?C0032:
;
; len >>= 3; // len = len / 8;
; SOURCE LINE # 240
MOV DPTR,#len?246
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R0,#03H
?C0186:
XCH A,R6
CLR C
RRC A
XCH A,R6
RRC A
DJNZ R0,?C0186
MOV R7,A
MOV DPTR,#len?246
MOV A,R6
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
; if(len > m1keycntmax) // too much keys
; SOURCE LINE # 241
MOV DPTR,#m1keycntmax
CLR A
MOVC A,@A+DPTR
MOV R5,A
SETB C
MOV A,R7
SUBB A,R5
MOV A,R6
SUBB A,#00H
JC ?C0033
; {
; SOURCE LINE # 242
; cmd[0] = ERRORCMDLEN;
; SOURCE LINE # 243
?C0213:
; return 1;
; SOURCE LINE # 244
LJMP ?C0250
; }
; SOURCE LINE # 245
?C0033:
;
; // check if there are same key sector in the data
; for(i=0; i<len-1; i++)
; SOURCE LINE # 248
CLR A
MOV DPTR,#i?270
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
?C0034:
MOV DPTR,#len?246+01H
MOVX A,@DPTR
ADD A,#0FFH
MOV R7,A
MOV DPTR,#len?246
MOVX A,@DPTR
ADDC A,#0FFH
MOV R6,A
MOV DPTR,#i?270
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
CLR C
SUBB A,R7
MOV A,R4
SUBB A,R6
JC $ + 5H
LJMP ?C0035
; {
; SOURCE LINE # 249
; unsigned char i1;
; bit fsame = 0;
; SOURCE LINE # 251
CLR fsame?248
;
; for(i1=i+1; i1<len; i1++)
; SOURCE LINE # 253
MOV A,R5
INC A
INC DPTR
MOVX @DPTR,A
?C0037:
MOV DPTR,#i1?247
MOVX A,@DPTR
MOV R7,A
SETB C
MOV DPTR,#len?246+01H
MOVX A,@DPTR
SUBB A,R7
MOV DPTR,#len?246
MOVX A,@DPTR
SUBB A,#00H
JC ?C0038
; {
; SOURCE LINE # 254
; if(cmd[2+(i<<3)] > 0x7f)
; SOURCE LINE # 255
MOV DPTR,#i?270
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R0,#03H
?C0187:
CLR C
RLC A
XCH A,R6
RLC A
XCH A,R6
DJNZ R0,?C0187
ADD A,#02H
MOV R7,A
CLR A
ADDC A,R6
MOV R6,A
MOV DPTR,#cmd?245
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPL,R7
MOV DPH,R6
LCALL ?C?CLDOPTR
MOV R5,A
SETB C
SUBB A,#07FH
JC ?C0040
; {
; SOURCE LINE # 256
; fsame = 1;
; SOURCE LINE # 257
SETB fsame?248
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -