[SYSTEM INIT] // PERMANENT MACHINE ARCHITECTURE // v0.1-alpha
— Write Once. Run Forever. —
The Permanent Machine Architecture defines a complete, immutable whole-computer ISA — CPU, display, input, and beyond. Software compiled for PMA runs identically on every conforming implementation, today and decades from now.
x86 conquered CPU instruction compatibility. But every other layer of the machine — display, input, audio, storage — gets rewritten every decade. PMA extends compatibility to the whole machine.
| Layer | x86 / Linux | POSIX / BSD | Embedded (bare) | PMA |
|---|---|---|---|---|
| CPU ISA binary compat | YES | PARTIAL | NO | YES |
| Display / framebuffer | NO | NO | NO | FIXED |
| Keyboard / pointer input | NO | NO | NO | FIXED |
| Audio output | NO | NO | NO | FIXED |
| Storage / persistence | FS-LAYER | FS-LAYER | NO | FIXED |
| Interrupt / timer model | PARTIAL | N/A | VENDOR | FIXED |
| Boot protocol | BIOS/EFI | N/A | VENDOR | ELF-NATIVE |
| Device discovery | ACPI/DTB | N/A | HARDCODED | TABLE |
Six pillars that define the permanent machine — every conforming implementation must honour all of them, without exception.
0x80000000,
device table at 0x10000000,
CLINT at 0x02000000,
PLIC at 0x0C000000.
No probing. No runtime negotiation.
_start. Truly bare metal.
0x10000000
describes every device present: type tag, MMIO base, IRQ line, and capability
flags. Software can enumerate what hardware exists without vendor-specific tables
or firmware blobs.
RV64 physical address space — 64-bit flat, fixed layout. Every conforming PMA implementation must honour this map exactly.
Write directly to MMIO. No OS. No drivers. Just your program and the spec.
# PMA bare-metal hello — RV64IMA # Writes pixels directly to the framebuffer # No OS. No syscalls. Just the spec. .section .text .global _start # ── Constants from PMA spec ────────────── .equ DEVTAB, 0x10000000 # device table .equ FB_BASE, 0x10100000 # framebuffer .equ FB_W, 640 .equ FB_H, 480 .equ CLINT_MTIME, 0x0200BFF8 _start: # set up stack at top of DRAM lui sp, 0x80400 # sp = 0x80400000 # load framebuffer base lui a0, 0x10100 # a0 = FB_BASE li t0, 0 # pixel index li t1, 307200 # 640 * 480 .fill_loop: bge t0, t1, .done # pixel = magenta (ARGB: 0xFFFF2D78) li t2, 0xFFFF2D78 sw t2, 0(a0) # write pixel addi a0, a0, 4 addi t0, t0, 1 j .fill_loop .done: # halt — spin forever j .done
#1
The ELF loader maps segments into DRAM starting at 0x80000000.
#2
Execution jumps to _start. No firmware or boot shim involved.
#3
Pixel writes to 0x10100000 appear immediately on the PMA framebuffer.
#4 The same binary, unchanged, runs on every conforming PMA implementation.
The PMA specification and reference emulator are under active development.
Join the effort to define a machine that software can target forever. The spec is open. The emulator is open. The future is permanent.