Thursday, September 16, 2010

Yet Another Update Post

I finally decided to get this blog on, since it seems to have enough info.  By the looks of it, there have been a lot more visitors since.

I keep putting off posting a tutorial, because of schoolwork, testing, and planning for college I don't have much time to spare.  However, I am definitely going to start posting ASM tutorials within the next two weeks.

EDIT: I found that the Gameboy Assembler Studio application that I use to program the gameboy is no longer up on the web.  I will try to get it uploaded somewhere useful and provide a working link for it when I have the time.  It's a really great GUI that was designed for windows 95, but it still works great for me on Windows 7.

To end this short update, I have a question for you who visit this site.  Should I create development blogs for other classic systems, such as the NES/SNES and maybe even the Gameboy Advance?  I have some information on those systems, as well as great tools I have downloaded throughout my journey of the internet.
What do you think?

Another post is sure to come soon, plus an article from another GameBoy developer from YouTube.



  1. Hi there, happened to stumble upon your blog. Anything on the NES/SNES would be good :)

    I'm searching for some information upon how to access the MBC1 in the gameboy rom so I can read the SRAM data but doesn't can't really find simple information or a guide on it :\ (hoping to do it with an Arduino too!)

  2. Hi, sorry for the late reply. I've been working on a number of projects lately...

    I'm not 100% sure of how you could do that... My first suggestion would be to make the Gameboy Cart flasher I talk about in the older posts; there's a link to it in one of them.
    The other thing you could do with the arduino is whip up a program that goes through and addresses the SRAM, then reads the data lines and stores it on an SD card or in a debug terminal. I did that with the Parallax Propeller, and it worked out very nicely.
    As for trying to read it while in the cartridge, I haven't really read enough to fully understand the MBC1, so you should probably just build a cartridge reader/writer.

    As for NES/SNES development, I plan to get to work on flash cartridges and maybe set up another blog for that.

    If you have any other questions or comments, email me (there's a "contact me" link at the top of the page) or leave a comment.

  3. It's me again :). I actually forgot to check up on this.

    I've kept on reviewing the docs I could find and to start off small I have recently managed to dump the ROM of a gameboy game using the Arduino by connecting directly to the gameboy game and sending the data over serial to a python script. (Reading your post, sounds like you did something like this too)

    I'm going to do a write up on it all so others can learn and then start looking into reading the SRAM which should be easier now that I have some experience.

  4. Awesome! I believe SRAM reading is essentially the same... Just address and read.
    I'd love to see some pictures of your connections between the arduino and the cart. Also, what MBC chip does the cartridge you're reading use? Are you having to do bank swapping or anything like that?

  5. Yep it was really great when it worked!

    Here's a picture showing the connection to the Arduino: - I'm using 2 shift registers (on PCBs - one of my small projects) for the A0-15 addresses with 16 resistors and then just the arduino pins for the D0-D7 addresses plus 2 pull down resistors for the WD/RD pins so I can set them to high when needed.

    The MBC cartridge I have is MBC2+Battery and yep I did bank swapping by writing to the 2100 address which bank number I wanted and then re-reading 4000-7FFF. The game I used is F1RACE which had 8 banks total.

    It's exciting when it all comes together to work nicely :D. I'm thinking eventually I might make the python script more robust that it could handle any MBC but that's for later down the track.

  6. Nice!! So are you doing the same sort of thing I describe in my post about my rom reader -- address, pause for a microsecond or two, then read? How long does it take for you to read the entire rom?

  7. Yes doing the same thing like you, except I just wait 1 millisecond instead of 1 microsecond. I should probably look into delaying less time but the Arduino is running at only 16MHz.

    I just tested dumping the entire ROM (128KB) and it took 4 minutes, that's pretty long! I'm guessing you read your 512KB ROM faster than I read my 128KB?

    Also about the gameboy cartridge connector on that post, I've also looked around but could only find 1 website that had it but you need to order like a large amount like 10K units though they did say you can contact them to confirm an order so maybe you could order like 100 or so: -> Game -> 1.5 Game boy slot

    You have to create an account to see the price (0.8782 US each) and minimum quantity.

  8. I've now increased my serial bit rate to 115200 and am delaying 5 microseconds and it takes 1:35 for the 128KB, I think I've reached the fastest it could go.

  9. Thanks a million for the link to the gb cart connector! I'll have to buy a few of those...

    Actually, since I'm not doing the actual data transfer to the PC yet, my numbers for speed are definitely off -- I can, however, read 1MB/s (im only pausing for 1 microsecond; but I can decrease that even further to only 800 ns if I wanted) but I can get it to read GBC games in 1 second. Since PC transfer rates are also sort of slow, I might just have it do USB communication, since someone wrote a program to do that, WITHOUT having to use a FTDI chip.

    Thanks again for the link, and it sounds like you're making some awesome progress on your ROM reader.