From 6b3766e30039b49812fe9aa342b4d5318ffbba45 Mon Sep 17 00:00:00 2001 From: pthzwps2n <1572003858@qq.com> Date: Mon, 4 Jul 2022 15:49:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=99=A8=E5=9B=BE=E5=BD=A2?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E7=9A=84=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- init_graphics.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 init_graphics.c diff --git a/init_graphics.c b/init_graphics.c new file mode 100644 index 0000000..21f271b --- /dev/null +++ b/init_graphics.c @@ -0,0 +1,74 @@ +#include +#include +#include +#include +#define vga_graph_memstart 0xA0000 +#define vga_graph_memsize 64000 +#define cursor_side 6 +#define vga_width 320 +#define vga_heignt 200 +int volatile jumpp; +int sys_init_graphics() +{ + outb(0x05,0x3CE); + outb(0x40,0x3CF);/* shift256=1*/ + outb(0x06,0x3CE); + outb(0x05,0x3CF);/*0101 0xA0000*/ + outb(0x04,0x3C4); + outb(0x08,0x3C5);/*0000 jilian*/ + + + outb(0x01,0x3D4); + outb(0x4F,0x3D5);/* end horizontal display=79 ??*/ + outb(0x03,0x3D4); + outb(0x82,0x3D5);/*display enable skew=0*/ + + outb(0x07,0x3D4); + outb(0x1F,0x3D5);/*vertical display end No8,9 bit=1,0*/ + outb(0x12,0x3D4); + outb(0x8F,0x3D5);/*vertical display end low 7b =0x8F*/ + outb(0x17,0x3D4); + outb(0xA3,0x3D5);/*SLDIV=1 ,scanline clock/2*/ + + + + outb(0x14,0x3D4); + outb(0x40,0x3D5);/*DW=1*/ + outb(0x13,0x3D4); + outb(0x28,0x3D5);/*Offset=40, 20:become long*/ + + outb(0x0C,0x3D4);/**/ + outb(0x00,0x3D5);/**/ + outb(0x0D,0x3D4);/**/ + outb(0x00,0x3D5);/*Start Address=0xA0000*/ + + + + int i; + char * p; + p = (char *)vga_graph_memstart; + for (i = 0; i < vga_graph_memsize; ++i) + *p++ = 7; + + return 0; +} + +int sys_repaint(struct pho * pho) +{ + int i, j; + char * p; + long color = get_fs_long(&pho->color); + long x = get_fs_long(&pho->x); + long y = get_fs_long(&pho->y); + long dx = get_fs_long(&pho->dx); + long dy = get_fs_long(&pho->dy); + + for (i = x; i < x+dx; ++i) if (0 <= i && i < vga_width) + for (j = y; j < y+dy; ++j) if (0 <= j && j < vga_heignt){ + p = (char *)vga_graph_memstart + vga_width*j + i; + *p = 10; + } + + + return 0; +}