ADI Blackfin DSP处理器-BF533的开发详解70:NES 红白机模拟器(含源码)

news/2024/12/2 15:59:35/

硬件准备

ADSP-EDU-BF533:BF533开发板
AD-HP530ICE:ADI DSP仿真器

软件准备

Visual DSP++软件

硬件链接

在这里插入图片描述

代码实现功能

代码实现了 NES 游戏模拟器在 BF53x 平台上的运行。运行代码后,会通过文件系统打开工程目录下 ROM 内 的 NES 游戏 ROM,然后运行游戏,在液晶屏上显示出游戏内容。通过开发板上的按键可进行游戏娱乐。目前代码
解码支持 128K 及以下的 ROM 文件,大于 128K 的 ROM 文件不支持运行。

注意:模拟器音频部分还没有做,有兴趣的朋友可以补上。

代码使用说明

代码通过文件系统打开 ROM:
fp = fopen(“…/rom/hundouluo.nes”, “rb”);
lenth = fread(rom_file, 1, 0x200000, fp);
fclose(fp);

打开液晶屏驱动:
LCDBK_Disable();
InitDMA();
InitPPI();
InitTimer();
PPI_TMR_DMA_Enable();
LCD_Enable();
Init_Timers0(1999);//1~1999 控制背光亮度
Enable_Timers0();
LCDBK_Enable();

运行模拟器:
InfoNES_ReadRom();
InfoNES_Reset();
InfoNES_Main();

液晶屏数据更新:
void InfoNES_LoadFrame(void)
{
int x,y;
u16 color_data;
u8 color_r,color_g,color_b;
for(x = 0;x < 240;x++)
{
for(y = 0;y < 256;y++)
{
color_data = ChColor(WorkFrame[x*256+y]);
color_r = (color_data>>11)& 0x1f;
color_g = (color_data>>5)& 0x2f;
color_b = (color_data)& 0x1f;

color_data = (color_r) | (color_g<<5) | (color_b<<11);

DisplayBuffer_565[x][y2+220] = (color_data & 0xff) ;
DisplayBuffer_565[x][y
2+221] = ((color_data>>8) & 0xff);
}
}
}

模拟器按键操作:
u8 ReadKey(u8 KeyCodeLast)
{
u8 KeyCode,i;
u8 temp_code = 0;
static u8 KeyDly[10]={3,3,3,3,3,3,3,3,3,3};

temp_code = ~*pKEY_DAT;
KeyCode = ((temp_code>>0)&0x1)<<4 ;
KeyCode |= ((temp_code>>1)&0x1)<<6;
KeyCode |= ((temp_code>>2)&0x1)<<5 ;
KeyCode |= ((temp_code>>3)&0x1)<<7;
KeyCode |= ((temp_code>>4)&0x1)<<3;
KeyCode |= ((temp_code>>5)&0x1)<<1;
KeyCode |= ((temp_code>>6)&0x1)<<0;
KeyCode |= ((temp_code>>7)&0x1)<<2;
for (i = 0; i < 7; i++)
{
if ((board_input&(1<<i))!=(KeyCode&(1<<i)))
{
KeyDly[i] = 3;
}
else
{
if ((KeyCode&(1<<i)))
{
if (KeyDly[i] < 6)
{
KeyDly[i]++;
}
else
return (KeyCode);
}
else
{
if (KeyDly[i] > 0)
{
KeyDly[i]–;
}
else
return (KeyCode);
}
}
}
return(KeyCodeLast);
}

按键设置说明:

在这里插入图片描述

代码实验步骤

  1. 编译运行代码
  2. 待屏幕出现魂斗罗画面,通过按键输入:上上下下左右左右 BABA,按 START,开始游戏。
  3. 30 条命,祝游戏愉快。

代码实验结果

在液晶屏上出现魂斗罗画面,通过按键控制可进行游戏。

在这里插入图片描述


http://www.ppmy.cn/news/165219.html

相关文章

使用c++模拟红白机——概论篇(一)

任天堂的红白机系列的游戏应该是大家的童年了&#xff0c;红白机&#xff0c;又称FC&#xff0c;随着计算机技术的不断发展&#xff0c;现在市场上基本已经淘汰了红白机系列的硬件设备了。我偶尔的一个突发奇想&#xff0c;想要在体验一下红白机游戏的乐趣&#xff0c;于是乎我…

使用C++实现FC红白机模拟器 Cartridge 与 Mapper(实现篇)

(继上篇&#xff1a;原理篇&#xff0c;下&#xff1a;实现篇) 2. Cartridge 与 Mapper的实现 首先我们在QT中创建两个类&#xff0c;Cartridge 与 Mapper类&#xff1a; Cartridge 类负责加载和解析ROM&#xff0c;因为CPU和PPU的内存映射都有指向卡带的部分&#xff08;如…

【游戏开发实战】重温红白机经典FC游戏,顺便教你快速搭建2D游戏关卡(Tilemap | 场景 | 地图)

文章目录 一、前言&#xff1a;童年的回忆二、本文Unity制作的效果三、情怀来了&#xff0c;想玩FC游戏1、下载FC模拟器&#xff0c;推荐nestopia2、启动nestopia3、下载FC卡带包&#xff1a;76合1&#xff08;76in1&#xff09;4、载入卡带&#xff08;.nes&#xff09;5、设置…

nes 红白机模拟器 第1篇

对比了很多种&#xff0c;开源的 NES 模拟器 VirtuaNES , nestopia , FakeNES , FCEUX , InfoNES , LiteNES 最后决定使用 LiteNES 进行移值&#xff0c;它是由 mynes 移值而来。LiteNES 对 mynes 代码进行整理兼容了 C99 标准&#xff0c;编译时无警告。 https://github.com/N…

使用C++实现FC红白机模拟器 Cartridge 与 Mapper(原理篇)

1. 认识nes文件 我们既然是模拟&#xff0c;就不可能使用实体的卡带硬件。那我们如何获取游戏文件呢&#xff1f;好在已经有人为我们准备好了&#xff08;心怀感恩&#xff09;。 .nes文件是NES&#xff08;FC&#xff09;的rom文件&#xff0c;关于它的来龙去脉这里就不做详细…

童年经典,任天堂switch红白机游戏

相信很多90后的小伙伴应该玩过任天堂的游戏&#xff0c;比如魂斗罗&#xff0c;影子传说等&#xff0c;如图&#xff1a; 今天小编就给大家带来了这么一个红白机的JavaScript版本&#xff0c;我们可以直接在浏览器中玩&#xff0c;当然你也可以在模拟器中玩&#xff0c;这里…

大数据教程【05.01】--Python 数据分析简介

更多信息请关注WX搜索GZH&#xff1a;XiaoBaiGPT Python数据分析简介 本教程将介绍如何使用Python进行大数据分析。Python是一种功能强大且易于使用的编程语言&#xff0c;具备丰富的数据分析库和工具。在本教程中&#xff0c;我们将涵盖以下主题&#xff1a; 数据分析准备工作…

2023年上半年系统规划与管理师上午真题及答案解析

1.香农用概率来定量描述信息的公式如下&#xff0c;其中H(x)表示X的( )&#xff0c;Pi是( )出现第i种状态的( )。 A.信息熵 事件 概率 B.总熵 单位 概率 C.信息熵 单位 概率 D.总熵 单位 度量 2.信息传输模型中&#xff0c;( )负责信息的向外传播&#xff0c;( )负责…