m6502_nz .req r3 // bit 31=N, Z=1 if bits 0-7=0 ;RN定义寄存器名 m6502_rmem .req r4 // readmem_tbl m6502_a .req r5 // bits 0-23=0, 还用于清除在内存中的字节 m6502_x .req r6 // bits 0-23=0 m6502_y .req r7 // bits 0-23=0 cycles .req r8 // also VDIC flags也VDIC标志 m6502_pc .req r9 globalptr .req r10 // =wram_globals* ptr m6502_optbl .req r10 cpu_zpage .req r11 // =CPU_RAM addy .req r12 // keep this at r12 (从头 APCS) //addr :代表8位地址 // equates.s - GCC/GAS version // 定义寄存器别名(注意:GAS 不支持 RN,直接使用寄存器编号) // globalptr, r10 // cpu_zpage 对应 r11(如果需要) // 定义全局数据结构偏移量(相当于 MAP 0, globalptr) // 假设 globalptr 指向一块结构体数据,以下为各字段偏移量 .equ opz, 0 // 操作数地址表指针 .equ readmem_tbl, opz + 4 // 读内存函数表偏移 .equ writemem_tbl, readmem_tbl + 32 // 写内存函数表偏移 .equ memmap_tbl, writemem_tbl + 32 // ROM/RAM 映射表偏移 .equ cpuregs, memmap_tbl + 32 // 保存 6502 寄存器状态起始偏移 .equ m6502_s, cpuregs + 28 // 栈指针 s .equ lastbank, m6502_s + 4 // 最后一次 ROM bank 地址 .equ nexttimeout, lastbank + 4 // 下次超时跳转地址 .equ rombase, nexttimeout + 4 // ROM 起始地址 .equ romnumber, rombase + 4 // ROM 编号 .equ rommask, romnumber + 4 // ROM 掩码(romsize-1) .equ joy0data, rommask + 4 // 手柄 1 数据 .equ joy1data, joy0data + 4 // 手柄 2 数据 .equ clocksh, joy1data + 4 // APU 时钟计数 .equ cpunmif, clocksh + 4 // NMI 中断标志 .equ cpuirqf, cpunmif + 4 // IRQ 中断标志 .equ C, 0x01 // 6502 flags 6502标志 .equ Z, 0x02 .equ I, 0x04 .equ D, 0x08 .equ B, 0x10 // (always 1 except when IRQ pushes it) IRQ外部中断 .equ R, 0x20 // (locked at 1) .equ V, 0x40 .equ N, 0x80 .equ CYC_C, 0x01 // Carry bit 进位 .equ BRANCH, 0x02 // branch instruction encountered 遇到分支指令 .equ CYC_I, 0x04 // IRQ mask .equ CYC_D, 0x08 // Decimal bit 小数位 .equ CYC_V, 0x40 // Overflow bit 溢出位 .equ CYC_MASK, 0xFF // CYCLE-1 ;Mask