Description updated as of 12/10/02 Steven Young In the description, I'll try to use the notation where "0x20" is hex and "32" is decimal. Each block on the disk is made up of 0x200 (that is 512 in decimal) bytes, which seems to be standard for hard-disk formats (the unix "dd" utility defaults to 512-byte blocks). So, in the map below, block location 000200 (hex) is the same as byte location 000040000 (hex). The FDMS-3 filesystem holds (I think) up to 99 "programs" (at least, that is the maximum number of programs according to the documentation for my hard disk recorder) which are each made up of (I think) up to 24 "tracks". When recorded in the fully uncompressed format, the data for each track is 44.1KHz, 16-bits per sample (same as CD, except CD has two channels). The directory begins at the 514th block on the disk (offset 0x000201). You can use the unix "dd" utility to grab the directory with "dd if=/dev/[device] of=[filename] skip=513 count=1". Assuming that the FDMS-3 filesystem is on the hard-disk located on "device", this will put the directory into the file specified by "filename". I like to put the directory onto my local hard-disk to minimzing the chance of messing up the filesystem on the FDMS-3 hard-disk. Within the directory, a pointer to each program is located at offset (program number - 1)*4 bytes (where the first program is numbered 1). So, the pointer for the first program is at offset "0" (at the beginning of the directory), and the pointer for the second program is at offset 4 bytes (starting at the 5th byte in the directory). Each of these pointers is to a block on the FDMS-3 device. Note that all locations, sizes and increments are given in "big endian" (i.e. Motorola) format -- if you are using an Intel machine (like I am), this requires swapping the bytes to get the right numbers. For example, if the block location for a program is 0x77df80, the bytes will be stored in the following order: 0x00, 0x77, 0xdf, 0x80. I use the Perl "unpack" function with the "N4" template to turn these four bytes into a variable that holds the actual block number -- I believe that Perl running on a Macintosh would take the same template, since it is describing the format of the data on the disk, not the native format of the machine. To find data for a program, go to the block pointed to in the directory (the offset is zero-based, so skip the number of blocks indicated, and start reading at the next block). The program name is located 72 bytes into the program data (i.e. starts at byte 73), and is 16 bytes in length. To find the tracks that are in the program, seek within the program data to offset 0x4000 (0x20 blocks) (i.e. skip over the first 512 blocks of the program data, start reading at the beginning of the 513th block). The first 4 bytes give the location of the first track on the disk, the next 4 bytes give the length of the track (both location and length are given in terms of 512-byte blocks from the beginning of the FDMS-3 filesystem). The audio data for the track may be located in more than one "segment", each located in a different location. If there are multiple segments, then each location/length pair is located one after the other. In other words, the location for the first segment of track 1 is located at offset 0x4000 in the program data, and its length is written into offset 0x4004. The location for the second segment is located at offset 0x4008, and its length is written at 0x400C. Information for each new track is found at 0x8 block (0x1000 byte) increments (block offsets within the program data are 0x20, 0x28, 0x30, 0x38, etc. for tracks 1, 2, 3, 4, etc. The byte offsets are 0x4000, 0x5000, 0x6000, 0x7000, etc.). The track data is stored as raw audio data, 44100 Hz, 2 bytes per sample, signed linear (2's complement), big-endian format (i.e. needs to be byte-swapped for the WAV format Intel machines, but should be fine for CD recording). Using the Unix "dd" utility, you can grab sound data by: dd if=/dev/[device] of=[data filename] skip=[offset] count=[count] (where offset and count are measured in 512-byte blocks from the beginning of the FDMS-3 filesystem.) Convert to wav files using the "sox" utility by: sox -t .raw -r 44100 -s -w -c 1 -x [data filename] [output filename]