硬件准备
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][y2+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);
}
按键设置说明:
代码实验步骤
- 编译运行代码
- 待屏幕出现魂斗罗画面,通过按键输入:上上下下左右左右 BABA,按 START,开始游戏。
- 30 条命,祝游戏愉快。
代码实验结果
在液晶屏上出现魂斗罗画面,通过按键控制可进行游戏。