Lots of things wrong with this code...
1.you define 1 $4000 byte prg bank, yet are using 2.
2.NESASM devides banks into $2000 byte chunks, so the last prg bank would be bank 4, the graphics bank 5 (I could be wrong, it's been a while since I used NESASM)
3.You're writing to the PPU with rendering on, and you didn't check to see if you're in v-blank first.
4.You didn't wait 2-3 v-blanks before writing to the PPU
5.You didn't disable Interrupts
6...There could be more, but
I'll let someone else reply. I'm going to be busy for the next few hours.
(and put a "pause" at the end of your make.bat file, so you can read the errors, if there are any)
Here, I made you a file...
I dropped your code into a blank template I made for NESASM3 (and I included NESASM3). It appears to work.
http://dl.dropboxusercontent.com/s/7e6y ... /Fixed.zip
Getting rid of the vblankwait seems to work.
And doing everything while rendering is off...yes.