Espozo wrote:Read the VMAIN register description again.
Who said I ever read it before?

You did. Last line in the OP.
To be fair, the SNES register list is really quite a lot of information and it's not completely unreasonable to have missed something. Just... realize that for most of us, we learned most of what we know from the same docs you have access to. I've actually never updated a tilemap column in VRAM; I just saw the address increment bits in the description of $2115 and figured that was what they were for...
I don't see anything wrong with your code. If it doesn't work, it may be the fault of the context. Nicole's suggestion is the obvious one, but there may be other possibilities.
...
As for the thread title - basically, use DMA if it's faster, and just write to the data ports manually otherwise. If you're writing more than a few consecutive bytes, it's probably faster to use DMA. Count the cycles if you aren't sure (and you care enough to bother).
As you know, DMA is normally used to send data to VRAM/CGRAM/OAM during VBlank or forced blank (CGRAM is also accessible during HBlank, but it's usually better to use HDMA for that). However, it is also possible to use DMA to move data between ROM/WRAM/SRAM, using the WRAM gate on the B bus ($2180). (No, you cannot do WRAM-to-WRAM transfers this way.) Theoretically it'd be best to do this during active display so you don't limit your VBlank time - but unfortunately the launch-model CPU has a bug that can lock up the system if DMA and HDMA are used at the same time (I think it's when a DMA ends right near where an HDMA starts, but I'm not sure). If you can guarantee that the DMA/HDMA conflict won't be triggered (the easiest way to guarantee this is to not use HDMA), you should be able to use DMA during active display, as long as you don't try to access VRAM/CGRAM/OAM. Otherwise, don't, unless you don't care about rev.1 CPU compatibility...
As for writing to ARAM, you shouldn't DMA to those ports because the SPC700 has to manually pick up the data, and it's even slower than the CPU. If you can work out how to use HDMA to transfer data, great; otherwise it has to be manual.