also um bmp dateien auf den screen zu bringen ist es relativ einfach...
die BMP datei wird in den speicher geladen, dann überspringst du den BMP header (siehe BMP format spezifikationen)
und dann brauchst du das bild nur noch mit 2 schleifen in den graphikspicher blitten...
im prinzip ist das bild dann ein array als pixeln in der BMP datei..
entsprechend wenn du ein 320x200 pixel großes bild hast, so gehst du her
und sagst du hast das bild aus der datei nun in geladen und nennnst das array bild1
Code:
mov ecx, 64000
_loop1:
mov eax, _bild1
add eax, ecx
mov bl, [ds:eax]
mov byte [es:ecx], bl
loop _loop1
ob das nun im einzelnen mit der dereferenzierung stimmt, weiß ich jetzt net genau, müsst ich ausprobieren..
im mode 12 arbeitet man mit bitmasken...
erstmal setzt du nur schwarz oder weiß, und jedes pixel entspricht einem bit
nun musst du wenn du andere farben haben willst mit hilfe der graphikregister das plane wechseln und dort das selbe wieder machen.. insgesamt sinds 4 planes daher 16 farben.. das ist allerdings relativ komplex also hab ich mich damit eigendlich nie richtig beschäftigt.
am besten guckt ihr dafür mal in den beschreibungen zum int 10h
siehe funktion 10XX
die hächsteauflösung die direkt im realmode benutzt werden kann ist irgendwas mit 2100 oder so...
wenn ihr über die normalen VGA auflösungen hinaus gehen wollt so müsst ihr euch mit dem VESA standart befassen, erwähnt sei das hier 64KB graphikspeicher nicht mehr ausreichen, aber der addressbereich nur 64KB hatt, entsprechend kommt ihr um s.G. bankswitches nicht herum...
das heißt ihr schreibt zuerst einen teil des graphikspeichers voll mit eurem bild, dann ruft ihn n VESA interupt (über int10h) auf und schaltet die speicherbank um, dann muss man wieder den selben speicherbereich beschreiben nur mit dem unterschied das es n anderer bereich des displays ist...
für näheres dazu siehe bitte int10h funktion $4F00 - $4F0C
sollte jemand auf die idee kommen das im PMode versuchen zu wollen muss er mit dem entsprechenden bios interupt das VESA Protected Mode Interface laden und über die funktionspointer zugreifen.