65 lines
2.2 KiB
ArmAsm
65 lines
2.2 KiB
ArmAsm
|
||
|
||
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
|
||
|
||
|
||
|
||
|