The design I would use to interface a controller with other function blocks would be
Code:
__________________
| | Bus Line bellow
| out|___.________.__________ a0
| out|___|._______|._________ a1
| Controller out|___||,______||.________ a2
| out|___|||._____|||._______ CE
| | |||| ||||
| | |||| ||||
| | _||||_ _||||_
| | | F1 | | F2 | ....
|__Active__ack[in]_| |_____| |_____|
| | | | | |
| |___________ | _|___ | _|____ ...
|_______________|_______|_______ ...
The controller sets the function address and after that sets the Chip Enable (CE) signal to prevent spurious behavior. If any of the F* recognizes its address on the bus, it sets the ack signal. If no ack is received, the controller times out; if ack is high, the controller knows the bus is busy (in this case, ack would remain high as long as the F* is running).
EDIT:
High impedance is usually "1" (output with an open collector transistor), ie, if there's nothing on the bus, it holds "1", but it goes to "0" if any other signal in that bus goes to "0".