mu/shell
Kartik K. Agaram 67aeff8934 .
I wrote a comment about how some code was not covered by tests, and then
promptly forgot what it was for. This is why we need tests.

Now the hack is gone.
2021-06-08 15:06:08 -07:00
..
README.md . 2021-04-26 09:42:05 -07:00
cell.mu . 2021-05-04 20:20:03 -07:00
data.limg fizz-buzz take 2 2021-06-06 23:22:57 -07:00
environment.mu . 2021-06-08 15:06:08 -07:00
evaluate.mu . 2021-06-08 15:06:08 -07:00
gap-buffer.mu shell: first test for entire environment 2021-06-08 11:57:03 -07:00
global.mu shell: fleshing out the 'standard library' 2021-06-06 12:55:06 -07:00
grapheme-stack.mu reverse-video for cursor 2021-06-06 23:08:40 -07:00
macroexpand.mu . 2021-06-08 15:06:08 -07:00
main.mu . 2021-06-06 12:50:25 -07:00
parse.mu . 2021-06-05 20:50:06 -07:00
primitives.mu shell: remainder operation 2021-06-06 12:11:14 -07:00
print.mu more robust print-cell 2021-05-19 23:14:27 -07:00
read.mu . 2021-05-29 16:25:38 -07:00
sandbox.mu . 2021-06-08 15:06:08 -07:00
tokenize.mu shell: support negative integer literals 2021-06-06 12:39:03 -07:00
trace.mu . 2021-06-04 20:15:11 -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