VGA problem
Jag har en bootloader som precis som dem flesta andra kända laddare består av två steg.
Steg 1 är bootsektorn och den är och måste vara på 512 bytes som laddar steg 2.
Steg 2 är ej begränsad i storlek och innehåller anrop till main funktionen i c kerneln
C kerneln är i protected mode och jag vill att den ska ha funktioner som har
med VGA att göra. Specifikt sätt så vill jag att den ska initiera VGA mode 13 så att
jag kan plotta pixlar vilket jag ej kan göra i textmode.
Pixlarna ska sedan sammarbeta med varandra och målsättningen är att få ett lite simpelt GUI.
I realmode är detta lättare att göra då man får hjälp av Bios.
Man använder sig av avbrottsfunktionen int 0x10 för att switcha till det nya video-läget,
vilket verkar vara ganska enkelt.
Men i pmode blir det svårare då man ej har tillgång till Bios funktioner.
Därför måste man göra sitt eget bibliotek.
Jag har läst att man kan implementera v8086 monitor vilket innebär att man
kan köra både pmode och realmode samtidigt, men tyvärr sägs det vara en komplicerad procedur.
Men jag tror ändå denna metod är lättare än att hålla koll på de mer än 300 olika VGA registrena.
Registrena har olika portadresser och därför behöver man en generell funktion som sköter kommunikationen till dessa.
Till exempel för att uppdatera markören så kan man skicka data till någon av dessa portar(0x3D4 och 0x3D5).
På samma sätt pratar man med portar med övrig hårdvara på moderkortet och perifiera enheter etc.
VGA är som man märker en komplex hårdvara och är den minsta gemensamma nämnaren hos alla grafikkort.
När en dator startas så kör den i VGA tills en enhets specifik drivrutin laddas in.
Så antingen får jag helt enkelt hålla mig till realmode (med sina dåliga specifikationer, 16 bitars cpu mode, dålig
addressering och mer eller mindre 630 kb tillgängligt RAM) eller så får man göra en VGA drivrutin från scratch.
Så frågan är alltså, har ni nån erfarenhet av VGA programmering?