[Coco] Christmas Wish Device
Mark McDougall
msmcdoug at iinet.net.au
Wed Dec 7 17:16:26 EST 2011
On 8/12/2011 4:19 AM, Robert Hermanek wrote:
> love something simpler, just a RAM cartridge.
>
> I'd like a cart that I can plug in, then plug flash memory into the cart,
> then access the flash memory as RAM via a few I/O registers. In my mind
> the simplest thing would be setting an "address" using 4 bytes giving
> access to a 32 bit space, then when the "address" registers are set,
> either writing to the flash by setting a "value" register, or else
> reading the current value at your chosen address by reading the "value"
> register.
I designed a flash cartridge some time back, but stuffed up, not realising
that the CART# signal (which decodes the address lines) isn't asserted on
writes.
This meant that, without some magic, I couldn't program the flash from the
Coco. I did have some ideas on how to circumvent that with the current
design, but haven't done anything with it since, at the time, I didn't have
an MPI so developing programming code - with the flash cart plugged in -
meant I had nowhere to save it. Perhaps now that I have an MPI I should
revisit it.
Or maybe just re-spin the PCB without these problems...
> And that's it. I could plug a 1 gig CF or SD card into this thing and
> have all the "RAM" I could ever want.
This is a different kettle of fish, and is more complicated. You describe a
memory device in the first instance, and substitute it with a secondary
storage device in the second. Particularly in the case of SD, that's more
hardware required to interface than a simple bus adapter.
Having said that, technically IDE (CF) is nothing more than a memory-mapped
device anyway. The IDE registers are pretty much exactly as you describe,
the only difference being that the 'memory' isn't available for random
access on a bus like a memory block would be; you have to read it serially
via a FIFO.
And this raises a point; using a secondary storage device would require
caching in memory if you want to be able to access a block of memory, since
you must meet bus timings for the 'memory' access. So you'd need a
controller on the cart which read sectors into 'cart memory'... but this
isn't really any different to what a stock Coco can do with a SuperIDE... so
what's the point (except performance)?
> It would be much more fun
> to be able to just set the "address" registers and access the flash card
> as a continuous block of memory... and it wouldn't even have to be
> flash, since that's persistent--maybe some kind of true RAM chips in the
> cart would be better?
It would be trivial to implement with SRAM and a small CPLD. The main issue
is where to map the bank registers, as they - and the other memory-mapped
addresses on the Coco3 (GIME etc) - would impinge on your memory address
space. Also, annoyingly, with the CART# not driven during writes, you need
enough address pins on your CPLD to decode the banking register addresses
(ie most of them) which increases the size (and complexity and cost) of the
CPLD. Something I discovered too late. :(
Regards,
--
| Mark McDougall | "Electrical Engineers do it
| <http://members.iinet.net.au/~msmcdoug> | with less resistance!"
More information about the Coco
mailing list