Monorepo for Aesthetic.Computer aesthetic.computer
core fedac native cl PROGRESS.md
5.0 kB

AC Native OS — Common Lisp Edition Progress (2026.03.23) #

Overview #

A bare-metal Common Lisp OS runtime for AC Native, using SBCL + CFFI. Boots directly to notepat (musical keyboard instrument) on real ThinkPad hardware via UEFI.

Architecture #

  • Runtime: SBCL 2.6.2 compiled to standalone binary (~12MB)
  • Graphics: DRM/KMS framebuffer with pixel scaling (targets ~200px wide)
  • Audio: ALSA PCM with 32-voice polyphonic synth (48kHz stereo S16LE)
  • Input: evdev keyboard polling (full QWERTY)
  • Build: Docker reproducible build (Fedora 43 + GCC 15 + Linux 6.19.9)
  • Boot: UEFI → Linux kernel with embedded initramfs → SBCL binary as /init child

What Works (2026-03-22) #

Core Runtime #

Graphics #

Notepat Instrument #

Build System #

What's Next #

Short Term #

Medium Term #

Long Term #

File Map #

File Purpose
main.lisp Entry point, notepat instrument loop
packages.lisp All package/export definitions
drm-display.lisp DRM/KMS init, dumb buffers, page flip, present
drm-constants.lisp DRM ioctl numbers and struct defs
framebuffer.lisp Pixel buffer alloc, clear, plot, blend, scaled copy
graph.lisp Immediate-mode 2D: wipe, ink, plot, line, box, circle
color.lisp ARGB32 color struct, packing, alpha blend
font-data.lisp 6x10 BDF bitmap font (95 ASCII chars)
font.lisp Font rendering and measurement
audio.lisp ALSA init, mixer unmute, voice management, audio thread
audio-synth.lisp Oscillators (sine/square/tri/saw/noise), voice struct
alsa-bindings.lisp CFFI bindings for libasound
input.lisp evdev device scanning, event polling
input-keycodes.lisp Linux keycode constants (full QWERTY)
syscalls.lisp CFFI wrappers for Linux syscalls
util.lisp Logging, monotonic clock, frame sync
config.lisp USB config.json reader
ac-native.asd ASDF system definition
build.lisp SBCL save-lisp-and-die build script

Hardware Tested #

  • ThinkPad X1 Nano Gen 2 (Intel i915)
  • ThinkPad Yoga 11e Gen 5 (Intel i915)