about summary refs log tree commit diff stats
path: root/shell/README.md
blob: 20dc3615e7a9d47fd74adb3bb5b22d197d62d70a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
### 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:
```sh
$ ./translate shell/*.mu      # generates code.img
```

2. Run it:
```sh
$ qemu-system-i386 code.img
```
or:
```
$ bochs -f bochsrc
```

To save typing in a large s-expression, create a secondary disk for data:
```sh
$ dd if=/dev/zero of=data.img count=20160
```

Load an s-expression into it:
```sh
$ echo '(+ 1 1)' |dd of=data.img conv=notrunc
```

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

```sh
$ cat iterative-definitions.limg |dd of=data.img conv=notrunc
```

Now run with both code and data disks:
```sh
$ qemu-system-i386 -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 `Tab`
to focus on the `...` below and browse how the results were computed. [Here's
a demo.](https://archive.org/details/akkartik-2min-2021-02-24) 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 -enable-kvm -hda code.img -hdb data.img
```

*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).