martyn_hill wrote:Nasta - thank you for such a full explanation!
So, in summary, HC family can sink the current needed and fast enough from DS to disable the 8301's DSMC - the transistor approach wasn't necessarily just because the decoding through a couple of ICs wasn't fast enough... To this day, I still remember reading the description of this topic in the CONNEXIONS series of articles in QL World all those years ago!
Please read my explanation carefully.
DSMCL is externally pulled HIGH not low, hence current has to be sourced into it (source current into a pin means it's voltage will attempt to go higher, depending on how much of a load is on that line/pin).
And, also, again, DCMSL must NOT be generated using DSL. Actually, let me unpack this: the signal used to pull up DSMCL must not be generated from DSL. This is because the DSMCL signal on the bus is actually equal to DSL - it is the CPu DSL pin passed through a series resistor to the DSMCL input on the 8301 ULA, also known as the MC (main chip), hence DS on the MC active L(ow).
This resistor has a fairly low value, and the load of the DSMCL pin makes practically no difference for the signal before and after it - there is practically no delay. So, DSMCL is actually active LOW and it is the pin on the 8301 that detects that the CPU is performing an access cycle on the bus.
The chip itself does not use A19 and A18 so the 256k of decoded address space actually repeats 4 times within the CPU address map (once for any of the 4 possible combinations of levels on A18 and A19). If one wishes to use an address that is decoded by the 8301 ULA - even if it is one of the repeated copies - the ULA must be prevented from recognising that the CPU is performing a cycle on the bus, and this is accomplished by pulling DSMCL high BEFORE the DSL signal from the CPU appears.
This is why DSL must not be used to generate the DSMCL pull-up signal - whatever logic is used will by definition be too slow as it will, unlike the resistor, have a delay.
Fortunately, the address lines (and RDWL) become stable well before DSL so an external decoder has time to decode if DSMCL must be pulled up for a given address. Of course, there are constraints so the decoder must be fairly fast - however, keep in mind we are talking 1980s standards.
Back then, LSTTL was he norm and it had the problem of relatively low current sourcing. So, what would happen? While the CPU was trying to pull the DSMCL line low through the series resistor to DSL, pulling DSL low, TTL logic would attempt to pull DSMCL high. However, the CPU signal lines are internally CMOS and capable of fairly high sink current. LSTTL has effectively a built in resistor in it's output that limits the output current. Hence a tug-of-war results and the DSCML line ends up at a voltage that is right in the undefined zone where it could be recognized as either low or high.
To solve this, an external transistor is used to help out the DSMCL decoder. It has to be fairly fast not to add to the overall delay of the decoder.
Nowadays, using HCMOS logic, there is enough current available for the decoder to win that fight, through a simple diode (to insure that current is only sourced from the decoder). Of course, other configurations are possible, for instance, programmable logic makes it possible to create pull up outouts so these could be used directly. Also, nowadays the decoding can be very fast, even too fast (and could catch gliches in the states of address lines as real legitimate states).
And those lower I/O areas are up for grabs, again, as long as the 8301 is disabled (which is needed pretty much every where else in the memory map anyhow.)
I'm guessing that the internal I/O area of $18000 - $1BFFF is effectively 'mirrored' every 256Kb through the std QL map, unless the 8301 is disabled as above.
Yes - everything is mirrored every 256k.
Also, some parts of $18000..1BFFF are officially 'taken' - the first and last 256 bytes.
Again, slightly off-topic, but what rule of thumb should one apply for when a solder-less breadboard reaches the limits of something usable for QL interfacing? Is it when a good ground-plane is needed, or signal transition speeds, or ???
[/quote]
That's a very broad question, well out of the scope of this thread. In any case it's a matter of neat and tight construction and when a certain wire lengt is reached, a ground plane is mandatory