https://github.com/RedGuyyyy/sd2snes/blob/master/rel/usb2snes_v0.4.zip(click download button in upper right)
usb2snes v0.4
- Fixed more timeouts due to disconnect problems. There are still more left to fix. E.g. pulling the cable out typically requires a reboot of the snes and app.
- Added preliminary USB/NET memory region support. Work in progress.
- Fixed (workaround) problem where querying certain COM devices results in an exception. The exception is now discarded.
See the readme file for more details on how to setup and use it. This is mostly bug fixes as the majority of the changes aren't accessible from the app. Don't click the 'Test' button as it is for testing purposes only.

<Technical stuff below>
This should fix the COM device exception on startup. I'm not sure why it's happening, but if I catch, discard, and ignore that port it looks to work. I can't reproduce it, but someone else said this fixed their problem.
The major thing I've been working on is USB/network play support. It's a bit of a hack right now (much like everything else I've done). What it provides is a (currently unused) register region at $2010-$2017 and a scratch region which a USB enabled app can access at $1E-$1F:5000-5FFF. In a test IPS patch I've set up $1000 of that region for scratch and some state variables. In the other $1000 region it holds an input and output queue. The patch which currently runs on a NMI inits the scratch and queue state and can generate queue operations (write, add, compare and swap, etc) to regions in scratch memory. Those queue operations are read by an application polling that memory space over USB which then broadcasts the operation to all networked clients. The client app pushes these writes down to the other queue which the NMI reads and operates on scratch memory. This way one game running on hardware can affect the state of another game.
Here's an example where one link gives another link (still in bed) the moon pearl in the lttp randomizer:
https://www.youtube.com/watch?v=q70PdvOG70AThe other thing I tried was allowing save states to be initiated on game start. It works with one major flaw: I'm cheating and not providing saved APU state. This results in no sound and eventually it locks up. I'd like to add a generic HW context engine which saves all APU, WRAM, VRAM, etc writes to a fixed location in sd2snes RAM, but that project needs to wait. This would provide much simpler (and efficient) save state code while also allowing for snooping of various snes RAM regions for debugging.
I would also like to have a unified driver that multiplexes multiple apps onto the USB connection so you can interleave use of usb2snes, HUDs, input monitors, networked games, etc.
Needless to say this is all going to take a lot of work and long time. There are some really cool things that can be done with the USB connection.
EDIT: I also made it so the ROM addresses in RAM are writeable while you're in the PATCH region. It's not very well tested so it may break some games. This lets you rewrite the game ROM on the fly (code or data... doesn't matter).