Shouldn't that be a long instead of a byte?
No, it must be byte. If it was long, the ptr artith calculations would be *sizeof(long).
You're obviously mixing it with (SOMEPTRTYPE) (((ULONG) x) + y). Using (UBYTE *) or (char *) is better since it will work correctly regardless of arch pointer size (as if amigaos or compats would ever go 64bit. AROS could in theory, assuming all ptr arith uses IPTR and that taglists can cope 64bit values. AROS wisely introduced IPTR type, which always is able to represent pointer as ingeter, and this must be used in ptr arith instead of ULONG).
Anyway it's good style not to assume pointer size, at least if you write semi-portable code.