+1  A: 

Two things. For one, the striping is most likely a VRAM conflict, although it's been a while since I did DS dev last. Double check where you're copying your graphics and your tile data. Mode 5 uses two text backgrounds, which should be behaving exactly the same if they're initialized a certain way, so I'm not sure what's going on there.

In any case, since you have two backgrounds working, why not just set their priorities in their registers to swap their z order? Background are only drawn in a particular order by default, you can set their priority to have the system draw them in any order you like.

Nicholas Flynt
Oh you can set the priority manually? That is very useful to know. I'll go and check my VRAM and see if it might be the problem.
Skurmedel
I'm actually not entirely sure that's accurate, I don't remember if the DS has priority quirks with its 3D buffer, but I don't think it does. In any case, the second you turn on the 3D engine for your first pong game, you've already made a big mistake. ^_^
Nicholas Flynt
No I'm actually not trying to do 3D :)... but maybe I have accidently turned it on. I'm quite confused by all these layers and their individual limitations.
Skurmedel
It seems to be a VRAM issue yeah, since changing around the tile bases used produces different results. I don't get one that looks correct though. If I disable the bitmap layer all to layer (as in don't initalize it) it looks almost correct but there are some errors on some of the pixels.
Skurmedel
I marked the other one as the answer, since he has the least points but you both helped out a ton! Thanks!
Skurmedel
I'm glad you got it figured out. The DS is a strange beast when it comes to video, it certainly has a steep learning curve. Once you learn it though (and move on to something more complex than pong) it's a very powerful setup compared to the GBA, which its based on.
Nicholas Flynt
Yeah it seems quite potent. Will be trying to do some scrolling stuff next, like a strategy game.
Skurmedel
+1  A: 

a breif look at background.h makes it look like you are using BG1 and BG2. For mode 5, according to:

http://nocash.emubase.de/gbatek.htm

layer 0 and 1 are normal and 2 and 3 are extended. I dont know what extended means. If you want to just do normal tile stuff you probably want to bgInit 0 and 1 not 1 and 2.

You can change the priorities around at will, layer 0 is not necessarily on top of 1, etc. Look at the BGxCNT registers (BG0CNT, BG1CNT,...) and the priority bits. Now if the priority is a tie then yes the layer number determines who wins.

dwelch
Hmmm, you have BG0, BG1, and BG2 enabled but only setup two of them. Yes?
dwelch
Yeah. The BG0_ACTIVE etc doesn't seem to actually do anything.
Skurmedel
This definitely stems from his experimentation with the backgrounds, he probably has them all enabled but not all set up... Wait a second, that might actually be his issue. Wow.
Nicholas Flynt
Ok, you two are so very right :)My wild BG#_ACTIVE flags were one of the reasons it freaked out. Apparently, if you set them as active, but don't init them, very strange artifacts may appear.The other reason were some overlapping use of VRAM.
Skurmedel