A Scheme Interpreter for ARM Microcontrollers:
ChangeLog for Version 00.0152
Changes from version 00.0137:
The file writing error identified in version 00.0137, whereby the last
byte to be written before a page change was dropped, has been fixed on all
The reader and parser have been improved for better treatment of punctuation,
especially blank spaces, semi-colons, double-quotes and parentheses.
Additionally, ctrl-c can now be used to break out of infinite iterations and
to recover from hung read/parse operations.
Undefined symbols are now treated as errors rather than evaluating as null lists.
A function named (install ...) has been added to allow objects to be
stored in RAM above the heap.
These objects are read-write accessible from the Scheme environment but
are neither updated nor deleted by garbage collection (any reference they
make to heap objects will be lost upon garbage collection).
Heap size is reduced by the size of RAM-installed objects each time a new
object is so-installed and the space is not freed until MCU reset
(in a stop-and-copy system, heap size reduction is about half of the size
of the installed objects).
Such objects can be used to store ADC data, fonts, machine code
(eg. peripheral device drivers) and the like.
The input/output port subsystem has been reworked to allow the development of
These ports are vectors of port information and port functions that can be used
by built-in I/O functions such as (read ...) and (write ...).
User-defined port functions may be written in machine code and stored in RAM above the heap.
The interrupt subsystem has been reworked to allow the development of user-defined
Interrupt Service Routines (ISRs) in addition to the user-defined timer ISRs of prior
User-defined ISRs can consists of machine code only, Scheme code only (in some cases) or
both machine and Scheme code.
The machine code of a user-defined ISR is to be stored in above-heap RAM and is linked
to the interrupt-handling subsystem via the user-accessible Scheme vector named _ISR.
A Scheme ISR is developed as in previous versions but the function written to
timer0, offset #x010000, now takes an optional input argument representing the
numerical ID of the interrupt to be serviced (which is not necessarily a timer
Program examples (including an on-chip assembler) are under development to
illustrate the application of the new features described above.
Last updated November 2, 2008