[Coco] GIME DRAM address mappings

RETRO Innovations go4retro at go4retro.com
Wed Sep 27 03:18:47 EDT 2017


As I continue to debug CocoMem in hopes to have it functioning for Tandy 
Assembly (not working yet :-( ), I found I needed to reverse engineer 
how physical addresses in the memory map get translated in DRAM 
addresses via the GIME.  Perhaps this is old news, but I had not seen it 
anywhere:

As the physical address gets sent to the GIME, it is split into two 
parts, the portion that will be mapped into the MMU, and the rest.

The GIME then parses the final 18 bit address into 3 pieces:

  * odd/even address (bit 0)
  * lower 9 bits of word address
  * upper 9 bits of word address

The lower 9 bits are transferred while E is high on the falling edge of 
RAS (row address strobe).  The upper 9 bits are transferred on the 
falling edge of CAS (column address strobe).

The mappings are a bit weird, so here they are:

  * A0 -> !WE0 if even, !WE1 if odd
  * A1-A8 -> RAS0-RAS7
  * MMU bank bit 4 -> RAS8
  * A9-A12 -> CAS0-CAS3
  * bank bit 0-bank bit 3 -> CAS4-CAS7
  * bank bit 4 -> CAS8

I find it odd that bank bit 4 is such an outlier, but that's what the 
empirical data suggests.

(RASX denotes the values on the DRAM address bus bits 0-8 during the RAS 
falling edge, CASX denotes the same for falling edge of CAS)

Sadly, this gets me little further in my bug hunt (writes to memory are 
"bleeding" through to the screen RAM, as if they are lingering on the 
bus too long and the GIME is reading them as screen data). But, at least 
I know a bit more about the GIME.

Jim

-- 
RETRO Innovations, Contemporary Gear for Classic Systems
www.go4retro.com
store.go4retro.com



More information about the Coco mailing list