[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