W801学习笔记九:HLK-W801制作学习机/NES游戏机(模拟器)

模拟部分主要参考胖哥王老师的这个。

单片机---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、修改主函数,加一个简单的选择

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vvind

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值