我试图让使用C.一切加载一个简单的内核和工作正常,我可以访问视频存储和显示字符,但是当我试图实现某种原因它不工作的简单放功能。 我已经尽我自己的代码和其他的。 此外,当我尝试使用该函数外部声明的变量似乎并没有工作。 这是我自己的代码:
#define PUTCH(C, X) pos = putc(C, X, pos)
#define PUTSTR(C, X) pos = puts(C, X, pos)
int putc(char c, char color, int spos) {
volatile char *vidmem = (volatile char*)(0xB8000);
if (c == '\n') {
spos += (160-(spos % 160));
} else {
vidmem[spos] = c;
vidmem[spos+1] = color;
spos += 2;
}
return spos;
}
int puts(char* str, char color, int spos) {
while (*str != '\0') {
spos = putc(*str, color, spos);
str++;
}
return spos;
}
int kmain(void) {
int pos = 0;
PUTSTR("Hello, world!", 6);
return 0;
}
该spos
(起始位置)的东西,因为我不能让全球定位变量。 putc
工作正常,但puts
不。 我也试过这样:
unsigned int k_printf(char *message, unsigned int line) // the message and then the line #
{
char *vidmem = (char *) 0xb8000;
unsigned int i=0;
i=(line*80*2);
while(*message!=0)
{
if(*message=='\n') // check for a new line
{
line++;
i=(line*80*2);
*message++;
} else {
vidmem[i]=*message;
*message++;
i++;
vidmem[i]=7;
i++;
};
};
return(1);
};
int kmain(void) {
k_printf("Hello, world!", 0);
return 0;
}
为什么没有这方面的工作? 我尝试使用我的看跌期权执行与我的家乡GCC(没有颜色和SPOS数据和使用printf("%c")
它工作得很好。