Big Projects
-
Upsilon is a 100% FOSS platform (including the build system) for controlling equipment on Digilent Arty A7 FPGAs using Linux. Upsilon runs mainline Linux on a RISC-V softcore, and has built-in support for adding ADCs, DACs, and PicoRV32 softcores by modifying a python build script. It automatically generates interface files for both C and Micropython to interact with gateware modules attached to the main softcore. It also has a interface for fine-grained manual control of hardware resources by allocating them to independently running modules.
Upsilon was originally developed when I was an undergraduate working in Guangxin Ni’s lab at the National High Magnetic Field Laboratory. A more up-to-date version can be found here under the “picorv32” branch.
-
Universal Service is a work-in-progress C library implementing different garbage collectors with a common interface.
-
Universal Service LISP is a work-in-progress R7RS bytecode compiler written in R3RS. It is designed to compile to GLLV, a basic bytecode interpreter with garbage collection by Universal Service. Not designed for “real world” use, it can be used for as a bootstrapping tool and as a very portable implementation of Scheme. -
Gamma Scheme will be an R7RS implementation with delimited continuations and
syntax-case
.
Misc Programs
- Periodic table searcher in OCaml, using a SQL database. Supports fuzzy search.
- Hyugens principle simulation in Javascript for physics education.
- Windows Local Backup was an attempt at making a compressing hashing backup program for old Windows systems (particularly, Windows XP). The project was abandoned because Fossil was better suited.
Libraries
C
- Creole is an extremely simple bytecode format and bytecode interpreter. Instructions are encoded in a variant of UTF-8 (the encoding is self-synchronizing). The macro assembler is a Python library. I wrote a blog post about using UTF-8 to encode non-Unicode codepoints.
- Modified libraw1394 where address requests are handled by function handlers instead of being stored in buffers. This allows for requests to be handled by dynamic methods such as network resources.
- Spyderta is a compatability library for Sederta FireWire cards. It is designed to emulate the DLL interface and send data over a local IPv4 connection to a Linux computer with a FireWire card. The code was never finished.
- AATree implementation in a single header file. C89+, imperative, freestanding.
Verilog
The following libraries have been verified to work on an Arty A7-100T.
Scheme
-
Container iterators are a polymorphic interface to a sequence of values. They are inspired by C++ iterators. Iterators can implement any of the following operations:
- forward movement
- backward movement
- getting
- setting
- comparison to other iterators
The library is designed such that an iterator on a type does not have to implement all of the operations if it is not feasible (i.e. no backward movement for an infinite stream). A type can have multiple iterators.
-
sris is a Scheme parser for RIS files.
-
cond-thunk is a simple framework for expressing complex destructuring and conditional operations on destructured values succintly.
-
Brainfuck2Scheme. Compile Brainfuck to an R5RS procedure.
-
markov-scm is a portable Markov generator (scripts are provided for CHICKEN). CHICKEN will compile the entire King James Bible into a Markov chain in a few seconds on my T420.
Misc
- Monadic SQLite interface in OCaml.
Documents
- Reference manual pages for the SI unit system, periodic table of the elements, and CODATA constants.
- I am translating the Aramaic of the Book of Daniel for Wikisource.