Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: thetrue am 25. May 2006, 18:38

Titel: PMode, erster versuch, need help
Beitrag von: thetrue am 25. May 2006, 18:38
moin,
also ich habe mit pmode etwas rumprobiert ...
ergebnis:
(http://the-true.net/misc/treuOS.jpg)
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?
Titel: PMode, erster versuch, need help
Beitrag von: Osbios 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.
Titel: PMode, erster versuch, need help
Beitrag von: Jidder 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.
Titel: PMode, erster versuch, need help
Beitrag von: thetrue 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?
Titel: PMode, erster versuch, need help
Beitrag von: Osbios am 26. May 2006, 09:24
Beim normalen Farbtext hast du aber 2Byte (Zeichen+Farbe).

(x+y*80)*2