Great! I look forwards to your next video- when will it be released roughly? (Im that keen). Nice channel aswell
I meant to record it today, but procrastinated and got distracted helping people on the RDF server. I did make a nice demonstration unit of it and planned out how I would record the video, but didn't actually do anything. Perfectionism hurts productivity.
Rollback Post to RevisionRollBack
Hans Lemurson's Thread of Links:http://www.minecraftforum.net/topic/371610-hans-lemursons-thread-of-links/
Look here to find links to my inventions, creations, and my Youtube channel featuring Amazing Creations of Mine (Redstone engineering FTW!!!) and charming Music-Videos about clones. I also made "Minecraft in Minecraft" (2D platformer/building game). I'm currently trying to make a computer.
Just a question on how RAM works. In your case if I understand correctly you have 15 bytes that can be read as A or B. Is it better to have a A and B joined into one memory type thing or to have them as separate areas all together where they share no relation?
for example, your 15 bytes of memory with the dual reading thing or 30 bytes of memory with A coming from 1 set of 15 bytes and B from the other. I hope you understand what I'm talking about.
Rollback Post to RevisionRollBack
Redstone FTW. Minecraft in Minecraft, you jelly Inception?
Have you ever wanted to punch trees IRL, look no further you answer lies Here
Just a question on how RAM works. In your case if I understand correctly you have 15 bytes that can be read as A or B. Is it better to have a A and B joined into one memory type thing or to have them as separate areas all together where they share no relation?
for example, your 15 bytes of memory with the dual reading thing or 30 bytes of memory with A coming from 1 set of 15 bytes and B from the other. I hope you understand what I'm talking about.
The Memory I have wired up to my CPU is Dual-Read. Address1 can be used as the A-input or the B-input, or even as both A and B. All 15 addresses can be saved to and read from as the A or B inputs for the ALU. This means that any data that changes to the data at one address immediately(4 tick delay) impacts the data that is accessed from that address.
If I had designed this with "Single-Read Memory", then my CPU cycle would first access Address1 and save that in a Register for the A-input, then access Address2 and save that in a Register for the B-input.
The reason I have 15 Addresses instead of 16 is that I decided I'd reserve Address0 for storing the number 0. Some operations that my ALU performs require that one of the inputs be 0, and also 0 is a really handy number to have around.
Rollback Post to RevisionRollBack
Hans Lemurson's Thread of Links:http://www.minecraftforum.net/topic/371610-hans-lemursons-thread-of-links/
Look here to find links to my inventions, creations, and my Youtube channel featuring Amazing Creations of Mine (Redstone engineering FTW!!!) and charming Music-Videos about clones. I also made "Minecraft in Minecraft" (2D platformer/building game). I'm currently trying to make a computer.
The Memory I have wired up to my CPU is Dual-Read. Address1 can be used as the A-input or the B-input, or even as both A and B. All 15 addresses can be saved to and read from as the A or B inputs for the ALU. This means that any data that changes to the data at one address immediately(4 tick delay) impacts the data that is accessed from that address.
If I had designed this with "Single-Read Memory", then my CPU cycle would first access Address1 and save that in a Register for the A-input, then access Address2 and save that in a Register for the B-input.
The reason I have 15 Addresses instead of 16 is that I decided I'd reserve Address0 for storing the number 0. Some operations that my ALU performs require that one of the inputs be 0, and also 0 is a really handy number to have around.
That kind of answers my question, but if A and B share no connection. If you called location 3 from A you get (65) for example. In yours when you call location 3 for B you again would get (65). Now what I'm saying in my ideaish thing is if you called location 3 on B you could get (73). So location 3 on A != B. When you store data you would also have to choose between A's memory or B's. (A and B refer to inputs in the ALU, so B can not be sent in as an A value or vice-versa)
I was wondering for my project if there was any sense in separating the two to in turn double storage, but it seems to add a layer of complexion. Does my approach relate to anything in a real computer or is just a rather impractical idea (mostly because I have never seen anyone do it yet)?
That sounds very impractical. To do that you would need to have basically twice as much RAM but each part with only half the functionality of regular RAM.
That kind of answers my question, but if A and B share no connection. If you called location 3 from A you get (65) for example. In yours when you call location 3 for B you again would get (65). Now what I'm saying in my ideaish thing is if you called location 3 on B you could get (73). So location 3 on A != B. When you store data you would also have to choose between A's memory or B's. (A and B refer to inputs in the ALU, so B can not be sent in as an A value or vice-versa)
I was wondering for my project if there was any sense in separating the two to in turn double storage, but it seems to add a layer of complexion. Does my approach relate to anything in a real computer or is just a rather impractical idea (mostly because I have never seen anyone do it yet)?
What Kamil said is right, there'd be no purpose. It actually takes a fair amount of engineering work to achieve the "unified memory" in the first place. Having A and B draw from the same source is the entire point, and it's much more flexible this way.
You could theoretically have a memory system with say 16 addresses, 8 of which belong to A and 8 of which belong to B, and A takes from addresses 0XXX and B takes from 1XXX. You could do that, and that's probably what your system would end up being like. Again, however, I can't see any benefit in doing this.
The purpose of the "A and B draw from the same source" system is to allow a setup whereby memory Addresses are functionally equivalent to Variables.
I have a question, why don't you do this big project in an SSP world with WE or make your own server with WE? Cause I'd imagine with all that redstone, there's lag! AND, how would you ever get your work if you don't have the world? Unless that world saver mod updated...
I don't do this in single-player because it's more fun to build in a multiplayer server (although a little less efficient since I get distracted looking at people's creations and giving advice). The Redstone Development Foundation's build server runs world-edit plugins and so has all the functionality I need. In fact, I like using the WE plugin on the RDF server since I don't have to bother with installing and updating mods on my own installation. I have a 256x256 plot all to my own to build what I please, and have not had any major problems with Lag, except when somebody is running fairly complicated hardware. At any rate, most of the time is spent in construction rather than actual operation, so projects rarely interfere in terms of server load. It's a pretty solid server, too.
Does that answer your questions?
Rollback Post to RevisionRollBack
Hans Lemurson's Thread of Links:http://www.minecraftforum.net/topic/371610-hans-lemursons-thread-of-links/
Look here to find links to my inventions, creations, and my Youtube channel featuring Amazing Creations of Mine (Redstone engineering FTW!!!) and charming Music-Videos about clones. I also made "Minecraft in Minecraft" (2D platformer/building game). I'm currently trying to make a computer.
After thinking about it I basically came to the same conclusion as you did. It is rather pointless, so i just am making B receive the same data as A therefore basically making dual read. It seems inefficient, but I see no way to make my memory dual read from one cell.
Just another smallish question. So in 1 clock cycle in a computer does it have to Read, process in the ALU, then store or just one of those? also with clock speed, it is the measured by the total delay of all the repeaters hooked up in the circle? so in yours for instance, every 25 ticks a pulse fires an update.
Rollback Post to RevisionRollBack
Redstone FTW. Minecraft in Minecraft, you jelly Inception?
Have you ever wanted to punch trees IRL, look no further you answer lies Here
Thanks! If you want to get good with redstone, the best way is to just try building things to get a feel for how the connections work. After that, try reading about the various logic gates and try to make an AND gate. After that, think up simple projects to do and then complete them. Focus on what you want the function of your machine to be, and then once you have a clear idea of your goal it's easier to work towards it than if you just place blocks randomly.
After thinking about it I basically came to the same conclusion as you did. It is rather pointless, so i just am making B receive the same data as A therefore basically making dual read. It seems inefficient, but I see no way to make my memory dual read from one cell.
Just another smallish question. So in 1 clock cycle in a computer does it have to Read, process in the ALU, then store or just one of those? also with clock speed, it is the measured by the total delay of all the repeaters hooked up in the circle? so in yours for instance, every 25 ticks a pulse fires an update.
The CPU Cycle is basically as follows:
1. Get Instructions
2. Load Inputs
3. Number-Crunch
4. Save Answer
There are a number of ways the "Load Inputs" phase can work.
On my system with "Dual Read" memory, where each memory cell has 2 outputs, "Load Inputs" is a single action where you simply select the address to get A and B from at the same time.
On other systems with conventional "Single-Read" memory, you have to load A and B separately, making it a 2-step process and requiring intermediate registers. Single-read memory is WAY more compact than Dual-Read, which results in faster read-times. It's roughly twice as fast, but since you have to load 2 values it balances out.
There are also "Accumulator" architectures where you only ever load the A value. The result from the previous operation is automatically loaded into B. This makes it super-efficient for adding lists of numbers, and simplifies the memory control interface, although at the cost of some flexibility. (By "less flexibility" I mean that it will often take multiple cycles to do operations that other systems can do in a single cycle, although an Accumulator cpu-cycle is often quicker over all).
Actually part of it, one thing I want to know is.. how will you get the computer once its done? Will you use the world downloader mod, or does the RDF hand out schematics if people need their machines?
Ah, good question. The RDF server is set up so that you can save world-edit schematics to a Dropbox folder. I had taken this feature for granted and forgot to mention it, but you're right that it could present a serious "loss of ownership" of your creations if you couldn't export them somehow, since the world-save never rests on your computer.
Rollback Post to RevisionRollBack
Hans Lemurson's Thread of Links:http://www.minecraftforum.net/topic/371610-hans-lemursons-thread-of-links/
Look here to find links to my inventions, creations, and my Youtube channel featuring Amazing Creations of Mine (Redstone engineering FTW!!!) and charming Music-Videos about clones. I also made "Minecraft in Minecraft" (2D platformer/building game). I'm currently trying to make a computer.
Ok, I've now made a video about how the Program Counter device will work:
Enjoy it responsibly!
Do you think it's a useful enough device on its own that it should get its own thread, or should it remain under the auspices of my "Computer Project"?
Hans Lemurson's Thread of Links:http://www.minecraftforum.net/topic/371610-hans-lemursons-thread-of-links/
Look here to find links to my inventions, creations, and my Youtube channel featuring Amazing Creations of Mine (Redstone engineering FTW!!!) and charming Music-Videos about clones. I also made "Minecraft in Minecraft" (2D platformer/building game). I'm currently trying to make a computer.
Whether or not in another thread, this one already has a bookmark because of the ALU :wink.gif:
A question about that: Will it allow multi-byte calculations? Your "true" output resembles a "zero" flag, but is there a way to access the final carry of the adder similar to "carry" and "overflow" flags in a status register?
Thanks for the compliment! The idea of using those memory cells with 2 inputs came from the RDF member Invalid01, but I took that design and ran with it, making it Synchronous, half the size, and twice as fast.
I built my ALU with a flag for the Cout line, so the wiring is there to do multi-byte addition, but I never went further than that to make it an actual function, since it was going to be a lot more complicated than I had first thought. If I did implement that, I'd probably do it by using a Conditional Branch which detects if there was a Cout or not, and then direct the next operation to be A+B+1 instead of A+B. I'd have to think about it a bit more, since it will probably result in me having to expand my function-space beyond 4 bits.
Yea, that's awesome. I'll prolly add this to my circuit collection thread as a binary counter. Do you mind if I make a separate video of it for consistency? I can technically just link to yours, but I already have a couple that follow a specific pattern.
Go for it. My video is 18 minutes long, so you might be able to make yours more concise.
Rollback Post to RevisionRollBack
Hans Lemurson's Thread of Links:http://www.minecraftforum.net/topic/371610-hans-lemursons-thread-of-links/
Look here to find links to my inventions, creations, and my Youtube channel featuring Amazing Creations of Mine (Redstone engineering FTW!!!) and charming Music-Videos about clones. I also made "Minecraft in Minecraft" (2D platformer/building game). I'm currently trying to make a computer.
So this computer is going to be like an 8 bit calculator?
It's already an 8-bit calculator. That's what the ALU is. The challenge is in turning it into a device which can execute the instructions of a complex program.
Rollback Post to RevisionRollBack
Hans Lemurson's Thread of Links:http://www.minecraftforum.net/topic/371610-hans-lemursons-thread-of-links/
Look here to find links to my inventions, creations, and my Youtube channel featuring Amazing Creations of Mine (Redstone engineering FTW!!!) and charming Music-Videos about clones. I also made "Minecraft in Minecraft" (2D platformer/building game). I'm currently trying to make a computer.
Is there a need for distinguishing A+B and A+B+1 in the opcode? If you can read and write flags they can turn into A+B+carry flag - though then you'd have to manually set those flags in the program, might be more trouble than it's worth.
To access the flags you could use memory mapping: spend one of your available addresses for a status register (maybe another for direct access to the program counter).
I have A+B+1 as a separate function in the opcodes because I wanted the ability to "increment" in a single command. This is usually done as the "Add Immediate" operation in most real CPUs, but I don't have the circuitry set up to do that well, so I thought that the ability to Add 1 (or subtract 1) in a single command should suffice for when I'm doing incremented loops.
I'll think about your suggestions for multi-byte arithmetic, but I don't plan on incorporating that functionality into this machine. My next computer will be 16 bits, which will largely do away with the need for multi-word addition, since I can't imagine why anybody would ever want to even conceive of a number larger than 32767. My understanding is that is the point at which numbers cease to exist.
Hans Lemurson's Thread of Links:http://www.minecraftforum.net/topic/371610-hans-lemursons-thread-of-links/
Look here to find links to my inventions, creations, and my Youtube channel featuring Amazing Creations of Mine (Redstone engineering FTW!!!) and charming Music-Videos about clones. I also made "Minecraft in Minecraft" (2D platformer/building game). I'm currently trying to make a computer.
The CPU Cycle is basically as follows:
1. Get Instructions
2. Load Inputs
3. Number-Crunch
4. Save Answer
There are a number of ways the "Load Inputs" phase can work.
On my system with "Dual Read" memory, where each memory cell has 2 outputs, "Load Inputs" is a single action where you simply select the address to get A and B from at the same time.
On other systems with conventional "Single-Read" memory, you have to load A and B separately, making it a 2-step process and requiring intermediate registers. Single-read memory is WAY more compact than Dual-Read, which results in faster read-times. It's roughly twice as fast, but since you have to load 2 values it balances out.
There are also "Accumulator" architectures where you only ever load the A value. The result from the previous operation is automatically loaded into B. This makes it super-efficient for adding lists of numbers, and simplifies the memory control interface, although at the cost of some flexibility. (By "less flexibility" I mean that it will often take multiple cycles to do operations that other systems can do in a single cycle, although an Accumulator cpu-cycle is often quicker over all).
with each one of those steps listed, wouldn't it be better to make a longer clock, but subdivide it into the max times of each section. I assume each one of the four steps you listed does not take the whole 25 ticks, so couldn't you speed it up by making the clock cycle faster on commands that take less time. Or you could just put all 4 steps on 1 RAM line to make it more compact (you do lose a bit of flexibility though).
Rollback Post to RevisionRollBack
Redstone FTW. Minecraft in Minecraft, you jelly Inception?
Have you ever wanted to punch trees IRL, look no further you answer lies Here
JDawgMillenium:
Ohoho, this is not nearly similar to today's computers.
Firstly, redstone wire behavior is not very similar to true electronics behavior aside from the fact it is binary and can use a few components of real-world electronics.
Secondly, with our current redstone technology we can create computers with a bit less than the processing power of a Macintosh, and the speed of an Apple ][.
with each one of those steps listed, wouldn't it be better to make a longer clock, but subdivide it into the max times of each section. I assume each one of the four steps you listed does not take the whole 25 ticks, so couldn't you speed it up by making the clock cycle faster on commands that take less time. Or you could just put all 4 steps on 1 RAM line to make it more compact (you do lose a bit of flexibility though).
25 ticks would represent the time it takes to get through all the steps of one CPU cycle. Every step in the CPU cycle has to be timed so that the previous step has completed before the next one begins, so delay in any one area increases the total time needed for a complete cycle.
The different clock-triggered components need to be triggered at different times in the cycle. You can either do this by having one output from the clock go to each stage, or by having a single clock-output and put different delays on the wires for each section.
My CPU will only have 2 components triggered by the Clock: "Write to Memory" and "Next Instruction" (which I might even be able to at the same time). The reason I can get away with so few clocked components is because I am using Dual-Read Memory which means my A and B inputs don't have to take turns.
Were I using single-Read, then I'd have to calculate what the minimum amount of time is that's needed between loading InputA and loading InputB, and both of those would be attached to the clock.
It would be (approximately):
-Load New Instruction (6 ticks) [contains info for A's address, and address for the Output]
-Load value A (2 ticks)
-Change to B's Address (4 ticks)
-Load value B (2 ticks)
-Wait for ALU to give correct answer (8 ticks) [this is not clock-triggered, you just have to wait]
-Write ALU answer to Memory (2 ticks)
My made-up numbers add up to about a 24 tick CPU cycle. Each action will happen in a slightly different part of that cycle, and the waiting times are based on how long it takes until you're ready to execute the next step. It's useless to "Load B value" until you're actually reading the correct number from Memory.
I have had Minecraft for a few months, but I am new to this section of the forums. I am just completely surprised. I can't even make a PISTON DOOR! It makes me ask: is this redstone design similar or exactly the same as the wiring for an average computer?
The Relationships between the different parts (ALU, memory, etc.) are the same as in an electronic computer, but the behavior of Redstone itself is quite different. However, once you can figure out how to make Logic Gates out of any medium, then it's all the same from there.
In short, the difference between an Electronic Computer and a Redstone Computer are in how the Logic-Gates are constructed. Once you're at the level where you're dealing with the Arrangement of Logic Gates, then all Computers are the same.
Rollback Post to RevisionRollBack
Hans Lemurson's Thread of Links:http://www.minecraftforum.net/topic/371610-hans-lemursons-thread-of-links/
Look here to find links to my inventions, creations, and my Youtube channel featuring Amazing Creations of Mine (Redstone engineering FTW!!!) and charming Music-Videos about clones. I also made "Minecraft in Minecraft" (2D platformer/building game). I'm currently trying to make a computer.
25 ticks would represent the time it takes to get through all the steps of one CPU cycle. Every step in the CPU cycle has to be timed so that the previous step has completed before the next one begins, so delay in any one area increases the total time needed for a complete cycle.
The different clock-triggered components need to be triggered at different times in the cycle. You can either do this by having one output from the clock go to each stage, or by having a single clock-output and put different delays on the wires for each section.
My CPU will only have 2 components triggered by the Clock: "Write to Memory" and "Next Instruction" (which I might even be able to at the same time). The reason I can get away with so few clocked components is because I am using Dual-Read Memory which means my A and B inputs don't have to take turns.
Were I using single-Read, then I'd have to calculate what the minimum amount of time is that's needed between loading InputA and loading InputB, and both of those would be attached to the clock.
It would be (approximately):
-Load New Instruction (6 ticks) [contains info for A's address, and address for the Output]
-Load value A (2 ticks)
-Change to B's Address (4 ticks)
-Load value B (2 ticks)
-Wait for ALU to give correct answer (8 ticks) [this is not clock-triggered, you just have to wait]
-Write ALU answer to Memory (2 ticks)
My made-up numbers add up to about a 24 tick CPU cycle. Each action will happen in a slightly different part of that cycle, and the waiting times are based on how long it takes until you're ready to execute the next step. It's useless to "Load B value" until you're actually reading the correct number from Memory.
That answers that question, but raises another. With your ROM you say it is 16 bit. how do you fit all that info into 16 bits, from what i can tell you don't have enough there. here is what i believe you have...
(4bit) A address
(4bit) B address
(4bit) location to store
now here is where i don't how it is divided up
(4bit) OP code with branching?
(5bit) location to branch to? or do you get it from a number in a register?
Rollback Post to RevisionRollBack
Redstone FTW. Minecraft in Minecraft, you jelly Inception?
Have you ever wanted to punch trees IRL, look no further you answer lies Here
I meant to record it today, but procrastinated and got distracted helping people on the RDF server. I did make a nice demonstration unit of it and planned out how I would record the video, but didn't actually do anything. Perfectionism hurts productivity.
Look here to find links to my inventions, creations, and my Youtube channel featuring Amazing Creations of Mine (Redstone engineering FTW!!!) and charming Music-Videos about clones. I also made "Minecraft in Minecraft" (2D platformer/building game). I'm currently trying to make a computer.
for example, your 15 bytes of memory with the dual reading thing or 30 bytes of memory with A coming from 1 set of 15 bytes and B from the other. I hope you understand what I'm talking about.
Have you ever wanted to punch trees IRL, look no further you answer lies Here
Yep! I should probably get back to working on it at some point...
The Memory I have wired up to my CPU is Dual-Read. Address1 can be used as the A-input or the B-input, or even as both A and B. All 15 addresses can be saved to and read from as the A or B inputs for the ALU. This means that any data that changes to the data at one address immediately(4 tick delay) impacts the data that is accessed from that address.
If I had designed this with "Single-Read Memory", then my CPU cycle would first access Address1 and save that in a Register for the A-input, then access Address2 and save that in a Register for the B-input.
The reason I have 15 Addresses instead of 16 is that I decided I'd reserve Address0 for storing the number 0. Some operations that my ALU performs require that one of the inputs be 0, and also 0 is a really handy number to have around.
Look here to find links to my inventions, creations, and my Youtube channel featuring Amazing Creations of Mine (Redstone engineering FTW!!!) and charming Music-Videos about clones. I also made "Minecraft in Minecraft" (2D platformer/building game). I'm currently trying to make a computer.
That kind of answers my question, but if A and B share no connection. If you called location 3 from A you get (65) for example. In yours when you call location 3 for B you again would get (65). Now what I'm saying in my ideaish thing is if you called location 3 on B you could get (73). So location 3 on A != B. When you store data you would also have to choose between A's memory or B's. (A and B refer to inputs in the ALU, so B can not be sent in as an A value or vice-versa)
I was wondering for my project if there was any sense in separating the two to in turn double storage, but it seems to add a layer of complexion. Does my approach relate to anything in a real computer or is just a rather impractical idea (mostly because I have never seen anyone do it yet)?
Have you ever wanted to punch trees IRL, look no further you answer lies Here
What Kamil said is right, there'd be no purpose. It actually takes a fair amount of engineering work to achieve the "unified memory" in the first place. Having A and B draw from the same source is the entire point, and it's much more flexible this way.
You could theoretically have a memory system with say 16 addresses, 8 of which belong to A and 8 of which belong to B, and A takes from addresses 0XXX and B takes from 1XXX. You could do that, and that's probably what your system would end up being like. Again, however, I can't see any benefit in doing this.
The purpose of the "A and B draw from the same source" system is to allow a setup whereby memory Addresses are functionally equivalent to Variables.
I don't do this in single-player because it's more fun to build in a multiplayer server (although a little less efficient since I get distracted looking at people's creations and giving advice). The Redstone Development Foundation's build server runs world-edit plugins and so has all the functionality I need. In fact, I like using the WE plugin on the RDF server since I don't have to bother with installing and updating mods on my own installation. I have a 256x256 plot all to my own to build what I please, and have not had any major problems with Lag, except when somebody is running fairly complicated hardware. At any rate, most of the time is spent in construction rather than actual operation, so projects rarely interfere in terms of server load. It's a pretty solid server, too.
Does that answer your questions?
Look here to find links to my inventions, creations, and my Youtube channel featuring Amazing Creations of Mine (Redstone engineering FTW!!!) and charming Music-Videos about clones. I also made "Minecraft in Minecraft" (2D platformer/building game). I'm currently trying to make a computer.
Just another smallish question. So in 1 clock cycle in a computer does it have to Read, process in the ALU, then store or just one of those? also with clock speed, it is the measured by the total delay of all the repeaters hooked up in the circle? so in yours for instance, every 25 ticks a pulse fires an update.
Have you ever wanted to punch trees IRL, look no further you answer lies Here
Thanks! If you want to get good with redstone, the best way is to just try building things to get a feel for how the connections work. After that, try reading about the various logic gates and try to make an AND gate. After that, think up simple projects to do and then complete them. Focus on what you want the function of your machine to be, and then once you have a clear idea of your goal it's easier to work towards it than if you just place blocks randomly.
The CPU Cycle is basically as follows:
1. Get Instructions
2. Load Inputs
3. Number-Crunch
4. Save Answer
There are a number of ways the "Load Inputs" phase can work.
On my system with "Dual Read" memory, where each memory cell has 2 outputs, "Load Inputs" is a single action where you simply select the address to get A and B from at the same time.
On other systems with conventional "Single-Read" memory, you have to load A and B separately, making it a 2-step process and requiring intermediate registers. Single-read memory is WAY more compact than Dual-Read, which results in faster read-times. It's roughly twice as fast, but since you have to load 2 values it balances out.
There are also "Accumulator" architectures where you only ever load the A value. The result from the previous operation is automatically loaded into B. This makes it super-efficient for adding lists of numbers, and simplifies the memory control interface, although at the cost of some flexibility. (By "less flexibility" I mean that it will often take multiple cycles to do operations that other systems can do in a single cycle, although an Accumulator cpu-cycle is often quicker over all).
Ah, good question. The RDF server is set up so that you can save world-edit schematics to a Dropbox folder. I had taken this feature for granted and forgot to mention it, but you're right that it could present a serious "loss of ownership" of your creations if you couldn't export them somehow, since the world-save never rests on your computer.
Look here to find links to my inventions, creations, and my Youtube channel featuring Amazing Creations of Mine (Redstone engineering FTW!!!) and charming Music-Videos about clones. I also made "Minecraft in Minecraft" (2D platformer/building game). I'm currently trying to make a computer.
Enjoy it responsibly!
Do you think it's a useful enough device on its own that it should get its own thread, or should it remain under the auspices of my "Computer Project"?
Look here to find links to my inventions, creations, and my Youtube channel featuring Amazing Creations of Mine (Redstone engineering FTW!!!) and charming Music-Videos about clones. I also made "Minecraft in Minecraft" (2D platformer/building game). I'm currently trying to make a computer.
Thanks for the compliment! The idea of using those memory cells with 2 inputs came from the RDF member Invalid01, but I took that design and ran with it, making it Synchronous, half the size, and twice as fast.
I built my ALU with a flag for the Cout line, so the wiring is there to do multi-byte addition, but I never went further than that to make it an actual function, since it was going to be a lot more complicated than I had first thought. If I did implement that, I'd probably do it by using a Conditional Branch which detects if there was a Cout or not, and then direct the next operation to be A+B+1 instead of A+B. I'd have to think about it a bit more, since it will probably result in me having to expand my function-space beyond 4 bits.
Go for it. My video is 18 minutes long, so you might be able to make yours more concise.
Look here to find links to my inventions, creations, and my Youtube channel featuring Amazing Creations of Mine (Redstone engineering FTW!!!) and charming Music-Videos about clones. I also made "Minecraft in Minecraft" (2D platformer/building game). I'm currently trying to make a computer.
It's already an 8-bit calculator. That's what the ALU is. The challenge is in turning it into a device which can execute the instructions of a complex program.
Look here to find links to my inventions, creations, and my Youtube channel featuring Amazing Creations of Mine (Redstone engineering FTW!!!) and charming Music-Videos about clones. I also made "Minecraft in Minecraft" (2D platformer/building game). I'm currently trying to make a computer.
I have A+B+1 as a separate function in the opcodes because I wanted the ability to "increment" in a single command. This is usually done as the "Add Immediate" operation in most real CPUs, but I don't have the circuitry set up to do that well, so I thought that the ability to Add 1 (or subtract 1) in a single command should suffice for when I'm doing incremented loops.
I'll think about your suggestions for multi-byte arithmetic, but I don't plan on incorporating that functionality into this machine. My next computer will be 16 bits, which will largely do away with the need for multi-word addition, since I can't imagine why anybody would ever want to even conceive of a number larger than 32767. My understanding is that is the point at which numbers cease to exist.
Oh, and I've made a new separate thread for my Program Counter: http://www.minecraftforum.net/topic/1064957-high-quality-components-branching-program-counter/
Look here to find links to my inventions, creations, and my Youtube channel featuring Amazing Creations of Mine (Redstone engineering FTW!!!) and charming Music-Videos about clones. I also made "Minecraft in Minecraft" (2D platformer/building game). I'm currently trying to make a computer.
with each one of those steps listed, wouldn't it be better to make a longer clock, but subdivide it into the max times of each section. I assume each one of the four steps you listed does not take the whole 25 ticks, so couldn't you speed it up by making the clock cycle faster on commands that take less time. Or you could just put all 4 steps on 1 RAM line to make it more compact (you do lose a bit of flexibility though).
Have you ever wanted to punch trees IRL, look no further you answer lies Here
Ohoho, this is not nearly similar to today's computers.
Firstly, redstone wire behavior is not very similar to true electronics behavior aside from the fact it is binary and can use a few components of real-world electronics.
Secondly, with our current redstone technology we can create computers with a bit less than the processing power of a Macintosh, and the speed of an Apple ][.
25 ticks would represent the time it takes to get through all the steps of one CPU cycle. Every step in the CPU cycle has to be timed so that the previous step has completed before the next one begins, so delay in any one area increases the total time needed for a complete cycle.
The different clock-triggered components need to be triggered at different times in the cycle. You can either do this by having one output from the clock go to each stage, or by having a single clock-output and put different delays on the wires for each section.
My CPU will only have 2 components triggered by the Clock: "Write to Memory" and "Next Instruction" (which I might even be able to at the same time). The reason I can get away with so few clocked components is because I am using Dual-Read Memory which means my A and B inputs don't have to take turns.
Were I using single-Read, then I'd have to calculate what the minimum amount of time is that's needed between loading InputA and loading InputB, and both of those would be attached to the clock.
It would be (approximately):
-Load New Instruction (6 ticks) [contains info for A's address, and address for the Output]
-Load value A (2 ticks)
-Change to B's Address (4 ticks)
-Load value B (2 ticks)
-Wait for ALU to give correct answer (8 ticks) [this is not clock-triggered, you just have to wait]
-Write ALU answer to Memory (2 ticks)
My made-up numbers add up to about a 24 tick CPU cycle. Each action will happen in a slightly different part of that cycle, and the waiting times are based on how long it takes until you're ready to execute the next step. It's useless to "Load B value" until you're actually reading the correct number from Memory.
The Relationships between the different parts (ALU, memory, etc.) are the same as in an electronic computer, but the behavior of Redstone itself is quite different. However, once you can figure out how to make Logic Gates out of any medium, then it's all the same from there.
In short, the difference between an Electronic Computer and a Redstone Computer are in how the Logic-Gates are constructed. Once you're at the level where you're dealing with the Arrangement of Logic Gates, then all Computers are the same.
Look here to find links to my inventions, creations, and my Youtube channel featuring Amazing Creations of Mine (Redstone engineering FTW!!!) and charming Music-Videos about clones. I also made "Minecraft in Minecraft" (2D platformer/building game). I'm currently trying to make a computer.
That answers that question, but raises another. With your ROM you say it is 16 bit. how do you fit all that info into 16 bits, from what i can tell you don't have enough there. here is what i believe you have...
(4bit) A address
(4bit) B address
(4bit) location to store
now here is where i don't how it is divided up
(4bit) OP code with branching?
(5bit) location to branch to? or do you get it from a number in a register?
Have you ever wanted to punch trees IRL, look no further you answer lies Here