True, it is probably wrong. I just don't quite understand in what way overlapping AM_RANGE macros override each other, so that's all I can go with right now.

Line 79, sms.c:

AM_RANGE(0x8000, 0x9FFF) AM_READWRITE(SMH_BANK(4), sms_cartram_w) /* ROM bank / on-cart RAM */

This will not work for Game Gear games that use the 93C46 EEPROM. The EEPROM lines are hooked up at 0x8000, and direct EEPROM access is also available from 0x8008 through 0x8088. I was considering making an sms_cartram_r, and optionally either reading from ROM or reading from EEPROM depending on both the address and whether or not it's a 93C46-using game.