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

📄 sd.lst

📁 /*** *** *** *** *** *** *** *** *** *** / /* MP3 Code for M32L */ /* By pasyong
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0CC0 902002CE  LDS	R2,0x2CE
    0CC2 903002CF  LDS	R3,0x2CF
    0CC4 923002C2  STS	_FirstDataSector+1,R3
    0CC6 922002C1  STS	_FirstDataSector,R2
    0CC8 925002C4  STS	_FirstDataSector+3,R5
    0CCA 924002C3  STS	_FirstDataSector+2,R4
(0071) 	if(bpb->bpbFATsecs)
    0CCC 01FC      MOVW	R30,R24
    0CCD 8423      LDD	R2,Z+11
    0CCE 8434      LDD	R3,Z+12
    0CCF 2022      TST	R2
    0CD0 F411      BNE	0x0CD3
    0CD1 2033      TST	R3
    0CD2 F121      BEQ	0x0CF7
(0072) 	{
(0073) 		// bpbFATsecs非0,为FAT16,FAT表所占的扇区数在bpbFATsecs里
(0074) 		FirstDataSector	+= bpb->bpbResSectors + bpb->bpbFATs * bpb->bpbFATsecs;
    0CD3 01F5      MOVW	R30,R10
    0CD4 8523      LDD	R18,Z+11
    0CD5 8534      LDD	R19,Z+12
    0CD6 01F5      MOVW	R30,R10
    0CD7 8105      LDD	R16,Z+5
    0CD8 2711      CLR	R17
    0CD9 940E1356  CALL	empy16s
    0CDB 01F5      MOVW	R30,R10
    0CDC 8023      LDD	R2,Z+3
    0CDD 8034      LDD	R3,Z+4
    0CDE 0E20      ADD	R2,R16
    0CDF 1E31      ADC	R3,R17
    0CE0 2444      CLR	R4
    0CE1 2455      CLR	R5
    0CE2 908002C3  LDS	R8,_FirstDataSector+2
    0CE4 909002C4  LDS	R9,_FirstDataSector+3
    0CE6 906002C1  LDS	R6,_FirstDataSector
    0CE8 907002C2  LDS	R7,_FirstDataSector+1
    0CEA 0C62      ADD	R6,R2
    0CEB 1C73      ADC	R7,R3
    0CEC 1C84      ADC	R8,R4
    0CED 1C95      ADC	R9,R5
    0CEE 927002C2  STS	_FirstDataSector+1,R7
    0CF0 926002C1  STS	_FirstDataSector,R6
    0CF2 929002C4  STS	_FirstDataSector+3,R9
    0CF4 928002C3  STS	_FirstDataSector+2,R8
(0075) 	}
    0CF6 C02F      RJMP	0x0D26
(0076) 	else
(0077) 	{
(0078) 		// bpbFATsecs是0,为FAT32,FAT表所占的扇区数在bpbBigFATsecs里
(0079) 		FirstDataSector	+= bpb->bpbResSectors + bpb->bpbFATs * bpb->bpbBigFATsecs;
    0CF7 01F5      MOVW	R30,R10
    0CF8 8C21      LDD	R2,Z+25
    0CF9 8C32      LDD	R3,Z+26
    0CFA 8C43      LDD	R4,Z+27
    0CFB 8C54      LDD	R5,Z+28
    0CFC 01F5      MOVW	R30,R10
    0CFD 8065      LDD	R6,Z+5
    0CFE 2477      CLR	R7
    0CFF 2488      CLR	R8
    0D00 2499      CLR	R9
    0D01 925A      ST	R5,-Y
    0D02 924A      ST	R4,-Y
    0D03 923A      ST	R3,-Y
    0D04 922A      ST	R2,-Y
    0D05 0183      MOVW	R16,R6
    0D06 0194      MOVW	R18,R8
    0D07 940E1366  CALL	empy32s
    0D09 01F5      MOVW	R30,R10
    0D0A 8023      LDD	R2,Z+3
    0D0B 8034      LDD	R3,Z+4
    0D0C 2444      CLR	R4
    0D0D 2455      CLR	R5
    0D0E 0E20      ADD	R2,R16
    0D0F 1E31      ADC	R3,R17
    0D10 1E42      ADC	R4,R18
    0D11 1E53      ADC	R5,R19
    0D12 908002C3  LDS	R8,_FirstDataSector+2
    0D14 909002C4  LDS	R9,_FirstDataSector+3
    0D16 906002C1  LDS	R6,_FirstDataSector
    0D18 907002C2  LDS	R7,_FirstDataSector+1
    0D1A 0C62      ADD	R6,R2
    0D1B 1C73      ADC	R7,R3
    0D1C 1C84      ADC	R8,R4
    0D1D 1C95      ADC	R9,R5
    0D1E 927002C2  STS	_FirstDataSector+1,R7
    0D20 926002C1  STS	_FirstDataSector,R6
    0D22 929002C4  STS	_FirstDataSector+3,R9
    0D24 928002C3  STS	_FirstDataSector+2,R8
(0080) 	}
(0081) 	
(0082) 	SectorsPerCluster	= bpb->bpbSecPerClust;
    0D26 01F5      MOVW	R30,R10
    0D27 8022      LDD	R2,Z+2
    0D28 2433      CLR	R3
    0D29 923002BE  STS	_SectorsPerCluster+1,R3
    0D2B 922002BD  STS	_SectorsPerCluster,R2
(0083) 	BytesPerSector		= bpb->bpbBytesPerSec;
    0D2D 01F5      MOVW	R30,R10
    0D2E 8020      LDD	R2,Z+0
    0D2F 8031      LDD	R3,Z+1
    0D30 923002C0  STS	_BytesPerSector+1,R3
    0D32 922002BF  STS	_BytesPerSector,R2
(0084) 	FirstFATSector		= bpb->bpbResSectors + PartInfo.prStartLBA;
    0D34 904002D0  LDS	R4,0x2D0
    0D36 905002D1  LDS	R5,0x2D1
    0D38 902002CE  LDS	R2,0x2CE
    0D3A 903002CF  LDS	R3,0x2CF
    0D3C 8063      LDD	R6,Z+3
    0D3D 8074      LDD	R7,Z+4
    0D3E 2488      CLR	R8
    0D3F 2499      CLR	R9
    0D40 0C62      ADD	R6,R2
    0D41 1C73      ADC	R7,R3
    0D42 1C84      ADC	R8,R4
    0D43 1C95      ADC	R9,R5
    0D44 927002BA  STS	_FirstFATSector+1,R7
    0D46 926002B9  STS	_FirstFATSector,R6
    0D48 929002BC  STS	_FirstFATSector+3,R9
    0D4A 928002BB  STS	_FirstFATSector+2,R8
(0085) //查询SD卡文件系统分区类型
(0086) 	switch (PartInfo.prPartType)
    0D4C 90C002CA  LDS	R12,0x2CA
    0D4E 24DD      CLR	R13
    0D4F 01C6      MOVW	R24,R12
    0D50 3084      CPI	R24,4
    0D51 E0E0      LDI	R30,0
    0D52 079E      CPC	R25,R30
    0D53 F0B1      BEQ	0x0D6A
    0D54 3086      CPI	R24,6
    0D55 E0E0      LDI	R30,0
    0D56 079E      CPC	R25,R30
    0D57 F091      BEQ	0x0D6A
    0D58 3084      CPI	R24,4
    0D59 E0E0      LDI	R30,0
    0D5A 079E      CPC	R25,R30
    0D5B F174      BLT	0x0D8A
    0D5C 01C6      MOVW	R24,R12
    0D5D 308B      CPI	R24,0xB
    0D5E E0E0      LDI	R30,0
    0D5F 079E      CPC	R25,R30
    0D60 F0C9      BEQ	0x0D7A
    0D61 308C      CPI	R24,0xC
    0D62 E0E0      LDI	R30,0
    0D63 079E      CPC	R25,R30
    0D64 F0A9      BEQ	0x0D7A
    0D65 308E      CPI	R24,0xE
    0D66 E0E0      LDI	R30,0
    0D67 079E      CPC	R25,R30
    0D68 F009      BEQ	0x0D6A
    0D69 C020      RJMP	0x0D8A
(0087) 	{
(0088) 		case PART_TYPE_DOSFAT16:
(0089) 		case PART_TYPE_FAT16: 
(0090) 		case PART_TYPE_FAT16LBA:
(0091) 			// 第一个目录扇区号为2
(0092) 			FirstDirSector	= CLUST_FIRST;
    0D6A E042      LDI	R20,2
    0D6B E050      LDI	R21,0
    0D6C E060      LDI	R22,0
    0D6D E070      LDI	R23,0
    0D6E 935002B6  STS	_FirstDirSector+1,R21
    0D70 934002B5  STS	_FirstDirSector,R20
    0D72 937002B8  STS	_FirstDirSector+3,R23
    0D74 936002B7  STS	_FirstDirSector+2,R22
(0093) 			//FirstDataSector += (bpb->bpbRootDirEnts)/DIRENTRIES_PER_SECTOR;
(0094) 			Fat32Enabled = 0;
    0D76 2422      CLR	R2
    0D77 922002C5  STS	_Fat32Enabled,R2
(0095) 			
(0096) 			break;
    0D79 C010      RJMP	0x0D8A
(0097) 		case PART_TYPE_FAT32LBA:
(0098) 		case PART_TYPE_FAT32:
(0099) 			
(0100) 			FirstDirSector = bpb->bpbRootClust;
    0D7A 01F5      MOVW	R30,R10
    0D7B A021      LDD	R2,Z+33
    0D7C A032      LDD	R3,Z+34
    0D7D A043      LDD	R4,Z+35
    0D7E A054      LDD	R5,Z+36
    0D7F 923002B6  STS	_FirstDirSector+1,R3
    0D81 922002B5  STS	_FirstDirSector,R2
    0D83 925002B8  STS	_FirstDirSector+3,R5
    0D85 924002B7  STS	_FirstDirSector+2,R4
(0101) 			Fat32Enabled = 1;
    0D87 E081      LDI	R24,1
    0D88 938002C5  STS	_Fat32Enabled,R24
(0102) 			break;
(0103) 		default:break;
(0104) 			//return 1;
(0105) 	}
(0106) //查询SD卡文件系统信息
(0107) 	switch (PartInfo.prPartType)
    0D8A 90A002CA  LDS	R10,0x2CA
    0D8C 24BB      CLR	R11
    0D8D 01C5      MOVW	R24,R10
    0D8E 3084      CPI	R24,4
    0D8F E0E0      LDI	R30,0
    0D90 079E      CPC	R25,R30
    0D91 F0B9      BEQ	0x0DA9
    0D92 3086      CPI	R24,6
    0D93 E0E0      LDI	R30,0
    0D94 079E      CPC	R25,R30
    0D95 F0E1      BEQ	0x0DB2
    0D96 3084      CPI	R24,4
    0D97 E0E0      LDI	R30,0
    0D98 079E      CPC	R25,R30
    0D99 F40C      BGE	0x0D9B
    0D9A C03B      RJMP	0x0DD6
    0D9B 01C5      MOVW	R24,R10
    0D9C 308B      CPI	R24,0xB
    0D9D E0E0      LDI	R30,0
    0D9E 079E      CPC	R25,R30
    0D9F F169      BEQ	0x0DCD
    0DA0 308C      CPI	R24,0xC
    0DA1 E0E0      LDI	R30,0
    0DA2 079E      CPC	R25,R30
    0DA3 F101      BEQ	0x0DC4
    0DA4 308E      CPI	R24,0xE
    0DA5 E0E0      LDI	R30,0
    0DA6 079E      CPC	R25,R30
    0DA7 F099      BEQ	0x0DBB
    0DA8 C02D      RJMP	0x0DD6
(0108) 	{
(0109) 		case PART_TYPE_DOSFAT16:
(0110) 				LCD_write_english_string(0,0,"DOSFAT 16");
    0DA9 EA84      LDI	R24,0xA4
    0DAA E090      LDI	R25,0
    0DAB 8399      STD	Y+1,R25
    0DAC 8388      STD	Y+0,R24
    0DAD 2722      CLR	R18
    0DAE 2700      CLR	R16
    0DAF 940E125D  CALL	_LCD_write_english_string
(0111) 				break;
    0DB1 C02C      RJMP	0x0DDE
(0112) 		case PART_TYPE_FAT16:
(0113) 				LCD_write_english_string(0,0,"FAT16 ");
    0DB2 E98D      LDI	R24,0x9D
    0DB3 E090      LDI	R25,0
    0DB4 8399      STD	Y+1,R25
    0DB5 8388      STD	Y+0,R24
    0DB6 2722      CLR	R18
    0DB7 2700      CLR	R16
    0DB8 940E125D  CALL	_LCD_write_english_string
(0114) 				break;
    0DBA C023      RJMP	0x0DDE
(0115) 		case PART_TYPE_FAT16LBA:
(0116) 				LCD_write_english_string(0,0,"FAT16 LBA");
    0DBB E983      LDI	R24,0x93
    0DBC E090      LDI	R25,0
    0DBD 8399      STD	Y+1,R25
    0DBE 8388      STD	Y+0,R24
    0DBF 2722      CLR	R18
    0DC0 2700      CLR	R16
    0DC1 940E125D  CALL	_LCD_write_english_string
(0117) 				break;
    0DC3 C01A      RJMP	0x0DDE
(0118) 		case PART_TYPE_FAT32LBA:
(0119) 				LCD_write_english_string(0,0,"FAT32 LBA");
    0DC4 E889      LDI	R24,0x89
    0DC5 E090      LDI	R25,0
    0DC6 8399      STD	Y+1,R25
    0DC7 8388      STD	Y+0,R24
    0DC8 2722      CLR	R18
    0DC9 2700      CLR	R16
    0DCA 940E125D  CALL	_LCD_write_english_string
(0120) 				break;
    0DCC C011      RJMP	0x0DDE
(0121) 		case PART_TYPE_FAT32:
(0122) 				LCD_write_english_string(0,0,"FAT32");
    0DCD E883      LDI	R24,0x83
    0DCE E090      LDI	R25,0
    0DCF 8399      STD	Y+1,R25
    0DD0 8388      STD	Y+0,R24
    0DD1 2722      CLR	R18
    0DD2 2700      CLR	R16
    0DD3 940E125D  CALL	_LCD_write_english_string
(0123) 				break;
    0DD5 C008      RJMP	0x0DDE
(0124) 		default:
(0125) 				LCD_write_english_string(0,0,"No Partition!");
    0DD6 E785      LDI	R24,0x75
    0DD7 E090      LDI	R25,0
    0DD8 8399      STD	Y+1,R25
    0DD9 8388      STD	Y+0,R24
    0DDA 2722      CLR	R18
    0DDB 2700      CLR	R16
    0DDC 940E125D  CALL	_LCD_write_english_string
(0126) 				break;
(0127) 	}
(0128) //显示磁盘容量
(0129)   data=PartInfo.prSize>>11;
    0DDE E08B      LDI	R24,0xB
    0DDF E090      LDI	R25,0
    0DE0 904002D4  LDS	R4,0x2D4
    0DE2 905002D5  LDS	R5,0x2D5
    0DE4 902002D2  LDS	R2,0x2D2
    0DE6 903002D3  LDS	R3,0x2D3
    0DE8 938A      ST	R24,-Y
    0DE9 0181      MOVW	R16,R2
    0DEA 0192      MOVW	R18,R4
    0DEB 940E13FA  CALL	lsr32
    0DED 0158      MOVW	R10,R16
(0130)     LCD_set_XY(56,0);
    0DEE 2722      CLR	R18
    0DEF E308      LDI	R16,0x38
    0DF0 940E1234  CALL	_LCD_set_XY
(0131)     t1=data/100;
    0DF2 E624      LDI	R18,0x64
    0DF3 E030      LDI	R19,0
    0DF4 0185      MOVW	R16,R10
    0DF5 940E12CB  CALL	div16u
(0132) 	LCD_write_char(t1+48);
    0DF7 5D00      SUBI	R16,0xD0
    0DF8 940E1243  CALL	_LCD_write_char
(0133) 	data=data%100;
    0DFA E624      LDI	R18,0x64
    0DFB E030      LDI	R19,0
    0DFC 0185      MOVW	R16,R10
    0DFD 940E12C9  CALL	mod16u
    0DFF 0158      MOVW	R10,R16
(0134) 	t1=data/10;
    0E00 E02A      LDI	R18,0xA
    0E01 E030      LDI	R19,0
    0E02 940E12CB  CALL	div16u
    0E04 2EC0      MOV	R12,R16
(0135) 	LCD_write_char(t1+48);
    0E05 5D00      SUBI	R16,0xD0
    0E06 940E1243  CALL	_LCD_write_char
(0136) 	t2=data%10;
    0E08 E02A      LDI	R18,0xA
    0E09 E030      LDI	R19,0
    0E0A 0185      MOVW	R16,R10
    0E0B 940E12C9  CALL	mod16u
    0E0D 2EA0      MOV	R10,R16
(0137) 	LCD_write_char(t2+48);
    0E0E 5D00      SUBI	R16,0xD0
    0E0F 940E1243  CALL	_LCD_write_char
(0138) 	LCD_write_english_string(76,0,"M");
    0E11 E783      LDI	R24,0x73
    0E12 E090      LDI	R25,0
    0E13 8399      STD	Y+1,R25
    0E14 8388      STD	Y+0,R24
    0E15 2722      CLR	R18
    0E16 E40C      LDI	R16,0x4C
    0E17 940E125D  CALL	_LCD_write_english_string
(0139)   //LCD_write_english_string(0,1,"RATE");
(0140) 	return 0;	
    0E19 2700      CLR	R16
    0E1A 9622      ADIW	R28,2
    0E1B 940E139C  CALL	pop_gset4
    0E1D 9508      RET
_fatGetDirEntry:
  rval                 --> Y+10
  save2                --> R10
  save                 --> Y+6
  b                    --> Y+22
  sector               --> Y+2
  hasBuffer            --> Y+20
  index                --> Y+18
  de                   --> Y+16
  p                    --> R12
  we                   --> Y+14
  i                    --> R14
  entry                --> Y+34
    0E1E 931A      ST	R17,-Y
    0E1F 930A      ST	R16,-Y
    0E20 940E13C5  CALL	push_gset5
    0E22 9768      SBIW	R28,0x18
(0141) }
(0142) 
(0143) /*-----------------------------------------------------------------------
(0144) 查询一个文件的开始簇
(0145) -----------------------------------------------------------------------*/
(0146) unsigned int baseentry = 0;
(0147) unsigned int entrycount = 0;
(0148) 
(0149) 
(0150) unsigned long fatGetDirEntry(unsigned int entry)
(0151) {
(0152) 	unsigned long sector;
(0153) 	struct direntry *de = 0;	// 防止compiler warning
    0E23 2400      CLR	R0
    0E24 2411      CLR	R1
    0E25 8A19      STD	Y+17,R1
    0E26 8A08      STD	Y+16,R0
(0154) 	struct winentry *we;
(0155) 	unsigned int hasBuffer;
(0156) 	unsigned int b;
(0157) 	int i,index;
(0158) 	char *p;
(0159) 	
(0160) 	entrycount = 0;
    0E27 2422      CLR	R2
    0E28 2433      CLR	R3
    0E29 92300070  STS	0x70,R3
    0E2B 9220006F  STS	0x6F,R2
(0161) 	DirNameBuffer = 0;
    0E2D 92300068  STS	0x68,R3

⌨️ 快捷键说明

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