I had a look, and it seems like there's an end/start offset value for each track (in respective order) rather than just pointers. Both values needs to be right-shifted by 1. The offsets are relative to 0x40, so "count" from there.
Here, maybe this will help you understand the rest a little better: image.
It appears to start with a loop flag, or maybe how many times it should loop, I don't know. Oddly enough, it seems to be as large as an int32 value.
You might notice that the "2AF8 values" actually isn't always 0x2AF8. My guess is these are sample rates.
After that, there's 8 bytes, which are probably two int32 loop values (when not null of course).
That's followed by the two aforementioned track end/start offsets.
The last 4 bytes I'm not at all sure about. Could be reserved.
I see. This is really helpful. I'm having trouble with the offsets of each track. For example, the first track should start at 0, after shifting to the right the "02", and it should end at "F9"
However, when I do that and add the dsp header I don't get a playable audio. I just get a really small part of it. If I try with "F9F" as ending I get two tracks inside of one.
After some testing I found that the first track should have a size of 7E0 hex (2016 decimal). But I don't see that reflected on the end/start offsets.
For the others values, you're right. There are loopable tracks.
If you're on Windows you can do it by (scientific) calculator. Insert as hex, check the "Inv" box, and use Lsh (EDIT: if you're on Win7 you can do Rsh directly, which is right-shift) followed by digit 1, then equals. There are some sites that you can do this at too. It's called Bitwise - they're binary functions.