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.