6502.org: Tutorials and Aids says one.
6502 User's Manual : Joseph J. Carr : Free Download, Borrow, and Streaming : Internet Archive says two.
Programming the 65816 : Eyes, David : Free Download, Borrow, and Streaming : Internet Archive says two.
I don’t fully trust the 65c816 datasheet either, but I did find in section 7.22 it does say BRK increments the program counter twice which is good enough for me now.
Well, the tabulation says length 1, but the words underneath clarify:
BRK causes a non-maskable interrupt and increments the program counter by one. Therefore an RTI will go to the address of the BRK +2 so that BRK may be used to replace a two-byte instruction for debugging and the subsequent RTI will be correct.
I suspect that the tabulation is accurately inherited from the datasheets of the day, which in my view leads to confusion. But perhaps it’s inevitable: if we say BRK has an operand byte, we also have to say that it is ignored by the CPU.
I guess, to call it an operand byte, it had to be fetched by the CPU, in the first place. But it’s really just a gap in the sequence of operations after RTI. This was known as the “break mark” and the official explanation was that it could be used to indicate a class of breaks or a cause. (However, it isn’t that easy to fetch from inside an interrupt routine, so…) The more likely explanaition is that this is just a carry-over of the interrupt mechanism, which was reused for BRK.
In MOS documentation, BRK is always given as a single-byte instruction.
WDC documentation, on the other hand, did/does – at least at some point – classify BRK as a two-byte stack instruction. Differences in what the increment of PC actually is may be due to these differences in classification.