Repository navigation
Home
|
Here you can find general information about the project, technical details, CDM-specific API docs and some step-by-step guides. |
CDM-16 is an educational RISC processor architecture created at Novosibirsk State University for studying at the digital platforms course. Development is primarily done in the cdm-processors GitHub organization. The main way of programming for the CDM-16 processor is in assembly, using Cocas, an assembler/linker written in Python specifically for CDM-16. It is part of cdm-devkit, the official toolchain for the CDM processor family.
There has been an ongoing effort to build a fully-fledged C compiler targeting CDM-16 based on the LLVM compiler infrastructure. This project is the latest iteration.
The C compiler has the following notable features:
- two target triples with different compilation drivers
-
cdm-cocas- uses Cocas for assembling and linking, compatible with existing projects -
cdm- independent from Cocas, uses common formats (GNU assembly, ELF objects), much more flexible
-
- support for von Neumann and Harvard memory models
- support for CDM-16 ISA extensions
- standard library (startup code, software arithmetic, freestanding subset of
libc) - platform-specific API headers (special registers, interrupts, processor state)
Each of these features is covered in a separate page of this wiki.
In addition to the C compiler, there is also an experimental version of the Rust toolchain based on the CDM-16 LLVM backend. It is already working well enough to write non-trivial programs with relatively little friction. It is located in a separate GitHub repository: ylab-nsu/cdm16-rust.
- Home
- LLVM targets
- Memory models
- ISA extensions
- Standard library
- Platform C headers
- Default linker scripts
- CDM ABI
- Getting started
- Setting up a project
- Using C and assembly together
- Memory-mapped IO
- Interrupt handlers