[Navi]

Or, how I took apart my Dreamcast and did even more ghastly things to it than drw did to his =)

DISCLAIMER: If you decide to do anything with the content on this page/these pages, I can't be responsible if something goes wrong for you, or even if it doesn't work the way you expected, wasted your time, etc. If you attempt anything on here, it's all at your own risk. Now then, that said, I don't even have any how-to info posted here yet. I'd like to do that some time soon but haven't had the chance yet. So for now, just sit back and enjoy the pictures and commentary =)

In The Beginning...

One day while browsing the web pages of bITmASTER I thought about how lovely it would be to completely hack up a Dreamcast and turn it into something somewhat more respectable to a developer: a flashable BIOS (or at least certainly some kind of loader option that doesn't involve a burned CD), a large amount of persistent storage for data files (hard disk, anyone? =) and of course, a network adapter. Now this was before the BBA was actually available, and the Lan Adapter and BBA were pretty much unavailable to anyone outside of Japan (trust me, I tried =), so as far as we knew, this was going to be the only shot to ever actually have a network connection to the Dreamcast. I also had seen pictures of the official dev station in its mini-PC case, and had an instant drool fest involving images of putting such a beast together with KOS for an Amiga for a new generation. (Hey, we're all allowed our illusions of grandeur occasionally! =)

With that in mind, I made a little order to Jameco... This was around January of 2001.

After several gruelling nights worth of work, I had created a sort of custom wirewrap breadboard with sockets for the chips I'd need. I had also ripped up a modem and transformed its pieces into a DC external parallel port to header adapter. I had a schematic for the ISA/IDE adapter. I was ready to go. The only problem was, the adapter I was wiring would be excruciatingly hard to actually build in its current form using the methods I had already committed myself to. And keep in mind also here, I'm a middle-class software guy here, not an EE! I don't have access to the tools I'd really need to do this right: o-scope, etching equipment or sending off for boards, etc. With these glum thoughts, and the happiness that was the BBA coming out in another month, I put away my toys and they sat in the closet until about a month ago (March 2002).


Layer 01: Reset

(Yes, I'm a Lain freak ^_^)

Around that time, I started having the itch to do some hardware hacking again. The simplest thing I could do with my supplies and which would still be useful was to add a reset switch to my development DC. So I did this.

The Reset Switch

This is based on a diagram on bITmASTER's site. Nifty little mod and got me feeling a bit better about hacking on the innards of my DC. This also provided me with the specific location for another wire later on.


Layer 02: Psyche ISA

It was about this time that I found the site of Kiyoshi IKEHARA at the Nagoya University Amateur Radio Club. He had built bITmASTER's IDE interface, and had gone further to actually design and build an ISA interface as well. His ISA-only schematic was simpler than the earlier design I was going to attempt, and more importantly, I had been finishing my CS degree and getting into some great nitty-gritty hardware details, so I actually understood the schematic and everything it did. I glanced in my parts and found that I already had everything I needed. After a tiny bit of modification and planning with the new schematic, I got to work.

The Modem Plug
Top View; if you could see it
in the lighting, I have 'psyche-01'
etched on the board
The main board (top)
The main board (bottom)

I finished the thing surprisingly quick using my custom wirewrap board (about 2 nights of work) and realized that I had no ISA cards to test with. DOH! All I had were network cards I don't know how to program, and sound cards. I plugged everything in and it came up ok, the DC's external bus space acted like something was there, but I really couldn't definitively tell. Not a good time, again, to be stuck without an o-scope or logic analyzer.

I really tried...


Layer 03: Psyche IDE

Now I'm kind of an impatient person, and I didn't feel like trying to hunt down old ISA cards in Tucson. It's not hard in Austin: go to Goodwill. But here, you're lucky to find things that old without some connections. So I started studying the IDE diagram, and to my vast surprise and joy, practically all of the IDE connections were already available on the ISA bus. I just had to put some jumper wires over to the ISA port, and it should be good to go.

Stylish blue LED
The HD
Zoomed out a little
Ditto

I did this, and shocked myself by sucessfully talking to the hard disk on the first try. I only had one problem, which was that one of my data pins wasn't quite soldered on correctly, so it always returned zeros. I corrected this and could store and read back data from a hard disk.

This part isn't finished yet; I discovered I need to go back and add some grounding wires because I'm using HC logic chips, and I also need to do some address decoding logic for the IDE so that I can use it at the same time as the ISA. Right now I just commandeered two ISA address lines for the CSn# lines on the IDE, but that won't work if I want to address ISA also. More later perhaps.


Layer 04: Flash

So I had my little ISA/IDE bus working and decided it was time to fully take over the machine I was augmenting. It just loses some of the magic to have to put in a CD and watch the little swirl animation, and see "LICENSED BY SEGA" pop up all over your toy. =) Well, that and this was my "hardware experiment DC", so it wasn't new to begin with and the GD-Rom unit was starting to go bad(!!). High time to replace that BIOS.

After wrangling for a while with how to actually physically fit the chip in place (and arguing with Google's search results over the fact that practically no one sells SO-44 sockets for a reasonable price) I gave up and decided to physically piggyback the chip and solder it in place over the original one. This involves some logistical issues, because SMT components are not meant to have pins sticking down below them: they are meant to sit on the surface, as the name implies.

My first problem

I didn't realize at first that it was possible to simply bend the pins down and put a little solder bridge across with a little careful effort, so I did it the hard way on one side (see second pic below). This involves using wire-wrap wire that was stripped and soldered to the top and bottom. This was very problematic -- not only did it make me nervous, but my A12 line was stuck at L. So I eventually redid it (though these pics were taken earlier).

Side 1: Chip Selects
Side 2: Evil Wires
Back side. The red/white wires
are my reset switch.

Also, I am using an STMicro M29W800B flash ROM, which is only 8Mbit (1MB). This is half the size of the normal DC BIOS. Maybe later if I get inspired, I can tack on yet another flash ROM and build some decoding logic, but I'm pretty happy to have even 1MB of flash right now considering how hard that was to find. Source: Mouser. The chip comes with an unused RB line (ready/busy), and you must wire the RESET# and WE# lines elsewhere on the board. If you're serious about trying to do this then email me and I can send you a better picture of where to solder things to.


Layer 05: Reassembly

Now I had all this fun stuff in place (and even in a form factor that allowed me to re-close the case!) so I went about putting it back together properly. I already had a hole on the right side of the case for the reset switch, but the BIOS switch was closer to this hole, so it got relocated there. The reset switch earned a new hole on the front, next to the maple ports.

Ya gotta switch it on 'em!

I arranged the hole sizes so that they're just the tiniest bit too small to hold the actual switch bodies. Thanks to friction, this results in a nice snug mounting for the switches, but not permanent.

Help, I'm growing worts!

Plugged back in, turned on, and fully functional! I decided while I was in there tinkering to go ahead and replace the orange LED with a bright blue 3.3V LED, to match the new Navi color scheme (see next section).

I'm Darth Console!
It still plays Project Justice!


Layer 06: Navi

Now all the hardware is in place, what am I going to do with it? Well, make a Navi of course! =D Below on the left you can see a (fuzzy) screen shot of the program I'm working on which will replace the current Sega swirl startup screen. The colors should be a bit darker than they look, but what can I say? Cameras are cheapo these days... Note that this is running via the normal startup for now, until I can work out some more hardware setup things from the original BIOS and put them in my bootstrap loader in flash ROM. The pic on the right is what actually happens when you try to run it from the BIOS -- weird colors, no maple, and no sound. Ahh well, time to work out some bugs! =D The text graphics were done using The Gimp and Verdana for the top font, and Ray Larabie's free fonts for the bottom.

Theory...
...and practice.

That's a KOS program using my Navi "sub-architecture" which hasn't been checked into CVS until I can figure out exactly where I want to put all the files. Eventually I'd like to get this program turned into a sort of mini-GRUB: put up a list of programs which can be run from the flash ROM, and let the user choose one (with the option of a timeout, or letting you upload one via ethernet, serial, etc...)


May 5th: Working bootstrap and ROMFONT

I've now got a mostly working bootstrap (still missing proper sound support, but I'll get that fixed sooner or later) and it even supports the ROMFONT syscall! I obviously can't just copy in Sega's font, so I'm using the free "Neep" X11 font instead. Here are two screen shots to illustrate. The one on the left uses the old ROM font and the one on the righ uses my new ROM font. I'm not sure which I like the looks of better, but Neep should certainly be more visible on TVs.

Before
After

All this stuff is in the "cadcdev" CVS repository on SourceForge now. Just follow the SourceForge link in the sidebar.


Stay Tuned...

I'll post more as I get it done!