Archives

Photo by Joe Pankow Oh ye gods! Crazy, nutty, insane. The past few days have been among the strangest of my life. I think I’ve had my 15 minutes of fame and then some. First there was the article about BMOW 1 on Wired.com, then the story got picked up by CNet, Digg, Slashdot, Engadget, Gizmodo, Reddit, and many others, all over the web. My inbox overflowed with people asking about the project. Then came the Maker Faire, where a few thousand people came through the BMOW booth over a two-day period. People were amazingly enthusiastic, and quite a few people told me they came to the Maker Faire specifically to see BMOW! In the Wired article about “What to do at the Maker Faire“, BMOW was even the featured attraction for the entire event. In the end, it won an editor’s choice award for the show, and I talked myself hoarse.

While I appreciate all the attention this project has suddenly received, I have to admit I feel like a fraud. For one thing, Bill Buzbee’s fabulous Magic-1 homebrew computer was also at the Maker Faire, and it’s twice as cool as BMOW, but didn’t get nearly the press coverage. I also think that most of the people talking about BMOW thought it was something it’s not. A lot of people seemed to have the idea that I’d built a CPU entirely out of wires, as if wires themselves could perform computations. Or they thought I’d built some kind of giant machine the size of a refrigerator. When they saw a rather ordinary-looking 12 x 8 inch board at the show, they looked disappointed. Many people also seemed to have the idea that I’d built a CPU out of thousands of individual transistors. Nope. BMOW is made from sixty-five chips including 7400-series parts, 22v10 PALs, ROMs, SRAM, a video DAC, and an AY audio chip.

It was an incredible time at the Maker Faire. Setup began on Friday, so I was able to get in before the show opened to the public, and chat with some of the other Makers before the crowds arrived. The show is sprawling, massive: two giant expo halls, plus all the grounds between and around them, and half of an enormous parking lot. It was really too much to experience in a single day.

Thanks to everyone who came by the BMOW booth at the Faire, and to my friends Kevin and Eric for helping out as BMOW crew members for the weekend. The booth was packed almost non-stop from open to close, both days. If I’d had the foresight to make extras, I could have sold a ton of books and T-shirts, and lots of people asked about them. Some people even asked about buying kits. I can only assume they had a spare year with no particular plans, and were looking to fill it. A few people came by the booth and gave me free stuff! A guy from Parallax gave me a Propeller development board. I’ll definitely have to play around with that.

A few questions about BMOW came up again and again:

“What’s the operating system?” When I answered “there isn’t one”, this seemed to blow people’s minds. How could you have a computer without an OS? For BMOW the hardware is so simple, the programs themselves essentially *are* the OS.

“What compiler did you use to write programs?” Some people seemed genuinely astounded that it’s possible for a human to write programs in assembly language. Whether they’re too young to remember when that was the norm, or have just spent too much time coding in Python or something, I don’t know. Yes, it’s all BMOW assembly language, which is mostly identical to 6502 assembly. I tinkered with retargeting a C compiler for BMOW, but never went very far with it.

“Where are the wires?” Ah yeah. I supposed it’s false advertising to have a project called “Big Mess o’ Wires”, and not have a giant hairball of wiring hanging out somewhere. There wires are all hidden on the underside of the system board. Sorry.

In the end, BMOW won a Maker Faire Editor’s Choice award. In fact, it won one twice. I’m not really sure what happened there, but when the second editor came by with Lady Ada to give me the award, and heard that someone else had already given me one, he seemed pretty ticked. I’m guessing maybe different editors were supposed to give awards in different categories, and two different editors claimed BMOW in their category. Regardless, I’m thrilled and excited to be recognized by Make.

To the guy I talked with who’s got some unused wire-wrap boards, please send me an email, and I promise to give them a good home. To the guy who turned out to live down the street from me in Belmont, email me, and maybe we can hook-up for some neighborhood nerd projects. For anyone else who emailed me already, if I didn’t reply, try me again.

Last but not least, I’m taking orders for SWAG. If you’d like a few BMOW stickers, send me a SASE or $0.50 by PayPal, and I’ll get you some. I’ll also be placing another order for BMOW T-shirts in a week, on June 7. If you’re in the USA, send me $28 by PayPal before the 7th, along with your shirt size, and you’ll get a shirt in a couple of weeks. If you’re outside the USA, email me to ask about shipping costs. Sorry, but 5-color silkscreened T-shirts for small run orders aren’t cheap. I’m not making any profit off these.

Whew! It’s been an amazing couple of days, but I’ve had enough. Time to go crack open a beer.

ZOINKS!!
I am amazed. I’ve been following the activities of both of you since discovering that webring down there.

I must say that’s am amazing accomplishment.

Anonymous June 13th, 2009
10:32 am

I was interested until he spouted bullcrap about no operating system.

Computer science 101, a computer system without an operating system is absolutely useless. I think this is just trying to pretend to be innovative.

“For BMOW the hardware is so simple, the programs themselves essentially *are* the OS.”

The problem with this means that there will likely be little to nothing stopping the programs for this mess of a computer from running amok in the system. One of the reasons why operating systems EXIST in the first place is to protect the system from the regular programs. I give this computer three minutes before it kills itself from a complete lack of low-level resource protection. With no operating system kernel calling the shots on memory and resources, there’s NOTHING stopping a program from accessing other programs’ memory, which was always one of many roles filled by the kernel, which is the only thing low-level enough to abstract software via segmentation and paging. Wanna know what segmentation faults are? They’re the damn kernel bitch-slapping a program down for trying to access memory its not allowed to have.

Great for a homebrew project, sure. For an actual production-level machine, hell no.

This guy’s a moron if he thinks this computer will be reliable without at least a MICROKERNEL running somewhere.

My MTX512 ran just fine without an operating system. My ZX81 ran fine. Friends’ CBM-64s and ZX Spectrums ran fine. Some PDP-11s were also run without any OS and still ran the books and the factories. The IBM PC used to run practically without an operating system (and some early games did run it completely without one).

Early operating systems were more about filesystems and smoothing out hardware differences than they were about multiprogramming and protection. Small machines didn’t even have the hardware to support memory protection or easy multiprogramming:

When you can virtualize memory you don’t have to place the programs at different addresses. If you don’t have virtual memory or even a “base pointer” or a bank switching mechanism, then you have to place the programs at different addresses and that pretty much requires patching the programs at load time. How much depends on the architecture. If the call and jump instructions use absolute addresses then you have to patch each and every one of them. And if you can’t generate PC-relative address for loading and storing variables, and if your machine has so few registers that you can’t spare a register just for pointing to your data (or if register-relative addressing works poorly on your machine), then you have to patch the addresses in data-referencing instructions, too. And if stack-relative addressing works poorly on your machine (as it does on 6502 and Z80), then you might want to pass arguments in memory at compiler assigned addresses (if there are too many arguments to pass easily in registers). Again, you’ll have to patch all that. Or use a small area shared between all tasks that then get swapped in and out as part of a task switch. That gets old really quickly…

All this is just to say that multi-programming with non-related processes is not something you do (or did) all that much with such small machines.

And anyway, if a program is crashy because it does naughty things with its bits, then it’s crashy no matter whether there is an OS there or not. So if you want a computer for running a single program then that computer’s reliability certainly doesn’t come from having an OS. Or hardware memory protection, which is probably what you really meant.

All this is perhaps not computer science 101 but probably 201 or 301 or thereabouts. In other words, still rather elementary.

No, it’s not innovative– it’s a thowback to the simple machines of 30 years ago. Plenty of embedded systems and old-school machines have no concept of an OS. Nor do today’s microcontrollers, which BMOW resembles in many respects.

Most of the the concerns raised by Anonymous, like memory protection, segmentation, and paging, are only relevant if you’re running multiple processes, or support virtual memory. BMOW does neither.

There’s nothing magic about an OS– it’s just a special program whose job is to coordinate the actions of other programs, and to abstract hardware details to permit software portability. When the hardware is a one-of-a-kind system, then hardware abstraction and portability are meaningless. And when the hardware supports only one process, then there are no other programs that need coordinating.

Erik Petrich June 13th, 2009
5:03 pm

Reliable computers come from reliable hardware running reliable software. If you have hardware that can distinguish different levels of permissions (for example, an MMU that can trap reads and/or writes to different regions of memory), all the operating system could do is keep a software failure from spreading to other parts of the system. But in a simple system such as BMOW, there is no where for failure to spread since there is only one program running at a time and there is no file system to corrupt. (I think the worst case would be that the time and date in the clock chip become incorrect and the sound chip starts blaring something obnoxious.) The operating system can’t make the software more reliable; it can only mitigate the results of unreliable software.

Many years ago, my workplace had a 68000 based computer that ran an order entry/processing/invoicing system, among other things. It could handle up to 6 simultaneous users (we were limited since there was only 512k (yes k!) of RAM). There was no memory protection whatsoever; every process had full read/write/execute access to any location. However, uptime measured in weeks, rather than the 3 minutes that Anonymous above suggests (although there was an operating system, it could not offer any protection without the underlying hardware support). I found that knowing up to 5 other people would glare at me for crashing the computer made me really double check the logic in my programs before attempting to run them.