I'm sure I've already seem (maybe not for the NES though) carts using more than one ROM chip to simulate a larger chip. I was just wondering how could I go about doing that to a devcart.
I'm sure it would have something to do with the highest address line (from the mapper chip) and the /OE pins in the ROMs. You know, the highest address line will define which ROM to use, but how? Would I need any extra hardware for doing something like this?
On a somewhat related issue, I was reading about Sega Genesis/Megadrive devcarts, and it seems that you can use 2 8-bit ROMs to simulate a 16-bit ROM that the console expects. Can anyone confirm that all you have to do for this to work is connect all the address lines to both ROMs, and combine D0-D7 from each ROM to form a 16-bit (D0-D15) value?
What you describe is very easy. Some SNES games use 2 ROMs, and sometimes even 2 ROMs that doesn't have the same size, allowing fun overall ROM size : 12MBit (8+4), 20MBit (16+4), 24MBit (16+8) and 48MBit (32+16), and maybe other combinations.
What you have to do is have the upper adress line go to /CE of the "low" chip, and the inversion of the upper adress line go to /CE of the "high" chip. You'll need some logic gate (typically 74HC04 hex inverter) to do this, but if you don't have room for this you could use a transistor and two resistors to invert the upper adress.
/OE would also work, but I'd reall recommand doing it to /CE. What's the difference you mean ? /OE just place the "totem pole" outputs in high impedance state, meaning that the outpouts are floating, but the whole chip is functionnal.
/CE will allow you to totally disable the chip, so it will absorb less current from the power supply. Also it will take a bit more time to wake up once /CE pass from high to low, but I don't think this is significant for the NES speed.
If you have more than 2 ROMs, you'll need definitely a 74HC139 adress decoder, wich does everything for you : You select wich chip you want to use in your input and it outputs the /CE signal for each chip.
If you want to simulate a 16-bit ROMs, you'll just have to write all LSB to a ROM, and all MSB to another ROM, and place the same adress lines to both chips. Then, the chips with MSB data will handle D8-D15 instead of D0-D7. However this is a pain to programm the chips.
I've actually done this on a Years Behind cart when I lacked a 64kB EPROM but had lots of 32kB ones. I just piggybacked the EPROMs, soldering one of them *underneath* the circuit board, and used a 74HC14 with some ugly wires to control /OE on both chips. Cart worked fine, though it turned out remarkably heavier than the other ones which used a single 64kB EPROM. :)
I've also been thinking that this might be a nice way of putting a translated version of a Famicom game on a cart while keeping the original to be selectable thru a hardware switch. That way you don't have to waste twice as large an xPROM than usual if you want both versions on one cart. I never got around to try this though.