【发布时间】:2011-01-09 13:21:51
【问题描述】:
我有一个在屏幕上打印字符的功能,如下所示:
void print(int colour, int y, int x, const char *string)
{
volatile char *video=(volatile char*)0xB8000 + y*160 + x*2;
while(*string != 0)
{
*video=*string;
string++;
video++;
*video=colour;
video++;
}
}
我想打印字符254 in decimal,但我需要使用存储在const char* 上。我不能尝试print(0x0F, 0, 0, 0xFE);,因为这会导致没有强制转换的指针错误,那我该怎么做呢?
【问题讨论】:
-
呃。
0xB8000这个神奇的数字是怎么回事? -
嘿,那是 Nathan 操作系统的核心——别拆。
-
Nathan,它不是任何中断的地址,这个术语你显然不知道它的意思。这个问题和你的其他一些经典问题一样好。
-
操作!这个中断是
10h,0xB8000是指向显卡的指针。 -
@GMan:伙计!这让人想起直接写入视频内存的记忆。 0xB800 是可从 BIOS 访问 VGA 视频内存的段。 0xb000 是单色VGA。
标签: c variables bios vga extended-ascii