NES编程/简介
一位读者请求扩展此页面以包含更多内容。 您可以通过添加新内容(了解如何操作)或在阅览室寻求帮助。 |
推荐用于NES编程的语言是汇编语言,因为缓慢的8位处理器需要它。处理器类似于早期的英特尔芯片,但缺少某些功能。
6502处理器最多可以寻址64千字节的内存。可以将其视为一个具有65536个“单元格”的连续空间。每个“单元格”或字节可以存储0到255之间的数字。这个空间的前256个字节称为零页,6502可以稍微更快地访问它,并且只需一个字节。接下来的256个字节是堆栈。6502包含3个通用寄存器
A累加器 - 所有数据移动、数学和逻辑运算都通过这里进行。
X索引寄存器 - 用于通用计数和前索引内存偏移。
Y索引寄存器 - 用于通用计数和后索引内存偏移。
所有这些通用寄存器都可以用于任何目的,但上述原因是它们通常被用于的目的。
这些是特殊功能寄存器。
S堆栈指针 - 跟踪堆栈。
P处理器标志/状态 - 保存包含先前指令结果信息的标志。
P程序C计数器 - 跟踪程序正在执行的位置。
有几种方法可以访问内存
- 立即数寻址
在这里,8位数字的精确值写入指令中。不会发生内存访问。要表示立即数,在数字前放置一个#
,例如
LDA #$15 ; load the value 0x15 into the accumulator
; $ - denotes a hexadecimal address
; % - denotes a binary address
; # - denotes an immediate value
; #$ - denotes an immediate hex value
; #% - denotes an immediate binary value
- 直接寻址
16位地址存储在指令中。指定内存地址中的任何内容都将是数字。例如,
LDA #$C4 ; load the value decimal 196 into the accumulator
STA $2001 ; store the accumulator at memory address hex 0x2001
- 零页寻址
与直接寻址类似,此方法访问绝对地址。但是,此方法通过仅在指令中写入低字节来节省一个字节。高字节假定为零。因此,此方法只能用于零页。以下示例显示了使用直接寻址和零页寻址的相同指令。
LDA $00F8 ; Absolute, works but wastes space
LDA $F8 ; Zero Page, saves a byte
还有更多寻址模式,但现在先坚持使用这些。如果您想知道LDA
和STA
是什么,它们只是指令的名称。接下来介绍指令!
指令是告诉处理器执行某些操作的特定命令。这可能是将某些内容移动到内存中,添加一些数字,跳转到不同的位置等。总共有56条指令。接下来将描述最常用的指令。
您将学习的第一条指令是LDA
。它代表LoaD A,它将数据复制到寄存器A中。数据可以是数字、地址或索引地址(有关此寻址模式的更多信息,请参见下一教程)。看看您是否能理解这个:LDX
。如果您猜到是LoaD X,那么您是对的。我想我不需要解释LDY
是什么了。
STA
,第二常见的指令,代表STore A,它将A的值存储到内存中。STA $2000
会将A的当前值存储到内存地址$2000
中。它的对应指令包括STY
和STX
。