代码实现功能
代码实现了NES游戏模拟器在BF51x平台上的运行。运行代码后,会通过文件系统打开工程目录下ROM内的NES游戏ROM,然后运行游戏,在液晶屏上显示出游戏内容。通过开发板上的按键可进行游戏娱乐。目前代码解码支持128K及以下的ROM文件,大于128K的ROM文件不支持运行。
注意:模拟器音频部分还没有做,有兴趣的朋友可以补上。
硬件平台
开发板:ADSP-EDU-BF518F 淘宝链接:http://item.taobao.com/item.htm?spm=a1z10.3.17.33.5317f8&id=14449990649
仿真器:AD-HP510ICE-FULL 淘宝链接:http://item.taobao.com/item.htm?spm=a1z10.3.17.17.4561b&id=8842330668
代码使用说明
代码通过文件系统打开ROM:
fp = fopen("../rom/hundouluo.nes", "rb");
lenth = fread(rom_file, 1, 0x200000, fp);
fclose(fp);
打开液晶屏驱动:
InitDMA();
InitPPI();
InitTimer();
PPI_TMR_DMA_Enable();
LCD_Enable();
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][y*2+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);
}