aboutsummaryrefslogtreecommitdiff
path: root/xv/util.py
diff options
context:
space:
mode:
Diffstat (limited to 'xv/util.py')
-rw-r--r--xv/util.py90
1 files changed, 90 insertions, 0 deletions
diff --git a/xv/util.py b/xv/util.py
new file mode 100644
index 0000000..0b3f2e6
--- /dev/null
+++ b/xv/util.py
@@ -0,0 +1,90 @@
+# Part of the Fifteen-Thieves Project
+# Chris Xiong 2020
+# License: Expat (MIT)
+
+def roland_checksum(payload):
+ return (0x80 - sum(payload) % 0x80) % 0x80
+
+def check_roland_checksum(msg):
+ return (0x80 - sum(msg[6:-2]) % 0x80) % 0x80 == msg[-2]
+
+def int2belist(x):
+ ret = []
+ while x > 0:
+ ret = [x & 0xff] + ret
+ x >>= 8
+ return ret
+
+def belist2int(x):
+ ret = 0
+ for i in x:
+ ret <<= 8
+ ret |= i
+ return ret
+
+def int2b7belist(x):
+ ret = []
+ while x > 0:
+ ret = [x & 0x7f] + ret
+ x >>= 7
+ return ret
+
+def strb7list(x):
+ return ' '.join([format(a, "02x") for a in x])
+
+def b7belist2int(x):
+ ret = 0
+ for i in x:
+ ret <<= 7
+ ret |= i
+ return ret
+
+def hexrep2b7val(x):
+ ret = 0
+ b = 0
+ while x > 0:
+ if x & 0xff > 0x7f:
+ raise ValueError("invalid value")
+ ret |= (x & 0xff) << (7 * b)
+ b += 1
+ x >>= 8
+ return ret
+
+def padbelist(x, l=4):
+ return ([0]*(l-len(x))) + x
+
+def int2packetint(x):
+ ret = []
+ while x > 0:
+ ret = [x & 0x0f] + ret
+ x >>= 4
+ return ret
+
+def packetint2int(x):
+ ret = 0
+ for i in x:
+ ret <<= 4
+ ret |= i
+ return ret
+
+def load_memoryregion(fn):
+ ret = []
+ with open(fn, "rb") as f:
+ while True:
+ addr = list(f.read(4))
+ if len(addr) < 4:
+ break
+ l = belist2int(list(f.read(4)))
+ data = list(f.read(l))
+ ret.append( (addr, data) )
+ return ret
+
+def write_memoryregion(fn, mr):
+ with open(fn, "wb") as f:
+ for addr, data in mr:
+ l = padbelist(int2belist(len(data)))
+ f.write(bytearray(addr))
+ f.write(bytearray(l))
+ f.write(bytearray(data))
+
+# vim: expandtab shiftwidth=4 tabstop=4