⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 f34x_msd_cmd.src

📁 USB读写SD卡例程
💻 SRC
📖 第 1 页 / 共 3 页
字号:
			; SOURCE LINE # 83
	MOV  	R1,A
	MOV  	DPTR,#Token
	XCH  	A,R1
	MOVX 	@DPTR,A
	INC  	DPTR
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
;   Sect_Print();
			; SOURCE LINE # 84
	LCALL	Sect_Print
;   printf("MMC Shell version 1.0" ENDLINE);
			; SOURCE LINE # 85
	MOV  	R3,#0FFH
	MOV  	R2,#HIGH (?SC_0)
	MOV  	R1,#LOW (?SC_0)
	LCALL	_printf
;   write_current_dir();
			; SOURCE LINE # 86
	LCALL	write_current_dir
;   putchar(PROMPT);
			; SOURCE LINE # 87
	MOV  	R7,#03EH
	LJMP 	_putchar
; END OF Cmd_Init

; }
; 
; //----------------------------------------------------------------------------
; // Cmd_Match
; //----------------------------------------------------------------------------
; //
; // This function checks the syntax of command and converts all leters to 
; // lowercase if it's uppercase.  
; //
; // Parameters   : str - command string
; // Return Value : TRUE if command string and received string are similar 
; //----------------------------------------------------------------------------
; 
; BYTE Cmd_Match(char* str) 

	RSEG  ?PR?_Cmd_Match?F34X_MSD_CMD
_Cmd_Match:
	USING	0
			; SOURCE LINE # 101
	MOV  	DPTR,#str?140
	LCALL	L?0086
; {
			; SOURCE LINE # 102
;   xdata char* xdata s=Token;
			; SOURCE LINE # 103
	MOV  	DPTR,#Token
	LCALL	L?0097
	MOV  	DPTR,#s?141
	XCH  	A,R1
	LCALL	L?0087
;   for(;*s;s++) *s=tolower(*s);
			; SOURCE LINE # 104
?C0002:
	MOV  	DPTR,#s?141
	LCALL	L?0082
	LCALL	?C?CLDPTR
	MOV  	R7,A
	JZ   	?C0003
	LCALL	_tolower
	MOV  	DPTR,#s?141
	LCALL	L?0082
	MOV  	A,R7
	LCALL	?C?CSTPTR
	MOV  	DPTR,#s?141+01H
	CLR  	A
	MOV  	B,#01H
	LCALL	?C?IILDX
	SJMP 	?C0002
?C0003:
;   return !strncmp(Token,str,MAX_LEN);
			; SOURCE LINE # 105
	MOV  	DPTR,#str?140
	LCALL	L?0097
	MOV  	DPTR,#?_strncmp?BYTE+03H
	XCH  	A,R1
	LCALL	L?0087
	INC  	DPTR
	CLR  	A
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#020H
	MOVX 	@DPTR,A
	MOV  	DPTR,#Token
	LCALL	L?0082
	LCALL	_strncmp
	MOV  	A,R7
	JNZ  	?C0005
	MOV  	R7,#01H
	SJMP 	?C0006
?C0005:
	MOV  	R7,#00H
?C0006:
; }
			; SOURCE LINE # 106
?C0007:
	RET  	
; END OF _Cmd_Match

; 
; //----------------------------------------------------------------------------
; // Cmd_Dir
; //----------------------------------------------------------------------------
; //
; // Function sends list of all directories and files in actual directory.
; //
; // Parameters   :
; // Return Value :
; //----------------------------------------------------------------------------
; 
; void Cmd_Dir(void) 

	RSEG  ?PR?Cmd_Dir?F34X_MSD_CMD
Cmd_Dir:
	USING	0
			; SOURCE LINE # 118
; {
			; SOURCE LINE # 119
;   xdata BYTE i;
;   find_info xdata findinfo;
;   if(!findfirst(&findinfo,0)) {
			; SOURCE LINE # 122
	MOV  	R3,#01H
	MOV  	R2,#HIGH (findinfo?243)
	MOV  	R1,#LOW (findinfo?243)
	CLR  	A
	MOV  	R5,A
	LCALL	_findfirst
	MOV  	A,R7
	JNZ  	?C0012
;     printf("."ENDLINE);	
			; SOURCE LINE # 123
	MOV  	R3,#0FFH
	MOV  	R2,#HIGH (?SC_24)
	MOV  	R1,#LOW (?SC_24)
	LJMP 	_printf
;     return;
;   }
			; SOURCE LINE # 125
?C0012:
;   do {
			; SOURCE LINE # 126
;     for(i=0;i<8;i++) { 
			; SOURCE LINE # 127
	CLR  	A
	MOV  	DPTR,#i?242
	MOVX 	@DPTR,A
?C0013:
	MOV  	DPTR,#i?242
	MOVX 	A,@DPTR
	MOV  	R7,A
	CLR  	C
	SUBB 	A,#08H
	JNC  	?C0014
;       putchar(tolower(findinfo.direntry->sfn.name[i]));
			; SOURCE LINE # 128
	LCALL	L?0080
;     }
			; SOURCE LINE # 129
	LCALL	L?0092
	SJMP 	?C0013
?C0014:
;     if(findinfo.direntry->sfn.name[i]>' ') 
			; SOURCE LINE # 130
	LCALL	L?0080
	MOV  	DPTR,#i?242
	MOVX 	A,@DPTR
	MOV  	DPL,A
	MOV  	DPH,#00H
	LCALL	?C?CLDOPTR
	SETB 	C
	XRL  	A,#080H
	SUBB 	A,#0A0H
	JC   	?C0016
;       putchar('.');
			; SOURCE LINE # 131
	MOV  	R7,#02EH
	LCALL	_putchar
?C0016:
;     for(i=8;i<11;i++) { 
			; SOURCE LINE # 132
	MOV  	DPTR,#i?242
	MOV  	A,#08H
	MOVX 	@DPTR,A
?C0017:
	MOV  	DPTR,#i?242
	MOVX 	A,@DPTR
	MOV  	R7,A
	CLR  	C
	SUBB 	A,#0BH
	JNC  	?C0018
;       putchar(tolower(findinfo.direntry->sfn.name[i])); 
			; SOURCE LINE # 133
	LCALL	L?0081
;     }
			; SOURCE LINE # 134
	LCALL	L?0092
	SJMP 	?C0017
?C0018:
; 
;     if(!(findinfo.direntry->sfn.attrib & (ATTRIB_LABEL|ATTRIB_SUBDIR))) {
			; SOURCE LINE # 136
	LCALL	L?0081
	LCALL	L?0101
	ANL  	A,#018H
	JNZ  	?C0020
;       printf("\t%lu bytes",ntohl(findinfo.direntry->sfn.filesize));
			; SOURCE LINE # 137
	MOV  	DPTR,#01CH
	LCALL	?C?LLDOPTR
	LCALL	_htonl
	LCALL	L?0103
	MOV  	R3,#0FFH
	MOV  	R2,#HIGH (?SC_28)
	MOV  	R1,#LOW (?SC_28)
	LCALL	_printf
;     }
			; SOURCE LINE # 138
?C0020:
; 
;     if(findinfo.direntry->sfn.attrib & ATTRIB_LABEL) 
			; SOURCE LINE # 140
	LCALL	L?0081
	LCALL	L?0101
	JNB  	ACC.3,?C0021
;       printf("\t<LABEL>");
			; SOURCE LINE # 141
	MOV  	R3,#0FFH
	MOV  	R2,#HIGH (?SC_39)
	MOV  	R1,#LOW (?SC_39)
	LCALL	_printf
?C0021:
;     if(findinfo.direntry->sfn.attrib & ATTRIB_SUBDIR) 
			; SOURCE LINE # 142
	LCALL	L?0081
	LCALL	L?0102
	JNB  	ACC.4,?C0022
;       printf("\t<DIR>");
			; SOURCE LINE # 143
	MOV  	R3,#0FFH
	MOV  	R2,#HIGH (?SC_48)
	MOV  	R1,#LOW (?SC_48)
	LCALL	_printf
?C0022:
; 	printf(ENDLINE);
			; SOURCE LINE # 144
	LCALL	L?0094
	LCALL	_printf
; 
;   } while(findnext(&findinfo));
			; SOURCE LINE # 146
	MOV  	R3,#01H
	MOV  	R2,#HIGH (findinfo?243)
	MOV  	R1,#LOW (findinfo?243)
	LCALL	_findnext
	MOV  	A,R7
	JZ   	$ + 5H
	LJMP 	?C0012
; }
			; SOURCE LINE # 147
?C0009:
	RET  	
L?0092:
	MOV  	DPL,R7
	MOV  	DPH,#00H
	LCALL	?C?CLDOPTR
	MOV  	R7,A
	LCALL	_tolower
	LCALL	_putchar
	MOV  	DPTR,#i?242
	MOVX 	A,@DPTR
	INC  	A
	MOVX 	@DPTR,A
	RET  	
; END OF Cmd_Dir

; 
; //----------------------------------------------------------------------------
; // Cmd_Type
; //----------------------------------------------------------------------------
; //
; // This function sends via UART the content of file which is defiened with 
; // "type" command.
; //
; // Parameters   : filename - pointer to file name
; // Return Value :
; //----------------------------------------------------------------------------
; 
; void Cmd_Type(char* filename) 

	RSEG  ?PR?_Cmd_Type?F34X_MSD_CMD
_Cmd_Type:
	USING	0
			; SOURCE LINE # 160
	MOV  	DPTR,#filename?344
	LCALL	L?0086
; {
			; SOURCE LINE # 161
;   FILE xdata f;unsigned xdata bytesread,i;
; 
;   if(!fopen(&f,filename,"r")) { 
			; SOURCE LINE # 164
	MOV  	DPTR,#filename?344
	LCALL	L?0098
	MOV  	DPTR,#?_fopen?BYTE+03H
	XCH  	A,R1
	LCALL	L?0087
	INC  	DPTR
	MOV  	A,#0FFH
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#HIGH (?SC_58)
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#LOW (?SC_58)
	LCALL	L?0099
	LCALL	_fopen
	MOV  	A,R7
	ORL  	A,R6
	JNZ  	?C0025
;     printf("File not found"ENDLINE);
			; SOURCE LINE # 165
	MOV  	R3,#0FFH
	MOV  	R2,#HIGH (?SC_60)
	MOV  	R1,#LOW (?SC_60)
	SJMP 	?C0073
;     return; 
;   }  
			; SOURCE LINE # 167
?C0025:
; 
;   while(bytesread=fread(&f,Scratch,Sect_Block_Size())) {
			; SOURCE LINE # 169
	MOV  	DPTR,#?_fread?BYTE+03H
	MOV  	A,#01H
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#HIGH (Scratch)
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#LOW (Scratch)
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,#02H
	MOVX 	@DPTR,A
	INC  	DPTR
	CLR  	A
	LCALL	L?0099
	LCALL	_fread
	MOV  	DPTR,#bytesread?346
	MOV  	A,R6
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R7
	MOVX 	@DPTR,A
	ORL  	A,R6
	JZ   	?C0026
;     if(key_available()) { 
			; SOURCE LINE # 170
	LCALL	key_available
	MOV  	A,R7
	JNZ  	?C0026
;       break; 
			; SOURCE LINE # 171
;     }
			; SOURCE LINE # 172
?C0027:
;     for(i=0;i<bytesread;i++) {
			; SOURCE LINE # 173
	CLR  	A
	MOV  	DPTR,#i?347
	MOVX 	@DPTR,A
	INC  	DPTR
	MOVX 	@DPTR,A
?C0028:
	MOV  	DPTR,#bytesread?346
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
	INC  	DPTR
	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
	JNC  	?C0025
;       putchar(Scratch[i]);
			; SOURCE LINE # 174
	MOV  	A,#LOW (Scratch)
	ADD  	A,R5
	MOV  	DPL,A
	MOV  	A,#HIGH (Scratch)
	ADDC 	A,R4
	MOV  	DPH,A
	MOVX 	A,@DPTR
	MOV  	R7,A
	LCALL	_putchar
;     }
			; SOURCE LINE # 175
	MOV  	DPTR,#i?347+01H
	MOVX 	A,@DPTR
	INC  	A
	MOVX 	@DPTR,A
	JNZ  	?C0028
	MOV  	DPTR,#i?347
	MOVX 	A,@DPTR
	INC  	A
	MOVX 	@DPTR,A
?C0071:
	SJMP 	?C0028
;   }
			; SOURCE LINE # 176
?C0026:
; 
;   fclose(&f);
			; SOURCE LINE # 178
	LCALL	L?0100
	LCALL	_fclose
; 
; 
;   printf(ENDLINE);
			; SOURCE LINE # 181
	LCALL	L?0094
?C0073:
	LCALL	_printf
; }
			; SOURCE LINE # 182
?C0024:
	RET  	
; END OF _Cmd_Type

; 
; //----------------------------------------------------------------------------
; // Cmd_Help
; //----------------------------------------------------------------------------
; //
; // Function sends via UART the list of known commands. This list contains all
; // commands allowed for normal user. List is printing when system doesn't 
; // recognize the last sent command.
; //
; // Parameters   :
; // Return Value :
; //----------------------------------------------------------------------------
; 
; void Cmd_Help(void) 

	RSEG  ?PR?Cmd_Help?F34X_MSD_CMD
Cmd_Help:
	USING	0
			; SOURCE LINE # 196
; {
			; SOURCE LINE # 197
;   printf("calibrate VALUE"ENDLINE"cd"ENDLINE"chkdsk"ENDLINE"cls"ENDLINE"del FILE"ENDLINE"dir"
			; SOURCE LINE # 198
	MOV  	R3,#0FFH
	MOV  	R2,#HIGH (?SC_77)
	MOV  	R1,#LOW (?SC_77)
	LJMP 	_printf
; END OF Cmd_Help

;   		ENDLINE"format"ENDLINE"log FILE"ENDLINE"md"ENDLINE"rd"
;   		ENDLINE"s NNNNN"ENDLINE"templog FILE"ENDLINE"type FILE"ENDLINE);
; }
; 
; //----------------------------------------------------------------------------
; // Cmd_Exec
; //----------------------------------------------------------------------------
; //
; // This function is used to executing commands. It recognizes the command and 
; // prepares reaction, answer. 
; //
; // Parameters   :
; // Return Value :
; //----------------------------------------------------------------------------
; 
; void Cmd_Exec() 

	RSEG  ?PR?Cmd_Exec?F34X_MSD_CMD
Cmd_Exec:
	USING	0
			; SOURCE LINE # 214
; {
			; SOURCE LINE # 215
;   int xdata i;BYTE xdata j;char xdata ch;DWORD xdata dw;
; 
;   Token = Str_Token(Cmd);
			; SOURCE LINE # 218
	MOV  	R3,#01H
	MOV  	R2,#HIGH (Cmd)
	MOV  	R1,#LOW (Cmd)
	LCALL	_Str_Token
	LCALL	L?0084
; 
;   if(!Token) 
			; SOURCE LINE # 220
	ORL  	A,R2
	ORL  	A,R3
	JNZ  	$ + 5H
	LJMP 	?C0033
?C0032:
;     return;
; 
;   printf(ENDLINE);
			; SOURCE LINE # 223
	LCALL	L?0095
	LCALL	_printf
; 
;   
;   if(n_of_sect == 0)
			; SOURCE LINE # 226
	MOV  	DPTR,#n_of_sect
	LCALL	L?0090
	MOV  	A,R4
	ORL  	A,R5
	ORL  	A,R6
	ORL  	A,R7
	JNZ  	?C0034
; 	n_of_sect = ntohl(bootrecord->total_sectors);
			; SOURCE LINE # 227
	INC  	DPTR
	LCALL	L?0082
	MOV  	DPTR,#020H
	LCALL	?C?LLDOPTR
	LCALL	_htonl
	MOV  	DPTR,#n_of_sect
	LCALL	?C?LSTXDATA
?C0034:
; 
;   if(format_flag == 1)
			; SOURCE LINE # 229
	MOV  	DPTR,#format_flag
	MOVX 	A,@DPTR
	XRL  	A,#01H
	JNZ  	?C0035
;   {
			; SOURCE LINE # 230
;   	if(Cmd_Match("y"))
			; SOURCE LINE # 231
	MOV  	R2,#HIGH (?SC_187)
	MOV  	R1,#LOW (?SC_187)
	LCALL	L?0091
	JZ   	?C0036
; 	{
			; SOURCE LINE # 232
; 		format_flag = 0;
			; SOURCE LINE # 233
	CLR  	A
	MOV  	DPTR,#format_flag
	MOVX 	@DPTR,A
; 		Format_Disk();
			; SOURCE LINE # 234
	LJMP 	Format_Disk
; 		return;
; 	}
			; SOURCE LINE # 236
?C0036:
; 	if(Cmd_Match("n"))
			; SOURCE LINE # 237
	MOV  	R2,#HIGH (?SC_189)
	MOV  	R1,#LOW (?SC_189)
	LCALL	L?0091
	JZ   	?C0037
; 		format_flag = 0;
			; SOURCE LINE # 238
	CLR  	A
	MOV  	DPTR,#format_flag
	MOVX 	@DPTR,A
	RET  	
?C0037:
; 	else
; 		printf("Are you sure (y/n)?"ENDLINE);	
			; SOURCE LINE # 240
	MOV  	R3,#0FFH
	MOV  	R2,#HIGH (?SC_191)
	MOV  	R1,#LOW (?SC_191)
	LJMP 	?C0077
; 	return;
;   }
			; SOURCE LINE # 242
?C0035:
;   if(Cmd_Match("cls")) {
			; SOURCE LINE # 243
	MOV  	R2,#HIGH (?SC_213)
	MOV  	R1,#LOW (?SC_213)
	LCALL	L?0093
	JZ   	?C0039
;     putchar(CLS);
			; SOURCE LINE # 244
	MOV  	R7,#0CH
	LJMP 	_putchar
;     return;
;   } 
			; SOURCE LINE # 246
?C0039:
; 
;   if(Cmd_Match("del")) {
			; SOURCE LINE # 248
	MOV  	R2,#HIGH (?SC_217)
	MOV  	R1,#LOW (?SC_217)
	LCALL	L?0093
	JZ   	?C0040
;     Token = Str_Token(0);
			; SOURCE LINE # 249
	LCALL	L?0083
;     if(Token) {
			; SOURCE LINE # 250
	ORL  	A,R2
	ORL  	A,R3
	JZ   	?C0041
;       if(!fdelete(Token))
			; SOURCE LINE # 251
	MOV  	DPTR,#Token
	LCALL	L?0082
	LCALL	_fdelete
	MOV  	A,R7
	ORL  	A,R6
	JZ   	$ + 5H
	LJMP 	?C0033
;         printf("File not found"ENDLINE);
			; SOURCE LINE # 252
	MOV  	R3,#0FFH
	MOV  	R2,#HIGH (?SC_60)
	MOV  	R1,#LOW (?SC_60)
?C0074:
;     } else {
			; SOURCE LINE # 253
	LJMP 	?C0077

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -