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

📄 f34x_msd_file_system.src

📁 USB读写SD卡例程
💻 SRC
📖 第 1 页 / 共 5 页
字号:
?C0022:
	LCALL	L?0223
	SUBB 	A,#0BH
	JNC  	?C0023
;     findinfo->direntry->sfn.name[i] = ' ';
			; SOURCE LINE # 1068
	MOV  	DPTR,#findinfo?144
	LCALL	L?0154
	LCALL	L?0175
	MOV  	DPL,R7
	MOV  	DPH,#00H
	MOV  	A,#020H
	LCALL	L?0213
	SJMP 	?C0022
?C0023:
;   for( j = 0; j < 20; j++ ) {
			; SOURCE LINE # 1069
	CLR  	A
	MOV  	DPTR,#j?147
	MOVX 	@DPTR,A
?C0025:
	MOV  	DPTR,#j?147
	MOVX 	A,@DPTR
	MOV  	R7,A
	CLR  	C
	SUBB 	A,#014H
	JNC  	?C0026
;     if(!filename[j] || filename[j] == '.') 
			; SOURCE LINE # 1070
	MOV  	DPTR,#filename?145
	LCALL	L?0154
	MOV  	DPL,R7
	LCALL	L?0162
	MOV  	R7,A
	JZ   	?C0026
	XRL  	A,#02EH
	JZ   	?C0026
;       break;
			; SOURCE LINE # 1071
?C0028:
;     if( j < 8 ) 
			; SOURCE LINE # 1072
	MOV  	DPTR,#j?147
	MOVX 	A,@DPTR
	MOV  	R7,A
	CLR  	C
	SUBB 	A,#08H
	JNC  	?C0027
;       findinfo->direntry->sfn.name[j] = toupper(filename[j]);
			; SOURCE LINE # 1073
	MOV  	DPL,R7
	LCALL	L?0162
	MOV  	R7,A
	LCALL	_toupper
	MOV  	DPTR,#findinfo?144
	LCALL	L?0154
	LCALL	L?0175
	MOV  	DPTR,#j?147
	MOVX 	A,@DPTR
	MOV  	DPL,A
	MOV  	DPH,#00H
	MOV  	A,R7
	LCALL	?C?CSTOPTR
;   }
			; SOURCE LINE # 1074
?C0027:
	MOV  	DPTR,#j?147
	MOVX 	A,@DPTR
	INC  	A
	MOVX 	@DPTR,A
	SJMP 	?C0025
?C0026:
;   if( filename[j] == '.' ) {
			; SOURCE LINE # 1075
	MOV  	DPTR,#filename?145
	LCALL	L?0154
	MOV  	DPTR,#j?147
	LCALL	L?0160
	XRL  	A,#02EH
	JNZ  	?C0031
;     for( i = 0; i < 3; i++ ) {
			; SOURCE LINE # 1076
	MOV  	DPTR,#i?146
	MOVX 	@DPTR,A
?C0032:
	LCALL	L?0224
	SUBB 	A,#03H
	JNC  	?C0031
;       if(!filename[j+i+1] || filename[j+i+1]=='.') 
			; SOURCE LINE # 1077
	INC  	DPTR
	MOVX 	A,@DPTR
	ADD  	A,R7
	MOV  	R7,A
	CLR  	A
	RLC  	A
	XCH  	A,R7
	ADD  	A,#01H
	XCH  	A,R7
	ADDC 	A,#00H
	MOV  	R6,A
	MOV  	DPTR,#filename?145
	LCALL	L?0154
	MOV  	DPL,R7
	MOV  	DPH,R6
	LCALL	?C?CLDOPTR
	MOV  	R7,A
	JZ   	?C0031
	XRL  	A,#02EH
	JZ   	?C0031
;         break;
			; SOURCE LINE # 1078
?C0035:
;       findinfo->direntry->sfn.name[8+i] = toupper(filename[j+i+1]);
			; SOURCE LINE # 1079
	LCALL	_toupper
	MOV  	DPTR,#findinfo?144
	LCALL	L?0154
	LCALL	L?0175
	MOV  	DPTR,#i?146
	MOVX 	A,@DPTR
	ADD  	A,#08H
	MOV  	DPL,A
	CLR  	A
	RLC  	A
	MOV  	DPH,A
	MOV  	A,R7
;     }
			; SOURCE LINE # 1080
	LCALL	L?0213
	SJMP 	?C0032
;   }
			; SOURCE LINE # 1081
?C0031:
;   //for(i=0;i<11;i++) findinfo->direntry->sfn.name[i]=
;   //toupper(findinfo->direntry->sfn.name[i]);
; 
;   // Don't forget to set the attrib:
;   findinfo->direntry->sfn.attrib = ATTRIB_ARCHIVE;
			; SOURCE LINE # 1086
	MOV  	DPTR,#findinfo?144
	LCALL	L?0154
	LCALL	L?0175
	MOV  	DPTR,#0BH
	MOV  	A,#020H
	LCALL	?C?CSTOPTR
; 
; 	// Write the new data to MMC
;   Sect_Write(findinfo->block);
			; SOURCE LINE # 1089
	MOV  	DPTR,#findinfo?144
	LCALL	L?0154
	LCALL	?C?LLDPTR
	LCALL	_Sect_Write
; 
; 	return 1;
			; SOURCE LINE # 1091
	MOV  	R7,#01H
; }
			; SOURCE LINE # 1092
?C0018:
	RET  	
; END OF _fcreate

; 
; 
; static find_info xdata findinfo; // Shared find_info for fopen() and fdelete()
; 
; int fopen(FILE* f,char* filename,char* mode) 

	RSEG  ?PR?_fopen?F34X_MSD_FILE_SYSTEM
_fopen:
	USING	0
			; SOURCE LINE # 1097
	MOV  	DPTR,#f?248
	MOV  	A,R3
	LCALL	L?0165
; {
			; SOURCE LINE # 1098
; 	f->isopen = 0;
			; SOURCE LINE # 1099
	MOV  	DPTR,#f?248
	LCALL	L?0154
	MOV  	DPTR,#013H
	CLR  	A
	LCALL	?C?CSTOPTR
; 
; 	if( mode[0] == 'w' ) { 
			; SOURCE LINE # 1101
	MOV  	DPTR,#mode?250
	LCALL	L?0154
	LCALL	?C?CLDPTR
	CJNE 	A,#077H,?C0037
;     fdelete(filename); 
			; SOURCE LINE # 1102
	MOV  	DPTR,#filename?249
	LCALL	L?0154
	LCALL	_fdelete
;   } // This is the most memory-efficient solution, not the most time-efficient solution.
			; SOURCE LINE # 1103
?C0037:
; 
;   findfirst(&findinfo, 0);
			; SOURCE LINE # 1105
	LCALL	L?0202
	CLR  	A
	MOV  	R5,A
	LCALL	_findfirst
?C0038:
;   while(!file_name_match(filename,findinfo.direntry->sfn.name)) {
			; SOURCE LINE # 1106
	LCALL	L?0163
	MOV  	DPTR,#filename?249
	LCALL	L?0154
	LCALL	_file_name_match
	MOV  	A,R7
	JNZ  	?C0039
;     if(!findnext(&findinfo)) {
			; SOURCE LINE # 1107
	LCALL	L?0202
	LCALL	_findnext
	MOV  	A,R7
	JNZ  	?C0038
;       if(mode[0] == 'r') {
			; SOURCE LINE # 1108
	MOV  	DPTR,#mode?250
	LCALL	L?0154
	LCALL	?C?CLDPTR
	MOV  	R5,A
	CJNE 	A,#072H,?C0041
;         return 0; // File not found.
			; SOURCE LINE # 1109
	CLR  	A
	MOV  	R6,A
	MOV  	R7,A
	RET  	
;       }
			; SOURCE LINE # 1110
?C0041:
;       if( mode[0] == 'w' || mode[0] == 'a' ) {
			; SOURCE LINE # 1111
	MOV  	A,R5
	XRL  	A,#077H
	JZ   	?C0044
	LCALL	?C?CLDPTR
	CJNE 	A,#061H,?C0038
?C0044:
;         if(!fcreate(&findinfo, filename)) {
			; SOURCE LINE # 1112
	MOV  	DPTR,#filename?249
	LCALL	L?0185
	MOV  	DPTR,#?_fcreate?BYTE+03H
	LCALL	L?0164
	LCALL	L?0203
	LCALL	_fcreate
	MOV  	A,R7
	JNZ  	?C0039
;           return 0; // File cannot be created.
			; SOURCE LINE # 1113
	MOV  	R6,A
	MOV  	R7,A
	RET  	
;         } else {
			; SOURCE LINE # 1114
;           break;
			; SOURCE LINE # 1115
;         }
			; SOURCE LINE # 1116
;       }
			; SOURCE LINE # 1117
;     }
			; SOURCE LINE # 1118
;   }
			; SOURCE LINE # 1119
?C0039:
; 
;   f->sector_direntry=findinfo.block;
			; SOURCE LINE # 1121
	MOV  	DPTR,#findinfo
	INC  	DPTR
	LCALL	L?0182
	MOV  	DPTR,#f?248
	LCALL	L?0154
	MOV  	DPTR,#06H
	MOV  	A,R6
	MOV  	B,R7
	LCALL	?C?ISTOPTR
;   f->offset_direntry=findinfo.offset;
			; SOURCE LINE # 1122
	MOV  	DPTR,#findinfo+04H
	MOVX 	A,@DPTR
	MOV  	R7,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	DPTR,#08H
	XCH  	A,R7
	MOV  	B,R7
	LCALL	?C?ISTOPTR
;   f->cluster_start=f->sector_current=
			; SOURCE LINE # 1123
	MOV  	DPTR,#findinfo+07H
	LCALL	L?0154
	MOV  	DPTR,#01AH
	LCALL	L?0178
	LCALL	_htons
	CLR  	A
	MOV  	R4,A
	MOV  	R5,A
	MOV  	DPTR,#f?248
	LCALL	L?0154
	LCALL	L?0225
	MOV  	A,R6
	MOV  	B,R7
	LCALL	?C?ISTPTR
;   ntohs(findinfo.direntry->sfn.starting_cluster);//*MBR.sectors_per_cluster;
;   f->attrib=findinfo.direntry->sfn.attrib;
			; SOURCE LINE # 1125
	MOV  	DPTR,#findinfo+07H
	LCALL	L?0154
	LCALL	L?0227
	MOV  	R7,A
	MOV  	DPTR,#f?248
	LCALL	L?0154
	MOV  	DPTR,#0AH
	MOV  	A,R7
	LCALL	?C?CSTOPTR
;   f->size=ntohl(findinfo.direntry->sfn.filesize);
			; SOURCE LINE # 1126
	MOV  	DPTR,#findinfo+07H
	LCALL	L?0154
	MOV  	DPTR,#01CH
	LCALL	?C?LLDOPTR
	LCALL	_htonl
	MOV  	DPTR,#f?248
	LCALL	L?0154
	MOV  	DPTR,#0FH
	LCALL	?C?LSTOPTR
; 
;   if(mode[0]=='a') f->pos=f->size; else f->pos=0;
			; SOURCE LINE # 1128
	MOV  	DPTR,#mode?250
	LCALL	L?0154
	LCALL	?C?CLDPTR
	MOV  	DPTR,#f?248
	CJNE 	A,#061H,?C0047
	LCALL	L?0154
	LCALL	L?0188
	MOV  	DPTR,#0BH
	LCALL	?C?LSTOPTR
	SJMP 	?C0048
?C0047:
	LCALL	L?0154
	MOV  	DPTR,#0BH
	LCALL	?C?LSTKOPTR
	DB   	00H
	DB   	00H
	DB   	00H
	DB   	00H
?C0048:
; //	Print_File(f);
;   return 	f->isopen=1;
			; SOURCE LINE # 1130
	MOV  	DPTR,#f?248
	LCALL	L?0154
	MOV  	DPTR,#013H
	MOV  	A,#01H
	LCALL	?C?CSTOPTR
	MOV  	R6,#00H
	MOV  	R7,#01H
; }
			; SOURCE LINE # 1131
?C0042:
	RET  	
; END OF _fopen

; 
; /*
; int fexists(char* filename) {
; 	FILE xdata f;
; 	if(fopen(&f,filename,"r")) {
; 		fclose(&f);
; 		return 1;
; 	}
; 	return 0;
; }
; */
; 
; /*
; int fseek(FILE* f,long offset,int origin) {
; 	if(!f->isopen) return 0;
; 	switch(origin) {
; 		case SEEK_SET:default:
; 			if(offset>=0)
; 				f->pos=offset;
; 			else
; 				return 0;
; 			break;
; 		case SEEK_END:
; 			f->pos=f->size+offset;
; 			break;
; 		case SEEK_CUR:
; 			f->pos+=offset;
; 			break;
; 	}
; 
; 	return 1;
; }
; */
; 
; /*
; DWORD ftell(FILE* f) {
; 	if(!f->isopen) return 0;
; 	return f->pos;
; }
; */
; 
; int feof(FILE* f) 

	RSEG  ?PR?_feof?F34X_MSD_FILE_SYSTEM
_feof:
	USING	0
			; SOURCE LINE # 1173
;---- Variable 'f?351' assigned to Register 'R1/R2/R3' ----
; {
			; SOURCE LINE # 1174
;   if(!f->isopen) return 1;
			; SOURCE LINE # 1175
	LCALL	L?0229
	JNZ  	?C0049
	MOV  	R6,A
	MOV  	R7,#01H
	RET  	
?C0049:
;   return f->pos >= f->size;
			; SOURCE LINE # 1176
	LCALL	L?0188
	LCALL	L?0193
	CLR  	C
	LCALL	?C?ULCMP
	MOV  	R6,#00H
	JC   	?C0051
	MOV  	R7,#01H
	SJMP 	?C0052
?C0051:
	MOV  	R7,#00H
?C0052:
; }
			; SOURCE LINE # 1177
?C0050:
	RET  	
; END OF _feof

; 
; // Find the 'nr'-th sector in the fat chain starting at 'from'
; static unsigned long fat_chain(unsigned long from,unsigned nr) 

	RSEG  ?PR?_fat_chain?F34X_MSD_FILE_SYSTEM
_fat_chain:
	USING	0
			; SOURCE LINE # 1180
	LCALL	L?0215
; {
			; SOURCE LINE # 1181
;   unsigned* xdata fat_table=Scratch;
			; SOURCE LINE # 1182
	MOV  	DPTR,#fat_table?454
;   unsigned xdata sect,sect_prev=0;
			; SOURCE LINE # 1183
	LCALL	L?0191
	INC  	DPTR
	MOVX 	@DPTR,A
	INC  	DPTR
	MOVX 	@DPTR,A
;   unsigned xdata cluster = nr/MBR.sectors_per_cluster;
			; SOURCE LINE # 1184
	LCALL	L?0195
	MOV  	DPTR,#cluster?457
	MOV  	A,R6
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R7
	MOVX 	@DPTR,A
?C0053:
; 
;   while(cluster) {
			; SOURCE LINE # 1186
	MOV  	DPTR,#cluster?457
	MOVX 	A,@DPTR
	JNZ  	?C0132
	INC  	DPTR
	MOVX 	A,@DPTR
?C0132:
	JNZ  	$ + 5H
	LJMP 	?C0054
;     sect = Sect_Fat1() + from/(Sect_Block_Size()/2);
			; SOURCE LINE # 1187
	LCALL	Sect_Fat1
	MOV  	A,R6
	PUSH 	ACC
	MOV  	A,R7
	PUSH 	ACC
	CLR  	A
	MOV  	R3,A
	MOV  	R2,#01H
	MOV  	R1,A
	MOV  	R0,A
	LCALL	L?0179
	LCALL	?C?ULDIV
	POP  	ACC
	ADD  	A,R7
	MOV  	R7,A
	POP  	ACC
	ADDC 	A,R6
	MOV  	R6,A
;---- Variable 'sect?455' assigned to Register 'R6/R7' ----
;     if(sect!=sect_prev) {
			; SOURCE LINE # 1188
	MOV  	DPTR,#sect_prev?456
	MOVX 	A,@DPTR
	XRL  	A,R6
	JNZ  	?C0133
	INC  	DPTR
	MOVX 	A,@DPTR
	XRL  	A,R7
?C0133:
	JZ   	?C0055
;       Sect_Read(sect_prev=sect);
			; SOURCE LINE # 1189
	MOV  	DPTR,#sect_prev?456
	MOV  	A,R6
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R7
	MOVX 	@DPTR,A
	CLR  	A
	MOV  	R4,A
	MOV  	R5,A
	LCALL	_Sect_Read
;     }
			; SOURCE LINE # 1190
?C0055:
; 
;     from=ntohs(fat_table[from%(Sect_Block_Size()/2)]);
			; SOURCE LINE # 1192
	MOV  	DPTR,#from?452
	INC  	DPTR

⌨️ 快捷键说明

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