In the name of loose coupling and high cohesion, and in the hopes that I can actually put it together with a low amount of pain, I'm organizing my code.
Star Trader has many subsystems -- it has a neighboring systems chart, it has a ship status bar, it has a menu system. It has astrogation, prospecting, survey, trade, and combat. But each of those are separate modules, and most of them don't interact with each other.
[ core code ] ===== [ subsystem ]+
So the core code interacts with the subsystems. The subsystems don't interact. I hope. Much.
As much as possible, data is stored in RAM banks -- the star charts, character data, starship data.
Bank 1 - 1K - Game-state data. Not much there now, but...
Bank 2 - 1K - Player data, with plenty of room free for special stuff.
Bank 3 - 8K - Starship configurations (I've filled this bank up completely).
Bank 4 - 4K - Trade matrices (I pre-calculated base trade values between world types to speed up the engine).
Bank 5 - 4K - If I manage to add in "mail", then messages might well go here. I estimate no larger than 4K (but not sure).
Banks 11-19 - 8K - Local star charts sit here, with Bank 15 always being the 'current' subsector. They only really take up 4K each, but that leaves room for special stuff.
I'll probably need more tables to handle combat and survey, and maybe to help manage a menu system.