I've read over all of the NES hardware docs I've been able to find on the web and I've found a conflict on what pin 4 of the expansion port is for. the NES hardware development guide says that it is /NMI showing the 2C02's vblank status and the 2A03's /NMI status. Then in another document, pin 4 is described as the R/W. Without cracking open my NES, does anybody have the actual NES schematic that confirms which CPU pin the expansion pin 4 is connected to?
Thanks!
I just cracked open my NES and did a continuity test on pin 4 of the expansion port. It is connected to pin 33, /NMI on the CPU. Mystery solved.
This sucks though because now there is no way to memory map I/O with the expansion port. Without the R/W pin on the expansion bus, there's no way for a peripheral to map to a specific memory address. It wouldn't know when the CPU was writing to, or reading from the external device.
I have no idea how the Nintendo engineers meant to interface with a device on the expansion port.
Imagine the Famicom's expansion port combined with the FDS's disk drive port. I think that's what the NES expansion port is supposed to be. The cart would probably decode the registers and put enables on the expansion port passthrough pins. Of course, all this got shelved when Nintendo saw the extent of FDS game copyright infringement.
Atari 2600 carts had an address bus but no R/W signal. They used one of the address bus pins as a makeshift R/W. For example, accesses to addresses in page $0200 would perform reads, while accesses to addresses in page $0300 would perform writes.
I can see using an address line as a makeshift R/W but there is only one address line on the expansion bus: A15. You'd need at least two. One for chip select and one for R/W. If you had two, then A15 could be the chip select and A14 (or whatever would be the R/W). That would mean address $8000 could be read and $C000 could be write or vice versa.
I'm still thinking that the easiest route to take is to use the cart itself to route the address lines from the CPU bus back to the expansion port through the cart pins. I bet that is what the Nintendo engineers had in mind in the first place because that ties expansion port capabilities to specific carts. You'd have to have the X game to use Y expansion.
BTW, I thought all Atari 2600 carts were read only. Why would they need the address line trick for R/W? Did they have SRAM for high scores?
Wookie wrote:
I can see using an address line as a makeshift R/W but there is only one address line on the expansion bus: A15. You'd need at least two. One for chip select and one for R/W. If you had two, then A15 could be the chip select and A14 (or whatever would be the R/W). That would mean address $8000 could be read and $C000 could be write or vice versa.
I'm still thinking that the easiest route to take is to use the cart itself to route the address lines from the CPU bus back to the expansion port through the cart pins. I bet that is what the Nintendo engineers had in mind in the first place because that ties expansion port capabilities to specific carts. You'd have to have the X game to use Y expansion.
BTW, I thought all Atari 2600 carts were read only. Why would they need the address line trick for R/W? Did they have SRAM for high scores?
at least for mappers, maybe?
Wookie wrote:
I thought all Atari 2600 carts were read only. Why would they need the address line trick for R/W? Did they have SRAM for high scores?
The console has only 128 bytes of RAM. They used that trick in order to have extra RAM on the cart.