【原创】NES第三波:程序局部调试的办法--6502Sim(也可以指令学习)

  我早前在163写过好多教程,但没有这次这么有条理,有进阶性的。

  我早前的确是用6502Sim写程序的。VS Code是2019年年底才发现的。我记得2019年在曾哥的群里听他跟别人聊插件的事。所以插件也是最新做的。当然大家也看见了别的6502插件,但我不推荐。说不定你喜欢CC65,也可以用CC65插件,不过后面的配套办法就要你自己解决了。我想也不难。

  偏了偏了。

  说说什么要留下6502Sim。初学者对指令的领悟很有限。那么我们需要一个直观的Debug,最好的就是这个6502Sim。我们可以拿一部分代码在这上面调试。这比在NES模拟器上面调试,更能看出指令对CPU的作用,对内存的变化。

 

  注意:

  这里要说明一下:使用Debug,一般只调试一小段代码,一般就是十多行到几十行,不需要整编代码放进去。那么就是给cpu指明代码开始的指令是哪一行。我们用“.start”来指定。(不用在fffa写入地址。)(也不要调试中断。凡要测试主程序与中断共同运行的代码都要到模拟器上解决。)

  第一波的教程,教的是直接用6502Sim生成bin。并不是调试,所以第一波用的代码不用.start,而要在fffa地址写入3个地址。

 

  调试的办法

  一、代码:

  先要指定一个起始地址,一般.org $8000或者$C000

  我们还要一个.START start。这个start就是代码开始的地址。

例如

.START start

.ORG $C000
start

  再贴你要调试的代码,

注意代码不能顶格。插个空格或者Tab。标签必须顶格。建议标签不带冒号,(6502Sim上的冒号可有可无)为了VSCode插件兼容。

  有变量的话,也要指定地址呀,分配变量地址那段也要帖,就帖在.START上面就可以。

  不过6502Sim不支持等号。你要用.ORG和.RS配合。前者指定地址,后者指定字节长度。

例子:

 

 其中dbXX是一个变量,用的是单字节。

dwAddr也可以认为是一个(地址)变量,用双字节。

这个例子没什么实际意义,只是为了做例子。

  二、编译

  也可以不保存,为了调试而尔。改好放回源代码中。

  点击(或菜单“仿真-编译”。或 F7)如果没出错,就不会出窗口。如果有出错,则会跳出错窗口。然后出现一个红色三角指明出错所在行。

 

  下一步。

  点击(或菜单“仿真-进入/退出调试模式”。或F6)则显示所有调试窗口,或通过菜单“查看”,可以点开更多窗口。

  然后就可以用单步调试。图中这几个都调试工具,不再多说。

 

  我们最需要的是CPU窗口

 

   还有内存地址窗口

 

   代码窗口还会用黄色箭头指向当前指令。帮助我们理解指令的工作。

   每按一下单步调试,看看代码跑的哪一行,再观察CPU窗口中的变化。连同指令知识一起思考就能明白程序是怎么运行,或者运行结果对不对。

posted on 2020-02-01 19:27  大魔司教教主  阅读(394)  评论(0编辑  收藏  举报

导航