Here you can find modifications (I deliberately do not call them enhancements) I did to Project Oberon 2013.
Unlike the Oberon modules in the OberonEmulator
repository,
these modifications do not depend on my emulator and may be used on any emulator or even on bare metal.
Some modifications require recompiling the inner core, or even recompiling the bootloader,
but those requirements are clearly listed in the accompanying README.md
file.
To recompile and link the inner core, you can use Andreas Pirklbauer's Boot Linker, which is (for convenience; it is impossible to use that repo as a submodule as it is frequently rebased) also available in this repo.
Modifications marked with a † are not included in the prebuilt release. Either they collide with other modifications, they need larger changes to the system which cannot be done by recompiling a few files and writing a new inner core, or they are not designed to be used on a day-by-day basis.
The CommandLineCompiler is available as a separate release.
Modifications marked with a ‡ are only included in the prebuilt "debug release". These modifications aid in debugging, but have a high performance or binary size overhead, and are therefore undesirable in normal builds.
There are also two separate releases available that include the rescue system (the normal one and the "debug" one).
Name/Link | Short description | Requirements |
---|---|---|
BugFixes | Fixes for what I consider to be bugs | Optionally recompile inner core |
ConvertEOL | Convert line terminators when loading text files as ASCII | Recompile Texts.Mod |
MinimalFonts† | Minimal Fonts modules with a single font embedded to save space and avoid filesystem access | Recompile Fonts.Mod |
RescueSystem† | Boot into secondary inner core in case main one is unable to boot | Compile two inner cores, move filesystem offset |
DrawAddons | More features for Oberon Draw | Optionally recompile Graphics.Mod |
Calculator | Simple prefix notation calculator | None |
ResourceMonitor | Continually display module space and heap usage | None |
DefragmentFreeSpace | Defragment all files and move them to the beginning of the filesystem | Recompile inner core |
RealTimeClock | Add a "ticking" real-time clock that is updated on demand based on Kernel.Time |
Recompile inner core |
DoubleTrap | Detect when a trap occurs in the trap handler and work around it | Minimal: Recompile System.Mod ; Full: Recompile inner core |
MinimalBootstrapSystem† | Minimal disk image that can be used to bootstrap/compile the normal system | Recompile everything except inner core |
OnScreenKeyboard | Little keyboard on the screen when no real keyboard is available | Recompile Input.Mod and dependant modules |
WeakReferences | Add weak references to the Project Oberon 2013 kernel | Recompile inner core |
RebuildToolBuilder | Build a list of modules that need to be rebuilt | None |
KeyboardTester | Test if all keys on your (emulated) keyboard work | None |
RemoveFloatingPoint† | Build an Oberon system without Floating Point support | Recompile inner core |
RobustTrapViewer | Make sure TRAPs in system modules are seen | None (load it manually) |
TrapBacktrace | Print a backtrace on TRAP and ABORT | Optionally update the boot loader |
ZeroLocalVariables | Zero local variables to avoid memory corruption due to uninitialized variables | Recompile ORG.Mod |
VariableLinespace | Support lines of different height in the same Text viewer | Recompile TextFrames.Mod |
UTF8Charset† | Display UTF-8 characters in a Text viewer | Recompile outer core and compiler |
UTF8CharsetLite | UTF-8 support, limited to special Unicode text viewers | Recompile Fonts.Mod |
RemoveFilesizeLimit | Remove the 3MB file size limit | Recompile inner core |
ORInspect | Inspect global module variables and heap pointers | Recompile compiler and all modules you want to inspect |
ORStackInspect‡ | Inspect stack variables when printing a backtrace | Apply DoubleTrap, TrapBacktrace, ZeroLocalVariables and ORInspect; recompile everything including inner core |
StackOverflowProtector | Trigger TRAP 9 at stack overflows | Recompile inner core |
CommandExitCodes | Let commands return an exit code so that scripts can react to it | Recompile outer core |
CommandLineCompiler† | Run the Oberon compiler in a command line emulator | Patch emulator |
KernelDebugger‡ | Debug and inspect one RISC5 machine from another one via serial link | Apply ORStackInspect; recompile everything including inner core |
InnerEmulator | Emulate a RISC processor on the Oberon system | None (except patience when starting it up) |
ReproducibleBuild† | How to build Oberon disk images that are bit-for-bit identical | Recompile everything |
FontConversion | Conversions to and between Oberon .Scn.Fnt files | Optionally patch Display.Mod |
DynamicMemorySplit | Move the address that separates heap from stack and modules | Rebuild inner core |
Clock | Show a clock in the lower right corner | None |
CrossCompiler | Compile a second set of modules without affecting the current system | Recompile compiler |
ImageBuilder | Build disk images | None |
HardwareEnumerator | Make disk images hardware independent by enumerating hardware at startup | Recompile inner core |
SeamlessResize | Automatically resize the Oberon system when emulator window is resized | Hardware Enumerator |
ColorSupport | Support both monochrome and 16-color modes | Hardware Enumerator |
ColorPalette | ColorPalette - Display and edit the color palette | Color Support |
StartupCommand | Run a command (from System.Tool) when Oberon starts | Recompile System.Mod |
DebugConsole | Write debug strings to MMIO address and view them in emulator output | Hardware Enumerator |
Scripting | Run multiple commands and react on their outcome | Apply CommandExitCodes |
ChangeResolution | Dynamically change the display resolution if the driver supports it | Recompile outer core |
LanguageServerProtocolHelper | Backend service for an Oberon LSP Server | None |
EmbeddableCompiler† | Version of the Oberon RISC Compiler that does not (directly) depend on Fonts/Texts/Oberon | None |
EditImprovements | Edit.Locate and ~.Search display the target location in the first line of the viewer | Recompile Edit.Mod |