I wrote up the idea a while ago: http://inform7.com/mantis/view.php?id=1354 . I don’t think anyone’s worked through the implementation beyond that writeup.
It’s somewhat hairy. Roughly: (a) add a “static” keyword to the Array directive lexer; (2) update the array handling to keep two array blocks, backpatch them both, and write them both to memory in the appropriate place.
Here’s the problem, though. If I recall Z-code correctly, there’s no opcode to access array data using a “packed” address. This means that even if you put arrays in ROM, they still have to fit inside the 64k addressable area. So you’re not actually avoiding the “running out of RAM” limits, which are actually 64k addressable data limits.
(I recall some discussion of whether you could use @loadw $FFFF x
to read values from an array that starts in addressable memory but extends beyond it. But interpreter support was mixed at best. Even if it worked, it’s a pretty brutal hack, and using it for more than a single array would be a hairball.)