Annotation of generator/src/z80/z80.c, revision 1.1

1.1     ! root        1: /* z80stb.c
        !             2:  * Zilog Z80 processor emulator in C. Modified to be API compliant with Neil
        !             3:  * Bradley's MZ80 (for ported projects)
        !             4:  * Ported to 'C' by Jeff Mitchell; original copyright follows:
        !             5:  *
        !             6:  * Abstract:
        !             7:  *   Internal declarations for Zilog Z80 emulator.
        !             8:  *
        !             9:  * Revisions:
        !            10:  *   18-Apr-97 EAM Created
        !            11:  *   ??-???-97 EAM Released in MageX 0.5
        !            12:  *   26-Jul-97 EAM Fixed Time Pilot slowdown bug and
        !            13:  *      Gyruss hiscore bugs (opcode 0xC3)
        !            14:  *
        !            15:  * Original copyright (C) 1997 Edward Massey
        !            16:  */
        !            17: 
        !            18: #define FALSE 0
        !            19: #define TRUE 1
        !            20: 
        !            21: #ifdef WORDS_BIGENDIAN
        !            22: #define HOST_TO_LE16(y) ((((y>>8)&0x00FF)+((((y)<<8)&0xFF00)))
        !            23: #else
        !            24: #define HOST_TO_LE16(y) (y)
        !            25: #endif
        !            26: 
        !            27: #include <stdio.h>
        !            28: #include <stdlib.h>
        !            29: #include <assert.h>
        !            30: #include "mz80.h"
        !            31: #include "z80stb.h"
        !            32: 
        !            33: /* ***************************************************************************
        !            34:  * Edward's Internals (so to speak)
        !            35:  * ***************************************************************************
        !            36:  */
        !            37: 
        !            38: #define _ASSERT assert
        !            39: 
        !            40: union { /* WARN: Endianness! */
        !            41:   WORD m_regAF;
        !            42:   struct {
        !            43: #ifdef WORDS_BIGENDIAN
        !            44:     BYTE m_regA;
        !            45:     BYTE m_regF;
        !            46: #else
        !            47:     BYTE m_regF;
        !            48:     BYTE m_regA;
        !            49: #endif
        !            50:   } regAFs;
        !            51: } regAF;
        !            52: #define m_regAF regAF.m_regAF
        !            53: #define m_regF regAF.regAFs.m_regF
        !            54: #define m_regA regAF.regAFs.m_regA
        !            55: 
        !            56: union { /* WARN: Endianness! */
        !            57:   WORD m_regBC;
        !            58:   struct {
        !            59: #ifdef WORDS_BIGENDIAN
        !            60:     BYTE m_regB;
        !            61:     BYTE m_regC;
        !            62: #else
        !            63:     BYTE m_regC;
        !            64:     BYTE m_regB;
        !            65: #endif
        !            66:   } regBCs;
        !            67: } regBC;
        !            68: #define m_regBC regBC.m_regBC
        !            69: #define m_regB regBC.regBCs.m_regB
        !            70: #define m_regC regBC.regBCs.m_regC
        !            71: 
        !            72: union { /* WARN: Endianness! */
        !            73:   WORD m_regDE;
        !            74:   struct {
        !            75: #ifdef WORDS_BIGENDIAN
        !            76:     BYTE m_regD;
        !            77:     BYTE m_regE;
        !            78: #else
        !            79:     BYTE m_regE;
        !            80:     BYTE m_regD;
        !            81: #endif
        !            82:   } regDEs;
        !            83: } regDE;
        !            84: #define m_regDE regDE.m_regDE
        !            85: #define m_regD regDE.regDEs.m_regD
        !            86: #define m_regE regDE.regDEs.m_regE
        !            87: 
        !            88: union { /* WARN: Endianness! */
        !            89:   WORD m_regHL;
        !            90:   struct {
        !            91: #ifdef WORDS_BIGENDIAN
        !            92:     BYTE m_regH;
        !            93:     BYTE m_regL;
        !            94: #else
        !            95:     BYTE m_regL;
        !            96:     BYTE m_regH;
        !            97: #endif
        !            98:   } regHLs;
        !            99: } regHL;
        !           100: #define m_regHL regHL.m_regHL
        !           101: #define m_regH regHL.regHLs.m_regH
        !           102: #define m_regL regHL.regHLs.m_regL
        !           103: 
        !           104: union { /* WARN: Endianness! */
        !           105:   WORD m_regIX;
        !           106:   struct {
        !           107: #ifdef WORDS_BIGENDIAN
        !           108:     BYTE m_regIXh;
        !           109:     BYTE m_regIXl;
        !           110: #else
        !           111:     BYTE m_regIXl;
        !           112:     BYTE m_regIXh;
        !           113: #endif
        !           114:   } regIXs;
        !           115: } regIX;
        !           116: #define m_regIX regIX.m_regIX
        !           117: #define m_regIXl regIX.regIXs.m_regIXl
        !           118: #define m_regIXh regIX.regIXs.m_regIXh
        !           119: 
        !           120: union {
        !           121:   WORD m_regIY;
        !           122:   struct {
        !           123: #ifdef WORDS_BIGENDIAN
        !           124:     BYTE m_regIYh;
        !           125:     BYTE m_regIYl;
        !           126: #else
        !           127:     BYTE m_regIYl;
        !           128:     BYTE m_regIYh;
        !           129: #endif
        !           130:   } regIYs;
        !           131: } regIY;
        !           132: #define m_regIY regIY.m_regIY
        !           133: #define m_regIYl regIY.regIYs.m_regIYl
        !           134: #define m_regIYh regIY.regIYs.m_regIYh
        !           135: 
        !           136: const BYTE *m_rgbOpcode; // takes place of the PC register
        !           137: LPBYTE m_rgbStack; // takes place of the SP register
        !           138: LPBYTE m_rgbMemory; // direct access to memory buffer (RAM)
        !           139: const BYTE *m_rgbOpcodeBase; // "base" pointer for m_rgbOpcode
        !           140: LPBYTE m_rgbStackBase;
        !           141: static int cCycles = 0;
        !           142: 
        !           143: BYTE m_regR; // consider:  should be int for performance?
        !           144: BYTE m_regI; // consider:  combine into
        !           145: 
        !           146: // TODO:  combine into a single int...
        !           147: int m_iff1, m_iff2;
        !           148: BOOL m_fHalt;
        !           149: int m_nIM;
        !           150: BOOL m_fPendingInterrupt = FALSE;
        !           151: 
        !           152: WORD m_regAF2;
        !           153: static WORD m_regBC2;
        !           154: static WORD m_regDE2;
        !           155: static WORD m_regHL2;
        !           156: WORD z80intAddr = 0x38;
        !           157: WORD z80nmiAddr = 0x66;
        !           158: 
        !           159: /* ***************************************************************************
        !           160:  * Pre-calculated math tables and junk (sucked from Marat and Edward)
        !           161:  * ***************************************************************************
        !           162:  */
        !           163: void InitTables (void);
        !           164: 
        !           165: BYTE ZSTable[256];
        !           166: BYTE ZSPTable[256];
        !           167: BYTE rgfAdd[256][256];
        !           168: BYTE rgfSub[256][256];
        !           169: BYTE rgfAddc[256][256][2];
        !           170: BYTE rgfSubc[256][256][2];
        !           171: BYTE rgfInc[256];
        !           172: BYTE rgfDec[256];
        !           173: BYTE rgfBit[256][8];
        !           174: static UINT32 dwElapsedTicks = 0;
        !           175: 
        !           176: /* #include "z80daa.h" */
        !           177: #include "z80stbd.h"
        !           178: 
        !           179: /* ***************************************************************************
        !           180:  * Retrocade guts stuff
        !           181:  * ***************************************************************************
        !           182:  */
        !           183: static struct MemoryReadByte *z80MemoryRead = NULL;
        !           184: static struct MemoryWriteByte *z80MemoryWrite = NULL;
        !           185: static struct z80PortRead *z80IoRead = NULL;
        !           186: static struct z80PortWrite *z80IoWrite = NULL;
        !           187: WORD z80pc = 0;
        !           188: 
        !           189: /* ***************************************************************************
        !           190:  * Retrocade interface follows
        !           191:  * ***************************************************************************
        !           192:  */
        !           193: 
        !           194: /* reset registers, interrupts, memory read/write memory handlers,
        !           195:  * port read and writing handlers, etc.
        !           196:  */
        !           197: void mz80reset(void) {
        !           198: 
        !           199:   InitTables();
        !           200: 
        !           201:   m_fPendingInterrupt = FALSE;
        !           202:   m_rgbOpcodeBase = m_rgbMemory;
        !           203:   /* m_rgbMemory = */
        !           204:   m_rgbStackBase = m_rgbMemory;
        !           205: 
        !           206:   m_regAF = 0;
        !           207:   m_regBC = 0;
        !           208:   m_regDE = 0;
        !           209:   m_regHL = 0;
        !           210:   m_regAF2 = 0;
        !           211:   m_regBC2 = 0;
        !           212:   m_regDE2 = 0;
        !           213:   m_regHL2 = 0;
        !           214:   m_regR = rand();
        !           215:   m_regI = 0;
        !           216:   m_fHalt = FALSE;
        !           217:   m_nIM = 0;
        !           218:   m_regIX = 0xffff;            // Yes, this intentional, and the way a Z80 comes
        !           219:   m_regIY = 0xffff;            // up in power-on state!
        !           220:   m_iff1 = 0;
        !           221:   m_iff2 = 0;
        !           222:        z80intAddr = 0x38;
        !           223:        z80nmiAddr = 0x66;
        !           224: 
        !           225:   SetPC(0x0000);
        !           226:   SetSP(0x0000);
        !           227: 
        !           228: #if 0
        !           229:   fprintf ( stderr, "Reset\n" );
        !           230: #endif
        !           231: }
        !           232: 
        !           233: /* UINT32 mz80int(UINT32 a) {
        !           234:  * return ( Irq ( (BYTE) ( a & 0xFF ) ) );
        !           235:  * }
        !           236:  */
        !           237: 
        !           238: /* UINT32 mz80nmi(void) {
        !           239:  * return ( Nmi() );
        !           240:  * }
        !           241:  */
        !           242: 
        !           243: /* ***************************************************************************
        !           244:  * Edward Memory Handlers (guesses)
        !           245:  * ***************************************************************************
        !           246:  */
        !           247: 
        !           248: #define ImmedByte() *m_rgbOpcode++
        !           249: 
        !           250: /* static */ UINT16 ImmedWord ( void ) {
        !           251:   WORD w = HOST_TO_LE16(*(WORD*)m_rgbOpcode);
        !           252:   m_rgbOpcode += 2;
        !           253:   return w; // attn: little endian specific
        !           254: }
        !           255: 
        !           256: #define GetPC() ( (WORD)(m_rgbOpcode - m_rgbOpcodeBase) )
        !           257: 
        !           258: void SetPC ( WORD wAddr ) {
        !           259:   m_rgbOpcode = &m_rgbOpcodeBase[wAddr];
        !           260: }
        !           261: 
        !           262: void AdjustPC ( signed char cb ) {
        !           263:   m_rgbOpcode += cb;
        !           264: }
        !           265: 
        !           266: void Push(WORD wArg) {
        !           267:   MemWriteByte(--m_rgbStack - m_rgbStackBase, HIBYTE(wArg));
        !           268:   MemWriteByte(--m_rgbStack - m_rgbStackBase, LOBYTE(wArg));
        !           269: }
        !           270: 
        !           271: WORD Pop() {
        !           272:        unsigned short wAddr = 0;
        !           273: 
        !           274:        wAddr = MemReadByte(m_rgbStack++ - m_rgbStackBase);
        !           275:        wAddr |= (MemReadByte(m_rgbStack++ - m_rgbStackBase) << 8);
        !           276: 
        !           277:        return(wAddr);
        !           278: }
        !           279: 
        !           280: WORD GetSP() {
        !           281:   return (WORD)(m_rgbStack - m_rgbStackBase);
        !           282: }
        !           283: 
        !           284: void SetSP(WORD wAddr) {
        !           285:   m_rgbStack = &m_rgbStackBase[wAddr];
        !           286: }
        !           287: 
        !           288: /* static */ UINT8 mz80GetMemory ( UINT16 addr ) {
        !           289:   struct MemoryReadByte *mr = z80MemoryRead;
        !           290: 
        !           291:   z80pc = GetPC(); /* for some of the platforms */
        !           292: 
        !           293:   while ( mr -> lowAddr != 0xffffffff ) {
        !           294: 
        !           295:         if (addr >= mr->lowAddr && addr <= mr->highAddr) {
        !           296:                z80pc = GetPC();
        !           297:                return ( mr -> memoryCall ( addr, mr ) );
        !           298:         }
        !           299: 
        !           300:         ++mr;
        !           301: 
        !           302:   }
        !           303: 
        !           304:   return ( m_rgbMemory [ addr ] );
        !           305: }
        !           306: 
        !           307: /* static */ void mz80PutMemory ( unsigned short int addr, unsigned char byte ) {
        !           308:   struct MemoryWriteByte *mr = z80MemoryWrite;
        !           309: 
        !           310:   while ( mr->lowAddr != 0xffffffff ) {
        !           311:         if (addr >= mr->lowAddr && addr <= mr->highAddr) {
        !           312:                z80pc = GetPC();
        !           313:                mr->memoryCall(addr, byte, mr);
        !           314:                return;
        !           315:         }
        !           316:         mr++;
        !           317:   }
        !           318: 
        !           319:   m_rgbMemory [ addr ] = byte;
        !           320: 
        !           321: }
        !           322: 
        !           323: BYTE In(BYTE bPort) {
        !           324:   BYTE bVal;
        !           325:   // BYTE bVal = m_rgpfnPortRead[bPort](bPort);
        !           326: 
        !           327:   struct z80PortRead *mr = z80IoRead;
        !           328: 
        !           329:   z80pc = GetPC(); /* for some of the platforms */
        !           330: 
        !           331:   while ( mr->lowIoAddr != 0xffff ) {
        !           332:     if ( bPort >= mr->lowIoAddr && bPort <= mr->highIoAddr) {
        !           333:       bVal = mr->IOCall ( bPort, mr );
        !           334:       break;
        !           335:     }
        !           336:     mr++;
        !           337:   }
        !           338: 
        !           339:   m_regF = (m_regF & C_FLAG) | ZSPTable[bVal];
        !           340: 
        !           341:   return bVal;
        !           342: }
        !           343: 
        !           344: BYTE InRaw (BYTE bPort) {
        !           345:   BYTE bVal;
        !           346: 
        !           347:   struct z80PortRead *mr = z80IoRead;
        !           348: 
        !           349:   z80pc = GetPC(); /* for some of the platforms */
        !           350: 
        !           351:   while ( mr->lowIoAddr != 0xffff ) {
        !           352:     if ( bPort >= mr->lowIoAddr && bPort <= mr->highIoAddr) {
        !           353:       bVal = mr->IOCall ( bPort, mr );
        !           354:       break;
        !           355:     }
        !           356:     mr++;
        !           357:   }
        !           358: 
        !           359:   // m_regF = (m_regF & C_FLAG) | ZSPTable[bVal];
        !           360:   return bVal;
        !           361: }
        !           362: 
        !           363: void Out(BYTE bPort, BYTE bVal) {
        !           364:   // m_rgpfnPortWrite[bPort](bPort, bVal);
        !           365:   struct z80PortWrite *mr = z80IoWrite;
        !           366: 
        !           367:   z80pc = GetPC(); /* for some of the platforms */
        !           368: 
        !           369:   while ( mr->lowIoAddr != 0xffff ) {
        !           370:     if (bPort >= mr->lowIoAddr && bPort <= mr->highIoAddr) {
        !           371:       mr->IOCall ( bPort, bVal, mr );
        !           372:       return;
        !           373:     }
        !           374:     mr++;
        !           375:   }
        !           376: 
        !           377: }
        !           378: 
        !           379: /* static */ void MemWriteWord ( UINT16 wAddr, UINT16 wVal ) {
        !           380:   MemWriteByte ( wAddr++, LOBYTE ( wVal ) );
        !           381:   MemWriteByte ( wAddr,   HIBYTE ( wVal ) );
        !           382: }
        !           383: 
        !           384: /* static */ /* inline */ void MemWriteByte ( UINT16 wAddr, UINT8 bVal ) {
        !           385:   mz80PutMemory ( wAddr, bVal );
        !           386: }
        !           387: 
        !           388: /* static */ /* inline */ UINT8 MemReadByte ( UINT16 wAddr ) {
        !           389:   return ( mz80GetMemory ( wAddr ) );
        !           390: }
        !           391: 
        !           392: /* static */ /* inline */ UINT16 MemReadWord ( UINT16 wAddr ) {
        !           393:   UINT8 op1;
        !           394:   UINT8 op2;
        !           395: 
        !           396:        op1 = MemReadByte(wAddr ++);
        !           397:        op2 = MemReadByte(wAddr);
        !           398:   return ( MAKEWORD ( op1, op2 ) );
        !           399: }
        !           400: 
        !           401: /* ***************************************************************************
        !           402:  * Retrocade guts stuff (again) (these guys are defined after macros)
        !           403:  * ***************************************************************************
        !           404:  */
        !           405: 
        !           406: unsigned long int mz80GetContextSize(void) {
        !           407:   return ( sizeof ( CONTEXTMZ80 ) );
        !           408: }
        !           409: 
        !           410: /* set memory base, etc. */
        !           411: void mz80GetContext ( void *receiver ) {
        !           412:   CONTEXTMZ80 *c = receiver;
        !           413:   c -> z80MemRead = z80MemoryRead;
        !           414:   c -> z80MemWrite = z80MemoryWrite;
        !           415:   c -> z80Base = (UINT8 *) m_rgbOpcodeBase;
        !           416:   c -> z80IoRead = z80IoRead;
        !           417:   c -> z80IoWrite = z80IoWrite;
        !           418:   c -> z80af = m_regAF;
        !           419:   c -> z80bc = m_regBC;
        !           420:   c -> z80de = m_regDE;
        !           421:   c -> z80hl = m_regHL;
        !           422:   c -> z80afprime = m_regAF2;
        !           423:   c -> z80bcprime = m_regBC2;
        !           424:   c -> z80deprime = m_regDE2;
        !           425:   c -> z80hlprime = m_regHL2;
        !           426:   c -> z80ix = m_regIX;
        !           427:   c -> z80iy = m_regIY;
        !           428:   c -> z80sp = GetSP();
        !           429:   c -> z80pc = GetPC();
        !           430:   c -> z80i = m_regI;
        !           431:   c -> z80r = m_regR;
        !           432:        c -> z80intAddr = z80intAddr;
        !           433:        c -> z80nmiAddr = z80nmiAddr;
        !           434:        c -> z80inInterrupt = m_iff1;
        !           435:        c -> z80interruptMode = m_nIM;
        !           436:        c -> z80interruptState = m_iff2;
        !           437:        c -> z80halted = m_fHalt;
        !           438:        
        !           439: #if 0
        !           440:   fprintf ( stderr, "GetContext\n" );
        !           441: #endif
        !           442: }
        !           443: 
        !           444: void mz80SetContext( void *sender ) {
        !           445:   CONTEXTMZ80 *c = sender;
        !           446:   z80MemoryRead = c -> z80MemRead;
        !           447:   z80MemoryWrite = c -> z80MemWrite;
        !           448:   m_rgbMemory = c -> z80Base;
        !           449:   z80IoRead = c -> z80IoRead;
        !           450:   z80IoWrite = c -> z80IoWrite;
        !           451:   m_regAF = c -> z80af;
        !           452:   m_regBC = c -> z80bc;
        !           453:   m_regDE = c -> z80de;
        !           454:   m_regHL = c -> z80hl;
        !           455:   m_regAF2 = c -> z80afprime;
        !           456:   m_regBC2 = c -> z80bcprime;
        !           457:   m_regDE2 = c -> z80deprime;
        !           458:   m_regHL2 = c -> z80hlprime;
        !           459:   m_regIX = c -> z80ix;
        !           460:   m_regIY = c -> z80iy;
        !           461:   m_regI = c -> z80i;
        !           462:   m_regR = c -> z80r;
        !           463:   z80intAddr = c -> z80intAddr;
        !           464:   z80nmiAddr = c -> z80nmiAddr;
        !           465:   m_rgbOpcodeBase = m_rgbMemory;
        !           466: 
        !           467:        m_iff1 = c->z80inInterrupt;
        !           468:        m_iff2 = c->z80interruptState;
        !           469:        m_nIM = c->z80interruptMode;
        !           470:        m_fHalt = c->z80halted;
        !           471: 
        !           472:   SetPC ( c -> z80pc );
        !           473:   SetSP ( c -> z80sp );
        !           474: 
        !           475: #if 0
        !           476:   fprintf ( stderr, "SetContext\n" );
        !           477: #endif
        !           478: }
        !           479: 
        !           480: /* ***************************************************************************
        !           481:  * Z80 Please-inline-my-ass opcodes
        !           482:  * ***************************************************************************
        !           483:  */
        !           484: 
        !           485: /* inline */ int Ret0(int f)
        !           486: {
        !           487:        if (f)
        !           488:        {
        !           489:                SetPC(Pop());
        !           490:                return 6;
        !           491:        }
        !           492:        else
        !           493:        {
        !           494:                return 0;
        !           495:        }
        !           496: }
        !           497: 
        !           498: /* inline */ int Ret1(int f)
        !           499: {
        !           500:        if (f)
        !           501:        {
        !           502:                return 0;
        !           503:        }
        !           504:        else
        !           505:        {
        !           506:                SetPC(Pop());
        !           507:                return 6;
        !           508:        }
        !           509: }
        !           510: 
        !           511: /* inline */ WORD Adc_2 (WORD wArg1, WORD wArg2)
        !           512: {
        !           513: #ifdef ARITH_TABLES
        !           514:        int q  = wArg1 + wArg2 + (m_regF & C_FLAG);
        !           515:        m_regF = (((wArg1^q^wArg2)&0x1000)>>8)|((q>>16)&1)|((q&0x8000)>>8)|((q&65535)?0:Z_FLAG)|(((wArg2^wArg1^0x8000)&(wArg2^q)&0x8000)>>13);
        !           516:        return q;
        !           517: #else
        !           518:        int q  = wArg1 + wArg2 + (m_regF & C_FLAG);
        !           519:        m_regF = (((wArg1^q^wArg2)&0x1000)>>8)|((q>>16)&1)|((q&0x8000)>>8)|((q&65535)?0:Z_FLAG)|(((wArg2^wArg1^0x8000)&(wArg2^q)&0x8000)>>13);
        !           520:        return q;
        !           521: #endif
        !           522: }
        !           523: 
        !           524: /* inline */ WORD Sbc_2 (WORD wArg1, WORD wArg2)
        !           525: {
        !           526: #ifdef ARITH_TABLES
        !           527:        int q   = wArg1 - wArg2 - (m_regF & C_FLAG);
        !           528: 
        !           529:        m_regF  = (((wArg1^q^wArg2)&0x1000)>>8)|((q>>16)&1)|((q&0x8000)>>8)|
        !           530:                ((q&65535)?0:Z_FLAG)|(((wArg1^wArg2)&(wArg1^q)&0x8000)>>13)|N_FLAG;
        !           531: 
        !           532:        return q;
        !           533: #else
        !           534:        int q   = wArg1 - wArg2 - (m_regF & C_FLAG);
        !           535: 
        !           536:        m_regF  = (((wArg1^q^wArg2)&0x1000)>>8)|((q>>16)&1)|((q&0x8000)>>8)|
        !           537:                ((q&65535)?0:Z_FLAG)|(((wArg1^wArg2)&(wArg1^q)&0x8000)>>13)|N_FLAG;
        !           538: 
        !           539:        return q;
        !           540: #endif
        !           541: }
        !           542: 
        !           543: /* inline */ WORD Add_2 (WORD wArg1, WORD wArg2)
        !           544: {
        !           545: #ifdef ARITH_TABLES
        !           546:        int q  = wArg1 + wArg2;
        !           547:        m_regF = (m_regF&(S_FLAG|Z_FLAG|V_FLAG))|(((wArg1^q^wArg2)&0x1000)>>8)|((q>>16)&1);
        !           548:        return q;
        !           549: #else
        !           550:        int q  = wArg1 + wArg2;
        !           551:        m_regF = (m_regF&(S_FLAG|Z_FLAG|V_FLAG))|(((wArg1^q^wArg2)&0x1000)>>8)|((q>>16)&1);
        !           552:        return q;
        !           553: #endif
        !           554: }
        !           555: 
        !           556: /* inline */ void Add_1 (BYTE bArg)
        !           557: {
        !           558: #ifdef ARITH_TABLES
        !           559:        int q = m_regA + bArg;
        !           560:        m_regF = rgfAdd[m_regA][bArg];
        !           561:        m_regA = q;
        !           562: #else
        !           563:        int q = m_regA + bArg;
        !           564:        m_regF=ZSTable[q&255]|((q&256)>>8)| ((m_regA^q^bArg)&H_FLAG)| (((bArg^m_regA^0x80)&(bArg^q)&0x80)>>5);
        !           565:        m_regA=q;
        !           566: #endif
        !           567: }
        !           568: 
        !           569: /* inline */ void Adc_1 (BYTE bArg)
        !           570: {
        !           571: #ifdef ARITH_TABLES
        !           572:        int q  = m_regA + bArg + (m_regF & C_FLAG);
        !           573:        m_regF = rgfAddc[m_regA][bArg][m_regF & C_FLAG];
        !           574:        m_regA = q;
        !           575: #else
        !           576:        int q  = m_regA + bArg + (m_regF & C_FLAG);
        !           577:        m_regF = ZSTable[q & 255]|((q & 256)>>8)|((m_regA^q^bArg)&H_FLAG)|(((bArg^m_regA^0x80)&(bArg^q)&0x80)>>5);
        !           578:        m_regA = q;
        !           579: #endif
        !           580: }
        !           581: 
        !           582: /* inline */ void Sub_1 (BYTE bArg)
        !           583: {
        !           584: #ifdef ARITH_TABLES
        !           585:        int q  = m_regA - bArg;
        !           586:        m_regF = rgfSub[m_regA][bArg];
        !           587:        m_regA = q;
        !           588: #else
        !           589:        int q  = m_regA - bArg;
        !           590:        m_regF = ZSTable[q&255]|((q&256)>>8)|N_FLAG|((m_regA^q^bArg)&H_FLAG)|(((bArg^m_regA)&(m_regA^q)&0x80)>>5);
        !           591:        m_regA = q;
        !           592: #endif
        !           593: }
        !           594: 
        !           595: /* inline */ void Sbc_1 (BYTE bArg)
        !           596: {
        !           597: #ifdef ARITH_TABLES
        !           598:        int q = m_regA - bArg - (m_regF & C_FLAG);
        !           599:        m_regF = rgfSubc[m_regA][bArg][m_regF & C_FLAG];
        !           600:        m_regA = q;
        !           601: #else
        !           602:        int q = m_regA - bArg - (m_regF & C_FLAG);
        !           603:        m_regF=ZSTable[q&255]|((q&256)>>8)|N_FLAG|((m_regA^q^bArg)&H_FLAG)|(((bArg^m_regA)&(bArg^q)&0x80)>>5);
        !           604:        m_regA=q;
        !           605: #endif
        !           606: }
        !           607: 
        !           608: /* inline */ void And (BYTE bArg)
        !           609: {
        !           610:        m_regF = ZSPTable[m_regA &= bArg] | H_FLAG;
        !           611: }
        !           612: 
        !           613: /* inline */ void Or(BYTE bArg)
        !           614: {
        !           615:        m_regF = ZSPTable[m_regA |= bArg];
        !           616: }
        !           617: 
        !           618: /* inline */ void Xor(BYTE bArg)
        !           619: {
        !           620:        m_regF = ZSPTable[m_regA ^= bArg];
        !           621: }
        !           622: 
        !           623: /* inline */ void Cp(BYTE bArg)
        !           624: {
        !           625: #ifdef ARITH_TABLES
        !           626:        int q = m_regA - bArg;
        !           627:        m_regF = rgfSub[m_regA][bArg];
        !           628: #else
        !           629:        int q = m_regA - bArg;
        !           630:        m_regF = ZSTable[q&255]|((q&256)>>8)|N_FLAG|((m_regA^q^bArg)&H_FLAG)|(((bArg^m_regA)&(bArg^q)&0x80)>>5);
        !           631: #endif
        !           632: }
        !           633: 
        !           634: /* inline */ static BYTE Inc(BYTE bArg)
        !           635: {
        !           636: #ifdef ARITH_TABLES
        !           637:        bArg++;
        !           638:        m_regF = (m_regF & C_FLAG) | rgfInc[bArg];
        !           639:        return bArg;
        !           640: #else
        !           641:        bArg++;
        !           642:        m_regF = (m_regF&C_FLAG)|ZSTable[bArg]|((bArg==0x80)?V_FLAG:0)|((bArg&0x0F)?0:H_FLAG);
        !           643:        return bArg;
        !           644: #endif
        !           645: }
        !           646: 
        !           647: /* inline */ static BYTE Dec(BYTE bArg)
        !           648: {
        !           649: #ifdef ARITH_TABLES
        !           650:        m_regF = (m_regF & C_FLAG) | rgfDec[bArg--];
        !           651:        return bArg;
        !           652: #else
        !           653:        m_regF=(m_regF&C_FLAG)|N_FLAG|
        !           654:                ((bArg==0x80)?V_FLAG:0)|((bArg&0x0F)?0:H_FLAG);
        !           655: 
        !           656:        m_regF|=ZSTable[--bArg];
        !           657: 
        !           658:        return bArg;
        !           659: #endif
        !           660: }
        !           661: 
        !           662: // shouldn't even be members...
        !           663: 
        !           664: /* inline */ BYTE Set(BYTE bArg, int nBit)
        !           665: {
        !           666:        return (bArg | (1 << nBit));
        !           667: }
        !           668: 
        !           669: /* inline */ BYTE Res(BYTE bArg, int nBit)
        !           670: {
        !           671:        return (bArg & ~(1 << nBit));
        !           672: }
        !           673: 
        !           674: /* inline */ void Bit(BYTE bArg, int nBit)
        !           675: {
        !           676: #ifdef ARITH_TABLES
        !           677:        m_regF = (m_regF & C_FLAG) | rgfBit[bArg][nBit];
        !           678: #else
        !           679:        m_regF = (m_regF & C_FLAG) | H_FLAG | ((bArg&(1<< nBit))? ((nBit==7)?S_FLAG:0):Z_FLAG);
        !           680: #endif
        !           681: }
        !           682: 
        !           683: /* inline */ BYTE Rlc(BYTE bArg)
        !           684: {
        !           685:        int q  = bArg >> 7;
        !           686:        bArg   = (bArg << 1) | q;
        !           687:        m_regF = ZSPTable[bArg] | q;
        !           688:        return bArg;
        !           689: }
        !           690: 
        !           691: /* inline */ BYTE Rrc(BYTE bArg)
        !           692: {
        !           693:        int q = bArg & 1;
        !           694:        bArg = (bArg >> 1) | (q << 7);
        !           695:        m_regF = ZSPTable[bArg]|q;
        !           696:        return bArg;
        !           697: }
        !           698: 
        !           699: /* inline */ BYTE Rl(BYTE bArg)
        !           700: {
        !           701:        int q=bArg>>7;
        !           702:        bArg=(bArg<<1)|(m_regF&1);
        !           703:        m_regF=ZSPTable[bArg]|q;
        !           704:        return bArg;
        !           705: }
        !           706: 
        !           707: /* inline */ BYTE Rr(BYTE bArg)
        !           708: {
        !           709:        int q = bArg&1;
        !           710:        bArg=(bArg>>1)|(m_regF<<7);
        !           711:        m_regF=ZSPTable[bArg]|q;
        !           712:        return bArg;
        !           713: }
        !           714: 
        !           715: /* inline */ BYTE Sll(BYTE bArg)
        !           716: {
        !           717:        int q = bArg>>7;
        !           718:        bArg=(bArg<<1)|1;
        !           719:        m_regF=ZSPTable[bArg]|q;
        !           720:        return bArg;
        !           721: }
        !           722: 
        !           723: /* inline */ BYTE Srl(BYTE bArg)
        !           724: {
        !           725:        int q = bArg&1;
        !           726:        bArg>>=1;
        !           727:        m_regF=ZSPTable[bArg]|q;
        !           728:        return bArg;
        !           729: }
        !           730: 
        !           731: /* inline */ BYTE Sla(BYTE bArg)
        !           732: {
        !           733:        int q = bArg>>7;
        !           734:        bArg<<=1;
        !           735:        m_regF=ZSPTable[bArg]|q;
        !           736:        return bArg;
        !           737: }
        !           738: 
        !           739: /* inline */ BYTE Sra(BYTE bArg)
        !           740: {
        !           741:        int q = bArg&1;
        !           742:        bArg = (bArg>>1)|(bArg&0x80);
        !           743:        m_regF = ZSPTable[bArg]|q;
        !           744:        return bArg;
        !           745: }
        !           746: 
        !           747: /* ***************************************************************************
        !           748:  * Edwards Z80 Utilities
        !           749:  * ***************************************************************************
        !           750:  */
        !           751: 
        !           752: UINT16 swap_variable;
        !           753: #define swap(b1,b2) swap_variable = b1; b1 = b2; b2 = swap_variable;
        !           754: /* inline void swap ( WORD &b1, WORD &b2 ) {
        !           755:  * WORD b = b1;
        !           756:  * b1 = b2;
        !           757:  * b2 = b;
        !           758:  * }
        !           759:  */
        !           760: 
        !           761: /* inline */ void Rlca() {
        !           762:   m_regA = (m_regA << 1) | ((m_regA & 0x80) >> 7);
        !           763:   m_regF = (m_regF & 0xEC) | (m_regA & C_FLAG);
        !           764: }
        !           765: 
        !           766: /* inline */ void Rrca() {
        !           767:   m_regF=(m_regF&0xEC)|(m_regA&0x01);
        !           768:   m_regA=(m_regA>>1)|(m_regA<<7);
        !           769: }
        !           770: 
        !           771: /* inline */ void Rla() {
        !           772:   int i  = m_regF&C_FLAG;
        !           773:   m_regF = (m_regF&0xEC)|((m_regA&0x80)>>7);
        !           774:   m_regA = (m_regA<<1)|i;
        !           775: }
        !           776: 
        !           777: /* inline */ void Rra() {
        !           778:   int i = m_regF&C_FLAG;
        !           779:   m_regF=(m_regF&0xEC)|(m_regA&0x01);
        !           780:   m_regA=(m_regA>>1)|(i<<7);
        !           781: }
        !           782: 
        !           783: /* ***************************************************************************
        !           784:  * Edwards Z80 Good-bits follow
        !           785:  * ***************************************************************************
        !           786:  */
        !           787: 
        !           788: void InitTables (void) {
        !           789:   int i;
        !           790:   DWORD dw;
        !           791: 
        !           792:        //
        !           793:        //
        !           794:        //
        !           795:        
        !           796:   for (i=0; i<256; ++i)
        !           797:     {
        !           798:       BYTE zs = 0;
        !           799:       int p=0;
        !           800:       BYTE bArg;
        !           801:       int j;
        !           802:                
        !           803:       // zs |= i ? 0 : Z_FLAG;
        !           804:       if (i==0)
        !           805:        zs|=Z_FLAG;
        !           806:                
        !           807:       // zs |= i & S_FLAG;
        !           808:       if (i&0x80)
        !           809:        zs|=S_FLAG;
        !           810:                
        !           811:       if (i&1) ++p;
        !           812:       if (i&2) ++p;
        !           813:       if (i&4) ++p;
        !           814:       if (i&8) ++p;
        !           815:       if (i&16) ++p;
        !           816:       if (i&32) ++p;
        !           817:       if (i&64) ++p;
        !           818:       if (i&128) ++p;
        !           819:                
        !           820:       //               PTable[i]  = (p&1) ? 0:V_FLAG;
        !           821:       ZSTable[i] = zs;
        !           822:       ZSPTable[i]= zs | ((p&1) ? 0:V_FLAG);
        !           823: 
        !           824:       rgfInc[i] = ZSTable[i] | ((i == 0x80) ? V_FLAG : 0) | ((i & 0x0F) ? 0 : H_FLAG);
        !           825: 
        !           826:       //               rgfDec[i] = N_FLAG | ((i == 0x80) ? V_FLAG : 0) | ((i & 0x0F) ? 0 : H_FLAG) | ZSTable[(BYTE)i - 1];
        !           827: 
        !           828:       bArg = i;
        !           829:       rgfDec[i] = N_FLAG|((bArg==0x80)?V_FLAG:0)|((bArg&0x0F)?0:H_FLAG);
        !           830:       rgfDec[i]|=ZSTable[--bArg];
        !           831: 
        !           832:       for ( j = 0; j < 8; j++)
        !           833:        rgfBit[i][j] = H_FLAG | ((i & (1 << j))? ((j == 7) ? S_FLAG : 0) : Z_FLAG);
        !           834:     }
        !           835: 
        !           836:   //
        !           837:   //  Calculate flag tables
        !           838:   //
        !           839:        
        !           840:   for ( dw = 0; dw <= 256 * 256; dw++)
        !           841:     {
        !           842:       BYTE bLo = LOBYTE(LOWORD(dw));
        !           843:       BYTE bHi = HIBYTE(LOWORD(dw));
        !           844:                
        !           845:       const BYTE regA = bLo;
        !           846:       const BYTE bArg = bHi;
        !           847: 
        !           848:       int nAcc;
        !           849:       BYTE regF;
        !           850:       int c;
        !           851: 
        !           852:       //
        !           853:       //  ADD
        !           854:       //
        !           855:                
        !           856:       nAcc = regA + bArg;
        !           857:       regF = 0;
        !           858:                
        !           859:       regF |= ZSTable[nAcc&255];
        !           860:       regF |= ((nAcc&256)>>8);
        !           861:       regF |= ((regA^nAcc^bArg)&H_FLAG);
        !           862:       regF |= (((bArg^regA^0x80)&(bArg^nAcc)&0x80)>>5);
        !           863: 
        !           864:       rgfAdd[regA][bArg] = regF;
        !           865: 
        !           866:       //
        !           867:       //  SUB
        !           868:       //
        !           869:                
        !           870:       nAcc  = regA - bArg;
        !           871:       regF = ZSTable[nAcc&255]|((nAcc&256)>>8)|N_FLAG|((regA^nAcc^bArg)&H_FLAG)|(((bArg^regA)&(regA^nAcc)&0x80)>>5);
        !           872: 
        !           873:       rgfSub[regA][bArg] = regF;
        !           874: 
        !           875:       //
        !           876:       //
        !           877:       //
        !           878: 
        !           879:       for ( c = 0; c <= 1; c++)
        !           880:        {
        !           881:          //
        !           882:          //  ADC
        !           883:          //
        !           884: 
        !           885:          nAcc = regA + bArg + c;
        !           886:          regF = 0;
        !           887:                        
        !           888:          regF |= ZSTable[nAcc&255];
        !           889:          regF |= ((nAcc&256)>>8);
        !           890:          regF |= ((regA^nAcc^bArg)&H_FLAG);
        !           891:          regF |= (((bArg^regA^0x80)&(bArg^nAcc)&0x80)>>5);
        !           892: 
        !           893:          rgfAddc[regA][bArg][c] = regF;
        !           894: 
        !           895:          //
        !           896:          //  SBC
        !           897:          //
        !           898: 
        !           899:          nAcc = regA - bArg - c;
        !           900:          regF = ZSTable[nAcc&255]|((nAcc&256)>>8)|N_FLAG|((regA^nAcc^bArg)&H_FLAG)|(((bArg^regA)&(bArg^nAcc)&0x80)>>5);
        !           901: 
        !           902:          rgfSubc[regA][bArg][c] = regF;
        !           903:        }
        !           904:     }
        !           905: }
        !           906: 
        !           907: /* ***************************************************************************
        !           908:  * Opcodes
        !           909:  * ***************************************************************************
        !           910:  */
        !           911: 
        !           912: /*---------------------------------------------------------------------------
        !           913: 
        !           914:        Exec
        !           915: 
        !           916:        Executes the specified number of t-states.  Returns the actual number of
        !           917:        t-states executed.  If a halt instruction is encountered, the execution
        !           918:        loop exits.  If the processor is currently in a halted state this
        !           919:        function immediately returns 0.
        !           920: 
        !           921: ---------------------------------------------------------------------------*/
        !           922: 
        !           923: unsigned long int mz80exec ( unsigned long int cCyclesArg ) {
        !           924:        UINT32 origElapsedTicks=dwElapsedTicks;
        !           925:        //
        !           926:        //
        !           927:        //
        !           928:        
        !           929: //     if (m_fHalt)
        !           930: //             return 0;
        !           931: 
        !           932:        //
        !           933:        //  Save t-state count for return value calculation
        !           934:        //
        !           935:        
        !           936:        cCycles = cCyclesArg;
        !           937: 
        !           938:        //
        !           939:        //
        !           940:        //
        !           941:        
        !           942: 
        !           943: #ifndef TRACE_Z80
        !           944:        while (cCycles > 0) 
        !           945: #endif
        !           946:        {
        !           947: #ifdef _DEBUG
        !           948:                static int cins;
        !           949:                
        !           950:                if ((cins % 1000) == 0 && GetAsyncKeyState('X') < 0)
        !           951:                        _ASSERT(FALSE);
        !           952: 
        !           953:                _ASSERT(cins != _instrap);
        !           954: 
        !           955:                if (cins >= _rgcins[0] && cins <= _rgcins[0] + _rgcins[1] * _rgcins[2] && ((cins - _rgcins[0]) % _rgcins[2]) == 0)
        !           956:                {
        !           957:                        if (cins == _rgcins[0])
        !           958:                        {
        !           959:                                TRACE("instr    PC   AF   BC   DE   HL   IX   IY   SP   cycl dasm        \n");
        !           960:                                TRACE("-------- ---- ---- ---- ---- ---- ---- ---- ---- ---- ------------\n");
        !           961:                        }
        !           962: 
        !           963:                        TCHAR szBuf[128];
        !           964: 
        !           965:                        Z80_Dasm(&m_rgbMemory[GetPC()], szBuf, GetPC());
        !           966: 
        !           967:                        TRACE("%08X %04X %04X %04X %04X %04X %04X %04X %04X %04X %s\n",
        !           968:                                cins, GetPC(), m_regAF, m_regBC, m_regDE, m_regHL, m_regIX, m_regIY, GetSP(), cCycles, szBuf);
        !           969:                }
        !           970: 
        !           971:                cins++;
        !           972: #endif
        !           973:                const BYTE bOpcode = ImmedByte();
        !           974: 
        !           975: #ifdef _DEBUG
        !           976:                m_rgcOpcode[0][bOpcode]++;
        !           977: #endif
        !           978: 
        !           979:                m_regR++;
        !           980: 
        !           981: #if 0
        !           982:                /* debug crap for RC */
        !           983:                {
        !           984:                  char szBuf [ 128 ];
        !           985:                  Z80_Dasm(&m_rgbMemory[GetPC()], szBuf, GetPC());
        !           986: 
        !           987:                  fprintf ( stderr,
        !           988:                            "%04X %04X %04X %04X %04X %04X %04X %04X %04X %s\n",
        !           989:                            GetPC(), m_regAF, m_regBC, m_regDE, m_regHL,
        !           990:                            m_regIX, m_regIY, GetSP(), cCycles, szBuf );
        !           991:                }
        !           992: 
        !           993:                // fprintf ( stderr, "%d\n", bOpcode );
        !           994: #endif
        !           995:                z80pc = GetPC(); /* for some of the platforms */
        !           996: 
        !           997:                dwElapsedTicks = origElapsedTicks + (cCyclesArg - cCycles);
        !           998: 
        !           999:                switch (bOpcode)
        !          1000:                {
        !          1001:                        case 0x00: // nop     
        !          1002:                                cCycles -= 4;
        !          1003:                                break;
        !          1004:                        
        !          1005:                        case 0x01: // ld_bc_word
        !          1006:                                cCycles -= 10;
        !          1007:                                m_regBC = ImmedWord();
        !          1008:                                break;
        !          1009:                        
        !          1010:                        case 0x02: // ld_xbc_a   
        !          1011:                                cCycles -= 7;
        !          1012:                                MemWriteByte(m_regBC, m_regA);
        !          1013:                                break;
        !          1014:                        
        !          1015:                        case 0x03: // inc_bc    
        !          1016:                                cCycles -= 6;
        !          1017:                                m_regBC++;
        !          1018:                                break;
        !          1019:                        
        !          1020:                        case 0x04: // inc_b   
        !          1021:                                cCycles -= 4;
        !          1022:                                m_regB = Inc(m_regB);
        !          1023:                                break;
        !          1024:                        
        !          1025:                        case 0x05: // dec_b   
        !          1026:                                cCycles -= 4;
        !          1027:                                m_regB = Dec(m_regB);
        !          1028:                                break;
        !          1029:                        
        !          1030:                        case 0x06: // ld_b_byte  
        !          1031:                                cCycles -= 7;
        !          1032:                                m_regB = ImmedByte();
        !          1033:                                break;
        !          1034:                        
        !          1035:                        case 0x07: // rlca    
        !          1036:                                cCycles -= 4;
        !          1037:                                Rlca();
        !          1038:                                break;
        !          1039: 
        !          1040:                        case 0x08: // ex_af_af
        !          1041:                                cCycles -= 4;
        !          1042:                                swap(m_regAF, m_regAF2);
        !          1043:                                break;
        !          1044:                        
        !          1045:                        case 0x09: // add_hl_bc 
        !          1046:                                cCycles -= 11;
        !          1047:                                m_regHL = Add_2(m_regHL, m_regBC);
        !          1048:                                break;
        !          1049:                        
        !          1050:                        case 0x0A: // ld_a_xbc   
        !          1051:                                cCycles -= 7;
        !          1052:                                m_regA = MemReadByte(m_regBC);
        !          1053:                                break;
        !          1054:                        
        !          1055:                        case 0x0B: // dec_bc    
        !          1056:                                cCycles -= 6;
        !          1057:                                m_regBC--;
        !          1058:                                break;
        !          1059:                        
        !          1060:                        case 0x0C: // inc_c   
        !          1061:                                cCycles -= 4;
        !          1062:                                m_regC = Inc(m_regC);
        !          1063:                                break;
        !          1064:                        
        !          1065:                        case 0x0D: // dec_c   
        !          1066:                                cCycles -= 4;
        !          1067:                                m_regC = Dec(m_regC);
        !          1068:                                break;
        !          1069:                        
        !          1070:                        case 0x0E: // ld_c_byte  
        !          1071:                                cCycles -= 7;
        !          1072:                                m_regC = ImmedByte();
        !          1073:                                break;
        !          1074:                        
        !          1075:                        case 0x0F: // rrca    
        !          1076:                                cCycles -= 4;
        !          1077:                                Rrca();
        !          1078:                                break;
        !          1079: 
        !          1080:                        case 0x10: // djnz
        !          1081:                                cCycles -= 8;
        !          1082:                                cCycles -= Jr0(--m_regB);
        !          1083:                                break;
        !          1084:                        
        !          1085:                        case 0x11: // ld_de_word
        !          1086:                                cCycles -= 10;
        !          1087:                                m_regDE = ImmedWord();
        !          1088:                                break;
        !          1089:                        
        !          1090:                        case 0x12: // ld_xde_a   
        !          1091:                                cCycles -= 7;
        !          1092:                                MemWriteByte(m_regDE, m_regA);
        !          1093:                                break;
        !          1094:                        
        !          1095:                        case 0x13: // inc_de    
        !          1096:                                cCycles -= 6;
        !          1097:                                m_regDE++;
        !          1098:                                break;
        !          1099:                        
        !          1100:                        case 0x14: // inc_d   
        !          1101:                                cCycles -= 4;
        !          1102:                                m_regD = Inc(m_regD);
        !          1103:                                break;
        !          1104:                        
        !          1105:                        case 0x15: // dec_d   
        !          1106:                                cCycles -= 4;
        !          1107:                                m_regD = Dec(m_regD);
        !          1108:                                break;
        !          1109:                        
        !          1110:                        case 0x16: // ld_d_byte  
        !          1111:                                cCycles -= 7;
        !          1112:                                m_regD = ImmedByte();
        !          1113:                                break;
        !          1114:                        
        !          1115:                        case 0x17: // rla     
        !          1116:                                cCycles -= 4;
        !          1117:                                Rla();
        !          1118:                                break;
        !          1119: 
        !          1120:                        case 0x18: // jr
        !          1121:                        {
        !          1122: #if 0
        !          1123:                                cCycles -= Jr0(TRUE);
        !          1124: #else
        !          1125:                                // speedup technique adopted from Nicola's code in MAME to speedup
        !          1126:                                // Galaga (the sound CPU spins with "loop: jr loop" waiting for
        !          1127:                                // an interrupt).  This technique is generic enough that is shouldn't
        !          1128:                                // adversely effect other applications.
        !          1129:                                
        !          1130:                                signed char offset = (signed char)ImmedByte();
        !          1131:                                cCycles -= 7;
        !          1132:                                cCycles -= 5;
        !          1133: 
        !          1134:                                AdjustPC(offset);
        !          1135: 
        !          1136:                                if (offset == -2)
        !          1137:                                {
        !          1138: //                                     TRACE(__FILE__ ":jr (infinite loop) at %04X\n", GetPC());
        !          1139:                                  goto z80ExecBottom;
        !          1140:                                  /* return (cCyclesArg - cCycles); */
        !          1141:                                }
        !          1142: #endif
        !          1143:                                break;
        !          1144:                        }
        !          1145:                        
        !          1146:                        case 0x19: // add_hl_de 
        !          1147:                                cCycles -= 11;
        !          1148:                                m_regHL = Add_2(m_regHL, m_regDE);
        !          1149:                                break;
        !          1150:                        
        !          1151:                        case 0x1A: // ld_a_xde   
        !          1152:                                cCycles -= 7;
        !          1153:                                m_regA = MemReadByte(m_regDE);
        !          1154:                                break;
        !          1155:                        
        !          1156:                        case 0x1B: // dec_de    
        !          1157:                                cCycles -= 6;
        !          1158:                                m_regDE--;
        !          1159:                                break;
        !          1160:                        
        !          1161:                        case 0x1C: // inc_e   
        !          1162:                                cCycles -= 4;
        !          1163:                                m_regE = Inc(m_regE); 
        !          1164:                                break;
        !          1165:                        
        !          1166:                        case 0x1D: // dec_e   
        !          1167:                                cCycles -= 4;
        !          1168:                                m_regE = Dec(m_regE);
        !          1169:                                break;
        !          1170:                        
        !          1171:                        case 0x1E: // ld_e_byte  
        !          1172:                                cCycles -= 7;
        !          1173:                                m_regE = ImmedByte();
        !          1174:                                break;
        !          1175:                        
        !          1176:                        case 0x1F: // rra     
        !          1177:                                cCycles -= 4;
        !          1178:                                Rra();
        !          1179:                                break;
        !          1180: 
        !          1181:                        case 0x20: // jr_nz   
        !          1182:                                cCycles -= 7;
        !          1183:                                cCycles -= Jr1(m_regF & Z_FLAG);
        !          1184:                                break;
        !          1185:                        
        !          1186:                        case 0x21: // ld_hl_word
        !          1187:                                cCycles -= 10;
        !          1188:                                m_regHL = ImmedWord();
        !          1189:                                break;
        !          1190:                        
        !          1191:                        case 0x22: // ld_xword_hl
        !          1192:                                cCycles -= 16;
        !          1193:                                MemWriteWord(ImmedWord(), m_regHL);
        !          1194:                                break;
        !          1195:                        
        !          1196:                        case 0x23: // inc_hl    
        !          1197:                                cCycles -= 6;
        !          1198:                                m_regHL++;
        !          1199:                                break;
        !          1200:                        
        !          1201:                        case 0x24: // inc_h   
        !          1202:                                cCycles -= 4;
        !          1203:                                m_regH = Inc(m_regH);
        !          1204:                                break;
        !          1205:                        
        !          1206:                        case 0x25: // dec_h   
        !          1207:                                cCycles -= 4;
        !          1208:                                m_regH = Dec(m_regH);
        !          1209:                                break;
        !          1210:                        
        !          1211:                        case 0x26: // ld_h_byte  
        !          1212:                                cCycles -= 7;
        !          1213:                                m_regH = ImmedByte();
        !          1214:                                break;
        !          1215:                        
        !          1216:                        case 0x27: // daa
        !          1217:                        {
        !          1218:                                int i = m_regA;
        !          1219:                                cCycles -= 4;
        !          1220:                                if (m_regF&C_FLAG) i|=256;
        !          1221:                                if (m_regF&H_FLAG) i|=512;
        !          1222:                                if (m_regF&N_FLAG) i|=1024;
        !          1223:                                m_regAF = DAATable[i];
        !          1224:                                break;
        !          1225:                        }
        !          1226: 
        !          1227:                        case 0x28: // jr_z    
        !          1228:                                cCycles -= 7;
        !          1229:                                cCycles -= Jr0(m_regF & Z_FLAG);
        !          1230:                                break;
        !          1231:                        
        !          1232:                        case 0x29: // add_hl_hl
        !          1233:                                cCycles -= 11;
        !          1234:                                m_regHL = Add_2(m_regHL, m_regHL);
        !          1235:                                break;
        !          1236:                        
        !          1237:                        case 0x2A: // ld_hl_xword
        !          1238:                                cCycles -= 16;
        !          1239:                                m_regHL = MemReadWord(ImmedWord());
        !          1240:                                break;
        !          1241:                        
        !          1242:                        case 0x2B: // dec_hl    
        !          1243:                                cCycles -= 6;
        !          1244:                                m_regHL--;
        !          1245:                                break;
        !          1246:                        
        !          1247:                        case 0x2C: // inc_l   
        !          1248:                                cCycles -= 4;
        !          1249:                                m_regL = Inc(m_regL);
        !          1250:                                break;
        !          1251:                        
        !          1252:                        case 0x2D: // dec_l   
        !          1253:                                cCycles -= 4;
        !          1254:                                m_regL = Dec(m_regL);
        !          1255:                                break;
        !          1256:                        
        !          1257:                        case 0x2E: // ld_l_byte  
        !          1258:                                cCycles -= 7;
        !          1259:                                m_regL = ImmedByte();
        !          1260:                                break;
        !          1261:                        
        !          1262:                        case 0x2F: // cpl     
        !          1263:                                cCycles -= 4;
        !          1264:                                m_regA ^= 0xFF;
        !          1265:                                m_regF |= (H_FLAG | N_FLAG);
        !          1266:                                break;
        !          1267: 
        !          1268:                        case 0x30: // jr_nc   
        !          1269:                                cCycles -= 7;
        !          1270:                                cCycles -= Jr1(m_regF & C_FLAG);
        !          1271:                                break;
        !          1272:                        
        !          1273:                        case 0x31: // ld_sp_word
        !          1274:                                cCycles -= 10;
        !          1275:                                SetSP(ImmedWord());
        !          1276:                                break;
        !          1277:                        
        !          1278:                        case 0x32: // ld_xbyte_a
        !          1279:                                cCycles -= 13;
        !          1280:                                MemWriteByte(ImmedWord(), m_regA);
        !          1281:                                break;
        !          1282:                        
        !          1283:                        case 0x33: // inc_sp
        !          1284:                                cCycles -= 6;
        !          1285:                                SetSP(GetSP() + 1);
        !          1286:                                break;
        !          1287:                        
        !          1288:                        case 0x34: // inc_xhl
        !          1289:                                cCycles -= 11;
        !          1290:                                MemWriteByte(m_regHL, Inc(MemReadByte(m_regHL)));
        !          1291:                                break;
        !          1292:                        
        !          1293:                        case 0x35: // dec_xhl
        !          1294:                                cCycles -= 11;
        !          1295:                                MemWriteByte(m_regHL, Dec(MemReadByte(m_regHL)));
        !          1296:                                break;
        !          1297:                        
        !          1298:                        case 0x36: // ld_xhl_byte
        !          1299:                                cCycles -= 10;
        !          1300:                                MemWriteByte(m_regHL, ImmedByte());
        !          1301:                                break;
        !          1302:                        
        !          1303:                        case 0x37: // scf
        !          1304:                                cCycles -= 4;
        !          1305:                                m_regF = (m_regF & 0xEC) | C_FLAG;
        !          1306:                                break;
        !          1307: 
        !          1308:                        case 0x38: // jr_c
        !          1309:                                cCycles -= 7;
        !          1310:                                cCycles -= Jr0(m_regF & C_FLAG);
        !          1311:                                break;
        !          1312:                        
        !          1313:                        case 0x39: // add_hl_sp
        !          1314:                                cCycles -= 11;
        !          1315:                                m_regHL = Add_2(m_regHL, GetSP());
        !          1316:                                break;
        !          1317:                        
        !          1318:                        case 0x3A: // ld_a_xbyte 
        !          1319:                                cCycles -= 13;
        !          1320:                                m_regA = MemReadByte(ImmedWord());
        !          1321:                                break;
        !          1322:                        
        !          1323:                        case 0x3B: // dec_sp
        !          1324:                                cCycles -= 6;
        !          1325:                                SetSP(GetSP() - 1);
        !          1326:                                break;
        !          1327:                        
        !          1328:                        case 0x3C: // inc_a
        !          1329:                                cCycles -= 4;
        !          1330:                                m_regA = Inc(m_regA);
        !          1331:                                break;
        !          1332:                        
        !          1333:                        case 0x3D: // dec_a
        !          1334:                                cCycles -= 4;
        !          1335:                                m_regA = Dec(m_regA);
        !          1336:                                break;
        !          1337:                        
        !          1338:                        case 0x3E: // ld_a_byte
        !          1339:                                cCycles -= 7;
        !          1340:                                m_regA = ImmedByte();
        !          1341:                                break;
        !          1342:                        
        !          1343:                        case 0x3F: // ccf
        !          1344:                                cCycles -= 4;
        !          1345:                                m_regF =((m_regF & 0xED)|((m_regF & 1)<<4))^1;
        !          1346:                                break;
        !          1347: 
        !          1348:                        case 0x40: // ld_b_b  
        !          1349:                                cCycles -= 4;
        !          1350:                                m_regB = m_regB;
        !          1351:                                break;
        !          1352:                        
        !          1353:                        case 0x41: // ld_b_c
        !          1354:                                cCycles -= 4;
        !          1355:                                m_regB = m_regC;
        !          1356:                                break;
        !          1357:                        
        !          1358:                        case 0x42: // ld_b_d
        !          1359:                                cCycles -= 4;
        !          1360:                                m_regB = m_regD;
        !          1361:                                break;
        !          1362:                        
        !          1363:                        case 0x43: // ld_b_e
        !          1364:                                cCycles -= 4;
        !          1365:                                m_regB = m_regE;
        !          1366:                                break;
        !          1367:                        
        !          1368:                        case 0x44: // ld_b_h  
        !          1369:                                cCycles -= 4;
        !          1370:                                m_regB = m_regH;
        !          1371:                                break;
        !          1372:                        
        !          1373:                        case 0x45: // ld_b_l  
        !          1374:                                cCycles -= 4;
        !          1375:                                m_regB = m_regL;
        !          1376:                                break;
        !          1377:                        
        !          1378:                        case 0x46: // ld_b_xhl   
        !          1379:                                cCycles -= 7;
        !          1380:                                m_regB = MemReadByte(m_regHL);
        !          1381:                                break;
        !          1382:                        
        !          1383:                        case 0x47: // ld_b_a  
        !          1384:                                cCycles -= 4;
        !          1385:                                m_regB = m_regA;
        !          1386:                                break;
        !          1387: 
        !          1388:                        case 0x48: // ld_c_b  
        !          1389:                                cCycles -= 4;
        !          1390:                                m_regC = m_regB;
        !          1391:                                break;
        !          1392:                        
        !          1393:                        case 0x49: // ld_c_c    
        !          1394:                                cCycles -= 4;
        !          1395:                                m_regC = m_regC;
        !          1396:                                break;
        !          1397:                        
        !          1398:                        case 0x4A: // ld_c_d     
        !          1399:                                cCycles -= 4;
        !          1400:                                m_regC = m_regD;
        !          1401:                                break;
        !          1402:                        
        !          1403:                        case 0x4B: // ld_c_e    
        !          1404:                                cCycles -= 4;
        !          1405:                                m_regC = m_regE;
        !          1406:                                break;
        !          1407:                        
        !          1408:                        case 0x4C: // ld_c_h  
        !          1409:                                cCycles -= 4;
        !          1410:                                m_regC = m_regH;
        !          1411:                                break;
        !          1412:                        
        !          1413:                        case 0x4D: // ld_c_l  
        !          1414:                                cCycles -= 4;
        !          1415:                                m_regC = m_regL;
        !          1416:                                break;
        !          1417:                        
        !          1418:                        case 0x4E: // ld_c_xhl   
        !          1419:                                cCycles -= 7;
        !          1420:                                m_regC = MemReadByte(m_regHL);
        !          1421:                                break;
        !          1422:                        
        !          1423:                        case 0x4F: // ld_c_a  
        !          1424:                                cCycles -= 4;
        !          1425:                                m_regC = m_regA;
        !          1426:                                break;
        !          1427: 
        !          1428:                        case 0x50: // ld_d_b  
        !          1429:                                cCycles -= 4;
        !          1430:                                m_regD = m_regB;
        !          1431:                                break;
        !          1432:                        
        !          1433:                        case 0x51: // ld_d_c    
        !          1434:                                cCycles -= 4;
        !          1435:                                m_regD = m_regC;
        !          1436:                                break;
        !          1437:                        
        !          1438:                        case 0x52: // ld_d_d     
        !          1439:                                cCycles -= 4;
        !          1440:                                m_regD = m_regD;
        !          1441:                                break;
        !          1442:                        
        !          1443:                        case 0x53: // ld_d_e    
        !          1444:                                cCycles -= 4;
        !          1445:                                m_regD = m_regE;
        !          1446:                                break;
        !          1447:                        
        !          1448:                        case 0x54: // ld_d_h  
        !          1449:                                cCycles -= 4;
        !          1450:                                m_regD = m_regH;
        !          1451:                                break;
        !          1452:                        
        !          1453:                        case 0x55: // ld_d_l  
        !          1454:                                cCycles -= 4;
        !          1455:                                m_regD = m_regL;
        !          1456:                                break;
        !          1457:                        
        !          1458:                        case 0x56: // ld_d_xhl   
        !          1459:                                cCycles -= 7;
        !          1460:                                m_regD = MemReadByte(m_regHL);
        !          1461:                                break;
        !          1462:                        
        !          1463:                        case 0x57: // ld_d_a  
        !          1464:                                cCycles -= 4;
        !          1465:                                m_regD = m_regA;
        !          1466:                                break;
        !          1467: 
        !          1468:                        case 0x58: // ld_e_b  
        !          1469:                                cCycles -= 4;
        !          1470:                                m_regE = m_regB;
        !          1471:                                break;
        !          1472:                        
        !          1473:                        case 0x59: // ld_e_c    
        !          1474:                                cCycles -= 4;
        !          1475:                                m_regE = m_regC;
        !          1476:                                break;
        !          1477:                        
        !          1478:                        case 0x5A: // ld_e_d     
        !          1479:                                cCycles -= 4;
        !          1480:                                m_regE = m_regD;
        !          1481:                                break;
        !          1482:                        
        !          1483:                        case 0x5B: // ld_e_e    
        !          1484:                                cCycles -= 4;
        !          1485:                                m_regE = m_regE;
        !          1486:                                break;
        !          1487:                        
        !          1488:                        case 0x5C: // ld_e_h  
        !          1489:                                cCycles -= 4;
        !          1490:                                m_regE = m_regH;
        !          1491:                                break;
        !          1492:                        
        !          1493:                        case 0x5D: // ld_e_l  
        !          1494:                                cCycles -= 4;
        !          1495:                                m_regE = m_regL;
        !          1496:                                break;
        !          1497:                        
        !          1498:                        case 0x5E: // ld_e_xhl   
        !          1499:                                cCycles -= 7;
        !          1500:                                m_regE = MemReadByte(m_regHL);
        !          1501:                                break;
        !          1502:                        
        !          1503:                        case 0x5F: // ld_e_a  
        !          1504:                                cCycles -= 4;
        !          1505:                                m_regE = m_regA;
        !          1506:                                break;
        !          1507: 
        !          1508:                        case 0x60: // ld_h_b  
        !          1509:                                cCycles -= 4;
        !          1510:                                m_regH = m_regB;
        !          1511:                                break;
        !          1512:                        
        !          1513:                        case 0x61: // ld_h_c    
        !          1514:                                cCycles -= 4;
        !          1515:                                m_regH = m_regC;
        !          1516:                                break;
        !          1517:                        
        !          1518:                        case 0x62: // ld_h_d     
        !          1519:                                cCycles -= 4;
        !          1520:                                m_regH = m_regD;
        !          1521:                                break;
        !          1522:                        
        !          1523:                        case 0x63: // ld_h_e    
        !          1524:                                cCycles -= 4;
        !          1525:                                m_regH = m_regE;
        !          1526:                                break;
        !          1527:                        
        !          1528:                        case 0x64: // ld_h_h  
        !          1529:                                cCycles -= 4;
        !          1530:                                m_regH = m_regH;
        !          1531:                                break;
        !          1532:                        
        !          1533:                        case 0x65: // ld_h_l  
        !          1534:                                cCycles -= 4;
        !          1535:                                m_regH = m_regL;
        !          1536:                                break;
        !          1537:                        
        !          1538:                        case 0x66: // ld_h_xhl   
        !          1539:                                cCycles -= 7;
        !          1540:                                m_regH = MemReadByte(m_regHL);
        !          1541:                                break;
        !          1542:                        
        !          1543:                        case 0x67: // ld_h_a  
        !          1544:                                cCycles -= 4;
        !          1545:                                m_regH = m_regA;
        !          1546:                                break;
        !          1547: 
        !          1548:                        case 0x68: // ld_l_b  
        !          1549:                                cCycles -= 4;
        !          1550:                                m_regL = m_regB;
        !          1551:                                break;
        !          1552:                        
        !          1553:                        case 0x69: // ld_l_c    
        !          1554:                                cCycles -= 4;
        !          1555:                                m_regL = m_regC;
        !          1556:                                break;
        !          1557:                        
        !          1558:                        case 0x6A: // ld_l_d     
        !          1559:                                cCycles -= 4;
        !          1560:                                m_regL = m_regD;
        !          1561:                                break;
        !          1562:                        
        !          1563:                        case 0x6B: // ld_l_e    
        !          1564:                                cCycles -= 4;
        !          1565:                                m_regL = m_regE;
        !          1566:                                break;
        !          1567:                        
        !          1568:                        case 0x6C: // ld_l_h  
        !          1569:                                cCycles -= 4;
        !          1570:                                m_regL = m_regH;
        !          1571:                                break;
        !          1572:                        
        !          1573:                        case 0x6D: // ld_l_l  
        !          1574:                                cCycles -= 4;
        !          1575:                                m_regL = m_regL;
        !          1576:                                break;
        !          1577:                        
        !          1578:                        case 0x6E: // ld_l_xhl   
        !          1579:                                cCycles -= 7;
        !          1580:                                m_regL = MemReadByte(m_regHL);
        !          1581:                                break;
        !          1582:                        
        !          1583:                        case 0x6F: // ld_l_a  
        !          1584:                                cCycles -= 4;
        !          1585:                                m_regL = m_regA;
        !          1586:                                break;
        !          1587: 
        !          1588:                        case 0x70: // ld_xhl_b
        !          1589:                                cCycles -= 7;
        !          1590:                                MemWriteByte(m_regHL, m_regB);
        !          1591:                                break;
        !          1592:                        
        !          1593:                        case 0x71: // ld_xhl_c  
        !          1594:                                cCycles -= 7;
        !          1595:                                MemWriteByte(m_regHL, m_regC);
        !          1596:                                break;
        !          1597:                        
        !          1598:                        case 0x72: // ld_xhl_d   
        !          1599:                                cCycles -= 7;
        !          1600:                                MemWriteByte(m_regHL, m_regD);
        !          1601:                                break;
        !          1602:                        
        !          1603:                        case 0x73: // ld_xhl_e  
        !          1604:                                cCycles -= 7;
        !          1605:                                MemWriteByte(m_regHL, m_regE);
        !          1606:                                break;
        !          1607:                        
        !          1608:                        case 0x74: // ld_xhl_h
        !          1609:                                cCycles -= 7;
        !          1610:                                MemWriteByte(m_regHL, m_regH);
        !          1611:                                break;
        !          1612:                        
        !          1613:                        case 0x75: // ld_xhl_l
        !          1614:                                cCycles -= 7;
        !          1615:                                MemWriteByte(m_regHL, m_regL);
        !          1616:                                break;
        !          1617:                        
        !          1618:                        case 0x76: // halt
        !          1619:                                cCycles -= 4;
        !          1620:                                SetPC(GetPC() - 1);
        !          1621:                                m_fHalt = TRUE;
        !          1622:                                goto z80ExecBottom;
        !          1623:                                /* return (cCyclesArg - cCycles); */
        !          1624:                        
        !          1625:                        case 0x77: // ld_xhl_a
        !          1626:                                cCycles -= 7;
        !          1627:                                MemWriteByte(m_regHL, m_regA);
        !          1628:                                break;
        !          1629: 
        !          1630:                        case 0x78: // ld_a_b  
        !          1631:                                cCycles -= 4;
        !          1632:                                m_regA = m_regB;
        !          1633:                                break;
        !          1634:                        
        !          1635:                        case 0x79: // ld_a_c    
        !          1636:                                cCycles -= 4;
        !          1637:                                m_regA = m_regC;
        !          1638:                                break;
        !          1639:                        
        !          1640:                        case 0x7A: // ld_a_d     
        !          1641:                                cCycles -= 4;
        !          1642:                                m_regA = m_regD;
        !          1643:                                break;
        !          1644:                        
        !          1645:                        case 0x7B: // ld_a_e    
        !          1646:                                cCycles -= 4;
        !          1647:                                m_regA = m_regE;
        !          1648:                                break;
        !          1649:                        
        !          1650:                        case 0x7C: // ld_a_h  
        !          1651:                                cCycles -= 4;
        !          1652:                                m_regA = m_regH;
        !          1653:                                break;
        !          1654:                        
        !          1655:                        case 0x7D: // ld_a_l  
        !          1656:                                cCycles -= 4;
        !          1657:                                m_regA = m_regL;
        !          1658:                                break;
        !          1659:                        
        !          1660:                        case 0x7E: // ld_a_xhl   
        !          1661:                                cCycles -= 7;
        !          1662:                                m_regA = MemReadByte(m_regHL);
        !          1663:                                break;
        !          1664:                        
        !          1665:                        case 0x7F: // ld_a_a  
        !          1666:                                cCycles -= 4;
        !          1667:                                m_regA = m_regA;
        !          1668:                                break;
        !          1669: 
        !          1670:                        case 0x80: // add_a_b 
        !          1671:                                cCycles -= 4;
        !          1672:                                Add_1(m_regB);
        !          1673:                                break;
        !          1674:                        
        !          1675:                        case 0x81: // add_a_c   
        !          1676:                                cCycles -= 4;
        !          1677:                                Add_1(m_regC);
        !          1678:                                break;
        !          1679:                        
        !          1680:                        case 0x82: // add_a_d    
        !          1681:                                cCycles -= 4;
        !          1682:                                Add_1(m_regD);
        !          1683:                                break;
        !          1684:                        
        !          1685:                        case 0x83: // add_a_e   
        !          1686:                                cCycles -= 4;
        !          1687:                                Add_1(m_regE);
        !          1688:                                break;
        !          1689:                        
        !          1690:                        case 0x84: // add_a_h 
        !          1691:                                cCycles -= 4;
        !          1692:                                Add_1(m_regH);
        !          1693:                                break;
        !          1694:                        
        !          1695:                        case 0x85: // add_a_l 
        !          1696:                                cCycles -= 4;
        !          1697:                                Add_1(m_regL);
        !          1698:                                break;
        !          1699:                        
        !          1700:                        case 0x86: // add_a_xhl  
        !          1701:                                cCycles -= 7;
        !          1702:                                Add_1(MemReadByte(m_regHL));
        !          1703:                                break;
        !          1704:                        
        !          1705:                        case 0x87: // add_a_a 
        !          1706:                                cCycles -= 4;
        !          1707:                                Add_1(m_regA);
        !          1708:                                break;
        !          1709: 
        !          1710:                        case 0x88: // adc_a_b 
        !          1711:                                cCycles -= 4;
        !          1712:                                Adc_1(m_regB);
        !          1713:                                break;
        !          1714:                        
        !          1715:                        case 0x89: // adc_a_c   
        !          1716:                                cCycles -= 4;
        !          1717:                                Adc_1(m_regC);
        !          1718:                                break;
        !          1719:                        
        !          1720:                        case 0x8A: // adc_a_d    
        !          1721:                                cCycles -= 4;
        !          1722:                                Adc_1(m_regD);
        !          1723:                                break;
        !          1724:                        
        !          1725:                        case 0x8B: // adc_a_e   
        !          1726:                                cCycles -= 4;
        !          1727:                                Adc_1(m_regE);
        !          1728:                                break;
        !          1729:                        
        !          1730:                        case 0x8C: // adc_a_h 
        !          1731:                                cCycles -= 4;
        !          1732:                                Adc_1(m_regH);
        !          1733:                                break;
        !          1734:                        
        !          1735:                        case 0x8D: // adc_a_l 
        !          1736:                                cCycles -= 4;
        !          1737:                                Adc_1(m_regL);
        !          1738:                                break;
        !          1739:                        
        !          1740:                        case 0x8E: // adc_a_xhl  
        !          1741:                                cCycles -= 7;
        !          1742:                                Adc_1(MemReadByte(m_regHL));
        !          1743:                                break;
        !          1744:                        
        !          1745:                        case 0x8F: // adc_a_a 
        !          1746:                                cCycles -= 4;
        !          1747:                                Adc_1(m_regA);
        !          1748:                                break;
        !          1749: 
        !          1750:                        case 0x90: // sub_b   
        !          1751:                                cCycles -= 4;
        !          1752:                                Sub_1(m_regB);
        !          1753:                                break;
        !          1754:                        
        !          1755:                        case 0x91: // sub_c     
        !          1756:                                cCycles -= 4;
        !          1757:                                Sub_1(m_regC);
        !          1758:                                break;
        !          1759:                        
        !          1760:                        case 0x92: // sub_d      
        !          1761:                                cCycles -= 4;
        !          1762:                                Sub_1(m_regD);
        !          1763:                                break;
        !          1764:                        
        !          1765:                        case 0x93: // sub_e     
        !          1766:                                cCycles -= 4;
        !          1767:                                Sub_1(m_regE);
        !          1768:                                break;
        !          1769:                        
        !          1770:                        case 0x94: // sub_h   
        !          1771:                                cCycles -= 4;
        !          1772:                                Sub_1(m_regH);
        !          1773:                                break;
        !          1774:                        
        !          1775:                        case 0x95: // sub_l   
        !          1776:                                cCycles -= 4;
        !          1777:                                Sub_1(m_regL);
        !          1778:                                break;
        !          1779:                        
        !          1780:                        case 0x96: // sub_xhl    
        !          1781:                                cCycles -= 7;
        !          1782:                                Sub_1(MemReadByte(m_regHL));
        !          1783:                                break;
        !          1784:                        
        !          1785:                        case 0x97: // sub_a   
        !          1786:                                cCycles -= 4;
        !          1787:                                Sub_1(m_regA);
        !          1788:                                break;
        !          1789: 
        !          1790:                        case 0x98: // sbc_a_b 
        !          1791:                                cCycles -= 4;
        !          1792:                                Sbc_1(m_regB);
        !          1793:                                break;
        !          1794:                        
        !          1795:                        case 0x99: // sbc_a_c   
        !          1796:                                cCycles -= 4;
        !          1797:                                Sbc_1(m_regC);
        !          1798:                                break;
        !          1799:                        
        !          1800:                        case 0x9A: // sbc_a_d    
        !          1801:                                cCycles -= 4;
        !          1802:                                Sbc_1(m_regD);
        !          1803:                                break;
        !          1804:                        
        !          1805:                        case 0x9B: // sbc_a_e   
        !          1806:                                cCycles -= 4;
        !          1807:                                Sbc_1(m_regE);
        !          1808:                                break;
        !          1809:                        
        !          1810:                        case 0x9C: // sbc_a_h 
        !          1811:                                cCycles -= 4;
        !          1812:                                Sbc_1(m_regH);
        !          1813:                                break;
        !          1814:                        
        !          1815:                        case 0x9D: // sbc_a_l 
        !          1816:                                cCycles -= 4;
        !          1817:                                Sbc_1(m_regL);
        !          1818:                                break;
        !          1819:                        
        !          1820:                        case 0x9E: // sbc_a_xhl  
        !          1821:                                cCycles -= 7;
        !          1822:                                Sbc_1(MemReadByte(m_regHL));
        !          1823:                                break;
        !          1824:                        
        !          1825:                        case 0x9F: // sbc_a_a 
        !          1826:                                cCycles -= 4;
        !          1827:                                Sbc_1(m_regA);
        !          1828:                                break;
        !          1829: 
        !          1830:                        case 0xA0: // and_b   
        !          1831:                                cCycles -= 4;
        !          1832:                                And(m_regB);
        !          1833:                                break;
        !          1834:                        
        !          1835:                        case 0xA1: // and_c     
        !          1836:                                cCycles -= 4;
        !          1837:                                And(m_regC);
        !          1838:                                break;
        !          1839:                        
        !          1840:                        case 0xA2: // and_d      
        !          1841:                                cCycles -= 4;
        !          1842:                                And(m_regD);
        !          1843:                                break;
        !          1844:                        
        !          1845:                        case 0xA3: // and_e     
        !          1846:                                cCycles -= 4;
        !          1847:                                And(m_regE);
        !          1848:                                break;
        !          1849:                        
        !          1850:                        case 0xA4: // and_h   
        !          1851:                                cCycles -= 4;
        !          1852:                                And(m_regH);
        !          1853:                                break;
        !          1854:                        
        !          1855:                        case 0xA5: // and_l   
        !          1856:                                cCycles -= 4;
        !          1857:                                And(m_regL);
        !          1858:                                break;
        !          1859:                        
        !          1860:                        case 0xA6: // and_xhl    
        !          1861:                                cCycles -= 7;
        !          1862:                                And(MemReadByte(m_regHL));
        !          1863:                                break;
        !          1864:                        
        !          1865:                        case 0xA7: // and_a   
        !          1866:                                cCycles -= 4;
        !          1867:                                And(m_regA);
        !          1868:                                break;
        !          1869: 
        !          1870:                        case 0xA8: // xor_b   
        !          1871:                                cCycles -= 4;
        !          1872:                                Xor(m_regB);
        !          1873:                                break;
        !          1874:                        
        !          1875:                        case 0xA9: // xor_c     
        !          1876:                                cCycles -= 4;
        !          1877:                                Xor(m_regC);
        !          1878:                                break;
        !          1879:                        
        !          1880:                        case 0xAA: // xor_d      
        !          1881:                                cCycles -= 4;
        !          1882:                                Xor(m_regD);
        !          1883:                                break;
        !          1884:                        
        !          1885:                        case 0xAB: // xor_e     
        !          1886:                                cCycles -= 4;
        !          1887:                                Xor(m_regE);
        !          1888:                                break;
        !          1889:                        
        !          1890:                        case 0xAC: // xor_h   
        !          1891:                                cCycles -= 4;
        !          1892:                                Xor(m_regH);
        !          1893:                                break;
        !          1894:                        
        !          1895:                        case 0xAD: // xor_l   
        !          1896:                                cCycles -= 4;
        !          1897:                                Xor(m_regL);
        !          1898:                                break;
        !          1899:                        
        !          1900:                        case 0xAE: // xor_xhl    
        !          1901:                                cCycles -= 7;
        !          1902:                                Xor(MemReadByte(m_regHL));
        !          1903:                                break;
        !          1904:                        
        !          1905:                        case 0xAF: // xor_a   
        !          1906:                                cCycles -= 4;
        !          1907:                                Xor(m_regA);
        !          1908:                                break;
        !          1909: 
        !          1910:                        case 0xB0: // or_b    
        !          1911:                                cCycles -= 4;
        !          1912:                                Or(m_regB);
        !          1913:                                break;
        !          1914:                        
        !          1915:                        case 0xB1: // or_c      
        !          1916:                                cCycles -= 4;
        !          1917:                                Or(m_regC);
        !          1918:                                break;
        !          1919:                        
        !          1920:                        case 0xB2: // or_d       
        !          1921:                                cCycles -= 4;
        !          1922:                                Or(m_regD);
        !          1923:                                break;
        !          1924:                        
        !          1925:                        case 0xB3: // or_e      
        !          1926:                                cCycles -= 4;
        !          1927:                                Or(m_regE);
        !          1928:                                break;
        !          1929:                        
        !          1930:                        case 0xB4: // or_h    
        !          1931:                                cCycles -= 4;
        !          1932:                                Or(m_regH);
        !          1933:                                break;
        !          1934:                        
        !          1935:                        case 0xB5: // or_l    
        !          1936:                                cCycles -= 4;
        !          1937:                                Or(m_regL);
        !          1938:                                break;
        !          1939:                        
        !          1940:                        case 0xB6: // or_xhl     
        !          1941:                                cCycles -= 7;
        !          1942:                                Or(MemReadByte(m_regHL));
        !          1943:                                break;
        !          1944:                        
        !          1945:                        case 0xB7: // or_a    
        !          1946:                                cCycles -= 4;
        !          1947:                                Or(m_regA);
        !          1948:                                break;
        !          1949: 
        !          1950:                        case 0xB8: // cp_b    
        !          1951:                                cCycles -= 4;
        !          1952:                                Cp(m_regB);
        !          1953:                                break;
        !          1954:                        
        !          1955:                        case 0xB9: // cp_c      
        !          1956:                                cCycles -= 4;
        !          1957:                                Cp(m_regC);
        !          1958:                                break;
        !          1959:                        
        !          1960:                        case 0xBA: // cp_d       
        !          1961:                                cCycles -= 4;
        !          1962:                                Cp(m_regD);
        !          1963:                                break;
        !          1964:                        
        !          1965:                        case 0xBB: // cp_e      
        !          1966:                                cCycles -= 4;
        !          1967:                                Cp(m_regE);
        !          1968:                                break;
        !          1969:                        
        !          1970:                        case 0xBC: // cp_h    
        !          1971:                                cCycles -= 4;
        !          1972:                                Cp(m_regH);
        !          1973:                                break;
        !          1974:                        
        !          1975:                        case 0xBD: // cp_l    
        !          1976:                                cCycles -= 4;
        !          1977:                                Cp(m_regL);
        !          1978:                                break;
        !          1979:                        
        !          1980:                        case 0xBE: // cp_xhl     
        !          1981:                                cCycles -= 7;
        !          1982:                                Cp(MemReadByte(m_regHL));
        !          1983:                                break;
        !          1984:                        
        !          1985:                        case 0xBF: // cp_a    
        !          1986:                                cCycles -= 4;
        !          1987:                                Cp(m_regA);
        !          1988:                                break;
        !          1989: 
        !          1990:                        case 0xC0: // ret_nz 
        !          1991:                                cCycles -= 5;
        !          1992:                                cCycles -= Ret1(m_regF & Z_FLAG);
        !          1993:                                break;
        !          1994:                        
        !          1995:                        case 0xC1: // pop_bc    
        !          1996:                                cCycles -= 10;
        !          1997:                                m_regBC = Pop();
        !          1998:                                break;
        !          1999:                        
        !          2000:                        case 0xC2: // jp_nz      
        !          2001:                                cCycles -= 10;
        !          2002:                                cCycles -= Jp1(m_regF & Z_FLAG);
        !          2003:                                break;
        !          2004:                        
        !          2005:                        case 0xC3: // jp
        !          2006:                                cCycles -= 10;
        !          2007: #if 0
        !          2008:                                Jp0(TRUE);
        !          2009: #else
        !          2010:                                {
        !          2011:                                        // speedup hack for Galaga adopted from MAME...
        !          2012:                                        
        !          2013:                                        WORD w = ImmedWord();
        !          2014:                                        WORD wPc = GetPC();
        !          2015:                                        
        !          2016:                                        SetPC(w);
        !          2017: 
        !          2018:                                        // removed since Galaga never hit it (maybe 1942 will), and it
        !          2019:                                        // caused the slowdown in Time Pilot and Gyruss hiscore bug
        !          2020:                                        // it isn't correct anyway since "0085 jp 0088" causes is to return (Gyruss)
        !          2021:                                        // shouldn't it be if (w == wPC - 3)???
        !          2022:                                        // jul-26-97 eam
        !          2023: 
        !          2024: /*
        !          2025:                                        if (w == wPc)
        !          2026:                                        {
        !          2027:        //                                      TRACE(__FILE__ ":jp (infinite loop) at %04X\n", GetPC());
        !          2028:                                                return (cCyclesArg - cCycles);
        !          2029:                                        }
        !          2030:                                        else */
        !          2031:                                        if (w == wPc - 6) // attn: very Galaga specific!!!! should be done in MageX by patching ROMs with HALTs (once I figure out how to fool the ROM check at bootup)
        !          2032:                                        {
        !          2033:                                                if (*m_rgbOpcode == 0x31)
        !          2034:                                                {
        !          2035:                //                                      TRACE(__FILE__ ":jp (ld sp,#xxxx) at %04X\n", GetPC());
        !          2036:                                                  goto z80ExecBottom;
        !          2037:                                                  /* return (cCyclesArg - cCycles); */
        !          2038:                                                }
        !          2039:                                        }
        !          2040:                                }
        !          2041: #endif
        !          2042:                                break;
        !          2043:                        
        !          2044:                        case 0xC4: // call_nz 
        !          2045:                                cCycles -= 10;
        !          2046:                                cCycles -= Call1(m_regF & Z_FLAG);
        !          2047:                                break;
        !          2048:                        
        !          2049:                        case 0xC5: // push_bc
        !          2050:                                cCycles -= 11;
        !          2051:                                Push(m_regBC);
        !          2052:                                break;
        !          2053:                        
        !          2054:                        case 0xC6: // add_a_byte 
        !          2055:                                cCycles -= 7;
        !          2056:                                Add_1(ImmedByte());
        !          2057:                                break;
        !          2058:                        
        !          2059:                        case 0xC7: // rst_00  
        !          2060:                                cCycles -= 11;
        !          2061:                                Rst(0x00);
        !          2062:                                break;
        !          2063: 
        !          2064:                        case 0xC8: // ret_z
        !          2065:                                cCycles -= 5;
        !          2066:                                cCycles -= Ret0(m_regF & Z_FLAG);
        !          2067:                                break;
        !          2068:                        
        !          2069:                        case 0xC9: // ret
        !          2070:                                cCycles -= 4;
        !          2071:                                cCycles -= Ret0(TRUE);
        !          2072:                                break;
        !          2073:                        
        !          2074:                        case 0xCA: // jp_z
        !          2075:                                cCycles -= 10;
        !          2076:                                cCycles -= Jp0(m_regF & Z_FLAG);
        !          2077:                                break;
        !          2078:                        
        !          2079:                        case 0xCB: // cb
        !          2080:                                cCycles -= HandleCB();
        !          2081:                                break;
        !          2082:                        
        !          2083:                        case 0xCC: // call_z
        !          2084:                                cCycles -= 10;
        !          2085:                                cCycles -= Call0(m_regF & Z_FLAG);
        !          2086:                                break;
        !          2087:                        
        !          2088:                        case 0xCD: // call
        !          2089:                                cCycles -= 10;
        !          2090:                                cCycles -= Call0(TRUE);
        !          2091:                                break;
        !          2092:                        
        !          2093:                        case 0xCE: // adc_a_byte
        !          2094:                                cCycles -= 7;
        !          2095:                                Adc_1(ImmedByte());
        !          2096:                                break;
        !          2097:                        
        !          2098:                        case 0xCF: // rst_08
        !          2099:                                cCycles -= 11;
        !          2100:                                Rst(0x08);
        !          2101:                                break;
        !          2102: 
        !          2103:                        case 0xD0: // ret_nc
        !          2104:                                cCycles -= 5;
        !          2105:                                cCycles -= Ret1(m_regF & C_FLAG);
        !          2106:                                break;
        !          2107:                        
        !          2108:                        case 0xD1: // pop_de
        !          2109:                                cCycles -= 10;
        !          2110:                                m_regDE = Pop();
        !          2111:                                break;
        !          2112:                        
        !          2113:                        case 0xD2: // jp_nc
        !          2114:                                cCycles -= 10;
        !          2115:                                cCycles -= Jp1(m_regF & C_FLAG);
        !          2116:                                break;
        !          2117:                        
        !          2118:                        case 0xD3: // out_byte_a
        !          2119:                                cCycles -= 11;
        !          2120:                                Out(ImmedByte(), m_regA);
        !          2121:                                break;
        !          2122:                        
        !          2123:                        case 0xD4: // call_nc
        !          2124:                                cCycles -= 10;
        !          2125:                                cCycles -= Call1(m_regF & C_FLAG);
        !          2126:                                break;
        !          2127:                        
        !          2128:                        case 0xD5: // push_de
        !          2129:                                cCycles -= 11;
        !          2130:                                Push(m_regDE);
        !          2131:                                break;
        !          2132:                        
        !          2133:                        case 0xD6: // sub_byte
        !          2134:                        {
        !          2135:                                cCycles -= 7;
        !          2136:                                Sub_1(ImmedByte());
        !          2137:                                break;
        !          2138:                        }
        !          2139:                        
        !          2140:                        case 0xD7: // rst_10
        !          2141:                                cCycles -= 11;
        !          2142:                                Rst(0x10);
        !          2143:                                break;
        !          2144: 
        !          2145:                        case 0xD8: // ret_c
        !          2146:                                cCycles -= 5;
        !          2147:                                cCycles -= Ret0(m_regF & C_FLAG);
        !          2148:                                break;
        !          2149:                        
        !          2150:                        case 0xD9: // exx
        !          2151:                                cCycles -= 4;
        !          2152:                                Exx();
        !          2153:                                break;
        !          2154:                        
        !          2155:                        case 0xDA: // jp_c
        !          2156:                                cCycles -= 10;
        !          2157:                                cCycles -= Jp0(m_regF & C_FLAG);
        !          2158:                                break;
        !          2159:                        
        !          2160:                        case 0xDB: // in_a_byte 
        !          2161:                        {
        !          2162:                                BYTE bPort = ImmedByte();
        !          2163:                                cCycles -= 11;
        !          2164:                                m_regA = InRaw ( bPort );
        !          2165:                                break;
        !          2166:                        }
        !          2167:                        
        !          2168:                        case 0xDC: // call_c
        !          2169:                                cCycles -= 10;
        !          2170:                                cCycles -= Call0(m_regF & C_FLAG);
        !          2171:                                break;
        !          2172:                        
        !          2173:                        case 0xDD: // dd
        !          2174:                                cCycles -= HandleDD();
        !          2175:                                break;
        !          2176:                        
        !          2177:                        case 0xDE: // sbc_a_byte
        !          2178:                                cCycles -= 7;
        !          2179:                                Sbc_1(ImmedByte());
        !          2180:                                break;
        !          2181:                        
        !          2182:                        case 0xDF: // rst_18
        !          2183:                                cCycles -= 11;
        !          2184:                                Rst(0x18);
        !          2185:                                break;
        !          2186: 
        !          2187:                        case 0xE0: // ret_po
        !          2188:                                cCycles -= 5;
        !          2189:                                cCycles -= Ret1(m_regF & V_FLAG);
        !          2190:                                break;
        !          2191:                        
        !          2192:                        case 0xE1: // pop_hl
        !          2193:                                cCycles -= 10;
        !          2194:                                m_regHL = Pop();
        !          2195:                                break;
        !          2196:                        
        !          2197:                        case 0xE2: // jp_po
        !          2198:                                cCycles -= 10;
        !          2199:                                cCycles -= Jp1(m_regF & V_FLAG);
        !          2200:                                break;
        !          2201:                        
        !          2202:                        case 0xE3: // ex_xsp_hl
        !          2203:                                cCycles -= 19;
        !          2204:                        {
        !          2205:                                int i = MemReadWord(GetSP());
        !          2206:                                MemWriteWord(GetSP(), m_regHL);
        !          2207:                                m_regHL = i;
        !          2208:                                break;
        !          2209:                        }
        !          2210:                        
        !          2211:                        case 0xE4: // call_po
        !          2212:                                cCycles -= 10;
        !          2213:                                cCycles -= Call1(m_regF & V_FLAG);
        !          2214:                                break;
        !          2215:                        
        !          2216:                        case 0xE5: // push_hl
        !          2217:                                cCycles -= 11;
        !          2218:                                Push(m_regHL);
        !          2219:                                break;
        !          2220:                        
        !          2221:                        case 0xE6: // and_byte
        !          2222:                                cCycles -= 7;
        !          2223:                                And(ImmedByte());
        !          2224:                                break;
        !          2225:                        
        !          2226:                        case 0xE7: // rst_20
        !          2227:                                cCycles -= 11;
        !          2228:                                Rst(0x20);
        !          2229:                                break;
        !          2230: 
        !          2231:                        case 0xE8: // ret_pe
        !          2232:                                cCycles -= 5;
        !          2233:                                cCycles -= Ret0(m_regF & V_FLAG);
        !          2234:                                break;
        !          2235:                        
        !          2236:                        case 0xE9: // jp_hl
        !          2237:                                cCycles -= 4;
        !          2238:                                SetPC(m_regHL);
        !          2239:                                break;
        !          2240:                        
        !          2241:                        case 0xEA: // jp_pe
        !          2242:                                cCycles -= 10;
        !          2243:                                cCycles -= Jp0(m_regF & V_FLAG);
        !          2244:                                break;
        !          2245:                        
        !          2246:                        case 0xEB: // ex_de_hl
        !          2247:                                cCycles -= 4;
        !          2248:                                swap(m_regDE, m_regHL);
        !          2249:                                break;
        !          2250:                        
        !          2251:                        case 0xEC: // call_pe
        !          2252:                                cCycles -= 10;
        !          2253:                                cCycles -= Call0(m_regF & V_FLAG);
        !          2254:                                break;
        !          2255:                        
        !          2256:                        case 0xED: // ed
        !          2257:                                cCycles -= HandleED(cCycles);
        !          2258:                                break;
        !          2259:                        
        !          2260:                        case 0xEE: // xor_byte
        !          2261:                                cCycles -= 7;
        !          2262:                                Xor(ImmedByte());
        !          2263:                                break;
        !          2264:                        
        !          2265:                        case 0xEF: // rst_28
        !          2266:                                cCycles -= 11;
        !          2267:                                Rst(0x28);
        !          2268:                                break;
        !          2269: 
        !          2270:                        case 0xF0: // ret_p
        !          2271:                                cCycles -= 5;
        !          2272:                                cCycles -= Ret1(m_regF & S_FLAG);
        !          2273:                                break;
        !          2274:                        
        !          2275:                        case 0xF1: // pop_af
        !          2276:                                cCycles -= 10;
        !          2277:                                m_regAF = Pop();
        !          2278:                                break;
        !          2279:                        
        !          2280:                        case 0xF2: // jp_p
        !          2281:                                cCycles -= 10;
        !          2282:                                cCycles -= Jp1(m_regF & S_FLAG);
        !          2283:                                break;
        !          2284:                        
        !          2285:                        case 0xF3: // di
        !          2286:                                cCycles -= 4;
        !          2287:                                Di();
        !          2288:                                break;
        !          2289:                        
        !          2290:                        case 0xF4: // call_p
        !          2291:                                cCycles -= 10;
        !          2292:                                cCycles -= Call1(m_regF & S_FLAG);
        !          2293:                                break;
        !          2294:                        
        !          2295:                        case 0xF5: // push_af
        !          2296:                                cCycles -= 11;
        !          2297:                                Push(m_regAF);
        !          2298:                                break;
        !          2299:                        
        !          2300:                        case 0xF6: // or_byte
        !          2301:                                cCycles -= 7;
        !          2302:                                Or(ImmedByte());
        !          2303:                                break;
        !          2304:                        
        !          2305:                        case 0xF7: // rst_30
        !          2306:                                cCycles -= 11;
        !          2307:                                Rst(0x30);
        !          2308:                                break;
        !          2309: 
        !          2310:                        case 0xF8: // ret_m   
        !          2311:                                cCycles -= 5;
        !          2312:                                cCycles -= Ret0(m_regF & S_FLAG);
        !          2313:                                break;
        !          2314:                        
        !          2315:                        case 0xF9: // ld_sp_hl
        !          2316:                                cCycles -= 6;
        !          2317:                                SetSP(m_regHL);
        !          2318:                                break;
        !          2319:                        
        !          2320:                        case 0xFA: // jp_m
        !          2321:                                cCycles -= 10;
        !          2322:                                cCycles -= Jp0(m_regF & S_FLAG);
        !          2323:                                break;
        !          2324:                        
        !          2325:                        case 0xFB: // ei
        !          2326:                                cCycles -= 4;
        !          2327:                                cCycles -= Ei();
        !          2328: //                             if (m_fPendingInterrupt)
        !          2329:                                {
        !          2330: //                                     return (cCyclesArg - cCycles);
        !          2331:                                }
        !          2332:                                break;
        !          2333:                        
        !          2334:                        case 0xFC: // call_m
        !          2335:                                cCycles -= 10;
        !          2336:                                cCycles -= Call0(m_regF & S_FLAG);
        !          2337:                                break;
        !          2338:                        
        !          2339:                        case 0xFD: // fd
        !          2340:                                cCycles -= HandleFD();
        !          2341:                                break;
        !          2342:                        
        !          2343:                        case 0xFE: // cp_byte    
        !          2344:                                cCycles -= 7;
        !          2345:                                Cp(ImmedByte());
        !          2346:                                break;
        !          2347:                        
        !          2348:                        case 0xFF: // rst_38
        !          2349:                                cCycles -= 11;
        !          2350:                                Rst(0x38);
        !          2351:                                break;
        !          2352: 
        !          2353:                        default:
        !          2354:                                assert(FALSE);
        !          2355:                                break;
        !          2356:                }
        !          2357:        }
        !          2358: 
        !          2359: z80ExecBottom:
        !          2360:        z80pc = GetPC(); /* for some of the platforms */
        !          2361:        dwElapsedTicks = origElapsedTicks + (cCyclesArg - cCycles);
        !          2362:        return ( 0x80000000 );
        !          2363: }
        !          2364: 
        !          2365: UINT32 mz80int ( UINT32 bVal ) {
        !          2366:        if (m_iff1 == 0) // is IRQ disabled?
        !          2367:                return 0xffffffff;              // Interrupt not taken!
        !          2368:                
        !          2369:        m_fPendingInterrupt = FALSE;
        !          2370: 
        !          2371:        m_iff1 = 0;
        !          2372: 
        !          2373:        if (m_fHalt)
        !          2374:        {
        !          2375:                SetPC(GetPC() + 1);
        !          2376:                m_fHalt = FALSE;
        !          2377:        }
        !          2378: 
        !          2379:        if (0 == m_nIM || 1 == m_nIM)
        !          2380:        {
        !          2381:                Rst(z80intAddr);
        !          2382:                return(0);              // We took the interrupt
        !          2383:        }
        !          2384: 
        !          2385:        Push(GetPC());
        !          2386:        SetPC(MemReadWord(MAKEWORD(bVal, m_regI)));
        !          2387: 
        !          2388:        return(0); // fix-me
        !          2389: }
        !          2390: 
        !          2391: UINT32 mz80nmi ( void ) {
        !          2392:        m_iff1 = 0;
        !          2393: 
        !          2394:        if (m_fHalt)
        !          2395:        {
        !          2396:                SetPC(GetPC() + 1);
        !          2397:                m_fHalt = FALSE;
        !          2398:        }
        !          2399:        
        !          2400:        Rst(z80nmiAddr);
        !          2401: 
        !          2402:        return(0);
        !          2403: }
        !          2404: 
        !          2405: /* ***************************************************************************
        !          2406:  * Flow of Control
        !          2407:  * ***************************************************************************
        !          2408:  */
        !          2409: 
        !          2410: /* inline */ int Jr0(int f) {
        !          2411:        if (f)
        !          2412:        {
        !          2413:                AdjustPC((signed char)ImmedByte());
        !          2414:                return 5;
        !          2415:        }
        !          2416:        else
        !          2417:        {
        !          2418:                AdjustPC(1);
        !          2419:                return 0;
        !          2420:        }
        !          2421: }
        !          2422: 
        !          2423: /* inline */ int Jr1(int f) {
        !          2424:        if (f)
        !          2425:        {
        !          2426:                AdjustPC(1);
        !          2427:                return 0;
        !          2428:        }
        !          2429:        else
        !          2430:        {
        !          2431:                AdjustPC((signed char)ImmedByte());
        !          2432:                return 5;
        !          2433:        }
        !          2434: }
        !          2435: 
        !          2436: /* inline */ int Call0(int f) {
        !          2437:        char string[150];
        !          2438: 
        !          2439:        if (f)
        !          2440:        {
        !          2441:                WORD wAddr = ImmedWord();
        !          2442:                Push(GetPC());
        !          2443:                SetPC(wAddr);
        !          2444:                return 7;
        !          2445:        }
        !          2446:        else
        !          2447:        {
        !          2448:                AdjustPC(2);
        !          2449:                return 0;
        !          2450:        }
        !          2451: }
        !          2452: 
        !          2453: /* inline */ int Call1(int f) {
        !          2454:        if (f)
        !          2455:        {
        !          2456:                AdjustPC(2);
        !          2457:                return 0;
        !          2458:        }
        !          2459:        else
        !          2460:        {
        !          2461:                WORD wAddr = ImmedWord();
        !          2462:                Push(GetPC());
        !          2463:                SetPC(wAddr);
        !          2464:                return 7;
        !          2465:        }
        !          2466: }
        !          2467: 
        !          2468: /* inline */ int Jp0(int f) {
        !          2469:        if (f)
        !          2470:        {
        !          2471:                SetPC(ImmedWord());
        !          2472:                return 0; // ????????????????
        !          2473:        }
        !          2474:        else
        !          2475:        {
        !          2476:                AdjustPC(2);
        !          2477:                return 0;
        !          2478:        }
        !          2479: }
        !          2480: 
        !          2481: /* inline */ int Jp1(int f) {
        !          2482:        if (f)
        !          2483:        {
        !          2484:                AdjustPC(2);
        !          2485:                return 0;
        !          2486:        }
        !          2487:        else
        !          2488:        {
        !          2489:                SetPC(ImmedWord());
        !          2490:                return 0; // ????????????????
        !          2491:        }
        !          2492: }
        !          2493: 
        !          2494: /* inline */ void Rst(WORD wAddr) {
        !          2495:        Push(GetPC());
        !          2496:        SetPC(wAddr);
        !          2497: }
        !          2498: 
        !          2499: /* ***************************************************************************
        !          2500:  * CB prefixed instructions
        !          2501:  * ***************************************************************************
        !          2502:  */
        !          2503: 
        !          2504: int HandleCB() {
        !          2505:        const BYTE bOpcode = ImmedByte();
        !          2506:        m_regR++;
        !          2507: 
        !          2508:        switch (bOpcode)
        !          2509:        {
        !          2510:                case 0x00: // rlc_b
        !          2511:                        m_regB = Rlc(m_regB);
        !          2512:                        return 8;
        !          2513:                
        !          2514:                case 0x01: // rlc_c  
        !          2515:                        m_regC = Rlc(m_regC);
        !          2516:                        return 8;
        !          2517:                
        !          2518:                case 0x02: // rlc_d  
        !          2519:                        m_regD = Rlc(m_regD);
        !          2520:                        return 8;
        !          2521:                
        !          2522:                case 0x03: // rlc_e  
        !          2523:                        m_regE = Rlc(m_regE);
        !          2524:                        return 8;
        !          2525:                
        !          2526:                case 0x04: // rlc_h  
        !          2527:                        m_regH = Rlc(m_regH);
        !          2528:                        return 8;
        !          2529:                
        !          2530:                case 0x05: // rlc_l  
        !          2531:                        m_regL = Rlc(m_regL);
        !          2532:                        return 8;
        !          2533:                
        !          2534:                case 0x06: // rlc_xhl  
        !          2535:                        MemWriteByte(m_regHL, Rlc(MemReadByte(m_regHL)));
        !          2536:                        return 15;
        !          2537:                
        !          2538:                case 0x07: // rlc_a  
        !          2539:                        m_regA = Rlc(m_regA);
        !          2540:                        return 8;
        !          2541: 
        !          2542:                case 0x08: // rrc_b  
        !          2543:                        m_regB = Rrc(m_regB);
        !          2544:                        return 8;
        !          2545:                
        !          2546:                case 0x09: // rrc_c  
        !          2547:                        m_regC = Rrc(m_regC);
        !          2548:                        return 8;
        !          2549:                
        !          2550:                case 0x0A: // rrc_d  
        !          2551:                        m_regD = Rrc(m_regD);
        !          2552:                        return 8;
        !          2553:                
        !          2554:                case 0x0B: // rrc_e  
        !          2555:                        m_regE = Rrc(m_regE);
        !          2556:                        return 8;
        !          2557:                
        !          2558:                case 0x0C: // rrc_h  
        !          2559:                        m_regH = Rrc(m_regH);
        !          2560:                        return 8;
        !          2561:                
        !          2562:                case 0x0D: // rrc_l  
        !          2563:                        m_regL = Rrc(m_regL);
        !          2564:                        return 8;
        !          2565:                
        !          2566:                case 0x0E: // rrc_xhl  
        !          2567:                        MemWriteByte(m_regHL, Rrc(MemReadByte(m_regHL)));
        !          2568:                        return 15;
        !          2569:                
        !          2570:                case 0x0F: // rrc_a  
        !          2571:                        m_regA = Rrc(m_regA);
        !          2572:                        return 8;
        !          2573: 
        !          2574:                case 0x10: // rl_b   
        !          2575:                        m_regB = Rl(m_regB);
        !          2576:                        return 8;
        !          2577:                
        !          2578:                case 0x11: // rl_c   
        !          2579:                        m_regC = Rl(m_regC);
        !          2580:                        return 8;
        !          2581:                
        !          2582:                case 0x12: // rl_d   
        !          2583:                        m_regD = Rl(m_regD);
        !          2584:                        return 8;
        !          2585:                
        !          2586:                case 0x13: // rl_e   
        !          2587:                        m_regE = Rl(m_regE);
        !          2588:                        return 8;
        !          2589:                
        !          2590:                case 0x14: // rl_h   
        !          2591:                        m_regH = Rl(m_regH);
        !          2592:                        return 8;
        !          2593:                
        !          2594:                case 0x15: // rl_l   
        !          2595:                        m_regL = Rl(m_regL);
        !          2596:                        return 8;
        !          2597:                
        !          2598:                case 0x16: // rl_xhl   
        !          2599:                        MemWriteByte(m_regHL, Rl(MemReadByte(m_regHL)));
        !          2600:                        return 15;
        !          2601:                
        !          2602:                case 0x17: // rl_a   
        !          2603:                        m_regA = Rl(m_regA);
        !          2604:                        return 8;
        !          2605: 
        !          2606:                case 0x18: // rr_b   
        !          2607:                        m_regB = Rr(m_regB);
        !          2608:                        return 8;
        !          2609:                
        !          2610:                case 0x19: // rr_c   
        !          2611:                        m_regC = Rr(m_regC);
        !          2612:                        return 8;
        !          2613:                
        !          2614:                case 0x1A: // rr_d   
        !          2615:                        m_regD = Rr(m_regD);
        !          2616:                        return 8;
        !          2617:                
        !          2618:                case 0x1B: // rr_e   
        !          2619:                        m_regE = Rr(m_regE);
        !          2620:                        return 8;
        !          2621:                
        !          2622:                case 0x1C: // rr_h   
        !          2623:                        m_regH = Rr(m_regH);
        !          2624:                        return 8;
        !          2625:                
        !          2626:                case 0x1D: // rr_l   
        !          2627:                        m_regL = Rr(m_regL);
        !          2628:                        return 8;
        !          2629:                
        !          2630:                case 0x1E: // rr_xhl   
        !          2631:                        MemWriteByte(m_regHL, Rr(MemReadByte(m_regHL)));
        !          2632:                        return 15;
        !          2633:                
        !          2634:                case 0x1F: // rr_a   
        !          2635:                        m_regA = Rr(m_regA);
        !          2636:                        return 8;
        !          2637: 
        !          2638:                case 0x20: // sla_b  
        !          2639:                        m_regB = Sla(m_regB);
        !          2640:                        return 8;
        !          2641:                
        !          2642:                case 0x21: // sla_c  
        !          2643:                        m_regC = Sla(m_regC);
        !          2644:                        return 8;
        !          2645:                
        !          2646:                case 0x22: // sla_d  
        !          2647:                        m_regD = Sla(m_regD);
        !          2648:                        return 8;
        !          2649:                
        !          2650:                case 0x23: // sla_e  
        !          2651:                        m_regE = Sla(m_regE);
        !          2652:                        return 8;
        !          2653:                
        !          2654:                case 0x24: // sla_h  
        !          2655:                        m_regH = Sla(m_regH);
        !          2656:                        return 8;
        !          2657:                
        !          2658:                case 0x25: // sla_l  
        !          2659:                        m_regL = Sla(m_regL);
        !          2660:                        return 8;
        !          2661:                
        !          2662:                case 0x26: // sla_xhl  
        !          2663:                        MemWriteByte(m_regHL, Sla(MemReadByte(m_regHL)));
        !          2664:                        return 15;
        !          2665:                
        !          2666:                case 0x27: // sla_a  
        !          2667:                        m_regA = Sla(m_regA);
        !          2668:                        return 8;
        !          2669: 
        !          2670:                case 0x28: // sra_b  
        !          2671:                        m_regB = Sra(m_regB);
        !          2672:                        return 8;
        !          2673:                
        !          2674:                case 0x29: // sra_c  
        !          2675:                        m_regC = Sra(m_regC);
        !          2676:                        return 8;
        !          2677:                
        !          2678:                case 0x2A: // sra_d  
        !          2679:                        m_regD = Sra(m_regD);
        !          2680:                        return 8;
        !          2681:                
        !          2682:                case 0x2B: // sra_e  
        !          2683:                        m_regE = Sra(m_regE);
        !          2684:                        return 8;
        !          2685:                
        !          2686:                case 0x2C: // sra_h  
        !          2687:                        m_regH = Sra(m_regH);
        !          2688:                        return 8;
        !          2689:                
        !          2690:                case 0x2D: // sra_l  
        !          2691:                        m_regL = Sra(m_regL);
        !          2692:                        return 8;
        !          2693:                
        !          2694:                case 0x2E: // sra_xhl  
        !          2695:                        MemWriteByte(m_regHL, Sra(MemReadByte(m_regHL)));
        !          2696:                        return 15;
        !          2697:                
        !          2698:                case 0x2F: // sra_a  
        !          2699:                        m_regA = Sra(m_regA);
        !          2700:                        return 8;
        !          2701: 
        !          2702:                case 0x30: // sll_b  
        !          2703:                        m_regB = Sll(m_regB);
        !          2704:                        return 8;
        !          2705:                
        !          2706:                case 0x31: // sll_c  
        !          2707:                        m_regC = Sll(m_regC);
        !          2708:                        return 8;
        !          2709:                
        !          2710:                case 0x32: // sll_d  
        !          2711:                        m_regD = Sll(m_regD);
        !          2712:                        return 8;
        !          2713:                
        !          2714:                case 0x33: // sll_e  
        !          2715:                        m_regE = Sll(m_regE);
        !          2716:                        return 8;
        !          2717:                
        !          2718:                case 0x34: // sll_h  
        !          2719:                        m_regH = Sll(m_regH);
        !          2720:                        return 8;
        !          2721:                
        !          2722:                case 0x35: // sll_l  
        !          2723:                        m_regL = Sll(m_regL);
        !          2724:                        return 8;
        !          2725:                
        !          2726:                case 0x36: // sll_xhl  
        !          2727:                        MemWriteByte(m_regHL, Sll(MemReadByte(m_regHL)));
        !          2728:                        return 15;
        !          2729:                
        !          2730:                case 0x37: // sll_a  
        !          2731:                        m_regA = Sll(m_regA);
        !          2732:                        return 8;
        !          2733: 
        !          2734:                case 0x38: // srl_b  
        !          2735:                        m_regB = Srl(m_regB);
        !          2736:                        return 8;
        !          2737:                
        !          2738:                case 0x39: // srl_c  
        !          2739:                        m_regC = Srl(m_regC);
        !          2740:                        return 8;
        !          2741:                
        !          2742:                case 0x3A: // srl_d  
        !          2743:                        m_regD = Srl(m_regD);
        !          2744:                        return 8;
        !          2745:                
        !          2746:                case 0x3B: // srl_e  
        !          2747:                        m_regE = Srl(m_regE);
        !          2748:                        return 8;
        !          2749:                
        !          2750:                case 0x3C: // srl_h  
        !          2751:                        m_regH = Srl(m_regH);
        !          2752:                        return 8;
        !          2753:                
        !          2754:                case 0x3D: // srl_l  
        !          2755:                        m_regL = Srl(m_regL);
        !          2756:                        return 8;
        !          2757:                
        !          2758:                case 0x3E: // srl_xhl  
        !          2759:                        MemWriteByte(m_regHL, Srl(MemReadByte(m_regHL)));
        !          2760:                        return 15;
        !          2761:                
        !          2762:                case 0x3F: // srl_a  
        !          2763:                        m_regA = Srl(m_regA);
        !          2764:                        return 8;
        !          2765: 
        !          2766:                case 0x40: // bit_0_b
        !          2767:                        Bit(m_regB, 0);
        !          2768:                        return 8;
        !          2769:                
        !          2770:                case 0x41: // bit_0_c
        !          2771:                        Bit(m_regC, 0);
        !          2772:                        return 8;
        !          2773:                
        !          2774:                case 0x42: // bit_0_d
        !          2775:                        Bit(m_regD, 0);
        !          2776:                        return 8;
        !          2777:                
        !          2778:                case 0x43: // bit_0_e
        !          2779:                        Bit(m_regE, 0);
        !          2780:                        return 8;
        !          2781:                
        !          2782:                case 0x44: // bit_0_h
        !          2783:                        Bit(m_regH, 0);
        !          2784:                        return 8;
        !          2785:                
        !          2786:                case 0x45: // bit_0_l
        !          2787:                        Bit(m_regL, 0);
        !          2788:                        return 8;
        !          2789:                
        !          2790:                case 0x46: // bit_0_xhl
        !          2791:                        Bit(MemReadByte(m_regHL), 0);
        !          2792:                        return 12;
        !          2793:                
        !          2794:                case 0x47: // bit_0_a
        !          2795:                        Bit(m_regA, 0);
        !          2796:                        return 8;
        !          2797: 
        !          2798:                case 0x48: // bit_1_b
        !          2799:                        Bit(m_regB, 1);
        !          2800:                        return 8;
        !          2801:                
        !          2802:                case 0x49: // bit_1_c
        !          2803:                        Bit(m_regC, 1);
        !          2804:                        return 8;
        !          2805:                
        !          2806:                case 0x4A: // bit_1_d
        !          2807:                        Bit(m_regD, 1);
        !          2808:                        return 8;
        !          2809:                
        !          2810:                case 0x4B: // bit_1_e
        !          2811:                        Bit(m_regE, 1);
        !          2812:                        return 8;
        !          2813:                
        !          2814:                case 0x4C: // bit_1_h
        !          2815:                        Bit(m_regH, 1);
        !          2816:                        return 8;
        !          2817:                
        !          2818:                case 0x4D: // bit_1_l
        !          2819:                        Bit(m_regL, 1);
        !          2820:                        return 8;
        !          2821:                
        !          2822:                case 0x4E: // bit_1_xhl
        !          2823:                        Bit(MemReadByte(m_regHL), 1);
        !          2824:                        return 12;
        !          2825:                
        !          2826:                case 0x4F: // bit_1_a
        !          2827:                        Bit(m_regA, 1);
        !          2828:                        return 8;
        !          2829: 
        !          2830:                case 0x50: // bit_2_b
        !          2831:                        Bit(m_regB, 2);
        !          2832:                        return 8;
        !          2833:                
        !          2834:                case 0x51: // bit_2_c
        !          2835:                        Bit(m_regC, 2);
        !          2836:                        return 8;
        !          2837:                
        !          2838:                case 0x52: // bit_2_d
        !          2839:                        Bit(m_regD, 2);
        !          2840:                        return 8;
        !          2841:                
        !          2842:                case 0x53: // bit_2_e
        !          2843:                        Bit(m_regE, 2);
        !          2844:                        return 8;
        !          2845:                
        !          2846:                case 0x54: // bit_2_h
        !          2847:                        Bit(m_regH, 2);
        !          2848:                        return 8;
        !          2849:                
        !          2850:                case 0x55: // bit_2_l
        !          2851:                        Bit(m_regL, 2);
        !          2852:                        return 8;
        !          2853:                
        !          2854:                case 0x56: // bit_2_xhl
        !          2855:                        Bit(MemReadByte(m_regHL), 2);
        !          2856:                        return 12;
        !          2857:                
        !          2858:                case 0x57: // bit_2_a
        !          2859:                        Bit(m_regA, 2);
        !          2860:                        return 8;
        !          2861: 
        !          2862:                case 0x58: // bit_3_b
        !          2863:                        Bit(m_regB, 3);
        !          2864:                        return 8;
        !          2865:                
        !          2866:                case 0x59: // bit_3_c
        !          2867:                        Bit(m_regC, 3);
        !          2868:                        return 8;
        !          2869:                
        !          2870:                case 0x5A: // bit_3_d
        !          2871:                        Bit(m_regD, 3);
        !          2872:                        return 8;
        !          2873:                
        !          2874:                case 0x5B: // bit_3_e
        !          2875:                        Bit(m_regE, 3);
        !          2876:                        return 8;
        !          2877:                
        !          2878:                case 0x5C: // bit_3_h
        !          2879:                        Bit(m_regH, 3);
        !          2880:                        return 8;
        !          2881:                
        !          2882:                case 0x5D: // bit_3_l
        !          2883:                        Bit(m_regL, 3);
        !          2884:                        return 8;
        !          2885:                
        !          2886:                case 0x5E: // bit_3_xhl
        !          2887:                        Bit(MemReadByte(m_regHL), 3);
        !          2888:                        return 12;
        !          2889:                
        !          2890:                case 0x5F: // bit_3_a
        !          2891:                        Bit(m_regA, 3);
        !          2892:                        return 8;
        !          2893: 
        !          2894:                case 0x60: // bit_4_b
        !          2895:                        Bit(m_regB, 4);
        !          2896:                        return 8;
        !          2897:                
        !          2898:                case 0x61: // bit_4_c
        !          2899:                        Bit(m_regC, 4);
        !          2900:                        return 8;
        !          2901:                
        !          2902:                case 0x62: // bit_4_d
        !          2903:                        Bit(m_regD, 4);
        !          2904:                        return 8;
        !          2905:                
        !          2906:                case 0x63: // bit_4_e
        !          2907:                        Bit(m_regE, 4);
        !          2908:                        return 8;
        !          2909:                
        !          2910:                case 0x64: // bit_4_h
        !          2911:                        Bit(m_regH, 4);
        !          2912:                        return 8;
        !          2913:                
        !          2914:                case 0x65: // bit_4_l
        !          2915:                        Bit(m_regL, 4);
        !          2916:                        return 8;
        !          2917:                
        !          2918:                case 0x66: // bit_4_xhl
        !          2919:                        Bit(MemReadByte(m_regHL), 4);
        !          2920:                        return 12;
        !          2921:                
        !          2922:                case 0x67: // bit_4_a
        !          2923:                        Bit(m_regA, 4);
        !          2924:                        return 8;
        !          2925: 
        !          2926:                case 0x68: // bit_5_b
        !          2927:                        Bit(m_regB, 5);
        !          2928:                        return 8;
        !          2929:                
        !          2930:                case 0x69: // bit_5_c
        !          2931:                        Bit(m_regC, 5);
        !          2932:                        return 8;
        !          2933:                
        !          2934:                case 0x6A: // bit_5_d
        !          2935:                        Bit(m_regD, 5);
        !          2936:                        return 8;
        !          2937:                
        !          2938:                case 0x6B: // bit_5_e
        !          2939:                        Bit(m_regE, 5);
        !          2940:                        return 8;
        !          2941:                
        !          2942:                case 0x6C: // bit_5_h
        !          2943:                        Bit(m_regH, 5);
        !          2944:                        return 8;
        !          2945:                
        !          2946:                case 0x6D: // bit_5_l
        !          2947:                        Bit(m_regL, 5);
        !          2948:                        return 8;
        !          2949:                
        !          2950:                case 0x6E: // bit_5_xhl
        !          2951:                        Bit(MemReadByte(m_regHL), 5);
        !          2952:                        return 12;
        !          2953:                
        !          2954:                case 0x6F: // bit_5_a
        !          2955:                        Bit(m_regA, 5);
        !          2956:                        return 8;
        !          2957: 
        !          2958:                case 0x70: // bit_6_b
        !          2959:                        Bit(m_regB, 6);
        !          2960:                        return 8;
        !          2961:                
        !          2962:                case 0x71: // bit_6_c
        !          2963:                        Bit(m_regC, 6);
        !          2964:                        return 8;
        !          2965:                
        !          2966:                case 0x72: // bit_6_d
        !          2967:                        Bit(m_regD, 6);
        !          2968:                        return 8;
        !          2969:                
        !          2970:                case 0x73: // bit_6_e
        !          2971:                        Bit(m_regE, 6);
        !          2972:                        return 8;
        !          2973:                
        !          2974:                case 0x74: // bit_6_h
        !          2975:                        Bit(m_regH, 6);
        !          2976:                        return 8;
        !          2977:                
        !          2978:                case 0x75: // bit_6_l
        !          2979:                        Bit(m_regL, 6);
        !          2980:                        return 8;
        !          2981:                
        !          2982:                case 0x76: // bit_6_xhl
        !          2983:                        Bit(MemReadByte(m_regHL), 6);
        !          2984:                        return 12;
        !          2985:                
        !          2986:                case 0x77: // bit_6_a
        !          2987:                        Bit(m_regA, 6);
        !          2988:                        return 8;
        !          2989: 
        !          2990:                case 0x78: // bit_7_b
        !          2991:                        Bit(m_regB, 7);
        !          2992:                        return 8;
        !          2993:                
        !          2994:                case 0x79: // bit_7_c
        !          2995:                        Bit(m_regC, 7);
        !          2996:                        return 8;
        !          2997:                
        !          2998:                case 0x7A: // bit_7_d
        !          2999:                        Bit(m_regD, 7);
        !          3000:                        return 8;
        !          3001:                
        !          3002:                case 0x7B: // bit_7_e
        !          3003:                        Bit(m_regE, 7);
        !          3004:                        return 8;
        !          3005:                
        !          3006:                case 0x7C: // bit_7_h
        !          3007:                        Bit(m_regH, 7);
        !          3008:                        return 8;
        !          3009:                
        !          3010:                case 0x7D: // bit_7_l
        !          3011:                        Bit(m_regL, 7);
        !          3012:                        return 8;
        !          3013:                
        !          3014:                case 0x7E: // bit_7_xhl
        !          3015:                        Bit(MemReadByte(m_regHL), 7);
        !          3016:                        return 12;
        !          3017:                
        !          3018:                case 0x7F: // bit_7_a
        !          3019:                        Bit(m_regA, 7);
        !          3020:                        return 8;
        !          3021: 
        !          3022:                case 0x80: // res_0_b
        !          3023:                        m_regB = Res(m_regB, 0);
        !          3024:                        return 8;
        !          3025:                
        !          3026:                case 0x81: // res_0_c
        !          3027:                        m_regC = Res(m_regC, 0);
        !          3028:                        return 8;
        !          3029:                
        !          3030:                case 0x82: // res_0_d
        !          3031:                        m_regD = Res(m_regD, 0);
        !          3032:                        return 8;
        !          3033:                
        !          3034:                case 0x83: // res_0_e
        !          3035:                        m_regE = Res(m_regE, 0);
        !          3036:                        return 8;
        !          3037:                
        !          3038:                case 0x84: // res_0_h
        !          3039:                        m_regH = Res(m_regH, 0);
        !          3040:                        return 8;
        !          3041:                
        !          3042:                case 0x85: // res_0_l
        !          3043:                        m_regL = Res(m_regL, 0);
        !          3044:                        return 8;
        !          3045:                
        !          3046:                case 0x86: // res_0_xhl
        !          3047:                        MemWriteByte(m_regHL, Res(MemReadByte(m_regHL), 0));
        !          3048:                        return 15;
        !          3049:                
        !          3050:                case 0x87: // res_0_a
        !          3051:                        m_regA = Res(m_regA, 0);
        !          3052:                        return 8;
        !          3053: 
        !          3054:                case 0x88: // res_1_b
        !          3055:                        m_regB = Res(m_regB ,1);
        !          3056:                        return 8;
        !          3057:                
        !          3058:                case 0x89: // res_1_c
        !          3059:                        m_regC = Res(m_regC, 1);
        !          3060:                        return 8;
        !          3061:                
        !          3062:                case 0x8A: // res_1_d
        !          3063:                        m_regD = Res(m_regD, 1);
        !          3064:                        return 8;
        !          3065:                
        !          3066:                case 0x8B: // res_1_e
        !          3067:                        m_regE = Res(m_regE, 1);
        !          3068:                        return 8;
        !          3069:                
        !          3070:                case 0x8C: // res_1_h
        !          3071:                        m_regH = Res(m_regH, 1);
        !          3072:                        return 8;
        !          3073:                
        !          3074:                case 0x8D: // res_1_l
        !          3075:                        m_regL = Res(m_regL, 1);
        !          3076:                        return 8;
        !          3077:                
        !          3078:                case 0x8E: // res_1_xhl
        !          3079:                        MemWriteByte(m_regHL, Res(MemReadByte(m_regHL), 1));
        !          3080:                        return 15;
        !          3081:                
        !          3082:                case 0x8F: // res_1_a
        !          3083:                        m_regA = Res(m_regA, 1);
        !          3084:                        return 8;
        !          3085: 
        !          3086:                case 0x90: // res_2_b
        !          3087:                        m_regB = Res(m_regB ,2);
        !          3088:                        return 8;
        !          3089:                
        !          3090:                case 0x91: // res_2_c
        !          3091:                        m_regC = Res(m_regC, 2);
        !          3092:                        return 8;
        !          3093:                
        !          3094:                case 0x92: // res_2_d
        !          3095:                        m_regD = Res(m_regD, 2);
        !          3096:                        return 8;
        !          3097:                
        !          3098:                case 0x93: // res_2_e
        !          3099:                        m_regE = Res(m_regE, 2);
        !          3100:                        return 8;
        !          3101:                
        !          3102:                case 0x94: // res_2_h
        !          3103:                        m_regH = Res(m_regH, 2);
        !          3104:                        return 8;
        !          3105:                
        !          3106:                case 0x95: // res_2_l
        !          3107:                        m_regL = Res(m_regL, 2);
        !          3108:                        return 8;
        !          3109:                
        !          3110:                case 0x96: // res_2_xhl
        !          3111:                        MemWriteByte(m_regHL, Res(MemReadByte(m_regHL), 2));
        !          3112:                        return 15;
        !          3113:                
        !          3114:                case 0x97: // res_2_a
        !          3115:                        m_regA = Res(m_regA, 2);
        !          3116:                        return 8;
        !          3117: 
        !          3118:                case 0x98: // res_3_b
        !          3119:                        m_regB = Res(m_regB ,3);
        !          3120:                        return 8;
        !          3121:                
        !          3122:                case 0x99: // res_3_c
        !          3123:                        m_regC = Res(m_regC, 3);
        !          3124:                        return 8;
        !          3125:                
        !          3126:                case 0x9A: // res_3_d
        !          3127:                        m_regD = Res(m_regD, 3);
        !          3128:                        return 8;
        !          3129:                
        !          3130:                case 0x9B: // res_3_e
        !          3131:                        m_regE = Res(m_regE, 3);
        !          3132:                        return 8;
        !          3133:                
        !          3134:                case 0x9C: // res_3_h
        !          3135:                        m_regH = Res(m_regH, 3);
        !          3136:                        return 8;
        !          3137:                
        !          3138:                case 0x9D: // res_3_l
        !          3139:                        m_regL = Res(m_regL, 3);
        !          3140:                        return 8;
        !          3141:                
        !          3142:                case 0x9E: // res_3_xhl
        !          3143:                        MemWriteByte(m_regHL, Res(MemReadByte(m_regHL), 3));
        !          3144:                        return 15;
        !          3145:                
        !          3146:                case 0x9F: // res_3_a
        !          3147:                        m_regA = Res(m_regA, 3);
        !          3148:                        return 8;
        !          3149: 
        !          3150:                case 0xA0: // res_4_b
        !          3151:                        m_regB = Res(m_regB ,4);
        !          3152:                        return 8;
        !          3153:                
        !          3154:                case 0xA1: // res_4_c
        !          3155:                        m_regC = Res(m_regC, 4);
        !          3156:                        return 8;
        !          3157:                
        !          3158:                case 0xA2: // res_4_d
        !          3159:                        m_regD = Res(m_regD, 4);
        !          3160:                        return 8;
        !          3161:                
        !          3162:                case 0xA3: // res_4_e
        !          3163:                        m_regE = Res(m_regE, 4);
        !          3164:                        return 8;
        !          3165:                
        !          3166:                case 0xA4: // res_4_h
        !          3167:                        m_regH = Res(m_regH, 4);
        !          3168:                        return 8;
        !          3169:                
        !          3170:                case 0xA5: // res_4_l
        !          3171:                        m_regL = Res(m_regL, 4);
        !          3172:                        return 8;
        !          3173:                
        !          3174:                case 0xA6: // res_4_xhl
        !          3175:                        MemWriteByte(m_regHL, Res(MemReadByte(m_regHL), 4));
        !          3176:                        return 15;
        !          3177:                
        !          3178:                case 0xA7: // res_4_a
        !          3179:                        m_regA = Res(m_regA, 4);
        !          3180:                        return 8;
        !          3181: 
        !          3182:                case 0xA8: // res_5_b
        !          3183:                        m_regB = Res(m_regB ,5);
        !          3184:                        return 8;
        !          3185:                
        !          3186:                case 0xA9: // res_5_c
        !          3187:                        m_regC = Res(m_regC, 5);
        !          3188:                        return 8;
        !          3189:                
        !          3190:                case 0xAA: // res_5_d
        !          3191:                        m_regD = Res(m_regD, 5);
        !          3192:                        return 8;
        !          3193:                
        !          3194:                case 0xAB: // res_5_e
        !          3195:                        m_regE = Res(m_regE, 5);
        !          3196:                        return 8;
        !          3197:                
        !          3198:                case 0xAC: // res_5_h
        !          3199:                        m_regH = Res(m_regH, 5);
        !          3200:                        return 8;
        !          3201:                
        !          3202:                case 0xAD: // res_5_l
        !          3203:                        m_regL = Res(m_regL, 5);
        !          3204:                        return 8;
        !          3205:                
        !          3206:                case 0xAE: // res_5_xhl
        !          3207:                        MemWriteByte(m_regHL, Res(MemReadByte(m_regHL), 5));
        !          3208:                        return 15;
        !          3209:                
        !          3210:                case 0xAF: // res_5_a
        !          3211:                        m_regA = Res(m_regA, 5);
        !          3212:                        return 8;
        !          3213: 
        !          3214:                case 0xB0: // res_6_b
        !          3215:                        m_regB = Res(m_regB ,6);
        !          3216:                        return 8;
        !          3217:                
        !          3218:                case 0xB1: // res_6_c
        !          3219:                        m_regC = Res(m_regC, 6);
        !          3220:                        return 8;
        !          3221:                
        !          3222:                case 0xB2: // res_6_d
        !          3223:                        m_regD = Res(m_regD, 6);
        !          3224:                        return 8;
        !          3225:                
        !          3226:                case 0xB3: // res_6_e
        !          3227:                        m_regE = Res(m_regE, 6);
        !          3228:                        return 8;
        !          3229:                
        !          3230:                case 0xB4: // res_6_h
        !          3231:                        m_regH = Res(m_regH, 6);
        !          3232:                        return 8;
        !          3233:                
        !          3234:                case 0xB5: // res_6_l
        !          3235:                        m_regL = Res(m_regL, 6);
        !          3236:                        return 8;
        !          3237:                
        !          3238:                case 0xB6: // res_6_xhl
        !          3239:                        MemWriteByte(m_regHL, Res(MemReadByte(m_regHL), 6));
        !          3240:                        return 15;
        !          3241:                
        !          3242:                case 0xB7: // res_6_a
        !          3243:                        m_regA = Res(m_regA, 6);
        !          3244:                        return 8;
        !          3245: 
        !          3246:                case 0xB8: // res_7_b
        !          3247:                        m_regB = Res(m_regB ,7);
        !          3248:                        return 8;
        !          3249:                
        !          3250:                case 0xB9: // res_7_c
        !          3251:                        m_regC = Res(m_regC, 7);
        !          3252:                        return 8;
        !          3253:                
        !          3254:                case 0xBA: // res_7_d
        !          3255:                        m_regD = Res(m_regD, 7);
        !          3256:                        return 8;
        !          3257:                
        !          3258:                case 0xBB: // res_7_e
        !          3259:                        m_regE = Res(m_regE, 7);
        !          3260:                        return 8;
        !          3261:                
        !          3262:                case 0xBC: // res_7_h
        !          3263:                        m_regH = Res(m_regH, 7);
        !          3264:                        return 8;
        !          3265:                
        !          3266:                case 0xBD: // res_7_l
        !          3267:                        m_regL = Res(m_regL, 7);
        !          3268:                        return 8;
        !          3269:                
        !          3270:                case 0xBE: // res_7_xhl
        !          3271:                        MemWriteByte(m_regHL, Res(MemReadByte(m_regHL), 7));
        !          3272:                        return 15;
        !          3273:                
        !          3274:                case 0xBF: // res_7_a
        !          3275:                        m_regA = Res(m_regA, 7);
        !          3276:                        return 8;
        !          3277: 
        !          3278:                case 0xC0: // set_0_b
        !          3279:                        m_regB = Set(m_regB ,0);
        !          3280:                        return 8;
        !          3281:                
        !          3282:                case 0xC1: // set_0_c
        !          3283:                        m_regC = Set(m_regC, 0);
        !          3284:                        return 8;
        !          3285:                
        !          3286:                case 0xC2: // set_0_d
        !          3287:                        m_regD = Set(m_regD, 0);
        !          3288:                        return 8;
        !          3289:                
        !          3290:                case 0xC3: // set_0_e
        !          3291:                        m_regE = Set(m_regE, 0);
        !          3292:                        return 8;
        !          3293:                
        !          3294:                case 0xC4: // set_0_h
        !          3295:                        m_regH = Set(m_regH, 0);
        !          3296:                        return 8;
        !          3297:                
        !          3298:                case 0xC5: // set_0_l
        !          3299:                        m_regL = Set(m_regL, 0);
        !          3300:                        return 8;
        !          3301:                
        !          3302:                case 0xC6: // set_0_xhl
        !          3303:                        MemWriteByte(m_regHL, Set(MemReadByte(m_regHL), 0));
        !          3304:                        return 15;
        !          3305:                
        !          3306:                case 0xC7: // set_0_a
        !          3307:                        m_regA = Set(m_regA, 0);
        !          3308:                        return 8;
        !          3309: 
        !          3310:                case 0xC8: // set_1_b
        !          3311:                        m_regB = Set(m_regB ,1);
        !          3312:                        return 8;
        !          3313:                
        !          3314:                case 0xC9: // set_1_c
        !          3315:                        m_regC = Set(m_regC, 1);
        !          3316:                        return 8;
        !          3317:                
        !          3318:                case 0xCA: // set_1_d
        !          3319:                        m_regD = Set(m_regD, 1);
        !          3320:                        return 8;
        !          3321:                
        !          3322:                case 0xCB: // set_1_e
        !          3323:                        m_regE = Set(m_regE, 1);
        !          3324:                        return 8;
        !          3325:                
        !          3326:                case 0xCC: // set_1_h
        !          3327:                        m_regH = Set(m_regH, 1);
        !          3328:                        return 8;
        !          3329:                
        !          3330:                case 0xCD: // set_1_l
        !          3331:                        m_regL = Set(m_regL, 1);
        !          3332:                        return 8;
        !          3333:                
        !          3334:                case 0xCE: // set_1_xhl
        !          3335:                        MemWriteByte(m_regHL, Set(MemReadByte(m_regHL), 1));
        !          3336:                        return 15;
        !          3337:                
        !          3338:                case 0xCF: // set_1_a
        !          3339:                        m_regA = Set(m_regA, 1);
        !          3340:                        return 8;
        !          3341: 
        !          3342:                case 0xD0: // set_2_b
        !          3343:                        m_regB = Set(m_regB ,2);
        !          3344:                        return 8;
        !          3345:                
        !          3346:                case 0xD1: // set_2_c
        !          3347:                        m_regC = Set(m_regC, 2);
        !          3348:                        return 8;
        !          3349:                
        !          3350:                case 0xD2: // set_2_d
        !          3351:                        m_regD = Set(m_regD, 2);
        !          3352:                        return 8;
        !          3353:                
        !          3354:                case 0xD3: // set_2_e
        !          3355:                        m_regE = Set(m_regE, 2);
        !          3356:                        return 8;
        !          3357:                
        !          3358:                case 0xD4: // set_2_h
        !          3359:                        m_regH = Set(m_regH, 2);
        !          3360:                        return 8;
        !          3361:                
        !          3362:                case 0xD5: // set_2_l
        !          3363:                        m_regL = Set(m_regL, 2);
        !          3364:                        return 8;
        !          3365:                
        !          3366:                case 0xD6: // set_2_xhl
        !          3367:                        MemWriteByte(m_regHL, Set(MemReadByte(m_regHL), 2));
        !          3368:                        return 15;
        !          3369:                
        !          3370:                case 0xD7: // set_2_a
        !          3371:                        m_regA = Set(m_regA, 2);
        !          3372:                        return 8;
        !          3373: 
        !          3374:                case 0xD8: // set_3_b
        !          3375:                        m_regB = Set(m_regB ,3);
        !          3376:                        return 8;
        !          3377:                
        !          3378:                case 0xD9: // set_3_c
        !          3379:                        m_regC = Set(m_regC, 3);
        !          3380:                        return 8;
        !          3381:                
        !          3382:                case 0xDA: // set_3_d
        !          3383:                        m_regD = Set(m_regD, 3);
        !          3384:                        return 8;
        !          3385:                
        !          3386:                case 0xDB: // set_3_e
        !          3387:                        m_regE = Set(m_regE, 3);
        !          3388:                        return 8;
        !          3389:                
        !          3390:                case 0xDC: // set_3_h
        !          3391:                        m_regH = Set(m_regH, 3);
        !          3392:                        return 8;
        !          3393:                
        !          3394:                case 0xDD: // set_3_l
        !          3395:                        m_regL = Set(m_regL, 3);
        !          3396:                        return 8;
        !          3397:                
        !          3398:                case 0xDE: // set_3_xhl
        !          3399:                        MemWriteByte(m_regHL, Set(MemReadByte(m_regHL), 3));
        !          3400:                        return 15;
        !          3401:                
        !          3402:                case 0xDF: // set_3_a
        !          3403:                        m_regA = Set(m_regA, 3);
        !          3404:                        return 8;
        !          3405: 
        !          3406:                case 0xE0: // set_4_b
        !          3407:                        m_regB = Set(m_regB ,4);
        !          3408:                        return 8;
        !          3409:                
        !          3410:                case 0xE1: // set_4_c
        !          3411:                        m_regC = Set(m_regC, 4);
        !          3412:                        return 8;
        !          3413:                
        !          3414:                case 0xE2: // set_4_d
        !          3415:                        m_regD = Set(m_regD, 4);
        !          3416:                        return 8;
        !          3417:                
        !          3418:                case 0xE3: // set_4_e
        !          3419:                        m_regE = Set(m_regE, 4);
        !          3420:                        return 8;
        !          3421:                
        !          3422:                case 0xE4: // set_4_h
        !          3423:                        m_regH = Set(m_regH, 4);
        !          3424:                        return 8;
        !          3425:                
        !          3426:                case 0xE5: // set_4_l
        !          3427:                        m_regL = Set(m_regL, 4);
        !          3428:                        return 8;
        !          3429:                
        !          3430:                case 0xE6: // set_4_xhl
        !          3431:                        MemWriteByte(m_regHL, Set(MemReadByte(m_regHL), 4));
        !          3432:                        return 15;
        !          3433:                
        !          3434:                case 0xE7: // set_4_a
        !          3435:                        m_regA = Set(m_regA, 4);
        !          3436:                        return 8;
        !          3437: 
        !          3438:                case 0xE8: // set_5_b
        !          3439:                        m_regB = Set(m_regB ,5);
        !          3440:                        return 8;
        !          3441:                
        !          3442:                case 0xE9: // set_5_c
        !          3443:                        m_regC = Set(m_regC, 5);
        !          3444:                        return 8;
        !          3445:                
        !          3446:                case 0xEA: // set_5_d
        !          3447:                        m_regD = Set(m_regD, 5);
        !          3448:                        return 8;
        !          3449:                
        !          3450:                case 0xEB: // set_5_e
        !          3451:                        m_regE = Set(m_regE, 5);
        !          3452:                        return 8;
        !          3453:                
        !          3454:                case 0xEC: // set_5_h
        !          3455:                        m_regH = Set(m_regH, 5);
        !          3456:                        return 8;
        !          3457:                
        !          3458:                case 0xED: // set_5_l
        !          3459:                        m_regL = Set(m_regL, 5);
        !          3460:                        return 8;
        !          3461:                
        !          3462:                case 0xEE: // set_5_xhl
        !          3463:                        MemWriteByte(m_regHL, Set(MemReadByte(m_regHL), 5));
        !          3464:                        return 15;
        !          3465:                
        !          3466:                case 0xEF: // set_5_a
        !          3467:                        m_regA = Set(m_regA, 5);
        !          3468:                        return 8;
        !          3469: 
        !          3470:                case 0xF0: // set_6_b
        !          3471:                        m_regB = Set(m_regB ,6);
        !          3472:                        return 8;
        !          3473:                
        !          3474:                case 0xF1: // set_6_c
        !          3475:                        m_regC = Set(m_regC, 6);
        !          3476:                        return 8;
        !          3477:                
        !          3478:                case 0xF2: // set_6_d
        !          3479:                        m_regD = Set(m_regD, 6);
        !          3480:                        return 8;
        !          3481:                
        !          3482:                case 0xF3: // set_6_e
        !          3483:                        m_regE = Set(m_regE, 6);
        !          3484:                        return 8;
        !          3485:                
        !          3486:                case 0xF4: // set_6_h
        !          3487:                        m_regH = Set(m_regH, 6);
        !          3488:                        return 8;
        !          3489:                
        !          3490:                case 0xF5: // set_6_l
        !          3491:                        m_regL = Set(m_regL, 6);
        !          3492:                        return 8;
        !          3493:                
        !          3494:                case 0xF6: // set_6_xhl
        !          3495:                        MemWriteByte(m_regHL, Set(MemReadByte(m_regHL), 6));
        !          3496:                        return 15;
        !          3497:                
        !          3498:                case 0xF7: // set_6_a
        !          3499:                        m_regA = Set(m_regA, 6);
        !          3500:                        return 8;
        !          3501: 
        !          3502:                case 0xF8: // set_7_b
        !          3503:                        m_regB = Set(m_regB ,7);
        !          3504:                        return 8;
        !          3505:                
        !          3506:                case 0xF9: // set_7_c
        !          3507:                        m_regC = Set(m_regC, 7);
        !          3508:                        return 8;
        !          3509:                
        !          3510:                case 0xFA: // set_7_d
        !          3511:                        m_regD = Set(m_regD, 7);
        !          3512:                        return 8;
        !          3513:                
        !          3514:                case 0xFB: // set_7_e
        !          3515:                        m_regE = Set(m_regE, 7);
        !          3516:                        return 8;
        !          3517:                
        !          3518:                case 0xFC: // set_7_h
        !          3519:                        m_regH = Set(m_regH, 7);
        !          3520:                        return 8;
        !          3521:                
        !          3522:                case 0xFD: // set_7_l
        !          3523:                        m_regL = Set(m_regL, 7);
        !          3524:                        return 8;
        !          3525:                
        !          3526:                case 0xFE: // set_7_xhl
        !          3527:                        MemWriteByte(m_regHL, Set(MemReadByte(m_regHL), 7));
        !          3528:                        return 15;
        !          3529:                
        !          3530:                case 0xFF: // set_7_a
        !          3531:                        m_regA = Set(m_regA, 7);
        !          3532:                        return 8;
        !          3533: 
        !          3534:                default:
        !          3535:                        _ASSERT(FALSE);
        !          3536:                        return 0;
        !          3537:        }
        !          3538: }
        !          3539: 
        !          3540: void Exx() {
        !          3541:        swap(m_regBC, m_regBC2);
        !          3542:        swap(m_regDE, m_regDE2);
        !          3543:        swap(m_regHL, m_regHL2);
        !          3544: }
        !          3545: 
        !          3546: /* ***************************************************************************
        !          3547:  * DD prefixed opcodes
        !          3548:  * ***************************************************************************
        !          3549:  */
        !          3550: /* inline */ WORD IndirectIX() {
        !          3551:        return m_regIX + (signed char)ImmedByte();
        !          3552: }
        !          3553: 
        !          3554: int HandleDD() {
        !          3555:        WORD wAddr;
        !          3556:        WORD wTemp;
        !          3557: 
        !          3558:        const BYTE bOpcode = ImmedByte();
        !          3559: 
        !          3560:        m_regR++;
        !          3561: 
        !          3562:        switch (bOpcode)
        !          3563:        {
        !          3564:                case 0x00: // no_op   
        !          3565:                        SetPC(GetPC() - 1);
        !          3566:                        return 0;
        !          3567:                
        !          3568:                case 0x01: // no_op     
        !          3569:                        SetPC(GetPC() - 1);
        !          3570:                        return 0;
        !          3571:                
        !          3572:                case 0x02: // no_op      
        !          3573:                        SetPC(GetPC() - 1);
        !          3574:                        return 0;
        !          3575:                
        !          3576:                case 0x03: // no_op    
        !          3577:                        SetPC(GetPC() - 1);
        !          3578:                        return 0;
        !          3579:                
        !          3580:                case 0x04: // no_op    
        !          3581:                        SetPC(GetPC() - 1);
        !          3582:                        return 0;
        !          3583:                
        !          3584:                case 0x05: // no_op    
        !          3585:                        SetPC(GetPC() - 1);
        !          3586:                        return 0;
        !          3587:                
        !          3588:                case 0x06: // no_op      
        !          3589:                        SetPC(GetPC() - 1);
        !          3590:                        return 0;
        !          3591:                
        !          3592:                case 0x07: // no_op   
        !          3593:                        SetPC(GetPC() - 1);
        !          3594:                        return 0;
        !          3595: 
        !          3596:                case 0x08: // no_op   
        !          3597:                        SetPC(GetPC() - 1);
        !          3598:                        return 0;
        !          3599:                
        !          3600:                case 0x09: // add_ix_bc 
        !          3601:                        m_regIX = Add_2(m_regIX, m_regBC);
        !          3602:                        return 15;
        !          3603:                
        !          3604:                case 0x0A: // no_op      
        !          3605:                        SetPC(GetPC() - 1);
        !          3606:                        return 0;
        !          3607:                
        !          3608:                case 0x0B: // no_op    
        !          3609:                        SetPC(GetPC() - 1);
        !          3610:                        return 0;
        !          3611:                
        !          3612:                case 0x0C: // no_op    
        !          3613:                        SetPC(GetPC() - 1);
        !          3614:                        return 0;
        !          3615:                
        !          3616:                case 0x0D: // no_op    
        !          3617:                        SetPC(GetPC() - 1);
        !          3618:                        return 0;
        !          3619:                
        !          3620:                case 0x0E: // no_op      
        !          3621:                        SetPC(GetPC() - 1);
        !          3622:                        return 0;
        !          3623:                
        !          3624:                case 0x0F: // no_op   
        !          3625:                        SetPC(GetPC() - 1);
        !          3626:                        return 0;
        !          3627: 
        !          3628:                case 0x10: // no_op   
        !          3629:                        SetPC(GetPC() - 1);
        !          3630:                        return 0;
        !          3631:                
        !          3632:                case 0x11: // no_op     
        !          3633:                        SetPC(GetPC() - 1);
        !          3634:                        return 0;
        !          3635:                
        !          3636:                case 0x12: // no_op      
        !          3637:                        SetPC(GetPC() - 1);
        !          3638:                        return 0;
        !          3639:                
        !          3640:                case 0x13: // no_op    
        !          3641:                        SetPC(GetPC() - 1);
        !          3642:                        return 0;
        !          3643:                
        !          3644:                case 0x14: // no_op    
        !          3645:                        SetPC(GetPC() - 1);
        !          3646:                        return 0;
        !          3647:                
        !          3648:                case 0x15: // no_op    
        !          3649:                        SetPC(GetPC() - 1);
        !          3650:                        return 0;
        !          3651:                
        !          3652:                case 0x16: // no_op      
        !          3653:                        SetPC(GetPC() - 1);
        !          3654:                        return 0;
        !          3655:                
        !          3656:                case 0x17: // no_op   
        !          3657:                        SetPC(GetPC() - 1);
        !          3658:                        return 0;
        !          3659: 
        !          3660:                case 0x18: // no_op   
        !          3661:                        SetPC(GetPC() - 1);
        !          3662:                        return 0;
        !          3663:                
        !          3664:                case 0x19: // add_ix_de 
        !          3665:                        m_regIX = Add_2(m_regIX, m_regDE);
        !          3666:                        return 15;
        !          3667:                
        !          3668:                case 0x1A: // no_op      
        !          3669:                        SetPC(GetPC() - 1);
        !          3670:                        return 0;
        !          3671:                
        !          3672:                case 0x1B: // no_op    
        !          3673:                        SetPC(GetPC() - 1);
        !          3674:                        return 0;
        !          3675:                
        !          3676:                case 0x1C: // no_op    
        !          3677:                        SetPC(GetPC() - 1);
        !          3678:                        return 0;
        !          3679:                
        !          3680:                case 0x1D: // no_op    
        !          3681:                        SetPC(GetPC() - 1);
        !          3682:                        return 0;
        !          3683:                
        !          3684:                case 0x1E: // no_op      
        !          3685:                        SetPC(GetPC() - 1);
        !          3686:                        return 0;
        !          3687:                
        !          3688:                case 0x1F: // no_op   
        !          3689:                        SetPC(GetPC() - 1);
        !          3690:                        return 0;
        !          3691: 
        !          3692:                case 0x20: // no_op   
        !          3693:                        SetPC(GetPC() - 1);
        !          3694:                        return 0;
        !          3695:                
        !          3696:                case 0x21: // ld_ix_word
        !          3697:                        m_regIX = ImmedWord();
        !          3698:                        return 14;
        !          3699:                
        !          3700:                case 0x22: // ld_xword_ix
        !          3701:                        MemWriteWord(ImmedWord(), m_regIX);
        !          3702:                        return 20;
        !          3703:                
        !          3704:                case 0x23: // inc_ix
        !          3705:                        m_regIX++;
        !          3706:                        return 10;
        !          3707:                
        !          3708:                case 0x24: // inc_ixh  
        !          3709:                        m_regIXh = Inc(m_regIXh);
        !          3710:                        return 9;
        !          3711:                
        !          3712:                case 0x25: // dec_ixh  
        !          3713:                        m_regIXh = Dec(m_regIXh);
        !          3714:                        return 9;
        !          3715:                
        !          3716:                case 0x26: // ld_ixh_byte
        !          3717:                        m_regIXh = ImmedByte();
        !          3718:                        return 9;
        !          3719:                
        !          3720:                case 0x27: // no_op   
        !          3721:                        SetPC(GetPC() - 1);
        !          3722:                        return 0;
        !          3723: 
        !          3724:                case 0x28: // no_op   
        !          3725:                        SetPC(GetPC() - 1);
        !          3726:                        return 0;
        !          3727:                
        !          3728:                case 0x29: // add_ix_ix 
        !          3729:                        m_regIX = Add_2(m_regIX, m_regIX);
        !          3730:                        return 15;
        !          3731:                
        !          3732:                case 0x2A: // ld_ix_xword
        !          3733:                        m_regIX = MemReadWord(ImmedWord());
        !          3734:                        return 20;
        !          3735:                
        !          3736:                case 0x2B: // dec_ix   
        !          3737:                        m_regIX--;
        !          3738:                        return 10;
        !          3739:                
        !          3740:                case 0x2C: // inc_ixl  
        !          3741:                        m_regIXl = Inc(m_regIXl);
        !          3742:                        return 9;
        !          3743:                
        !          3744:                case 0x2D: // dec_ixl  
        !          3745:                        m_regIXl = Dec(m_regIXl);
        !          3746:                        return 9;
        !          3747:                
        !          3748:                case 0x2E: // ld_ixl_byte
        !          3749:                        m_regIXl = ImmedByte();
        !          3750:                        return 9;
        !          3751:                
        !          3752:                case 0x2F: // no_op   
        !          3753:                        SetPC(GetPC() - 1);
        !          3754:                        return 0;
        !          3755: 
        !          3756:                case 0x30: // no_op   
        !          3757:                        SetPC(GetPC() - 1);
        !          3758:                        return 0;
        !          3759:                
        !          3760:                case 0x31: // no_op     
        !          3761:                        SetPC(GetPC() - 1);
        !          3762:                        return 0;
        !          3763:                
        !          3764:                case 0x32: // no_op      
        !          3765:                        SetPC(GetPC() - 1);
        !          3766:                        return 0;
        !          3767:                
        !          3768:                case 0x33: // no_op    
        !          3769:                        SetPC(GetPC() - 1);
        !          3770:                        return 0;
        !          3771:                
        !          3772:                case 0x34: // inc_xix  
        !          3773:                        wAddr = IndirectIX();
        !          3774:                        MemWriteByte(wAddr, Inc(MemReadByte(wAddr)));
        !          3775:                        return 23;
        !          3776:                
        !          3777:                case 0x35: // dec_xix  
        !          3778:                        wAddr = IndirectIX();
        !          3779:                        MemWriteByte(wAddr, Dec(MemReadByte(wAddr)));
        !          3780:                        return 23;
        !          3781:                
        !          3782:                case 0x36: // ld_xix_byte
        !          3783:                        wAddr = IndirectIX();
        !          3784:                        MemWriteByte(wAddr, ImmedByte());
        !          3785:                        return 19;
        !          3786:                
        !          3787:                case 0x37: // no_op   
        !          3788:                        SetPC(GetPC() - 1);
        !          3789:                        return 0;
        !          3790: 
        !          3791:                case 0x38: // no_op   
        !          3792:                        SetPC(GetPC() - 1);
        !          3793:                        return 0;
        !          3794:                
        !          3795:                case 0x39: // add_ix_sp 
        !          3796:                        m_regIX = Add_2(m_regIX, GetSP());
        !          3797:                        return 15;
        !          3798:                
        !          3799:                case 0x3A: // no_op      
        !          3800:                        SetPC(GetPC() - 1);
        !          3801:                        return 0;
        !          3802:                
        !          3803:                case 0x3B: // no_op    
        !          3804:                        SetPC(GetPC() - 1);
        !          3805:                        return 0;
        !          3806:                
        !          3807:                case 0x3C: // no_op    
        !          3808:                        SetPC(GetPC() - 1);
        !          3809:                        return 0;
        !          3810:                
        !          3811:                case 0x3D: // no_op    
        !          3812:                        SetPC(GetPC() - 1);
        !          3813:                        return 0;
        !          3814:                
        !          3815:                case 0x3E: // no_op      
        !          3816:                        SetPC(GetPC() - 1);
        !          3817:                        return 0;
        !          3818:                
        !          3819:                case 0x3F: // no_op   
        !          3820:                        SetPC(GetPC() - 1);
        !          3821:                        return 0;
        !          3822: 
        !          3823:                case 0x40: // no_op   
        !          3824:                        SetPC(GetPC() - 1);
        !          3825:                        return 0;
        !          3826:                
        !          3827:                case 0x41: // no_op     
        !          3828:                        SetPC(GetPC() - 1);
        !          3829:                        return 0;
        !          3830:                
        !          3831:                case 0x42: // no_op      
        !          3832:                        SetPC(GetPC() - 1);
        !          3833:                        return 0;
        !          3834:                
        !          3835:                case 0x43: // no_op    
        !          3836:                        SetPC(GetPC() - 1);
        !          3837:                        return 0;
        !          3838:                
        !          3839:                case 0x44: // ld_b_ixh 
        !          3840:                        m_regB = m_regIXh;
        !          3841:                        return 9;
        !          3842:                
        !          3843:                case 0x45: // ld_b_ixl 
        !          3844:                        m_regB = m_regIXl;
        !          3845:                        return 9;
        !          3846:                
        !          3847:                case 0x46: // ld_b_xix   
        !          3848:                        m_regB = MemReadByte(IndirectIX());
        !          3849:                        return 19;
        !          3850:                
        !          3851:                case 0x47: // no_op   
        !          3852:                        SetPC(GetPC() - 1);
        !          3853:                        return 0;
        !          3854: 
        !          3855:                case 0x48: // no_op   
        !          3856:                        SetPC(GetPC() - 1);
        !          3857:                        return 0;
        !          3858:                
        !          3859:                case 0x49: // no_op     
        !          3860:                        SetPC(GetPC() - 1);
        !          3861:                        return 0;
        !          3862:                
        !          3863:                case 0x4A: // no_op      
        !          3864:                        SetPC(GetPC() - 1);
        !          3865:                        return 0;
        !          3866:                
        !          3867:                case 0x4B: // no_op    
        !          3868:                        SetPC(GetPC() - 1);
        !          3869:                        return 0;
        !          3870:                
        !          3871:                case 0x4C: // ld_c_ixh 
        !          3872:                        m_regC = m_regIXh;
        !          3873:                        return 9;
        !          3874:                
        !          3875:                case 0x4D: // ld_c_ixl 
        !          3876:                        m_regC = m_regIXl;
        !          3877:                        return 9;
        !          3878:                
        !          3879:                case 0x4E: // ld_c_xix   
        !          3880:                        m_regC = MemReadByte(IndirectIX());
        !          3881:                        return 19;
        !          3882:                
        !          3883:                case 0x4F: // no_op   
        !          3884:                        SetPC(GetPC() - 1);
        !          3885:                        return 0;
        !          3886: 
        !          3887:                case 0x50: // no_op   
        !          3888:                        SetPC(GetPC() - 1);
        !          3889:                        return 0;
        !          3890:                
        !          3891:                case 0x51: // no_op     
        !          3892:                        SetPC(GetPC() - 1);
        !          3893:                        return 0;
        !          3894:                
        !          3895:                case 0x52: // no_op      
        !          3896:                        SetPC(GetPC() - 1);
        !          3897:                        return 0;
        !          3898:                
        !          3899:                case 0x53: // no_op    
        !          3900:                        SetPC(GetPC() - 1);
        !          3901:                        return 0;
        !          3902:                
        !          3903:                case 0x54: // ld_d_ixh 
        !          3904:                        m_regD = m_regIXh;
        !          3905:                        return 9;
        !          3906:                
        !          3907:                case 0x55: // ld_d_ixl 
        !          3908:                        m_regD = m_regIXl;
        !          3909:                        return 9;
        !          3910:                
        !          3911:                case 0x56: // ld_d_xix   
        !          3912:                        m_regD = MemReadByte(IndirectIX());
        !          3913:                        return 19;
        !          3914:                
        !          3915:                case 0x57: // no_op   
        !          3916:                        SetPC(GetPC() - 1);
        !          3917:                        return 0;
        !          3918: 
        !          3919:                case 0x58: // no_op   
        !          3920:                        SetPC(GetPC() - 1);
        !          3921:                        return 0;
        !          3922:                
        !          3923:                case 0x59: // no_op     
        !          3924:                        SetPC(GetPC() - 1);
        !          3925:                        return 0;
        !          3926:                
        !          3927:                case 0x5A: // no_op      
        !          3928:                        SetPC(GetPC() - 1);
        !          3929:                        return 0;
        !          3930:                
        !          3931:                case 0x5B: // no_op    
        !          3932:                        SetPC(GetPC() - 1);
        !          3933:                        return 0;
        !          3934:                
        !          3935:                case 0x5C: // ld_e_ixh 
        !          3936:                        m_regE = m_regIXh;
        !          3937:                        return 9;
        !          3938:                
        !          3939:                case 0x5D: // ld_e_ixl 
        !          3940:                        m_regE = m_regIXl;
        !          3941:                        return 9;
        !          3942:                
        !          3943:                case 0x5E: // ld_e_xix   
        !          3944:                        m_regE = MemReadByte(IndirectIX());
        !          3945:                        return 19;
        !          3946:                
        !          3947:                case 0x5F: // no_op   
        !          3948:                        SetPC(GetPC() - 1);
        !          3949:                        return 0;
        !          3950: 
        !          3951:                case 0x60: // ld_ixh_b
        !          3952:                        m_regIXh = m_regB;
        !          3953:                        return 9;
        !          3954:                
        !          3955:                case 0x61: // ld_ixh_c  
        !          3956:                        m_regIXh = m_regC;
        !          3957:                        return 9;
        !          3958:                
        !          3959:                case 0x62: // ld_ixh_d   
        !          3960:                        m_regIXh = m_regD;
        !          3961:                        return 9;
        !          3962:                
        !          3963:                case 0x63: // ld_ixh_e 
        !          3964:                        m_regIXh = m_regE;
        !          3965:                        return 9;
        !          3966:                
        !          3967:                case 0x64: // ld_ixh_h 
        !          3968:                        m_regIXh = m_regH;
        !          3969:                        return 9;
        !          3970:                
        !          3971:                case 0x65: // ld_ixh_l 
        !          3972:                        m_regIXh = m_regL;
        !          3973:                        return 9;
        !          3974:                
        !          3975:                case 0x66: // ld_h_xix   
        !          3976:                        m_regH = MemReadByte(IndirectIX());
        !          3977:                        return 9;
        !          3978:                
        !          3979:                case 0x67: // ld_ixh_a
        !          3980:                        m_regIXh = m_regA;
        !          3981:                        return 9;
        !          3982: 
        !          3983:                case 0x68: // ld_ixl_b
        !          3984:                        m_regIXl = m_regB;
        !          3985:                        return 9;
        !          3986:                
        !          3987:                case 0x69: // ld_ixl_c  
        !          3988:                        m_regIXl = m_regC;
        !          3989:                        return 9;
        !          3990:                
        !          3991:                case 0x6A: // ld_ixl_d   
        !          3992:                        m_regIXl = m_regD;
        !          3993:                        return 9;
        !          3994:                
        !          3995:                case 0x6B: // ld_ixl_e 
        !          3996:                        m_regIXl = m_regE;
        !          3997:                        return 9;
        !          3998:                
        !          3999:                case 0x6C: // ld_ixl_h 
        !          4000:                        m_regIXl = m_regH;
        !          4001:                        return 9;
        !          4002:                
        !          4003:                case 0x6D: // ld_ixl_l 
        !          4004:                        m_regIXl = m_regL;
        !          4005:                        return 9;
        !          4006:                
        !          4007:                case 0x6E: // ld_l_xix   
        !          4008:                        m_regL = MemReadByte(IndirectIX());
        !          4009:                        return 9;
        !          4010:                
        !          4011:                case 0x6F: // ld_ixl_a
        !          4012:                        m_regIXl = m_regA;
        !          4013:                        return 9;
        !          4014: 
        !          4015:                case 0x70: // ld_xix_b
        !          4016:                        MemWriteByte(IndirectIX(), m_regB);
        !          4017:                        return 19;
        !          4018:                
        !          4019:                case 0x71: // ld_xix_c  
        !          4020:                        MemWriteByte(IndirectIX(), m_regC);
        !          4021:                        return 19;
        !          4022:                
        !          4023:                case 0x72: // ld_xix_d   
        !          4024:                        MemWriteByte(IndirectIX(), m_regD);
        !          4025:                        return 19;
        !          4026:                
        !          4027:                case 0x73: // ld_xix_e 
        !          4028:                        MemWriteByte(IndirectIX(), m_regE);
        !          4029:                        return 19;
        !          4030:                
        !          4031:                case 0x74: // ld_xix_h 
        !          4032:                        MemWriteByte(IndirectIX(), m_regH);
        !          4033:                        return 19;
        !          4034:                
        !          4035:                case 0x75: // ld_xix_l 
        !          4036:                        MemWriteByte(IndirectIX(), m_regL);
        !          4037:                        return 19;
        !          4038:                
        !          4039:                case 0x76: // no_op      
        !          4040:                        SetPC(GetPC() - 1);
        !          4041:                        return 19;
        !          4042:                
        !          4043:                case 0x77: // ld_xix_a
        !          4044:                        MemWriteByte(IndirectIX(), m_regA);
        !          4045:                        return 19;
        !          4046: 
        !          4047:                case 0x78: // no_op   
        !          4048:                        SetPC(GetPC() - 1);
        !          4049:                        return 0;
        !          4050:                
        !          4051:                case 0x79: // no_op     
        !          4052:                        SetPC(GetPC() - 1);
        !          4053:                        return 0;
        !          4054:                
        !          4055:                case 0x7A: // no_op      
        !          4056:                        SetPC(GetPC() - 1);
        !          4057:                        return 0;
        !          4058:                
        !          4059:                case 0x7B: // no_op    
        !          4060:                        SetPC(GetPC() - 1);
        !          4061:                        return 0;
        !          4062:                
        !          4063:                case 0x7C: // ld_a_ixh 
        !          4064:                        m_regA = m_regIXh;
        !          4065:                        return 9;
        !          4066:                
        !          4067:                case 0x7D: // ld_a_ixl 
        !          4068:                        m_regA = m_regIXl;
        !          4069:                        return 9;
        !          4070:                
        !          4071:                case 0x7E: // ld_a_xix   
        !          4072:                        m_regA = MemReadByte(IndirectIX());
        !          4073:                        return 19;
        !          4074:                
        !          4075:                case 0x7F: // no_op   
        !          4076:                        SetPC(GetPC() - 1);
        !          4077:                        return 0;
        !          4078: 
        !          4079:                case 0x80: // no_op   
        !          4080:                        SetPC(GetPC() - 1);
        !          4081:                        return 0;
        !          4082:                
        !          4083:                case 0x81: // no_op     
        !          4084:                        SetPC(GetPC() - 1);
        !          4085:                        return 0;
        !          4086:                
        !          4087:                case 0x82: // no_op      
        !          4088:                        SetPC(GetPC() - 1);
        !          4089:                        return 0;
        !          4090:                
        !          4091:                case 0x83: // no_op    
        !          4092:                        SetPC(GetPC() - 1);
        !          4093:                        return 0;
        !          4094:                
        !          4095:                case 0x84: // add_a_ixh
        !          4096:                        Add_1(m_regIXh);
        !          4097:                        return 9;
        !          4098:                
        !          4099:                case 0x85: // add_a_ixl
        !          4100:                        Add_1(m_regIXl);
        !          4101:                        return 9;
        !          4102:                
        !          4103:                case 0x86: // add_a_xix  
        !          4104:                        Add_1(MemReadByte(IndirectIX()));
        !          4105:                        return 19;
        !          4106:                
        !          4107:                case 0x87: // no_op   
        !          4108:                        SetPC(GetPC() - 1);
        !          4109:                        return 0;
        !          4110: 
        !          4111:                case 0x88: // no_op   
        !          4112:                        SetPC(GetPC() - 1);
        !          4113:                        return 0;
        !          4114:                
        !          4115:                case 0x89: // no_op     
        !          4116:                        SetPC(GetPC() - 1);
        !          4117:                        return 0;
        !          4118:                
        !          4119:                case 0x8A: // no_op      
        !          4120:                        SetPC(GetPC() - 1);
        !          4121:                        return 0;
        !          4122:                
        !          4123:                case 0x8B: // no_op    
        !          4124:                        SetPC(GetPC() - 1);
        !          4125:                        return 0;
        !          4126:                
        !          4127:                case 0x8C: // adc_a_ixh
        !          4128:                        Adc_1(m_regIXh);
        !          4129:                        return 9;
        !          4130:                
        !          4131:                case 0x8D: // adc_a_ixl
        !          4132:                        Adc_1(m_regIXl);
        !          4133:                        return 9;
        !          4134:                
        !          4135:                case 0x8E: // adc_a_xix  
        !          4136:                        Adc_1(MemReadByte(IndirectIX()));
        !          4137:                        return 19;
        !          4138:                
        !          4139:                case 0x8F: // no_op   
        !          4140:                        SetPC(GetPC() - 1);
        !          4141:                        return 0;
        !          4142: 
        !          4143:                case 0x90: // no_op   
        !          4144:                        SetPC(GetPC() - 1);
        !          4145:                        return 0;
        !          4146:                
        !          4147:                case 0x91: // no_op     
        !          4148:                        SetPC(GetPC() - 1);
        !          4149:                        return 0;
        !          4150:                
        !          4151:                case 0x92: // no_op      
        !          4152:                        SetPC(GetPC() - 1);
        !          4153:                        return 0;
        !          4154:                
        !          4155:                case 0x93: // no_op    
        !          4156:                        SetPC(GetPC() - 1);
        !          4157:                        return 0;
        !          4158:                
        !          4159:                case 0x94: // sub_ixh  
        !          4160:                        Sub_1(m_regIXh);
        !          4161:                        return 9;
        !          4162:                
        !          4163:                case 0x95: // sub_ixl  
        !          4164:                        Sub_1(m_regIXl);
        !          4165:                        return 9;
        !          4166:                
        !          4167:                case 0x96: // sub_xix    
        !          4168:                        Sub_1(MemReadByte(IndirectIX()));
        !          4169:                        return 19;
        !          4170:                
        !          4171:                case 0x97: // no_op   
        !          4172:                        SetPC(GetPC() - 1);
        !          4173:                        return 0;
        !          4174: 
        !          4175:                case 0x98: // no_op   
        !          4176:                        SetPC(GetPC() - 1);
        !          4177:                        return 0;
        !          4178:                
        !          4179:                case 0x99: // no_op     
        !          4180:                        SetPC(GetPC() - 1);
        !          4181:                        return 0;
        !          4182:                
        !          4183:                case 0x9A: // no_op      
        !          4184:                        SetPC(GetPC() - 1);
        !          4185:                        return 0;
        !          4186:                
        !          4187:                case 0x9B: // no_op    
        !          4188:                        SetPC(GetPC() - 1);
        !          4189:                        return 0;
        !          4190:                
        !          4191:                case 0x9C: // sbc_a_ixh
        !          4192:                        Sbc_1(m_regIXh);
        !          4193:                        return 9;
        !          4194:                
        !          4195:                case 0x9D: // sbc_a_ixl
        !          4196:                        Sbc_1(m_regIXl);
        !          4197:                        return 9;
        !          4198:                
        !          4199:                case 0x9E: // sbc_a_xix  
        !          4200:                        Sbc_1(MemReadByte(IndirectIX()));
        !          4201:                        return 19;
        !          4202:                
        !          4203:                case 0x9F: // no_op   
        !          4204:                        SetPC(GetPC() - 1);
        !          4205:                        return 0;
        !          4206: 
        !          4207:                case 0xA0: // no_op   
        !          4208:                        SetPC(GetPC() - 1);
        !          4209:                        return 0;
        !          4210:                
        !          4211:                case 0xA1: // no_op     
        !          4212:                        SetPC(GetPC() - 1);
        !          4213:                        return 0;
        !          4214:                
        !          4215:                case 0xA2: // no_op      
        !          4216:                        SetPC(GetPC() - 1);
        !          4217:                        return 0;
        !          4218:                
        !          4219:                case 0xA3: // no_op    
        !          4220:                        SetPC(GetPC() - 1);
        !          4221:                        return 0;
        !          4222:                
        !          4223:                case 0xA4: // and_ixh  
        !          4224:                        And(m_regIXh);
        !          4225:                        return 9;
        !          4226:                
        !          4227:                case 0xA5: // and_ixl  
        !          4228:                        And(m_regIXl);
        !          4229:                        return 9;
        !          4230:                
        !          4231:                case 0xA6: // and_xix    
        !          4232:                        And(MemReadByte(IndirectIX()));
        !          4233:                        return 19;
        !          4234:                
        !          4235:                case 0xA7: // no_op   
        !          4236:                        SetPC(GetPC() - 1);
        !          4237:                        return 0;
        !          4238: 
        !          4239:                case 0xA8: // no_op   
        !          4240:                        SetPC(GetPC() - 1);
        !          4241:                        return 0;
        !          4242:                
        !          4243:                case 0xA9: // no_op     
        !          4244:                        SetPC(GetPC() - 1);
        !          4245:                        return 0;
        !          4246:                
        !          4247:                case 0xAA: // no_op      
        !          4248:                        SetPC(GetPC() - 1);
        !          4249:                        return 0;
        !          4250:                
        !          4251:                case 0xAB: // no_op    
        !          4252:                        SetPC(GetPC() - 1);
        !          4253:                        return 0;
        !          4254:                
        !          4255:                case 0xAC: // xor_ixh  
        !          4256:                        Xor(m_regIXh);
        !          4257:                        return 9;
        !          4258:                
        !          4259:                case 0xAD: // xor_ixl  
        !          4260:                        Xor(m_regIXl);
        !          4261:                        return 9;
        !          4262:                
        !          4263:                case 0xAE: // xor_xix    
        !          4264:                        Xor(MemReadByte(IndirectIX()));
        !          4265:                        return 19;
        !          4266:                
        !          4267:                case 0xAF: // no_op   
        !          4268:                        SetPC(GetPC() - 1);
        !          4269:                        return 0;
        !          4270: 
        !          4271:                case 0xB0: // no_op   
        !          4272:                        SetPC(GetPC() - 1);
        !          4273:                        return 0;
        !          4274:                
        !          4275:                case 0xB1: // no_op     
        !          4276:                        SetPC(GetPC() - 1);
        !          4277:                        return 0;
        !          4278:                
        !          4279:                case 0xB2: // no_op      
        !          4280:                        SetPC(GetPC() - 1);
        !          4281:                        return 0;
        !          4282:                
        !          4283:                case 0xB3: // no_op    
        !          4284:                        SetPC(GetPC() - 1);
        !          4285:                        return 0;
        !          4286:                
        !          4287:                case 0xB4: // or_ixh   
        !          4288:                        Or(m_regIXh);
        !          4289:                        return 9;
        !          4290:                
        !          4291:                case 0xB5: // or_ixl   
        !          4292:                        Or(m_regIXl);
        !          4293:                        return 9;
        !          4294:                
        !          4295:                case 0xB6: // or_xix     
        !          4296:                        Or(MemReadByte(IndirectIX()));
        !          4297:                        return 19;
        !          4298:                
        !          4299:                case 0xB7: // no_op   
        !          4300:                        SetPC(GetPC() - 1);
        !          4301:                        return 0;
        !          4302: 
        !          4303:                case 0xB8: // no_op   
        !          4304:                        SetPC(GetPC() - 1);
        !          4305:                        return 0;
        !          4306:                
        !          4307:                case 0xB9: // no_op     
        !          4308:                        SetPC(GetPC() - 1);
        !          4309:                        return 0;
        !          4310:                
        !          4311:                case 0xBA: // no_op      
        !          4312:                        SetPC(GetPC() - 1);
        !          4313:                        return 0;
        !          4314:                
        !          4315:                case 0xBB: // no_op    
        !          4316:                        SetPC(GetPC() - 1);
        !          4317:                        return 0;
        !          4318:                
        !          4319:                case 0xBC: // cp_ixh   
        !          4320:                        Cp(m_regIXh);
        !          4321:                        return 9;
        !          4322:                
        !          4323:                case 0xBD: // cp_ixl   
        !          4324:                        Cp(m_regIXl);
        !          4325:                        return 9;
        !          4326:                
        !          4327:                case 0xBE: // cp_xix     
        !          4328:                        Cp(MemReadByte(IndirectIX()));
        !          4329:                        return 19;
        !          4330:                
        !          4331:                case 0xBF: // no_op   
        !          4332:                        SetPC(GetPC() - 1);
        !          4333:                        return 0;
        !          4334: 
        !          4335:                case 0xC0: // no_op   
        !          4336:                        SetPC(GetPC() - 1);
        !          4337:                        return 0;
        !          4338:                
        !          4339:                case 0xC1: // no_op     
        !          4340:                        SetPC(GetPC() - 1);
        !          4341:                        return 0;
        !          4342:                
        !          4343:                case 0xC2: // no_op      
        !          4344:                        SetPC(GetPC() - 1);
        !          4345:                        return 0;
        !          4346:                
        !          4347:                case 0xC3: // no_op    
        !          4348:                        SetPC(GetPC() - 1);
        !          4349:                        return 0;
        !          4350:                
        !          4351:                case 0xC4: // no_op    
        !          4352:                        SetPC(GetPC() - 1);
        !          4353:                        return 0;
        !          4354:                
        !          4355:                case 0xC5: // no_op    
        !          4356:                        SetPC(GetPC() - 1);
        !          4357:                        return 0;
        !          4358:                
        !          4359:                case 0xC6: // no_op      
        !          4360:                        SetPC(GetPC() - 1);
        !          4361:                        return 0;
        !          4362:                
        !          4363:                case 0xC7: // no_op   
        !          4364:                        SetPC(GetPC() - 1);
        !          4365:                        return 0;
        !          4366: 
        !          4367:                case 0xC8: // no_op   
        !          4368:                        SetPC(GetPC() - 1);
        !          4369:                        return 0;
        !          4370:                
        !          4371:                case 0xC9: // no_op     
        !          4372:                        SetPC(GetPC() - 1);
        !          4373:                        return 0;
        !          4374:                
        !          4375:                case 0xCA: // no_op      
        !          4376:                        SetPC(GetPC() - 1);
        !          4377:                        return 0;
        !          4378:                
        !          4379:                case 0xCB: // dd_cb    
        !          4380:                        return HandleDDCB();
        !          4381:                        break;
        !          4382:                
        !          4383:                case 0xCC: // no_op    
        !          4384:                        SetPC(GetPC() - 1);
        !          4385:                        return 0;
        !          4386:                
        !          4387:                case 0xCD: // no_op    
        !          4388:                        SetPC(GetPC() - 1);
        !          4389:                        return 0;
        !          4390:                
        !          4391:                case 0xCE: // no_op      
        !          4392:                        SetPC(GetPC() - 1);
        !          4393:                        return 0;
        !          4394:                
        !          4395:                case 0xCF: // no_op   
        !          4396:                        SetPC(GetPC() - 1);
        !          4397:                        return 0;
        !          4398: 
        !          4399:                case 0xD0: // no_op   
        !          4400:                        SetPC(GetPC() - 1);
        !          4401:                        return 0;
        !          4402:                
        !          4403:                case 0xD1: // no_op     
        !          4404:                        SetPC(GetPC() - 1);
        !          4405:                        return 0;
        !          4406:                
        !          4407:                case 0xD2: // no_op      
        !          4408:                        SetPC(GetPC() - 1);
        !          4409:                        return 0;
        !          4410:                
        !          4411:                case 0xD3: // no_op    
        !          4412:                        SetPC(GetPC() - 1);
        !          4413:                        return 0;
        !          4414:                
        !          4415:                case 0xD4: // no_op    
        !          4416:                        SetPC(GetPC() - 1);
        !          4417:                        return 0;
        !          4418:                
        !          4419:                case 0xD5: // no_op    
        !          4420:                        SetPC(GetPC() - 1);
        !          4421:                        return 0;
        !          4422:                
        !          4423:                case 0xD6: // no_op      
        !          4424:                        SetPC(GetPC() - 1);
        !          4425:                        return 0;
        !          4426:                
        !          4427:                case 0xD7: // no_op   
        !          4428:                        SetPC(GetPC() - 1);
        !          4429:                        return 0;
        !          4430: 
        !          4431:                case 0xD8: // no_op   
        !          4432:                        SetPC(GetPC() - 1);
        !          4433:                        return 0;
        !          4434:                
        !          4435:                case 0xD9: // no_op     
        !          4436:                        SetPC(GetPC() - 1);
        !          4437:                        return 0;
        !          4438:                
        !          4439:                case 0xDA: // no_op      
        !          4440:                        SetPC(GetPC() - 1);
        !          4441:                        return 0;
        !          4442:                
        !          4443:                case 0xDB: // no_op    
        !          4444:                        SetPC(GetPC() - 1);
        !          4445:                        return 0;
        !          4446:                
        !          4447:                case 0xDC: // no_op    
        !          4448:                        SetPC(GetPC() - 1);
        !          4449:                        return 0;
        !          4450:                
        !          4451:                case 0xDD: // no_op    
        !          4452:                        SetPC(GetPC() - 1);
        !          4453:                        return 0;
        !          4454:                
        !          4455:                case 0xDE: // no_op      
        !          4456:                        SetPC(GetPC() - 1);
        !          4457:                        return 0;
        !          4458:                
        !          4459:                case 0xDF: // no_op   
        !          4460:                        SetPC(GetPC() - 1);
        !          4461:                        return 0;
        !          4462: 
        !          4463:                case 0xE0: // no_op   
        !          4464:                        SetPC(GetPC() - 1);
        !          4465:                        return 0;
        !          4466:                
        !          4467:                case 0xE1: // pop_ix    
        !          4468:                        m_regIX = Pop();
        !          4469:                        return 14;
        !          4470:                
        !          4471:                case 0xE2: // no_op      
        !          4472:                        SetPC(GetPC() - 1);
        !          4473:                        return 0;
        !          4474:                
        !          4475:                case 0xE3: // ex_xsp_ix
        !          4476:                        wTemp = MemReadWord(GetSP());
        !          4477:                        MemWriteWord(GetSP(), m_regIX);
        !          4478:                        m_regIX = wTemp;
        !          4479:                        return 23;
        !          4480:                
        !          4481:                case 0xE4: // no_op    
        !          4482:                        SetPC(GetPC() - 1);
        !          4483:                        return 0;
        !          4484:                
        !          4485:                case 0xE5: // push_ix  
        !          4486:                        Push(m_regIX);
        !          4487:                        return 15;
        !          4488:                
        !          4489:                case 0xE6: // no_op      
        !          4490:                        SetPC(GetPC() - 1);
        !          4491:                        return 0;
        !          4492:                
        !          4493:                case 0xE7: // no_op   
        !          4494:                        SetPC(GetPC() - 1);
        !          4495:                        return 0;
        !          4496: 
        !          4497:                case 0xE8: // no_op   
        !          4498:                        SetPC(GetPC() - 1);
        !          4499:                        return 0;
        !          4500:                
        !          4501:                case 0xE9: // jp_ix     
        !          4502:                        SetPC(m_regIX);
        !          4503:                        return 8;
        !          4504:                
        !          4505:                case 0xEA: // no_op      
        !          4506:                        SetPC(GetPC() - 1);
        !          4507:                        return 0;
        !          4508:                
        !          4509:                case 0xEB: // no_op    
        !          4510:                        SetPC(GetPC() - 1);
        !          4511:                        return 0;
        !          4512:                
        !          4513:                case 0xEC: // no_op    
        !          4514:                        SetPC(GetPC() - 1);
        !          4515:                        return 0;
        !          4516:                
        !          4517:                case 0xED: // no_op    
        !          4518:                        SetPC(GetPC() - 1);
        !          4519:                        return 0;
        !          4520:                
        !          4521:                case 0xEE: // no_op      
        !          4522:                        SetPC(GetPC() - 1);
        !          4523:                        return 0;
        !          4524:                
        !          4525:                case 0xEF: // no_op   
        !          4526:                        SetPC(GetPC() - 1);
        !          4527:                        return 0;
        !          4528: 
        !          4529:                case 0xF0: // no_op   
        !          4530:                        SetPC(GetPC() - 1);
        !          4531:                        return 0;
        !          4532:                
        !          4533:                case 0xF1: // no_op     
        !          4534:                        SetPC(GetPC() - 1);
        !          4535:                        return 0;
        !          4536:                
        !          4537:                case 0xF2: // no_op      
        !          4538:                        SetPC(GetPC() - 1);
        !          4539:                        return 0;
        !          4540:                
        !          4541:                case 0xF3: // no_op    
        !          4542:                        SetPC(GetPC() - 1);
        !          4543:                        return 0;
        !          4544:                
        !          4545:                case 0xF4: // no_op    
        !          4546:                        SetPC(GetPC() - 1);
        !          4547:                        return 0;
        !          4548:                
        !          4549:                case 0xF5: // no_op    
        !          4550:                        SetPC(GetPC() - 1);
        !          4551:                        return 0;
        !          4552:                
        !          4553:                case 0xF6: // no_op      
        !          4554:                        SetPC(GetPC() - 1);
        !          4555:                        return 0;
        !          4556:                
        !          4557:                case 0xF7: // no_op   
        !          4558:                        SetPC(GetPC() - 1);
        !          4559:                        return 0;
        !          4560: 
        !          4561:                case 0xF8: // no_op   
        !          4562:                        SetPC(GetPC() - 1);
        !          4563:                        return 0;
        !          4564:                
        !          4565:                case 0xF9: // ld_sp_ix  
        !          4566:                        SetSP(m_regIX);
        !          4567:                        return 10;
        !          4568:                
        !          4569:                case 0xFA: // no_op      
        !          4570:                        SetPC(GetPC() - 1);
        !          4571:                        return 0;
        !          4572:                
        !          4573:                case 0xFB: // no_op    
        !          4574:                        SetPC(GetPC() - 1);
        !          4575:                        return 0;
        !          4576:                
        !          4577:                case 0xFC: // no_op    
        !          4578:                        SetPC(GetPC() - 1);
        !          4579:                        return 0;
        !          4580:                
        !          4581:                case 0xFD: // no_op    
        !          4582:                        SetPC(GetPC() - 1);
        !          4583:                        return 0;
        !          4584:                
        !          4585:                case 0xFE: // no_op      
        !          4586:                        SetPC(GetPC() - 1);
        !          4587:                        return 0;
        !          4588:                
        !          4589:                case 0xFF: // no_op
        !          4590:                        SetPC(GetPC() - 1);
        !          4591:                        return 0;
        !          4592: 
        !          4593:                default:
        !          4594:                        return 0;
        !          4595:        }
        !          4596: }
        !          4597: 
        !          4598: /* ***************************************************************************
        !          4599:  * ED prefixed opcodes
        !          4600:  * ***************************************************************************
        !          4601:  */
        !          4602: int HandleED(int cCyclesArg) {
        !          4603: 
        !          4604:        const BYTE bOpcode = ImmedByte();
        !          4605:        int cCycles = cCyclesArg;
        !          4606: 
        !          4607:        m_regR++;
        !          4608: 
        !          4609:        switch (bOpcode)
        !          4610:        {
        !          4611:                case 0x00: // nop   
        !          4612:                        cCycles -= 0;
        !          4613:                        break;
        !          4614:                
        !          4615:                case 0x01: // nop    
        !          4616:                        cCycles -= 0;
        !          4617:                        break;
        !          4618:                        
        !          4619:                case 0x02: // nop      
        !          4620:                        cCycles -= 0;
        !          4621:                        break;
        !          4622:                
        !          4623:                case 0x03: // nop        
        !          4624:                        cCycles -= 0;
        !          4625:                        break;
        !          4626:                
        !          4627:                case 0x04: // nop
        !          4628:                        cCycles -= 0;
        !          4629:                        break;
        !          4630:                
        !          4631:                case 0x05: // nop 
        !          4632:                        cCycles -= 0;
        !          4633:                        break;
        !          4634:                
        !          4635:                case 0x06: // nop  
        !          4636:                        cCycles -= 0;
        !          4637:                        break;
        !          4638:                
        !          4639:                case 0x07: // nop   
        !          4640:                        cCycles -= 0;
        !          4641:                        break;
        !          4642: 
        !          4643:                case 0x08: // nop   
        !          4644:                        cCycles -= 0;
        !          4645:                        break;
        !          4646:                
        !          4647:                case 0x09: // nop    
        !          4648:                        cCycles -= 0;
        !          4649:                        break;
        !          4650:                
        !          4651:                case 0x0A: // nop      
        !          4652:                        cCycles -= 0;
        !          4653:                        break;
        !          4654:                
        !          4655:                case 0x0B: // nop        
        !          4656:                        cCycles -= 0;
        !          4657:                        break;
        !          4658:                
        !          4659:                case 0x0C: // nop
        !          4660:                        cCycles -= 0;
        !          4661:                        break;
        !          4662:                
        !          4663:                case 0x0D: // nop 
        !          4664:                        cCycles -= 0;
        !          4665:                        break;
        !          4666:                
        !          4667:                case 0x0E: // nop  
        !          4668:                        cCycles -= 0;
        !          4669:                        break;
        !          4670:                
        !          4671:                case 0x0F: // nop   
        !          4672:                        cCycles -= 0;
        !          4673:                        break;
        !          4674: 
        !          4675:                case 0x10: // nop   
        !          4676:                        cCycles -= 0;
        !          4677:                        break;
        !          4678:                
        !          4679:                case 0x11: // nop    
        !          4680:                        cCycles -= 0;
        !          4681:                        break;
        !          4682:                        
        !          4683:                case 0x12: // nop      
        !          4684:                        cCycles -= 0;
        !          4685:                        break;
        !          4686:                
        !          4687:                case 0x13: // nop        
        !          4688:                        cCycles -= 0;
        !          4689:                        break;
        !          4690:                
        !          4691:                case 0x14: // nop
        !          4692:                        cCycles -= 0;
        !          4693:                        break;
        !          4694:                
        !          4695:                case 0x15: // nop 
        !          4696:                        cCycles -= 0;
        !          4697:                        break;
        !          4698:                
        !          4699:                case 0x16: // nop  
        !          4700:                        cCycles -= 0;
        !          4701:                        break;
        !          4702:                
        !          4703:                case 0x17: // nop   
        !          4704:                        cCycles -= 0;
        !          4705:                        break;
        !          4706: 
        !          4707:                case 0x18: // nop   
        !          4708:                        cCycles -= 0;
        !          4709:                        break;
        !          4710:                
        !          4711:                case 0x19: // nop    
        !          4712:                        cCycles -= 0;
        !          4713:                        break;
        !          4714:                
        !          4715:                case 0x1A: // nop      
        !          4716:                        cCycles -= 0;
        !          4717:                        break;
        !          4718:                
        !          4719:                case 0x1B: // nop        
        !          4720:                        cCycles -= 0;
        !          4721:                        break;
        !          4722:                
        !          4723:                case 0x1C: // nop
        !          4724:                        cCycles -= 0;
        !          4725:                        break;
        !          4726:                
        !          4727:                case 0x1D: // nop 
        !          4728:                        cCycles -= 0;
        !          4729:                        break;
        !          4730:                
        !          4731:                case 0x1E: // nop  
        !          4732:                        cCycles -= 0;
        !          4733:                        break;
        !          4734:                
        !          4735:                case 0x1F: // nop   
        !          4736:                        cCycles -= 0;
        !          4737:                        break;
        !          4738: 
        !          4739:                case 0x20: // nop   
        !          4740:                        cCycles -= 0;
        !          4741:                        break;
        !          4742:                
        !          4743:                case 0x21: // nop    
        !          4744:                        cCycles -= 0;
        !          4745:                        break;
        !          4746:                        
        !          4747:                case 0x22: // nop      
        !          4748:                        cCycles -= 0;
        !          4749:                        break;
        !          4750:                
        !          4751:                case 0x23: // nop        
        !          4752:                        cCycles -= 0;
        !          4753:                        break;
        !          4754:                
        !          4755:                case 0x24: // nop
        !          4756:                        cCycles -= 0;
        !          4757:                        break;
        !          4758:                
        !          4759:                case 0x25: // nop 
        !          4760:                        cCycles -= 0;
        !          4761:                        break;
        !          4762:                
        !          4763:                case 0x26: // nop  
        !          4764:                        cCycles -= 0;
        !          4765:                        break;
        !          4766:                
        !          4767:                case 0x27: // nop   
        !          4768:                        cCycles -= 0;
        !          4769:                        break;
        !          4770: 
        !          4771:                case 0x28: // nop   
        !          4772:                        cCycles -= 0;
        !          4773:                        break;
        !          4774:                
        !          4775:                case 0x29: // nop    
        !          4776:                        cCycles -= 0;
        !          4777:                        break;
        !          4778:                
        !          4779:                case 0x2A: // nop      
        !          4780:                        cCycles -= 0;
        !          4781:                        break;
        !          4782:                
        !          4783:                case 0x2B: // nop        
        !          4784:                        cCycles -= 0;
        !          4785:                        break;
        !          4786:                
        !          4787:                case 0x2C: // nop
        !          4788:                        cCycles -= 0;
        !          4789:                        break;
        !          4790:                
        !          4791:                case 0x2D: // nop 
        !          4792:                        cCycles -= 0;
        !          4793:                        break;
        !          4794:                
        !          4795:                case 0x2E: // nop  
        !          4796:                        cCycles -= 0;
        !          4797:                        break;
        !          4798:                
        !          4799:                case 0x2F: // nop   
        !          4800:                        cCycles -= 0;
        !          4801:                        break;
        !          4802: 
        !          4803:                case 0x30: // nop   
        !          4804:                        cCycles -= 0;
        !          4805:                        break;
        !          4806:                
        !          4807:                case 0x31: // nop    
        !          4808:                        cCycles -= 0;
        !          4809:                        break;
        !          4810:                        
        !          4811:                case 0x32: // nop      
        !          4812:                        cCycles -= 0;
        !          4813:                        break;
        !          4814:                
        !          4815:                case 0x33: // nop        
        !          4816:                        cCycles -= 0;
        !          4817:                        break;
        !          4818:                
        !          4819:                case 0x34: // nop
        !          4820:                        cCycles -= 0;
        !          4821:                        break;
        !          4822:                
        !          4823:                case 0x35: // nop 
        !          4824:                        cCycles -= 0;
        !          4825:                        break;
        !          4826:                
        !          4827:                case 0x36: // nop  
        !          4828:                        cCycles -= 0;
        !          4829:                        break;
        !          4830:                
        !          4831:                case 0x37: // nop   
        !          4832:                        cCycles -= 0;
        !          4833:                        break;
        !          4834: 
        !          4835:                case 0x38: // nop   
        !          4836:                        cCycles -= 0;
        !          4837:                        break;
        !          4838:                
        !          4839:                case 0x39: // nop    
        !          4840:                        cCycles -= 0;
        !          4841:                        break;
        !          4842:                
        !          4843:                case 0x3A: // nop      
        !          4844:                        cCycles -= 0;
        !          4845:                        break;
        !          4846:                
        !          4847:                case 0x3B: // nop        
        !          4848:                        cCycles -= 0;
        !          4849:                        break;
        !          4850:                
        !          4851:                case 0x3C: // nop
        !          4852:                        cCycles -= 0;
        !          4853:                        break;
        !          4854:                
        !          4855:                case 0x3D: // nop 
        !          4856:                        cCycles -= 0;
        !          4857:                        break;
        !          4858:                
        !          4859:                case 0x3E: // nop  
        !          4860:                        cCycles -= 0;
        !          4861:                        break;
        !          4862:                
        !          4863:                case 0x3F: // nop   
        !          4864:                        cCycles -= 0;
        !          4865:                        break;
        !          4866: 
        !          4867:                case 0x40: // in_b_c
        !          4868:                        cCycles -= 12;
        !          4869:                        m_regB = In(m_regC);
        !          4870:                        break;
        !          4871:                
        !          4872:                case 0x41: // out_c_b
        !          4873:                        cCycles -= 12;
        !          4874:                        Out(m_regC, m_regB);
        !          4875:                        break;
        !          4876:                        
        !          4877:                case 0x42: // sbc_hl_bc
        !          4878:                        cCycles -= 15;
        !          4879:                        m_regHL = Sbc_2(m_regHL, m_regBC);                      
        !          4880:                        break;
        !          4881:                
        !          4882:                case 0x43: // ld_xword_bc
        !          4883:                        cCycles -= 20;
        !          4884:                        MemWriteWord(ImmedWord(), m_regBC);
        !          4885:                        break;
        !          4886:                
        !          4887:                case 0x44: // neg
        !          4888:                        cCycles -= 8;
        !          4889:                {
        !          4890:                        BYTE b = m_regA;
        !          4891:                        m_regA = 0;
        !          4892:                        Sub_1(b);
        !          4893:                        break;
        !          4894:                }
        !          4895:                
        !          4896:                case 0x45: // retn
        !          4897:                        cCycles -= 8;
        !          4898:                        m_iff1 = m_iff2;
        !          4899:                        cCycles -= Ret0(TRUE);
        !          4900:                        break;
        !          4901:                
        !          4902:                case 0x46: // im_0 
        !          4903:                        cCycles -= 8;
        !          4904:                        m_nIM = 0;
        !          4905:                        break;
        !          4906:                
        !          4907:                case 0x47: // ld_i_a
        !          4908:                        cCycles -= 9;
        !          4909:                        m_regI = m_regA;
        !          4910:                        break;
        !          4911: 
        !          4912:                case 0x48: // in_c_c
        !          4913:                        cCycles -= 12;
        !          4914:                        m_regC = In(m_regC);
        !          4915:                        break;
        !          4916:                
        !          4917:                case 0x49: // out_c_c
        !          4918:                        cCycles -= 12;
        !          4919:                        Out(m_regC, m_regC);
        !          4920:                        break;
        !          4921:                
        !          4922:                case 0x4A: // adc_hl_bc
        !          4923:                        cCycles -= 15;
        !          4924:                        m_regHL = Adc_2(m_regHL, m_regBC);
        !          4925:                        break;
        !          4926:                
        !          4927:                case 0x4B: // ld_bc_xword
        !          4928:                        cCycles -= 20;
        !          4929:                        m_regBC = MemReadWord(ImmedWord());
        !          4930:                        break;
        !          4931:                
        !          4932:                case 0x4C: // neg
        !          4933:                        cCycles -= 8;
        !          4934:                {
        !          4935:                        BYTE b = m_regA;
        !          4936:                        m_regA = 0;
        !          4937:                        Sub_1(b);
        !          4938:                        break;
        !          4939:                }
        !          4940:                
        !          4941:                case 0x4D: // reti
        !          4942:                        cCycles -= 8;
        !          4943:                        cCycles -= Ret0(TRUE);
        !          4944:                        break;
        !          4945:                
        !          4946:                case 0x4E: // im_0 
        !          4947:                        cCycles -= 8;
        !          4948:                        m_nIM = 0;
        !          4949:                        break;
        !          4950:                
        !          4951:                case 0x4F: // ld_r_a
        !          4952:                        cCycles -= 9;
        !          4953:                        m_regR = m_regA;
        !          4954: //                     m_regR2 = m_regA;
        !          4955:                        break;
        !          4956: 
        !          4957:                case 0x50: // in_d_c
        !          4958:                        cCycles -= 12;
        !          4959:                        m_regD = In(m_regC);
        !          4960:                        break;
        !          4961:                
        !          4962:                case 0x51: // out_c_d
        !          4963:                        cCycles -= 12;
        !          4964:                        Out(m_regC, m_regD);
        !          4965:                        break;
        !          4966:                        
        !          4967:                case 0x52: // sbc_hl_de
        !          4968:                        cCycles -= 15;
        !          4969:                        m_regHL = Sbc_2(m_regHL, m_regDE);
        !          4970:                        break;
        !          4971:                
        !          4972:                case 0x53: // ld_xword_de
        !          4973:                        cCycles -= 20;
        !          4974:                        MemWriteWord(ImmedWord(), m_regDE);
        !          4975:                        break;
        !          4976:                
        !          4977:                case 0x54: // neg
        !          4978:                        cCycles -= 8;
        !          4979:                {
        !          4980:                        BYTE b = m_regA;
        !          4981:                        m_regA = 0;
        !          4982:                        Sub_1(b);
        !          4983:                        break;
        !          4984:                }
        !          4985:                
        !          4986:                case 0x55: // retn
        !          4987:                        cCycles -= 8;
        !          4988:                        m_iff1 = m_iff2;
        !          4989:                        cCycles -= Ret0(TRUE);
        !          4990:                        break;
        !          4991:                
        !          4992:                case 0x56: // im_1 
        !          4993:                        cCycles -= 8;
        !          4994:                        m_nIM = 1;
        !          4995:                        break;
        !          4996:                
        !          4997:                case 0x57: // ld_a_i
        !          4998:                        cCycles -= 9;
        !          4999:                        m_regA = m_regI;
        !          5000:                        m_regF = (m_regF & C_FLAG)| ZSTable[m_regI] | (m_iff2 << 2);
        !          5001:                        break;
        !          5002: 
        !          5003:                case 0x58: // in_e_c
        !          5004:                        cCycles -= 12;
        !          5005:                        m_regE = In(m_regC);
        !          5006:                        break;
        !          5007:                
        !          5008:                case 0x59: // out_c_e
        !          5009:                        cCycles -= 12;
        !          5010:                        Out(m_regC, m_regE);
        !          5011:                        break;
        !          5012:                
        !          5013:                case 0x5A: // adc_hl_de
        !          5014:                        cCycles -= 15;
        !          5015:                        m_regHL = Adc_2(m_regHL, m_regDE);
        !          5016:                        break;
        !          5017:                
        !          5018:                case 0x5B: // ld_de_xword
        !          5019:                        cCycles -= 20;
        !          5020:                        m_regDE = MemReadWord(ImmedWord());
        !          5021:                        break;
        !          5022:                
        !          5023:                case 0x5C: // neg
        !          5024:                        cCycles -= 8;
        !          5025:                {
        !          5026:                        BYTE b = m_regA;
        !          5027:                        m_regA = 0;
        !          5028:                        Sub_1(b);
        !          5029:                        break;
        !          5030:                }
        !          5031:                
        !          5032:                case 0x5D: // reti
        !          5033:                        cCycles -= 8;
        !          5034:                        cCycles -= Ret0(TRUE);
        !          5035:                        break;
        !          5036:                
        !          5037:                case 0x5E: // im_2 
        !          5038:                        cCycles -= 8;
        !          5039:                        m_nIM = 2;
        !          5040:                        break;
        !          5041:                
        !          5042:                case 0x5F: // ld_a_r
        !          5043:                        cCycles -= 9;
        !          5044:                        m_regA = (m_regR & 0x7F); /////////////////////////////////////// | (m_regR2 & 0x80);
        !          5045:                        m_regF = (m_regF & C_FLAG) | ZSTable[m_regA] | (m_iff2 << 2);
        !          5046:                        break;
        !          5047: 
        !          5048:                case 0x60: // in_h_c
        !          5049:                        cCycles -= 12;
        !          5050:                        m_regH = In(m_regC);
        !          5051:                        break;
        !          5052:                
        !          5053:                case 0x61: // out_c_h
        !          5054:                        cCycles -= 12;
        !          5055:                        Out(m_regC, m_regH);
        !          5056:                        break;
        !          5057:                        
        !          5058:                case 0x62: // sbc_hl_hl
        !          5059:                        cCycles -= 15;
        !          5060:                        m_regHL = Sbc_2(m_regHL, m_regHL);
        !          5061:                        break;
        !          5062:                
        !          5063:                case 0x63: // ld_xword_hl
        !          5064:                        cCycles -= 20;
        !          5065:                        MemWriteWord(ImmedWord(), m_regHL);
        !          5066:                        break;
        !          5067:                
        !          5068:                case 0x64: // neg
        !          5069:                        cCycles -= 8;
        !          5070:                {
        !          5071:                        BYTE b = m_regA;
        !          5072:                        m_regA = 0;
        !          5073:                        Sub_1(b);
        !          5074:                        break;
        !          5075:                }
        !          5076:                
        !          5077:                case 0x65: // retn
        !          5078:                        cCycles -= 8;
        !          5079:                        m_iff1 = m_iff2;
        !          5080:                        cCycles -= Ret0(TRUE);
        !          5081:                        break;
        !          5082:                
        !          5083:                case 0x66: // im_0 
        !          5084:                        cCycles -= 8;
        !          5085:                        m_nIM = 0;
        !          5086:                        break;
        !          5087:                
        !          5088:                case 0x67: // rrd   
        !          5089:                        cCycles -= 18;
        !          5090:                {
        !          5091:                        BYTE i = MemReadByte(m_regHL);
        !          5092:                        MemWriteByte(m_regHL, (i>>4) | (m_regA << 4));
        !          5093:                        m_regA = (m_regA & 0xF0) | (i&0x0F);
        !          5094:                        m_regF =(m_regF&C_FLAG)|ZSPTable[m_regA];
        !          5095:                        break;
        !          5096:                }
        !          5097: 
        !          5098:                case 0x68: // in_l_c
        !          5099:                        cCycles -= 12;
        !          5100:                        m_regL = In(m_regC);
        !          5101:                        break;
        !          5102:                
        !          5103:                case 0x69: // out_c_l
        !          5104:                        cCycles -= 12;
        !          5105:                        Out(m_regC, m_regL);
        !          5106:                        break;
        !          5107:                
        !          5108:                case 0x6A: // adc_hl_hl
        !          5109:                        cCycles -= 15;
        !          5110:                        m_regHL = Adc_2(m_regHL, m_regHL);
        !          5111:                        break;
        !          5112:                
        !          5113:                case 0x6B: // ld_hl_xword
        !          5114:                        cCycles -= 20;
        !          5115:                        m_regHL = MemReadWord(ImmedWord());                     
        !          5116:                        break;
        !          5117:                
        !          5118:                case 0x6C: // neg
        !          5119:                        cCycles -= 8;
        !          5120:                {
        !          5121:                        BYTE b = m_regA;
        !          5122:                        m_regA = 0;
        !          5123:                        Sub_1(b);
        !          5124:                        break;
        !          5125:                }
        !          5126:                
        !          5127:                case 0x6D: // reti
        !          5128:                        cCycles -= 8;
        !          5129:                        cCycles -= Ret0(TRUE);
        !          5130:                        break;
        !          5131:                
        !          5132:                case 0x6E: // im_0 
        !          5133:                        cCycles -= 8;
        !          5134:                        m_nIM = 0;
        !          5135:                        break;
        !          5136:                
        !          5137:                case 0x6F: // rld   
        !          5138:                        cCycles -= 18;
        !          5139:                {
        !          5140:                        BYTE i;
        !          5141:                        i=MemReadByte(m_regHL);
        !          5142:                        MemWriteByte(m_regHL,(i<<4)|(m_regA&0x0F));
        !          5143:                        m_regA=(m_regA&0xF0)|(i>>4);
        !          5144:                        m_regF=(m_regF&C_FLAG)|ZSPTable[m_regA];
        !          5145:                        break;
        !          5146:                }
        !          5147: 
        !          5148:                case 0x70: // in_0_c
        !          5149:                        cCycles -= 12;
        !          5150:                        In(m_regC);
        !          5151:                        break;
        !          5152:                
        !          5153:                case 0x71: // out_c_0
        !          5154:                        cCycles -= 12;
        !          5155:                        Out(m_regC, 0);
        !          5156:                        break;
        !          5157:                        
        !          5158:                case 0x72: // sbc_hl_sp
        !          5159:                        cCycles -= 15;
        !          5160:                        m_regHL = Sbc_2(m_regHL, GetSP());
        !          5161:                        break;
        !          5162:                
        !          5163:                case 0x73: // ld_xword_sp
        !          5164:                        cCycles -= 20;
        !          5165:                        MemWriteWord(ImmedWord(), GetSP());
        !          5166:                        break;
        !          5167:                
        !          5168:                case 0x74: // neg
        !          5169:                        cCycles -= 8;
        !          5170:                {
        !          5171:                        BYTE b = m_regA;
        !          5172:                        m_regA = 0;
        !          5173:                        Sub_1(b);
        !          5174:                        break;
        !          5175:                }
        !          5176:                
        !          5177:                case 0x75: // retn
        !          5178:                        cCycles -= 8;
        !          5179:                        m_iff1 = m_iff2;
        !          5180:                        cCycles -= Ret0(TRUE);
        !          5181:                        break;
        !          5182:                
        !          5183:                case 0x76: // im_1 
        !          5184:                        cCycles -= 8;
        !          5185:                        m_nIM = 1;
        !          5186:                        break;
        !          5187:                
        !          5188:                case 0x77: // nop   
        !          5189:                        cCycles -= 0;
        !          5190:                        break;
        !          5191: 
        !          5192:                case 0x78: // in_a_c
        !          5193:                        cCycles -= 12;
        !          5194:                        m_regA = In(m_regC);
        !          5195:                        break;
        !          5196:                
        !          5197:                case 0x79: // out_c_a
        !          5198:                        cCycles -= 12;
        !          5199:                        Out(m_regC, m_regA);
        !          5200:                        break;
        !          5201:                
        !          5202:                case 0x7A: // adc_hl_sp
        !          5203:                        cCycles -= 15;
        !          5204:                        m_regHL = Adc_2(m_regHL, GetSP());
        !          5205:                        break;
        !          5206:                
        !          5207:                case 0x7B: // ld_sp_xword
        !          5208:                        cCycles -= 20;
        !          5209:                        SetSP(MemReadWord(ImmedWord()));
        !          5210:                        break;
        !          5211:                
        !          5212:                case 0x7C: // neg
        !          5213:                        cCycles -= 8;
        !          5214:                {
        !          5215:                        BYTE b = m_regA;
        !          5216:                        m_regA = 0;
        !          5217:                        Sub_1(b);
        !          5218:                        break;
        !          5219:                }
        !          5220:                
        !          5221:                case 0x7D: // reti
        !          5222:                        cCycles -= 8;
        !          5223:                        cCycles -= Ret0(TRUE);
        !          5224:                        break;
        !          5225:                
        !          5226:                case 0x7E: // im_2 
        !          5227:                        cCycles -= 8;
        !          5228:                        m_nIM = 2;
        !          5229:                        break;
        !          5230:                
        !          5231:                case 0x7F: // nop   
        !          5232:                        cCycles -= 0;
        !          5233:                        break;
        !          5234: 
        !          5235:                case 0x80: // nop   
        !          5236:                        cCycles -= 0;
        !          5237:                        break;
        !          5238:                
        !          5239:                case 0x81: // nop    
        !          5240:                        cCycles -= 0;
        !          5241:                        break;
        !          5242:                        
        !          5243:                case 0x82: // nop      
        !          5244:                        cCycles -= 0;
        !          5245:                        break;
        !          5246:                
        !          5247:                case 0x83: // nop        
        !          5248:                        cCycles -= 0;
        !          5249:                        break;
        !          5250:                
        !          5251:                case 0x84: // nop
        !          5252:                        cCycles -= 0;
        !          5253:                        break;
        !          5254:                
        !          5255:                case 0x85: // nop 
        !          5256:                        cCycles -= 0;
        !          5257:                        break;
        !          5258:                
        !          5259:                case 0x86: // nop  
        !          5260:                        cCycles -= 0;
        !          5261:                        break;
        !          5262:                
        !          5263:                case 0x87: // nop   
        !          5264:                        cCycles -= 0;
        !          5265:                        break;
        !          5266: 
        !          5267:                case 0x88: // nop   
        !          5268:                        cCycles -= 0;
        !          5269:                        break;
        !          5270:                
        !          5271:                case 0x89: // nop    
        !          5272:                        cCycles -= 0;
        !          5273:                        break;
        !          5274:                
        !          5275:                case 0x8A: // nop      
        !          5276:                        cCycles -= 0;
        !          5277:                        break;
        !          5278:                
        !          5279:                case 0x8B: // nop        
        !          5280:                        cCycles -= 0;
        !          5281:                        break;
        !          5282:                
        !          5283:                case 0x8C: // nop
        !          5284:                        cCycles -= 0;
        !          5285:                        break;
        !          5286:                
        !          5287:                case 0x8D: // nop 
        !          5288:                        cCycles -= 0;
        !          5289:                        break;
        !          5290:                
        !          5291:                case 0x8E: // nop  
        !          5292:                        cCycles -= 0;
        !          5293:                        break;
        !          5294:                
        !          5295:                case 0x8F: // nop   
        !          5296:                        cCycles -= 0;
        !          5297:                        break;
        !          5298: 
        !          5299:                case 0x90: // nop   
        !          5300:                        cCycles -= 0;
        !          5301:                        break;
        !          5302:                
        !          5303:                case 0x91: // nop    
        !          5304:                        cCycles -= 0;
        !          5305:                        break;
        !          5306:                        
        !          5307:                case 0x92: // nop      
        !          5308:                        cCycles -= 0;
        !          5309:                        break;
        !          5310:                
        !          5311:                case 0x93: // nop        
        !          5312:                        cCycles -= 0;
        !          5313:                        break;
        !          5314:                
        !          5315:                case 0x94: // nop
        !          5316:                        cCycles -= 0;
        !          5317:                        break;
        !          5318:                
        !          5319:                case 0x95: // nop 
        !          5320:                        cCycles -= 0;
        !          5321:                        break;
        !          5322:                
        !          5323:                case 0x96: // nop  
        !          5324:                        cCycles -= 0;
        !          5325:                        break;
        !          5326:                
        !          5327:                case 0x97: // nop   
        !          5328:                        cCycles -= 0;
        !          5329:                        break;
        !          5330: 
        !          5331:                case 0x98: // nop   
        !          5332:                        cCycles -= 0;
        !          5333:                        break;
        !          5334:                
        !          5335:                case 0x99: // nop    
        !          5336:                        cCycles -= 0;
        !          5337:                        break;
        !          5338:                
        !          5339:                case 0x9A: // nop      
        !          5340:                        cCycles -= 0;
        !          5341:                        break;
        !          5342:                
        !          5343:                case 0x9B: // nop        
        !          5344:                        cCycles -= 0;
        !          5345:                        break;
        !          5346:                
        !          5347:                case 0x9C: // nop
        !          5348:                        cCycles -= 0;
        !          5349:                        break;
        !          5350:                
        !          5351:                case 0x9D: // nop 
        !          5352:                        cCycles -= 0;
        !          5353:                        break;
        !          5354:                
        !          5355:                case 0x9E: // nop  
        !          5356:                        cCycles -= 0;
        !          5357:                        break;
        !          5358:                
        !          5359:                case 0x9F: // nop   
        !          5360:                        cCycles -= 0;
        !          5361:                        break;
        !          5362: 
        !          5363:                case 0xA0: // ldi   
        !          5364:                        cCycles -= 16;
        !          5365:                {
        !          5366:                        MemWriteByte(m_regDE++, MemReadByte(m_regHL++));
        !          5367:                        m_regBC--;
        !          5368:                        m_regF = (m_regF & 0xE9) | (m_regBC ? V_FLAG : 0);
        !          5369:                        break;
        !          5370:                }
        !          5371:                
        !          5372:                case 0xA1: // cpi    
        !          5373:                        cCycles -= 16;
        !          5374:                {
        !          5375:                        BYTE i,j;
        !          5376:                        i=MemReadByte(m_regHL);
        !          5377:                        j=m_regA-i;
        !          5378:                        ++m_regHL;
        !          5379:                        --m_regBC;
        !          5380:                        m_regF=(m_regF&C_FLAG)|ZSTable[j]|
        !          5381:                        ((m_regA^i^j)&H_FLAG)|(m_regBC? V_FLAG:0)|N_FLAG;
        !          5382:                        break;
        !          5383:                }
        !          5384:                        
        !          5385:                case 0xA2: // ini      
        !          5386:                        cCycles -= 16;
        !          5387:                {
        !          5388:                        MemWriteByte(m_regHL,In(m_regC));
        !          5389:                        ++m_regHL;
        !          5390:                        --m_regB;
        !          5391:                        m_regF=(m_regB)? N_FLAG:(N_FLAG|Z_FLAG);
        !          5392:                        break;
        !          5393:                }
        !          5394:                
        !          5395:                case 0xA3: // outi       
        !          5396:                        cCycles -= 16;
        !          5397:                {
        !          5398:                        Out(m_regC, MemReadByte(m_regHL));
        !          5399:                        ++m_regHL;
        !          5400:                        --m_regB;
        !          5401:                        m_regF=(m_regB)? N_FLAG:(Z_FLAG|N_FLAG);
        !          5402:                        break;
        !          5403:                }
        !          5404:                
        !          5405:                case 0xA4: // nop
        !          5406:                        cCycles -= 0;
        !          5407:                        break;
        !          5408:                
        !          5409:                case 0xA5: // nop 
        !          5410:                        cCycles -= 0;
        !          5411:                        break;
        !          5412:                
        !          5413:                case 0xA6: // nop  
        !          5414:                        cCycles -= 0;
        !          5415:                        break;
        !          5416:                
        !          5417:                case 0xA7: // nop   
        !          5418:                        cCycles -= 0;
        !          5419:                        break;
        !          5420: 
        !          5421:                case 0xA8: // ldd   
        !          5422:                        cCycles -= 16;
        !          5423:                {
        !          5424:                        MemWriteByte(m_regDE,MemReadByte(m_regHL));
        !          5425:                        --m_regDE;
        !          5426:                        --m_regHL;
        !          5427:                        --m_regBC;
        !          5428:                        m_regF=(m_regF&0xE9)|(m_regBC? V_FLAG:0);
        !          5429:                        break;
        !          5430:                }
        !          5431:                
        !          5432:                case 0xA9: // cpd    
        !          5433:                        cCycles -= 16;
        !          5434:                {
        !          5435:                        BYTE i,j;
        !          5436:                        i=MemReadByte(m_regHL);
        !          5437:                        j=m_regA-i;
        !          5438:                        --m_regHL;
        !          5439:                        --m_regBC;
        !          5440:                        m_regF=(m_regF&C_FLAG)|ZSTable[j]|
        !          5441:                        ((m_regA^i^j)&H_FLAG)|(m_regBC? V_FLAG:0)|N_FLAG;
        !          5442:                        break;
        !          5443:                }
        !          5444:                
        !          5445:                case 0xAA: // ind
        !          5446:                        cCycles -= 16;
        !          5447:                {
        !          5448:                        MemWriteByte(m_regHL,In(m_regC));
        !          5449:                        --m_regHL;
        !          5450:                        --m_regB;
        !          5451:                        m_regF=(m_regB)? N_FLAG:(N_FLAG|Z_FLAG);
        !          5452:                        break;
        !          5453:                }
        !          5454:                
        !          5455:                case 0xAB: // outd
        !          5456:                        cCycles -= 16;
        !          5457:                {
        !          5458:                        Out (m_regC,MemReadByte(m_regHL));
        !          5459:                        --m_regHL;
        !          5460:                        --m_regB;
        !          5461:                        m_regF=(m_regB)? N_FLAG:(Z_FLAG|N_FLAG);
        !          5462:                        break;
        !          5463:                }
        !          5464:                
        !          5465:                case 0xAC: // nop
        !          5466:                        cCycles -= 0;
        !          5467:                        break;
        !          5468:                
        !          5469:                case 0xAD: // nop 
        !          5470:                        cCycles -= 0;
        !          5471:                        break;
        !          5472:                
        !          5473:                case 0xAE: // nop  
        !          5474:                        cCycles -= 0;
        !          5475:                        break;
        !          5476:                
        !          5477:                case 0xAF: // nop   
        !          5478:                        cCycles -= 0;
        !          5479:                        break;
        !          5480: 
        !          5481:                case 0xB0: // ldir  
        !          5482:                        cCycles -= 0;
        !          5483:                {
        !          5484:                        m_regR -= 2;
        !          5485:                        
        !          5486: /*
        !          5487:                        if (m_rgfMemDesc[m_regHL] & MF_READ_DIRECT &&
        !          5488:                                m_rgfMemDesc[m_regDE] & MF_WRITE_DIRECT)
        !          5489:                        {
        !          5490:                                do
        !          5491:                                {
        !          5492:                                        m_regR += 2;
        !          5493:                                        m_rgbMemory[m_regDE++] = m_rgbMemory[m_regHL++];
        !          5494:                                        cCycles -= 21;
        !          5495:                                }
        !          5496:                                while (--m_regBC); //  && cCycles>0);
        !          5497:                                
        !          5498:                                m_regF=(m_regF&0xE9)|(m_regBC? V_FLAG:0);
        !          5499:                                
        !          5500:                                if (m_regBC)
        !          5501:        //                              m_regPC -= 2;
        !          5502:                                        AdjustPC(-2);
        !          5503:                                else
        !          5504:                                        cCycles += 5;
        !          5505:                        }
        !          5506:                        else
        !          5507: */
        !          5508:                        {
        !          5509:                                do
        !          5510:                                {
        !          5511:                                        m_regR += 2;
        !          5512:                                        MemWriteByte(m_regDE++, MemReadByte(m_regHL++));
        !          5513:                                        cCycles -= 21;
        !          5514:                                }
        !          5515:                                while (--m_regBC); //  && cCycles>0);
        !          5516:                                
        !          5517:                                m_regF=(m_regF&0xE9)|(m_regBC? V_FLAG:0);
        !          5518:                                
        !          5519:                                if (m_regBC)
        !          5520:        //                              m_regPC -= 2;
        !          5521:                                        AdjustPC(-2);
        !          5522:                                else
        !          5523:                                        cCycles += 5;
        !          5524:                        }
        !          5525:                        
        !          5526:                        break;
        !          5527:                }
        !          5528:                
        !          5529:                case 0xB1: // cpir   
        !          5530:                        cCycles -= 0;
        !          5531:                {
        !          5532:                        BYTE i,j;
        !          5533:                        m_regR-=2;
        !          5534:                        do
        !          5535:                        {
        !          5536:                                m_regR+=2;
        !          5537:                                i=MemReadByte(m_regHL);
        !          5538:                                j=m_regA-i;
        !          5539:                                ++m_regHL;
        !          5540:                                --m_regBC;
        !          5541:                                cCycles-=21;
        !          5542:                        }
        !          5543:                        while (m_regBC && j && cCycles>0);
        !          5544:                        m_regF=(m_regF&C_FLAG)|ZSTable[j]|
        !          5545:                        ((m_regA^i^j)&H_FLAG)|(m_regBC? V_FLAG:0)|N_FLAG;
        !          5546:                        if (m_regBC && j) AdjustPC(-2); // m_regPC-=2;
        !          5547:                        else cCycles+=5;
        !          5548:                        break;
        !          5549:                }
        !          5550:                        
        !          5551:                case 0xB2: // inir     
        !          5552:                        cCycles -= 0;
        !          5553:                {
        !          5554:                        m_regR-=2;
        !          5555:                        do
        !          5556:                        {
        !          5557:                                m_regR+=2;
        !          5558:                                MemWriteByte(m_regHL,In(m_regC));
        !          5559:                                ++m_regHL;
        !          5560:                                --m_regB;
        !          5561:                                cCycles-=21;
        !          5562:                        }
        !          5563:                        while (m_regB && cCycles>0);
        !          5564:                        m_regF=(m_regB)? N_FLAG:(N_FLAG|Z_FLAG);
        !          5565:                        if (m_regB) AdjustPC(-2); // m_regPC-=2;
        !          5566:                        else cCycles+=5;
        !          5567:                        break;
        !          5568:                }
        !          5569:                
        !          5570:                case 0xB3: // otir       
        !          5571:                        cCycles -= 0;
        !          5572:                {
        !          5573:                        m_regR-=2;
        !          5574:                        do
        !          5575:                        {
        !          5576:                                m_regR+=2;
        !          5577:                                Out (m_regC,MemReadByte(m_regHL));
        !          5578:                                ++m_regHL;
        !          5579:                                --m_regB;
        !          5580:                                cCycles-=21;
        !          5581:                        }
        !          5582:                        while (m_regB && cCycles>0);
        !          5583:                        m_regF=(m_regB)? N_FLAG:(Z_FLAG|N_FLAG);
        !          5584:                        if (m_regB) AdjustPC(-2); // m_regPC-=2;
        !          5585:                        else cCycles+=5;
        !          5586:                }
        !          5587:                        break;
        !          5588:                
        !          5589:                case 0xB4: // nop
        !          5590:                        cCycles -= 0;
        !          5591:                        break;
        !          5592:                
        !          5593:                case 0xB5: // nop 
        !          5594:                        cCycles -= 0;
        !          5595:                        break;
        !          5596:                
        !          5597:                case 0xB6: // nop  
        !          5598:                        cCycles -= 0;
        !          5599:                        break;
        !          5600:                
        !          5601:                case 0xB7: // nop   
        !          5602:                        cCycles -= 0;
        !          5603:                        break;
        !          5604: 
        !          5605:                case 0xB8: // lddr  
        !          5606:                        cCycles -= 0;
        !          5607:                {
        !          5608:                        m_regR-=2;
        !          5609:                        do
        !          5610:                        {
        !          5611:                        m_regR+=2;
        !          5612:                        MemWriteByte(m_regDE,MemReadByte(m_regHL));
        !          5613:                        --m_regDE;
        !          5614:                        --m_regHL;
        !          5615:                        --m_regBC;
        !          5616:                        cCycles-=21;
        !          5617:                        }
        !          5618:                        while (m_regBC);
        !          5619:                        m_regF=(m_regF&0xE9)|(m_regBC? V_FLAG:0);
        !          5620:                        if (m_regBC) AdjustPC(-2); // m_regPC-=2;
        !          5621:                        else
        !          5622:                         cCycles+=5;
        !          5623:                        break;
        !          5624:                }
        !          5625:                
        !          5626:                case 0xB9: // cpdr   
        !          5627:                        cCycles -= 0;
        !          5628:                {
        !          5629:                        BYTE i,j;
        !          5630:                        m_regR-=2;
        !          5631:                        do
        !          5632:                        {
        !          5633:                                m_regR+=2;
        !          5634:                                i=MemReadByte(m_regHL);
        !          5635:                                j=m_regA-i;
        !          5636:                                --m_regHL;
        !          5637:                                --m_regBC;
        !          5638:                                cCycles-=21;
        !          5639:                        }
        !          5640:                        while (m_regBC && j && cCycles>0);
        !          5641:                        m_regF=(m_regF&C_FLAG)|ZSTable[j]|
        !          5642:                        ((m_regA^i^j)&H_FLAG)|(m_regBC? V_FLAG:0)|N_FLAG;
        !          5643:                        if (m_regBC && j) AdjustPC(-2); // m_regPC-=2;
        !          5644:                        else cCycles+=5;
        !          5645:                        break;
        !          5646:                }
        !          5647:                
        !          5648:                case 0xBA: // indr     
        !          5649:                        cCycles -= 0;
        !          5650:                {
        !          5651:                        m_regR-=2;
        !          5652:                        do
        !          5653:                        {
        !          5654:                                m_regR+=2;
        !          5655:                                MemWriteByte(m_regHL,In(m_regC));
        !          5656:                                --m_regHL;
        !          5657:                                --m_regB;
        !          5658:                                cCycles-=21;
        !          5659:                        }
        !          5660:                        while (m_regB && cCycles>0);
        !          5661:                        m_regF=(m_regB)? N_FLAG:(N_FLAG|Z_FLAG);
        !          5662:                        if (m_regB) AdjustPC(-2); // m_regPC-=2;
        !          5663:                        else cCycles+=5;
        !          5664:                        break;
        !          5665:                }
        !          5666:                
        !          5667:                case 0xBB: // otdr       
        !          5668:                        cCycles -= 0;
        !          5669:                {
        !          5670:                        m_regR-=2;
        !          5671:                        do
        !          5672:                        {
        !          5673:                                m_regR+=2;
        !          5674:                                Out (m_regC,MemReadByte(m_regHL));
        !          5675:                                --m_regHL;
        !          5676:                                --m_regB;
        !          5677:                                cCycles-=21;
        !          5678:                        }
        !          5679:                        while (m_regB && cCycles>0);
        !          5680:                        m_regF=(m_regB)? N_FLAG:(Z_FLAG|N_FLAG);
        !          5681:                        if (m_regB) AdjustPC(-2); // m_regPC-=2;
        !          5682:                        else cCycles+=5;
        !          5683:                        break;
        !          5684:                }
        !          5685:                
        !          5686:                case 0xBC: // nop
        !          5687:                        cCycles -= 0;
        !          5688:                        break;
        !          5689:                
        !          5690:                case 0xBD: // nop 
        !          5691:                        cCycles -= 0;
        !          5692:                        break;
        !          5693:                
        !          5694:                case 0xBE: // nop  
        !          5695:                        cCycles -= 0;
        !          5696:                        break;
        !          5697:                
        !          5698:                case 0xBF: // nop   
        !          5699:                        cCycles -= 0;
        !          5700:                        break;
        !          5701: 
        !          5702:                case 0xC0: // nop   
        !          5703:                        cCycles -= 0;
        !          5704:                        break;
        !          5705:                
        !          5706:                case 0xC1: // nop    
        !          5707:                        cCycles -= 0;
        !          5708:                        break;
        !          5709:                        
        !          5710:                case 0xC2: // nop      
        !          5711:                        cCycles -= 0;
        !          5712:                        break;
        !          5713:                
        !          5714:                case 0xC3: // nop        
        !          5715:                        cCycles -= 0;
        !          5716:                        break;
        !          5717:                
        !          5718:                case 0xC4: // nop
        !          5719:                        cCycles -= 0;
        !          5720:                        break;
        !          5721:                
        !          5722:                case 0xC5: // nop 
        !          5723:                        cCycles -= 0;
        !          5724:                        break;
        !          5725:                
        !          5726:                case 0xC6: // nop  
        !          5727:                        cCycles -= 0;
        !          5728:                        break;
        !          5729:                
        !          5730:                case 0xC7: // nop   
        !          5731:                        cCycles -= 0;
        !          5732:                        break;
        !          5733: 
        !          5734:                case 0xC8: // nop   
        !          5735:                        cCycles -= 0;
        !          5736:                        break;
        !          5737:                
        !          5738:                case 0xC9: // nop    
        !          5739:                        cCycles -= 0;
        !          5740:                        break;
        !          5741:                
        !          5742:                case 0xCA: // nop      
        !          5743:                        cCycles -= 0;
        !          5744:                        break;
        !          5745:                
        !          5746:                case 0xCB: // nop        
        !          5747:                        cCycles -= 0;
        !          5748:                        break;
        !          5749:                
        !          5750:                case 0xCC: // nop
        !          5751:                        cCycles -= 0;
        !          5752:                        break;
        !          5753:                
        !          5754:                case 0xCD: // nop 
        !          5755:                        cCycles -= 0;
        !          5756:                        break;
        !          5757:                
        !          5758:                case 0xCE: // nop  
        !          5759:                        cCycles -= 0;
        !          5760:                        break;
        !          5761:                
        !          5762:                case 0xCF: // nop   
        !          5763:                        cCycles -= 0;
        !          5764:                        break;
        !          5765: 
        !          5766:                case 0xD0: // nop   
        !          5767:                        cCycles -= 0;
        !          5768:                        break;
        !          5769:                
        !          5770:                case 0xD1: // nop    
        !          5771:                        cCycles -= 0;
        !          5772:                        break;
        !          5773:                        
        !          5774:                case 0xD2: // nop      
        !          5775:                        cCycles -= 0;
        !          5776:                        break;
        !          5777:                
        !          5778:                case 0xD3: // nop        
        !          5779:                        cCycles -= 0;
        !          5780:                        break;
        !          5781:                
        !          5782:                case 0xD4: // nop
        !          5783:                        cCycles -= 0;
        !          5784:                        break;
        !          5785:                
        !          5786:                case 0xD5: // nop 
        !          5787:                        cCycles -= 0;
        !          5788:                        break;
        !          5789:                
        !          5790:                case 0xD6: // nop  
        !          5791:                        cCycles -= 0;
        !          5792:                        break;
        !          5793:                
        !          5794:                case 0xD7: // nop   
        !          5795:                        cCycles -= 0;
        !          5796:                        break;
        !          5797: 
        !          5798:                case 0xD8: // nop   
        !          5799:                        cCycles -= 0;
        !          5800:                        break;
        !          5801:                
        !          5802:                case 0xD9: // nop    
        !          5803:                        cCycles -= 0;
        !          5804:                        break;
        !          5805:                
        !          5806:                case 0xDA: // nop      
        !          5807:                        cCycles -= 0;
        !          5808:                        break;
        !          5809:                
        !          5810:                case 0xDB: // nop        
        !          5811:                        cCycles -= 0;
        !          5812:                        break;
        !          5813:                
        !          5814:                case 0xDC: // nop
        !          5815:                        cCycles -= 0;
        !          5816:                        break;
        !          5817:                
        !          5818:                case 0xDD: // nop 
        !          5819:                        cCycles -= 0;
        !          5820:                        break;
        !          5821:                
        !          5822:                case 0xDE: // nop  
        !          5823:                        cCycles -= 0;
        !          5824:                        break;
        !          5825:                
        !          5826:                case 0xDF: // nop   
        !          5827:                        cCycles -= 0;
        !          5828:                        break;
        !          5829: 
        !          5830:                case 0xE0: // nop   
        !          5831:                        cCycles -= 0;
        !          5832:                        break;
        !          5833:                
        !          5834:                case 0xE1: // nop    
        !          5835:                        cCycles -= 0;
        !          5836:                        break;
        !          5837:                        
        !          5838:                case 0xE2: // nop      
        !          5839:                        cCycles -= 0;
        !          5840:                        break;
        !          5841:                
        !          5842:                case 0xE3: // nop        
        !          5843:                        cCycles -= 0;
        !          5844:                        break;
        !          5845:                
        !          5846:                case 0xE4: // nop
        !          5847:                        cCycles -= 0;
        !          5848:                        break;
        !          5849:                
        !          5850:                case 0xE5: // nop 
        !          5851:                        cCycles -= 0;
        !          5852:                        break;
        !          5853:                
        !          5854:                case 0xE6: // nop  
        !          5855:                        cCycles -= 0;
        !          5856:                        break;
        !          5857:                
        !          5858:                case 0xE7: // nop   
        !          5859:                        cCycles -= 0;
        !          5860:                        break;
        !          5861: 
        !          5862:                case 0xE8: // nop   
        !          5863:                        cCycles -= 0;
        !          5864:                        break;
        !          5865:                
        !          5866:                case 0xE9: // nop    
        !          5867:                        cCycles -= 0;
        !          5868:                        break;
        !          5869:                
        !          5870:                case 0xEA: // nop      
        !          5871:                        cCycles -= 0;
        !          5872:                        break;
        !          5873:                
        !          5874:                case 0xEB: // nop        
        !          5875:                        cCycles -= 0;
        !          5876:                        break;
        !          5877:                
        !          5878:                case 0xEC: // nop
        !          5879:                        cCycles -= 0;
        !          5880:                        break;
        !          5881:                
        !          5882:                case 0xED: // nop 
        !          5883:                        cCycles -= 0;
        !          5884:                        break;
        !          5885:                
        !          5886:                case 0xEE: // nop  
        !          5887:                        cCycles -= 0;
        !          5888:                        break;
        !          5889:                
        !          5890:                case 0xEF: // nop   
        !          5891:                        cCycles -= 0;
        !          5892:                        break;
        !          5893: 
        !          5894:                case 0xF0: // nop   
        !          5895:                        cCycles -= 0;
        !          5896:                        break;
        !          5897:                
        !          5898:                case 0xF1: // nop    
        !          5899:                        cCycles -= 0;
        !          5900:                        break;
        !          5901:                        
        !          5902:                case 0xF2: // nop      
        !          5903:                        cCycles -= 0;
        !          5904:                        break;
        !          5905:                
        !          5906:                case 0xF3: // nop        
        !          5907:                        cCycles -= 0;
        !          5908:                        break;
        !          5909:                
        !          5910:                case 0xF4: // nop
        !          5911:                        cCycles -= 0;
        !          5912:                        break;
        !          5913:                
        !          5914:                case 0xF5: // nop 
        !          5915:                        cCycles -= 0;
        !          5916:                        break;
        !          5917:                
        !          5918:                case 0xF6: // nop  
        !          5919:                        cCycles -= 0;
        !          5920:                        break;
        !          5921:                
        !          5922:                case 0xF7: // nop   
        !          5923:                        cCycles -= 0;
        !          5924:                        break;
        !          5925: 
        !          5926:                case 0xF8: // nop   
        !          5927:                        cCycles -= 0;
        !          5928:                        break;
        !          5929:                
        !          5930:                case 0xF9: // nop    
        !          5931:                        cCycles -= 0;
        !          5932:                        break;
        !          5933:                
        !          5934:                case 0xFA: // nop      
        !          5935:                        cCycles -= 0;
        !          5936:                        break;
        !          5937:                
        !          5938:                case 0xFB: // nop        
        !          5939:                        cCycles -= 0;
        !          5940:                        break;
        !          5941:                
        !          5942:                case 0xFC: // nop
        !          5943:                        cCycles -= 0;
        !          5944:                        break;
        !          5945:                
        !          5946:                case 0xFD: // nop 
        !          5947:                        cCycles -= 0;
        !          5948:                        break;
        !          5949:                
        !          5950:                case 0xFE: // patch
        !          5951:                        cCycles -= 0;
        !          5952:                        break;
        !          5953:                
        !          5954:                case 0xFF: // nop
        !          5955:                        cCycles -= 0;
        !          5956:                        break;
        !          5957: 
        !          5958:                default:
        !          5959:                        _ASSERT(FALSE);
        !          5960:                        break;
        !          5961:        }
        !          5962: 
        !          5963:        return (cCyclesArg - cCycles);
        !          5964: }
        !          5965: 
        !          5966: int Ei() {
        !          5967:   /* fprintf ( stderr, "Enable Interrupt\n" ); */
        !          5968:   m_iff2 = 1;
        !          5969: 
        !          5970:   if (m_iff1 != 0)
        !          5971:     return 0;
        !          5972: 
        !          5973:   m_iff1 = 1;
        !          5974: 
        !          5975:   return(0);
        !          5976: }
        !          5977: 
        !          5978: void Di() {
        !          5979:   /* fprintf ( stderr, "Disable Interrupt\n" ); */
        !          5980:   m_iff1 = 0;
        !          5981:   m_iff2 = 0;
        !          5982: }
        !          5983: 
        !          5984: /* ***************************************************************************
        !          5985:  * FD prefixed opcodes
        !          5986:  * ***************************************************************************
        !          5987:  */
        !          5988: /* inline */ WORD IndirectIY() {
        !          5989:        return m_regIY + (signed char)ImmedByte();
        !          5990: }
        !          5991: 
        !          5992: int HandleFD() {
        !          5993: 
        !          5994:        WORD wAddr;
        !          5995:        WORD wTemp;
        !          5996:        const BYTE bOpcode = ImmedByte();
        !          5997: 
        !          5998:        m_regR++;
        !          5999:        
        !          6000:        switch (bOpcode)
        !          6001:        {
        !          6002:                case 0x00: // no_op   
        !          6003:                        SetPC(GetPC() - 1);
        !          6004:                        return 0;
        !          6005:                
        !          6006:                case 0x01: // no_op     
        !          6007:                        SetPC(GetPC() - 1);
        !          6008:                        return 0;
        !          6009:                
        !          6010:                case 0x02: // no_op      
        !          6011:                        SetPC(GetPC() - 1);
        !          6012:                        return 0;
        !          6013:                
        !          6014:                case 0x03: // no_op    
        !          6015:                        SetPC(GetPC() - 1);
        !          6016:                        return 0;
        !          6017:                
        !          6018:                case 0x04: // no_op    
        !          6019:                        SetPC(GetPC() - 1);
        !          6020:                        return 0;
        !          6021:                
        !          6022:                case 0x05: // no_op    
        !          6023:                        SetPC(GetPC() - 1);
        !          6024:                        return 0;
        !          6025:                
        !          6026:                case 0x06: // no_op      
        !          6027:                        SetPC(GetPC() - 1);
        !          6028:                        return 0;
        !          6029:                
        !          6030:                case 0x07: // no_op   
        !          6031:                        SetPC(GetPC() - 1);
        !          6032:                        return 0;
        !          6033: 
        !          6034:                case 0x08: // no_op   
        !          6035:                        SetPC(GetPC() - 1);
        !          6036:                        return 0;
        !          6037:                
        !          6038:                case 0x09: // add_iy_bc 
        !          6039:                        m_regIY = Add_2(m_regIY, m_regBC);
        !          6040:                        return 15;
        !          6041:                
        !          6042:                case 0x0A: // no_op      
        !          6043:                        SetPC(GetPC() - 1);
        !          6044:                        return 0;
        !          6045:                
        !          6046:                case 0x0B: // no_op    
        !          6047:                        SetPC(GetPC() - 1);
        !          6048:                        return 0;
        !          6049:                
        !          6050:                case 0x0C: // no_op    
        !          6051:                        SetPC(GetPC() - 1);
        !          6052:                        return 0;
        !          6053:                
        !          6054:                case 0x0D: // no_op    
        !          6055:                        SetPC(GetPC() - 1);
        !          6056:                        return 0;
        !          6057:                
        !          6058:                case 0x0E: // no_op      
        !          6059:                        SetPC(GetPC() - 1);
        !          6060:                        return 0;
        !          6061:                
        !          6062:                case 0x0F: // no_op   
        !          6063:                        SetPC(GetPC() - 1);
        !          6064:                        return 0;
        !          6065: 
        !          6066:                case 0x10: // no_op   
        !          6067:                        SetPC(GetPC() - 1);
        !          6068:                        return 0;
        !          6069:                
        !          6070:                case 0x11: // no_op     
        !          6071:                        SetPC(GetPC() - 1);
        !          6072:                        return 0;
        !          6073:                
        !          6074:                case 0x12: // no_op      
        !          6075:                        SetPC(GetPC() - 1);
        !          6076:                        return 0;
        !          6077:                
        !          6078:                case 0x13: // no_op    
        !          6079:                        SetPC(GetPC() - 1);
        !          6080:                        return 0;
        !          6081:                
        !          6082:                case 0x14: // no_op    
        !          6083:                        SetPC(GetPC() - 1);
        !          6084:                        return 0;
        !          6085:                
        !          6086:                case 0x15: // no_op    
        !          6087:                        SetPC(GetPC() - 1);
        !          6088:                        return 0;
        !          6089:                
        !          6090:                case 0x16: // no_op      
        !          6091:                        SetPC(GetPC() - 1);
        !          6092:                        return 0;
        !          6093:                
        !          6094:                case 0x17: // no_op   
        !          6095:                        SetPC(GetPC() - 1);
        !          6096:                        return 0;
        !          6097: 
        !          6098:                case 0x18: // no_op   
        !          6099:                        SetPC(GetPC() - 1);
        !          6100:                        return 0;
        !          6101:                
        !          6102:                case 0x19: // add_iy_de 
        !          6103:                        m_regIY = Add_2(m_regIY, m_regDE);
        !          6104:                        return 15;
        !          6105:                
        !          6106:                case 0x1A: // no_op      
        !          6107:                        SetPC(GetPC() - 1);
        !          6108:                        return 0;
        !          6109:                
        !          6110:                case 0x1B: // no_op    
        !          6111:                        SetPC(GetPC() - 1);
        !          6112:                        return 0;
        !          6113:                
        !          6114:                case 0x1C: // no_op    
        !          6115:                        SetPC(GetPC() - 1);
        !          6116:                        return 0;
        !          6117:                
        !          6118:                case 0x1D: // no_op    
        !          6119:                        SetPC(GetPC() - 1);
        !          6120:                        return 0;
        !          6121:                
        !          6122:                case 0x1E: // no_op      
        !          6123:                        SetPC(GetPC() - 1);
        !          6124:                        return 0;
        !          6125:                
        !          6126:                case 0x1F: // no_op   
        !          6127:                        SetPC(GetPC() - 1);
        !          6128:                        return 0;
        !          6129: 
        !          6130:                case 0x20: // no_op   
        !          6131:                        SetPC(GetPC() - 1);
        !          6132:                        return 0;
        !          6133:                
        !          6134:                case 0x21: // ld_iy_word
        !          6135:                        m_regIY = ImmedWord();
        !          6136:                        return 14;
        !          6137:                
        !          6138:                case 0x22: // ld_xword_iy
        !          6139:                        MemWriteWord(ImmedWord(), m_regIY);
        !          6140:                        return 20;
        !          6141:                
        !          6142:                case 0x23: // inc_iy
        !          6143:                        m_regIY++;
        !          6144:                        return 10;
        !          6145:                
        !          6146:                case 0x24: // inc_iyh  
        !          6147:                        m_regIYh = Inc(m_regIYh);
        !          6148:                        return 9;
        !          6149:                
        !          6150:                case 0x25: // dec_iyh  
        !          6151:                        m_regIYh = Dec(m_regIYh);
        !          6152:                        return 9;
        !          6153:                
        !          6154:                case 0x26: // ld_iyh_byte
        !          6155:                        m_regIYh = ImmedByte();
        !          6156:                        return 9;
        !          6157:                
        !          6158:                case 0x27: // no_op   
        !          6159:                        SetPC(GetPC() - 1);
        !          6160:                        return 0;
        !          6161: 
        !          6162:                case 0x28: // no_op   
        !          6163:                        SetPC(GetPC() - 1);
        !          6164:                        return 0;
        !          6165:                
        !          6166:                case 0x29: // add_iy_iy 
        !          6167:                        m_regIY = Add_2(m_regIY, m_regIY);
        !          6168:                        return 15;
        !          6169:                
        !          6170:                case 0x2A: // ld_iy_xword
        !          6171:                        m_regIY = MemReadWord(ImmedWord());
        !          6172:                        return 20;
        !          6173:                
        !          6174:                case 0x2B: // dec_iy   
        !          6175:                        m_regIY--;
        !          6176:                        return 10;
        !          6177:                
        !          6178:                case 0x2C: // inc_iyl  
        !          6179:                        m_regIYl = Inc(m_regIYl);
        !          6180:                        return 9;
        !          6181:                
        !          6182:                case 0x2D: // dec_iyl  
        !          6183:                        m_regIYl = Dec(m_regIYl);
        !          6184:                        return 9;
        !          6185:                
        !          6186:                case 0x2E: // ld_iyl_byte
        !          6187:                        m_regIYl = ImmedByte();
        !          6188:                        return 9;
        !          6189:                
        !          6190:                case 0x2F: // no_op   
        !          6191:                        SetPC(GetPC() - 1);
        !          6192:                        return 0;
        !          6193: 
        !          6194:                case 0x30: // no_op   
        !          6195:                        SetPC(GetPC() - 1);
        !          6196:                        return 0;
        !          6197:                
        !          6198:                case 0x31: // no_op     
        !          6199:                        SetPC(GetPC() - 1);
        !          6200:                        return 0;
        !          6201:                
        !          6202:                case 0x32: // no_op      
        !          6203:                        SetPC(GetPC() - 1);
        !          6204:                        return 0;
        !          6205:                
        !          6206:                case 0x33: // no_op    
        !          6207:                        SetPC(GetPC() - 1);
        !          6208:                        return 0;
        !          6209:                
        !          6210:                case 0x34: // inc_xiy  
        !          6211:                        wAddr = IndirectIY();
        !          6212:                        MemWriteByte(wAddr, Inc(MemReadByte(wAddr)));
        !          6213:                        return 23;
        !          6214:                
        !          6215:                case 0x35: // dec_xiy  
        !          6216:                        wAddr = IndirectIY();
        !          6217:                        MemWriteByte(wAddr, Dec(MemReadByte(wAddr)));
        !          6218:                        return 23;
        !          6219:                
        !          6220:                case 0x36: // ld_xiy_byte
        !          6221:                        wAddr = IndirectIY();
        !          6222:                        MemWriteByte(wAddr, ImmedByte());
        !          6223:                        return 19;
        !          6224:                
        !          6225:                case 0x37: // no_op   
        !          6226:                        SetPC(GetPC() - 1);
        !          6227:                        return 0;
        !          6228: 
        !          6229:                case 0x38: // no_op   
        !          6230:                        SetPC(GetPC() - 1);
        !          6231:                        return 0;
        !          6232:                
        !          6233:                case 0x39: // add_iy_sp 
        !          6234:                        m_regIY = Add_2(m_regIY, GetSP());
        !          6235:                        return 15;
        !          6236:                
        !          6237:                case 0x3A: // no_op      
        !          6238:                        SetPC(GetPC() - 1);
        !          6239:                        return 0;
        !          6240:                
        !          6241:                case 0x3B: // no_op    
        !          6242:                        SetPC(GetPC() - 1);
        !          6243:                        return 0;
        !          6244:                
        !          6245:                case 0x3C: // no_op    
        !          6246:                        SetPC(GetPC() - 1);
        !          6247:                        return 0;
        !          6248:                
        !          6249:                case 0x3D: // no_op    
        !          6250:                        SetPC(GetPC() - 1);
        !          6251:                        return 0;
        !          6252:                
        !          6253:                case 0x3E: // no_op      
        !          6254:                        SetPC(GetPC() - 1);
        !          6255:                        return 0;
        !          6256:                
        !          6257:                case 0x3F: // no_op   
        !          6258:                        SetPC(GetPC() - 1);
        !          6259:                        return 0;
        !          6260: 
        !          6261:                case 0x40: // no_op   
        !          6262:                        SetPC(GetPC() - 1);
        !          6263:                        return 0;
        !          6264:                
        !          6265:                case 0x41: // no_op     
        !          6266:                        SetPC(GetPC() - 1);
        !          6267:                        return 0;
        !          6268:                
        !          6269:                case 0x42: // no_op      
        !          6270:                        SetPC(GetPC() - 1);
        !          6271:                        return 0;
        !          6272:                
        !          6273:                case 0x43: // no_op    
        !          6274:                        SetPC(GetPC() - 1);
        !          6275:                        return 0;
        !          6276:                
        !          6277:                case 0x44: // ld_b_iyh 
        !          6278:                        m_regB = m_regIYh;
        !          6279:                        return 9;
        !          6280:                
        !          6281:                case 0x45: // ld_b_iyl 
        !          6282:                        m_regB = m_regIYl;
        !          6283:                        return 9;
        !          6284:                
        !          6285:                case 0x46: // ld_b_xiy   
        !          6286:                        m_regB = MemReadByte(IndirectIY());
        !          6287:                        return 19;
        !          6288:                
        !          6289:                case 0x47: // no_op   
        !          6290:                        SetPC(GetPC() - 1);
        !          6291:                        return 0;
        !          6292: 
        !          6293:                case 0x48: // no_op   
        !          6294:                        SetPC(GetPC() - 1);
        !          6295:                        return 0;
        !          6296:                
        !          6297:                case 0x49: // no_op     
        !          6298:                        SetPC(GetPC() - 1);
        !          6299:                        return 0;
        !          6300:                
        !          6301:                case 0x4A: // no_op      
        !          6302:                        SetPC(GetPC() - 1);
        !          6303:                        return 0;
        !          6304:                
        !          6305:                case 0x4B: // no_op    
        !          6306:                        SetPC(GetPC() - 1);
        !          6307:                        return 0;
        !          6308:                
        !          6309:                case 0x4C: // ld_c_iyh 
        !          6310:                        m_regC = m_regIYh;
        !          6311:                        return 9;
        !          6312:                
        !          6313:                case 0x4D: // ld_c_iyl 
        !          6314:                        m_regC = m_regIYl;
        !          6315:                        return 9;
        !          6316:                
        !          6317:                case 0x4E: // ld_c_xiy   
        !          6318:                        m_regC = MemReadByte(IndirectIY());
        !          6319:                        return 19;
        !          6320:                
        !          6321:                case 0x4F: // no_op   
        !          6322:                        SetPC(GetPC() - 1);
        !          6323:                        return 0;
        !          6324: 
        !          6325:                case 0x50: // no_op   
        !          6326:                        SetPC(GetPC() - 1);
        !          6327:                        return 0;
        !          6328:                
        !          6329:                case 0x51: // no_op     
        !          6330:                        SetPC(GetPC() - 1);
        !          6331:                        return 0;
        !          6332:                
        !          6333:                case 0x52: // no_op      
        !          6334:                        SetPC(GetPC() - 1);
        !          6335:                        return 0;
        !          6336:                
        !          6337:                case 0x53: // no_op    
        !          6338:                        SetPC(GetPC() - 1);
        !          6339:                        return 0;
        !          6340:                
        !          6341:                case 0x54: // ld_d_iyh 
        !          6342:                        m_regD = m_regIYh;
        !          6343:                        return 9;
        !          6344:                
        !          6345:                case 0x55: // ld_d_iyl 
        !          6346:                        m_regD = m_regIYl;
        !          6347:                        return 9;
        !          6348:                
        !          6349:                case 0x56: // ld_d_xiy   
        !          6350:                        m_regD = MemReadByte(IndirectIY());
        !          6351:                        return 19;
        !          6352:                
        !          6353:                case 0x57: // no_op   
        !          6354:                        SetPC(GetPC() - 1);
        !          6355:                        return 0;
        !          6356: 
        !          6357:                case 0x58: // no_op   
        !          6358:                        SetPC(GetPC() - 1);
        !          6359:                        return 0;
        !          6360:                
        !          6361:                case 0x59: // no_op     
        !          6362:                        SetPC(GetPC() - 1);
        !          6363:                        return 0;
        !          6364:                
        !          6365:                case 0x5A: // no_op      
        !          6366:                        SetPC(GetPC() - 1);
        !          6367:                        return 0;
        !          6368:                
        !          6369:                case 0x5B: // no_op    
        !          6370:                        SetPC(GetPC() - 1);
        !          6371:                        return 0;
        !          6372:                
        !          6373:                case 0x5C: // ld_e_iyh 
        !          6374:                        m_regE = m_regIYh;
        !          6375:                        return 9;
        !          6376:                
        !          6377:                case 0x5D: // ld_e_iyl 
        !          6378:                        m_regE = m_regIYl;
        !          6379:                        return 9;
        !          6380:                
        !          6381:                case 0x5E: // ld_e_xiy   
        !          6382:                        m_regE = MemReadByte(IndirectIY());
        !          6383:                        return 19;
        !          6384:                
        !          6385:                case 0x5F: // no_op   
        !          6386:                        SetPC(GetPC() - 1);
        !          6387:                        return 0;
        !          6388: 
        !          6389:                case 0x60: // ld_iyh_b
        !          6390:                        m_regIYh = m_regB;
        !          6391:                        return 9;
        !          6392:                
        !          6393:                case 0x61: // ld_iyh_c  
        !          6394:                        m_regIYh = m_regC;
        !          6395:                        return 9;
        !          6396:                
        !          6397:                case 0x62: // ld_iyh_d   
        !          6398:                        m_regIYh = m_regD;
        !          6399:                        return 9;
        !          6400:                
        !          6401:                case 0x63: // ld_iyh_e 
        !          6402:                        m_regIYh = m_regE;
        !          6403:                        return 9;
        !          6404:                
        !          6405:                case 0x64: // ld_iyh_h 
        !          6406:                        m_regIYh = m_regH;
        !          6407:                        return 9;
        !          6408:                
        !          6409:                case 0x65: // ld_iyh_l 
        !          6410:                        m_regIYh = m_regL;
        !          6411:                        return 9;
        !          6412:                
        !          6413:                case 0x66: // ld_h_xiy   
        !          6414:                        m_regH = MemReadByte(IndirectIY());
        !          6415:                        return 9;
        !          6416:                
        !          6417:                case 0x67: // ld_iyh_a
        !          6418:                        m_regIYh = m_regA;
        !          6419:                        return 9;
        !          6420: 
        !          6421:                case 0x68: // ld_iyl_b
        !          6422:                        m_regIYl = m_regB;
        !          6423:                        return 9;
        !          6424:                
        !          6425:                case 0x69: // ld_iyl_c  
        !          6426:                        m_regIYl = m_regC;
        !          6427:                        return 9;
        !          6428:                
        !          6429:                case 0x6A: // ld_iyl_d   
        !          6430:                        m_regIYl = m_regD;
        !          6431:                        return 9;
        !          6432:                
        !          6433:                case 0x6B: // ld_iyl_e 
        !          6434:                        m_regIYl = m_regE;
        !          6435:                        return 9;
        !          6436:                
        !          6437:                case 0x6C: // ld_iyl_h 
        !          6438:                        m_regIYl = m_regH;
        !          6439:                        return 9;
        !          6440:                
        !          6441:                case 0x6D: // ld_iyl_l 
        !          6442:                        m_regIYl = m_regL;
        !          6443:                        return 9;
        !          6444:                
        !          6445:                case 0x6E: // ld_l_xiy   
        !          6446:                        m_regL = MemReadByte(IndirectIY());
        !          6447:                        return 9;
        !          6448:                
        !          6449:                case 0x6F: // ld_iyl_a
        !          6450:                        m_regIYl = m_regA;
        !          6451:                        return 9;
        !          6452: 
        !          6453:                case 0x70: // ld_xiy_b
        !          6454:                        MemWriteByte(IndirectIY(), m_regB);
        !          6455:                        return 19;
        !          6456:                
        !          6457:                case 0x71: // ld_xiy_c  
        !          6458:                        MemWriteByte(IndirectIY(), m_regC);
        !          6459:                        return 19;
        !          6460:                
        !          6461:                case 0x72: // ld_xiy_d   
        !          6462:                        MemWriteByte(IndirectIY(), m_regD);
        !          6463:                        return 19;
        !          6464:                
        !          6465:                case 0x73: // ld_xiy_e 
        !          6466:                        MemWriteByte(IndirectIY(), m_regE);
        !          6467:                        return 19;
        !          6468:                
        !          6469:                case 0x74: // ld_xiy_h 
        !          6470:                        MemWriteByte(IndirectIY(), m_regH);
        !          6471:                        return 19;
        !          6472:                
        !          6473:                case 0x75: // ld_xiy_l 
        !          6474:                        MemWriteByte(IndirectIY(), m_regL);
        !          6475:                        return 19;
        !          6476:                
        !          6477:                case 0x76: // no_op      
        !          6478:                        SetPC(GetPC() - 1);
        !          6479:                        return 19;
        !          6480:                
        !          6481:                case 0x77: // ld_xiy_a
        !          6482:                        MemWriteByte(IndirectIY(), m_regA);
        !          6483:                        return 19;
        !          6484: 
        !          6485:                case 0x78: // no_op   
        !          6486:                        SetPC(GetPC() - 1);
        !          6487:                        return 0;
        !          6488:                
        !          6489:                case 0x79: // no_op     
        !          6490:                        SetPC(GetPC() - 1);
        !          6491:                        return 0;
        !          6492:                
        !          6493:                case 0x7A: // no_op      
        !          6494:                        SetPC(GetPC() - 1);
        !          6495:                        return 0;
        !          6496:                
        !          6497:                case 0x7B: // no_op    
        !          6498:                        SetPC(GetPC() - 1);
        !          6499:                        return 0;
        !          6500:                
        !          6501:                case 0x7C: // ld_a_iyh 
        !          6502:                        m_regA = m_regIYh;
        !          6503:                        return 9;
        !          6504:                
        !          6505:                case 0x7D: // ld_a_iyl 
        !          6506:                        m_regA = m_regIYl;
        !          6507:                        return 9;
        !          6508:                
        !          6509:                case 0x7E: // ld_a_xiy   
        !          6510:                        m_regA = MemReadByte(IndirectIY());
        !          6511:                        return 19;
        !          6512:                
        !          6513:                case 0x7F: // no_op   
        !          6514:                        SetPC(GetPC() - 1);
        !          6515:                        return 0;
        !          6516: 
        !          6517:                case 0x80: // no_op   
        !          6518:                        SetPC(GetPC() - 1);
        !          6519:                        return 0;
        !          6520:                
        !          6521:                case 0x81: // no_op     
        !          6522:                        SetPC(GetPC() - 1);
        !          6523:                        return 0;
        !          6524:                
        !          6525:                case 0x82: // no_op      
        !          6526:                        SetPC(GetPC() - 1);
        !          6527:                        return 0;
        !          6528:                
        !          6529:                case 0x83: // no_op    
        !          6530:                        SetPC(GetPC() - 1);
        !          6531:                        return 0;
        !          6532:                
        !          6533:                case 0x84: // add_a_iyh
        !          6534:                        Add_1(m_regIYh);
        !          6535:                        return 9;
        !          6536:                
        !          6537:                case 0x85: // add_a_iyl
        !          6538:                        Add_1(m_regIYl);
        !          6539:                        return 9;
        !          6540:                
        !          6541:                case 0x86: // add_a_xiy  
        !          6542:                        Add_1(MemReadByte(IndirectIY()));
        !          6543:                        return 19;
        !          6544:                
        !          6545:                case 0x87: // no_op   
        !          6546:                        SetPC(GetPC() - 1);
        !          6547:                        return 0;
        !          6548: 
        !          6549:                case 0x88: // no_op   
        !          6550:                        SetPC(GetPC() - 1);
        !          6551:                        return 0;
        !          6552:                
        !          6553:                case 0x89: // no_op     
        !          6554:                        SetPC(GetPC() - 1);
        !          6555:                        return 0;
        !          6556:                
        !          6557:                case 0x8A: // no_op      
        !          6558:                        SetPC(GetPC() - 1);
        !          6559:                        return 0;
        !          6560:                
        !          6561:                case 0x8B: // no_op    
        !          6562:                        SetPC(GetPC() - 1);
        !          6563:                        return 0;
        !          6564:                
        !          6565:                case 0x8C: // adc_a_iyh
        !          6566:                        Adc_1(m_regIYh);
        !          6567:                        return 9;
        !          6568:                
        !          6569:                case 0x8D: // adc_a_iyl
        !          6570:                        Adc_1(m_regIYl);
        !          6571:                        return 9;
        !          6572:                
        !          6573:                case 0x8E: // adc_a_xiy  
        !          6574:                        Adc_1(MemReadByte(IndirectIY()));
        !          6575:                        return 19;
        !          6576:                
        !          6577:                case 0x8F: // no_op   
        !          6578:                        SetPC(GetPC() - 1);
        !          6579:                        return 0;
        !          6580: 
        !          6581:                case 0x90: // no_op   
        !          6582:                        SetPC(GetPC() - 1);
        !          6583:                        return 0;
        !          6584:                
        !          6585:                case 0x91: // no_op     
        !          6586:                        SetPC(GetPC() - 1);
        !          6587:                        return 0;
        !          6588:                
        !          6589:                case 0x92: // no_op      
        !          6590:                        SetPC(GetPC() - 1);
        !          6591:                        return 0;
        !          6592:                
        !          6593:                case 0x93: // no_op    
        !          6594:                        SetPC(GetPC() - 1);
        !          6595:                        return 0;
        !          6596:                
        !          6597:                case 0x94: // sub_iyh  
        !          6598:                        Sub_1(m_regIYh);
        !          6599:                        return 9;
        !          6600:                
        !          6601:                case 0x95: // sub_iyl  
        !          6602:                        Sub_1(m_regIYl);
        !          6603:                        return 9;
        !          6604:                
        !          6605:                case 0x96: // sub_xiy    
        !          6606:                        Sub_1(MemReadByte(IndirectIY()));
        !          6607:                        return 19;
        !          6608:                
        !          6609:                case 0x97: // no_op   
        !          6610:                        SetPC(GetPC() - 1);
        !          6611:                        return 0;
        !          6612: 
        !          6613:                case 0x98: // no_op   
        !          6614:                        SetPC(GetPC() - 1);
        !          6615:                        return 0;
        !          6616:                
        !          6617:                case 0x99: // no_op     
        !          6618:                        SetPC(GetPC() - 1);
        !          6619:                        return 0;
        !          6620:                
        !          6621:                case 0x9A: // no_op      
        !          6622:                        SetPC(GetPC() - 1);
        !          6623:                        return 0;
        !          6624:                
        !          6625:                case 0x9B: // no_op    
        !          6626:                        SetPC(GetPC() - 1);
        !          6627:                        return 0;
        !          6628:                
        !          6629:                case 0x9C: // sbc_a_iyh
        !          6630:                        Sbc_1(m_regIYh);
        !          6631:                        return 9;
        !          6632:                
        !          6633:                case 0x9D: // sbc_a_iyl
        !          6634:                        Sbc_1(m_regIYl);
        !          6635:                        return 9;
        !          6636:                
        !          6637:                case 0x9E: // sbc_a_xiy  
        !          6638:                        Sbc_1(MemReadByte(IndirectIY()));
        !          6639:                        return 19;
        !          6640:                
        !          6641:                case 0x9F: // no_op   
        !          6642:                        SetPC(GetPC() - 1);
        !          6643:                        return 0;
        !          6644: 
        !          6645:                case 0xA0: // no_op   
        !          6646:                        SetPC(GetPC() - 1);
        !          6647:                        return 0;
        !          6648:                
        !          6649:                case 0xA1: // no_op     
        !          6650:                        SetPC(GetPC() - 1);
        !          6651:                        return 0;
        !          6652:                
        !          6653:                case 0xA2: // no_op      
        !          6654:                        SetPC(GetPC() - 1);
        !          6655:                        return 0;
        !          6656:                
        !          6657:                case 0xA3: // no_op    
        !          6658:                        SetPC(GetPC() - 1);
        !          6659:                        return 0;
        !          6660:                
        !          6661:                case 0xA4: // and_iyh  
        !          6662:                        And(m_regIYh);
        !          6663:                        return 9;
        !          6664:                
        !          6665:                case 0xA5: // and_iyl  
        !          6666:                        And(m_regIYl);
        !          6667:                        return 9;
        !          6668:                
        !          6669:                case 0xA6: // and_xiy    
        !          6670:                        And(MemReadByte(IndirectIY()));
        !          6671:                        return 19;
        !          6672:                
        !          6673:                case 0xA7: // no_op   
        !          6674:                        SetPC(GetPC() - 1);
        !          6675:                        return 0;
        !          6676: 
        !          6677:                case 0xA8: // no_op   
        !          6678:                        SetPC(GetPC() - 1);
        !          6679:                        return 0;
        !          6680:                
        !          6681:                case 0xA9: // no_op     
        !          6682:                        SetPC(GetPC() - 1);
        !          6683:                        return 0;
        !          6684:                
        !          6685:                case 0xAA: // no_op      
        !          6686:                        SetPC(GetPC() - 1);
        !          6687:                        return 0;
        !          6688:                
        !          6689:                case 0xAB: // no_op    
        !          6690:                        SetPC(GetPC() - 1);
        !          6691:                        return 0;
        !          6692:                
        !          6693:                case 0xAC: // xor_iyh  
        !          6694:                        Xor(m_regIYh);
        !          6695:                        return 9;
        !          6696:                
        !          6697:                case 0xAD: // xor_iyl  
        !          6698:                        Xor(m_regIYl);
        !          6699:                        return 9;
        !          6700:                
        !          6701:                case 0xAE: // xor_xiy    
        !          6702:                        Xor(MemReadByte(IndirectIY()));
        !          6703:                        return 19;
        !          6704:                
        !          6705:                case 0xAF: // no_op   
        !          6706:                        SetPC(GetPC() - 1);
        !          6707:                        return 0;
        !          6708: 
        !          6709:                case 0xB0: // no_op   
        !          6710:                        SetPC(GetPC() - 1);
        !          6711:                        return 0;
        !          6712:                
        !          6713:                case 0xB1: // no_op     
        !          6714:                        SetPC(GetPC() - 1);
        !          6715:                        return 0;
        !          6716:                
        !          6717:                case 0xB2: // no_op      
        !          6718:                        SetPC(GetPC() - 1);
        !          6719:                        return 0;
        !          6720:                
        !          6721:                case 0xB3: // no_op    
        !          6722:                        SetPC(GetPC() - 1);
        !          6723:                        return 0;
        !          6724:                
        !          6725:                case 0xB4: // or_iyh   
        !          6726:                        Or(m_regIYh);
        !          6727:                        return 9;
        !          6728:                
        !          6729:                case 0xB5: // or_iyl   
        !          6730:                        Or(m_regIYl);
        !          6731:                        return 9;
        !          6732:                
        !          6733:                case 0xB6: // or_xiy     
        !          6734:                        Or(MemReadByte(IndirectIY()));
        !          6735:                        return 19;
        !          6736:                
        !          6737:                case 0xB7: // no_op   
        !          6738:                        SetPC(GetPC() - 1);
        !          6739:                        return 0;
        !          6740: 
        !          6741:                case 0xB8: // no_op   
        !          6742:                        SetPC(GetPC() - 1);
        !          6743:                        return 0;
        !          6744:                
        !          6745:                case 0xB9: // no_op     
        !          6746:                        SetPC(GetPC() - 1);
        !          6747:                        return 0;
        !          6748:                
        !          6749:                case 0xBA: // no_op      
        !          6750:                        SetPC(GetPC() - 1);
        !          6751:                        return 0;
        !          6752:                
        !          6753:                case 0xBB: // no_op    
        !          6754:                        SetPC(GetPC() - 1);
        !          6755:                        return 0;
        !          6756:                
        !          6757:                case 0xBC: // cp_iyh   
        !          6758:                        Cp(m_regIYh);
        !          6759:                        return 9;
        !          6760:                
        !          6761:                case 0xBD: // cp_iyl   
        !          6762:                        Cp(m_regIYl);
        !          6763:                        return 9;
        !          6764:                
        !          6765:                case 0xBE: // cp_xiy     
        !          6766:                        Cp(MemReadByte(IndirectIY()));
        !          6767:                        return 19;
        !          6768:                
        !          6769:                case 0xBF: // no_op   
        !          6770:                        SetPC(GetPC() - 1);
        !          6771:                        return 0;
        !          6772: 
        !          6773:                case 0xC0: // no_op   
        !          6774:                        SetPC(GetPC() - 1);
        !          6775:                        return 0;
        !          6776:                
        !          6777:                case 0xC1: // no_op     
        !          6778:                        SetPC(GetPC() - 1);
        !          6779:                        return 0;
        !          6780:                
        !          6781:                case 0xC2: // no_op      
        !          6782:                        SetPC(GetPC() - 1);
        !          6783:                        return 0;
        !          6784:                
        !          6785:                case 0xC3: // no_op    
        !          6786:                        SetPC(GetPC() - 1);
        !          6787:                        return 0;
        !          6788:                
        !          6789:                case 0xC4: // no_op    
        !          6790:                        SetPC(GetPC() - 1);
        !          6791:                        return 0;
        !          6792:                
        !          6793:                case 0xC5: // no_op    
        !          6794:                        SetPC(GetPC() - 1);
        !          6795:                        return 0;
        !          6796:                
        !          6797:                case 0xC6: // no_op      
        !          6798:                        SetPC(GetPC() - 1);
        !          6799:                        return 0;
        !          6800:                
        !          6801:                case 0xC7: // no_op   
        !          6802:                        SetPC(GetPC() - 1);
        !          6803:                        return 0;
        !          6804: 
        !          6805:                case 0xC8: // no_op   
        !          6806:                        SetPC(GetPC() - 1);
        !          6807:                        return 0;
        !          6808:                
        !          6809:                case 0xC9: // no_op     
        !          6810:                        SetPC(GetPC() - 1);
        !          6811:                        return 0;
        !          6812:                
        !          6813:                case 0xCA: // no_op      
        !          6814:                        SetPC(GetPC() - 1);
        !          6815:                        return 0;
        !          6816:                
        !          6817:                case 0xCB: // fd_cb    
        !          6818:                        return HandleFDCB();
        !          6819:                
        !          6820:                case 0xCC: // no_op    
        !          6821:                        SetPC(GetPC() - 1);
        !          6822:                        return 0;
        !          6823:                
        !          6824:                case 0xCD: // no_op    
        !          6825:                        SetPC(GetPC() - 1);
        !          6826:                        return 0;
        !          6827:                
        !          6828:                case 0xCE: // no_op      
        !          6829:                        SetPC(GetPC() - 1);
        !          6830:                        return 0;
        !          6831:                
        !          6832:                case 0xCF: // no_op   
        !          6833:                        SetPC(GetPC() - 1);
        !          6834:                        return 0;
        !          6835: 
        !          6836:                case 0xD0: // no_op   
        !          6837:                        SetPC(GetPC() - 1);
        !          6838:                        return 0;
        !          6839:                
        !          6840:                case 0xD1: // no_op     
        !          6841:                        SetPC(GetPC() - 1);
        !          6842:                        return 0;
        !          6843:                
        !          6844:                case 0xD2: // no_op      
        !          6845:                        SetPC(GetPC() - 1);
        !          6846:                        return 0;
        !          6847:                
        !          6848:                case 0xD3: // no_op    
        !          6849:                        SetPC(GetPC() - 1);
        !          6850:                        return 0;
        !          6851:                
        !          6852:                case 0xD4: // no_op    
        !          6853:                        SetPC(GetPC() - 1);
        !          6854:                        return 0;
        !          6855:                
        !          6856:                case 0xD5: // no_op    
        !          6857:                        SetPC(GetPC() - 1);
        !          6858:                        return 0;
        !          6859:                
        !          6860:                case 0xD6: // no_op      
        !          6861:                        SetPC(GetPC() - 1);
        !          6862:                        return 0;
        !          6863:                
        !          6864:                case 0xD7: // no_op   
        !          6865:                        SetPC(GetPC() - 1);
        !          6866:                        return 0;
        !          6867: 
        !          6868:                case 0xD8: // no_op   
        !          6869:                        SetPC(GetPC() - 1);
        !          6870:                        return 0;
        !          6871:                
        !          6872:                case 0xD9: // no_op     
        !          6873:                        SetPC(GetPC() - 1);
        !          6874:                        return 0;
        !          6875:                
        !          6876:                case 0xDA: // no_op      
        !          6877:                        SetPC(GetPC() - 1);
        !          6878:                        return 0;
        !          6879:                
        !          6880:                case 0xDB: // no_op    
        !          6881:                        SetPC(GetPC() - 1);
        !          6882:                        return 0;
        !          6883:                
        !          6884:                case 0xDC: // no_op    
        !          6885:                        SetPC(GetPC() - 1);
        !          6886:                        return 0;
        !          6887:                
        !          6888:                case 0xDD: // no_op    
        !          6889:                        SetPC(GetPC() - 1);
        !          6890:                        return 0;
        !          6891:                
        !          6892:                case 0xDE: // no_op      
        !          6893:                        SetPC(GetPC() - 1);
        !          6894:                        return 0;
        !          6895:                
        !          6896:                case 0xDF: // no_op   
        !          6897:                        SetPC(GetPC() - 1);
        !          6898:                        return 0;
        !          6899: 
        !          6900:                case 0xE0: // no_op   
        !          6901:                        SetPC(GetPC() - 1);
        !          6902:                        return 0;
        !          6903:                
        !          6904:                case 0xE1: // pop_iy    
        !          6905:                        m_regIY = Pop();
        !          6906:                        return 14;
        !          6907:                
        !          6908:                case 0xE2: // no_op      
        !          6909:                        SetPC(GetPC() - 1);
        !          6910:                        return 0;
        !          6911:                
        !          6912:                case 0xE3: // ex_xsp_iy
        !          6913:                        wTemp = MemReadWord(GetSP());
        !          6914:                        MemWriteWord(GetSP(), m_regIY);
        !          6915:                        m_regIY = wTemp;
        !          6916:                        return 23;
        !          6917:                
        !          6918:                case 0xE4: // no_op    
        !          6919:                        SetPC(GetPC() - 1);
        !          6920:                        return 0;
        !          6921:                
        !          6922:                case 0xE5: // push_iy  
        !          6923:                        Push(m_regIY);
        !          6924:                        return 15;
        !          6925:                
        !          6926:                case 0xE6: // no_op      
        !          6927:                        SetPC(GetPC() - 1);
        !          6928:                        return 0;
        !          6929:                
        !          6930:                case 0xE7: // no_op   
        !          6931:                        SetPC(GetPC() - 1);
        !          6932:                        return 0;
        !          6933: 
        !          6934:                case 0xE8: // no_op   
        !          6935:                        SetPC(GetPC() - 1);
        !          6936:                        return 0;
        !          6937:                
        !          6938:                case 0xE9: // jp_iy     
        !          6939:                        SetPC(m_regIY);
        !          6940:                        return 8;
        !          6941:                
        !          6942:                case 0xEA: // no_op      
        !          6943:                        SetPC(GetPC() - 1);
        !          6944:                        return 0;
        !          6945:                
        !          6946:                case 0xEB: // no_op    
        !          6947:                        SetPC(GetPC() - 1);
        !          6948:                        return 0;
        !          6949:                
        !          6950:                case 0xEC: // no_op    
        !          6951:                        SetPC(GetPC() - 1);
        !          6952:                        return 0;
        !          6953:                
        !          6954:                case 0xED: // no_op    
        !          6955:                        SetPC(GetPC() - 1);
        !          6956:                        return 0;
        !          6957:                
        !          6958:                case 0xEE: // no_op      
        !          6959:                        SetPC(GetPC() - 1);
        !          6960:                        return 0;
        !          6961:                
        !          6962:                case 0xEF: // no_op   
        !          6963:                        SetPC(GetPC() - 1);
        !          6964:                        return 0;
        !          6965: 
        !          6966:                case 0xF0: // no_op   
        !          6967:                        SetPC(GetPC() - 1);
        !          6968:                        return 0;
        !          6969:                
        !          6970:                case 0xF1: // no_op     
        !          6971:                        SetPC(GetPC() - 1);
        !          6972:                        return 0;
        !          6973:                
        !          6974:                case 0xF2: // no_op      
        !          6975:                        SetPC(GetPC() - 1);
        !          6976:                        return 0;
        !          6977:                
        !          6978:                case 0xF3: // no_op    
        !          6979:                        SetPC(GetPC() - 1);
        !          6980:                        return 0;
        !          6981:                
        !          6982:                case 0xF4: // no_op    
        !          6983:                        SetPC(GetPC() - 1);
        !          6984:                        return 0;
        !          6985:                
        !          6986:                case 0xF5: // no_op    
        !          6987:                        SetPC(GetPC() - 1);
        !          6988:                        return 0;
        !          6989:                
        !          6990:                case 0xF6: // no_op      
        !          6991:                        SetPC(GetPC() - 1);
        !          6992:                        return 0;
        !          6993:                
        !          6994:                case 0xF7: // no_op   
        !          6995:                        SetPC(GetPC() - 1);
        !          6996:                        return 0;
        !          6997: 
        !          6998:                case 0xF8: // no_op   
        !          6999:                        SetPC(GetPC() - 1);
        !          7000:                        return 0;
        !          7001:                
        !          7002:                case 0xF9: // ld_sp_iy  
        !          7003:                        SetSP(m_regIY);
        !          7004:                        return 10;
        !          7005:                
        !          7006:                case 0xFA: // no_op      
        !          7007:                        SetPC(GetPC() - 1);
        !          7008:                        return 0;
        !          7009:                
        !          7010:                case 0xFB: // no_op    
        !          7011:                        SetPC(GetPC() - 1);
        !          7012:                        return 0;
        !          7013:                
        !          7014:                case 0xFC: // no_op    
        !          7015:                        SetPC(GetPC() - 1);
        !          7016:                        return 0;
        !          7017:                
        !          7018:                case 0xFD: // no_op    
        !          7019:                        SetPC(GetPC() - 1);
        !          7020:                        return 0;
        !          7021:                
        !          7022:                case 0xFE: // no_op      
        !          7023:                        SetPC(GetPC() - 1);
        !          7024:                        return 0;
        !          7025:                
        !          7026:                case 0xFF: // no_op
        !          7027:                        SetPC(GetPC() - 1);
        !          7028:                        return 0;
        !          7029: 
        !          7030:                default:
        !          7031:                        _ASSERT(FALSE);
        !          7032:                        return 0;
        !          7033:        }
        !          7034: }
        !          7035: 
        !          7036: /* ***************************************************************************
        !          7037:  * FDCD prefixed opcodes
        !          7038:  * ***************************************************************************
        !          7039:  */
        !          7040: 
        !          7041: int HandleFDCB() {
        !          7042:        const WORD wAddr = m_regIY + (signed char)ImmedByte();
        !          7043:        const BYTE bOpcode = ImmedByte();
        !          7044: 
        !          7045:        switch (bOpcode)
        !          7046:        {
        !          7047:                case 0x00: // no_op_xx 
        !          7048:                        return 0;
        !          7049:                
        !          7050:                case 0x01: // no_op_xx 
        !          7051:                        return 0;
        !          7052:                        
        !          7053:                case 0x02: // no_op_xx 
        !          7054:                        return 0;
        !          7055:                
        !          7056:                case 0x03: // no_op_xx 
        !          7057:                        return 0;
        !          7058:                
        !          7059:                case 0x04: // no_op_xx 
        !          7060:                        return 0;
        !          7061:                
        !          7062:                case 0x05: // no_op_xx 
        !          7063:                        return 0;
        !          7064:                
        !          7065:                case 0x06: // rlc_xiy  
        !          7066:                        MemWriteByte(wAddr, Rlc(MemReadByte(wAddr)));
        !          7067:                        return 23;
        !          7068:                
        !          7069:                case 0x07: // no_op_xx 
        !          7070:                        return 0;
        !          7071: 
        !          7072:                case 0x08: // no_op_xx 
        !          7073:                        return 0;
        !          7074:                
        !          7075:                case 0x09: // no_op_xx 
        !          7076:                        return 0;
        !          7077:                
        !          7078:                case 0x0A: // no_op_xx 
        !          7079:                        return 0;
        !          7080:                
        !          7081:                case 0x0B: // no_op_xx 
        !          7082:                        return 0;
        !          7083:                
        !          7084:                case 0x0C: // no_op_xx 
        !          7085:                        return 0;
        !          7086:                
        !          7087:                case 0x0D: // no_op_xx 
        !          7088:                        return 0;
        !          7089:                
        !          7090:                case 0x0E: // rrc_xiy  
        !          7091:                        MemWriteByte(wAddr, Rrc(MemReadByte(wAddr)));
        !          7092:                        return 23;
        !          7093:                
        !          7094:                case 0x0F: // no_op_xx 
        !          7095:                        return 0;
        !          7096: 
        !          7097:                case 0x10: // no_op_xx 
        !          7098:                        return 0;
        !          7099:                
        !          7100:                case 0x11: // no_op_xx 
        !          7101:                        return 0;
        !          7102:                        
        !          7103:                case 0x12: // no_op_xx 
        !          7104:                        return 0;
        !          7105:                
        !          7106:                case 0x13: // no_op_xx 
        !          7107:                        return 0;
        !          7108:                
        !          7109:                case 0x14: // no_op_xx 
        !          7110:                        return 0;
        !          7111:                
        !          7112:                case 0x15: // no_op_xx 
        !          7113:                        return 0;
        !          7114:                
        !          7115:                case 0x16: // rl_xiy   
        !          7116:                        MemWriteByte(wAddr, Rl(MemReadByte(wAddr)));
        !          7117:                        return 23;
        !          7118:                
        !          7119:                case 0x17: // no_op_xx 
        !          7120:                        return 0;
        !          7121: 
        !          7122:                case 0x18: // no_op_xx 
        !          7123:                        return 0;
        !          7124:                
        !          7125:                case 0x19: // no_op_xx 
        !          7126:                        return 0;
        !          7127:                
        !          7128:                case 0x1A: // no_op_xx 
        !          7129:                        return 0;
        !          7130:                
        !          7131:                case 0x1B: // no_op_xx 
        !          7132:                        return 0;
        !          7133:                
        !          7134:                case 0x1C: // no_op_xx 
        !          7135:                        return 0;
        !          7136:                
        !          7137:                case 0x1D: // no_op_xx 
        !          7138:                        return 0;
        !          7139:                
        !          7140:                case 0x1E: // rr_xiy   
        !          7141:                        MemWriteByte(wAddr, Rr(MemReadByte(wAddr)));
        !          7142:                        return 23;
        !          7143:                
        !          7144:                case 0x1F: // no_op_xx 
        !          7145:                        return 0;
        !          7146: 
        !          7147:                case 0x20: // no_op_xx 
        !          7148:                        return 0;
        !          7149:                
        !          7150:                case 0x21: // no_op_xx 
        !          7151:                        return 0;
        !          7152:                        
        !          7153:                case 0x22: // no_op_xx 
        !          7154:                        return 0;
        !          7155:                
        !          7156:                case 0x23: // no_op_xx 
        !          7157:                        return 0;
        !          7158:                
        !          7159:                case 0x24: // no_op_xx 
        !          7160:                        return 0;
        !          7161:                
        !          7162:                case 0x25: // no_op_xx 
        !          7163:                        return 0;
        !          7164:                
        !          7165:                case 0x26: // sla_xiy  
        !          7166:                        MemWriteByte(wAddr, Sla(MemReadByte(wAddr)));
        !          7167:                        return 23;
        !          7168:                
        !          7169:                case 0x27: // no_op_xx 
        !          7170:                        return 0;
        !          7171: 
        !          7172:                case 0x28: // no_op_xx 
        !          7173:                        return 0;
        !          7174:                
        !          7175:                case 0x29: // no_op_xx 
        !          7176:                        return 0;
        !          7177:                
        !          7178:                case 0x2A: // no_op_xx 
        !          7179:                        return 0;
        !          7180:                
        !          7181:                case 0x2B: // no_op_xx 
        !          7182:                        return 0;
        !          7183:                
        !          7184:                case 0x2C: // no_op_xx 
        !          7185:                        return 0;
        !          7186:                
        !          7187:                case 0x2D: // no_op_xx 
        !          7188:                        return 0;
        !          7189:                
        !          7190:                case 0x2E: // sra_xiy  
        !          7191:                        MemWriteByte(wAddr, Sra(MemReadByte(wAddr)));
        !          7192:                        return 23;
        !          7193:                
        !          7194:                case 0x2F: // no_op_xx 
        !          7195:                        return 0;
        !          7196: 
        !          7197:                case 0x30: // no_op_xx 
        !          7198:                        return 0;
        !          7199:                
        !          7200:                case 0x31: // no_op_xx 
        !          7201:                        return 0;
        !          7202:                        
        !          7203:                case 0x32: // no_op_xx 
        !          7204:                        return 0;
        !          7205:                
        !          7206:                case 0x33: // no_op_xx 
        !          7207:                        return 0;
        !          7208:                
        !          7209:                case 0x34: // no_op_xx 
        !          7210:                        return 0;
        !          7211:                
        !          7212:                case 0x35: // no_op_xx 
        !          7213:                        return 0;
        !          7214:                
        !          7215:                case 0x36: // sll_xiy  
        !          7216:                        MemWriteByte(wAddr, Sll(MemReadByte(wAddr)));
        !          7217:                        return 23;
        !          7218:                
        !          7219:                case 0x37: // no_op_xx 
        !          7220:                        return 0;
        !          7221: 
        !          7222:                case 0x38: // no_op_xx 
        !          7223:                        return 0;
        !          7224:                
        !          7225:                case 0x39: // no_op_xx 
        !          7226:                        return 0;
        !          7227:                
        !          7228:                case 0x3A: // no_op_xx 
        !          7229:                        return 0;
        !          7230:                
        !          7231:                case 0x3B: // no_op_xx 
        !          7232:                        return 0;
        !          7233:                
        !          7234:                case 0x3C: // no_op_xx 
        !          7235:                        return 0;
        !          7236:                
        !          7237:                case 0x3D: // no_op_xx 
        !          7238:                        return 0;
        !          7239:                
        !          7240:                case 0x3E: // srl_xiy  
        !          7241:                        MemWriteByte(wAddr, Srl(MemReadByte(wAddr)));
        !          7242:                        return 23;
        !          7243:                
        !          7244:                case 0x3F: // no_op_xx 
        !          7245:                        return 0;
        !          7246: 
        !          7247:                case 0x40: // bit_0_xiy
        !          7248:                case 0x41: // bit_0_xiy
        !          7249:                case 0x42: // bit_0_xiy
        !          7250:                case 0x43: // bit_0_xiy
        !          7251:                case 0x44: // bit_0_xiy
        !          7252:                case 0x45: // bit_0_xiy
        !          7253:                case 0x46: // bit_0_xiy
        !          7254:                case 0x47: // bit_0_xiy
        !          7255:                        Bit(MemReadByte(wAddr), 0);
        !          7256:                        return 20;
        !          7257: 
        !          7258:                case 0x48: // bit_1_xiy
        !          7259:                case 0x49: // bit_1_xiy
        !          7260:                case 0x4A: // bit_1_xiy
        !          7261:                case 0x4B: // bit_1_xiy
        !          7262:                case 0x4C: // bit_1_xiy
        !          7263:                case 0x4D: // bit_1_xiy
        !          7264:                case 0x4E: // bit_1_xiy
        !          7265:                case 0x4F: // bit_1_xiy
        !          7266:                        Bit(MemReadByte(wAddr), 1);
        !          7267:                        return 20;
        !          7268: 
        !          7269:                case 0x50: // bit_2_xiy
        !          7270:                case 0x51: // bit_2_xiy
        !          7271:                case 0x52: // bit_2_xiy
        !          7272:                case 0x53: // bit_2_xiy
        !          7273:                case 0x54: // bit_2_xiy
        !          7274:                case 0x55: // bit_2_xiy
        !          7275:                case 0x56: // bit_2_xiy
        !          7276:                case 0x57: // bit_2_xiy
        !          7277:                        Bit(MemReadByte(wAddr), 2);
        !          7278:                        return 20;
        !          7279: 
        !          7280:                case 0x58: // bit_3_xiy
        !          7281:                case 0x59: // bit_3_xiy
        !          7282:                case 0x5A: // bit_3_xiy
        !          7283:                case 0x5B: // bit_3_xiy
        !          7284:                case 0x5C: // bit_3_xiy
        !          7285:                case 0x5D: // bit_3_xiy
        !          7286:                case 0x5E: // bit_3_xiy
        !          7287:                case 0x5F: // bit_3_xiy
        !          7288:                        Bit(MemReadByte(wAddr), 3);
        !          7289:                        return 20;
        !          7290: 
        !          7291:                case 0x60: // bit_4_xiy
        !          7292:                case 0x61: // bit_4_xiy
        !          7293:                case 0x62: // bit_4_xiy
        !          7294:                case 0x63: // bit_4_xiy
        !          7295:                case 0x64: // bit_4_xiy
        !          7296:                case 0x65: // bit_4_xiy
        !          7297:                case 0x66: // bit_4_xiy
        !          7298:                case 0x67: // bit_4_xiy
        !          7299:                        Bit(MemReadByte(wAddr), 4);
        !          7300:                        return 20;
        !          7301: 
        !          7302:                case 0x68: // bit_5_xiy
        !          7303:                case 0x69: // bit_5_xiy
        !          7304:                case 0x6A: // bit_5_xiy
        !          7305:                case 0x6B: // bit_5_xiy
        !          7306:                case 0x6C: // bit_5_xiy
        !          7307:                case 0x6D: // bit_5_xiy
        !          7308:                case 0x6E: // bit_5_xiy
        !          7309:                case 0x6F: // bit_5_xiy
        !          7310:                        Bit(MemReadByte(wAddr), 5);
        !          7311:                        return 20;
        !          7312: 
        !          7313:                case 0x70: // bit_6_xiy
        !          7314:                case 0x71: // bit_6_xiy
        !          7315:                case 0x72: // bit_6_xiy
        !          7316:                case 0x73: // bit_6_xiy
        !          7317:                case 0x74: // bit_6_xiy
        !          7318:                case 0x75: // bit_6_xiy
        !          7319:                case 0x76: // bit_6_xiy
        !          7320:                case 0x77: // bit_6_xiy
        !          7321:                        Bit(MemReadByte(wAddr), 6);
        !          7322:                        return 20;
        !          7323: 
        !          7324:                case 0x78: // bit_7_xiy
        !          7325:                case 0x79: // bit_7_xiy
        !          7326:                case 0x7A: // bit_7_xiy
        !          7327:                case 0x7B: // bit_7_xiy
        !          7328:                case 0x7C: // bit_7_xiy
        !          7329:                case 0x7D: // bit_7_xiy
        !          7330:                case 0x7E: // bit_7_xiy
        !          7331:                case 0x7F: // bit_7_xiy
        !          7332:                        Bit(MemReadByte(wAddr), 7);
        !          7333:                        return 20;
        !          7334: 
        !          7335:                case 0x80: // no_op_xx 
        !          7336:                        return 0;
        !          7337:                
        !          7338:                case 0x81: // no_op_xx 
        !          7339:                        return 0;
        !          7340:                        
        !          7341:                case 0x82: // no_op_xx 
        !          7342:                        return 0;
        !          7343:                
        !          7344:                case 0x83: // no_op_xx 
        !          7345:                        return 0;
        !          7346:                
        !          7347:                case 0x84: // no_op_xx 
        !          7348:                        return 0;
        !          7349:                
        !          7350:                case 0x85: // no_op_xx 
        !          7351:                        return 0;
        !          7352:                
        !          7353:                case 0x86: // res_0_xiy
        !          7354:                        MemWriteByte(wAddr, Res(MemReadByte(wAddr), 0));
        !          7355:                        return 23;
        !          7356:                
        !          7357:                case 0x87: // no_op_xx 
        !          7358:                        return 0;
        !          7359: 
        !          7360:                case 0x88: // no_op_xx 
        !          7361:                        return 0;
        !          7362:                
        !          7363:                case 0x89: // no_op_xx 
        !          7364:                        return 0;
        !          7365:                
        !          7366:                case 0x8A: // no_op_xx 
        !          7367:                        return 0;
        !          7368:                
        !          7369:                case 0x8B: // no_op_xx 
        !          7370:                        return 0;
        !          7371:                
        !          7372:                case 0x8C: // no_op_xx 
        !          7373:                        return 0;
        !          7374:                
        !          7375:                case 0x8D: // no_op_xx 
        !          7376:                        return 0;
        !          7377:                
        !          7378:                case 0x8E: // res_1_xiy
        !          7379:                        MemWriteByte(wAddr, Res(MemReadByte(wAddr), 1));
        !          7380:                        return 23;
        !          7381:                
        !          7382:                case 0x8F: // no_op_xx 
        !          7383:                        return 0;
        !          7384: 
        !          7385:                case 0x90: // no_op_xx 
        !          7386:                        return 0;
        !          7387:                
        !          7388:                case 0x91: // no_op_xx 
        !          7389:                        return 0;
        !          7390:                        
        !          7391:                case 0x92: // no_op_xx 
        !          7392:                        return 0;
        !          7393:                
        !          7394:                case 0x93: // no_op_xx 
        !          7395:                        return 0;
        !          7396:                
        !          7397:                case 0x94: // no_op_xx 
        !          7398:                        return 0;
        !          7399:                
        !          7400:                case 0x95: // no_op_xx 
        !          7401:                        return 0;
        !          7402:                
        !          7403:                case 0x96: // res_2_xiy
        !          7404:                        MemWriteByte(wAddr, Res(MemReadByte(wAddr), 2));
        !          7405:                        return 23;
        !          7406:                
        !          7407:                case 0x97: // no_op_xx 
        !          7408:                        return 0;
        !          7409: 
        !          7410:                case 0x98: // no_op_xx 
        !          7411:                        return 0;
        !          7412:                
        !          7413:                case 0x99: // no_op_xx 
        !          7414:                        return 0;
        !          7415:                
        !          7416:                case 0x9A: // no_op_xx 
        !          7417:                        return 0;
        !          7418:                
        !          7419:                case 0x9B: // no_op_xx 
        !          7420:                        return 0;
        !          7421:                
        !          7422:                case 0x9C: // no_op_xx 
        !          7423:                        return 0;
        !          7424:                
        !          7425:                case 0x9D: // no_op_xx 
        !          7426:                        return 0;
        !          7427:                
        !          7428:                case 0x9E: // res_3_xiy
        !          7429:                        MemWriteByte(wAddr, Res(MemReadByte(wAddr), 3));
        !          7430:                        return 23;
        !          7431:                
        !          7432:                case 0x9F: // no_op_xx 
        !          7433:                        return 0;
        !          7434: 
        !          7435:                case 0xA0: // no_op_xx 
        !          7436:                        return 0;
        !          7437:                
        !          7438:                case 0xA1: // no_op_xx 
        !          7439:                        return 0;
        !          7440:                        
        !          7441:                case 0xA2: // no_op_xx 
        !          7442:                        return 0;
        !          7443:                
        !          7444:                case 0xA3: // no_op_xx 
        !          7445:                        return 0;
        !          7446:                
        !          7447:                case 0xA4: // no_op_xx 
        !          7448:                        return 0;
        !          7449:                
        !          7450:                case 0xA5: // no_op_xx 
        !          7451:                        return 0;
        !          7452:                
        !          7453:                case 0xA6: // res_4_xiy
        !          7454:                        MemWriteByte(wAddr, Res(MemReadByte(wAddr), 4));
        !          7455:                        return 23;
        !          7456:                
        !          7457:                case 0xA7: // no_op_xx 
        !          7458:                        return 0;
        !          7459: 
        !          7460:                case 0xA8: // no_op_xx 
        !          7461:                        return 0;
        !          7462:                
        !          7463:                case 0xA9: // no_op_xx 
        !          7464:                        return 0;
        !          7465:                
        !          7466:                case 0xAA: // no_op_xx 
        !          7467:                        return 0;
        !          7468:                
        !          7469:                case 0xAB: // no_op_xx 
        !          7470:                        return 0;
        !          7471:                
        !          7472:                case 0xAC: // no_op_xx 
        !          7473:                        return 0;
        !          7474:                
        !          7475:                case 0xAD: // no_op_xx 
        !          7476:                        return 0;
        !          7477:                
        !          7478:                case 0xAE: // res_5_xiy
        !          7479:                        MemWriteByte(wAddr, Res(MemReadByte(wAddr), 5));
        !          7480:                        return 23;
        !          7481:                
        !          7482:                case 0xAF: // no_op_xx 
        !          7483:                        return 0;
        !          7484: 
        !          7485:                case 0xB0: // no_op_xx 
        !          7486:                        return 0;
        !          7487:                
        !          7488:                case 0xB1: // no_op_xx 
        !          7489:                        return 0;
        !          7490:                        
        !          7491:                case 0xB2: // no_op_xx 
        !          7492:                        return 0;
        !          7493:                
        !          7494:                case 0xB3: // no_op_xx 
        !          7495:                        return 0;
        !          7496:                
        !          7497:                case 0xB4: // no_op_xx 
        !          7498:                        return 0;
        !          7499:                
        !          7500:                case 0xB5: // no_op_xx 
        !          7501:                        return 0;
        !          7502:                
        !          7503:                case 0xB6: // res_6_xiy
        !          7504:                        MemWriteByte(wAddr, Res(MemReadByte(wAddr), 6));
        !          7505:                        return 23;
        !          7506:                
        !          7507:                case 0xB7: // no_op_xx 
        !          7508:                        return 0;
        !          7509: 
        !          7510:                case 0xB8: // no_op_xx 
        !          7511:                        return 0;
        !          7512:                
        !          7513:                case 0xB9: // no_op_xx 
        !          7514:                        return 0;
        !          7515:                
        !          7516:                case 0xBA: // no_op_xx 
        !          7517:                        return 0;
        !          7518:                
        !          7519:                case 0xBB: // no_op_xx 
        !          7520:                        return 0;
        !          7521:                
        !          7522:                case 0xBC: // no_op_xx 
        !          7523:                        return 0;
        !          7524:                
        !          7525:                case 0xBD: // no_op_xx 
        !          7526:                        return 0;
        !          7527:                
        !          7528:                case 0xBE: // res_7_xiy
        !          7529:                        MemWriteByte(wAddr, Res(MemReadByte(wAddr), 7));
        !          7530:                        return 23;
        !          7531:                
        !          7532:                case 0xBF: // no_op_xx 
        !          7533:                        return 0;
        !          7534: 
        !          7535:                case 0xC0: // no_op_xx 
        !          7536:                        return 0;
        !          7537:                
        !          7538:                case 0xC1: // no_op_xx 
        !          7539:                        return 0;
        !          7540:                        
        !          7541:                case 0xC2: // no_op_xx 
        !          7542:                        return 0;
        !          7543:                
        !          7544:                case 0xC3: // no_op_xx 
        !          7545:                        return 0;
        !          7546:                
        !          7547:                case 0xC4: // no_op_xx 
        !          7548:                        return 0;
        !          7549:                
        !          7550:                case 0xC5: // no_op_xx 
        !          7551:                        return 0;
        !          7552:                
        !          7553:                case 0xC6: // set_0_xiy
        !          7554:                        MemWriteByte(wAddr, Set(MemReadByte(wAddr), 0));
        !          7555:                        return 23;
        !          7556:                
        !          7557:                case 0xC7: // no_op_xx 
        !          7558:                        return 0;
        !          7559: 
        !          7560:                case 0xC8: // no_op_xx 
        !          7561:                        return 0;
        !          7562:                
        !          7563:                case 0xC9: // no_op_xx 
        !          7564:                        return 0;
        !          7565:                
        !          7566:                case 0xCA: // no_op_xx 
        !          7567:                        return 0;
        !          7568:                
        !          7569:                case 0xCB: // no_op_xx 
        !          7570:                        return 0;
        !          7571:                
        !          7572:                case 0xCC: // no_op_xx 
        !          7573:                        return 0;
        !          7574:                
        !          7575:                case 0xCD: // no_op_xx 
        !          7576:                        return 0;
        !          7577:                
        !          7578:                case 0xCE: // set_1_xiy
        !          7579:                        MemWriteByte(wAddr, Set(MemReadByte(wAddr), 1));
        !          7580:                        return 23;
        !          7581:                
        !          7582:                case 0xCF: // no_op_xx 
        !          7583:                        return 0;
        !          7584: 
        !          7585:                case 0xD0: // no_op_xx 
        !          7586:                        return 0;
        !          7587:                
        !          7588:                case 0xD1: // no_op_xx 
        !          7589:                        return 0;
        !          7590:                        
        !          7591:                case 0xD2: // no_op_xx 
        !          7592:                        return 0;
        !          7593:                
        !          7594:                case 0xD3: // no_op_xx 
        !          7595:                        return 0;
        !          7596:                
        !          7597:                case 0xD4: // no_op_xx 
        !          7598:                        return 0;
        !          7599:                
        !          7600:                case 0xD5: // no_op_xx 
        !          7601:                        return 0;
        !          7602:                
        !          7603:                case 0xD6: // set_2_xiy
        !          7604:                        MemWriteByte(wAddr, Set(MemReadByte(wAddr), 2));
        !          7605:                        return 23;
        !          7606:                
        !          7607:                case 0xD7: // no_op_xx 
        !          7608:                        return 0;
        !          7609: 
        !          7610:                case 0xD8: // no_op_xx 
        !          7611:                        return 0;
        !          7612:                
        !          7613:                case 0xD9: // no_op_xx 
        !          7614:                        return 0;
        !          7615:                
        !          7616:                case 0xDA: // no_op_xx 
        !          7617:                        return 0;
        !          7618:                
        !          7619:                case 0xDB: // no_op_xx 
        !          7620:                        return 0;
        !          7621:                
        !          7622:                case 0xDC: // no_op_xx 
        !          7623:                        return 0;
        !          7624:                
        !          7625:                case 0xDD: // no_op_xx 
        !          7626:                        return 0;
        !          7627:                
        !          7628:                case 0xDE: // set_3_xiy
        !          7629:                        MemWriteByte(wAddr, Set(MemReadByte(wAddr), 3));
        !          7630:                        return 23;
        !          7631:                
        !          7632:                case 0xDF: // no_op_xx 
        !          7633:                        return 0;
        !          7634: 
        !          7635:                case 0xE0: // no_op_xx 
        !          7636:                        return 0;
        !          7637:                
        !          7638:                case 0xE1: // no_op_xx 
        !          7639:                        return 0;
        !          7640:                        
        !          7641:                case 0xE2: // no_op_xx 
        !          7642:                        return 0;
        !          7643:                
        !          7644:                case 0xE3: // no_op_xx 
        !          7645:                        return 0;
        !          7646:                
        !          7647:                case 0xE4: // no_op_xx 
        !          7648:                        return 0;
        !          7649:                
        !          7650:                case 0xE5: // no_op_xx 
        !          7651:                        return 0;
        !          7652:                
        !          7653:                case 0xE6: // set_4_xiy
        !          7654:                        MemWriteByte(wAddr, Set(MemReadByte(wAddr), 4));
        !          7655:                        return 23;
        !          7656:                
        !          7657:                case 0xE7: // no_op_xx 
        !          7658:                        return 0;
        !          7659: 
        !          7660:                case 0xE8: // no_op_xx 
        !          7661:                        return 0;
        !          7662:                
        !          7663:                case 0xE9: // no_op_xx 
        !          7664:                        return 0;
        !          7665:                
        !          7666:                case 0xEA: // no_op_xx 
        !          7667:                        return 0;
        !          7668:                
        !          7669:                case 0xEB: // no_op_xx 
        !          7670:                        return 0;
        !          7671:                
        !          7672:                case 0xEC: // no_op_xx 
        !          7673:                        return 0;
        !          7674:                
        !          7675:                case 0xED: // no_op_xx 
        !          7676:                        return 0;
        !          7677:                
        !          7678:                case 0xEE: // set_5_xiy
        !          7679:                        MemWriteByte(wAddr, Set(MemReadByte(wAddr), 5));
        !          7680:                        return 23;
        !          7681:                
        !          7682:                case 0xEF: // no_op_xx 
        !          7683:                        return 0;
        !          7684: 
        !          7685:                case 0xF0: // no_op_xx 
        !          7686:                        return 0;
        !          7687:                
        !          7688:                case 0xF1: // no_op_xx 
        !          7689:                        return 0;
        !          7690:                        
        !          7691:                case 0xF2: // no_op_xx 
        !          7692:                        return 0;
        !          7693:                
        !          7694:                case 0xF3: // no_op_xx 
        !          7695:                        return 0;
        !          7696:                
        !          7697:                case 0xF4: // no_op_xx 
        !          7698:                        return 0;
        !          7699:                
        !          7700:                case 0xF5: // no_op_xx 
        !          7701:                        return 0;
        !          7702:                
        !          7703:                case 0xF6: // set_6_xiy
        !          7704:                        MemWriteByte(wAddr, Set(MemReadByte(wAddr), 6));
        !          7705:                        return 23;
        !          7706:                
        !          7707:                case 0xF7: // no_op_xx 
        !          7708:                        return 0;
        !          7709: 
        !          7710:                case 0xF8: // no_op_xx 
        !          7711:                        return 0;
        !          7712:                
        !          7713:                case 0xF9: // no_op_xx 
        !          7714:                        return 0;
        !          7715:                
        !          7716:                case 0xFA: // no_op_xx 
        !          7717:                        return 0;
        !          7718:                
        !          7719:                case 0xFB: // no_op_xx 
        !          7720:                        return 0;
        !          7721:                
        !          7722:                case 0xFC: // no_op_xx 
        !          7723:                        return 0;
        !          7724:                
        !          7725:                case 0xFD: // no_op_xx 
        !          7726:                        return 0;
        !          7727:                
        !          7728:                case 0xFE: // set_7_xiy
        !          7729:                        MemWriteByte(wAddr, Set(MemReadByte(wAddr), 7));
        !          7730:                        return 23;
        !          7731:                
        !          7732:                case 0xFF: // no_op_x
        !          7733:                        return 0;
        !          7734: 
        !          7735:                default:
        !          7736:                        _ASSERT(FALSE);
        !          7737:                        return 0;
        !          7738:        }
        !          7739: }
        !          7740: 
        !          7741: /* ***************************************************************************
        !          7742:  * DDCB prefixed opcodes
        !          7743:  * ***************************************************************************
        !          7744:  */
        !          7745: 
        !          7746: int HandleDDCB() {
        !          7747:        const WORD wAddr = m_regIX + (signed char)ImmedByte();
        !          7748:        const BYTE bOpcode = ImmedByte();
        !          7749: 
        !          7750:        switch (bOpcode)
        !          7751:        {
        !          7752:                case 0x00: // no_op_xx 
        !          7753:                        return 0;
        !          7754:                
        !          7755:                case 0x01: // no_op_xx 
        !          7756:                        return 0;
        !          7757:                        
        !          7758:                case 0x02: // no_op_xx 
        !          7759:                        return 0;
        !          7760:                
        !          7761:                case 0x03: // no_op_xx 
        !          7762:                        return 0;
        !          7763:                
        !          7764:                case 0x04: // no_op_xx 
        !          7765:                        return 0;
        !          7766:                
        !          7767:                case 0x05: // no_op_xx 
        !          7768:                        return 0;
        !          7769:                
        !          7770:                case 0x06: // rlc_xix  
        !          7771:                        MemWriteByte(wAddr, Rlc(MemReadByte(wAddr)));
        !          7772:                        return 23;
        !          7773:                
        !          7774:                case 0x07: // no_op_xx 
        !          7775:                        return 0;
        !          7776: 
        !          7777:                case 0x08: // no_op_xx 
        !          7778:                        return 0;
        !          7779:                
        !          7780:                case 0x09: // no_op_xx 
        !          7781:                        return 0;
        !          7782:                
        !          7783:                case 0x0A: // no_op_xx 
        !          7784:                        return 0;
        !          7785:                
        !          7786:                case 0x0B: // no_op_xx 
        !          7787:                        return 0;
        !          7788:                
        !          7789:                case 0x0C: // no_op_xx 
        !          7790:                        return 0;
        !          7791:                
        !          7792:                case 0x0D: // no_op_xx 
        !          7793:                        return 0;
        !          7794:                
        !          7795:                case 0x0E: // rrc_xix  
        !          7796:                        MemWriteByte(wAddr, Rrc(MemReadByte(wAddr)));
        !          7797:                        return 23;
        !          7798:                
        !          7799:                case 0x0F: // no_op_xx 
        !          7800:                        return 0;
        !          7801: 
        !          7802:                case 0x10: // no_op_xx 
        !          7803:                        return 0;
        !          7804:                
        !          7805:                case 0x11: // no_op_xx 
        !          7806:                        return 0;
        !          7807:                        
        !          7808:                case 0x12: // no_op_xx 
        !          7809:                        return 0;
        !          7810:                
        !          7811:                case 0x13: // no_op_xx 
        !          7812:                        return 0;
        !          7813:                
        !          7814:                case 0x14: // no_op_xx 
        !          7815:                        return 0;
        !          7816:                
        !          7817:                case 0x15: // no_op_xx 
        !          7818:                        return 0;
        !          7819:                
        !          7820:                case 0x16: // rl_xix   
        !          7821:                        MemWriteByte(wAddr, Rl(MemReadByte(wAddr)));
        !          7822:                        return 23;
        !          7823:                
        !          7824:                case 0x17: // no_op_xx 
        !          7825:                        return 0;
        !          7826: 
        !          7827:                case 0x18: // no_op_xx 
        !          7828:                        return 0;
        !          7829:                
        !          7830:                case 0x19: // no_op_xx 
        !          7831:                        return 0;
        !          7832:                
        !          7833:                case 0x1A: // no_op_xx 
        !          7834:                        return 0;
        !          7835:                
        !          7836:                case 0x1B: // no_op_xx 
        !          7837:                        return 0;
        !          7838:                
        !          7839:                case 0x1C: // no_op_xx 
        !          7840:                        return 0;
        !          7841:                
        !          7842:                case 0x1D: // no_op_xx 
        !          7843:                        return 0;
        !          7844:                
        !          7845:                case 0x1E: // rr_xix   
        !          7846:                        MemWriteByte(wAddr, Rr(MemReadByte(wAddr)));
        !          7847:                        return 23;
        !          7848:                
        !          7849:                case 0x1F: // no_op_xx 
        !          7850:                        return 0;
        !          7851: 
        !          7852:                case 0x20: // no_op_xx 
        !          7853:                        return 0;
        !          7854:                
        !          7855:                case 0x21: // no_op_xx 
        !          7856:                        return 0;
        !          7857:                        
        !          7858:                case 0x22: // no_op_xx 
        !          7859:                        return 0;
        !          7860:                
        !          7861:                case 0x23: // no_op_xx 
        !          7862:                        return 0;
        !          7863:                
        !          7864:                case 0x24: // no_op_xx 
        !          7865:                        return 0;
        !          7866:                
        !          7867:                case 0x25: // no_op_xx 
        !          7868:                        return 0;
        !          7869:                
        !          7870:                case 0x26: // sla_xix  
        !          7871:                        MemWriteByte(wAddr, Sla(MemReadByte(wAddr)));
        !          7872:                        return 23;
        !          7873:                
        !          7874:                case 0x27: // no_op_xx 
        !          7875:                        return 0;
        !          7876: 
        !          7877:                case 0x28: // no_op_xx 
        !          7878:                        return 0;
        !          7879:                
        !          7880:                case 0x29: // no_op_xx 
        !          7881:                        return 0;
        !          7882:                
        !          7883:                case 0x2A: // no_op_xx 
        !          7884:                        return 0;
        !          7885:                
        !          7886:                case 0x2B: // no_op_xx 
        !          7887:                        return 0;
        !          7888:                
        !          7889:                case 0x2C: // no_op_xx 
        !          7890:                        return 0;
        !          7891:                
        !          7892:                case 0x2D: // no_op_xx 
        !          7893:                        return 0;
        !          7894:                
        !          7895:                case 0x2E: // sra_xix  
        !          7896:                        MemWriteByte(wAddr, Sra(MemReadByte(wAddr)));
        !          7897:                        return 23;
        !          7898:                
        !          7899:                case 0x2F: // no_op_xx 
        !          7900:                        return 0;
        !          7901: 
        !          7902:                case 0x30: // no_op_xx 
        !          7903:                        return 0;
        !          7904:                
        !          7905:                case 0x31: // no_op_xx 
        !          7906:                        return 0;
        !          7907:                        
        !          7908:                case 0x32: // no_op_xx 
        !          7909:                        return 0;
        !          7910:                
        !          7911:                case 0x33: // no_op_xx 
        !          7912:                        return 0;
        !          7913:                
        !          7914:                case 0x34: // no_op_xx 
        !          7915:                        return 0;
        !          7916:                
        !          7917:                case 0x35: // no_op_xx 
        !          7918:                        return 0;
        !          7919:                
        !          7920:                case 0x36: // sll_xix  
        !          7921:                        MemWriteByte(wAddr, Sll(MemReadByte(wAddr)));
        !          7922:                        return 23;
        !          7923:                
        !          7924:                case 0x37: // no_op_xx 
        !          7925:                        return 0;
        !          7926: 
        !          7927:                case 0x38: // no_op_xx 
        !          7928:                        return 0;
        !          7929:                
        !          7930:                case 0x39: // no_op_xx 
        !          7931:                        return 0;
        !          7932:                
        !          7933:                case 0x3A: // no_op_xx 
        !          7934:                        return 0;
        !          7935:                
        !          7936:                case 0x3B: // no_op_xx 
        !          7937:                        return 0;
        !          7938:                
        !          7939:                case 0x3C: // no_op_xx 
        !          7940:                        return 0;
        !          7941:                
        !          7942:                case 0x3D: // no_op_xx 
        !          7943:                        return 0;
        !          7944:                
        !          7945:                case 0x3E: // srl_xix  
        !          7946:                        MemWriteByte(wAddr, Srl(MemReadByte(wAddr)));
        !          7947:                        return 23;
        !          7948:                
        !          7949:                case 0x3F: // no_op_xx 
        !          7950:                        return 0;
        !          7951: 
        !          7952:                case 0x40: // bit_0_xix
        !          7953:                case 0x41: // bit_0_xix
        !          7954:                case 0x42: // bit_0_xix
        !          7955:                case 0x43: // bit_0_xix
        !          7956:                case 0x44: // bit_0_xix
        !          7957:                case 0x45: // bit_0_xix
        !          7958:                case 0x46: // bit_0_xix
        !          7959:                case 0x47: // bit_0_xix
        !          7960:                        Bit(MemReadByte(wAddr), 0);
        !          7961:                        return 20;
        !          7962: 
        !          7963:                case 0x48: // bit_1_xix
        !          7964:                case 0x49: // bit_1_xix
        !          7965:                case 0x4A: // bit_1_xix
        !          7966:                case 0x4B: // bit_1_xix
        !          7967:                case 0x4C: // bit_1_xix
        !          7968:                case 0x4D: // bit_1_xix
        !          7969:                case 0x4E: // bit_1_xix
        !          7970:                case 0x4F: // bit_1_xix
        !          7971:                        Bit(MemReadByte(wAddr), 1);
        !          7972:                        return 20;
        !          7973: 
        !          7974:                case 0x50: // bit_2_xix
        !          7975:                case 0x51: // bit_2_xix
        !          7976:                case 0x52: // bit_2_xix
        !          7977:                case 0x53: // bit_2_xix
        !          7978:                case 0x54: // bit_2_xix
        !          7979:                case 0x55: // bit_2_xix
        !          7980:                case 0x56: // bit_2_xix
        !          7981:                case 0x57: // bit_2_xix
        !          7982:                        Bit(MemReadByte(wAddr), 2);
        !          7983:                        return 20;
        !          7984: 
        !          7985:                case 0x58: // bit_3_xix
        !          7986:                case 0x59: // bit_3_xix
        !          7987:                case 0x5A: // bit_3_xix
        !          7988:                case 0x5B: // bit_3_xix
        !          7989:                case 0x5C: // bit_3_xix
        !          7990:                case 0x5D: // bit_3_xix
        !          7991:                case 0x5E: // bit_3_xix
        !          7992:                case 0x5F: // bit_3_xix
        !          7993:                        Bit(MemReadByte(wAddr), 3);
        !          7994:                        return 20;
        !          7995: 
        !          7996:                case 0x60: // bit_4_xix
        !          7997:                case 0x61: // bit_4_xix
        !          7998:                case 0x62: // bit_4_xix
        !          7999:                case 0x63: // bit_4_xix
        !          8000:                case 0x64: // bit_4_xix
        !          8001:                case 0x65: // bit_4_xix
        !          8002:                case 0x66: // bit_4_xix
        !          8003:                case 0x67: // bit_4_xix
        !          8004:                        Bit(MemReadByte(wAddr), 4);
        !          8005:                        return 20;
        !          8006: 
        !          8007:                case 0x68: // bit_5_xix
        !          8008:                case 0x69: // bit_5_xix
        !          8009:                case 0x6A: // bit_5_xix
        !          8010:                case 0x6B: // bit_5_xix
        !          8011:                case 0x6C: // bit_5_xix
        !          8012:                case 0x6D: // bit_5_xix
        !          8013:                case 0x6E: // bit_5_xix
        !          8014:                case 0x6F: // bit_5_xix
        !          8015:                        Bit(MemReadByte(wAddr), 5);
        !          8016:                        return 20;
        !          8017: 
        !          8018:                case 0x70: // bit_6_xix
        !          8019:                case 0x71: // bit_6_xix
        !          8020:                case 0x72: // bit_6_xix
        !          8021:                case 0x73: // bit_6_xix
        !          8022:                case 0x74: // bit_6_xix
        !          8023:                case 0x75: // bit_6_xix
        !          8024:                case 0x76: // bit_6_xix
        !          8025:                case 0x77: // bit_6_xix
        !          8026:                        Bit(MemReadByte(wAddr), 6);
        !          8027:                        return 20;
        !          8028: 
        !          8029:                case 0x78: // bit_7_xix
        !          8030:                case 0x79: // bit_7_xix
        !          8031:                case 0x7A: // bit_7_xix
        !          8032:                case 0x7B: // bit_7_xix
        !          8033:                case 0x7C: // bit_7_xix
        !          8034:                case 0x7D: // bit_7_xix
        !          8035:                case 0x7E: // bit_7_xix
        !          8036:                case 0x7F: // bit_7_xix
        !          8037:                        Bit(MemReadByte(wAddr), 7);
        !          8038:                        return 20;
        !          8039: 
        !          8040:                case 0x80: // no_op_xx 
        !          8041:                        return 0;
        !          8042:                
        !          8043:                case 0x81: // no_op_xx 
        !          8044:                        return 0;
        !          8045:                        
        !          8046:                case 0x82: // no_op_xx 
        !          8047:                        return 0;
        !          8048:                
        !          8049:                case 0x83: // no_op_xx 
        !          8050:                        return 0;
        !          8051:                
        !          8052:                case 0x84: // no_op_xx 
        !          8053:                        return 0;
        !          8054:                
        !          8055:                case 0x85: // no_op_xx 
        !          8056:                        return 0;
        !          8057:                
        !          8058:                case 0x86: // res_0_xix
        !          8059:                        MemWriteByte(wAddr, Res(MemReadByte(wAddr), 0));
        !          8060:                        return 23;
        !          8061:                
        !          8062:                case 0x87: // no_op_xx 
        !          8063:                        return 0;
        !          8064: 
        !          8065:                case 0x88: // no_op_xx 
        !          8066:                        return 0;
        !          8067:                
        !          8068:                case 0x89: // no_op_xx 
        !          8069:                        return 0;
        !          8070:                
        !          8071:                case 0x8A: // no_op_xx 
        !          8072:                        return 0;
        !          8073:                
        !          8074:                case 0x8B: // no_op_xx 
        !          8075:                        return 0;
        !          8076:                
        !          8077:                case 0x8C: // no_op_xx 
        !          8078:                        return 0;
        !          8079:                
        !          8080:                case 0x8D: // no_op_xx 
        !          8081:                        return 0;
        !          8082:                
        !          8083:                case 0x8E: // res_1_xix
        !          8084:                        MemWriteByte(wAddr, Res(MemReadByte(wAddr), 1));
        !          8085:                        return 23;
        !          8086:                
        !          8087:                case 0x8F: // no_op_xx 
        !          8088:                        return 0;
        !          8089: 
        !          8090:                case 0x90: // no_op_xx 
        !          8091:                        return 0;
        !          8092:                
        !          8093:                case 0x91: // no_op_xx 
        !          8094:                        return 0;
        !          8095:                        
        !          8096:                case 0x92: // no_op_xx 
        !          8097:                        return 0;
        !          8098:                
        !          8099:                case 0x93: // no_op_xx 
        !          8100:                        return 0;
        !          8101:                
        !          8102:                case 0x94: // no_op_xx 
        !          8103:                        return 0;
        !          8104:                
        !          8105:                case 0x95: // no_op_xx 
        !          8106:                        return 0;
        !          8107:                
        !          8108:                case 0x96: // res_2_xix
        !          8109:                        MemWriteByte(wAddr, Res(MemReadByte(wAddr), 2));
        !          8110:                        return 23;
        !          8111:                
        !          8112:                case 0x97: // no_op_xx 
        !          8113:                        return 0;
        !          8114: 
        !          8115:                case 0x98: // no_op_xx 
        !          8116:                        return 0;
        !          8117:                
        !          8118:                case 0x99: // no_op_xx 
        !          8119:                        return 0;
        !          8120:                
        !          8121:                case 0x9A: // no_op_xx 
        !          8122:                        return 0;
        !          8123:                
        !          8124:                case 0x9B: // no_op_xx 
        !          8125:                        return 0;
        !          8126:                
        !          8127:                case 0x9C: // no_op_xx 
        !          8128:                        return 0;
        !          8129:                
        !          8130:                case 0x9D: // no_op_xx 
        !          8131:                        return 0;
        !          8132:                
        !          8133:                case 0x9E: // res_3_xix
        !          8134:                        MemWriteByte(wAddr, Res(MemReadByte(wAddr), 3));
        !          8135:                        return 23;
        !          8136:                
        !          8137:                case 0x9F: // no_op_xx 
        !          8138:                        return 0;
        !          8139: 
        !          8140:                case 0xA0: // no_op_xx 
        !          8141:                        return 0;
        !          8142:                
        !          8143:                case 0xA1: // no_op_xx 
        !          8144:                        return 0;
        !          8145:                        
        !          8146:                case 0xA2: // no_op_xx 
        !          8147:                        return 0;
        !          8148:                
        !          8149:                case 0xA3: // no_op_xx 
        !          8150:                        return 0;
        !          8151:                
        !          8152:                case 0xA4: // no_op_xx 
        !          8153:                        return 0;
        !          8154:                
        !          8155:                case 0xA5: // no_op_xx 
        !          8156:                        return 0;
        !          8157:                
        !          8158:                case 0xA6: // res_4_xix
        !          8159:                        MemWriteByte(wAddr, Res(MemReadByte(wAddr), 4));
        !          8160:                        return 23;
        !          8161:                
        !          8162:                case 0xA7: // no_op_xx 
        !          8163:                        return 0;
        !          8164: 
        !          8165:                case 0xA8: // no_op_xx 
        !          8166:                        return 0;
        !          8167:                
        !          8168:                case 0xA9: // no_op_xx 
        !          8169:                        return 0;
        !          8170:                
        !          8171:                case 0xAA: // no_op_xx 
        !          8172:                        return 0;
        !          8173:                
        !          8174:                case 0xAB: // no_op_xx 
        !          8175:                        return 0;
        !          8176:                
        !          8177:                case 0xAC: // no_op_xx 
        !          8178:                        return 0;
        !          8179:                
        !          8180:                case 0xAD: // no_op_xx 
        !          8181:                        return 0;
        !          8182:                
        !          8183:                case 0xAE: // res_5_xix
        !          8184:                        MemWriteByte(wAddr, Res(MemReadByte(wAddr), 5));
        !          8185:                        return 23;
        !          8186:                
        !          8187:                case 0xAF: // no_op_xx 
        !          8188:                        return 0;
        !          8189: 
        !          8190:                case 0xB0: // no_op_xx 
        !          8191:                        return 0;
        !          8192:                
        !          8193:                case 0xB1: // no_op_xx 
        !          8194:                        return 0;
        !          8195:                        
        !          8196:                case 0xB2: // no_op_xx 
        !          8197:                        return 0;
        !          8198:                
        !          8199:                case 0xB3: // no_op_xx 
        !          8200:                        return 0;
        !          8201:                
        !          8202:                case 0xB4: // no_op_xx 
        !          8203:                        return 0;
        !          8204:                
        !          8205:                case 0xB5: // no_op_xx 
        !          8206:                        return 0;
        !          8207:                
        !          8208:                case 0xB6: // res_6_xix
        !          8209:                        MemWriteByte(wAddr, Res(MemReadByte(wAddr), 6));
        !          8210:                        return 23;
        !          8211:                
        !          8212:                case 0xB7: // no_op_xx 
        !          8213:                        return 0;
        !          8214: 
        !          8215:                case 0xB8: // no_op_xx 
        !          8216:                        return 0;
        !          8217:                
        !          8218:                case 0xB9: // no_op_xx 
        !          8219:                        return 0;
        !          8220:                
        !          8221:                case 0xBA: // no_op_xx 
        !          8222:                        return 0;
        !          8223:                
        !          8224:                case 0xBB: // no_op_xx 
        !          8225:                        return 0;
        !          8226:                
        !          8227:                case 0xBC: // no_op_xx 
        !          8228:                        return 0;
        !          8229:                
        !          8230:                case 0xBD: // no_op_xx 
        !          8231:                        return 0;
        !          8232:                
        !          8233:                case 0xBE: // res_7_xix
        !          8234:                        MemWriteByte(wAddr, Res(MemReadByte(wAddr), 7));
        !          8235:                        return 23;
        !          8236:                
        !          8237:                case 0xBF: // no_op_xx 
        !          8238:                        return 0;
        !          8239: 
        !          8240:                case 0xC0: // no_op_xx 
        !          8241:                        return 0;
        !          8242:                
        !          8243:                case 0xC1: // no_op_xx 
        !          8244:                        return 0;
        !          8245:                        
        !          8246:                case 0xC2: // no_op_xx 
        !          8247:                        return 0;
        !          8248:                
        !          8249:                case 0xC3: // no_op_xx 
        !          8250:                        return 0;
        !          8251:                
        !          8252:                case 0xC4: // no_op_xx 
        !          8253:                        return 0;
        !          8254:                
        !          8255:                case 0xC5: // no_op_xx 
        !          8256:                        return 0;
        !          8257:                
        !          8258:                case 0xC6: // set_0_xix
        !          8259:                        MemWriteByte(wAddr, Set(MemReadByte(wAddr), 0));
        !          8260:                        return 23;
        !          8261:                
        !          8262:                case 0xC7: // no_op_xx 
        !          8263:                        return 0;
        !          8264: 
        !          8265:                case 0xC8: // no_op_xx 
        !          8266:                        return 0;
        !          8267:                
        !          8268:                case 0xC9: // no_op_xx 
        !          8269:                        return 0;
        !          8270:                
        !          8271:                case 0xCA: // no_op_xx 
        !          8272:                        return 0;
        !          8273:                
        !          8274:                case 0xCB: // no_op_xx 
        !          8275:                        return 0;
        !          8276:                
        !          8277:                case 0xCC: // no_op_xx 
        !          8278:                        return 0;
        !          8279:                
        !          8280:                case 0xCD: // no_op_xx 
        !          8281:                        return 0;
        !          8282:                
        !          8283:                case 0xCE: // set_1_xix
        !          8284:                        MemWriteByte(wAddr, Set(MemReadByte(wAddr), 1));
        !          8285:                        return 23;
        !          8286:                
        !          8287:                case 0xCF: // no_op_xx 
        !          8288:                        return 0;
        !          8289: 
        !          8290:                case 0xD0: // no_op_xx 
        !          8291:                        return 0;
        !          8292:                
        !          8293:                case 0xD1: // no_op_xx 
        !          8294:                        return 0;
        !          8295:                        
        !          8296:                case 0xD2: // no_op_xx 
        !          8297:                        return 0;
        !          8298:                
        !          8299:                case 0xD3: // no_op_xx 
        !          8300:                        return 0;
        !          8301:                
        !          8302:                case 0xD4: // no_op_xx 
        !          8303:                        return 0;
        !          8304:                
        !          8305:                case 0xD5: // no_op_xx 
        !          8306:                        return 0;
        !          8307:                
        !          8308:                case 0xD6: // set_2_xix
        !          8309:                        MemWriteByte(wAddr, Set(MemReadByte(wAddr), 2));
        !          8310:                        return 23;
        !          8311:                
        !          8312:                case 0xD7: // no_op_xx 
        !          8313:                        return 0;
        !          8314: 
        !          8315:                case 0xD8: // no_op_xx 
        !          8316:                        return 0;
        !          8317:                
        !          8318:                case 0xD9: // no_op_xx 
        !          8319:                        return 0;
        !          8320:                
        !          8321:                case 0xDA: // no_op_xx 
        !          8322:                        return 0;
        !          8323:                
        !          8324:                case 0xDB: // no_op_xx 
        !          8325:                        return 0;
        !          8326:                
        !          8327:                case 0xDC: // no_op_xx 
        !          8328:                        return 0;
        !          8329:                
        !          8330:                case 0xDD: // no_op_xx 
        !          8331:                        return 0;
        !          8332:                
        !          8333:                case 0xDE: // set_3_xix
        !          8334:                        MemWriteByte(wAddr, Set(MemReadByte(wAddr), 3));
        !          8335:                        return 23;
        !          8336:                
        !          8337:                case 0xDF: // no_op_xx 
        !          8338:                        return 0;
        !          8339: 
        !          8340:                case 0xE0: // no_op_xx 
        !          8341:                        return 0;
        !          8342:                
        !          8343:                case 0xE1: // no_op_xx 
        !          8344:                        return 0;
        !          8345:                        
        !          8346:                case 0xE2: // no_op_xx 
        !          8347:                        return 0;
        !          8348:                
        !          8349:                case 0xE3: // no_op_xx 
        !          8350:                        return 0;
        !          8351:                
        !          8352:                case 0xE4: // no_op_xx 
        !          8353:                        return 0;
        !          8354:                
        !          8355:                case 0xE5: // no_op_xx 
        !          8356:                        return 0;
        !          8357:                
        !          8358:                case 0xE6: // set_4_xix
        !          8359:                        MemWriteByte(wAddr, Set(MemReadByte(wAddr), 4));
        !          8360:                        return 23;
        !          8361:                
        !          8362:                case 0xE7: // no_op_xx 
        !          8363:                        return 0;
        !          8364: 
        !          8365:                case 0xE8: // no_op_xx 
        !          8366:                        return 0;
        !          8367:                
        !          8368:                case 0xE9: // no_op_xx 
        !          8369:                        return 0;
        !          8370:                
        !          8371:                case 0xEA: // no_op_xx 
        !          8372:                        return 0;
        !          8373:                
        !          8374:                case 0xEB: // no_op_xx 
        !          8375:                        return 0;
        !          8376:                
        !          8377:                case 0xEC: // no_op_xx 
        !          8378:                        return 0;
        !          8379:                
        !          8380:                case 0xED: // no_op_xx 
        !          8381:                        return 0;
        !          8382:                
        !          8383:                case 0xEE: // set_5_xix
        !          8384:                        MemWriteByte(wAddr, Set(MemReadByte(wAddr), 5));
        !          8385:                        return 23;
        !          8386:                
        !          8387:                case 0xEF: // no_op_xx 
        !          8388:                        return 0;
        !          8389: 
        !          8390:                case 0xF0: // no_op_xx 
        !          8391:                        return 0;
        !          8392:                
        !          8393:                case 0xF1: // no_op_xx 
        !          8394:                        return 0;
        !          8395:                        
        !          8396:                case 0xF2: // no_op_xx 
        !          8397:                        return 0;
        !          8398:                
        !          8399:                case 0xF3: // no_op_xx 
        !          8400:                        return 0;
        !          8401:                
        !          8402:                case 0xF4: // no_op_xx 
        !          8403:                        return 0;
        !          8404:                
        !          8405:                case 0xF5: // no_op_xx 
        !          8406:                        return 0;
        !          8407:                
        !          8408:                case 0xF6: // set_6_xix
        !          8409:                        MemWriteByte(wAddr, Set(MemReadByte(wAddr), 6));
        !          8410:                        return 23;
        !          8411:                
        !          8412:                case 0xF7: // no_op_xx 
        !          8413:                        return 0;
        !          8414: 
        !          8415:                case 0xF8: // no_op_xx 
        !          8416:                        return 0;
        !          8417:                
        !          8418:                case 0xF9: // no_op_xx 
        !          8419:                        return 0;
        !          8420:                
        !          8421:                case 0xFA: // no_op_xx 
        !          8422:                        return 0;
        !          8423:                
        !          8424:                case 0xFB: // no_op_xx 
        !          8425:                        return 0;
        !          8426:                
        !          8427:                case 0xFC: // no_op_xx 
        !          8428:                        return 0;
        !          8429:                
        !          8430:                case 0xFD: // no_op_xx 
        !          8431:                        return 0;
        !          8432:                
        !          8433:                case 0xFE: // set_7_xix
        !          8434:                        MemWriteByte(wAddr, Set(MemReadByte(wAddr), 7));
        !          8435:                        return 23;
        !          8436:                
        !          8437:                case 0xFF: // no_op_x
        !          8438:                        return 0;
        !          8439: 
        !          8440:                default:
        !          8441:                        _ASSERT(FALSE);
        !          8442:                        return 0;
        !          8443:        }
        !          8444: }
        !          8445: 
        !          8446: /* ***************************************************************************
        !          8447:  * Debugger shit
        !          8448:  * ***************************************************************************
        !          8449:  */
        !          8450: 
        !          8451: /*** Z80Em: Portable Z80 emulator *******************************************/
        !          8452: /***                                                                      ***/
        !          8453: /***                               Z80Dasm.h                              ***/
        !          8454: /***                                                                      ***/
        !          8455: /*** This file contains a routine to disassemble a buffer containing Z80  ***/
        !          8456: /*** opcodes. It is included from Z80Debug.c and z80dasm.c                ***/
        !          8457: /***                                                                      ***/
        !          8458: /*** Copyright (C) Marcel de Kogel 1996,1997                              ***/
        !          8459: /***     You are not allowed to distribute this software commercially     ***/
        !          8460: /***     Please, notify me, if you make any changes to this file          ***/
        !          8461: /****************************************************************************/
        !          8462: 
        !          8463: #include <stdio.h>
        !          8464: #include <string.h>
        !          8465: 
        !          8466: static char *mnemonic_xx_cb[256]=
        !          8467: {
        !          8468:  "#","#","#","#","#","#","rlc Y"  ,"#",
        !          8469:  "#","#","#","#","#","#","rrc Y"  ,"#",
        !          8470:  "#","#","#","#","#","#","rl Y"   ,"#",
        !          8471:  "#","#","#","#","#","#","rr Y"   ,"#",
        !          8472:  "#","#","#","#","#","#","sla Y"  ,"#",
        !          8473:  "#","#","#","#","#","#","sra Y"  ,"#",
        !          8474:  "#","#","#","#","#","#","sll Y"  ,"#",
        !          8475:  "#","#","#","#","#","#","srl Y"  ,"#",
        !          8476:  "#","#","#","#","#","#","bit 0,Y","#",
        !          8477:  "#","#","#","#","#","#","bit 1,Y","#",
        !          8478:  "#","#","#","#","#","#","bit 2,Y","#",
        !          8479:  "#","#","#","#","#","#","bit 3,Y","#",
        !          8480:  "#","#","#","#","#","#","bit 4,Y","#",
        !          8481:  "#","#","#","#","#","#","bit 5,Y","#",
        !          8482:  "#","#","#","#","#","#","bit 6,Y","#",
        !          8483:  "#","#","#","#","#","#","bit 7,Y","#",
        !          8484:  "#","#","#","#","#","#","res 0,Y","#",
        !          8485:  "#","#","#","#","#","#","res 1,Y","#",
        !          8486:  "#","#","#","#","#","#","res 2,Y","#",
        !          8487:  "#","#","#","#","#","#","res 3,Y","#",
        !          8488:  "#","#","#","#","#","#","res 4,Y","#",
        !          8489:  "#","#","#","#","#","#","res 5,Y","#",
        !          8490:  "#","#","#","#","#","#","res 6,Y","#",
        !          8491:  "#","#","#","#","#","#","res 7,Y","#",
        !          8492:  "#","#","#","#","#","#","set 0,Y","#",
        !          8493:  "#","#","#","#","#","#","set 1,Y","#",
        !          8494:  "#","#","#","#","#","#","set 2,Y","#",
        !          8495:  "#","#","#","#","#","#","set 3,Y","#",
        !          8496:  "#","#","#","#","#","#","set 4,Y","#",
        !          8497:  "#","#","#","#","#","#","set 5,Y","#",
        !          8498:  "#","#","#","#","#","#","set 6,Y","#",
        !          8499:  "#","#","#","#","#","#","set 7,Y","#"
        !          8500: };
        !          8501: 
        !          8502: static char *mnemonic_cb[256]=
        !          8503: {
        !          8504:  "rlc b"  ,"rlc c"  ,"rlc d"  ,"rlc e"  ,"rlc h"  ,"rlc l"  ,"rlc (hl)"  ,"rlc a"  ,
        !          8505:  "rrc b"  ,"rrc c"  ,"rrc d"  ,"rrc e"  ,"rrc h"  ,"rrc l"  ,"rrc (hl)"  ,"rrc a"  ,
        !          8506:  "rl b"   ,"rl c"   ,"rl d"   ,"rl e"   ,"rl h"   ,"rl l"   ,"rl (hl)"   ,"rl a"   ,
        !          8507:  "rr b"   ,"rr c"   ,"rr d"   ,"rr e"   ,"rr h"   ,"rr l"   ,"rr (hl)"   ,"rr a"   ,
        !          8508:  "sla b"  ,"sla c"  ,"sla d"  ,"sla e"  ,"sla h"  ,"sla l"  ,"sla (hl)"  ,"sla a"  ,
        !          8509:  "sra b"  ,"sra c"  ,"sra d"  ,"sra e"  ,"sra h"  ,"sra l"  ,"sra (hl)"  ,"sra a"  ,
        !          8510:  "sll b"  ,"sll c"  ,"sll d"  ,"sll e"  ,"sll h"  ,"sll l"  ,"sll (hl)"  ,"sll a"  ,
        !          8511:  "srl b"  ,"srl c"  ,"srl d"  ,"srl e"  ,"srl h"  ,"srl l"  ,"srl (hl)"  ,"srl a"  ,
        !          8512:  "bit 0,b","bit 0,c","bit 0,d","bit 0,e","bit 0,h","bit 0,l","bit 0,(hl)","bit 0,a",
        !          8513:  "bit 1,b","bit 1,c","bit 1,d","bit 1,e","bit 1,h","bit 1,l","bit 1,(hl)","bit 1,a",
        !          8514:  "bit 2,b","bit 2,c","bit 2,d","bit 2,e","bit 2,h","bit 2,l","bit 2,(hl)","bit 2,a",
        !          8515:  "bit 3,b","bit 3,c","bit 3,d","bit 3,e","bit 3,h","bit 3,l","bit 3,(hl)","bit 3,a",
        !          8516:  "bit 4,b","bit 4,c","bit 4,d","bit 4,e","bit 4,h","bit 4,l","bit 4,(hl)","bit 4,a",
        !          8517:  "bit 5,b","bit 5,c","bit 5,d","bit 5,e","bit 5,h","bit 5,l","bit 5,(hl)","bit 5,a",
        !          8518:  "bit 6,b","bit 6,c","bit 6,d","bit 6,e","bit 6,h","bit 6,l","bit 6,(hl)","bit 6,a",
        !          8519:  "bit 7,b","bit 7,c","bit 7,d","bit 7,e","bit 7,h","bit 7,l","bit 7,(hl)","bit 7,a",
        !          8520:  "res 0,b","res 0,c","res 0,d","res 0,e","res 0,h","res 0,l","res 0,(hl)","res 0,a",
        !          8521:  "res 1,b","res 1,c","res 1,d","res 1,e","res 1,h","res 1,l","res 1,(hl)","res 1,a",
        !          8522:  "res 2,b","res 2,c","res 2,d","res 2,e","res 2,h","res 2,l","res 2,(hl)","res 2,a",
        !          8523:  "res 3,b","res 3,c","res 3,d","res 3,e","res 3,h","res 3,l","res 3,(hl)","res 3,a",
        !          8524:  "res 4,b","res 4,c","res 4,d","res 4,e","res 4,h","res 4,l","res 4,(hl)","res 4,a",
        !          8525:  "res 5,b","res 5,c","res 5,d","res 5,e","res 5,h","res 5,l","res 5,(hl)","res 5,a",
        !          8526:  "res 6,b","res 6,c","res 6,d","res 6,e","res 6,h","res 6,l","res 6,(hl)","res 6,a",
        !          8527:  "res 7,b","res 7,c","res 7,d","res 7,e","res 7,h","res 7,l","res 7,(hl)","res 7,a",
        !          8528:  "set 0,b","set 0,c","set 0,d","set 0,e","set 0,h","set 0,l","set 0,(hl)","set 0,a",
        !          8529:  "set 1,b","set 1,c","set 1,d","set 1,e","set 1,h","set 1,l","set 1,(hl)","set 1,a",
        !          8530:  "set 2,b","set 2,c","set 2,d","set 2,e","set 2,h","set 2,l","set 2,(hl)","set 2,a",
        !          8531:  "set 3,b","set 3,c","set 3,d","set 3,e","set 3,h","set 3,l","set 3,(hl)","set 3,a",
        !          8532:  "set 4,b","set 4,c","set 4,d","set 4,e","set 4,h","set 4,l","set 4,(hl)","set 4,a",
        !          8533:  "set 5,b","set 5,c","set 5,d","set 5,e","set 5,h","set 5,l","set 5,(hl)","set 5,a",
        !          8534:  "set 6,b","set 6,c","set 6,d","set 6,e","set 6,h","set 6,l","set 6,(hl)","set 6,a",
        !          8535:  "set 7,b","set 7,c","set 7,d","set 7,e","set 7,h","set 7,l","set 7,(hl)","set 7,a"
        !          8536: };
        !          8537: 
        !          8538: static char *mnemonic_ed[256]=
        !          8539: {
        !          8540:  "!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
        !          8541:  "!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
        !          8542:  "!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
        !          8543:  "!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
        !          8544:  "!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
        !          8545:  "!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
        !          8546:  "!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
        !          8547:  "!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
        !          8548:  "in b,(c)","out (c),b","sbc hl,bc","ld (W),bc","neg","retn","im 0","ld i,a",
        !          8549:  "in c,(c)","out (c),c","adc hl,bc","ld bc,(W)","!"  ,"reti","!"   ,"ld r,a",
        !          8550:  "in d,(c)","out (c),d","sbc hl,de","ld (W),de","!"  ,"!"   ,"im 1","ld a,i",
        !          8551:  "in e,(c)","out (c),e","adc hl,de","ld de,(W)","!"  ,"!"   ,"im 2","ld a,r",
        !          8552:  "in h,(c)","out (c),h","sbc hl,hl","ld (W),hl","!"  ,"!"   ,"!"   ,"rrd"   ,
        !          8553:  "in l,(c)","out (c),l","adc hl,hl","ld hl,(W)","!"  ,"!"   ,"!"   ,"rld"   ,
        !          8554:  "in 0,(c)","out (c),0","sbc hl,sp","ld (W),sp","!"  ,"!"   ,"!"   ,"!"     ,
        !          8555:  "in a,(c)","out (c),a","adc hl,sp","ld sp,(W)","!"  ,"!"   ,"!"   ,"!"     ,
        !          8556:  "!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
        !          8557:  "!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
        !          8558:  "!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
        !          8559:  "!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
        !          8560:  "ldi"     ,"cpi"      ,"ini"      ,"outi"     ,"!"  ,"!"   ,"!"   ,"!"     ,
        !          8561:  "ldd"     ,"cpd"      ,"ind"      ,"outd"     ,"!"  ,"!"   ,"!"   ,"!"     ,
        !          8562:  "ldir"    ,"cpir"     ,"inir"     ,"otir"     ,"!"  ,"!"   ,"!"   ,"!"     ,
        !          8563:  "lddr"    ,"cpdr"     ,"indr"     ,"otdr"     ,"!"  ,"!"   ,"!"   ,"!"     ,
        !          8564:  "!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
        !          8565:  "!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
        !          8566:  "!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
        !          8567:  "!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
        !          8568:  "!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
        !          8569:  "!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
        !          8570:  "!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"     ,
        !          8571:  "!"       ,"!"        ,"!"        ,"!"        ,"!"  ,"!"   ,"!"   ,"!"
        !          8572: };
        !          8573: 
        !          8574: static char *mnemonic_xx[256]=
        !          8575: {
        !          8576:   "@"      ,"@"       ,"@"       ,"@"        ,"@"       ,"@"       ,"@"      ,"@"      ,
        !          8577:   "@"      ,"add I,bc","@"       ,"@"        ,"@"       ,"@"       ,"@"      ,"@"      ,
        !          8578:   "@"      ,"@"       ,"@"       ,"@"        ,"@"       ,"@"       ,"@"      ,"@"      ,
        !          8579:   "@"      ,"add I,de","@"       ,"@"        ,"@"       ,"@"       ,"@"      ,"@"      ,
        !          8580:   "@"      ,"ld I,W"  ,"ld (W),I","inc I"    ,"inc Ih"  ,"dec Ih"  ,"ld Ih,B","@"      ,
        !          8581:   "@"      ,"add I,I" ,"ld I,(W)","dec I"    ,"inc Il"  ,"dec Il"  ,"ld Il,B","@"      ,
        !          8582:   "@"      ,"@"       ,"@"       ,"@"        ,"inc X"   ,"dec X"   ,"ld X,B" ,"@"      ,
        !          8583:   "@"      ,"add I,sp","@"       ,"@"        ,"@"       ,"@"       ,"@"      ,"@"      ,
        !          8584:   "@"      ,"@"       ,"@"       ,"@"        ,"ld b,Ih" ,"ld b,Il" ,"ld b,X" ,"@"      ,
        !          8585:   "@"      ,"@"       ,"@"       ,"@"        ,"ld c,Ih" ,"ld c,Il" ,"ld c,X" ,"@"      ,
        !          8586:   "@"      ,"@"       ,"@"       ,"@"        ,"ld d,Ih" ,"ld d,Il" ,"ld d,X" ,"@"      ,
        !          8587:   "@"      ,"@"       ,"@"       ,"@"        ,"ld e,Ih" ,"ld e,Il" ,"ld e,X" ,"@"      ,
        !          8588:   "ld Ih,b","ld Ih,c" ,"ld Ih,d" ,"ld Ih,e"  ,"ld Ih,h" ,"ld Ih,l" ,"ld h,X" ,"ld Ih,a",
        !          8589:   "ld Il,b","ld Il,c" ,"ld Il,d" ,"ld Il,e"  ,"ld Il,h" ,"ld Il,l" ,"ld l,X" ,"ld Il,a",
        !          8590:   "ld X,b" ,"ld X,c"  ,"ld X,d"  ,"ld X,e"   ,"ld X,h"  ,"ld X,l"  ,"@"      ,"ld X,a" ,
        !          8591:   "@"      ,"@"       ,"@"       ,"@"        ,"ld a,Ih" ,"ld a,Il" ,"ld a,X" ,"@"      ,
        !          8592:   "@"      ,"@"       ,"@"       ,"@"        ,"add a,Ih","add a,Il","add a,X","@"      ,
        !          8593:   "@"      ,"@"       ,"@"       ,"@"        ,"adc a,Ih","adc a,Il","adc a,X","@"      ,
        !          8594:   "@"      ,"@"       ,"@"       ,"@"        ,"sub Ih"  ,"sub Il"  ,"sub X"  ,"@"      ,
        !          8595:   "@"      ,"@"       ,"@"       ,"@"        ,"sbc a,Ih","sbc a,Il","sbc a,X","@"      ,
        !          8596:   "@"      ,"@"       ,"@"       ,"@"        ,"and Ih"  ,"and Il"  ,"and X"  ,"@"      ,
        !          8597:   "@"      ,"@"       ,"@"       ,"@"        ,"xor Ih"  ,"xor Il"  ,"xor X"  ,"@"      ,
        !          8598:   "@"      ,"@"       ,"@"       ,"@"        ,"or Ih"   ,"or Il"   ,"or X"   ,"@"      ,
        !          8599:   "@"      ,"@"       ,"@"       ,"@"        ,"cp Ih"   ,"cp Il"   ,"cp X"   ,"@"      ,
        !          8600:   "@"      ,"@"       ,"@"       ,"@"        ,"@"       ,"@"       ,"@"      ,"@"      ,
        !          8601:   "@"      ,"@"       ,"@"       ,"fd cb"    ,"@"       ,"@"       ,"@"      ,"@"      ,
        !          8602:   "@"      ,"@"       ,"@"       ,"@"        ,"@"       ,"@"       ,"@"      ,"@"      ,
        !          8603:   "@"      ,"@"       ,"@"       ,"@"        ,"@"       ,"@"       ,"@"      ,"@"      ,
        !          8604:   "@"      ,"pop I"   ,"@"       ,"ex (sp),I","@"       ,"push I"  ,"@"      ,"@"      ,
        !          8605:   "@"      ,"jp (I)"  ,"@"       ,"@"        ,"@"       ,"@"       ,"@"      ,"@"      ,
        !          8606:   "@"      ,"@"       ,"@"       ,"@"        ,"@"       ,"@"       ,"@"      ,"@"      ,
        !          8607:   "@"      ,"ld sp,I" ,"@"       ,"@"        ,"@"       ,"@"       ,"@"      ,"@"
        !          8608: };
        !          8609: 
        !          8610: static char *mnemonic_main[256]=
        !          8611: {
        !          8612:  "nop"      ,"ld bc,W"  ,"ld (bc),a","inc bc"    ,"inc b"    ,"dec b"    ,"ld b,B"    ,"rlca"     ,
        !          8613:  "ex af,af'","add hl,bc","ld a,(bc)","dec bc"    ,"inc c"    ,"dec c"    ,"ld c,B"    ,"rrca"     ,
        !          8614:  "djnz R"   ,"ld de,W"  ,"ld (de),a","inc de"    ,"inc d"    ,"dec d"    ,"ld d,B"    ,"rla"      ,
        !          8615:  "jr R"     ,"add hl,de","ld a,(de)","dec de"    ,"inc e"    ,"dec e"    ,"ld e,B"    ,"rra"      ,
        !          8616:  "jr nz,R"  ,"ld hl,W"  ,"ld (W),hl","inc hl"    ,"inc h"    ,"dec h"    ,"ld h,B"    ,"daa"      ,
        !          8617:  "jr z,R"   ,"add hl,hl","ld hl,(W)","dec hl"    ,"inc l"    ,"dec l"    ,"ld l,B"    ,"cpl"      ,
        !          8618:  "jr nc,R"  ,"ld sp,W"  ,"ld (W),a" ,"inc sp"    ,"inc (hl)" ,"dec (hl)" ,"ld (hl),B" ,"scf"      ,
        !          8619:  "jr c,R"   ,"add hl,sp","ld a,(W)" ,"dec sp"    ,"inc a"    ,"dec a"    ,"ld a,B"    ,"ccf"      ,
        !          8620:  "ld b,b"   ,"ld b,c"   ,"ld b,d"   ,"ld b,e"    ,"ld b,h"   ,"ld b,l"   ,"ld b,(hl)" ,"ld b,a"   ,
        !          8621:  "ld c,b"   ,"ld c,c"   ,"ld c,d"   ,"ld c,e"    ,"ld c,h"   ,"ld c,l"   ,"ld c,(hl)" ,"ld c,a"   ,
        !          8622:  "ld d,b"   ,"ld d,c"   ,"ld d,d"   ,"ld d,e"    ,"ld d,h"   ,"ld d,l"   ,"ld d,(hl)" ,"ld d,a"   ,
        !          8623:  "ld e,b"   ,"ld e,c"   ,"ld e,d"   ,"ld e,e"    ,"ld e,h"   ,"ld e,l"   ,"ld e,(hl)" ,"ld e,a"   ,
        !          8624:  "ld h,b"   ,"ld h,c"   ,"ld h,d"   ,"ld h,e"    ,"ld h,h"   ,"ld h,l"   ,"ld h,(hl)" ,"ld h,a"   ,
        !          8625:  "ld l,b"   ,"ld l,c"   ,"ld l,d"   ,"ld l,e"    ,"ld l,h"   ,"ld l,l"   ,"ld l,(hl)" ,"ld l,a"   ,
        !          8626:  "ld (hl),b","ld (hl),c","ld (hl),d","ld (hl),e" ,"ld (hl),h","ld (hl),l","halt"      ,"ld (hl),a",
        !          8627:  "ld a,b"   ,"ld a,c"   ,"ld a,d"   ,"ld a,e"    ,"ld a,h"   ,"ld a,l"   ,"ld a,(hl)" ,"ld a,a"   ,
        !          8628:  "add a,b"  ,"add a,c"  ,"add a,d"  ,"add a,e"   ,"add a,h"  ,"add a,l"  ,"add a,(hl)","add a,a"  ,
        !          8629:  "adc a,b"  ,"adc a,c"  ,"adc a,d"  ,"adc a,e"   ,"adc a,h"  ,"adc a,l"  ,"adc a,(hl)","adc a,a"  ,
        !          8630:  "sub b"    ,"sub c"    ,"sub d"    ,"sub e"     ,"sub h"    ,"sub l"    ,"sub (hl)"  ,"sub a"    ,
        !          8631:  "sbc a,b"  ,"sbc a,c"  ,"sbc a,d"  ,"sbc a,e"   ,"sbc a,h"  ,"sbc a,l"  ,"sbc a,(hl)","sbc a,a"  ,
        !          8632:  "and b"    ,"and c"    ,"and d"    ,"and e"     ,"and h"    ,"and l"    ,"and (hl)"  ,"and a"    ,
        !          8633:  "xor b"    ,"xor c"    ,"xor d"    ,"xor e"     ,"xor h"    ,"xor l"    ,"xor (hl)"  ,"xor a"    ,
        !          8634:  "or b"     ,"or c"     ,"or d"     ,"or e"      ,"or h"     ,"or l"     ,"or (hl)"   ,"or a"     ,
        !          8635:  "cp b"     ,"cp c"     ,"cp d"     ,"cp e"      ,"cp h"     ,"cp l"     ,"cp (hl)"   ,"cp a"     ,
        !          8636:  "ret nz"   ,"pop bc"   ,"jp nz,W"  ,"jp W"      ,"call nz,W","push bc"  ,"add a,B"   ,"rst 00h"  ,
        !          8637:  "ret z"    ,"ret"      ,"jp z,W"   ,"cb"        ,"call z,W" ,"call W"   ,"adc a,B"   ,"rst 08h"  ,
        !          8638:  "ret nc"   ,"pop de"   ,"jp nc,W"  ,"out (B),a" ,"call nc,W","push de"  ,"sub B"     ,"rst 10h"  ,
        !          8639:  "ret c"    ,"exx"      ,"jp c,W"   ,"in a,(B)"  ,"call c,W" ,"dd"       ,"sbc a,B"   ,"rst 18h"  ,
        !          8640:  "ret po"   ,"pop hl"   ,"jp po,W"  ,"ex (sp),hl","call po,W","push hl"  ,"and B"     ,"rst 20h"  ,
        !          8641:  "ret pe"   ,"jp (hl)"  ,"jp pe,W"  ,"ex de,hl"  ,"call pe,W","ed"       ,"xor B"     ,"rst 28h"  ,
        !          8642:  "ret p"    ,"pop af"   ,"jp p,W"   ,"di"        ,"call p,W" ,"push af"  ,"or B"      ,"rst 30h"  ,
        !          8643:  "ret m"    ,"ld sp,hl" ,"jp m,W"   ,"ei"        ,"call m,W" ,"fd"       ,"cp B"      ,"rst 38h"
        !          8644: };
        !          8645: 
        !          8646: static char Sign (unsigned char a)
        !          8647: {
        !          8648:  return (a&128)? '-':'+';
        !          8649: }
        !          8650: 
        !          8651: static int Abs (unsigned char a)
        !          8652: {
        !          8653:  if (a&128) return 256-a;
        !          8654:  else return a;
        !          8655: }
        !          8656: 
        !          8657: /****************************************************************************/
        !          8658: /* Disassemble first opcode in buffer and return number of bytes it takes   */
        !          8659: /****************************************************************************/
        !          8660: int Z80_Dasm (unsigned char *buffer,char *dest,unsigned PC) {
        !          8661:  char *S;
        !          8662:  char *r;
        !          8663:  int i,j,k;
        !          8664:  unsigned char buf[10];
        !          8665:  char Offset;
        !          8666:  i=Offset=0;
        !          8667:  r="INTERNAL PROGRAM ERROR";
        !          8668:  dest[0]='\0';
        !          8669:  switch (buffer[i])
        !          8670:  {
        !          8671:   case 0xCB:
        !          8672:    i++;
        !          8673:    S=mnemonic_cb[buffer[i++]];
        !          8674:    break;
        !          8675:   case 0xED:
        !          8676:    i++;
        !          8677:    S=mnemonic_ed[buffer[i++]];
        !          8678:    break;
        !          8679:   case 0xDD:
        !          8680:    i++;
        !          8681:    r="ix";
        !          8682:    switch (buffer[i])
        !          8683:    {
        !          8684:     case 0xcb:
        !          8685:      i++;
        !          8686:      Offset=buffer[i++];
        !          8687:      S=mnemonic_xx_cb[buffer[i++]];
        !          8688:      break;
        !          8689:     default:
        !          8690:      S=mnemonic_xx[buffer[i++]];
        !          8691:      break;
        !          8692:    }
        !          8693:    break;
        !          8694:   case 0xFD:
        !          8695:    i++;
        !          8696:    r="iy";
        !          8697:    switch (buffer[i])
        !          8698:    {
        !          8699:     case 0xcb:
        !          8700:      i++;
        !          8701:      Offset=buffer[i++];
        !          8702:      S=mnemonic_xx_cb[buffer[i++]];
        !          8703:      break;
        !          8704:     default:
        !          8705:      S=mnemonic_xx[buffer[i++]];
        !          8706:      break;
        !          8707:    }
        !          8708:    break;
        !          8709:   default:
        !          8710:    S=mnemonic_main[buffer[i++]];
        !          8711:    break;
        !          8712:  }
        !          8713:  for (j=0;S[j];++j)
        !          8714:  {
        !          8715:   switch (S[j])
        !          8716:   {
        !          8717:    case 'B':
        !          8718:     sprintf (buf,"$%02x",buffer[i++]);
        !          8719:     strcat (dest,buf);
        !          8720:     break;
        !          8721:    case 'R':
        !          8722:     sprintf (buf,"$%04x",(PC+2+(signed char)buffer[i])&0xFFFF);
        !          8723:     i++;
        !          8724:     strcat (dest,buf);
        !          8725:     break;
        !          8726:    case 'W':
        !          8727:     sprintf (buf,"$%04x",buffer[i]+buffer[i+1]*256);
        !          8728:     i+=2;
        !          8729:     strcat (dest,buf);
        !          8730:     break;
        !          8731:    case 'X':
        !          8732:     sprintf (buf,"(%s%c$%02x)",r,Sign(buffer[i]),Abs(buffer[i]));
        !          8733:     i++;
        !          8734:     strcat (dest,buf);
        !          8735:     break;
        !          8736:    case 'Y':
        !          8737:     sprintf (buf,"(%s%c$%02x)",r,Sign(Offset),Abs(Offset));
        !          8738:     strcat (dest,buf);
        !          8739:     break;
        !          8740:    case 'I':
        !          8741:     strcat (dest,r);
        !          8742:     break;
        !          8743:    case '!':
        !          8744:     sprintf (dest,"db     $ed,$%02x",buffer[1]);
        !          8745:     return 2;
        !          8746:    case '@':
        !          8747:     sprintf (dest,"db     $%02x",buffer[0]);
        !          8748:     return 1;
        !          8749:    case '#':
        !          8750:     sprintf (dest,"db     $%02x,$cb,$%02x",buffer[0],buffer[2]);
        !          8751:     return 2;
        !          8752:    case ' ':
        !          8753:     k=strlen(dest);
        !          8754:     if (k<6) k=7-k;
        !          8755:     else k=1;
        !          8756:     memset (buf,' ',k);
        !          8757:     buf[k]='\0';
        !          8758:     strcat (dest,buf);
        !          8759:     break;
        !          8760:    default:
        !          8761:     buf[0]=S[j];
        !          8762:     buf[1]='\0';
        !          8763:     strcat (dest,buf);
        !          8764:     break;
        !          8765:   }
        !          8766:  }
        !          8767:  return i;
        !          8768: }
        !          8769: 
        !          8770: UINT32 mz80GetElapsedTicks(UINT32 dwClearIt)
        !          8771: {
        !          8772:        UINT32 dwTempVar = 0;
        !          8773:        char string[150];
        !          8774: 
        !          8775:        dwTempVar = dwElapsedTicks;
        !          8776:        if (dwClearIt)
        !          8777:                dwElapsedTicks = 0;
        !          8778:        return(dwTempVar);
        !          8779: }
        !          8780: 
        !          8781: void mz80ReleaseTimeslice()
        !          8782: {
        !          8783:        cCycles = 0;
        !          8784: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.