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

📄 aepgb.java

📁 一个用java写成的gb模拟器的源代码。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		menubar.fs_2.setState(skip == 2);
		menubar.fs_3.setState(skip == 3);
		menubar.fs_4.setState(skip == 4);
		menubar.fs_5.setState(skip == 5);
	}

	void setDebugLevel(int level) {
		PgbSettings.debuglevel = level;

		menubar.debug_0.setState(level == 0);
		menubar.debug_1.setState(level == 1);
		menubar.debug_2.setState(level == 2);
		menubar.debug_3.setState(level == 3);
		menubar.debug_4.setState(level == 4);
		menubar.debug_5.setState(level == 5);
	}

	void setSystem(int sys) {
		PgbSettings.desiredsystem = sys;

		menubar.sys_gb.setState(sys == PgbSettings.SYS_GB);
		menubar.sys_gbp.setState(sys == PgbSettings.SYS_GBP);
		menubar.sys_sgb.setState(sys == PgbSettings.SYS_SGB);
		menubar.sys_gbc.setState(sys == PgbSettings.SYS_GBC);

		if (sys == PgbSettings.SYS_GBC && !cart.getGbc()) {
			sys = PgbSettings.SYS_SGB;
		}
		if (sys == PgbSettings.SYS_SGB && !cart.getSgb()) {
			sys = PgbSettings.SYS_GBP;
		}

		PgbSettings.system = sys;
	}

	synchronized void loadCart() {
		FileDialog fd;

		cart.saveBattery(PgbSettings.savepath, curfile);

		fd = new FileDialog(frame, curpath, FileDialog.LOAD);
		fd.setTitle("Load ROM...");
		fd.setFilenameFilter(cart);
		fd.setVisible(true);

		if (fd.getFile() == null) {
			return;
		}
		curfile = fd.getFile();
		curpath = fd.getDirectory();

		//fd.dispose();

		if (cart.load(curpath, curfile)) {
			setSystem(PgbSettings.desiredsystem);

			PgbSettings.gamestring = cart.getName();
			net.sendInfo();

			reset();

			unpause();
		}
	}

	/**
	 * WindowListener
	 */
	public void windowClosing(WindowEvent ev) {
		shutdown();
	}
	public void windowOpened(WindowEvent ev) {
	}
	public void windowClosed(WindowEvent ev) {
	}
	public synchronized void windowDeiconified(WindowEvent ev) {
		if (!PgbSettings.active) {
			PgbSettings.active = true;
			notifyAll();
		}
	}
	public synchronized void windowActivated(WindowEvent ev) {
		/*
		if(!PgbSettings.active) {
			PgbSettings.active = true;
			notify();
		}
		*/
	}
	public synchronized void windowIconified(WindowEvent ev) {
		if (PgbSettings.active) {
			PgbSettings.active = false;
		}
	}
	public synchronized void windowDeactivated(WindowEvent ev) {
		/*
		if(PgbSettings.active) {
			PgbSettings.active = false;
		}
		*/
	}

	/**
	 * KeyListener
	 */
	public void keyReleased(KeyEvent ev) {
	}
	public void keyPressed(KeyEvent ev) {
		if (ev.getKeyCode() == KeyEvent.VK_SPACE) {
			cpu.exec(1);
		}
		
		if (ev.getKeyCode() == PgbSettings.key_screen) {
			vidout.makeScreenshot();
		}
	}
	public void keyTyped(KeyEvent ev) {
	}

	/**
	 * ActionListener
	 */
	public synchronized void actionPerformed(ActionEvent ev) {
		if (ev.getActionCommand().equals("file_about")) {
			 		String message = "Pgb (c) 2000-2001 Ben Mazur\nAEPgb Version "+PgbSettings.version+" (c) 2004 retroK, XTale, baka0815\nhttp://aepgb.aep-emu.de/";
			 		JOptionPane.showMessageDialog(frame, message, "About AEPgb", JOptionPane.INFORMATION_MESSAGE);
					return;
				}
		if (ev.getActionCommand().equals("file_load")) {
			loadCart();
			return;
		}
		if (ev.getActionCommand().equals("file_exit")) {
			shutdown();
			return;
		}
		if (ev.getActionCommand().equals("cpu_reset")) {
			reset();
			return;
		}
		if (ev.getActionCommand().equals("cpu_paused")) {
			if (PgbSettings.paused) {
				unpause();
			} else {
				pause();
			}
			return;
		}
		if (ev.getActionCommand().equals("serial_connect")) {
			net.popNetDialog(frame);
			return;
		}
		if (ev.getActionCommand().equals("options_setkeys")) {
			PgbSettings.popKeysDialog(frame);
			return;
		}
		if (ev.getActionCommand().equals("options_setsavepath")) {
			PgbSettings.popSavePathDialog(frame);
			return;
		}
	}

	/**
	 * ItemListener
	 */
	public synchronized void itemStateChanged(ItemEvent ev) {
		if (ev.getItemSelectable().equals(menubar.cpu_paused)) {
			if (PgbSettings.paused) {
				unpause();
			} else {
				pause();
			}
			return;
		}
		if (ev.getItemSelectable().equals(menubar.vidout_default)) {
			setVideoOutput(PgbSettings.VIDOUT_DEFAULT);
			return;
		}
		if (ev.getItemSelectable().equals(menubar.vidout_directx)) {
			setVideoOutput(PgbSettings.VIDOUT_DIRECTX);
			return;
		}
		if (ev.getItemSelectable().equals(menubar.vidout_indexed)) {
			setVideoOutput(PgbSettings.VIDOUT_INDEXED);
			return;
		}
		if (ev.getItemSelectable().equals(menubar.vidout_direct)) {
			setVideoOutput(PgbSettings.VIDOUT_DIRECT);
			return;
		}

		if (ev.getItemSelectable().equals(menubar.sound)) {
			setSound(menubar.sound.getState());
			return;
		}

		if (ev.getItemSelectable().equals(menubar.soundChannel1Enable)
			|| ev.getItemSelectable().equals(menubar.soundChannel2Enable)
			|| ev.getItemSelectable().equals(menubar.soundChannel3Enable)
			|| ev.getItemSelectable().equals(menubar.soundChannel4Enable)) {
			setChannelEnable();
			return;
		}

		if (ev.getItemSelectable().equals(menubar.soundBuffer200)) {
			setBufferLength(200);
			return;
		}

		if (ev.getItemSelectable().equals(menubar.soundBuffer300)) {
			setBufferLength(300);
			return;
		}

		if (ev.getItemSelectable().equals(menubar.soundBuffer400)) {
			setBufferLength(400);
			return;
		}

		if (ev.getItemSelectable().equals(menubar.soundFreq11)) {
			setSoundFreq(11025);
			return;
		}

		if (ev.getItemSelectable().equals(menubar.soundFreq22)) {
			setSoundFreq(22050);
			return;
		}

		if (ev.getItemSelectable().equals(menubar.soundFreq44)) {
			setSoundFreq(44100);
			return;
		}

		if (ev.getItemSelectable().equals(menubar.size_1)) {
			setLcdSize(1);
			return;
		}
		if (ev.getItemSelectable().equals(menubar.size_2)) {
			setLcdSize(2);
			return;
		}
		if (ev.getItemSelectable().equals(menubar.size_3)) {
			setLcdSize(3);
			return;
		}
		if (ev.getItemSelectable().equals(menubar.size_4)) {
			setLcdSize(4);
			return;
		}
		if (ev.getItemSelectable().equals(menubar.color_mute)) {
			setColorMute(menubar.color_mute.getState());
			return;
		}
		if (ev.getItemSelectable().equals(menubar.sgb_border)) {
			setSgbBorder(menubar.sgb_border.getState());
			setLcdSize(PgbSettings.lcdsize);
			return;
		}
		if (ev.getItemSelectable().equals(menubar.auto_wait)) {
			PgbSettings.autowait = !PgbSettings.autowait;
			setFrameskip(PgbSettings.frameskip);
			return;
		}
		if (ev.getItemSelectable().equals(menubar.fs_0)) {
			setFrameskip(0);
			return;
		}
		if (ev.getItemSelectable().equals(menubar.fs_1)) {
			setFrameskip(1);
			return;
		}
		if (ev.getItemSelectable().equals(menubar.fs_2)) {
			setFrameskip(2);
			return;
		}
		if (ev.getItemSelectable().equals(menubar.fs_3)) {
			setFrameskip(3);
			return;
		}
		if (ev.getItemSelectable().equals(menubar.fs_4)) {
			setFrameskip(4);
			return;
		}
		if (ev.getItemSelectable().equals(menubar.fs_5)) {
			setFrameskip(5);
			return;
		}
		if (ev.getItemSelectable().equals(menubar.priority_low)) {
			setPriority(Thread.MIN_PRIORITY);
			return;
		}
		if (ev.getItemSelectable().equals(menubar.priority_normal)) {
			setPriority(Thread.NORM_PRIORITY);
			return;
		}
		if (ev.getItemSelectable().equals(menubar.priority_high)) {
			setPriority((Thread.NORM_PRIORITY + Thread.MAX_PRIORITY) / 2);
			return;
		}
		if (ev.getItemSelectable().equals(menubar.priority_max)) {
			setPriority(Thread.MAX_PRIORITY);
			return;
		}
		if (ev.getItemSelectable().equals(menubar.debug_0)) {
			setDebugLevel(0);
			return;
		}
		if (ev.getItemSelectable().equals(menubar.debug_1)) {
			setDebugLevel(1);
			return;
		}
		if (ev.getItemSelectable().equals(menubar.debug_2)) {
			setDebugLevel(2);
			return;
		}
		if (ev.getItemSelectable().equals(menubar.debug_3)) {
			setDebugLevel(3);
			return;
		}
		if (ev.getItemSelectable().equals(menubar.debug_4)) {
			setDebugLevel(4);
			return;
		}
		if (ev.getItemSelectable().equals(menubar.debug_5)) {
			setDebugLevel(5);
			return;
		}
		if (ev.getItemSelectable().equals(menubar.sys_gb)) {
			setSystem(PgbSettings.SYS_GB);
			reset();
		}
		if (ev.getItemSelectable().equals(menubar.sys_gbp)) {
			setSystem(PgbSettings.SYS_GBP);
			reset();
		}
		if (ev.getItemSelectable().equals(menubar.sys_sgb)) {
			setSystem(PgbSettings.SYS_SGB);
			reset();
		}
		if (ev.getItemSelectable().equals(menubar.sys_gbc)) {
			setSystem(PgbSettings.SYS_GBC);
			reset();
		}
	}

	/**
	 * Runnable
	 */
	public final void run() {
		int cyclecount = 0;
		long lasttime = System.currentTimeMillis(),
			lastframe = video.framecount;
		long interval = 1;
		long thistime, time, frames;
		int framereal, frametarget;

		Thread currentThread = Thread.currentThread();
		while (cpuThread == currentThread) {
			try {
				Thread.sleep(interval);
				synchronized (this) {
					while ((PgbSettings.paused || !PgbSettings.active)
						&& cpuThread == currentThread) {
						wait();
					}
				}
			} catch (InterruptedException ex) {
				// duh?
			}
			cpu.exec((int) (PgbSettings.clockspeed * 100000));
			if (cyclecount++ == 10) {
				// calculate
				thistime = System.currentTimeMillis();
				time = thistime - lasttime;
				frames = video.framecount - lastframe;
				framereal = (int) (frames * (1000.0 / time));
				frametarget = 60;
				// adjust
				if (PgbSettings.autowait) {
					// attempt to regulate speed...
					// it doesn't adjust fast, but it doesn't overadjust
					if (frametarget - framereal > 5) {
						interval = Math.max(interval - 4, 1);
					}
					if (framereal - frametarget > 5) {
						interval += 4;
					}
				} else {
					interval = 1;
				}
				// display
				frame.setTitle(
					"AEPgb : "
						+ framereal
						+ "/"
						+ frametarget
						+ " fps, wait="
						+ interval);
				// get ready for next time
				cyclecount = 0;
				lasttime = thistime;
				lastframe = video.framecount;
			}
		}
	}
}

⌨️ 快捷键说明

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