📄 tc.ls1
字号:
0000 220 ?_TcCommand?BYTE:
0000 221 cmd?141: DS 3
0003 222 ORG 3
0003 223 len?142: DS 2
0005 224 ORG 5
0005 225 i?143: DS 2
0007 226 ORG 7
0007 227 ci?144: DS 1
228
---- 229 RSEG ?XD?CardSlot?TC
0000 230 ?CardSlot?BYTE:
0000 231 buf?246: DS 3
232
---- 233 RSEG ?BI?TC
0000 234 fCardIn?245: DBIT 1
0001 235 fWaitCmd: DBIT 1
236
---- 237 RSEG ?XD?TC
0000 238 cnt?247: DS 1
0001 239 FWI: DS 1
0002 240 WaitCmdTime: DS 2
241
---- 242 RSEG ?C_INITSEG
0000 41 243 DB 041H
0001 0000 F 244 DW FWI
0003 05 245 DB 005H
246
0004 C100 F 247 DB 0C1H, fWaitCmd + 000H ; bit-init
248
0006 C100 F 249 DB 0C1H, fCardIn?245 + 000H ; bit-init
250
0008 41 251 DB 041H
0009 0000 F 252 DW cnt?247
000B 00 253 DB 000H
254
255 ; /****************************************
A51 MACRO ASSEMBLER TC 03/13/2009 15:44:58 PAGE 5
256 ; * tc.c *
257 ; * excute touched card command *
258 ; * designed by liulixun *
259 ; * last update: 05-01-2007 *
260 ; ****************************************/
261 ; #include "includes.h"
262 ;
263 ; static bit fWaitCmd = 0; // flag of waiting for host command
264 ; static unsigned int WaitCmdTime; // time before a host command come
265 ;
266 ; void TcInit(void)
267
---- 268 RSEG ?PR?TcInit?TC
0000 269 TcInit:
270 USING 0
271 ; SOURCE LINE # 12
272 ; {
273 ; SOURCE LINE # 13
274 ; int ch;
275 ;
276 ; ch = ParaRead(PARA_SWITCHS);
277 ; SOURCE LINE # 16
0000 7FFE 278 MOV R7,#0FEH
0002 120000 F 279 LCALL _ParaRead
280 ;---- Variable 'ch?040' assigned to Register 'R6/R7' ----
281 ;
282 ; if(ch >= 0)
283 ; SOURCE LINE # 18
0005 C3 284 CLR C
0006 EE 285 MOV A,R6
0007 6480 286 XRL A,#080H
0009 9480 287 SUBB A,#080H
000B 400B 288 JC ?C0001
289 ; {
290 ; SOURCE LINE # 19
291 ; fNotice = ch & F_NOTICE;
292 ; SOURCE LINE # 20
000D EF 293 MOV A,R7
000E A2E3 294 MOV C,ACC.3
0010 9200 F 295 MOV fNotice,C
296 ; fStopOnACK = ch & F_SNOA;
297 ; SOURCE LINE # 21
0012 A2E4 298 MOV C,ACC.4
0014 9200 F 299 MOV fStopOnACK,C
300 ; }
301 ; SOURCE LINE # 22
0016 8004 302 SJMP ?C0002
0018 303 ?C0001:
304 ; else
305 ; {
306 ; SOURCE LINE # 24
307 ; fNotice = 1;
308 ; SOURCE LINE # 25
0018 D200 F 309 SETB fNotice
310 ; fStopOnACK = 1;
311 ; SOURCE LINE # 26
001A D200 F 312 SETB fStopOnACK
313 ; }
314 ; SOURCE LINE # 27
001C 315 ?C0002:
316 ;
317 ; // IC card
318 ; IccInit();
319 ; SOURCE LINE # 30
001C 120000 F 320 LCALL IccInit
321 ; IccSetTimeout(1200);
A51 MACRO ASSEMBLER TC 03/13/2009 15:44:58 PAGE 6
322 ; SOURCE LINE # 31
001F 7FB0 323 MOV R7,#0B0H
0021 7E04 324 MOV R6,#04H
0023 020000 F 325 LJMP _IccSetTimeout
326 ; END OF TcInit
327
328 ; }
329 ;
330 ; // ticc command
331 ; unsigned int TcCommand(unsigned char *cmd, unsigned int len)
332
---- 333 RSEG ?PR?_TcCommand?TC
0000 334 _TcCommand:
335 USING 0
336 ; SOURCE LINE # 35
0000 900000 F 337 MOV DPTR,#len?142
0003 EC 338 MOV A,R4
0004 F0 339 MOVX @DPTR,A
0005 A3 340 INC DPTR
0006 ED 341 MOV A,R5
0007 F0 342 MOVX @DPTR,A
0008 900000 F 343 MOV DPTR,#cmd?141
000B EB 344 MOV A,R3
000C F0 345 MOVX @DPTR,A
000D A3 346 INC DPTR
000E EA 347 MOV A,R2
000F F0 348 MOVX @DPTR,A
0010 A3 349 INC DPTR
0011 E9 350 MOV A,R1
0012 F0 351 MOVX @DPTR,A
352 ; {
353 ; SOURCE LINE # 36
354 ; int i;
355 ; unsigned char ci;
356 ;
357 ; // todo: for every command, sync card should be thinking
358 ;
359 ; IccSelect(cmd[0]);
360 ; SOURCE LINE # 42
0013 120000 F 361 LCALL ?C?CLDPTR
0016 FF 362 MOV R7,A
0017 120000 F 363 LCALL _IccSelect
364 ;
365 ; if(cmd[0] == IC_USER)
366 ; SOURCE LINE # 44
001A 900000 F 367 MOV DPTR,#cmd?141
001D E0 368 MOVX A,@DPTR
001E FB 369 MOV R3,A
001F A3 370 INC DPTR
0020 E0 371 MOVX A,@DPTR
0021 FA 372 MOV R2,A
0022 A3 373 INC DPTR
0023 E0 374 MOVX A,@DPTR
0024 F9 375 MOV R1,A
0025 120000 F 376 LCALL ?C?CLDPTR
0028 B40302 377 CJNE A,#03H,?C0004
378 ; fWaitCmd = 0;
379 ; SOURCE LINE # 45
002B C200 F 380 CLR fWaitCmd
002D 381 ?C0004:
382 ;
383 ; if(cmd[1] == CMD_RESET)
384 ; SOURCE LINE # 47
002D 900001 385 MOV DPTR,#01H
0030 120000 F 386 LCALL ?C?CLDOPTR
0033 703C 387 JNZ ?C0005
A51 MACRO ASSEMBLER TC 03/13/2009 15:44:58 PAGE 7
388 ; {
389 ; SOURCE LINE # 48
390 ; if(len != 2)
391 ; SOURCE LINE # 49
0035 900000 F 392 MOV DPTR,#len?142
0038 E0 393 MOVX A,@DPTR
0039 7004 394 JNZ ?C0100
003B A3 395 INC DPTR
003C E0 396 MOVX A,@DPTR
003D 6402 397 XRL A,#02H
003F 398 ?C0100:
003F 6003 399 JZ ?C0006
400 ; {
401 ; SOURCE LINE # 50
402 ; cmd[0] = ERRORCMDLEN;
403 ; SOURCE LINE # 51
404 ; return 1;
405 ; SOURCE LINE # 52
0041 020000 F 406 LJMP ?C0163
407 ; }
408 ; SOURCE LINE # 53
0044 409 ?C0006:
410 ; else
411 ; {
412 ; SOURCE LINE # 55
413 ; // send reset infomation to host
414 ; i = IccOpen(cmd+1);
415 ; SOURCE LINE # 57
0044 E9 416 MOV A,R1
0045 2401 417 ADD A,#01H
0047 F9 418 MOV R1,A
0048 E4 419 CLR A
0049 3A 420 ADDC A,R2
004A FA 421 MOV R2,A
004B 120000 F 422 LCALL _IccOpen
004E 900000 F 423 MOV DPTR,#i?143
0051 EE 424 MOV A,R6
0052 F0 425 MOVX @DPTR,A
0053 A3 426 INC DPTR
0054 EF 427 MOV A,R7
0055 F0 428 MOVX @DPTR,A
429 ; if(i > 0)
430 ; SOURCE LINE # 58
0056 D3 431 SETB C
0057 9400 432 SUBB A,#00H
0059 EE 433 MOV A,R6
005A 6480 434 XRL A,#080H
005C 9480 435 SUBB A,#080H
005E 900000 F 436 MOV DPTR,#cmd?141
0061 E0 437 MOVX A,@DPTR
0062 FB 438 MOV R3,A
0063 A3 439 INC DPTR
0064 E0 440 MOVX A,@DPTR
0065 FA 441 MOV R2,A
0066 A3 442 INC DPTR
0067 E0 443 MOVX A,@DPTR
0068 F9 444 MOV R1,A
0069 4003 445 JC ?C0009
446 ; {
447 ; SOURCE LINE # 59
448 ; cmd[0] = SUCCESS;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -