Question about which tools to use, bugs, the best way to implement a function, etc should go here. Don't forget to see if your question is answered in the wiki first! When in doubt post here.
Nick Carlson
Posts: 18 Joined: Fri Feb 29, 2008 6:08 pm
Post
by Nick Carlson » Sat Jul 05, 2008 1:03 am
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!
Nick Carlson
Posts: 18 Joined: Fri Feb 29, 2008 6:08 pm
Post
by Nick Carlson » Sat Jul 05, 2008 1:28 am
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 = .;
}
}