【原创】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窗口中的变化。连同指令知识一起思考就能明白程序是怎么运行,或者运行结果对不对。
源代码和工程下载:地址 http://fogota.ysepan.com/
找到 NES Tool Kit文件夹,各章节的相关下载都是在一起。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!