I think you're on the right lines: you have brought your operand bus to all the receivers, by running it past them all. And you've got some control mechanism to arrange that different receivers can use or not use the operand, according to what the opcode said. But I think in detail what you've got doesn't work.
Let's say you've got A, X, Y and ALU-input-A as your possible receivers. They all have access to the operand. But, most of the time they need to ignore it, and if any of them do need to use it, probably only one of them does. More importantly, A, X and Y also need to be able to get their input from an ALU output.
So perhaps you need to look at this not as a what-do-I-do-with-this-bus, instead look at the question from the receiver perspective. If you're the X register, what might you do?
- keep my value
- get the value of the databus (the operand)
- get the value of A
- get the value of the output of the ALU
So you need control signals for each of these cases. Looking at the visual 6502 you'll see there are about 43 control signals running into the datapath, called dpcNN_something.
http://visual6502.org/JSSim/nodenames.jsFor each sender, you need an enable signal, and for each receiver you need one or more selector signals.
As you'll see in Donald's diagram, the 6502 has three internal busses, with two interchanges, to allow for all the necessary traffic routing.