Munchausen Flash Cartridge progress

Discuss hardware-related topics, such as development cartridges, CopyNES, PowerPak, EPROMs, or whatever.

Moderators: B00daW, Moderators

User avatar
blargg
Posts: 3717
Joined: Mon Sep 27, 2004 8:33 am
Location: Central Texas, USA
Contact:

Munchausen Flash Cartridge progress

Post by blargg »

We're making excellent progress on the Munchausen Flash Cartridge. arfink posted a video demonstrating the menu and loading from the PC:

Munchausen NES Menu Demo
User avatar
thefox
Posts: 3139
Joined: Mon Jan 03, 2005 10:36 am
Location: Tampere, Finland
Contact:

Post by thefox »

Image
User avatar
Dwedit
Posts: 4470
Joined: Fri Nov 19, 2004 7:35 pm
Contact:

Post by Dwedit »

I wonder how this compares to the PowerPak?
Here come the fortune cookies! Here come the fortune cookies! They're wearing paper hats!
User avatar
blargg
Posts: 3717
Joined: Mon Sep 27, 2004 8:33 am
Location: Central Texas, USA
Contact:

Post by blargg »

* Goal is to be able to run a good portion of homebrew stuff for low cost (current target: $40). Not for advanced homebrew using other mappers.

* Runs NROM (32K PRG, 8K CHR ROM/RAM) and MMC1 (256K PRG, 8K CHR RAM). Current prototype can hold two NROMs and one MMC1 at once. Future software upgrades will probably also allow 6 NROMs, without any MMC1s. With more juggling, it would be possible to fit 4 NROMs + 1 MMC1 or 10 NROMs.

* Programs can be loaded without removing cart from NES. NROM takes about 10 seconds to load, MMC1 about 55 seconds. Future software upgrades might improve this.

* Software upgrades allow other interesting features that I'm exploring.

* Included USB-NES cable can be used for interesting things besides just loading things on the cart.

* Made from SNROM board with fairly minor modifications, and plans will be posted for people to make one themselves. The minimal modification version on a board with a NEC MMC1 takes only 5 jumpers I believe, and of course replacing the ROM with an Am29F040B Flash chip.
User avatar
Dwedit
Posts: 4470
Joined: Fri Nov 19, 2004 7:35 pm
Contact:

Post by Dwedit »

So there's 8K of WRAM (battery backed) and 8K of CHR-RAM. Any way to expand the CHR-RAM?
Here come the fortune cookies! Here come the fortune cookies! They're wearing paper hats!
User avatar
thefox
Posts: 3139
Joined: Mon Jan 03, 2005 10:36 am
Location: Tampere, Finland
Contact:

Post by thefox »

blargg wrote:* Made from SNROM board with fairly minor modifications, and plans will be posted for people to make one themselves. The minimal modification version on a board with a NEC MMC1 takes only 5 jumpers I believe, and of course replacing the ROM with an Am29F040B Flash chip.
What features does the Flash chip need to have to work with this thing? I have some spare W29C020C chips so wondering if I can use them. Of course they're only 256KB but that's not really a problem for me. Here's the data sheet: http://www.gaw.ru/pdf/Winbond/w29c020c.pdf
Download STREEMERZ for NES from fauxgame.com! — Some other stuff I've done: fo.aspekt.fi
User avatar
blargg
Posts: 3717
Joined: Mon Sep 27, 2004 8:33 am
Location: Central Texas, USA
Contact:

Post by blargg »

Other Flash chips could be accommodated, though it'd require some changes to the driver code. Once I rewrite the driver to be more modular, it shouldn't be too difficult (right now it runs at 5.76 KB/sec using some crazy code that receives a byte as it calculates the CRC-16 of the previous and programs and verifies a byte into Flash). As long as you can get the bootloader programmed into Flash, it's relatively easy to get programming code working. The development setup allows running small programs in low memory or WRAM, so you don't have to be reprogramming the Flash chip in a programmer when getting the basic driver working. The chip you mentioned uses a different sector layout, so I wouldn't be able to write the driver myself unless I had one of the chips. I was thinking that we could just provide the preprogrammed Flash chip, that way they're all the same part.
So there's 8K of WRAM (battery backed) and 8K of CHR-RAM. Any way to expand the CHR-RAM?
It shouldn't be too hard to put a 32K CHR RAM in, as it's also a 28-pin chip.
User avatar
Memblers
Site Admin
Posts: 3901
Joined: Mon Sep 20, 2004 6:04 am
Location: Indianapolis
Contact:

Post by Memblers »

Compared to PowerPak, this is far more useful for developers. Can't say I'm particularly a fan of the MMC1, but whatever floats your boat, as they say.

This is pretty much how the loading was to work on the original Squeedo design. But this is a simpler mapper, and is cheaper with less firmware to work on. :)

Whenever I make that CPLD cart board I was talking about (in the battery-backed SRAM alternatives thread), the serial adapter for this would work well with it. It will have 32kB of CHR and WRAM, and a less annoying register setup (IMHO) than MMC1. I think it would be cool for example to release a game on it, and still allow the user to load their own program onto it if they wanted (either using unused part of the ROM, or backing up the full game and reloading it whenever they want).
User avatar
Banshaku
Posts: 2404
Joined: Tue Jun 24, 2008 8:38 pm
Location: Japan
Contact:

Post by Banshaku »

For now it's only MMC1 and you can build it yourself out of an existing cartridge. What I would like to know is if it would be possible to put it on other type of cartridge like an MMC3? What would be required to be updated to be able to use this setup?

I wouldn't mind to have an MMC1 too for other type of testing but an MMC3 would be more useful for my current project . Or I could even go as far to say that I would built up to one per mapper that I want to play with.
User avatar
Memblers
Site Admin
Posts: 3901
Joined: Mon Sep 20, 2004 6:04 am
Location: Indianapolis
Contact:

Post by Memblers »

Banshaku wrote:For now it's only MMC1 and you can build it yourself out of an existing cartridge. What I would like to know is if it would be possible to put it on other type of cartridge like an MMC3? What would be required to be updated to be able to use this setup?
With the MMC3 (if you want CHR-RAM) the main concern is what happens you try to program the bytes behind the PRG bank select register.

You need some logic to select whether $8000+ writes go to mapper, or to ROM. You need a decoded address for the register, a latched data bit to hold the state selection. Or you can relocate the mapper registers, if you don't want to run commercial games without hacking them.
tepples
Posts: 22345
Joined: Sun Sep 19, 2004 11:12 pm
Location: NE Indiana, USA (NTSC)
Contact:

Post by tepples »

MMC1 is multicart friendly: it has a mode that kinda-sorta emulates NROM-128 ("Crazy Climber mode") and a 32 KiB mode that emulates NROM-256. It also has a well-defined way to switch between two independent MMC1 binaries (the SUROM trick).

MMC3, on the other hand, isn't very multicart friendly. It needs additional hardware to switch between games, as seen in NES-QJ or Mario 7 in 1 or 1,000,000 in 1. They could have done like TLSROM and abused the CHR bank lines to select a game as in SUROM, but 1. that doesn't allow selecting individual NROMs within a bank, and 2. all MMC3 NES games but three use CHR ROM anyway.
User avatar
blargg
Posts: 3717
Joined: Mon Sep 27, 2004 8:33 am
Location: Central Texas, USA
Contact:

Post by blargg »

Memblers wrote:With the MMC3 (if you want CHR-RAM) the main concern is what happens you try to program the bytes behind the PRG bank select register. You need some logic to select whether $8000+ writes go to mapper, or to ROM.
It doesn't seem you would. Map the 8KB Flash bank you're currently programming to $C000, then do the $C555, $C2AA, $C555 program sequence and the only MMC3 registers you'll disturb are the IRQ reload and acknowledge, which you won't be using during programming anyway.

The possible problem is that the last bank is fixed. You need a bootloader to run when you power on. Maybe you could use one of the CHR bank bits as on the MMC1, assuming they power up with predictable values and that value is different than what an MMC3 CHR RAM program would normally write to them.

So yeah, an MMC3 version should work fine. Besides the bank select rewiring to the Flash chip, you'd just hook /CS to /CART on the NES bus, /OE to the /ROM CS output of the MMC3, and /WR to /WR on the NES bus, just as on the MMC1 version.
Jagasian
Posts: 421
Joined: Wed Feb 09, 2005 9:31 am

Post by Jagasian »

The cart's menu looks and sounds well designed. I also like the use of the controller port. Would it be possible to network two NES systems together?
User avatar
blargg
Posts: 3717
Joined: Mon Sep 27, 2004 8:33 am
Location: Central Texas, USA
Contact:

Post by blargg »

Yeah, you could connect to NES units together and do asynchronous serial, though it wouldn't have any relation to the Munchausen, which simply includes a NES-to-USB cable (which is internally just a USB-to-RS232 adaptor connected to a controller cable). For NES-to-NES links, you'd connect two controller cables together, with Strobe and D0 cross-connected).

The USB-serial cable that will be included will of course allow some interesting things in NES programs. One thing I plan on releasing is an NSF player that runs on the PC but plays audio on the 2A03 (DMC wouldn't be supported, as that needs RAM at $C000-$FFFF). Could also do a silly audio player that streams sound at 22 kHz uLaw...
User avatar
Memblers
Site Admin
Posts: 3901
Joined: Mon Sep 20, 2004 6:04 am
Location: Indianapolis
Contact:

Post by Memblers »

Ah, yeah that sounds right, I'm used to thinking of how CopyNES handled it (using the expansion pin). That made it simple to program Flash with every type of board. For MMC3 if you had to live with a permanent fixed boot bank, that's not too bad either (just point NMI and IRQ vectors into RAM and take the 3-cycle JMP penalty).

Jagasian: Networking would be much better done over USB. If one did it with the controller port, it would be easy for them to get out of sync (if doing other processing). Maybe a better setup would be to take a cue from the VS Dualsystem and use a USB host app to emulate/arbitrate a shared RAM area. Then would use an address/data port type setup to read/write a small number of bytes every frame (auto-incremented, or using address lists if needed).

Later on I want to get networking stuff going on the Squeedo revision, and I'll definitely try to make the NES code compatible with whatever hardware the Munchausen uses.
Post Reply