Calculator
==========

Aims to be a calculator implemented in 32-bit RISC-V assembly, initially targeting the
inexpensive [CH32V003 RV32EC microcontroller][CH32V003]: 48Mhz 2KB SRAM, 16KB Flash.

Notes
-----

### Disassemble

    riscv64-unknown-elf-objdump -D main.o

### List Symbols

    riscv64-unknown-elf-nm calc.o

### List segment info

    readelf -l calc.elf

### Build with LLVM

    make AS=clang ASFLAGS="-g -mabi=ilp32e --target=riscv32-unknown-elf -nostdlib -c"

Resources
---------

* https://riscv-programming.org/book/riscv-book.html
* [CH32V003 Datasheet](https://www.wch-ic.com/downloads/CH32V003RM_PDF.html)
* [QingKeV2 Processor Manual](https://www.wch-ic.com/downloads/QingKeV2_Processor_Manual_PDF.html) — core used in the CH32V003

### Syscalls on RV32E

[Syscalls supported by rv32emu](https://github.com/sysprog21/rv32emu/blob/master/docs/syscall.md).

Consensus seems to be pass the syscall number in `t0`:

* https://github.com/riscvarchive/riscv-qemu/pull/61
* https://github.com/sysprog21/rv32emu/blob/1286b3c41eec541b68f3d25462722ba848bf4e51/src/syscall.c#L484

[CH32V003]: https://www.wch-ic.com/products/CH32V003.html