Data Storage

Logic Systems

Memory

Originally I decided to use a RAM chip for this project. Cheating though that would be, any other form of memory would be to difficult to construct to make interesting programs with such a small instruction set. However having done a lot of research into ferrite core memory, it is starting to look like a plausible alternative to the RAM chip. Admittedly the RAM chip would hold 4 Kilobytes instead of about 128 Bytes that the core memory will, but as core memory is much more interesting and in keeping with the project, I've started to look into it seriously. Once I have experimented with core memory I will make a decision on whether I will use it, but so far it's looking likely.

Ok, so the cores have arrived now... All 45000 of them. I've built an experimental 16 bit test plane to get an idea how hard it is to make. The piece shown in the picture below took about 3 hours to make, but with a bit of practice that time'll probably come down a bit.

However this is rather small and fiddley to do compahensive testing on, so I've built a 1 bit plane soldered on some prototyping board for testing. I'm currently working on building a sense circuit to amplify the signal, as the read pulse from a ferrite core is usually about 40mV. This would be fine for testing if the osciliscope I was using wasn't picking up about 40mV of noise anyway. Hopefully once the signal's been ampilied I should be able to get some usefull results.

 

Hard Drive

To get over the problem of having such a small memory, I've decided to go with the system adopted by modern computers (although I got the idea originally from researching the WITCH computer), that is to load in part of the program from a drive of some sort, run that bit of program, then load in some more of the program as needed. Originally I was going to use a tape casset to load data onto the RAM chip, but tape cassets aren't good for loading in precise chunks of data, especially if the same chunk needs to be loaded more than once as they are a linear storage medium. So I considered the alternatives and decided to have a look at using a 5 1/4 inch floppy disk drive (of which I have lots of drives and disks). The 5 1/4 inch floppy disk came in about a year after ferrite core memory went out of use, so they're not quite of the same era, but close enough.

Having opened up one of my disk drives and looked at the disk drive input circuit diagram for the BBC Micro, it's looking tricky. Even the description of the circuit diagram described the driver chip as 'extremely complex'. The problem is I will have to replicate this chip and all the rest of the control hardware with individual components. Therefore for this to work, there is going to have to be a huge amount of simplification. For starters I'm currently planning to have only 1 track on the disk. This means there is no need to control the head as it can just be left in one place, which removes all the head control circuitry from the equation (of which there is a lot). I'm also planning to transfer data onto it by use of a tape cassette or similar (maybe just using a serial port to connect it straight to a PC) instead of writing the disk in a computer. This allows me to make up my own disk format so don't have to worry about conforming to a predetermined one. Even so its not going to be easy; I still have no idea how to sync the tape cassette to the floppy, or how to define sectors, and I don't really have an idea of how many components it will take. But it is still early days, and if all else fails I can always go back to the idea of using a cassette instead.

 

Zero Page Registers Vs Word Line

To add flexibility to the computer without adding many extra components, I plan to use the first 8 bytes of the memory as zero page memory, or registers that can be addressed directly with out using the address register. This allows for memory locations to remain in the address register while arithmetic functions take place, or for memory addresses to be stored in memory. This is necessary as addresses have to be stored in two halves, so you can't write an address from the address register to a memory location whilst having address in the memory location. Unfortunately, ALU operations will only be possible on the first 4 of these 'registers', due to the layout of the instruction set which is detailed on the next page. I'm not sure how these will cope with the floppy disk drive system mentioned above as it erases the whole memory; they may have to be local variables.

An alternative solution is to use a small amount of 'word line' core memory to store variables. This type of core memory only requires 2 wires going through the cores (instead of the usual 4) making it much simpler. However the amount of addressing hardware is directly proportional to the amount of data stored instead of proportional to the square root of the data stored, meaning its only really good for small amounts of memory. 8 bytes would be best as it would allow for a square memory plane (8x8 bits) and is a nice round binary number so is easier to address. Although this takes more components, it would be able to store data between sections of program. It's a close run thing and we will have to see which one wins out.

System Control

Research