Ah. One thing I did forget to comment on, Ratty:
Eflash 4000 is a clear Flash memory design. The whole eFlash memory is directly available in the Amiga Zorro III area. It opens the possibility of using the eFlash 4000 card not only during the computer start like other Flashes but also as the non-volatile Flash disk with fast random access.
.
Well, the MX FlashROM chips are 64kB sectored (besides the boot section, which is (32/8/8/16 kB). If you implement a random access file system there, guess what happens?
For changing one (1) bit of data, you have to do the following:
- read the whole 64kB FlashROM to a RAM location
- alter the bit you want to change in RAM
- do a SectorErase command on the FlashROM (timed by the FlashROM, cannot be influenced or made faster)
- write the whole 64kB RAM mirror back to flash, and in this case, word by word, with data bus polling after each write access to verify that the FlashROM did finish its cycle.
So. Let's count some cycles (you may use your fingers here, but keep in mind, five at one hand):
- 64*1024 read cycles from FlashROM
- 64*1024 write cycles to RAM
- 1 read cycle from RAM
- 1 write cycle to RAM
- 64*1024 read cycles from RAM
- 64*1024 write cycles to FlashROM
- 4*64*1024 read cycles from FlashROM (assuming that you have to poll four times only, which is optimistic)
This yields in approx 512k cycles; let's assume that the CPU is only occupied with changing your one bit, and nobody else likes to do something on the Zorro III bus. Take the time of 250ns for one access to both FlashROM and RAM, and 100ns in between cycles (the fastest Zorro III board I know of needs 190ns for one write access, namely the Picasso IV with Buster 11). So one access costs us 350ns.
We will need for the whole operation, if we
only calculate the read/write times, forget about the self timed sector erase operation and omit all housekeeping of the filesystem, in total a time of 0.18sec. For writing one (1) bit.
In case of changing one byte we end up with random access times in writing of
0.18 Byte/s, or
180 miliByte/s
Pfuh. Looks like something completely useful... and this is what you are calling "fast random access"?
In case of the ALGOR / ROMulus, we have Atmel FlashROMs with 256byte sectors, and an internal write buffer of 256byte RAM, which means that you can do a "normal" write of 256bytes to the FlashROM, followed by a ProgramSector operation.
You may do the calculation for this case (change one byte in random access) as some exercise. And you may take your shoes of, if you run out of fingers, and effectively double your data bus width by this hack

Michael