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

📄 fat.s

📁 使用硬盘制作mp3的源程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	add R30,R24
	adc R31,R25
	std z+0,R4
L37:
	.dbline 97
	movw R24,R12
	adiw R24,1
	movw R12,R24
L39:
	.dbline 97
; 				 for (j=0;j<6;j++) File.Name[LongFilePtr++] = Entry.Win.Part2[j];
	movw R24,R12
	cpi R24,6
	ldi R30,0
	cpc R25,R30
	brlo L36
	.dbline 98
	clr R12
	clr R13
	xjmp L44
L41:
	.dbline 98
	movw R2,R10
	movw R24,R2
	adiw R24,1
	movw R10,R24
	ldi R16,2
	ldi R17,0
	movw R18,R12
	xcall empy16s
	movw R30,R16
	movw R24,R28
	adiw R24,36
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	ldd R5,z+1
	ldi R24,<_File
	ldi R25,>_File
	movw R30,R2
	add R30,R24
	adc R31,R25
	std z+0,R4
L42:
	.dbline 98
	movw R24,R12
	adiw R24,1
	movw R12,R24
L44:
	.dbline 98
; 				 for (j=0;j<2;j++) File.Name[LongFilePtr++] = Entry.Win.Part3[j];
	movw R24,R12
	cpi R24,2
	ldi R30,0
	cpc R25,R30
	brlo L41
	.dbline 99
; 				 if (Entry.Win.Cnt & 0x40) File.Name[LongFilePtr++] = 0x00;
	ldd R2,y+8
	sbrs R2,6
	rjmp L29
	.dbline 99
	movw R2,R10
	movw R24,R2
	adiw R24,1
	movw R10,R24
	ldi R24,<_File
	ldi R25,>_File
	movw R30,R2
	add R30,R24
	adc R31,R25
	clr R2
	std z+0,R2
	.dbline 100
; 				 }
	xjmp L29
L28:
	.dbline 102
; 			  else 
; 			  	 {
	.dbline 103
; 				 if ((Entry.Dir.Name[0] != SLOT_DELETED) && ((Entry.Dir.Attributes & 0x0e) == 0x00))
	ldd R24,y+8
	cpi R24,229
	brne X2
	xjmp L48
X2:
	ldd R24,y+19
	andi R24,14
	breq X3
	xjmp L48
X3:
	.dbline 104
; 			  	 	{
	.dbline 105
; 				 	if (LongFileName == FALSE)
	tst R14
	brne L51
	tst R15
	brne L51
X0:
	.dbline 106
; 				 	   {
	.dbline 107
	clr R12
	clr R13
	xjmp L56
L53:
	.dbline 107
	movw R24,R28
	adiw R24,8
	movw R30,R12
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R24,<_File
	ldi R25,>_File
	movw R30,R12
	add R30,R24
	adc R31,R25
	std z+0,R2
L54:
	.dbline 107
	movw R24,R12
	adiw R24,1
	movw R12,R24
L56:
	.dbline 107
; 				 	   for (j=0;j<8;j++) File.Name[j] = Entry.Dir.Name[j];
	movw R24,R12
	cpi R24,8
	ldi R30,0
	cpc R25,R30
	brlo L53
	.dbline 108
; 					   File.Name[8] = 0x00;
	clr R2
	sts _File+8,R2
	.dbline 109
; 					   }	
L51:
	.dbline 110
; 				 	File.FirstClust = Entry.Dir.FirstClustHi;
	ldd R2,y+28
	ldd R3,y+29
	clr R4
	clr R5
	sts _File+260+1,R3
	sts _File+260,R2
	sts _File+260+2+1,R5
	sts _File+260+2,R4
	.dbline 111
; 				 	File.FirstClust = (File.FirstClust << 16) + Entry.Dir.FirstClustLo;
	ldd R2,y+34
	ldd R3,y+35
	clr R4
	clr R5
	lds R8,_File+260+2
	lds R9,_File+260+2+1
	lds R6,_File+260
	lds R7,_File+260+1
	movw R8,R6
	clr R6
	clr R7
	add R6,R2
	adc R7,R3
	adc R8,R4
	adc R9,R5
	sts _File+260+1,R7
	sts _File+260,R6
	sts _File+260+2+1,R9
	sts _File+260+2,R8
	.dbline 112
; 				 	File.FileSize = Entry.Dir.FileSize;
	movw R30,R28
	ldd R2,z+36
	ldd R3,z+37
	ldd R4,z+38
	ldd R5,z+39
	sts _File+264+1,R3
	sts _File+264,R2
	sts _File+264+2+1,R5
	sts _File+264+2,R4
	.dbline 113
; 					File.Attr = Entry.Dir.Attributes;
	ldd R2,y+19
	sts _File+259,R2
	.dbline 114
; 					if ((File.FirstClust == 0) && 
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	cp R6,R20
	cpc R7,R21
	cpc R8,R22
	cpc R9,R23
	brne L67
	mov R24,R2
	cpi R24,16
	brne L67
	.dbline 115
; 					    (File.Attr == ATTR_DIRECTORY)) File.FirstClust = 2;  // Don't know why?
	ldi R20,2
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sts _File+260+1,R21
	sts _File+260,R20
	sts _File+260+2+1,R23
	sts _File+260+2,R22
L67:
	.dbline 116
; 				 	LongFileName = FALSE;
	clr R14
	clr R15
	.dbline 118
; 								 
; 				 	if ((File.FirstClust == 0) && (File.Attr == ATTR_NORMAL)) return Files;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_File+260+2
	lds R5,_File+260+2+1
	lds R2,_File+260
	lds R3,_File+260+1
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brne L72
	lds R2,_File+259
	tst R2
	brne L72
	.dbline 118
	ldd R16,y+55
	ldd R17,y+56
	xjmp L14
L72:
	.dbline 119
; 					if ((Files >= From) && (Files < (From + Qte)) && (Display == TRUE)) DisplayFiles(&LinePtr);
	ldd R0,y+55
	ldd R1,y+56
	movw R30,R28
	subi R30,185  ; addi 71
	sbci R31,255
	ldd R16,z+0
	ldd R17,z+1
	cp R0,R16
	cpc R1,R17
	brlo L76
	movw R2,R16
	movw R30,R28
	subi R30,183  ; addi 73
	sbci R31,255
	ldd R0,z+0
	ldd R1,z+1
	add R2,R0
	adc R3,R1
	ldd R0,y+55
	ldd R1,y+56
	cp R0,R2
	cpc R1,R3
	brsh L76
	movw R30,R28
	subi R30,181  ; addi 75
	sbci R31,255
	ldd R24,z+0
	ldd R25,z+1
	cpi R24,1
	ldi R30,0
	cpc R25,R30
	brne L76
	.dbline 119
	movw R16,R28
	subi R16,212  ; offset = 44
	sbci R17,255
	xcall _DisplayFiles
L76:
	.dbline 120
; 					if (Files == (From + Qte - 1)) return Files;
	movw R30,R28
	subi R30,185  ; addi 71
	sbci R31,255
	ldd R24,z+0
	ldd R25,z+1
	movw R30,R28
	subi R30,183  ; addi 73
	sbci R31,255
	ldd R0,z+0
	ldd R1,z+1
	add R24,R0
	adc R25,R1
	sbiw R24,1
	ldd R0,y+55
	ldd R1,y+56
	cp R0,R24
	cpc R1,R25
	brne L78
	.dbline 120
	movw R16,R0
	xjmp L14
L78:
	.dbline 121
; 					Files++;	
	ldd R24,y+55
	ldd R25,y+56
	adiw R24,1
	std y+56,R25
	std y+55,R24
	.dbline 122
; 				 	}
	xjmp L49
L48:
	.dbline 123
; 			     else LongFileName = FALSE;
	clr R14
	clr R15
L49:
	.dbline 124
; 				 }
L29:
	.dbline 125
L24:
	.dbline 89
	ldd R24,y+53
	ldd R25,y+54
	adiw R24,32
	std y+54,R25
	std y+53,R24
L26:
	.dbline 89
	lds R2,_Boot+11
	lds R3,_Boot+11+1
	ldd R0,y+53
	ldd R1,y+54
	cp R0,R2
	cpc R1,R3
	brsh X4
	xjmp L23
X4:
	.dbline 126
L19:
	.dbline 86
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+40
	ldd R3,z+41
	ldd R4,z+42
	ldd R5,z+43
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	movw R30,R28
	std z+40,R2
	std z+41,R3
	std z+42,R4
	std z+43,R5
L21:
	.dbline 86
	lds R2,_Boot+13
	clr R3
	clr R4
	clr R5
	movw R30,R28
	ldd R6,z+40
	ldd R7,z+41
	ldd R8,z+42
	ldd R9,z+43
	cp R6,R2
	cpc R7,R3
	cpc R8,R4
	cpc R9,R5
	brsh X5
	xjmp L18
X5:
	.dbline 127
; 			  }
; 		  }
; 	  NextCluster = GetNextCluster(NextCluster);
	movw R30,R28
	ldd R16,z+49
	ldd R17,z+50
	ldd R18,z+51
	ldd R19,z+52
	xcall _GetNextCluster
	movw R30,R28
	std z+49,R16
	std z+50,R17
	std z+51,R18
	std z+52,R19
	.dbline 128
; 	  if (NextCluster > CLUST_RSRVD) break;
	ldi R20,246
	ldi R21,255
	ldi R22,255
	ldi R23,15
	movw R30,R28
	ldd R2,z+49
	ldd R3,z+50
	ldd R4,z+51
	ldd R5,z+52
	cp R20,R2
	cpc R21,R3
	cpc R22,R4
	cpc R23,R5
	brsh L80
	.dbline 128
	xjmp L17
L80:
	.dbline 129
L16:
	.dbline 83
	xjmp L15
L17:
	.dbline 130
; 	  }
; return Files;
	ldd R16,y+55
	ldd R17,y+56
	.dbline -2
L14:
	adiw R28,57
	xcall pop_gset5
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym l k 9 i
	.dbsym l NextCluster 49 l
	.dbsym l LBA 45 l
	.dbsym l LinePtr 44 c
	.dbsym l i 40 l
	.dbsym r LongFileName 14 i
	.dbsym l Files 55 i
	.dbsym l Offset 53 i
	.dbsym r LongFilePtr 10 i
	.dbsym l Entry 8 X
	.dbsym r j 12 i
	.dbsym l Display 75 i
	.dbsym l Qte 73 i
	.dbsym l From 71 i
	.dbsym l Cluster 67 l
	.dbend
	.dbfunc e DisplayFiles _DisplayFiles fV
;              i -> R20,R21
;              j -> R10,R11
;        LinePtr -> R22,R23
	.even
_DisplayFiles::
	xcall push_gset3
	movw R22,R16
	.dbline -1
	.dbline 138
; }
; 
; //*************************************
; // void DisplayFiles(unsigned int FileNum)
; //
; //*************************************
; void DisplayFiles(unsigned char *LinePtr)
; {
	.dbline 142
; extern unsigned char RemoteTextLine[5][40];
; int i,j;
; 
; if (*LinePtr == 0)
	movw R30,R22
	ldd R2,z+0
	tst R2
	brne L83
	.dbline 143
;    {
	.dbline 144
;    for (i=0;i<5;i++) // Clear all FileName in the commun buffer
	clr R20
	clr R21
L85:
	.dbline 145
; 	   {
	.dbline 146
	clr R10
	clr R11
L89:
	.dbline 146
	ldi R16,40
	ldi R17,0
	movw R18,R20
	xcall empy16s
	movw R2,R16
	ldi R24,<_RemoteTextLine
	ldi R25,>_RemoteTextLine
	add R2,R24
	adc R3,R25
	movw R30,R10
	add R30,R2
	adc R31,R3
	clr R2
	std z+0,R2
L90:
	.dbline 146
	movw R24,R10
	adiw R24,1
	movw R10,R24
	.dbline 146
	cpi R24,40
	ldi R30,0
	cpc R25,R30
	brlt L89
	.dbline 147
L86:
	.dbline 144
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 144
	cpi R20,5
	ldi R30,0
	cpc R21,R30
	brlt L85
	.dbline 148
; 	   for (j=0;j<40;j++) RemoteTextLine[i][j] = 0x00;
; 	   }
;    }
L83:
	.dbline 150
; 
; File.Name[39] = 0x00;
	clr R2
	sts _File+39,R2
	.dbline 151
	clr R20
	clr R21
L94:
	.dbline 151
	movw R30,R22
	ldd R2,z+0
	ldi R24,40
	mul R24,R2
	movw R2,R0
	ldi R24,<_RemoteTextLine
	ldi R25,>_RemoteTextLine
	add R2,R24
	adc R3,R25
	movw R30,R20
	add R30,R2
	adc R31,R3
	ldi R24,<_File
	ldi R25,>_File
	movw R26,R20
	add R26,R24
	adc R27,R25
	ld R2,x
	std z+0,R2
L95:
	.dbline 151
; for (i=0;i<40;i++) RemoteTextLine[*LinePtr][i] = File.Name[i];
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 151
	cpi R20,40
	ldi R30,0
	cpc R21,R30
	brlt L94
	.dbline 152
; (*LinePtr)++;
	movw R30,R22
	ldd R24,z+0
	subi R24,255    ; addi 1
	std z+0,R24
	.dbline -2
L82:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 20 I
	.dbsym r j 10 I
	.dbsym r LinePtr 22 pc
	.dbend
	.area bss(ram, con, rel)
	.dbfile G:\IccPro\Mp3Ide\fat.c
_FirstDataSector::
	.blkb 4
	.dbsym e FirstDataSector _FirstDataSector l
_File::
	.blkb 268
	.dbsym e File _File X
_Boot::
	.blkb 52
	.dbsym e Boot _Boot X
_Part::
	.blkb 16
	.dbsym e Part _Part X

⌨️ 快捷键说明

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