mu/shell
Kartik K. Agaram c4475d83b7 shell: roll back a change to the 'when' macro
Introduced in commit 1adc904ef3 from a week ago, but it turns out brcircle
has been consistently broken ever since.
2021-05-15 12:43:35 -07:00
..
README.md . 2021-04-26 09:42:05 -07:00
cell.mu . 2021-05-04 20:20:03 -07:00
data.limg shell: roll back a change to the 'when' macro 2021-05-15 12:43:35 -07:00
evaluate.mu a full-circle rainbow 2021-05-08 07:58:56 -07:00
gap-buffer.mu first passing test for macroexpand 2021-05-06 21:38:02 -07:00
global.mu some boot-time heartbeat messages 2021-05-07 12:27:20 -07:00
grapheme-stack.mu move color scheme closer to Solarized dark 2021-05-01 15:37:55 -07:00
macroexpand.mu all apps working again after null get check 2021-05-07 20:40:42 -07:00
main.mu some boot-time heartbeat messages 2021-05-07 12:27:20 -07:00
parse.mu first passing test for macroexpand 2021-05-06 21:38:02 -07:00
print.mu belatedly migrate stale example definitions 2021-05-06 16:42:08 -07:00
read.mu bump up the token limit again 2021-04-17 22:35:35 -07:00
sandbox.mu . 2021-05-07 20:02:01 -07:00
tokenize.mu give up on nested backquotes for now 2021-05-07 09:22:54 -07:00
trace.mu first passing test for macroexpand 2021-05-06 21:38:02 -07:00
vimrc.vim 7842 - new directory organization 2021-03-03 22:21:03 -08:00

README.md

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 code.img
  1. Run it:
$ qemu-system-i386 -m 2G code.img

or:

$ bochs -f bochsrc            # _much_ slower

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

You can also try one of the files of definitions in this directory (*.limg).

$ cat data.limg |dd of=data.img conv=notrunc

Now run with both code and data disks:

$ qemu-system-i386 -m 2G -hda code.img -hdb data.img

or:

$ bochs -f bochsrc.2disks

You can type in expressions, hit ctrl-s to see their results, and hit ctrl-m 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).

Improvements

If your Qemu installation supports them, one of these commandline arguments may speed up emulation:

  • -enable-kvm
  • -accel ___ (run with -accel help for a list of available options)

As a complete example, here's the command I typically use on Linux:

$ qemu-system-i386 -m 2G -enable-kvm -hda code.img -hdb data.img

Known issues

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

  • Mu currently assumes access to 2GB of RAM. To change that, modify the definition of Heap in 120allocate.subx, and then modify the -m 2G argument in the Qemu commands above. Mu currently has no virtual memory. If your Heap is too large for RAM, allocating past the end of RAM will succeed. However, accessing addresses not backed by RAM will fail with this error:

    lookup: failed