Well, after skipping through a bunch of specification pages, I am pretty sure most game manufacturers didn't.
specifications ... where?
(They were more concerned about game cartridges to be copied, and
invented things like SuperFX to keep people from doing that. Also, some games have code that checks ROM/RAM access times, but handling that is definitely the emulator's business). So in principle, a relatively simple memorychip-to-USB-wrapper (with USB Mass Storage, a hard-coded read-only FAT16, and conversion to SMC/SWC file format added on top) should do. Atmel even provides a USB Mass Storage example app for their AT90USB uC series, so (theoretically) all that remains to do is mostly about hooking up the cartridge and diverting part of the SCSI read commands to the ROM.
I just checked out a few docs i could find and it seems that the cartridge has a simple 24-bit address bus + 8-bit data bus + bus control signals that would need to be connected (+ ofcourse GND,VCC (5V)) -- and do check you have the necessary amount of pins on your µC before you try to connect it
For that usb wrapper, it would need logic to detect the rom mapper used by the cartridge -- or you could just read out the full 24-bit address space (16 MiB - wikipedia says that the biggest games ever were 6MiB (48 Mbit) ) and work from there...
I actually happen to have a device that could be modified to dump SNES cartridges - it's current job is a DIL32 bios flasher --- it has 24 address lines of which 18 are connected to the DIL32 -- one would "just" need to connect all it's pins to a cartridge connector + reprogram the device.
The device is essentially an ATmega88 + 3 74HC164N's (shift registers) (the output-only address bus) + a serial port level translator.
I wont be doing the mod -- i dont have any SNES cartridges -- but just a note on what is a pretty much minimum configuration of a rom dumper device, i think. And dumping 16MiB over serial at 115200 would take over 24 minutes -- less with the software on this thing that can compress emptyness (one single value repeating for 256 bytes) - but as reading 256k without sending it out takes 15s -- 16MiB = 16 minutes.