From 76c27556314287ee20ad2db2003dd4b03cddb479 Mon Sep 17 00:00:00 2001 From: Yourtion Date: Wed, 10 Sep 2014 18:30:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=98=BE=E7=A4=BA=E9=BC=A0=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 05_day/bootpack.c | 63 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 61 insertions(+), 2 deletions(-) diff --git a/05_day/bootpack.c b/05_day/bootpack.c index 44c2974..6914c8e 100644 --- a/05_day/bootpack.c +++ b/05_day/bootpack.c @@ -12,7 +12,8 @@ void boxfill8(unsigned char *vram, int xsize, unsigned char c, int x0, int y0, i 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); - +void init_mouse_cursor8(char *mouse, char bc); +void putblock8_8(char *vram, int vxsize, int pxsize, int pysize, int px0, int py0, char *buf, int bxsize); #define COL8_000000 0 #define COL8_FF0000 1 @@ -40,11 +41,18 @@ struct BOOTINFO { void HariMain(void) { struct BOOTINFO *binfo = (struct BOOTINFO *) 0x0ff0; - char s[40]; + char s[40], mcursor[256]; + int mx, my; init_palette(); init_screen(binfo->vram, binfo->scrnx, binfo->scrny); + /* 显示鼠标 */ + mx = (binfo->scrnx - 16) / 2; /* 计算画面的中心坐标*/ + my = (binfo->scrny - 28 - 16) / 2; + init_mouse_cursor8(mcursor, COL8_008484); + putblock8_8(binfo->vram, binfo->scrnx, 16, 16, mx, my, mcursor, 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."); @@ -158,4 +166,55 @@ void putfonts8_asc(char *vram, int xsize, int x, int y, char c, unsigned char *s x += 8; } return; +} + +void init_mouse_cursor8(char *mouse, char bc) +/* マウスカーソルを準備(16x16) */ +{ + static char cursor[16][16] = { + "**************..", + "*OOOOOOOOOOO*...", + "*OOOOOOOOOO*....", + "*OOOOOOOOO*.....", + "*OOOOOOOO*......", + "*OOOOOOO*.......", + "*OOOOOOO*.......", + "*OOOOOOOO*......", + "*OOOO**OOO*.....", + "*OOO*..*OOO*....", + "*OO*....*OOO*...", + "*O*......*OOO*..", + "**........*OOO*.", + "*..........*OOO*", + "............*OO*", + ".............***" + }; + int x, y; + + for (y = 0; y < 16; y++) { + for (x = 0; x < 16; x++) { + if (cursor[y][x] == '*') { + mouse[y * 16 + x] = COL8_000000; + } + if (cursor[y][x] == 'O') { + mouse[y * 16 + x] = COL8_FFFFFF; + } + if (cursor[y][x] == '.') { + mouse[y * 16 + x] = bc; + } + } + } + return; +} + +void putblock8_8(char *vram, int vxsize, int pxsize, + int pysize, int px0, int py0, char *buf, int bxsize) +{ + int x, y; + for (y = 0; y < pysize; y++) { + for (x = 0; x < pxsize; x++) { + vram[(py0 + y) * vxsize + (px0 + x)] = buf[y * bxsize + x]; + } + } + return; } \ No newline at end of file