Zilverkaars
Tech Stack: Rust, x86, BIOS
Een IBM-compatible PC-emulator die tracht x86 CPU’s te emuleren, DOS-compatibele BIOS te bieden en verschillende randapparatuur aan te leveren.
Overzicht
- Booten van .img en .iso schijfbestanden
- BIOS-firmware op
F000:0000met interrupt-ondersteuning voor onder andere:- Videoaccess (
INT 10H) - Schijfaccess (
INT 13H) - Systeemservices (
INT 10H) - Toetsenbord (
INT 16H)
- Videoaccess (
- Real mode (16-bit) met A20-emulatie
- Protected mode (32-bit) met segmentatie
- MMU voor paging met optionele PSE
Voorbeeld
Het beste voorbeeld van de emulator is het hobbybesturingssysteem MikeOS:

Dit is een klein besturingssysteem die Zilverkaars correct kan uitvoeren om bij het programmamenu te komen. Een leuke demoapplicatie is galgje (HANGMAN.BIN), waar je de namen van steden kunt proberen te raden:

Voortgang
Het schrijven van een emulator is een ontzettend ingewikkeld project, dus ik ben trots op de voortgang die ik al geboekt heb. Hieronder volgt een overzicht van besturingssystemen waarmee ik Zilverkaars test.
ArcaOS
Dit is een moderne opvolger van IBM OS/2. Te zien aan de grafische output lijkt er iets mis te zijn met de VGA-emulatie, waardoor er wat willekeurige tekens te zien zijn in plaats van daadwerkelijk iets.

CP/M-86
Dit besturingssysteem was een van de opties voor de originele IBM PC (naast de bekendere PC-DOS), en deze kan tot een grafische command prompt komen:

DR-DOS
Een alternatief voor MS-DOS was DR-DOS, een MS-DOS-compatibel besturingssysteem dat tot de dag van vandaag nog ontwikkeld wordt. Deze laat iets op het scherm tonen, maar blijft daarna hangen:

FreeBSD
FreeBSD, een van de besturingssystemen afkomstig uit de Berkeley Software Distribution van UNIX, is een goed onderhouden BSD-gastsysteem. De emulator kan de beginselen van de CD Loader emuleren, zelfs een stukje protected mode C, maar FreeBSD is nog niet tevreden. Zilverkaars detecteert veelvoorkomende infinite doe-niks lusjes en laat dat weten in een dialoogvenster:

FreeDOS
FreeDOS is een vrije MS-DOS-compatibel besturingssysteem ontwikkeld als opensourcesoftware. Het systeem print wat naar het scherm, maar blijft daarna hangen. Opmerkelijk is dat het geen A20-methode kan vinden, terwijl Zilverkaars er drie heeft (PS/2 Controller, INT 15H AH=24h AL=00h en System Control Port A), dus er is nog werk aan de winkel:

MINIX
MINIX is het microkernel-onderzoeksproject van Andrew Tanenbaum. Dit is een leuk besturingssysteem om mee te testen, maar geen leuke is om mee te debuggen, gezien de complexiteit van een microkernel met haar userspace drivers. Deze lijkt ook een probleem te hebben met het inladen van bestanden (de cd9660.kmod).

MS-DOS 4
MS-DOS bestaat uit verschillende floppies: je begint met de bootfloppy die alles opzet, maar daarna moet je de SELECT-diskette erin stoppen om door te gaan.

Ik heb de mogelijkheid erin gebouwd om te wisselen tussen diskette/CD-ROM in Zilverkaars, maar MS-DOS accepteert die nog niet volledig:

MS-DOS 6
Versie 6 van MS-DOS wordt door velen beschouwd als een veel stabielere versie van MS-DOS, en gebruikt ook andere grootte floppies waarbij het systeem kan komen tot een commandprompt:

In dit prompt kun je bijvoorbeeld al het DIR DOS-commando uitvoeren om een bestandlijst te zien:

NetBSD
NetBSD gebruikt een andere bootloader dan FreeBSD, waardoor het een interessante is om te testen. NetBSD blijft nog ergens hangen in het bootproces, maar soms komt hij uit het niets verder dan andere keren te proberen, dus mogelijk is er ergens een raceconditie.

NetWare
NetWare is een ander belangrijk besturingssysteem uit de jaren ‘90. Helaas komt het systeem niet ver en wordt er een cryptisch bericht getoond:

Plan 9
De vermoedelijke opvolger van UNIX probeert veel niet-ondersteunde BIOS-calls aan te roepen en blijft uiteindelijk hangen:

ReactOS
De 30-jarige opensource Windows-vervanger heeft ook een eigen bootloader en gebruikt ook PE als haar bestandsformaat van de kernel, waardoor het een leuke is om te testen:

Deze bootloader kan de ReactOS-kernel inladen, maar crasht daarna wegens een probleem met hardware task switching.

Rhapsody
Een erg onbekend besturingssysteem van Apple is Rhapsody, een vergeten kindje uit de tijd van de migratie van NeXT naar Apple. Dit is leuk om te testen omdat het een compleet nieuwe basis heeft en al redelijk ver komt vergeleken met de andere systemen.

Nu wordt je gevraagd om de “Rhapsody Device Drivers”-diskette erin te doen:

SkyOS
SkyOS is een obscuur besturingssysteem die een oudere versie van GRUB gebruikt als bootloader.

Deze komt voorbij het GRUB-menu, kan de kernel en haar modules inladen, maar is er niet van overtuigd dat de kernel correct is ingeladen:

Snowdrop
Snowdrop is een ander obscuur besturingssysteem met haar eigen bootloader. Deze komt almaar verder, maar de command prompt werkt nog net niet:

TinyCore Linux
TinyCore Linux is een distributie van Linux die het mogelijk maakt om een compleet systeem in memory te hebben runnen, waardoor het een interessant pre-harddiskemulatie systeem leek. Helaas lijkt de bootloader ISOLINUX nog te hangen:

Windows
Het begin van de bootloader van Windows is sinds het Windows NT-tijdperk weinig veranderd, waardoor NT 3.51 en Windows 10 vrijwel op hetzelfde stuk blijven hangen. Het lijkt me tof om ooit Windows te kunnen laten booten, maar wegens de beperkte debuginformatie is het vrij lastig om het opstartcyclus te debuggen.

Toekomst
Op de korte termijn wil ik de volgende doelen bereiken:
- Zorgen dat een modern besturingssysteem naar init kan komen (dus voorbij de bootloader)
- FDC/floppydisk-ondersteuning
- Werkende PS/2 toetsenbord en muis
- PCI
- Betere VGA-emulatie
Als lange termijn/roadmap zou het mij gaaf lijken om ooit dit te kunnen ondersteunen:
- UEFI booting & runtime services
- 64-bits long-mode
- ACPI
- USB
- VirtIO-apparaten