{"id":25694118,"url":"https://github.com/ef15c/oberon_stm32f4","last_synced_at":"2026-02-11T20:02:35.636Z","repository":{"id":211312351,"uuid":"728772405","full_name":"ef15c/oberon_stm32f4","owner":"ef15c","description":"Portage of Oberon system to stm32f429i-disco or disc1 board","archived":false,"fork":false,"pushed_at":"2026-01-19T12:45:34.000Z","size":34354,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-01-19T19:31:31.726Z","etag":null,"topics":["armv7m","computer","cortex-m4","cortex-m4f","msp430","oberon","oberon-07","oberon-system","operating-system","stm32","stm32f4","stm32f429i-disco","stm32f429l-disc1"],"latest_commit_sha":null,"homepage":"","language":"Modula-2","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ef15c.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-12-07T16:56:21.000Z","updated_at":"2026-01-19T12:43:13.000Z","dependencies_parsed_at":"2023-12-07T19:24:35.240Z","dependency_job_id":"1f53d5f0-3a0c-488d-8d6f-04d14f58f872","html_url":"https://github.com/ef15c/oberon_stm32f4","commit_stats":null,"previous_names":["ef15c/oberon_stm32f4"],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/ef15c/oberon_stm32f4","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ef15c%2Foberon_stm32f4","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ef15c%2Foberon_stm32f4/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ef15c%2Foberon_stm32f4/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ef15c%2Foberon_stm32f4/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ef15c","download_url":"https://codeload.github.com/ef15c/oberon_stm32f4/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ef15c%2Foberon_stm32f4/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29343683,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-11T18:58:20.535Z","status":"ssl_error","status_checked_at":"2026-02-11T18:56:44.814Z","response_time":97,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["armv7m","computer","cortex-m4","cortex-m4f","msp430","oberon","oberon-07","oberon-system","operating-system","stm32","stm32f4","stm32f429i-disco","stm32f429l-disc1"],"created_at":"2025-02-24T23:50:56.352Z","updated_at":"2026-02-11T20:02:35.627Z","avatar_url":"https://github.com/ef15c.png","language":"Modula-2","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Oberon STM32F4\nPortage of Oberon system to stm32f429i-disco board\u003cbr\u003e\u003cbr\u003e\n\n**Version 14 released!**\n## Oberon System\n**Improvements:**  \n\n* Edit.ChangeOffset allows formatting indices and exponents in texts  \n* Mouse wheel support in text frames\n* Scrolling text is now faster\n* VGA stability improved\n* HOME and END keys supported\n* NIL dereferences (trap 4) detection improved\n* tests of OM4 compiler with Advent Of Code 2025 puzzles\n\n**Fixes:**\n\n* CapsLock sometimes freezes keyboard fixed\n* LED blinking on system panic fixed\n* wrong mouse pointer shape in text frames fixed\n\n## MSP430 Oberon compiler\nThe compiler and linker were rewritten in order to eliminate unused code and data.  \nLibraries can now include many procedures and only the ones used in the program\nwill be placed in the generated firmware.  \n\nA new example including a bootloader and code in RAM feature has been added (bootloader and sDiary).\n\nThis toolchain is also available on GNU/Linux amd64 [here](https://github.com/ef15c/omsp).\n## Hardware\nThe base board PCB can be ordered [here](https://www.pcbway.com/project/shareproject/Oberon_STM32F429I_DISCO_station_af64426e.html)  \n## Previous releases\nA rudimentary image manipulation module is available. It allows to display 8bpp indexed colors BMP and can take screenshots.\n  \n![Screenshot](https://raw.githubusercontent.com/ef15c/oberon_stm32f4/refs/heads/main/sources/graph/screenshot7C99C356.png)\n  \n**The 12th release contains a major improvement:** the code and strings of the modules can be stored\n in the microcontroller's flash memory and executed in place.\nIn this case, the global data will be placed is SRAM.  \nPreviously, the modules had to be loaded into the SDRAM for execution.  \nThere are a lot of advantages doing this:  \n\n* The code executes 8 times faster, by avoiding the competition between CPU and VGA system for SDRAM access.  \n* More SDRAM is available for modules that remain in SDRAM and for the heap.\n* If the Oberon system and the compiler are both placed in embedded flash memory,\n the system is guaranteed to boot and compile even if incoherent recompilation has been done on vital modules.\n \n To put modules in embedded flash, follow this procedure:\n \n * Prelink the modules using the command **OM4L.LinkEF**. Example: `OM4L.LinkEF Modules System Edit OM4P ~`  \nThis will produce a .efb file that will be later placed in the embedded flash memory.\n * Reboot the station in legacy SDRAM mode by pressing the SW1 button on the base board and the reset button on the SMT429I-DISCO board.\n  This is mandatory because it is not safe to modify the embedded flash memory while executing it.\n * Install the .efb file using the command **OM4L.LoadEF**. Example: `OM4L.LoadEF OM4P.efb`  \nThe installation can be verified by comparing the .efb file and the content of the embedded flash,\n using the command **OM4L.CompareEF**. Example: `OM4L.CompareEF OM4P.efb`  \nThe installation is successful if the output of this command ends with the word \"same\".\n * Reboot the station without pressing SW1 button. The station should now execute the Oberon system and the compiler from embedded flash.\n This can be checked with the command **System.ShowModules**. In the window that appears,\n  all lines refering a module stored in embedded flash will end with the number -1. Example: `OM4P\t 0802E7B4 0802F1F4  -1`\n\n  \nReminder: starting wiht the release 9, it is now easy to launch user actions immediately after system startup.\nPut your code in the initialization section of the OnStartup module and compile it.\n\n![OberonMSP430compiler](https://github.com/user-attachments/assets/6926baf1-dc6c-406c-8f0f-f2973136a3e1)\n\n\u003cbr\u003e\nQWERTY keyboard can be activated by middle clicking on the text \"OM4P.Compile InputQwerty.Mod ~\"\u003cbr\u003e\ndisplayed in yellow in the middle of the System.Tool window. Restart the system to load the updated Input module.\u003cbr\u003e\n\u003cbr\u003e\n\n![System_Tool](https://github.com/ef15c/oberon_stm32f4/assets/8286839/867c913a-35e0-49ab-a81b-0c658132c971)\n\n![OberonRunningR3](https://github.com/ef15c/oberon_stm32f4/assets/8286839/32ec5160-54e4-4188-9445-5ce0f7f4f413)\n\n![OberonRunningR2](https://github.com/ef15c/oberon_stm32f4/assets/8286839/87f5d58e-1d84-4705-a15d-ad8de9eb8cd8)\n\n\u003cb\u003eChanges in oberon 07 compiler:\u003c/b\u003e\n\n\u003cb\u003eRegisters usage control in procedures\u003c/b\u003e\u003cbr\u003e\nCortex M4 microcontrollers save automatically a set of registers on stack when servicing an interruption.\nIf an Oberon exception handler contains too complicated expressions, there is a risk that a non saved register is used.\nTo prevent that case to happen, I introduced a new notation ^n after the PROCEDURE keyword:\u003cbr\u003e\u003cbr\u003e\nPROCEDURE^3 handler;\u003cbr\u003e\nBEGIN ....\u003cbr\u003e\nEND handler;\u003cbr\u003e\u003cbr\u003e\nWith this information, the compiler can check  that no more than n registers are used. The save/restoration instructions are automatically generated according to the declared number of used registers.\u003cbr\u003e\n\n\u003cb\u003eUnsafe local variables marking\u003c/b\u003e\u003cbr\u003e\nThis Oberon compiler allow allocation of unitialized pointers on stack.\nThose pointers are not checked at runtime, so they are not safe until they are properly intialized.\n\nI made a change in the compiler to allow detection of the declaration of local variables containing pointers.\nThe developer must check the code to be sure that no bad use is made with these variables.\n\nFor example, assume that a Files.Rider is declared as a local variable. Using of the \"file\" member (eg. via Files.Base) is unsafe until the rider has been initialized with Files.Set.\n\nWhen the developer has determined that the code usage of the local variable is safe, he or she must mark the variable with an exclamation mark (!) in its declaration.\n\n\nOberon runs now on the STM32F429I-DISCO base board:\n\n![OberonRunning](https://github.com/ef15c/oberon_stm32f4/assets/8286839/77827576-acf8-4043-8afc-f022df2e06ab)\n\nHardware side:\n\n![equippedBaseBoard](https://github.com/ef15c/oberon_stm32f4/assets/8286839/a8bed1ea-580c-429d-b511-b619743729e1)\n\n![populatedBaseBoard](https://github.com/ef15c/oberon_stm32f4/assets/8286839/60b433b5-c5a2-4ea3-9ac8-12d0c1df88bf)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fef15c%2Foberon_stm32f4","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fef15c%2Foberon_stm32f4","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fef15c%2Foberon_stm32f4/lists"}