GC: Your Silentype implementation is pretty good, but you can get the slot number in an A2 card by calling slotno(). For instance, the zipdrive/focus drive has the common setup of separate CnXX images in the ROM for each slot:

Code
uint8_t a2bus_zipdrivebase_device::read_cnxx(uint8_t offset)
{
	int const slotimg = slotno() * 0x100;

	// ROM contains CnXX images for each of slots 1-7 at 0x0 and 0x1000
	return m_rom[offset+slotimg+0x1000];
}