I've had a change of heart since the last log about trying to keep it to only the Arduino. The reason is because I need more output pins to have the feature of allowing input from this controller act as if it's from either the player one or player two controller. This only comes up in a few games, but basically you can't do some keypad presses while also going some directions. In certain games you'd like to use the keypad while moving. You can get around this by using both controllers because many of these games allow you to play from either one. This made some people play the game by holding both controllers!
The current plan: use two 74HC595 SIPO chips to send output to both controllers. I'll add 3 toggle switches to control whether the keypad, action buttons, and control pad signals are sent to port one or two. This means you can even switch them while playing.
Below is the working simulation showing 3 different inputs at the same time (I had to combine images). Keypad button '9' is being pressed, NE on the joystick is pressed, and the left bottom action button is pressed. The toggle switches on the bottom determine which output they go to. Thus, only the keypad is switched to output on controller 2.
Although I now have 3 chips on the board, it is a nice, clean solution. And the firmware can be the same even if only one output cord is desired. The second chip and output can be an addon board that also has the 3 switches.
The joystick continues to irk me since there isn't a good replacement for the original. I played around with adding a custom cap to a joystick to sort of replicate it (image below), but as expected, the angular movement just isn't great enough. I'm just going to have to try the thumb-slide joystick, a mini one, or experiment with something custom (as I previously mentioned).