I noticed you are in the process of implementing a new GamePad class so I thought I should bring this issue up.
I'm using a 6 button Sega Mega Drive controller, and JoystickDevice is detecting the D-PAD and X,Y,Z, and the shoulder button, but does not detect A,B,C and Start. The gamepad works fully in several games and emulators I tried. For example in MicroMachines V4 Start, A,B and C are buttons 1 through 4, and Trigger,X,Y,Z are 5 through 8.
I remembered there was an old Windows cap for 4 buttons, so I tried an Xbox 360 gamepad, but the JoystickDevice recognized all buttons.
Edit: after playing some emulators now the JoystickDevice recognizes all 8 buttons and in the correct order. Further investigation is needed why and how is this happening.