scsh-0.5/vm/interfaces.scm

245 lines
6.1 KiB
Scheme

(define-interface vm-utilities-interface
(export adjoin-bits low-bits high-bits unsigned-high-bits
assert
read-number write-number
vector+length-fill!))
(define-interface vm-architecture-interface
(export (enum :syntax) ;so you don't have to remember to open enumerated
bits-used-per-byte
maximum-stack-args
interrupt
interrupt-count
memory-status-option
op
op-count
opcode-arg-specs
stob
stob-count
least-b-vector-type
stob-data
time-option
))
; Memory
(define-interface memory-interface
(export create-memory memory-begin memory-size
bytes-per-cell bits-per-cell
bytes->cells
cells->bytes
a-units->cells
cells->a-units
bytes->a-units
addr+ addr- addr1+ addr= addr< addr<= addr> addr>=
fetch fetch-byte
store! store-byte!
write-bytes read-bytes
))
; Low-level data structures
(define-interface data-interface
(export vm-eq?
fixnum? immediate? header? stob?
enter-fixnum extract-fixnum
bits-per-fixnum too-small-for-fixnum? too-big-for-fixnum?
vm-= vm-<
undefined?
true false eof-object null unspecific quiescent
unbound-marker unassigned-marker
vm-boolean? false? enter-boolean extract-boolean
vm-char? enter-char extract-char vm-char=? vm-char<?
make-header header-type
header-length-in-bytes header-length-in-cells
immutable-header? make-header-immutable
d-vector-header? b-vector-header?
max-stob-size-in-cells
address->stob-descriptor
stob-descriptor->address
))
(define-interface fixnum-arithmetic-interface
(export add-carefully subtract-carefully
multiply-carefully divide-carefully
quotient-carefully remainder-carefully
shift-carefully
abs-carefully
))
(define-interface stob-interface
(export make-d-vector make-b-vector universal-key
stob-header stob-header-set!
d-vector-length d-vector-ref d-vector-set!
b-vector-length b-vector-ref b-vector-set!
stob-length-in-bytes stob-of-type?
copy-stob copy-cells!
stob-equal?
valid-index?
immutable? make-immutable!
address-at-header address-after-header address-after-stob
))
(define-interface heap-interface
(export initialize-heap
register-static-areas
available? available heap-size
preallocate-space
begin-collection
trace-value trace-locations
trace-impure-areas
do-gc
end-collection abort-collection
gc-count
image-writing-okay? write-image
check-image-header read-image
walk-over-symbols find-all-xs
))
(define-interface heap-extra-adds-interface
(export newspace-begin
heap-pointer
header-a-units
d-vector?
stob-type))
(define-interface heap-extra-interface
(compound-interface heap-extra-adds-interface
heap-interface))
(define-interface struct-interface
(export vm-pair? vm-pair-size vm-cons vm-car vm-set-car! vm-cdr vm-set-cdr!
vm-symbol? vm-symbol-size vm-symbol->string
closure? closure-size make-closure closure-template closure-env
location? location-size make-location contents set-contents! location-id
weak-pointer? weak-pointer-size make-weak-pointer weak-pointer-ref
external? external-size make-external external-name external-value
port? port-size make-port
port-mode set-port-mode!
port-index set-port-index!
peeked-char set-peeked-char!
port-id set-port-id!
vm-vector? vm-vector-size vm-make-vector vm-vector-length
vm-vector-ref vm-vector-set!
vm-vector-fill!
record? record-size vm-make-vector record-length
record-ref record-set!
extended-number? extended-number-size vm-make-vector extended-number-length
extended-number-ref extended-number-set!
continuation? continuation-size vm-make-vector continuation-length
continuation-ref continuation-set!
continuation-cont set-continuation-cont!
continuation-pc set-continuation-pc!
continuation-template set-continuation-template!
continuation-env set-continuation-env!
continuation-cells
code-vector? code-vector-size make-code-vector code-vector-length
code-vector-ref code-vector-set!
template? template-size make-template template-length
template-ref template-set!
template-code template-name
make-template-containing-ops op-template-size
vm-string? vm-string-size vm-make-string vm-string-length
vm-string-ref vm-string-set!
enter-string extract-string
write-vm-string vm-string=? vm-string-hash
intern add-to-symbol-table
))
(define-interface vmio-interface
(export initialize-i/o-system initial-i/o-heap-space
initial-input-port initial-output-port
extract-port
vm-input-port? vm-output-port?
open-port
open?
close-port
close-untraced-ports!
))
(define-interface environment-interface
(export current-env set-current-env!
env-ref env-set! env-parent env-back
stack-env-space pop-args-into-env
heap-env-space pop-args-into-heap-env
current-env-size preserve-current-env
))
(define-interface stack-interface
(export initialize-stack initial-stack-heap-space
reset-stack-pointer stack-size
push pop stack-ref stack-set!
arg-stack-overflow-nargs
ensure-stack-space
reserve-exception-space allow-exception-consing
stack-continuation-size
push-continuation-on-stack
pop-continuation-from-stack
current-continuation-size current-continuation
set-current-continuation!
peek-at-current-continuation skip-current-continuation!
get-continuation-from-heap
trace-stack
arguments-on-stack
move-args-above-cont!
pointer-to-stack-arguments ; for calling external procedures
remove-stack-arguments
))
(define-interface external-interface
(export extended-vm
ps-real-time
ps-run-time
ps-ticks-per-second
ps-schedule-interrupt
lookup-external-name
))
; From Scheme 48
(define-interface ps-enumerated-interface
(export (define-enumeration :syntax)
(enum :syntax)
(enumerand->name :syntax)
(name->enumerand :syntax)))
; What the external world can call
(define interpreter-interface
(export required-init-space
initialize-vm
register-static-areas
call-startup-procedure
check-image-header
read-image
do-gc
note-interrupt!))