Got a pic of the scramble?
In
veeeeeeeery basic terms, doing a multi-game for ROMs that run on the exact same hardware is generally a case of burning the different game codes into a larger ROM, then wiring in a switch to some of the higher ROM address lines so you can feed them a logic high or low on demand.
What happens is when the game boots the CPU pushes an address onto the bus to the ROM and the CPU expects to read the code from the ROM at the address it specified. But if you've added a logic high on one of the upper address pins on the ROM, all reads will occur from a higher address in the ROM than the CPU is expecting, because whilst the CPU thinks it's set the address bus to point to a specific value, holding an upper address line high on the ROM causes data to be retrieved from a different location. More detail below.
This is how the Super Galaxians/Normal Galaxians hack works - you have a double sized ROM which contains the code for both Galaxians and Super Gal. Say the code for Gal lives in the ROM at address 0x0000 to 0x7FFF and the code for Super Gal lives at 0x8000 to 0xFFFF [1]
Without any modifications, the board initialises and looks at 0x0000 for the program code and runs Galaxians.
However, if you wire a switch into the A15 address line on the ROM and toggle it so it's a logic high, any address pushed onto the ROMs address bus will have an offset of 0x8000 automatically added (0x8000 is 1000 0000 0000 0000 in binary, which is the 15th bit set high) so when the CPU thinks it's reading game code from address 0x0000 and upwards, it's actually got an automatic offset of 0x8000 applied due to A15 (aka bit 15 or 0x8000 in hex) being pulled high.
So a CPU reading code from address 0xFF with the switch in the logic high position would actually cause the ROM to return data from offset 0x80FF. If you've got the second game stored at 0x8000 and upwards, the CPU thinks it's doing its normal thing but you're actually redirecting the ROM reads to the upper half of the ROM.
As I said before, this is grossly over simplified and ignores all kind of address decoding issues when explaining how the CPU addresses the ROMs, but it gives the general idea.
As you can see, with wiring a switch you're stuck to a game that only needs to access one ROM which is unlikely. In the real world you'd need to add the same offset for other game resources such as sound data, code for the sound CPU and gfx data. You'd normally do something like this by hooking into the address decoding logic and using the outputs of parts of that to replace the toggle switch but it's starting to get a bit more complex
The fancy multigame stuff that Macro did for Galaxians is a lot more complex and involves hacking the game code to use different addresses for resources. I'd recommend a squiz at Macros site as it explains how to do single romming (which is the same principle as above) and is also a jolly interesting site.
http://www.arcades.plus.com/
cheers
tim
[1] This is way oversimplified and the addresses I'm making up are utter BS, as they cover the entire address space of an 8bit CPU in a single ROM, which leaves no room for RAM etc. It's just for illustrative purposes and it's midnight and I'm sure I'll re-read this in the morning and find some huge error I made, but I'm tired so fk it