资源简介
一个自己编写的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
- 上一篇:词法分析器语言源代码
- 下一篇:基于51单片机的家庭防火防盗设计
相关资源
- 改性剂对超临界流体色谱SFC和超临界
- windows3.2简体中文版,虚拟机文件
- 浪潮FC光纤接口系统SAN存储解决方案
- 虚拟化架构助力苏州地税创新IT基础架
- IBM System x虚拟化解决方案
- 基于IBM System x的虚拟桌面解决方案整
- 海底管道虚拟安全系统:数据库设计
- HDS推出经济适用的USP VM 满足企业虚拟
- 如何通过VMware虚拟桌面及NetApp存储管
- 借助NetApp虚拟化解决方案简化VMware环
- 虚拟摄像头VCam开发SDK
- 飞康虚拟磁带库
- 串口模拟器支持win10
- 采用NFC技术的无线遥控器系统电路设
- 基于NXP的NFC电子钱包技术设计
- 无电池近场通信 NFC 键盘设计方案
- 基于NFC技术控制的电子钱包电路设计
- 无电池近场通信 (NFC) 键盘设计方案
- 基于NFC无电池键盘设计方案
- 基于NFC的电子钱包电路设计
- NFC芯片是什么 有何作用?
- QLogic扩大在整个FC HBA市场的领先优势
- 虚拟化iSCSI SAN:实现虚拟化基础架构
- E5404E 4Gb FC-SATA-II RAID产品手册
- 对FC-BB-5的FCoE建议(英文)
- FC-FS-3 光纤通道帧信号
- BOSON模拟器NetSim V5.31破解版附注册机
- WinCE_6.0_中文SDK(仿真器模拟器)
- 利用存储虚拟化整合企业存储资源
- USB-Serial-Controller_虚拟串口.rar
评论
共有 条评论