diff --git a/05_day/bootpack.c b/05_day/bootpack.c index 4aef240..470ab0a 100644 --- a/05_day/bootpack.c +++ b/05_day/bootpack.c @@ -9,6 +9,8 @@ void set_palette(int start, int end, unsigned char *rgb); void boxfill8(unsigned char *vram, int xsize, unsigned char c, int x0, int y0, int x1, int y1); void init_screen(char *vram, int x, int y); void putfont8(char *vram, int xsize, int x, int y, char c, char *font); +void putfonts8_asc(char *vram, int xsize, int x, int y, char c, unsigned char *s); + #define COL8_000000 0 #define COL8_FF0000 1 @@ -36,18 +38,13 @@ struct BOOTINFO { void HariMain(void) { struct BOOTINFO *binfo = (struct BOOTINFO *) 0x0ff0; - extern char hankaku[4096];/* DB各种数据(共4096字节) */ init_palette(); init_screen(binfo->vram, binfo->scrnx, binfo->scrny); - /* A的字符编码是0x41,所以A的字体数据,放在自“hankaku+0x41*16”开始的16字节里 */ - putfont8(binfo->vram, binfo->scrnx, 8, 8, COL8_FFFFFF, hankaku + 'A' * 16); - putfont8(binfo->vram, binfo->scrnx, 16, 8, COL8_FFFFFF, hankaku + 'B' * 16); - putfont8(binfo->vram, binfo->scrnx, 24, 8, COL8_FFFFFF, hankaku + 'C' * 16); - putfont8(binfo->vram, binfo->scrnx, 40, 8, COL8_FFFFFF, hankaku + '1' * 16); - putfont8(binfo->vram, binfo->scrnx, 48, 8, COL8_FFFFFF, hankaku + '2' * 16); - putfont8(binfo->vram, binfo->scrnx, 56, 8, COL8_FFFFFF, hankaku + '3' * 16); + putfonts8_asc(binfo->vram, binfo->scrnx, 8, 8, COL8_FFFFFF, "ABC 123"); + putfonts8_asc(binfo->vram, binfo->scrnx, 31, 31, COL8_000000, "Haribote OS."); + putfonts8_asc(binfo->vram, binfo->scrnx, 30, 30, COL8_FFFFFF, "Haribote OS."); for (;;) { io_hlt(); @@ -144,4 +141,15 @@ void putfont8(char *vram, int xsize, int x, int y, char c, char *font) if ((d & 0x01) != 0) { p[7] = c; } } return; +} + +void putfonts8_asc(char *vram, int xsize, int x, int y, char c, unsigned char *s) +{ + extern char hankaku[4096]; + /* C语言中,字符串都是以0x00结尾 */ + for (; *s != 0x00; s++) { + putfont8(vram, xsize, x, y, c, hankaku + *s * 16); + x += 8; + } + return; } \ No newline at end of file