so, it turns out that an unsigned pointer its the exact same as an unsigned int pointer and spans 4 bytes, not the 1 byte like i thought. all of my offsets were 4 times further than they should have been. also I was not shifing my function regester values by an extra 3 times