Genesis button mapping is a common question, since its layout is completely different from everything else. You can find it in the source code, in the libretro.c file, though I know this isn’t very helpful to many people. Here’s the relevant bits:
case DEVICE_PAD6B:
{
if (input_state_cb(padnum, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L))
temp |= INPUT_X;
if (input_state_cb(padnum, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X))
temp |= INPUT_Y;
if (input_state_cb(padnum, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R))
temp |= INPUT_Z;
if (input_state_cb(padnum, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT))
temp |= INPUT_MODE;
}
case DEVICE_PAD3B:
{
if (input_state_cb(padnum, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y))
temp |= INPUT_A;
}
case DEVICE_PAD2B:
{
if (input_state_cb(padnum, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B))
temp |= INPUT_B;
if (input_state_cb(padnum, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A))
temp |= INPUT_C;
if (input_state_cb(padnum, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START))
temp |= INPUT_START;
if (input_state_cb(padnum, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP))
temp |= INPUT_UP;
if (input_state_cb(padnum, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN))
temp |= INPUT_DOWN;
if (input_state_cb(padnum, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT))
temp |= INPUT_LEFT;
if (input_state_cb(padnum, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT))
temp |= INPUT_RIGHT;
So, using this as a guide, retropad B = genesis B, retropad A = genesis C, retropad Start = genesis Start, retropad Y = genesis A, retropad L = genesis X, retropad X = genesis Y, retropad R = genesis Z, and retropad Select cycles through genesis gamepad modes (3 vs 6 button, etc)