⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 palette.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <bio.h>#include "pci.h"#include "vga.h"static ulongxnto32(uchar x, int n){	int s;	ulong y;	x &= (1<<n)-1;	y = 0;	for(s = 32 - n; s > 0; s -= n)		y |= x<<s;	if(s < 0)		y |= x>>(-s);	return y;}static voidsetcolour(uchar p[3], ulong r, ulong g, ulong b){	p[Red] = r>>(32-6);	p[Green] = g>>(32-6);	p[Blue] = b>>(32-6);}/* * Vga colour palette. */static voidsnarf(Vga* vga, Ctlr* ctlr){	int i;	vga->pixmask = vgai(Pixmask);	vga->pstatus = vgai(Pstatus);	vgao(PaddrR, 0x00);	for(i = 0; i < Pcolours; i++){		vga->palette[i][Red] = vgai(Pdata);		vga->palette[i][Green] = vgai(Pdata);		vga->palette[i][Blue] = vgai(Pdata);	}	ctlr->flag |= Fsnarf;}static voidinit(Vga* vga, Ctlr* ctlr){	int i;	uchar *p;	ulong x;	memset(vga->palette, 0, sizeof(vga->palette));	vga->pixmask = 0xFF;	if(vga->mode->z == 8){		for(i = 0; i < Pcolours; i++){			p = vga->palette[i^0xFF];			setcolour(p, xnto32(i>>5, 3), xnto32(i>>2, 3), xnto32(i, 2));		}		p =  vga->palette[0x55^0xFF];		setcolour(p, xnto32(0x15, 6), xnto32(0x15, 6), xnto32(0x15, 6));		p =  vga->palette[0xAA^0xFF];		setcolour(p, xnto32(0x2A, 6), xnto32(0x2A, 6), xnto32(0x2A, 6));		p =  vga->palette[0xFF^0xFF];		setcolour(p, xnto32(0x3F, 6), xnto32(0x3F, 6), xnto32(0x3F, 6));	}	else for(i = 0; i < 16; i++){		x = xnto32((i*63)/15, 6);		setcolour(vga->palette[i^0xFF], x, x, x);	}	ctlr->flag |= Finit;}static voidload(Vga* vga, Ctlr* ctlr){	int i;	vgao(Pixmask, vga->pixmask);	vgao(PaddrW, 0x00);	for(i = 0; i < Pcolours; i++){		vgao(Pdata, vga->palette[i][Red]);		vgao(Pdata, vga->palette[i][Green]);		vgao(Pdata, vga->palette[i][Blue]);	}	ctlr->flag |= Fload;}static voiddump(Vga* vga, Ctlr* ctlr){	int i;	printitem(ctlr->name, "palette");	for(i = 0; i < Pcolours; i++){		if(i && (i%6) == 0)			Bprint(&stdout, "\n%-20s", "");		Bprint(&stdout, " %2.2X/%2.2X/%2.2X", vga->palette[i][Red],			vga->palette[i][Green], vga->palette[i][Blue]);	}	Bprint(&stdout, "\n");}Ctlr palette = {	"palette",			/* name */	snarf,				/* snarf */	0,				/* options */	init,				/* init */	load,				/* load */	dump,				/* dump */};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -