mame/src/emu/cpu/m6502/om65c02.lst

582 lines
8.6 KiB
Plaintext

# m65c02 opcodes
adc_c_aba
TMP = read_pc();
TMP = set_h(TMP, read_pc());
TMP = read(TMP);
do_adc(TMP);
if(P & F_D) {
read_pc_noinc();
set_nz(A);
}
prefetch();
adc_c_abx
TMP = read_pc();
TMP = set_h(TMP, read_pc());
if(page_changing(TMP, X)) {
read(set_l(TMP, TMP+X));
}
TMP += X;
TMP = read(TMP);
do_adc(TMP);
if(P & F_D) {
read_pc_noinc();
set_nz(A);
}
prefetch();
adc_c_aby
TMP = read_pc();
TMP = set_h(TMP, read_pc());
if(page_changing(TMP, Y)) {
read(set_l(TMP, TMP+Y));
}
TMP += Y;
TMP = read(TMP);
do_adc(TMP);
if(P & F_D) {
read_pc_noinc();
set_nz(A);
}
prefetch();
adc_c_idx
TMP2 = read_pc();
read(TMP2);
TMP2 += X;
TMP = read(TMP2 & 0xff);
TMP = set_h(TMP, read((TMP2+1) & 0xff));
do_adc(read(TMP));
if(P & F_D) {
read_pc_noinc();
set_nz(A);
}
prefetch();
adc_c_idy
TMP2 = read_pc();
TMP = read(TMP2);
TMP = set_h(TMP, read(TMP2+1));
if(page_changing(TMP, Y)) {
read(set_l(TMP, TMP+Y));
}
do_adc(read(TMP+Y));
if(P & F_D) {
read_pc_noinc();
set_nz(A);
}
prefetch();
adc_c_imm
TMP = read_pc();
do_adc(TMP);
if(P & F_D) {
read_pc_noinc();
set_nz(A);
}
prefetch();
adc_c_zpg
TMP = read_pc();
TMP = read(TMP);
do_adc(TMP);
if(P & F_D) {
read_pc_noinc();
set_nz(A);
}
prefetch();
adc_c_zpi
TMP2 = read_pc();
TMP = read(TMP2 & 0xff);
TMP = set_h(TMP, read((TMP2+1) & 0xff));
do_adc(read(TMP));
if(P & F_D) {
read_pc_noinc();
set_nz(A);
}
prefetch();
adc_c_zpx
TMP = read_pc();
read(TMP);
TMP = read(UINT8(TMP+X));
do_adc(TMP);
if(P & F_D) {
read_pc_noinc();
set_nz(A);
}
prefetch();
and_zpi
TMP2 = read_pc();
TMP = read(TMP2 & 0xff);
TMP = set_h(TMP, read((TMP2+1) & 0xff));
A &= read(TMP);
set_nz(A);
prefetch();
asl_c_abx
TMP = read_pc();
TMP = set_h(TMP, read_pc());
if(page_changing(TMP, X)) {
read(set_l(TMP, TMP+X));
}
TMP += X;
TMP2 = read(TMP);
write(TMP, TMP2);
TMP2 = do_asl(TMP2);
write(TMP, TMP2);
prefetch();
bbr_zpb
// Access pattern uncertain
TMP = read_pc();
TMP2 = read(TMP);
TMP = read_pc();
read_pc_noinc();
if(!(TMP2 & (1 << (inst_state & 7)))) {
PC += INT8(TMP);
}
prefetch();
bbs_zpb
// Access pattern uncertain
TMP = read_pc();
TMP2 = read(TMP);
TMP = read_pc();
read_pc_noinc();
if(TMP2 & (1 << (inst_state & 7))) {
PC += INT8(TMP);
}
prefetch();
bit_abx
TMP = read_pc();
TMP = set_h(TMP, read_pc());
if(page_changing(TMP, X)) {
read(set_l(TMP, TMP+X));
}
TMP += X;
do_bit(read(TMP));
prefetch();
bit_imm
TMP = read_pc();
if(A & TMP)
P &= ~F_Z;
else
P |= F_Z;
prefetch();
bit_zpx
TMP = read_pc();
read(TMP);
TMP = read(UINT8(TMP+X));
do_bit(TMP);
prefetch();
bra_rel
TMP = read_pc();
read_pc_noinc();
if(page_changing(PC, INT8(TMP))) {
read_direct(set_l(PC, PC+INT8(TMP)));
}
PC += INT8(TMP);
prefetch();
brk_c_imp
if(irq_taken || nmi_state) {
read_pc_noinc();
} else {
read_pc();
}
write(SP, PC >> 8);
dec_SP();
write(SP, PC);
dec_SP();
write(SP, irq_taken || nmi_state ? P & ~F_B : P);
dec_SP();
if(irq_taken && nmi_state) {
PC = read_direct(0xfffa);
PC = set_h(PC, read_direct(0xfffb));
nmi_state = false;
} else {
PC = read_direct(0xfffe);
PC = set_h(PC, read_direct(0xffff));
}
irq_taken = false;
P = (P | F_I) & ~F_D; // Do *not* move after the prefetch
prefetch();
inst_state = -1;
cmp_zpi
TMP2 = read_pc();
TMP = read(TMP2 & 0xff);
TMP = set_h(TMP, read((TMP2+1) & 0xff));
do_cmp(A, read(TMP));
prefetch();
dec_acc
read_pc_noinc();
A--;
set_nz(A);
prefetch();
eor_zpi
TMP2 = read_pc();
TMP = read(TMP2 & 0xff);
TMP = set_h(TMP, read((TMP2+1) & 0xff));
A ^= read(TMP);
set_nz(A);
prefetch();
inc_acc
read_pc_noinc();
A++;
set_nz(A);
prefetch();
jmp_iax
TMP = read_pc();
TMP = set_h(TMP, read_pc());
read(set_l(TMP, TMP+X));
TMP += X;
PC = read(TMP);
PC = set_h(PC, read(TMP+1));
prefetch();
jmp_c_ind
TMP = read_pc();
TMP = set_h(TMP, read_pc());
PC = read(TMP);
read(set_l(TMP, TMP+1));
PC = set_h(PC, read(TMP+1));
prefetch();
lda_zpi
TMP2 = read_pc();
TMP = read(TMP2 & 0xff);
TMP = set_h(TMP, read((TMP2+1) & 0xff));
A = read(TMP);
set_nz(A);
prefetch();
lsr_c_abx
TMP = read_pc();
TMP = set_h(TMP, read_pc());
if(page_changing(TMP, X)) {
read(set_l(TMP, TMP+X));
}
TMP += X;
TMP2 = read(TMP);
write(TMP, TMP2);
TMP2 = do_lsr(TMP2);
write(TMP, TMP2);
prefetch();
nop_c_imp
prefetch();
nop_c_aba
read_pc();
read_pc();
read_pc_noinc();
read_pc_noinc();
read_pc_noinc();
read_pc_noinc();
read_pc_noinc();
prefetch();
nop_c_abx
TMP = read_pc();
TMP = set_h(TMP, read_pc());
read(set_l(TMP, TMP+X));
prefetch();
ora_zpi
TMP2 = read_pc();
TMP = read(TMP2 & 0xff);
TMP = set_h(TMP, read((TMP2+1) & 0xff));
A |= read(TMP);
set_nz(A);
prefetch();
phx_imp
read_pc_noinc();
write(SP, X);
dec_SP();
prefetch();
phy_imp
read_pc_noinc();
write(SP, Y);
dec_SP();
prefetch();
plx_imp
read_pc_noinc();
read(SP);
inc_SP();
X = read(SP);
set_nz(X);
prefetch();
ply_imp
read_pc_noinc();
read(SP);
inc_SP();
Y = read(SP);
set_nz(Y);
prefetch();
rmb_bzp
// Access pattern unknown but probable (built upon inc_zpg)
TMP = read_pc();
TMP2 = read(TMP);
write(TMP, TMP2);
TMP2 &= ~(1 << (inst_state & 7));
write(TMP, TMP2);
prefetch();
rol_c_abx
TMP = read_pc();
TMP = set_h(TMP, read_pc());
if(page_changing(TMP, X)) {
read(set_l(TMP, TMP+X));
}
TMP += X;
TMP2 = read(TMP);
write(TMP, TMP2);
TMP2 = do_rol(TMP2);
write(TMP, TMP2);
prefetch();
ror_c_abx
TMP = read_pc();
TMP = set_h(TMP, read_pc());
if(page_changing(TMP, X)) {
read(set_l(TMP, TMP+X));
}
TMP += X;
TMP2 = read(TMP);
write(TMP, TMP2);
TMP2 = do_ror(TMP2);
write(TMP, TMP2);
prefetch();
sbc_c_aba
TMP = read_pc();
TMP = set_h(TMP, read_pc());
TMP = read(TMP);
do_sbc(TMP);
if(P & F_D) {
read_pc_noinc();
set_nz(A);
}
prefetch();
sbc_c_abx
TMP = read_pc();
TMP = set_h(TMP, read_pc());
if(page_changing(TMP, X)) {
read(set_l(TMP, TMP+X));
}
TMP += X;
TMP = read(TMP);
do_sbc(TMP);
if(P & F_D) {
read_pc_noinc();
set_nz(A);
}
prefetch();
sbc_c_aby
TMP = read_pc();
TMP = set_h(TMP, read_pc());
if(page_changing(TMP, Y)) {
read(set_l(TMP, TMP+Y));
}
TMP += Y;
TMP = read(TMP);
do_sbc(TMP);
if(P & F_D) {
read_pc_noinc();
set_nz(A);
}
prefetch();
sbc_c_idx
TMP2 = read_pc();
read(TMP2);
TMP2 += X;
TMP = read(TMP2 & 0xff);
TMP = set_h(TMP, read((TMP2+1) & 0xff));
do_sbc(read(TMP));
if(P & F_D) {
read_pc_noinc();
set_nz(A);
}
prefetch();
sbc_c_idy
TMP2 = read_pc();
TMP = read(TMP2);
TMP = set_h(TMP, read(TMP2+1));
if(page_changing(TMP, Y)) {
read(set_l(TMP, TMP+Y));
}
do_sbc(read(TMP+Y));
if(P & F_D) {
read_pc_noinc();
set_nz(A);
}
prefetch();
sbc_c_imm
TMP = read_pc();
do_sbc(TMP);
if(P & F_D) {
read_pc_noinc();
set_nz(A);
}
prefetch();
sbc_c_zpg
TMP = read_pc();
TMP = read(TMP);
do_sbc(TMP);
if(P & F_D) {
read_pc_noinc();
set_nz(A);
}
prefetch();
sbc_c_zpi
TMP2 = read_pc();
TMP = read(TMP2 & 0xff);
TMP = set_h(TMP, read((TMP2+1) & 0xff));
do_sbc(read(TMP));
if(P & F_D) {
read_pc_noinc();
set_nz(A);
}
prefetch();
sbc_c_zpx
TMP = read_pc();
read(TMP);
TMP = read(UINT8(TMP+X));
do_sbc(TMP);
if(P & F_D) {
read_pc_noinc();
set_nz(A);
}
prefetch();
smb_bzp
// Access pattern unknown but probable (built upon inc_zpg)
TMP = read_pc();
TMP2 = read(TMP);
write(TMP, TMP2);
TMP2 |= 1 << (inst_state & 7);
write(TMP, TMP2);
prefetch();
sta_zpi
TMP2 = read_pc();
TMP = read(TMP2 & 0xff);
TMP = set_h(TMP, read((TMP2+1) & 0xff));
write(TMP, A);
prefetch();
stp_imp
for(;;) {
eat-all-cycles;
}
stz_aba
TMP = read_pc();
TMP = set_h(TMP, read_pc());
write(TMP, 0x00);
prefetch();
stz_abx
TMP = read_pc();
TMP = set_h(TMP, read_pc());
read(set_l(TMP, TMP+X));
write(TMP+X, 0x00);
prefetch();
stz_zpg
TMP = read_pc();
write(TMP, 0x00);
prefetch();
stz_zpx
TMP = read_pc();
read(TMP);
write(UINT8(TMP+X), 0x00);
prefetch();
trb_aba
TMP = read_pc();
TMP = set_h(TMP, read_pc());
TMP2 = read(TMP);
write(TMP, TMP2);
if(A & TMP2)
P &= ~F_Z;
else
P |= F_Z;
TMP2 &= ~A;
write(TMP, TMP2);
prefetch();
trb_zpg
TMP = read_pc();
TMP2 = read(TMP);
write(TMP, TMP2);
if(A & TMP2)
P &= ~F_Z;
else
P |= F_Z;
TMP2 &= ~A;
write(TMP, TMP2);
prefetch();
tsb_aba
TMP = read_pc();
TMP = set_h(TMP, read_pc());
TMP2 = read(TMP);
write(TMP, TMP2);
if(A & TMP2)
P &= ~F_Z;
else
P |= F_Z;
TMP2 |= A;
write(TMP, TMP2);
prefetch();
tsb_zpg
TMP = read_pc();
TMP2 = read(TMP);
write(TMP, TMP2);
if(A & TMP2)
P &= ~F_Z;
else
P |= F_Z;
TMP2 |= A;
write(TMP, TMP2);
prefetch();
wai_imp
read_pc_noinc();
read_pc_noinc();
while(!nmi_state && !irq_state) {
eat-all-cycles;
}
prefetch();