diff options
Diffstat (limited to 'doc/ADATFS.txt')
-rw-r--r-- | doc/ADATFS.txt | 529 |
1 files changed, 529 insertions, 0 deletions
diff --git a/doc/ADATFS.txt b/doc/ADATFS.txt new file mode 100644 index 0000000..e373690 --- /dev/null +++ b/doc/ADATFS.txt | |||
@@ -0,0 +1,529 @@ | |||
1 | HD24 ADAT file system format | ||
2 | |||
3 | Reading ADAT HD24 disks | ||
4 | ----------------------- | ||
5 | In the ADAT FST file system, the part of the file system | ||
6 | that contains directory and song info is grouped in | ||
7 | 32-bit words. When read on a regular PC, each group of | ||
8 | 4 bytes will appear reversed. As such, when | ||
9 | a sector contains a string 'TADATSF ', we should read this | ||
10 | as 'ADAT FST'. In this document, we will assume that | ||
11 | doing the byte swapping needed to properly read the sectors | ||
12 | has already been done. | ||
13 | |||
14 | It should be noted that the actual audio data has not | ||
15 | undergone such byte swapping. As such, WAV data | ||
16 | retrieved from the HD24 by FTP is stored in the same | ||
17 | byte order as the data on disk. | ||
18 | |||
19 | The sector size used on HD24 disks is 512 bytes. | ||
20 | ADAT FST boasts disk support for disks up to 2 Terabyte. | ||
21 | This is achieved by using 32-bit pointers that point to | ||
22 | sector numbers. We will refer to these pointers as | ||
23 | sectorpointers. | ||
24 | |||
25 | Writing ADAT HD24 disks | ||
26 | ----------------------- | ||
27 | Writing HD24 disks is slightly tricky, because FST | ||
28 | filesystems contain backup copies of file system | ||
29 | sectors to help guarantee data consistency. | ||
30 | As a result, when we make an alteration to only the | ||
31 | first copy of the file system structure on disk, the | ||
32 | disk is considered inconsistent and the backup copy will | ||
33 | be written back by the HD24 recorder at the next use. | ||
34 | |||
35 | The backup data is stored at the end of the disk, | ||
36 | in block-reverse order. | ||
37 | The original order is something like this: | ||
38 | |||
39 | block 0 | ||
40 | sector 0 | ||
41 | block 1 | ||
42 | sector 1 | ||
43 | block 2 | ||
44 | sectors 2,3,4 | ||
45 | block 3 | ||
46 | sectors 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 | ||
47 | block 4-102 | ||
48 | 1 sector of project info | ||
49 | block 103- | ||
50 | song info block (2 sectors) | ||
51 | song allocation info block (5 sectors) | ||
52 | |||
53 | The backup blocks are stored in reverse order, | ||
54 | however each backup block maintains the original | ||
55 | sector ordering. That is, | ||
56 | |||
57 | block 0 has a backup at sector (end-0) | ||
58 | (where end=the last sector on disk) | ||
59 | |||
60 | block 1 has a backup at sector (end-1) | ||
61 | |||
62 | block 2, sectors 2,3,4 are backed up at sectors | ||
63 | end-4, end-3, end-2, respectively; | ||
64 | |||
65 | block 3, sectors 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 | ||
66 | are backed up at sectors | ||
67 | end-19,end-18,end-17,end-16,end-15,...end-5, | ||
68 | respectively. | ||
69 | |||
70 | The validity of a block is indicated by a checksum which | ||
71 | is stored in the last 4 bytes of a block (bytes 0x1FC, | ||
72 | 0x1FD, 0x1FE, 0x1FF of the last sector of a block). | ||
73 | |||
74 | The value of the checksum is such that sum of all 32-bit | ||
75 | words in the block (which may span several sectors) is 0. | ||
76 | When writing a block, we must make sure that the resulting | ||
77 | checksum of the block adds up to 0 again. | ||
78 | |||
79 | A second check refers to bytes 0x1f8-0x1fb of the last | ||
80 | sector of a block. Bytes 0x1F8 and 0x1F9 contain the | ||
81 | least significant 16 bit of the sector number at which | ||
82 | the block starts. Thus, a project block which contains | ||
83 | 1 sector and starts on sector 0x14 will contain the | ||
84 | values 0x14, 0x00 on bytes 0x1f8 and 0x1f9; a song entry | ||
85 | 2 sectors long, and ending on sector 0x78 will contain | ||
86 | the byte values 0x77, 0x00 on offset 0x1f8 and 0x1f9, | ||
87 | respectively (because the song entry starts on sector | ||
88 | 0x77). Bytes 0x1FA and 0x1FB of the last sector of the | ||
89 | block contain the bit-inverted value of 0x1F8 and 0x1F9**. | ||
90 | |||
91 | ** This paragraph assumes the sector is not byte-swapped | ||
92 | as described in the first paragraph of the document. | ||
93 | |||
94 | When a block is not equal to its backup, the checksum | ||
95 | of both is validated. If one is valid and the other is | ||
96 | not, the valid copy is written over the invalid copy. | ||
97 | |||
98 | General ADAT FST layout | ||
99 | ----------------------- | ||
100 | The general ADAT FST layout is as follows: | ||
101 | |||
102 | ----------------------------------------------------------- | ||
103 | Sector 0 / Offset 0000:0000h | ||
104 | Superblock, identifies drive as an ADAT FST drive. | ||
105 | Size=512 bytes/0200h | ||
106 | ----------------------------------------------------------- | ||
107 | Sector 1 / Offset 0000:0200h | ||
108 | Drive info | ||
109 | Size=512 bytes/0200h | ||
110 | ----------------------------------------------------------- | ||
111 | Offset 0000:0400h | ||
112 | 3 sectors, Song Entry Usage Table | ||
113 | Size=600h | ||
114 | ----------------------------------------------------------- | ||
115 | Offset 0800h | ||
116 | 15 sectors, Drive Usage Table | ||
117 | size=1e00h | ||
118 | ----------------------------------------------------------- | ||
119 | / Offset 0000:2800h | ||
120 | Project info, 1 sector (512 bytes) per project entry | ||
121 | Size: 99*200h=c600h | ||
122 | ----------------------------------------------------------- | ||
123 | / Offset 0000:ee00h | ||
124 | Song info, 7 sectors (3584 bytes) per song entry | ||
125 | ----------------------------------------------------------- | ||
126 | Undo info | ||
127 | ----------------------------------------------------------- | ||
128 | Audio data | ||
129 | ----------------------------------------------------------- | ||
130 | File system backup | ||
131 | ----------------------------------------------------------- | ||
132 | |||
133 | |||
134 | Superblock layout | ||
135 | ----------------- | ||
136 | Offset 0-0fh Header line: | ||
137 | Offset 0 'ADAT FST' | ||
138 | Offset 8 Version number, e.g. '110 ' | ||
139 | Offset 12 signature bytes: 55h, aah, cch, 33h | ||
140 | Offset 10h-13h Size of audio block (0x480) | ||
141 | Offset 14h-17h Number of audio blocks per allocation cluster | ||
142 | Offset 18h-1fh 0 ? | ||
143 | Offset 20h-23h 0 ? | ||
144 | Offset 24h-27h 0 ? | ||
145 | Offset 28h-2bh 1 ? sectors in superblock? | ||
146 | Offset 2ch-2fh 1 ? sectors in drive info block | ||
147 | |||
148 | Offset 30h-33h 2 ? sectornum of song entry usage table? | ||
149 | Offset 34h-37h 3 ? sectors in song entry usage table? | ||
150 | |||
151 | Offset 38h-3bh 5 ? sectornum containing allocation info? | ||
152 | Offset 3ch-3fh 15/0fh - Number of sectors in allocation table? | ||
153 | |||
154 | Offset 40h-43h 042fh=1071 ?? (anything to do with undo buffer?) | ||
155 | -- | ||
156 | On 1.2gb drive this formats as 0x20 00 00 00 | ||
157 | -- | ||
158 | Offset 44h-47h Number of free audio clusters on disk | ||
159 | Offset 48h-4bh SectorPointer to project info | ||
160 | Offset 4ch-4fh 1 | ||
161 | Offset 50h-53h Max allowed no. of projects? | ||
162 | Offset 54h-57h Max allowed no. of songs per project? | ||
163 | Offset 58h-5bh SectorPointer to first song info entry | ||
164 | |||
165 | Offset 5ch-5fh 2 (sectors of song info entry w/o alloc info?) | ||
166 | Offset 60h-63h 5 (sectors of alloc info per song entry?) | ||
167 | Offset 64h-67h 7 (number of sectors that song info entries are apart?) | ||
168 | Offset 68h-6bh current number of songs on disk | ||
169 | Offset 78h-7bh 041fh (number of audio blocks reserved for undo buffer). | ||
170 | 1055 audio blocks=72 track minutes at 48 khz | ||
171 | Multiply by contents of offset 14h-17h for number of sectors | ||
172 | in undo buffer. | ||
173 | |||
174 | Offset 7ch-7fh Sector pointer to audio data block on disk (0x1397f6). | ||
175 | Offset 80h-83h 32-bit word | ||
176 | number almost as big as number of sectors on disk | ||
177 | |||
178 | This number is related to that on offset 0084h and | ||
179 | always seems to have a difference of 0x14a46B to | ||
180 | the end of the disk. | ||
181 | |||
182 | 0084h 0080h | ||
183 | 40 gb disk: | ||
184 | 0x04c92d7f - 0x04B48914 = 0x14A46B | ||
185 | 120gb disk: | ||
186 | 0x0df94baf - 0x0de4a744 = 0x14A46B | ||
187 | |||
188 | Perhaps the value is the number of allocatable sectors | ||
189 | on disk? | ||
190 | (1397f6 used in the beginning; an undo buffer is not | ||
191 | needed at the end of the drive) | ||
192 | |||
193 | 0x10C75 used for actual filesystem.? | ||
194 | 0x1397f6 (first data sector on drive) - (0x41f(size of undo buffer in audio blocks) * 0x480(size of audio block in sectors)) = 0x10C76 | ||
195 | first data sector is not part of FS so this makes sense. | ||
196 | |||
197 | offset 84h-87h 32-bit word, highest sector number on disk. | ||
198 | A backup of the first sector can be found here. | ||
199 | offset 88h-1F7 (empty, zero - reserved for future use?) | ||
200 | offset 1f8-1FF Checksum information. | ||
201 | |||
202 | Drive info layout | ||
203 | ----------------- | ||
204 | Sector 1 | ||
205 | Offset 0 8 byte drive name (for compatibility with | ||
206 | older ADAT FST versions), should be considered | ||
207 | obsolete. Replaced by name at offset 01bh. | ||
208 | Offset 8-9 null bytes | ||
209 | Offset 0ah-0bh 2 more bytes for drive name. Should be considered | ||
210 | obsolete | ||
211 | Offset 10h SectorPointer to last active project. | ||
212 | offset 20h List of 32-bit sector pointers to all projects. | ||
213 | Offset 01b8h 64-byte drive name. Null-byte terminated | ||
214 | when shorter than 64 chars. | ||
215 | |||
216 | Song Entry Usage Table | ||
217 | ---------------------- | ||
218 | FST 1.10 allows for 99 projects of 99 songs each, giving for | ||
219 | 9801 song entries. Each song entry is not necessarily pre- | ||
220 | allocated to any given project; song entry 0 may belong to | ||
221 | project 0, while song entry 1 may belong to another project. | ||
222 | The Song Entry Usage Table provides a quick way to look up | ||
223 | the next free song entry without having to go through all | ||
224 | projects to see which song entries are in use. | ||
225 | |||
226 | Each bit in the Song Entry Usage Table represents a song. | ||
227 | When 0, the song entry is not in use; when 1, it is. | ||
228 | |||
229 | Drive Usage Table | ||
230 | ----------------- | ||
231 | Each bit in the Drive Usage Table represents a cluster. When 0, the | ||
232 | cluster is free; when 1, the cluster is in use. | ||
233 | 32-bit words are filled one by one, least-significant bit first, | ||
234 | until the entire word has the value 0xFFFFFFFF. In other words, the | ||
235 | table starting with the following words have the meaning as described: | ||
236 | |||
237 | 0x1 contains 1 bit on -> first cluster allocated | ||
238 | 0x3 contains 2 bits on -> first 2 clusters allocated | ||
239 | 0x1f contains 5 bits on -> first 5 clusters allocated | ||
240 | 0x1ff contains 9 bits on -> first 9 clusters allocated. | ||
241 | |||
242 | At the end of the drive usage table, some space seems to be reserved, | ||
243 | possibly representing the backup of the file system info, or something | ||
244 | along those lines. The last 32-bit word of the Drive Usage Table is a | ||
245 | checksum. When all 32-bit words in the entire Drive Usage Table are | ||
246 | summed, the result must be 0. | ||
247 | |||
248 | Project info | ||
249 | ---------------------- | ||
250 | The project info consists of (by default) 99 entries of 512 bytes each. | ||
251 | The actual number of projects is contained by the superblock. | ||
252 | |||
253 | 100 project entries would be 0xc800 bytes. | ||
254 | As projects are numbered starting at 01, a maximum of 99 projects | ||
255 | is possible, giving for 0xc600 bytes. | ||
256 | |||
257 | How to distinguish between an empty project and an unused project entry? | ||
258 | Answer: Sector 1 (Drive info) contains the project list. | ||
259 | |||
260 | Projects not mentioned in the drive info project list are empty projects. | ||
261 | |||
262 | Each project entry has the following layout: | ||
263 | |||
264 | Offset 0 8-byte project name (obsolete) | ||
265 | Offset 8 4-byte (2 bytes of which are partial project name too) | ||
266 | offset 0ch-0fh Number of songs in use in project | ||
267 | offset 10h-19bh Song info table (a list of 32-bit pointers to the | ||
268 | initial sectors of song info). Length of table should be | ||
269 | 396 bytes for 99 songs per project. | ||
270 | First entry in the table is the last accessed song. | ||
271 | Zero char means unused entry. | ||
272 | Offset 01b8h 64-byte project name. Null-byte terminated if project | ||
273 | name is less than 64 bytes long. | ||
274 | |||
275 | Song info table | ||
276 | --------------- | ||
277 | The song info table is part of a project entry. It is a list of 32-bit | ||
278 | pointers to sectors containing song info. | ||
279 | |||
280 | Song info | ||
281 | ------------------------ | ||
282 | Song info starts at disk offset 0xee00h, or at | ||
283 | sector 119 (the 120th sector on disk) (depending on | ||
284 | info in superblock). | ||
285 | |||
286 | Each song entry has a length of 2 sectors and is immediately | ||
287 | followed by 5 sectors of file allocation info. | ||
288 | |||
289 | Locate points/loops and track slip info is included in the song | ||
290 | entries. | ||
291 | |||
292 | Offset 00h-03h 32-bit number indicating no. of audio blocks in song | ||
293 | Offset 04h-07h ?0 | ||
294 | Offset 08h-0bh 32-bit number related to audio track interlacing. | ||
295 | |||
296 | 1/512th of the number of samples per interlace block | ||
297 | before the audio switches to the next track. | ||
298 | |||
299 | Value of this field equals Cluster size/(tracks*3). | ||
300 | |||
301 | Offset 0ch-0fh 32-bit number related to audio track interlacing. | ||
302 | |||
303 | number of sectors per interlace block | ||
304 | before the audio switches to the next track. | ||
305 | |||
306 | Value of this field equals audio block size | ||
307 | /no. of tracks. | ||
308 | Default audio block size is defined in superblock | ||
309 | (0x480 sectors) | ||
310 | |||
311 | An audio block size of 0x480 and 2 tracks gives a | ||
312 | block size of 0x240h sectors or 0x48000 bytes | ||
313 | (=294912 bytes). | ||
314 | |||
315 | Offset 10h-13h Status flags???????????????????? | ||
316 | Offset 0x12h bit 0x10h -> write protect????? | ||
317 | |||
318 | Offset 28h-2Fh First 8 bytes of song name. | ||
319 | (Maintained for compatibility | ||
320 | with FST before 1.10- | ||
321 | Obsoleted by long filenames | ||
322 | at offset 3b8h) | ||
323 | |||
324 | Offset 30h ? | ||
325 | |||
326 | Offset 31h Number of physical tracks used by song. | ||
327 | |||
328 | Note: | ||
329 | The HD24 has a high sample rate | ||
330 | mode (88200 and 96000 samples per | ||
331 | second, respectively). | ||
332 | |||
333 | In high sample rate mode, two | ||
334 | physical tracks are used for each | ||
335 | logical track. | ||
336 | |||
337 | That is, a 12-track song in high | ||
338 | sample rate mode will use 24 tracks | ||
339 | on the machine. The number 24 is | ||
340 | then what is indicated. | ||
341 | |||
342 | This allows interlacing samples between | ||
343 | tracks for compatibility with systems | ||
344 | running at half the sample rate. | ||
345 | In high sample rate mode, the track layout | ||
346 | is: | ||
347 | physical track 0-1 -> samples of logical track 1 | ||
348 | physical track 2-3 -> samples of logical track 2 | ||
349 | physical track 4-5 -> samples of logical track 3 | ||
350 | .. and so on. Even numbered samples (0,....) | ||
351 | are on even numbered tracks. | ||
352 | |||
353 | Offset 32h-33h Two more filename characters for short filename, | ||
354 | used in obsolete FST 1.0 standard. | ||
355 | |||
356 | Offset 34h-36h Sample rate in samples/second | ||
357 | |||
358 | Typical values are: | ||
359 | |||
360 | 00h ach 44h -> 44100 Samples/sec | ||
361 | 00h bbh 80b -> 48000 Samples/sec | ||
362 | 01h 58h 88h -> 88200 Samoles/sec | ||
363 | 01h 77h 00h -> 96000 Samples/sec | ||
364 | |||
365 | Offset 37h Bit depth (18h or 24 by default) | ||
366 | |||
367 | offset 38h-3bh Unsigned 32-bit number containing | ||
368 | number of samples in song. | ||
369 | |||
370 | For high sample rates, 2 tracks | ||
371 | are used for each sample; | ||
372 | therefore, a song that according | ||
373 | to this 32-bit number contains 44100 | ||
374 | samples has the same duration at both | ||
375 | 44100 and 88200 kHz. | ||
376 | |||
377 | offset 3ch Write protect byte. | ||
378 | |||
379 | This byte contains 8 bits (0-7, where | ||
380 | 7 is the most significant bit and 0 the | ||
381 | least significant bit. In other words | ||
382 | bit 7 has value 128, bit 0 has value 1) | ||
383 | |||
384 | Bit 2 is on when song is write protected | ||
385 | (value of the byte is 0x4 then), off when | ||
386 | song is write enabled. | ||
387 | |||
388 | offset 58h-B7h Track slip info for track 1-24 | ||
389 | |||
390 | Track slip is measured in number of samples. | ||
391 | E.g. for a song recorded at 48 khz, a value | ||
392 | of 480 decimal (0x1e0) means 1/100 second | ||
393 | (10 ms) of track slip. | ||
394 | Track slip is stored as a signed 32-bit number. | ||
395 | Valid values for the HD24 are -170..170 msec | ||
396 | |||
397 | Offset 0b8h-1e3h Locate point block | ||
398 | |||
399 | Offset 3b8h-3e7h Full song name, max 64 bytes; | ||
400 | terminated by null byte when less | ||
401 | than 64 bytes | ||
402 | |||
403 | Offset 400h-???? File allocation info (see below) | ||
404 | |||
405 | Locate point block | ||
406 | ------------------ | ||
407 | The locate point block consists of 24 locate point entries.s | ||
408 | |||
409 | Locate point entry | ||
410 | ------------------ | ||
411 | Each locate point entry has the following layout: | ||
412 | Offset 0-3 32-bit time code | ||
413 | The time code represents the sample number | ||
414 | within the song. | ||
415 | Offset 4-11 The 8-byte locate point name | ||
416 | |||
417 | Locate point 0 indicates the relative time offset of the | ||
418 | song. This is usually 0, but may be set to other values for | ||
419 | tape transfers. | ||
420 | |||
421 | The locate point is a 32-bit unsigned integer which contains the | ||
422 | sample number within the song. In other words, in a 44.1 khz | ||
423 | song, the locate point 0:0:1:0 (hours/minutes/seconds/frames) | ||
424 | is encoded as the number 44100. Thus, the locate point furthest | ||
425 | in the song is 2^32=4294967296 samples. | ||
426 | This is enough for 44.1khz songs with a length of 27 hours. | ||
427 | |||
428 | File allocation info | ||
429 | ==================== | ||
430 | The file allocation info consists of file allocation entries. | ||
431 | Each file allocation entry has the following format: | ||
432 | |||
433 | Offset 00h-03h Starting sector number for audio block | ||
434 | Offset 04h-07h Number of audio blocks in allocation block | ||
435 | |||
436 | In a valid song, the the 32-bit word on offset 0 of the song | ||
437 | info equals the total sum of the number of audio blocks in the | ||
438 | file allocation info. | ||
439 | |||
440 | In my disk image, I see songs that had been previously deleted; | ||
441 | the song length in audio blocks is zero for these. This also | ||
442 | goes for songs that have no audio data yet. | ||
443 | |||
444 | Audio data layout | ||
445 | ================= | ||
446 | The audio data of a FST file system is stored in a raw, uncompressed | ||
447 | format. Audio data that consists of multiple channels is interlaced | ||
448 | blockwise (as opposed to sample-by-sample interlacing). | ||
449 | |||
450 | The data is stored as 24-bit signed little endian integer data. | ||
451 | |||
452 | The typical audio block size as indicated in the superblock is | ||
453 | 0x480 sectors. In stereo audio, each subblock is then 1/2 audio blocks | ||
454 | or 0x240 sectors per channel. | ||
455 | |||
456 | As the number of tracks increases, the block size per track decreases | ||
457 | proportionally. | ||
458 | |||
459 | The default audio block size of 0x480 sectors lets itself be divided | ||
460 | into 2,4,6,8,12,16,24 tracks (with a sample size of 24 bit). Each channel | ||
461 | then takes up 0x240, 0x120, 0xc0, 0x90, 0x60, 0x48, 0x30 sectors, | ||
462 | respectively assuming 0x480 blocks per sector. In high sample rate | ||
463 | modes, channels are paired to accomodate for the doubled sample rate. | ||
464 | This is why in high sample rate mode a max of 12 channels are possible, | ||
465 | while the maximum song length is still over 27 hours on 88.2 kHz. | ||
466 | |||
467 | |||
468 | Not yet accounted for in this document | ||
469 | ====================================== | ||
470 | |||
471 | How the undo buffer is used (however, this is not relevant because the | ||
472 | undo buffer is cleared after each power off. It might as well exist | ||
473 | in RAM only). | ||
474 | |||
475 | How pitch info is stored in the songs | ||
476 | auto play | ||
477 | auto rtn | ||
478 | auto rec | ||
479 | |||
480 | HD24tools extensions to FST | ||
481 | =========================== | ||
482 | An extension is proposed where a song on a HD24 drive is used as data | ||
483 | area, to store non-audio information associated with a song or project. | ||
484 | This would allow HD24 owners to store track notes, mix settings, | ||
485 | protools projects and so on along with their songs. | ||
486 | |||
487 | A degree of compatibility with the HD24 is desired; although the HD24 | ||
488 | will not be able to use the information, it should also not corrupt it. | ||
489 | |||
490 | The HD24 does not offer unique file names; moreover, the position of a | ||
491 | file is not constant within the FS. As a result, songs have no unique | ||
492 | identifier that allows other data to be associated with them. | ||
493 | |||
494 | It is proposed to use bytes 0x3a0-0x3bf of each song entry as unique | ||
495 | identifier. Testing shows that the HD24 recorder does not touch these | ||
496 | bytes, even after a scandisk operation. Moreover, when a song is copied | ||
497 | to another drive, these bytes are copied over as well. | ||
498 | |||
499 | A single HD24 song would provide ample storage space for most purposes. | ||
500 | Additionally, by using a single song only, the negative impact to the | ||
501 | end user is minimal as no users have ever been registered to actually | ||
502 | create 99 project of 99 songs. To prevent the HD24 from corrupting the | ||
503 | contents of the song, it can be created as 0-track song; previous | ||
504 | experiments have shown that the track count is flexible. Having a song | ||
505 | marked as 0 track prevents the HD24 from arming tracks or playing back | ||
506 | audio from the song, and will give a user some feedback about the nature | ||
507 | of the song, without causing the HD24 to claim that the song is corrupt. | ||
508 | A track count of 0 survives a scandisk command, and it seems that the | ||
509 | HD24 permits copying such songs to other drives. | ||
510 | |||
511 | A possible way to store data in the song is to have the data song | ||
512 | contain a FAT file system. The advantage of the FAT file system is | ||
513 | that it is well documented, and probably there will be library code | ||
514 | available that will ease the implementation of an embedded FAT | ||
515 | system on HD24 drives. | ||
516 | |||
517 | The root directory of the file system shall contain a 'songdata' | ||
518 | dir. This data directory shall contain a subdirectory named after the | ||
519 | ID of each song. Of course the file names need to be long enough; if | ||
520 | this is not possible, a map file may be created to contain mappings | ||
521 | from song ID to songname subdirectory ID. | ||
522 | |||
523 | Data placed in the appropriate songname directory is automatically | ||
524 | associated with the song. Should we so desire, we can also create a | ||
525 | 'projdata' directory. | ||
526 | |||
527 | By keeping the songdata directory structure flat, songs can be moved | ||
528 | across projects without losing their associated files. | ||
529 | |||