资源简介

一个自己编写的FC模拟器,可以运行一些体积小于40KB的游戏(部分游戏有Bug),程序结构简单,可以说是模拟FC最少所需要的代码量。使用freeglut库输出图像。

资源截图

代码片段和文件信息

#include
#include “Cpu.h“
using namespace std;

CCpu::CCpu(void):NesFile(NULL)
{
}


CCpu::~CCpu(void)
{
delete NesFile;
}


// 初始化CPU
void CCpu::Init(CNesFile* FileCPpu* ppu)
{
if(NesFile)
delete NesFile;
NesFile=File;
Ppu=ppu;
Reset();
}


// 复位CPU
void CCpu::Reset(void)
{
Ppu->Init(NesFile);
memset(Memory00x800); //将内存全部设为0
memset(SRAM00x2000); //SRAM设为0吧

RegA=RegX=RegY=0;
RegSP=0xff;
RegPC=ReadWord(RES_VECTOR);
RegP=Z_FLAG|R_FLAG;
isUp=isDown=isLeft=isRight=isA=isB=isSelect=isStart=false;
}


// 模拟一条CPU指令
bool CCpu::emulate(void)
{
BYTE opcode=ReadByte(RegPC++);
WORD WordTemp;
BYTE ByteTempByteTemp2;
switch(opcode)
{
//ADC Immediate
case 0x69:
ByteTemp=ReadByte(RegPC++);
WordTemp=RegA+ByteTemp+(RegP&C_FLAG);
TestFlag(WordTemp>0xFFC_FLAG);
TestFlag((~(RegA^ByteTemp))&(RegA^WordTemp)&0x80V_FLAG);
RegA=(BYTE)WordTemp;
TestFlag(RegA==0Z_FLAG);
TestFlag(RegA&0x80N_FLAG);
break;
//ADC Zero Page
case 0x65:
ByteTemp=ReadByte(RegPC++);
ByteTemp=ReadByte(ByteTemp);
WordTemp=RegA+ByteTemp+(RegP&C_FLAG);
TestFlag(WordTemp>0xFFC_FLAG);
TestFlag((~(RegA^ByteTemp))&(RegA^WordTemp)&0x80V_FLAG);
RegA=(BYTE)WordTemp;
TestFlag(RegA==0Z_FLAG);
TestFlag(RegA&0x80N_FLAG);
break;
//ADC Zero PageX
case 0x75:
ByteTemp=ReadByte(RegPC++);
ByteTemp=ReadByte((ByteTemp+RegX)&0xff);
WordTemp=RegA+ByteTemp+(RegP&C_FLAG);
TestFlag(WordTemp>0xFFC_FLAG);
TestFlag((~(RegA^ByteTemp))&(RegA^WordTemp)&0x80V_FLAG);
RegA=(BYTE)WordTemp;
TestFlag(RegA==0Z_FLAG);
TestFlag(RegA&0x80N_FLAG);
break;
//ADC Absolute
case 0x6d:
WordTemp=ReadWord(RegPC++);
RegPC++;
ByteTemp=ReadByte(WordTemp);
WordTemp=RegA+ByteTemp+(RegP&C_FLAG);
TestFlag(WordTemp>0xFFC_FLAG);
TestFlag((~(RegA^ByteTemp))&(RegA^WordTemp)&0x80V_FLAG);
RegA=(BYTE)WordTemp;
TestFlag(RegA==0Z_FLAG);
TestFlag(RegA&0x80N_FLAG);
break;
//ADC AbsoluteX
case 0x7d:
WordTemp=ReadWord(RegPC++);
RegPC++;
ByteTemp=ReadByte(WordTemp+RegX);
WordTemp=RegA+ByteTemp+(RegP&C_FLAG);
TestFlag(WordTemp>0xFFC_FLAG);
TestFlag((~(RegA^ByteTemp))&(RegA^WordTemp)&0x80V_FLAG);
RegA=(BYTE)WordTemp;
TestFlag(RegA==0Z_FLAG);
TestFlag(RegA&0x80N_FLAG);
break;
//ADC AbsoluteY
case 0x79:
WordTemp=ReadWord(RegPC++);
RegPC++;
ByteTemp=ReadByte(WordTemp+RegY);
WordTemp=RegA+ByteTemp+(RegP&C_FLAG);
TestFlag(WordTemp>0xFFC_FLAG);
TestFlag((~(RegA^ByteTemp))&(RegA^WordTemp)&0x80V_FLAG);
RegA=(BYTE)WordTemp;
TestFlag(RegA==0Z_FLAG);
TestFlag(RegA&0x80N_FLAG);
break;
//ADC (IndirectX)
case 0x61:
ByteTemp=ReadByte(RegPC++);
WordTemp=ReadWord((ByteTemp+RegX)&0xff);
ByteTemp=ReadWord(WordTemp);
WordTemp=RegA+ByteTemp+(RegP&C_FLAG);
TestFlag(WordTemp>0xFFC_FLAG);
TestFlag((~(RegA^ByteTemp))&(RegA^WordTemp)&0x80V_FLAG);
RegA=(BYTE)WordTe

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      32504  2011-10-12 12:49  nesEmu\nesEmu\Cpu.cpp

     文件       4313  2011-10-13 11:33  nesEmu\nesEmu\Cpu.h

     文件       3616  2011-10-15 22:18  nesEmu\nesEmu\Main.cpp

     文件     306176  2011-10-13 12:56  nesEmu\nesEmu\nesEmu.exe

     文件       4774  2011-10-13 11:48  nesEmu\nesEmu\nesEmu.vcxproj

     文件       1586  2011-05-11 21:13  nesEmu\nesEmu\nesEmu.vcxproj.filters

     文件        143  2011-05-11 16:35  nesEmu\nesEmu\nesEmu.vcxproj.user

     文件        997  2011-05-11 23:32  nesEmu\nesEmu\NesFile.cpp

     文件       1492  2011-05-22 11:02  nesEmu\nesEmu\NesFile.h

     文件       7251  2011-10-15 22:17  nesEmu\nesEmu\Ppu.cpp

     文件       2516  2011-10-13 11:33  nesEmu\nesEmu\Ppu.h

     文件      24592  2002-10-27 15:29  nesEmu\nesEmu\test

     文件        156  2011-10-15 22:17  nesEmu\nesEmu\typedef.h

     文件      40976  2011-10-12 13:35  nesEmu\nesEmu\五子棋

     文件      65552  2011-10-12 13:36  nesEmu\nesEmu\俄罗斯方块

     文件      40976  2011-10-12 13:36  nesEmu\nesEmu\弹球

     文件      40976  2011-10-12 13:37  nesEmu\nesEmu\拆屋工

     文件      40976  2011-10-12 13:35  nesEmu\nesEmu\挖金子

     文件      24592  2011-10-12 13:36  nesEmu\nesEmu\敲冰块

     文件      40976  2011-10-12 13:37  nesEmu\nesEmu\超级玛丽

     文件        885  2011-05-11 16:35  nesEmu\nesEmu.sln

    ..A..H.     20480  2011-10-15 22:18  nesEmu\nesEmu.suo

     目录          0  2011-10-15 22:18  nesEmu\nesEmu

     目录          0  2011-10-15 22:19  nesEmu

----------- ---------  ---------- -----  ----

               706505                    24


评论

共有 条评论