显示器图形界面的实现

master
pthzwps2n 2 years ago
parent f5beaf0c99
commit 6b3766e300

@ -0,0 +1,74 @@
#include <linux/kernel.h>
#include <asm/io.h>
#include <all.h>
#include <asm/segment.h>
#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;
}
Loading…
Cancel
Save