$3000 and $3001 are not valid CPU addresses (they're mirrors of $2000 and $2001 respectively -- which are PPU regs which control various display properties).
The background is built from "nametables". A nametable is nothing more than a big block of $400 bytes. Each byte indicates which 8x8 pixel tile to draw on the screen. SMB has nametables at ppu$2000 and ppu$2400 (note these are in
PPU space -- not CPU space -- so you don't access them with 'STA $2000' -- see below).
You can see how nametables work in FCEUXD -- just open up the nametable viewer (change the "display on scanline" value to 33) and watch how it changes as the screen scrolls. You can also hover over each tile in the nametable viewer to know which PPU address each tile sits at.
Drawing text simply amounts to drawing different tiles to the nametable. Exactly where on the nametable depends on which part of the nametable is visible, and where on the screen you want to draw it.
Now note that nametables are in PPU space (aka "VRAM"). So you don't write to it directly. Instead you have to use two PPU registers:
$2006 <-- sets the "PPU address". You write to it twice, once for the high byte of the address, and again for the low byte
$2007 <-- PPU I/O port -- writes to this address go to the current address in PPU space
So if, say, you wanted to draw tile $16 (the letter 'M') to $21AE (around the middle of the upper-left nametable) you'd do the following:
LDA #$21
STA $2006 ; first write sets high byte... PPU address now $21xx
LDA #$AE
STA $2006 ; second write sets low byte... PPU address now $21AE
LDA #$16
STA $2007 ; $16 gets written to PPU space at whatever address the PPU address is set to.
; Since the PPU addr is $21AE, it gets written to ppu$21AE (drawing a new tile to the nametable)
After the $2007 write, the PPU address is auto-incremented to $21AF (so you don't have to keep writing to $2006 between every tile). Note that it might auto-increment to $21CE instead (+32 instead of +1) if set that way (but it probably won't). To be sure you'll have to see what value was last written to $2000. I don't feel like explaining $2000 in detail -- just get a copy of nestech.txt or something.
Also note... this is
super important:
You cannot access $2007 during rendering. Accessing $2006 is legal (games often do it to split the screen) -- but it's probably not a good idea for you here because you'd end up screwing the scroll up. So this drawing should
only be done
1) During VBlank (shortly after an NMI fires)
or
2) When the PPU is off (BG and sprite rendering are both disabled -- see register $2001)
You can specifically turn the PPU off and then are free to draw whatever... but that also means that the PPU won't draw tiles to the screen (you'll get a solid black or blue screen for maybe a frame -- or maybe only part of a frame depending on how long you have the PPU off). So it's probably best to fit this small drawing routine in VBlank.