Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: Coffee am 13. April 2007, 16:57
-
da ich zum osdev zurückkehren möchte schreibe ich meinen kernel ganz neu. nun bin ich also wieder im RM 80*25 zeichen und will nachdem text in s/w funktioniert auch wieder farbe. nun ist das problem:
0xB8000 ist die stelle links oben. dazu addiert man 80*y + x um eine andere position zu erreichen. wenn ich eins nach rechts will muss ich eins addieren. nur dann landet der buchstabe in der mitte der zeile. wieso?
edit: bzw. bei 0xB8001 ist er garnicht zu sehn, bei 0xB801 ist er in der mitte^^
edit2: nein, nicht in der mitte, an der 9. stelle :D
-
wenn du nach rechts willst, musst du doch 2 addieren, da ja ein attribut - byte für jede stelle existiert
als
(80*y+x)*2
-
jetz is der buchstabe anner 17. stelle :|
-
bei welchem offset
bei 0xB8002 ?
-
bei welchem offset
bei 0xB8002 ?
0B802h. bei 0B8002h is nix zu sehn (ich dachte die eine null wäre mein fehler :D )
-
dann probier mal
mov ah, 0x07
mov al, [DasZeichenDasDuAusgebenMöchtest]
mov ax, [0xB8002]
dann müsste es an der zweite Stelle grau auf weiß erscheinen.
-
hehe...ich würde das noch vertauschen: mov [0xb8000],ax
Greez
-
will er nicht an die zweite stelle?
edit: mov ax [0xB8002] stimmt auch nicht, ich gebs zu ^^
-
geht nich... hab auch schon probiert die werte in ' zu setzen^^ ich benutze übrigens NASM^^
-
bisheriger code:
mov bx,0B801h
mov es,bx
mov byte [es:0],'1'
mov byte [es:1],1Fh
sry for doppelpost^^
-
B801h liegt nicht im Graphik - Speicher
B8000h - hier beginnt der Graphik - Speicher
mach aus dem
mov bx, 0B801h
ein
mov bx, 0B8000h
bzw. 0B8002h für die 2. Stelle
edit: sorry, sah erst jetzt, dass du im RM bist. Da stimmt dein 0B00 natürlich.
Ich würde die erste Zeile aber trotzdem voerst mal auf mov bx, 0B800h
-
Aber selbstverständlich liegt bei B800:0000 der Grafikspeicher. Und bei B800:0002 das zweite Zeichen. Mit dem bestehenden Code wäre das dann wohl:
mov byte [es:2],'2'
-
Aber selbstverständlich liegt bei B800:0000 der Grafikspeicher. Und bei B800:0002 das zweite Zeichen. Mit dem bestehenden Code wäre das dann wohl:
mov byte [es:2],'2'
und dann bei [es:3] '1Fh' geht nicht... da müsste ja wieder die farbe hin.. das wird dann garnet angezeigt^^
-
Meinst du das '1Fh' wirklich in Anführungszeichen?
-
ja?!
-
wiso? '1f' in anführungszeichen hat 2 Byte und passt da gar nicht rein.
Wenn du 1f als Farbe meinst, musst du es ohne Hochkommas schreiben, wenn du es als nächstes zeichen meinst, muss es nach Offset 4 + 6.
Gruss
Nooooooooooos
-
aso. mhh sorry hatte es ohne. das is mein code:
mov bx,0B800h
mov es,bx
mov byte [es:0],'1'
mov byte [es:1],1Fh
mov bx,B8002h
mov es,bx
mov byte [es:2],'2'
mov byte [es:3],1Fh
mov bx,B8000h
mov es,bx
mov byte [es:2],'3'
mov byte [es:3],1Fh
mov bx,0B8000h
mov es,bx
mov byte [es:0],'A'
mov byte [es:1],1Fh
mov bx,B802h
mov es,bx
mov byte [es:2],'B'
mov byte [es:3],1Fh
mov bx,B800h
mov es,bx
mov byte [es:2],'C'
mov byte [es:3],1Fh
die ganzen möglichkeiten die ich probiert hab. keine geht^^
während
mov bx,0B800h
mov es,bx
mov byte [es:0],'1'
mov byte [es:1],1Fh
funktioniert
-
Warum soll da keine gehen? Die erste ist ja identisch mit der der geht + und die letzte gibt einfach ein anderes Zeichen auf der 2. Position aus oder?
Gruss
Noooooooooooos
-
mov bx, B800h
mov es, bx
mov byte [es:0],'1'
mov byte [es:1],1Fh
mov byte [es:2],'2'
mov byte [es:3],1Fh
Und vielleicht möchtest du dich nochmal über die Adressierung im RM schlau machen.
Edit: Nur zur Klarstellung, Coffee ist angesprochen, nicht Noos.
-
:mrgreen: jo taljeth. ich hab letzte zeit immer in brainfuck geproggt da vergisst man vieles^^
-
Immerhin eine kreative Ausrede. ;)
-
nein is wirklich so. ich hab "nichma mehr" den inhalt aus LL1 drauf... is echt zum kotzen... jetz muss ich ganz von vorne anfangen :|
-
OT: Was hast du denn so schönes in Brainfuck gemacht? Kann man da wirklich etwas produktiv machen?
Gruss
Nooooooooooos
-
naja nix produktiv. einfach mal so rumgespielt. so sachen wie hello world, dann kleinere rechensachen und so... war für n vortrag^^
man ich bin echt ein totaler noob
wieso geht das schon wieder nich?:
xor cx, cx
mov cl, 79
leiste:
mov al, cl
add al,cl
mov byte [es:al],'1'
add al,1
mov byte [es:al],1Fh
loop leiste
-
und ES wurde vorher mit B800h geladen...
-
mov cx,79 ;cl = 79, ch = 0
leiste:
mov bx,cx
add bx,cx ;was das sein soll kA
mov byte [es:bx],"1"
inc bx ;bx = bx + 1
mov byte [es:bx],1Fh
loop leiste
evt. meinst du:
mov cx,80
mov bx,158
leiste:
mov byte [es:bx],"1"
mov byte [es:bx+1],1Fh
add bx,160
loop leiste
bitmaster
-
so hab ich das gelöst (die variante die mir taljeth sendete stimmte nich ;( ):
mov cx, 79
mov bx, 0
leiste:
mov byte [es:bx],'1'
inc bx
mov byte [es:bx],1Fh
inc bx
loop leiste
-
Achso, du wolltest das oben haben, ich dachte rechts. ^^
bitmaster
-
jo ich woltle sone art"überschrift" machen^^
-
mhh... ich spiel grad mit den farben rum... wie kann ich die schrift blinken lassen, ohne dass der hintergrund blau is? wenn ich für die farbe
96h nehme, hab ich bl8inkende schrift auf blauem ghintergrund. ich will aber schwarzen und auch andersfarbigen hintergrund. wie geht das?
-
Nichtblinkend + 0x80 = Blinkend
-
wieso akzepziertz nasm dann A0h nich?? :?
-
Weil auch Hexadezimalzahlen mit einer Ziffer anfangen müssen, da sie sonst nur mit einer Glaskugel von Labels unterscheidbar sind. Versuch mal 0xA0 oder 0A0h.