I’ve been studying WebAssembly recently, which has included porting some of my
m4vga graphics demos. I started with the Rust and WebAssembly
Tutorial, which has you use fancy tools like wasm-pack,
wasm-bindgen, webpack, and npm to produce a Rust-powered webpage.
And that’s great! But I want to know how things actually work, and those tools
put a lot of code between me and the machine.
In this post, I’ll show how to create a simple web graphics demo using none of
those tools — just hand-written Rust, JavaScript, and HTML. There will be
no libraries between our code and the platform. It’s the web equivalent of bare
metal programming!
The resulting WebAssembly module will be less than 300 bytes. That’s about
the same size as the previous paragraph.
I love the ARM Cortex-M series of microcontrollers. The sheer computational
power they pack into a teensy, low-power package is almost embarrassing.
But, many Cortex-M parts are small — 4x4 millimeters small — and don’t have
the pins left over for JTAG. For these parts, ARM introduced a new debug
interface, called SWD.
Unfortunately, SWD isn’t well-supported by open-source tools. Support is in
progress in most of them — including my personal favorite, OpenOCD — but
I’ve had bad luck so far.
Anton Staaf was having the same issue, and decided to do something about it.
He tricked the cheap, commonly-available FTDI FT232H chip into speaking the
line-level SWD protocol. We’ve teamed up and, a week or so later, have
something to show for it.
Thingiverse has deployed my modifications to Thingiviewer, which were first
seen on this very site powering the 3D Thing Previews. The internet is now just
a little bit better. Woot!
In my previous professional life, I processed a lot of credit card numbers.
When reading credit card numbers from an unknown source, it helps to have a fast
way of checking basic validity — to filter out bogus input. Such a method
exists: the Luhn algorithm. I developed a very fast implementation of the
algorithm a few years ago, and I keep seeing it pop up other places.
Now that Hubris has gotten some attention, people sometimes ask me if my
personal projects are powered by Hubris.
The answer is: no, in general, they are not. My personal projects use my other
operating system, lilos, which predates Hubris and takes a fundamentally
different approach. It has dramatically lower resource requirements and allows
more styles of concurrency.