我刚刚在YouTube上观看了超级马里奥兄弟-1世界的故障,我真的开始想知道那些游戏背后的代码。使用哪种语言?视频游戏机的操作系统是什么?是否有任何关于这个主题的资源网站?(我是90年代的电子游戏玩家,所以我对这些游戏背后的编程特别感兴趣,但如果你愿意,可以把它变成维基,并包含有关视频游戏编程的资源链接)
我刚刚在YouTube上观看了超级马里奥兄弟-1世界的故障,我真的开始想知道那些游戏背后的代码。使用哪种语言?视频游戏机的操作系统是什么?是否有任何关于这个主题的资源网站?(我是90年代的电子游戏玩家,所以我对这些游戏背后的编程特别感兴趣,但如果你愿意,可以把它变成维基,并包含有关视频游戏编程的资源链接)
我曾经为NES模拟器工作过一些时间(我让它解码了一些操作码,但是其他硬件都没有被模拟),我可以分享一些答案。
对于大多数游戏,使用的是汇编语言。20-30年前可用于CPU的优化编译器远不如今天好。要提高性能,你需要使用汇编语言(在PC上也是如此。Doom中的某些部分就是使用汇编语言编写的)。尤其是因为NES CPU运行速度不到2MHz,而且记忆体比今天更昂贵。原始的马里奥存储在大约40k的内存中,其中16k是实际代码,其余是图形和声音资源。
直到32位游戏机时代,任何类型的操作系统或内置实用程序在游戏机上都很少见(Sega CD是16位时代仅有的几个真正拥有BIOS的游戏机之一,而在Game Boy的处理器中烧入了一个小程序,负责在开机时滚动Nintendo的标志)。请参见上面关于尺寸限制的内容,这是主要原因。插入卡带时,卡上的ROM芯片直接连接到CPU的地址总线上。在开机时,CPU会从固定地址读取实际程序起始地址,然后跳转到该位置并开始执行。
至于资源,NES Dev Wiki提供了有关NES硬件的资源以及编程参考。Zophar's Domain还提供了很多游戏机的技术文档和公共领域ROM(我不知道在这个网站上是否应该链接到ZD,请谷歌一下)。
那个视频中大部分的故障都是基于图块的故障,即关卡地图的碰撞检测存在漏洞。所有的关卡都由正方形状的图块组成。如果你注意到马里奥总是在不应该出现的图块之间,那么这就是原因。
我没有对此进行研究,但超级马里奥兄弟和相关的90年代游戏可以作为.nes文件而不是卡带,并且还有开源模拟器可用。
据我所知,这些通常是用C++编写的。我不知道这些nes文件和模拟器的合法性,但它们可以在互联网上找到。你需要使用正确的搜索关键词!