By now, I think all of you probably know about 0x10c. If you haven’t heard about it, here is the scoop: Notch, the creator of Minecraft has a brand new game in the pipeline. It’s a space sim with Minecraft like FPS mechanics, crafting system and a very unique twist. At a first glance it may look a little bit like this (which, in a way it is) but at the same time it is so much more. You see, the ships in the game will be controlled by a fully programmable 16 bit computer with it’s assembly language.
Yes, Notch is making a game about hacking 16 bit computers in assembly in order to control space ships and explore alien planets. I don’t know about you, but I am salivating at the mere thought. I mean, I loved Minecraft – it was like virtual Legos with dungeons and zombies. It was an amazing little electronic playground for creative types who loved to build shit, and also people who just played it as a very peculiar RPG. But if Minecraft was heroin, 0x10c is shaping up to potentially be the Spice Melange of Arrakis. It will do for hackers, tinkerers and engineers what Minecraft did for amateur artists and architects.
Now, I have talked to at least a few people who don’t get my excitement for this game. They don’t really see the appeal of hacking in the DCPU-16 assembly language. Sure, they are intrigued by the space exploration aspect, the space battles, and even the crafting/engineering/ship upgrade features that are being discussed. But the programing – they don’t really see that as a viable game mechanic. Which I guess I understand. I guess you have to have the “hacker” mindset to actually get what is so amazing about this concept of a simulated 16 bit machine.
Let me try to explain why I am excited about the game – I mean, other than it just the joy of hacking an imaginary machine. Believe it of not, I really think there is more to it.
A History Lesson for the Youngins
About a decade ago, when I was young, inexperienced college Freshman who aspired to become a computer scientist, I was fascinated by the history of the field. I fell in love with the romanticized tales of the early hackers doing sheer miracles on super primitive hardware. I read about development of various algorithms driven by real hardware limitations. These heroes of yesteryear were doing so much, with so little.
Us students? We were studying computer science in the middle of the dot-com boom. We were living in a time where most gaming was still done on PC, forcing fierce, cut-throat competition between hardware manufacturers (especially in terms of graphics). For us there was no such thing as hardware limitations. Moore’s Law was absolute, software was a gas that would always expand. We knew that shitty algorithms would get exponentially less shitty every 18 months. But, we admired the pioneers and founding fathers of the industry who did not have this luxury. Who had to count every CPU cycle and every bit of memory and optimize. We could only imagine how that felt. We could afford to be lazy and complacent.
But somehow that early hacking seemed more real – more inspiring. Their challenges were more real, more pressing and their triumphs more awesome. I wanted that kind of challenge. I mean, sure – I could go and dig up an emulator of a 8 bit or 16 bit era computer, and start hacking… But that wouldn’t be nearly as exciting, because all the cool and impressive things on that platform have already been done by others and long abandoned and forgotten. It would be archeology rather than hacking.
0x10c promises to bring some of that excitement back, in a new context that makes it exciting. Now hacking a 16 bit CPU has a practical purpose and in game benefits. There will be a new community with which you can share your findings. You will be able to experience that joy of exploring and building new systems while working under strict limitations.
Best part is that young, aspiring programmers will be able to pick up some DCPU-16 and fully grok just how the computing industry have evolved over the years. They will see where we got ideas for all these funky sorting and searching algorithms, etc. They will be able to experience the 16 bit era of computing all over again – and from the inside, intimately, personally and directly.
Revival of 16-bit Demo Scene
I know that there are still enthusiasts out there that tinker with 8 and 16 bit systems as a hobby. But it is no longer a thing – it’s no longer hip and cool. For the most part, the 16-bit demo scene is just something that we can just feel nostalgic about. DCPU-16 can possibly change that.
Here comes a potentially addictive multiplayer game which uses 16-bit assembly programming as one of the core gameplay mechanics. This is something unprecedented and cool – it’s a potential revival. And people are excited. Really, really excited about it.
Recently Github added DCPU-16 support and there is already a significant number of repositories in that language. A language for a non-existent, imaginary virtual computer, in a computer game that is so early in development, it is not even playable yet.
Matt Bell created a really nifty DCPU-16 emulator/code sharing site. I’m not sure how many programs it is hosting, but it seems like there is a nontrivial amount. The top programs include gems such as a matrix screen saver, a text adventure, a snake game and etc… The site seems to be slowly but surely growing a community of dedicated DCPU-16 hackers.
Kostas Michalopoulos wrote a full featured DCPU-16 IDE so that new programs can be tested, tweaked and perfected outside of the game. Especially demos, and especially now that the game is not available yet.
Various blogs and communities are posting primers and tutorials for DCPU-16 assembly language. Reddit already has not one, but two communities devoted to the game: /r/0x10c (with nearly 4 thousand subscribers) for discussion of the game as a whole, and /r/dcpu16 (slightly less popular with close to two thousand subscribers) for discussions of the language and emulator itself. And along side the usual reddit silliness there are quite interesting debates going on there – like one about feasibility of support for high level languages on the DCPU-16 platform.
The community is already there. The tools to hack in the language already exist. There is a huge amount of excitement surrounding the project. The stage is set. Unless the game turns out to be vaporware, there will be a small but motivated DCPU-16 demo scene.
People are excited to see what can be done with this imaginary machine. How far can it be pushed. How can it’s limits be stretched, how can it be abused. There are no established DCPU-16 gurus yet, so there is reputation to be gained from being the first to implement something cool.
Unlike most other games, 0x10c can be played at two levels – the game proper, and the meta-game of writing software for the in-game computers. This is unprecedented, and exciting thing.
DCPU-16 as a Teaching Language
One of the most interesting and eye opening courses I took as an undergrad was introduction to Assembly Languages. We worked a little bit with SPARK assemblers, and Jasmin. I have learned a great deal about low level programming and how the code we write actually works under the hood. The jasmin parts especially gave me a new understanding of the inner workings of the JVM. But I have never actually used these languages outside of the class. Neither was I expected really. Our professor told us straight of the bat that we likely won’t use these things, and that we shouldn’t pursue careers as assembly hackers.
Enter DCPU-16 – an assembly language that is actually useful and relevant outside of the classroom. I have not analyzed the language too closely yet, but it seems like it has all the important features you would expect to see in a 16 bit assembly language. It is small and made to be simple and clean. It seems like a good introductory language to teach prospective students about low level programming. One that encourages the students to use it, and challenge themselves with ambitious projects in a fun, competitive environment.
Granted, I would not recommend spending an entire semester on it, but as an introductory to language it works great. Not to mention it could also be used by advanced students. For example, in my Systems Software class I had to write and assembler and linker for some imaginary, non-existent CPU with a small, silly instruction set. Why not DCPU-16 then? I think it would work fine for that purpose.
What do you think?
What is your take on this? Are you excited about the game? Have you looked into DCPU-16 yet? Do you think it will be successful or a flop? As sad as it may sound, I don’t see this game becoming as huge of a hit as Minecraft. It does not have that broad-band appeal. It was designed to attract people of a very specific mindset – us. Still, there is already a big community that surrounds it, so I don’t see it being a complete failure either.
I haven’t looked at the language itself, but I’ve been following the new projects as they appear on Hacker News and the LLVM backends seem very interesting (I’m frankly not particularly excited about coding in assembler).
While these games are fun and all, I’m waiting for when Notch releases some info about IO, both sensors, engines and ship-to-ship communications. I think the real fun will be distributed networks of ships that will be built, using swarm AI techniques to achieve a common goal. I’m drooling at the possibilities ;)
You’re right that it’d make a nice learning language; we used MARIE, which is simple and all, but it can’t actually do anything; x86 is uglier, but at least it can output stuff!
In the end, I’m afraid I don’t expect the game to have more than a small (if dedicated) core of users unless people can just easily run code from others and focus on the rest, which has to be good by itself.
That’s what I’m thinking the game is going to be like: there will be the trading/ship building and exploring component that most users will mess around with. And there will be a smaller group of users creating in game software.
I imagine that there will be a way to easily copy and paste or load software modules into your computer. Like maybe drop a file into some specific directory, and then run load filename on your ships console or something.
This would allow people to essentially write “mods” and “extensions” but not in traditional meaning of these words – these would be consistent, non-game-breaking tweaks to the ship UI, efficiency patches and etc.
I imagine regular users purchasing a new propulsion engine in game, and then going online and finding an engine power optimization code to make their rig 10% faster than if it was running with the default settings… Or something.
But yeah – the ship to ship, and distributed network stuff could be amazing!
I think this is an obvious continuation of what minecraft already is, especially when you look at the mods.
Complex resource gathering, processing and sorting systems?
Just look at Buildcraft, RedPower and IndustrialCraft. They give you the building blocks to make complex machinery – and a CPU emulator is one of the planned features of RedPower for some time now.
Then you have ComputerCraft, which adds simple computers (and robots, allowing for a great deal of automation) programmable with LUA. Combine that with current RedPower and its bundled cables and you get to program low level things like network communication with nothing more than a bunch of cables. And people actually do this!
So, I’m not surprised. Things went in this direction already ;)
I personally don’t care about how it’s implemented, I just love the games with mechanics that let you automate the actions of your characters. More planning is always good and autonomous AI’s competing with other AI’s is too awesome.
I don’t care for games at all, but assembly language and CPU emulators for educational or simply fun purposes have occured a long way back in the last millenium.
The Apple II with Integer-Basic (not the II+ with floatingpoint basic) had a 16-bit-CPU-emulator in ROM called SWEET-16 though it wasn’t very well known. The Apple User Group Europe had a very nice article about it in their user magazine back in the 80s when the II with Integerbasic was about to go folklore.
Donald Knuth invented MIX and quite recently MIX32 assembler exactly for education.
I didn’t know anything about the DCPU until Notch posted the spec on his blog. Even at that point, I thought it was part of some puzzle, unaware of 0x10c. I studied it, noticing the spec he posted was incomplete (ambiguous, but fixed now). Fascinated, I showed my computer nerd friends, but none of them seemed to be particularly interested. I looked in r/minecraft and searched around a bit, but couldn’t find anyone enthusiastic about it at the time. So after writing most of my own implementation of it, I kind of gave up, thinking no one found it interesting.
Then you write this post and show me those two subreddits. Wow! This has really taken off! It already has a larger following than MIX (which ths mentioned) ever did, which I’ve also toyed with in the past. There is a lot of exciting potential here.
I’m with IceBrain; I’m not really interested in hacking assembly code. I’ve done enough of that before to get my fill. I want to see some compilers targeting the DCPU-16, and use them instead.
I think my brother messed around with BuildCraft. I haven’t tried it yet, but I had no idea there was ComputerCraft. I’m not surprised though.
The difference between MIX and DCPU-16 is that MIX was designed to be educational – that’s it’s purpose for existence. You can’t really use it for much other than learning low level programming. DCPU-16 has an actual external purpose – learning it gives you direct in-game benefits.
@ Chris Wellons:
Yeah, it really did take off. A lot of people are enjoying it quite a bit. I’m sort of trying to make a DCPU-16 resource link dump here.
@ Chris Wellons:
Hey, I think you might be interested in this: a lisp dialect that compiles to DCPU-16 code.
@ Luke Maciak:
Thanks, that’s exactly the sort of thing I’m interested in.
The thing that got me interested in the game was also the assembler PC. Mmm, maybe I could write Tetris for it… And of course I asked myself, “how long will it be until someone writes a compiler for it?”.
Makes me nostalgic to the time where I was programming a CPC 464 with 64 kb ram.
Any news of 0x10c? Seems that since a couple of weeks Notch didn’t say anything about the game and the development :(