VGA Cursor Blink-Sequenz
-
Hallo Zusammen
Ich versuche seit einiger Zeit den Cursor über Assembler langsam blinken zu lassen.
Ich schreibe zuerst an den Port 0x3D4 der Grafikkarte und setzte dort das Register 10 (0xA). Dann setze ich an Port 0x3D5 den Wert 0x40 um den Cursor langsam blinken zu lassen. Doch ich verstehe nicht, was ich an den ersten 5 Bits setzten muss. Hier steht: "Die unteren 5 Bits dieser Register geben jeweils die Start- und End-Scanline des Cursors innerhalb eines Zeichens an."
Quelle: http://lowlevel.brainsware.org/wiki/index.php/Color_Graphics_Adapter
Was muss ich jetzt in das Register 11 als Scan-Line schreiben, bzw. was ist die Scan-Line?
Schon mal vielen Dank
MfG Tim
-
Das mit der Scan-Line habe ich jetzt verstanden ("Höhe" der Scan-Line). Aber ich schaffe es immer noch nicht den Cursor langsam bzw. garnicht blinken zu lassen...
MfG Tim
-
Dann wäre der Code noch von interesse.
-
Hi,
wie testest du das denn? Zum Beispiel Emulatoren, und die DOS-Box von Windows implementieren solche Details unter Umständen nicht.
-
Das Problem ist, dass du den Cursor NICHT (bzw. langsam) blinken lassen willst?! Habe ich das richtig verstanden.
-
FrEEzE2046 schrieb:
Das Problem ist, dass du den Cursor NICHT (bzw. langsam) blinken lassen willst?! Habe ich das richtig verstanden.
Jop.
Getestet wird mit Bochs.
Source:
inline void PortOut(unsigned port, unsigned val) { asm volatile ("outb %b0,%w1" : : "a"(val), "d"(port)); }; void SetCursorStyle(int* LStyle, int* HStyle) { PortOut(0x3D4, 10); PortOut(0x3D5, (int)&LStyle); PortOut(0x3D4, 11); PortOut(0x3D5, (int)&HStyle); } SetCursorStyle(0x40, 0x0F);
MfG Tim
-
Du übergibst die Parameter nicht korrekt. Vielleicht solltest du dich ein wenig mehr mit C vertraut machen.
So übergibt man Parameter:
void SetCursorStyle(int LStyle, int HStyle) { PortOut(0x3D4, 10); PortOut(0x3D5, LStyle); PortOut(0x3D4, 11); PortOut(0x3D5, HStyle); } SetCursorStyle(0x40, 0x0F);