Autor Thema: PMode, erster versuch, need help  (Gelesen 5315 mal)

thetrue

  • Beiträge: 216
    • Profil anzeigen
    • http://www.the-true.net
Gespeichert
« am: 25. May 2006, 18:38 »
moin,
also ich habe mit pmode etwas rumprobiert ...
ergebnis:

aber ich schaffe es nicht den text an die cursor position zu schreiben ...



...
mov esi, 0
text:
;text ausgabe
mov [0xB8000+esi], byte ' '
inc esi
mov [0xB8000+esi], byte 1Bh
inc esi
cmp esi, 3840
jl text
push esi


mov esi, 0
text2:
;text ausgabe
mov [0xB8000+esi], byte ':'
inc esi
mov [0xB8000+esi], byte 79h
inc esi
cmp esi, 160
jl text2


mov esi, 0
pop esi
text3:
;text ausgabe
mov [0xB8000+esi], byte ':'
inc esi
mov [0xB8000+esi], byte 79h
inc esi
cmp esi, 4000
jl text3
...


wie kann ich jetzt den cursor von pmode aus steuern und an die cursoeposition text schreiben?
thetrue way is my way

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 25. May 2006, 20:32 »
Um den Hardwarecurser ohne int10 zu ändern musst du auf die Grafikkarte zugreifen, z.B. die VGA-Register.

Mir war das zu kompliziert und ich habe ganz einfach auf den HC verzichtet.

Hiermit kann man den HC im RM ausschalten. (man sieht ihn jedenfalls nicht mehr)
mov cx,0x2000
mov ah,1
int 0x10


Und wenn man etwas blinkendes benötigt, benutzt man einfach ein Zeichen mit gesetztem Bit7 des Colorbytes.

Und eine Position im Textframebuffer errechnest du so:

(Y*80+X)*2

Vorausgesetzt du benutzt den Standardmodus.
db 0x55AA

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 25. May 2006, 21:42 »
Pseudocode um den Cursor zu setzen
word offset = x + y * 80
outb(0x3D4, 14)
outb(0x3D5, offset >> 8) ;schreibe Highbyte
outb(0x3D4, 15)
outb(0x3D5, offset & 0xFF) ; schreibe Lowbyte


Position auslesen
word offset
outb(0x3D4, 14)
offset = inb(0x3D5) << 8 ;  lese Highbyte
outb(0x3D4, 15)
offset |= inb(0x3D5) ; lese Lowbyte
x = o % 80
y = o / 80


Ungetestet (vor allem der Lesecode), müsste aber gehen.
Dieser Text wird unter jedem Beitrag angezeigt.

thetrue

  • Beiträge: 216
    • Profil anzeigen
    • http://www.the-true.net
Gespeichert
« Antwort #3 am: 25. May 2006, 22:06 »
ok, problem gelöst ... ich mache das so:
ich lese die cursor position aus, dann errechne ich die zeichenposition : x+y*80
und setze mit
mov [0xB8000+pos], "*" ; pos = x+y*80
das zeichen ^^

ist das was?
thetrue way is my way

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 26. May 2006, 09:24 »
Beim normalen Farbtext hast du aber 2Byte (Zeichen+Farbe).

(x+y*80)*2
db 0x55AA

 

Einloggen