A Scheme Interpreter for ARM Microcontrollers:
ChangeLog for Version 080
Changes from release 070:
-
This release supports 20 boards (which is down from 50 in 070), 11 of which
are new, with Cortex-M7, Cortex-A5,A9 and Cortex-A53 MCUs.
There is a minimum requirement in this release, that MCUs must have
ARM standard FPU and MPU (or MMU), which excludes those below Cortex-M4F.
-
This release supports both 32-bit operation (Cortex-M and Cortex-A5,A8,A9)
and 64-bit operation (Cortex-A53).
The code base is unified and uses different register mappings and macros
for the 32 and 64-bit cases.
An assembler that supports both Thumb-2, 32-bit ARM and 64-bit ARM
instructions is needed to re-assemble the code for the supported MCUs
(eg. GNU assembler version 2.28).
-
The code has been separated into a small Live-SD (LSD) bootloader
and the ArmPit Scheme (APS) executable.
This solves some previous challenges (eg. for LPC4357 and OMAP4430)
where some aspect of the booting process prevented a full Armpit Scheme
version from being loaded.
The benefit is greater feature uniformity across MCUs and boards.
There are just 4 versions of the APS: aps64.bin for Cortex-A53, aps32.bin
for Cortex-A5,A8,A9, apsT2.bin for Cortex-M where code can run at 0x00,
and apsT2co2.bin for Cortex-M where code runs at 0x20000000.
-
This version uses an SD-card for code and file storage.
The internal flash that some MCUs have is no longer used for files.
Internal flash is used, in some cases, to store the LSD bootloader
(for those MCUs that cannot boot from SD-card) but not for files.
-
This version supports 16-bit unicode characters.
Characters are stored as double-bytes, and strings are arrays
of such double-bytes.
Symbols (eg. names of variables and functions) are stored in utf-8
format (conserves memory).
The greek symbol λ is aliased to the syntax form lambda.
-
This release adds some R7RS-Small functions to the base R5RS and R6RS
components of prior versions.
In particular, this version implements string-map, string-for-each,
utf8->string, string->utf8, string-copy!
vector-map, vector-for-each, vector-copy! and vector-append, among
others.
Libraries are now defined using (define-library ...) rather than
(library ...).
Exceptions are raised using raise, raise-continuable or error
(instead of throw) and may be managed using with-exception-handler.
The names of several source code files have been changed from previous
versions to indicate their current relationships with specific sections
of the R7RS-small document.
-
The code of the quasiquote syntax form has been updated to improve
standards conformance.
-
For the Cortex-M, a memory allocation nursery is now implemented, to
improve performance in relation to minor and major garbage collections.
-
The MCU-specific components of input/output-port code are now found
in the LSD bootloader (which is part of what makes it possible to have only
4 versions of the APS code).
The related code is in the lsd/ directory of the source code (whereas APS
code is in the aps/ folder).
An echo function has been added to character output ports to help with
input redirection (especially within interrupts).
This makes it possible, for example, to echo characters received by a uart
to an external display (rather than back through the uart), or to echo
characters received by a USB keyboard to a uart or external display
(eg. in a standalone console-based system).
-
A built-in variable, named _as_abi, can be used to identify whether
a running system is 64-bit (_as_abi = 64), 32-bit ARM (_as_abi = 32),
Thumb2 running from 0x00 (_as_abi = 16) or Thumb2 running from 0x20000000
(_as_abi = 24).
-
The ARMSchemblers (32-bit ARM and T2) have been updated for this version,
and a 64-bit ARMSchembler has been developed.
Updated examples are presented under the Documentation heading
(eg. Common Program Examples, ...)
on the main web page
(updated as new examples are produced)
Last updated July 12, 2018
bioe-hubert-at-sourceforge.net