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

📄 sd.lst

📁 /*** *** *** *** *** *** *** *** *** *** / /* MP3 Code for M32L */ /* By pasyong
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0E2F 92200067  STS	0x67,R2
(0162) 	
(0163) 	
(0164) 	// 读取目录区数据
(0165) 	sector = fatClustToSect(FirstDirSector);
    0E31 912002B7  LDS	R18,_FirstDirSector+2
    0E33 913002B8  LDS	R19,_FirstDirSector+3
    0E35 910002B5  LDS	R16,_FirstDirSector
    0E37 911002B6  LDS	R17,_FirstDirSector+1
    0E39 DE2A      RCALL	_fatClustToSect
    0E3A 01FE      MOVW	R30,R28
    0E3B 8302      STD	Z+2,R16
    0E3C 8313      STD	Z+3,R17
    0E3D 8324      STD	Z+4,R18
    0E3E 8335      STD	Z+5,R19
(0166) 
(0167) 	hasBuffer = 0;
    0E3F 2400      CLR	R0
    0E40 2411      CLR	R1
    0E41 8A1D      STD	Y+21,R1
    0E42 8A0C      STD	Y+20,R0
(0168) 
(0169) 	index = 16;	
    0E43 E180      LDI	R24,0x10
    0E44 E090      LDI	R25,0
    0E45 8B9B      STD	Y+19,R25
    0E46 8B8A      STD	Y+18,R24
(0170) 	do 
(0171) 	{
(0172) 		if(index == 16)	// 是否该一人一扇区time for next sector ?
    0E47 898A      LDD	R24,Y+18
    0E48 899B      LDD	R25,Y+19
    0E49 3180      CPI	R24,0x10
    0E4A E0E0      LDI	R30,0
    0E4B 079E      CPC	R25,R30
    0E4C F009      BEQ	0x0E4E
    0E4D C02A      RJMP	0x0E78
(0173) 		{
(0174) 			ReadBlock(sector++);
    0E4E 01FE      MOVW	R30,R28
    0E4F 8022      LDD	R2,Z+2
    0E50 8033      LDD	R3,Z+3
    0E51 8044      LDD	R4,Z+4
    0E52 8055      LDD	R5,Z+5
    0E53 01FE      MOVW	R30,R28
    0E54 8226      STD	Z+6,R2
    0E55 8237      STD	Z+7,R3
    0E56 8640      STD	Z+8,R4
    0E57 8651      STD	Z+9,R5
    0E58 E041      LDI	R20,1
    0E59 E050      LDI	R21,0
    0E5A E060      LDI	R22,0
    0E5B E070      LDI	R23,0
    0E5C 01FE      MOVW	R30,R28
    0E5D 8026      LDD	R2,Z+6
    0E5E 8037      LDD	R3,Z+7
    0E5F 8440      LDD	R4,Z+8
    0E60 8451      LDD	R5,Z+9
    0E61 0E24      ADD	R2,R20
    0E62 1E35      ADC	R3,R21
    0E63 1E46      ADC	R4,R22
    0E64 1E57      ADC	R5,R23
    0E65 01FE      MOVW	R30,R28
    0E66 8222      STD	Z+2,R2
    0E67 8233      STD	Z+3,R3
    0E68 8244      STD	Z+4,R4
    0E69 8255      STD	Z+5,R5
    0E6A 01FE      MOVW	R30,R28
    0E6B 8106      LDD	R16,Z+6
    0E6C 8117      LDD	R17,Z+7
    0E6D 8520      LDD	R18,Z+8
    0E6E 8531      LDD	R19,Z+9
    0E6F DDD7      RCALL	_ReadBlock
(0175) 			de = (struct direntry *)BUFFER;
    0E70 EB81      LDI	R24,0xB1
    0E71 E090      LDI	R25,0
    0E72 8B99      STD	Y+17,R25
    0E73 8B88      STD	Y+16,R24
(0176) 			index = 0;
    0E74 2400      CLR	R0
    0E75 2411      CLR	R1
    0E76 8A1B      STD	Y+19,R1
    0E77 8A0A      STD	Y+18,R0
(0177) 		}	
(0178) 	
(0179) 		if(*de->deName != 0xE5)
    0E78 89E8      LDD	R30,Y+16
    0E79 89F9      LDD	R31,Y+17
    0E7A 8180      LDD	R24,Z+0
    0E7B 3E85      CPI	R24,0xE5
    0E7C F409      BNE	0x0E7E
    0E7D C122      RJMP	0x0FA0
(0180) 		{
(0181) 			// 如果if not a deleted entry
(0182) 			if(de->deAttributes == ATTR_LONG_FILENAME)
    0E7E 8583      LDD	R24,Z+11
    0E7F 308F      CPI	R24,0xF
    0E80 F009      BEQ	0x0E82
    0E81 C06F      RJMP	0x0EF1
(0183) 			{
(0184) 				// we have a long name entry
(0185) 				we = (struct winentry *) de;
    0E82 8808      LDD	R0,Y+16
    0E83 8819      LDD	R1,Y+17
    0E84 861F      STD	Y+15,R1
    0E85 860E      STD	Y+14,R0
(0186) 				b = 13 *( (we->weCnt-1) & 0x0f);				// index into string
    0E86 01F0      MOVW	R30,R0
    0E87 8180      LDD	R24,Z+0
    0E88 5081      SUBI	R24,1
    0E89 708F      ANDI	R24,0xF
    0E8A E09D      LDI	R25,0xD
    0E8B 9F98      MUL	R25,R24
    0E8C 8A1F      STD	Y+23,R1
    0E8D 8A0E      STD	Y+22,R0
(0187) 				p = &LongNameBuffer[b];
    0E8E 90200065  LDS	R2,0x65
    0E90 90300066  LDS	R3,0x66
    0E92 0160      MOVW	R12,R0
    0E93 0CC2      ADD	R12,R2
    0E94 1CD3      ADC	R13,R3
(0188) 				for (i=0;i<5;i++)	*p++ = we->wePart1[i*2];	// copy first part			
    0E95 24EE      CLR	R14
    0E96 24FF      CLR	R15
    0E97 E002      LDI	R16,2
    0E98 E010      LDI	R17,0
    0E99 0197      MOVW	R18,R14
    0E9A 940E1356  CALL	empy16s
    0E9C 01F8      MOVW	R30,R16
    0E9D 858E      LDD	R24,Y+14
    0E9E 859F      LDD	R25,Y+15
    0E9F 9601      ADIW	R24,1
    0EA0 0FE8      ADD	R30,R24
    0EA1 1FF9      ADC	R31,R25
    0EA2 8020      LDD	R2,Z+0
    0EA3 01F6      MOVW	R30,R12
    0EA4 9221      ST	R2,Z+
    0EA5 016F      MOVW	R12,R30
    0EA6 01C7      MOVW	R24,R14
    0EA7 9601      ADIW	R24,1
    0EA8 017C      MOVW	R14,R24
    0EA9 3085      CPI	R24,5
    0EAA E0E0      LDI	R30,0
    0EAB 079E      CPC	R25,R30
    0EAC F354      BLT	0x0E97
(0189) 				for (i=0;i<6;i++)	*p++ = we->wePart2[i*2];	// second part
    0EAD 24EE      CLR	R14
    0EAE 24FF      CLR	R15
    0EAF E002      LDI	R16,2
    0EB0 E010      LDI	R17,0
    0EB1 0197      MOVW	R18,R14
    0EB2 940E1356  CALL	empy16s
    0EB4 01F8      MOVW	R30,R16
    0EB5 858E      LDD	R24,Y+14
    0EB6 859F      LDD	R25,Y+15
    0EB7 960E      ADIW	R24,0xE
    0EB8 0FE8      ADD	R30,R24
    0EB9 1FF9      ADC	R31,R25
    0EBA 8020      LDD	R2,Z+0
    0EBB 01F6      MOVW	R30,R12
    0EBC 9221      ST	R2,Z+
    0EBD 016F      MOVW	R12,R30
    0EBE 01C7      MOVW	R24,R14
    0EBF 9601      ADIW	R24,1
    0EC0 017C      MOVW	R14,R24
    0EC1 3086      CPI	R24,6
    0EC2 E0E0      LDI	R30,0
    0EC3 079E      CPC	R25,R30
    0EC4 F354      BLT	0x0EAF
(0190) 				for (i=0;i<2;i++)	*p++ = we->wePart3[i*2];	// and third part
    0EC5 24EE      CLR	R14
    0EC6 24FF      CLR	R15
    0EC7 E002      LDI	R16,2
    0EC8 E010      LDI	R17,0
    0EC9 0197      MOVW	R18,R14
    0ECA 940E1356  CALL	empy16s
    0ECC 01F8      MOVW	R30,R16
    0ECD 858E      LDD	R24,Y+14
    0ECE 859F      LDD	R25,Y+15
    0ECF 964C      ADIW	R24,0x1C
    0ED0 0FE8      ADD	R30,R24
    0ED1 1FF9      ADC	R31,R25
    0ED2 8020      LDD	R2,Z+0
    0ED3 01F6      MOVW	R30,R12
    0ED4 9221      ST	R2,Z+
    0ED5 016F      MOVW	R12,R30
    0ED6 01C7      MOVW	R24,R14
    0ED7 9601      ADIW	R24,1
    0ED8 017C      MOVW	R14,R24
    0ED9 3082      CPI	R24,2
    0EDA E0E0      LDI	R30,0
    0EDB 079E      CPC	R25,R30
    0EDC F354      BLT	0x0EC7
(0191) 				if (we->weCnt & 0x40) *p = 0;					// in case dirnamelength is multiple of 13
    0EDD 85EE      LDD	R30,Y+14
    0EDE 85FF      LDD	R31,Y+15
    0EDF 8020      LDD	R2,Z+0
    0EE0 FE26      SBRS	R2,6
    0EE1 C003      RJMP	0x0EE5
    0EE2 2422      CLR	R2
    0EE3 01F6      MOVW	R30,R12
    0EE4 8220      STD	Z+0,R2
(0192) 				if ((we->weCnt & 0x0f) == 1) hasBuffer = 1;		// mark that we have a long entry
    0EE5 85EE      LDD	R30,Y+14
    0EE6 85FF      LDD	R31,Y+15
    0EE7 8180      LDD	R24,Z+0
    0EE8 708F      ANDI	R24,0xF
    0EE9 3081      CPI	R24,1
    0EEA F009      BEQ	0x0EEC
    0EEB C0B4      RJMP	0x0FA0
    0EEC E081      LDI	R24,1
    0EED E090      LDI	R25,0
    0EEE 8B9D      STD	Y+21,R25
    0EEF 8B8C      STD	Y+20,R24
(0193) 			}
    0EF0 C0AF      RJMP	0x0FA0
(0194) 			else
(0195) 			{
(0196) 				// we have a short name entry
(0197) 				// check if this is the end of a multi-part long name entry
(0198) 				if(hasBuffer)
    0EF1 880C      LDD	R0,Y+20
    0EF2 881D      LDD	R1,Y+21
    0EF3 2000      TST	R0
    0EF4 F419      BNE	0x0EF8
    0EF5 2011      TST	R1
    0EF6 F409      BNE	0x0EF8
    0EF7 C0A8      RJMP	0x0FA0
(0199) 				{
(0200) 					// a long entry name has been collected
(0201) 					// is it a directory ?
(0202) 					if(de->deAttributes == ATTR_DIRECTORY)
    0EF8 89E8      LDD	R30,Y+16
    0EF9 89F9      LDD	R31,Y+17
    0EFA 8583      LDD	R24,Z+11
    0EFB 3180      CPI	R24,0x10
    0EFC F009      BEQ	0x0EFE
    0EFD C08B      RJMP	0x0F89
(0203) 					{
(0204) 						unsigned long save = FirstDirSector;
    0EFE 904002B7  LDS	R4,_FirstDirSector+2
    0F00 905002B8  LDS	R5,_FirstDirSector+3
    0F02 902002B5  LDS	R2,_FirstDirSector
    0F04 903002B6  LDS	R3,_FirstDirSector+1
    0F06 01FE      MOVW	R30,R28
    0F07 8226      STD	Z+6,R2
    0F08 8237      STD	Z+7,R3
    0F09 8640      STD	Z+8,R4
    0F0A 8651      STD	Z+9,R5
(0205) 						unsigned int save2 = baseentry;
    0F0B 90A0006D  LDS	R10,0x6D
    0F0D 90B0006E  LDS	R11,0x6E
(0206) 						unsigned long rval;
(0207) 						
(0208) 						strcpy(DirNameBuffer,LongNameBuffer);
    0F0F 91200065  LDS	R18,0x65
    0F11 91300066  LDS	R19,0x66
    0F13 91000067  LDS	R16,0x67
    0F15 91100068  LDS	R17,0x68
    0F17 940E12BB  CALL	_strcpy
(0209) 						strcat(DirNameBuffer,"/");
    0F19 E721      LDI	R18,0x71
    0F1A E030      LDI	R19,0
    0F1B 91000067  LDS	R16,0x67
    0F1D 91100068  LDS	R17,0x68
    0F1F 940E12AE  CALL	_strcat
(0210) 
(0211) //						rprintfStr(LongNameBuffer); rprintfProgStrM("/"); //EOL();
(0212) 
(0213) 						// call recursively
(0214) 						FirstDirSector = ((unsigned long)de->deHighClust << 16) + de->deStartCluster;
    0F21 89E8      LDD	R30,Y+16
    0F22 89F9      LDD	R31,Y+17
    0F23 8C22      LDD	R2,Z+26
    0F24 8C33      LDD	R3,Z+27
    0F25 2444      CLR	R4
    0F26 2455      CLR	R5
    0F27 89E8      LDD	R30,Y+16
    0F28 89F9      LDD	R31,Y+17
    0F29 8864      LDD	R6,Z+20
    0F2A 8875      LDD	R7,Z+21
    0F2B 2488      CLR	R8
    0F2C 2499      CLR	R9
    0F2D 0143      MOVW	R8,R6
    0F2E 2466      CLR	R6
    0F2F 2477      CLR	R7
    0F30 0C62      ADD	R6,R2
    0F31 1C73      ADC	R7,R3
    0F32 1C84      ADC	R8,R4
    0F33 1C95      ADC	R9,R5
    0F34 927002B6  STS	_FirstDirSector+1,R7
    0F36 926002B5  STS	_FirstDirSector,R6
    0F38 929002B8  STS	_FirstDirSector+3,R9
    0F3A 928002B7  STS	_FirstDirSector+2,R8
(0215) 						rval = fatGetDirEntry(entry);
    0F3C A10A      LDD	R16,Y+34
    0F3D A11B      LDD	R17,Y+35
    0F3E DEDF      RCALL	_fatGetDirEntry
    0F3F 01FE      MOVW	R30,R28
    0F40 8702      STD	Z+10,R16
    0F41 8713      STD	Z+11,R17
    0F42 8724      STD	Z+12,R18
    0F43 8735      STD	Z+13,R19
(0216) 						FirstDirSector = save;
    0F44 01FE      MOVW	R30,R28
    0F45 8026      LDD	R2,Z+6
    0F46 8037      LDD	R3,Z+7
    0F47 8440      LDD	R4,Z+8
    0F48 8451      LDD	R5,Z+9
    0F49 923002B6  STS	_FirstDirSector+1,R3
    0F4B 922002B5  STS	_FirstDirSector,R2
    0F4D 925002B8  STS	_FirstDirSector+3,R5
    0F4F 924002B7  STS	_FirstDirSector+2,R4
(0217) 						baseentry = save2;
    0F51 92B0006E  STS	0x6E,R11
    0F53 92A0006D  STS	0x6D,R10
(0218) 						if (rval)
    0F55 E040      LDI	R20,0
    0F56 E050      LDI	R21,0
    0F57 E060      LDI	R22,0
    0F58 E070      LDI	R23,0
    0F59 01FE      MOVW	R30,R28
    0F5A 8422      LDD	R2,Z+10
    0F5B 8433      LDD	R3,Z+11
    0F5C 8444      LDD	R4,Z+12
    0F5D 8455      LDD	R5,Z+13
    0F5E 1624      CP	R2,R20
    0F5F 0635      CPC	R3,R21
    0F60 0646      CPC	R4,R22
    0F61 0657      CPC	R5,R23
    0F62 F031      BEQ	0x0F69
(0219) 							return rval;
    0F63 01FE      MOVW	R30,R28
    0F64 8502      LDD	R16,Z+10
    0F65 8513      LDD	R17,Z+11
    0F66 8524      LDD	R18,Z+12
    0F67 8535      LDD	R19,Z+13
    0F68 C086      RJMP	0x0FEF
(0220) 						else	
(0221) 						{
(0222) 							// reload original sector
(0223) 							ReadBlock(sector-1);//ataReadSectors( DRIVE0,	sector-1, 1, SectorBuffer);
    0F69 E041      LDI	R20,1
    0F6A E050      LDI	R21,0
    0F6B E060      LDI	R22,0
    0F6C E070      LDI	R23,0
    0F6D 01FE      MOVW	R30,R28
    0F6E 8022      LDD	R2,Z+2
    0F6F 8033      LDD	R3,Z+3
    0F70 8044      LDD	R4,Z+4
    0F71 8055      LDD	R5,Z+5
    0F72 1A24      SUB	R2,R20
    0F73 0A35      SBC	R3,R21
    0F74 0A46      SBC	R4,R22
    0F75 0A57      SBC	R5,R23
    0F76 0181      MOVW	R16,R2
    0F77 0192      MOVW	R18,R4
    0F78 DCCE      RCALL	_ReadBlock
(0224) 							entrycount--;			// decrement entry counter		
    0F79 9180006F  LDS	R24,0x6F
    0F7B 91900070  LDS	R25,0x70
    0F7D 9701      SBIW	R24,1
    0F7E 93900070  STS	0x70,R25
    0F80 9380006F  STS	0x6F,R24
(0225) 							*DirNameBuffer = 0;
    0F82 2422      CLR	R2
    0F83 91E00067  LDS	R30,0x67
    0F85 91F00068  LDS	R31,0x68
    0F87 8220      STD	Z+0,R2
(0226)                  	}
(0227) 					}
    0F88 C00A      RJMP	0x0F93
(0228) 					else // normal file entry
(0229) 						if(entrycount == entry)		
    0F89 9020006F  LDS	R2,0x6F
    0F8B 90300070  LDS	R3,0x70
    0F8D A00A      LDD	R0,Y+34
    0F8E A01B      LDD	R1,Y+35
    0F8F 1420      CP	R2,R0
    0F90 0431      CPC	R3,R1
    0F91 F409      BNE	0x0F93
(0230) 							break;
    0F92 C024      RJMP	0x0FB7
(0231) 					hasBuffer = 0;	// clear buffer	
    0F93 2400      CLR	R0
    0F94 2411      CLR	R1
    0F95 8A1D      STD	Y+21,R1
    0F96 8A0C      STD	Y+20,R0
(0232) 					entrycount++;	// increment entry counter		
    0F97 9180006F  LDS	R24,0x6F
    0F99 91900070  LDS	R25,0x70
    0F9B 9601      ADIW	R24,1
    0F9C 93900070  STS	0x70,R25
    0F9E 9380006F  STS	0x6F,R24
(0233) 				}
(0234) 				// else ignore short_name_only entries
(0235) 			}
(0236) 		}

⌨️ 快捷键说明

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