[Coco] GIME DRAM address mappings

RETRO Innovations go4retro at go4retro.com
Wed Sep 27 10:19:48 EDT 2017


A few mistakes a made last night, as it was late and I wanted to get 
this on-list for posterity before I forgot some of it:
>> 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:
It's a 19 bit address.
>>
>>   * 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
On writes.  On reads, the decision to use odd or even byte of the 
received RAM word is done inside the GIME.
>>   * 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)
Jim


More information about the Coco mailing list