UMDKv1
This is version 1 of my USB MegaDrive DevKit. I worked on it on and off over a period of a few months in 2008, before giving up on it because some fundamental limitations of the design prevented me from developing it in the direction I wanted to.

What is it?
The UMDKv1 is basically a PROM emulator. It's a small AVR microcontroller (similar to the one in the S-AVR, but with an onboard Full-Speed USB controller peripheral, an SD-card slot and 1 MByte of SRAM.

How does it work?
It plugs into the cartridge slot of a SEGA MegaDrive. On startup the AVR holds the MegaDrive in RESET whilst it loads a menu program from the (FAT32-formatted) SD card into the onboard SRAM, whereupon it releases the MegaDrive from RESET. The MegaDrive runs the menu program, which allows a user to choose which of the (potentially many) game ROM images on the SD card to run:

Once the user has made a choice, the menu program writes the index of the choice to the SRAM and then goes into an infinite loop. The act of writing to the cartridge address space raises an interrupt on the AVR. The interrupt service routine puts the MegaDrive back in RESET and reads the menu choice. It then loads that choice from the SD card into the SRAM, and releases the MegaDrive from RESET.

Motivation
I hate to destroy your nostalgia, but no, I didn't spend my formative years playing Sonic the Hedgehog. My first and only SEGA MegaDrive I rescued from the bin after my girlfriend did a spring-clean in her flat. That was in March 2008.
So why bother? Well, at the time I was looking for a nontrivial project to try out a few things I had never done before:
- Designing with surface-mount chips
- Etching a home-made PCB
- Using programmable logic
- Interfacing with USB
- Reading a FAT32 filesystem from an SD card
So really this was a learning exercise. And it proved to be a very good learning exercise.
PCB
I designed the double-sided PCB layout in Eagle, using very conservative via sizes (1.6mm octagonal vias with 0.8mm holes). This is because there's a sizeable margin of error in home-etched PCBs. I printed the design on LaserStar film using my HP LaserJet 2014 and exposed each side of an FPC-16 double-sided board separately in an LV-202E UV unit, developed it with an SN110 applicator, etched it with a PA210 bubble-etch unit, and cleaned it off with an SN120 applicator before drilling it with a M410 Dremel Drilling Station. I used an SN140 applicator to apply a flux lacquer, which makes soldering much easier.

In retrospect the LV-202E UV unit is inadequate for double-sided boards because you have to expose each side separately which is quite difficult to get right:
- Print top layer mirrored on LaserStar film.
- Print bottom layer unmirrored on LaserStar film.
- Carefully align the two printouts so the ink from each print is on the inside.
- Carefully staple the two together.
- Peel off the protective film from both sides of the board.
- Insert the blank board in between the two sheets.
- Warm up the UV unit for five minutes or so.
- Expose one side of the board for 3 mins.
- Then very carefully turn it over, making sure it doesn't shift inside the two sheets.
- Expose the other side of the board for 3 mins.
It's this bit about turning it over which causes most problems. It's very easy for the board to slip. Even if it shifts by 1mm, your via pads on the top and bottom layers will not line up. I have since thrown more money at the problem and bought one of these AZ210 double-sided UV units.
Programmable logic
This design uses a single Atmel ATF16V8. I used Atmel's WinCupl software to compile the design (which is pretty simple, just combinatorial logic). To burn the design into the chip I used a Wellon VP280 programmer which I bought from this guy in Hong Kong.
USB
To be honest, I never really did anything special with USB. I got Dean Camera's excellent Lightweight USB Framework for AVRs running on the board, and tried out his various implementations of standard USB devices (e.g MassStorage, USBToSerial). The main problem with the AVR micro I used is it is limited to Full-Speed USB, which is pretty slow even for shifting around (tiny by today's standards) MegaDrive games. I have since switched to the Cypress FX2LP, which can do Hi-Speed USB.
Download
You can download all the design files for UMDKv1 from here. You can read a discussion about it here. I have stopped working on it now; I consider it to be a bit of a dead-end. I have started work on a complete re-design (imaginatively called UMDKv2) which uses a Hi-Speed USB controller instead of the AVR, an FPGA instead of the 16V8, and an SDRAM instead of the SRAM chips. I will post more information about it periodically.
Why redesign it? It looks good to me!
- UMDKv1 is pretty slow. It takes 10-15 seconds to load a 1Mb game.
- UMDKv1 is limited to 1 MByte games.
- There is no possibility of bidirectional communication between the 68000 and the AVR.
- As a game is loading, the MegaDrive is held in RESET, so the screen is blank...I'd like a progress bar.
Fantastic project! Thanks for making the source available, I've been looking for something like this to tinker with for years, maybe I can figure out what's going on with these things now!
Here's hoping you post the v2 at some point!
Hi Joel, let me know if you decide to make it and if you make any improvements.
I am still working on v2. It's taking a long time, but I'm learning a lot along the way which I guess is the point. I will definitely post the design here when it's ready.