Yeah, the reason I am asking is because I am revisiting firmware that I have written and am trying to reason what the best choice would be. I have been using the FIFO method, because I think it would work best while typing normally.
I think that text editing would actually work quite well even with only 1KRO for the alphanumeric keys, as long as the next key replaces the last.
However, when gaming with the WASD keys you would not want any of those to be "breaked" by the firmware if the actual key is not released.
I have been toying with the idea of having codes for different directions be mutually exclusive to improve rollover performance in games. For example: left-arrow and right-arrow could be mutually exclusive because they don't make sense together. Shifting from one of those to the other would therefore not break any other key.
Similarly you could have relationships W<->S and A<->D, but that could be disastrous for gamers who use ESDF instead of WASD.
When a user lets go of the 7th key, the 1st key is re-pressed automatically.
That is not a problem if you keep matrix-state and USB-state separate.
By the way, the USB HID specification mandates the Block method, but with a special type of report sent on the seventh key press: The array should be filled with a code named "ErrorRollOver".
I suppose that the bug in Kinesis' firmware is caused by not using separate buffers for the different types of reports.