模拟部分主要参考胖哥王老师的这个。
单片机---HLK-W801移植Nes模拟器(一)_单片机运行.nes-优快云博客
1、修改InfoNES_system.c文件中的键盘操作:
void InfoNES_PadState( DWORD *pdwPad1, DWORD *pdwPad2, DWORD *pdwSystem )
{
u32 keys = KEYS_INPUT;
*pdwPad1 = 0;
if(!(keys & (0x1 << KEY_UP)))
{
*pdwPad1 |= PAD_JOY_UP;
}
if(!(keys & (0x1 << KEY_DOWN)))
{
*pdwPad1 |= PAD_JOY_DOWN;
}
if(!(keys & (0x1 << KEY_LFT)))
{
*pdwPad1 |= PAD_JOY_LEFT;
}
if(!(keys & (0x1 << KEY_RHT)))
{
*pdwPad1 |= PAD_JOY_RIGHT;
}
if(!(keys & (0x1 << KEY_START)))
{
*pdwPad1 |= PAD_JOY_START;
}
if(!(keys & (0x1 << KEY_A)))
{
*pdwPad1 |= PAD_JOY_A;
}
if(!(keys & (0x1 << KEY_B)))
{
*pdwPad1 |= PAD_JOY_B;
}
if(!(keys & (0x1 << KEY_SEL)))
{
*pdwPad1 |= PAD_JOY_SELECT;
}
}
2、修改绘图操作:
void InfoNES_LoadLine()
{
//int i;
if(PPU_Scanline==100)
{
FrameCount++;
}
//InfoNES_LoadFrame();
//ILI9341_DrawLineOne(PPU_Scanline,WorkLine);
Display_DrawLine(PPU_Scanline,WorkLine);
//printf("PPU_Scanline:%d\n",PPU_Scanline);
}
lcd.c
void Display_DrawLine(u16 y,u16* data)
{
LCD_Address_Set(112, y+20, 112+255, y+20 ); //设置显示范围
LCD_CS_CLR;
for (u16 i = 0; i < 256; i++) {
LCD_WR_DATA16((data[i] >> 8) | (data[i] << 8));
}
LCD_CS_SET;
}
3、修改rom.c.我们把4个游戏都加载进去。
四个游戏都加载的话,空间不太够。所以,先把文字显示部分都删除了,特别是utf转gb2312部分的映射表。
4、修改主函数,加一个简单的选择