Now that TB 2.5g and G-DOS 0.50b are finalized and out there in the wild, it’s time to turn our focus to Mass Storage. That’s right, we need to be able to add, remove, modify, and use files contained in some type of file system. The type of file system may be up for debate. But regardless of what we decide to do with this computer, we need a way to access binary files, BASIC programs, etc.
So the two main types of file systems of interest to us would be FAT or a CP/M file structure. Considering that this computer only has 32k of RAM, that dissolves any idea of using CP/M without major modifications. That’s another project for another day. FAT on the other hand has several advantages. Firstly, it is readily readable by a modern PC. Which means that we should be able to write and transfer files between this computer and a PC with ease. Secondly, it is highly documented.
Knowing this I set out to learn everything that I could about the hardware side of the SD format. First thing I discovered is that there are two protocols for communicating with an SD card. The first is SPI, a pretty straight forward protocol similar to what one would use with Serial Shift Registers. The second is SDIO, which is completely undocumented. Knowing this I knew that I would be using SPI. So I would need the following pins: Clock, MISO, MOSI, and Chip Select. That is in addition to the 3.3v supply voltage. Speaking of 3.3v, i would also need to level shift from 5v to 3.3v and vice versa. Luckily I recently ordered 74LS07 Open Collector Buffers, so this is no problem.
But how would I drive these pins? Well, that is when I began thinking about the onboard 8255 PIO. Obviously it has plenty of pins…but I wanted to use that for general purpose I/0… And besides, I do not want to dedicate one whole port to just one input pin! But wait! If I were to add a z80 PIO I could use it in Mode 3, or I/O mode! That means I can specify in software whether a pin is input or output! Fantastic, I have the hardware figured out. Now onto the SD SPI Protocol.
And that is where I am at now. Reading in the plethora of information available on the web, which doesn’t really give me much information about the hardware side (like do I write one byte, then read a byte? Or how do I specify where I want to read data from?). That is until I found the resources below. And while I am still trying to crawl through the information, I am taking many notes along the way.
If you’re interested in this type of stuff, I suggest giving it at least a once over. You’ll probably learn something that is of no real use to you outside of this hobby.