[Coco] 64K Coco mode and the MC6883
RETRO Innovations
go4retro at go4retro.com
Tue Mar 28 11:48:13 EDT 2023
On 3/28/2023 9:45 AM, gene heskett via Coco wrote:
> On 3/28/23 01:24, RETRO Innovations via Coco wrote:
>> On 3/28/2023 12:17 AM, RETRO Innovations via Coco wrote:
>>
>>
>> I also think S=7 is the "don't select anything" choice. Routing
>> another pin to disable the 74ls138 would have pushed over the pin
>> limit, and if they only needed 7 decodes, the 8th could be the "don't
>> use this" decode.
>>
>> Jim
>>
>>
> And that comes full circle, to the bitch I've had for 30 some years Jim.
>
> All of the peripheral stuff we've ever used on the coco has a max
> requirement of 4 address registers, The fact that the ls138 only
> decoded to a $20 byte equ, 32 bytes wide, has crippled the number of
> i/o accessories usable. Just think of the i/o possibility's available
> had the decoding been down to the 4 byte wide level. Yet no one, in
> their wildest dreams about a coco4, has proposed a fix for that huge,
> glaring lack of adequate i/o decoding.
Actually, it's easy to address this issue, but it does require a bit of
hardware to be added. It can be mostly done from the SAM socket and
could be added to the SAM RAM mirroring function Sean is investigating.
The most elegant way to address is to pull in address lines 4:2 of the
address data coming into SAM, and the 3 S bits from SAM.
If S=4 or S=5 and address[4:2] != 0, then set S' to 7, and use
address[5:2] to provide additional decode lines
If not, S' = S (connect the output S lines on the socket to the lines
coming from the SAM)
The idea is that if S=4 or 5, that means the SAM is decoding the PIAs.
If Address[4:2] != 0, that means the address is not $ff00-$ff03 or
$ff20-$ff23. In that case, the easiest option is to push the existing
decoder into state 7, which is not connected to anything. Then, create
your own decodes.
Since some code uses PIA "shadow" registers, this feature needs to be
"off by default" and enabled when code that knows how to use it decides
to do so. But, that's easy to do with a SAM-like register toggle.
>
> Is there a reason for that I've never understood? If there is, please
> explain it to me.
Easy. Cost. Lots of 80's machines did incomplete decoding, because
fully decoding was more expensive and took more MSI (TTL) ICs.
The CoCo designers knew that the motherboard was set, no more chips
would be added. So, incomplete decoding was OK. And, they knew that,
if they wanted to put a PIA at, say $ff3X via the cart port, the
existing SLENB line at that port gave them the ability to disable the on
board PIAs. So, they could do additional granular decodes at the cart
port without issues and not require any internal PCB changes.
If folks would like to see an external PIA cartridge designed that will
"sit" at $ff10 or $ff30 or something like that (maybe 4 PIA cart with
little screw terminals, or a 7 PIA mega cart that can sit at $ff04-$ff1f
or $ff24-$ff3f and fully use the remaining address space), I can design
one (the 7 PIA cart would be enormous, as it would have 16*7 IO lines,
so I doubt that's viable to make and use, but the 4 PIA is 64 I/O lines
and would not be a huge cart). It's a pretty simple design. And, if
you were not overly concerned about folks using shadow PIA registers,
the cart is dirt simple. It's be a check for addresses in the range
b11111111 00XXXXXX ($ff00-$ff3f, use a 74ls30 to catch the upper 8 bits,
and then feed that into a 73ls138 on the cart into the !G1 enable. to
place the PIAs at $ff1X, put A5 at '138:G3 and A4 at '138:!G2. That
means the 138 will be enabled when the address is $ff1x. Then, dump
A3,A2 into the '138 A and B inputs. THat decodes the 4 4 byte chunks.
The final thing is to take the 4 outputs and put diodes from them to
SLENB. If any of them is active (they are active low), SLENB will be
pulled low, which will disable the internal $ff00-$ff1f PIA #1.
So, 4 PIAs, 4 germanium diodes, a 74ls30, and a 74ls138. It cna be
rewired to do $ff30-$ff3f by moving A5 from G3 to '138 input C, and
using the second 4 '138 outputs (4,5,6,7). A combo cart would have 2
jumpers, to set !G2 to ground of A5, and set '138 input C to 5V or A5,
and always use the upper 4 outputs of the '138.
64 additional IO lines now available within the original CoCo IO address
space
Jim
--
RETRO Innovations, Contemporary Gear for Classic Systems
www.go4retro.com
store.go4retro.com
More information about the Coco
mailing list