5 ms·
Designing Zachtronics' TIS-100
- obstinate 11y agoThis game is brilliant, in case you haven't tried it. Also, it will teach you the true fury of stream programming with only twelve instructions and a single addressable register.
- vacri 11y agoI was having trouble just last night: "Just one more instruction in this cell! Just one more, please!" I did notice that you can shorten labels to fit another line of code in, though :)
- deleted 11y ago[deleted]
- strangecasts 11y agoThe instruction set design really deserves praise: people who haven't done assembly before report picking it up without too much trouble, and it manages to fit several opportunities for subtle tricks in the space of the 13 instructions. The moment you realize that you can use JRO with a direction to control flow from another node, it feels like a genuine revelation while being immediately obvious and logical in hindsight.
- obstinate 11y agoWell I hadn't realized that. This. Changes. Everything.
- lfowles 11y agoThis is much more familiar than the assembly in 0x10c. I haven't tried JRO with ports yet! I just assumed it would be an illegal operation :) Real instruction sets are clouding my mind.
- chinpokomon 11y agoJRO UP? As in pulling in a value from the up port. I didn't see how that gives me a whole lot since wouldn't I need to know in the other node what the offset would be? I considered that this would be valid, but I couldn't see a way to make it really useful.
- obstinate 11y agoIt allows you to use another processor to do control flow based on an input, freeing up cpu time. For example, suppose you wanted to emit to DOWN: 0 if LEFT is <= 0 UP if LEFT is > 0 So you have two options S: MOV LEFT ACC JGE E MOV 0 DOWN MOV UP NIL JMP S E: MOV UP DOWN Or you could do this: S: JRO LEFT MOV UP NIL MOV 0 DOWN JMP S MOV UP DOWN And left would send 1 if its value is <= 0, or 4 if it's >0. In this case it only saves one cycle for the node under consideration, but it could be a good deal more if the conditional is more involved.
- archagon 11y agoI love Zachtronics' games, but they're kind of in the uncanny valley of gameplay for me. After a few hours, I start to wonder why I'm optimizing all these in-game circuits when I could be doing the same with my actual code! (On the other hand, they also make me realize how great Woz must have felt when he got Breakout down to just 44 chips.) The performance comparisons to other players is a brilliant feature, though.
- gcb0 11y agoit should be fun for kids to start learning to code. but then, the move things around like that may do more damage than good on understanding multicore :)
- Nogwater 11y agoJust think of them as unbuffered channels.
- boomlinde 11y agoThe most similar real world example that works like this is the GA144. 144 cores are laid out in a grid, and you pass data from one core to another by sending it "north", "south", "east" or "west". It's a puzzle game, though, and probably aims less at being a practical teaching tool than a set of novel and obscure problems. If it teaches anything it'd be approaching odd problems in general, just like spacechem did.
- kayamon 11y agoI had the same thing with SpaceChem. Once I found myself trying to implement a mutex in it... I've just spent all day at work doing stuff like this, and then I come home from work and keep doing it there as well. Great game, but it's like catnip for programmers.
- barbs 11y agoReminds me of an article that came up on HN a few weeks ago: Why Do We Play Video Games That Feel Like Work? - https://news.ycombinator.com/item?id=9495141 https://news.ycombinator.com/item?id=9495141
- watmough 11y agoThis is neat, but you can do some real hacking on software with something like http://www.ollydbg.de/ http://www.ollydbg.de/
- strangecasts 11y agoIt's not really intended as a replacement for reversing/assembly challenges: design-wise it's actually fairly similar to his previous games like SpaceChem, in that you're trying to break up solutions into discrete chunks that each individual node can handle.
- ansible 11y agoTIS-100 is way more pleasurable to program on than real hardware. It is so easy to debug! Everything is visible. People accomplished great things back in the 8-bit era with the tools they had, but the stuff they do today with the same hardware is truly mind blowing. I attribute that at least partially to things like that C64 emulator [1] where you can just view all of the system's memory during execution. [1] http://icu64.blogspot.com/2009/09/first-public-release-of-icu64frodo.html http://icu64.blogspot.com/2009/09/first-public-release-of-ic...
- IsTom 11y ago> This game is kind of a throwback to the kinds of games I used to make I think this is a very important part. Personally I enjoyed pre-spacechem games a lot (e.g. http://www.zachtronics.com/the-codex-of-alchemical-engineering/ http://www.zachtronics.com/the-codex-of-alchemical-engineeri...) because they were difficult and because they were very simple. Spacechem got grander and it was still fun, but for my simple tastes infinifactory isn't bare enough.