On Fri, Oct 22, 2010 at 10:49 AM, Oliver Seitz <[email protected]> wrote:

> I have not gotten FAT32 to run yet... I'm still fighting with pata. But if
> someone is bored and needs some light entertainment, I'll talk about FAT a
> bit :-)
>
> The scenario is a playing machine with 9 switches you throw balls on. Each
> switch, when hit, plays a different sound. When you've hit the middle switch
> for the 10th time, a very long "winning" sound is played. The sounds are
> stored as wav files on the media to easily play without decoder chips, so
> the files are quite large. There can not be a long delay from hitting the
> button to the starting of the sounds.
>


Are you playing dart balls at your work with your boss pictures on the wall?
I can't see else the reason why you need such long waves...

[?]




>
> Sounds are stored on a 1GB media. The maximum number of clusters for FAT32
> is 2^28=268435456. Not to waste to much file space, it's formatted with a
> cluster size of 2 sectors (=1024 bytes). The media thus contains 1048576
> clusters, the size of the FAT is 1048576/128=8192 sectors.
>
> The long sound takes 500MByte, and uses therefore 4096 FAT sectors. reading
> them all to search for fragments would take about 3 seconds, which should be
> inacceptable.
>
> Now, the middle switch is hit for the 10th time. We've found the big file
> in the directory and start to play.
>
> The directory tells us the first cluster of the file, the Volume Boot
> Record tells us where to find the FAT.
>
> We're reading sector (FAT location + (first file cluster /128)) for this is
> the sector in which the FAT chain for the file starts. Inside this sector,
> at dword position (first file cluster % 128) we'll find the next cluster
> address for the file.
>
> Now for the FAT cache: We'll take, say, 16 dwords as cache. dword is 32
> bit. FAT entries only use 28 bits, so we've got four bits to spare in every
> dword. Let's put a meaning to them:
>
> 0000 This cache entry is not used, end of cache
> 0001 This entry is the start of the file
> 0010 This entry is a single-cluster fragment
> 0100 This entry is the start of a multi-cluster fragment
> 0101 This entry belongs to a multi-cluster fragment, but we havent read
> enough yet to say if it is the end of the fragment or not.
> 0111 This entry is the end of a multi-cluster fragment
> 1000 This is the pointer to the next-to-read FAT entry, we don't know yet
> if it is a single or multi-cluster fragment
>
> Now, we'ver read one sector of FAT, and start filling the cache (after
> having at least cleared the uppermost four bits of all 16 entries). The
> starting pointer will go to cache entry 0 with type 0001. The corresponding
> FAT entry will point us to the next cluster.
>
> If that next cluster does not reside in the same sector of the FAT, we'll
> write it to cache entry 1 as type 1000. We're done for now, and can access
> the file sectors. As soon as a sector is adressed that does not sit in the
> clusters we already know, we'll come back to get more FAT data.
>
> If the next cluster does reside in the same sector of the FAT, it will
> still go to cache entry 1. The type depends on the content of the pointer:
> If it points to just the next cluster, the type is 0100. If it points to
> another cluster within the same FAT sector, the type is 0010.
>
> If the file is heavily fragmented and we reach cache entry 14, the cluster
> it points to goes as type 1000 to cache entry 15, even if it resides in the
> current sector. We have no choice of reading that FAT sector again, once
> we're reaching the end of the cache.
>
> If the file is not fragmented, we'll end up with the first cluster address
> as type 0001 in chache entry 0, the second cluster address as type 0100 in
> cache entry 1, and the first cluster adress outside the FAT sector we had
> read as type 1000 in cache entry 3.
>
>
> fingers bleeding... I may continue one day if noone objects...
>
> Greets,
> Kiste
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "jallib" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<jallib%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/jallib?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"jallib" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/jallib?hl=en.

<<349.gif>>

Reply via email to