function byterange_decode(values, size, big_endian, signed) --special thanks to brunovallads --syntax: raw = memory.readbyterange(); data = raw:byterange_decode(4); -- Error handling if type(values) ~= "table" then print("Insert correct memory.byterange table!") ; return end if not size or size < 1 or size > 6 then print("Insert correct size value! Can accept values between 1 and 6.") ; return end if size > #values+1 then print("Size is bigger than the memory.byterange table!") ; return end -- +1 due table 0 indexed local output = {} for i = 0, (math.floor((#values+1)/3)*3-1), size do local out_value = 0 -- Loop to correctly calculate the number based on the endianess for j = 0, size-1 do if big_endian then out_value = out_value + values[i+j]*(0x100^(size-1-j)) -- {AA, BB} -> AA00 + BB = AABB else out_value = out_value + values[i+j]*(0x100^j) -- {AA, BB} -> AA + BB00 = BBAA end end -- Check signedness if signed then local maxval = (0x100^size)/2 if out_value >= maxval then out_value = out_value - 2*maxval end end output[i/size] = out_value end if (#values+1)%size ~= 0 then print(string.format("%d byte(s) left, due to the selected size or memory.byterange size!", (#values+1)%size)) end -- +1 due table 0 indexed return output end while true do local length = 64 local decoded_bytes = byterange_decode(memory.readbyterange(0x100, length), 2, false, false); for i = 0, length-1 do gui.text(0,16*i,decoded_bytes[i]) end emu.frameadvance(); end