Btw, I can't remember if you stated this but how are you doing the collision detection? Are you using pixel check? Because Elmgon seem to be about the same speed as TLM, or may be even faster, and you have pet system too.
And I think I asked this before, how big is the program so far? With all the strings for the map, I'm pretty sure it's getting big, isn't it?
I use both pxl-test( with checking in a list with xor to make blank pixels solid and solid pixels blank.
The demo is just under 9000 bytes, with 19 maps and 7ish screens of text.