标签:style class blog code java http
D:\30day\projects\04_day\harib01b下代码如何编译运行。
把z_tools复制到04_day下,然后修改Makefile文件的run:
run :
$(MAKE) img
$(COPY) haribote.img ..\..\qemu\a.img
$(MAKE) -C ../../qemu/
make run 结果:
颜色为0-f,0-f...如此循环。
这是使用了默认调色板的颜色,如果我们想自己设置0-f号颜色怎么办呢?
那需要自己设置调色板:
void init_palette(void) { //首先定义我们想要的颜色 static unsigned char table_rgb[16 * 3] = { 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc6, 0xc6, 0xc6, 0x84, 0x00, 0x00, 0x00, 0x84, 0x00, 0x84, 0x84, 0x00, 0x00, 0x00, 0x84, 0x84, 0x00, 0x84, 0x00, 0x84, 0x84, 0x84, 0x84, 0x84 }; //设置颜色表 设置完成后 以后我们用x(0-f)号颜色就变成我们自己设定的了 set_palette(0, 15, table_rgb); return; } //写端口来设置颜色表(调色板) //需要注意的是开关中断 void set_palette(int start, int end, unsigned char *rgb) { int i, eflags; eflags = io_load_eflags(); io_cli(); io_out8(0x03c8, start); for (i = start; i <= end; i++) { io_out8(0x03c9, rgb[0] / 4); // R io_out8(0x03c9, rgb[1] / 4); // G io_out8(0x03c9, rgb[2] / 4); // B rgb += 3; } io_store_eflags(eflags); return; }
然后我们看 第7小节/绘制矩形/harib01g
看到这个题目,我想的是自己绘制一个矩形。试试看
首先我复制了一份harib01b名字为copy-harib01b
void io_hlt(void); void write_mem8(int addr, int data); void HariMain(void) { int i; char *p; p = (char *)0xa0000; // for (i = 0; i <= 0xffff; i++) // { //write_mem8(i, i & 0x0f); // p[i] = 0; // } for (;;) { io_hlt(); } }
先看看屏幕背景是不是黑色,结果是肯定的。然后我们写一个画线函数试试。
void io_hlt(void); void write_mem8(int addr, int data); //我们只要在0xa0000+x+y*320写入颜色号就是画 void drawline(int x1,int y1,int x2,int y2,int x); //画直线 参数为端点坐标 void drawrectblock(int x1,int y1,int x2, int y2, int x); //画矩形块 参数为左上角 右下角坐标 void HariMain(void) { int i; char *p; drawline(20,5,100,5,6); for (;;) { io_hlt(); } } void drawline(int x1,int y1,int x2,int y2,int x) { char *p; p = (char *)0xa0000; if(x1<x2) //画横线 { for(;x1<x2;x1++) { *(p+x1+y1*320) = x; //使用x号颜色 } } else //画竖线或者画点 { for(;y1<y2;y1++) { *(p+x1+y1*320) = x; } } return ; }
结果:
然后改改主函数,画个矩形试试:
good。
继续写一个画矩形块的函数:
void drawrectblock(int x1,int y1,int x2, int y2, int x) { int i,j; char *p; p = (char *)0xa0000; for(j=y1;j<=y2;j++) { for(i=x1;i<=x2;i++) { *(p+i+j*320) = x; } } return ; }
结果:
好了,本篇结束。
标签:style class blog code java http
原文地址:http://www.cnblogs.com/qiangua/p/3783746.html