I'm trying to use native GBA mode. Just followed your instructions, and now it works! Thanks!
I know the D-pad patch doesn't affect normal gameplay, but I prefer to not have a patch applied that I didn't choose.
Is the routing really that direct? Surely there must be code somewhere that tells AGB_FIRM which 3DS buttons correspond to which GBA buttons? Because all four face buttons are mapped to either A or B.
I'm sorry that you feel about the DPAD patch that way. Although it requires conscious effort to press both the DPAD + CPad together which you probably never need to do under normal circumstances, and most games already have a mechanism to still counteract LEFT+RIGHT or UP+DOWN press (which is usually MUCH better anyway than what garbage Nintendo did), so I thought that this default could only be beneficial to basically almost everyone. Besides, the default DPAD filtering just adds delay to the inputs, and that's also a reason I have disabled the filtering by default.
Although to be fair, I didn't expect people to go into the patcher that often, so using original design considerations, I thought it's okay to have some defaults, and let people uncheck them if they *really* hate it. The only exception to this is rtcom in DS mode, which is required by some patches to work properly, so it's easier (for me) to just leave it enabled than to have people complaining that after patching they just go to a black screen because they forgot to enable it.
I would love to hear feedback though, especially since many people use TWPatch more often than I have intended it to be used. Because I don't get much feedback, it's hard to know if I'm doing things good or bad.
Yes, if you disable software control for every button then each physical button (DPAD, A, B, START, SELECT, L, R) gets connected directly to the GBA (also X and Y in DS mode), so if the game scans the buttons more than 60FPS, or has an interrupt set up for button presses, you can trigger them anywhere mid-frame.
However, if you enable software control, the software itself controls when the buttons get scanned from the 3DS side, processed, then forwarded into the DS/GBA side. Nintendo's code does this AFTER VSync, so every software button will be at least one frame too late.
As for the X button functioning as B in GBA mode, that's done in software, so it will be subject to the 1 frame delay.