Other implementation of vm?

This commit is contained in:
2026-02-13 14:54:24 -06:00
parent 0783e7c587
commit d44f5d2851

35
scmvm/vm2.scm Normal file
View File

@@ -0,0 +1,35 @@
(define-module (scmvm vm2)
#:use-module (ice-9 hash-table)
#:export (define-instruction-set
instruction-lookup
instruction-name
instruction-code
register-set))
;;; Instructions
(define-syntax define-instruction-set
(syntax-rules (define-instruction)
[(_ (set-name reg ...) (define-instruction (name opcode) impl ...) ...)
(define (set-name dispatch)
(case dispatch
[(lookup)
(lambda (lookup)
(case lookup
[(name) '(name opcode)] ...
[else #f]))]
[(call)
(lambda (registers)
(let ([reg (assq-ref registers 'reg)] ...)
(parameterize ([reg #f] ...)
(lambda (op)
(case op
[(opcode) impl ...] ...)))))]))]))
(define (instruction-lookup isa name)
((isa 'lookup) name))
(define instruction-name car)
(define instruction-code cadr)
(define (register-set names)
(alist->hash-table (map (lambda (n) (cons n (make-parameter #f))) names)))