mu/shell
Kartik K. Agaram 6392f1fde9 first session programming _within_ the Mu computer
I tried building a function to draw a horizontal line across the screen.
Here's what I have in data.txt:

  (
    (globals . (
      (horline . (fn () (screen y)
                    (horline_1 screen y 0 (width screen))))
      (horline_1 . (fn () (screen y lo hi)
                      (if (>= lo hi)
                        ()
                        ((fn ()
                          (pixel screen lo y 12)
                          (horline_1 screen y (+ lo 1) hi))))))
    ))
    (sandbox . (horline_1 screen 0 0 20))
  )

$ dd if=/dev/zero of=data.img count=20160
$ cat data.txt |dd of=data.img conv=notrunc
$ ./translate shell/*.mu  &&  qemu-system-i386 -hda disk.img -hdb data.img

Result: I can't call (horline screen 0) over a fake screen of width 40.
Some stream overflows somewhere after all the tweaks to various fixed-size
buffers scattered throughout the app. Calling horline_1 gets to a 'hi'
column of 20, but not to 30.
2021-04-15 22:56:59 -07:00
..
cell.mu shell: streams that you can append graphemes to 2021-04-10 23:05:16 -07:00
evaluate.mu first session programming _within_ the Mu computer 2021-04-15 22:56:59 -07:00
gap-buffer.mu add some structure to the serialization format 2021-04-15 19:56:16 -07:00
global.mu shell: primitives for screen size 2021-04-15 22:00:03 -07:00
grapheme-stack.mu shell: highlight matching paren for cursor 2021-04-09 21:57:40 -07:00
main.mu shell: restore bindings after restart 2021-04-15 21:40:48 -07:00
parse.mu parse dotted lists 2021-04-15 19:47:01 -07:00
print.mu shell: streams that you can append graphemes to 2021-04-10 23:05:16 -07:00
read.mu 7849 - shell: literal numbers 2021-03-04 22:05:39 -08:00
README.md bochs support for disk drives 2021-03-23 21:53:41 -07:00
sandbox.mu first session programming _within_ the Mu computer 2021-04-15 22:56:59 -07:00
tokenize.mu shell: dot token 2021-04-15 08:48:53 -07:00
trace.mu shell: start jumping to keyboard using Tab 2021-04-10 22:14:20 -07:00
vimrc.vim 7842 - new directory organization 2021-03-03 22:21:03 -08:00

A prototype shell for the Mu computer

Currently runs a tiny subset of Lisp. Steps to run it from the top-level:

  1. Build it:
$ ./translate shell/*.mu      # generates disk.img
  1. Run it:
$ qemu-system-i386 disk.img

or:

$ bochs -f bochsrc

To save typing in a large s-expression, create a secondary disk for data:

$ dd if=/dev/zero of=data.img count=20160

Load an s-expression into it:

$ echo '(+ 1 1)' |dd of=data.img conv=notrunc

Now run with both code and data disks:

$ qemu-system-i386 -hda disk.img -hdb data.img

or:

$ bochs -f bochsrc.2disks

You can type in expressions, hit ctrl-s to see their results, and hit Tab to focus on the ... below and browse how the results were computed. Here's a demo. The bottom of the screen shows context-dependent keyboard shortcuts (there's no mouse in the Mu computer at the moment).

Known issues

  • There's no way to save to disk.

  • Don't press keys too quickly (such as by holding down a key). The Mu computer will crash (and often Qemu will segfault).