]> cloudbase.mooo.com Git - avrcpm.git/blobdiff - avr/Z80int-jmp.asm
* avr/config.inc
[avrcpm.git] / avr / Z80int-jmp.asm
index a172c92fa7db01104a40a3b99f252410a387d480..a5733ada568f0b6c9b4cc7aa73acfb825fba5263 100644 (file)
@@ -25,7 +25,7 @@
 ;
 
 #if EM_Z80
-  #define OPC_TABSTART 0x1a00
+  #define OPC_TABSTART 0x1900
 #else
   #define OPC_TABSTART 0x1200
 #endif
@@ -200,51 +200,63 @@ int_nobreak:
 ;
 .macro instr   
 
-  .set fetch_ = (do_@0 != do_fetch_nop)                ; must call or jump to fetch phase
-  .set op_    = (do_@1 != do_op_nop)           ; must call or jump to op phase
-  .set store_ = (do_@2 != do_store_nop)                ; must jump to store phase
-  .set cnt_ = fetch_ + op_ + store_
+  .set fetch_ = (do_@0 != do_fetch_nop)                ; must call or jump to fetch action
+  .set op_    = (do_@1 != do_op_nop)           ; must call or jump to op action
+  .set store_ = (do_@2 != do_store_nop)                ; must jump to store action
+  .set cnt_ = fetch_ + op_ + store_            ; number of actions for this instruction
+
+  .set action_1_ = 0
+  .set action_2_ = 0
+  .set action_3_ = 0
+
+  .if cnt_ == 1
+    .if fetch_
+      .set action_1_ = do_@0
+    .elif op_
+      .set action_1_ = do_@1
+    .else
+      .set action_1_ = do_@2
+    .endif
+  .elif cnt_ == 2
+    .if fetch_
+      .set action_1_ = do_@0
+      .if op_
+        .set action_2_ = do_@1
+      .else
+        .set action_2_ = do_@2
+      .endif
+    .else
+      .set action_1_ = do_@1
+      .set action_2_ = do_@2
+    .endif
+  .elif cnt_ == 3
+    .set action_1_ = do_@0
+    .set action_2_ = do_@1
+    .set action_3_ = do_@2
+  .endif
+
   .set longdist_ = 0
   .set pc_save_ = PC
 
   .org opcjmp_table_pos_
   .set opcjmp_table_pos_ = opcjmp_table_pos_ + 1
 
+
   .if cnt_ == 0                                        ; nothing to do (nop)
     ret                                                ; go back to main
   .elif cnt_ == 1                              ; jump direct to action
-    .if fetch_                                 ; 
-      .if (PC - do_@0) > 2047
-       .set longdist_ = 1
-      .else
-        rjmp do_@0                             ; do op and return to main
-      .endif
-    .endif    
-    .if op_
-      .if (PC - do_@1) > 2047
-       .set longdist_ = 1
-      .else
-        rjmp do_@1                             ; do op and return to main
-      .endif
-    .endif    
-    .if store_                                 ; 
-      .if (PC - do_@2) > 2047
-       .set longdist_ = 1
-      .else
-        rjmp do_@2                             ; do op and return to main
-      .endif
-    .endif    
+    .if (PC - action_1_) > 2047
+      .set longdist_ = 1                        ; target action out of reach for rel jump
+    .else
+        rjmp action_1_                         ; do op and return to main
+    .endif
   .endif
 
+
   .set done_ = 0
   .if (cnt_ > 1) || longdist_
-
-    .set labelexists_ = 0
-    .if defined (l_@0_@1_@2)
-      .set labelexists_ = 1
-    .endif
                                                ; two or tree actions
-    .if labelexists_                           ; same combination of fetch/op/store allready present?
+    .if defined (l_@0_@1_@2)
       .if (PC - l_@0_@1_@2) <= 2047
         rjmp l_@0_@1_@2                                ; generate a jump to action table
        .set done_ = 1
@@ -266,7 +278,7 @@ int_nobreak:
         .endif
       .endif
 
-      .if labelexists_
+      .if defined (l_@0_@1_@2)
         rjmp todo_table_pos_
         .org todo_table_pos_
        jmp l_@0_@1_@2
@@ -567,6 +579,7 @@ do_store_pc:
        ret
 
 do_store_pcrel:                                ;add displacement to PC
+#if EM_Z80
        clr     oph
        tst     opl                     ;sign extend
        brpl    stpcr1
@@ -575,7 +588,9 @@ stpcr1:
        add     z_pcl,opl
        adc     z_pch,oph
        ret
-
+#else
+       rjmp    do_op_inv
+#endif
 
 do_store_ret:
        movw    x,z_spl
@@ -829,7 +844,7 @@ do_store_am:
 ;
 ;      ldpmx   dstreg,tablebase,indexreg
 ;
-; (6 words, 8 cycles)
+; (3 words, 5 cycles)
 
 .macro ldpmx
        ldi     zh,high(@1*2)   ; table must be page aligned
@@ -876,7 +891,7 @@ do_store_am:
        
 .macro do_z80_flags_copy_HC
 #if EM_Z80
-       bmov    z_flags, ZFL_H, z_flags, ZFL_H
+       bmov    z_flags, ZFL_H, z_flags, ZFL_C
 #endif
 .endm
 
@@ -988,63 +1003,90 @@ do_op_ina:                               ; in a,(opl)
 ;|INC r     |**-P0-|Increment            |r=r+1                 |
 ;|INC [HL]  |**-P0-|Increment            |[HL]=[HL]+1           |
 ;
-; 
+
 do_op_inc:
+#if EM_Z80
+       andi    z_flags,(1<<ZFL_C)              ; preserve C-, Clear N-flag
        ldi     temp,1
        add     opl,temp
-       in      temp, sreg
-       andi    z_flags,(1<<ZFL_C)              ; preserve C-flag
-       ldpmx   temp2, sz53p_tab, opl
-       or      z_flags,temp2                   ;
-       bmov    z_flags, ZFL_H, temp, AVR_H
-       do_z80_flags_V
+       in      temp,sreg
+       bmov    z_flags,ZFL_S, temp,AVR_N
+       bmov    z_flags,ZFL_Z, temp,AVR_Z
+       bmov    z_flags,ZFL_H, temp,AVR_H
+       bmov    z_flags,ZFL_P, temp,AVR_V
+#else /* 8080 */
+       andi    z_flags,(1<<ZFL_C)|(1<<ZFL_H)   ; preserve C- and H-flag
+       inc     opl
+       ldpmx   temp,sz53p_tab,opl              ;S,Z,P flag
+       or      z_flags,temp
+#endif
        ret
 
 do_op_inca:
+#if EM_Z80
+       andi    z_flags,(1<<ZFL_C)              ; preserve C-, Clear N-flag
        ldi     temp,1
        add     z_a,temp
-       in      temp, sreg
-       andi    z_flags,(1<<ZFL_C)              ; preserve C-flag
-       ldpmx   temp2, sz53p_tab, z_a
-       or      z_flags,temp2                   ;
-       bmov    z_flags, ZFL_H, temp, AVR_H
-       do_z80_flags_V
+       in      temp,sreg
+       bmov    z_flags,ZFL_S, temp,AVR_N
+       bmov    z_flags,ZFL_Z, temp,AVR_Z
+       bmov    z_flags,ZFL_H, temp,AVR_H
+       bmov    z_flags,ZFL_P, temp,AVR_V
+#else /* 8080 */
+       andi    z_flags,(1<<ZFL_C)|(1<<ZFL_H)   ; preserve C- and H-flag
+       inc     z_a
+       ldpmx   temp,sz53p_tab,z_a              ; S,Z,P flag
+       or      z_flags,temp
+#endif
        ret
 
 ;----------------------------------------------------------------
 ;|Mnemonic  |SZHPNC|Description          |Notes                 |
 ;----------------------------------------------------------------
 ;|DEC r     |***V1-|Decrement            |s=s-1                 |
-;|INC [HL]  |***V0-|Increment            |[HL]=[HL]+1           |
-;|INC [xx+d]|***V0-|Increment            |[xx+d]=[xx+d]+1       |
+;|DEC [HL]  |***V0-|Increment            |[HL]=[HL]-1           |
+;|DEC [xx+d]|***V0-|Increment            |[xx+d]=[xx+d]-1       |
 ;|----------|SZHP C|---------- 8080 ----------------------------|
-;|DEC r     |**-P -|Increment            |r=r+1                 |
-;|DEC [HL]  |**-P -|Increment            |[HL]=[HL]+1           |
-;
+;|DEC r     |**-P -|Increment            |r=r-1                 |
+;|DEC [HL]  |**-P -|Increment            |[HL]=[HL]-1           |
 ;
+
 do_op_dec:
        subi    opl,1
-       in    temp, sreg
-       andi    z_flags,(1<<ZFL_C)              ; preserve C-flag
-       ldpmx   temp2, sz53p_tab, opl
-       or      z_flags,temp2           ;
-       bmov    z_flags, ZFL_H, temp, AVR_H
-       do_z80_flags_V
-       do_z80_flags_set_N
+#if EM_Z80
+       in      temp,sreg
+       bmov    z_flags,ZFL_S, temp,AVR_N
+       bmov    z_flags,ZFL_Z, temp,AVR_Z
+       bmov    z_flags,ZFL_H, temp,AVR_H
+       bmov    z_flags,ZFL_P, temp,AVR_V
+       ori     z_flags,(1<<ZFL_N)              ; Set N-flag
+#else /* 8080 */
+       andi    z_flags,(1<<ZFL_C)|(1<<ZFL_H)   ; preserve C- and H-flag
+       ldpmx   temp,sz53p_tab,opl              ; S,Z,P flag
+       or      z_flags,temp
+#endif
        ret
 
+
 do_op_deca:
-       ldi     opl,1
-       sub     z_a,opl
-       in    temp, sreg
-       andi    z_flags,(1<<ZFL_C)              ; preserve C-flag
-       ldpmx   temp2, sz53p_tab, z_a
-       or      z_flags,temp2           ;
-       bmov    z_flags, ZFL_H, temp, AVR_H
-       do_z80_flags_V
-       do_z80_flags_set_N
+#if EM_Z80
+       ldi     temp,1
+       sub     z_a,temp
+       in      temp,sreg
+       bmov    z_flags,ZFL_S, temp,AVR_N
+       bmov    z_flags,ZFL_Z, temp,AVR_Z
+       bmov    z_flags,ZFL_H, temp,AVR_H
+       bmov    z_flags,ZFL_P, temp,AVR_V
+       ori     z_flags,(1<<ZFL_N)              ; Set N-flag
+#else /* 8080 */
+       dec     z_a
+       andi    z_flags,(1<<ZFL_C)|(1<<ZFL_H)   ; preserve C- and H-flag
+       ldpmx   temp,sz53p_tab,z_a              ; S,Z,P flag
+       or      z_flags,temp
+#endif
        ret
 
+
 ;----------------------------------------------------------------
 ;|Mnemonic  |SZHPNC|Description          |Notes                 |
 ;----------------------------------------------------------------
@@ -1349,8 +1391,7 @@ do_op_rmem8:
 ;----------------------------------------------------------------
 ;|DAA       |***P-*|Decimal Adjust Acc.  |                      |
 ;|----------|SZHP C|---------- 8080 ----------------------------|
-;
-; Not yet checked
+
 
 ; Description (http://www.z80.info/z80syntx.htm#DAA):
 ;  This instruction conditionally adjusts the accumulator for BCD addition
@@ -1397,17 +1438,18 @@ do_op_rmem8:
 ;     Z:   Set if Acc. is Zero after operation, reset otherwise.
 ;     S:   Set if most significant bit of Acc. is 1 after operation, reset otherwise.
 
-#if 1
 
-do_op_da:
+
+#if 0
 
 #if EM_Z80
        sbrc    z_flags,ZFL_N                   ;if add-op      
        rjmp    op_da_sub                       ;then
 #endif
 
+do_op_DAA:
 op_da_add:
-       ldi     temp2,0                         ;  new C and H flag
+       ldi     temp2,0                         ;  new C, H and N flag
        sbrc    z_flags,ZFL_H                   ;  |
        rjmp    op_da_a01                       ;  if (H flag ...
        mov     temp,opl                        ;  |
@@ -1439,19 +1481,48 @@ op_da_a13:                                      ;
 #if EM_Z80
 
 op_da_sub:                                     ;else (sub-op)
-       rcall do_op_inv                         ;  TODO: ! Z80 DAA whith N flag set.
-       ret                                     ;endif
+       ldi     temp2,(1<<ZFL_N)                ;  new C, H and N flag
+       sbrc    z_flags,ZFL_H                   ;  |
+       rjmp    op_da_s01                       ;  if (H flag ...
+       mov     temp,opl                        ;  |
+       andi    temp,0x0f                       ;  |
+       cpi     temp,0x0a                       ;  or (lower nibble >= 0x0A))
+       brlo    op_da_s10                       ;  |
+op_da_s01:                                     ;  then
+       ldi     oph,0x06                        ;    add 6 to lower nibble
+       sub     opl,oph                         ;    
+       brhc    PC+2                            ;    if 
+        ori    temp2,(1<<ZFL_H)                ;      set new H flag
+       brcc    op_da_s10                       ;    if
+       ori     temp2,(1<<ZFL_C)                ;      set new C flag
+op_da_s10:                                     ;  endif
+       sbrc    z_flags,ZFL_C                   ;  |
+       rjmp    op_da_s12                       ;  if (C flag ...
+       cpi     opl,0x90                        ;  |... or upper nibble >= 0xA0)
+       brlo    op_da_s13                       ; 
+op_da_s12:                                     ;
+       ldi     oph,0x60                        ;    add 6 to lower nibble
+       sub     opl,oph                         ;
+       ori     temp2,(1<<ZFL_C)                ;      set new C flag
+op_da_s13:                                     ;
+       ldpmx   z_flags, sz53p_tab, opl         ;  get S,Z,P flag
+       or      z_flags,temp2                   ;  merge new C and H flag
+       ret
+
 #endif
 
 #else
 
-do_op_da:
-       ldi     temp2,0                         ;new C and H flag
+do_op_DAA:
        ldi     oph,0                           ;oph: what to add
 
+#if EM_Z80
        sbrc    z_flags,ZFL_N                   ;if add-op      
        rjmp    op_da_sub                       ;then
+#endif
+
 op_da_add:
+       ldi     temp2,0                         ;  new C, H and N flag
        mov     temp,opl                        ;  |
        andi    temp,0x0f                       ;  |
        cpi     temp,0x0a                       ;  if (lower nibble >= 0x0A)
@@ -1482,9 +1553,9 @@ op_da_a13:
        ori     oph,0x06                        ;      add 0x06
        mov     temp,opl                        ;      |
        andi    temp,0x0f                       ;      |
-       cpi     temp,0x06                       ;      if (lower nibble >= 0x0A)
+       cpi     temp,0x06                       ;      if (lower nibble < 0x6)
        brsh    op_da_ae                        ;      |
-       ori     temp2,(1<<ZFL_H)                ;        set new H flag
+;      ori     temp2,(1<<ZFL_H)                ;        set new H flag
                                                ;      endif
                                                ;    endif
 op_da_ae:
@@ -1493,10 +1564,52 @@ op_da_ae:
        or      z_flags,temp2                   ; merge new C and H flag
        ret
 
+#if EM_Z80
+
 op_da_sub:                                     ;else (sub-op)
-       rcall do_op_inv                         ;  TODO: !
+       ldi     temp2,(1<<ZFL_N)                ;  new C, H and N flag
+       mov     temp,opl                        ;  |
+       andi    temp,0x0f                       ;  |
+       cpi     temp,0x0a                       ;  if (lower nibble >= 0x0A)
+       brlo    op_da_s10                       ;  |
+       ori     oph,0x06                        ;    sub 6
+
+       sbrc    z_flags,ZFL_C                   ;    |
+       rjmp    op_da_s02                       ;    if (C flag ...
+       cpi     opl,0x90                        ;    |... or upper nibble >= 0x90)
+       brlo    op_da_s03                       ;    |
+op_da_s02:                             
+       ori     oph,0x60                        ;      sub 0x60
+       ori     temp2,(1<<ZFL_C)                ;      set new C flag
+op_da_s03:                                     ;    endif
+       rjmp    op_da_se
+op_da_s10:                                     ;  else (lower nibble is 0x09 or lower)
+       sbrc    z_flags,ZFL_C                   ;    |
+       rjmp    op_da_s12                       ;    if (C flag ...
+       cpi     opl,0xA0                        ;    |... or upper nibble >= 0xA0)
+       brlo    op_da_s13                       ; 
+op_da_s12:                             
+       ori     oph,0x60                        ;      sub 0x60
+       ori     temp2,(1<<ZFL_C)                ;      set new C flag
+op_da_s13:
+       sbrs    z_flags,ZFL_H                   ;    if (H flag)
+       rjmp    op_da_se                        ;    |
+       ori     oph,0x06                        ;      sub 0x06
+       mov     temp,opl                        ;      |
+       andi    temp,0x0f                       ;      |
+       cpi     temp,0x06                       ;      if (lower nibble < 0x06)
+       brcc    op_da_se                        ;      |
+       ori     temp2,(1<<ZFL_H)                ;        set new H flag
+                                               ;      endif
+                                               ;    endif
+op_da_se:
+       sub     opl,oph
+       ldpmx   z_flags, sz53p_tab, opl         ; get S,Z,P flag
+       or      z_flags,temp2                   ; merge new C and H flag
        ret                                     ;endif
-#endif
+
+#endif  /* EM_Z80 */
+#endif  /* alternatives */
 
 
 ;----------------------------------------------------------------
@@ -1761,6 +1874,27 @@ do_op_ifm: ;sign negative, aka s=1
 ;----------------------------------------------------------------
 ;|DJNZ e    |------|Dec., Jump Non-Zero  |B=B-1 till B=0        |
 ;
+;The b register is decremented, and if not zero, the signed value e is added to pc.
+;The jump is measured from the start of the instruction opcode.
+;e = Relative addressing (PC=PC+2+offset)
+
+#if 1
+
+                               ; (Joe G.)
+do_op_DJNZ:                    ; decremt B, jump B=0
+       ldd     temp,y+oz_b     ; B in temp
+       dec     temp            ; temp decrementieren
+       std     y+oz_b,temp     ; temp in B
+       breq    do_op_DJNZ_Z    ; bei B=0
+       subi    opl, 0x80       ; z_pc + e im Zweierkomplement
+       subi    z_pcl,0x80
+       sbc     z_pch,_0
+       add     z_pcl,opl
+       adc     z_pch,_0
+do_op_DJNZ_Z:
+       ret
+
+#else
 
 do_op_djnz:
        ldd     temp,y+oz_b
@@ -1768,10 +1902,11 @@ do_op_djnz:
        std     y+oz_b,temp
        brne    opdjnze
        pop     temp                            ; nix tun
-       pop     temp                            ; direkt zuruech zu main        
+       pop     temp                            ; direkt zurueck zu main        
 opdjnze:
        ret
 
+#endif
 
 ;----------------------------------------------------------------
 ;|Mnemonic  |SZHPNC|Description          |Notes                 |
@@ -1810,11 +1945,16 @@ opexx_loop:
 do_op_djnz:
 do_op_EXAF:
 do_op_EXX:
+       ljmp    do_op_inv
        ret
 #endif
 
 #if EM_Z80
 
+do_op_noni:
+       sbiw    z_pcl,1                         ;--z_pc
+       ret
+
 do_op_prefixED:
        mem_read_ds zl,z_pc                     ;zl = memReadByte(z_pc)
        adiw    z_pcl,1                         ;++z_pc
@@ -1878,6 +2018,7 @@ do_op_prefixED:
 do_op_prefixDD:
 do_op_prefixFD:
 do_op_prefixCB:
+       ljmp    do_op_inv
        ret
 #endif
 
@@ -1906,7 +2047,7 @@ instr     fetch_C,        op_INC,         store_C         ;0C             ;INC C
 instr  fetch_C,        op_DEC,         store_C         ;0D             ;DEC C
 instr  fetch_DIR8,     op_nop,         store_C         ;0E nn          ;LD C,n
 instr  fetch_nop,      op_RRCA,        store_nop       ;0F             ;RRCA
-instr  fetch_DIR8,     op_DJNZ,        store_pcrel     ;10 oo          ;DJNZ o
+instr  fetch_DIR8,     op_DJNZ,        store_nop       ;10 oo          ;DJNZ o
 instr  fetch_DIR16,    op_nop,         store_DE        ;11 nn nn       ;LD DE,nn
 instr  fetch_nop,      op_nop,         store_MDE       ;12             ;LD (DE),A
 instr  fetch_DE,       op_INC16,       store_DE        ;13             ;INC DE
@@ -1929,7 +2070,7 @@ instr     fetch_HL,       op_INC16,       store_HL        ;23             ;INC HL
 instr  fetch_H,        op_INC,         store_H         ;24             ;INC H
 instr  fetch_H,        op_DEC,         store_H         ;25             ;DEC H
 instr  fetch_DIR8,     op_nop,         store_H         ;26 nn          ;LD H,n
-instr  fetch_A,        op_DA         store_A         ;27             ;DAA
+instr  fetch_A,        op_DAA,         store_A         ;27             ;DAA
 instr  fetch_DIR8,     op_IFZ,         store_pcrel     ;28 oo          ;JR Z,o
 instr  fetch_HL,       op_ADDHL,       store_nop       ;29             ;ADD HL,HL
 instr  fetch_DIR16,    op_RMEM16,      store_HL        ;2A nn nn       ;LD HL,(nn)
@@ -2156,6 +2297,12 @@ do_fetch_0:
        ldi     opl,0
        ret
 
+do_fetch_dir8_2:
+       movw    xl,z_pcl
+       adiw    xl,1
+       mem_read_d opl
+       ret
+
 ;----------------------------------------------------------------
 ;|Mnemonic  |SZHPNC|Description          |Notes                 |
 ;----------------------------------------------------------------
@@ -2454,7 +2601,7 @@ fetchmxx2:
        add     xl,opl                          ;add displacement
        adc     xh,oph
        mem_read_d opl                          ;get operand
-       ret
+       ret                                     ;(Ix+d) still in xl,xh
 
 
 do_fetch_xx:
@@ -2504,6 +2651,33 @@ storemxx2:
        mem_write_s opl                         ;store operand
        ret
 
+do_store_mxx_0:
+       mem_write_s opl                         ;store operand
+       ret
+
+do_store_mxx_2:
+       sbic    flags,prefixfd
+       rjmp    storemxx2_fd
+       ldd     xh,y+oz_xh
+       ldd     xl,y+oz_xl
+       rjmp    storemxx21
+storemxx2_fd:
+       ldd     xh,y+oz_yh
+       ldd     xl,y+oz_yl
+storemxx21:
+       mem_read_s z_pc                         ;get displacement
+       adiw    z_pcl,1
+       adiw    z_pcl,1
+       clr     temp2                           ;sign extend
+       tst     temp
+       brpl    storemxx22
+       com     temp2
+storemxx22:
+       add     xl,temp                         ;add displacement
+       adc     xh,temp2
+       mem_write_s opl                         ;store operand
+       ret
+
 do_store_xx:
        sbic    flags,prefixfd
        rjmp    storexx_fd
@@ -2601,101 +2775,56 @@ opadx_e:
 ;|LDIR      |--000-|Load, Inc., Repeat   |LDI till BC=0         |
 ;
 
-do_op_LDD:
-       ldd     oph,y+oz_b              ;B
-       ldd     opl,y+oz_c              ;C
-       ldd     xh,y+oz_d               ;D
-       ldd     xl,y+oz_e               ;E
+op_LDxx_common:
        ldd     zh,y+oz_h               ;H
        ldd     zl,y+oz_l               ;L
-       mem_read_ds temp, z
-       sbiw    z,1
-       mem_write_ds x, temp
-       sbiw    x,1
-       cbr     z_flags,(1<<ZFL_H) | (1<<ZFL_P) | (1<<ZFL_N)
-       subi    opl,1
-       sbci    oph,0
-       breq    PC+2
-        sbr    z_flags,(1<<ZFL_P)
-       std     y+oz_l,zl               ;L
-       std     y+oz_h,zh               ;H
-       std     y+oz_e,xl               ;E
-       std     y+oz_d,xh               ;D
-       std     y+oz_c,opl              ;C
-       std     y+oz_b,oph              ;B
-       ret
-
-
-do_op_LDDR:
-       ldd     oph,y+oz_b              ;B
-       ldd     opl,y+oz_c              ;C
        ldd     xh,y+oz_d               ;D
        ldd     xl,y+oz_e               ;E
-       ldd     zh,y+oz_h               ;H
-       ldd     zl,y+oz_l               ;L
-oplddr_l:
-       mem_read_ds temp, z
-       sbiw    z,1
-       mem_write_ds x, temp
-       sbiw    x,1
-       subi    opl,1
-       sbci    oph,0
-       brne    oplddr_l
-       std     y+oz_l,zl               ;L
-       std     y+oz_h,zh               ;H
-       std     y+oz_e,xl               ;E
-       std     y+oz_d,xh               ;D
-       std     y+oz_c,opl              ;C
-       std     y+oz_b,oph              ;B
-       cbr     z_flags,(1<<ZFL_H) | (1<<ZFL_P) | (1<<ZFL_N)
-       ret
-
-do_op_LDI:
        ldd     oph,y+oz_b              ;B
        ldd     opl,y+oz_c              ;C
-       ldd     xh,y+oz_d               ;D
-       ldd     xl,y+oz_e               ;E
-       ldd     zh,y+oz_h               ;H
-       ldd     zl,y+oz_l               ;L
        mem_read_ds temp, z
-       adiw    z,1
        mem_write_ds x, temp
-       adiw    x,1
        cbr     z_flags,(1<<ZFL_H) | (1<<ZFL_P) | (1<<ZFL_N)
        subi    opl,1
        sbci    oph,0
        breq    PC+2
         sbr    z_flags,(1<<ZFL_P)
-       std     y+oz_l,zl               ;L
-       std     y+oz_h,zh               ;H
-       std     y+oz_e,xl               ;E
-       std     y+oz_d,xh               ;D
        std     y+oz_c,opl              ;C
        std     y+oz_b,oph              ;B
        ret
 
-do_op_LDIR:
-       ldd     oph,y+oz_b              ;B
-       ldd     opl,y+oz_c              ;C
-       ldd     xh,y+oz_d               ;D
-       ldd     xl,y+oz_e               ;E
-       ldd     zh,y+oz_h               ;H
-       ldd     zl,y+oz_l               ;L
-opldir_l:
-       mem_read_ds temp, z
+do_op_LDI:
+       rcall   op_LDxx_common
        adiw    z,1
-       mem_write_ds x, temp
        adiw    x,1
-       subi    opl,1
-       sbci    oph,0
-       brne    opldir_l
+       std     y+oz_e,xl               ;E
+       std     y+oz_d,xh               ;D
        std     y+oz_l,zl               ;L
        std     y+oz_h,zh               ;H
+       ret
+
+do_op_LDD:
+       rcall   op_LDxx_common
+       sbiw    z,1
+       sbiw    x,1
        std     y+oz_e,xl               ;E
        std     y+oz_d,xh               ;D
-       std     y+oz_c,opl              ;C
-       std     y+oz_b,oph              ;B
-       cbr     z_flags,(1<<ZFL_H) | (1<<ZFL_P) | (1<<ZFL_N)
+       std     y+oz_l,zl               ;L
+       std     y+oz_h,zh               ;H
+       ret
+
+do_op_LDIR:
+       rcall   do_op_LDI
+       sbrs    z_flags,ZFL_P
+        ret
+       sbiw    z_pcl,2
+       ret
+
+do_op_LDDR:
+       rcall   do_op_LDD
+       sbrs    z_flags,ZFL_P
+        ret
+       sbiw    z_pcl,2
        ret
 
 ;----------------------------------------------------------------
@@ -2707,46 +2836,44 @@ opldir_l:
 ;|CPIR      |****1-|Compare, Inc., Repeat|CPI till A=[HL]or BC=0|
 
 
-do_op_CPI:
-       ldd     xh,y+oz_h               ;H
-       ldd     xl,y+oz_l               ;L
-       ldd     zh,y+oz_b               ;B
-       ldd     zl,y+oz_c               ;C
-       push    zh
-       push    zl
-       mem_read_ds opl, x
-       lcall   do_op_cpfa
-       pop     zl
-       pop     zh
-       adiw    x,1
-       sbiw    z,1
+op_CPxx_common:
+       ldd     xh,y+oz_h               ; H
+       ldd     xl,y+oz_l               ; L
+       ldd     zh,y+oz_b               ; B
+       ldd     zl,y+oz_c               ; C
+
+       cbr     z_flags,(1<<ZFL_S)|(1<<ZFL_Z)|(1<<ZFL_H)|(1<<ZFL_P)
+       sbr     z_flags,(1<<ZFL_N)
+       mem_read                        ; temp = (HL)
+       mov     temp2,z_a
+       sub     temp2,temp              ; A - (HL)
+       brpl    PC+2
+        sbr    z_flags,(1<<ZFL_S)
+       brne    PC+2
+        sbr    z_flags,(1<<ZFL_Z)
+       brhc    PC+2
+        sbr    z_flags,(1<<ZFL_H)
+
+       sbiw    z,1                     ; BC--
        breq    PC+2
         sbr    z_flags,(1<<ZFL_P)
-       std     y+oz_c,zl               ;C
-       std     y+oz_b,zh               ;B
-       std     y+oz_l,xl               ;L
-       std     y+oz_h,xh               ;H
+       std     y+oz_c,zl               ; C
+       std     y+oz_b,zh               ; B
+       ret
+
+do_op_CPI:
+       rcall   op_CPxx_common
+       adiw    x,1                     ; HL++
+       std     y+oz_l,xl               ; L
+       std     y+oz_h,xh               ; H
        ret
 
+
 do_op_CPD:
-       ldd     xh,y+oz_h               ;H
-       ldd     xl,y+oz_l               ;L
-       ldd     zh,y+oz_b               ;B
-       ldd     zl,y+oz_c               ;C
-       push    zh
-       push    zl
-       mem_read_ds opl, x
-       lcall   do_op_cpfa
-       pop     zl
-       pop     zh
-       sbiw    x,1
-       sbiw    z,1
-       breq    PC+2
-        sbr    z_flags,(1<<ZFL_P)
-       std     y+oz_c,zl               ;C
-       std     y+oz_b,zh               ;B
-       std     y+oz_l,xl               ;L
-       std     y+oz_h,xh               ;H
+       rcall   op_CPxx_common
+       sbiw    x,1                     ; HL--
+       std     y+oz_l,xl               ; L
+       std     y+oz_h,xh               ; H
        ret
 
 do_op_CPIR:
@@ -2767,6 +2894,201 @@ do_op_CPDR:
        sbiw    z_pcl,2
        ret
 
+;----------------------------------------------------------------
+;|Mnemonic  |SZHPNC|Description          |Notes                 |
+;----------------------------------------------------------------
+;|INI       |?*??1-|Input and Increment  |[HL]=[C],HL=HL+1,B=B-1|
+;|IND       |?*??1-|Input and Decrement  |[HL]=[C],HL=HL-1,B=B-1|
+;|INIR      |?1??1-|Input, Inc., Repeat  |INI till B=0          |
+;|INDR      |?1??1-|Input, Dec., Repeat  |IND till B=0          |
+
+op_INxx_common:
+       cbr     z_flags,(1<<ZFL_Z)
+       sbr     z_flags,(1<<ZFL_N)
+       ldd     temp2,y+oz_c            ;C
+       lcall   portRead
+       ldd     xh,y+oz_h               ;H
+       ldd     xl,y+oz_l               ;L
+       lcall   dram_write
+       ldd     temp,y+oz_b             ;B
+       dec     temp
+       std     y+oz_b,temp             ;B
+       brne    PC+2
+        sbr    z_flags,(1<<ZFL_Z)
+       ret
+
+do_op_INI:
+       rcall   op_INxx_common
+       adiw    x,1
+       std     y+oz_l,xl               ;L
+       std     y+oz_h,xh               ;H
+       ret
+
+do_op_IND:
+       rcall   op_INxx_common
+       sbiw    x,1
+       std     y+oz_l,xl               ;L
+       std     y+oz_h,xh               ;H
+       ret
+
+do_op_INIR:
+       rcall   do_op_INI
+       sbrc    z_flags,ZFL_Z
+        ret
+       sbiw    z_pcl,2
+       ret
+
+do_op_INDR:
+       rcall   do_op_IND
+       sbrc    z_flags,ZFL_Z
+        ret
+       sbiw    z_pcl,2
+       ret
+
+;----------------------------------------------------------------
+;|Mnemonic  |SZHPNC|Description          |Notes                 |
+;----------------------------------------------------------------
+;|OUTI      |?*??1-|Output and Increment |[C]=[HL],HL=HL+1,B=B-1|
+;|OUTD      |?*??1-|Output and Decrement |[C]=[HL],HL=HL-1,B=B-1|
+;|OTIR      |?1??1-|Output, Inc., Repeat |OUTI till B=0         |
+;|OTDR      |?1??1-|Output, Dec., Repeat |OUTD till B=0         |
+
+op_OUTxx_common:
+       cbr     z_flags,(1<<ZFL_Z)
+       sbr     z_flags,(1<<ZFL_N)
+       lcall   dram_read               ;temp = (z)
+       ldd     temp2,y+oz_c            ;C
+       lcall   portWrite
+       ldd     temp,y+oz_b             ;B
+       dec     temp
+       std     y+oz_b,temp             ;B
+       brne    PC+2
+        sbr    z_flags,(1<<ZFL_Z)
+       ret
+
+do_op_OUTI:
+       ldd     xh,y+oz_h               ;H
+       ldd     xl,y+oz_l               ;L
+       adiw    x,1
+       std     y+oz_l,xl               ;L
+       std     y+oz_h,xh               ;H
+       sbiw    x,1
+       rcall   op_OUTxx_common
+       ret
+
+do_op_OUTD:
+       ldd     xh,y+oz_h               ;H
+       ldd     xl,y+oz_l               ;L
+       sbiw    x,1
+       std     y+oz_l,xl               ;L
+       std     y+oz_h,xh               ;H
+       adiw    x,1
+       rcall   op_OUTxx_common
+       ret
+
+do_op_OTIR:
+       rcall   do_op_OUTI
+       sbrc    z_flags,ZFL_Z
+        ret
+       sbiw    z_pcl,2
+       ret
+
+do_op_OTDR:
+       rcall   do_op_OUTD
+       sbrc    z_flags,ZFL_Z
+        ret
+       sbiw    z_pcl,2
+       ret
+
+
+;----------------------------------------------------------------
+;|Mnemonic  |SZHPNC|Description          |Notes                 |
+;----------------------------------------------------------------
+;|RLC m     |**0P0*|Rotate Left Circular |m=m<-                 |
+;|RRC m     |**0P0*|Rotate Right Circular|m=->m                 |
+;|RL m      |**0P0*|Rotate Left          |m={CY,m}<-            |
+;|RR m      |**0P0*|Rotate Right         |m=->{CY,m}            |
+;|SLA m     |**0P0*|Shift Left Arithmetic|m=m*2                 |
+;|SRA m     |**0P0*|Shift Right Arith.   |m=m/2                 |
+;|SLL m     |**0P0*|Shift Right Logical  |
+;|SRL m     |**0P0*|Shift Right Logical  |m=->{0,m,CY}          |
+
+
+do_op_rlc:
+       ;Rotate Left Cyclical. All bits move 1 to the 
+       ;left, the msb becomes c and lsb.
+       clr     temp
+       lsl     opl
+       adc     temp,_0
+       or      opl,temp
+       ldpmx   z_flags,sz53p_tab,opl           ;S,Z,H,P,N      
+       or      z_flags,temp
+       ret
+
+do_op_rrc: 
+       ;Rotate Right Cyclical. All bits move 1 to the 
+       ;right, the lsb becomes c and msb.
+       lsr     opl
+       brcc    PC+2
+       ori     opl,0x80
+       ldpmx   z_flags,sz53p_tab,opl           ;S,Z,H,P,N      
+       bmov    z_flags,ZFL_C, opl,7
+       ret
+
+
+do_op_rl:
+       ;Rotate Left. All bits move 1 to the left, the msb 
+       ;becomes c, c becomes lsb.
+       clc
+       sbrc    z_flags,ZFL_C
+        sec
+       rol     opl
+       in      temp,sreg
+       ldpmx   z_flags,sz53p_tab,opl           ;S,Z,H,P,N      
+       bmov    z_flags,ZFL_C, temp,AVR_C
+       ret
+
+
+do_op_rr:
+       ;Rotate Right. All bits move 1 to the right, the lsb 
+       ;becomes c, c becomes msb.
+
+       ror     opl
+       in      temp,sreg                       ;CY
+       bmov    opl,7, z_flags,ZFL_C            ;old CY --> Bit 7
+       ldpmx   z_flags,sz53p_tab,opl           ;S,Z,H,P,N      
+       bmov    z_flags,ZFL_C, temp,AVR_C       ;
+       ret
+
+do_op_sla:
+       lsl     opl
+       in      temp,sreg
+       ldpmx   z_flags,sz53p_tab,opl           ;S,Z,H,P,N      
+       bmov    z_flags,ZFL_C, temp,AVR_C       ;
+       ret
+
+do_op_sra:
+       lsr     opl
+       in      temp,sreg
+       bmov    opl,7, opl,6                    ;old CY --> Bit 7
+       ldpmx   z_flags,sz53p_tab,opl           ;S,Z,H,P,N      
+       bmov    z_flags,ZFL_C, temp,AVR_C       ;
+       ret
+
+do_op_sll:
+       sec
+       rol     opl
+       in      temp,sreg
+       ldpmx   z_flags,sz53p_tab,opl           ;S,Z,H,P,N      
+       bmov    z_flags,ZFL_C, temp,AVR_C       ;
+       ret
+
+do_op_srl:
+       lsr     opl
+       in      temp,sreg
+       ldpmx   z_flags,sz53p_tab,opl           ;S,Z,H,P,N      
+       bmov    z_flags,ZFL_C, temp,AVR_C       ;
+       ret
 
 ;----------------------------------------------------------------
 ;|Mnemonic  |SZHPNC|Description          |Notes                 |
@@ -2775,8 +3097,6 @@ do_op_CPDR:
 ;|RES b,m   |------|Reset bit            |m=m&{~2^b}            |
 ;|SET b,m   |------|Set bit              |m=mv{2^b}             |
 
-;      .org ((PC+255) & 0xff00) + 0x600
-
 
 do_op_BIT7:
        ldi     temp,0x80
@@ -2805,7 +3125,7 @@ opbit:
        and     temp,opl
        in      temp,sreg
        ori     z_flags,(1<<ZFL_H)
-       andi    z_flags,~((1<<ZFL_N) | (1<<ZFL_Z))
+       andi    z_flags,~(1<<ZFL_N)
        bmov    z_flags,ZFL_Z, temp,AVR_Z
        ret
 
@@ -2994,7 +3314,7 @@ instr     fetch_B,        op_OUT,         store_nop       ;41             ;OUT (C),B
 instr  fetch_BC,       op_SBCHL,       store_nop       ;42             ;SBC HL,BC
 instr  fetch_DIR16,    op_STBC,        store_nop       ;43             ;LD (nn),BC
 instr  fetch_nop,      op_NEG,         store_nop       ;44             ;NEG
-instr  fetch_nop,      op_retn,        store_nop       ;45             ;RETN
+instr  fetch_nop,      op_RETN,        store_nop       ;45             ;RETN
 instr  fetch_nop,      op_IM0,         store_nop       ;46             ;IM 0
 instr  fetch_nop,      op_ldia,        store_nop       ;47             ;LD I,A
 instr  fetch_C,        op_IN,          store_C         ;48             ;IN C,(C)
@@ -3002,7 +3322,7 @@ instr     fetch_C,        op_OUT,         store_nop       ;49             ;OUT (C),C
 instr  fetch_BC,       op_ADCHL,       store_nop       ;4A             ;ADC HL,BC
 instr  fetch_DIR16,    op_RMEM16,      store_BC        ;4B nn nn       ;LD BC,(nn)
 instr  fetch_nop,      op_NEG,         store_nop       ;4C             ;NEG
-instr  fetch_nop,      op_reti,        store_nop       ;4D             ;RETI
+instr  fetch_nop,      op_RETI,        store_nop       ;4D             ;RETI
 instr  fetch_nop,      op_IM0,         store_nop       ;4E             ;IM 0
 instr  fetch_nop,      op_ldra,        store_nop       ;4F             ;LD R,A
 instr  fetch_C,        op_IN,          store_D         ;50             ;IN D,(C)
@@ -3010,7 +3330,7 @@ instr     fetch_D,        op_OUT,         store_nop       ;51             ;OUT (C),D
 instr  fetch_DE,       op_SBCHL,       store_nop       ;52             ;SBC HL,DE
 instr  fetch_DIR16,    op_STDE,        store_nop       ;53 nn nn       ;LD (nn),DE
 instr  fetch_nop,      op_NEG,         store_nop       ;54             ;NEG
-instr  fetch_nop,      op_retn,        store_nop       ;55             ;RETN
+instr  fetch_nop,      op_RETN,        store_nop       ;55             ;RETN
 instr  fetch_nop,      op_IM1,         store_nop       ;56             ;IM 1
 instr  fetch_nop,      op_ldai,        store_nop       ;57             ;LD A,I
 instr  fetch_C,        op_IN,          store_E         ;58             ;IN E,(C)
@@ -3018,7 +3338,7 @@ instr     fetch_E,        op_OUT,         store_nop       ;59             ;OUT (C),E
 instr  fetch_DE,       op_ADCHL,       store_nop       ;5A             ;ADC HL,DE
 instr  fetch_DIR16,    op_RMEM16,      store_DE        ;5B nn nn       ;LD DE,(nn)
 instr  fetch_nop,      op_NEG,         store_nop       ;5C             ;NEG
-instr  fetch_nop,      op_retn,        store_nop       ;5D             ;RETN
+instr  fetch_nop,      op_RETN,        store_nop       ;5D             ;RETN
 instr  fetch_nop,      op_IM2,         store_nop       ;5E             ;IM 2
 instr  fetch_nop,      op_ldar,        store_nop       ;5F             ;LD A,R
 instr  fetch_C,        op_IN,          store_H         ;60             ;IN H,(C)
@@ -3026,7 +3346,7 @@ instr     fetch_H,        op_OUT,         store_nop       ;61             ;OUT (C),H
 instr  fetch_HL,       op_SBCHL,       store_nop       ;62             ;SBC HL,HL
 instr  fetch_DIR16,    op_STHL,        store_nop       ;63 nn nn       ;LD (nn),HL
 instr  fetch_nop,      op_NEG,         store_nop       ;64             ;NEG
-instr  fetch_nop,      op_retn,        store_nop       ;65             ;RETN
+instr  fetch_nop,      op_RETN,        store_nop       ;65             ;RETN
 instr  fetch_nop,      op_IM0,         store_nop       ;66             ;IM 0
 instr  fetch_mhl,      op_RRD,         store_mhl       ;67             ;RRD
 instr  fetch_C,        op_IN,          store_L         ;68             ;IN L,(C)
@@ -3034,7 +3354,7 @@ instr     fetch_L,        op_OUT,         store_nop       ;69             ;OUT (C),L
 instr  fetch_HL,       op_ADCHL,       store_nop       ;6A             ;ADC HL,HL
 instr  fetch_DIR16,    op_RMEM16,      store_HL        ;6B nn nn       ;LD HL,(nn)
 instr  fetch_nop,      op_NEG,         store_nop       ;6C             ;NEG
-instr  fetch_nop,      op_retn,        store_nop       ;6D             ;RETN
+instr  fetch_nop,      op_RETN,        store_nop       ;6D             ;RETN
 instr  fetch_nop,      op_IM0,         store_nop       ;6E             ;IM 0
 instr  fetch_mhl,      op_RLD,         store_mhl       ;6F             ;RLD
 instr  fetch_C,        op_IN,          store_nop       ;70             ;IN (C)
@@ -3042,7 +3362,7 @@ instr     fetch_0,        op_OUT,         store_nop       ;71             ;OUT (C),0
 instr  fetch_SP,       op_SBCHL,       store_nop       ;72             ;SBC HL,SP
 instr  fetch_DIR16,    op_STSP,        store_nop       ;73 nn nn       ;LD (nn),SP
 instr  fetch_nop,      op_NEG,         store_nop       ;74             ;NEG
-instr  fetch_nop,      op_retn,        store_nop       ;75             ;RETN
+instr  fetch_nop,      op_RETN,        store_nop       ;75             ;RETN
 instr  fetch_nop,      op_IM1,         store_nop       ;76             ;IM 1
 instr  fetch_nop,      op_nop,         store_nop       ;77             ;NOP
 instr  fetch_C,        op_IN,          store_A         ;78             ;IN A,(C)
@@ -3050,7 +3370,7 @@ instr     fetch_A,        op_OUT,         store_nop       ;79             ;OUT (C),A
 instr  fetch_SP,       op_ADCHL,       store_nop       ;7A             ;ADC HL,SP
 instr  fetch_DIR16,    op_RMEM16,      store_SP        ;7B nn nn       ;LD SP,(nn)
 instr  fetch_nop,      op_NEG,         store_nop       ;7C             ;NEG
-instr  fetch_nop,      op_retn,        store_nop       ;7D             ;RETN
+instr  fetch_nop,      op_RETN,        store_nop       ;7D             ;RETN
 instr  fetch_nop,      op_IM2,         store_nop       ;7E             ;IM 2
 instr  fetch_nop,      op_nop,         store_nop       ;7F             ;NOP
 instr  fetch_nop,      op_nop,         store_nop       ;80             ;NOP
@@ -3087,32 +3407,32 @@ instr   fetch_nop,      op_nop,         store_nop       ;9E             ;NOP
 instr  fetch_nop,      op_nop,         store_nop       ;9F             ;NOP
 instr  fetch_nop,      op_LDI,         store_nop       ;A0             ;LDI
 instr  fetch_nop,      op_CPI,         store_nop       ;A1             ;CPI
-instr  fetch_nop,      op_nop,         store_nop       ;A2             ;   TODO:
-instr  fetch_nop,      op_nop,         store_nop       ;A3             ;
+instr  fetch_nop,      op_INI,         store_nop       ;A2             ;INI
+instr  fetch_nop,      op_OUTI,        store_nop       ;A3             ;OUTI
 instr  fetch_nop,      op_nop,         store_nop       ;A4             ;NOP
 instr  fetch_nop,      op_nop,         store_nop       ;A5             ;NOP
 instr  fetch_nop,      op_nop,         store_nop       ;A6             ;NOP
 instr  fetch_nop,      op_nop,         store_nop       ;A7             ;NOP
 instr  fetch_nop,      op_LDD,         store_nop       ;A8             ;LDD
 instr  fetch_nop,      op_CPD,         store_nop       ;A9             ;CPD
-instr  fetch_nop,      op_nop,         store_nop       ;AA             ;    TODO:
-instr  fetch_nop,      op_nop,         store_nop       ;AB             ;
+instr  fetch_nop,      op_IND,         store_nop       ;AA             ;IND
+instr  fetch_nop,      op_OUTD,        store_nop       ;AB             ;OUTD
 instr  fetch_nop,      op_nop,         store_nop       ;AC             ;NOP
 instr  fetch_nop,      op_nop,         store_nop       ;AD             ;NOP
 instr  fetch_nop,      op_nop,         store_nop       ;AE             ;NOP
 instr  fetch_nop,      op_nop,         store_nop       ;AF             ;NOP
 instr  fetch_nop,      op_LDIR,        store_nop       ;B0             ;LDIR
 instr  fetch_nop,      op_CPIR,        store_nop       ;B1             ;CPIR
-instr  fetch_nop,      op_nop,         store_nop       ;B2             ;
-instr  fetch_nop,      op_nop,         store_nop       ;B3             ;
+instr  fetch_nop,      op_INIR,        store_nop       ;B2             ;INIR
+instr  fetch_nop,      op_OTIR,        store_nop       ;B3             ;OTIR
 instr  fetch_nop,      op_nop,         store_nop       ;B4             ;NOP
 instr  fetch_nop,      op_nop,         store_nop       ;B5             ;NOP
 instr  fetch_nop,      op_nop,         store_nop       ;B6             ;NOP
 instr  fetch_nop,      op_nop,         store_nop       ;B7             ;NOP
 instr  fetch_nop,      op_LDDR,        store_nop       ;B8             ;LDDR
 instr  fetch_nop,      op_CPDR,        store_nop       ;B9             ;CPDR
-instr  fetch_nop,      op_nop,         store_nop       ;BA             ;
-instr  fetch_nop,      op_nop,         store_nop       ;BB             ;   TODO:
+instr  fetch_nop,      op_INDR,        store_nop       ;BA             ;INDR
+instr  fetch_nop,      op_OTDR,        store_nop       ;BB             ;OTDR
 instr  fetch_nop,      op_nop,         store_nop       ;BC             ;NOP
 instr  fetch_nop,      op_nop,         store_nop       ;BD             ;NOP
 instr  fetch_nop,      op_nop,         store_nop       ;BE             ;NOP
@@ -3185,330 +3505,330 @@ instr         fetch_nop,      op_nop,         store_nop       ;FF             ;NOP
 
        opctable        DDFDjmp
 
-instr  fetch_nop,      op_nop,         store_nop       ;00             ;
-instr  fetch_nop,      op_nop,         store_nop       ;01             ;
-instr  fetch_nop,      op_nop,         store_nop       ;02             ;
-instr  fetch_nop,      op_nop,         store_nop       ;03             ;
-instr  fetch_nop,      op_nop,         store_nop       ;04             ;
-instr  fetch_nop,      op_nop,         store_nop       ;05             ;
-instr  fetch_nop,      op_nop,         store_nop       ;06             ;
-instr  fetch_nop,      op_nop,         store_nop       ;07             ;
-instr  fetch_nop,      op_nop,         store_nop       ;08             ;
+instr  fetch_nop,      op_noni,                store_nop       ;00             ;
+instr  fetch_nop,      op_noni,        store_nop       ;01             ;
+instr  fetch_nop,      op_noni,        store_nop       ;02             ;
+instr  fetch_nop,      op_noni,        store_nop       ;03             ;
+instr  fetch_nop,      op_noni,        store_nop       ;04             ;
+instr  fetch_nop,      op_noni,        store_nop       ;05             ;
+instr  fetch_nop,      op_noni,        store_nop       ;06             ;
+instr  fetch_nop,      op_noni,        store_nop       ;07             ;
+instr  fetch_nop,      op_noni,        store_nop       ;08             ;
 instr  fetch_BC,       op_ADDxx,       store_nop       ;09             ;ADD xx,BC
-instr  fetch_nop,      op_nop,         store_nop       ;0A             ;
-instr  fetch_nop,      op_nop,         store_nop       ;0B             ;
-instr  fetch_nop,      op_nop,         store_nop       ;0C             ;
-instr  fetch_nop,      op_nop,         store_nop       ;0D             ;
-instr  fetch_nop,      op_nop,         store_nop       ;0E             ;
-instr  fetch_nop,      op_nop,         store_nop       ;0F             ;
-instr  fetch_nop,      op_nop,         store_nop       ;10             ;
-instr  fetch_nop,      op_nop,         store_nop       ;11             ;
-instr  fetch_nop,      op_nop,         store_nop       ;12             ;
-instr  fetch_nop,      op_nop,         store_nop       ;13             ;
-instr  fetch_nop,      op_nop,         store_nop       ;14             ;
-instr  fetch_nop,      op_nop,         store_nop       ;15             ;
-instr  fetch_nop,      op_nop,         store_nop       ;16             ;
-instr  fetch_nop,      op_nop,         store_nop       ;17             ;
-instr  fetch_nop,      op_nop,         store_nop       ;18             ;
+instr  fetch_nop,      op_noni,        store_nop       ;0A             ;
+instr  fetch_nop,      op_noni,        store_nop       ;0B             ;
+instr  fetch_nop,      op_noni,        store_nop       ;0C             ;
+instr  fetch_nop,      op_noni,        store_nop       ;0D             ;
+instr  fetch_nop,      op_noni,        store_nop       ;0E             ;
+instr  fetch_nop,      op_noni,        store_nop       ;0F             ;
+instr  fetch_nop,      op_noni,        store_nop       ;10             ;
+instr  fetch_nop,      op_noni,        store_nop       ;11             ;
+instr  fetch_nop,      op_noni,        store_nop       ;12             ;
+instr  fetch_nop,      op_noni,        store_nop       ;13             ;
+instr  fetch_nop,      op_noni,        store_nop       ;14             ;
+instr  fetch_nop,      op_noni,        store_nop       ;15             ;
+instr  fetch_nop,      op_noni,        store_nop       ;16             ;
+instr  fetch_nop,      op_noni,        store_nop       ;17             ;
+instr  fetch_nop,      op_noni,        store_nop       ;18             ;
 instr  fetch_DE,       op_ADDxx,       store_nop       ;19             ;ADD xx,DE
-instr  fetch_nop,      op_nop,         store_nop       ;1A             ;
-instr  fetch_nop,      op_nop,         store_nop       ;1B             ;
-instr  fetch_nop,      op_nop,         store_nop       ;1C             ;
-instr  fetch_nop,      op_nop,         store_nop       ;1D             ;
-instr  fetch_nop,      op_nop,         store_nop       ;1E             ;
-instr  fetch_nop,      op_nop,         store_nop       ;1F             ;
-instr  fetch_nop,      op_nop,         store_nop       ;20             ;
+instr  fetch_nop,      op_noni,        store_nop       ;1A             ;
+instr  fetch_nop,      op_noni,        store_nop       ;1B             ;
+instr  fetch_nop,      op_noni,        store_nop       ;1C             ;
+instr  fetch_nop,      op_noni,        store_nop       ;1D             ;
+instr  fetch_nop,      op_noni,        store_nop       ;1E             ;
+instr  fetch_nop,      op_noni,        store_nop       ;1F             ;
+instr  fetch_nop,      op_noni,        store_nop       ;20             ;
 instr  fetch_DIR16,    op_nop,         store_xx        ;21             ;LD xx,nn
 instr  fetch_DIR16,    op_STxx,        store_nop       ;22             ;LD (nn),xx
 instr  fetch_xx,       op_INC16,       store_xx        ;23             ;INC xx
-instr  fetch_xh,       op_INC,         store_xh        ;24             ;INC xh
-instr  fetch_xh,       op_DEC,         store_xh        ;25             ;DEC xh
-instr  fetch_DIR8,     op_nop,         store_xh        ;26             ;LD xh,n
-instr  fetch_nop,      op_nop,         store_nop       ;27             ;
-instr  fetch_nop,      op_nop,         store_nop       ;28             ;
+instr  fetch_xH,       op_INC,         store_xH        ;24             ;INC xh
+instr  fetch_xH,       op_DEC,         store_xH        ;25             ;DEC xh
+instr  fetch_DIR8,     op_nop,         store_xH        ;26             ;LD xh,n
+instr  fetch_nop,      op_noni,        store_nop       ;27             ;
+instr  fetch_nop,      op_noni,        store_nop       ;28             ;
 instr  fetch_xx,       op_ADDxx,       store_nop       ;29             ;ADD xx,xx
 instr  fetch_DIR16,    op_RMEM16,      store_xx        ;2A             ;LD xx,(nn)
 instr  fetch_xx,       op_DEC16,       store_xx        ;2B             ;DEC xx
-instr  fetch_xl,       op_INC,         store_xl        ;2C             ;INC xl
-instr  fetch_xl,       op_DEC,         store_xl        ;2D             ;DEC xl
-instr  fetch_DIR8,     op_nop,         store_xl        ;2E             ;LD xl,n
-instr  fetch_nop,      op_nop,         store_nop       ;2F             ;
-instr  fetch_nop,      op_nop,         store_nop       ;30             ;
-instr  fetch_nop,      op_nop,         store_nop       ;31             ;
-instr  fetch_nop,      op_nop,         store_nop       ;32             ;
-instr  fetch_nop,      op_nop,         store_nop       ;33             ;
-instr  fetch_MXX,      op_INC,         store_MXX       ;34             ;INC (xx+d)
-instr  fetch_MXX,      op_DEC,         store_MXX       ;35             ;DEC (xx+d)
-instr  fetch_DIR8,     op_nop,         store_MXX       ;36             ;LD (xx+d),n
-instr  fetch_nop,      op_nop,         store_nop       ;37             ;
-instr  fetch_nop,      op_nop,         store_nop       ;38             ;
+instr  fetch_xL,       op_INC,         store_xL        ;2C             ;INC xl
+instr  fetch_xL,       op_DEC,         store_xL        ;2D             ;DEC xl
+instr  fetch_DIR8,     op_nop,         store_xL        ;2E             ;LD xl,n
+instr  fetch_nop,      op_noni,        store_nop       ;2F             ;
+instr  fetch_nop,      op_noni,        store_nop       ;30             ;
+instr  fetch_nop,      op_noni,        store_nop       ;31             ;
+instr  fetch_nop,      op_noni,        store_nop       ;32             ;
+instr  fetch_nop,      op_noni,        store_nop       ;33             ;
+instr  fetch_MXX,      op_INC,         store_MXX_0     ;34             ;INC (xx+d)
+instr  fetch_MXX,      op_DEC,         store_MXX_0     ;35             ;DEC (xx+d)
+instr  fetch_DIR8_2,   op_nop,         store_MXX_2     ;36             ;LD (xx+d),n
+instr  fetch_nop,      op_noni,        store_nop       ;37             ;
+instr  fetch_nop,      op_noni,        store_nop       ;38             ;
 instr  fetch_SP,       op_ADDxx,       store_nop       ;39             ;ADD xx,SP
-instr  fetch_nop,      op_nop,         store_nop       ;3A             ;
-instr  fetch_nop,      op_nop,         store_nop       ;3B             ;
-instr  fetch_nop,      op_nop,         store_nop       ;3C             ;
-instr  fetch_nop,      op_nop,         store_nop       ;3D             ;
-instr  fetch_nop,      op_nop,         store_nop       ;3E             ;
-instr  fetch_nop,      op_nop,         store_nop       ;3F             ;
-instr  fetch_nop,      op_nop,         store_nop       ;40             ;
-instr  fetch_nop,      op_nop,         store_nop       ;41             ;
-instr  fetch_nop,      op_nop,         store_nop       ;42             ;
-instr  fetch_nop,      op_nop,         store_nop       ;43             ;
-instr  fetch_xh,       op_nop,         store_B         ;44             ;LD B,xh
-instr  fetch_xl,       op_nop,         store_B         ;45             ;LD B,xl
+instr  fetch_nop,      op_noni,        store_nop       ;3A             ;
+instr  fetch_nop,      op_noni,        store_nop       ;3B             ;
+instr  fetch_nop,      op_noni,        store_nop       ;3C             ;
+instr  fetch_nop,      op_noni,        store_nop       ;3D             ;
+instr  fetch_nop,      op_noni,        store_nop       ;3E             ;
+instr  fetch_nop,      op_noni,        store_nop       ;3F             ;
+instr  fetch_nop,      op_noni,        store_nop       ;40             ;
+instr  fetch_nop,      op_noni,        store_nop       ;41             ;
+instr  fetch_nop,      op_noni,        store_nop       ;42             ;
+instr  fetch_nop,      op_noni,        store_nop       ;43             ;
+instr  fetch_xH,       op_nop,         store_B         ;44             ;LD B,xh
+instr  fetch_xL,       op_nop,         store_B         ;45             ;LD B,xl
 instr  fetch_MXX,      op_nop,         store_B         ;46             ;LD B,(xx+d)
-instr  fetch_nop,      op_nop,         store_nop       ;47             ;
-instr  fetch_nop,      op_nop,         store_nop       ;48             ;
-instr  fetch_nop,      op_nop,         store_nop       ;49             ;
-instr  fetch_nop,      op_nop,         store_nop       ;4A             ;
-instr  fetch_nop,      op_nop,         store_nop       ;4B             ;
-instr  fetch_xh,       op_nop,         store_C         ;4C             ;LD C,xh
-instr  fetch_xl,       op_nop,         store_C         ;4D             ;LD C,xl
+instr  fetch_nop,      op_noni,        store_nop       ;47             ;
+instr  fetch_nop,      op_noni,        store_nop       ;48             ;
+instr  fetch_nop,      op_noni,        store_nop       ;49             ;
+instr  fetch_nop,      op_noni,        store_nop       ;4A             ;
+instr  fetch_nop,      op_noni,        store_nop       ;4B             ;
+instr  fetch_xH,       op_nop,         store_C         ;4C             ;LD C,xh
+instr  fetch_xL,       op_nop,         store_C         ;4D             ;LD C,xl
 instr  fetch_MXX,      op_nop,         store_C         ;4E             ;LD C,(xx+d)
-instr  fetch_nop,      op_nop,         store_nop       ;4F             ;
-instr  fetch_nop,      op_nop,         store_nop       ;50             ;
-instr  fetch_nop,      op_nop,         store_nop       ;51             ;
-instr  fetch_nop,      op_nop,         store_nop       ;52             ;
-instr  fetch_nop,      op_nop,         store_nop       ;53             ;
-instr  fetch_xh,       op_nop,         store_D         ;54             ;LD D,xh
-instr  fetch_xl,       op_nop,         store_D         ;55             ;LD D,xl
+instr  fetch_nop,      op_noni,        store_nop       ;4F             ;
+instr  fetch_nop,      op_noni,        store_nop       ;50             ;
+instr  fetch_nop,      op_noni,        store_nop       ;51             ;
+instr  fetch_nop,      op_noni,        store_nop       ;52             ;
+instr  fetch_nop,      op_noni,        store_nop       ;53             ;
+instr  fetch_xH,       op_nop,         store_D         ;54             ;LD D,xh
+instr  fetch_xL,       op_nop,         store_D         ;55             ;LD D,xl
 instr  fetch_MXX,      op_nop,         store_D         ;56             ;LD D,(xx+d)
-instr  fetch_nop,      op_nop,         store_nop       ;57             ;
-instr  fetch_nop,      op_nop,         store_nop       ;58             ;
-instr  fetch_nop,      op_nop,         store_nop       ;59             ;
-instr  fetch_nop,      op_nop,         store_nop       ;5A             ;
-instr  fetch_nop,      op_nop,         store_nop       ;5B             ;
-instr  fetch_xh,       op_nop,         store_E         ;5C             ;LD E,xh
-instr  fetch_xl,       op_nop,         store_E         ;5D             ;LD E,xl
+instr  fetch_nop,      op_noni,        store_nop       ;57             ;
+instr  fetch_nop,      op_noni,        store_nop       ;58             ;
+instr  fetch_nop,      op_noni,        store_nop       ;59             ;
+instr  fetch_nop,      op_noni,        store_nop       ;5A             ;
+instr  fetch_nop,      op_noni,        store_nop       ;5B             ;
+instr  fetch_xH,       op_nop,         store_E         ;5C             ;LD E,xh
+instr  fetch_xL,       op_nop,         store_E         ;5D             ;LD E,xl
 instr  fetch_MXX,      op_nop,         store_E         ;5E             ;LD E,(xx+d)
-instr  fetch_nop,      op_nop,         store_nop       ;5F             ;
-instr  fetch_B,        op_nop,         store_xh        ;60             ;LD xh,B
-instr  fetch_C,        op_nop,         store_xh        ;61             ;LD xh,C
-instr  fetch_D,        op_nop,         store_xh        ;62             ;LD xh,D
-instr  fetch_E,        op_nop,         store_xh        ;63             ;LD xh,E
-instr  fetch_nop,      op_nop,         store_nop       ;64             ;LD xh,xh
-instr  fetch_xl,       op_nop,         store_xh        ;65             ;LD xh,xl
+instr  fetch_nop,      op_noni,        store_nop       ;5F             ;
+instr  fetch_B,        op_nop,         store_xH        ;60             ;LD xh,B
+instr  fetch_C,        op_nop,         store_xH        ;61             ;LD xh,C
+instr  fetch_D,        op_nop,         store_xH        ;62             ;LD xh,D
+instr  fetch_E,        op_nop,         store_xH        ;63             ;LD xh,E
+instr  fetch_nop,      op_noni,        store_nop       ;64             ;LD xh,xh
+instr  fetch_xL,       op_nop,         store_xH        ;65             ;LD xh,xl
 instr  fetch_MXX,      op_nop,         store_H         ;66             ;LD H,(xx+d)
-instr  fetch_A,        op_nop,         store_xh        ;67             ;LD xh,A
-instr  fetch_B,        op_nop,         store_xl        ;68             ;LD xl,B
-instr  fetch_C,        op_nop,         store_xl        ;69             ;LD xl,C
-instr  fetch_D,        op_nop,         store_xl        ;6A             ;LD xl,D
-instr  fetch_E,        op_nop,         store_xl        ;6B             ;LD xl,E
-instr  fetch_xh,       op_nop,         store_xl        ;6C             ;LD xl,xh
-instr  fetch_nop,      op_nop,         store_nop       ;6D             ;LD xl,xl
+instr  fetch_A,        op_nop,         store_xH        ;67             ;LD xh,A
+instr  fetch_B,        op_nop,         store_xL        ;68             ;LD xl,B
+instr  fetch_C,        op_nop,         store_xL        ;69             ;LD xl,C
+instr  fetch_D,        op_nop,         store_xL        ;6A             ;LD xl,D
+instr  fetch_E,        op_nop,         store_xL        ;6B             ;LD xl,E
+instr  fetch_xH,       op_nop,         store_xL        ;6C             ;LD xl,xh
+instr  fetch_nop,      op_noni,        store_nop       ;6D             ;LD xl,xl
 instr  fetch_MXX,      op_nop,         store_L         ;6E             ;LD L,(xx+d)
-instr  fetch_A,        op_nop,         store_xl        ;6F             ;LD xl,A
+instr  fetch_A,        op_nop,         store_xL        ;6F             ;LD xl,A
 instr  fetch_B,        op_nop,         store_MXX       ;70             ;LD (xx+d),B
 instr  fetch_C,        op_nop,         store_MXX       ;71             ;LD (xx+d),C
 instr  fetch_D,        op_nop,         store_MXX       ;72             ;LD (xx+d),D
 instr  fetch_E,        op_nop,         store_MXX       ;73             ;LD (xx+d),E
 instr  fetch_H,        op_nop,         store_MXX       ;74             ;LD (xx+d),H
 instr  fetch_L,        op_nop,         store_MXX       ;75             ;LD (xx+d),L
-instr  fetch_nop,      op_nop,         store_nop       ;76             ;
+instr  fetch_nop,      op_noni,        store_nop       ;76             ;
 instr  fetch_A,        op_nop,         store_MXX       ;77             ;LD (xx+d),A
-instr  fetch_nop,      op_nop,         store_nop       ;78             ;
-instr  fetch_nop,      op_nop,         store_nop       ;79             ;
-instr  fetch_nop,      op_nop,         store_nop       ;7A             ;
-instr  fetch_nop,      op_nop,         store_nop       ;7B             ;
-instr  fetch_xh,       op_nop,         store_A         ;7C             ;LD A,xh
-instr  fetch_xl,       op_nop,         store_A         ;7D             ;LD A,xl
+instr  fetch_nop,      op_noni,        store_nop       ;78             ;
+instr  fetch_nop,      op_noni,        store_nop       ;79             ;
+instr  fetch_nop,      op_noni,        store_nop       ;7A             ;
+instr  fetch_nop,      op_noni,        store_nop       ;7B             ;
+instr  fetch_xH,       op_nop,         store_A         ;7C             ;LD A,xh
+instr  fetch_xL,       op_nop,         store_A         ;7D             ;LD A,xl
 instr  fetch_MXX,      op_nop,         store_A         ;7E             ;LD A,(xx+d)
-instr  fetch_nop,      op_nop,         store_nop       ;7F             ;
-instr  fetch_nop,      op_nop,         store_nop       ;80             ;
-instr  fetch_nop,      op_nop,         store_nop       ;81             ;
-instr  fetch_nop,      op_nop,         store_nop       ;82             ;
-instr  fetch_nop,      op_nop,         store_nop       ;83             ;
-instr  fetch_xh,       op_ADDA,        store_nop       ;84             ;ADD A,xh
-instr  fetch_xl,       op_ADDA,        store_nop       ;85             ;ADD A,xl
+instr  fetch_nop,      op_noni,        store_nop       ;7F             ;
+instr  fetch_nop,      op_noni,        store_nop       ;80             ;
+instr  fetch_nop,      op_noni,        store_nop       ;81             ;
+instr  fetch_nop,      op_noni,        store_nop       ;82             ;
+instr  fetch_nop,      op_noni,        store_nop       ;83             ;
+instr  fetch_xH,       op_ADDA,        store_nop       ;84             ;ADD A,xh
+instr  fetch_xL,       op_ADDA,        store_nop       ;85             ;ADD A,xl
 instr  fetch_MXX,      op_ADDA,        store_nop       ;86             ;ADD A,(xx)
-instr  fetch_nop,      op_nop,         store_nop       ;87             ;
-instr  fetch_nop,      op_nop,         store_nop       ;88             ;
-instr  fetch_nop,      op_nop,         store_nop       ;89             ;
-instr  fetch_nop,      op_nop,         store_nop       ;8A             ;
-instr  fetch_nop,      op_nop,         store_nop       ;8B             ;
-instr  fetch_xh,       op_ADCA,        store_nop       ;8C             ;ADC A,xh
-instr  fetch_xl,       op_ADCA,        store_nop       ;8D             ;ADC A,xl
+instr  fetch_nop,      op_noni,        store_nop       ;87             ;
+instr  fetch_nop,      op_noni,        store_nop       ;88             ;
+instr  fetch_nop,      op_noni,        store_nop       ;89             ;
+instr  fetch_nop,      op_noni,        store_nop       ;8A             ;
+instr  fetch_nop,      op_noni,        store_nop       ;8B             ;
+instr  fetch_xH,       op_ADCA,        store_nop       ;8C             ;ADC A,xh
+instr  fetch_xL,       op_ADCA,        store_nop       ;8D             ;ADC A,xl
 instr  fetch_MXX,      op_ADCA,        store_nop       ;8E             ;ADC A,(xx)
-instr  fetch_nop,      op_nop,         store_nop       ;8F             ;
-instr  fetch_nop,      op_nop,         store_nop       ;90             ;
-instr  fetch_nop,      op_nop,         store_nop       ;91             ;
-instr  fetch_nop,      op_nop,         store_nop       ;92             ;
-instr  fetch_nop,      op_nop,         store_nop       ;93             ;
-instr  fetch_xh,       op_SUBFA,       store_nop       ;94             ;SUB A,xh
-instr  fetch_xl,       op_SUBFA,       store_nop       ;95             ;SUB A,xl
+instr  fetch_nop,      op_noni,        store_nop       ;8F             ;
+instr  fetch_nop,      op_noni,        store_nop       ;90             ;
+instr  fetch_nop,      op_noni,        store_nop       ;91             ;
+instr  fetch_nop,      op_noni,        store_nop       ;92             ;
+instr  fetch_nop,      op_noni,        store_nop       ;93             ;
+instr  fetch_xH,       op_SUBFA,       store_nop       ;94             ;SUB A,xh
+instr  fetch_xL,       op_SUBFA,       store_nop       ;95             ;SUB A,xl
 instr  fetch_MXX,      op_SUBFA,       store_nop       ;96             ;SUB A,(xx)
-instr  fetch_nop,      op_nop,         store_nop       ;97             ;
-instr  fetch_nop,      op_nop,         store_nop       ;98             ;
-instr  fetch_nop,      op_nop,         store_nop       ;99             ;
-instr  fetch_nop,      op_nop,         store_nop       ;9A             ;
-instr  fetch_nop,      op_nop,         store_nop       ;9B             ;
-instr  fetch_xh,       op_SBCFA,       store_nop       ;9C             ;SBC A,xh
-instr  fetch_xl,       op_SBCFA,       store_nop       ;9D             ;SBC A,xl
+instr  fetch_nop,      op_noni,        store_nop       ;97             ;
+instr  fetch_nop,      op_noni,        store_nop       ;98             ;
+instr  fetch_nop,      op_noni,        store_nop       ;99             ;
+instr  fetch_nop,      op_noni,        store_nop       ;9A             ;
+instr  fetch_nop,      op_noni,        store_nop       ;9B             ;
+instr  fetch_xH,       op_SBCFA,       store_nop       ;9C             ;SBC A,xh
+instr  fetch_xL,       op_SBCFA,       store_nop       ;9D             ;SBC A,xl
 instr  fetch_MXX,      op_SBCFA,       store_nop       ;9E             ;SBC A,(xx)
-instr  fetch_nop,      op_nop,         store_nop       ;9F             ;
-instr  fetch_nop,      op_nop,         store_nop       ;A0             ;
-instr  fetch_nop,      op_nop,         store_nop       ;A1             ;
-instr  fetch_nop,      op_nop,         store_nop       ;A2             ;
-instr  fetch_nop,      op_nop,         store_nop       ;A3             ;
-instr  fetch_xh,       op_ANDA,        store_nop       ;A4             ;AND A,xh
-instr  fetch_xl,       op_ANDA,        store_nop       ;A5             ;AND A,xl
+instr  fetch_nop,      op_noni,        store_nop       ;9F             ;
+instr  fetch_nop,      op_noni,        store_nop       ;A0             ;
+instr  fetch_nop,      op_noni,        store_nop       ;A1             ;
+instr  fetch_nop,      op_noni,        store_nop       ;A2             ;
+instr  fetch_nop,      op_noni,        store_nop       ;A3             ;
+instr  fetch_xH,       op_ANDA,        store_nop       ;A4             ;AND A,xh
+instr  fetch_xL,       op_ANDA,        store_nop       ;A5             ;AND A,xl
 instr  fetch_MXX,      op_ANDA,        store_nop       ;A6             ;AND A,(xx)
-instr  fetch_nop,      op_nop,         store_nop       ;A7             ;
-instr  fetch_nop,      op_nop,         store_nop       ;A8             ;
-instr  fetch_nop,      op_nop,         store_nop       ;A9             ;
-instr  fetch_nop,      op_nop,         store_nop       ;AA             ;
-instr  fetch_nop,      op_nop,         store_nop       ;AB             ;
-instr  fetch_xh,       op_ANDA,        store_nop       ;AC             ;XOR A,xh
-instr  fetch_xl,       op_ANDA,        store_nop       ;AD             ;XOR A,xl
-instr  fetch_MXX,      op_ANDA,        store_nop       ;AE             ;XOR A,(xx)
-instr  fetch_nop,      op_nop,         store_nop       ;AF             ;
-instr  fetch_nop,      op_nop,         store_nop       ;B0             ;
-instr  fetch_nop,      op_nop,         store_nop       ;B1             ;
-instr  fetch_nop,      op_nop,         store_nop       ;B2             ;
-instr  fetch_nop,      op_nop,         store_nop       ;B3             ;
-instr  fetch_xh,       op_ORA,         store_nop       ;B4             ;OR A,xh
-instr  fetch_xl,       op_ORA,         store_nop       ;B5             ;OR A,xl
+instr  fetch_nop,      op_noni,        store_nop       ;A7             ;
+instr  fetch_nop,      op_noni,        store_nop       ;A8             ;
+instr  fetch_nop,      op_noni,        store_nop       ;A9             ;
+instr  fetch_nop,      op_noni,        store_nop       ;AA             ;
+instr  fetch_nop,      op_noni,        store_nop       ;AB             ;
+instr  fetch_xH,       op_XORA,        store_nop       ;AC             ;XOR A,xh
+instr  fetch_xL,       op_XORA,        store_nop       ;AD             ;XOR A,xl
+instr  fetch_MXX,      op_XORA,        store_nop       ;AE             ;XOR A,(xx)
+instr  fetch_nop,      op_noni,        store_nop       ;AF             ;
+instr  fetch_nop,      op_noni,        store_nop       ;B0             ;
+instr  fetch_nop,      op_noni,        store_nop       ;B1             ;
+instr  fetch_nop,      op_noni,        store_nop       ;B2             ;
+instr  fetch_nop,      op_noni,        store_nop       ;B3             ;
+instr  fetch_xH,       op_ORA,         store_nop       ;B4             ;OR A,xh
+instr  fetch_xL,       op_ORA,         store_nop       ;B5             ;OR A,xl
 instr  fetch_MXX,      op_ORA,         store_nop       ;B6             ;OR A,(xx)
-instr  fetch_nop,      op_nop,         store_nop       ;B7             ;
-instr  fetch_nop,      op_nop,         store_nop       ;B8             ;
-instr  fetch_nop,      op_nop,         store_nop       ;B9             ;
-instr  fetch_nop,      op_nop,         store_nop       ;BA             ;
-instr  fetch_nop,      op_nop,         store_nop       ;BB             ;
-instr  fetch_xh,       op_CPFA,        store_nop       ;BC             ;CP A,xh
-instr  fetch_xl,       op_CPFA,        store_nop       ;BD             ;CP A,xl
+instr  fetch_nop,      op_noni,        store_nop       ;B7             ;
+instr  fetch_nop,      op_noni,        store_nop       ;B8             ;
+instr  fetch_nop,      op_noni,        store_nop       ;B9             ;
+instr  fetch_nop,      op_noni,        store_nop       ;BA             ;
+instr  fetch_nop,      op_noni,        store_nop       ;BB             ;
+instr  fetch_xH,       op_CPFA,        store_nop       ;BC             ;CP A,xh
+instr  fetch_xL,       op_CPFA,        store_nop       ;BD             ;CP A,xl
 instr  fetch_MXX,      op_CPFA,        store_nop       ;BE             ;CP A,(xx)
-instr  fetch_nop,      op_nop,         store_nop       ;BF             ;
-instr  fetch_nop,      op_nop,         store_nop       ;C0             ;
-instr  fetch_nop,      op_nop,         store_nop       ;C1             ;
-instr  fetch_nop,      op_nop,         store_nop       ;C2             ;
-instr  fetch_nop,      op_nop,         store_nop       ;C3             ;
-instr  fetch_nop,      op_nop,         store_nop       ;C4             ;
-instr  fetch_nop,      op_nop,         store_nop       ;C5             ;
-instr  fetch_nop,      op_nop,         store_nop       ;C6             ;
-instr  fetch_nop,      op_nop,         store_nop       ;C7             ;
-instr  fetch_nop,      op_nop,         store_nop       ;C8             ;
-instr  fetch_nop,      op_nop,         store_nop       ;C9             ;
-instr  fetch_nop,      op_nop,         store_nop       ;CA             ;
+instr  fetch_nop,      op_noni,        store_nop       ;BF             ;
+instr  fetch_nop,      op_noni,        store_nop       ;C0             ;
+instr  fetch_nop,      op_noni,        store_nop       ;C1             ;
+instr  fetch_nop,      op_noni,        store_nop       ;C2             ;
+instr  fetch_nop,      op_noni,        store_nop       ;C3             ;
+instr  fetch_nop,      op_noni,        store_nop       ;C4             ;
+instr  fetch_nop,      op_noni,        store_nop       ;C5             ;
+instr  fetch_nop,      op_noni,        store_nop       ;C6             ;
+instr  fetch_nop,      op_noni,        store_nop       ;C7             ;
+instr  fetch_nop,      op_noni,        store_nop       ;C8             ;
+instr  fetch_nop,      op_noni,        store_nop       ;C9             ;
+instr  fetch_nop,      op_noni,        store_nop       ;CA             ;
 instr  fetch_nop,      op_prefixDDFDCB,store_nop       ;CB             ;
-instr  fetch_nop,      op_nop,         store_nop       ;CC             ;
-instr  fetch_nop,      op_nop,         store_nop       ;CD             ;
-instr  fetch_nop,      op_nop,         store_nop       ;CE             ;
-instr  fetch_nop,      op_nop,         store_nop       ;CF             ;
-instr  fetch_nop,      op_nop,         store_nop       ;D0             ;
-instr  fetch_nop,      op_nop,         store_nop       ;D1             ;
-instr  fetch_nop,      op_nop,         store_nop       ;D2             ;
-instr  fetch_nop,      op_nop,         store_nop       ;D3             ;
-instr  fetch_nop,      op_nop,         store_nop       ;D4             ;
-instr  fetch_nop,      op_nop,         store_nop       ;D5             ;
-instr  fetch_nop,      op_nop,         store_nop       ;D6             ;
-instr  fetch_nop,      op_nop,         store_nop       ;D7             ;
-instr  fetch_nop,      op_nop,         store_nop       ;D8             ;
-instr  fetch_nop,      op_nop,         store_nop       ;D9             ;
-instr  fetch_nop,      op_nop,         store_nop       ;DA             ;
-instr  fetch_nop,      op_nop,         store_nop       ;DB             ;
-instr  fetch_nop,      op_nop,         store_nop       ;DC             ;
-instr  fetch_nop,      op_nop,         store_nop       ;DD             ;
-instr  fetch_nop,      op_nop,         store_nop       ;DE             ;
-instr  fetch_nop,      op_nop,         store_nop       ;DF             ;
-instr  fetch_nop,      op_nop,         store_nop       ;E0             ;
+instr  fetch_nop,      op_noni,        store_nop       ;CC             ;
+instr  fetch_nop,      op_noni,        store_nop       ;CD             ;
+instr  fetch_nop,      op_noni,        store_nop       ;CE             ;
+instr  fetch_nop,      op_noni,        store_nop       ;CF             ;
+instr  fetch_nop,      op_noni,        store_nop       ;D0             ;
+instr  fetch_nop,      op_noni,        store_nop       ;D1             ;
+instr  fetch_nop,      op_noni,        store_nop       ;D2             ;
+instr  fetch_nop,      op_noni,        store_nop       ;D3             ;
+instr  fetch_nop,      op_noni,        store_nop       ;D4             ;
+instr  fetch_nop,      op_noni,        store_nop       ;D5             ;
+instr  fetch_nop,      op_noni,        store_nop       ;D6             ;
+instr  fetch_nop,      op_noni,        store_nop       ;D7             ;
+instr  fetch_nop,      op_noni,        store_nop       ;D8             ;
+instr  fetch_nop,      op_noni,        store_nop       ;D9             ;
+instr  fetch_nop,      op_noni,        store_nop       ;DA             ;
+instr  fetch_nop,      op_noni,        store_nop       ;DB             ;
+instr  fetch_nop,      op_noni,        store_nop       ;DC             ;
+instr  fetch_nop,      op_noni,        store_nop       ;DD             ;
+instr  fetch_nop,      op_noni,        store_nop       ;DE             ;
+instr  fetch_nop,      op_noni,        store_nop       ;DF             ;
+instr  fetch_nop,      op_noni,        store_nop       ;E0             ;
 instr  fetch_nop,      op_POP16,       store_xx        ;E1             ;POP xx
-instr  fetch_nop,      op_nop,         store_nop       ;E2             ;
+instr  fetch_nop,      op_noni,        store_nop       ;E2             ;
 instr  fetch_MSP,      op_EXxx,        store_MSP       ;E3             ;EX (SP),xx
-instr  fetch_nop,      op_nop,         store_nop       ;E4             ;
+instr  fetch_nop,      op_noni,        store_nop       ;E4             ;
 instr  fetch_xx,       op_PUSH16,      store_nop       ;E5             ;PUSH xx
-instr  fetch_nop,      op_nop,         store_nop       ;E6             ;
-instr  fetch_nop,      op_nop,         store_nop       ;E7             ;
-instr  fetch_nop,      op_nop,         store_nop       ;E8             ;
+instr  fetch_nop,      op_noni,        store_nop       ;E6             ;
+instr  fetch_nop,      op_noni,        store_nop       ;E7             ;
+instr  fetch_nop,      op_noni,        store_nop       ;E8             ;
 instr  fetch_xx,       op_nop,         store_PC        ;E9             ;JP xx
-instr  fetch_nop,      op_nop,         store_nop       ;EA             ;
-instr  fetch_nop,      op_nop,         store_nop       ;EB             ;
-instr  fetch_nop,      op_nop,         store_nop       ;EC             ;
-instr  fetch_nop,      op_nop,         store_nop       ;ED             ;
-instr  fetch_nop,      op_nop,         store_nop       ;EE             ;
-instr  fetch_nop,      op_nop,         store_nop       ;EF             ;
-instr  fetch_nop,      op_nop,         store_nop       ;F0             ;
-instr  fetch_nop,      op_nop,         store_nop       ;F1             ;
-instr  fetch_nop,      op_nop,         store_nop       ;F2             ;
-instr  fetch_nop,      op_nop,         store_nop       ;F3             ;
-instr  fetch_nop,      op_nop,         store_nop       ;F4             ;
-instr  fetch_nop,      op_nop,         store_nop       ;F5             ;
-instr  fetch_nop,      op_nop,         store_nop       ;F6             ;
-instr  fetch_nop,      op_nop,         store_nop       ;F7             ;
-instr  fetch_nop,      op_nop,         store_nop       ;F8             ;
+instr  fetch_nop,      op_noni,        store_nop       ;EA             ;
+instr  fetch_nop,      op_noni,        store_nop       ;EB             ;
+instr  fetch_nop,      op_noni,        store_nop       ;EC             ;
+instr  fetch_nop,      op_noni,        store_nop       ;ED             ;
+instr  fetch_nop,      op_noni,        store_nop       ;EE             ;
+instr  fetch_nop,      op_noni,        store_nop       ;EF             ;
+instr  fetch_nop,      op_noni,        store_nop       ;F0             ;
+instr  fetch_nop,      op_noni,        store_nop       ;F1             ;
+instr  fetch_nop,      op_noni,        store_nop       ;F2             ;
+instr  fetch_nop,      op_noni,        store_nop       ;F3             ;
+instr  fetch_nop,      op_noni,        store_nop       ;F4             ;
+instr  fetch_nop,      op_noni,        store_nop       ;F5             ;
+instr  fetch_nop,      op_noni,        store_nop       ;F6             ;
+instr  fetch_nop,      op_noni,        store_nop       ;F7             ;
+instr  fetch_nop,      op_noni,        store_nop       ;F8             ;
 instr  fetch_xx,       op_nop,         store_SP        ;F9             ;LD SP,xx
-instr  fetch_nop,      op_nop,         store_nop       ;FA             ;
-instr  fetch_nop,      op_nop,         store_nop       ;FB             ;
-instr  fetch_nop,      op_nop,         store_nop       ;FC             ;
-instr  fetch_nop,      op_nop,         store_nop       ;FD             ;
-instr  fetch_nop,      op_nop,         store_nop       ;FE             ;
-instr  fetch_nop,      op_nop,         store_nop       ;FF             ;
+instr  fetch_nop,      op_noni,        store_nop       ;FA             ;
+instr  fetch_nop,      op_noni,        store_nop       ;FB             ;
+instr  fetch_nop,      op_noni,        store_nop       ;FC             ;
+instr  fetch_nop,      op_noni,        store_nop       ;FD             ;
+instr  fetch_nop,      op_noni,        store_nop       ;FE             ;
+instr  fetch_nop,      op_noni,        store_nop       ;FF             ;
 
 
        opctable        CBjmp
 
-instr  fetch_nop,      op_nop,         store_nop       ;00             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;01             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;02             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;03             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;04             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;05             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;06             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;07             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;08             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;09             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;0A             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;0B             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;0C             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;0D             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;0E             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;0F             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;10             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;11             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;12             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;13             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;14             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;15             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;16             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;17             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;18             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;19             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;1A             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;1B             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;1C             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;1D             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;1E             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;1F             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;20             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;21             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;22             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;23             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;24             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;25             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;26             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;27             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;28             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;29             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;2A             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;2B             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;2C             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;2D             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;2E             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;2F             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;30             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;31             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;32             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;33             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;34             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;35             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;36             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;37             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;38             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;39             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;3A             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;3B             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;3C             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;3D             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;3E             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;3F             ;NOP
+instr  fetch_B,        op_RLC,         store_B         ;00             ;RLC B
+instr  fetch_C,        op_RLC,         store_C         ;01             ;RLC C
+instr  fetch_D,        op_RLC,         store_D         ;02             ;RLC D
+instr  fetch_E,        op_RLC,         store_E         ;03             ;RLC E
+instr  fetch_H,        op_RLC,         store_H         ;04             ;RLC H
+instr  fetch_L,        op_RLC,         store_L         ;05             ;RLC L
+instr  fetch_MHL,      op_RLC,         store_MHL       ;06             ;RLC (HL)
+instr  fetch_A,        op_RLC,         store_A         ;07             ;RLC A
+instr  fetch_B,        op_RRC,         store_B         ;08             ;RRC B
+instr  fetch_C,        op_RRC,         store_C         ;09             ;RRC C
+instr  fetch_D,        op_RRC,         store_D         ;0A             ;RRC D
+instr  fetch_E,        op_RRC,         store_E         ;0B             ;RRC E
+instr  fetch_H,        op_RRC,         store_H         ;0C             ;RRC H
+instr  fetch_L,        op_RRC,         store_L         ;0D             ;RRC L
+instr  fetch_MHL,      op_RRC,         store_MHL       ;0E             ;RRC (HL)
+instr  fetch_A,        op_RRC,         store_A         ;0F             ;RRC A
+instr  fetch_B,        op_RL,          store_B         ;10             ;RL B
+instr  fetch_C,        op_RL,          store_C         ;11             ;RL C
+instr  fetch_D,        op_RL,          store_D         ;12             ;RL D
+instr  fetch_E,        op_RL,          store_E         ;13             ;RL E
+instr  fetch_H,        op_RL,          store_H         ;14             ;RL H
+instr  fetch_L,        op_RL,          store_L         ;15             ;RL L
+instr  fetch_MHL,      op_RL,          store_MHL       ;16             ;RL (HL)
+instr  fetch_A,        op_RL,          store_A         ;17             ;RL A
+instr  fetch_B,        op_RR,          store_B         ;18             ;RR B
+instr  fetch_C,        op_RR,          store_C         ;19             ;RR C
+instr  fetch_D,        op_RR,          store_D         ;1A             ;RR D
+instr  fetch_E,        op_RR,          store_E         ;1B             ;RR E
+instr  fetch_H,        op_RR,          store_H         ;1C             ;RR H
+instr  fetch_L,        op_RR,          store_L         ;1D             ;RR L
+instr  fetch_MHL,      op_RR,          store_MHL       ;1E             ;RR (HL)
+instr  fetch_A,        op_RR,          store_A         ;1F             ;RR A
+instr  fetch_B,        op_SLA,         store_B         ;20             ;SLA B
+instr  fetch_C,        op_SLA,         store_C         ;21             ;SLA C
+instr  fetch_D,        op_SLA,         store_D         ;22             ;SLA D
+instr  fetch_E,        op_SLA,         store_E         ;23             ;SLA E
+instr  fetch_H,        op_SLA,         store_H         ;24             ;SLA H
+instr  fetch_L,        op_SLA,         store_L         ;25             ;SLA L
+instr  fetch_MHL,      op_SLA,         store_MHL       ;26             ;SLA (HL)
+instr  fetch_A,        op_SLA,         store_A         ;27             ;SLA A
+instr  fetch_B,        op_SRA,         store_B         ;28             ;SRA B
+instr  fetch_C,        op_SRA,         store_C         ;29             ;SRA C
+instr  fetch_D,        op_SRA,         store_D         ;2A             ;SRA D
+instr  fetch_E,        op_SRA,         store_E         ;2B             ;SRA E
+instr  fetch_H,        op_SRA,         store_H         ;2C             ;SRA H
+instr  fetch_L,        op_SRA,         store_L         ;2D             ;SRA L
+instr  fetch_MHL,      op_SRA,         store_MHL       ;2E             ;SRA (HL)
+instr  fetch_A,        op_SRA,         store_A         ;2F             ;SRA A
+instr  fetch_B,        op_SLL,         store_B         ;30             ;SLL B
+instr  fetch_C,        op_SLL,         store_C         ;31             ;SLL C
+instr  fetch_D,        op_SLL,         store_D         ;32             ;SLL D
+instr  fetch_E,        op_SLL,         store_E         ;33             ;SLL E
+instr  fetch_H,        op_SLL,         store_H         ;34             ;SLL H
+instr  fetch_L,        op_SLL,         store_L         ;35             ;SLL L
+instr  fetch_MHL,      op_SLL,         store_MHL       ;36             ;SLL (HL)
+instr  fetch_A,        op_SLL,         store_A         ;37             ;SLL A
+instr  fetch_B,        op_SRL,         store_B         ;38             ;SRL B
+instr  fetch_C,        op_SRL,         store_C         ;39             ;SRL C
+instr  fetch_D,        op_SRL,         store_D         ;3A             ;SRL D
+instr  fetch_E,        op_SRL,         store_E         ;3B             ;SRL E
+instr  fetch_H,        op_SRL,         store_H         ;3C             ;SRL H
+instr  fetch_L,        op_SRL,         store_L         ;3D             ;SRL L
+instr  fetch_MHL,      op_SRL,         store_MHL       ;3E             ;SRL (HL)
+instr  fetch_A,        op_SRL,         store_A         ;3F             ;SRL A
 instr  fetch_B,        op_BIT0,        store_nop       ;40             ;BIT 0,B
 instr  fetch_C,        op_BIT0,        store_nop       ;41             ;BIT 0,C
 instr  fetch_D,        op_BIT0,        store_nop       ;42             ;BIT 0,D
@@ -3705,70 +4025,70 @@ instr   fetch_A,        op_SET7,        store_A         ;FF             ;SET 7,A
 
        opctable        DDFDCBjmp
 
-instr  fetch_nop,      op_nop,         store_nop       ;00             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;01             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;02             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;03             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;04             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;05             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;06             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;07             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;08             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;09             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;0A             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;0B             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;0C             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;0D             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;0E             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;0F             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;10             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;11             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;12             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;13             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;14             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;15             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;16             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;17             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;18             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;19             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;1A             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;1B             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;1C             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;1D             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;1E             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;1F             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;20             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;21             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;22             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;23             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;24             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;25             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;26             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;27             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;28             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;29             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;2A             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;2B             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;2C             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;2D             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;2E             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;2F             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;30             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;31             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;32             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;33             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;34             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;35             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;36             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;37             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;38             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;39             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;3A             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;3B             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;3C             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;3D             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;3E             ;NOP
-instr  fetch_nop,      op_nop,         store_nop       ;3F             ;NOP
+instr  fetch_nop,      op_RLC,         store_B         ;00             ;RLC (Ix+d),B
+instr  fetch_nop,      op_RLC,         store_C         ;01             ;RLC (Ix+d),C
+instr  fetch_nop,      op_RLC,         store_D         ;02             ;RLC (Ix+d),D
+instr  fetch_nop,      op_RLC,         store_E         ;03             ;RLC (Ix+d),E
+instr  fetch_nop,      op_RLC,         store_H         ;04             ;RLC (Ix+d),H
+instr  fetch_nop,      op_RLC,         store_L         ;05             ;RLC (Ix+d),L
+instr  fetch_nop,      op_RLC,         store_nop       ;06             ;RLC (Ix+d)  
+instr  fetch_nop,      op_RLC,         store_A         ;07             ;RLC (Ix+d),A
+instr  fetch_nop,      op_RRC,         store_B         ;08             ;RRC (Ix+d),B
+instr  fetch_nop,      op_RRC,         store_C         ;09             ;RRC (Ix+d),C
+instr  fetch_nop,      op_RRC,         store_D         ;0A             ;RRC (Ix+d),D
+instr  fetch_nop,      op_RRC,         store_E         ;0B             ;RRC (Ix+d),E
+instr  fetch_nop,      op_RRC,         store_H         ;0C             ;RRC (Ix+d),H
+instr  fetch_nop,      op_RRC,         store_L         ;0D             ;RRC (Ix+d),L
+instr  fetch_nop,      op_RRC,         store_nop       ;0E             ;RRC (Ix+d)  
+instr  fetch_nop,      op_RRC,         store_A         ;0F             ;RRC (Ix+d),A
+instr  fetch_nop,      op_RL,          store_B         ;10             ;RL  (Ix+d),B
+instr  fetch_nop,      op_RL,          store_C         ;11             ;RL  (Ix+d),C
+instr  fetch_nop,      op_RL,          store_D         ;12             ;RL  (Ix+d),D
+instr  fetch_nop,      op_RL,          store_E         ;13             ;RL  (Ix+d),E
+instr  fetch_nop,      op_RL,          store_H         ;14             ;RL  (Ix+d),H
+instr  fetch_nop,      op_RL,          store_L         ;15             ;RL  (Ix+d),L
+instr  fetch_nop,      op_RL,          store_nop       ;16             ;RL  (Ix+d)  
+instr  fetch_nop,      op_RL,          store_A         ;17             ;RL  (Ix+d),A
+instr  fetch_nop,      op_RR,          store_B         ;18             ;RR  (Ix+d),B
+instr  fetch_nop,      op_RR,          store_C         ;19             ;RR  (Ix+d),C
+instr  fetch_nop,      op_RR,          store_D         ;1A             ;RR  (Ix+d),D
+instr  fetch_nop,      op_RR,          store_E         ;1B             ;RR  (Ix+d),E
+instr  fetch_nop,      op_RR,          store_H         ;1C             ;RR  (Ix+d),H
+instr  fetch_nop,      op_RR,          store_L         ;1D             ;RR  (Ix+d),L
+instr  fetch_nop,      op_RR,          store_nop       ;1E             ;RR  (Ix+d)  
+instr  fetch_nop,      op_RR,          store_A         ;1F             ;RR  (Ix+d),A
+instr  fetch_nop,      op_SLA,         store_B         ;20             ;SLA (Ix+d),B
+instr  fetch_nop,      op_SLA,         store_C         ;21             ;SLA (Ix+d),C
+instr  fetch_nop,      op_SLA,         store_D         ;22             ;SLA (Ix+d),D
+instr  fetch_nop,      op_SLA,         store_E         ;23             ;SLA (Ix+d),E
+instr  fetch_nop,      op_SLA,         store_H         ;24             ;SLA (Ix+d),H
+instr  fetch_nop,      op_SLA,         store_L         ;25             ;SLA (Ix+d),L
+instr  fetch_nop,      op_SLA,         store_nop       ;26             ;SLA (Ix+d)  
+instr  fetch_nop,      op_SLA,         store_A         ;27             ;SLA (Ix+d),A
+instr  fetch_nop,      op_SRA,         store_B         ;28             ;SRA (Ix+d),B
+instr  fetch_nop,      op_SRA,         store_C         ;29             ;SRA (Ix+d),C
+instr  fetch_nop,      op_SRA,         store_D         ;2A             ;SRA (Ix+d),D
+instr  fetch_nop,      op_SRA,         store_E         ;2B             ;SRA (Ix+d),E
+instr  fetch_nop,      op_SRA,         store_H         ;2C             ;SRA (Ix+d),H
+instr  fetch_nop,      op_SRA,         store_L         ;2D             ;SRA (Ix+d),L
+instr  fetch_nop,      op_SRA,         store_nop       ;2E             ;SRA (Ix+d)  
+instr  fetch_nop,      op_SRA,         store_A         ;2F             ;SRA (Ix+d),A
+instr  fetch_nop,      op_SLL,         store_B         ;30             ;SLL (Ix+d),B
+instr  fetch_nop,      op_SLL,         store_C         ;31             ;SLL (Ix+d),C
+instr  fetch_nop,      op_SLL,         store_D         ;32             ;SLL (Ix+d),D
+instr  fetch_nop,      op_SLL,         store_E         ;33             ;SLL (Ix+d),E
+instr  fetch_nop,      op_SLL,         store_H         ;34             ;SLL (Ix+d),H
+instr  fetch_nop,      op_SLL,         store_L         ;35             ;SLL (Ix+d),L
+instr  fetch_nop,      op_SLL,         store_nop       ;36             ;SLL (Ix+d)  
+instr  fetch_nop,      op_SLL,         store_A         ;37             ;SLL (Ix+d),A
+instr  fetch_nop,      op_SRL,         store_B         ;38             ;SRL (Ix+d),B
+instr  fetch_nop,      op_SRL,         store_C         ;39             ;SRL (Ix+d),C
+instr  fetch_nop,      op_SRL,         store_D         ;3A             ;SRL (Ix+d),D
+instr  fetch_nop,      op_SRL,         store_E         ;3B             ;SRL (Ix+d),E
+instr  fetch_nop,      op_SRL,         store_H         ;3C             ;SRL (Ix+d),H
+instr  fetch_nop,      op_SRL,         store_L         ;3D             ;SRL (Ix+d),L
+instr  fetch_nop,      op_SRL,         store_nop       ;3E             ;SRL (Ix+d)  
+instr  fetch_nop,      op_SRL,         store_A         ;3F             ;SRL (Ix+d),A
 instr  fetch_nop,      op_BIT0,        store_nop       ;40             ;BIT 0,(Ix+d),B
 instr  fetch_nop,      op_BIT0,        store_nop       ;41             ;BIT 0,(Ix+d),C
 instr  fetch_nop,      op_BIT0,        store_nop       ;42             ;BIT 0,(Ix+d),D