[Coco] GIME DRAM address mappings
RETRO Innovations
go4retro at go4retro.com
Thu Sep 28 23:10:58 EDT 2017
On 9/28/2017 10:29 AM, Dave Philipsen wrote:
> So, Jim, if I understand correctly you are creating a 2MB memory expansion that will use the upper 2 unused bits in the MMU registers to access the entire 2MB, right? Will your board use SRAM or DRAM?
Right now, the board has 4 MB, mainly so I can work on how to add more
than 2MB support. 2MB uses all 8 bits of the task registers, ala Disto
and others, but adding more than 2MB requires a new strategy, which I
planned to use the board to design (I have ideas on how to do this). If
I am successful (which is a big IF, since I have but an entry level
understanding of GIME memory accesses and, as such, have this memory
issue I am debugging), the idea I am considering would allow 16 bits for
the task register, support an optional, more granular banking scheme
(4kB pages), support a "Read Only" bit to force an IRQ if a page is
marked as such and a write is attempted, and allow at least 16MB of 4kB
paged RAM with write protection.
The board currently uses SRAM, to avoid having to deal with refresh
cycles and such, but DRAM is not ruled out (fast paged DRAM or DDR type
DRAM could be used, and would also be power use friendly).
I promise to bring the board to Tandy Assembly, but I can't guarantee it
will be completely working (even as a rudimentary 512kB expansion).
Right now, the main goal is to better understand GIME memory accesses.
I might have to backtrack and build a triad-like board to figure out
DRAM-to-SRAM conversion, and then go back to this board.
But, on the plus side, I have another project I will bring that is
working (at least it passes all the tests I threw at it) dealing with
memory and the Coco.
I shuold just give up on this design for TA, and focus on getting other
stuff ready, but I can't seem to focus on other things until I can at
least figure out where I am going wrong on this design. I have
replicated the entire 16-to-8 multiplexing scheme that's on the Coco3
memory bus on my PCB, but somehow, any write to memory is showing up as
a write to a suitable spot on the screen. For example, if you poke a
value to location 512, it will show up at 1024 (first spot on screen) as
well. Poking a value to 2048 will also darken that spot on the screen.
I have been poring over logic analyzer trace output for the past few
night, learning so much about the GIME memory cycles, but not making
much progress towards finding my issue.
In the pic on Facebook, for example, DECB writing to location 148
translates to a $70094, which looks like this on the wires:
CAS RAS
B5 B3 B2 B1 B0 12 11 10 9 B4 8 7 6 5 4 3 2 1 0
8 7 6 5 4 3 2 1 0 8 7 6 5 4 3 2 1 0 W
1 1 0 0 0 0 0 0 0 1 0 1 0 0 1 0 1 0 0
To put in a more human-friendly order:
B5 B4 B3 B2 B1 B0 12 11 10 9 8 7 6 5 4 3 2 1 0
1 1 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0
7 0 0 9 4
But, the screen also sees the write at $70494:
CAS RAS
B5 B3 B2 B1 B0 12 11 10 9 B4 8 7 6 5 4 3 2 1 0
1 1 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 0 0
Again, more human readable version:
B5 B4 B3 B2 B1 B0 12 11 10 9 8 7 6 5 4 3 2 1 0
1 1 1 0 0 0 0 0 1 0 0 1 0 0 1 0 1 0 0
7 0 4 9 4
The quick answer is that bit 10 is stuck high or something, but I don't
see that on the logic analyzer. And, no matter what multiple of 512 I
write to, the screen gets a copy within the 512 byte range of the
screen. So, for example, if I wrote to 2048+148, a phantom write goes
to $494 (1024+148) I have verified that if I write a 99 to location
1504+512, I see the same 99 at location 1504 (low left of screen memory)
At first I thought the RAM was just limited to 512 bytes, but if I write
99 to 1504+1024, 1504 has 99, but 1504+512 does not.
And so, I continue to debug... :-(
Jim
More information about the Coco
mailing list