standardvga.java

来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 82 行

JAVA
82
字号
/*
 * $Id: StandardVGA.java,v 1.1 2003/11/25 11:51:34 epr Exp $
 */
package org.jnode.driver.video.vga;

import java.awt.image.IndexColorModel;

import javax.naming.NameNotFoundException;

import org.jnode.driver.video.vgahw.VgaIO;
import org.jnode.driver.video.vgahw.VgaState;
import org.jnode.driver.video.vgahw.VgaUtils;
import org.jnode.naming.InitialNaming;
import org.jnode.system.MemoryResource;
import org.jnode.system.ResourceManager;
import org.jnode.system.ResourceNotFreeException;
import org.jnode.system.ResourceOwner;
import org.jnode.vm.Address;

/**
 * @author epr
 */
public class StandardVGA {

	/* The SEQuencer, CRT, GRA, and ATTribute register sets
	 * for 640x480x16 color mode. */
	private final static int[] seq = { 0x03, 0x01, 0x0F, 0x00, 0x06 };
	private final static int[] crt =
		{ 0x5F, 0x4F, 0x50, 0x82, 0x54, 0x80, 0x0B, 0x3E, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0x8C, 0xDF, 0x28, 0x00, 0xE7, 0x04, 0xE3, 0xFF };
	private final static int[] gra = { 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0F, 0xFF };
	private final static int[] att = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x01, 0x00, 0x0F, 0x00, 0x00 };

	private final MemoryResource vgaMem;
	private final VgaState state640x480x16;
	private final VgaState oldState;

	public StandardVGA(ResourceOwner owner, IndexColorModel cm) throws ResourceNotFreeException {
		try {
			ResourceManager rm = (ResourceManager) InitialNaming.lookup(ResourceManager.NAME);
			vgaMem = rm.claimMemoryResource(owner, Address.valueOf(0xa0000), 0x9600, ResourceManager.MEMMODE_NORMAL);
			state640x480x16 = new VgaState(seq, crt, gra, att, 0xe3, cm);
			oldState = new VgaState();
		} catch (NameNotFoundException ex) {
			throw new ResourceNotFreeException("ResourceManager not found", ex);
		}
	}

	public void startService(VgaIO io) {
		VgaUtils.screenOff(io);
		oldState.saveFromVGA(io);
		state640x480x16.restoreToVGA(io);
		VgaUtils.screenOn(io);
		cls(io);
	} 

	public void stopService(VgaIO io) {
		VgaUtils.screenOff(io);
		oldState.restoreToVGA(io);
		VgaUtils.screenOn(io);
	} 

	/**
	 * Release all resources
	 */
	public void release() {
		vgaMem.release();
	}

	private final void cls(VgaIO io) {
		io.setGRAF(0x08, 0xFF);
		vgaMem.clear(0, (int) vgaMem.getSize());
	} 

	/**
	 * @return
	 */
	final MemoryResource getVgaMem() {
		return this.vgaMem;
	}

}

⌨️ 快捷键说明

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