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

📄 pgbregister.java

📁 一个用java写成的gb模拟器的源代码。
💻 JAVA
字号:
/**
 * this source file released under the GNU Public Licence.
 * see the accompanying copyright.txt for more information.
 * Copyright (C) 2000-2001 Ben Mazur
 */

/**
 * Interface for CPU registers
 */
interface PgbRegister {
	
	/**
	 * Return the high byte of the register.
	 */
	public int getH();
	
	/**
	 * Return the low byte of the register.
	 */
	public int getL();
	
	/**
	 * Return the 16-bit register word.
	 */
	public int getR();
	
	/**
	 * Gets the value from memory at the address specified
	 * by this register word.
	 * 
	 * @param mem		the memory object to read from.
	 */
	public int getI(PgbMemory mem);
	
	/**
	 * Sets the high byte of the register.
	 */
	public void setH(byte val);
	
	/**
	 * Sets the low byte of the register.
	 */
	public void setL(byte val);
	
	/**
	 * Sets the high byte of the register.
	 */
	public void setH(int val);
	
	/**
	 * Sets the high byte of the register.
	 */
	public void setL(int val);
	
	/**
	 * Sets the 16-bit register word.
	 */
	public void setR(int val);
	
	/**
	 * Sets the value into memory, at the address specified
	 * by this register word.
	 * 
	 * @param mem		the memory object to write to.
	 */
	public void setI(int val, PgbMemory mem);
}

/**
 * Optimized for register byte access.  Methods are final
 * and should be inlined.
 */
final class PgbRegisterB implements PgbRegister{
	public int hi;
	public int lo;
	
	public PgbRegisterB() {
		hi = 0;
		lo = 0;
	}
	public PgbRegisterB(int data) {
		setR(data);
	}
	
	public final int getH() {
		return hi;
	}
	public final int getL() {
		return lo;
	}
	public final int getI(PgbMemory mem) {
		return mem.read(getR()) & 0xFF;
	}
	public final int getR() {
		return hi << 8 | lo;
	}
	
	public final void setH(byte val) {
		hi = val & 0xFF;
	}
	public final void setL(byte val) {
		lo = val & 0xFF;
	}
	public final void setH(int val) {
		if(PgbSettings.DEBUG) {
			if(val < 0 || val > 0xFF) {
				System.out.println("bad value set into high: " + Integer.toHexString(val));
				PgbSettings.paused = true;
			}
		}
		hi = val;
	}
	public final void setL(int val) {
		if(PgbSettings.DEBUG) {
			if(val < 0 || val > 0xFF) {
				System.out.println("bad value set into low: " + Integer.toHexString(val));
				PgbSettings.paused = true;
			}
		}
		lo = val;
	}
	public final void setI(int val, PgbMemory mem) {
		if(PgbSettings.DEBUG) {
			if(val < 0 || val > 0xFF) {
				System.out.println("bad value set into indirect: " + Integer.toHexString(val));
				PgbSettings.paused = true;
			}
		}
		mem.write(getR(), val);
	}
	public final void setR(int val) {
		if(PgbSettings.DEBUG) {
			if(val < 0 || val > 0xFFFF) {
				System.out.println("bad value set into register: " + Integer.toHexString(val));
				PgbSettings.paused = true;
			}
		}
		hi = val >> 8;
		lo = val & 0x00FF;
	}
}

/**
 * Register implementation that is optimized for register 
 * word access.
 */
final class PgbRegisterW implements PgbRegister{
	public int data;
	
	public PgbRegisterW() {
		data = 0;
	}
	public PgbRegisterW(int data) {
		this.data = data;
	}
	
	public final int getH() {
		return data >> 8;
	}
	public final int getL() {
		return data & 0xFF;
	}
	public final int getI(PgbMemory mem) {
		return mem.read(data) & 0xFF;
	}
	public int getR() {
		return data;
	}	
	
	public final void setH(byte val) {
		setH(val & 0xFF);
	}
	public final void setL(byte val) {
		setL(val & 0xFF);
	}
	public final void setH(int val) {
		if(PgbSettings.DEBUG) {
			if(val < 0 || val > 0xFF) {
				System.out.println("bad value set into high: " + Integer.toHexString(val));
				PgbSettings.paused = true;
			}
		}
		data = val << 8 | getL();
	}
	public final void setL(int val) {
		if(PgbSettings.DEBUG) {
			if(val < 0 || val > 0xFF) {
				System.out.println("bad value set into low: " + Integer.toHexString(val));
				PgbSettings.paused = true;
			}
		}
		data = (data & 0xFF00) | val & 0xFF;
	}
	public final void setI(int val, PgbMemory mem) {
		if(PgbSettings.DEBUG) {
			if(val < 0 || val > 0xFF) {
				System.out.println("bad value set into indirect: " + Integer.toHexString(val));
				PgbSettings.paused = true;
			}
		}
		mem.write(data, val);
	}
	public final void setR(int val) {
		if(PgbSettings.DEBUG) {
			if(val < 0 || val > 0xFFFF) {
				System.out.println("bad value set into register: " + Integer.toHexString(val));
				PgbSettings.paused = true;
			}
		}
		data = val;
	}
}

⌨️ 快捷键说明

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