The Windows Astrobe Oberon for RISC5 compiler has been synchronised with the Project Oberon FPGA RISC5 compiler sources current as at March 2020.
The following is a summary of features that have been implemented that are not specified in the Language Report. For more information refer to the Oberon Programming Guide on the Astrobe Help menu. Guidelines and examples of recommended Oberon coding techniques are also included. These features are syntax-compatible with Astrobe for Cortex-M3, M4 and M7.
An optional integer constant third parameter inc can be used with the functions SYSTEM.GET and SYSTEM.PUT to automatically post-increment / pre-decrement the value of the address of the variable that is being accessed. e.g.
SYSTEM.PUT(wordAddr, intData, 4);
SYSTEM.GET(byteAddr, byteData, -1);
An Oberon interrupt handler is a normal procedure which has an integer constant in square brackets instead of a list of parameters. The constant can be a literal or named constant. e.g.
The Verilog sources for the supported target devices have been synchronised with the Project Oberon Verilog sources current as at Sep 2018.
Support for up to 3 x SPI, an I2C master and 32 GPIO connections.
The SPI implementation has a new parameter wordsize (0 = 8-bit byte, 1 = 32-bit word), so that the size of the data can be specified separately from the speed of the data transfer. Examples of its use can be seen in the library modules Kernel and RTC.
The instruction set used by Astrobe Project Oberon compilers includes an extension of the RISC5 Branch Conditional instruction. This extension was introduced to allow the efficient implementation of the numeric CASE statement which is defined in the Oberon report but has not yet been implemented in the standard distribution of Project Oberon.The standard Branch Conditional via Register instruction is
As a result, the average overhead of any selection in a CASE statement, including range checking, is now a constant 6 instructions. The average overhead of any selection in an IF THEN ELSE statement is (N + 1) * 2 instructions. Hence, in situations where there is an equal probability of each selection occurring, CASE is faster than IF whenever there are more than 2 choices.
Embedded Project Oberon has been implemented on a number of inexpensive FPGA development boards using Xilinx Spartan-7 and Artix-7 devices. The RISC5 processor clock speed used is 40 MHz.
Arduino Shield-compatible SPI and I2C pins are supported on the Digilent Arty A7 and Arty S7 development boards.
The following library modules are additional to the Project Oberon modules. Refer to the Astrobe source code examples to see how they can be used:
Perform bitwise operations on INTEGERs.DateTime
Date and Time to / from string conversion functions.
General Purpose IO pin support.
HCFiler was developed for Embedded Project Oberon to be used for applications (e.g. data logging, backups etc.) that might need to create files with a total size exceeding the 64 MB limit of the standard Project Oberon SD card filesystem. The files can subsequently be processed / analysed on a Windows system.
Supports peripheral devices (e.g. a digital compass) which communicate via an I2C bus.
Supports the Maxim DS3234 Real-Time Clock device. The DS3234 is a battery-backed chip that provides continuous time (hours, minutes and seconds) and date (year, month and day) information accurate to +/- 2 minutes per year via an SPI interface. It is used to automatically timestamp Project Oberon files and can be used with the Astrobe HCFiler filesystem functions to implement accurate datalogging applications.
The RTC device is available as a convenient Deadon RTC breakout board from SparkFun. Alternative RTC devices can be used if required without modifying the Oberon Kernel.
Supports LCD displays, SD cards, 7-segment LEDs, and digital sensors such as accelerometers, magnetometers, etc. which are controlled via the Serial Peripheral Interface (SPI).
Implements time delays measured in milliseconds.
Source code examples include: