【SMB源码解析系列】——003.SMB游戏基本框架

前面有了解到RESET中断相关代码,结尾处通过一句jmp进入了无限循环,之后CPU将会在每一帧PUU进入VBlank状态时,接收NMI中断信号,

跳转至NMI代码处继续执行,直到遇见RTI指令时又返回Start结尾处继续循环,或者通过复位按钮,再次触发RESET中断,从头执行Start的代码。

这是一个比较基本的CPU运行流程,SMB在NMI中断程序中维持了整个游戏系统的运行。

其中就包括OperModeExecutionTree——场景控制例程树程序,例程树算是我对JumpEngine之后定义的一系列函数的称呼吧,其实从源码中直译应该是操作模式执行树,如果想到合适的再改。

它根据OperMode中存储的值来选择进入不同的场景模块(实现原理参看001的JumpEngine)。

SMB程序一开始会进入标题画面场景,我们能够看到游戏标题,游戏人物选择菜单等内容,如果持续一段时间没有操作,游戏还会自动进入演示demo状态自动控制游戏角色运动起来。

开始游戏之后便进入了游戏主场景,在这个场景中我们便可以通过手柄控制游戏人物在地图中前进了。

胜利场景和失败场景应该就是通关时,游戏角色自动走入水管的状态控制,以及死亡时自动跳起并落入地板之下的状态,这个有待后续验证。

其实不论什么场景,最终都需要将画面显示到屏幕中,也就是要向VRAM区域的命名表,属性表,调色板等写入信息。

关于画面元素的渲染,则是靠ScreenRoutines这个例程树实现的。

之后我们先了解下AreaParserTaskControl这个任务控制程序的代码逻辑。

在时间的巨兽面前,我们只有卑微与无奈的成长
原文地址:https://www.cnblogs.com/rebeldancer/p/11678593.html