The node that wants to send brings CLK low. Everyone else detects the low and switches to listening mode. This is normally done in hardware yes but can also be done in software.
the talker sends the ID of who it is and how much data it's sending, then the listeners can go back to what they're doing until the bus is expected to be free again
Quoting ReposeThe node that wants to send brings CLK low. Everyone else detects the low and switches to listening mode. This is normally done in hardware yes but can also be done in software.This seems to be a bit too much overhead. Every device on the bus would need to poll for CLK going low, in between doing work.
Having all devices (somehow) know when a transfer is expected to end sounds like a good idea. :) But then the devices don't need to know that until they have data to send and nothing else to do than to poll for an idle bus.
whether a device is interrupted by ATN or interrupted by a timer, it's the same thing.
Polling can be very minimal; it only adds latency. For the use cases I'm thinking of, a latency equal to screen refresh will always be sufficient.
Polling is minimal if a device only polls after having finished work, as it doesn't have anything else to do. So it can just as well poll in a loop and have minimum latency, while only being interrupted once a video frame for the ATN sync strobe, doing its work with minimum overhead.
But, I'm noticing a new assumption here; you are thinking of them in a more restricted sense as slaves only reporting back calculations and not accepting any new commands (such as a status check or more work) until completing the work.
In that case, they can simply not participate during the polling interval.
So, when it is finished, it has to wait until the next ATN to indicate it's ready to send.
It can send as long as it wants, the c64 can stop the regular ATN until the bus is free again.
I thought it's really not possible to daisy chain too many devices on the IEC bus