#define DEBUG 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>

//#define SAMESEX 1
// Host processor has same byte sex as target - we can optimise some
// cases with shorts rather than two single byte accesses
// but for portability, get the single-byte cases working first...

#ifndef FALSE
#define FALSE (0!=0)
#define TRUE  (0==0)
#endif

#define MAX 10240
long defs[MAX], uses[MAX];
char *codes[MAX];
int nextfree = 0;

/* Metacodes */
#define Always 1
#define Flush 2

// #define R_P 4
// - in this emulator we affect only individual bits
// (this may change as we make some efficiency tweaks)
#define R_A 8
#define R_X 16
#define R_Y 32
#define R_PC 64
#define R_S 128

/* Internal emulator variables */
#define R_VALUE 256
#define R_CLOCKTICKS 512
#define R_TEMP 1024

/* Specific bits in the condition-code register.  Treat
them as if they were independant variables. */
#define R_P_Z 2048              /* zero */
#define R_P_N 4096              /* negative */
#define R_P_C 8192              /* carry */
#define R_P_D 16384             /* binary-coded decimal mode */
#define R_P_V 32768             /* overflow */
#define R_P (R_P_Z|R_P_N|R_P_C|R_P_D|R_P_V)

#define R_SAVEFLAGS 65536       /* overflow */

#define R_FLUSH (Always|R_CLOCKTICKS|R_S|R_PC|R_Y|R_X|R_A|R_P_Z|R_P_N|R_P_C|R_P_D|R_P_V)

static int clockticks = 0, cond_clockticks = 0;
void unconditional_clockticks (int ticks) {
  clockticks += ticks;
}

/* conditional_clockticks would do a dumpf to set clockticks equal
   to the sum of clockticks plus the parameter but doesn't update
   clockticks itself.  For use in conditional branches.  "To do..." */
void conditional_clockticks (int ticks) {
  /*** TO DO !!! ***/
  cond_clockticks += ticks;
}

void flush (long regs) {
  int i;
  long common_regs;

  for (i = nextfree - 1; i >= 0; --i) {
    if (common_regs = (regs & defs[i])) {
      /* if bits in 'defs' then this needs to be dumped. */
      // fprintf(stdout, "// %02d lookfor: %02x Item %d - def %02x\n",
      // nextfree, regs, i, defs[i]);
      defs[i] |= Always;        /* flag this line for printing */
      regs &= ~common_regs;     /* don't need to look for these ones any more */
    }
    if (defs[i] & Always)
      regs |= uses[i];          /* Any unconditionals + parents */
  }

  for (i = 0; i < nextfree; i++) {
    if (DEBUG) {      fprintf (stdout, "/* %03d [def:%04lx] [use:%04lx] */", i, defs[i], uses[i]);    }
    fprintf (stdout, "  %s %s", (defs[i] & Always ? "   " : "// "), codes[i]);
    /* should free strings here... */
  }
}

void unconditional_flush (char *inst) {
  flush (R_FLUSH);
  if (DEBUG) { fprintf (stdout, "/*                           */"); }
  fprintf (stdout, "          clockticks += %d; /*poll_nmi(opadd);*/\n", clockticks);
  clockticks = 0;
  cond_clockticks = 0;
  if (DEBUG) {    printf ("/*                           */");  }
  printf ("          %s\n", inst);
  nextfree = 0;
}

void conditional_flush (char *inst) {
  /* TO DO!!! This is tricky... */
  flush (R_FLUSH);
  if (DEBUG) {    fprintf (stdout, "/*                           */");  }
  fprintf (stdout, "              clockticks += %d;\n", clockticks + cond_clockticks);
  if (DEBUG) {    fprintf (stdout, "/*                           */");  }
  fprintf (stdout, "              poll_nmi(opadd); /* if (...) return to dispatch loop - PC is address of NMI proc - real PC is on stack */\n");
  cond_clockticks = 0;
  if (DEBUG) { printf ("/*                           */"); }
  printf ("          %s\n", inst);
  nextfree = 0;
}

void dumpf (int def, int use, char *s, ...) {   /* Works like printf */
  static FILE *nullfile = NULL;
  static char *buff = NULL;
  static int bufflen = 0;
  va_list ap;

  if (nullfile == NULL) {
    nullfile = fopen ("/dev/null", "w");
    if (nullfile == NULL) {
      fprintf (stderr, "Major error - cannot open /dev/null\n");
      exit (1);
    }
  }
  if (buff == NULL) {
    buff = malloc (bufflen = 256);
    if (buff == NULL) exit (2);                 // if malloc failed so will printf!
  }
  va_start (ap, s);
  {
    int string_length;

    string_length = vfprintf (nullfile, s, ap);

    if (string_length + 1 >= bufflen) {
      free (buff);
      buff = malloc (bufflen = 2 * string_length);
      if (buff == NULL)
        exit (3);
    }
    vsprintf (buff, s, ap);
  }
  va_end (ap);
  defs[nextfree] = def;
  uses[nextfree] = use;
  codes[nextfree] = strdup (buff);
  nextfree += 1;
  // fprintf(stderr, "// %s", buff);
}

FILE *fp;

unsigned short sa;

unsigned short temp;
unsigned short temp2;

unsigned char rom[0x8000];

unsigned char hitlist[0x8000];

unsigned char newline[1024];

void tempword (unsigned short opadd) {
  temp = rom[opadd + 2];
  temp <<= 8;
  temp |= rom[opadd + 1];
  // Originally had this line:
  // temp &= 0x7FFF;
  // I assume that was a mistake and it should be this???
  temp &= 0xFFFF;
  // if indeed the mask is even necessary at all???
}

void translate (unsigned short opadd, unsigned char opcode) {
  switch (opcode) {

  case 0x00:                   // [brk_implied]

  // static void brk_implied () // 0x00
  // {
  // PC++;
  // put6502memory(0x0100+S--,PC >> 8);
  // put6502memory(0x0100+S--,PC & 0xff);
  // put6502memory(0x0100+S--,P);
  // P |= 0x14;
  // PC=get6502memory(0xfffe);
  // PC |= get6502memory(0xffff) << 8;
  // clockticks += 7;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (7);

    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);
    flush (R_FLUSH);
    return;

  case 0x01:                   // [ora_indx]

  // static void ora_indx () // 0x01
  // {
  // unsigned char tmp=get6502memoryFast(PC++);
  // tmp += X;
  // savepc=get6502memory(tmp++);
  // savepc |= get6502memory(tmp) << 8;
  // value=get6502memory(savepc);
  // A |= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 6;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (6);
    temp = rom[opadd + 1];
    /* Cannot use ZN as a temp, it is a signed char */
    dumpf (Always | R_VALUE, Always | R_X, "    temp = ram[(unsigned short)(0x%04X + X)]<<8;\n", temp + 1);
    dumpf (Always | R_VALUE, Always | R_VALUE | R_X, "    temp |= ram[(unsigned short)(0x%04X + X)];\n", temp);
    dumpf (R_A | Always, Always | R_A | R_VALUE, "    A |= ram[temp];\n");
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x02:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x03:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x04:                   // [tsb_zp]

    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);

#ifdef NEVER

// static void tsb_zp () // 0x04
// {
// savepc=get6502memoryFast(PC++);
// value=get6502memory(savepc);
// value |= A;
// DO_Z (value);
// put6502memory(savepc,value);
//
// clockticks += 3;
// }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X TSB ??? non-standard opcode?\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (R_VALUE | Always, R_A | Always, "    ZN=ram[0x%04X] | A;\n", temp);
    dumpf (R_P_Z, R_VALUE, "    DO_Z (ZN); /* This doesn't set N as well?? */\n");
    dumpf (Always, R_VALUE, "    ram[0x%04X] = ZN;\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
#endif

    return;

  case 0x05:                   // [ora_zp]

  // static void ora_zp () // 0x05
  // {
  // savepc=get6502memoryFast(PC++);
  // value=get6502memory(savepc);
  // A |= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (R_A | Always, R_A | Always, "    A|=ram[0x%04X];\n", temp);
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x06:                   // [asl_zp]

  // static void asl_zp () // 0x06
  // {
  // savepc=get6502memoryFast(PC++);
  // value=get6502memory(savepc);
  // P= (P & 0xfe) | ((value >> 7) & 0x01);
  // value = value << 1;
  // DO_Z (value);
  // DO_N (value);
  // put6502memory(savepc,value);
  // clockticks += 5;
  // }

    // Doesn't affect carry??? (If it does, this is buggy)

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (5);
    temp = rom[opadd + 1];
    dumpf (R_VALUE | Always, Always, "    ZN=ram[0x%04X];\n", temp);
    dumpf (R_P_C, R_VALUE, "    C = ZN & 0x80; /* We're stealing ZN for use as a temp */\n");
    dumpf (R_P_Z | R_P_N, R_VALUE, "    ZN = ZN << 1;\n");
    // XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    dumpf (Always, R_P_Z | R_P_N, "    ram[0x%04X] = ZN; /* Because at this point it actually has the correct value in it */\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x07:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x08:                   // [php_implied]

  // static void php_implied () // 0x08
  // {
  // put6502memory(0x100+S--,P);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    dumpf (Always | R_S, Always | R_P | R_P_C | R_P_Z | R_P_N | R_S, "    stack[S--] = P; // todo: consolidate ZN, C\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x09:                   // [ora_immediate]

  // static void ora_immediate () // 0x09
  // {
  // savepc=PC++;
  // value=get6502memory(savepc);
  // A |= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (Always, Always, "    A |= 0x%02X;\n", temp);
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x0A:                   // [asla_implied]

  // static void asla_implied () // 0x0a
  // {
  // P= (P & 0xfe) | ((A >> 7) & 0x01);
  // A = A << 1;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    dumpf (R_P_C, R_A, "    C = A & 0x80;\n");
    dumpf (R_A, R_A, "    A = A << 1;\n");
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x0B:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x0C:                   // [tsb_abs]

  // static void tsb_abs () // 0x0c
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // value=get6502memory(savepc);
  // value |= A;
  // DO_Z (value);
  // put6502memory(savepc,value);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (R_VALUE | Always, Always, "    ZN=ram[0x%04X];\n", temp);
    dumpf (R_VALUE, R_VALUE | R_A, "    ZN |= A;\n");
    dumpf (R_P_Z, R_VALUE, "    DO_Z (ZN);\n");
    dumpf (Always, R_VALUE, "    ram[0x%04X] = ZN;\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x0D:                   // [ora_abs]

  // static void ora_abs () // 0x0d
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // value=get6502memory(savepc);
  // A |= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (Always, Always, "    A|=ram[0x%04X];\n", temp);
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x0E:                   // [asl_abs]

  // static void asl_abs () // 0x0e
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // value=get6502memory(savepc);
  // P= (P & 0xfe) | ((value >> 7) & 0x01);
  // value = value << 1;
  // DO_Z (value);
  // DO_N (value);
  // put6502memory(savepc,value);
  // clockticks += 6;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (6);
    tempword (opadd);
    dumpf (R_VALUE | Always, Always, "    ZN=ram[0x%04X];\n", temp);
    dumpf (R_P_C, R_VALUE, "    C = ZN & 0x80;\n");
    dumpf (R_VALUE, R_VALUE, "    ZN = ZN << 1;\n");
    // XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    dumpf (Always, R_VALUE, "    ram[0x%04X] = ZN;\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x0F:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x10:                   // [bpl_relative]

  // static void bpl_relative () // 0x10
  // {
  // if ((P & 0x80)==0)
  // {
  // savepc=get6502memoryFast(PC++);
  // if (savepc & 0x80) savepc -= 0x100;
  // if ((savepc >> 8) != (PC >> 8))
  // clockticks++;
  // PC += savepc;
  // clockticks++;
  // }
  // else
  // PC++;
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    temp = rom[opadd + 1];
    if (temp & 0x80)
      temp -= 0x100;
    dumpf (Always, Always | R_P_N, "    if (ZN < 0)\n");
    dumpf (Always, Always, "    {\n");
    conditional_clockticks (1);
    if (DEBUG) { dumpf (Always, Always, "        //trace_PC(0x%04X);\n", opadd); }
    dumpf (Always, Always, "        PC = 0x%04x;\n", (opadd + temp + 2) & 0x7FFF);
    conditional_flush ("    return;\n");
    dumpf (Always, Always, "    }\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x11:                   // [ora_indy]

  // static void ora_indy () // 0x11
  // {
  // unsigned char tmp=get6502memoryFast(PC++);
  // savepc=get6502memory(tmp++);
  // savepc |= get6502memory(tmp) << 8;
  // if ((savepc >> 8) != ((savepc+Y) >> 8))
  // clockticks++;
  // savepc += Y;
  // value=get6502memory(savepc);
  // A |= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 5;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (5);
    temp = rom[opadd + 1];
    dumpf (Always, Always, "    temp=0x%02X+Y;\n", temp);
    dumpf (Always, Always, "    temp=ram[(unsigned short)(0x%04X + 1)];\n", temp);
    dumpf (Always, Always, "    temp<<=8;\n");
    dumpf (Always, Always, "    temp|=ram[0x%04X];\n", temp);
    dumpf (Always, Always, "    ZN=ram[temp];\n");

    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);
    flush (R_FLUSH);
    /* NO FLUSH */
        return;

  case 0x12:                   // [ora_indzp]

  // static void ora_indzp () // 0x12
  // {
  // unsigned char tmp=get6502memoryFast(PC++);
  // savepc=get6502memory(tmp++);
  // savepc |= get6502memory(tmp) << 8;
  // value=get6502memory(savepc);
  // A |= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (Always, Always, "    temp=ram[(unsigned short)(0x%04X + 1)];\n", temp);
    dumpf (Always, Always, "    temp<<=8;\n");
    dumpf (Always, Always, "    temp|=ram[0x%04X];\n", temp);
    dumpf (Always, Always, "    ZN=ram[temp];\n");

    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);
    flush (R_FLUSH);
    /* NO FLUSH */
    return;

  case 0x13:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x14:                   // [trb_zp]

  // static void trb_zp () // 0x14
  // {
  // savepc=get6502memoryFast(PC++);
  // value=get6502memory(savepc);
  // value &= (A ^ 0xff);
  // DO_Z (value);
  // put6502memory(savepc,value);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (Always, Always, "    ZN=ram[0x%04X];\n", temp);

    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);
    flush (R_FLUSH);
    /* NO FLUSH */
    return;

  case 0x15:                   // [ora_zpx]

  // static void ora_zpx () // 0x15
  // {
  // savepc=get6502memoryFast(PC++)+X;
  // savepc &= 0x00ff;
  // value=get6502memory(savepc);
  // A |= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    temp = rom[opadd + 1];
    dumpf (Always, Always, "    temp=(0x%04X + X)&0xFF;\n", temp);
    dumpf (Always, Always, "    ZN=ram[temp];\n");
    dumpf (Always, Always, "    A |= ZN;\n");
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x16:                   // [asl_zpx]

  // static void asl_zpx () // 0x16
  // {
  // savepc=get6502memoryFast(PC++)+X;
  // savepc &= 0x00ff;
  // value=get6502memory(savepc);
  // P= (P & 0xfe) | ((value >> 7) & 0x01);
  // value = value << 1;
  // DO_Z (value);
  // DO_N (value);
  // put6502memory(savepc,value);
  // clockticks += 6;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (6);
    temp = rom[opadd + 1];
    dumpf (Always, R_X | Always, "    temp=(0x%04X + X)&0xFF;\n", temp);
    dumpf (Always, Always, "    ZN=ram[temp];\n");

    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);
    flush (R_FLUSH);
    /* NO FLUSH */
    return;

  case 0x17:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x18:                   // [clc_implied]

  // static void clc_implied () // 0x18
  // {
  // P &= 0xfe;
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    dumpf (R_P_C, 0, "    C = 0;\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x19:                   // [ora_absy]

  // static void ora_absy () // 0x19
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // if ((savepc >> 8) != ((savepc+Y) >> 8))
  // clockticks++;
  // savepc += Y;
  // value=get6502memory(savepc);
  // A |= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (Always, R_Y | Always, "    ZN=ram[(unsigned short)(0x%04X + Y)];\n", temp);

    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);
    flush (R_FLUSH);
    /* NO FLUSH */
    return;

  case 0x1A:                   // [ina_implied]

  // static void ina_implied () // 0x1a
  // {
  // A++;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);
    flush (R_FLUSH);
    /* NO FLUSH */
    return;

  case 0x1B:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x1C:                   // [trb_abs]

  // static void trb_abs () // 0x1c
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // value=get6502memory(savepc);
  // value &= (A ^ 0xff);
  // DO_Z (value);
  // put6502memory(savepc,value);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (Always, Always, "    ZN=ram[0x%04X];\n", temp);

    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);
    flush (R_FLUSH);
    /* NO FLUSH */
    return;

  case 0x1D:                   // [ora_absx]

  // static void ora_absx () // 0x1d
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // if ((savepc >> 8) != ((savepc+X) >> 8))
  // clockticks++;
  // savepc += X;
  // value=get6502memory(savepc);
  // A |= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (Always, R_X | Always, "    A |= ram[(unsigned short)(0x%04X + X)];\n", temp);
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x1E:                   // [asl_absx]

  // static void asl_absx () // 0x1e
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // savepc += X;
  // value=get6502memory(savepc);
  // P= (P & 0xfe) | ((value >> 7) & 0x01);
  // value = value << 1;
  // DO_Z (value);
  // DO_N (value);
  // put6502memory(savepc,value);
  // clockticks += 7;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (7);
    tempword (opadd);
    dumpf (Always, R_X | Always, "    ZN=ram[(unsigned short)(0x%04X + X)];\n", temp);

    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);
    flush (R_FLUSH);
    /* NO FLUSH */
    return;

  case 0x1F:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x20:                   // [jsr_abs]

  // static void jsr_abs () // 0x20
  // {
  // PC++;
  // put6502memory(0x0100+S--,PC >> 8);
  // put6502memory(0x0100+S--,PC & 0xff);
  // PC--;
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // PC=savepc;
  // clockticks += 6;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (6);
    tempword (opadd);
    temp2 = opadd + 2;
    dumpf (Always, Always, "    stack[S--] = 0x%02X;\n", (temp2 >> 8) & 0x7F);
    dumpf (Always, Always, "    stack[S--] = 0x%02X;\n", temp2 & 0xFF);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    dumpf (Always, Always, "    PC = 0x%04x;\n", temp);
    unconditional_flush ("return;\n");
    return;

  case 0x21:                   // [and_indx]

  // static void and_indx () // 0x21
  // {
  // unsigned char tmp=get6502memoryFast(PC++);
  // tmp += X;
  // savepc=get6502memory(tmp++);
  // savepc |= get6502memory(tmp) << 8;
  // value=get6502memory(savepc);
  // A &= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 6;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (6);
    temp = rom[opadd + 1];
    dumpf (Always, Always, "    temp+=X;\n");
    dumpf (Always, Always, "    temp=ram[(unsigned short)(0x%04X + 1)];\n", temp);
    dumpf (Always, Always, "    temp<<=8;\n");
    dumpf (Always, Always, "    temp|=ram[0x%04X];\n", temp);
    dumpf (Always, Always, "    ZN=ram[temp];\n");

    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);
    flush (R_FLUSH);
    /* NO FLUSH */
    return;

  case 0x22:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x23:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x24:                   // [bit_zp]

  // static void bit_zp () // 0x24
  // {
  // savepc=get6502memoryFast(PC++);
  // value=get6502memory(savepc);
  // DO_Z (value & A);
  // P = (P & 0x3f) | (value & 0xc0);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    // Bits Data:7 and Data:6 are transferred to P:N and P:V respectively
    // P:Z is set to 1 iff Data&A==0
    dumpf (R_VALUE | R_P_N | Always, Always, "    ZN=ram[0x%04X];   // N is correct, Z is not.  Asteroids never tests Z after a Bit instruction...\n", temp);
    dumpf (R_P_Z, R_VALUE | R_A, "    // DO_Z (ZN & A); // *** Not compatible with our ZN hack!\n");
    // P & 0x40 is the V flag
    dumpf (R_P_V, R_VALUE, "    P = (P & 0xbf) | (ZN & 0x40); // Set V\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x25:                   // [and_zp]

  // static void and_zp () // 0x25
  // {
  // savepc=get6502memoryFast(PC++);
  // value=get6502memory(savepc);
  // A &= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (Always | R_A, Always | R_A, "    A &= ram[0x%04X];\n", temp);
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x26:                   // [rol_zp]

  // static void rol_zp () // 0x26
  // {
  // int saveflags=(P & 0x01);
  // savepc=get6502memoryFast(PC++);
  // value=get6502memory(savepc);
  // P= (P & 0xfe) | ((value >> 7) & 0x01);
  // value = value << 1;
  // value |= saveflags;
  // DO_Z (value);
  // DO_N (value);
  // put6502memory(savepc,value);
  // clockticks += 5;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (5);
    temp = rom[opadd + 1];
    dumpf (R_SAVEFLAGS, R_P_C, "    saveflags=(C != 0 ? 1 : 0);\n");
    dumpf (R_VALUE | Always, Always, "    ZN=ram[0x%04X];\n", temp);
    /* 'ZN' is really 'value'; just saving a register... */
    dumpf (R_P_C, R_VALUE, "    C = ZN & 0x80;\n");
    dumpf (R_VALUE, R_VALUE, "    ZN = ZN << 1;\n");
    dumpf (R_P_Z | R_P_N, R_VALUE | R_SAVEFLAGS, "    ZN |= saveflags;\n");
    // XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    dumpf (Always, R_P_Z | R_P_N, "    ram[0x%04X] = ZN;\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x27:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x28:                   // [plp_implied]

  // static void plp_implied () // 0x28
  // {
  // P=get6502memory(++S+0x100);
  // P |= 0x20;
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    dumpf (Always | R_P | R_S | R_P_C | R_P_Z | R_P_N, Always | R_S, "    P=stack[++S]; // todo: set C, ZN\n");
    dumpf (R_P, R_P, "    P |= 0x20; /* PLP - needs work */\n");        // which bit is that?
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x29:                   // [and_immediate]

  // static void and_immediate () // 0x29
  // {
  // savepc=PC++;
  // value=get6502memory(savepc);
  // A &= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (R_A, R_A, "    A &= 0x%02X;\n", temp);
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x2A:                   // [rola_implied]

  // static void rola_implied () // 0x2a
  // {
  // int saveflags=(P & 0x01);
  // P= (P & 0xfe) | ((A >> 7) & 0x01);
  // A = A << 1;
  // A |= saveflags;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    dumpf (R_SAVEFLAGS, R_P_C, "    saveflags=(C != 0 ? 1 : 0);\n");
    dumpf (R_P_C, R_A, "    C = A & 0x80;\n");
    dumpf (R_A, R_A, "    A = A << 1;\n");
    dumpf (R_A, R_A | R_SAVEFLAGS, "    A |= saveflags;\n");
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x2B:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x2C:                   // [bit_abs]

  // static void bit_abs () // 0x2c
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // value=get6502memory(savepc);
  // DO_Z (value & A);
  // P = (P & 0x3f) | (value & 0xc0);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    // Bits Data:7 and Data:6 are transferred to P:N and P:V respectively
    // P:Z is set to 1 iff Data&A==0
    dumpf (R_VALUE | R_P_N | Always, Always, "    ZN=ram[0x%04X];   // N is correct, Z is not.  Asteroids never tests Z after a Bit instruction...\n", temp);
    dumpf (R_P_Z, R_VALUE | R_A, "    // DO_Z (ZN & A); // *** Not compatible with our ZN hack!\n");
    // P & 0x40 is the V flag
    dumpf (R_P_V, R_VALUE, "    P = (P & 0xbf) | (ZN & 0x40); // Set V\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x2D:                   // [and_abs]

  // static void and_abs () // 0x2d
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // value=get6502memory(savepc);
  // A &= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (R_A, Always | R_A, "    A &= ram[0x%04X];\n", temp);
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x2E:                   // [rol_abs]

  // static void rol_abs () // 0x2e
  // {
  // int saveflags=(P & 0x01);
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // value=get6502memory(savepc);
  // P= (P & 0xfe) | ((value >> 7) & 0x01);
  // value = value << 1;
  // value |= saveflags;
  // DO_Z (value);
  // DO_N (value);
  // put6502memory(savepc,value);
  // clockticks += 6;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (6);
    tempword (opadd);
    dumpf (Always | R_P_Z | R_P_N, Always, "    ZN=ram[0x%04X];\n", temp);

    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);
    flush (R_FLUSH);
    /* NO FLUSH */
    return;

  case 0x2F:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x30:                   // [bmi_relative]

  // static void bmi_relative () // 0x30
  // {
  // if (P & 0x80)
  // {
  // savepc=get6502memoryFast(PC++);
  // if (savepc & 0x80) savepc -= 0x100;
  // if ((savepc >> 8) != (PC >> 8))
  // clockticks++;
  // PC += savepc;
  // clockticks++;
  // }
  // else
  // PC++;
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    temp = rom[opadd + 1];
    if (temp & 0x80)
      temp -= 0x100;
    dumpf (Always, Always | R_P_N, "    if(/*P*/ZN < 0 /*& 0x80*/)\n");
    dumpf (Always, Always, "    {\n");
    conditional_clockticks (1);
    if (DEBUG) { dumpf (Always, Always, "        //trace_PC(0x%04X);\n", opadd); }
    dumpf (Always, Always, "        PC = 0x%04x;\n", (opadd + temp + 2) & 0x7FFF);
    conditional_flush ("    return;\n");
    dumpf (Always, Always, "    }\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x31:                   // [and_indy]

  // static void and_indy () // 0x31
  // {
  // unsigned char tmp=get6502memoryFast(PC++);
  // savepc=get6502memory(tmp++);
  // savepc |= get6502memory(tmp) << 8;
  // if ((savepc >> 8) != ((savepc+Y) >> 8))
  // clockticks++;
  // savepc += Y;
  // value=get6502memory(savepc);
  // A &= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 5;
  // }
  // todo next

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (5);
    temp = rom[opadd + 1];
    dumpf (Always, Always, "    temp=ram[(unsigned short)(0x%04X + 1)];\n", temp);
    dumpf (Always, Always, "    temp<<=8;\n");
    dumpf (Always, Always, "    temp|=ram[0x%04X];\n", temp);
    dumpf (Always, Always, "    temp+=Y;\n");
    dumpf (Always, Always, "    A &= ram[temp];\n");
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x32:                   // [and_indzp]

  // static void and_indzp () // 0x32
  // {
  // unsigned char tmp=get6502memoryFast(PC++);
  // savepc=get6502memory(tmp++);
  // savepc |= get6502memory(tmp) << 8;
  // value=get6502memory(savepc);
  // A &= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (Always, Always, "    temp=ram[(unsigned short)(0x%04X + 1)];\n", temp);
    dumpf (Always, Always, "    temp<<=8;\n");
    dumpf (Always, Always, "    temp|=ram[0x%04X];\n", temp);
    dumpf (Always, Always, "    A &= ram[temp];\n");
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x33:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x34:                   // [bit_zpx]

  // static void bit_zpx () // 0x34
  // {
  // savepc=get6502memoryFast(PC++)+X;
  // savepc &= 0x00ff;
  // value=get6502memory(savepc);
  // DO_Z (value & A);
  // P = (P & 0x3f) | (value & 0xc0);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    temp = rom[opadd + 1];
    // Bits Data:7 and Data:6 are transferred to P:N and P:V respectively
    // P:Z is set to 1 iff Data&A==0
    dumpf (R_VALUE | R_P_N | Always, Always | R_X, "    ZN=ram[(unsigned char)(0x%02X + X)];   // N is correct, Z is not.  Asteroids never tests Z after a Bit instruction...\n",
           temp);
    dumpf (R_P_Z, R_VALUE | R_A, "    // DO_Z (ZN & A); // *** Not compatible with our ZN hack!\n");
    // P & 0x40 is the V flag
    dumpf (R_P_V, R_VALUE, "    P = (P & 0xbf) | (ZN & 0x40); // Set V\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x35:                   // [and_zpx]

  // static void and_zpx () // 0x35
  // {
  // savepc=get6502memoryFast(PC++)+X;
  // savepc &= 0x00ff;
  // value=get6502memory(savepc);
  // A &= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    temp = rom[opadd + 1];
    dumpf (Always, R_X | Always, "    temp=(0x%04X + X)&0xFF;\n", temp);
    dumpf (Always, Always, "    A &= ram[temp];\n");
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x36:                   // [rol_zpx]

  // static void rol_zpx () // 0x36
  // {
  // int saveflags=(P & 0x01);
  // savepc=get6502memoryFast(PC++)+X;
  // savepc &= 0x00ff;
  // value=get6502memory(savepc);
  // P= (P & 0xfe) | ((value >> 7) & 0x01);
  // value = value << 1;
  // value |= saveflags;
  // DO_Z (value);
  // DO_N (value);
  // put6502memory(savepc,value);
  // clockticks += 6;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (6);
    temp = rom[opadd + 1];
    dumpf (R_SAVEFLAGS, R_P_C, "    saveflags=(C != 0 ? 1 : 0);\n");
    dumpf (Always, R_X | Always, "    temp=(0x%04X + X)&0xFF;\n", temp);
    dumpf (Always, Always, "    ZN=ram[temp];\n");
    dumpf (R_P_C, R_VALUE, "    C = ZN & 0x80;\n");
    dumpf (Always, Always, "    ZN = ZN << 1;\n");
    dumpf (R_VALUE, Always, "    ZN |= saveflags;\n");
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    dumpf (Always, R_VALUE, "    ram[temp] = ZN;\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x37:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x38:                   // [sec_implied]

  // static void sec_implied () // 0x38
  // {
  // P |= 0x01;
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    dumpf (R_P_C, 0, "    C = 1;\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x39:                   // [and_absy]

  // static void and_absy () // 0x39
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // if ((savepc >> 8) != ((savepc+Y) >> 8))
  // clockticks++;
  // savepc += Y;
  // value=get6502memory(savepc);
  // A &= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (R_A, R_A | R_Y | Always, "    A &= ram[(unsigned short)(0x%04X + Y)];\n", temp);
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");

    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);
    flush (R_FLUSH);
    /* NO FLUSH */
        return;

  case 0x3A:                   // [dea_implied]

  // static void dea_implied () // 0x3a
  // {
  // A--;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    dumpf (R_A, R_A, "    A--;\n");
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x3B:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x3C:                   // [bit_absx]

  // static void bit_absx () // 0x3c
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // if ((savepc >> 8) != ((savepc+X) >> 8))
  // clockticks++;
  // savepc += X;
  // value=get6502memory(savepc);
  // DO_Z (value & A);
  // P = (P & 0x3f) | (value & 0xc0);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    // Bits Data:7 and Data:6 are transferred to P:N and P:V respectively
    // P:Z is set to 1 iff Data&A==0
    dumpf (R_VALUE | R_P_N | Always, Always | R_X, "    ZN=ram[(unsigned short)(0x%04X + X)];   // N is correct, Z is not.  Asteroids never tests Z after a Bit instruction...\n",
           temp);
    dumpf (R_P_Z, R_VALUE | R_A, "    // DO_Z (ZN & A); // *** Not compatible with our ZN hack!\n");
    // P & 0x40 is the V flag
    dumpf (R_P_V, R_VALUE, "    P = (P & 0xbf) | (ZN & 0x40); // Set V\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x3D:                   // [and_absx]

  // static void and_absx () // 0x3d
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // if ((savepc >> 8) != ((savepc+X) >> 8))
  // clockticks++;
  // savepc += X;
  // value=get6502memory(savepc);
  // A &= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (Always, R_X | Always, "    A &= ram[(unsigned short)(0x%04X + X)];\n", temp);
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x3E:                   // [rol_absx]

  // static void rol_absx () // 0x3e
  // {
  // int saveflags=(P & 0x01);
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // savepc += X;
  // value=get6502memory(savepc);
  // P= (P & 0xfe) | ((value >> 7) & 0x01);
  // value = value << 1;
  // value |= saveflags;
  // DO_Z (value);
  // DO_N (value);
  // put6502memory(savepc,value);
  // clockticks += 7;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (7);
    tempword (opadd);
    dumpf (R_SAVEFLAGS, R_P_C, "    saveflags = (C != 0 ? 1 : 0);\n");
    dumpf (Always, R_X | Always, "    ZN=ram[(unsigned short)(0x%04X + X)];\n", temp);
    dumpf (R_P_C, R_VALUE, "    C = ZN & 0x80;\n");
    dumpf (R_VALUE, R_VALUE, "    ZN = ZN << 1;\n");
    dumpf (R_VALUE, Always, "    ZN |= saveflags;\n");
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    dumpf (Always, R_X | R_VALUE, "    ram[(unsigned short)(0x%04X + X)] = ZN;\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x3F:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x40:                   // [rti_implied]

  // static void rti_implied () // 0x40
  // {
  // P=get6502memory(++S+0x100);
  // P |= 0x20;
  // PC=get6502memory(++S+0x100);
  // PC |= get6502memory(++S+0x100) << 8;
  // clockticks += 6;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (6);
    dumpf (Always, Always, "    P = stack[++S] | 0x20; /* RTI - needs work */\n");
    dumpf (Always, Always, "    PC=stack[++S];\n");
    dumpf (Always, Always, "    PC|=((unsigned short)(stack[++S])<<8);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
// NOTE: We probably do not want to poll_nmi() before returning...
    unconditional_flush ("return; /* Pop address where interrupt came from */\n");
    return;

  case 0x41:                   // [eor_indx]

  // static void eor_indx () // 0x41
  // {
  // unsigned char tmp=get6502memoryFast(PC++);
  // tmp += X;
  // savepc=get6502memory(tmp++);
  // savepc |= get6502memory(tmp) << 8;
  // value=get6502memory(savepc);
  // A ^= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 6;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (6);
    temp = rom[opadd + 1];
    dumpf (Always, Always, "    temp+=X;\n");
    dumpf (Always, Always, "    temp=ram[(unsigned short)(0x%04X + 1)];\n", temp);
    dumpf (Always, Always, "    temp<<=8;\n");
    dumpf (Always, Always, "    temp|=ram[0x%04X];\n", temp);
    dumpf (Always, Always, "    ZN=ram[temp];\n");

    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);
    flush (R_FLUSH);
    /* NO FLUSH */
        return;

  case 0x42:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x43:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x44:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x45:                   // [eor_zp]

  // static void eor_zp () // 0x45
  // {
  // savepc=get6502memoryFast(PC++);
  // value=get6502memory(savepc);
  // A ^= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (Always, Always, "    A^=ram[0x%04X];\n", temp);
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x46:                   // [lsr_zp]

  // static void lsr_zp () // 0x46
  // {
  // savepc=get6502memoryFast(PC++);
  // value=get6502memory(savepc);
  // P= (P & 0xfe) | (value & 0x01);
  // value = value >> 1;
  // put6502memory(savepc,value);
  // DO_Z (value);
  // DO_N (value);
  // clockticks += 5;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (5);
    temp = rom[opadd + 1];
    dumpf (R_VALUE | Always, Always, "    ZN=ram[0x%04X];\n", temp);
    dumpf (R_P_C, R_VALUE, "    C = ZN & 0x01;\n");
    dumpf (R_VALUE, R_VALUE, "    ZN = ZN >> 1;\n");
    dumpf (Always, R_VALUE, "    ram[0x%04X] = ZN;\n", temp);
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x47:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x48:                   // [pha_implied]

  // static void pha_implied () // 0x48
  // {
  // put6502memory(0x100+S--,A);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    dumpf (Always, Always, "    stack[S--] = A;\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x49:                   // [eor_immediate]

  // static void eor_immediate () // 0x49
  // {
  // savepc=PC++;
  // value=get6502memory(savepc);
  // A ^= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (R_A, R_A, "    A ^= 0x%02X;\n", temp);
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x4A:                   // [lsra_implied]

  // static void lsra_implied () // 0x4a
  // {
  // P= (P & 0xfe) | (A & 0x01);
  // A = A >> 1;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    dumpf (R_P_C, R_A, "    C = A & 0x01;\n");
    dumpf (R_A, R_A, "    A = A >> 1;\n");
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x4B:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x4C:                   // [jmp_abs]

  // static void jmp_abs () // 0x4c
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // PC=savepc;
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    tempword (opadd);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    dumpf (Always, Always, "    PC = 0x%04x;\n", temp);
    unconditional_flush ("return;\n");
    return;

  case 0x4D:                   // [eor_abs]

  // static void eor_abs () // 0x4d
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // value=get6502memory(savepc);
  // A ^= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (Always, Always, "    ZN=ram[0x%04X];\n", temp);

    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);
    flush (R_FLUSH);
    /* NO FLUSH */
        return;

  case 0x4E:                   // [lsr_abs]

  // static void lsr_abs () // 0x4e
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // value=get6502memory(savepc);
  // P= (P & 0xfe) | (value & 0x01);
  // value = value >> 1;
  // put6502memory(savepc,value);
  // DO_Z (value);
  // DO_N (value);
  // clockticks += 6;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (6);
    tempword (opadd);
    dumpf (R_VALUE | Always, Always, "    ZN=ram[0x%04X];\n", temp);
    dumpf (R_P_C, R_VALUE, "    C = ZN & 0x01;\n");
    dumpf (R_VALUE, R_VALUE, "    ZN = ZN >> 1;\n");
    dumpf (Always, R_VALUE, "    ram[0x%04X] = ZN;\n", temp);
    /* NO FLUSH */
        return;

  case 0x4F:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x50:                   // [bvc_relative]

  // static void bvc_relative () // 0x50
  // {
  // if ((P & 0x40)==0)
  // {
  // savepc=get6502memoryFast(PC++);
  // if (savepc & 0x80) savepc -= 0x100;
  // if ((savepc >> 8) != (PC >> 8))
  // clockticks++;
  // PC += savepc;
  // clockticks++;
  // }
  // else
  // PC++;
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    temp = rom[opadd + 1];
    if (temp & 0x80)
      temp -= 0x100;
    dumpf (Always, R_P_V, "    if ((P & 0x40) == 0) /* BVC */\n");
    dumpf (Always, Always, "    {\n");
    conditional_clockticks (1);
    if (DEBUG) { dumpf (Always, Always, "        //trace_PC(0x%04X);\n", opadd); }
    dumpf (Always, Always, "        PC = 0x%04x;\n", (opadd + temp + 2) & 0x7FFF);
    conditional_flush ("    return;\n");
    dumpf (Always, Always, "    }\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x51:                   // [eor_indy]

  // static void eor_indy () // 0x51
  // {
  // unsigned char tmp=get6502memoryFast(PC++);
  // savepc=get6502memory(tmp++);
  // savepc |= get6502memory(tmp) << 8;
  // if ((savepc >> 8) != ((savepc+Y) >> 8))
  // clockticks++;
  // savepc += Y;
  // value=get6502memory(savepc);
  // A ^= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 5;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (5);       // TODO: add 1 if boundary crossed
    temp = rom[opadd + 1];
#ifdef SAMESEX
    dumpf (Always, Always | R_Y, "    A ^= ram[(unsigned short)((*((unsigned short *)&ram[0x%04x]))+Y)]; /* Assume it won't wrap at 64K */\n", temp);
#else // other sex or sex unknown
    dumpf (Always, Always | R_Y, "    A ^= ram[(unsigned short)(((ram[0x%04X]<<8)|ram[0x%04x])+Y)]; /* Assume it won't wrap at 64K */\n", (temp + 1) & 0xffff, temp);
#endif
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x52:                   // [eor_indzp]

  // static void eor_indzp () // 0x52
  // {
  // unsigned char tmp=get6502memoryFast(PC++);
  // savepc=get6502memory(tmp++);
  // savepc |= get6502memory(tmp) << 8;
  // value=get6502memory(savepc);
  // A ^= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (Always, Always, "    temp=ram[(unsigned short)(0x%04X + 1)];\n", temp);
    dumpf (Always, Always, "    temp<<=8;\n");
    dumpf (Always, Always, "    temp|=ram[0x%04X];\n", temp);
    dumpf (Always, Always, "    ZN=ram[temp];\n");

    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);
    flush (R_FLUSH);
    /* NO FLUSH */
        return;

  case 0x53:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x54:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x55:                   // [eor_zpx]

  // static void eor_zpx () // 0x55
  // {
  // savepc=get6502memoryFast(PC++)+X;
  // savepc &= 0x00ff;
  // value=get6502memory(savepc);
  // A ^= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    temp = rom[opadd + 1];
    dumpf (Always, R_X | Always, "    temp=(0x%04X + X)&0xFF;\n", temp);
    dumpf (Always, Always, "    ZN=ram[temp];\n");
    dumpf (Always, Always, "    A ^= ZN;\n");
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x56:                   // [lsr_zpx]

  // static void lsr_zpx () // 0x56
  // {
  // savepc=get6502memoryFast(PC++)+X;
  // savepc &= 0x00ff;
  // value=get6502memory(savepc);
  // P= (P & 0xfe) | (value & 0x01);
  // value = value >> 1;
  // put6502memory(savepc,value);
  // DO_Z (value);
  // DO_N (value);
  // clockticks += 6;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (6);
    temp = rom[opadd + 1];
    dumpf (Always, R_X | Always, "    temp=(0x%04X + X)&0xFF;\n", temp);
    dumpf (Always, Always, "    ZN=ram[temp];\n");

    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);
    flush (R_FLUSH);
    /* NO FLUSH */
        return;

  case 0x57:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x58:                   // [cli_implied]

  // static void cli_implied () // 0x58
  // {
  // P &= 0xfb;
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);
    flush (R_FLUSH);
    /* NO FLUSH */
        return;

  case 0x59:                   // [eor_absy]

  // static void eor_absy () // 0x59
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // if ((savepc >> 8) != ((savepc+Y) >> 8))
  // clockticks++;
  // savepc += Y;
  // value=get6502memory(savepc);
  // A ^= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (Always, R_Y | Always, "    ZN=ram[(unsigned short)(0x%04X + Y)];\n", temp);

    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);
    flush (R_FLUSH);
    /* NO FLUSH */
        return;

  case 0x5A:                   // [phy_implied]

  // static void phy_implied () // 0x5a
  // {
  // put6502memory(0x100+S--,Y);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);

    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);
    flush (R_FLUSH);
    /* NO FLUSH */
        return;

  case 0x5B:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x5C:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x5D:                   // [eor_absx]

  // static void eor_absx () // 0x5d
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // if ((savepc >> 8) != ((savepc+X) >> 8))
  // clockticks++;
  // savepc += X;
  // value=get6502memory(savepc);
  // A ^= value;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (Always, R_X | Always, "    ZN=ram[(unsigned short)(0x%04X + X)];\n", temp);
    dumpf (Always, Always, "    A ^= ZN;\n");
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x5E:                   // [lsr_absx]

  // static void lsr_absx () // 0x5e
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // savepc += X;
  // value=get6502memory(savepc);
  // P= (P & 0xfe) | (value & 0x01);
  // value = value >> 1;
  // put6502memory(savepc,value);
  // DO_Z (value);
  // DO_N (value);
  // clockticks += 7;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (7);
    tempword (opadd);
    dumpf (Always, R_X | Always, "    ZN=ram[(unsigned short)(0x%04X + X)];\n", temp);

    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);
    flush (R_FLUSH);
    /* NO FLUSH */
        return;

  case 0x5F:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x60:                   // [rts_implied]

  // static void rts_implied () // 0x60
  // {
  // PC=get6502memory(++S+0x100);
  // PC |= get6502memory(++S+0x100) << 8;
  // PC++;
  // clockticks += 6;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (6);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    dumpf (Always, Always, "    PC=stack[++S];\n");
    dumpf (Always, Always, "    PC|=(unsigned short)(stack[++S])<<8;\n");
    dumpf (Always, Always, "    PC++;     \n");
    unconditional_flush ("return;\n");
    return;

  case 0x61:                   // [adc_indx]

  // static void adc_indx () // 0x61
  // {
  // unsigned char tmp=get6502memoryFast(PC++);
  // tmp += X;
  // savepc=get6502memory(tmp++);
  // savepc |= get6502memory(tmp) << 8;
  // ADC (savepc);
  // clockticks += 6;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (6);
    temp = rom[opadd + 1];
    dumpf (Always, Always, "    temp+=X;\n");
    dumpf (Always, Always, "    temp=ram[(unsigned short)(0x%04X + 1)];\n", temp);
    dumpf (Always, Always, "    temp<<=8;\n");
    dumpf (Always, Always, "    temp|=ram[0x%04X];\n", temp);
    dumpf (Always, Always, "    ZN=ram[temp];\n");

    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);
    flush (R_FLUSH);
    /* NO FLUSH */
        return;

  case 0x62:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x63:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x64:                   // [stz_zp]

  // static void stz_zp () // 0x64
  // {
  // savepc=get6502memoryFast(PC++);
  // put6502memory(savepc,0);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (Always, Always, "    ZN=ram[0x%04X];\n", temp);

    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);
    flush (R_FLUSH);
    /* NO FLUSH */
        return;

  case 0x65:                   // [adc_zp]

  // static void adc_zp () // 0x65
  // {
  // savepc=get6502memoryFast(PC++);
  // ADC (savepc);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (Always | R_P_Z | R_P_N | R_P_V | R_P_C, Always | R_P_C | R_P_D, "    ADC(ram[0x%04X]);\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x66:                   // [ror_zp]

  // static void ror_zp () // 0x66
  // {
  // int saveflags = (C != 0 ? 1 : 0);
  // savepc=get6502memoryFast(PC++);
  // value=get6502memory(savepc);
  // P= (P & 0xfe) | (value & 0x01);
  // value = value >> 1;
  // if (saveflags) value |= 0x80;
  // DO_Z (value);
  // DO_N (value);
  // put6502memory(savepc,value);
  // clockticks += 5;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (5);
    temp = rom[opadd + 1];
    dumpf (R_SAVEFLAGS, R_P_C, "    saveflags = (C != 0 ? 1 : 0);\n");
    dumpf (R_VALUE | Always, Always, "    ZN=ram[0x%04X];\n", temp);
    dumpf (R_P_C, R_VALUE, "    C = ZN & 0x01;\n");
    dumpf (R_VALUE, R_VALUE, "    ZN = ZN >> 1;\n");
    dumpf (R_VALUE, R_SAVEFLAGS | R_VALUE, "    if (saveflags) ZN |= 0x80;\n");
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    dumpf (Always, R_VALUE, "    ram[0x%04X] = ZN;\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x67:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x68:                   // [pla_implied]

  // static void pla_implied () // 0x68
  // {
  // A=get6502memory(++S+0x100);
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    dumpf (Always, Always, "    A=stack[++S];\n");;
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x69:                   // [adc_immediate]

  // static void adc_immediate () // 0x69
  // {
  // savepc=PC++;
  // ADC (savepc);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (Always | R_P_Z | R_P_N | R_P_V | R_P_C, Always | R_P_C | R_P_D, "    ADC(0x%02X);\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x6A:                   // [rora_implied]

  // static void rora_implied () // 0x6a
  // {
  // int saveflags = (C != 0 ? 1 : 0);
  // P= (P & 0xfe) | (A & 0x01);
  // A = A >> 1;
  // if (saveflags) A |= 0x80;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    dumpf (R_SAVEFLAGS, R_P_C, "    saveflags = C;\n");
    dumpf (R_P_C, R_A, "    C = A & 0x01;\n");
    dumpf (R_A, R_A, "    A = A >> 1;\n");
    dumpf (R_A, R_A | R_SAVEFLAGS, "    if (saveflags) A |= 0x80;\n");
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x6B:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x6C:                   // [jmp_indirect]

  // static void jmp_indirect () // 0x6c
  // {
  // unsigned short help;
  // help=get6502memoryFast(PC++);
  // help |= get6502memoryFast(PC++) << 8;
  // savepc=get6502memory(help++);
  // savepc |= get6502memory(help) << 8;
  // PC=savepc;
  // clockticks += 5;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (5);

    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);
    flush (R_FLUSH);
    /* NO FLUSH */
        return;

  case 0x6D:                   // [adc_abs]

  // static void adc_abs () // 0x6d
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // ADC (savepc);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (Always | R_P_Z | R_P_N | R_P_V | R_P_C, Always | R_P_C | R_P_D, "    ADC(ram[0x%04X]);\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x6E:                   // [ror_abs]

  // static void ror_abs () // 0x6e
  // {
  // int saveflags = (C != 0 ? 1 : 0);
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // value=get6502memory(savepc);
  // P= (P & 0xfe) | (value & 0x01);
  // value = value >> 1;
  // if (saveflags) value |= 0x80;
  // DO_Z (value);
  // DO_N (value);
  // put6502memory(savepc,value);
  // clockticks += 6;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (6);
    tempword (opadd);
    dumpf (R_SAVEFLAGS, R_P_C, "    saveflags = C;\n");
    dumpf (R_VALUE | Always, Always, "    ZN=ram[0x%04X];\n", temp);
    dumpf (R_P_C, R_VALUE, "    C = ZN & 0x01;\n");
    dumpf (R_VALUE, R_VALUE, "    ZN = ZN >> 1;\n");
    dumpf (R_VALUE, R_SAVEFLAGS | R_VALUE, "    if (saveflags) ZN |= 0x80;\n");
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    dumpf (Always, Always | R_VALUE, "    ram[0x%04X] = ZN;\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x6F:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x70:                   // [bvs_relative]

  // static void bvs_relative () // 0x70
  // {
  // if (P & 0x40)
  // {
  // savepc=get6502memoryFast(PC++);
  // if (savepc & 0x80) savepc -= 0x100;
  // if ((savepc >> 8) != (PC >> 8))
  // clockticks++;
  // PC += savepc;
  // clockticks++;
  // }
  // else
  // PC++;
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    temp = rom[opadd + 1];
    if (temp & 0x80)
      temp -= 0x100;
    dumpf (Always, R_P_V, "    if (P & 0x40) /* BVS */\n");
    dumpf (Always, Always, "    {\n");
    conditional_clockticks (1);
    if (DEBUG) { dumpf (Always, Always, "        //trace_PC(0x%04X);\n", opadd); }
    dumpf (Always, Always, "        PC = 0x%04x;\n", (opadd + temp + 2) & 0x7FFF);
    conditional_flush ("    return;\n");
    dumpf (Always, Always, "    }\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x71:                   // [adc_indy]

  // static void adc_indy () // 0x71
  // {
  // unsigned char tmp=get6502memoryFast(PC++);
  // savepc=get6502memory(tmp++);
  // savepc |= get6502memory(tmp) << 8;
  // if ((savepc >> 8) != ((savepc+Y) >> 8))
  // clockticks++;
  // savepc += Y;
  // ADC (savepc);
  // clockticks += 5;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (5);
    temp = rom[opadd + 1];
    dumpf (Always, Always, "    temp=ram[(unsigned short)(0x%04X + 1)];\n", temp);
    dumpf (Always, Always, "    temp<<=8;\n");
    dumpf (Always, Always, "    temp|=ram[0x%04X];\n", temp);
    dumpf (Always, Always, "    temp+=Y;\n");
    dumpf (Always | R_P_Z | R_P_N | R_P_V | R_P_C, Always | R_P_C | R_P_D, "    ADC(ram[temp]);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x72:                   // [adc_indzp]

  // static void adc_indzp () // 0x72
  // {
  // unsigned char tmp=get6502memoryFast(PC++);
  // savepc=get6502memory(tmp++);
  // savepc |= get6502memory(tmp) << 8;
  // ADC (savepc);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (Always, Always, "    temp=ram[(unsigned short)(0x%04X + 1)];\n", temp);
    dumpf (Always, Always, "    temp<<=8;\n");
    dumpf (Always, Always, "    temp|=ram[0x%04X];\n", temp);
    dumpf (Always | R_P_Z | R_P_N | R_P_V | R_P_C, Always | R_P_C | R_P_D, "    ADC(ram[temp]);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x73:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x74:                   // [stz_zpx]

  // static void stz_zpx () // 0x74
  // {
  // savepc=get6502memoryFast(PC++)+X;
  // savepc &= 0x00ff;
  // put6502memory(savepc,0);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    temp = rom[opadd + 1];
    dumpf (Always, R_X | Always, "    temp=(0x%04X + X)&0xFF;\n", temp);
    dumpf (Always, Always, "    ram[temp] = 0;\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x75:                   // [adc_zpx]

  // static void adc_zpx () // 0x75
  // {
  // savepc=get6502memoryFast(PC++)+X;
  // savepc &= 0x00ff;
  // ADC (savepc);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    temp = rom[opadd + 1];
    dumpf (Always | R_A | R_P_Z | R_P_N | R_P_V | R_P_C, Always | R_A | R_P_C | R_P_D | R_X, "    ADC(ram[(unsigned char)(0x%02X + X)]); /* zero page */\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x76:                   // [ror_zpx]

  // static void ror_zpx () // 0x76
  // {
  // int saveflags = (C != 0 ? 1 : 0);
  // savepc=get6502memoryFast(PC++)+X;
  // savepc &= 0x00ff;
  // value=get6502memory(savepc);
  // P= (P & 0xfe) | (value & 0x01);
  // value = value >> 1;
  // if (saveflags) value |= 0x80;
  // DO_Z (value);
  // DO_N (value);
  // put6502memory(savepc,value);
  // clockticks += 6;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (6);
    temp = rom[opadd + 1];
    dumpf (R_SAVEFLAGS, R_P_C, "    saveflags = C;\n");
    dumpf (Always, R_X | Always, "    temp=(0x%04X + X)&0xFF;\n", temp);
    dumpf (R_VALUE | Always, Always, "    ZN=ram[temp];\n");
    dumpf (R_P_C, R_VALUE, "    C = ZN & 0x01;\n");
    dumpf (R_VALUE, R_VALUE, "    ZN = ZN >> 1;\n");
    dumpf (R_VALUE, R_SAVEFLAGS | R_VALUE, "    if (saveflags) ZN |= 0x80;\n");
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    dumpf (Always, Always, "    ram[temp] = ZN;\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x77:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x78:                   // [sei_implied]

  // static void sei_implied () // 0x78
  // {
  // P |= 0x04;
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    dumpf (Always, Always, "    P |= 0x04;\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x79:                   // [adc_absy]

  // static void adc_absy () // 0x79
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // if ((savepc >> 8) != ((savepc+Y) >> 8))
  // clockticks++;
  // savepc += Y;
  // ADC (savepc);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (Always | R_P_Z | R_P_N | R_P_V | R_P_C, R_Y | Always | R_P_C | R_P_D, "    ADC(ram[(unsigned short)(0x%04X + Y)]);\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x7A:                   // [ply_implied]

  // static void ply_implied () // 0x7a
  // {
  // Y=get6502memory(++S+0x100);
  // DO_Z (Y);
  // DO_N (Y);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    dumpf (Always, Always, "    Y=stack[++S];\n");
    dumpf (Always, Always, "    DO_Z (Y);\n");
    // dumpf(Always, Always, " DO_N (Y);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x7B:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x7C:                   // [jmp_indabsx]

  // static void jmp_indabsx () // 0x7c
  // {
  // unsigned short help=get6502memoryFast(PC++);
  // help |= get6502memoryFast(PC++) << 8;
  // help += X;
  // savepc=get6502memory(help++);
  // savepc |= get6502memory(help) << 8;
  // PC=savepc;
  // clockticks += 6;
  // }

    tempword (opadd);

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (6);
    dumpf (Always, R_X | Always, "    temp=(0x%04X + X)&0x7FFF;\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    dumpf (Always, Always, "    PC=ram[(unsigned short)(temp+1)];\n");
    dumpf (Always, Always, "    PC<<=8;\n");
    dumpf (Always, Always, "    PC|=ram[temp];\n");
    unconditional_flush ("return;\n");
    return;

  case 0x7D:                   // [adc_absx]

  // static void adc_absx () // 0x7d
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // if ((savepc >> 8) != ((savepc+X) >> 8))
  // clockticks++;
  // savepc += X;
  // ADC (savepc);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (Always | R_A | R_P_Z | R_P_N | R_P_V | R_P_C, R_X | Always | R_A | R_P_C | R_P_D, "    ADC(ram[(unsigned short)(0x%04X + X)]);\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x7E:                   // [ror_absx]

  // static void ror_absx () // 0x7e
  // {
  // int saveflags = (C != 0 ? 1 : 0);
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // savepc += X;
  // value=get6502memory(savepc);
  // P= (P & 0xfe) | (value & 0x01);
  // value = value >> 1;
  // if (saveflags) value |= 0x80;
  // DO_Z (value);
  // DO_N (value);
  // put6502memory(savepc,value);
  // clockticks += 7;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (7);
    tempword (opadd);
    dumpf (R_SAVEFLAGS, R_P_C, "    saveflags = C;\n");
    dumpf (R_VALUE | Always, R_X | Always, "    ZN=ram[(unsigned short)(0x%04X + X)];\n", temp);
    dumpf (R_P_C, R_VALUE, "    C = ZN & 0x01;\n");
    dumpf (R_VALUE, R_VALUE, "    ZN = ZN >> 1;\n");
    dumpf (R_VALUE, R_SAVEFLAGS | R_VALUE, "    if (saveflags) ZN |= 0x80;\n");
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    dumpf (Always, R_X | R_VALUE, "    ram[(unsigned short)(0x%04X + X)] = ZN;\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x7F:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x80:                   // [bra_relative]

  // static void bra_relative () // 0x80
  // {
  // savepc=get6502memoryFast(PC++);
  // if (savepc & 0x80) savepc -= 0x100;
  // if ((savepc >> 8) != (PC >> 8))
  // clockticks++;
  // PC += savepc;
  // clockticks++;
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    temp = rom[opadd + 1];
    if (temp & 0x80)
      temp -= 0x100;
    if (DEBUG) { dumpf (Always, Always, "        //trace_PC(0x%04X);\n", opadd); }
    dumpf (Always, Always, "        PC = 0x%04x;\n", (opadd + temp + 2) & 0x7FFF);
    conditional_flush ("    return;\n");
    /* NO FLUSH */
        return;

  case 0x81:                   // [sta_indx]

  // static void sta_indx () // 0x81
  // {
  // unsigned char tmp=get6502memoryFast(PC++);
  // tmp += X;
  // savepc=get6502memory(tmp++);
  // savepc |= get6502memory(tmp) << 8;
  // put6502memory(savepc,A);
  // clockticks += 6;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (6);
    temp = rom[opadd + 1];
    dumpf (Always, Always, "    temp=ram[(unsigned short)(0x%04X + X + 1)];\n", temp);
    dumpf (Always, Always, "    temp<<=8;\n");
    dumpf (Always, R_X | Always, "    temp|=ram[(unsigned short)(0x%04X + X)];\n", temp);
    dumpf (Always, Always, "    ram[temp] = A;\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x82:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x83:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);

    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x84:                   // [sty_zp]

  // static void sty_zp () // 0x84
  // {
  // savepc=get6502memoryFast(PC++);
  // put6502memory(savepc,Y);
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    temp = rom[opadd + 1];
    dumpf (Always, R_Y, "    ram[0x%04X] = Y;\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x85:                   // [sta_zp]

  // static void sta_zp () // 0x85
  // {
  // savepc=get6502memoryFast(PC++);
  // put6502memory(savepc,A);
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    temp = rom[opadd + 1];
    dumpf (Always, R_A, "    ram[0x%04X] = A;\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x86:                   // [stx_zp]

  // static void stx_zp () // 0x86
  // {
  // savepc=get6502memoryFast(PC++);
  // put6502memory(savepc,X);
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    temp = rom[opadd + 1];
    dumpf (Always, Always, "    ram[0x%04X] = X;\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x87:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x88:                   // [dey_implied]

  // static void dey_implied () // 0x88
  // {
  // Y--;
  // if (Y) P &= 0xfd; else P |= 0x02;
  // if (Y & 0x80) P |= 0x80; else P &= 0x7f;
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    dumpf (R_Y, R_Y, "    Y--;\n");
    dumpf (R_P_Z | R_P_N, R_Y, "    ZN = Y;\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x89:                   // [bit_immediate]

  // static void bit_immediate () // 0x89
  // {
  // savepc=PC++;
  // value=get6502memory(savepc);
  // DO_Z (value & A);
  // P = (P & 0x3f) | (value & 0xc0);
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    temp = rom[opadd + 1];
    // Bits Data:7 and Data:6 are transferred to P:N and P:V respectively
    // P:Z is set to 1 iff Data&A==0
    dumpf (R_VALUE | R_P_N, 0, "    ZN=0x%02X;   // N is correct, Z is not.  Asteroids never tests Z after a Bit instruction...\n", temp);
    dumpf (R_P_Z, R_VALUE | R_A, "    // DO_Z (ZN & A); // *** Not compatible with our ZN hack!\n");
    // P & 0x40 is the V flag
    dumpf (R_P_V, R_VALUE, "    P = (P & 0xbf) | (ZN & 0x40); // Set V\n");

    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);
    flush (R_FLUSH);
    /* NO FLUSH */
        return;

  case 0x8A:                   // [txa_implied]

  // static void txa_implied () // 0x8a
  // {
  // A=X;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    dumpf (Always, Always, "    A=X;\n");
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x8B:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x8C:                   // [sty_abs]

  // static void sty_abs () // 0x8c
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // put6502memory(savepc,Y);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (Always, Always, "    ram[0x%04X] = Y;\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x8D:                   // [sta_abs]

  // static void sta_abs () // 0x8d
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // put6502memory(savepc,A);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (Always, R_A, "    ram[0x%04X] = A;\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x8E:                   // [stx_abs]

  // static void stx_abs () // 0x8e
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // put6502memory(savepc,X);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (Always, Always, "    ram[0x%04X] = X;\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x8F:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x90:                   // [bcc_relative]

  // static void bcc_relative () // 0x90
  // {
  // if ((P & 0x01)==0)
  // {
  // savepc=get6502memoryFast(PC++);
  // if (savepc & 0x80) savepc -= 0x100;
  // if ((savepc >> 8) != (PC >> 8))
  // clockticks++;
  // PC += savepc;
  // clockticks++;
  // }
  // else
  // PC++;
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    temp = rom[opadd + 1];
    if (temp & 0x80)
      temp -= 0x100;
    dumpf (Always, Always, "    if (C == 0) /* BCC */\n");
    dumpf (Always, Always, "    {\n");
    conditional_clockticks (1);
    if (DEBUG) { dumpf (Always, Always, "        //trace_PC(0x%04X);\n", opadd); }
    dumpf (Always, Always, "        PC = 0x%04x;\n", (opadd + temp + 2) & 0x7FFF);
    conditional_flush ("    return;\n");
    dumpf (Always, Always, "    }\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x91:                   // [sta_indy]

  // static void sta_indy () // 0x91
  // {
  // unsigned char tmp=get6502memoryFast(PC++);
  // savepc=get6502memory(tmp++);
  // savepc |= get6502memory(tmp) << 8;
  // savepc += Y;
  // put6502memory(savepc,A);
  // clockticks += 6;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (6);
    temp = rom[opadd + 1];
// Oops - forgot 'SAMESEX' test
    dumpf (Always, Always | R_Y | R_A, "    ram[(unsigned short)(*(((unsigned short *)&ram[0x%04X])+Y))] = A; /* Is (ind),Y handled correctly??? */\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x92:                   // [sta_indzp]

  // static void sta_indzp () // 0x92
  // {
  // unsigned char tmp=get6502memoryFast(PC++);
  // savepc=get6502memory(tmp++);
  // savepc |= get6502memory(tmp) << 8;
  // put6502memory(savepc,A);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (Always, Always, "    temp=ram[(unsigned short)(0x%04X + 1)];\n", temp);
    dumpf (Always, Always, "    temp<<=8;\n");
    dumpf (Always, Always, "    temp|=ram[0x%04X];\n", temp);
    dumpf (Always, Always, "    ram[temp] = A;\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x93:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x94:                   // [sty_zpx]

  // static void sty_zpx () // 0x94
  // {
  // savepc=get6502memoryFast(PC++)+X;
  // savepc &= 0x00ff;
  // put6502memory(savepc,Y);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    temp = rom[opadd + 1];
    dumpf (Always, R_X | Always, "    temp=(0x%04X + X)&0xFF;\n", temp);
    dumpf (Always, Always, "    ram[temp] = Y;\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x95:                   // [sta_zpx]

  // static void sta_zpx () // 0x95
  // {
  // savepc=get6502memoryFast(PC++)+X;
  // savepc &= 0x00ff;
  // put6502memory(savepc,A);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    temp = rom[opadd + 1];
    dumpf (Always, Always | R_A | R_X, "    ram[(unsigned char)(0x%02x + X)] = A;\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x96:                   // [stx_zpy]

  // static void stx_zpy () // 0x96
  // {
  // savepc=get6502memoryFast(PC++)+Y;
  // savepc &= 0x00ff;
  // put6502memory(savepc,X);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    temp = rom[opadd + 1];
    dumpf (Always, R_Y | Always, "    temp=(0x%04X + Y)&0xFF;\n", temp);
    dumpf (Always, Always, "    ram[temp] = X;\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x97:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x98:                   // [tya_implied]

  // static void tya_implied () // 0x98
  // {
  // A=Y;
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    dumpf (Always, Always, "    A=Y;\n");
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x99:                   // [sta_absy]

  // static void sta_absy () // 0x99
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // savepc += Y;
  // put6502memory(savepc,A);
  // clockticks += 5;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (5);
    tempword (opadd);
    dumpf (Always, R_Y | Always, "    ram[(unsigned short)(0x%04X + Y)] = A;\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x9A:                   // [txs_implied]

  // static void txs_implied () // 0x9a
  // {
  // S=X;
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    dumpf (Always, Always, "    S=X;\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x9B:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x9C:                   // [stz_abs]

  // static void stz_abs () // 0x9c
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // put6502memory(savepc,0);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (Always, Always, "    ram[0x%04X] = 0;\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x9D:                   // [sta_absx]

  // static void sta_absx () // 0x9d
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // savepc += X;
  // put6502memory(savepc,A);
  // clockticks += 5;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (5);
    tempword (opadd);
    if ((unsigned short) temp <= 0xFF00) {
      dumpf (Always, R_X | Always | R_A, "    ram[0x%04X + X /* can't wrap */] = A;\n", temp);
    } else {
      dumpf (Always, R_X | Always | R_A, "    ram[(unsigned short)(0x%04X + X)] = A;  /* force efficient wraparound */\n", temp);
    }
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x9E:                   // [stz_absx]

  // static void stz_absx () // 0x9e
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // savepc += X;
  // put6502memory(savepc,0);
  // clockticks += 5;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (5);
    tempword (opadd);
    dumpf (Always, R_X | Always, "    ram[(unsigned short)(0x%04X + X)] = 0;\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0x9F:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xA0:                   // [ldy_immediate]

  // static void ldy_immediate () // 0xa0
  // {
  // savepc=PC++;
  // Y=get6502memory(savepc);
  // DO_Z (Y);
  // DO_N (Y);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (R_Y, 0, "    Y=0x%02X;\n", temp);
    dumpf (R_P_Z | R_P_N, R_Y, "    ZN = Y;\n");
    // dumpf(R_P_N, R_Y, " DO_N (Y);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xA1:                   // [lda_indx]

  // static void lda_indx () // 0xa1
  // {
  // unsigned char tmp=get6502memoryFast(PC++);
  // tmp += X;
  // savepc=get6502memory(tmp++);
  // savepc |= get6502memory(tmp) << 8;
  // A=get6502memory(savepc);
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 6;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (6);
    temp = rom[opadd + 1];
    dumpf (Always, Always, "    temp+=X;\n");
    dumpf (Always, Always, "    temp=ram[(unsigned short)(0x%04X + 1)];\n", temp);
    dumpf (Always, Always, "    temp<<=8;\n");
    dumpf (Always, Always, "    temp|=ram[0x%04X];\n", temp);
    dumpf (Always, Always, "    A=ram[temp];\n");
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xA2:                   // [ldx_immediate]

  // static void ldx_immediate () // 0xa2
  // {
  // savepc=PC++;
  // X=get6502memory(savepc);
  // DO_Z (X);
  // DO_N (X);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (Always, Always, "    X=0x%02X;\n", temp);
    dumpf (R_P_Z | R_P_N, R_X, "    ZN = X;\n");
    // dumpf(R_P_N, R_X, " DO_N (X);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xA3:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xA4:                   // [ldy_zp]

  // static void ldy_zp () // 0xa4
  // {
  // savepc=get6502memoryFast(PC++);
  // Y=get6502memory(savepc);
  // DO_Z (Y);
  // DO_N (Y);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (R_Y, Always, "    Y=ram[0x%04X];\n", temp);
    dumpf (R_P_Z | R_P_N, R_Y, "    ZN = Y;\n");
    // dumpf(Always, Always, " DO_N (Y);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xA5:                   // [lda_zp]

  // static void lda_zp () // 0xa5
  // {
  // savepc=get6502memoryFast(PC++);
  // A=get6502memory(savepc);
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (R_A, Always, "    A=ram[0x%04X];\n", temp);
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xA6:                   // [ldx_zp]

  // static void ldx_zp () // 0xa6
  // {
  // savepc=get6502memoryFast(PC++);
  // X=get6502memory(savepc);
  // DO_Z (X);
  // DO_N (X);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (Always, Always, "    X=ram[0x%04X];\n", temp);
    dumpf (R_P_Z | R_P_N, R_X, "    ZN = X;\n");
    // dumpf(R_P_N, R_X, " DO_N (X);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xA7:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xA8:                   // [tay_implied]

  // static void tay_implied () // 0xa8
  // {
  // Y=A;
  // DO_Z (Y);
  // DO_N (Y);
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    dumpf (R_Y, R_A, "    Y=A;\n");
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xA9:                   // [lda_immediate]

  // static void lda_immediate () // 0xa9
  // {
  // savepc=PC++;
  // A=get6502memory(savepc);
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (R_A, 0, "    A=0x%02X;\n", temp);
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xAA:                   // [tax_implied]

  // static void tax_implied () // 0xaa
  // {
  // X=A;
  // DO_Z (X);
  // DO_N (X);
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    dumpf (R_X, R_A, "    X=A;\n");
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xAB:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xAC:                   // [ldy_abs]

  // static void ldy_abs () // 0xac
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // Y=get6502memory(savepc);
  // DO_Z (Y);
  // DO_N (Y);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (Always, Always, "    Y=ram[0x%04X];\n", temp);
    dumpf (Always, Always, "    DO_Z (Y);\n");
    // dumpf(Always, Always, " DO_N (Y);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xAD:                   // [lda_abs]

  // static void lda_abs () // 0xad
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // A=get6502memory(savepc);
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);

    if (temp == 0x2403) {
      dumpf (Always, Always, "    if(ram[0x2403]==0xFF) {\n");
      dumpf (Always, Always, "       ram[0x2403]=0; /* NO LONGER DONE IN WRITEMEM() */\n");
      dumpf (Always, Always, "       A=0xff;\n");
      dumpf (Always | R_A, Always, "    }\n");
    } else {
      dumpf (Always | R_A, Always, "    A=ram[0x%04X];\n", temp);
    }
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xAE:                   // [ldx_abs]

  // static void ldx_abs () // 0xae
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // X=get6502memory(savepc);
  // DO_Z (X);
  // DO_N (X);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (Always, Always, "    X=ram[0x%04X];\n", temp);
    dumpf (R_P_Z | R_P_N, R_X, "    ZN = X;\n");
    // dumpf(R_P_N, R_X, " DO_N (X);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xAF:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xB0:                   // [bcs_relative]

  // static void bcs_relative () // 0xb0
  // {
  // if (P & 0x01)
  // {
  // savepc=get6502memoryFast(PC++);
  // if (savepc & 0x80) savepc -= 0x100;
  // if ((savepc >> 8) != (PC >> 8))
  // clockticks++;
  // PC += savepc;
  // clockticks++;
  // }
  // else
  // PC++;
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    temp = rom[opadd + 1];
    if (temp & 0x80)
      temp -= 0x100;
    dumpf (Always, Always | R_P_C, "    if (C)\n");
    dumpf (Always, Always, "    {\n");
    conditional_clockticks (1);
    if (DEBUG) { dumpf (Always, Always, "        //trace_PC(0x%04X);\n", opadd); }
    dumpf (Always, Always, "        PC = 0x%04x;\n", (opadd + temp + 2) & 0x7FFF);
    conditional_flush ("    return;\n");
    dumpf (Always, Always, "    }\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xB1:                   // [lda_indy]

  // static void lda_indy () // 0xb1
  // {
  // unsigned char tmp=get6502memoryFast(PC++);
  // savepc=get6502memory(tmp++);
  // savepc |= get6502memory(tmp) << 8;
  // if ((savepc >> 8) != ((savepc+Y) >> 8))
  // clockticks++;
  // savepc += Y;
  // A=get6502memory(savepc);
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 5;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (5);
    temp = rom[opadd + 1];
    dumpf (Always, Always, "    temp=ram[(unsigned short)(0x%04X + 1)];\n", temp);
    dumpf (Always, Always, "    temp<<=8;\n");
    dumpf (Always, Always, "    temp|=ram[0x%04X];\n", temp);
    dumpf (Always, Always, "    temp+=Y;\n");
    dumpf (Always, Always, "    A=ram[temp];\n");
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xB2:                   // [lda_indzp]

  // static void lda_indzp () // 0xb2
  // {
  // unsigned char tmp=get6502memoryFast(PC++);
  // savepc=get6502memory(tmp++);
  // savepc |= get6502memory(tmp) << 8;
  // A=get6502memory(savepc);
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (Always, Always, "    temp=ram[(unsigned short)(0x%04X + 1)];\n", temp);
    dumpf (Always, Always, "    temp<<=8;\n");
    dumpf (Always, Always, "    temp|=ram[0x%04X];\n", temp);
    dumpf (Always, Always, "    A=ram[temp];\n");
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xB3:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xB4:                   // [ldy_zpx]

  // static void ldy_zpx () // 0xb4
  // {
  // savepc=get6502memoryFast(PC++)+X;
  // savepc &= 0x00ff;
  // Y=get6502memory(savepc);
  // DO_Z (Y);
  // DO_N (Y);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    temp = rom[opadd + 1];
    dumpf (Always, R_X | Always, "    temp=(0x%04X + X)&0xFF;\n", temp);
    dumpf (Always, Always, "    Y=ram[temp];\n");
    dumpf (Always, Always, "    DO_Z (Y);\n");
    // dumpf(Always, Always, " DO_N (Y);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xB5:                   // [lda_zpx]

  // static void lda_zpx () // 0xb5
  // {
  // savepc=get6502memoryFast(PC++)+X;
  // savepc &= 0x00ff;
  // A=get6502memory(savepc);
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    temp = rom[opadd + 1];
    dumpf (Always | R_A, Always | R_X, "    A=ram[(unsigned char)(0x%02x + X)];\n", temp);
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf (R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xB6:                   // [ldx_zpy]

  // static void ldx_zpy () // 0xb6
  // {
  // savepc=get6502memoryFast(PC++)+Y;
  // savepc &= 0x00ff;
  // X=get6502memory(savepc);
  // DO_Z (X);
  // DO_N (X);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    temp = rom[opadd + 1];
    dumpf (Always, R_Y | Always, "    temp=(0x%04X + Y)&0xFF;\n", temp);
    dumpf (Always, Always, "    ZN=ram[temp];\n");
    dumpf (R_P_Z | R_P_N, R_X, "    ZN = X;\n");
    // dumpf(R_P_N, R_X, " DO_N (X);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xB7:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xB8:                   // [clv_implied]

  // static void clv_implied () // 0xb8
  // {
  // P &= 0xbf;
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    dumpf (Always, Always, "    P &= 0xbf; /* CLV */\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xB9:                   // [lda_absy]

  // static void lda_absy () // 0xb9
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // if ((savepc >> 8) != ((savepc+Y) >> 8))
  // clockticks++;
  // savepc += Y;
  // A=get6502memory(savepc);
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    if ((unsigned short) temp <= 0xFF00) {
      dumpf (Always | R_A, R_Y | Always, "    A=ram[0x%04X + Y /* can't wrap */];\n", temp);
    } else {
      dumpf (Always | R_A, R_Y | Always, "    A=ram[(unsigned short)(0x%04X + Y)]; /* perform efficient masking/wraparound */\n", temp);
    }
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xBA:                   // [tsx_implied]

  // static void tsx_implied () // 0xba
  // {
  // X=S;
  // DO_Z (X);
  // DO_N (X);
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    dumpf (Always, Always, "    X=S;\n");
    dumpf (R_P_Z | R_P_N, R_X, "    ZN = X;\n");
    // dumpf(R_P_N, R_X, " DO_N (X);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xBB:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xBC:                   // [ldy_absx]

  // static void ldy_absx () // 0xbc
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // if ((savepc >> 8) != ((savepc+X) >> 8))
  // clockticks++;
  // savepc += X;
  // Y=get6502memory(savepc);
  // DO_Z (Y);
  // DO_N (Y);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (R_Y | Always, R_X | Always, "    Y=ram[(unsigned short)(0x%04X + X)];\n", temp);
    dumpf (R_P_Z | R_P_N, R_Y, "    ZN = Y;\n");
    // dumpf(Always, Always, " DO_N (Y);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xBD:                   // [lda_absx]

  // static void lda_absx () // 0xbd
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // if ((savepc >> 8) != ((savepc+X) >> 8))
  // clockticks++;
  // savepc += X;
  // A=get6502memory(savepc);
  // DO_Z (A);
  // DO_N (A);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    if ((unsigned short) temp <= 0xFF00) {
      dumpf (R_A, R_X | Always, "    A=ram[0x%04X + X /* can't wrap */];\n", temp);
    } else {
      dumpf (R_A, R_X | Always, "    A=ram[(unsigned short)(0x%04X + X)];\n", temp);
    }
    dumpf (R_P_Z | R_P_N, R_A, "    ZN = A;\n");
    // dumpf(R_P_N, R_A, " DO_N (A);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xBE:                   // [ldx_absy]

  // static void ldx_absy () // 0xbe
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // if ((savepc >> 8) != ((savepc+Y) >> 8))
  // clockticks++;
  // savepc += Y;
  // X=get6502memory(savepc);
  // DO_Z (X);
  // DO_N (X);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (Always, R_Y | Always, "    X=ram[(unsigned short)(0x%04X + Y)];\n", temp);
    dumpf (R_P_Z | R_P_N, R_X, "    ZN = X;\n");
    // dumpf(R_P_N, R_X, " DO_N (X);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xBF:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xC0:                   // [cpy_immediate]

  // static void cpy_immediate () // 0xc0
  // {
  // savepc=PC++;
  // value=get6502memory(savepc);
  // if (Y+0x100-value>0xff) P |= 0x01; else P &= 0xfe;
  // value=Y/*+0x100*/-value;
  // DO_Z (value);
  // DO_N (value);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (R_VALUE, Always, "    ZN=0x%02X;\n", temp);
    dumpf (R_P_C, R_Y | R_VALUE, "    C = (Y+0x100-ZN>0xff); /* Can probably do better? */\n");
    dumpf (R_P_Z | R_P_N, R_Y | R_VALUE, "    ZN=Y/*+0x100*/-ZN;\n");
// TODO: continue adding DO_Z (value) from here on down...
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xC1:                   // [cmp_indx]

  // static void cmp_indx () // 0xc1
  // {
  // unsigned char tmp=get6502memoryFast(PC++);
  // tmp += X;
  // savepc=get6502memory(tmp++);
  // savepc |= get6502memory(tmp) << 8;
  // value=get6502memory(savepc);
  // if (A+0x100-value>0xff) P |= 0x01; else P &= 0xfe;
  // value=A/*+0x100*/-value;
  // DO_Z (value);
  // DO_N (value);
  // clockticks += 6;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (6);
    temp = rom[opadd + 1];
    dumpf (R_VALUE, Always | R_X, "    ZN=ram[(unsigned short)(0x%04X + X /* surely not? + 1*/)];\n", temp);
    dumpf (R_VALUE, R_VALUE, "    ZN<<=8;\n");
    dumpf (Always | R_VALUE, R_X | Always | R_VALUE, "    ZN|=ram[(unsigned short)(0x%04X + X)];\n", temp);
    dumpf (R_P_Z | R_P_N, Always | R_VALUE, "    ZN=ram[ZN];\n");
    dumpf (R_P_C, R_A | R_VALUE, "    C = (A+0x100-ZN>0xff);\n");
    dumpf (Always, Always, "    ZN=A/*+0x100*/-ZN;\n");
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xC2:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xC3:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xC4:                   // [cpy_zp]

  // static void cpy_zp () // 0xc4
  // {
  // savepc=get6502memoryFast(PC++);
  // value=get6502memory(savepc);
  // if (Y+0x100-value>0xff) P |= 0x01; else P &= 0xfe;
  // value=Y/*+0x100*/-value;
  // DO_Z (value);
  // DO_N (value);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (Always, Always, "    ZN=ram[0x%04X];\n", temp);
    dumpf (R_P_C, R_Y | R_VALUE, "    C = (Y+0x100-ZN>0xff);\n");
    dumpf (Always, Always, "    ZN=Y/*+0x100*/-ZN;\n");
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xC5:                   // [cmp_zp]

  // static void cmp_zp () // 0xc5
  // {
  // savepc=get6502memoryFast(PC++);
  // value=get6502memory(savepc);
  // if (A+0x100-value>0xff) P |= 0x01; else P &= 0xfe;
  // value=A/*+0x100*/-value;
  // DO_Z (value);
  // DO_N (value);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (Always, Always, "    ZN=ram[0x%04X];\n", temp);
    dumpf (R_P_C, R_A | R_VALUE, "    C = (A+0x100-ZN>0xff);\n");
    dumpf (Always, Always, "    ZN=A/*+0x100*/-ZN;\n");
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xC6:                   // [dec_zp]

  // static void dec_zp () // 0xc6
  // {
  // savepc=get6502memoryFast(PC++);
  // value=get6502memory(savepc);
  // value--;
  // DO_Z (value);
  // DO_N (value);
  // put6502memory(savepc,value);
  // clockticks += 5;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (5);
    temp = rom[opadd + 1];
    dumpf (Always, Always, "    ZN=ram[0x%04X]-1;\n", temp);
    dumpf (Always, Always, "    ram[0x%04X] = ZN;\n", temp);
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xC7:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xC8:                   // [iny_implied]

  // static void iny_implied () // 0xc8
  // {
  // Y++;
  // DO_Z (Y);
  // DO_N (Y);
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    dumpf (R_Y, R_Y, "    Y++;\n");
    dumpf (R_P_Z | R_P_N, R_Y, "    ZN = Y;\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xC9:                   // [cmp_immediate]

  // static void cmp_immediate () // 0xc9
  // {
  // savepc=PC++;
  // value=get6502memory(savepc);
  // if (A+0x100-value>0xff) P |= 0x01; else P &= 0xfe;
  // value=A/*+0x100*/-value;
  // DO_Z (value);
  // DO_N (value);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (R_VALUE, 0, "    ZN=0x%02X;\n", temp);
    dumpf (R_P_C, R_A | R_VALUE, "    C = (A+0x100-ZN>0xff);\n");
    dumpf (R_P_Z | R_P_N, R_A | R_VALUE, "    ZN=A/*+0x100*/-ZN;\n");
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xCA:                   // [dex_implied]

  // static void dex_implied () // 0xca
  // {
  // X--;
  // DO_Z (X);
  // DO_N (X);
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    dumpf (R_X, R_X, "    X--;\n");
    dumpf (R_P_Z | R_P_N, R_X, "    ZN = X;\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xCB:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xCC:                   // [cpy_abs]

  // static void cpy_abs () // 0xcc
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // value=get6502memory(savepc);
  // if (Y+0x100-value>0xff) P |= 0x01; else P &= 0xfe;
  // value=Y/*+0x100*/-value;
  // DO_Z (value);
  // DO_N (value);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (R_VALUE, Always, "    ZN=ram[0x%04X];\n", temp);
    dumpf (R_P_C, R_Y | R_VALUE, "    C = (Y + 0x100 - ZN > 0xff);\n ");
    dumpf (R_P_Z | R_P_N, R_Y | R_VALUE, "    ZN = Y /* +0x100 */  - ZN;\n ");
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xCD:                   // [cmp_abs]

  // static void cmp_abs () // 0xcd
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // value=get6502memory(savepc);
  // if (A+0x100-value>0xff) P |= 0x01; else P &= 0xfe;
  // value=A/*+0x100*/-value;
  // DO_Z (value);
  // DO_N (value);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (R_VALUE, Always, "    ZN=ram[0x%04X];\n", temp);
    dumpf (R_P_C, R_A | R_VALUE, "    C = (A+0x100-ZN>0xff);\n");
    dumpf (R_P_Z | R_P_N, R_A | R_VALUE, "    ZN=A/*+0x100*/-ZN;\n");
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xCE:                   // [dec_abs]

  // static void dec_abs () // 0xce
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // value=get6502memory(savepc);
  // value--;
  // DO_Z (value);
  // DO_N (value);
  // put6502memory(savepc,value);
  // clockticks += 6;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (6);
    tempword (opadd);           /* TODO* /* looking for fe and converting to C */
    dumpf (R_P_Z | R_P_N | Always, Always, "    ZN=--ram[0x%04X];\n", temp);
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
//      dumpf (Always, Always|R_P_Z|R_P_N, "    ram[0x%04X] = ZN;\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xCF:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xD0:                   // [bne_relative]

  // static void bne_relative () // 0xd0
  // {
  // if ((P & 0x02)==0)
  // {
  // savepc=get6502memoryFast(PC++);
  // if (savepc & 0x80) savepc -= 0x100;
  // if ((savepc >> 8) != (PC >> 8))
  // clockticks++;
  // PC += savepc;
  // clockticks++;
  // }
  // else
  // PC++;
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    temp = rom[opadd + 1];
    if (temp & 0x80)
      temp -= 0x100;
    dumpf (Always, Always | R_P_Z, "    if (ZN != 0)  /* If Z flag is clear, ie last val was non-zero */\n");
    dumpf (Always, Always, "    {\n");
    conditional_clockticks (1);
    if (DEBUG) { dumpf (Always, Always, "        //trace_PC(0x%04X);\n", opadd); }
    dumpf (Always, Always, "        PC = 0x%04x;\n", (opadd + temp + 2) & 0x7FFF);
    conditional_flush ("    return;\n");
    dumpf (Always, Always, "    }\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xD1:                   // [cmp_indy]

  // static void cmp_indy () // 0xd1
  // {
  // unsigned char tmp=get6502memoryFast(PC++);
  // savepc=get6502memory(tmp++);
  // savepc |= get6502memory(tmp) << 8;
  // if ((savepc >> 8) != ((savepc+Y) >> 8))
  // clockticks++;
  // savepc += Y;
  // value=get6502memory(savepc);
  // if (A+0x100-value>0xff) P |= 0x01; else P &= 0xfe;
  // value=A/*+0x100*/-value;
  // DO_Z (value);
  // DO_N (value);
  // clockticks += 5;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (5);
    temp = rom[opadd + 1];
    dumpf (Always | R_VALUE, Always, "    ZN=ram[(unsigned short)(0x%04X/*surely not? + 1*/)];\n", temp);
    dumpf (R_VALUE, R_VALUE, "    ZN<<=8;\n");
    dumpf (Always | R_VALUE, Always | R_VALUE, "    ZN|=ram[0x%04X];\n", temp);
    dumpf (R_VALUE, R_Y | Always | R_VALUE, "    ZN=ram[(unsigned short)(ZN + Y)];\n");
    dumpf (R_P_C, R_A | R_VALUE, "    C = (A+0x100-ZN>0xff);\n");
    dumpf (R_P_Z | R_P_N, R_A | R_VALUE, "    ZN=A/*+0x100*/-ZN;\n");
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xD2:                   // [cmp_indzp]

  // static void cmp_indzp () // 0xd2
  // {
  // unsigned char tmp=get6502memoryFast(PC++);
  // savepc=get6502memory(tmp++);
  // savepc |= get6502memory(tmp) << 8;
  // value=get6502memory(savepc);
  // if (A+0x100-value>0xff) P |= 0x01; else P &= 0xfe;
  // value=A/*+0x100*/-value;
  // DO_Z (value);
  // DO_N (value);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (Always | R_VALUE, Always, "    ZN=ram[(unsigned short)(0x%04X /* surely not? + 1*/)];\n", temp);
    dumpf (R_VALUE, R_VALUE, "    ZN<<=8;\n");
    dumpf (R_VALUE, R_VALUE, "    ZN|=ram[0x%04X];\n", temp);
    dumpf (R_VALUE, R_VALUE | Always, "    ZN=ram[ZN];\n");
    dumpf (R_P_C, R_A | R_VALUE, "    C = (A+0x100-ZN>0xff);\n");
    dumpf (R_P_Z | R_P_N, R_A | R_VALUE, "    ZN=A/*+0x100*/-ZN;\n");
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xD3:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xD4:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xD5:                   // [cmp_zpx]

  // static void cmp_zpx () // 0xd5
  // {
  // savepc=get6502memoryFast(PC++)+X;
  // savepc &= 0x00ff;
  // value=get6502memory(savepc);
  // if (A+0x100-value>0xff) P |= 0x01; else P &= 0xfe;
  // value=A/*+0x100*/-value;
  // DO_Z (value);
  // DO_N (value);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    temp = rom[opadd + 1];
    dumpf (R_VALUE, R_X | Always, "    ZN=(0x%04X + X)&0xFF;\n", temp);
    dumpf (Always | R_VALUE, Always | R_VALUE, "    ZN=ram[ZN];\n");
    dumpf (R_P_C, R_A | R_VALUE, "    C = (A+0x100-ZN>0xff);\n");
    dumpf (R_P_Z | R_P_N, R_A | R_VALUE, "    ZN=A/*+0x100*/-ZN;\n");
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xD6:                   // [dec_zpx]

  // static void dec_zpx () // 0xd6
  // {
  // savepc=get6502memoryFast(PC++)+X;
  // savepc &= 0x00ff;
  // value=get6502memory(savepc);
  // value--;
  // DO_Z (value);
  // DO_N (value);
  // put6502memory(savepc,value);
  // clockticks += 6;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (6);
    temp = rom[opadd + 1];
    dumpf (R_VALUE, R_X, "    ZN=(0x%04X + X)&0xFF;\n", temp);
    dumpf (Always | R_VALUE, Always | R_VALUE, "    ZN=ram[ZN];\n");
    dumpf (R_VALUE | R_P_Z | R_P_N, R_VALUE, "    ZN--;\n");
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    dumpf (Always, Always | R_VALUE, "    ram[ZN] = ZN;\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xD7:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xD8:                   // [cld_implied]

  // static void cld_implied () // 0xd8
  // {
  // P &= 0xf7;
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    dumpf (Always, Always, "    P &= 0xf7;  //cld\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xD9:                   // [cmp_absy]

  // static void cmp_absy () // 0xd9
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // if ((savepc >> 8) != ((savepc+Y) >> 8))
  // clockticks++;
  // savepc += Y;
  // value=get6502memory(savepc);
  // if (A+0x100-value>0xff) P |= 0x01; else P &= 0xfe;
  // value=A/*+0x100*/-value;
  // DO_Z (value);
  // DO_N (value);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (Always | R_VALUE, R_Y | Always, "    ZN=ram[(unsigned short)(0x%04X + Y)];\n", temp);
    dumpf (R_P_C, R_A | R_VALUE, "    C = (A+0x100-ZN>0xff);\n");
    dumpf (R_P_Z | R_P_N, R_A | R_VALUE, "    ZN=A/*+0x100*/-ZN;\n");
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xDA:                   // [phx_implied]

  // static void phx_implied () // 0xda
  // {
  // put6502memory(0x100+S--,X);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);
    flush (R_FLUSH);
    /* NO FLUSH */
        return;

  case 0xDB:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xDC:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xDD:                   // [cmp_absx]

  // static void cmp_absx () // 0xdd
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // if ((savepc >> 8) != ((savepc+X) >> 8))
  // clockticks++;
  // savepc += X;
  // value=get6502memory(savepc);
  // if (A+0x100-value>0xff) P |= 0x01; else P &= 0xfe;
  // value=A/*+0x100*/-value;
  // DO_Z (value);
  // DO_N (value);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (Always | R_VALUE, R_X | Always, "    ZN=ram[(unsigned short)(0x%04X + X)];\n", temp);
    dumpf (R_P_C, R_A | R_VALUE, "    C = (A+0x100-ZN>0xff);\n");
    dumpf (R_P_Z | R_P_N, R_A | R_VALUE, "    ZN=A/*+0x100*/-ZN;\n");
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xDE:                   // [dec_absx]

  // static void dec_absx () // 0xde
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // savepc += X;
  // value=get6502memory(savepc);
  // value--;
  // DO_Z (value);
  // DO_N (value);
  // put6502memory(savepc,value);
  // clockticks += 7;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (7);
    tempword (opadd);
    dumpf (Always | R_VALUE, R_X | Always, "    ZN=ram[(unsigned short)(0x%04X + X)];\n", temp);
    dumpf (R_VALUE | R_P_Z | R_P_N, R_VALUE, "    ZN--;\n");
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    dumpf (Always, R_X | R_VALUE | Always, "    ram[(unsigned short)(0x%04X + X)] = ZN;\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xDF:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xE0:                   // [cpx_immediate]

  // static void cpx_immediate () // 0xe0
  // {
  // savepc=PC++;
  // value=get6502memory(savepc);
  // if (X+0x100-value>0xff) P |= 0x01; else P &= 0xfe;
  // value=X/*+0x100*/-value;
  // DO_Z (value);
  // DO_N (value);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (R_VALUE, 0, "    ZN=0x%02X;\n", temp);
    dumpf (R_P_C, R_X | R_VALUE, "    C = (X + 0x100 - ZN > 0xff);\n ");
    dumpf (R_P_Z | R_P_N, R_VALUE | R_X, "    ZN=X/*+0x100*/-ZN;\n");
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xE1:                   // [sbc_indx]

  // static void sbc_indx () // 0xe1
  // {
  // unsigned char tmp=get6502memoryFast(PC++);
  // tmp += X;
  // savepc=get6502memory(tmp++);
  // savepc |= get6502memory(tmp) << 8;
  // SBC (savepc);
  // clockticks += 6;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (6);
    temp = rom[opadd + 1];
    dumpf (R_VALUE, R_VALUE | R_X, "    temp+=X;\n");
    dumpf (Always | R_VALUE, Always, "   ZN=ram[(unsigned short)(0x%04X + 1 /* better to add in printf? */)];\n", temp);
    dumpf (R_VALUE, R_VALUE, "    ZN<<=8;\n");
    dumpf (R_VALUE, R_VALUE | Always, "    temp|=ram[0x%04X];\n", temp);
    dumpf (R_P_Z | R_P_N, Always | R_VALUE, "    ZN=ram[temp];\n");
    dumpf (Always, Always, "    crash(0x%04X,0x%02X);\n", opadd, opcode);
    flush (R_FLUSH);
    /* NO FLUSH */
        return;

  case 0xE2:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xE3:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xE4:                   // [cpx_zp]

  // static void cpx_zp () // 0xe4
  // {
  // savepc=get6502memoryFast(PC++);
  // value=get6502memory(savepc);
  // if (X+0x100-value>0xff) P |= 0x01; else P &= 0xfe;
  // value=X/*+0x100*/-value;
  // DO_Z (value);
  // DO_N (value);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (R_VALUE, Always, "    ZN=ram[0x%04X];\n", temp);
    dumpf (R_P_C, R_X | R_VALUE, "    C = (X + 0x100 - ZN > 0xff);\n ");
    dumpf (R_P_Z | R_P_N, R_X | R_VALUE, "    ZN=X/*+0x100*/-ZN;\n");
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xE5:                   // [sbc_zp]

  // static void sbc_zp () // 0xe5
  // {
  // savepc=get6502memoryFast(PC++);
  // SBC (savepc);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (Always | R_A | R_P_C | R_P_N | R_P_Z | R_P_V, Always | R_A | R_P_C | R_P_D, "    SBC(ram[0x%04X]);\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xE6:                   // [inc_zp]

  // static void inc_zp () // 0xe6
  // {
  // savepc=get6502memoryFast(PC++);
  // value=get6502memory(savepc);
  // value++;
  // put6502memory(savepc,value);
  // DO_Z (value);
  // DO_N (value);
  // clockticks += 5;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (5);
    temp = rom[opadd + 1];
    dumpf (R_P_Z | R_P_N | Always, Always, "    ZN=++ram[0x%04X];\n", temp);
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N(value);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xE7:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xE8:                   // [inx_implied]

  // static void inx_implied () // 0xe8
  // {
  // X++;
  // DO_Z (X);
  // DO_N (X);
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    dumpf (R_X, R_X, "    X++;\n");
    dumpf (R_P_Z | R_P_N, R_X, "    ZN = X;\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xE9:                   // [sbc_immediate]

  // static void sbc_immediate () // 0xe9
  // {
  // savepc=PC++;
  // SBC (savepc);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (Always | R_A | R_P_C | R_P_N | R_P_Z | R_P_V, Always | R_A | R_P_C | R_P_D, "    SBC(0x%02X);\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xEA:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xEB:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xEC:                   // [cpx_abs]

  // static void cpx_abs () // 0xec
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // value=get6502memory(savepc);
  // if (X+0x100-value>0xff) P |= 0x01; else P &= 0xfe;
  // value=X/*+0x100*/-value;
  // DO_Z (value);
  // DO_N (value);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (R_VALUE, Always, "    ZN=ram[0x%04X];\n", temp);
    dumpf (R_P_C, R_X | R_VALUE, "    C = (X + 0x100 - ZN > 0xff);\n ");
    dumpf (R_P_Z | R_P_N, R_VALUE | R_X, "    ZN=X/*+0x100*/-ZN;\n");
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xED:                   // [sbc_abs]

  // static void sbc_abs () // 0xed
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // SBC (savepc);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (Always | R_A | R_P_C | R_P_N | R_P_Z | R_P_V, Always | R_A | R_P_C | R_P_D, "    SBC(ram[0x%04X]);\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xEE:                   // [inc_abs]

  // static void inc_abs () // 0xee
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // value=get6502memory(savepc);
  // value++;
  // put6502memory(savepc,value);
  // DO_Z (value);
  // DO_N (value);
  // clockticks += 6;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (6);
    tempword (opadd);
    dumpf (R_P_Z | R_P_N | Always, Always, "    ZN=++ram[0x%04X];\n", temp);
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xEF:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xF0:                   // [beq_relative]

  // static void beq_relative () // 0xf0
  // {
  // if (P & 0x02)
  // {
  // savepc=get6502memoryFast(PC++);
  // if (savepc & 0x80) savepc -= 0x100;
  // if ((savepc >> 8) != (PC >> 8))
  // clockticks++;
  // PC += savepc;
  // clockticks++;
  // }
  // else
  // PC++;
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    temp = rom[opadd + 1];
    if (temp & 0x80)
      temp -= 0x100;
    dumpf (Always, Always | R_P_Z, "    if (ZN == 0) /* Z flag is set, ie last val was zero */\n");
    dumpf (Always, Always, "    {\n");
    conditional_clockticks (1);
    if (DEBUG) { dumpf (Always, Always, "        //trace_PC(0x%04X);\n", opadd); }
    dumpf (Always, Always, "        PC = 0x%04x;\n", (opadd + temp + 2) & 0x7FFF);
    conditional_flush ("    return;\n");
    dumpf (Always, Always, "    }\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xF1:                   // [sbc_indy]

  // static void sbc_indy () // 0xf1
  // {
  // unsigned char tmp=get6502memoryFast(PC++);
  // savepc=get6502memory(tmp++);
  // savepc |= get6502memory(tmp) << 8;
  // if ((savepc >> 8) != ((savepc+Y) >> 8))
  // clockticks++;
  // savepc += Y;
  // SBC (savepc);
  // clockticks += 5;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (5);
    temp = rom[opadd + 1];
    dumpf (R_VALUE, Always, "    ZN=ram[(unsigned short)(0x%04X + 1 /* move to printf */)];\n", temp);
    dumpf (R_VALUE, R_VALUE, "    ZN<<=8;\n");
    dumpf (Always | R_VALUE, Always, "    ZN|=ram[0x%04X];\n", temp);
    dumpf (Always | R_A | R_P_C | R_P_N | R_P_Z | R_P_V, Always | R_A | R_P_C | R_P_D, "    SBC(ram[(unsigned short)(ZN)]+Y);  // Be careful here... ZN trickiness...\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xF2:                   // [sbc_indzp]

  // static void sbc_indzp () // 0xf2
  // {
  // unsigned char tmp=get6502memoryFast(PC++);
  // savepc=get6502memory(tmp++);
  // savepc |= get6502memory(tmp) << 8;
  // SBC (savepc);
  // clockticks += 3;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (3);
    temp = rom[opadd + 1];
    dumpf (R_VALUE, Always, "    ZN=ram[(unsigned short)(0x%04X + 1)];\n", temp);
    dumpf (R_VALUE, R_VALUE, "    temp<<=8;\n");
    dumpf (Always | R_VALUE, Always | R_VALUE, "    ZN|=ram[0x%04X];\n", temp);
    dumpf (Always | R_A | R_P_C | R_P_N | R_P_Z | R_P_V, Always | R_A | R_VALUE | R_P_C | R_P_D, "    SBC(ram[ZN]); // beware ZN expansion\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xF3:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xF4:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xF5:                   // [sbc_zpx]

  // static void sbc_zpx () // 0xf5
  // {
  // savepc=get6502memoryFast(PC++)+X;
  // savepc &= 0x00ff;
  // SBC (savepc);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    temp = rom[opadd + 1];
    dumpf (Always | R_VALUE, R_X | Always, "    ZN=(0x%04X + X)&0xFF;\n", temp);
    dumpf (Always | R_A | R_P_C | R_P_N | R_P_Z | R_P_V, Always | R_A | R_VALUE | R_P_C | R_P_D, "    SBC(ram[ZN]); // beware ZN expansion\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xF6:                   // [inc_zpx]

  // static void inc_zpx () // 0xf6
  // {
  // savepc=get6502memoryFast(PC++)+X;
  // savepc &= 0x00ff;
  // value=get6502memory(savepc);
  // value++;
  // put6502memory(savepc,value);
  // DO_Z (value);
  // DO_N (value);
  // clockticks += 6;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (6);
    temp = rom[opadd + 1];
    dumpf (R_VALUE, R_X | Always, "    ZN=(0x%04X + X)&0xFF;\n", temp);
    dumpf (R_VALUE | R_P_Z | R_P_N, Always | R_VALUE, "    ZN=ram[ZN]+1;\n");
    dumpf (Always, R_VALUE, "    ram[0x%04X] = ZN;\n", temp);
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xF7:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xF8:                   // [sed_implied]

  // static void sed_implied () // 0xf8
  // {
  // P |= 0x08;
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    dumpf (Always, Always, "    P |= 0x08; // sed\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xF9:                   // [sbc_absy]

  // static void sbc_absy () // 0xf9
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // if ((savepc >> 8) != ((savepc+Y) >> 8))
  // clockticks++;
  // savepc += Y;
  // SBC (savepc);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (Always | R_P_C | R_P_N | R_P_Z | R_P_V, R_Y | Always | R_P_C | R_P_D, "    SBC(ram[(unsigned short)(0x%04X + Y)]);\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xFA:                   // [plx_implied]

  // static void plx_implied () // 0xfa
  // {
  // X=get6502memory(++S+0x100);
  // DO_Z (X);
  // DO_N (X);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    dumpf (R_X, Always | R_S, "    X=stack[++S];\n");
    dumpf (R_P_Z | R_P_N, R_X, "    ZN = X;\n");
    // dumpf(R_P_N, R_X, " DO_N (X);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xFB:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xFC:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xFD:                   // [sbc_absx]

  // static void sbc_absx () // 0xfd
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // if ((savepc >> 8) != ((savepc+X) >> 8))
  // clockticks++;
  // savepc += X;
  // SBC (savepc);
  // clockticks += 4;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (4);
    tempword (opadd);
    dumpf (Always | R_A | R_P_C | R_P_N | R_P_Z | R_P_V, R_X | Always | R_A | R_P_C | R_P_D, "    SBC(ram[(unsigned short)(0x%04X + X)]);\n", temp);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xFE:                   // [inc_absx]

  // static void inc_absx () // 0xfe
  // {
  // savepc=get6502memoryFast(PC++);
  // savepc |= get6502memoryFast(PC++) << 8;
  // savepc += X;
  // value=get6502memory(savepc);
  // value++;
  // put6502memory(savepc,value);
  // DO_Z (value);
  // DO_N (value);
  // clockticks += 7;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (7);
    tempword (opadd);
    dumpf (R_P_Z | R_P_N | R_VALUE, R_X | Always, "    ZN=ram[(unsigned short)(0x%04X + X)] + 1;\n", temp);
    dumpf (Always, R_VALUE, "    ram[0x%04X] = ZN;\n", temp);
// XX: dumpf(R_P_Z|R_P_N, R_VALUE, " ZN = ZN;\n");
    // dumpf(R_P_N, R_VALUE, " DO_N (value);\n");
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;

  case 0xFF:                   // [nop_implied]

  // static void nop_implied () // 0x02
  // {
  // clockticks += 2;
  // }

    dumpf (Always, Always, "case 0x%04X: L_%04x: //%02X %02X %02X\n", opadd, opadd, opcode, rom[opadd + 1], rom[opadd + 2]);
    unconditional_clockticks (2);
    if (DEBUG) { dumpf (Always, Always, "    //trace_PC(0x%04X);\n", opadd); }
    /* NO FLUSH */
    return;
  }
}

void do_rom (char *filename, unsigned short base) {
  FILE *fp;

  fp = fopen (filename, "rb");
  if (fp == NULL) {
    fprintf (stderr, "Error opening rom %s\n", filename);
    exit (1);
  }
  fread (rom + base, 1, 0x800, fp);
  fclose (fp);
}

int main (void) {

  memset (rom, 0, sizeof (rom));
  memset (rom + 0x4000, 0xb0, 0x1000);
  do_rom ("roms/036800.02", 0x4800);
  do_rom ("roms/036799.01", 0x5000);
  do_rom ("roms/036430.02", 0x6000);
  do_rom ("roms/036431.02", 0x6800);
  do_rom ("roms/036432.02", 0x7000);
  do_rom ("roms/036433.03", 0x7800);
  rom[0x2c00] = 0xff;
  rom[0x2c01] = 0xff;
  rom[0x2c02] = 0xff;
  rom[0x2c03] = 0xff;
  rom[0x2c04] = 0xff;
  rom[0x2c05] = 0xff;
  rom[0x2c06] = 0xff;
  rom[0x2c07] = 0xff;
  rom[0x2c08] = 0xff;
  rom[0x2c09] = 0xff;
  rom[0x2c0a] = 0xff;
  rom[0x2c0b] = 0xff;
  rom[0x2c0c] = 0xff;
  rom[0x2c0d] = 0xff;
  rom[0x2c0e] = 0xff;
  rom[0x2c0f] = 0xff;
  rom[0x2800] = 0x0;
  rom[0x2801] = 0x0;
  rom[0x2802] = 0xff;
  rom[0x2803] = 0x0;
  fp = fopen ("hitlist.bin", "rb");
  if (fp == NULL)
    exit (1);
  fread (hitlist, 1, 0x8000, fp);
  fclose (fp);
/*
Missing instructions.  Unfortunately adding them here does
not add all code reachable from these instructions, just the
instructions themselves (I think)

game.c:20178: label `L_7e71' used but not defined
etc
*/
  hitlist[0x7e71] = 1;
  hitlist[0x7d8f] = 1;
  hitlist[0x7d8b] = 1;
  hitlist[0x7516] = 1;
  hitlist[0x6648] = 1;
  hitlist[0x4c80] = 1;
  hitlist[0x4c01] = 1;
  fprintf (stdout, "\n\nunsigned short PC=0x%02X%02X;\n", rom[0x7ffd], rom[0x7ffc]);
  fprintf (stdout, "unsigned short NMISTART=0x%02X%02X;\n", rom[0x7ffb], rom[0x7ffa]);
  fp = fopen ("gtop.c", "r");
  if (fp == NULL)
    abort ();
  while (fgets (newline, sizeof (newline) - 1, fp)) {
    fprintf (stdout, "%s", newline);
  }
  fclose (fp);
  for (sa = 0; sa < 0x8000; sa++) {
    if (hitlist[sa] == 0)
      continue;
    translate (sa, rom[sa]);
  }

  fp = fopen ("gbot.c", "r");
  if (fp == NULL)
    abort ();
  while (fgets (newline, sizeof (newline) - 1, fp)) {
    fprintf (stdout, "%s", newline);
  }
  fclose (fp);
}