#lang scheme/base

;; simulator

;; Writing code for a distributed embedded system is hard. The reasons
;; is that not everything can be practically observed or tested in
;; isolation. In order to be able to WRITE code for parallel systems
;; you need fine-grained modularity, but in order to TEST code you
;; need a lot of eyes, i.e. expensive hardware.

;; The point of this module is to create a fine-grained simulator to
;; make debugging through simulation
;; * easier to understand: replace small functional units by small
;;   test units. (fine grain simulation)
;; * easier/cheaper to implement: make the compiler decide on what's
;;   real and what's simulated, and run as much as possible on REAL
;;   hardware while keeping the testing VIRTUAL (partial evaluation)

;; This is implemented as a special-purpose assembler for a
;; special-purpose machine. One defines a simulator in a simple
;; specification language, and a simulator generator that can
;; interpret this language, or compile it to some fast specific
;; simulator.

;; So, what is necessary, is a simple language to specify processor
;; behaviour. Some RTL thing with a special ALU part.