;
#if EM_Z80
- #define OPC_TABSTART 0x1a00
+ #define OPC_TABSTART 0x1900
#else
#define OPC_TABSTART 0x1200
#endif
;
.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
.endif
.endif
- .if labelexists_
+ .if defined (l_@0_@1_@2)
rjmp todo_table_pos_
.org todo_table_pos_
jmp l_@0_@1_@2
ret
do_store_pcrel: ;add displacement to PC
+#if EM_Z80
clr oph
tst opl ;sign extend
brpl stpcr1
add z_pcl,opl
adc z_pch,oph
ret
-
+#else
+ rjmp do_op_inv
+#endif
do_store_ret:
movw x,z_spl
;
; ldpmx dstreg,tablebase,indexreg
;
-; (6 words, 8 cycles)
+; (3 words, 5 cycles)
.macro ldpmx
ldi zh,high(@1*2) ; table must be page aligned
.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
;|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 |
;----------------------------------------------------------------
;----------------------------------------------------------------
;|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
; 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 ; |
#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)
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:
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 */
;----------------------------------------------------------------
;----------------------------------------------------------------
;|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
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 |
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
do_op_prefixDD:
do_op_prefixFD:
do_op_prefixCB:
+ ljmp do_op_inv
ret
#endif
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
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)
ldi opl,0
ret
+do_fetch_dir8_2:
+ movw xl,z_pcl
+ adiw xl,1
+ mem_read_d opl
+ ret
+
;----------------------------------------------------------------
;|Mnemonic |SZHPNC|Description |Notes |
;----------------------------------------------------------------
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:
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
;|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
;----------------------------------------------------------------
;|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:
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 |
;|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
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
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)
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)
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)
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)
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)
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)
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)
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
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
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
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