Page 1 of 1

Putting text on the screen [solved]

Posted: Sat Jul 05, 2008 1:03 am
by Nick Carlson
I'm having trouble getting some text to show up on screen. I'm guessing that my type passing is wrong.

Code: Select all

#include <system.h>

#define WHITE_TXT 0x07 // white on black (giggity)

void k_clear_screen() 
{
    char *vidmem = (char *) 0xb8000;
    unsigned int i=0;
    while(i < (80*25*2))
    {
        vidmem[i]=' ';
        i++;
        vidmem[i]=WHITE_TXT;
        i++;
    };
};

unsigned int k_put(char *message, unsigned int line) 
{
    char *vidmem = (char *) 0xb8000;

    vidmem[0] = *message;   // This _doesnt_ print ;_;
    vidmem[1] = WHITE_TXT; 

    vidmem[2] = 'q';        // This prints out nicely
    vidmem[3] = WHITE_TXT;  //

    return(1);
};

void _kmain( void* mbd, unsigned int magic )
{
    k_clear_screen();            
    k_put("OH HAI! NAICE KERNL", 0);
}
Any ideas on what I might be doing wrong?

Thank you!

Re: Putting text on the screen [solved]

Posted: Sat Jul 05, 2008 1:28 am
by Nick Carlson
Found my problem. It was the damn dirty linker script. I needed to insert *(.r*). (And I'm not ever sure what that does)

Code: Select all

ENTRY (_loader)

SECTIONS{
    . = 0x00100000;

    .text :{
        *(.text)
        *(.r*)
    }

    .rodata ALIGN (0x1000) : {
        *(.rodata)
    }

    .data ALIGN (0x1000) : {
        *(.data)
    }

    .bss : {
        _sbss = .;
        *(COMMON)
        *(.bss)
        _ebss = .;
    }
}