Need them 2D arrays then. Can't store the memory block numbers in an array and nest the array refs I don't think.
Not really 2D arrays, you just need a slightly smarter calculation for the extra level of indirection utilized by your REF/REFWRITE instructions.
Say you were using D100 as your "Reference Type" value (aka Block #) in your REFWRITE/REF instructions.
You were probably doing something like a FOR loop for your D100 value, hoping you had a "contiguous" range of block #'s.
Say you had 5 blocks 40..44 nice and neat for your D100 values
FOR D100 40 to 44
// use D100 in REF/REFWRITE instructions
NEXT
But now you need 10 ADDITIONAL blocks, but those are now 50..59.
All you need to do now is store these block #'s in a range of V, or even better, a new block called MyRefType.
Define MyRefType to be 15 words long (for the 15 now non-contiguous block #'s 40..44, and 50..59).
Initialize that to
MyRefType0 = 40
MyRefType1 = 41
...
MyRefType4 = 44 // last of 1st contiguous block
MyRefType5 = 50 // first of next contiguous block
MyRefType6 = 51
...
MyRefType14 = 59
So each MyRefType ID now stores the unique block # value.
Now your FOR loop iterates through the simple 0..14 indexes of MyRefType:
FOR V0 0 TO 14
MOVE MyRefType[V0] D100 // D100 now contains the V0th block # in your "non-contiguous" set of blocks!
// use D100 just like you did before in your REFWRITE/REF instructions!
NEXT
Sure, it's a little extra overhead compared to what you were probably doing, but it's just as powerful!