aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
blob: 22f99ced2d9a55bc241f96f919effa89eaf7d8b5 (plain)
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
# UXNPI

This is a port of the [UXN virtual machine][uxn] for running on the Raspberry Pi
3/4 without OS (baremetal).

[uxn]: https://wiki.xxiivv.com/site/uxn.html

## Building from source

To build this software you need a compiler for the aarch64 architecture. More
specifically you will need the following programs in your path:

```
aarch64-elf-as
aarch64-elf-gcc
aarch64-elf-ld
aarch64-elf-objcopy
```

You can follow the instruction for installing these with your package manager of
choice or [build them from source](https://github.com/bztsrc/raspi3-tutorial/tree/master/00_crosscompiler).

Additionally you may want to test the compiled software with an emulator, since
testing on real hardware can be a bit of a hassle. Luckily, you can use qemu for
this. You will need to install `qemu-system-aarch64` for this to work.

With all of this ready, you should be able to run `make` for compiling the
kernel image and/or `make run` to run the kernel on a qemu VM.

To see framebuffer output from qemu, you will need a VNC client. When developing
this project I keep `gvncviewer` running at regular intervals so that when qemu
is executed it automatically connects to the screen viewer:

```
while true; do gvncviewer ::1:5900; sleep 1; done
```

Note that qvncviewer by default smooths the output so if things look weird just
make sure you disable smooths scaling and keep the original aspect ratio.