本文github备份地址
STEP2: 6502汇编
写模拟器当然要了解使用到的汇编, 不管是调试模拟器还是模拟器调试都需要.
前面知道了6502汇编用$表示十六进制, 那先讲讲6502机器码, 由一个操作码和0~2个地址码构成, 都是8位的:
/// <summary>
/// StepFC: 6502机器码
/// </summary>
typedef union {
// 用32位保存数据
uint32_t data;
// 4个8位数据
struct {
// 操作码
uint8_t op;
// 地址码1
uint8_t a1;
// 地址码2
uint8_t a2;
// 显示控制
uint8_t ctrl;
};
} sfc_6502_code_t;
其中, 值得注意的是C11才支持的匿名struct/union. 请检查自己编译器支持的情况.
理论上, 6502拥有256条操作码, 这里是所有的指令表: 非官方OpCode
有一些被称为非法或者说未被文档记录的操作码, 但是文档提到
An accurate NES emulator must implement all instructions, not just the official

本文介绍了6502汇编的基础知识,包括操作码、寻址方式和反汇编。重点讲解了各种寻址方式如隐含、立即、绝对、变址等,并给出了6502指令的示例。同时,提到了反汇编的过程,以及如何根据操作码和寻址方式反汇编成汇编代码。作业包括实现所有机器码的反汇编和自研模拟器。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



