📄 main.c
字号:
#define VGA_MISC_READ 0x3CC
/*****************************************************************************
*****************************************************************************/
__inline__ unsigned char inportb(unsigned short port)
{
unsigned char ret_val;
__asm__ __volatile__("inb %1,%0"
: "=a"(ret_val)
: "d"(port));
return ret_val;
}
/*****************************************************************************
*****************************************************************************/
void *memcpy(void *dst_ptr, const void *src_ptr, unsigned count)
{
void *ret_val = dst_ptr;
const char *src = (const char *)src_ptr;
char *dst = (char *)dst_ptr;
for(; count != 0; count--)
*dst++ = *src++;
return ret_val;
}
/*****************************************************************************
for MinGW32
*****************************************************************************/
#ifdef __WIN32__
#if __GNUC__<3
#error Do not use MinGW GCC 2.x with NASM
#endif
int __main(void) { return 0; }
void _alloca(void) { }
#endif
/*****************************************************************************
*****************************************************************************/
int main(void)
{
static const char msg1[] = "H e l l o f r o m O S D 3 ";
static const char msg2[] = "G o o d b y e . "
"U s e r e s e t b u t t o n t o e n d ";
/**/
unsigned vga_fb_adr;
/* check for monochrome or color VGA emulation */
if((inportb(VGA_MISC_READ) & 0x01) != 0)
vga_fb_adr = 0xB8000;
else
vga_fb_adr = 0xB0000;
/* display message on top line */
memcpy((char *)(vga_fb_adr + 0), msg1, sizeof(msg1) - 1);
/* display message on second line */
memcpy((char *)(vga_fb_adr + 160), msg2, sizeof(msg2) - 1);
/* return to KSTART.ASM, which will freeze */
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -