Răsfoiți Sursa

+ created and included an Z80 instruction table

git-svn-id: branches/z80@44753 -
nickysn 5 ani în urmă
părinte
comite
be095914ec
4 a modificat fișierele cu 1507 adăugiri și 46 ștergeri
  1. 1 0
      .gitattributes
  2. 74 46
      compiler/utils/mkz80ins.pp
  3. 8 0
      compiler/z80/aasmcpu.pas
  4. 1424 0
      compiler/z80/z80tab.inc

+ 1 - 0
.gitattributes

@@ -1087,6 +1087,7 @@ compiler/z80/z80nop.inc svneol=native#text/plain
 compiler/z80/z80op.inc svneol=native#text/plain
 compiler/z80/z80reg.dat svneol=native#text/plain
 compiler/z80/z80stdopnames.inc svneol=native#text/plain
+compiler/z80/z80tab.inc svneol=native#text/plain
 /fpmake.pp svneol=native#text/plain
 /fpmake_add1.inc svneol=native#text/plain
 /fpmake_proc1.inc svneol=native#text/plain

+ 74 - 46
compiler/utils/mkz80ins.pp

@@ -24,48 +24,48 @@ const
   Version = '1.0.0';
   HeaderStr = '{ don''t edit, this file is generated from z80ins.dat; to regenerate, run ''make insdat'' in the compiler directory }';
 
-  ParamTypes: array [0..40] of string = (
-    'void',
-    'r',
-    'r''',
-    'b',
-    'n',
-    'p',
-    'e',
-    'nn',
-    '0',
-    '1',
-    '2',
-    'cc',
-    'C',
-    'NC',
-    'Z',
-    'NZ',
-    'dd',
-    'qq',
-    'pp',
-    'rr',
-    'A',
-    'I',
-    'R',
-    'IX',
-    'IY',
-    'SP',
-    'DE',
-    'HL',
-    'AF',
-    'AF''',
-    '(C)',
-    '(n)',
-    '(nn)',
-    '(BC)',
-    '(DE)',
-    '(HL)',
-    '(SP)',
-    '(IX)',
-    '(IY)',
-    '(IX+d)',
-    '(IY+d)'
+  ParamTypes: array [0..40,0..1] of string = (
+    ('void',  'OT_NONE'),
+    ('r',     'OT_REG8'),
+    ('r''',   'OT_REG8'),
+    ('b',     'OT_IMM3'),
+    ('n',     'OT_IMM8'),
+    ('p',     'OT_IMM_RST'),
+    ('e',     'OT_RELJMP8'),
+    ('nn',    'OT_IMM16'),
+    ('0',     'OT_IMM_VAL0'),
+    ('1',     'OT_IMM_VAL1'),
+    ('2',     'OT_IMM_VAL2'),
+    ('cc',    'OT_COND'),
+    ('C',     'OT_COND_C'),
+    ('NC',    'OT_COND_NC'),
+    ('Z',     'OT_COND_Z'),
+    ('NZ',    'OT_COND_NZ'),
+    ('dd',    'OT_REG16_BC_DE_HL_SP'),
+    ('qq',    'OT_REG16_BC_DE_HL_AF'),
+    ('pp',    'OT_REG16_BC_DE_IX_SP'),
+    ('rr',    'OT_REG16_BC_DE_IY_SP'),
+    ('A',     'OT_REG8_A'),
+    ('I',     'OT_REG8_I'),
+    ('R',     'OT_REG8_R'),
+    ('IX',    'OT_REG16_IX'),
+    ('IY',    'OT_REG16_IY'),
+    ('SP',    'OT_REG16_SP'),
+    ('DE',    'OT_REG16_DE'),
+    ('HL',    'OT_REG16_HL'),
+    ('AF',    'OT_REG16_AF'),
+    ('AF''',  'OT_REG16_AF_'),
+    ('(C)',   'OT_REG8_C_PORT'),
+    ('(n)',   'OT_IMM_PORT'),
+    ('(nn)',  'OT_REF_ADDR16'),
+    ('(BC)',  'OT_REF_BC'),
+    ('(DE)',  'OT_REF_DE'),
+    ('(HL)',  'OT_REF_HL'),
+    ('(SP)',  'OT_REF_SP'),
+    ('(IX)',  'OT_REF_IX'),
+    ('(IY)',  'OT_REF_IY'),
+    ('(IX+d)','OT_REF_IX_d'),
+    ('(IY+d)','OT_REF_IY_d')
   );
 
 type
@@ -77,6 +77,7 @@ type
     OpFile: TextFile;
     NOpFile: TextFile;
     StdOpNames: TextFile;
+    InsTabFile: TextFile;
 
     constructor Create;
     destructor Destroy;override;
@@ -95,6 +96,10 @@ constructor TZ80InsDatOutputFiles.Create;
     Rewrite(StdOpNames);
     Writeln(StdOpNames,HeaderStr);
     Writeln(StdOpNames,'(');
+    AssignFile(InsTabFile,'z80tab.inc');
+    Rewrite(InsTabFile);
+    Writeln(InsTabFile,HeaderStr);
+    Writeln(InsTabFile,'(');
   end;
 
 destructor TZ80InsDatOutputFiles.Destroy;
@@ -102,6 +107,7 @@ destructor TZ80InsDatOutputFiles.Destroy;
     CloseFile(OpFile);
     CloseFile(NOpFile);
     CloseFile(StdOpNames);
+    CloseFile(InsTabFile);
     inherited Destroy;
   end;
 
@@ -110,7 +116,7 @@ var
   I: Integer;
 begin
   for I:=Low(ParamTypes) to High(ParamTypes) do
-    if ParamTypes[I]=ParamTypeStr then
+    if ParamTypes[I,0]=ParamTypeStr then
       exit(I);
   raise Exception.Create('Invalid param type: '''+ParamTypeStr+'''');
 end;
@@ -118,10 +124,11 @@ end;
 var
   InsDatFile: TextFile;
   OutputFiles: TZ80InsDatOutputFiles=nil;
-  S, op, ParamsStr, S_Param: string;
+  S, op, ParamsStr: string;
   FirstIns: Boolean=true;
   OpCount: Integer=0;
   S_Split, S_Params: TStringArray;
+  ParamIdx: Integer;
 begin
   writeln('FPC Z80 Instruction Table Converter Version ',Version);
   AssignFile(InsDatFile,'../z80/z80ins.dat');
@@ -149,15 +156,36 @@ begin
         else if S<>'' then
           begin
             Inc(OpCount);
+            if OpCount<>1 then
+              Writeln(OutputFiles.InsTabFile,',');
             S_Split:=S.Split(' ',TStringSplitOptions.ExcludeEmpty);
             S_Params:=S_Split[0].Split(',',TStringSplitOptions.ExcludeEmpty);
-            for S_Param in S_Params do
-              FindParamType(S_Param);
+            if (Length(S_Params)=1) and (S_Params[0]='void') then
+              SetLength(S_Params,0);
+            Writeln(OutputFiles.InsTabFile,'  (');
+            Writeln(OutputFiles.InsTabFile,'    opcode  : A_',op,';');
+            Writeln(OutputFiles.InsTabFile,'    ops     : ',Length(S_Params),';');
+            Write(OutputFiles.InsTabFile,  '    optypes : (');
+            for ParamIdx:=0 to 3 do
+              begin
+                if ParamIdx<>0 then
+                  Write(OutputFiles.InsTabFile,',');
+                if ParamIdx<=High(S_Params) then
+                  Write(OutputFiles.InsTabFile,ParamTypes[FindParamType(S_Params[ParamIdx]),1])
+                else
+                  Write(OutputFiles.InsTabFile,'OT_NONE');
+              end;
+            Writeln(OutputFiles.InsTabFile, ');');
+            Writeln(OutputFiles.InsTabFile,  '    code    : '''';');
+            Writeln(OutputFiles.InsTabFile,  '    flags   : 0');
+            Write(OutputFiles.InsTabFile,  '  )');
           end;
       end;
     Writeln(OutputFiles.OpFile,');');
     Writeln(OutputFiles.StdOpNames,');');
     Writeln(OutputFiles.NOpFile,OpCount,';');
+    Writeln(OutputFiles.InsTabFile);
+    Writeln(OutputFiles.InsTabFile,');');
   finally
     FreeAndNil(OutputFiles);
     CloseFile(InsDatFile);

+ 8 - 0
compiler/z80/aasmcpu.pas

@@ -38,6 +38,7 @@ uses
       { "mov reg,reg" source operand number }
       O_MOV_DEST = 0;
 
+      instabentries = {$i z80nop.inc}
       maxinfolen = 5;
 
     type
@@ -134,6 +135,13 @@ uses
 
 implementation
 
+{****************************************************************************
+                                Instruction table
+*****************************************************************************}
+
+    const
+      InsTab:array[0..instabentries-1] of TInsEntry={$i z80tab.inc}
+
 {*****************************************************************************
                                  taicpu Constructors
 *****************************************************************************}

+ 1424 - 0
compiler/z80/z80tab.inc

@@ -0,0 +1,1424 @@
+{ don't edit, this file is generated from z80ins.dat; to regenerate, run 'make insdat' in the compiler directory }
+(
+  (
+    opcode  : A_None;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_ADC;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REG8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_ADC;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_IMM8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_ADC;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_HL,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_ADC;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_IX_d,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_ADC;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_IY_d,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_ADC;
+    ops     : 2;
+    optypes : (OT_REG16_HL,OT_REG16_BC_DE_HL_SP,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_ADD;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REG8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_ADD;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_IMM8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_ADD;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_HL,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_ADD;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_IX_d,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_ADD;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_IY_d,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_ADD;
+    ops     : 2;
+    optypes : (OT_REG16_HL,OT_REG16_BC_DE_HL_SP,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_ADD;
+    ops     : 2;
+    optypes : (OT_REG16_IX,OT_REG16_BC_DE_IX_SP,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_ADD;
+    ops     : 2;
+    optypes : (OT_REG16_IY,OT_REG16_BC_DE_IY_SP,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_AND;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REG8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_AND;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_IMM8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_AND;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_HL,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_AND;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_IX_d,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_AND;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_IY_d,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_BIT;
+    ops     : 2;
+    optypes : (OT_IMM3,OT_REG8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_BIT;
+    ops     : 2;
+    optypes : (OT_IMM3,OT_REF_HL,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_BIT;
+    ops     : 2;
+    optypes : (OT_IMM3,OT_REF_IX_d,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_BIT;
+    ops     : 2;
+    optypes : (OT_IMM3,OT_REF_IY_d,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_CALL;
+    ops     : 1;
+    optypes : (OT_IMM16,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_CALL;
+    ops     : 2;
+    optypes : (OT_COND,OT_IMM16,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_CCF;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_CP;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REG8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_CP;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_IMM8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_CP;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_HL,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_CP;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_IX_d,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_CP;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_IY_d,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_CPD;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_CPDR;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_CPI;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_CPIR;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_CPL;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_DAA;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_DEC;
+    ops     : 1;
+    optypes : (OT_REG8,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_DEC;
+    ops     : 1;
+    optypes : (OT_REF_HL,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_DEC;
+    ops     : 1;
+    optypes : (OT_REF_IX_d,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_DEC;
+    ops     : 1;
+    optypes : (OT_REF_IY_d,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_DEC;
+    ops     : 1;
+    optypes : (OT_REG16_BC_DE_HL_SP,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_DEC;
+    ops     : 1;
+    optypes : (OT_REG16_IX,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_DEC;
+    ops     : 1;
+    optypes : (OT_REG16_IY,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_DI;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_DJNZ;
+    ops     : 1;
+    optypes : (OT_RELJMP8,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_EI;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_EX;
+    ops     : 2;
+    optypes : (OT_REG16_DE,OT_REG16_HL,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_EX;
+    ops     : 2;
+    optypes : (OT_REG16_AF,OT_REG16_AF_,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_EX;
+    ops     : 2;
+    optypes : (OT_REF_SP,OT_REG16_HL,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_EX;
+    ops     : 2;
+    optypes : (OT_REF_SP,OT_REG16_IX,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_EX;
+    ops     : 2;
+    optypes : (OT_REF_SP,OT_REG16_IY,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_EXX;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_HALT;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_IM;
+    ops     : 1;
+    optypes : (OT_IMM_VAL0,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_IM;
+    ops     : 1;
+    optypes : (OT_IMM_VAL1,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_IM;
+    ops     : 1;
+    optypes : (OT_IMM_VAL2,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_IN;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_IMM_PORT,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_IN;
+    ops     : 2;
+    optypes : (OT_REG8,OT_REG8_C_PORT,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_INC;
+    ops     : 1;
+    optypes : (OT_REG8,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_INC;
+    ops     : 1;
+    optypes : (OT_REF_HL,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_INC;
+    ops     : 1;
+    optypes : (OT_REF_IX_d,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_INC;
+    ops     : 1;
+    optypes : (OT_REF_IY_d,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_INC;
+    ops     : 1;
+    optypes : (OT_REG16_BC_DE_HL_SP,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_INC;
+    ops     : 1;
+    optypes : (OT_REG16_IX,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_INC;
+    ops     : 1;
+    optypes : (OT_REG16_IY,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_IND;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_INDR;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_INI;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_INIR;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_JP;
+    ops     : 1;
+    optypes : (OT_IMM16,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_JP;
+    ops     : 2;
+    optypes : (OT_COND,OT_IMM16,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_JP;
+    ops     : 1;
+    optypes : (OT_REF_HL,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_JP;
+    ops     : 1;
+    optypes : (OT_REF_IX,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_JP;
+    ops     : 1;
+    optypes : (OT_REF_IY,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_JR;
+    ops     : 1;
+    optypes : (OT_RELJMP8,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_JR;
+    ops     : 2;
+    optypes : (OT_COND_C,OT_RELJMP8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_JR;
+    ops     : 2;
+    optypes : (OT_COND_NC,OT_RELJMP8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_JR;
+    ops     : 2;
+    optypes : (OT_COND_Z,OT_RELJMP8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_JR;
+    ops     : 2;
+    optypes : (OT_COND_NZ,OT_RELJMP8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REG8,OT_REG8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REG8,OT_IMM8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REG8,OT_REF_HL,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REG8,OT_REF_IX_d,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REG8,OT_REF_IY_d,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REF_HL,OT_REG8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REF_IX_d,OT_REG8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REF_IY_d,OT_REG8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REF_HL,OT_IMM8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REF_IX_d,OT_IMM8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REF_IY_d,OT_IMM8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_BC,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_DE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_ADDR16,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REF_BC,OT_REG8_A,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REF_DE,OT_REG8_A,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REF_ADDR16,OT_REG8_A,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REG8_I,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REG8_R,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REG8_I,OT_REG8_A,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REG8_R,OT_REG8_A,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REG16_BC_DE_HL_SP,OT_IMM16,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REG16_IX,OT_IMM16,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REG16_IY,OT_IMM16,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REG16_HL,OT_REF_ADDR16,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REG16_BC_DE_HL_SP,OT_REF_ADDR16,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REG16_IX,OT_REF_ADDR16,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REG16_IY,OT_REF_ADDR16,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REF_ADDR16,OT_REG16_HL,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REF_ADDR16,OT_REG16_BC_DE_HL_SP,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REF_ADDR16,OT_REG16_IX,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REF_ADDR16,OT_REG16_IY,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REG16_SP,OT_REG16_HL,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REG16_SP,OT_REG16_IX,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LD;
+    ops     : 2;
+    optypes : (OT_REG16_SP,OT_REG16_IY,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LDD;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LDDR;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LDI;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_LDIR;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_NEG;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_NOP;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_OR;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REG8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_OR;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_IMM8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_OR;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_HL,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_OR;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_IX_d,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_OR;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_IY_d,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_OTDR;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_OTIR;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_OUT;
+    ops     : 2;
+    optypes : (OT_IMM_PORT,OT_REG8_A,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_OUT;
+    ops     : 2;
+    optypes : (OT_REG8_C_PORT,OT_REG8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_OUTD;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_OUTI;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_POP;
+    ops     : 1;
+    optypes : (OT_REG16_BC_DE_HL_AF,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_POP;
+    ops     : 1;
+    optypes : (OT_REG16_IX,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_POP;
+    ops     : 1;
+    optypes : (OT_REG16_IY,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_PUSH;
+    ops     : 1;
+    optypes : (OT_REG16_BC_DE_HL_AF,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_PUSH;
+    ops     : 1;
+    optypes : (OT_REG16_IX,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_PUSH;
+    ops     : 1;
+    optypes : (OT_REG16_IY,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RES;
+    ops     : 2;
+    optypes : (OT_IMM3,OT_REG8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RES;
+    ops     : 2;
+    optypes : (OT_IMM3,OT_REF_HL,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RES;
+    ops     : 2;
+    optypes : (OT_IMM3,OT_REF_IX_d,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RES;
+    ops     : 2;
+    optypes : (OT_IMM3,OT_REF_IY_d,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RET;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RET;
+    ops     : 1;
+    optypes : (OT_COND,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RETI;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RETN;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RL;
+    ops     : 1;
+    optypes : (OT_REG8,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RL;
+    ops     : 1;
+    optypes : (OT_REF_HL,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RL;
+    ops     : 1;
+    optypes : (OT_REF_IX_d,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RL;
+    ops     : 1;
+    optypes : (OT_REF_IY_d,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RLA;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RLC;
+    ops     : 1;
+    optypes : (OT_REG8,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RLC;
+    ops     : 1;
+    optypes : (OT_REF_HL,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RLC;
+    ops     : 1;
+    optypes : (OT_REF_IX_d,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RLC;
+    ops     : 1;
+    optypes : (OT_REF_IY_d,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RLCA;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RLD;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RR;
+    ops     : 1;
+    optypes : (OT_REG8,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RR;
+    ops     : 1;
+    optypes : (OT_REF_HL,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RR;
+    ops     : 1;
+    optypes : (OT_REF_IX_d,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RR;
+    ops     : 1;
+    optypes : (OT_REF_IY_d,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RRA;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RRC;
+    ops     : 1;
+    optypes : (OT_REG8,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RRC;
+    ops     : 1;
+    optypes : (OT_REF_HL,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RRC;
+    ops     : 1;
+    optypes : (OT_REF_IX_d,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RRC;
+    ops     : 1;
+    optypes : (OT_REF_IY_d,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RRCA;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RRD;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_RST;
+    ops     : 1;
+    optypes : (OT_IMM_RST,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SBC;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REG8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SBC;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_IMM8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SBC;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_HL,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SBC;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_IX_d,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SBC;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_IY_d,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SBC;
+    ops     : 2;
+    optypes : (OT_REG16_HL,OT_REG16_BC_DE_HL_SP,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SCF;
+    ops     : 0;
+    optypes : (OT_NONE,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SET;
+    ops     : 2;
+    optypes : (OT_IMM3,OT_REG8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SET;
+    ops     : 2;
+    optypes : (OT_IMM3,OT_REF_HL,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SET;
+    ops     : 2;
+    optypes : (OT_IMM3,OT_REF_IX_d,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SET;
+    ops     : 2;
+    optypes : (OT_IMM3,OT_REF_IY_d,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SLA;
+    ops     : 1;
+    optypes : (OT_REG8,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SLA;
+    ops     : 1;
+    optypes : (OT_REF_HL,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SLA;
+    ops     : 1;
+    optypes : (OT_REF_IX_d,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SLA;
+    ops     : 1;
+    optypes : (OT_REF_IY_d,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SRA;
+    ops     : 1;
+    optypes : (OT_REG8,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SRA;
+    ops     : 1;
+    optypes : (OT_REF_HL,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SRA;
+    ops     : 1;
+    optypes : (OT_REF_IX_d,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SRA;
+    ops     : 1;
+    optypes : (OT_REF_IY_d,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SRL;
+    ops     : 1;
+    optypes : (OT_REG8,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SRL;
+    ops     : 1;
+    optypes : (OT_REF_HL,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SRL;
+    ops     : 1;
+    optypes : (OT_REF_IX_d,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SRL;
+    ops     : 1;
+    optypes : (OT_REF_IY_d,OT_NONE,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SUB;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REG8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SUB;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_IMM8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SUB;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_HL,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SUB;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_IX_d,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_SUB;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_IY_d,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_XOR;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REG8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_XOR;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_IMM8,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_XOR;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_HL,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_XOR;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_IX_d,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  ),
+  (
+    opcode  : A_XOR;
+    ops     : 2;
+    optypes : (OT_REG8_A,OT_REF_IY_d,OT_NONE,OT_NONE);
+    code    : '';
+    flags   : 0
+  )
+);