mu/shell
Kartik K. Agaram f99cd767a4 periodic run of misc_checks
I should really stop using /disp8 jumps at the top-level given how inconvenient
it is to check for overly large offsets.
2021-06-12 22:34:22 -07:00
..
README.md . 2021-04-26 09:42:05 -07:00
cell.mu . 2021-06-12 15:16:50 -07:00
data.limg . 2021-06-11 23:02:12 -07:00
environment.mu . 2021-06-12 21:11:22 -07:00
evaluate.mu . 2021-06-12 21:11:22 -07:00
gap-buffer.mu . 2021-06-11 17:31:29 -07:00
global.mu . 2021-06-12 21:11:22 -07:00
grapheme-stack.mu reverse-video for cursor 2021-06-06 23:08:40 -07:00
macroexpand.mu . 2021-06-12 21:11:22 -07:00
main.mu . 2021-06-12 21:11:22 -07:00
parse.mu . 2021-06-05 20:50:06 -07:00
primitives.mu . 2021-06-12 21:11:22 -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-12 21:11:22 -07:00
tokenize.mu shell: support negative integer literals 2021-06-06 12:39:03 -07:00
trace.mu periodic run of misc_checks 2021-06-12 22:34:22 -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