summaryrefslogtreecommitdiff
path: root/tools/dump_decompress.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/dump_decompress.py')
-rw-r--r--tools/dump_decompress.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/tools/dump_decompress.py b/tools/dump_decompress.py
new file mode 100644
index 0000000..2776c2b
--- /dev/null
+++ b/tools/dump_decompress.py
@@ -0,0 +1,33 @@
+#!/usr/bin/env python3
+
+# Usage: ./dump_decompress.py 75:7d35 00b6 >compressed.bin 2>decompressed.bin
+
+from sys import argv, stdout, stderr
+
+file = open("DMGAKVJ0.1", "rb").read()
+
+bank_addr = argv[1].split(':')
+bank = int(bank_addr[0], 16)
+addr = int(bank_addr[1], 16)
+length = int(argv[2], 16)
+offset = bank * 0x4000 + addr - (0x4000 if bank else 0)
+
+output = []
+i = offset
+v = 0x00
+for _1 in range(length):
+ byte = file[i]
+ i += 1
+ if byte < 0x80:
+ for _2 in range(byte + 1):
+ v ^= file[i]
+ output.append(v)
+ i += 1
+ else:
+ for _2 in range(byte - 0x7e):
+ v ^= file[i]
+ output.append(v)
+ i += 1
+
+stdout.buffer.write(bytes(file[offset:i])) # compressed
+stderr.buffer.write(bytes(output)) # decompressed