Small update – Revision 4 PCBs are in and assembled. Several hardware problems fixed. Time for major software work now. Do you like the new color scheme? Click the link below for the rest of the pics.
Revision 4 of the PCB is now complete and sent off for manufacture. I had to make a few small changes to the previous revision, such as adding an oscillator for the FPGA, fixing a debugger communication issue, and changing some signal paths. There were small issues with the previous board that were preventing me from moving forward, so this new board should hopefully provide a boost in productivity. I also spent a little extra and ordered it in RED this time, so that should be a treat. I imagine it will be at least 3 or 4 weeks before the boards come in. In the mean time, I am meeting with some VB programmers to discuss the VBSD menu loader. I am also writing configuration code for the FPGA.
Debugging, debugging, and more debugging. I’m doing it whenever I get time and motivation. Here is what I currently have working: SD card reading/writing ROMs, FPGA dynamic programming sequence and initialization, FPGA asynchronous logic for bus translations between VB and SRAM, microcontroller real-time debugging output for register-level verification. Basically, the micro is able to read FPGA programming files from the SD card and program the FPGA. FPGA “programs” in this case will do different things depending on the state of the system. For example, after a game has already been loaded into the main SRAM, the FPGA will be loaded with a program to perform the address/data bus translations between the VB CPU and the main SRAM. There will probably be 3 or 4 FPGA programs necessary to run the entire system.
I am running into some limitations with my FPGA configuration, because I’m designing everything based on asynchronous logic without external clock inputs. It might be that I need to add an external clock to the FPGA to accomplish some of the more difficult tasks, such as backing up save data from SRAM to SD card.
The microcontroller firmware now has about 2,000 lines of code running, and an additional 500 or so for the FPGA. I also wrote some PC software utilities to help parse and reformat the FPGA bitstream files. The nice thing for the users is that the FPGA will be completely upgradeable and patchable via the SD card.
Next up, I need to test my FPGA program using an existing VB game. I plan on connecting a simple VB game, such as Mario Tennis, on the other side of the FPGA bus, and then trying to get the game to boot/play on the VB. I’m trying to break up the system into blocks like this, so I can debug the subsystems one at a time. Once I can show that Mario works on the VB, my focus will be to replace the Mario cartridge with the system SRAM programmed with a Mario Tennis ROM image.
So that’s about it for now. Again, I apologize for the infrequent updates. I haven’t forgotten that there are people out there following this project. Hopefully I will have more time to work on it in the near future.
Big update! It took about 3 weeks to get my order of boards shipped from China. I finished assembling my first prototype of Rev03. I verified that the microcontroller powers up and runs but I still have to probe the rest of the board searching for design issues. Things are starting to roll forward, though. Enjoy the pictures for now and post your questions/comments.
Hey folks. I know it has been a SUPER LONG TIME since my last update. To be honest I had to stop working on the project for a while because A) I had a lot of stuff going on and B) I was getting burnt out, as often happens with hobbyist electronic projects. I had significant issues with my first microcontroller-based design, and in the end I decided it was needlessly complicated and I needed to figure out something else.
Here is a flow diagram for the next iteration of the VBSD (formerly VBOOT) project: (*edit, the link doesn’t appear to be showing up, so here is the URL) http://imgur.com/l4f0Z
As you can see, the design is almost completely different. The main controller of the VBSD is a Xilinx Spartan-3A FPGA. It handles all interfacing between the VB and ROM/RAM. There is a PIC24FJ microcontroller as a supervisory circuit for the FPGA, and it also handles reading and writing to the MicroSD card via SPI protocol. Due to the requirements of the FPGA, there are now 3 power planes on the circuit board, including the VB 5V supply, a 3.3V supply to power the memory and electronics, and a 1.2V supply to power the FPGA core logic. I was able to improve on my power supply design in this iteration and reduce the footprint.
The ROM/RAM for a VB game and save memory will all be stored on the main SRAM chip, which must be 32M or greater. 16M is needed for a VB game, plus the save game SRAM, plus my custom VBSD menu and interrupt vectors. I am contemplating switching from SRAM to SDRAM now that I have an FPGA controller, which will save cost and make the design easier to maintain and upgrade in the future. The FPGA will handle all address masking, so essentially the VB can read/write memory to either the “ROM” or the “SRAM” and the FPGA will be able to translate these signals and deliver the correct data with little propagation delay.
Also improved in this version of the cart is the bus switch interface that connects the VB 5V logic to the board’s 3.3V logic. I am using 6 FET Bus Switches that are bidirectional, so the FPGA will be able to both send and receive data to the cart edge. What does this mean? Well, I am planning on designing a future expansion board (listed in the diagram as “RAM Dump Daughter Board”). This expansion board will plug into the VBSD cartridge and it will include its own small power supply. You plug the daughter board into the VBSD cartridge, and then you plug an original Virtual Boy game cartridge into the other end of the daughter board. When you flip the power switch, the VBSD will recognize the daughter board and initiate a RAM dump of the Virtual Boy game cartridge. This means you will be able to PERMANENTLY SAVE your save game data from all of your original game cartridges. These save game files will be loaded onto the MicroSD card and they can later be used by the VBSD to provide REAL SAVE GAME SUPPORT to every game in your collection. I am really excited about this feature, but obviously this is a future project that will take a back seat to the VBSD development.
In summation, I’m really excited about the future of this project. Despite my lack of updates, I have not given up on the VBSD! Please comment with any questions/concerns you have.
A new snowboard, a broken wrist and a hard drive crash later…
Thanks for hanging in there. The last couple of days I’ve been working pretty hard on the project in my spare time. I have the first board revision 95% done and tonight or tomorrow I should have it ready to send out to the fab house. I have decided a few things about the design:
- I will go with a “bare pcb” design that does not fit inside a VB donor cartridge. In the future people may want to make their own cases for the PCB but for now it’s simply too much effort for not much gain. I think this is a good solution because now we won’t have to keep using VB donor carts and sacrificing the already-decreasing number of VB carts out there.
- The VB connector issue has been 100% solved and I have several suppliers in line for the 2mm-pitch headers. The only downside is the cost, because each header comes in at just over $7, which is very expensive for a header. The thickness of the board is such that it makes header installs extremely easy, even for novice solderers. See this picture for how the board will fit in the VB:
- I fixed all package sizes for the SRAM and bus transceiver chips, which is why my first prototype failed. Now I just have to fix a few traces on the board and it’s essentially ready for Rev 0.1.
- On the software side I think I have some solid code in place but there are still some questions in the air about how to alert the VB when a new game has been loaded into SRAM. I will investigate these issues once the hardware has been validated and I can focus 100% on software.
- I am toying with the idea of using a MicroSD-based bootloader on the microprocessor. That is, upgrading the firmware would be as simple as downloading a special firmware file and dropping it onto the MicroSD card. This will allow me to fix bugs for people who already have a cartridge.
- I haven’t set up the VB dev environment on my new hard drive yet so I haven’t done any of the VB program development yet.
That’s it for now. More updates to come, hopefully more regularly now (once a week or more).
Great news……. drum roll….. My board is here! And actually, they must have made an extra one by mistake because they sent me an extra board for free! So now I have some insurance if I happen to make mistakes on the first board, which is always nice. Now it’s time to whip out my build kit and my soldering iron and go to work. Wish me luck. In the mean time, here is a low-quality pic from my phone.