fc吧 关注:164,483贴子:2,043,459
  • 34回复贴,共1

6502汇编技巧

只看楼主收藏回复

本人是06后的6502汇编萌新,只在Apple II平台写过几个简单的游戏,目前在用NESASM和ASM6学习NES游戏编写。由于对新手来说我觉得这些技巧挺有用,就发出来了,如有错误请留言评论。
第一:常用变量与指针尽量放在零页中
我们都知道零页寻址的访存指令相对于绝对(直接)寻址节省了一个字节大小,这样一来如果我们使用频率较高的数据时可以直接用零页的地址即可。其中零页寻址中指令引用的是地址低八位,高八位永远为00(这个应该学过的都知道)并且访存指令的间接索引寻址只能访问零页。这只是对FC等另一空区大的机器有用途,如Apple II之类的计算机零页一般都被系统占了,只留下了几个给用户,可见零页的意义有多大。第二:巧用分支指令
有时候会用JMP来循环执行,而JMP的操作数是两字节的地址。分支指令则是一个,作偏移量。所以有时候可以用分支指令来代替JMP,比如用与第一个分支相反条件的分支来代替跳转指令(前提是偏移量不大于255)第三:终止符
在利用间接寻址循环遍历读取数据输出屏幕的时候,有些情况下不必用计数器,而是在后面写上一个特定的数值,作为本次循环的终止符。例如,在一群数据块的后面加上一个$00,当运行循环遍历的过程中读取到了$00,执行BNE,不符合条件,跳出循环。


IP属地:广东来自Android客户端1楼2024-02-01 00:16回复
    曾经我也从6502开始学习,后面又学了gameboy的z80,成功破获一款游戏gb大战争,使得只有最后一关才能用的大坦克和原子弹,任意一关都能用


    IP属地:广西来自Android客户端2楼2024-02-01 08:23
    回复
      学习,标记一下


      IP属地:江苏来自Android客户端3楼2024-02-01 10:23
      回复
        06后?还是60后?如果是06后才17岁呀,年少有为!


        IP属地:北京4楼2024-02-01 11:37
        收起回复
          我觉得吧现在游戏引擎成熟了,内存也不再像以前一样贵重,但凡有一点能省存的也要用上去,也就出现了诸如绘制缓冲区这种东西。现在估计这些算法可能没什么人知道了。


          IP属地:广东来自Android客户端7楼2024-02-03 11:37
          收起回复
            先写个 fc模拟器,所有细节都通了


            IP属地:上海8楼2024-05-29 18:54
            收起回复
              前几天看到一个新闻,说有个大佬写了一个.NET的C# 程序可以编译为6502指令,并且可以在FC模拟器上运行helloworld。在GH上开源了,项目叫dotnes,现在有几百个星了


              IP属地:北京9楼2024-05-31 20:33
              收起回复