📄 fat.lis
字号:
01F4 ; ata_read_sector_byte(0, FatSectorNum, FatSectorOffset, 4 , (unsigned char*)&Fat32_Entry);
01F4 CE01 movw R24,R28
01F6 4096 adiw R24,16
01F8 9F83 std y+7,R25
01FA 8E83 std y+6,R24
01FC 84E0 ldi R24,4
01FE 90E0 ldi R25,0
0200 9D83 std y+5,R25
0202 8C83 std y+4,R24
0204 2484 ldd R2,z+12
0206 3584 ldd R3,z+13
0208 3B82 std y+3,R3
020A 2A82 std y+2,R2
020C 2084 ldd R2,z+8
020E 3184 ldd R3,z+9
0210 4284 ldd R4,z+10
0212 5384 ldd R5,z+11
0214 4882 std y+0,R4
0216 5982 std y+1,R5
0218 9101 movw R18,R2
021A 0027 clr R16
021C 0E940000 xcall _ata_read_sector_byte
0220 .dbline 59
0220 ;
0220 ; return(Fat32_Entry & 0x0FFFFFFF);
0220 4FEF ldi R20,255
0222 5FEF ldi R21,255
0224 6FEF ldi R22,255
0226 7FE0 ldi R23,15
0228 FE01 movw R30,R28
022A 2088 ldd R2,z+16
022C 3188 ldd R3,z+17
022E 4288 ldd R4,z+18
0230 5388 ldd R5,z+19
0232 2422 and R2,R20
0234 3522 and R3,R21
0236 4622 and R4,R22
0238 5722 and R5,R23
023A 8101 movw R16,R2
023C 9201 movw R18,R4
023E .dbline -2
023E L9:
023E 6496 adiw R28,20
0240 0E940000 xcall pop_gset2
0244 2496 adiw R28,4
0246 .dbline 0 ; func end
0246 0895 ret
0248 .dbsym l Fat32_Entry 16 l
0248 .dbsym l FatSectorOffset 12 l
0248 .dbsym l FatSectorNum 8 l
0248 .dbsym l Clust 24 l
0248 .dbend
0248 .dbfunc e GetDir _GetDir fI
0248 ; k -> <dead>
0248 ; NextCluster -> y+49
0248 ; LBA -> y+45
0248 ; LinePtr -> y+44
0248 ; i -> y+40
0248 ; LongFileName -> R12,R13
0248 ; Files -> y+55
0248 ; Offset -> y+53
0248 ; LongFilePtr -> R10,R11
0248 ; Entry -> y+8
0248 ; j -> R14,R15
0248 ; Display -> y+75
0248 ; Qte -> y+73
0248 ; From -> y+71
0248 ; Cluster -> y+67
.even
0248 _GetDir::
0248 0E940000 xcall push_arg4
024C 0E940000 xcall push_gset5
0250 E997 sbiw R28,57
0252 .dbline -1
0252 .dbline 67
0252 ; }
0252 ;
0252 ; //*************************************
0252 ; // int GetDir(unsigned long Cluster, unsigned int FileWanted, unsigned int Type)
0252 ; //
0252 ; //*************************************
0252 ; int GetDir(unsigned long Cluster, unsigned int From, unsigned int Qte, unsigned int Display)
0252 ; {
0252 .dbline 80
0252 ; extern unsigned char SectorBuffer[512];
0252 ; unsigned long LBA,i,NextCluster;
0252 ; unsigned int Offset,j,k,LongFilePtr,LongFileName,Files;
0252 ; unsigned char LinePtr;
0252 ; union FileEntry
0252 ; {
0252 ; struct DirEntry Dir;
0252 ; struct WinEntry Win;
0252 ; };
0252 ;
0252 ; union FileEntry Entry;
0252 ;
0252 ; NextCluster = Cluster;
0252 FE01 movw R30,R28
0254 ED5B subi R30,189 ; addi 67
0256 FF4F sbci R31,255
0258 2080 ldd R2,z+0
025A 3180 ldd R3,z+1
025C 4280 ldd R4,z+2
025E 5380 ldd R5,z+3
0260 E354 subi R30,67
0262 F040 sbci R31,0
0264 21AA std z+49,R2
0266 32AA std z+50,R3
0268 43AA std z+51,R4
026A 54AA std z+52,R5
026C .dbline 81
026C ; Files = 0;
026C 0024 clr R0
026E 1124 clr R1
0270 18AE std y+56,R1
0272 0FAA std y+55,R0
0274 .dbline 82
0274 ; LinePtr = 0;
0274 2224 clr R2
0276 2CA6 std y+44,R2
0278 DEC1 xjmp L16
027A L15:
027A .dbline 84
027A ; while (1)
027A ; {
027A .dbline 85
027A ; LBA = Clust2LBA(NextCluster);
027A FE01 movw R30,R28
027C 01A9 ldd R16,z+49
027E 12A9 ldd R17,z+50
0280 23A9 ldd R18,z+51
0282 34A9 ldd R19,z+52
0284 27DF xcall _Clust2LBA
0286 FE01 movw R30,R28
0288 05A7 std z+45,R16
028A 16A7 std z+46,R17
028C 27A7 std z+47,R18
028E 30AB std z+48,R19
0290 .dbline 86
0290 ; for (i=0;i<Boot.SecPerClust;i++)
0290 40E0 ldi R20,0
0292 50E0 ldi R21,0
0294 60E0 ldi R22,0
0296 70E0 ldi R23,0
0298 40A7 std z+40,R20
029A 51A7 std z+41,R21
029C 62A7 std z+42,R22
029E 73A7 std z+43,R23
02A0 A2C1 xjmp L21
02A2 L18:
02A2 .dbline 87
02A2 ; {
02A2 .dbline 88
02A2 ; ata_read_sector_byte(0, LBA+i, 0, 512, (unsigned char*)&SectorBuffer);
02A2 80E0 ldi R24,<_SectorBuffer
02A4 90E0 ldi R25,>_SectorBuffer
02A6 9F83 std y+7,R25
02A8 8E83 std y+6,R24
02AA 80E0 ldi R24,512
02AC 92E0 ldi R25,2
02AE 9D83 std y+5,R25
02B0 8C83 std y+4,R24
02B2 2224 clr R2
02B4 3324 clr R3
02B6 3B82 std y+3,R3
02B8 2A82 std y+2,R2
02BA FE01 movw R30,R28
02BC 20A4 ldd R2,z+40
02BE 31A4 ldd R3,z+41
02C0 42A4 ldd R4,z+42
02C2 53A4 ldd R5,z+43
02C4 65A4 ldd R6,z+45
02C6 76A4 ldd R7,z+46
02C8 87A4 ldd R8,z+47
02CA 90A8 ldd R9,z+48
02CC 620C add R6,R2
02CE 731C adc R7,R3
02D0 841C adc R8,R4
02D2 951C adc R9,R5
02D4 8882 std y+0,R8
02D6 9982 std y+1,R9
02D8 9301 movw R18,R6
02DA 0027 clr R16
02DC 0E940000 xcall _ata_read_sector_byte
02E0 .dbline 89
02E0 ; for (Offset=0;Offset<Boot.BytesPerSec;Offset=Offset+32)
02E0 0024 clr R0
02E2 1124 clr R1
02E4 1EAA std y+54,R1
02E6 0DAA std y+53,R0
02E8 63C1 xjmp L26
02EA L23:
02EA .dbline 90
02EA ; {
02EA .dbline 91
02EA ; memcpy((unsigned char*)&Entry,(unsigned char*)&SectorBuffer[Offset],sizeof(Entry));
02EA 80E2 ldi R24,32
02EC 90E0 ldi R25,0
02EE 9983 std y+1,R25
02F0 8883 std y+0,R24
02F2 80E0 ldi R24,<_SectorBuffer
02F4 90E0 ldi R25,>_SectorBuffer
02F6 2DA9 ldd R18,y+53
02F8 3EA9 ldd R19,y+54
02FA 280F add R18,R24
02FC 391F adc R19,R25
02FE 8E01 movw R16,R28
0300 085F subi R16,248 ; offset = 8
0302 1F4F sbci R17,255
0304 0E940000 xcall _memcpy
0308 .dbline 92
0308 ; if (Entry.Dir.Attributes == ATTR_LONG_FILENAME)
0308 8B89 ldd R24,y+19
030A 8F30 cpi R24,15
030C 09F0 breq X1
030E 7CC0 xjmp L28
0310 X1:
0310 .dbline 93
0310 ; {
0310 .dbline 94
0310 ; LongFileName = TRUE;
0310 81E0 ldi R24,1
0312 90E0 ldi R25,0
0314 6C01 movw R12,R24
0316 .dbline 95
0316 ; LongFilePtr = ((Entry.Win.Cnt & 0x3f) * 13) - 13;
0316 8885 ldd R24,y+8
0318 8F73 andi R24,63
031A 9DE0 ldi R25,13
031C 989F mul R25,R24
031E C001 movw R24,R0
0320 0D97 sbiw R24,13
0322 5C01 movw R10,R24
0324 .dbline 96
0324 EE24 clr R14
0326 FF24 clr R15
0328 19C0 xjmp L34
032A L31:
032A .dbline 96
032A 1501 movw R2,R10
032C C101 movw R24,R2
032E 0196 adiw R24,1
0330 5C01 movw R10,R24
0332 02E0 ldi R16,2
0334 10E0 ldi R17,0
0336 9701 movw R18,R14
0338 0E940000 xcall empy16s
033C F801 movw R30,R16
033E CE01 movw R24,R28
0340 0996 adiw R24,9
0342 E80F add R30,R24
0344 F91F adc R31,R25
0346 4080 ldd R4,z+0
0348 5180 ldd R5,z+1
034A 80E0 ldi R24,<_File
034C 90E0 ldi R25,>_File
034E F101 movw R30,R2
0350 E80F add R30,R24
0352 F91F adc R31,R25
0354 4082 std z+0,R4
0356 L32:
0356 .dbline 96
0356 C701 movw R24,R14
0358 0196 adiw R24,1
035A 7C01 movw R14,R24
035C L34:
035C .dbline 96
035C ; for (j=0;j<5;j++) File.Name[LongFilePtr++] = Entry.Win.Part1[j];
035C C701 movw R24,R14
035E 8530 cpi R24,5
0360 E0E0 ldi R30,0
0362 9E07 cpc R25,R30
0364 10F3 brlo L31
0366 .dbline 97
0366 EE24 clr R14
0368 FF24 clr R15
036A 19C0 xjmp L39
036C L36:
036C .dbline 97
036C 1501 movw R2,R10
036E C101 movw R24,R2
0370 0196 adiw R24,1
0372 5C01 movw R10,R24
0374 02E0 ldi R16,2
0376 10E0 ldi R17,0
0378 9701 movw R18,R14
037A 0E940000 xcall empy16s
037E F801 movw R30,R16
0380 CE01 movw R24,R28
0382 4696 adiw R24,22
0384 E80F add R30,R24
0386 F91F adc R31,R25
0388 4080 ldd R4,z+0
038A 5180 ldd R5,z+1
038C 80E0 ldi R24,<_File
038E 90E0 ldi R25,>_File
0390 F101 movw R30,R2
0392 E80F add R30,R24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -