minor change to run to make it more generic

This commit is contained in:
2024-07-29 00:36:06 +03:00
parent d1481f2770
commit 49b58b2d57
3 changed files with 20 additions and 16 deletions

View File

@@ -197,25 +197,29 @@
;;; COMPILER
(defun write-program (program out &key mem-cap)
(format out "~a~%" "segment .text")
(gen-dump out)
(format out "~{~a~%~}" '("global _start"
"_start:"))
(iter (for op in-sequence program)
(gen-header op out)
(gen-code op out))
(gen-header '(exit 0) out)
(gen-code '(exit 0) out)
(format out "~a~%" "segment .bss")
(format out "~a ~a~%" "bel: resb" mem-cap))
(defun generate-program (program &key (path "output.asm") (compile nil)
(mem-cap 640000))
(with-open-file (out path :direction :output
:if-exists :supersede)
(format out "~a~%" "segment .text")
(gen-dump out)
(format out "~{~a~%~}" '("global _start"
"_start:"))
(iter (for op in-sequence program)
(gen-header op out)
(gen-code op out))
(gen-header '(exit 0) out)
(gen-code '(exit 0) out)
(format out "~a~%" "segment .bss")
(format out "~a ~a~%" "bel: resb" mem-cap))
(write-program program out :mem-cap mem-cap))
(when compile
(run `("nasm" "-felf64" ,path))
(run `("nasm" "-felf64" ,path) :output t)
(let ((name (first (uiop:split-string path :separator '(#\.)))))
(run `("ld" "-o" ,name ,(concatenate 'string name ".o"))))))
(run `("ld" "-o" ,name ,(concatenate 'string name ".o"))
:output t))))
(defun compile-program (path)
(generate-program (make-program path) :compile t))