📄 mfrc500uc.lis
字号:
05E6 E0910C01 lds R30,_MRcvBuffer
05EA F0910D01 lds R31,_MRcvBuffer+1
05EE 2080 ldd R2,z+0
05F0 EA85 ldd R30,y+10
05F2 FB85 ldd R31,y+11
05F4 2082 std z+0,R2
05F6 .dbline 252
05F6 ; memcpy(MLastSelectedSnr,snr,4);
05F6 84E0 ldi R24,4
05F8 90E0 ldi R25,0
05FA 9983 std y+1,R25
05FC 8883 std y+0,R24
05FE 9B01 movw R18,R22
0600 00E0 ldi R16,<_MLastSelectedSnr
0602 10E0 ldi R17,>_MLastSelectedSnr
0604 0E940000 xcall _memcpy
0608 .dbline 253
0608 ; }
0608 L102:
0608 .dbline 254
0608 ; }
0608 L99:
0608 .dbline 255
0608 ; }
0608 L89:
0608 .dbline 256
0608 ; return status;
0608 042F mov R16,R20
060A .dbline -2
060A L88:
060A 2496 adiw R28,4
060C 0E940000 xcall pop_gset3
0610 .dbline 0 ; func end
0610 0895 ret
0612 .dbsym r status 20 I
0612 .dbsym l sak 10 pc
0612 .dbsym r snr 22 pc
0612 .dbsym r select_code 10 c
0612 .dbend
0612 .dbfunc e Mf500PcdSetDefaultAttrib _Mf500PcdSetDefaultAttrib fc
0612 ; status -> R16,R17
.even
0612 _Mf500PcdSetDefaultAttrib::
0612 .dbline -1
0612 .dbline 259
0612 ; }
0612 ; char Mf500PcdSetDefaultAttrib(void)
0612 ; {
0612 .dbline 260
0612 ; int status = MI_OK;
0612 0027 clr R16
0614 1127 clr R17
0616 .dbline 261
0616 ; return status;
0616 .dbline -2
0616 L104:
0616 .dbline 0 ; func end
0616 0895 ret
0618 .dbsym r status 16 I
0618 .dbend
0618 .dbfunc e Mf500PiccAuth _Mf500PiccAuth fc
0618 ; status -> R20,R21
0618 ; block -> y+9
0618 ; key_addr -> R10
0618 ; key_type -> R22
.even
0618 _Mf500PiccAuth::
0618 0E940000 xcall push_gset3
061C A22E mov R10,R18
061E 602F mov R22,R16
0620 2397 sbiw R28,3
0622 .dbline -1
0622 .dbline 267
0622 ; }
0622 ; char Mf500PiccAuth(unsigned char key_type, // PICC_AUTHENT1A or PICC_AUTHENT1B
0622 ; unsigned char key_addr, // key address in reader storage
0622 ; unsigned char block) // block number which should be
0622 ; // authenticated
0622 ; {
0622 .dbline 268
0622 ; int status = MI_OK;
0622 4427 clr R20
0624 5527 clr R21
0626 .dbline 269
0626 ; status = Mf500PiccAuthE2( key_type,
0626 0984 ldd R0,y+9
0628 0A82 std y+2,R0
062A A882 std y+0,R10
062C 20E0 ldi R18,<_MLastSelectedSnr
062E 30E0 ldi R19,>_MLastSelectedSnr
0630 062F mov R16,R22
0632 5CD3 xcall _Mf500PiccAuthE2
0634 402F mov R20,R16
0636 5527 clr R21
0638 .dbline 273
0638 ; MLastSelectedSnr,
0638 ; key_addr,
0638 ; block);
0638 ; return status;
0638 .dbline -2
0638 L105:
0638 2396 adiw R28,3
063A 0E940000 xcall pop_gset3
063E .dbline 0 ; func end
063E 0895 ret
0640 .dbsym r status 20 I
0640 .dbsym l block 9 c
0640 .dbsym r key_addr 10 c
0640 .dbsym r key_type 22 c
0640 .dbend
0640 .dbfunc e Mf500HostCodeKey _Mf500HostCodeKey fc
0640 ; status -> R20,R21
0640 ; hn -> R20
0640 ; ln -> R22
0640 ; cnt -> R10
0640 ; coded -> R18,R19
0640 ; uncoded -> R16,R17
.even
0640 _Mf500HostCodeKey::
0640 0E940000 xcall push_gset3
0644 .dbline -1
0644 .dbline 277
0644 ; }
0644 ; char Mf500HostCodeKey( unsigned char *uncoded, // 6 bytes key value uncoded
0644 ; unsigned char *coded) // 12 bytes key value coded
0644 ; {
0644 .dbline 278
0644 ; int status = MI_OK;
0644 4427 clr R20
0646 5527 clr R21
0648 .dbline 279
0648 ; unsigned char cnt = 0;
0648 AA24 clr R10
064A .dbline 280
064A ; unsigned char ln = 0; // low nibble
064A 6627 clr R22
064C .dbline 281
064C ; unsigned char hn = 0; // high nibble
064C .dbline 282
064C ; for (cnt = 0; cnt < 6; cnt++)
064C 24C0 xjmp L110
064E L107:
064E .dbline 283
064E .dbline 284
064E EA2D mov R30,R10
0650 FF27 clr R31
0652 E00F add R30,R16
0654 F11F adc R31,R17
0656 6081 ldd R22,z+0
0658 6F70 andi R22,15
065A .dbline 285
065A EA2D mov R30,R10
065C FF27 clr R31
065E E00F add R30,R16
0660 F11F adc R31,R17
0662 4081 ldd R20,z+0
0664 4295 swap R20
0666 4F70 andi R20,#0x0F
0668 .dbline 286
0668 82E0 ldi R24,2
066A 8A9D mul R24,R10
066C F001 movw R30,R0
066E E20F add R30,R18
0670 F31F adc R31,R19
0672 862F mov R24,R22
0674 8095 com R24
0676 8F70 andi R24,#0x0F
0678 8295 swap R24
067A 862B or R24,R22
067C 8183 std z+1,R24
067E .dbline 287
067E 82E0 ldi R24,2
0680 8A9D mul R24,R10
0682 F001 movw R30,R0
0684 E20F add R30,R18
0686 F31F adc R31,R19
0688 842F mov R24,R20
068A 8095 com R24
068C 8F70 andi R24,#0x0F
068E 8295 swap R24
0690 842B or R24,R20
0692 8083 std z+0,R24
0694 .dbline 288
0694 L108:
0694 .dbline 282
0694 A394 inc R10
0696 L110:
0696 .dbline 282
0696 8A2D mov R24,R10
0698 8630 cpi R24,6
069A C8F2 brlo L107
069C .dbline 289
069C ; {
069C ; ln = uncoded[cnt] & 0x0F;
069C ; hn = uncoded[cnt] >> 4;
069C ; coded[cnt * 2 + 1] = (~ln << 4) | ln;
069C ; coded[cnt * 2 ] = (~hn << 4) | hn;
069C ; }
069C ; return MI_OK;
069C 0027 clr R16
069E .dbline -2
069E L106:
069E 0E940000 xcall pop_gset3
06A2 .dbline 0 ; func end
06A2 0895 ret
06A4 .dbsym r status 20 I
06A4 .dbsym r hn 20 c
06A4 .dbsym r ln 22 c
06A4 .dbsym r cnt 10 c
06A4 .dbsym r coded 18 pc
06A4 .dbsym r uncoded 16 pc
06A4 .dbend
06A4 .dbfunc e Mf500PiccAuthKey _Mf500PiccAuthKey fc
06A4 ; i -> R12
06A4 ; status -> R20,R21
06A4 ; block -> y+14
06A4 ; keys -> y+12
06A4 ; snr -> R10,R11
06A4 ; auth_mode -> R22
.even
06A4 _Mf500PiccAuthKey::
06A4 0E940000 xcall push_gset4
06A8 5901 movw R10,R18
06AA 602F mov R22,R16
06AC 2497 sbiw R28,4
06AE .dbline -1
06AE .dbline 295
06AE ; }
06AE ; char Mf500PiccAuthKey(unsigned char auth_mode,
06AE ; unsigned char *snr,
06AE ; unsigned char *keys,
06AE ; unsigned char block)
06AE ; {
06AE .dbline 296
06AE ; int status = MI_OK;
06AE 4427 clr R20
06B0 5527 clr R21
06B2 .dbline 297
06B2 ; unsigned char i = 0;
06B2 CC24 clr R12
06B4 .dbline 298
06B4 ; PcdSetTmo(106);
06B4 0AE6 ldi R16,106
06B6 10E0 ldi R17,0
06B8 92D3 xcall _PcdSetTmo
06BA .dbline 299
06BA ; FlushFIFO(); // empty FIFO
06BA EAD3 xcall _FlushFIFO
06BC .dbline 300
06BC ; ResetInfo(MInfo);
06BC 2224 clr R2
06BE 20920201 sts _MInfo,R2
06C2 .dbline 300
06C2 3324 clr R3
06C4 30920401 sts _MInfo+1+1,R3
06C8 20920301 sts _MInfo+1,R2
06CC .dbline 300
06CC 20920501 sts _MInfo+3,R2
06D0 .dbline 300
06D0 20920601 sts _MInfo+4,R2
06D4 .dbline 300
06D4 20920701 sts _MInfo+5,R2
06D8 .dbline 300
06D8 30920901 sts _MInfo+6+1,R3
06DC 20920801 sts _MInfo+6,R2
06E0 .dbline 300
06E0 20920A01 sts _MInfo+8,R2
06E4 .dbline 300
06E4 20920B01 sts _MInfo+9,R2
06E8 .dbline 300
06E8 .dbline 301
06E8 ; memcpy(MSndBuffer,keys,12); // write 12 bytes of the key
06E8 8CE0 ldi R24,12
06EA 90E0 ldi R25,0
06EC 9983 std y+1,R25
06EE 8883 std y+0,R24
06F0 2C85 ldd R18,y+12
06F2 3D85 ldd R19,y+13
06F4 00910E01 lds R16,_MSndBuffer
06F8 10910F01 lds R17,_MSndBuffer+1
06FC 0E940000 xcall _memcpy
0700 .dbline 302
0700 ; MInfo.nBytesToSend = 12;
0700 8CE0 ldi R24,12
0702 80930601 sts _MInfo+4,R24
0706 .dbline 303
0706 ; if ((status=PcdSingleResponseCmd(0x19,MSndBuffer,MRcvBuffer,&MInfo)) == MI_OK)
0706 80E0 ldi R24,<_MInfo
0708 90E0 ldi R25,>_MInfo
070A 9B83 std y+3,R25
070C 8A83 std y+2,R24
070E 20900C01 lds R2,_MRcvBuffer
0712 30900D01 lds R3,_MRcvBuffer+1
0716 3982 std y+1,R3
0718 2882 std y+0,R2
071A 20910E01 lds R18,_MSndBuffer
071E 30910F01 lds R19,_MSndBuffer+1
0722 09E1 ldi R16,25
0724 D1D4 xcall _PcdSingleResponseCmd
0726 202E mov R2,R16
0728 3324 clr R3
072A A101 movw R20,R2
072C 0023 tst R16
072E 39F4 brne L120
0730 .dbline 304
0730 ; {
0730 .dbline 305
0730 ; status = Mf500PiccAuthState(auth_mode,snr,block);
0730 0E84 ldd R0,y+14
0732 0882 std y+0,R0
0734 9501 movw R18,R10
0736 062F mov R16,R22
0738 07D0 xcall _Mf500PiccAuthState
073A 402F mov R20,R16
073C 5527 clr R21
073E .dbline 306
073E ; }
0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -