PicoCart64: Nintendo 64 flash cart using a Raspberry Pi RP2040
github.com
github.com
EDIT: more info on Twitter apparently: https://twitter.com/kbeckmann/status/1539738410063208454
The PIO of a Pico is quite fast and could theoretically be utilized to pretend to be a specific chip. The question is at what speed. That's what would interest me the most. It would be a fun project to make a Pico pretend to be an SRAM and measure what kind of access speeds it could support. If could be fast enough to hack into old 8 bit machines you could make some awesome Frankensteinian creations.
I suppose by writing clever self-modifying "ROM" code, you could hack the Pi into acting as a coprocessor, but in this configuration, it's just feeding arbitrary game data to the N64 - emulating the ROM that would be seen in a normal N64 flash cart.
Unlike in older consoles like the SNES where cartridges often contained processors and other logic, N64 flash cartridges were by and large just ROM, save data EEPROM or SRAM, and a serial bus for simple peripherals like an RTC or modem that I think was only used in a few very rare games.
The particularly interesting thing about N64 flash cartridges is that they have a seed/key/checksum security mechanism implemented using a chip called CIC. There's a good video about it here : https://av.tib.eu/media/32818 .
For example, there's the 64DD. It's a disk drive peripheral for the N64. It's Japan-only--for various reasons.
Some people thought it would be difficult to emulate. Nope, it turns out it's basically just some disk I/O. Games are just data.
(Edit: The cartridge bus is set up to be most efficient when reading/writing blocks of memory (address is latched w/ auto-increment). It would still work for accessing devices though.)
With a CPU and GPU running at 94 and 63MHz, the console this chip is driving is barely faster than the chip itself. Build your board right (the 420MHz clock) and it's not even much of a challenge.
So, which one is the coprocessor, really: the super fast chip processing and transmitting instructions to execute, or the N64's VR4300?
At this point, I'd argue that the entire console is just the graphics and sound coprocessor for the RP2040 instead of the other way around!
This would of course require laying out a circuit for the bare RP2040 chip instead of using an RP2040 stamp, but it's not a complicated design, and you'll save a lot of time and money if you're planning on producing a decent sized batch of these.
Supposedly this works great (havent tried myself though)
https://hn.algolia.com/?dateRange=all&page=0&prefix=true&que...
The one I use starts at $0.27 for 1, and goes down with bulk pricing:
https://lcsc.com/product-detail/USB-Connectors_Korean-Hropar...
The hiccups and bugs you experience with emulation totally ruins immersion. Also best played on CRT.
I still remember there used to be a Hong Kong vendor that sold these flash carts and you could load N64 roms on a CD drive attached to the console. V64
I remember similar units for SNES that loaded from floppy disk.
It’s pretty wild that in a span of ~10 years or so you had these devices go from floppy disks > CD drives > ZIP drives > hard drives.
Funnily, this exploit was based on a previous exploit in PSO for Dreamcast, which was used for cheating.
Back in the day a serial cable was used to rip dreamcast games, and people removed copy protection and FMV to get games working on CDRs (dreamcast discs held more than a CD but the drive could read both types).
Someone also got the BBA for dreamcast working to rip and load games, but I think this was only about 10 years ago.
Edit: but yeah, you're probably right about the early dumping ways...
https://github.com/robinhedwards/UnoCart
Uses an STM32, a tight loop responds to changes on the Atari's address bus to emulate a ROM, all through STM32 GPIO. Atari 800 has a 1.8 MHz bus, but it's still cool that microcontrollers are fast enough for this to work.
Alternative straightforward way is to use an FPGA, the UltimateCart:
[1] https://github.com/meeq/FlappyBird-N64/
[2] https://dragonminded.com/n64dev/libdragon/