Add beginning of Lips compiler, DynASM
diff --git a/src/lisp/lisp-notes.org b/src/lisp/lisp-notes.org
new file mode 100644
index 0000000..614ac8f
--- /dev/null
+++ b/src/lisp/lisp-notes.org
@@ -0,0 +1,36 @@
+#+TITLE: Lisp Notes
+#+AUTHOR: swissChili
+
+* Compiler
+
+  The compiler will using DynASM to generate code at runtime. It won’t
+  be a JIT (no interpreter), strictly a dynamic compiler.
+
+  For now I won’t even have a register allocator, all variables and
+  temporaries will be stored on the stack. This makes more or less
+  sense considering they will need to be put on the stack anyway when
+  a function is called.
+
+  An example assembly is in =scratch.s=.
+
+** First Pass
+
+   The first pass will involve finding all the local variables
+   (i.e. anything defined with =let=) and all the temporary values
+   necessary. Once a variable is out of scope, its stack space becomes
+   usable by other variables. Similarly, once a temporary is used, its
+   space becomes available. Variables are addressable by name but
+   temporaries are not.
+
+** Second Pass
+
+   The second pass will actually generate assembly. First enough space
+   will be reserved on the stack for the variables and temporaries,
+   then the AST will be walked as before to generate all the
+   appropriate function calls.
+
+   When a function call is generated, first temporaries are allocated
+   for all its arguments. Then the sub-expressions are compiled left to
+   right given these temporary locations as the outputs. For now we
+   will assume that everything is either a variable or a function
+   call, there will be no literals yet.