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

📄 obc1emu.c

📁 linux下的任天堂模拟器代码。供大家参考。
💻 C
字号:
/*Copyright (C) 1997-2007 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach )http://www.zsnes.comhttp://sourceforge.net/projects/zsneshttps://zsnes.bountysource.comThis program is free software; you can redistribute it and/ormodify it under the terms of the GNU General Public Licenseversion 2 as published by the Free Software Foundation.This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program; if not, write to the Free SoftwareFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.*/typedef unsigned char bool8;typedef unsigned char uint8;typedef unsigned short uint16;typedef unsigned int uint32;typedef char int8;typedef short int16;typedef long int32;//C++ in Ctypedef unsigned char bool;#define true 1#define false 0static uint8 *OBC1_RAM = 0;int OBC1_Address;int OBC1_BasePtr;int OBC1_Shift;uint16 obc1_address;uint8 obc1_byte;void GetOBC1 (){	switch(obc1_address) {		case 0x7ff0:			obc1_byte = OBC1_RAM[OBC1_BasePtr + (OBC1_Address << 2)];			break;		case 0x7ff1:			obc1_byte = OBC1_RAM[OBC1_BasePtr + (OBC1_Address << 2) + 1];			break;		case 0x7ff2:			obc1_byte = OBC1_RAM[OBC1_BasePtr + (OBC1_Address << 2) + 2];			break;		case 0x7ff3:			obc1_byte = OBC1_RAM[OBC1_BasePtr + (OBC1_Address << 2) + 3];			break;		case 0x7ff4:			obc1_byte = OBC1_RAM[OBC1_BasePtr + (OBC1_Address >> 2) + 0x200];			break;		default:			obc1_byte = OBC1_RAM[obc1_address & 0x1fff];	}}void SetOBC1 (){	switch(obc1_address) {		case 0x7ff0:		{			OBC1_RAM[OBC1_BasePtr + (OBC1_Address << 2)] = obc1_byte;			break;		}		case 0x7ff1:		{			OBC1_RAM[OBC1_BasePtr + (OBC1_Address << 2) + 1] = obc1_byte;			break;		}		case 0x7ff2:		{			OBC1_RAM[OBC1_BasePtr + (OBC1_Address << 2) + 2] = obc1_byte;			break;		}		case 0x7ff3:		{			OBC1_RAM[OBC1_BasePtr + (OBC1_Address << 2) + 3] = obc1_byte;			break;		}		case 0x7ff4:		{			unsigned char Temp;			Temp = OBC1_RAM[OBC1_BasePtr + (OBC1_Address >> 2) + 0x200];			Temp = (Temp & ~(3 << OBC1_Shift)) | ((obc1_byte & 3) << OBC1_Shift);			OBC1_RAM[OBC1_BasePtr + (OBC1_Address >> 2) + 0x200] = Temp;			break;		}		case 0x7ff5:		{			if (obc1_byte & 1)				OBC1_BasePtr = 0x1800;			else				OBC1_BasePtr = 0x1c00;			break;		}		case 0x7ff6:		{			OBC1_Address = obc1_byte & 0x7f;			OBC1_Shift = (obc1_byte & 3) << 1;			break;		}	}	OBC1_RAM[obc1_address & 0x1fff] = obc1_byte;}extern unsigned char *romdata;void InitOBC1(){	OBC1_RAM = romdata+0x400000;	if (OBC1_RAM[0x1ff5] & 1)		OBC1_BasePtr = 0x1800;	else		OBC1_BasePtr = 0x1c00;	OBC1_Address = OBC1_RAM[0x1ff6] & 0x7f;	OBC1_Shift = (OBC1_RAM[0x1ff6] & 3) << 1;}

⌨️ 快捷键说明

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