To try everything Brilliant has to offer-free-for a full 30 days, visit brilliant.org/mattbatwings/ You’ll also get 20% off an annual premium subscription.
I'm a programmer and game developer and this series is gold! I love understanding such low level topics like CPU architectures but most learning resources are boring or too complicated. But your videos are fun! Explaining it with minecraft really helps too! Thanks for making this series!
4:43 quick note from me here: if your program counter is quite literally a counter that you can set to any time, i recommend just setting it to the jmp address -1, so when it increments, it goes to the correct address. (this preproccessing step can be done in hardware, by making an adder that adds 255 to the jmp address and having the result get stored instead of the actual address) 7:06 another way to solve this is, get this, implementing temporary pointers in the assembler (JMP [pointer] -> pointer: \code), which, even if gets more instructions added before the pointer, will move the pointer up.
Yeah, relative jump by an immediate is replaceable with some assembler preprocessing. But relative jump by a register values is not. It would unlock switch like branching whitch is very cool. Or jumps to a register value would basicaly unlock function calls.
It's a bit of interesting pedantry, but it's not actually Turing Complete yet. With only a finite number of finitely-sized registers, we can only decide problems in constant space, i.e. DSPACE(O(1)). But DSPACE(O(1)) is contained within the Regular Languages. Anything this computer could do that halts, a DFA could be made to at least brute-force it. We need memory (in an amount that varies greatly enough with the size of the input) to do better, and we'd need unbounded memory (and a way to access it) to be Turing Complete.
@beaverbuoy3011 Yep, there's a whole jungle of Turing Machine constraints/extensions/variants and their links to the various parts of the computational hierarchy. Another good one to know is a Linear Bounded Automaton: a Turing Machine where you have a tape limited in length to some linear function of the input length, e.g. if you need n tape cells for the input, have only c*n tape cells total for some number c. They can only decide context-sensitive languages, and they're particularly relevant because they more practically model machines we regularly use. For example,I can't add more RAM to my PC on demand, but I can have a good guess ahead of time what the largest instance of the hardest problem I'm going to compute and make sure I have 2, 8, 4096, or whatever times the amount of RAM it needs to fit.
@@luminas-d9w Technically yes (unless you count saving state when you're nearly out of memory/storage and plugging in more memory/storage as unbounded, but even then the amount of memory/storage we can make is essentially finite too).
Parity is also a neat flag to use if you have the space for it. It is only true if the LSB is true (like the opposite of the negative flag) and can be useful in programs like multiplication :D
About the two jumping methods.. you could also handle relative jumping in the assembler, so when you put it into the computer it's direct jumping, but in the assembler you write it the relative way, i know that there are some assemblers out there that can do exactly that, but that would technically make the assembler a compiler since it has to apply it's own logic to the program rather than to directly look up the instruction and outputting the binary equivalent
Don’t feel bad about needing to do that. Between this series and his LRR series he’s basically covered all the content of a semester long Digital Systems class I had to take as a sophomore Computer Engineering major. Literally the only difference is learning the implementation medium. In this you learn Minecraft in the college class I learned something called Verilog(basically code).
@@jackinzbox.I don't feel bad for it, I'm loving the series and finallx get to understand on the hardware level, how computers work. Like I knew, there were instructions, but I didn't know, how the computers read them, etc.
Simply amazing to see branch being added!! Have you ever thought about adding "branch and exchange" as in branching to an address on a register? Keep up the good work, I'm loving the series!
I love that once the computer is turing complete it becomes about making it super convenient to program ❤ It has to do with the complexity class, it's the self reference that causes things like Godel incompleteness, the halting problem, and more. Once you connected the ALU and memory (that is capable of self reference) to the program counter (evolution operation) it went essentially transcendental (mathematically). Notice the system that breaks those constraints can compute anything from the subset that need them. What constraints will we break next? This is all theoretical progress to be made.
instead of direct or relative jumping, u could do it as in the 6502 with keywords that get compiled to the line theyre defined in, same as u can set keywords as variables
I'm taking an assembly and architecture class at the same time as this series, it's amazing how well you are able to describe every concept better than my prof! Plus it's really cool to see what i'm learning in class be put into minecraft lol
Interesting seeing the branch conditions not being built into the opcodes. I expected JEQ and JNE to be their own opcodes, but you're able to do a 4 in one with BRH due to using a 10 bit address and having 2 bits left over.
Yeah, seeing the branch conditions with the comparison notations was so eye opening! I've learned assembly at uni extensively, but it never clicked like this.
watching this is helping me in topics out side of building this MC-com. when u said it get trapped in an un ending loop, it made me remember a mod I am programing & what I can add to any procedure that loops back to itself
Relative jumps also help in the case when your memory is large enough to have addresses larger than instructions themselves. More often than not you need to jump locally for loops rather than across your program, so relative jumps are great for most cases. This way you can quickly and easily do jumps without always needing paging registers.
Simply amazing mannn I wanted to learn and make a CPU and saw many logism tutorials which were very difficult to understand with them making a multiclock directly making it harder for me to make a control unit but since you've shown me a wayy to make a singleclock cpu which I didn't even know was possible lol I can finnally make one , didn't know the childhood game I love could give me so much more , thank youu soo muchhhh mann
17:23 wouldn't it make more sense to combine CMP and BRH into one new instruction, maybe called branch if (maybe with the mnemonic BIF)? BIF could take 4 operands: REG1, REG2, compare operator, jump address. is it possible for an instruction to take 4 operands? idk if it is possible to do that but I'd like if it was
I had similar thought. There are usually instructions BEQ and BNQ (branch if equal, branch if not equal), and they'd be simple to make as pseudo-instruction (that assembles to CMP r1 r2 ; BRH zero addr)
@@FrikingRL @FrikingRL well wait it would work if it was just a pseudo instruction that assembled to SUB REG1, REG2, REG0 BRH compare operator, jump address
I expected pseudo-instructions like "branch if equal", "branch if not equal" etc, that'd assemble to CMP and BRH instructions (so the pseudo-instruction would be 2 cycles long)
5:46 love how this version of the computer that doesn't have BRH is actually cool, not because it's any powerful or even useful, but because its halting problem is solved.
Yeah it is solved because it has no conditionals so you can solve for "does it end or not" in polynomial time: if there is a loop at any time, it won't ever end.
you can make an assembler using different named items and put them in chests with an order and than hoppers can understand them line by line than turn them in to binary later add it to the instruction memory
relative jumps are far superior to absolute jumps when you introduce dynamic code loading and relocations. since this architecture uses a ROM, dynamic code loading and relocations are never a problem. (tho mplementing relative jumps is as easy as plugging the operand into the addition in the program counter)
Matt, what about being able to specify the address of a register/memory location as a number from a register? For example, if register 1 stores the number 3, then will do something with register 3
I imagine once he gets to memory he would implement something like an “ldr”instruction, load from memory address into a register (and set the zero flag?) as well as the complementary store opcode. Then the world’s your oyster.
Ad 17:45 As a mathematician I know that Turing completeness isn't understood exactly the same in computer science as it is in math, but for completeness sake: You said in 1st episode that a Turing machine should have infinite tape, which would be equivalent to say the computer has infinite memory (which is obviously false). Ergo, in general, Turing completeness in computer science is more like "real world close enough" to Turing machine. Pardon my pedantic behavior.
@@igorkowalski1928 Computer Scientist here. The definitions in both fields are exactly the same (or at least a some variant of a 7-tuple definition depending on the text you're referencing). The issues here are that lay people generally don't know the full definition, and if they do, they don't connect the dots that their machine isn't Turing Complete (often since they're not building actual TMs).
@@igorkowalski1928 No problem! I made a similar comment about the fact that the machine here isn't even capable of things outside of Regular Languages too (also evoking the word "pedantic").
Instead of following along with Minecraft, I decided to use Logisim instead. Took a bit to get the CCA working. Used the wrong logic get to get the carry signal, then ended up putting the flood carry on the wrong side of the cancel carry section. Then took a bit to figure out how the carry in was handled. But! I got it working lol
I just want to add 14:53 the first loop will result r1 with 0 for the final value as for the second loop it will be 255, I'm not sure how useful this is but there's also that difference Otherwise good video
Probably overlooking something simple, but when I go from one instruction that sets flags to another, the redstone line for “sets flags” stays on so it doesn’t activate the pulse to update the flags I found a solution that may work, but isn’t ideal or consistent. How is it supposed to be set up
Does anyone know what he uses to make the block diagrams? It would be super helpful for school reports I need to make. Though, I have a feeling it’s manim which is too much of a headache lol.
hello mattbatwings, do you think it's possible to make a computer using hexadecimal memory instead of binary? like, using comparators? i've already made hexadecimal memory and for the parts we can't make in hexa we can still convert back in binary.
Ah, i wanted to make one(for abother game), started on python to understand all the sh*t, but i chose riscv32i for some reason... Uhm, it's not like hard, just lot of instructions.. But main thing where i stopped is ecall, permanent memory devices, io devices.. (calls to hardware or how is that done?) And also on Privilege Level (Zixr or smtg extension..) Like whete it is stored or smth? Chatgpt gives answer: devices are memory mapped. Current privilege level is stored in privelege level register. But i did not found a proof on any of those.. x0-x31 + pc are multipurpose registers, and not suitable for that, 4096 special registers (with vectors/system info/exception info/system configuration) i checked their documentation, most similar was mstatus, but it contains "does system implements machine mode" same for ustatus sstatus.. Nothing about current privilege..
If direct jumping is better on the actual hardware why would you ever do relative jumping? Couldn't you just translate all the relative jumping instructions in your code to direct ones during the assembly process?
There is a lot of reason. The easiest one to understant is the case where youre not doing fixed size encoding of the instructions. Here we have a 10 bit address, this not that big. Now imagine a 64 bit machine, in this case the adress is fairly large. This mean that event if most of the time youre jumping in 1024 adresse range (10 bits) you still need to write a full 64 bit adress (54 bits wasted). Those "unused" 54 bits adds up really quickly in a real world program. Now even if youre fixed sized encoding, in the real world, youre not the only program running on the computer. So first another program (the kernel) puts you in memory instead. This mean you have no idea where will be the actual adress where you going to be executed. Also there is a lot more added complexity like virtual addressing (for isolating program from each other and a LOT of other reason) This is completely out of scope for the purpose of a minecraft computer. So those are problems we do not have here thankfully 😊
Im sorry i have failed you i stopped doing this cuz on my computer i costs to download mods so its very hard for me to build ALU’s or to build memory in a computer without worldedit
To try everything Brilliant has to offer-free-for a full 30 days, visit brilliant.org/mattbatwings/
You’ll also get 20% off an annual premium subscription.
so cool!
Do I make a map about building battle and
Knarfy thinks you’re a geologist.
I Have just subscribe
I'm a programmer and game developer and this series is gold! I love understanding such low level topics like CPU architectures but most learning resources are boring or too complicated. But your videos are fun! Explaining it with minecraft really helps too! Thanks for making this series!
I agree
what language do you program in?
True
@@doodocina Mostly Python, C#, and C++
@@SubatomicPlanets you love such low level topics but program in python, c#?...
4:43
quick note from me here:
if your program counter is quite literally a counter that you can set to any time, i recommend just setting it to the jmp address -1, so when it increments, it goes to the correct address. (this preproccessing step can be done in hardware, by making an adder that adds 255 to the jmp address and having the result get stored instead of the actual address)
7:06
another way to solve this is, get this, implementing temporary pointers in the assembler (JMP [pointer] -> pointer: \code), which, even if gets more instructions added before the pointer, will move the pointer up.
or relative jump as a pseudo instruction
Yeah, relative jump by an immediate is replaceable with some assembler preprocessing. But relative jump by a register values is not. It would unlock switch like branching whitch is very cool. Or jumps to a register value would basicaly unlock function calls.
the 3 classic properties of trees: branches. flags. and jumping competitions
It's a bit of interesting pedantry, but it's not actually Turing Complete yet. With only a finite number of finitely-sized registers, we can only decide problems in constant space, i.e. DSPACE(O(1)). But DSPACE(O(1)) is contained within the Regular Languages. Anything this computer could do that halts, a DFA could be made to at least brute-force it.
We need memory (in an amount that varies greatly enough with the size of the input) to do better, and we'd need unbounded memory (and a way to access it) to be Turing Complete.
Oh I had no idea about the distinction, how interesting!
@beaverbuoy3011 Yep, there's a whole jungle of Turing Machine constraints/extensions/variants and their links to the various parts of the computational hierarchy.
Another good one to know is a Linear Bounded Automaton: a Turing Machine where you have a tape limited in length to some linear function of the input length, e.g. if you need n tape cells for the input, have only c*n tape cells total for some number c.
They can only decide context-sensitive languages, and they're particularly relevant because they more practically model machines we regularly use. For example,I can't add more RAM to my PC on demand, but I can have a good guess ahead of time what the largest instance of the hardest problem I'm going to compute and make sure I have 2, 8, 4096, or whatever times the amount of RAM it needs to fit.
@@MadocComadrin Oh so cool! I will definitely look into it further. I haven't learned the theory behind computing, I'm bound to have a great time :D
Does that mean our computers are not turing complete? They possess finite memory.
@@luminas-d9w Technically yes (unless you count saving state when you're nearly out of memory/storage and plugging in more memory/storage as unbounded, but even then the amount of memory/storage we can make is essentially finite too).
Parity is also a neat flag to use if you have the space for it. It is only true if the LSB is true (like the opposite of the negative flag) and can be useful in programs like multiplication :D
Everytime matt uploads, I get smarter
😂 me too
Allways
About the two jumping methods.. you could also handle relative jumping in the assembler, so when you put it into the computer it's direct jumping, but in the assembler you write it the relative way, i know that there are some assemblers out there that can do exactly that, but that would technically make the assembler a compiler since it has to apply it's own logic to the program rather than to directly look up the instruction and outputting the binary equivalent
He'll probably make labels in assembly anyways, instead of addresses, so that's why he said direct jumping isn't a problem
This is getting more and more complicated. I've had to rewatch and pause the video to understand it. Thank you for this series!
Don’t feel bad about needing to do that. Between this series and his LRR series he’s basically covered all the content of a semester long Digital Systems class I had to take as a sophomore Computer Engineering major. Literally the only difference is learning the implementation medium. In this you learn Minecraft in the college class I learned something called Verilog(basically code).
@@jackinzbox.I don't feel bad for it, I'm loving the series and finallx get to understand on the hardware level, how computers work. Like I knew, there were instructions, but I didn't know, how the computers read them, etc.
Simply amazing to see branch being added!! Have you ever thought about adding "branch and exchange" as in branching to an address on a register? Keep up the good work, I'm loving the series!
This is inspiring me to return to my own Redstone computer project and finally add the in-game compilers I have planned.
YESSSSS MATT RELEASED A BRANCHING EPISODE
VOTE MATT FOR THE AWARDS
I was so excited for this episode, knowing that selection would make this the real deal
11:42 shouldn't bit shifting also set the flags? At least the zero flag since you can bit shift so far end up with zeroes in every position
I love that once the computer is turing complete it becomes about making it super convenient to program ❤
It has to do with the complexity class, it's the self reference that causes things like Godel incompleteness, the halting problem, and more. Once you connected the ALU and memory (that is capable of self reference) to the program counter (evolution operation) it went essentially transcendental (mathematically). Notice the system that breaks those constraints can compute anything from the subset that need them. What constraints will we break next? This is all theoretical progress to be made.
instead of direct or relative jumping, u could do it as in the 6502 with keywords that get compiled to the line theyre defined in, same as u can set keywords as variables
I'm taking an assembly and architecture class at the same time as this series, it's amazing how well you are able to describe every concept better than my prof! Plus it's really cool to see what i'm learning in class be put into minecraft lol
Interesting seeing the branch conditions not being built into the opcodes. I expected JEQ and JNE to be their own opcodes, but you're able to do a 4 in one with BRH due to using a 10 bit address and having 2 bits left over.
Yeah, seeing the branch conditions with the comparison notations was so eye opening! I've learned assembly at uni extensively, but it never clicked like this.
It could be a pseudo-instruction that assembles to `CMP r1 r2 ; BRH zero `
keep up with the weekly upload matt! i love your videos, especially the computer making series
watching this is helping me in topics out side of building this MC-com. when u said it get trapped in an un ending loop, it made me remember a mod I am programing & what I can add to any procedure that loops back to itself
Relative jumps also help in the case when your memory is large enough to have addresses larger than instructions themselves. More often than not you need to jump locally for loops rather than across your program, so relative jumps are great for most cases. This way you can quickly and easily do jumps without always needing paging registers.
Simply amazing mannn
I wanted to learn and make a CPU and saw many logism tutorials which were very difficult to understand with them making a multiclock directly making it harder for me to make a control unit but since you've shown me a wayy to make a singleclock cpu which I didn't even know was possible lol I can finnally make one , didn't know the childhood game I love could give me so much more , thank youu soo muchhhh mann
typo at 1:10 : you accidentally had the ALU Input B display a 7, not a 3
Man, you posted this right as I was watching the redstone awards trailer.
17:23 wouldn't it make more sense to combine CMP and BRH into one new instruction, maybe called branch if (maybe with the mnemonic BIF)? BIF could take 4 operands: REG1, REG2, compare operator, jump address. is it possible for an instruction to take 4 operands? idk if it is possible to do that but I'd like if it was
I had similar thought. There are usually instructions BEQ and BNQ (branch if equal, branch if not equal), and they'd be simple to make as pseudo-instruction (that assembles to CMP r1 r2 ; BRH zero addr)
It could but it would be like a 20 bit instruction length so it wouldn't work on his computer
@@FrikingRL @FrikingRL well wait it would work if it was just a pseudo instruction that assembled to
SUB REG1, REG2, REG0
BRH compare operator, jump address
finally he caught up to my microcontroller engineering 2 module now i can just watch this instead of going to lectures
I was having trouble adding flags to my CCA this morning, so this will definitely help!
17:44 smooth.
after 15:50 my chin dropped. i dont looked that way before. my brain gone speechless
Awesome job on this so far. Hopefully arrays won’t be too much to ask for this computer but I’d be really interested to see how you pull them off. :)
I expected pseudo-instructions like "branch if equal", "branch if not equal" etc, that'd assemble to CMP and BRH instructions (so the pseudo-instruction would be 2 cycles long)
So how smart and pro at redstone are you?
mattbatwings: YES!!!
5:46 love how this version of the computer that doesn't have BRH is actually cool, not because it's any powerful or even useful, but because its halting problem is solved.
Yeah it is solved because it has no conditionals so you can solve for "does it end or not" in polynomial time: if there is a loop at any time, it won't ever end.
Its getting really interesting keep it up !
Elegant. Well done
you can make an assembler using different named items and put them in chests with an order and than hoppers can understand them line by line than turn them in to binary later add it to the instruction memory
Good news my $326.79 of logic and memory chips finally arrived.... And its all your fault :)
relative jumps are far superior to absolute jumps when you introduce dynamic code loading and relocations. since this architecture uses a ROM, dynamic code loading and relocations are never a problem.
(tho mplementing relative jumps is as easy as plugging the operand into the addition in the program counter)
Matt, what about being able to specify the address of a register/memory location as a number from a register? For example, if register 1 stores the number 3, then will do something with register 3
you mean like pointers ?
I imagine once he gets to memory he would implement something like an “ldr”instruction, load from memory address into a register (and set the zero flag?) as well as the complementary store opcode. Then the world’s your oyster.
Pointers are powerful, so I bet he'll make them
you should add an even flag, it could be useful in bitwise operations
That's pretty much just LSB of output, so easy to implement
Flags, Branching (Part 1), Branching (Part 2), and Jumping to Flags, Branching (Part 1), Branching (Part 2), and Jumping to Flags-
i have absolutely no idea what this means but i love it
Bro, I respect you
Ad 17:45
As a mathematician I know that Turing completeness isn't understood exactly the same in computer science as it is in math, but for completeness sake: You said in 1st episode that a Turing machine should have infinite tape, which would be equivalent to say the computer has infinite memory (which is obviously false).
Ergo, in general, Turing completeness in computer science is more like "real world close enough" to Turing machine.
Pardon my pedantic behavior.
@@igorkowalski1928 Computer Scientist here. The definitions in both fields are exactly the same (or at least a some variant of a 7-tuple definition depending on the text you're referencing). The issues here are that lay people generally don't know the full definition, and if they do, they don't connect the dots that their machine isn't Turing Complete (often since they're not building actual TMs).
@@MadocComadrin I apologize then. That's what I get for using wikipedia as source XD. Still the fact stands, and my internal formalist may rest easy.
@@igorkowalski1928 No problem! I made a similar comment about the fact that the machine here isn't even capable of things outside of Regular Languages too (also evoking the word "pedantic").
Instead of following along with Minecraft, I decided to use Logisim instead. Took a bit to get the CCA working. Used the wrong logic get to get the carry signal, then ended up putting the flood carry on the wrong side of the cancel carry section. Then took a bit to figure out how the carry in was handled. But! I got it working lol
2:35 nice, you used the congruent simbol :)
nice attention to detail
Mattbattwings still replacing my professor 7th episode in a row
another video. another APSALUTE BANGER
This guy has inspired me to study computer science
I just came here to say, im in your top 0.6% somehow
10:15 everyone has made mistakes. Everyone has been on the unexplainable darkness. Glad to hear you're normal now
I just want to add 14:53 the first loop will result r1 with 0 for the final value as for the second loop it will be 255, I'm not sure how useful this is but there's also that difference
Otherwise good video
Bro wth ur da goat
Soon we will have Minecraft 1.21 in Minecraft
All my fellas🔥
Probably overlooking something simple, but
when I go from one instruction that sets flags to another, the redstone line for “sets flags” stays on so it doesn’t activate the pulse to update the flags
I found a solution that may work, but isn’t ideal or consistent. How is it supposed to be set up
Would you be able to make a video about how to download all of the mods and texture packs you use?
Is there a way to make direct matrix operation / direct exadecimal operation?
What texture pack do you use?
@mattbatwings could one of your next videos on how to build a computer be about the screen and connecting it?
Good job
You are the best
Does anyone know what he uses to make the block diagrams? It would be super helpful for school reports I need to make. Though, I have a feeling it’s manim which is too much of a headache lol.
what about add one mouse input with creakings?
Can you do a video on how to import the script into the instruction memory the repeater and torch script
When is #8 coming? Is it done or do we get a I/O?
make it run doom
you should make a video with Ben Eater
Hi Matt, What Redstone Mod do you use?
i have a question, so what do you mean "hook up a decoder to these flags"
Nice.
hello mattbatwings, do you think it's possible to make a computer using hexadecimal memory instead of binary? like, using comparators? i've already made hexadecimal memory and for the parts we can't make in hexa we can still convert back in binary.
Same question
I think it'd be too hard, especially since there are next to no premade hex/analogue adders, subtracters etc.
@@creeper6530 i already have made some tho adders and substacters, no multiplicators or dividors tho. and it's because it's hard that it's fun.
i've retryed recently to build a full hexa alu and i hate it. i will continue the madness anyway...
i hate the necessary carry bit in hexa
i dare you to build a two player game in minecraft with redstone
You should try vr game Yeeps : hide and seek
Sorry, but i have no idea how to run a Phython program. can someone tell me how to use his programs for scripting the computer?
16:18 anyone else read “sup bruh”
Day 1 of asking Matt to make a redstone Minigame collection.
Zero 7 mentioned
Call stack and I/O plus a cache is coming
pls make next vid i have been waiting too long 😢
4:28 those 2 free bits. Maybe they could be used for relative jumps...? Think about it master
Ah, i wanted to make one(for abother game), started on python to understand all the sh*t, but i chose riscv32i for some reason... Uhm, it's not like hard, just lot of instructions..
But main thing where i stopped is ecall, permanent memory devices, io devices.. (calls to hardware or how is that done?)
And also on Privilege Level (Zixr or smtg extension..) Like whete it is stored or smth?
Chatgpt gives answer:
devices are memory mapped.
Current privilege level is stored in privelege level register.
But i did not found a proof on any of those.. x0-x31 + pc are multipurpose registers, and not suitable for that, 4096 special registers (with vectors/system info/exception info/system configuration) i checked their documentation, most similar was mstatus, but it contains "does system implements machine mode" same for ustatus sstatus.. Nothing about current privilege..
I would want to learn about the screen
wow i cant even make a lamp turn on LOL
Nice
In the next video, can you help us make a screen?
Solitaire pls
Clicked on this on the very first Planck second
clownpierce posted at same time lol
Doom, we're coming...
Data memory is ne next:)
If direct jumping is better on the actual hardware why would you ever do relative jumping? Couldn't you just translate all the relative jumping instructions in your code to direct ones during the assembly process?
There is a lot of reason.
The easiest one to understant is the case where youre not doing fixed size encoding of the instructions.
Here we have a 10 bit address, this not that big. Now imagine a 64 bit machine, in this case the adress is fairly large. This mean that event if most of the time youre jumping in 1024 adresse range (10 bits) you still need to write a full 64 bit adress (54 bits wasted). Those "unused" 54 bits adds up really quickly in a real world program.
Now even if youre fixed sized encoding, in the real world, youre not the only program running on the computer. So first another program (the kernel) puts you in memory instead. This mean you have no idea where will be the actual adress where you going to be executed.
Also there is a lot more added complexity like virtual addressing (for isolating program from each other and a LOT of other reason)
This is completely out of scope for the purpose of a minecraft computer. So those are problems we do not have here thankfully 😊
4?05- for _ in range(100)
Mod Tiny Redstone
4:08 OH YEAH BOYS, INTRODUCING *BRH* !!!!! 🎉🎉
Im sorry i have failed you i stopped doing this cuz on my computer i costs to download mods so its very hard for me to build ALU’s or to build memory in a computer without worldedit
world edit is a free mod
Can you make if, ifelse, wait until. In redstone
under 30 minutes?!
I subscribed thanks to CraftyMasterman 😁👍