Talk about raking over old coals! Well, for those of you who follow my YouTube channel this’ll mostly be old news but here I am, six months after the event, finally updating my blog. There’s new news on what’s next though, so hang in there. For some reason lately I seem to be adopting a pattern of completely overstretching myself with a mammoth video series and then having to take the rest of the…
Well, it’s only taken 12 years but my computer has finally reached a major milestone - Turing completeness. The architecture of my computer has, of course, been Turing complete all along, that is, it’s capable of simulating a Turing machine and therefore represents the design of a general purpose computer. Relay Computer Architecture (larger) The challenge has been bringing that architecture and…
For a while now my computer has been missing its final three instruction classes … and two of them are ‘up there’ alongside branching in terms of overall importance for the capability of my relay computer. The irony is, of course, that these instructions are already present on the controller PCB because you can’t ‘half design a PCB’ but to ‘play fair’ I’ve not soldered in the relays yet because I…
Way back in 2019 I discussed how you can’t ‘half design a PCB’ and that, as a result, my controller cards already have all the required functionality laid down … I just haven’t explained how those ‘missing’ bits of functionality work in this blog yet. To ensure I was ‘playing fair’ when constructing the controller I only soldered in the relays for the instructions I’d explained in this blog so…
In the last episode of this mini-series I explained about how an assembler’s job is effectively to convert a program written in a language a human programmer can understand (assembly language in this case) into something which a computer can understand. So as an example, the assembler will take something like this … start: ldi a,1 ; initial setup A = 1 ldi b,0 ; B = 0 loop: mov c,b ; slide B -> C…
Well, what a journey that’s been then … I started work on a clock for my relay computer back in May 2020 and today (20th Nov 2022) this post marks the end of it. Needless to say that global pandemic got in the way a bit and hampered progress but I also, well, kind of fell out of love with my relay computer for a bit. Like most of my hobbies I can blow ‘hot and cold’ but given I also set myself the…
Quite a while ago I decided to give up on the tedious wire wrap technique for building my cards. Although it was certainly more authentic and in-keeping with my computer’s theme it was massively time consuming for me and was ultimately putting me off making progress on construction. Another problem with my previous construction methods was creating monstrosities like this: This is the ‘W’…
To make my relay computer do something interesting (or anything at all) it needs a list of instructions held in memory. Each instruction consists of an 8-bit value called an opcode (portmanteau of operation and code) optionally followed by one or two further 8-bit values (usually referencing a location in memory). The computer will work through them one at a time doing whatever operation that…
So, is fair to say that things have been a bit quiet around here of late … and if you’ve been following my YouTube channel I do hope you haven’t been holding your breath for the next episode of ‘making a relay computer clock’ as the last episode came out just over a year ago! What’s been going on then? Well first of all I’m fine (and actually writing this on one of the lazier days of a holiday in…
As the clock struck midnight at the very end of 2019 I decided, over a glass of something sparkling, that I’d set myself a challenge to put out a series of six YouTube videos within the space of one month. This, I thought, seemed timely as I’ve now got my relay computer to the point where it can perform branching operations and therefore run more interesting programs. Well, somehow I managed to…
In my last post I covered off the full design for the decoder card so all that remains is to get it soldered up and tested. As before I’ve put a video together which covers the highlights: As you can see towards the end of the video that’s the basics of branching complete and finally my computer is capable of running more complicated programs that have loops and decision making points in them. As…
I’ve almost got everything I need now to get my relay computer to do branching. The hard work of designing and constructing the sequencer and controller units is complete and both units can perform a GOTO operation. The only problem now is the decoder card doesn’t understand what a GOTO instruction looks like and so can’t tell the controller unit to perform a GOTO. That’s easily fixed though as…
In my last couple of posts I covered off the full design for the controller unit. As the PCBs have now arrived I can get on with soldering up the cards and giving them a test. As mentioned in my last post, although the controller supports all the instruction classes the computer will eventually use I’m only soldering up the ALU, GOTO, MOV8 and SETAB instructions for now. Let’s start with the lower…
In my last couple of posts I finalised the controller schematic designs for the ALU, SETAB, MOV8 and GOTO class of instructions. Now it’s time to bring all those schematics together and design the two controller PCBs. As with the sequencer, the controller is spread over two interconnected cards and I’ll need to decide what’s going on the upper card and what will go on the lower card. It’s also…
In my last post I covered off the controller design for the GOTO instruction. Being as I’ve decided to implement the controller on a new set of PCB cards I need to transfer over the existing ALU, MOV8 & SETAB instructions to the new controller design. At the relay level nothing really changes so I’ll just quickly recap the timing and implementations here using the new schematic style and then in…
With the sequencer now designed and constructed I’m much closer to getting branching working on my relay computer. The next hurdle is updating the controller cards so that they can fire the appropriate control lines at the right time as directed by the sequencer pulses. As a reminder here’s the GOTO instruction itself: Branch/Call & 16-bit Load Immediate GOTO 24 1 1 d s c z n x h h h h h h h h l l…
In my last couple of posts I covered off the full design for the sequencer unit. With PCBs now safely arrived in the post I can get on with soldering up the cards and giving them a test. Let’s start with the lower card and, as before, I’ve put together a video which covers the highlights: Likewise, here’s a video covering the upper card construction which also includes giving the cards a test…
I’ve got the designs for the 24-cycle FSM and pulse distribution in place so all that’s left for the sequencer is to bring the schematics together and then design the PCBs … and yup, that’s PCBs plural as this is going to be another part of the computer that is complicated enough to need spreading over two interconnected cards. The way I can tell this is a ’two card job’ is purely down to the…
In my last post I extended the 8-cycle FSM (finite state machine) design all the way up to 24-cycles so that we can run longer and more complicated instructions. In this case we’re looking to implement the GOTO instruction so that the computer can perform branching. As a recap here’s the outputs from the newly designed FSM: 24-cycle FSM Outputs (larger) … and here’s the timing chart that we’re…
Recently I’ve been looking at what’s needed to implement branching in my computer (the upcoming GOTO class of instructions). In my last post I covered the timing chart for the GOTO class which is repeated below: GOTO opcode timing chart (larger) To achieve this timing I’ll need a sequencer that can ‘count’ up to 24 (currently it only goes up to 8). Actually none of this is too difficult as…
In my last post I covered the design for the GOTO opcode which will enable my relay computer to perform branching, loops and so on. Here’s where I got to last time: Branch/Call & 16-bit Load Immediate GOTO 24 1 1 d s c z n x h h h h h h h h l l l l l l l l Branches to a given address if stated condition register flag(s) is set. Address of next instruction can optionally be saved in XY register. M…
There’s been a common theme recently in the comments on my YouTube videos … people are ready to see my relay computer gain the power of branching and become a ‘proper’ computer … and that’s fair enough because that’s the point where the computer can do way more interesting things and run more complicated programs. Originally I was going to add new instructions to the computer in order of…
It’s time for the oddly therapeutic part of designing a PCB … laying out the board. In my last post I covered the schematic design and so we now have all the components required for a 16-bit register captured in my design program of choice (EasyEDA) along with how each component is connected to everything else. The next step is to generate a PCB layout from that schematic … and I say ‘generate’…
In my last couple of posts I’ve been building up to a change of approach in how I’m making the cards in my computer. This is mainly because I can’t face the monotony of hand building the upcoming register cards (which I’ll need three of so it’s triple the procrastination holding me back). The obvious solution to all of this is to create a Printed Circuit Board (PCB) which will cut out most of the…
After years of using pad/prototyping boards to build my computer I’ve decided to switch things up a bit and have a go at making a custom PCB. The thinking is that it should save me loads of time soldering and wire wrapping which will come in handy as I’ll soon be constructing three fairly-identical register cards and my patience is notoriously short. That said though it probably makes sense that…
In my last post I touched on how the repetitive nature of making register cards has been putting me off progressing my relay computer. If you’ve followed my blog (over the years) you’ll have witnessed the construction of the general purpose registers A, B, C and D along with the specialised registers in the incrementer and program counter. Each register card follows the same construction pattern:…
… or so the proverb goes … and it’s fair to say I’ve been procrastinating quite a bit recently. I typically take a summer break from working on the relay computer so that I can service all the other hobbies I have on the go but also to enjoy the brief warm weather we get here in the UK. Usually come autumn time I’m back building, blogging and making videos but this year ‘summer’ has hung on ……
In my last three posts I covered the design of the auxiliary control unit which will ease entering and inspecting programs in the computer’s memory. With the design ‘in the bag’ it’s time to get constructing although this time we’re not starting with a blank card … Currently the auxiliary card has the gating relays along the bottom which connect the primary switches to either the address or data…
This is the last post in a mini-series of three covering the design of the auxiliary control unit which will ease entering and inspecting programs in the computer’s memory. In my last post I covered the design of the auxiliary clock which resulted in the following schematic: Auxiliary Clock Schematic (larger) … which generates the following timing pulses … This post covers the last part of the…
In my last post I made a start on the auxiliary control design which once completed will make it much easier to load instructions in to memory - effectively it’s a computer within a computer. If you haven’t read my previous post then it’s definitely worth doing so as this post picks up where that one left off. As a reminder though we’re looking to perform the following operations: Auxiliary…
My relay computer is now at the point where it can execute a program in memory without assistance. In order to do that though, of course, the program needs to be loaded into memory in the first place and at the moment that’s a bit of a pain. For each line of the program you need to set the primary data switches to match the desired ‘opcode’, gate the switches to the data bus, gate the program…
This is a bit of a landmark moment … at least for the construction of my relay computer. For a long time now my blog posts have been leading up to the point where my computer will execute a program in memory without any further input from the user. Well, it’s this post where that finally happens and all that stands in the way is a tweak to the sequencer and an addition to the controller unit. Here…
In my last two posts I covered the construction of the upper and lower incrementer cards. The lower card is a 16-bit half adder and the upper card is a 16-bit register. Together they form the incrementer unit as a whole which can add one to whichever value is currently on the address bus and then hold that value ready for pushing back out to the address bus. More often than not the incrementer…
In my last post I covered the construction of the lower incrementer card which is effectively a 16-bit half adder. This time I’m going to cover constructing the upper card of the incrementer which is a 16-bit register that can hold on to the incremented value before pushing it back out to the address bus. The backplane connectors and LEDs were soldered down in my last post but there’s plenty more…
We’re getting nearer and nearer to a computer that can run though a program in memory rather than just a single instruction … we’ve got memory to hold the program and a program counter to point to the current instruction in memory. Now it’s time to construct the 16-bit incrementer which will be used to advance the program counter on to point at the next instruction. As the incrementer is spread…
I’ve covered the construction of the upper and lower memory cards in my last two posts … it’s now time to bring those two cards together to form the memory unit proper and give it all a test. Here’s the upper card (in close up and at a rakish angle) … … and here’s the lower memory card (at an equally rakish angle) …
In my last post I made a start on the memory unit construction with the lower memory card. The lower card centres around the memory IC which runs at 5V. The upper memory card picks up the task of converting the data and address bus coming in from the rest of the computer (running at 12V) to the 5V needed by the memory IC. The LEDs and backplane connectors were soldered down in my last post so we…
It’s time to make a start on the construction of the memory unit and as mentioned in my last post this one is a bit more complex than ‘boring old registers’ and so I’ll split it over two posts. Let’s dive in with the easy part - soldering down the LEDs and backplane connectors: For the lower memory card there are 16 LEDs for the 16-bit address bus and 8 LEDs for the 8-bit data bus. Both of these…
In my last couple of posts I’ve been slightly distracted by some ‘miscellany’ but now I return to form and crack on with constructing the program counter. The program counter is effectively two 8bit registers bolted together and wired out slightly differently using the address bus rather than data bus. As usual I’ll start with soldering down the LEDs: This should all be very familiar now and…
Continuing on with the theme from my last post … here is another ‘miscellany special’ covering all the little ‘side jobs’ I’ve been doing on my relay computer alongside the primary work of constructing the Program Counter, Memory and Incrementer cards. There’s three things worth covering (plus an additional minor mention) … let’s start with backplanes. The computer is designed with four backplanes…
Having somehow forgotten to take time off work I’m now playing ‘annual leave catch up’ which means lots of four day weeks but also, and more importantly for this blog, I’m getting time to crack on with construction of my relay computer. The current milestone I’m working towards is finishing off the Program Counter, Incrementer and Memory cards (which are all well under way now) so that I can load…
The design of the computer’s memory, incrementer and program counter are now complete but there’s one last piece of the ‘puzzle’ required to get the computer running a program. The controller now needs updating to orchestrate the ‘fetch and increment’ cycle. This cycle retrieves the next instruction from memory (into the instruction register) and then increments the program counter to point at the…
In my last post I started the design for the computer’s memory unit which is spread over two cards. With the lower memory card design in place its now time to finish the job and design the upper card which will interface the rest of the computer with the memory chip of the lower card. Let’s dive straight in by bringing up the board interconnects from the lower card: Memory Card A with initial…
In my last post I explained my decision to use a ‘modern’ memory chip in my relay computer … I also alluded to there being some complexities in interfacing the rest of the computer with that memory chip. The memory unit will be spread over two cards and in this post I cover the design of the first half and expand on those ‘complexities’ a bit. The memory chip I’m using is from the ‘62’ family of…
It’s time, at last, to start looking at the design for the computer’s memory and this is a bit of a game changer as it’s the final part of the jigsaw that lets the computer run a program. However, it’s also the part of the computer that leaves me in a bit of a quandary. The problem with memory is that typically you need quite a lot of it and that’s something that doesn’t come easy with relays. In…
I’ve nearly got the design for the memory cards done and ready to share but once that’s out the way it’ll be time to get on with some construction again. With that in mind I cracked out the credit cards and got buying more relays plus some other bits and bobs and whilst I was in a spending mood I decided it was high time to treat the computer to some more laser cut parts.
In my last post I covered the design of the 16-bit half adder which takes whatever value is currently on the address bus and increments it by one. To make this incremented value useable we need to create a register so that we can store the value ready for pushing back on to the address bus. Typically this incremented value would then be loaded into the program counter to get it ready for the next…
In the last post I introduced the design for the 1-bit Half Adder. This post covers connecting sixteen of these units together to make the 16-bit Half Adder. So, diving straight in, here is what sixteen of the 1-bit Half Adder units look like all together on the usual 55 x 40 hole pad board: 16 x 1-bit Half Adder Units (larger) Each half adder bit is made up of two relays (as seen in the previous…
Typical isn’t it?! … you wait 10 months for a post and then two come along at once. Well, all being well, this should be the first of a short flurry of posts as I move on to the design of the incrementer. The incrementer takes any value currently on the 16-bit address bus and adds one to it, or rather, it increments it (clue is in the name of course). Typically that value on the address bus is…
It’s been a while since my last post … pretty much 10 months in fact … and I’d love to say I’ve been quietly working on my relay computer in the meantime but I haven’t. Designing, building and blogging about the various parts of the computer is really time consuming and unfortunately I’m just one of those people who has way too many hobbies. Anyway, after picking up some subscribers on YouTube I…