Begin debugger
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
#:use-module (rnrs io ports)
|
||||
#:use-module ((scheme base)
|
||||
#:select (write-u8 write-bytevector))
|
||||
#:export (assemble))
|
||||
#:export (assemble assemble-file))
|
||||
|
||||
(define (lookup-instruction inst)
|
||||
(define inst-obj (assq inst *instruction-set*))
|
||||
@@ -55,3 +55,12 @@
|
||||
(write-word (cadr inst))
|
||||
(write-word (assq-ref labels (cadr inst)))))
|
||||
(loop (cdr seq)))])))))
|
||||
|
||||
(define (assemble-file file out)
|
||||
(call-with-input-file file
|
||||
(lambda (in)
|
||||
(define (read-all next)
|
||||
(if (eof-object? next)
|
||||
'()
|
||||
(cons next (read-all (read in)))))
|
||||
(assemble (read-all (read in)) out))))
|
||||
|
||||
@@ -127,7 +127,7 @@
|
||||
|
||||
|
||||
;;; Execution
|
||||
(define* (make-vm #:key stack-size memory-size)
|
||||
(define* (make-vm #:key stack-size memory-size debugger)
|
||||
"Create a fresh VM, with optional stack and memory sizes"
|
||||
(define data-stack (if stack-size (make-stack stack-size) (make-stack)))
|
||||
(define ret-stack (if stack-size (make-stack stack-size) (make-stack)))
|
||||
@@ -157,6 +157,8 @@
|
||||
(define (fetch-and-execute)
|
||||
(define exit? #f)
|
||||
(let lp ([op (fetch-byte)])
|
||||
(when debugger
|
||||
(debugger))
|
||||
(case (op-lookup op)
|
||||
[(push)
|
||||
(push data-stack (fetch-word))]
|
||||
|
||||
Reference in New Issue
Block a user