In this post, tokumaru wrote:
Mappers that "fix" a bank of memory to the end of the addressing space do it so that the programmer can have a place to safely store all the bankswitching logic and the interrupt vectors.
If that were the main reason, then it would have been cheaper to use 32 KiB bankswitching (like B*ROM/A*ROM) and put a stub for trampolines and vectors into the last 256 bytes of all banks than to add the 74HC32 on the cartridge's circuit board. As I understand it, the real reasons that U*ROM fixes the upper 16 KiB are so that
- one piece of code running in $C000-$FFFF can read CHR data, map data, music sequence data, etc. from multiple banks, and
- data accessed by background DMA processes (on the NES, that's only DPCM samples) remains mapped in no matter what the main code is doing.