how to create our own multicart ?

Discuss technical or other issues relating to programming the Nintendo Entertainment System, Famicom, or compatible systems. See the NESdev wiki for more information.

Moderator: Moderators

tepples
Posts: 22705
Joined: Sun Sep 19, 2004 11:12 pm
Location: NE Indiana, USA (NTSC)
Contact:

Re: how to create our own multicart ?

Post by tepples »

It depends on which games you're trying to collect onto a cartridge, and what mappers they use.

Most multicarts have a mapper specialized to the task of switching among several independent games. Occasionally, a sufficiently flexible mapper designed for one game can be used to switch among a few games that don't themselves need much mapper support, such as GNROM (#66), Color Dreams (#11), BNROM, or MMC1 (#1) for NROM games. A few mappers allow combining smaller games with minimal changes to each individual game, such as BNROM or AOROM where only the bank number table needs to be patched. But if the games expect mapper support, especially if they expect different types of mapper, a multicart mapper has to emulate the game's mapper while doing the job of switching among them. Occasionally, games are patched to use a different mapper in order to make them compatible, such as the Mega Man 1-6 multicarts that change the first two games from UNROM and MMC1 respectively to MMC3.

Emulator users say "mapper" to refer to the whole circuit board (except the ROMs and CIC) because the behavior of the mapper ASIC (MMC, VRC, FME-7, etc.) dominates the description of the board's overall behavior.
cecilmax
Posts: 12
Joined: Tue Jan 23, 2018 7:33 am

Re: how to create our own multicart ?

Post by cecilmax »

I see, there is a list somewhere to check which game use which mapper ??

Anyway, my first step would be to create a hello world and run it with fceu ;) then I will try to launch a game with it, and after that I will try to update it into a menu to let choose which game to start between two.

While am I on a emulator, do I have to care about mappers ?
User avatar
FrankenGraphics
Formerly WheelInventor
Posts: 2064
Joined: Thu Apr 14, 2016 2:55 am
Location: Gothenburg, Sweden
Contact:

Re: how to create our own multicart ?

Post by FrankenGraphics »

I see, there is a list somewhere to check which game use which mapper ??
yes, http://bootgod.dyndns.org:7777/

While am I on a emulator, do I have to care about mappers ?
yes, you need to tell the emulator which mapper/pcb to emulate. this is done with the information you put in the header.
for more information, read these articles:

https://wiki.nesdev.com/w/index.php/INES
https://wiki.nesdev.com/w/index.php/NES_2.0


When burning or writing ROM images to actual ROM chips, the header must be removed first. It is for emulators only.
cecilmax
Posts: 12
Joined: Tue Jan 23, 2018 7:33 am

Re: how to create our own multicart ?

Post by cecilmax »

Thanks you very much, I will look at this :)

I wonder what I have to do to "add" a game to my main program that would be the menu ? do I just combine the target rom bin without the header and then make a jump ?
User avatar
FrankenGraphics
Formerly WheelInventor
Posts: 2064
Joined: Thu Apr 14, 2016 2:55 am
Location: Gothenburg, Sweden
Contact:

Re: how to create our own multicart ?

Post by FrankenGraphics »

This depends a bit on which assembler/compiler you're using, but for something like the cc65 suite (a 65xx dev toolchain many prefer) it will be something like this

-in the linker config file you need to create, you define segments. Here you can structure your linked objects so that you control which object goes where in new total multi-ROM.
-let's assume that for each bank, you have one linking object, and each linking object in turn holds the ROM image of a game.
-each game is an already assembled or compiled binary, so this step is done for us (just sometimes you need to hex edit them sometimes, like tepples explained, which is a whole skillset on its own)
-simply use the .incbin directive for each ROM file in its due place which will embed the game ROM binaries into your source as-is at assembly time.

If any of this is unclear, i suggest reading cc65:s online reference and experimenting a bit to find out what's what.

Though eventually, your newly acquired skills and knowledge base just *might* make you lose interest in your original project and make you want to make applications and games of your own. ^^
cecilmax
Posts: 12
Joined: Tue Jan 23, 2018 7:33 am

Re: how to create our own multicart ?

Post by cecilmax »

thanks a lot, I will begin with that :)

in theory, if my project work on emulator, Ill just have to get a catdridge with the same chips that being emulated to run my rom ?
User avatar
FrankenGraphics
Formerly WheelInventor
Posts: 2064
Joined: Thu Apr 14, 2016 2:55 am
Location: Gothenburg, Sweden
Contact:

Re: how to create our own multicart ?

Post by FrankenGraphics »

oh and the reason i recommend cc65 is not just because it is popular, but because the .incbin directive (and linker) is extremely powerful compared to other free assemblers. You can split, patch and concatenate binaries however you want.
cecilmax
Posts: 12
Joined: Tue Jan 23, 2018 7:33 am

Re: how to create our own multicart ?

Post by cecilmax »

FrankenGraphics wrote:oh and the reason i recommend cc65 is not just because it is popular, but because the .incbin directive (and linker) is extremely powerful compared to other free assemblers. You can split, patch and concatenate binaries however you want.
Ok :) I read a tutorial yesterday to create a hello world and is not complicated. I wonder if it could be easier with a C compiler ?
User avatar
FrankenGraphics
Formerly WheelInventor
Posts: 2064
Joined: Thu Apr 14, 2016 2:55 am
Location: Gothenburg, Sweden
Contact:

Re: how to create our own multicart ?

Post by FrankenGraphics »

For something like a menu and loader, yeah you don't need to worry about efficiency (and yet some games have been done with C). Whether you prefer 6502 assembly or C is up to you just as long as you mind the consoles' architecture and the layout of your cartridge. cc65 suite can do both (it is so named after the cc65 C compiler, though many are just using the ca65 assembler)
User avatar
dougeff
Posts: 3078
Joined: Fri May 08, 2015 7:17 pm

Re: how to create our own multicart ?

Post by dougeff »

I refer to this list a lot, even if it isn't 100% accurate.

http://tuxnes.sourceforge.net/nesmapper.txt


Also, it's not as simple as "jump to the right bank."

Let's say you combined a bunch of NROM games, and a menu. You would still need to modify each of the games "reset code" or you might never make it back to the menu.

Plus getting from zero to a working menu is a huge task with a steep learning curve.
nesdoug.com -- blog/tutorial on programming for the NES
cecilmax
Posts: 12
Joined: Tue Jan 23, 2018 7:33 am

Re: how to create our own multicart ?

Post by cecilmax »

Ok :) well I am used to programming, modern language I admit, but im sure I will eventually do something nice :)

do you have a tool to recommend me to use for graphics ? I would like something that we can set the palette of Nes so I can expect the same image quality with same color when it show on screen. I didn't have the chance to read about graphics for the Nes, I know I have to implement everything, if I want to write hello word on screen, I will have to create sprites with letters. What is the graphic file format to use with the compiler ?
User avatar
FrankenGraphics
Formerly WheelInventor
Posts: 2064
Joined: Thu Apr 14, 2016 2:55 am
Location: Gothenburg, Sweden
Contact:

Re: how to create our own multicart ?

Post by FrankenGraphics »

One ring to rule them all:
Shiru's NES Screen Tool (aka NESST).
https://shiru.untergrund.net/

The palette definition is a little off but it doesn't matter. Personally i do hardware tests on a PAL unit which looks a bit different too. The data is 1:1 with what the PPU expects, which is all that matters except in rare corner cases. Moreover, your tv/monitor will filter the output sideways anyway.
I will have to create sprites with letters.
You're better off using the background layer rather than the sprite layer, since you can't display any more than 8 sprites (each 8 pixels wide) on any single scanline.
Reading up on the graphics thouroughly is something you'll eventually have to do, too.

the PPU has its own format for things which isn't anything like a modern picture format. It is tile compression based (this is generally called "text mode" in computer speak) in a double sense (pixels and colours, separately), indexed colour mode, with a structure specific for the NES. Sprites are a whole other affair on its own, though it shares some few similarities with the bg layer structure.

Lastly.. if you want your thumbnails to look good (i imagine this is part of the point), let alone resemble the games they're depicting, beside practicing pixel art you'll need to scale the technique of layering sprites over and under the bg layer (requires good knowledge of the PPU plus some experience using various tools, which may range from NESST, to a programmers' notepad, use or development of scripts, and other graphics tools, like photoshop or GIMP). Not trying to discourage or anything, it's just so you'll have a good idea of what's ahead of you before you dive down the rabbit hole because all i can promise is it will take time (anything good takes time though). :wink: I don't think we've covered half of it yet. So.. just make sure the time you trade trades something you'll find worthwhile back.

Some recent forum leads on layering techniques can be found here and here.
Post Reply