Autor Thema: Cursorposition aendern?  (Gelesen 2558 mal)

presswurst

  • Beiträge: 13
    • Profil anzeigen
Gespeichert
« am: 02. August 2007, 22:20 »
Guten Abend ;)

Also da mein letzter Thread leider trollifiziert wurde und deshalb nun geschlossen ist danke ich dir mal hier fuer den Tip mit GRUB, bluecode! - Das Ding ist echt schick - und wieder was gelernt *g*

Aber jetzt wo ich im PM bin habe ich gleich mal noch eine Frage die etwas mit dne I/O Ports zu tun hat, und zwar wuerde ich gern die Cursorposition auf dem Bildschirm veraendern. Habe mir Ein paar Funktionen geschrieben wie clrscr() und puts() um in den Videospeicher zu schreiben, aber das sieht alles einfach nicht aus wenn der Cursor nicht folgt sondern immer an der einen Stelle herumduempelt:

http://666kb.com/i/aqlhcnmt8i93d64zw.png

Darum habe ich mal ein wenig gegoogled und auch das hier gefunden:

http://www4.informatik.uni-erlangen.de/Lehre/WS06/V_BS/oostubs/web/aufgaben/aufgabe1/cga.shtml

So wie ich das sehe muesste das also wie folgt funktionieren:

mov $14, %eax
mov $0x3d4, %dx
out %eax, (%dx)
mov $0x3d5, %dx
mov <neue_position>, %eax
out %eax, (%dx)

## und das gleiche nochmal mit register 15...

Aber das tut es auch nicht... Was mache ich denn da falsch?


lg, presswurst

Homix

  • Beiträge: 138
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 02. August 2007, 23:45 »
hi,
auf der von dir geposteten Webseite wird ja geschrieben, dass die Steuerregister 14 und 15 von Bedeutung sind (die je 8-Bit, also 1 Byte groß sind).
Du steuerst das Steuerregister 14 an und schreibst dort aber ein DWord rein (4 Bytes), das geht nicht.

Mein alter Assemblercode schaut so aus:

; Steuerregister 14 auswählen
mov dx,0x3D4
mov al,14
out dx,al
; In Steuerregister 14 das LowByte des Cursorwertes reinschreiben
mov dx,0x3D5
mov al,[LowByte]
out dx,al
; Steuerregister 15 auswählen
mov dx,0x3D4
mov al,15
out dx,al
; In Steuerregister 15 das HighByte des Cursorwertes reinschreiben
mov dx,0x3D5
mov al,[HighByte]
out dx,al

Grüsse,
Stefan
« Letzte Änderung: 03. August 2007, 10:37 von stefan2005 »

presswurst

  • Beiträge: 13
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 03. August 2007, 00:52 »
Was fuer ein idiotischer Anfaengerfehler :( - Da haette ich wohl auch alleine drauf kommen koennen, habe bei den I/O Ports den Datenbreiten wohl nicht die noetige Aufmerksamkeit geschenkt.... Danke fuer den Code - wenn man 8 Bit nimmt funktioniert es auf jeden Fall :)

Achja, was ich eben bemerkt habe: Bei den beiden Registern handelt es sich nicht um X/Y -Position sondern um das Highbyte/Lowbyte einer 16 Bit breiten linearen nummerierung der zeichen ;)

Homix

  • Beiträge: 138
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 03. August 2007, 10:36 »
hi,

ups ja du hast Recht *g*

Grüsse,
Stefan

 

Einloggen