#pragma once


ADC: expr: (t = a;
            a = a + m + c;
            c = a < t;
            n = m < 0;
            z = m == 0);
AND: expr: (a = a & m;
            n = m < 0;
            z = m == 0;);
ASL: expr: (c = m & 0x80;
            m = m << 1;
            n = m < 0;
            z = m == 0;);
BIT: expr: (n = (signed)m < 0;
            v = m & 0x40;
            z = m == a;);
CLC: expr:  c = 0;
CLD: expr:  d = 0;
CLI: expr:  i = 0; 
CLV: expr:  v = 0;
CMP: expr: (z = (a == m);
            n = (a < m);
            c = (a >= m););
CPX: expr: (z = (x == m);
            n = (x < m);
            c = (x >= m););
CPY: expr: (z = (y == m);
            n = (y < m);
            c = (y >= m););
DEC: expr: (m = m - 1; n = m < 0; z = m == 0;);
DEX: expr:
DEY: expr:
EOR: expr:
INC: expr:
INX: expr:
INY: expr:
LDA: expr: (a = m; n = a < 0; z = a == 0;);
LDX: expr: (x = m; n = x < 0; z = x == 0;);
LDY: expr: (y = m; n = y < 0; z = y == 0;);
LSR: expr: 
ORA: expr:
ROL: expr:
ROR: expr:
SBC: expr:
SEC: expr:  c = 1;
SED: expr:  d = 1;
SEI: expr:  i = 1;
STA: expr:  m = a;
STX: expr:  m = x;
STY: expr:  m = y;
TAX: expr:  x = a;
TAY: expr:  y = a;
TXA: expr:  a = x;
TYA: expr:  a = y;
BRK: stmt:  irq;
JMP: stmt:  goto x;
JSR: stmt:  call x;
NOP: stmt:  nop;
PHA: stmt:  push (a);
PHP: stmt:  save (n, v, z, c);
PLA: stmt:  a = pull;
TSX: stmt:  pos (x);
TXS: expr:  x = pos;
PLP: stmt:  (n, v, z, c)=restore;
RTI: stmt:  resume;
RTS: stmt:  return;
BCC: cond:  if (!c) goto x;
BCS: cond:  if ( c) goto x;
BEQ: cond:  if ( z) goto x;
BMI: cond:  if ( n) goto x;
BNE: cond:  if (!z) goto x;
BPL: cond:  if (!n) goto x;
BVC: cond:  if (!v) goto x;
BVS: cond:  if ( v) goto x;

