It's been a while since I've done anything impressive or educational, so I've started something up again. For the past few months I have been working on designing my very own Redstone Computer. Although not as visually impressive as my 2D "Minecraft in Minecraft" project, it is much more complicated to build.
You see, MI-in-MC really only qualifies as a highly-specialized single-purpose processor. I want to build a General Purpose Computer, one which is set up to perform any task I desire.
A Computer represents a combination of 3 things:
-Math
-Memory
-Instructions
Math is what the ALU does. It's the number-cruncher; two numbers enter ONLY ONE LEAVES!!! All the ALU can do is select what it does to the numbers, but has no control over what numbers it actually receives.
Memory is used to save the answers from previous math-problems that the ALU has done, and provide it with new numbers for future problems. Memory is VITALLY IMPORTANT, since if the answer is never saved to memory, then it might as well never happened at all.
Instructions are the trickiest to deal with, since they use some memory of their own, but their function is quite different. Instructions tell the ALU which function to perform, and tell the Memory what numbers to send, and what to do with the answer. A collection of multiple Instructions is known as a Program, which is stored in the aptly named "Program memory". The "Program Counter" has a fairly simple task: When Instruction-1 has been completed, call for Instruction-2 to be sent. This allows you to run through all of the instructions in your program as a list. But a simple "once-through" pass isn't all that useful. It's good for things like adding 13 numbers together, but that's scarcely more than an "Automatic Calculator". If you want to do a group of instructions more than once, or to skip certain instructions, then you're going to need something called "Branching".
Branching is the name for instructions which can change the path that is taken through the program. Specifically, they are the "Conditionals"(e.g. "If A==B jump to Line 3"). GOTO I don't think is considered "branching" since it has only one possible outcome. The name Branching refers to how an IF-statement creates a "fork in the road" in the way a program flows; two possibilities for what could come next. The path branches. This is tricky to implement, since no longer does the Program have total control over the computer. It now has to respond to the Data being processed, and it's mode of execution must be changed. Without branching, all your Program-Counter has to do is keep counting +1, +1, +1, to get to the next line. But with Branching, the instruction that comes after Line7 isn't necessarily Line8. You've got to add in the ability to Jump to ANY line in the program.
Now that I've given a brief overview of what's involved in computing, I bet you'd like to see an overview of my hardware.
Here's a prototype of what I'll use for my Program Memory. The program it's holding is just the particular loop it will perform, but the principle can be applied to complex programs.
Here's the CPU being operated Manually. Program Memory will automate everything I was doing here.
Or if these blasted "cinematograms" have got you fed up, try Pictures of my Computer
(click spoiler to see the pictures)
This shows a view of the control interface I've set up to operate the ALU (for demonstration purposes)
Here we see the Inputs that go into the ALU for calculation, and the result that is Output. It is currently doing in binary 10 + 7 = 17
This picture shows how the ALU gets told how to do functions. Currently "Subtraction" is selected, and this lights up two wires which tell the ALU how to tweak its internals to do the desired function. Every function has a unique "fingerprint" of tweaks that need to be done to make it happen, and this stores a table of 16 useful combinations.
Down below is the partially completed CPU, which currently consists of the ALU to do math, and the Memory to store the answers. Top-center is the ALU, and sticking off it is the function-decoder. The blue/pink grid is the Memory Array which dwarfs the rest of the apparatus. That thing made me glad for copy/paste abilities, since that's 120 identical memory cells.
Here's a look at the innards of the ALU. You're standing on the "Carry Propagation Line" and can see the pistons involved with different functions and the output below.
Gaze in wonder at the regular grid that is memory. Each cell has a 4x4 footprint. That's the price for "Dual-Read" memory that lets me grab both values for the ALU input at the same time. Pretty snazzy.
* (note: this is an estimate, maximum error-free speed has yet to be determined)
** (16 address slots available. In the future, memory might decrease as registers are replaced by Input/Output systems)
*** (16 instructions is enough for an interesting program, but nothing too complicated. I'll need more for Software MC-in-MC)
Project Status:
ALU 100% (http://www.planetmin...g-4-bit-opcode/)
Function Decoder 100%
CPU Registers 100%
Instruction-Type Selection 100%
Program Memory 100%
Program Counter 90%
Branching Circuitry 75%
User Input 5%
Human-readable Output -5% (lolwut?)
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.
My computer won't be in any state to accept keyboard inputs for a LONG time, and when it does I'll design my own interface. I am a Redstone Expert. I don't mean to belittle you, I just don't need any assistance.
I was planning on adding a video that I recently recorded as well, but am having issues with the codec, so that'll have to wait for a bit.
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.
I think what everyone wants to know is: Will this lead to MC-in-MC 2? =P
Yes.
The ultimate demonstration of my computer's power will be in making the first Redstone Computer-Game. Not a gaming machine but a computer that is running a piece of software which is the game. I'll need to construct a custom interface for the computer in order to be able to display the game in a timely manner (nobody likes 15-second refresh cycles, and dots that don't blink) so that will blur the line a bit, but all of the responses to control-inputs, movement and collision-detection will be software-based. This won't be MC-in-MC 2, since it will be an exact clone of the original simply released on a different system. Moving from dedicated arcade machines to a personal computer (the size of a small village) near you! MC-in-MC 2 will feature an 8-color display invented by SethBling.
I'll try to get the video of the ALU demonstration up some time today, and after that will be an older (soundless) video I made demonstrating a prototype of Branch-Capable Program Memory (once I get the text-notes written up to explain what's happening).
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 ultimate demonstration of my computer's power will be in making the first Redstone Computer-Game. Not a gaming machine but a computer that is running a piece of software which is the game. I'll need to construct a custom interface for the computer in order to be able to display the game in a timely manner (nobody likes 15-second refresh cycles, and dots that don't blink) so that will blur the line a bit, but all of the responses to control-inputs, movement and collision-detection will be software-based. This won't be MC-in-MC 2, since it will be an exact clone of the original simply released on a different system. Moving from dedicated arcade machines to a personal computer (the size of a small village) near you! MC-in-MC 2 will feature an 8-color display invented by SethBling.
I'll try to get the video of the ALU demonstration up some time today, and after that will be an older (soundless) video I made demonstrating a prototype of Branch-Capable Program Memory (once I get the text-notes written up to explain what's happening).
Could you link this please? It sounds awesome, but I've got no clue how it would work without seeing the concept.
Clock speed?
Amount of RAM?
User input?
Amount of ROM?
By the way, it's good to see a computer with a comparator. What does it do with the results?
I have been developing a computer myself with an unusual architecture, by the way. I wonder if I will ever finish it. Man, I haven't even touched the RSGC2 for half a year.
I'm interested in the dual read ram you've set up. It appears from the pictures that you have 8 bytes there, if I'm seeing it right. I'd like to get a look at the addressing system you've used along with this 4x4 footprint. I recently managed to design a 4x2 horizontal footprint RAM that's surprisingly fast - but it's single read.
I've been using that display myself, it's quite versatile (though quite large in the world, and a bit laggy).
As for your computer, what interests me most is the dual-read memory. How do you do that without a lot of torch towers (I did this in my last cpu project, but it was quite slow :/).
Sounds very nice, but reading some of your previous posts, about your 8-color display. That is going to be very big, you build this on a server I am guessing??
The 8-color display is not for this machine. This one is a general-purpose computer. I am building this on the Redstone Development Foundation server, and so have a 256x256 plot of flat ground all to myself!
Clock speed?
Amount of RAM?
User input?
Amount of ROM?
By the way, it's good to see a computer with a comparator. What does it do with the results?
I have been developing a computer myself with an unusual architecture, by the way. I wonder if I will ever finish it. Man, I haven't even touched the RSGC2 for half a year.
Clock Speed: I'm aiming for a clock-speed of 500 milliHertz (20 ticks), but based on some preliminary tests with a program counter, I may need to reduce this to closer to 400 milliHertz (25 ticks). RAM: It has 15 Bytes of RAM hooked up as the CPU registers. The 16th address-slot (technically the 0th) is empty, for easy access to the number 0. User Input: I will be doing "Memory Mapped I/O" so I'll just replace some of the RAM in my register slots with wires connected to a manual input. Reading from "Address 1111" will mean that it's reading the user input. I might also set up an interface for modifying the program memory, so it can be programmed from one location instead of flying about. ROM: ROM (read-only memory) is simply a kind of memory device, not a discrete computer component. For initial tests, I might use ROM for my Program Memory, but later I intend to store the Program in write-able storage. I'll start off with just 16 instructions worth of program memory, but would like to get up to 64. The difficulty is that larger memory sizes have longer access-times and hence will slow the machine down.
Hans Lemurson!
Dear Notch, I haven't seen you around here since... Months ago.
Welcome back to the RF =P
OT:
Can't wait to see more progress on this, looks great so far!
And an 8-color display, you say? I'm very excited to see this :happy.gif:
Question, how fast do you think this computer will be able to execute simple functions?
Yeah I haven't been a frequent contributor to these forums for some time, but I felt I should start showing more awesome stuff to you guys. This project will NOT be using an 8-color display though.
I've been using that display myself [sethbling's], it's quite versatile (though quite large in the world, and a bit laggy).
As for your computer, what interests me most is the dual-read memory. How do you do that without a lot of torch towers (I did this in my last cpu project, but it was quite slow :/).
What's funny is that it DOES use torch-stacks, but it doesn't add any delays that really matter. Unless you're accessing memory frequently, it doesn't matter how long the "percolation time" is within a cell. Output1 receives changes 2 ticks after data is written, and Output2 receives it 4 ticks after. All this will happen during the "instruction-fetch" phase of the CPU cycle when the registers are sitting idle, and so is of no consequence.
There are more compact versions of Dual-Read RAM, but the one I'm using has the versatility of being able to support ANY NUMBER of outputs, so long as you're willing to accept +2 ticks of delay for each one.
I'll have a thread about my Dual-Read RAM up at some point, but for now I'm fighting with my video editing software to export a decent copy of my ALU-Demonstration Video.
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.
ROM: ROM (read-only memory) is simply a kind of memory device, not a discrete computer component. For initial tests, I might use ROM for my Program Memory, but later I intend to store the Program in write-able storage. I'll start off with just 16 instructions worth of program memory, but would like to get up to 64. The difficulty is that larger memory sizes have longer access-times and hence will slow the machine down.
Actually, I've been working to find a solution to this very problem. I've found that by banking the memory using 8 byte banks and then giving them a shared bus, I've been able to reduce the "Long" delay reaching that 16th or 32nd byte. The trade-off, of course, is a longer initial delay. Personally, I prefer this method since it's more consistent timing-wise and offers less delay in the long run.
My new RAM design offers a read speed of 6 ticks at the 16th byte minus 7 ticks (also @16th byte) for the hardware for the address decoder. I'm sure I could knock down the decoder to 6 ticks with some refinement, but not much more.
Actually, I've been working to find a solution to this very problem. I've found that by banking the memory using 8 byte banks and then giving them a shared bus, I've been able to reduce the "Long" delay reaching that 16th or 32nd byte. The trade-off, of course, is a longer initial delay. Personally, I prefer this method since it's more consistent timing-wise and offers less delay in the long run.
My new RAM design offers a read speed of 6 ticks at the 16th byte minus 7 ticks (also @16th byte) for the hardware for the address decoder. I'm sure I could knock down the decoder to 6 ticks with some refinement, but not much more.
From my experience it sounds like you've made some RAM with a 2x3 footprint. Smaller footprints help reduce the magnitude of the problem, but don't eliminate it. 3-Long RAM has a delay of +2 per 5 registers, whereas the 4-Long RAM I'm using has its +2 delay every 4 registers.
I'm using 4-Long RAM (4x4 footprint) because that's the shortest RAM available with Dual-Read capability. I've been exploring methods of using Instant-Repeaters to speed up memory access times. Memory-access times are the biggest factor in slowing down a Redstone Computer. ALU's can be made to work in 5 ticks, but data reading and instruction-fetching overwhelm that seeming speed with their delay costs.
I've actually designed some 2x2 footprint RAM which I'll also have a thread about at some point. Technically speaking, it's 2x2.2, since it needs a repeater (and some extra spacing) every 7 registers, but it's about as compact as you can get (if you don't mind using piston update glitches).
Update: I've added a summary of "branching" to the first post and computer specifications.
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.
From my experience it sounds like you've made some RAM with a 2x3 footprint. Smaller footprints help reduce the magnitude of the problem, but don't eliminate it. 3-Long RAM has a delay of +2 per 5 registers, whereas the 4-Long RAM I'm using has +2 every 4.
I'm using 4-Long RAM (4x4 footprint) because that's the shortest RAM available with Dual-Read capability. I've been exploring methods of using Instant-Repeaters to speed up memory access times. Memory-access times are the biggest factor in slowing down a Redstone Computer. ALU's can be made to work in 5 ticks, but data reading and instruction-fetching overwhelm that seeming speed with their delay costs.
I've actually designed some 2x2 footprint RAM which I'll also have a thread about at some point. Technically speaking, it's 2x2.2, since it needs a repeater (and some extra spacing) every 7 registers, but it's about as compact as you can get (if you don't mind using piston update glitches).
Update: I've added a summary of "branching" to the first post.
Actually, I'm using 4x2 footprint. Oddly enough, it *does* happen to have the piston update glitch, but it's configured in a way that if the glitch does get fixed, it *should* still operate unmodified. I hadn't intended to use the glitch when I built it but it just worked out that way.
The input/output bus contains nothing but repeaters every 15 to carry the signal, so a 16 byte bank only has a 3 tick travel time once the READ is initiated. Again, this breaks down to the delay in the addressing/READ/WRITE/CLEAR logic. I'm not really sure HOW I can make that logic any faster than it already is, but I'm sure someone far more brilliant than I will come up with something insanely simple to do it 3 times faster. In the meantime, I'll keep hammering at new designs.
I am REALLY interested to see your 2x2 footprint, that's just crazy.
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.
How could the effect of "Disable XNOR and force carry to back-propogate" possibly be difficult to understand?
No idea. It does exactly what it says! Totally intuitive to anybody who's invented this particular design of ALU. It was either that or use Right-shifting for Logic, but I added the shifter fairly late in the design, and so Back-Propagation it is!
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.
You see, MI-in-MC really only qualifies as a highly-specialized single-purpose processor. I want to build a General Purpose Computer, one which is set up to perform any task I desire.
A Computer represents a combination of 3 things:
-Math
-Memory
-Instructions
Math is what the ALU does. It's the number-cruncher; two numbers enter ONLY ONE LEAVES!!! All the ALU can do is select what it does to the numbers, but has no control over what numbers it actually receives.
Memory is used to save the answers from previous math-problems that the ALU has done, and provide it with new numbers for future problems. Memory is VITALLY IMPORTANT, since if the answer is never saved to memory, then it might as well never happened at all.
Instructions are the trickiest to deal with, since they use some memory of their own, but their function is quite different. Instructions tell the ALU which function to perform, and tell the Memory what numbers to send, and what to do with the answer. A collection of multiple Instructions is known as a Program, which is stored in the aptly named "Program memory". The "Program Counter" has a fairly simple task: When Instruction-1 has been completed, call for Instruction-2 to be sent. This allows you to run through all of the instructions in your program as a list. But a simple "once-through" pass isn't all that useful. It's good for things like adding 13 numbers together, but that's scarcely more than an "Automatic Calculator". If you want to do a group of instructions more than once, or to skip certain instructions, then you're going to need something called "Branching".
Branching is the name for instructions which can change the path that is taken through the program. Specifically, they are the "Conditionals"(e.g. "If A==B jump to Line 3"). GOTO I don't think is considered "branching" since it has only one possible outcome. The name Branching refers to how an IF-statement creates a "fork in the road" in the way a program flows; two possibilities for what could come next. The path branches. This is tricky to implement, since no longer does the Program have total control over the computer. It now has to respond to the Data being processed, and it's mode of execution must be changed. Without branching, all your Program-Counter has to do is keep counting +1, +1, +1, to get to the next line. But with Branching, the instruction that comes after Line7 isn't necessarily Line8. You've got to add in the ability to Jump to ANY line in the program.
Now that I've given a brief overview of what's involved in computing, I bet you'd like to see an overview of my hardware.
Here's a prototype of what I'll use for my Program Memory. The program it's holding is just the particular loop it will perform, but the principle can be applied to complex programs.
Here's the CPU being operated Manually. Program Memory will automate everything I was doing here.
Or if these blasted "cinematograms" have got you fed up, try Pictures of my Computer
(click spoiler to see the pictures)
This shows a view of the control interface I've set up to operate the ALU (for demonstration purposes)
Here we see the Inputs that go into the ALU for calculation, and the result that is Output. It is currently doing in binary 10 + 7 = 17
This picture shows how the ALU gets told how to do functions. Currently "Subtraction" is selected, and this lights up two wires which tell the ALU how to tweak its internals to do the desired function. Every function has a unique "fingerprint" of tweaks that need to be done to make it happen, and this stores a table of 16 useful combinations.
Down below is the partially completed CPU, which currently consists of the ALU to do math, and the Memory to store the answers. Top-center is the ALU, and sticking off it is the function-decoder. The blue/pink grid is the Memory Array which dwarfs the rest of the apparatus. That thing made me glad for copy/paste abilities, since that's 120 identical memory cells.
Here's a look at the innards of the ALU. You're standing on the "Carry Propagation Line" and can see the pistons involved with different functions and the output below.
Gaze in wonder at the regular grid that is memory. Each cell has a 4x4 footprint. That's the price for "Dual-Read" memory that lets me grab both values for the ALU input at the same time. Pretty snazzy.
Computer Specifications:
-Word Size:8 Bit
-CPU Speed: 400 milliHertz (25 tick)*
-Data Memory: 15 1-byte Registers **
-Program Memory: 16 16-bit Instructions ***
* (note: this is an estimate, maximum error-free speed has yet to be determined)
** (16 address slots available. In the future, memory might decrease as registers are replaced by Input/Output systems)
*** (16 instructions is enough for an interesting program, but nothing too complicated. I'll need more for Software MC-in-MC)
Project Status:
ALU 100% (http://www.planetmin...g-4-bit-opcode/)
Function Decoder 100%
CPU Registers 100%
Instruction-Type Selection 100%
Program Memory 100%
Program Counter 90%
Branching Circuitry 75%
User Input 5%
Human-readable Output -5% (lolwut?)
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 was planning on adding a video that I recently recorded as well, but am having issues with the codec, so that'll have to wait for a bit.
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.
Yes.
The ultimate demonstration of my computer's power will be in making the first Redstone Computer-Game. Not a gaming machine but a computer that is running a piece of software which is the game. I'll need to construct a custom interface for the computer in order to be able to display the game in a timely manner (nobody likes 15-second refresh cycles, and dots that don't blink) so that will blur the line a bit, but all of the responses to control-inputs, movement and collision-detection will be software-based. This won't be MC-in-MC 2, since it will be an exact clone of the original simply released on a different system. Moving from dedicated arcade machines to a personal computer (the size of a small village) near you! MC-in-MC 2 will feature an 8-color display invented by SethBling.
I'll try to get the video of the ALU demonstration up some time today, and after that will be an older (soundless) video I made demonstrating a prototype of Branch-Capable Program Memory (once I get the text-notes written up to explain what's happening).
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.
Could you link this please? It sounds awesome, but I've got no clue how it would work without seeing the concept.
Clock speed?
Amount of RAM?
User input?
Amount of ROM?
By the way, it's good to see a computer with a comparator. What does it do with the results?
I have been developing a computer myself with an unusual architecture, by the way. I wonder if I will ever finish it. Man, I haven't even touched the RSGC2 for half a year.
Dear Notch, I haven't seen you around here since... Months ago.
Welcome back to the RF =P
OT:
Can't wait to see more progress on this, looks great so far!
And an 8-color display, you say? I'm very excited to see this :happy.gif:
Question, how fast do you think this computer will be able to execute simple functions?
As for your computer, what interests me most is the dual-read memory. How do you do that without a lot of torch towers (I did this in my last cpu project, but it was quite slow :/).
The 8-color display is not for this machine. This one is a general-purpose computer. I am building this on the Redstone Development Foundation server, and so have a 256x256 plot of flat ground all to myself!
Thanks!
Clock Speed: I'm aiming for a clock-speed of 500 milliHertz (20 ticks), but based on some preliminary tests with a program counter, I may need to reduce this to closer to 400 milliHertz (25 ticks).
RAM: It has 15 Bytes of RAM hooked up as the CPU registers. The 16th address-slot (technically the 0th) is empty, for easy access to the number 0.
User Input: I will be doing "Memory Mapped I/O" so I'll just replace some of the RAM in my register slots with wires connected to a manual input. Reading from "Address 1111" will mean that it's reading the user input. I might also set up an interface for modifying the program memory, so it can be programmed from one location instead of flying about.
ROM: ROM (read-only memory) is simply a kind of memory device, not a discrete computer component. For initial tests, I might use ROM for my Program Memory, but later I intend to store the Program in write-able storage. I'll start off with just 16 instructions worth of program memory, but would like to get up to 64. The difficulty is that larger memory sizes have longer access-times and hence will slow the machine down.
Yeah I haven't been a frequent contributor to these forums for some time, but I felt I should start showing more awesome stuff to you guys. This project will NOT be using an 8-color display though.
What's funny is that it DOES use torch-stacks, but it doesn't add any delays that really matter. Unless you're accessing memory frequently, it doesn't matter how long the "percolation time" is within a cell. Output1 receives changes 2 ticks after data is written, and Output2 receives it 4 ticks after. All this will happen during the "instruction-fetch" phase of the CPU cycle when the registers are sitting idle, and so is of no consequence.
There are more compact versions of Dual-Read RAM, but the one I'm using has the versatility of being able to support ANY NUMBER of outputs, so long as you're willing to accept +2 ticks of delay for each one.
I'll have a thread about my Dual-Read RAM up at some point, but for now I'm fighting with my video editing software to export a decent copy of my ALU-Demonstration Video.
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.
Actually, I've been working to find a solution to this very problem. I've found that by banking the memory using 8 byte banks and then giving them a shared bus, I've been able to reduce the "Long" delay reaching that 16th or 32nd byte. The trade-off, of course, is a longer initial delay. Personally, I prefer this method since it's more consistent timing-wise and offers less delay in the long run.
My new RAM design offers a read speed of 6 ticks at the 16th byte minus 7 ticks (also @16th byte) for the hardware for the address decoder. I'm sure I could knock down the decoder to 6 ticks with some refinement, but not much more.
From my experience it sounds like you've made some RAM with a 2x3 footprint. Smaller footprints help reduce the magnitude of the problem, but don't eliminate it. 3-Long RAM has a delay of +2 per 5 registers, whereas the 4-Long RAM I'm using has its +2 delay every 4 registers.
I'm using 4-Long RAM (4x4 footprint) because that's the shortest RAM available with Dual-Read capability. I've been exploring methods of using Instant-Repeaters to speed up memory access times. Memory-access times are the biggest factor in slowing down a Redstone Computer. ALU's can be made to work in 5 ticks, but data reading and instruction-fetching overwhelm that seeming speed with their delay costs.
I've actually designed some 2x2 footprint RAM which I'll also have a thread about at some point. Technically speaking, it's 2x2.2, since it needs a repeater (and some extra spacing) every 7 registers, but it's about as compact as you can get (if you don't mind using piston update glitches).
Update: I've added a summary of "branching" to the first post and computer specifications.
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.
Actually, I'm using 4x2 footprint. Oddly enough, it *does* happen to have the piston update glitch, but it's configured in a way that if the glitch does get fixed, it *should* still operate unmodified. I hadn't intended to use the glitch when I built it but it just worked out that way.
The input/output bus contains nothing but repeaters every 15 to carry the signal, so a 16 byte bank only has a 3 tick travel time once the READ is initiated. Again, this breaks down to the delay in the addressing/READ/WRITE/CLEAR logic. I'm not really sure HOW I can make that logic any faster than it already is, but I'm sure someone far more brilliant than I will come up with something insanely simple to do it 3 times faster. In the meantime, I'll keep hammering at new designs.
I am REALLY interested to see your 2x2 footprint, that's just crazy.
This video will also be added to the Original Post.
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. The next video will be from the past though. Does that still count?
No idea. It does exactly what it says! Totally intuitive to anybody who's invented this particular design of ALU. It was either that or use Right-shifting for Logic, but I added the shifter fairly late in the design, and so Back-Propagation it is!
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.