External Memory Interface library for the Mega. (can someone review my code?)

Um. Why? I thought the whole point of the "external memory interface" (as opposed to using random IO ports to access a memory device) is that the memory appears in the AVR address space, and can be accessed via normal C code. There's a good summary accompanying the Rugged RAM expansion module: http://ruggedcircuits.com/html/megaram.html

And notes in avr-libc on how to set things up so that malloc() and friends will use it: Frequently Asked Questions

I guess your code handles the bank boundary "invisibly." But at great computational cost...