[Coco] CoCo 3 RAM mapping question.

Walter Zambotti zambotti at iinet.net.au
Sun Apr 26 22:00:15 EDT 2020


William

Thanks for that explanation. 

That is very enlightening because the OVCC emulator certainly does not make that distinction.

I have now changed my copy of OVCC to reflect and nothing seems to have been impacted. Obviously not a lot of software uses that feature.

Interestingly when I made this change I retested OS9 Lvl 1 Version 2 just to see if that may be the inconsistency that was stopping it from working but alas no.

Walter
 
-----Original Message-----
From: Coco [mailto:coco-bounces at maltedmedia.com] On Behalf Of William Astle
Sent: Monday, 27 April 2020 12:02 AM
To: coco at maltedmedia.com
Subject: Re: [Coco] CoCo 3 RAM mapping question.

On 2020-04-26 7:09 a.m., Phill Harvey-Smith wrote:
> The tests are currently operating in 32K RAM, 16K internal rom, 16K 
> external ROM (though the external is actually 8K ROM, 8K RAM but my 
> card handles that). The Init1 register contans $C4, so CoCo 1/2 
> compatible mode, MMU enabled and standard SCS.

The MMU does, indeed, remap the ROMs, though not quite the way you would expect. When ROM mode is enabled, blocks 3C to 3F refer to the ROM part of the memory map. However, it doesn't matter which of those four blocks is mapped in a particular MMU register. You'll always get the same area of the ROM regardless of which one is mapped at any given location. It basically works as follows:

0000-1FFF: lower 8K of ROM area
2000-3FFF: second 8K of ROM area
4000-5FFF: third 8K of ROM area
6000-7FFF: upper 8K of ROM area
8000-9FFF: lower 8K of ROM area
A000-BFFF: second 8K of ROM area
C000-DFFF: third 8K of ROM area
E000-FEFF: upper 8K or ROM area

FF00-FFFF are the special always mapped I/O area.

Note that the above means it's not possible to map the ECB ROM area (8000-9FFF, first 8K of ROM) at 4000. If you have the 16K internal/external split, you should be getting the first 8K of the external ROM when you map any ROM block at 4000.

The only way you can access the RAM in blocks 3C to 3F is if the machine is in all RAM mode. You could probably get around that by mapping your RAM testing routine into FFxx using SLENB when you need it, though.

--
Coco mailing list
Coco at maltedmedia.com
https://pairlist5.pair.net/mailman/listinfo/coco



More information about the Coco mailing list