[Coco] ML Question: MMU Block Switching

William Mikrut wmikrut72 at gmail.com
Tue Feb 17 17:38:34 EST 2015


Thank you Robert.

I am playing around with this some more tonight an I want to go into the
unraveled document and look at how LPOKE specifically sets registers for
execution.

If i interpret what you are saying, FF9D/E just remaps vidram to a
different starting address in high ram.

I still need to load the MMU with that page to read/write data to that
location... but could easily offset the default of 6C000 with the example
you listed above.... or to any place in High ram as long as the MMU was in
sync with the address block I selected.

Sorry if I am such a noob at this, but I have wanted to learn these things
for a LONG, long time.


On Tue, Feb 17, 2015 at 4:02 PM, Robert Gault <robert.gault at att.net> wrote:

> William Mikrut wrote:
>
>> I guess what I need to do is go back to the Super Extended Basic
>> unravelled
>> and spend a little more time examining the code.
>>
>> While I understand mmu pages and the basic function of ff9d-ff9e... I am
>> still missing a piece.
>>
>> For example... I can set ff9d-ff9e to point videoram to start at 6c0000
>> ...
>> or really any block.
>>
>> How to store data in that location to display on the page is what I am
>> missing.
>>
>> I know its an old subject and I have read Lamont's and Bardens books on
>> assembly language.
>>
>> Are there any other guides besides those two that would help me through
>> learning these intricate details?
>>
>
> The Unravelled series is the best place to start but you also want to find
> the Service manual for the Coco3. It is also on the Web so if you can't
> find it let us know.
>
> You seem to think that $FF9E must be 0 but that is not the case. While it
> make not be practical, you can pick any address to start the video screen.
> For example, if you would start at $6CA00 then $6CA00/8=$D940 so $FF9D=$D9
> and $FF9E=$40
>
> The above will work and while not very useful for setting screens, it
> could be part of a vertical scroll procedure. However, scrolling should
> include use of $FF9C.
>
> Now storing data into memory is simple. You can put it directly anywhere
> in the 64k RAM; directly addressable by the CPU. To reach the rest of the
> Coco3 memory, you need to map that memory into the CPU addressable memory
> using the MMU registers.
> Since the MMU registers grab $2000 bytes at a time, it make sense to use
> the edge of such a block as your screen edge and set $FF9D-$FF9E
> accordingly. You can use any $2000 byte memory block in the 64k region as
> long as it does not displace code or data needed by your program. It should
> not include any of the Basic code if you intend to make use of it. But in
> theory, you could also use memory from $8000-$FF00 as long as you are in
> all RAM mode.
>
>
> Robert
>
>
> --
> Coco mailing list
> Coco at maltedmedia.com
> https://pairlist5.pair.net/mailman/listinfo/coco
>


More information about the Coco mailing list