BirdOs Mei 2019

maarten70

Gevestigd lid
Het is de 23ste en je weet wat dat betekent… Weer zo’n saaie update over iets dat je nog lang niet kan gebruiken!

En... zoals altijd begint het schrijven van zo’n update met het terug lezen van de oudere updates, om weer eens terug te kijken hoe het nou ook alweer moest, zo’n update schrijven.

Eerst even een huishoudelijke mededeling, voordat we beginnen. BirdOS is verhuisd van BitBucket naar GitHub. Ik heb gemerkt dat ik GitHub veel fijner vindt dan BitBucket. Waarom? Nou, ik ben er wat bekender mee en GitHub is wat open-source vriendelijker, naar mijn idee. Daarnaast had ik Xenops op GitHub gegooit en het leek me beter om al mijn projecten op een platform te houden want ja, je wilt niet steeds switchen tussen twee ‘verschillend werkende’ platformen. De kernel van BirdOS kan nu gevonden worden op m44rtn/vireo-kernel.

<plug> Xenops wordt nu gebruikt om het buildnummer automatisch aan te passen bij elke build van dekernel. Xenops wordt nu zelfs door een ander project gebruikt. </plug>

Changelog:
  • [NIEUW] intstr(), een functie die getallen omzet in tekst. Deze getallen worden op het scherm als decimale getallen laten zien, in plaats van hexadecimaal
  • [NIEUW] Kernel panic met een register dump, deze kernel panic is veel beter in het laten zien van wat mis gaat dan de vorige kernel panic
  • [NIEUW] VESA
  • [NIEUW] Virtual 8086 mode, dat alleen gebruikt wordt voor dingen die de kernel moet doen, dus geen oude DOS programma’s
  • [OPTIMALISATIE] PCI detecteert nu alle PCI apparaten
  • [OPTIMALISATIE] Het zoeken naar een PCI apparaat is sneller en beter
  • [OPTIMALISATIE] HD0 (vergelijkbaar met de C: schijf op Windows) wordt nu gezocht door de kernel, in plaats van dat het ervan uitgaat dat het de eerste schijf is die het tegen komt
  • [FIXED] Een probleem waar de kernel niet kon werken als je minder dan 256 MB RAM had omdat het RAM reserveerde na 256 MB – issue #15 (link)
  • [FIXED] Een probleem waar de kernel een functie, dat geen nut had, nodig had om op te starten – issue #5 (link)
  • [FIXED] Een probleem waar ISR20, een belangrijk component in het multitasking systeem, niet meer gecalled werd na een task switch – Issue #10 (link)
Bezig met:
  • Muis support
  • Multitasking support
intstr()
Een computer weet niet het verschil tussen tekst of nummers, dit moet je dus vertellen tegen de computer waarneer je een variabele gaat gebruiken. Maar wanneer die variabele van een bepaald type is, kan dat niet zomaar omgezet worden in een ander type (met uitzondering van uitzonderingen). Hiervoor zijn dus aparte functies voor nodig. Instr() is hier een voorbeeld van. De kernel had al een functie hexstr() dat het type ‘getal’ (of in de computer wereld ook wel bekend als ‘int’ of integer) omzette in tekst, maar deze tekst liet het getal dan zien in hexadecimaal. Hexadecimale getallen gaan van 0 tot F (0 tot 15). Het decimale getal ‘16’ is in hexadecimaal geschreven als ‘10’. De nieuwe functie intstr(), zet zo’n integer om in een decimaal getal. Bij een integer met een waarde 16, in decimaal, krijg je het volgende op het scherm te zien bij de verschillende functies:

hexstr(16): “10”
intstr(16): “16”

Kernel panic met register dump
Hier valt weinig over te zeggen, maar ik kan het je wel laten zien:



VESA
Hogere resoluties dan 80x25! VESA is een bedrijf dat bepaalde video standaarden heeft gemaakt, deze standaarden heten ook VESA. Om VESA te gebruiken, gebruik je de VBE (VESA BIOS Extension). De VBE vertelt je alles wat je moet weten als kernel: welke modes worden ondersteund, de resoluties van die mode, etc. Er is alleen een probleem met VESA, het is iets verouderd. Elke PC heeft het, maar het kan ‘maar’ tot 1600x1200, en daar zitten 1920x1080 en 1360x720 niet bij. De ondersteunde video modes kan je hier lezen (link). Build 666 was de eerste versie die VESA echt goed ondersteunde in de kernel, en dat nummer… is geheel toevallig. De kernel gebruikt hier geen aparte module meer voor, alle code staat nu in Vireo. Waar de module de hele tijd in virtual 8086 mode zou werken, doet de kernel nu af en toe iets in virtual 8086 mode, maar alleen als het nodig is.

Hier is een video waar Vireo opstart en VESA aanzet met een resolutie van 1024x768:



PCI optimalisaties
Voorheen moest, voor het vinden van een apparaat, tussen alle PCI apparaten gezocht worden. Dit zoeken gebeurt met een I/O bus en die zijn best wel heel erg traag. Dus elke keer dat je een apparaat wilde vinden moest de kernel ten eerste alle apparaten afzoeken (dat zijn er zo’n 256 worst-case) en dat dan ook nog doen via een trage interface. Als je dit vaak moet doen kan dat dus veel sloomheid opleveren. Je hebt dus liever dat je een keer alle apparaten zoekt, en de lijst daarvan op een plek neer zet waar je snel bij kan. En dat is exact wat nu gedaan is.

HD0

HD0 (staat voor hard drive 0 ofwel hardeschijf 0) is de hardeschijf waar BirdOS op geinstalleerd staat, net zoals de C: schijf op Windows de schijf is waar Windows op geinstalleerd staat. Voorheen ging de kernel ervan uit dat HD0 altijd schijf 0 zou zijn (de eerste die het vindt), maar dit hoeft niet altijd het geval te zijn. Nu zoekt de kernel dus naar de juiste schijf, het kijkt waar de BIRDOS map op staat en dat is HD0. Dit is voor nu de beste manier om dat te doen, maar later zal ook dit weer veranderd moeten worden. Hoe weet ik nog niet.

What’s next

Deze maand(en) ga ik werken aan multitasken en het laten werken van de muis. Daarna, zijn we langzamerhand klaar voor een echte shell en een GUI. De shell is geinspireerd op die van Unix, en zal dus ook de namen van enkele commando’s delen. Een commando kan je zien als een apart programma, zeker in de Unix wereld. De commando’s die ik gelijk wil ondersteunen zijn: cd, pwd, ls, cat, sleep, man en echo. Er zijn er nog veel meer gepland maar die kunnen nog niet allemaal ondersteund worden.

Met de shell en GUI, komt wel wat extra werk. Dit werk is namelijk dat Ik API’s moet gaan maken zodat beide programma’s met de kernel om kunnen gaan en dat andere programma’s met de GUI en de shell om kunnen gaan. Dit kan best veel werk zijn, en is misschien wel het saaiste voor non-devs om over te lezen in updates, maar ik zal mijn best doen om ze leuk te houden. Maar goed, zover zijn we nog niet.
 

Rubensky

Moderator
Team lid
Veel te mooi weer om te gaan zitten programmeren.
 

Rubensky

Moderator
Team lid
Ik vind dit warme weer helemaal fantastisch! Maar ja, het is inderdaad een gevoel / mening.
 
Bovenaan Onderaan