In this post, I create an ISA card that can serve as either a DiskOnChip board, or a RTC, or both:
DiskOnChip is a series of products manufactured by m-systems in the 90s and 2000s. There are several versions available, from standard 32-pin DIP IC packages, to IDE interface versions. This post is going to discuss the IC version. Here is a used sample that I attained from eBay:
I’ve already built a couple of other flash storage devices, such as my Flash/EMS board that offered up to 4 megabytes of storage using 39SF040 flash devices. The DiskOnChip is yet another step in my exploration of flash storage devices.
The advantage of the DiskOnChip IC is that it combines the flash storage and controller in a simple IC package that is compatible with common memory pinouts. Versions of the DiskOnChip are available from 8MB up to 384MB in size, which would have been significant back in the 1990s and 2000s. The DiskOnChip does this while only using an 8 KB memory window into the processor’s address space, making it particularly attractive for computers with limited address space such as the early x86 computers (IBM PC, XT, etc). The logic for paging the flash into the window is all incorporated into the DiskOnChip IC.
Here is my schematic:
As you can probably tell, there’s multiple things going on with this design. I had extra room on the board, so I incorporated both a real-time clock (RTC) as well as the DiskOnChip. Don’t worry, the circuits are entirely separable. The only parts required for the DiskOnChip are the DiskOnChip IC and its associated decoding logic, consisting of a 74HCT688 magnitude comparator, pullups, and dip switch.
The 74HCT688 has two 8-bit sets of inputs, and outputs a low whenever the two sets of inputs match. Typically one set of inputs goes to a set of dip switches and the other set of inputs goes to a set of address lines. When the address lines match the dip switches, the chip select is asserted. As the DiskOnChip uses an 8KB window into the address space, 13 address lines are used for that 8KB window leaving 7 address lines remaining (A13-A19) for the 74HCT688. This allows us to place the DiskOnChip at any 8KB boundary in main memory. Typically I put it at 0xE0000.
As only 7 address lines were used, that left one input remaining on the 74HCT688. I grounded P7 while leaving Q7 connected to the dipswitch. This means if the dipswitch connected to Q7 is set high, than the DiskOnChip is not addressable. This is handy to allow you to prevent the DiskOnChip’s onboard BIOS extension from being invoked at boot time (say, for example, if there was a problem with the BIOS extension that prevented boot).
I had boards fabricated at OSH Park:
To make it a little bit clearer how the board implements the DiskOnChip and Clock functionality, here is an annotated diagram:
Only the components necessary for the particular function need be implemented. You can implement both if you want, as the DiskOnChip and RTC have independent address decoders.
As usual the boards can be found at Osh Park:
On the Osh Park board page there is a download link that will allow you to download gerbers.