Autor Thema: Bildpunkt auf Monitor setzen  (Gelesen 3034 mal)

zzz

  • Beiträge: 11
    • Profil anzeigen
Gespeichert
« am: 08. April 2008, 11:31 »
wie kann ich mit nasm Bildpunkte setzen?

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #1 am: 08. April 2008, 12:50 »
In welcher Umgebung soll denn dein Code laufen? Windows/Linux/Bootloader/deinOS? überhaupt x86? real-mode/protected-mode/long-mode? Textmodus/Grafikmodus?
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

Termite

  • Beiträge: 239
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 08. April 2008, 13:08 »
Die Frage ist eher welcher GrafikModus?

Auflösung und Farbtiefe?

VGA 320x200 / 256 out of 64KFarbtiefe
SVGA 640x480 / 800x600 / ... 8 /15/16/24 bit farbtiefe

VGA Im RM Bios int 10h mode 13 und dann direkt im Framebuffer pinseln
oder direckt die VGA register manipulieren z.B. für den Mode x  :-D
SVGA IM RM über VESA BIOS Extension und dann mit Frambuffer und Frambuffer umschaltung ( langsam )

SVGA Im PM etwas aufwendiger VESA BIOS auch aus verwendbar.


zzz

  • Beiträge: 11
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 08. April 2008, 13:35 »
die Umgebung soll Bootloader sein und in Grafikmodus

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #4 am: 08. April 2008, 14:32 »
Dann befindest du dich schonmal im Realmode. Damit kannst du die BIOS-Interrupts zum Wechseln in den Grafikmodus benutzen. Bei Datasource.de finden sich die Informationen zum BIOS-Interrupt 0x10, den man zum Wechseln in den Grafikmodus (Funktion: ah = 0x00) nutzen kann. Hier findest du eine Liste der gültigen VGA-Modi (muss in al vor dem Aufruf des Interrupt). Alle anderen Modi muss man erst über die VESA BIOS Extensions enumerieren.
Folgender Code wechselt beispielsweise zum Modus 0x13 (320x200 256Farben):
mov ah, 0x00
mov al, 0x13
int 0x10
Der Grafikspeicher befindet sich bei den grafischen Standard-VGA Modi an 0xA0000. Im Modus 0x13 ist jeder Pixel genau ein Byte groß und dieses Byte gibt die Pixelfarbe an. zB den 1sten Pixel in der ersten und zweiten Reihe weiß einzufärben:
mov ax, 0xA000
mov ds, ax

mov [ds:0], byte 0xFF
mov [ds:320], byte 0xFF

Ich hoffe ich konnte dir erstmal weiterhelfen :-)
Disclaimer: Der Code wurde nicht getestet und er muss natürlich in deinen Bootloader eingebaut werden. Der Code wird so ganz alleine nicht funktionieren.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

 

Einloggen