Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Nachrichten - impi226

Seiten: [1]
1
where = (unsigned short *)(0xB8000 + (y * 80 + x));
Ich schlage vor:
where = ((unsigned short*) 0xb8000) + (y * 80 + x);Man muss ja zwei Bytes weiter für jedes Zeichen, nicht nur eins.

juhuu, danke für den tipp. hat funktioniert. muss mich unbedingt nochmal mehr mit pointern und type (casting) beschäftigen, komme sonst beruflich aus der php-ecke, der schlampensprache! :-D

danke!
2
Also du meinst:

where = 0xB8000 + (unsigned short *)(y * 80 + x);
Fehler ist zwar weg, aber Ausgabe ist immernoch Müll. ;-)

hatte ich auch ausprobiert. aber vielleicht liegt es auch an meiner clear_screen-schleife. ich werde gleich mal weiterprobieren... ;-)

danke auf jeden fall!
3
Moin,

was mir gerade aufgefallen ist: in clear_screen() geht deine y-for-schleife auch bis 80, es gibt aber nur 25 Zeilen

Für deinen lila-Bildschirm hab ich gerade auch keine Lösung, sorry.

Grüße,
LittleFox

oh ja, stimmt, weiß auch nicht, was mich da gestern nacht geritten hat. bin in dem bereich aber auch noch newbie, aber es reizt mich halt auch diesen bereich mal ein bisschen auszuprobieren... ;-)
4
Also du meinst:

where = 0xB8000 + (unsigned short *)(y * 80 + x);
Fehler ist zwar weg, aber Ausgabe ist immernoch Müll. ;-)
5
Hallo zusammen!

Gespannt habe ich heute das Einsteiger-Tutorial hier verfolgt. Leider bin ich dann beim Auslagern der Ausgabe-Funktion und der Clearscreen-Funktion irgendwie hängen geblieben.

Hier mein Quelltext:

#include "main.h"

void main(void)
{
    clear_screen();
    print_line("Hallo Welt!");
}

void clear_screen()
{
    int x;
    int y;

    for (x = 0; x < 80; x++)
        for (y = 0; y < 80; y++)
draw_character(' ', 7, 0, x, y);
}

void print_line(char string[])
{
    int i;

    for (i = 0; string[i] != '\0'; i++) {
        draw_character(string[i], 7, 0, i, 0);
    }
}

void draw_character(char c, char forecolour, char backcolour, int x, int y)
{
    unsigned short attrib = (backcolour << 4) | (forecolour & 0x0F);
    volatile unsigned short *where;
    where = 0xB8000 + (y * 80 + x);
    *where = c | (attrib << 8);
}

Die Fehlermeldung ist:

~/c-projects/dj-kernel$ make
gcc -m32 -ffreestanding -Wall -g -fno-stack-protector -nostdinc -c -o main.o main.c
main.c: In function ‘draw_character’:
main.c:32: warning: assignment makes pointer from integer without a cast
ld -melf_i386 -Ttext=0x100000 -o kernel boot.o main.o

Eine Antwort wäre sehr nett! :-)

Gute Nacht,
Daniel

P.S.: Achja und der komplette Screen ist Lila beim Ausführen... ;-)
Seiten: [1]

Einloggen