Finish basics of Lisp parser, add simple test
diff --git a/src/lisp/scratch.s b/src/lisp/scratch.s
new file mode 100644
index 0000000..1775a0a
--- /dev/null
+++ b/src/lisp/scratch.s
@@ -0,0 +1,43 @@
+;;; scratch.s -- ideas for how code generation will work
+
+ ;; (defun lisp-function (A B)
+ ;; (let ((local-var (whatever)))
+ ;; (whatever local-var (something-else 4))))
+ ;;
+ ;; This means the stack looks like this:
+ ;; B_value
+ ;; B_tag
+ ;; A_value
+ ;; A_tag
+ ;; result pointer
+ ;; return pointer <---- esp
+lisp_function:
+ push ebp ; Now ebp can be used as an offset
+ mov ebp, esp
+ sub esp, 16 ; 1 var, 1 temporary
+
+ ;; Now, call `whatever' with no arguments
+ ;; For now we will do no register allocation, so don't even
+ ;; bother saving anything.
+ lea eax, [ebp - 8]
+ push eax ; Return address
+ call whatever
+
+ ;; Now we need to evaluate (something-else 4) and store it in a
+ ;; temporary variable.
+ ;; First set up the literal 4
+ push 4 ; The value
+ push 0x20000000 ; Type tag and length
+ ;; Then set up the return address
+ lea eax, [ebp - 16]
+ push eax
+ call something_else ; Result stored in temporary
+
+ ;; Next function: `whatever'
+ push [ebp - 12] ; The temporary
+ push [ebp - 16]
+ push [ebp - 8] ; The variable
+ push [ebp - 4]
+ push [ebp + 4] ; The function's return address
+ call whatever
+ ret