/* void bootmain(void){ //注意这里的函数名字为bootmain,因为在entry.S中设定的入口名字也是bootmain,两者要保持一致 clear_screen(40); char *vram; int xsize, ysize; struct BOOTINFO *binfo; binfo=(struct BOOTINFO *)0x0ff0; init_screen((struct BOOTINFO*)0x0ff0); draw_window(); init_palette(); vram=(char *)0x0ff0; char font_A[16]={ 0x00, 0x18, 0x18, 0x18, 0x18, 0x24, 0x24, 0x24, 0x24, 0x7e, 0x42, 0x42, 0x42, 0xe7, 0x00, 0x00 }; //putfont8(vram, 20, 50, 50, 'd', font_A); putfont8(binfo->vram binfo->xsize, 8, 8, COL8_FFFFFF, font_A); } */ void bootmain(void){ struct BOOTINFO *binfo = (struct BOOTINFO*) 0x0ff0; extern char hankaku[2048]; init_palette(); init_screen(binfo->vram, binfo->scrnx, binfo->scrny); //putfont8_asc(binfo->vram, binfo->scrnx, 8, 8, COL8_FFFFFF, "ChrisZZ"); //putfont8_asc(binfo->vram, binfo->scrnx, 31, 31, COL8_000000, "Haribote OS"); //putfont8_asc(binfo->vram, binfo->scrnx, 32, 32, COL8_FFFFFF, "Haribote OS"); char s[10]; //sprintf(s, "scrnx=%d", binfo->scrnx); //putfont8_asc(binfo->vram, binfo->scrnx, 16, 64, COL8_FFFFFF, s); char mcursor[256]; int mx, my; 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); sprintf(s, "(%d, %d)", mx, my); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 0, COL8_FFFFFF, s); while(1); }
void HariMain(void) { struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTINFO; char s[40], mcursor[256], keybuf[32]; int mx, my, i; init_gdtidt(); init_pic(); io_sti(); fifo8_init(&keyfifo, 32, keybuf); io_out8(PIC0_IMR, 0xf9); io_out8(PIC1_IMR, 0xef); init_palette(); init_screen8(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, 0, 0, COL8_FFFFFF, s); for (;;) { io_cli(); if (fifo8_status(&keyfifo) == 0) { io_stihlt(); } else { i = fifo8_get(&keyfifo); io_sti(); boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 16, 15, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16, COL8_FFFFFF, s); } } }
void HariMain(void) { char *vram; BOOTINFO_t *binfo; char mcursor[16*16]; int mx, my; binfo = (BOOTINFO_t *)BOOTINFO_ENTRY; init_palette(); init_screen(binfo->vram, binfo->scrnx, binfo->scrny); static char font_A[16] = { 0x00, 0x18, 0x18, 0x18, 0x18, 0x24, 0x24, 0x24, 0x24, 0x7e, 0x42, 0x42, 0x42, 0xe7, 0x00, 0x00 }; putfont8(binfo->vram, binfo->scrnx, 8, 8, COL8_0000FF, hankaku+'A'*16); putfonts8_asc(binfo->vram, binfo->scrnx, 16, 8, COL8_0000FF, "BC 123"); putfonts8_asc(binfo->vram, binfo->scrnx, 31, 31, COL8_000000, "EasyOS."); putfonts8_asc(binfo->vram, binfo->scrnx, 30, 30, COL8_FFFFFF, "EasyOS."); mx = my = 100; init_mouse_cursor8(mcursor, COL8_008484); putblock8_8(binfo->vram, binfo->scrnx, 16, 16, mx, my, mcursor, 16); fin: io_hlt(); goto fin; }
void HariMain(void) { int i; struct BOOTINFO *binfo = (struct BOOTINFO *)0x0ff0; int xsize = (*binfo).scrnx; int ysize = (*binfo).scrny; char *vram = (*binfo).vram; init_pallete(); init_screen (vram, xsize, ysize); putfont8_asc (binfo->vram, binfo->scrnx, 8, 8, COL8_FFFFFF, "ABC 123"); putfont8_asc (binfo->vram, binfo->scrnx, 31, 31, COL8_000000, "Haribote OS."); putfont8_asc (binfo->vram, binfo->scrnx, 30, 30, COL8_FFFFFF, "Haribote OS."); char mcursor[16][16]; const int mx = xsize/2; const int my = ysize/2; init_mouse_cursor8 (mcursor, COL8_008484); putblock8_8 (binfo->vram, binfo->scrnx, 16, 16, mx,my, mcursor, 16); for (;;) { io_hlt(); } }
void HariMain(void) { struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTINFO; /* s是输出缓冲区 mcursor存放鼠标图形 */ char s[40], mcursor[256]; int mx, my; init_gdtidt(); /* 初始化GDT, IDT */ init_pic(); /* 初始化PIC */ io_sti(); /* 打开所有可屏蔽中断 */ init_palette(); /* 初始化调色板 */ init_screen8(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); /* 显示鼠标图形 */ sprintf(s, "(%d, %d)", mx, my); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 0, COL8_FFFFFF, s); /* 输出鼠标图形左上角在屏幕上的坐标 */ io_out8(PIC0_IMR, 0xf9); /* PIC0(11111001) (打开IRQ1键盘中断和连接从PIC的IRQ2)*/ io_out8(PIC1_IMR, 0xef); /* PIC1(11101111) (打开PS2鼠标中断 即IRQ12)*/ for (;;) { io_hlt(); } }
void HariMain(void) { struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTINFO; char s[40],mcursor[256]; int mx, my; init_gdtidt(); init_pic(); io_sti(); init_palette(); init_screen8(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); sprintf(s, "(%d, %d)", mx, my); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 0, COL8_FFFFFF, s); io_out8(PIC0_IMR, 0xf9); io_out8(PIC1_IMR, 0xef); for (;;) { io_hlt(); } }
void HariMain(void) { struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTINFO; char s[40], mcursor[256], keybuf[32], mousebuf[128]; int mx, my, i; init_gdtidt(); init_pic(); io_sti(); /* IDT/PIC的初始化结束,开启CPU中断 */ fifo8_init(&keyfifo, 32, keybuf); fifo8_init(&mousefifo, 128, mousebuf); io_out8(PIC0_IMR, 0xf9); /* 许可PIC1和键盘(11111001) */ io_out8(PIC1_IMR, 0xef); /* 许可鼠标(11101111) */ init_keyboard(); init_palette(); init_screen8(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); sprintf(s, "(%d, %d)", mx, my); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 0, COL8_FFFFFF, s); enable_mouse(); for (;;) { io_cli(); if (fifo8_status(&keyfifo) + fifo8_status(&mousefifo) == 0) { /* J char ss[10]; sprintf(ss, "%c", "J"); putfonts8_asc(binfo->vram, binfo->scrnx, 100, 100, COL8_FFFFFF, ss); */ io_stihlt(); } else if (fifo8_status(&keyfifo) != 0) { i = fifo8_get(&keyfifo); io_sti(); sprintf(s, "%02X", i); boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 16, 15, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16, COL8_FFFFFF, s); } else if (fifo8_status(&mousefifo) != 0) { i = fifo8_get(&mousefifo); io_sti(); sprintf(s, "%02X", i); boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 32, 16, 47, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 32, 16, COL8_FFFFFF, s); } } }
void HariMain(void) { int i; struct BOOTINFO *binfo = (struct BOOTINFO *)0x0ff0; int xsize = (*binfo).scrnx; int ysize = (*binfo).scrny; char *vram = (*binfo).vram; char msg[40], mcursor[256]; const int mx = xsize/2; const int my = ysize/2; init_gdtidt (); init_pic (); io_sti (); init_pallete(); init_screen (vram, xsize, ysize); 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."); sprintf(msg, "scrnx = %d", binfo->scrnx); putfonts8_asc (binfo->vram, binfo->scrnx, 30, 48, COL8_FFFFFF, msg); init_mouse_cursor8 (mcursor, COL8_008484); putblock8_8 (binfo->vram, binfo->scrnx, 16, 16, mx,my, mcursor, 16); io_out8(PIC0_IMR, 0xf9); /* PIC1とキーボードを許可(11111001) */ io_out8(PIC1_IMR, 0xef); /* マウスを許可(11101111) */ for (;;) { io_cli(); if (keybuf.flag == 0) { io_stihlt(); } else { i = keybuf.data; keybuf.flag = 0; io_sti(); unsigned char s[4]; sprintf (s, "%x", i); boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 48, 15, 31+48); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 48, COL8_FFFFFF, s); } } }
void HariMain(void) { struct BOOTINFO *binfo = (struct BOOTINFO *) 0x0ff0; char s[40], mcursor[256]; int mx, my, i; init_gdtidt(); init_pic(); // Set IF (interrupt flag to 1) io_sti(); init_palette(); init_screen8(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); sprintf(s, "(%d, %d)", mx, my); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 0, COL8_FFFFFF, s); io_out8(PIC0_IMR, 0xf9); /* (11111001) Open IRQ 1 (keyboard) and IRQ 2 (connect to PIC 1) */ io_out8(PIC1_IMR, 0xef); /* (11101111) Open IRQ 12 */ //--keyboard char keybuf[32]; fifo8_init(&keyfifo,32, keybuf); init_keyboard(); for (;;) { io_cli(); if (fifo8_status(&keyfifo) == 0) { io_stihlt(); } else { i = fifo8_get(&keyfifo); io_sti(); sprintf(s, "%02X", i); boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 16, 15, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16, COL8_FFFFFF, s); } } }
void HariMain(void) { struct BOOTINFO *binfo = (struct BOOTINFO *) 0x0ff0; char s[40], mcursor[256]; int mx, my; init_palette(); init_screen8(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); sprintf(s, "(%d, %d)", mx, my); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 0, COL8_FFFFFF, s); for (;;) { io_hlt(); } }
void HariMain(void) { struct BOOTINFO *binfo=(struct BOOTINFO *) ADR_BOOTINFO; char s[40],mcursor[256]; int mx,my; init_gdtidt(); init_palette();//设定调色板 init_screen8(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); sprintf(s, "(%d, %d)", mx, my); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 0, COL8_FFFFFF, s); for(;;){ io_hlt(); /* 执行naskfunc.nas里的_io_hlt */ } }
void HariMain(void) { int i; struct BOOTINFO *binfo = (struct BOOTINFO *)0x0ff0; int xsize = (*binfo).scrnx; int ysize = (*binfo).scrny; char *vram = (*binfo).vram; init_gdtidt (); init_pic (); io_sti (); init_pallete(); init_screen (vram, xsize, ysize); putfont8_asc (binfo->vram, binfo->scrnx, 8, 8, COL8_FFFFFF, "ABC 123"); putfont8_asc (binfo->vram, binfo->scrnx, 31, 31, COL8_000000, "Haribote OS."); putfont8_asc (binfo->vram, binfo->scrnx, 30, 30, COL8_FFFFFF, "Haribote OS."); char msg[127]; sprintf(msg, "scrnx = %d", binfo->scrnx); putfont8_asc (binfo->vram, binfo->scrnx, 30, 48, COL8_FFFFFF, msg); char mcursor[16][16]; const int mx = xsize/2; const int my = ysize/2; init_mouse_cursor8 (mcursor, COL8_008484); putblock8_8 (binfo->vram, binfo->scrnx, 16, 16, mx,my, mcursor, 16); io_out8(PIC0_IMR, 0xf9); /* PIC1とキーボードを許可(11111001) */ io_out8(PIC1_IMR, 0xef); /* マウスを許可(11101111) */ for (;;) { io_hlt(); } }
void HariMain(void) { struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTINFO; char s[40], mcursor[256]; int mx, my, i; init_gdtidt(); init_pic(); io_sti(); /* IDT/PICの初期化が終わったのでCPUの割り込み禁止を解除 */ io_out8(PIC0_IMR, 0xf9); /* PIC1とキーボードを許可(11111001) */ io_out8(PIC1_IMR, 0xef); /* マウスを許可(11101111) */ init_palette(); init_screen8(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); sprintf(s, "(%d, %d)", mx, my); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 0, COL8_FFFFFF, s); for (;;) { io_cli(); if (keybuf.flag == 0) { io_stihlt(); } else { i = keybuf.data; keybuf.flag = 0; io_sti(); sprintf(s, "%02X", i); boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 16, 15, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16, COL8_FFFFFF, s); } } }
void HariMain(void) { struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTINFO; char s[40], mcursor[256], keybuf[32], mousebuf[128]; int mx, my, i; unsigned char mouse_dbuf[3], mouse_phase; init_gdtidt(); init_pic(); io_sti(); fifo8_init(&keyfifo, 32, keybuf); fifo8_init(&mousefifo, 128, mousebuf); io_out8(PIC0_IMR, 0xf9); io_out8(PIC1_IMR, 0xef); init_keyboard(); init_palette(); init_screen8(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); sprintf(s, "(%d, %d)", mx, my); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 0, COL8_FFFFFF, s); enable_mouse(); mouse_phase = 0; for (;;) { io_cli(); if (fifo8_status(&keyfifo) + fifo8_status(&mousefifo) == 0) { io_stihlt(); } else { if (fifo8_status(&keyfifo) != 0) { i = fifo8_get(&keyfifo); io_sti(); sprintf(s, "%02X", i); boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 16, 15, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16, COL8_FFFFFF, s); } else if (fifo8_status(&mousefifo) != 0) { i = fifo8_get(&mousefifo); io_sti(); if (mouse_phase == 0) { if (i == 0xfa) { mouse_phase = 1; } } else if (mouse_phase == 1) { mouse_dbuf[0] = i; mouse_phase = 2; } else if (mouse_phase == 2) { mouse_dbuf[1] = i; mouse_phase = 3; } else if (mouse_phase == 3) { mouse_dbuf[2] = i; mouse_phase = 1; sprintf(s, "%02X %02X %02X", mouse_dbuf[0], mouse_dbuf[1], mouse_dbuf[2]); boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 32, 16, 32 + 8 * 8 - 1, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 32, 16, COL8_FFFFFF, s); } } } } }
void HariMain(void) { char *vram; int xsize; int ysize; //short *binfo_scrnx,*binfo_scrny; //int *binfo_vram; struct BOOTINFO *binfo; extern char hankaku[4096]; /*static char font_A[16] = { 0x00, 0x18, 0x18, 0x18, 0x18, 0x24, 0x24, 0x24, 0x24, 0x7e, 0x42, 0x42, 0x42, 0xe7, 0x00, 0x00 };*/ int i; char s[40]; init_gdtidt(); init_pic(); io_sti(); init_keyboard(); init_palette(); binfo = (struct BOOTINFO *) 0x0ff0; xsize = binfo->scrnx; ysize = binfo->scrny; vram = binfo->vram; /* initlize the os background */ init_screen(vram,xsize,ysize); 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); putfonts8_asc(binfo->vram,binfo->scrnx,60,50,COL8_FFFFFF,"hello os."); // interaction input sprintf(s,"scrnx= %d",binfo->scrnx); putfonts8_asc(binfo->vram,binfo->scrnx,16,64,COL8_FFFFFF,s); char mcursor[256],keybuf[32]; int mx, my; mx = (binfo->scrnx - 16) / 2; my = (binfo->scrny - 28 - 16) / 2; // mouse image enable_mouse(); init_mouse_cursor8(mcursor,COL8_008484); putblock8_8(binfo->vram,binfo->scrnx,16,16,mx,my,mcursor,16); io_out8(PIC0_IMR, 0xf9); /* PIC1�ƃL�[�{�[�h������(11111001) */ io_out8(PIC1_IMR, 0xef); //11101111 , allow irq12 // keyboard fifo8_init(&keyfifo,32,keybuf); for(;;) { io_cli(); // forbid all interrupts if(fifo8_status(&keyfifo) == 0) io_stihlt(); // read data until it's empty else { i=fifo8_get(&keyfifo); io_sti(); // open interrupts sprintf(s, "%02X", i); boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 16, 15, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16, COL8_FFFFFF, s); } } }
void HariMain(void) { /* Fetch video info from asmhead */ struct _bootinfo * binfo = (struct _bootinfo *) ADR_BOOTINFO; int i, mx, my; char dbmsg[40]; char mcursor[256]; char string[16]; /* Init GDT IDT */ init_gdtidt(); /* Init Interrupt Programable Controller */ init_pic(); io_sti(); /* Init Keyboard and Mouse */ init_keyboard(); mx = binfo->scrnx / 2; my = binfo->scrny / 2; /* Palette Setting */ init_palette(); /* Init Screen */ init_screen(binfo->vram, binfo->scrnx, binfo->scrny); init_mouse_cursor8(mcursor, COLOUR_DCYAN); /* Debug */ sprintf(dbmsg, "scrnx = %d", binfo->scrnx); putstr8_asc(binfo->vram, binfo->scrnx, 26, 64, COLOUR_WHITE, dbmsg); /* Enable Interrupt */ io_out8(PIC0_IMR, 0xf9); io_out8(PIC1_IMR, 0xef); /* Mouse */ putblock8_8(binfo->vram, binfo->scrnx, 16, 16, mx, my, mcursor, 16); /* Init Keyboard and Mouse */ enable_mouse(&mdec); while (1) { io_cli(); /* Disable Interrupt */ if (fifo8_status(&keyfifo) + fifo8_status(&moufifo) == 0) { io_stihlt(); /* Enable Interrupt and halt - no interrupt */ } else { if (fifo8_status(&keyfifo) != 0) { /* Read key from buffer */ i = fifo8_get(&keyfifo); io_sti(); /* Re-enable Interrupt - handling interrupt buf*/ sprintf(string, "%02x", i); draw_retangle8(binfo->vram, binfo->scrnx, COLOUR_DCYAN, 200, 20, 216, 52); putstr8_asc(binfo->vram, binfo->scrnx, 200, 20, COLOUR_WHITE, string); } else if (fifo8_status(&moufifo) != 0) { /* Read mouse from buffer */ i = fifo8_get(&moufifo); io_sti(); /* Re-enable Interrupt - handling interrupt buf*/ /* Decode Mouse */ if (mouse_decode(&mdec, i) == 3) { /* Print Out */ sprintf(string, "lcr%4d%4d", mdec.x, mdec.y); if ((mdec.btn & 0x01) != 0) { string[0] = 'L'; } if ((mdec.btn & 0x02) != 0) { string[2] = 'R'; } if ((mdec.btn & 0x04) != 0) { string[1] = 'C'; } /* Hide Mouse */ draw_retangle8(binfo->vram, binfo->scrnx, COLOUR_DCYAN, mx, my, mx+16, my+16); /* Position Mouse */ mx += mdec.x; my += mdec.y; if (mx < 0) mx = 0; if (my < 0) my = 0; if (mx > binfo->scrnx - 16) mx = binfo->scrnx - 16; if (my > binfo->scrny - 16) my = binfo->scrny - 16; /* Display Mouse */ putblock8_8(binfo->vram, binfo->scrnx, 16, 16, mx, my, mcursor, 16); } } } } }
void HariMain(void) { struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTINFO; char s[40], mcursor[256], keybuf[32], mousebuf[128]; int mx, my, i; struct MOUSE_DEC mdec; init_gdtidt(); init_pic(); io_sti(); fifo8_init(&keyfifo, 32, keybuf); fifo8_init(&mousefifo, 128, mousebuf); io_out8(PIC0_IMR, 0xf9); io_out8(PIC1_IMR, 0xef); init_keyboard(); enable_mouse(&mdec); init_palette(); init_screen8(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); sprintf(s, "(%3d, %3d)", mx, my); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 0, COL8_FFFFFF, s); i = memtest(0x00400000, 0xbfffffff) / (1024 * 1024); sprintf(s, "memory %dMB", i); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 32, COL8_FFFFFF, s); for (;;) { io_cli(); if (fifo8_status(&keyfifo) + fifo8_status(&mousefifo) == 0) { io_stihlt(); } else { if (fifo8_status(&keyfifo) != 0) { i = fifo8_get(&keyfifo); io_sti(); sprintf(s, "%02X", i); boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 16, 15, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16, COL8_FFFFFF, s); } else if (fifo8_status(&mousefifo) != 0) { i = fifo8_get(&mousefifo); io_sti(); if (mouse_decode(&mdec, i) != 0) { sprintf(s, "[lcr %4d %4d]", mdec.x, mdec.y); if ((mdec.btn & 0x01) != 0) { s[1] = 'L'; } if ((mdec.btn & 0x02) != 0) { s[3] = 'R'; } if ((mdec.btn & 0x04) != 0) { s[2] = 'C'; } boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 32, 16, 32 + 15 * 8 - 1, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 32, 16, COL8_FFFFFF, s); boxfill8(binfo->vram, binfo->scrnx, COL8_008484, mx, my, mx + 15, my + 15); mx += mdec.x; my += mdec.y; if (mx < 0) { mx = 0; } if (my < 0) { my = 0; } if (mx > binfo->scrnx - 16) { mx = binfo->scrnx - 16; } if (my > binfo->scrny - 16) { my = binfo->scrny - 16; } sprintf(s, "(%3d, %3d)", mx, my); boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 0, 79, 15); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 0, COL8_FFFFFF, s); putblock8_8(binfo->vram, binfo->scrnx, 16, 16, mx, my, mcursor, 16); } } } } }
void bootmain(void){ extern char hankaku[2048]; struct BOOTINFO *binfo = (struct BOOTINFO *)ADR_BOOTINFO; char s[40], mcursor[256]; unsigned char keybuf[32], mousebuf[128]; int mx, my, i, j; init_gdtidt(); init_pic(); io_sti(); fifo8_init(&keyfifo, 32, keybuf); fifo8_init(&mousefifo, 128, mousebuf); outb(PIC0_IMR, 0xf9); outb(PIC1_IMR, 0xef); init_keyboard(); 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); // init_mouse_cursor8(char *mouse, char bg) putblock8_8(binfo->vram, binfo->scrnx, 16, 16, mx, my, mcursor, 16); // sprintf(s, "(%d, %d)", mx, my); sprintf(s, "(%d,%d)", mx, my); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 0, COL8_FFFFFF, s); // outb(PIC0_IMR, 0xf9); // outb(PIC1_IMR, 0xef); // enable_mouse(); /* for(;;){ io_cli(); if(keybuf.flag==0){ io_sti(); io_hlt(); }else{ boxfill8(binfo->vram, binfo->scrnx, COL8_000084, 0, 16, 31, 31);//chriszz添加。刷字符区域为蓝色。 i=keybuf.data; keybuf.flag = 0; io_sti(); sprintf(s, "%x", i); boxfill8(binfo->vram, binfo->scrnx, COL8_000084, 0, 31, 15, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16, COL8_FFFFFF, s); } } */ /* for(;;){ io_cli(); if(keybuf.next==0){ io_sti(); io_hlt(); }else{ boxfill8(binfo->vram, binfo->scrnx, COL8_000084, 0, 16, 31, 31);//chriszz添加。刷字符区域为蓝色。 i=keybuf.data[0]; keybuf.next--; for(j=0; j<keybuf.next; j++){ keybuf.data[j] = keybuf.data[j+1]; } io_sti(); sprintf(s, "%x", i); boxfill8(binfo->vram, binfo->scrnx, COL8_000084, 0, 31, 15, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16, COL8_FFFFFF, s); } } */ /* for(;;){ io_cli(); if(keybuf.len==0){ io_sti(); io_hlt(); }else{ boxfill8(binfo->vram, binfo->scrnx, COL8_000084, 0, 16, 31, 31);//chriszz添加。刷字符区域为蓝色。 i=keybuf.data[keybuf.next_r]; keybuf.len--; keybuf.next_r++; if(keybuf.next_r==32){ keybuf.next_r=0; } io_sti(); sprintf(s, "%x", i); boxfill8(binfo->vram, binfo->scrnx, COL8_000084, 0, 31, 15, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16, COL8_FFFFFF, s); } } */ // char s[40], mcursor[256], keybuf[32]; // fifo8_init(&keyfifo, 32, keybuf); unsigned char mouse_dbuf[3], mouse_phase; struct MOUSE_DEC mdec; enable_mouse(&mdec); mouse_phase=0; for(;;){ io_cli(); if(fifo8_status(&keyfifo)+fifo8_status(&mousefifo)==0){ io_sti(); io_hlt(); }else{ if(fifo8_status(&keyfifo)!=0){ boxfill8(binfo->vram, binfo->scrnx, COL8_840000, 0, 16, 31, 31);//chriszz添加。刷字符区域为蓝色。 i=fifo8_get(&keyfifo); io_sti(); sprintf(s, "%x", i); boxfill8(binfo->vram, binfo->scrnx, COL8_840000, 0, 16, 31, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16, COL8_FFFFFF, s); } if(fifo8_status(&mousefifo)!=0){ //boxfill8(binfo->vram, binfo->scrnx, COL8_000084, 32, 16, 64, 31);//chriszz添加。刷字符区域为蓝色。 i=fifo8_get(&mousefifo); io_sti(); if(mouse_decode(&mdec, i)!=0){ sprintf(s, "[lmr %d %d]", mdec.buf[1], mdec.buf[2]); switch(mdec.btn){ //用switch替代if语句块。&的做法似乎有问题。 case 1:s[1]='L';break; case 2:s[3]='R';break; case 4:s[2]='M';break; } boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 32, 16, 150, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 32, 16, COL8_FFFFFF, s); boxfill8(binfo->vram, binfo->scrnx, COL8_008484, mx, my, mx+15, my+15);//刷[原]鼠标位置 mx += mdec.x; my += mdec.y; if(mx<0) mx=0; if(my<0) my=0; if(mx>binfo->scrnx-16) mx=binfo->scrnx-16; if(my>binfo->scrny-16) my=binfo->scrny-16; sprintf(s, "(%d,%d)", mx, my); boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 0, 79, 15); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 0, COL8_FFFFFF, s); putblock8_8(binfo->vram, binfo->scrnx, 16, 16, mx, my, mcursor, 16);//刷[新]鼠标位置 } } } i=memtest(0x00400000, 0xbfffffff)/(1024 * 1024); sprintf(s, "memory %dMB", i); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 32, COL8_FFFFFF, s); } }
void HariMain(void) { struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTINFO; char s[40],mcursor[256], keybuf[32], mousebuf[128]; int mx, my, i; unsigned int memtotal; struct MOUSE_DEC mdec; struct MEMMAN *memman = (struct MEMMAN *) MEMMAN_ADDR; init_gdtidt(); init_pic(); io_sti(); fifo8_init(&keyfifo, 32, keybuf); fifo8_init(&mousefifo, 128, mousebuf); io_out8(PIC0_IMR, 0xf9); io_out8(PIC1_IMR, 0xef); init_keyboard(); enable_mouse(&mdec); memtotal = memtest(0x00400000, 0xbfffffff); memman_init(memman); memman_free(memman, 0x00001000, 0x0009e000); // 0x00001000 - 0x0009efff memman_free(memman, 0x00400000, memtotal - 0x00400000); init_palette(); init_screen8(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); sprintf(s, "(%3d, %3d)", mx, my); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 0, COL8_FFFFFF, s); sprintf(s, "memory %dMB free : %dKB", memtotal / (1024 * 1024), memman_total(memman) / 1024); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 32, COL8_FFFFFF, s); for (;;) { io_cli(); if(fifo8_status(&keyfifo) +fifo8_status(&mousefifo) == 0){ io_stihlt(); } else{ if(fifo8_status(&keyfifo) != 0){ i = fifo8_get(&keyfifo); io_sti(); sprintf(s, "%02X", i); boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 16, 15, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16, COL8_FFFFFF, s); } else if(fifo8_status(&mousefifo) != 0){ i = fifo8_get(&mousefifo); io_sti(); if(mouse_decode(&mdec, i)!=0) { /* 三个字节齐,显示出来 */ sprintf(s, "[lcr %4d %4d]", mdec.x, mdec.y); if ((mdec.btn & 0x01) != 0) { s[1] = 'L'; } if ((mdec.btn & 0x02) != 0) { s[3] = 'R'; } if ((mdec.btn & 0x04) != 0) { s[2] = 'C'; } boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 32, 16, 32 + 15 * 8 - 1, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 32, 16, COL8_FFFFFF, s); // 鼠标指针的移动 boxfill8(binfo->vram, binfo->scrnx, COL8_008484,mx, my, mx+15, my+15); // 隐藏鼠标 mx += mdec.x; my += mdec.y; if (mx < 0){ mx = 0; } if (my < 0){ my = 0; } if(mx > binfo->scrnx-16){ mx = binfo->scrnx-16; } if (my > binfo->scrny-16){ my = binfo->scrny-16; } sprintf(s, "(%3d, %3d)", mx, my); boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 0, 79, 15); /* 隐藏坐标 */ putfonts8_asc(binfo->vram, binfo->scrnx, 0, 0, COL8_FFFFFF, s); /* 显示坐标 */ putblock8_8(binfo->vram, binfo->scrnx, 16, 16, mx, my, mcursor, 16); /* 描画鼠标 */ } } } } }
void HariMain(void) { init_gdtidt(); init_pic(); /* set interruption flag to one so that it's able to accespt interruptsion, it was cleared during set_pallete() */ io_sti(); init_palette(); struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTINFO; init_screen8(binfo->vram, binfo->scrnx, binfo->scrny); int mx, my, i; unsigned int memtotal; mx = (binfo->scrnx - 16) / 2; my = (binfo->scrny - 20 - 16) / 2; /* mouse is generating way more interruption than key, therefore we bump up the buffer to 128 */ char mouse[256], buffer[40], keybuf[32], mousebuf[128]; sprintf(buffer, "(%d, %d)", mx, my); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 0, COL8_FFFFFF, buffer); init_mouse_cursor8(mouse, COL8_008484); putblock8_8(binfo->vram, binfo->scrnx, 16, 16, mx, my, mouse, 16); /* accept interruption from mouse and keyboard */ io_out8(PIC0_IMR, 0xf9); io_out8(PIC1_IMR, 0xef); /* initialize unbounded buffer */ fifo8_init(&keyfifo, 32, keybuf); fifo8_init(&mousefifo, 128, mousebuf); /* initilize keyboard and mouse*/ init_keyboard(); struct MOUSE_DEC mdec; enable_mouse(&mdec); /* initialize memory management */ struct MEMMAN *memman = (struct MEMMAN *) MEMMAN_ADDR; memtotal = memtest(0x00400000, 0xbfffffff); /* byte */ memman_init(memman); memman_free(memman, 0x00001000, 0x0009e000); memman_free(memman, 0x00400000, memtotal - 0x00400000); sprintf(buffer, "memory %dMB free : %dKB", memtotal/(1024 * 1024), memman_total(memman)/1024); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 32, COL8_FFFFFF, buffer); /* this loop will keep looking at keybuf, if an interruption happens and keybuf is set then it prints the data */ for(;;) { io_cli(); /* use unbounded buffer */ /* check size first */ if(fifo8_status(&keyfifo) + fifo8_status(&mousefifo) == 0) { io_stihlt(); } else { if(fifo8_status(&keyfifo) != 0) { /* i can't be -1 as we already checked size */ i = fifo8_get(&keyfifo); io_sti(); sprintf(buffer, "%02X", i); boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 16, 15, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16, COL8_FFFFFF, buffer); } /* we handle keyboard int in higher priority */ else if(fifo8_status(&mousefifo) != 0) { i = fifo8_get(&mousefifo); io_sti(); /* once we have gathered all three signals, print it on screen */ if(mouse_decode(&mdec, i) != 0) { sprintf(buffer, "[lcr %04d %04d]", mdec.x, mdec.y); /* note: unless we realase a button, the mdec.btn mask will always be set and letter will alawys be captial */ if((mdec.btn & 0x01) != 0) { buffer[1] = 'L'; } if((mdec.btn & 0x02) != 0) { buffer[3] = 'R'; } if((mdec.btn & 0x04) != 0) { buffer[2] = 'C'; } boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 32, 16, 32 + 15 * 8 - 1, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 32, 16, COL8_FFFFFF, buffer); /* move mouse */ /* first clear mouse */ boxfill8(binfo->vram, binfo->scrnx, COL8_008484, mx, my, mx + 15, my + 15); mx += mdec.x; my += mdec.y; if(mx < 0) { mx = 0; } if(my < 0) { my = 0; } if(mx > binfo->scrnx - 16) { mx = binfo->scrnx - 16; } if(my > binfo->scrny - 16) { my = binfo->scrny - 16; } sprintf(buffer, "(%3d, %3d)", mx, my); boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 0, 79, 15); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 0, COL8_FFFFFF, buffer); putblock8_8(binfo->vram, binfo->scrnx, 16, 16, mx, my, mouse, 16); } } } } }
void _start(void) { struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTINFO; char s[40], mcursor[256], keybuf[32], mousebuf[128]; int mx, my, i; unsigned int memtotal; struct MOUSE_DEC mdec; struct MEMMAN *memman = (struct MEMMAN *) MEMMAN_ADDR; init_gdtidt(); init_pic(); io_sti(); /* IDT/PICの初期化が終わったのでCPUの割り込み禁止を解除 */ fifo8_init(&keyfifo, 32, keybuf); fifo8_init(&mousefifo, 128, mousebuf); io_out8(PIC0_IMR, 0xf9); /* PIC1とキーボードを許可(11111001) */ io_out8(PIC1_IMR, 0xef); /* マウスを許可(11101111) */ init_keyboard(); enable_mouse(&mdec); memtotal = memtest(0x00400000, 0xbfffffff); memman_init(memman); memman_free(memman, 0x00001000, 0x0009e000); /* 0x00001000 - 0x0009efff */ memman_free(memman, 0x00400000, memtotal - 0x00400000); init_palette(); init_screen8(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); sprintf(s, "(%3d, %3d)", mx, my); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 0, COL8_FFFFFF, s); sprintf(s, "memory %dMB free : %dKB", memtotal / (1024 * 1024), memman_total(memman) / 1024); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 32, COL8_FFFFFF, s); for (;;) { io_cli(); if (fifo8_status(&keyfifo) + fifo8_status(&mousefifo) == 0) { io_stihlt(); } else { if (fifo8_status(&keyfifo) != 0) { i = fifo8_get(&keyfifo); io_sti(); sprintf(s, "%02X", i); boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 16, 15, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16, COL8_FFFFFF, s); } else if (fifo8_status(&mousefifo) != 0) { i = fifo8_get(&mousefifo); io_sti(); if (mouse_decode(&mdec, i) != 0) { /* データが3バイト揃ったので表示 */ sprintf(s, "[lcr %4d %4d]", mdec.x, mdec.y); if ((mdec.btn & 0x01) != 0) { s[1] = 'L'; } if ((mdec.btn & 0x02) != 0) { s[3] = 'R'; } if ((mdec.btn & 0x04) != 0) { s[2] = 'C'; } boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 32, 16, 32 + 15 * 8 - 1, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 32, 16, COL8_FFFFFF, s); /* マウスカーソルの移動 */ boxfill8(binfo->vram, binfo->scrnx, COL8_008484, mx, my, mx + 15, my + 15); /* マウス消す */ mx += mdec.x; my += mdec.y; if (mx < 0) { mx = 0; } if (my < 0) { my = 0; } if (mx > binfo->scrnx - 16) { mx = binfo->scrnx - 16; } if (my > binfo->scrny - 16) { my = binfo->scrny - 16; } sprintf(s, "(%3d, %3d)", mx, my); boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 0, 79, 15); /* 座標消す */ putfonts8_asc(binfo->vram, binfo->scrnx, 0, 0, COL8_FFFFFF, s); /* 座標書く */ putblock8_8(binfo->vram, binfo->scrnx, 16, 16, mx, my, mcursor, 16); /* マウス描く */ } } } } }
void HariMain(void) { BOOTINFO_t *binfo; char mcursor[16*16]; int mx, my, i; extern char hankaku[4096]; char s[40], keybuf[32], mousebuf[128]; binfo = (BOOTINFO_t *)BOOTINFO_ENTRY; fifo8_init(&keyfifo, 32, keybuf); fifo8_init(&mousefifo, 128, mousebuf); // init programmable interrupt controller init_gdtidt(); init_pic(); io_sti(); // 开启中断 // init fifo buffer // ...... io_out8(PIC0_IMR, 0xf9); /* (11111001) 设置PIC0 中断mask , 打开irq1 */ io_out8(PIC1_IMR, 0xef); /* (11101111) 设置PIC1 中断mask , 打开irq12 */ init_keyboard(); // 初始化键盘控制芯片中的鼠标控制器 init_palette(); init_screen(binfo->vram, binfo->scrnx, binfo->scrny); // static char font_A[16] = { // 0x00, 0x18, 0x18, 0x18, 0x18, 0x24, 0x24, 0x24, // 0x24, 0x7e, 0x42, 0x42, 0x42, 0xe7, 0x00, 0x00 // }; putfont8(binfo->vram, binfo->scrnx, 8, 8, COL8_0000FF, hankaku+'A'*16); putfonts8_asc(binfo->vram, binfo->scrnx, 16, 8, COL8_0000FF, "BC 123"); putfonts8_asc(binfo->vram, binfo->scrnx, 31, 31, COL8_000000, "EasyOS."); putfonts8_asc(binfo->vram, binfo->scrnx, 30, 30, COL8_FFFFFF, "EasyOS."); mx = my = 100; init_mouse_cursor8(mcursor, COL8_008484); putblock8_8(binfo->vram, binfo->scrnx, 16, 16, mx, my, mcursor, 16); enable_mouse(); // 通知开启鼠标中断信息产生 for (;;) { io_cli(); // 屏蔽中断 if (fifo8_status(&keyfifo) + fifo8_status(&mousefifo) == 0) { io_stihlt(); // 恢复中断并挂起 } else { if (fifo8_status(&keyfifo) != 0) { i = fifo8_get(&keyfifo); io_sti(); sprintf(s, "%02X", i); boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 16, 15, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16, COL8_FFFFFF, s); } else if (fifo8_status(&mousefifo) != 0) { i = fifo8_get(&mousefifo); io_sti(); sprintf(s, "%02X", i); boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 32, 16, 47, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 32, 16, COL8_FFFFFF, s); } } } fin: io_hlt(); goto fin; }
void bootmain(void){ extern char hankaku[2048]; struct BOOTINFO *binfo = (struct BOOTINFO *)ADR_BOOTINFO; char s[40], mcursor[256]; unsigned char keybuf[32]; int mx, my, i, j; init_gdtidt(); init_pic(); io_sti(); 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); // init_mouse_cursor8(char *mouse, char bg) putblock8_8(binfo->vram, binfo->scrnx, 16, 16, mx, my, mcursor, 16); // sprintf(s, "(%d, %d)", mx, my); sprintf(s, "hithere%d", mx); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 0, COL8_FFFFFF, s); outb(PIC0_IMR, 0xf9); outb(PIC1_IMR, 0xef); /* for(;;){ io_cli(); if(keybuf.flag==0){ io_sti(); io_hlt(); }else{ boxfill8(binfo->vram, binfo->scrnx, COL8_000084, 0, 16, 31, 31);//chriszz添加。刷字符区域为蓝色。 i=keybuf.data; keybuf.flag = 0; io_sti(); sprintf(s, "%x", i); boxfill8(binfo->vram, binfo->scrnx, COL8_000084, 0, 31, 15, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16, COL8_FFFFFF, s); } } */ /* for(;;){ io_cli(); if(keybuf.next==0){ io_sti(); io_hlt(); }else{ boxfill8(binfo->vram, binfo->scrnx, COL8_000084, 0, 16, 31, 31);//chriszz添加。刷字符区域为蓝色。 i=keybuf.data[0]; keybuf.next--; for(j=0; j<keybuf.next; j++){ keybuf.data[j] = keybuf.data[j+1]; } io_sti(); sprintf(s, "%x", i); boxfill8(binfo->vram, binfo->scrnx, COL8_000084, 0, 31, 15, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16, COL8_FFFFFF, s); } } */ /* for(;;){ io_cli(); if(keybuf.len==0){ io_sti(); io_hlt(); }else{ boxfill8(binfo->vram, binfo->scrnx, COL8_000084, 0, 16, 31, 31);//chriszz添加。刷字符区域为蓝色。 i=keybuf.data[keybuf.next_r]; keybuf.len--; keybuf.next_r++; if(keybuf.next_r==32){ keybuf.next_r=0; } io_sti(); sprintf(s, "%x", i); boxfill8(binfo->vram, binfo->scrnx, COL8_000084, 0, 31, 15, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16, COL8_FFFFFF, s); } } */ // char s[40], mcursor[256], keybuf[32]; fifo8_init(&keyfifo, 32, keybuf); for(;;){ io_cli(); if(fifo8_status(&keyfifo)==0){ io_sti(); io_hlt(); }else{ boxfill8(binfo->vram, binfo->scrnx, COL8_000084, 0, 15, 31, 31);//chriszz添加。刷字符区域为蓝色。 i=fifo8_get(&keyfifo); io_sti(); sprintf(s, "%x", i); boxfill8(binfo->vram, binfo->scrnx, COL8_000084, 0, 31, 15, 31); putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16, COL8_FFFFFF, s); } } }