📄 6809ops.c
字号:
/* $57 ASRB inherent ?**-* */
INLINE void asrb( void )
{
CLR_NZC; cc|=(breg&0x01);
breg>>=1; breg|=((breg&0x40)<<1);
SET_NZ8(breg);
}
/* $58 ASLB inherent ?**** */
INLINE void aslb( void )
{
word r;
r=breg<<1;
CLR_NZVC; SET_FLAGS8(breg,breg,r);
breg=r;
}
/* $59 ROLB inherent -**** */
INLINE void rolb( void )
{
word t,r;
t = breg; r = cc&0x01; r |= t<<1;
CLR_NZVC; SET_FLAGS8(t,t,r);
breg=r;
}
/* $5A DECB inherent -***- */
INLINE void decb( void )
{
--breg;
CLR_NZV; SET_FLAGS8D(breg);
}
/* $5B ILLEGAL */
/* $5C INCB inherent -***- */
INLINE void incb( void )
{
++breg;
CLR_NZV; SET_FLAGS8I(breg);
}
/* $5D TSTB inherent -**0- */
INLINE void tstb( void )
{
CLR_NZV; SET_NZ8(breg);
}
/* $5E ILLEGAL */
/* $5F CLRB inherent -0100 */
INLINE void clrb( void )
{
breg=0;
CLR_NZVC; SEZ;
}
#if macintosh
#pragma mark ____6x____
#endif
/* $60 NEG indexed ?**** */
INLINE void neg_ix( void )
{
word r,t;
t=M_RDMEM(eaddr); r=-t;
CLR_NZVC; SET_FLAGS8(0,t,r);
M_WRMEM(eaddr,r);
}
/* $61 ILLEGAL */
/* $62 ILLEGAL */
/* $63 COM indexed -**01 */
INLINE void com_ix( void )
{
byte t;
t = ~M_RDMEM(eaddr);
CLR_NZV; SET_NZ8(t); SEC;
M_WRMEM(eaddr,t);
}
/* $64 LSR indexed -0*-* */
INLINE void lsr_ix( void )
{
byte t;
t=M_RDMEM(eaddr); CLR_NZC; cc|=(t&0x01);
t>>=1; SET_Z8(t);
M_WRMEM(eaddr,t);
}
/* $65 ILLEGAL */
/* $66 ROR indexed -**-* */
INLINE void ror_ix( void )
{
byte t,r;
t=M_RDMEM(eaddr); r=(cc&0x01)<<7;
CLR_NZC; cc|=(t&0x01);
r |= t>>1; SET_NZ8(r);
M_WRMEM(eaddr,r);
}
/* $67 ASR indexed ?**-* */
INLINE void asr_ix( void )
{
byte t;
t=M_RDMEM(eaddr); CLR_NZC; cc|=(t&0x01);
t>>=1; t|=((t&0x40)<<1);
SET_NZ8(t);
M_WRMEM(eaddr,t);
}
/* $68 ASL indexed ?**** */
INLINE void asl_ix( void )
{
word t,r;
t=M_RDMEM(eaddr); r=t<<1;
CLR_NZVC; SET_FLAGS8(t,t,r);
M_WRMEM(eaddr,r);
}
/* $69 ROL indexed -**** */
INLINE void rol_ix( void )
{
word t,r;
t=M_RDMEM(eaddr); r = cc&0x01; r |= t<<1;
CLR_NZVC; SET_FLAGS8(t,t,r);
M_WRMEM(eaddr,r);
}
/* $6A DEC indexed -***- */
INLINE void dec_ix( void )
{
byte t;
t=M_RDMEM(eaddr)-1;
CLR_NZV; SET_FLAGS8D(t);
M_WRMEM(eaddr,t);
}
/* $6B ILLEGAL */
/* $6C INC indexed -***- */
INLINE void inc_ix( void )
{
byte t;
t=M_RDMEM(eaddr)+1;
CLR_NZV; SET_FLAGS8I(t);
M_WRMEM(eaddr,t);
}
/* $6D TST indexed -**0- */
INLINE void tst_ix( void )
{
byte t;
t=M_RDMEM(eaddr); CLR_NZV; SET_NZ8(t);
}
/* $6E JMP indexed ----- */
INLINE void jmp_ix( void )
{
pcreg=eaddr;change_pc(pcreg); /* TS 971002 */
}
/* $6E JMP indexed ----- */
INLINE void jmp_ix_slap( void )
{
pcreg=eaddr;cpu_setOPbase16(pcreg); /* LBO 092898 */
}
/* $6F CLR indexed -0100 */
INLINE void clr_ix( void )
{
M_WRMEM(eaddr,0);
CLR_NZVC; SEZ;
}
#if macintosh
#pragma mark ____7x____
#endif
/* $70 NEG extended ?**** */
INLINE void neg_ex( void )
{
word r,t;
EXTBYTE(t); r=-t;
CLR_NZVC; SET_FLAGS8(0,t,r);
M_WRMEM(eaddr,r);
}
/* $71 ILLEGAL */
/* $72 ILLEGAL */
/* $73 COM extended -**01 */
INLINE void com_ex( void )
{
byte t;
EXTBYTE(t); t = ~t;
CLR_NZV; SET_NZ8(t); SEC;
M_WRMEM(eaddr,t);
}
/* $74 LSR extended -0*-* */
INLINE void lsr_ex( void )
{
byte t;
EXTBYTE(t); CLR_NZC; cc|=(t&0x01);
t>>=1; SET_Z8(t);
M_WRMEM(eaddr,t);
}
/* $75 ILLEGAL */
/* $76 ROR extended -**-* */
INLINE void ror_ex( void )
{
byte t,r;
EXTBYTE(t); r=(cc&0x01)<<7;
CLR_NZC; cc|=(t&0x01);
r |= t>>1; SET_NZ8(r);
M_WRMEM(eaddr,r);
}
/* $77 ASR extended ?**-* */
INLINE void asr_ex( void )
{
byte t;
EXTBYTE(t); CLR_NZC; cc|=(t&0x01);
t>>=1; t|=((t&0x40)<<1);
SET_NZ8(t);
M_WRMEM(eaddr,t);
}
/* $78 ASL extended ?**** */
INLINE void asl_ex( void )
{
word t,r;
EXTBYTE(t); r=t<<1;
CLR_NZVC; SET_FLAGS8(t,t,r);
M_WRMEM(eaddr,r);
}
/* $79 ROL extended -**** */
INLINE void rol_ex( void )
{
word t,r;
EXTBYTE(t); r = cc&0x01; r |= t<<1;
CLR_NZVC; SET_FLAGS8(t,t,r);
M_WRMEM(eaddr,r);
}
/* $7A DEC extended -***- */
INLINE void dec_ex( void )
{
byte t;
EXTBYTE(t); --t;
CLR_NZV; SET_FLAGS8D(t);
M_WRMEM(eaddr,t);
}
/* $7B ILLEGAL */
/* $7C INC extended -***- */
INLINE void inc_ex( void )
{
byte t;
EXTBYTE(t); ++t;
CLR_NZV; SET_FLAGS8I(t);
M_WRMEM(eaddr,t);
}
/* $7D TST extended -**0- */
INLINE void tst_ex( void )
{
byte t;
EXTBYTE(t); CLR_NZV; SET_NZ8(t);
}
/* $7E JMP extended ----- */
INLINE void jmp_ex( void )
{
EXTENDED; pcreg=eaddr;change_pc(pcreg); /* TS 971002 */
}
/* $7E JMP extended ----- */
INLINE void jmp_ex_slap( void )
{
EXTENDED; pcreg=eaddr;cpu_setOPbase16(pcreg); /* LBO 092898 */
}
/* $7F CLR extended -0100 */
INLINE void clr_ex( void )
{
EXTENDED; M_WRMEM(eaddr,0);
CLR_NZVC; SEZ;
}
#if macintosh
#pragma mark ____8x____
#endif
/* $80 SUBA immediate ?**** */
INLINE void suba_im( void )
{
word t,r;
IMMBYTE(t); r = areg-t;
CLR_NZVC; SET_FLAGS8(areg,t,r);
areg = r;
}
/* $81 CMPA immediate ?**** */
INLINE void cmpa_im( void )
{
word t,r;
IMMBYTE(t); r = areg-t;
CLR_NZVC; SET_FLAGS8(areg,t,r);
}
/* $82 SBCA immediate ?**** */
INLINE void sbca_im( void )
{
word t,r;
IMMBYTE(t); r = areg-t-(cc&0x01);
CLR_NZVC; SET_FLAGS8(areg,t,r);
areg = r;
}
/* $83 SUBD (CMPD CMPU) immediate -**** */
INLINE void subd_im( void )
{
dword r,d,b;
IMMWORD(b); d = GETDREG; r = d-b;
CLR_NZVC; SET_FLAGS16(d,b,r);
SETDREG(r);
}
/* $1083 CMPD immediate -**** */
INLINE void cmpd_im( void )
{
dword r,d,b;
IMMWORD(b); d = GETDREG; r = d-b;
CLR_NZVC; SET_FLAGS16(d,b,r);
}
/* $1183 CMPU immediate -**** */
INLINE void cmpu_im( void )
{
dword r,b;
IMMWORD(b); r = ureg-b;
CLR_NZVC; SET_FLAGS16(ureg,b,r);
}
/* $84 ANDA immediate -**0- */
INLINE void anda_im( void )
{
byte t;
IMMBYTE(t); areg &= t;
CLR_NZV; SET_NZ8(areg);
}
/* $85 BITA immediate -**0- */
INLINE void bita_im( void )
{
byte t,r;
IMMBYTE(t); r = areg&t;
CLR_NZV; SET_NZ8(r);
}
/* $86 LDA immediate -**0- */
INLINE void lda_im( void )
{
IMMBYTE(areg);
CLR_NZV; SET_NZ8(areg);
}
/* is this a legal instruction? */
/* $87 STA immediate -**0- */
INLINE void sta_im( void )
{
CLR_NZV; SET_NZ8(areg);
IMM8; M_WRMEM(eaddr,areg);
}
/* $88 EORA immediate -**0- */
INLINE void eora_im( void )
{
byte t;
IMMBYTE(t); areg ^= t;
CLR_NZV; SET_NZ8(areg);
}
/* $89 ADCA immediate ***** */
INLINE void adca_im( void )
{
word t,r;
IMMBYTE(t); r = areg+t+(cc&0x01);
CLR_HNZVC; SET_FLAGS8(areg,t,r); SET_H(areg,t,r);
areg = r;
}
/* $8A ORA immediate -**0- */
INLINE void ora_im( void )
{
byte t;
IMMBYTE(t); areg |= t;
CLR_NZV; SET_NZ8(areg);
}
/* $8B ADDA immediate ***** */
INLINE void adda_im( void )
{
word t,r;
IMMBYTE(t); r = areg+t;
CLR_HNZVC; SET_FLAGS8(areg,t,r); SET_H(areg,t,r);
areg = r;
}
/* $8C CMPX (CMPY CMPS) immediate -**** */
INLINE void cmpx_im( void )
{
dword r,d,b;
IMMWORD(b); d = xreg; r = d-b;
CLR_NZVC; SET_FLAGS16(d,b,r);
}
/* $108C CMPY immediate -**** */
INLINE void cmpy_im( void )
{
dword r,d,b;
IMMWORD(b); d = yreg; r = d-b;
CLR_NZVC; SET_FLAGS16(d,b,r);
}
/* $118C CMPS immediate -**** */
INLINE void cmps_im( void )
{
dword r,d,b;
IMMWORD(b); d = sreg; r = d-b;
CLR_NZVC; SET_FLAGS16(d,b,r);
}
/* $8D BSR ----- */
INLINE void bsr( void )
{
byte t;
IMMBYTE(t); PUSHWORD(pcreg); pcreg += SIGNED(t);change_pc(pcreg); /* TS 971002 */
}
/* $8E LDX (LDY) immediate -**0- */
INLINE void ldx_im( void )
{
IMMWORD(xreg);
CLR_NZV; SET_NZ16(xreg);
}
/* $108E LDY immediate -**0- */
INLINE void ldy_im( void )
{
IMMWORD(yreg);
CLR_NZV; SET_NZ16(yreg);
}
/* is this a legal instruction? */
/* $8F STX (STY) immediate -**0- */
INLINE void stx_im( void )
{
CLR_NZV; SET_NZ16(xreg);
IMM16; M_WRMEM_WORD(eaddr,xreg);
}
/* is this a legal instruction? */
/* $108F STY immediate -**0- */
INLINE void sty_im( void )
{
CLR_NZV; SET_NZ16(yreg);
IMM16; M_WRMEM_WORD(eaddr,yreg);
}
#if macintosh
#pragma mark ____9x____
#endif
/* $90 SUBA direct ?**** */
INLINE void suba_di( void )
{
word t,r;
DIRBYTE(t); r = areg-t;
CLR_NZVC; SET_FLAGS8(areg,t,r);
areg = r;
}
/* $91 CMPA direct ?**** */
INLINE void cmpa_di( void )
{
word t,r;
DIRBYTE(t); r = areg-t;
CLR_NZVC; SET_FLAGS8(areg,t,r);
}
/* $92 SBCA direct ?**** */
INLINE void sbca_di( void )
{
word t,r;
DIRBYTE(t); r = areg-t-(cc&0x01);
CLR_NZVC; SET_FLAGS8(areg,t,r);
areg = r;
}
/* $93 SUBD (CMPD CMPU) direct -**** */
INLINE void subd_di( void )
{
dword r,d,b;
DIRWORD(b); d = GETDREG; r = d-b;
CLR_NZVC; SET_FLAGS16(d,b,r);
SETDREG(r);
}
/* $1093 CMPD direct -**** */
INLINE void cmpd_di( void )
{
dword r,d,b;
DIRWORD(b); d = GETDREG; r = d-b;
CLR_NZVC; SET_FLAGS16(d,b,r);
}
/* $1193 CMPU direct -**** */
INLINE void cmpu_di( void )
{
dword r,b;
DIRWORD(b); r = ureg-b;
CLR_NZVC; SET_FLAGS16(ureg,b,r);
}
/* $94 ANDA direct -**0- */
INLINE void anda_di( void )
{
byte t;
DIRBYTE(t); areg &= t;
CLR_NZV; SET_NZ8(areg);
}
/* $95 BITA direct -**0- */
INLINE void bita_di( void )
{
byte t,r;
DIRBYTE(t); r = areg&t;
CLR_NZV; SET_NZ8(r);
}
/* $96 LDA direct -**0- */
INLINE void lda_di( void )
{
DIRBYTE(areg);
CLR_NZV; SET_NZ8(areg);
}
/* $97 STA direct -**0- */
INLINE void sta_di( void )
{
CLR_NZV; SET_NZ8(areg);
DIRECT; M_WRMEM(eaddr,areg);
}
/* $98 EORA direct -**0- */
INLINE void eora_di( void )
{
byte t;
DIRBYTE(t); areg ^= t;
CLR_NZV; SET_NZ8(areg);
}
/* $99 ADCA direct ***** */
INLINE void adca_di( void )
{
word t,r;
DIRBYTE(t); r = areg+t+(cc&0x01);
CLR_HNZVC; SET_FLAGS8(areg,t,r); SET_H(areg,t,r);
areg = r;
}
/* $9A ORA direct -**0- */
INLINE void ora_di( void )
{
byte t;
DIRBYTE(t); areg |= t;
CLR_NZV; SET_NZ8(areg);
}
/* $9B ADDA direct ***** */
INLINE void adda_di( void )
{
word t,r;
DIRBYTE(t); r = areg+t;
CLR_HNZVC; SET_FLAGS8(areg,t,r); SET_H(areg,t,r);
areg = r;
}
/* $9C CMPX (CMPY CMPS) direct -**** */
INLINE void cmpx_di( void )
{
dword r,d,b;
DIRWORD(b); d = xreg; r = d-b;
CLR_NZVC; SET_FLAGS16(d,b,r);
}
/* $109C CMPY direct -**** */
INLINE void cmpy_di( void )
{
dword r,d,b;
DIRWORD(b); d = yreg; r = d-b;
CLR_NZVC; SET_FLAGS16(d,b,r);
}
/* $119C CMPS direct -**** */
INLINE void cmps_di( void )
{
dword r,d,b;
DIRWORD(b); d = sreg; r = d-b;
CLR_NZVC; SET_FLAGS16(d,b,r);
}
/* $9D JSR direct ----- */
INLINE void jsr_di( void )
{
DIRECT; PUSHWORD(pcreg);
pcreg = eaddr;change_pc(pcreg); /* TS 971002 */
}
/* $9D JSR direct ----- */
INLINE void jsr_di_slap( void )
{
DIRECT; PUSHWORD(pcreg);
pcreg = eaddr;cpu_setOPbase16(pcreg); /* LBO 092898 */
}
/* $9E LDX (LDY) direct -**0- */
INLINE void ldx_di( void )
{
DIRWORD(xreg);
CLR_NZV; SET_NZ16(xreg);
}
/* $109E LDY direct -**0- */
INLINE void ldy_di( void )
{
DIRWORD(yreg);
CLR_NZV; SET_NZ16(yreg);
}
/* $9F STX (STY) direct -**0- */
INLINE void stx_di( void )
{
CLR_NZV; SET_NZ16(xreg);
DIRECT; M_WRMEM_WORD(eaddr,xreg);
}
/* $109F STY direct -**0- */
INLINE void sty_di( void )
{
CLR_NZV; SET_NZ16(yreg);
DIRECT; M_WRMEM_WORD(eaddr,yreg);
}
#if macintosh
#pragma mark ____Ax____
#endif
/* $a0 SUBA indexed ?**** */
INLINE void suba_ix( void )
{
word t,r;
t = M_RDMEM(eaddr); r = areg-t;
CLR_NZVC; SET_FLAGS8(areg,t,r);
areg = r;
}
/* $a1 CMPA indexed ?**** */
INLINE void cmpa_ix( void )
{
word t,r;
t = M_RDMEM(eaddr); r = areg-t;
CLR_NZVC; SET_FLAGS8(areg,t,r);
}
/* $a2 SBCA indexed ?**** */
INLINE void sbca_ix( void )
{
word t,r;
t = M_RDMEM(eaddr); r = areg-t-(cc&0x01);
CLR_NZVC; SET_FLAGS8(areg,t,r);
areg = r;
}
/* $a3 SUBD (CMPD CMPU) indexed -**** */
INLINE void subd_ix( void )
{
dword r,d,b;
b = M_RDMEM_WORD(eaddr); d = GETDREG; r = d-b;
CLR_NZVC; SET_FLAGS16(d,b,r);
SETDREG(r);
}
/* $10a3 CMPD indexed -**** */
INLINE void cmpd_ix( void )
{
dword r,d,b;
b = M_RDMEM_WORD(eaddr); d = GETDREG; r = d-b;
CLR_NZVC; SET_FLAGS16(d,b,r);
}
/* $11a3 CMPU indexed -**** */
INLINE void cmpu_ix( void )
{
dword r,b;
b = M_RDMEM_WORD(eaddr); r = ureg-b;
CLR_NZVC; SET_FLAGS16(ureg,b,r);
}
/* $a4 ANDA indexed -**0- */
INLINE void anda_ix( void )
{
areg &= M_RDMEM(eaddr);
CLR_NZV; SET_NZ8(areg);
}
/* $a5 BITA indexed -**0- */
INLINE void bita_ix( void )
{
byte r;
r = areg&M_RDMEM(eaddr);
CLR_NZV; SET_NZ8(r);
}
/* $a6 LDA indexed -**0- */
INLINE void lda_ix( void )
{
areg = M_RDMEM(eaddr);
CLR_NZV; SET_NZ8(areg);
}
/* $a7 STA indexed -**0- */
INLINE void sta_ix( void )
{
CLR_NZV; SET_NZ8(areg);
M_WRMEM(eaddr,areg);
}
/* $a8 EORA indexed -**0- */
INLINE void eora_ix( void )
{
areg ^= M_RDMEM(eaddr);
CLR_NZV; SET_NZ8(areg);
}
/* $a9 ADCA indexed ***** */
INLINE void adca_ix( void )
{
word t,r;
t = M_RDMEM(eaddr); r = areg+t+(cc&0x01);
CLR_HNZVC; SET_FLAGS8(areg,t,r); SET_H(areg,t,r);
areg = r;
}
/* $aA ORA indexed -**0- */
INLINE void ora_ix( void )
{
areg |= M_RDMEM(eaddr);
CLR_NZV; SET_NZ8(areg);
}
/* $aB ADDA indexed ***** */
INLINE void adda_ix( void )
{
word t,r;
t = M_RDMEM(eaddr); r = areg+t;
CLR_HNZVC; SET_FLAGS8(areg,t,r); SET_H(areg,t,r);
areg = r;
}
/* $aC CMPX (CMPY CMPS) indexed -**** */
INLINE void cmpx_ix( void )
{
dword r,d,b;
b = M_RDMEM_WORD(eaddr); d = xreg; r = d-b;
CLR_NZVC; SET_FLAGS16(d,b,r);
}
/* $10aC CMPY indexed -**** */
INLINE void cmpy_ix( void )
{
dword r,d,b;
b = M_RDMEM_WORD(eaddr); d = yreg; r = d-b;
CLR_NZVC; SET_FLAGS16(d,b,r);
}
/* $11aC CMPS indexed -**** */
INLINE void cmps_ix( void )
{
dword r,d,b;
b = M_RDMEM_WORD(eaddr); d = sreg; r = d-b;
CLR_NZVC; SET_FLAGS16(d,b,r);
}
/* $aD JSR indexed ----- */
INLINE void jsr_ix( void )
{
PUSHWORD(pcreg);
pcreg = eaddr;change_pc(pcreg); /* TS 971002 */
}
/* $aD JSR indexed ----- */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -