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
|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
|Stylish blue LED||
|Zoomed out a little||
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.
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.
All this stuff is in the "cadcdev" CVS repository on SourceForge now. Just follow the SourceForge link
in the sidebar.
I'll post more as I get it done!