I was thinking something more like what NaOH mentions, but the discussion makes me more aware of shortcomings in my approach to hacking...
Generally, I find some free space to put my assembly code, shove the existing code around to make room for my page swap and/or JSR, then paste (or type!) my code in manually in a hex editor, directly editing my ROM full of cumulative changes. I come up with the code by writing the assembly by hand in a text editor, then consult the docs to manually convert the assembly instructions into opcodes and operands, one instruction at a time. Caveman style. Before long, I've got them memorized for the addressing modes I use most, but I'll freely admit the process is slow and backward. Humans should not compile code. It also does not allow me to do the kind of iterative build process Gideon and RedComet mention. And when there are bugs, what a drag it is to hunt them down.
I would love to manipulate code at a higher level, e.g. JSR #enemyCollision, STA #playerXCoord, etc. That would save me time and brain juice. It is a little off topic, but could someone recommend a good tool for programming more symbolically, and compiling to hex/binary from text input? Looks like Gideon uses xkas.
I'm guessing the make.asm example inserts the compiled binary code starting at the "org" address? Beautiful! That would make source control much cleaner and easier.