This seems to do the dive data descrambling right for both files I have
access to. Except it uses a hardcoded (different) offset for the two.
I have yet to figure out how to automatically detect the offset itself
properly, so you have to compile for the right file.
I'll figure it out, but I'm committing this as a reasonable point in the
process.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
#include "dive.h"
#include "file.h"
#include "dive.h"
#include "file.h"
/*
* The Cochran file format is designed to be annoying to read. It's roughly:
*
/*
* The Cochran file format is designed to be annoying to read. It's roughly:
*
const unsigned char *in, unsigned size)
{
char *buf = malloc(size);
const unsigned char *in, unsigned size)
{
char *buf = malloc(size);
+#ifdef DON
+ unsigned int offset = 0x4a14;
+#else
+ unsigned int offset = 0x4b14;
+#endif
/*
* The scrambling has odd boundaries. I think the boundaries
/*
* The scrambling has odd boundaries. I think the boundaries
* scrambled, but there seems to be size differences in the data,
* so this just descrambles part of it:
*/
* scrambled, but there seems to be size differences in the data,
* so this just descrambles part of it:
*/
- partial_decode(0x48ff, 0x4a14, decode, 0, mod, in, size, buf);
- partial_decode(0x4a14, 0xc9bd, decode, 0, mod, in, size, buf);
- partial_decode(0xc9bd, size, decode, 0, mod, in, size, buf);
+ partial_decode(0x48ff, offset, decode, 0, mod, in, size, buf);
+ partial_decode(offset, size, decode, 0, mod, in, size, buf);
printf("\n%s, dive %d\n\n", filename, dive);
cochran_debug_write(filename, buf, size);
printf("\n%s, dive %d\n\n", filename, dive);
cochran_debug_write(filename, buf, size);