The joke was when the Nintendo 64 first hit the streets around a quarter century ago, that the 64 in the name referred not to the technology on board, but to the excessive cost of the cartridges. Whatever the truth in that, it’s something now completely laid to rest by [Konrad Beckmann] with his Nintendo 64 flash cart powered by a Raspberry Pi Pico (Nitter Link).
The schematic is surprisingly simple, in that the Pico does everything required to both interface to the N64 and to an SD card to hold the software. The clever work is done by the RP2040 firmware, which can be found along with the hardware details in the “develop” branch of the project’s GitHub repository. And while the earliest version was a Raspberry Pi Pico with a host of jumper wires, the more polished version focuses on a custom PCB and bare RP2040 chip.
Perhaps the N64 hasn’t received the attention it should have over the years, overshadowed as it was by its competitors such as the original PlayStation, but it’s projects like this one which remind us that there’s still life in Nintendo’s ’90s flagship. Speaking of which, if you were on Team Sony back in the day but still want to put your Pi Pico to use, check out this DIY PlayStation Memory Card we covered recently.
Not sure its fair to say overshadowed – the games available on each of the platforms of the 90’s era were so different and often ‘exclusive’ to the platform that they all had their own niche.
Neat project, not that I’ve seen a N64 one could actually use it on in ages myself.
I Have one and still enjoy it :-)
Give it to me straight, is RP2040 really good compared to traditional microcontrollers like STM32, EFM32, nRF52 etc (even though I know its not really a microcontroller)?
Do you see it making outside the hobbyist/enthusiast industry?
It absolutely is still a microcontroller, I don’t know where you got the idea that it’s something else.
There’s a lot it can do that can be done just as well by other platforms. But every design has it’s own character, and the engineers at Raspberry Pi went to some lengths to make novel choices with the peripherals. The PIO peripheral specifically enables a wide array of custom high-speed peripheral interface options that are rarely possible outside of the programmable logic space, and for which a “traditional” microcontroller (whatever that means) doesn’t have the performance to duplicate with bitbanging.
It’s not the only uC that has something like this, but it is the only one with high-quality open documentation and tooling, a ridiculously low price point, and it’s actually *available* in decent quantities unlike literally everything else in the ongoing global supply crisis.
The rp2040 is a real microcontroller, it only has its flashmemory external for I guess costreduction (just like the ESP).
One of the main advantages is its PIO peripheral, which can do fancy stuff on the IO ports and DMA it to memory without the processor unit involved (kinda very limited CPLD/FPGA). This makes it ideally for emulating cartridge ROMs.
My guess it will be making it outside the hobyist world, as it is capable, obtainable and reasonable priced. It has a very nice datasheet and (open) toolchain.
In my experience:
– External flash is minor nuisance, not much of an issue unless code protection is wanted.
– The Cortex-M0 core is not very fast and lacks floating point, but the high clock rate and dual-core compensates a bit.
– PIO peripheral is great and quite unique, meets many practical needs.
– Other digital peripherals are good basic implementations, often better design than the STM32 counterparts.
– ADC is not very good, there are STM32 models with much better ADC converters than RP2040.
– The RP2040 vendor library is of higher code quality than STM32 vendor library.
– RP2040 availability is great, many STM32 models are predicted next available in 2027.
Don’t forget one important point, the RP2040 can be had for ~1€ in single digit amounts, add another Euro for a serial flash and the needed chicken food. Or ~4€ for a module that has all the chicken food already on it if you don’t want to bother. For that price-performance ratio we have a hit here and only the ESP32 comes to mind for keeping up with that.
Another is, it needs no special programmer and no special software to just put software onto it, plug it into any USB port, hold boot select down and push reset. Your flavor of file manager pops up with the RP2040 presenting a fake file system, copy the u2f to said filesystem and off you go.
The folks who designed that chip designed it with user friendliness first and makers on mind.
Even the C++ SDK is programmer friendly. Where i have to type a desert of code on other chips to achieve a simple timer IRQ, on the RP2040 its as simple as “add_repeating_timer_ms(…);” and calling it a day.
Simply said, this chip is a dream come true and i only have a very small wishlist for the next version: PSRAM support, that is the only thing that this chip is missing for perfection, at least in my opinion.
psram would be definitely amazing! I’d also wish for 5v tolerant gpios like stm32 has and possibly bigger package with more gpios (most chips have several variants with different number of pins). Also one could dream about high speed usb 2.0 mode (480mbits).
5v tolerant IO would have made my day – most of the complexity in one of my current RP2040 projects is all the level translation needed. But I totally understand why it isn’t there.
Strictly speaking if you take a microprocessor and then embed RAM and ROM/flash memory, you’re already halfway to a conventional micro-controller. Throw in some integrated circuitry to implement additional features and peripherals and you have a microcontroller.
So the RP2040 is definitely in that general category. It might be odd compared to older, more established microcontrollers, but it has most (maybe all) of the hallmarks thereof.
Just ordered a batch of 5 on jlpcb in blue, hit me up if you want one. Name is reddit name.
Eh, I think I’ll continue to go with Krikzz’s cartridge products, they’re a bit pricey but they’re so polished and work flawlessly. I don’t have one for n64 but I’ve got the gbc and gba ones and they’re just awesome.
If you really want one, follow krikkz (& krikkz_store) on Twitter. He’s been releasing Everdrives frequently over the last month+. I grabbed carts for SNES, 64, Genesis, GBA and GG since I set up Twitter alerts. I have the older versions from 6-8 years ago, but decided to upgrade.
He still has FX Pak and GBA carts in stock now, also Game Gear and Master System.
http://en64.shoutwiki.com/wiki/ROM#Cartridge_Bus_Timing_Diagram
wow N64 cartridges are slow :o Default read clock is ~1MHz and can be slowed down even more.
according to https://github.com/kbeckmann/PicoCart64/blob/develop/sw/cic_test/cic_test.c RP2040 is plenty fast with external flash
Time between ~N64_READ and bit output on AD0
With constant data fetched from C-code (no memory access)
————————————–
133 MHz: 240 ns
150 MHz: 230 ns
200 MHz: 230 ns
250 MHz: 190 ns
With uncached data from external flash
————————————–
133 MHz: 780 ns
150 MHz: 640 ns
200 MHz: 480 ns
250 MHz: 390 ns
Default read access is a 1us setup ((1+0x40)×16ns=1024ns), followed by ~2.7MHz((1+0x12+1+0x3)x16ns=368ns per subsequent 16-bit word. These can be sped up or slowed down dramatically, but no commercial games did.
Have a Mr. Backup Z64. Basically a 386 DOS PC with 2-line LCD and ZIP drive that sits atop the N64 and feeds it images. Has to be at least 20 years old. Rent a cart, image it, return ;-)