Compare commits

..

2 Commits

Author SHA1 Message Date
ab558d9f60 WIP runtime re-write 2025-06-28 10:35:46 -05:00
cc3d576112 Add "if" as alias for "branch" 2025-06-28 10:35:07 -05:00
3 changed files with 33 additions and 47 deletions

View File

@ -1,33 +1,28 @@
;; Note that this is scheme syntax wrapping asm for a stack machine ;; Note that this is scheme syntax wrapping asm for a stack machine
(variable eom 1024)
;; These need to be initialized with the runtime
(variable scan 0) (variable scan 0)
(variable free 0) (variable free 0)
(variable eom 1024)
;; These need to be initialized later
(variable root 0) (variable root 0)
(variable the-cars 0) (variable old 0)
(variable the-cdrs 0) (variable new 0)
(variable new-cars 0)
(variable new-cdrs 0)
(push main) (push main)
(jmp) (jmp)
alloc alloc ;; ( -- p)
;; Test if free will go beyond eom ;; Test if free will go beyond eom
(push free) (ref free)
(@)
(dup) ; ( -- free free) (dup) ; ( -- free free)
(push 8) (push 8)
(+) (+)
(dup) ; ( -- free free+8 free+8) (dup) ; ( -- free free+8 free+8)
(push eom) (ref eom)
(@)
(<) ; ( -- free free+8 (free+8 < eom)) (<) ; ( -- free free+8 (free+8 < eom))
(branch alloc-do-gc) (push alloc-do-gc)
(if)
;; write free+8 to free ;; write free+8 to free
(push free) (set! free)
(!)
;; return the old free, it is memory the program can use ;; return the old free, it is memory the program can use
(return) (return)
alloc-do-gc alloc-do-gc
@ -41,36 +36,21 @@ alloc-do-gc
(push alloc) (push alloc)
(jmp) (jmp)
gc-start gc-start ;; ( -- )
; Move scan & free back to 0 ; Move scan & free to start of new memory
(push 0) (ref new)
(push free) (dup)
(!) (set! free)
(push 0) (set! scan)
(push scan) (ref root)
(!) (push relocate-object)
; Push the first cons to relocate (root) (call)
(push root)
(@)
; Call the relocation routine
(push gc-loop) (push gc-loop)
(call) (call)
; Swap new and old cars and cdrs
(push new-cars)
(@)
(push the-cars)
(@)
(push new-cars)
(!)
(push the-cars)
(!)
(push new-cdrs)
(@)
(push the-cdrs)
(@)
(push new-cdrs)
(!)
(push the-cdrs)
(!)
; return to allocation
(return) (return)
relocate-object ;; (o -- )
;; TODO
main
;; TODO

View File

@ -7,8 +7,14 @@
#:select (write-u8 write-bytevector)) #:select (write-u8 write-bytevector))
#:export (assemble)) #:export (assemble))
(define *aliases*
'((if . branch)))
(define (or-alias inst)
(or (assq-ref *aliases* inst) inst))
(define (lookup-instruction inst) (define (lookup-instruction inst)
(define inst-obj (assq inst *instruction-set*)) (define inst-obj (assq (or-alias inst) *instruction-set*))
(if inst-obj (if inst-obj
inst-obj inst-obj
(error (format #f "could not find instruction ~a" inst)))) (error (format #f "could not find instruction ~a" inst))))

View File

@ -32,7 +32,7 @@
(=) (=)
(or) (or)
(push recur) (push recur)
(branch) (if)
(return) (return)
recur recur
(dup) (dup)