MAME.Core/MAME.Core/cpu/m6800/M6800op.cs
2024-08-28 13:01:43 +08:00

1890 lines
46 KiB
C#

using MAME.Core;
namespace cpu.m6800
{
public partial class M6800
{
protected void illegal()
{
}
protected void trap()
{
//logerror("M6808: illegal opcode: address %04X, op %02X\n",PC,(int) M_RDOP_ARG(PC)&0xFF);
TAKE_TRAP();
}
protected void nop()
{
}
protected void lsrd()
{
ushort t;
CLR_NZC();
t = D.LowWord;
cc |= (byte)(t & 0x0001);
t >>= 1;
SET_Z16(t);
D.LowWord = t;
}
protected void asld()
{
int r;
ushort t;
t = D.LowWord;
r = t << 1;
CLR_NZVC();
SET_FLAGS16((uint)t, (uint)t, (uint)r);
D.LowWord = (ushort)r;
}
protected void tap()
{
cc = D.HighByte;
ONE_MORE_INSN();
CHECK_IRQ_LINES();
}
protected void tpa()
{
D.HighByte = cc;
}
protected void inx()
{
++X.LowWord;
CLR_Z();
SET_Z16(X.LowWord);
}
protected void dex()
{
--X.LowWord;
CLR_Z();
SET_Z16(X.LowWord);
}
protected void clv()
{
CLV();
}
protected void sev()
{
SEV();
}
protected void clc()
{
CLC();
}
protected void sec()
{
SEC();
}
protected void cli()
{
CLI();
ONE_MORE_INSN();
CHECK_IRQ_LINES();
}
protected void sei()
{
SEI();
ONE_MORE_INSN();
CHECK_IRQ_LINES();
}
protected void sba()
{
ushort t;
t = (ushort)(D.HighByte - D.LowByte);
CLR_NZVC();
SET_FLAGS8(D.HighByte, D.LowByte, t);
D.HighByte = (byte)t;
}
protected void cba()
{
ushort t;
t = (ushort)(D.HighByte - D.LowByte);
CLR_NZVC();
SET_FLAGS8(D.HighByte, D.LowByte, t);
}
protected void undoc1()
{
X.LowWord += ReadMemory((ushort)(S.LowWord + 1));
}
protected void undoc2()
{
X.LowWord += ReadMemory((ushort)(S.LowWord + 1));
}
protected void tab()
{
D.LowByte = D.HighByte;
CLR_NZV();
SET_NZ8(D.LowByte);
}
protected void tba()
{
D.HighByte = D.LowByte;
CLR_NZV();
SET_NZ8(D.HighByte);
}
protected void xgdx()
{
ushort t = X.LowWord;
X.LowWord = D.LowWord;
D.LowWord = t;
}
protected void daa()
{
byte msn, lsn;
ushort t, cf = 0;
msn = (byte)(D.HighByte & 0xf0);
lsn = (byte)(D.HighByte & 0x0f);
if (lsn > 0x09 || (cc & 0x20) != 0)
cf |= 0x06;
if (msn > 0x80 && lsn > 0x09)
cf |= 0x60;
if (msn > 0x90 || (cc & 0x01) != 0)
cf |= 0x60;
t = (ushort)(cf + D.HighByte);
CLR_NZV();
SET_NZ8((byte)t);
SET_C8(t);
D.HighByte = (byte)t;
}
protected void slp()
{
wai_state |= M6800_SLP;
EAT_CYCLES();
}
protected void aba()
{
ushort t;
t = (ushort)(D.HighByte + D.LowByte);
CLR_HNZVC();
SET_FLAGS8(D.HighByte, D.LowByte, t);
SET_H(D.HighByte, D.LowByte, t);
D.HighByte = (byte)t;
}
protected void bra()
{
byte t;
t = IMMBYTE();
PC.LowWord += (ushort)SIGNED(t);
if (t == 0xfe)
EAT_CYCLES();
}
protected void brn()
{
byte t;
t = IMMBYTE();
}
protected void bhi()
{
BRANCH((cc & 0x05) == 0);
}
protected void bls()
{
BRANCH((cc & 0x05) != 0);
}
protected void bcc()
{
BRANCH((cc & 0x01) == 0);
}
protected void bcs()
{
BRANCH((cc & 0x01) != 0);
}
protected void bne()
{
BRANCH((cc & 0x04) == 0);
}
protected void beq()
{
BRANCH((cc & 0x04) != 0);
}
protected void bvc()
{
BRANCH((cc & 0x02) == 0);
}
protected void bvs()
{
BRANCH((cc & 0x02) != 0);
}
protected void bpl()
{
BRANCH((cc & 0x08) == 0);
}
protected void bmi()
{
BRANCH((cc & 0x08) != 0);
}
protected void bge()
{
BRANCH(NXORV() == 0);
}
protected void blt()
{
BRANCH(NXORV() != 0);
}
protected void bgt()
{
BRANCH(!(NXORV() != 0 || (cc & 0x04) != 0));
}
protected void ble()
{
BRANCH(NXORV() != 0 || (cc & 0x04) != 0);
}
protected void tsx()
{
X.LowWord = (ushort)(S.LowWord + 1);
}
protected void ins()
{
++S.LowWord;
}
protected void pula()
{
D.HighByte = PULLBYTE();
}
protected void pulb()
{
D.LowByte = PULLBYTE();
}
protected void des()
{
--S.LowWord;
}
protected void txs()
{
S.LowWord = (ushort)(X.LowWord - 1);
}
protected void psha()
{
PUSHBYTE(D.HighByte);
}
protected void pshb()
{
PUSHBYTE(D.LowByte);
}
protected void pulx()
{
X = PULLWORD();
}
protected void rts()
{
PC = PULLWORD();
//CHANGE_PC();
}
protected void abx()
{
X.LowWord += D.LowByte;
}
protected void rti()
{
cc = PULLBYTE();
D.LowByte = PULLBYTE();
D.HighByte = PULLBYTE();
X = PULLWORD();
PC = PULLWORD();
//CHANGE_PC();
CHECK_IRQ_LINES();
}
protected void pshx()
{
PUSHWORD(X);
}
protected void mul()
{
ushort t;
t = (ushort)(D.HighByte * D.LowByte);
CLR_C();
if ((t & 0x80) != 0)
SEC();
D.LowWord = t;
}
protected void wai()
{
wai_state |= M6800_WAI;
PUSHWORD(PC);
PUSHWORD(X);
PUSHBYTE(D.HighByte);
PUSHBYTE(D.LowByte);
PUSHBYTE(cc);
CHECK_IRQ_LINES();
if ((wai_state & M6800_WAI) != 0)
EAT_CYCLES();
}
protected void swi()
{
PUSHWORD(PC);
PUSHWORD(X);
PUSHBYTE(D.HighByte);
PUSHBYTE(D.LowByte);
PUSHBYTE(cc);
SEI();
PC.d = RM16(0xfffa);
//CHANGE_PC();
}
protected void nega()
{
ushort r;
r = (ushort)(-D.HighByte);
CLR_NZVC();
SET_FLAGS8(0, D.HighByte, r);
D.HighByte = (byte)r;
}
protected void coma()
{
D.HighByte = (byte)(~D.HighByte);
CLR_NZV();
SET_NZ8(D.HighByte);
SEC();
}
protected void lsra()
{
CLR_NZC();
cc |= (byte)(D.HighByte & 0x01);
D.HighByte >>= 1;
SET_Z8(D.HighByte);
}
protected void rora()
{
byte r;
r = (byte)((cc & 0x01) << 7);
CLR_NZC();
cc |= (byte)(D.HighByte & 0x01);
r |= (byte)(D.HighByte >> 1);
SET_NZ8(r);
D.HighByte = r;
}
protected void asra()
{
CLR_NZC();
cc |= (byte)(D.HighByte & 0x01);
D.HighByte >>= 1;
D.HighByte |= (byte)((D.HighByte & 0x40) << 1);
SET_NZ8(D.HighByte);
}
protected void asla()
{
ushort r;
r = (ushort)(D.HighByte << 1);
CLR_NZVC();
SET_FLAGS8(D.HighByte, D.HighByte, r);
D.HighByte = (byte)r;
}
protected void rola()
{
ushort t, r;
t = D.HighByte;
r = (ushort)(cc & 0x01);
r |= (ushort)(t << 1);
CLR_NZVC();
SET_FLAGS8(t, t, r);
D.HighByte = (byte)r;
}
protected void deca()
{
--D.HighByte;
CLR_NZV();
SET_FLAGS8D(D.HighByte);
}
protected void inca()
{
++D.HighByte;
CLR_NZV();
SET_FLAGS8I(D.HighByte);
}
protected void tsta()
{
CLR_NZVC();
SET_NZ8(D.HighByte);
}
protected void clra()
{
D.HighByte = 0;
CLR_NZVC();
SEZ();
}
protected void negb()
{
ushort r;
r = (ushort)(-D.LowByte);
CLR_NZVC();
SET_FLAGS8(0, D.LowByte, r);
D.LowByte = (byte)r;
}
protected void comb()
{
D.LowByte = (byte)(~D.LowByte);
CLR_NZV();
SET_NZ8(D.LowByte);
SEC();
}
protected void lsrb()
{
CLR_NZC();
cc |= (byte)(D.LowByte & 0x01);
D.LowByte >>= 1;
SET_Z8(D.LowByte);
}
protected void rorb()
{
byte r;
r = (byte)((cc & 0x01) << 7);
CLR_NZC();
cc |= (byte)(D.LowByte & 0x01);
r |= (byte)(D.LowByte >> 1);
SET_NZ8(r);
D.LowByte = r;
}
protected void asrb()
{
CLR_NZC();
cc |= (byte)(D.LowByte & 0x01);
D.LowByte >>= 1;
D.LowByte |= (byte)((D.LowByte & 0x40) << 1);
SET_NZ8(D.LowByte);
}
protected void aslb()
{
ushort r;
r = (ushort)(D.LowByte << 1);
CLR_NZVC();
SET_FLAGS8(D.LowByte, D.LowByte, r);
D.LowByte = (byte)r;
}
protected void rolb()
{
ushort t, r;
t = D.LowByte;
r = (ushort)(cc & 0x01);
r |= (ushort)(t << 1);
CLR_NZVC();
SET_FLAGS8(t, t, r);
D.LowByte = (byte)r;
}
protected void decb()
{
--D.LowByte;
CLR_NZV();
SET_FLAGS8D(D.LowByte);
}
protected void incb()
{
++D.LowByte;
CLR_NZV();
SET_FLAGS8I(D.LowByte);
}
protected void tstb()
{
CLR_NZVC();
SET_NZ8(D.LowByte);
}
protected void clrb()
{
D.LowByte = 0;
CLR_NZVC();
SEZ();
}
protected void neg_ix()
{
ushort r, t;
t = (ushort)IDXBYTE();
r = (ushort)(-t);
CLR_NZVC();
SET_FLAGS8(0, t, r);
WriteMemory(EA.LowWord, (byte)r);
}
protected void aim_ix()
{
byte t, r;
t = IMMBYTE();
r = IDXBYTE();
r &= t;
CLR_NZV();
SET_NZ8(r);
WriteMemory(EA.LowWord, r);
}
protected void oim_ix()
{
byte t, r;
t = IMMBYTE();
r = IDXBYTE();
r |= t;
CLR_NZV();
SET_NZ8(r);
WriteMemory(EA.LowWord, r);
}
protected void com_ix()
{
byte t;
t = IDXBYTE();
t = (byte)(~t);
CLR_NZV();
SET_NZ8(t);
SEC();
WriteMemory(EA.LowWord, t);
}
protected void lsr_ix()
{
byte t;
t = IDXBYTE();
CLR_NZC();
cc |= (byte)(t & 0x01);
t >>= 1;
SET_Z8(t);
WriteMemory(EA.LowWord, t);
}
protected void eim_ix()
{
byte t, r;
t = IMMBYTE();
r = IDXBYTE();
r ^= t;
CLR_NZV();
SET_NZ8(r);
WriteMemory(EA.LowWord, r);
}
protected void ror_ix()
{
byte t, r;
t = IDXBYTE();
r = (byte)((cc & 0x01) << 7);
CLR_NZC();
cc |= (byte)(t & 0x01);
r |= (byte)(t >> 1);
SET_NZ8(r);
WriteMemory(EA.LowWord, r);
}
protected void asr_ix()
{
byte t;
t = IDXBYTE();
CLR_NZC();
cc |= (byte)(t & 0x01);
t >>= 1;
t |= (byte)((t & 0x40) << 1);
SET_NZ8(t);
WriteMemory(EA.LowWord, t);
}
protected void asl_ix()
{
ushort t, r;
t = IDXBYTE();
r = (ushort)(t << 1);
CLR_NZVC();
SET_FLAGS8(t, t, r);
WriteMemory(EA.LowWord, (byte)r);
}
protected void rol_ix()
{
ushort t, r;
t = IDXBYTE();
r = (ushort)(cc & 0x01);
r |= (ushort)(t << 1);
CLR_NZVC();
SET_FLAGS8(t, t, r);
WriteMemory(EA.LowWord, (byte)r);
}
protected void dec_ix()
{
byte t;
t = IDXBYTE();
--t;
CLR_NZV();
SET_FLAGS8D(t);
WriteMemory(EA.LowWord, t);
}
protected void tim_ix()
{
byte t, r;
t = IMMBYTE();
r = IDXBYTE();
r &= t;
CLR_NZV();
SET_NZ8(r);
}
protected void inc_ix()
{
byte t;
t = IDXBYTE();
++t;
CLR_NZV();
SET_FLAGS8I(t);
WriteMemory(EA.LowWord, t);
}
protected void tst_ix()
{
byte t;
t = IDXBYTE();
CLR_NZVC();
SET_NZ8(t);
}
protected void jmp_ix()
{
INDEXED();
PC.LowWord = EA.LowWord;
//CHANGE_PC();
}
protected void clr_ix()
{
INDEXED();
WriteMemory(EA.LowWord, 0);
CLR_NZVC();
SEZ();
}
protected void neg_ex()
{
ushort r, t;
t = EXTBYTE();
r = (ushort)(-t);
CLR_NZVC();
SET_FLAGS8(0, t, r);
WriteMemory(EA.LowWord, (byte)r);
}
protected void aim_di()
{
byte t, r;
t = IMMBYTE();
r = DIRBYTE();
r &= t;
CLR_NZV();
SET_NZ8(r);
WriteMemory(EA.LowWord, r);
}
protected void oim_di()
{
byte t, r;
t = IMMBYTE();
r = DIRBYTE();
r |= t;
CLR_NZV();
SET_NZ8(r);
WriteMemory(EA.LowWord, r);
}
protected void com_ex()
{
byte t;
t = EXTBYTE();
t = (byte)(~t);
CLR_NZV();
SET_NZ8(t);
SEC();
WriteMemory(EA.LowWord, t);
}
protected void lsr_ex()
{
byte t;
t = EXTBYTE();
CLR_NZC();
cc |= (byte)(t & 0x01);
t >>= 1;
SET_Z8(t);
WriteMemory(EA.LowWord, t);
}
protected void eim_di()
{
byte t, r;
t = IMMBYTE();
r = DIRBYTE();
r ^= t;
CLR_NZV();
SET_NZ8(r);
WriteMemory(EA.LowWord, r);
}
protected void ror_ex()
{
byte t, r;
t = EXTBYTE();
r = (byte)((cc & 0x01) << 7);
CLR_NZC();
cc |= (byte)(t & 0x01);
r |= (byte)(t >> 1);
SET_NZ8(r);
WriteMemory(EA.LowWord, r);
}
protected void asr_ex()
{
byte t;
t = EXTBYTE();
CLR_NZC();
cc |= (byte)(t & 0x01);
t >>= 1;
t |= (byte)((t & 0x40) << 1);
SET_NZ8(t);
WriteMemory(EA.LowWord, t);
}
protected void asl_ex()
{
ushort t, r;
t = EXTBYTE();
r = (ushort)(t << 1);
CLR_NZVC();
SET_FLAGS8(t, t, r);
WriteMemory(EA.LowWord, (byte)r);
}
protected void rol_ex()
{
ushort t, r;
t = EXTBYTE();
r = (ushort)(cc & 0x01);
r |= (ushort)(t << 1);
CLR_NZVC();
SET_FLAGS8(t, t, r);
WriteMemory(EA.LowWord, (byte)r);
}
protected void dec_ex()
{
byte t;
t = EXTBYTE();
--t;
CLR_NZV();
SET_FLAGS8D(t);
WriteMemory(EA.LowWord, (byte)t);
}
protected void tim_di()
{
byte t, r;
t = IMMBYTE();
r = DIRBYTE();
r &= t;
CLR_NZV();
SET_NZ8(r);
}
protected void inc_ex()
{
byte t;
t = EXTBYTE();
++t;
CLR_NZV();
SET_FLAGS8I(t);
WriteMemory(EA.LowWord, t);
}
protected void tst_ex()
{
byte t;
t = EXTBYTE();
CLR_NZVC();
SET_NZ8(t);
}
protected void jmp_ex()
{
EXTENDED();
PC.LowWord = EA.LowWord;
//CHANGE_PC();
}
protected void clr_ex()
{
EXTENDED();
WriteMemory(EA.LowWord, 0);
CLR_NZVC();
SEZ();
}
protected void suba_im()
{
ushort t, r;
t = IMMBYTE();
r = (ushort)(D.HighByte - t);
CLR_NZVC();
SET_FLAGS8(D.HighByte, t, r);
D.HighByte = (byte)r;
}
protected void cmpa_im()
{
ushort t, r;
t = IMMBYTE();
r = (ushort)(D.HighByte - t);
CLR_NZVC();
SET_FLAGS8(D.HighByte, t, r);
}
protected void sbca_im()
{
ushort t, r;
t = IMMBYTE();
r = (ushort)(D.HighByte - t - (cc & 0x01));
CLR_NZVC();
SET_FLAGS8(D.HighByte, t, r);
D.HighByte = (byte)r;
}
protected void subd_im()
{
uint r, d;
Register b;
b = IMMWORD();
d = D.LowWord;
r = d - b.d;
CLR_NZVC();
SET_FLAGS16(d, b.d, r);
D.LowWord = (ushort)r;
}
protected void anda_im()
{
byte t;
t = IMMBYTE();
D.HighByte &= t;
CLR_NZV();
SET_NZ8(D.HighByte);
}
protected void bita_im()
{
byte t, r;
t = IMMBYTE();
r = (byte)(D.HighByte & t);
CLR_NZV();
SET_NZ8(r);
}
protected void lda_im()
{
D.HighByte = IMMBYTE();
CLR_NZV();
SET_NZ8(D.HighByte);
}
protected void sta_im()
{
CLR_NZV();
SET_NZ8(D.HighByte);
IMM8();
WriteMemory(EA.LowWord, D.HighByte);
}
protected void eora_im()
{
byte t;
t = IMMBYTE();
D.HighByte ^= t;
CLR_NZV();
SET_NZ8(D.HighByte);
}
protected void adca_im()
{
ushort t, r;
t = IMMBYTE();
r = (ushort)(D.HighByte + t + (cc & 0x01));
CLR_HNZVC();
SET_FLAGS8(D.HighByte, t, r);
SET_H(D.HighByte, t, r);
D.HighByte = (byte)r;
}
protected void ora_im()
{
byte t;
t = IMMBYTE();
D.HighByte |= t;
CLR_NZV();
SET_NZ8(D.HighByte);
}
protected void adda_im()
{
ushort t, r;
t = IMMBYTE();
r = (ushort)(D.HighByte + t);
CLR_HNZVC();
SET_FLAGS8(D.HighByte, t, r);
SET_H(D.HighByte, t, r);
D.HighByte = (byte)r;
}
protected void cmpx_im()
{
uint r, d;
Register b;
b = IMMWORD();
d = X.LowWord;
r = d - b.d;
CLR_NZV();
SET_NZ16((ushort)r);
SET_V16(d, b.d, r);
}
protected void cpx_im()
{
uint r, d;
Register b;
b = IMMWORD();
d = X.LowWord;
r = d - b.d;
CLR_NZVC();
SET_FLAGS16(d, b.d, r);
}
protected void bsr()
{
byte t;
t = IMMBYTE();
PUSHWORD(PC);
PC.LowWord += (ushort)SIGNED(t);
//CHANGE_PC();
}
protected void lds_im()
{
S = IMMWORD();
CLR_NZV();
SET_NZ16(S.LowWord);
}
protected void sts_im()
{
CLR_NZV();
SET_NZ16(S.LowWord);
IMM16();
WM16(EA.LowWord, S);
}
protected void suba_di()
{
ushort t, r;
t = DIRBYTE();
r = (ushort)(D.HighByte - t);
CLR_NZVC();
SET_FLAGS8(D.HighByte, t, r);
D.HighByte = (byte)r;
}
protected void cmpa_di()
{
ushort t, r;
t = DIRBYTE();
r = (ushort)(D.HighByte - t);
CLR_NZVC();
SET_FLAGS8(D.HighByte, t, r);
}
protected void sbca_di()
{
ushort t, r;
t = DIRBYTE();
r = (ushort)(D.HighByte - t - (cc & 0x01));
CLR_NZVC();
SET_FLAGS8(D.HighByte, t, r);
D.HighByte = (byte)r;
}
protected void subd_di()
{
uint r, d;
Register b;
b = DIRWORD();
d = D.LowWord;
r = d - b.d;
CLR_NZVC();
SET_FLAGS16(d, b.d, r);
D.LowWord = (ushort)r;
}
protected void anda_di()
{
byte t;
t = DIRBYTE();
D.HighByte &= t;
CLR_NZV();
SET_NZ8(D.HighByte);
}
protected void bita_di()
{
byte t, r;
t = DIRBYTE();
r = (byte)(D.HighByte & t);
CLR_NZV();
SET_NZ8(r);
}
protected void lda_di()
{
D.HighByte = DIRBYTE();
CLR_NZV();
SET_NZ8(D.HighByte);
}
protected void sta_di()
{
CLR_NZV();
SET_NZ8(D.HighByte);
DIRECT();
WriteMemory(EA.LowWord, D.HighByte);
}
protected void eora_di()
{
byte t;
t = DIRBYTE();
D.HighByte ^= t;
CLR_NZV();
SET_NZ8(D.HighByte);
}
protected void adca_di()
{
ushort t, r;
t = DIRBYTE();
r = (ushort)(D.HighByte + t + (cc & 0x01));
CLR_HNZVC();
SET_FLAGS8(D.HighByte, t, r);
SET_H(D.HighByte, t, r);
D.HighByte = (byte)r;
}
protected void ora_di()
{
byte t;
t = DIRBYTE();
D.HighByte |= t;
CLR_NZV();
SET_NZ8(D.HighByte);
}
protected void adda_di()
{
ushort t, r;
t = DIRBYTE();
r = (ushort)(D.HighByte + t);
CLR_HNZVC();
SET_FLAGS8(D.HighByte, t, r);
SET_H(D.HighByte, t, r);
D.HighByte = (byte)r;
}
protected void cmpx_di()
{
uint r, d;
Register b;
b = DIRWORD();
d = X.LowWord;
r = d - b.d;
CLR_NZV();
SET_NZ16((ushort)r);
SET_V16(d, b.d, r);
}
protected void cpx_di()
{
uint r, d;
Register b;
b = DIRWORD();
d = X.LowWord;
r = d - b.d;
CLR_NZVC();
SET_FLAGS16(d, b.d, r);
}
protected void jsr_di()
{
DIRECT();
PUSHWORD(PC);
PC.LowWord = EA.LowWord;
//CHANGE_PC();
}
protected void lds_di()
{
S = DIRWORD();
CLR_NZV();
SET_NZ16(S.LowWord);
}
protected void sts_di()
{
CLR_NZV();
SET_NZ16(S.LowWord);
DIRECT();
WM16(EA.LowWord, S);
}
protected void suba_ix()
{
ushort t, r;
t = IDXBYTE();
r = (ushort)(D.HighByte - t);
CLR_NZVC();
SET_FLAGS8(D.HighByte, t, r);
D.HighByte = (byte)r;
}
protected void cmpa_ix()
{
ushort t, r;
t = IDXBYTE();
r = (ushort)(D.HighByte - t);
CLR_NZVC();
SET_FLAGS8(D.HighByte, t, r);
}
protected void sbca_ix()
{
ushort t, r;
t = IDXBYTE();
r = (ushort)(D.HighByte - t - (cc & 0x01));
CLR_NZVC();
SET_FLAGS8(D.HighByte, t, r);
D.HighByte = (byte)r;
}
protected void subd_ix()
{
uint r, d;
Register b;
b = IDXWORD();
d = D.LowWord;
r = d - b.d;
CLR_NZVC();
SET_FLAGS16(d, b.d, r);
D.LowWord = (ushort)r;
}
protected void anda_ix()
{
byte t;
t = IDXBYTE();
D.HighByte &= t;
CLR_NZV();
SET_NZ8(D.HighByte);
}
protected void bita_ix()
{
byte t, r;
t = IDXBYTE();
r = (byte)(D.HighByte & t);
CLR_NZV();
SET_NZ8(r);
}
protected void lda_ix()
{
D.HighByte = IDXBYTE();
CLR_NZV();
SET_NZ8(D.HighByte);
}
protected void sta_ix()
{
CLR_NZV();
SET_NZ8(D.HighByte);
INDEXED();
WriteMemory(EA.LowWord, D.HighByte);
}
protected void eora_ix()
{
byte t;
t = IDXBYTE();
D.HighByte ^= t;
CLR_NZV();
SET_NZ8(D.HighByte);
}
protected void adca_ix()
{
ushort t, r;
t = IDXBYTE();
r = (ushort)(D.HighByte + t + (cc & 0x01));
CLR_HNZVC();
SET_FLAGS8(D.HighByte, t, r);
SET_H(D.HighByte, t, r);
D.HighByte = (byte)r;
}
protected void ora_ix()
{
byte t;
t = IDXBYTE();
D.HighByte |= t;
CLR_NZV();
SET_NZ8(D.HighByte);
}
protected void adda_ix()
{
ushort t, r;
t = IDXBYTE();
r = (ushort)(D.HighByte + t);
CLR_HNZVC();
SET_FLAGS8(D.HighByte, t, r);
SET_H(D.HighByte, t, r);
D.HighByte = (byte)r;
}
protected void cmpx_ix()
{
uint r, d;
Register b;
b = IDXWORD();
d = X.LowWord;
r = d - b.d;
CLR_NZV();
SET_NZ16((ushort)r);
SET_V16(d, b.d, r);
}
protected void cpx_ix()
{
uint r, d;
Register b;
b = IDXWORD();
d = X.LowWord;
r = d - b.d;
CLR_NZVC();
SET_FLAGS16(d, b.d, r);
}
protected void jsr_ix()
{
INDEXED();
PUSHWORD(PC);
PC.LowWord = EA.LowWord;
//CHANGE_PC();
}
protected void lds_ix()
{
S = IDXWORD();
CLR_NZV();
SET_NZ16(S.LowWord);
}
protected void sts_ix()
{
CLR_NZV();
SET_NZ16(S.LowWord);
INDEXED();
WM16(EA.LowWord, S);
}
protected void suba_ex()
{
ushort t, r;
t = EXTBYTE();
r = (ushort)(D.HighByte - t);
CLR_NZVC();
SET_FLAGS8(D.HighByte, t, r);
D.HighByte = (byte)r;
}
protected void cmpa_ex()
{
ushort t, r;
t = EXTBYTE();
r = (ushort)(D.HighByte - t);
CLR_NZVC();
SET_FLAGS8(D.HighByte, t, r);
}
protected void sbca_ex()
{
ushort t, r;
t = EXTBYTE();
r = (ushort)(D.HighByte - t - (cc & 0x01));
CLR_NZVC();
SET_FLAGS8(D.HighByte, t, r);
D.HighByte = (byte)r;
}
protected void subd_ex()
{
uint r, d;
Register b;
b = EXTWORD();
d = D.LowWord;
r = d - b.d;
CLR_NZVC();
SET_FLAGS16(d, b.d, r);
D.LowWord = (ushort)r;
}
protected void anda_ex()
{
byte t;
t = EXTBYTE();
D.HighByte &= t;
CLR_NZV();
SET_NZ8(D.HighByte);
}
protected void bita_ex()
{
byte t, r;
t = EXTBYTE();
r = (byte)(D.HighByte & t);
CLR_NZV();
SET_NZ8(r);
}
protected void lda_ex()
{
D.HighByte = EXTBYTE();
CLR_NZV();
SET_NZ8(D.HighByte);
}
protected void sta_ex()
{
CLR_NZV();
SET_NZ8(D.HighByte);
EXTENDED();
WriteMemory(EA.LowWord, D.HighByte);
}
protected void eora_ex()
{
byte t;
t = EXTBYTE();
D.HighByte ^= t;
CLR_NZV();
SET_NZ8(D.HighByte);
}
protected void adca_ex()
{
ushort t, r;
t = EXTBYTE();
r = (ushort)(D.HighByte + t + (cc & 0x01));
CLR_HNZVC();
SET_FLAGS8(D.HighByte, t, r); SET_H(D.HighByte, t, r);
D.HighByte = (byte)r;
}
protected void ora_ex()
{
byte t;
t = EXTBYTE();
D.HighByte |= t;
CLR_NZV();
SET_NZ8(D.HighByte);
}
protected void adda_ex()
{
ushort t, r;
t = EXTBYTE();
r = (ushort)(D.HighByte + t);
CLR_HNZVC();
SET_FLAGS8(D.HighByte, t, r); SET_H(D.HighByte, t, r);
D.HighByte = (byte)r;
}
protected void cmpx_ex()
{
uint r, d;
Register b;
b = EXTWORD();
d = X.LowWord;
r = d - b.d;
CLR_NZV();
SET_NZ16((ushort)r);
SET_V16(d, b.d, r);
}
protected void cpx_ex()
{
uint r, d;
Register b;
b = EXTWORD();
d = X.LowWord;
r = d - b.d;
CLR_NZVC();
SET_FLAGS16(d, b.d, r);
}
protected void jsr_ex()
{
EXTENDED();
PUSHWORD(PC);
PC.LowWord = EA.LowWord;
//CHANGE_PC();
}
protected void lds_ex()
{
S = EXTWORD();
CLR_NZV();
SET_NZ16(S.LowWord);
}
protected void sts_ex()
{
CLR_NZV();
SET_NZ16(S.LowWord);
EXTENDED();
WM16(EA.LowWord, S);
}
protected void subb_im()
{
ushort t, r;
t = IMMBYTE();
r = (ushort)(D.LowByte - t);
CLR_NZVC();
SET_FLAGS8(D.LowByte, t, r);
D.LowByte = (byte)r;
}
protected void cmpb_im()
{
ushort t, r;
t = IMMBYTE();
r = (ushort)(D.LowByte - t);
CLR_NZVC();
SET_FLAGS8(D.LowByte, t, r);
}
protected void sbcb_im()
{
ushort t, r;
t = IMMBYTE();
r = (ushort)(D.LowByte - t - (cc & 0x01));
CLR_NZVC();
SET_FLAGS8(D.LowByte, t, r);
D.LowByte = (byte)r;
}
protected void addd_im()
{
uint r, d;
Register b;
b = IMMWORD();
d = D.LowWord;
r = d + b.d;
CLR_NZVC();
SET_FLAGS16(d, b.d, r);
D.LowWord = (ushort)r;
}
protected void andb_im()
{
byte t;
t = IMMBYTE();
D.LowByte &= t;
CLR_NZV();
SET_NZ8(D.LowByte);
}
protected void bitb_im()
{
byte t, r;
t = IMMBYTE();
r = (byte)(D.LowByte & t);
CLR_NZV();
SET_NZ8(r);
}
protected void ldb_im()
{
D.LowByte = IMMBYTE();
CLR_NZV();
SET_NZ8(D.LowByte);
}
protected void stb_im()
{
CLR_NZV();
SET_NZ8(D.LowByte);
IMM8();
WriteMemory(EA.LowWord, D.LowByte);
}
protected void eorb_im()
{
byte t;
t = IMMBYTE();
D.LowByte ^= t;
CLR_NZV();
SET_NZ8(D.LowByte);
}
protected void adcb_im()
{
ushort t, r;
t = IMMBYTE();
r = (ushort)(D.LowByte + t + (cc & 0x01));
CLR_HNZVC();
SET_FLAGS8(D.LowByte, t, r);
SET_H(D.LowByte, t, r);
D.LowByte = (byte)r;
}
protected void orb_im()
{
byte t;
t = IMMBYTE();
D.LowByte |= t;
CLR_NZV();
SET_NZ8(D.LowByte);
}
protected void addb_im()
{
ushort t, r;
t = IMMBYTE();
r = (ushort)(D.LowByte + t);
CLR_HNZVC();
SET_FLAGS8(D.LowByte, t, r);
SET_H(D.LowByte, t, r);
D.LowByte = (byte)r;
}
protected void ldd_im()
{
D = IMMWORD();
CLR_NZV();
SET_NZ16(D.LowWord);
}
protected void std_im()
{
IMM16();
CLR_NZV();
SET_NZ16(D.LowWord);
WM16(EA.LowWord, D);
}
protected void ldx_im()
{
X = IMMWORD();
CLR_NZV();
SET_NZ16(X.LowWord);
}
protected void stx_im()
{
CLR_NZV();
SET_NZ16(X.LowWord);
IMM16();
WM16(EA.LowWord, X);
}
protected void subb_di()
{
ushort t, r;
t = DIRBYTE();
r = (ushort)(D.LowByte - t);
CLR_NZVC();
SET_FLAGS8(D.LowByte, t, r);
D.LowByte = (byte)r;
}
protected void cmpb_di()
{
ushort t, r;
t = DIRBYTE();
r = (ushort)(D.LowByte - t);
CLR_NZVC();
SET_FLAGS8(D.LowByte, t, r);
}
protected void sbcb_di()
{
ushort t, r;
t = DIRBYTE();
r = (ushort)(D.LowByte - t - (cc & 0x01));
CLR_NZVC();
SET_FLAGS8(D.LowByte, t, r);
D.LowByte = (byte)r;
}
protected void addd_di()
{
uint r, d;
Register b;
b = DIRWORD();
d = D.LowWord;
r = d + b.d;
CLR_NZVC();
SET_FLAGS16(d, b.d, r);
D.LowWord = (ushort)r;
}
protected void andb_di()
{
byte t;
t = DIRBYTE();
D.LowByte &= t;
CLR_NZV();
SET_NZ8(D.LowByte);
}
protected void bitb_di()
{
byte t, r;
t = DIRBYTE();
r = (byte)(D.LowByte & t);
CLR_NZV();
SET_NZ8(r);
}
protected void ldb_di()
{
D.LowByte = DIRBYTE();
CLR_NZV();
SET_NZ8(D.LowByte);
}
protected void stb_di()
{
CLR_NZV();
SET_NZ8(D.LowByte);
DIRECT();
WriteMemory(EA.LowWord, D.LowByte);
}
protected void eorb_di()
{
byte t;
t = DIRBYTE();
D.LowByte ^= t;
CLR_NZV();
SET_NZ8(D.LowByte);
}
protected void adcb_di()
{
ushort t, r;
t = DIRBYTE();
r = (ushort)(D.LowByte + t + (cc & 0x01));
CLR_HNZVC();
SET_FLAGS8(D.LowByte, t, r);
SET_H(D.LowByte, t, r);
D.LowByte = (byte)r;
}
protected void orb_di()
{
byte t;
t = DIRBYTE();
D.LowByte |= t;
CLR_NZV();
SET_NZ8(D.LowByte);
}
protected void addb_di()
{
ushort t, r;
t = DIRBYTE();
r = (ushort)(D.LowByte + t);
CLR_HNZVC();
SET_FLAGS8(D.LowByte, t, r);
SET_H(D.LowByte, t, r);
D.LowByte = (byte)r;
}
protected void ldd_di()
{
D = DIRWORD();
CLR_NZV();
SET_NZ16(D.LowWord);
}
protected void std_di()
{
DIRECT();
CLR_NZV();
SET_NZ16(D.LowWord);
WM16(EA.LowWord, D);
}
protected void ldx_di()
{
X = DIRWORD();
CLR_NZV();
SET_NZ16(X.LowWord);
}
protected void stx_di()
{
CLR_NZV();
SET_NZ16(X.LowWord);
DIRECT();
WM16(EA.LowWord, X);
}
protected void subb_ix()
{
ushort t, r;
t = IDXBYTE();
r = (ushort)(D.LowByte - t);
CLR_NZVC();
SET_FLAGS8(D.LowByte, t, r);
D.LowByte = (byte)r;
}
protected void cmpb_ix()
{
ushort t, r;
t = IDXBYTE();
r = (ushort)(D.LowByte - t);
CLR_NZVC();
SET_FLAGS8(D.LowByte, t, r);
}
protected void sbcb_ix()
{
ushort t, r;
t = IDXBYTE();
r = (ushort)(D.LowByte - t - (cc & 0x01));
CLR_NZVC();
SET_FLAGS8(D.LowByte, t, r);
D.LowByte = (byte)r;
}
protected void addd_ix()
{
uint r, d;
Register b;
b = IDXWORD();
d = D.LowWord;
r = d + b.d;
CLR_NZVC();
SET_FLAGS16(d, b.d, r);
D.LowWord = (ushort)r;
}
protected void andb_ix()
{
byte t;
t = IDXBYTE();
D.LowByte &= t;
CLR_NZV();
SET_NZ8(D.LowByte);
}
protected void bitb_ix()
{
byte t, r;
t = IDXBYTE();
r = (byte)(D.LowByte & t);
CLR_NZV();
SET_NZ8(r);
}
protected void ldb_ix()
{
D.LowByte = IDXBYTE();
CLR_NZV();
SET_NZ8(D.LowByte);
}
protected void stb_ix()
{
CLR_NZV();
SET_NZ8(D.LowByte);
INDEXED();
WriteMemory(EA.LowWord, D.LowByte);
}
protected void eorb_ix()
{
byte t;
t = IDXBYTE();
D.LowByte ^= t;
CLR_NZV();
SET_NZ8(D.LowByte);
}
protected void adcb_ix()
{
ushort t, r;
t = IDXBYTE();
r = (ushort)(D.LowByte + t + (cc & 0x01));
CLR_HNZVC();
SET_FLAGS8(D.LowByte, t, r);
SET_H(D.LowByte, t, r);
D.LowByte = (byte)r;
}
protected void orb_ix()
{
byte t;
t = IDXBYTE();
D.LowByte |= t;
CLR_NZV();
SET_NZ8(D.LowByte);
}
protected void addb_ix()
{
ushort t, r;
t = IDXBYTE();
r = (ushort)(D.LowByte + t);
CLR_HNZVC();
SET_FLAGS8(D.LowByte, t, r);
SET_H(D.LowByte, t, r);
D.LowByte = (byte)r;
}
protected void ldd_ix()
{
D = IDXWORD();
CLR_NZV();
SET_NZ16(D.LowWord);
}
protected void adcx_im()
{
ushort t, r;
t = IMMBYTE();
r = (ushort)(X.LowWord + t + (cc & 0x01));
CLR_HNZVC();
SET_FLAGS8(X.LowWord, t, r); SET_H(X.LowWord, t, r);
X.LowWord = r;
}
protected void std_ix()
{
INDEXED();
CLR_NZV();
SET_NZ16(D.LowWord);
WM16(EA.LowWord, D);
}
protected void ldx_ix()
{
X = IDXWORD();
CLR_NZV();
SET_NZ16(X.LowWord);
}
protected void stx_ix()
{
CLR_NZV();
SET_NZ16(X.LowWord);
INDEXED();
WM16(EA.LowWord, X);
}
protected void subb_ex()
{
ushort t, r;
t = EXTBYTE();
r = (ushort)(D.LowByte - t);
CLR_NZVC();
SET_FLAGS8(D.LowByte, t, r);
D.LowByte = (byte)r;
}
protected void cmpb_ex()
{
ushort t, r;
t = EXTBYTE();
r = (ushort)(D.LowByte - t);
CLR_NZVC();
SET_FLAGS8(D.LowByte, t, r);
}
protected void sbcb_ex()
{
ushort t, r;
t = EXTBYTE();
r = (ushort)(D.LowByte - t - (cc & 0x01));
CLR_NZVC();
SET_FLAGS8(D.LowByte, t, r);
D.LowByte = (byte)r;
}
protected void addd_ex()
{
uint r, d;
Register b;
b = EXTWORD();
d = D.LowWord;
r = d + b.d;
CLR_NZVC();
SET_FLAGS16(d, b.d, r);
D.LowWord = (ushort)r;
}
protected void andb_ex()
{
byte t;
t = EXTBYTE();
D.LowByte &= t;
CLR_NZV();
SET_NZ8(D.LowByte);
}
protected void bitb_ex()
{
byte t, r;
t = EXTBYTE();
r = (byte)(D.LowByte & t);
CLR_NZV();
SET_NZ8(r);
}
protected void ldb_ex()
{
D.LowByte = EXTBYTE();
CLR_NZV();
SET_NZ8(D.LowByte);
}
protected void stb_ex()
{
CLR_NZV();
SET_NZ8(D.LowByte);
EXTENDED();
WriteMemory(EA.LowWord, D.LowByte);
}
protected void eorb_ex()
{
byte t;
t = EXTBYTE();
D.LowByte ^= t;
CLR_NZV();
SET_NZ8(D.LowByte);
}
protected void adcb_ex()
{
ushort t, r;
t = EXTBYTE();
r = (ushort)(D.LowByte + t + (cc & 0x01));
CLR_HNZVC();
SET_FLAGS8(D.LowByte, t, r); SET_H(D.LowByte, t, r);
D.LowByte = (byte)r;
}
protected void orb_ex()
{
byte t;
t = EXTBYTE();
D.LowByte |= t;
CLR_NZV();
SET_NZ8(D.LowByte);
}
protected void addb_ex()
{
ushort t, r;
t = EXTBYTE();
r = (ushort)(D.LowByte + t);
CLR_HNZVC();
SET_FLAGS8(D.LowByte, t, r);
SET_H(D.LowByte, t, r);
D.LowByte = (byte)r;
}
protected void ldd_ex()
{
D = EXTWORD();
CLR_NZV();
SET_NZ16(D.LowWord);
}
protected void addx_ex()
{
uint r, d;
Register b;
b = EXTWORD();
d = X.LowWord;
r = d + b.d;
CLR_NZVC();
SET_FLAGS16(d, b.d, r);
X.LowWord = (ushort)r;
}
protected void std_ex()
{
EXTENDED();
CLR_NZV();
SET_NZ16(D.LowWord);
WM16(EA.LowWord, D);
}
protected void ldx_ex()
{
X = EXTWORD();
CLR_NZV();
SET_NZ16(X.LowWord);
}
protected void stx_ex()
{
CLR_NZV();
SET_NZ16(X.LowWord);
EXTENDED();
WM16(EA.LowWord, X);
}
/*protected void CLV()
{
cc &= 0xfd;
}
protected void SEV()
{
}*/
}
}