BigEd wrote:
But I'm not sure about your idea that PiTubeDirect is the wrong direction: the Beeb is a 6502 machine, and the Pi is a Pi. The difference, perhaps, between your idea and the PiTubeDirect idea, other than being interested in rolling your own protocol, is that you are perhaps thinking that the Pi is running Linux and is the machine closer to the user. The 6502 system is hanging off a parallel interface, perhaps with no other I/O mechanism. In which case yes, this is something like the opposite.
I'm honestly not interested in rolling my own, I'd much rather stand on the shoulders of giants than make something myself.
It's different because the way I understand it is that in the standard case, the Beeb is used for its I/O capabilities, while the Tube Co-Processor is used for it's processing capability. Thus the Z-80 running CP/M thing.
My case is the opposite. In my scenario, the 65xx is the "co-processor" and the Pi is the Beeb -- the I/O processor. The roles are swapped.
In theory, it "doesn't matter". (At least I think it doesn't matter.) Being as the interface is a) asynchronous and b) bi-directional, neither is the master. Rather they just have distinct roles, and the Beeb is "nominally" the "slave" to the master co-processor, when in fact it's just two machines doing what they do. They're fiercely independent and simply cooperating. (perhaps the distinction is subtle).
But for my Pooh brain, I'd like to see it approached with the Pi being the I/O processor to the Processing side of the 65xx.
The PiTube is also not quite interesting as it's a purely software solution. There's no example (that I know of) of someone interfacing an actual hardware chip to the interface. Rather, it's the Pi emulating the interface, and then driving internal, virtual processors.
So, we still have the Magic Tube Chip on one hand, and no real hardware on the other.
My original plan, mentioned elsewhere, was perhaps trying to leverage the GPIB interface to do this, as it seemed to be a multi-master solution (with a dominant controller, but...). But It was difficult for me to see how to orchestrate the bi-directional nature that I'm looking for. The introduction of FIFOs (in whatever form) sort of simplifies that for me. But it's a bit of (to me) complicated hardware, and it's not clear to me how those would work.
Quote:
Acorn's original Tube chip is a collection of 8 FIFOs, with some slightly subtle flow control features, and which sits on two different microprocessor busses, both times as a multi-address peripheral. As you'll note from the head post, the Tube protocol has successfully been serialised, which means it can run over a single byte-wide channel. It should also be clear that the depth of the FIFOs has only a small effect on performance - a bigger FIFO allows for looser coupling and greater parallelism.
The greater parallelism is nice in that it lets both sides perform more at their native speeds, even though in the end, the data still goes only as fast as the slowest member. But with greater parallelism, the fast side can be finished long before the other side has even started, even though it may well be waiting for control signals to actually continue.
The idea of a 512 byte FIFO (I think I saw a chip like that), with the I/O processor able to burst over a 256 byte disk block along with control information at "full speed", that's appealing. But, in the end, for the use case of the RPi, I really don't care if it's idle and waiting on the 65xx, that's it's job -- it's not like its doing weather modeling or bitcoin mining in the background. It should be able to do all of it I/O duties far faster than the 65xx can ask for the data (within reason, of course).
But, having it be able to squirt over an entire block -- sounds nice on paper.
I don't visualize needing more than one bi-directional FIFO (so is that 2 FIFOs?).