Date : Tue, 26 Jul 2005 13:54:20 +0200 (BST)
From : Johan Heuseveldt <johan@...>
Subject: Re: ARM copros, speech cartridges, real timeclocks, etc
Hi all,
On Tue 26 Jul, Pete Turnbull wrote:
> On Jul 25 2005, 21:35, Jules Richardson wrote:
> > On Mon, 2005-07-25 at 22:29 +0100, BeebMaster wrote:
> > > Multiple second processors /co-processors must have been a
> > > possibility in the long distant past as the Master Reference
> > > Manual description for the *X command seems to hint this
> >
> > Well I have a feeling that the Tube was designed to be a bus with
> > multiple devices on it, but the reality was that it had trouble
> > coping for some reason. I'm just not sure if that was for software
> > reasons or some kind of fault with the basic hardware.
>
> It works. The problem is partly software, partly hardware. Only the
> Master has any software support at all, and that's pretty primitive.
> Out of the box, it doesn't let you run two at once, rather it lets you
> use either an internal one or an external one. I've had a Master set
> up like that, with a 512 and a 6502. The hardware part is down to bus
> loading. I still have a Beeb with both a 6502 and a Z80, simply
> switching the power to one or the other (and doing a reset, otherwise
> the poor thing gets confused).
This last is, of course, by the polling loop the Beeb is in. The Tube
software only expects a single 2nd processor there. Using this polling,
there is a small part of the Tube ULA which isn't used, which is a
possibility to interrupt the Beeb when the 2ndProc writes to Data
Register 4. This asserts the IRQ line and will flag the situation of
data being available in the Data Register 4 by setting the 'data present'
bit in its status register: Status Register 4, bit DA (data available)
(bit7).
Enabling/disabling this feature is done by bit-0 (Q) in the Status
Register 1. In pratice this last bit is (thus) always zero!
This still leaves the issue how to select one of the 2ndProc's and check
the bit, and switching to the next one if this one wasn't asking the
Beeb's attention. This needs extra hardware. It is my believe - most likely
to have read about it, not by my own deduction - that the above mentioned
'*X' command works in conjunction with that extra hardware.
This will only switch a 2ndProc onto the bus specificly asked by a user.
But the rest is still a single polled 2ndProc. But it allows for several
2ndProc's to be there without the tedious connections and disconnections.
You wouldn't even to have power down the Beeb and (whatever) 2ndProc, to
switch in another 2ndProc, and, of course, switch the other out!
The hardware address was just after the eight addresses used for the
Tube ULA. The ULA uses Sheila &E0 to &E7 incl., and &E8 was for the extra
paging or '*X' register.
The extra hardware would simple disable the Tube Select signal on all
Tube ULA's, except for the one selected in the paging register. Please
note this is only the external connection. The internal Tube connection
on the Master is another story, though it would interesting to know
what physical register is used to switch between them. I just presume
it allows the Tube Select signal to be asserted on only one of the
(physical) interfaces, showing must the same idea. This is, no doubt,
somewhere in one of the special ICs, as a lot of glue hardware is.
With some luck the address Sheila &E8 is used! :-)
It's all from memory, and as it is years back when I delved into this,
there's no garantee! :-)
In other words, I preserve the right to be wrong, but have the feeling
- or is it hope (only?) - that this is accurate enough to get ventilated
here!
But I have no idea or can remember anything having read about the intentions
about this extra hardware addon. Was it meant for a Beeb dealing with
multiple /and/ concurent running 2ndProc's, or was it solely a /very/
convenient way for a user to choose from a stack of 2ndProc's.
The latter seems plausible to me.
(The first would ask for a totally new concept
at communication level of the Tube host code)
<mode: dream>
As extra hardware is involved I had visions of stacked 2ndProc's on a
base unit at which all the 2ndProc's were connected to. From the base
unit there was a single ribbon cable to the Tube connection underneath
the Beeb.
</mode>
Technical: Indeed this is a bus: all connector pins are connected to
each other, except the ULA Select line, which comes from,
lets say, an (74LS)138, allowing 8 2ndProc's. A latch (as
the physical paging register) and address decoding completes
the hardware, perhaps added with an extra power input.
A note to Sprow: Would this be of interest of you, to create such
a 'Tube Selector' board, and make it part of your
current list of hardware projects?
More sophisticated approaches are possible. like
prioriterized interrupts ('like' on the SCSI bus),
so some brain storming on the list seems valid. :-)
Well, FWIW
Johan
--
Johan Heuseveldt <johan@... >
aka waarland
The best place is a Riscy place
Rule 1: The boss is always right.
Rule 2: When the boss is wrong, refer to rule 1.