Day 39
Ok first an apology for the massive divergence but I think it's a necessary one. A few program notes before I get to the meat and potatoes of this post.I am breaking things down a bit I have a few other ideas I want to get started on that don't involve this project and as such I'm cutting out the Monday posts to this blog. The aim here is to educate and explain and the pressure of 3 posts a week for a project setup to be this long term is a hard self goal so we're going to try 2 a week for a while and see if that not only improves quality but coherence of things. So from now on Wednesday and Saturday for posts and hopefully a new announcement soon. On the physical build the clock circuit will be finished soon but after it is finished I have a Christmas gift I should have finished first to get back to then after that is done we will resume with the various test builds.
As an explanation for this post I was chatting with my girlfriend the other night about this particular project and I was asked about not only the function of this computer but the purpose and use for it as well. The 2 answers kind of go hand in hand so I'm going to attempt to break it all down in this 1 post.
I am an unabashed geek there is no denying it and I wouldn't dare insult anyone's intellect by trying to. This fact leads to several assumptions some right and some not so much. First I love tech and all of it's many forms I have an intrinsic knowledge of how electronics function this makes me a superb troubleshooter. Unfortunately it tends to lend credence to people thinking I know how these things work on a deep level, I do not, usually. When it comes to computers especially I am quite knowledgeable about how the OS works and how to sort out problems like that as well, I also have the aforementioned tech skill which helps find physical issues quickly. These 2 skills make for a great repair man but that does not require a knowledge of how a PC thinks and preforms it's functions. More importantly given the way my brain works this lack of understanding leads to a disconnect between the hardware of the computer and it's software. I get the abstract of it all but when I try to apply this knowledge nothing makes sense and I quickly lose patience with the situation. I have broken down much of this project into parts that I understand fully, parts I half get, and parts I am completely lost on. The only parts I'm completely lost on are the actual programming of this beast the physical parts all make at least some level of sense and I am 100% certain will all make total sense once I take the time to break them down and model them. So goal #1 is to better understand how modern computers work and use that knowledge to boost my ability to code and problem solve for the machine.
Goal #2 goes back to the unabashed geek thing I love tech and historical tech like this relay computer or the PDP-8 from DEC or even the DOS like DEC system I work with at work is utterly fascinating. The relay computer is not the first computer ever built but it was an important milestone in the road to the transistor and also within reach of a hobbyist such as myself affording and building. Relays are readily available and are largely unchanged in function if not design from that time, this means that any computer I build in this manner will be very similar to what came before. Historically speaking while this uses no semiconductors or any of their direct precedents (Vacuum tubes)it still functions in nearly the same manner as a modern PC's processor. The series of registers and functions are all largely unchanged in ability though the scale is simultaneously much larger and much smaller. So goal #2 is simply to have built a piece of history.
Goal #3 is short and sweet. This is a project to do with my kids who have both shown at least a mild interest in the topic. The knowledge they gain from this can easily help them in their lives from a better understanding of mathematics to problem solving to an early exposure to real engineering. Plus they can make it make lots of noise. That's about it for goals, there are more but they're minor.
Now as for a purpose for this computer that's a bit more abstract as it cannot do things a modern PC can. What it can do is math and in a consistent and loud manner. So doesn't this make it a glorified calculator? Why yes, yes it does just like your iPhone or DROID or Dell. The difference is in the learning and teaching ability with this glorified calculator. Not only am I learning something but see goal #3. This machine can be rolled out for whatever special occasion calls for it or more likely will simply become 1 of my trophy's of geekdom. It will likely be stored until I get a place of my own and then it will be placed on display wherever I put things like that. It can be programmed to preform many complex functions but really any everyday use of it is impractical and as such any question about it's use is like asking for an explanation as to why children play. There is no point or use beyond the education of it.
Now that I have that out of the way we can get to the explanation of what this all does. Obviously this is a computer but not like what many people carry around or have sitting in their homes. This was before programming languages made it easy to preform complex multi step functions with just a few words. This is like trying to use a modern computer without the mother board, monitor, keyboard, and mouse. The computer I am building here is what functionally happens all on the CPU's chipset in a modern PC. Most people have experience typing things into a computer and getting information back but the part they miss is loads of other people spent boatloads of time making the system work that way. Essentially a modern computer is a translator for a translator for the CPU and you to communicate. Most programs break your inputs like mouse clicks and keystrokes into some type of bytecode this is a numerical representation of what you are requesting the kernel of the processor turns that bytecode into the logical 1's and 0's the CPU can actually work with.
Those 1's and 0's are what we are working with in the relay computer. Instead of having a program put those 1's and 0's in for us we put them in manually using switches. The switches help us preload the computer with everything it needs from the instructions to preform the program to the starting inputs of the program itself. these inputs are made with the clock off and it is either manually cycled to allow for the next input or set to run to allow the computer begin its automated calculation of whatever program was inputted. This whole process is done either automatically by modern computers or prewritten by the program designers. In the case of prewritten instructions they are usually written in some higher programming language like C++ or Java which then has to be compiled into bytecode that the CPU can then translate into the instructions for the CPU to preform. This double translation is done to make programming more accessible the higher languages are more human readable and allows us to succinctly preform complex calculations. Some programmers write in machine language which is essentially talking directly to the kernel, this has a few advantages. First super lightweight code machine language has virtually no overhead and as such it is really easy to drastically reduce file size. Also it tends to run much faster. The downsides are that it is truly difficult to master comparatively to other languages. It is also so powerful that small mistakes can cause massive problems from system crashes to security vulnerabilities. It is also highly specific to the system it is on while Java can be compiled for a Mac or PC or Android without trouble each has its own machine language to be learned. We will be working with our own machine language for this build as the instruction set will be used to directly interface with the various functions we can preform.
I hope this has been as enlightening to you as it has been clarifying to me in where we are and where we are headed.
No comments:
Post a Comment