From d0d0ca23ec689032df1be1ad285f8cbe03c66e19 Mon Sep 17 00:00:00 2001 From: Dane Johnson Date: Mon, 25 Aug 2025 12:34:08 -0500 Subject: [PATCH] More useful error messages, assume unsigned ints --- scmvm/assembler.scm | 2 +- scmvm/vm.scm | 22 ++++++++++++++-------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/scmvm/assembler.scm b/scmvm/assembler.scm index ad527a1..501f6f7 100644 --- a/scmvm/assembler.scm +++ b/scmvm/assembler.scm @@ -49,7 +49,7 @@ (define (write-word word) (define bv (make-bytevector 4)) - (bytevector-s32-native-set! bv 0 word) + (bytevector-u32-native-set! bv 0 word) (write-bytevector bv)) (define (assembly-pass seq labels) diff --git a/scmvm/vm.scm b/scmvm/vm.scm index 7d7fa41..f2f921d 100644 --- a/scmvm/vm.scm +++ b/scmvm/vm.scm @@ -6,13 +6,14 @@ #:use-module (srfi srfi-9) #:use-module (srfi srfi-26) #:use-module (srfi srfi-43) + #:use-module (ice-9 format) #: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! - *instruction-set* instruction-type instruction-code)) + (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! + *instruction-set* instruction-type instruction-code)) ;;; Data Structures (define *stack-size* 512) @@ -114,12 +115,16 @@ (swap #x17) (rot #x18) (over #x19) + (not #x1a) (bye #xff))) (define instruction-code cadr) (define (op-lookup code) - (car (find (lambda (x) (= (instruction-code x) code)) *instruction-set*))) + (let ([op (find (lambda (x) (= (instruction-code x) code)) *instruction-set*)]) + (if op + (car op) + (error (format #f "tried to execute non-existant instruction ~x" code))))) (define (binop-lookup op) (case (op-lookup op) @@ -129,7 +134,8 @@ [(or) logior] [(nand) (compose lognot logand)] [(nor) (compose lognot logior)] - [(xor) logxor])) + [(xor) logxor] + [(not) lognot])) (define (relop-lookup op) (case (op-lookup op)