This is an emulator for the Project Oberon (Revised Edition 2013) RISC processor, written in the Go programming language. It is a port of Peter De Wachter's C-based emulator to Go.
Project Oberon is a design for a complete desktop computer system from scratch, created by Niklaus Wirth and Jürg Gutknecht. Its simplicity and clarity enable a single person to understand and implement the entire system, making Project Oberon an excellent educational tool. It consists of:
- A RISC CPU design.
- A programming language with a compiler written in itself.
- An operating system with a text-oriented, mouse-controlled graphical user interface, written in the Oberon programming language.
If you find this project interesting, you should also explore this Oberon compiler in Go, which is a direct port of Wirth's compiler for the RISC architecture from Oberon to the Go programming language. Additionally, you can still use the original compiler within the emulator itself.
$ go install github.com/fzipp/oberon/cmd/oberon-emu@latest
First, download an Oberon disk image (.dsk file), e.g. from this repository.
Next, initiate the emulator by providing the disk image file as a command-line argument:
$ oberon-emu Oberon-2020-08-18.dsk
Visit http://localhost:8080 in a web browser
Open the following link in your web browser: http://localhost:8080.
This is the Project Oberon user interface right after starting:
How to use the Oberon System (PDF)
Oberon's user interface is designed for use with a three-button mouse, but the emulator also provides the option to simulate all three mouse buttons via the keyboard.
Mouse button | Function | Mac keyboard | PC keyboard |
---|---|---|---|
Left | Set caret (cursor) | ⌃ control | Ctrl |
Middle | Execute command | ⌥ option | Alt |
Right | Select text | ⌘ command | Meta (Win) |
Key | Function |
---|---|
Esc | Undo all selections |
F1 | Set global marker |
Oberon is the latest programming language in Wirth's series of language designs, with predecessors like Pascal and Modula. Additionally, there are various versions and dialects of these three languages. Wirth's goal has always been to simplify the language whenever possible.
Oberon's grammar is designed in a way that allows for implementation with a single-pass compiler. Oberon code is organized into modules that can be compiled separately. The language is statically typed and incorporates a garbage collector for memory management. Access to low-level and unsafe facilities is possible through a designated SYSTEM module.
Furthermore, Oberon's influence extends to some aspects of Go, as Robert Griesemer, one of the original creators of Go, explains in this GopherCon 2015 talk "The Evolution of Go".
This project is free and open source software licensed under the ISC License.