• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

为什么目前的单片机依旧无法实现从前红白机那样的游戏效果

现有的单片机比如51,avr等都可以跑十几MHz的频率,拥有几K的内存,比以前的红白机用的处理器跑1.8MHz应该快多了(同样是8bit的处理器),但是貌似用单片机还是没办法做出像超级玛丽这样比较大而且运行流畅的游戏,这是为什么呢?

 

现有的单片机比如51,avr等都可以跑十几MHz的频率,拥有几K的内存,比以前的红白机用的处理器跑1.8MHz应该快多了(同样是8bit的处理器),但是貌似用单片机还是没办法做出像超级玛丽这样比较大而且运行流畅的游戏,这是为什么呢?

 

有位牛人利用单片机自制了FC游戏机,该游戏机使用51系列MCU作为控制器,8bit游戏机FC的显示芯片6538作为PPU

硬件调试已经全部通过,实际画面效果流畅度可以与FC媲美,目前只有一个用魂斗罗2的图做的一个简单的DEMO,而且效果仅仅是一个背景加几个卡通

性能参数:

MCU:STC89c52R,11.0592Mhz双倍速,可以换更高的晶振或性能更快的51MCU

内存:16KB

PPU:型号:UA6538(2C02)

发色数,:最大发色数56色,同屏幕显示25色

解析度:256x240

显存:4KB

声音:暂时没有

输出:CVBS, PAL制式

RF射频

之所以想到做这款机器主要是因为受不了用汇编写FC游戏,于是希望使用上更快的CPU用c语言来写FC游戏,控制器选择使用51,因为51性价比高,其速度足以跟得上PPU6538的节奏

而且可以方便的升级,用更快的51来替代,比如使用1T的51。

现在终于可以用c写FC游戏了,这个DEMO就是在keilc开发环境上写出来,其中没有嵌入任何汇编代码,卡通(主角魂斗罗)照样可以平滑移动,不过如果场景变得更复杂还是有可能嵌入汇编加速。

上图:

 

 

全部回复(6)
正序查看
倒序查看
daylight
LV.4
2
2014-02-11 15:03

由上面的例子我们可以看出,除了cpu外,不能忽略显示控制芯片的作用。

FC上还有一个关键的芯片-- PPU RP2C02 (兼容机上是UA6538),由这颗芯片来驱动电视机,下为FC原理图:

C使用理光开发的图像控制器(PPU),有 2KB 的视频内存,调色盘可显示 48 色及 5 个灰阶。一个画面可显示 64 个角色(sprites) ,角色格式为 8x8 或 8x16 个像素,一条扫描线最多显示 8 个角色,虽然可以超过此限制,但是会造成角色闪烁。背景仅能显示一个卷轴,画面分辨率为 256x240 ,但因为 NTSC 系统的限制,不能显示顶部及底部的 8 条扫描线,所以分辨率剩下 256x224

 

C使用理光开发的图像控制器(PPU),有 2KB 的视频内存,调色盘可显示 48 色及 5 个灰阶。一个画面可显示 64 个角色(sprites) ,角色格式为 8x8 或 8x16 个像素,一条扫描线最多显示 8 个角色,虽然可以超过此限制,但是会造成角色闪烁。背景仅能显示一个卷轴,画面分辨率为 256x240 ,但因为 NTSC 系统的限制,不能显示顶部及底部的 8 条扫描线,所以分辨率剩下 256x224

我们可以参考可编程6538图像处理器初析

不经过cpu运算,通过发命令的方式让色块(游戏人物、障碍物)显示、移动的功能,应该属于硬件渲染吧(说错勿怪),所以这颗芯片还是很给力的。

如果仅靠51单片机的IO口直接驱动显示设备,那恐怕就只能得到

这样的

这样的

还有这样的

以及这样的

虽说画面还都说的过去,但是总是感觉跟FC的效果在色彩和分辨率上有差距

 

0
回复
2014-02-22 19:31
@daylight
由上面的例子我们可以看出,除了cpu外,不能忽略显示控制芯片的作用。FC上还有一个关键的芯片--PPURP2C02(兼容机上是UA6538),由这颗芯片来驱动电视机,下为FC原理图:[图片]C使用理光开发的图像控制器(PPU),有2KB的视频内存,调色盘可显示48色及5个灰阶。一个画面可显示64个角色(sprites),角色格式为8x8或8x16个像素,一条扫描线最多显示8个角色,虽然可以超过此限制,但是会造成角色闪烁。背景仅能显示一个卷轴,画面分辨率为256x240,但因为NTSC系统的限制,不能显示顶部及底部的8条扫描线,所以分辨率剩下256x224 C使用理光开发的图像控制器(PPU),有2KB的视频内存,调色盘可显示48色及5个灰阶。一个画面可显示64个角色(sprites),角色格式为8x8或8x16个像素,一条扫描线最多显示8个角色,虽然可以超过此限制,但是会造成角色闪烁。背景仅能显示一个卷轴,画面分辨率为256x240,但因为NTSC系统的限制,不能显示顶部及底部的8条扫描线,所以分辨率剩下256x224我们可以参考可编程6538图像处理器初析不经过cpu运算,通过发命令的方式让色块(游戏人物、障碍物)显示、移动的功能,应该属于硬件渲染吧(说错勿怪),所以这颗芯片还是很给力的。如果仅靠51单片机的IO口直接驱动显示设备,那恐怕就只能得到这样的[图片]这样的[图片]还有这样的[图片]以及这样的[图片]虽说画面还都说的过去,但是总是感觉跟FC的效果在色彩和分辨率上有差距 
我不认为做不出来,芯片的应用场景不同。
0
回复
matou
LV.3
4
2014-02-22 19:33
即便是相同频率的处理器,其浮点运算能力和指令集也是不同的,在处理图像和逻辑时表现出来的能力也不同。游戏对处理器的消耗主要是渲染而不是逻辑。另外超级玛丽的技术可不简单,用到了背缓冲,仅绘制变化的tile等等手段提高渲染效率,不用这些技术红白机也跑不动超级玛丽。这些技术虽然都很古老了,但也不是一个编程初学者随随便便可以掌握的
0
回复
close3
LV.5
5
2014-02-22 19:36
@daylight
由上面的例子我们可以看出,除了cpu外,不能忽略显示控制芯片的作用。FC上还有一个关键的芯片--PPURP2C02(兼容机上是UA6538),由这颗芯片来驱动电视机,下为FC原理图:[图片]C使用理光开发的图像控制器(PPU),有2KB的视频内存,调色盘可显示48色及5个灰阶。一个画面可显示64个角色(sprites),角色格式为8x8或8x16个像素,一条扫描线最多显示8个角色,虽然可以超过此限制,但是会造成角色闪烁。背景仅能显示一个卷轴,画面分辨率为256x240,但因为NTSC系统的限制,不能显示顶部及底部的8条扫描线,所以分辨率剩下256x224 C使用理光开发的图像控制器(PPU),有2KB的视频内存,调色盘可显示48色及5个灰阶。一个画面可显示64个角色(sprites),角色格式为8x8或8x16个像素,一条扫描线最多显示8个角色,虽然可以超过此限制,但是会造成角色闪烁。背景仅能显示一个卷轴,画面分辨率为256x240,但因为NTSC系统的限制,不能显示顶部及底部的8条扫描线,所以分辨率剩下256x224我们可以参考可编程6538图像处理器初析不经过cpu运算,通过发命令的方式让色块(游戏人物、障碍物)显示、移动的功能,应该属于硬件渲染吧(说错勿怪),所以这颗芯片还是很给力的。如果仅靠51单片机的IO口直接驱动显示设备,那恐怕就只能得到这样的[图片]这样的[图片]还有这样的[图片]以及这样的[图片]虽说画面还都说的过去,但是总是感觉跟FC的效果在色彩和分辨率上有差距 
指令集不同另外红白机里不止有6502cpu 还有视频处理器生音处理器,噪声发生的好几个硬件,所以才能用很低的频率产生很流畅的画面
0
回复
daylight
LV.4
6
2014-02-22 19:37
@matou
即便是相同频率的处理器,其浮点运算能力和指令集也是不同的,在处理图像和逻辑时表现出来的能力也不同。游戏对处理器的消耗主要是渲染而不是逻辑。另外超级玛丽的技术可不简单,用到了背缓冲,仅绘制变化的tile等等手段提高渲染效率,不用这些技术红白机也跑不动超级玛丽。这些技术虽然都很古老了,但也不是一个编程初学者随随便便可以掌握的
有道理,我想stm32移植过该游戏的应该更有体会。stm32也跑的不是特别流畅。
0
回复
matou
LV.3
7
2014-02-22 19:38
是的,另外,cpu效率可能并不低
0
回复