*Screenception*
Visualizing programs with side-effects in a postfix shell with a live-updating text-mode environment. Built all the way up from machine code without any dependencies (except an x86 processor and Linux kernel).
https://archive.org/details/akkartik-2min-2020-11-12
Project page: https://github.com/akkartik/mu
More context: https://mastodon.social/@akkartik/104896128141863951
*Towards running Mu without Linux*
All Mu really needs so far is to print to screen and read from the keyboard. Here's a 2-minute video about achieving that:
https://archive.org/details/akkartik-2min-2020-12-24
It seems such a small thing. But I needed lots of help, as you can see from the additions to my credits: https://github.com/akkartik/mu/compare/670cbb3d33807efb2d5e0db9e54ffed42f7ef0e3..main?short_path=b335630#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5
Merry Christmas to all! What a beautiful world.
Project page: https://github.com/akkartik/mu
More context: https://mastodon.social/@akkartik/104896128141863951
*2020: Flood-filling the Mu computer*
A year ago I had a prototype of a C-level programming language mapping 1:1 to Assembly that I _thought_ could be type-safe.
Since then, I:
* wrote an academic paper on it
* made it type-safe
* began a high-level language atop it
* got into video, with 15 2-minute screencasts
* and ran programs written in it on bare metal, without an OS, like, 5 years before I expected to.
❤️ to everyone who inspired, taught, debated, encouraged.
My 2020 wrap-up is turning into a bit of a rabbit hole:
http://akkartik.name/post/mu-2020
I ended up trying to create a Wardley Map (https://en.wikipedia.org/wiki/Wardley_map) for Mu.
*Rendering text atop baremetal*
Mu can now render text atop baremetal x86.
Try clicking around from http://akkartik.github.io/mu/html/baremetal/ex5.mu.html
The boot-up machine code reads a few sectors from disk, configures a keyboard handler, and loads a bitmap font (2KB for ASCII, with the option for more).
I use GNU Unifont. I believe that means Mu is now GPL v2. So stated. IANAL and I try not to think about software IP. But a font? Copyright seems reasonable there.
Next up: a text editor!
*A more international interface for rendering text*
New 2-minute video: https://archive.org/details/akkartik-2min-2021-01-12
You get just one fixed screen resolution: 1024x768, 256 colors. Widely available on modern machines, no drivers needed.
You get just one fixed-width bitmap font. No bold/italics, no anti-aliasing.
BUT it won't make assumptions about English and left-to-right order. I eventually want anybody to be able to customize it to their language.
Main project page: https://github.com/akkartik/mu
I've been trying to visualize the default 256-color palette I get on baremetal.
http://akkartik.github.io/mu/html/baremetal/vga_palette.html
To my eyes it looks like I can/should just live in the first 128 colors.
I built a game of "snakes", but it came out more like an etch-a-sketch 😄
http://akkartik.github.io/mu/html/baremetal/ex7.mu.html
Play it on any non-windows:
```
git clone https://github.com/akkartik/mu
cd mu
./translate_mu_baremetal_emulated baremetal/ex7.mu
qemu-system-i386 disk.img
```
h/j/k/l to draw
It took a while, but I've finally ported a pre-existing Mu program to baremetal: an RPN calculator.
This was _hard_, purely because of cursor management. I have a greater appreciation for everything that display hardware and terminal emulators provide for text mode. Mu so far puts the onus on the programmer.
http://akkartik.github.io/mu/html/baremetal/rpn.mu.html
In the end it's interesting to visualize the changes I had to make:
vim -d apps/rpn.mu baremetal/rpn.mu
They're entirely in `main`; the rest is unchanged.
@akkartik Such an exciting project. Congrats on the progress!
@akkartik well done! It has been nice to see it mature
@akkartik congratulations, and thank you for your work!!
@akkartik the title O_o
@akkartik Welcome to the middle layer.
@akkartik YEEEEEEEEES!
@akkartik
ed?
@akkartik so cool! I’m so glad someone is seriously doing this work. A really great experiment — hopefully it shows us all a fundamentally new way to do things!
@akkartik regarding your overall goal of communicating a codebase, you may be interested in my FuzzySet interactive documentation which attempts to give the best possible human explanation of the code library: http://glench.github.io/fuzzyset.js/ui/
@akkartik instead of building from the code "up" I tried to design from the UI "down" — what UI do we need in order to communicate programs really well and then how can we change programming so those explanations just fall out.
I love your approach of rebuilding the foundations, though! Can't wait to see where it ends up
@glench My hope is to meet somewhere in the middle with all the people doing cool UI research!
*Switching gears to pure graphics*
Until now Mu has followed classic Unix: stdin, stdout, pure text mode.
But giving up an OS kernel requires controlling the screen myself. Which requires various complicated probing for hardware. Then programs handling various screen sizes.
Easier: just always assume some common graphics mode. Say 1024x768 with 256 colors.
Interestingly, the default palette has far fewer than 256 colors. (Pic: 1024 cols each contain color `col%256`.)
http://akkartik.github.io/mu/html/baremetal/ex2.hex.html