P.U.C.E. Project Homepage

(Last Update: 30/06/04)





  • The problem with PUCE/GUPPY atm, given that we only get the chance to work on it every week or three, is the 'context switch' required each time we want to do some work on it. For instance, there's the PUCE FPGA firmware, written in schematic & VHDL and built with Quartus; the EZUSB (8051) firmware, written in C and built with SDCC; the Linux GUPPY device driver, written in C and built with gcc; and on top of all that, test application code (C, gcc). And for anything to happen, they all have to work together, running on 2 custom PCBs! Tonight, it took me the best part of 2 hours just to get to the point where I left off three weeks ago! Frustrating...
  • Having said that, I did make some progress. I can now read a block of 32 bytes from the flash using fileio operations on Linux and a trivial test app. Slowly but surely...
  • Chris is experiencing similar frustrations with MICE. He can transmit what looks like valid Maple Bus packets on a CRO but is still getting the receiver to work.
  • Oh, and the SMD is now alive - cost me less than AUD$5 to fix. I can download and play ROMs on the Mega Drive via the PC parallel port. No luck with the floppy disk drive on it though.


  • Progress continues (albeit slowly due to distractions on other projects - namely PACE). Tonight I managed to get a linux user-mode application to read some data from the Flash on PUCE.
  • Chris had the (good) idea to simply treat the Flash (and the SRAM for that matter) as a file on the /dev/guppy device. Normal file operations (fread, fwrite, fseek) are all that are needed to read/program the Flash/SRAM devices on PUCE - hence no separate programming application required!
  • Chris has been working on getting his GUPPY to talk to a Dreamcast controller (Maple Bus). This is for Yet Another Project called M.I.C.E - (I can't recall what the acronym stands for, but it's a project to build an adapter to allow the use of any console/PC controller on any console/PC - as far as possible/useful).
    • Phase 1 is getting DC peripherals to work on a PC - how cool would it be to use a DC Joystick, Fishing Controller or Dance Mat on M.A.M.E.!?! Unfortunately, using a DC Light Gun on a PC monitor is probably out of the question.
  • I recently acquired a couple of Sega Mega Drive (a.k.a. Genesis) consoles (PAL+NTSC), a 32-X and a battery-acid-damaged Super Magic Drive (which I've cleaned up and should be able to restore to perfect working order). Apparently, the SMD will work on a SNES with an adapter. Ipso facto, it will be trivial to configure PUCE to work on the Mega Drive, with the right physical connector!
  • Great progress tonight - hooked up a GUPPY and got it reading from the flash memory on PUCE and reading/writing internal registers! Shouldn't be too much more effort to get a fully functional flash programmer going - no excuse now not to get stuck back into PUCE development.
  • Got me thinking, now that PUCE effectively has a USB connection, we can do a few cool things with it...
    • A debug console for PUCE - also allows us to dump relatively large amounts of data to the PC when reverse-engineering CIC chips etc.
    • A 'network' card for NES/SNES/N64! Could add (broadband) networking support for Contiki, for example, which would be running on PUCE of course!
  • Got a 3rd GUPPY PCBA working 100% tonight.


  • Got a 2nd GUPPY PCBA working 100% tonight! I think Chris knows how to build them now! ;P
  • Progressed on GUPPY-PUCE Flash Programmer FPGA firmware.
  • (Notice the weekly updates now!)
  • GUPPY PCBA #0002 passes a complete production test!
  • Started work on the GUPPY-PUCE Flash Programmer FPGA image tonight.
  • Unfortunately, we haven't had much luck getting a 2nd GUPPY board running. Annoying manufacturing problems have made hand assembly difficult. PCBA #0001 *almost* works - it powers up and is recognised as a USB device, but refuses to download the firmware. PCBA #0003 worked for a few seconds before dying. Frustrating indeed!
  • Flashed some LEDs on the GUPPY board today!!! This means the device is recognised as a USB device, and our (Linux) driver downloads the firmware, which subsequently runs. Tested a few GPIO pins and looks like we're cookin'! Some more testing ahead and then we can start on the PUCE programmer! (This is not an April Fool's joke!) :P
  • Received the GUPPY PCB today. Parts are hopefully not too far away.
  • The GUPPY board has (finally) gone out for manufacture. Now we wait for parts...
  • The PACE project is forging ahead whilst we wait for GUPPY. The more we do on PACE, the better practise it is for implementing PUCE! I'm thinking of even attempting to emulate a NES with PACE!
  • Well PUCE sees another new year without any ground-breaking progress. Truth is I've been side-tracked by another project (PACE - more on that later) for which an opportunity arose that couldn't be passed up. However, lately we've been turning our thoughts back to PUCE... it has been dragging a bit and both Chris & I have resolved to get it finished - we've invested far too much time & money into it to let it fizzle out!
  • We're currently laying out our USB programmer board (GUPPY) which should be sent out for manufacture next week. Getting parts could be another story, but when we get this assembled and the software developed, programming the flash (which has been a bit of a show-stopper up until now) should be much easier and much quicker!
  • More good news is that Intel flash is available in higher densities now (albeit a bit slower) but that should allow us to load a full 64MB for N64 carts and keep the smaller (and faster) 4MB parts for NES (&SNES). Again, getting flash parts these days is easier said than done!

News Archives:



Two (2) GUPPY boards have been assembled and pass production testing.


Two (2) boards have been assembled with 1x 4MB flash device each.

PUCE-NES is being re-visited now we have faster memory devices (SRAM).
PUCE-SNES is working for LoROM-only and HiROM-only games!
PUCE-N64 is working for 7101 (PAL) ROM-only games!
Optional EPC2 daughter-board now configures the FPGA.

Check out the HISTORY page!

Schematics (TBA)
PCB (as manufactured) (jpg)
Manufacturing pack (TBA)
PUCE software (TBA)

What is P.U.C.E?

P.U.C.E. stands for "Programmable Universal Cartridge Emulator".

PUCE is a device that will ultimately be capable of emulating the cartridge of any of the cartridge-based gaming consoles. Obviously it is programmable, allowing hobbyist developers to develop games (and any other software) and have them run on an actual console, rather than be confined to PC-based emulators, for example.

The first prototype will be designed to connect directly to the classic Nintendo consoles, namely the NES, SNES and N64. In order to expediate prototype development this prototype has dedicated edge-connectors for each of these consoles. There is no reason why later development for other consoles cannot be undertaken with this prototype given the appropriate cartridge connector adaptor. But the focus for the first prototype is the classic Nintendo platforms.

How will it be used?

The PUCE device will have a different 'personality' for each of the consoles for which it supports. This 'personality' is simply the FPGA device software that allows the device to emulate the cartridge for that system.

PUCE is designed to be programmed via the PC. The developer downloads the PUCE 'personality' together with their console software to PUCE and then plugs the PUCE device into the console as per a normal cartridge. Device options currently under consideration include having non-volatile storage on-board, allowing PUCE to be programmed once and then used as a normal cartidge would be used - with the ability to unplug the device and even transport it to a friend's place to play in their console without the need to re-program.

The PUCE programming software will be developed and distributed as part of the PUCE project. Options for this software include 'multi-cart' capability - allowing the developer to download a number of programs to the cartridge simultaneously.


Prototype #1

The first prototype for PUCE was designed for maximum flexibility and ease (speed) of development, without the need for special wiring harnesses or adapters. The prototype will require an external power source and may require the console case to be dismantled (for the NES at least).
  • Up to 64MB of flash ROM
  • Up to 512KB of static RAM (SRAM)
  • Powered externally via a DC plug-pack.
  • PUCE 'personality' downloaded via PC parallel port into volatile FPGA device memory (ie. you will not be able to power-off PUCE without the need to re-program). However, the design will support an optional daughter-board to provide non-volatile storage for the FPGA device memory.
  • The ability to dump NES, SNES and possibly N64 cartridges to the PC, with the addition of special cables.
  • Pass-thru connectors for SNES DSP cartridge pins.
  • Direct plug-in support for the NES, SNES and N64 consoles.

Prototype #2

  • In the next prototype we may consider the addition of SDRAM, at the expense of flash. This would imply the loss of true portability, and require an almost permanent 'tether' to the PC for programming of the PUCE 'personality' and console software. The advantage is a lower cost to assemble.
  • A single console connector with adapter daughter-boards for each of the consoles. Most likely the on-board connector may be a NES edge-connector, given the physical constraints for a programmable NES cartridge. Fortunately, the NES cartridge connector has the most number of pins of any of the Nintendo consoles.
  • A physical form-factor enabling installation in a (hacked) NES cartidge case - allowing PUCE to be used in any of the consoles without the need to open the case.

Future Developments

Contact: msmcdoug@optushome.com.au