Compare commits
2 Commits
9a8cd12c5d
...
c916cc8dbf
Author | SHA1 | Date | |
---|---|---|---|
c916cc8dbf | |||
5e46e323a6 |
12
scmvm/vm.scm
12
scmvm/vm.scm
@ -5,8 +5,10 @@
|
||||
#:use-module (srfi srfi-1)
|
||||
#:use-module (srfi srfi-9)
|
||||
#:use-module (srfi srfi-26)
|
||||
#:export ((make-vm* . make-vm) run-vm
|
||||
vm-memory-ref vm-memory-byte-ref vm-memory-set! vm-memory vm-load-program!
|
||||
#:use-module (srfi srfi-43)
|
||||
#:export (make-stack (push . stack-push) (pop . stack-pop) (peek . stack-peek) stack-ref stack->list
|
||||
(make-vm* . make-vm) run-vm
|
||||
vm-memory-ref vm-memory-byte-ref vm-memory-set! vm-memory vm-load-program!
|
||||
vm-data-stack vm-ret-stack
|
||||
vm-debugger vm-debugger-set!
|
||||
vm-pc vm-pc-set!
|
||||
@ -52,6 +54,9 @@
|
||||
[(ref)
|
||||
(lambda (k)
|
||||
(vector-ref the-stack k))]
|
||||
[(->list)
|
||||
(lambda ()
|
||||
(reverse-vector->list the-stack 0 top))]
|
||||
[else (error "stack dispatch unknown value")])))
|
||||
|
||||
(define (push stack v)
|
||||
@ -72,6 +77,9 @@
|
||||
(define* (make-ram #:optional (memory-size *memory-size*))
|
||||
(make-bytevector memory-size #x00))
|
||||
|
||||
(define (stack->list stack)
|
||||
((stack '->list)))
|
||||
|
||||
|
||||
;;; IO
|
||||
(define (read-word)
|
||||
|
16
tests.scm
16
tests.scm
@ -1,6 +1,7 @@
|
||||
(use-modules (d- test)
|
||||
(scmvm assembler)
|
||||
(scmvm vm)
|
||||
(scmvm debugger)
|
||||
(rnrs bytevectors)
|
||||
(rnrs io ports)
|
||||
((scheme base)
|
||||
@ -129,3 +130,18 @@
|
||||
(vm-pc-set! my-vm 5)
|
||||
(run-vm my-vm)
|
||||
(assert-equal 55 (vm-memory-ref my-vm 1))))
|
||||
|
||||
(define-test-suite "debugger"
|
||||
(define-test "modify-running-program"
|
||||
(define my-debugger (make-debugger fib-program-asm))
|
||||
(define my-vm (debugger-vm my-debugger))
|
||||
(define my-data (vm-data-stack my-vm))
|
||||
(vm-memory-set! my-vm 1 10)
|
||||
(vm-pc-set! my-vm 5)
|
||||
(debugger-breakpoint-add! my-debugger 'fib)
|
||||
(debugger-continue my-debugger)
|
||||
(assert-equal 10 (stack-peek my-data))
|
||||
(stack-pop my-data)
|
||||
(stack-push my-data 1)
|
||||
(debugger-continue my-debugger)
|
||||
(assert-equal 1 (vm-memory-ref my-vm 1))))
|
||||
|
Loading…
Reference in New Issue
Block a user