# QuakeC v0.2.2 - Table of Contents > A QuakeC virtual machine in Elixir: reads compiled progs.dat programs and runs them against builtins the host supplies. ## Pages - [QuakeC](readme.md) - [Changelog](changelog.md) ## Modules - [QuakeC](QuakeC.md): A QuakeC program's memory: its globals, and every entity's fields laid end to end, as the program addresses them. - [QuakeC.Compiler](QuakeC.Compiler.md): Compiles a QuakeC program to Elixir: every function becomes a function of a generated module, and a dispatch module calls one by its index. - [QuakeC.Compiler.Analysis](QuakeC.Compiler.Analysis.md): What compiling a QuakeC program needs to know about it. - [QuakeC.Compiler.Emit](QuakeC.Compiler.Emit.md): One QuakeC function (`QuakeC.Compiler.Analysis.function/3`) as quoted Elixir: a public `f(host, ctx, budget, args)` returning `{host, budget, {x, y, z}}`, and a private function per basic block that the function's jumps call. `args` is a tuple of the words of the call's arguments, three a parameter, as the parameter slots from 4 hold them; `{x, y, z}` is the returned value, as the return slots 1 to 3 hold it. A function that hands values back (`hands_back`) returns `{host, budget, {x, y, z}, handed}`, `handed` the 24 parameter slots as it left them. A call after which argument slots are read goes through `dispatch.call_with_args/7`, which also gives those argument slots as the call left them. - [QuakeC.Compiler.Ops](QuakeC.Compiler.Ops.md): The quoted Elixir for each QuakeC instruction that computes or moves values: arithmetic on floats, vectors and integers, comparisons, loads and stores to globals, entity fields and pointers. Jumps, calls, returns and the `state`, `thinktime` and bounds-check instructions are `QuakeC.Compiler.Emit`'s. - [QuakeC.Compiler.Runtime](QuakeC.Compiler.Runtime.md): The value rules compiled QuakeC code runs by: how a slot's value reads as a float, an integer, a truth or a string; the arithmetic that needs care (division by zero, 32-bit integer wrapping, random numbers); and reads and writes of globals, entity fields and pointers in the program memory (`QuakeC`). - [QuakeC.Exec](QuakeC.Exec.md): Runs QuakeC functions, compiled to Elixir (`QuakeC.Compiler`) the first time a program runs on this node. - [QuakeC.Memory](QuakeC.Memory.md): A QuakeC program's words: a value per index from 0. A word never written is `0`. Values are floats, integers from `-2^49` up to but not including `2^49`, and binaries. - [QuakeC.Progs](QuakeC.Progs.md): A compiled QuakeC program, `progs.dat`, read: Quake's version 6, and FTE's version 7 with 16- or 32-bit statements. - Exceptions - [QuakeC.Exec.Error](QuakeC.Exec.Error.md): A QuakeC program went wrong while running.