Sylphide OS is een open-source project dat een besturingssysteem biedt voor computers gebaseerd op microcontrollers (MCU) zonder MMU. Het doel is om een retrocomputing-ervaring te creëren die vergelijkbaar is met de homecomputers uit de jaren '80, maar dan gebruikmakend van moderne, betaalbare hardware.
Belangrijkste kenmerken:
- Positionering: Het project bevindt zich tussen eenvoudige development boards en volledige single-board computers (zoals die Linux draaien).
- Hardware: Ondersteunt diverse targets zoals de Olimex esp32-p4-pc en Raspberry Pi Pico 2. De hardware is open-source en ontworpen met KiCad.
- Functionaliteit: Focus op standaard I/O, waaronder VGA/HDMI-output en toetsenbord/muis-input via PS/2 of USB.
- Softwarestack: Gebouwd op de FreeRTOS-kernel, grotendeels geschreven in C en C++.
Momenteel bevindt het project zich in versie 0.1. Er is reeds een stabiel framework en een grafische interface met windowmanager aanwezig, terwijl ondersteuning voor opslag (microSD/USB) en netwerkfunctionaliteit nog op de planning staan.
Sylphide Operating System
Wat is het?
Context
Retrocomputing is tegenwoordig erg populair, maar dat kan veel verschillende dingen betekenen. Er zijn mensen die oude computers "restaureren" (voornamelijk om te spelen en te verzamelen), die vaak aangeven dat emulators niet echt genoeg aanvoelen voor hun herinneringen. Anderen, diepgaande elektronica-liefhebbers, zijn geïnteresseerd in de "recreatie" van oude computers, ofwel met moderne componenten (goedkoop en gemakkelijk verkrijgbaar), of juist met chips uit het juiste tijdperk voor wie dat kan betalen.
Er zijn allerlei emulators op verschillende niveaus (pure software, op basis van FPGA, cycle-accurate of op een hoger niveau, enz.). Men kan zelfs online emulators vinden voor bijna alle platforms van vóór 1990. Sommigen ontwikkelen software, meestal games, met behulp van moderne computers en software, maar gericht op oude computers.
Dit project kiest voor een andere weg: computers die gebruikmaken van moderne microcontrollers. Deze zijn goedkoop en worden steeds algemener, en we verwachten dat er in de toekomst meer beschikbaar zullen komen.
Doel
Traditioneel zijn computers gebaseerd op krachtige processors met veel randapparatuur, in het bijzonder een toetsenbord, scherm en muis. Microcontrollers zijn veel minder krachtig en bevatten een kleine core met zeer weinig RAM en veel embedded-stijl randapparatuur op dezelfde chip, zoals:
- UART
- SPI
- ADC
- I2C
- tellers, timers, enzovoort.
Naarmate de technologie evolueerde, is het verschil echter vervaagd en zien we nu microcontrollers die een "computer-achtig" systeemontwerp kunnen ondersteunen. Het gaat niet zozeer om de rekenkracht (MCU's zijn al een tijd zeer krachtig), maar eerder om het vermogen om output te leveren naar een standaard display zoals VGA of HDMI, in plaats van helemaal niets, kleine SPI-gebaseerde LCD-schermen of DSI.
In mindere mate kan ook de input een uitdaging zijn; veel MCU's hebben geen USB-hostfunctionaliteit, en wanneer ze die wel hebben, kan er vaak maar één poort worden gebruikt. Voor een toetsenbord en muis zijn er minimaal twee nodig, en idealiter een derde voor een USB-stick.
Wanneer dit alles is geregeld, heb je nog steeds een sterk beperkte omgeving (weinig RAM, weinig kleuren). Dit voelt zowel voor de gebruiker als voor de programmeur echt als de vroege computers uit de jaren '80 en '90. Dit is precies het soort 'retrocomputing' waar ik naar op zoek ben.
In dit project wordt een "computer" gedefinieerd als een apparaat met:
- toetsenbord- en muisinput, meestal via PS/2 of USB;
- een standaard displayconnector: VGA of HDMI;
- een echte framebuffer: geen 'on-the-fly' generatie van het videosignaal;
- opslag, meestal een microSD-kaart, maar USB-sticks kunnen ook.
Netwerkfunctionaliteit (ethernet/wifi) is niet vereist, maar is een geweldige extra functie.
Samenvattend is het project gericht op platforms die zich bevinden tussen "development boards" (MCU zonder display/toetsenbord/muis) en Single-board computers die meestal in staat zijn om Linux te draaien.
Dit is open hardware; de PCB is ontworpen met KiCad. De bronbestanden voor zowel de software als de hardware zijn te vinden in de (mercurial) repository op: https://freehackers.org/electronics/sylphide-os.
Het is ontwikkeld door Thomas Capricelli. Het is Sylphide OS genoemd omdat Sylphide Consulting de naam is waaronder ik als consultant werk.
Hardware
Vanaf het begin was Sylphide OS ontworpen om op verschillende platforms te draaien. Dit zijn de huidige targets, elk met een eigen pagina:
- Olimex esp32-p4-pc: het vlaggenschip-product; nieuw en krachtig.
- Barebone Raspberry Pi Pico 2: een eigen minimalistische poging tot VGA+USB op een rp2350.
- FabGL: een oude klassieker met PS/2-input en VGA.
- Emulator: draait op de (Linux) host en wordt gebruikt voor ontwikkeling.
Er zijn nog andere targets in gedachten. Als je hardware kent die geschikt zou zijn voor een dergelijk OS, laat het me dan weten, of begin zelf een port (neem wel eerst contact met me op).
Software
Tegenwoordig is een besturingssysteem voor pc's een groot pakket van verschillende softwareonderdelen (kernel, drivers, bibliotheken, programma's). "Vroeger" was het eerder een geïntegreerd en zelfstandig programma, gericht op de grafische interface. Er waren weinig drivers, omdat elke computerfabrikant, of zelfs elk computermodel, zijn eigen specifieke besturingssysteem had. Dat is wat ik hier wil recreëren.
Onder de motorkap gebruikt Sylphide OS FreeRTOS, een low-level kernel die typisch wordt gebruikt op dit soort platforms. Deze biedt hulpmiddelen voor het draaien van taken en enkele low-level routines.
Daarbovenop voegt Sylphide OS het volgende toe:
- drivers voor muis, toetsenbord, display, opslag en netwerk;
- grafische interface;
- programma's.
Het doel is om veelzijdig genoeg te zijn om bruikbaar te zijn op zeer beperkte platforms (kleine framebuffer, monochroom display, zeer weinig RAM), terwijl het toch functies kan gebruiken voor platforms met hogere specificaties.
De code is grotendeels geschreven in C (low-level, drivers, rendering-bibliotheek) en C++ (voor de grafische interface). Sommige targets maken gebruik van assembler voor de drivers. C++ wordt in zeer beperkte vorm gebruikt, waarbij alleen functies worden toegepast die de software niet onnodig verzwaren. Met zulke beperkte resources moet men zeer voorzichtig zijn.
Huidige status
Houd er rekening mee dat dit versie 0.1 is. De focus lag op het creëren van een schoon/stabiel framework en goede drivers voor een aantal targets.
Wat er reeds aanwezig is:
- kconfig-gebaseerde configuratie;
- Framework: verschillende SDK's, verschillende platforms, tooling;
- Low-level rendering: framebuffer, bitmaps, lettertypen;
- Drie targets (+ emulator), met correcte drivers;
- Grafische interface met desktop, menu, vensters, windowmanager en desktop-iconen (mogelijk herken je een bekende look);
- Informatiepaneel dat hardware- en softwaredetails toont en de kleurmogelijkheden demonstreert.
Wat er nog niet is, maar wel gepland:
- opslag (microSD, USB);
- netwerk (ethernet, wifi);
- widgets (knop, checkbox, modaal dialoogvenster, etc.);
- externe programma's (een executable laden vanaf een SD-kaart en deze uitvoeren).
Projectstructuur
De belangrijkste directorijen en bestanden zijn:
.
├── docs # (deze) documentatie
├── main # software
│ ├── main.c # entry point: init + event loop
│ ├── gfx_generic.c # fallback voor low-level grafische rendering
│ ├── bitmaps
│ ├── fonts
│ ├── arch # platform-specifieke code
│ ├── gfx # low-level grafische rendering (één per bit-diepte)
│ └── gui # window manager, menu, widgets, ...
└── tools # helpers
Contact
Als je het project wilt volgen, kun je je abonneren op mijn blog. Voor contact kunt u gebruikmaken van "old-school" IRC (instant messaging). Ik ben aanwezig op kanaal #freehackers op het Libera-netwerk. Als je IRC niet kent, is een webinterface waarschijnlijk de makkelijkste manier. Je kunt me ook een bericht sturen via het contactformulier.
Bijdragen
Als je wilt helpen bij het schrijven van Sylphide OS, is het eerste wat je moet doen contact met me opnemen. Je kunt onze gitlab gebruiken om de repository te forken: maak eerst een account aan op https://freehackers.org/explore (rechtsboven "sign in"). Er zijn koppelingen met GitHub, GitLab en Atlassian. Neem bij problemen contact met me op, wees niet verlegen.
Sylphide Operating System
Wat is het?
Context
Retrocomputing is tegenwoordig erg populair, maar dat kan veel verschillende dingen betekenen. Er zijn mensen die oude computers "restaureren" (voornamelijk om te spelen en te verzamelen), die vaak aangeven dat emulators niet echt genoeg aanvoelen voor hun herinneringen. Anderen, diepgaande elektronica-liefhebbers, zijn geïnteresseerd in de "recreatie" van oude computers, ofwel met moderne componenten (goedkoop en gemakkelijk verkrijgbaar), of juist met chips uit het juiste tijdperk voor wie dat kan betalen.
Er zijn allerlei emulators op verschillende niveaus (pure software, op basis van FPGA, cycle-accurate of op een hoger niveau, enz.). Men kan zelfs online emulators vinden voor bijna alle platforms van vóór 1990. Sommigen ontwikkelen software, meestal games, met behulp van moderne computers en software, maar gericht op oude computers.
Dit project kiest voor een andere weg: computers die gebruikmaken van moderne microcontrollers. Deze zijn goedkoop en worden steeds algemener, en we verwachten dat er in de toekomst meer beschikbaar zullen komen.
Doel
Traditioneel zijn computers gebaseerd op krachtige processors met veel randapparatuur, in het bijzonder een toetsenbord, scherm en muis. Microcontrollers zijn veel minder krachtig en bevatten een kleine core met zeer weinig RAM en veel embedded-stijl randapparatuur op dezelfde chip, zoals:
- UART
- SPI
- ADC
- I2C
- tellers, timers, enzovoort.
Naarmate de technologie evolueerde, is het verschil echter vervaagd en zien we nu microcontrollers die een "computer-achtig" systeemontwerp kunnen ondersteunen. Het gaat niet zozeer om de rekenkracht (MCU's zijn al een tijd zeer krachtig), maar eerder om het vermogen om output te leveren naar een standaard display zoals VGA of HDMI, in plaats van helemaal niets, kleine SPI-gebaseerde LCD-schermen of DSI.
In mindere mate kan ook de input een uitdaging zijn; veel MCU's hebben geen USB-hostfunctionaliteit, en wanneer ze die wel hebben, kan er vaak maar één poort worden gebruikt. Voor een toetsenbord en muis zijn er minimaal twee nodig, en idealiter een derde voor een USB-stick.
Wanneer dit alles is geregeld, heb je nog steeds een sterk beperkte omgeving (weinig RAM, weinig kleuren). Dit voelt zowel voor de gebruiker als voor de programmeur echt als de vroege computers uit de jaren '80 en '90. Dit is precies het soort 'retrocomputing' waar ik naar op zoek ben.
In dit project wordt een "computer" gedefinieerd als een apparaat met:
- toetsenbord- en muisinput, meestal via PS/2 of USB;
- een standaard displayconnector: VGA of HDMI;
- een echte framebuffer: geen 'on-the-fly' generatie van het videosignaal;
- opslag, meestal een microSD-kaart, maar USB-sticks kunnen ook.
Netwerkfunctionaliteit (ethernet/wifi) is niet vereist, maar is een geweldige extra functie.
Samenvattend is het project gericht op platforms die zich bevinden tussen "development boards" (MCU zonder display/toetsenbord/muis) en Single-board computers die meestal in staat zijn om Linux te draaien.
Dit is open hardware; de PCB is ontworpen met KiCad. De bronbestanden voor zowel de software als de hardware zijn te vinden in de (mercurial) repository op: https://freehackers.org/electronics/sylphide-os.
Het is ontwikkeld door Thomas Capricelli. Het is Sylphide OS genoemd omdat Sylphide Consulting de naam is waaronder ik als consultant werk.
Hardware
Vanaf het begin was Sylphide OS ontworpen om op verschillende platforms te draaien. Dit zijn de huidige targets, elk met een eigen pagina:
- Olimex esp32-p4-pc: het vlaggenschip-product; nieuw en krachtig.
- Barebone Raspberry Pi Pico 2: een eigen minimalistische poging tot VGA+USB op een rp2350.
- FabGL: een oude klassieker met PS/2-input en VGA.
- Emulator: draait op de (Linux) host en wordt gebruikt voor ontwikkeling.
Er zijn nog andere targets in gedachten. Als je hardware kent die geschikt zou zijn voor een dergelijk OS, laat het me dan weten, of begin zelf een port (neem wel eerst contact met me op).
Software
Tegenwoordig is een besturingssysteem voor pc's een groot pakket van verschillende softwareonderdelen (kernel, drivers, bibliotheken, programma's). "Vroeger" was het eerder een geïntegreerd en zelfstandig programma, gericht op de grafische interface. Er waren weinig drivers, omdat elke computerfabrikant, of zelfs elk computermodel, zijn eigen specifieke besturingssysteem had. Dat is wat ik hier wil recreëren.
Onder de motorkap gebruikt Sylphide OS FreeRTOS, een low-level kernel die typisch wordt gebruikt op dit soort platforms. Deze biedt hulpmiddelen voor het draaien van taken en enkele low-level routines.
Daarbovenop voegt Sylphide OS het volgende toe:
- drivers voor muis, toetsenbord, display, opslag en netwerk;
- grafische interface;
- programma's.
Het doel is om veelzijdig genoeg te zijn om bruikbaar te zijn op zeer beperkte platforms (kleine framebuffer, monochroom display, zeer weinig RAM), terwijl het toch functies kan gebruiken voor platforms met hogere specificaties.
De code is grotendeels geschreven in C (low-level, drivers, rendering-bibliotheek) en C++ (voor de grafische interface). Sommige targets maken gebruik van assembler voor de drivers. C++ wordt in zeer beperkte vorm gebruikt, waarbij alleen functies worden toegepast die de software niet onnodig verzwaren. Met zulke beperkte resources moet men zeer voorzichtig zijn.
Huidige status
Houd er rekening mee dat dit versie 0.1 is. De focus lag op het creëren van een schoon/stabiel framework en goede drivers voor een aantal targets.
Wat er reeds aanwezig is:
- kconfig-gebaseerde configuratie;
- Framework: verschillende SDK's, verschillende platforms, tooling;
- Low-level rendering: framebuffer, bitmaps, lettertypen;
- Drie targets (+ emulator), met correcte drivers;
- Grafische interface met desktop, menu, vensters, windowmanager en desktop-iconen (mogelijk herken je een bekende look);
- Informatiepaneel dat hardware- en softwaredetails toont en de kleurmogelijkheden demonstreert.
Wat er nog niet is, maar wel gepland:
- opslag (microSD, USB);
- netwerk (ethernet, wifi);
- widgets (knop, checkbox, modaal dialoogvenster, etc.);
- externe programma's (een executable laden vanaf een SD-kaart en deze uitvoeren).
Projectstructuur
De belangrijkste directorijen en bestanden zijn:
.
├── docs # (deze) documentatie
├── main # software
│ ├── main.c # entry point: init + event loop
│ ├── gfx_generic.c # fallback voor low-level grafische rendering
│ ├── bitmaps
│ ├── fonts
│ ├── arch # platform-specifieke code
│ ├── gfx # low-level grafische rendering (één per bit-diepte)
│ └── gui # window manager, menu, widgets, ...
└── tools # helpers
Contact
Als je het project wilt volgen, kun je je abonneren op mijn blog. Voor contact kunt u gebruikmaken van "old-school" IRC (instant messaging). Ik ben aanwezig op kanaal #freehackers op het Libera-netwerk. Als je IRC niet kent, is een webinterface waarschijnlijk de makkelijkste manier. Je kunt me ook een bericht sturen via het contactformulier.
Bijdragen
Als je wilt helpen bij het schrijven van Sylphide OS, is het eerste wat je moet doen contact met me opnemen. Je kunt onze gitlab gebruiken om de repository te forken: maak eerst een account aan op https://freehackers.org/explore (rechtsboven "sign in"). Er zijn koppelingen met GitHub, GitLab en Atlassian. Neem bij problemen contact met me op, wees niet verlegen.