Hi there and welcome.
The valid range of all the memory locations is -32000 to 32000 inclusive. But, as you point out, the set of values that matter can be much narrower and depends upon whether the location is effectivly read only (like the .eyeN sysvars) write only (like say .fixpos or .shoot or .repro - well okay, they can be read, so the term write only isn't correct, but the simulator will reset these and others to 0 every cycle so they are effectivly toggles) or read/write. Let me try to explain:
Bot DNA can write to any memory location and write any number in the above range to any location. But... the simulator code may not pay attention or it may overwrite it or truncate it or MOD it by some value before it uses it (and potentially resets it) depending on the location. So, something like .fixpos has two values that matter: 0 and everything else. Something like .repro does a MOD 100 for positive values and ignores negative values. Something like .up will trucate the value to 100 if the value is > 100. And something like .robage is effectively read only. Bot DNA can write to it, but the simulator will just overwrite it.
Personally, I think we want to eventualy get rid of as many "magic values" and magic ranges as we can and make the entire range do something for every location. For example, I might suggest we change .fixpos so that odd values fix the bot and even values release it. That kind of thing. Note there are issues here w.r.t. mutation probability hitting upon DNA that does something, so we need to chose the percentage of values that do something and or don't do something with this in mind. But for now, it all depends on the location...
Oh, and the range of .eyeN values the simulator will produce just changed with 2.43z and is now effectively 0 - 32000. See
this topic for more info.