I recently picked up an EverDrive-64 X7 to tinker with (the version with a USB port that allows connection to a PC for homebrew). While I’m sure there will be plenty for me to say about it in the future, I haven’t had too much of a chance to dig into it yet. But nonetheless, I wanted to drop a quick note here on one *really cool* thing I have managed to do with it: play the leaked N64 version of Dinosaur Planet!
I assume most people are aware of this by now, but if not, a ROM was released a little over a week ago. For the unaware, Dinosaur Planet is an N64 game by Rare that was cancelled and later re-worked into Star Fox Adventures for the GameCube. More info on the release is here:
Today we have released Dinosaur Planet by Rare for Nintendo 64. The development was halted and moved to the GameCube, where it was then released as Star Fox Adventures. Enjoy! (More info in this thread).
The best part is, if you have a flash cart, the game runs on original hardware! There’s just one trick to make it work. If you don’t do this, then your game will boot, but the game select screen won’t appear. Instead, you’ll get a black screen after the “Rareware” splash screen. Thankfully, it’s an easy fix:
On your computer, edit the “save_db.txt” in the ED64 directory of your SD card.
Add the following line to the bottom of the file:
DP=5 Dinosaur Planet
So, it should look something like this:
And that’s it! Save your changes, put the SD card back in your EverDrive, and boot it up! It should now take you to the game save selection screen after the splash screens.
With that out of the way, what do I make of the game? Well, it’s quite possibly the best looking N64 game ever made, plus a ton of fully voiced dialogue. But it’s rough. Yeah, it looks great – when you’re standing still. But in motion, it chugs even more than the usual N64 fare. It’s also clearly unfinished with a number of bugs and crashes. Even so, I see the potential here. Had it not been moved over to the GameCube, I think it would have ended up being a top-tier N64 title, though it’s probably pushing the hardware past its limits. Either way, it’s a fascinating bit of history to experience, and I’m thankful I’ve had the chance!
Do you really, really want to play homebrew on your original N64 hardware? Is a flash cart just too pedestrian and mainstream for you? Do you posses a GameShark Pro, a 4MB Expansion Pak, and a brain disease that makes you enjoy doing things the hard way? Well, I sure do! And hoo boy, do I have a project for you…
Read on, brave souls, for herein lies the story of how I played a commercial homebrew NES game (legally purchased electronically from Steam) on my N64 via an NES emulator, which I loaded with a GameShark Pro that was interfaced to my Windows 10 PC via a very specific USB-to-Parallel adapter, that was then passed through to a lubuntu virtual machine running via VirtualBox, containing a USB GameShark homebrew loader program.
Doesn’t that sound fun?
This method made the rounds on the web a couple of years ago, but nobody really described how to do it in layman’s terms and the information was a bit scattered. So when I found out about it, it still took some piecing together. Let’s rectify that and make the method as clear as possible. Let’s get started!
What You’ll Need
An original N64 with a 4MB Expansion Pak installed
A GameShark Pro with a functional parallel port
A USB-to-Parallel adapter based off of a MosChip 7705 bridge
Your favorite NES ROM (I highly recommend Micro Mages! The Steam version even includes a legal NES ROM that works perfectly for this project.)
The basic goal for this project is that we need to run a Linux application called “gs_libusb” to transfer programs to our GameShark Pro. The tough part is how to get them talking to each other.
The hardest part of making this work might be sourcing the USB-to-Parallel adapter. Any old adapter off of Amazon or eBay or whatever just won’t work. As I mentioned in my post about connecting the GameShark to a PC, it’s only possible to do this with an adapter based off of a MosChip MCS7705 bridge (in fact, gs_libusb is hard-coded to look for it). I don’t know how to identify whether a random cable has this chip, so hunting one down is hard. I did manage to figure out that the USB-1475 manufactured by Cables Unlimited contains this chip and works well. These specific cables don’t seem to be produced anymore and are hard to come by these days. If anyone knows of other cables that contain the right chip, please let me know by leaving a comment.
Next, you’ll need to have the right version of the GameShark Pro. Versions 3.1, 3.2, and 3.3 all came with parallel ports on the back. All versions of 3.1 and 3.2 should work, but only certain versions of 3.3 carts will work. With version 3.3, some contain a working parallel port and some don’t. Usually, GameSharks with a speckled-looking case will work. The folks over at Micro-64 have a good explanation of the difference. (That article also explains how to load homebrew with legacy PC hardware, so check it out if you have an old Windows 98 machine lying around and can’t find the USB-to-Parallel adapter that’s needed for this method.)
Enough rambling, let’s get to it. Here’s the method…
Step 1: Set up your virtual machine
I won’t go into much depth here about how to set up a virtual machine, I’ll just reiterate that I like lubuntu and Virtual Box for projects like this. Go through the normal setup process for any virtual machine and you’ll be good to go. Here are the important configuration changes you’ll need to make once your install is complete:
Install the Virtual Box Extension Pack: By default, Virtual Box only supports USB 1.1. Installing the Extension Pack will allow us to configure USB 3.0.
Set your virtual machine to use USB 3.0: Without this step, you’ll be relegated to USB 1.1 and probably get a lot of very frustrating USB timeout errors when you attempt to load anything to the N64. Once the Extension Pack is installed, edit the USB settings for your virtual machine to set them to USB 3.0 mode. Then, with the USB-to-Parallel adapter plugged into your host machine, add a USB device filter for “MosChip Semiconductor MCS7705 Parallel port adapter .” This is what will allow the virtual machine to see your adapter. Or, alternately, add a blank filter to allow all USB devices to pass through.
Optional – Install the VirtualBox Guest Additions for Linux: This isn’t strictly necessary, it just makes life easier by allowing you to copy/paste files from Windows to Linux and share a clipboard. Instructions for the install are at the VirtualBox site. I highly recommend doing this, unless you prefer to map network drives to do file sharing between systems.
Step 2: Compile gs_libusb
This is the loader program that will send files to the GameShark Pro, but it’s just provided as source code and needs to be compiled on your system. It’s not too hard, just follow these steps on your Linux machine:
Install libusb 1.0 dev libraries: libusb is a tool that allows programs to communicate with USB devices. Your system may have the binaries installed already, but we’ll need the libraries to compile our own code with it. To get them, open a terminal prompt and enter the following commands…
Download and extract the gs_libusb project: Grab the whole project from the Github page (download it as a .zip) and extract it to a reasonable directory somewhere, such as your home directory.
Compile the code: Open a terminal window in the root gs_libusb-master directory and type the following commands…
sudo make cleansudo make
Assuming your libusb 1.0 libraries installed correctly, the compile should run quickly, and that’s all there is to this step. You’ll see warnings, but they can be safely ignored.
Step 3: Prepare your N64
Now we need to make sure that the N64 is ready to accept a program we send it. Just do the following…
Ensure your N64 has a 4MB Expansion Pak installed: This step is absolutely required, this simply won’t work without an Expansion Pak.
Plug in your GameShark: Use a common game, such as Super Mario 64 or Pilotwings 64, in the top slot. Avoid anything that uses the Expansion Pak memory.
Plug the USB-to-Parallel adapter into the GameShark: This should be self-explanatory.
Boot your game: Power on your N64 and choose to start your game. Make sure to turn the Code Generator ON and start the game Without Cheats. Once the game begins, your GameShark is ready and waiting for commands on the parallel port! (I typically use Super Mario 64, loaded up to the Select File screen.)
Step 4: Run the loader
Finally, the real step. With our VM prepared, gs_libusb compiled, and our N64 waiting patiently, let’s send it something to run!
Plug the USB-to-Parallel adapter into your PC: Be careful here and ensure that the VM actually picks it up and sees it. Run the following command at the terminal to ensure the MCS7705 is listed. If it’s not, check your VM’s USB settings and make sure that your host PC hasn’t “claimed” the device. (Unplug it and plug it back in with the VM running.)
Copy your ROM to the gs_libusb-master/examples directory: Really, you can put the ROM anywhere on your Linux machine, this will just make the next command simpler.
Execute the loader to run an NES emulator and your ROM: Run the following command from the root gs_libusb-master directory. It will load Neon64 and and whatever ROM you specify in place of YOUR_ROM.bin!
Let everything load: Here, all you have to do is wait. Your N64 will appear to freeze while the load is happening; that’s okay. Once the load is complete, you should see the Neon64 main screen. Hit any button and play! At any time, you can hit L+R to bring up the main menu.
Step 5: Run other programs
The examples folder contains a simple demo program that you can run, too. With everything set up and working, just run the following command to load it instead of neon64gs.bin:
sudo ./gsuploader/gsuploader examples/flames.bin
It’s also possible to build and run your own programs to be compatible with this load method. To do so, you’ll need to install gsdevkit, which will give you a complete GameShark-compatible homebrew toolchain. Go knock yourself out!
Much of the info in this tutorial was gleaned from the relevant GitHub Readme files and the following video. Have a look if you want to see someone walk through running the loader:
Here’s a little sneak peek into a project I’m currently working on (pardon the mess)… Ever since I managed to get a serial connection working from a modern PC to my Sega Saturn for the Game BASIC project, I’ve been interested in what else I can do by connecting old game consoles to a PC. That led me to the GameShark Pro for N64, which has a parallel port for communicating with a computer.
Unfortunately, the GameShark is an incredibly flaky piece of hardware that gets bricked constantly. I bought three different ones off of eBay and every single one was broken in some way. I returned the first one, but like a true tinkerer, I decided “that’s it, I’m fixing these” for the other two. One was an easy enough fix – all I had to do was boot it with the right game. By sheer chance, after being completely unable to get it to boot with Mario 64, it worked perfectly on the first try with the second game I picked: Jet Force Gemini. That unlocked it and got it working with everything. The remaining GameShark had bigger problems: a corrupted codelist that allowed it to boot, but was completely unusable. However, I had learned that it’s possible to revive bad GameSharks via the parallel connection, so easy enough, right?
Well let me tell you, getting a parallel connection working with any remotely modern PC is an absolute pain in the butt. Unlike USB->Serial adapters, USB->Parallel ones don’t support the full range of the port’s functionality. Basically, they work for printers and not much else. So here’s all I tried:
A special USB-to-Parallel adapter… It’s actually possible to load homebrew on an N64 via the GameShark, if you have the right adapter. Specifically, one based on a MosChip MCS7705 bridge. Unfortunately, I have no idea how to tell if an adapter uses this chip and most sellers don’t list that kind of technical information. So I had to do some sleuthing and found that the USB-1475 from Cables Unlimited contains this chip. Problem is, I don’t think it’s made anymore and is hard to track down. I took a gamble on the one seller I could find that had it in stock for a reasonable price. It was a questionable site I’d never heard of before, but you know what? It showed up quickly and was exactly what I’d ordered, all for about $7.50. The cable itself worked in the sense that my PC recognized it, but it didn’t work for talking to the GameShark. Oh well, that was a longshot, anyway. I will save it for homebrew experiments. (And for the record, the site I ordered it from is now out of stock, so I may have gotten the last one. If you know of a good way to identify other cables that will work, let me know.)
A mini-PCIe-to-PCIe adapter with a combo Serial/Parallel port adapter… I thought for sure this one would work. I pulled out an older laptop than the one I currently use. It was made for Windows 7 and is currently running Windows 10. I removed the WiFi adapter and replaced it with this mini-PCIe-to-PCIe adapter/extension. Then, I popped a PCIe serial/parallel combo card into the new PCIe port it provides. You can see this whole setup in the pictures, and it actually worked brilliantly… for serial connections. For the life of me, I just couldn’t get it to talk to the GameShark via parallel, either natively in Windows 10 or in Windows 98/XP VMs. I still don’t know what went wrong here, whether it was the adapters not supporting the kind of communication I needed or the VMs or what. So I punted on that approach, which led me to the one that actually worked:
A Wyse thin-client with native serial and parallel ports, hacked to run Windows 98 and XP… That’s what you see above. And of course the shipment for the parallel cable I ordered was delayed, so I had to precariously plug the computer itself into a disassembled GameShark. It ain’t pretty, but it works! I have the thin-client running Windows XP Pro headlessly with a USB WiFi adapter so that I can Remote Desktop into it. With that setup, I was able to run the old GameShark PC software, connect to the GameShark, and fix the codelist. I did this by saving the codes from the working GameShark and loading them into the broken one. After tinkering with it a bit, I was even able to upgrade the system software from v3.2 to v3.3!
So there we have it – I now own two working GameSharks and a whole bunch of other hardware and adapters that most people would probably think I’m kinda nuts for having. But the experimenting is half the fun, right? Now to get to hacking! But wait… it turns out I need an N64 Expansion Pak to do all the really cool GameShark<>PC communication. I suppose it’s finally time I got one, huh?