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