1 ; 8080/Z80 Interpreter.
2 ; This is part of the Z80-CP/M emulator written by Sprite_tm.
5 ; Copyright (C) 2010 Sprite_tm
6 ; Copyright (C) 2010-2013 Leo C.
7 ; Copyright (C) 2010 Horst S.
9 ; This file is part of avrcpm.
11 ; avrcpm is free software: you can redistribute it and/or modify it
12 ; under the terms of the GNU General Public License as published by
13 ; the Free Software Foundation, either version 3 of the License, or
14 ; (at your option) any later version.
16 ; avrcpm is distributed in the hope that it will be useful,
17 ; but WITHOUT ANY WARRANTY; without even the implied warranty of
18 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 ; GNU General Public License for more details.
21 ; You should have received a copy of the GNU General Public License
22 ; along with avrcpm. If not, see <http://www.gnu.org/licenses/>.
24 ; $Id: Z80int-jmp.asm 93 2014-01-03 16:32:32Z rapid $
32 .equ oz_c2 = z_c2 - z_regs
35 .equ oz_b2 = z_b2 - z_regs
38 .equ oz_e2 = z_e2 - z_regs
41 .equ oz_d2 = z_d2 - z_regs
44 .equ oz_l2 = z_l2 - z_regs
47 .equ oz_h2 = z_h2 - z_regs
50 .equ oz_f2 = z_f2 - z_regs
53 .equ oz_a2 = z_a2 - z_regs
57 .equ oz_xl = z_xl - z_regs
60 .equ oz_xh = z_xh - z_regs
63 .equ oz_yl = z_yl - z_regs
66 .equ oz_yh = z_yh - z_regs
69 .equ oz_i = z_i - z_regs
72 .equ oz_r = z_r - z_regs
76 .equ oz_istat = z_istat - z_regs
79 .equ IM_MASK = 0x03 ;Mask IM 0..2
84 .equ IFF1 = 2 ;IFF1 Flag
85 .equ IFF2 = 3 ;IFF2 Flag
100 sbr intstat,(1<<i_trace)
103 printstring "Ok, "CPUSTR"-CPU is live!"
109 cpi z_pch,DBG_TRACE_BOTTOM
111 cpi z_pch,DBG_TRACE_TOP
122 ;TODO: hier kommt die Interruptbehandlung rein
124 cpse intstat,_0 ; 2 Fast path if no trace, int, break, ...
128 mem_read_ds zl,z_pc ;11 zl = memReadByte(z_pc)
129 adiw z_pcl,1 ; 2 ++z_pc
130 ldi zh,high(opcjmp) ; 1
133 ; / 25 cycles minimum (NOP)
139 cpi z_pch,DBG_TRACE_BOTTOM
141 cpi z_pch,DBG_TRACE_TOP
147 cbr intstat,(1<<i_break)|(1<<i_halt)
149 printstring "Break detected! "
154 rjmp int_instr ;Continue with normal instruction interpretation
157 ;--------------------------------------------------
160 ; opctable opc_name, pos
166 .set opcjmp_table_pos_ = (@1 + 255) & -0x100 ;0xff00
169 .set opc_tabnext_ = opcjmp_table_pos_
171 .set opc_tablow_0 = 0
172 .set opc_tablen_0 = 0
173 .set opc_tablow_1 = 0
174 .set opc_tablen_1 = 0
177 .if opcjmp_table_pos_ < opc_tabnext_
178 .set opcjmp_table_pos_ = opc_tabnext_
181 .if opc_tablow_0 == 0
182 .set opc_tablow_0 = opcjmp_table_pos_
183 .set opc_tablen_0 = 256
184 ;.message "add tab_0"
185 .elif opc_tablow_1 == 0
186 .if (opc_tablow_0 + opc_tablen_0) == opcjmp_table_pos_
187 .set opc_tablen_0 = opc_tablen_0 + 256
190 .set opc_tablow_1 = opcjmp_table_pos_
191 .set opc_tablen_1 = 256
192 ;.message "add tab_1"
195 .if (opc_tablow_1 + opc_tablen_1) == opcjmp_table_pos_
196 .set opc_tablen_1 = opc_tablen_1 + 256
203 .set opc_tabnext_ = opcjmp_table_pos_ + 256
204 .equ @0 = opcjmp_table_pos_
208 ;--------------------------------------------------
210 ; checkspace frompos, size
215 .if @0 <= opc_tablow_0
216 .if (@0 + @1) > opc_tablow_0
217 .org opc_tablow_0 + opc_tablen_0
218 ; .message "skip tab, remove tab_0"
219 .if opc_tablow_1 == 0
220 .set opc_tablow_0 = 0
221 .set opc_tablen_0 = 0
223 .set opc_tablow_0 = opc_tablow_1
224 .set opc_tablen_0 = opc_tablen_1
225 .set opc_tablow_1 = 0
226 .set opc_tablen_1 = 0
227 ; .message "remove tab_1"
234 ;--------------------------------------------------
235 ; Generate a table entry for one instruction
237 ; instr fetch, op, store
241 .set fetch_ = (do_@0 != do_fetch_nop) ; must call or jump to fetch action
242 .set op_ = (do_@1 != do_op_nop) ; must call or jump to op action
243 .set store_ = (do_@2 != do_store_nop) ; must jump to store action
244 .set cnt_ = fetch_ + op_ + store_ ; number of actions for this instruction
250 .if cnt_ == 0 ; nothing to do (nop)
251 .org opcjmp_table_pos_
252 ret ; go back to main
255 .elif cnt_ == 1 ; jump direct to action
257 .set action_1_ = do_@0
259 .set action_1_ = do_@1
261 .set action_1_ = do_@2
263 .if (opcjmp_table_pos_ - action_1_) <= 2047
264 .org opcjmp_table_pos_
265 rjmp action_1_ ; do op and return to main
273 .if defined (l_@0_@1_@2)
275 .if (opcjmp_table_pos_ - l_@0_@1_@2) <= 2047
276 .org opcjmp_table_pos_
277 rjmp l_@0_@1_@2 ; generate a jump to action table
280 checkspace pc_save_, 2
282 .org opcjmp_table_pos_
290 checkspace pc_save_, 2*cnt_
293 .org opcjmp_table_pos_
294 .equ l_@0_@1_@2 = pc_save_ ; make a label
295 rjmp l_@0_@1_@2 ; generate a jump to action table
299 .if fetch_ ; must fetch
304 lcall do_@0 ; fetch and come back here
311 ljmp do_@0 ; do op and return to main
315 .if op_ ; must exec op
320 lcall do_@1 ; fetch and come back here
327 ljmp do_@1 ; do op and return to main
331 .if store_ ; must store
336 ljmp do_@2 ; store is allways last
343 .set opcjmp_table_pos_ = opcjmp_table_pos_ + 1
351 ; ------------ Fetch phase stuff -----------------
355 .equ do_fetch_nop = do_x_nop
465 mem_read_ds z_a, z_bc
470 mem_read_ds z_a, z_de
475 mem_read_ds opl, z_hl
486 mem_read_ds opl, z_pc
491 mem_read_ds opl, z_pc
493 mem_read_ds oph, z_pc
497 ; ------------ Store phase stuff -----------------
500 .equ do_store_nop = do_x_nop
555 mem_write_ds z_bc, z_a
560 mem_write_ds z_de, z_a
565 mem_write_ds z_hl, opl
583 do_store_pcrel: ;add displacement to PC
585 mov oph,opl ;sign extend
605 printstring "Stack pop "
608 printstring ", SP is now "
625 printstring "Stack push "
628 printstring ", SP is now "
641 ; ------------ Operation phase stuff -----------------
643 ;----------------------------------------------------------------
647 ;| ZZZZZZZ 88888 000 |
653 ;| ZZZZZZZ 88888 000 |
655 ;| Z80 MICROPROCESSOR Instruction Set Summary |
657 ;----------------------------------------------------------------
658 ;----------------------------------------------------------------
659 ;|Mnemonic |SZHPNC|Description |Notes |
660 ;|----------+------+---------------------+----------------------|
661 ;|ADC A,s |***V0*|Add with Carry |A=A+s+CY |
662 ;|ADC HL,ss |**?V0*|Add with Carry |HL=HL+ss+CY |
663 ;|ADD A,s |***V0*|Add |A=A+s |
664 ;|ADD HL,ss |--*-0*|Add |HL=HL+ss |
665 ;|ADD IX,pp |--*-0*|Add |IX=IX+pp |
666 ;|ADD IY,rr |--*-0*|Add |IY=IY+rr |
667 ;|AND s |**1P00|Logical AND |A=A&s |
668 ;|BIT b,m |?*1?0-|Test Bit |m&{2^b} |
669 ;|CALL cc,nn|------|Conditional Call |If cc CALL |
670 ;|CALL nn |------|Unconditional Call |-[SP]=PC,PC=nn |
671 ;|CCF |--?-0*|Complement Carry Flag|CY=~CY |
672 ;|CP s |***V1*|Compare |A-s |
673 ;|CPD |****1-|Compare and Decrement|A-[HL],HL=HL-1,BC=BC-1|
674 ;|CPDR |****1-|Compare, Dec., Repeat|CPD till A=[HL]or BC=0|
675 ;|CPI |****1-|Compare and Increment|A-[HL],HL=HL+1,BC=BC-1|
676 ;|CPIR |****1-|Compare, Inc., Repeat|CPI till A=[HL]or BC=0|
677 ;|CPL |--1-1-|Complement |A=~A |
678 ;|DAA |***P-*|Decimal Adjust Acc. |A=BCD format |
679 ;|DEC s |***V1-|Decrement |s=s-1 |
680 ;|DEC xx |------|Decrement |xx=xx-1 |
681 ;|DEC ss |------|Decrement |ss=ss-1 |
682 ;|DI |------|Disable Interrupts |IFF1 = IFF2 = 0 |
683 ;|DJNZ e |------|Dec., Jump Non-Zero |B=B-1 till B=0 |
684 ;|EI |------|Enable Interrupts |IFF1 = IFF2 = 1 |
685 ;|EX [SP],HL|------|Exchange |[SP]<->HL |
686 ;|EX [SP],xx|------|Exchange |[SP]<->xx |
687 ;|EX AF,AF' |------|Exchange |AF<->AF' |
688 ;|EX DE,HL |------|Exchange |DE<->HL |
689 ;|EXX |------|Exchange |qq<->qq' (except AF)|
690 ;|HALT |------|Halt | |
691 ;|IM n |------|Interrupt Mode | (n=0,1,2)|
692 ;|IN A,[n] |------|Input |A=[n] |
693 ;|IN r,[C] |***P0-|Input |r=[C] |
694 ;|INC r |***V0-|Increment |r=r+1 |
695 ;|INC [HL] |***V0-|Increment |[HL]=[HL]+1 |
696 ;|INC xx |------|Increment |xx=xx+1 |
697 ;|INC [xx+d]|***V0-|Increment |[xx+d]=[xx+d]+1 |
698 ;|INC ss |------|Increment |ss=ss+1 |
699 ;|IND |?*??1-|Input and Decrement |[HL]=[C],HL=HL-1,B=B-1|
700 ;|INDR |?1??1-|Input, Dec., Repeat |IND till B=0 |
701 ;|INI |?*??1-|Input and Increment |[HL]=[C],HL=HL+1,B=B-1|
702 ;|INIR |?1??1-|Input, Inc., Repeat |INI till B=0 |
703 ;|JP [HL] |------|Unconditional Jump |PC=[HL] |
704 ;|JP [xx] |------|Unconditional Jump |PC=[xx] |
705 ;|JP nn |------|Unconditional Jump |PC=nn |
706 ;|JP cc,nn |------|Conditional Jump |If cc JP |
707 ;|JR e |------|Unconditional Jump |PC=PC+e |
708 ;|JR cc,e |------|Conditional Jump |If cc JR(cc=C,NC,NZ,Z)|
709 ;|LD dst,src|------|Load |dst=src |
710 ;|LD A,i |**0*0-|Load |A=i (i=I,R)|
711 ;|LDD |--0*0-|Load and Decrement |[DE]=[HL],HL=HL-1,# |
712 ;|LDDR |--000-|Load, Dec., Repeat |LDD till BC=0 |
713 ;|LDI |--0*0-|Load and Increment |[DE]=[HL],HL=HL+1,# |
714 ;|LDIR |--000-|Load, Inc., Repeat |LDI till BC=0 |
715 ;|NEG |***V1*|Negate |A=-A |
716 ;|NOP |------|No Operation | |
717 ;|OR s |**0P00|Logical inclusive OR |A=Avs |
718 ;|OTDR |?1??1-|Output, Dec., Repeat |OUTD till B=0 |
719 ;|OTIR |?1??1-|Output, Inc., Repeat |OUTI till B=0 |
720 ;|OUT [C],r |------|Output |[C]=r |
721 ;|OUT [n],A |------|Output |[n]=A |
722 ;|OUTD |?*??1-|Output and Decrement |[C]=[HL],HL=HL-1,B=B-1|
723 ;|OUTI |?*??1-|Output and Increment |[C]=[HL],HL=HL+1,B=B-1|
724 ;|POP xx |------|Pop |xx=[SP]+ |
725 ;|POP qq |------|Pop |qq=[SP]+ |
726 ;|PUSH xx |------|Push |-[SP]=xx |
727 ;|PUSH qq |------|Push |-[SP]=qq |
728 ;|RES b,m |------|Reset bit |m=m&{~2^b} |
729 ;|RET |------|Return |PC=[SP]+ |
730 ;|RET cc |------|Conditional Return |If cc RET |
731 ;|RETI |------|Return from Interrupt|PC=[SP]+ |
732 ;|RETN |------|Return from NMI |PC=[SP]+ |
733 ;|RL m |**0P0*|Rotate Left |m={CY,m}<- |
734 ;|RLA |--0-0*|Rotate Left Acc. |A={CY,A}<- |
735 ;|RLC m |**0P0*|Rotate Left Circular |m=m<- |
736 ;|RLCA |--0-0*|Rotate Left Circular |A=A<- |
737 ;|RLD |**0P0-|Rotate Left 4 bits |{A,[HL]}={A,[HL]}<- ##|
738 ;|RR m |**0P0*|Rotate Right |m=->{CY,m} |
739 ;|RRA |--0-0*|Rotate Right Acc. |A=->{CY,A} |
740 ;|RRC m |**0P0*|Rotate Right Circular|m=->m |
741 ;|RRCA |--0-0*|Rotate Right Circular|A=->A |
742 ;|RRD |**0P0-|Rotate Right 4 bits |{A,[HL]}=->{A,[HL]} ##|
743 ;|RST p |------|Restart | (p=0H,8H,10H,...,38H)|
744 ;|SBC A,s |***V1*|Subtract with Carry |A=A-s-CY |
745 ;|SBC HL,ss |***V1*|Subtract with Carry |HL=HL-ss-CY |
746 ;|SCF |--0-01|Set Carry Flag |CY=1 |
747 ;|SET b,m |------|Set bit |m=mv{2^b} |
748 ;|SLA m |**0P0*|Shift Left Arithmetic|m=m*2 |
749 ;|SRA m |**0P0*|Shift Right Arith. |m=m/2 |
750 ;|SRL m |**0P0*|Shift Right Logical |m=->{0,m,CY} |
751 ;|SUB s |***V1*|Subtract |A=A-s |
752 ;|XOR s |**0P00|Logical Exclusive OR |A=Axs |
753 ;|----------+------+--------------------------------------------|
754 ;| F |-*01? |Flag unaffected/affected/reset/set/unknown |
755 ;| S |S |Sign flag (Bit 7) |
756 ;| Z | Z |Zero flag (Bit 6) |
757 ;| HC | H |Half Carry flag (Bit 4) |
758 ;| P/V | P |Parity/Overflow flag (Bit 2, V=overflow) |
759 ;| N | N |Add/Subtract flag (Bit 1) |
760 ;| CY | C|Carry flag (Bit 0) |
761 ;|-----------------+--------------------------------------------|
762 ;| n |Immediate addressing |
763 ;| nn |Immediate extended addressing |
764 ;| e |Relative addressing (PC=PC+2+offset) |
765 ;| [nn] |Extended addressing |
766 ;| [xx+d] |Indexed addressing |
767 ;| r |Register addressing |
768 ;| [rr] |Register indirect addressing |
769 ;| |Implied addressing |
770 ;| b |Bit addressing |
771 ;| p |Modified page zero addressing (see RST) |
772 ;|-----------------+--------------------------------------------|
773 ;|DEFB n(,...) |Define Byte(s) |
774 ;|DEFB 'str'(,...) |Define Byte ASCII string(s) |
775 ;|DEFS nn |Define Storage Block |
776 ;|DEFW nn(,...) |Define Word(s) |
777 ;|-----------------+--------------------------------------------|
778 ;| A B C D E |Registers (8-bit) |
779 ;| AF BC DE HL |Register pairs (16-bit) |
780 ;| F |Flag register (8-bit) |
781 ;| I |Interrupt page address register (8-bit) |
782 ;| IX IY |Index registers (16-bit) |
783 ;| PC |Program Counter register (16-bit) |
784 ;| R |Memory Refresh register |
785 ;| SP |Stack Pointer register (16-bit) |
786 ;|-----------------+--------------------------------------------|
787 ;| b |One bit (0 to 7) |
788 ;| cc |Condition (C,M,NC,NZ,P,PE,PO,Z) |
789 ;| d |One-byte expression (-128 to +127) |
790 ;| dst |Destination s, ss, [BC], [DE], [HL], [nn] |
791 ;| e |One-byte expression (-126 to +129) |
792 ;| m |Any register r, [HL] or [xx+d] |
793 ;| n |One-byte expression (0 to 255) |
794 ;| nn |Two-byte expression (0 to 65535) |
795 ;| pp |Register pair BC, DE, IX or SP |
796 ;| qq |Register pair AF, BC, DE or HL |
797 ;| qq' |Alternative register pair AF, BC, DE or HL |
798 ;| r |Register A, B, C, D, E, H or L |
799 ;| rr |Register pair BC, DE, IY or SP |
800 ;| s |Any register r, value n, [HL] or [xx+d] |
801 ;| src |Source s, ss, [BC], [DE], [HL], nn, [nn] |
802 ;| ss |Register pair BC, DE, HL or SP |
803 ;| xx |Index register IX or IY |
804 ;|-----------------+--------------------------------------------|
805 ;| + - * / ^ |Add/subtract/multiply/divide/exponent |
806 ;| & ~ v x |Logical AND/NOT/inclusive OR/exclusive OR |
807 ;| <- -> |Rotate left/right |
808 ;| [ ] |Indirect addressing |
809 ;| [ ]+ -[ ] |Indirect addressing auto-increment/decrement|
810 ;| { } |Combination of operands |
811 ;| # |Also BC=BC-1,DE=DE-1 |
812 ;| ## |Only lower 4 bits of accumulator A used |
813 ;----------------------------------------------------------------
815 ;How the flags are supposed to work:
816 ;7 ZFL_S - Sign flag (=MSBit of result)
817 ;6 ZFL_Z - Zero flag. Is 1 when the result is 0
818 ;4 ZFL_H - Half-carry (carry from bit 3 to 4)
819 ;2 ZFL_P - Parity/2-complement Overflow
820 ;1 ZFL_N - Subtract - set if last op was a subtract
823 ;I sure hope I got the mapping between flags and instructions correct...
840 ; TODO: check Z80 flag settings
842 ;------------------------------------------------;
843 ; Load table value from flash indexed by source reg.
845 ; ldpmx dstreg,tablebase,indexreg
847 ; (3 words, 5 cycles)
850 ldi zh,high(@1*2) ; table must be page aligned
855 .macro do_z80_flags_V
857 bmov z_flags, ZFL_P, temp, AVR_V
861 .macro do_z80_flags_H
863 bmov z_flags, ZFL_H, temp, AVR_H
867 .macro do_z80_flags_set_N
869 ori z_flags, (1<<ZFL_N) ; Negation auf 1
873 .macro do_z80_flags_set_HN
875 ori z_flags,(1<<ZFL_N)|(1<<ZFL_H)
879 .macro do_z80_flags_clear_N
881 andi z_flags,~(1<<ZFL_N)
885 .macro do_z80_flags_clear_HN
887 andi z_flags,~((1<<ZFL_H)|(1<<ZFL_N))
892 .macro do_z80_flags_copy_HC
894 bmov z_flags, ZFL_H, z_flags, ZFL_C
898 .macro do_z80_flags_op_rotate
899 ; must not change avr carry flag!
901 andi z_flags, ~( (1<<ZFL_H) | (1<<ZFL_N) | (1<<ZFL_C) )
903 andi z_flags, ~( (1<<ZFL_C) )
907 .macro do_z80_flags_op_and
909 ori z_flags,(1<<ZFL_H)
913 .macro do_z80_flags_op_or
920 ;----------------------------------------------------------------
922 .equ do_op_nop = do_x_nop
927 printstring "Invalid opcode! "
933 ;----------------------------------------------------------------
934 ;|Mnemonic |SZHPNC|Description |Notes |
935 ;----------------------------------------------------------------
936 ;|HALT |------|Halt | |
943 sbr intstat,(1<<i_halt)
945 printstring "CPU halted! "
948 ;----------------------------------------------------------------
949 ;|Mnemonic |SZHPNC|Description |Notes |
950 ;----------------------------------------------------------------
951 ;|OUT [n],A |------|Output |[n]=A |
954 ;Interface with peripherials goes here :)
955 do_op_outa: ; out (opl),a
958 printstring "Port write: "
971 ;----------------------------------------------------------------
972 ;|Mnemonic |SZHPNC|Description |Notes |
973 ;----------------------------------------------------------------
974 ;|IN A,[n] |------|Input |A=[n] |
977 do_op_ina: ; in a,(opl)
980 cp opl,_0 ; don't debug port 0 (con stat)
983 printstring "Port read: ("
1004 ;----------------------------------------------------------------
1005 ;|Mnemonic |SZHPNC|Description |Notes |
1006 ;----------------------------------------------------------------
1007 ;|INC r |***V0-|Increment |r=r+1 |
1008 ;|INC [HL] |***V0-|Increment |[HL]=[HL]+1 |
1009 ;|INC [xx+d]|***V0-|Increment |[xx+d]=[xx+d]+1 |
1010 ;|----------|SZHP C|---------- 8080 ----------------------------|
1011 ;|INC r |**-P0-|Increment |r=r+1 |
1012 ;|INC [HL] |**-P0-|Increment |[HL]=[HL]+1 |
1018 andi z_flags,(1<<ZFL_C) ; preserve C-, Clear N-flag
1022 sbr z_flags,(1<<ZFL_S)
1024 sbr z_flags,(1<<ZFL_Z)
1026 sbr z_flags,(1<<ZFL_H)
1028 sbr z_flags,(1<<ZFL_P)
1030 andi z_flags,(1<<ZFL_C) ; preserve C-, Clear N-flag
1034 bmov z_flags,ZFL_S, temp,AVR_N
1035 bmov z_flags,ZFL_Z, temp,AVR_Z
1036 bmov z_flags,ZFL_H, temp,AVR_H
1037 bmov z_flags,ZFL_P, temp,AVR_V
1040 andi z_flags,(1<<ZFL_C)|(1<<ZFL_H) ; preserve C- and H-flag
1042 ldpmx temp,sz53p_tab,opl ;S,Z,P flag
1048 bst z_flags,ZFL_C ; save C flag
1051 ldpmx z_flags,flagmap_tab,temp
1058 andi z_flags,(1<<ZFL_C) ; preserve C-, Clear N-flag
1061 bmov z_flags,ZFL_S, temp,AVR_N
1062 bmov z_flags,ZFL_Z, temp,AVR_Z
1064 sbr z_flags,(1<<ZFL_H)
1065 bmov z_flags,ZFL_P, temp,AVR_V
1067 andi z_flags,(1<<ZFL_C)|(1<<ZFL_H) ; preserve C- and H-flag
1069 ldpmx temp,sz53p_tab,z_a ; S,Z,P flag
1074 ;----------------------------------------------------------------
1075 ;|Mnemonic |SZHPNC|Description |Notes |
1076 ;----------------------------------------------------------------
1077 ;|DEC r |***V1-|Decrement |s=s-1 |
1078 ;|DEC [HL] |***V1-|Increment |[HL]=[HL]-1 |
1079 ;|DEC [xx+d]|***V1-|Increment |[xx+d]=[xx+d]-1 |
1080 ;|----------|SZHP C|---------- 8080 ----------------------------|
1081 ;|DEC r |**-P -|Increment |r=r-1 |
1082 ;|DEC [HL] |**-P -|Increment |[HL]=[HL]-1 |
1089 bmov z_flags,ZFL_S, temp,AVR_N
1090 bmov z_flags,ZFL_Z, temp,AVR_Z
1091 bmov z_flags,ZFL_H, temp,AVR_H
1092 bmov z_flags,ZFL_P, temp,AVR_V
1093 ori z_flags,(1<<ZFL_N) ; Set N-flag
1095 andi z_flags,(1<<ZFL_C)|(1<<ZFL_H) ; preserve C- and H-flag
1096 ldpmx temp,sz53p_tab,opl ; S,Z,P flag
1106 bmov z_flags,ZFL_S, temp,AVR_N
1107 bmov z_flags,ZFL_Z, temp,AVR_Z
1108 bmov z_flags,ZFL_H, temp,AVR_H
1109 bmov z_flags,ZFL_P, temp,AVR_V
1110 ori z_flags,(1<<ZFL_N) ; Set N-flag
1113 andi z_flags,(1<<ZFL_C)|(1<<ZFL_H) ; preserve C- and H-flag
1114 ldpmx temp,sz53p_tab,z_a ; S,Z,P flag
1120 ;----------------------------------------------------------------
1121 ;|Mnemonic |SZHPNC|Description |Notes |
1122 ;----------------------------------------------------------------
1123 ;|INC xx |------|Increment |xx=xx+1 |
1124 ;|INC ss |------|Increment |ss=ss+1 |
1147 ;----------------------------------------------------------------
1148 ;|Mnemonic |SZHPNC|Description |Notes |
1149 ;----------------------------------------------------------------
1150 ;|DEC xx |------|Decrement |xx=xx-1 |
1151 ;|DEC ss |------|Decrement |ss=ss-1 |
1174 ;----------------------------------------------------------------
1175 ;|Mnemonic |SZHPNC|Description |Notes |
1176 ;----------------------------------------------------------------
1177 ;|RLCA |--0-0*|Rotate Left Circular |A=A<- |
1178 ;|----------|SZHP C|---------- 8080 ----------------------------|
1179 ;|RLCA |---- *|Rotate Left Circular |A=A<- |
1183 ;Rotate Left Cyclical. All bits move 1 to the
1184 ;left, the msb becomes c and lsb.
1185 do_z80_flags_op_rotate
1190 ori z_flags, (1<<ZFL_C)
1194 ;----------------------------------------------------------------
1195 ;|Mnemonic |SZHPNC|Description |Notes |
1196 ;----------------------------------------------------------------
1197 ;|RRCA |--0-0*|Rotate Right Circular|A=->A |
1198 ;|----------|SZHP C|---------- 8080 ----------------------------|
1199 ;|RRCA |---- *|Rotate Right Circular|A=->A |
1203 ;Rotate Right Cyclical. All bits move 1 to the
1204 ;right, the lsb becomes c and msb.
1205 do_z80_flags_op_rotate
1210 ori z_flags, (1<<ZFL_C)
1214 ;----------------------------------------------------------------
1215 ;|Mnemonic |SZHPNC|Description |Notes |
1216 ;----------------------------------------------------------------
1217 ;|RRA |--0-0*|Rotate Right Acc. |A=->{CY,A} |
1218 ;|----------|SZHP C|---------- 8080 ----------------------------|
1219 ;|RRA |---- *|Rotate Right Acc. |A=->{CY,A} |
1223 ;Rotate Right. All bits move 1 to the right, the lsb
1224 ;becomes c, c becomes msb.
1225 clc ; get z80 carry to avr carry
1228 do_z80_flags_op_rotate ; (clear ZFL_C, doesn't change AVR_C)
1229 bmov z_flags,ZFL_C, z_a,0 ; Bit 0 --> CY
1233 ;----------------------------------------------------------------
1234 ;|Mnemonic |SZHPNC|Description |Notes |
1235 ;----------------------------------------------------------------
1236 ;|RLA |--0-0*|Rotate Left Acc. |A={CY,A}<- |
1237 ;|----------|SZHP C|---------- 8080 ----------------------------|
1238 ;|RLA |---- *|Rotate Left Acc. |A={CY,A}<- |
1242 ;Rotate Left. All bits move 1 to the left, the msb
1243 ;becomes c, c becomes lsb.
1247 do_z80_flags_op_rotate ; (clear ZFL_C, doesn't change AVR_C)
1248 bmov z_flags,ZFL_C, z_a,7 ; Bit 7 --> CY
1252 ;----------------------------------------------------------------
1253 ;|Mnemonic |SZHPNC|Description |Notes |
1254 ;----------------------------------------------------------------
1255 ;|ADD A,s |***V0*|Add |A=A+s |
1256 ;|----------|SZHP C|---------- 8080 ----------------------------|
1257 ;|ADD A,s |***P *|Add |A=A+s |
1263 ldpmx z_flags,sz53p_tab,z_a ;S,Z,P flag
1264 bmov z_flags,ZFL_C, temp,AVR_C
1265 bmov z_flags,ZFL_H, temp,AVR_H
1269 ;----------------------------------------------------------------
1270 ;|Mnemonic |SZHPNC|Description |Notes |
1271 ;----------------------------------------------------------------
1272 ;|ADC A,s |***V0*|Add with Carry |A=A+s+CY |
1273 ;|----------|SZHP C|---------- 8080 ----------------------------|
1274 ;|ADC A,s |***P *|Add with Carry |A=A+s+CY |
1283 ldpmx z_flags,sz53p_tab,z_a ;S,Z,P
1284 bmov z_flags,ZFL_C, temp,AVR_C
1285 bmov z_flags,ZFL_H, temp,AVR_H
1289 ;----------------------------------------------------------------
1290 ;|Mnemonic |SZHPNC|Description |Notes |
1291 ;----------------------------------------------------------------
1292 ;|SUB s |***V1*|Subtract |A=A-s |
1293 ;|----------|SZHP C|---------- 8080 ----------------------------|
1294 ;|SUB s |***P *|Subtract |A=A-s |
1300 ldpmx z_flags,sz53p_tab,z_a ;S,Z,P
1301 bmov z_flags,ZFL_C, temp,AVR_C
1302 bmov z_flags,ZFL_H, temp,AVR_H
1307 ;----------------------------------------------------------------
1308 ;|Mnemonic |SZHPNC|Description |Notes |
1309 ;----------------------------------------------------------------
1310 ;|CP s |***V1*|Compare |A-s |
1311 ;|----------|SZHP C|---------- 8080 ----------------------------|
1312 ;|CP s |***P *|Compare |A-s |
1319 ldpmx z_flags,sz53p_tab,temp2 ;S,Z,P
1320 bmov z_flags,ZFL_C, temp,AVR_C
1321 bmov z_flags,ZFL_H, temp,AVR_H
1326 ;----------------------------------------------------------------
1327 ;|Mnemonic |SZHPNC|Description |Notes |
1328 ;----------------------------------------------------------------
1329 ;|SBC A,s |***V1*|Subtract with Carry |A=A-s-CY |
1330 ;|----------|SZHP C|---------- 8080 ----------------------------|
1331 ;|SBC A,s |***P *|Subtract with Carry |A=A-s-CY |
1340 ldpmx z_flags,sz53p_tab,z_a ;S,Z,P
1341 bmov z_flags,ZFL_C, temp,AVR_C
1342 bmov z_flags,ZFL_H, temp,AVR_H
1347 ;----------------------------------------------------------------
1348 ;|Mnemonic |SZHPNC|Description |Notes |
1349 ;----------------------------------------------------------------
1350 ;|AND s |**1P00|Logical AND |A=A&s |
1351 ;|----------|SZHP C|---------- 8080 ----------------------------|
1352 ;|AND s |**-P 0|Logical AND |A=A&s |
1357 ldpmx z_flags,sz53p_tab,z_a ;S,Z,P,N,C
1362 ;----------------------------------------------------------------
1363 ;|Mnemonic |SZHPNC|Description |Notes |
1364 ;----------------------------------------------------------------
1365 ;|OR s |**0P00|Logical inclusive OR |A=Avs |
1366 ;|----------|SZHP C|---------- 8080 ----------------------------|
1367 ;|OR s |**-P00|Logical inclusive OR |A=Avs |
1372 ldpmx z_flags,sz53p_tab,z_a ;S,Z,H,P,N,C
1376 ;----------------------------------------------------------------
1377 ;|Mnemonic |SZHPNC|Description |Notes |
1378 ;----------------------------------------------------------------
1379 ;|XOR s |**0P00|Logical Exclusive OR |A=Axs |
1380 ;|----------|SZHP C|---------- 8080 ----------------------------|
1381 ;|XOR s |**-P 0|Logical Exclusive OR |A=Axs |
1386 ldpmx z_flags,sz53p_tab,z_a ;S,Z,H,P,N,C
1390 ;----------------------------------------------------------------
1391 ;|Mnemonic |SZHPNC|Description |Notes |
1392 ;----------------------------------------------------------------
1393 ;|ADD HL,ss |--*-0*|Add |HL=HL+ss |
1394 ;|----------|SZHP C|---------- 8080 ----------------------------|
1395 ;|ADD HL,ss |---- *|Add |HL=HL+ss |
1402 bmov z_flags,ZFL_C, temp,AVR_C
1404 do_z80_flags_clear_N
1407 ;----------------------------------------------------------------
1408 ;|Mnemonic |SZHPNC|Description |Notes |
1409 ;----------------------------------------------------------------
1410 ;|LD dst,src|------|Load |dst=src |
1413 do_op_sthl: ;store hl to mem loc in opl:h
1420 ;----------------------------------------------------------------
1421 ;|Mnemonic |SZHPNC|Description |Notes |
1422 ;----------------------------------------------------------------
1423 ;|LD dst,src|------|Load |dst=src |
1433 ;----------------------------------------------------------------
1434 ;|Mnemonic |SZHPNC|Description |Notes |
1435 ;----------------------------------------------------------------
1436 ;|LD dst,src|------|Load |dst=src |
1443 ;----------------------------------------------------------------
1444 ;|Mnemonic |SZHPNC|Description |Notes |
1445 ;----------------------------------------------------------------
1446 ;|DAA |***P-*|Decimal Adjust Acc. | |
1447 ;|----------|SZHP C|---------- 8080 ----------------------------|
1450 ; Description (http://www.z80.info/z80syntx.htm#DAA):
1451 ; This instruction conditionally adjusts the accumulator for BCD addition
1452 ; and subtraction operations. For addition (ADD, ADC, INC) or subtraction
1453 ; (SUB, SBC, DEC, NEC), the following table indicates the operation performed:
1455 ; -------------------------------------------------------------------
1456 ; | |C Flag |HEX value in|H Flag |HEX val in | Number |C flag |
1457 ; | Oper |Before |upper digit |Before |lower digit| added |After |
1458 ; | |DAA |(bit 7-4) |DAA |(bit 3-0) | to A |DAA |
1459 ; |-------+-------+------------+-------+-----------+--------+-------|
1460 ; | | 0 | 0-9 | 0 | 0-9 | 00 | 0 |
1461 ; | ADD | 0 | 0-8 | 0 | A-F | 06 | 0 |
1462 ; | | 0 | 0-9 | 1 | 0-3 | 06 | 0 |
1463 ; | ADC | 0 | A-F | 0 | 0-9 | 60 | 1 |
1464 ; | | 0 | 9-F | 0 | A-F | 66 | 1 |
1465 ; | INC | 0 | A-F | 1 | 0-3 | 66 | 1 |
1466 ; | | 1 | 0-2 | 0 | 0-9 | 60 | 1 |
1467 ; | | 1 | 0-2 | 0 | A-F | 66 | 1 |
1468 ; | | 1 | 0-3 | 1 | 0-3 | 66 | 1 |
1469 ; |-------+-------+------------+-------+-----------+--------+-------|
1470 ; | SUB | 0 | 0-9 | 0 | 0-9 | 00 | 0 |
1471 ; | SBC | 0 | 0-8 | 1 | 6-F | FA | 0 |
1472 ; | DEC | 1 | 7-F | 0 | 0-9 | A0 | 1 |
1473 ; | NEG | 1 | 6-F | 1 | 6-F | 9A | 1 |
1474 ; -------------------------------------------------------------------
1476 ; The H flag is affected as follows:
1478 ; ---------------------
1479 ; | N | H | low |H' |
1481 ; |---+---+-------+---|
1482 ; | 0 | * | 0-9 | 0 |
1483 ; | 0 | * | a-f | 1 |
1485 ; | 1 | 1 | 6-f | 0 |
1486 ; | 1 | 1 | 0-5 | 1 |
1487 ; ---------------------
1491 ; P/V: Set if Acc. is even parity after operation, reset otherwise.
1492 ; Z: Set if Acc. is Zero after operation, reset otherwise.
1493 ; S: Set if most significant bit of Acc. is 1 after operation, reset otherwise.
1500 sbrc z_flags,ZFL_N ;if add-op
1501 rjmp op_da_sub ;then
1506 ldi temp2,0 ; new C, H and N flag
1507 sbrc z_flags,ZFL_H ; |
1508 rjmp op_da_a01 ; if (H flag ...
1511 cpi temp,0x0a ; or (lower nibble >= 0x0A))
1514 ldi oph,0x06 ; add 6 to lower nibble
1517 ori temp2,(1<<ZFL_H) ; set new H flag
1520 ori temp2,(1<<ZFL_C) ; set new H flag
1522 sbrc z_flags,ZFL_C ; |
1523 rjmp op_da_a12 ; if (C flag ...
1524 cpi opl,0xA0 ; |... or upper nibble >= 0xA0)
1527 ldi oph,0x60 ; add 6 to lower nibble
1529 ori temp2,(1<<ZFL_C) ; set new C flag
1531 ldpmx z_flags, sz53p_tab, opl ; get S,Z,P flag
1532 or z_flags,temp2 ; merge new C and H flag
1537 op_da_sub: ;Else (sub-op)
1538 ldi temp2,(1<<ZFL_N) ; new C, H and N flag
1539 sbrc z_flags,ZFL_H ; |
1540 rjmp op_da_s01 ; if (H flag ...
1543 cpi temp,0x0a ; or (lower nibble >= 0x0A))
1546 ldi oph,0x06 ; add 6 to lower nibble
1549 ori temp2,(1<<ZFL_H) ; set new H flag
1551 ori temp2,(1<<ZFL_C) ; set new C flag
1553 sbrc z_flags,ZFL_C ; |
1554 rjmp op_da_s12 ; if (C flag ...
1555 cpi opl,0x90 ; |... or upper nibble >= 0xA0)
1558 ldi oph,0x60 ; add 6 to lower nibble
1560 ori temp2,(1<<ZFL_C) ; set new C flag
1562 ldpmx z_flags, sz53p_tab, opl ; get S,Z,P flag
1563 or z_flags,temp2 ; merge new C and H flag
1571 ldi oph,0 ;oph: what to add
1574 sbrc z_flags,ZFL_N ;if add-op
1575 rjmp op_da_sub ;then
1579 ldi temp2,0 ; new C, H and N flag
1582 cpi temp,0x0a ; if (lower nibble >= 0x0A)
1584 ori oph,0x06 ; add 6
1585 ori temp2,(1<<ZFL_H) ; set new H flag
1587 sbrc z_flags,ZFL_C ; |
1588 rjmp op_da_a02 ; if (C flag ...
1589 cpi opl,0x90 ; |... or upper nibble >= 0x90)
1592 ori oph,0x60 ; add 0x60
1593 ori temp2,(1<<ZFL_C) ; set new C flag
1596 op_da_a10: ; else (lower nibble is 0x09 or lower)
1597 sbrc z_flags,ZFL_C ; |
1598 rjmp op_da_a12 ; if (C flag ...
1599 cpi opl,0xA0 ; |... or upper nibble >= 0xA0)
1602 ori oph,0x60 ; add 0x60
1603 ori temp2,(1<<ZFL_C) ; set new C flag
1605 sbrs z_flags,ZFL_H ; if (H flag)
1607 ori oph,0x06 ; add 0x06
1610 cpi temp,0x06 ; if (lower nibble < 0x6)
1612 ; ori temp2,(1<<ZFL_H) ; set new H flag
1617 ldpmx z_flags, sz53p_tab, opl ; get S,Z,P flag
1618 or z_flags,temp2 ; merge new C and H flag
1623 op_da_sub: ;Else (sub-op)
1624 ldi temp2,(1<<ZFL_N) ; new C, H and N flag
1627 cpi temp,0x0a ; if (lower nibble >= 0x0A)
1629 ori oph,0x06 ; sub 6
1631 sbrc z_flags,ZFL_C ; |
1632 rjmp op_da_s02 ; if (C flag ...
1633 cpi opl,0x90 ; |... or upper nibble >= 0x90)
1636 ori oph,0x60 ; sub 0x60
1637 ori temp2,(1<<ZFL_C) ; set new C flag
1640 op_da_s10: ; else (lower nibble is 0x09 or lower)
1641 sbrc z_flags,ZFL_C ; |
1642 rjmp op_da_s12 ; if (C flag ...
1643 cpi opl,0xA0 ; |... or upper nibble >= 0xA0)
1646 ori oph,0x60 ; sub 0x60
1647 ori temp2,(1<<ZFL_C) ; set new C flag
1649 sbrs z_flags,ZFL_H ; if (H flag)
1651 ori oph,0x06 ; sub 0x06
1654 cpi temp,0x06 ; if (lower nibble < 0x06)
1656 ori temp2,(1<<ZFL_H) ; set new H flag
1661 ldpmx z_flags, sz53p_tab, opl ; get S,Z,P flag
1662 or z_flags,temp2 ; merge new C and H flag
1666 #endif /* alternatives */
1669 ;----------------------------------------------------------------
1670 ;|Mnemonic |SZHPNC|Description |Notes |
1671 ;----------------------------------------------------------------
1672 ;|SCF |--0-01|Set Carry Flag |CY=1 |
1673 ;|----------|SZHP C|---------- 8080 ----------------------------|
1677 do_z80_flags_clear_HN
1678 ori z_flags,(1<<ZFL_C)
1681 ;----------------------------------------------------------------
1682 ;|Mnemonic |SZHPNC|Description |Notes |
1683 ;----------------------------------------------------------------
1684 ;|CCF |--?-0*|Complement Carry Flag|CY=~CY, HC=previous CY|
1685 ;|----------|SZHP C|---------- 8080 ----------------------------|
1686 ;|CCF |---- 1|Set Carry Flag |CY=1 |
1689 do_z80_flags_clear_N
1690 do_z80_flags_copy_HC
1695 ;----------------------------------------------------------------
1696 ;|Mnemonic |SZHPNC|Description |Notes |
1697 ;----------------------------------------------------------------
1698 ;|CPL |--1-1-|Complement |A=~A |
1699 ;|----------|SZHP C|---------- 8080 ----------------------------|
1700 ;|CPL |---- -|Complement |A=~A |
1709 ;----------------------------------------------------------------
1710 ;|Mnemonic |SZHPNC|Description |Notes |
1711 ;----------------------------------------------------------------
1712 ;|PUSH xx |------|Push |-[SP]=xx |
1713 ;|PUSH qq |------|Push |-[SP]=qq |
1726 printstring "Stack push "
1729 printstring ", SP is now "
1737 ;----------------------------------------------------------------
1738 ;|Mnemonic |SZHPNC|Description |Notes |
1739 ;----------------------------------------------------------------
1740 ;|POP xx |------|Pop |xx=[SP]+ |
1741 ;|POP qq |------|Pop |qq=[SP]+ |
1754 printstring "Stack pop "
1757 printstring ", SP is now "
1764 ;----------------------------------------------------------------
1765 ;|Mnemonic |SZHPNC|Description |Notes |
1766 ;----------------------------------------------------------------
1767 ;|EX [SP],HL|------|Exchange |[SP]<->HL |
1768 ;|EX DE,HL |------|Exchange |DE<->HL |
1769 ;-----------------------------Z80--------------------------------
1777 ;----------------------------------------------------------------
1778 ;|Mnemonic |SZHPNC|Description |Notes |
1779 ;----------------------------------------------------------------
1780 ;|DI |------|Disable Interrupts |IFF1 = IFF2 = 0 |
1781 ;|EI |------|Enable Interrupts |IFF1 = IFF2 = 1 |
1787 andi temp,~((1<<IFF2) | (1<<IFF1))
1795 ori temp,(1<<IFF2) | (1<<IFF1)
1800 ;----------------------------------------------------------------
1801 ;|Mnemonic |SZHPNC|Description |Notes |
1802 ;----------------------------------------------------------------
1803 ;|CALL cc,nn|------|Conditional Call |If cc CALL |
1804 ;|JP cc,nn |------|Conditional Jump |If cc JP |
1805 ;|RET cc |------|Conditional Return |If cc RET |
1812 pop temp ; direkt zurueck zu main
1815 ;----------------------------------------------------------------
1816 ;|Mnemonic |SZHPNC|Description |Notes |
1817 ;----------------------------------------------------------------
1818 ;|CALL cc,nn|------|Conditional Call |If cc CALL |
1819 ;|JP cc,nn |------|Conditional Jump |If cc JP |
1820 ;|RET cc |------|Conditional Return |If cc RET |
1827 pop temp ; direkt zurueck zu main
1830 ;----------------------------------------------------------------
1831 ;|Mnemonic |SZHPNC|Description |Notes |
1832 ;----------------------------------------------------------------
1833 ;|CALL cc,nn|------|Conditional Call |If cc CALL |
1834 ;|JP cc,nn |------|Conditional Jump |If cc JP |
1835 ;|RET cc |------|Conditional Return |If cc RET |
1842 pop temp ; direkt zuruech zu main
1845 ;----------------------------------------------------------------
1846 ;|Mnemonic |SZHPNC|Description |Notes |
1847 ;----------------------------------------------------------------
1848 ;|CALL cc,nn|------|Conditional Call |If cc CALL |
1849 ;|JP cc,nn |------|Conditional Jump |If cc JP |
1850 ;|RET cc |------|Conditional Return |If cc RET |
1857 pop temp ; direkt zuruech zu main
1860 ;----------------------------------------------------------------
1861 ;|Mnemonic |SZHPNC|Description |Notes |
1862 ;----------------------------------------------------------------
1863 ;|CALL cc,nn|------|Conditional Call |If cc CALL |
1864 ;|JP cc,nn |------|Conditional Jump |If cc JP |
1865 ;|RET cc |------|Conditional Return |If cc RET |
1872 pop temp ; direkt zuruech zu main
1875 ;----------------------------------------------------------------
1876 ;|Mnemonic |SZHPNC|Description |Notes |
1877 ;----------------------------------------------------------------
1878 ;|CALL cc,nn|------|Conditional Call |If cc CALL |
1879 ;|JP cc,nn |------|Conditional Jump |If cc JP |
1880 ;|RET cc |------|Conditional Return |If cc RET |
1887 pop temp ; direkt zuruech zu main
1890 ;----------------------------------------------------------------
1891 ;|Mnemonic |SZHPNC|Description |Notes |
1892 ;----------------------------------------------------------------
1893 ;|CALL cc,nn|------|Conditional Call |If cc CALL |
1894 ;|JP cc,nn |------|Conditional Jump |If cc JP |
1895 ;|RET cc |------|Conditional Return |If cc RET |
1898 do_op_ifp: ;sign positive, aka s=0
1902 pop temp ; direkt zuruech zu main
1905 ;----------------------------------------------------------------
1906 ;|Mnemonic |SZHPNC|Description |Notes |
1907 ;----------------------------------------------------------------
1908 ;|CALL cc,nn|------|Conditional Call |If cc CALL |
1909 ;|JP cc,nn |------|Conditional Jump |If cc JP |
1910 ;|RET cc |------|Conditional Return |If cc RET |
1913 do_op_ifm: ;sign negative, aka s=1
1917 pop temp ; direkt zuruech zu main
1920 ;----------------------------------------------------------------
1924 ;----------------------------------------------------------------
1925 ;|Mnemonic |SZHPNC|Description |Notes |
1926 ;----------------------------------------------------------------
1927 ;|DJNZ e |------|Dec., Jump Non-Zero |B=B-1 till B=0 |
1929 ;The b register is decremented, and if not zero, the signed value e is added to pc.
1930 ;The jump is measured from the start of the instruction opcode.
1931 ;e = Relative addressing (PC=PC+2+offset)
1936 do_op_DJNZ: ; decremt B, jump B=0
1937 dec z_b ; B decrementieren
1938 breq do_op_DJNZ_Z ; bei B=0
1939 subi opl, 0x80 ; z_pc + e im Zweierkomplement
1953 pop temp ; direkt zurueck zu main
1959 ;----------------------------------------------------------------
1960 ;|Mnemonic |SZHPNC|Description |Notes |
1961 ;----------------------------------------------------------------
1962 ;|EX AF,AF' |------|Exchange |AF<->AF' |
1974 ;----------------------------------------------------------------
1975 ;|Mnemonic |SZHPNC|Description |Notes |
1976 ;----------------------------------------------------------------
1977 ;|EXX |------|Exchange |qq<->qq' (except AF)|
2028 mem_read_ds zl,z_pc ;zl = memReadByte(z_pc)
2029 adiw z_pcl,1 ;++z_pc
2030 ldi zh,high(EDjmp) ;
2036 mem_read_ds zl,z_pc ;zl = memReadByte(z_pc)
2037 adiw z_pcl,1 ;++z_pc
2038 ldi zh,high(DDFDjmp) ;
2044 mem_read_ds zl,z_pc ;zl = memReadByte(z_pc)
2045 adiw z_pcl,1 ;++z_pc
2046 ldi zh,high(DDFDjmp) ;
2050 mem_read_ds zl,z_pc ;zl = memReadByte(z_pc)
2051 adiw z_pcl,1 ;++z_pc
2052 ldi zh,high(CBjmp) ;
2066 mem_read_s z_pc ;get displacement
2067 adiw z_pcl,1 ;++z_pc
2068 mov temp2,temp ;sign extend
2071 add xl,temp ;add displacement
2075 mem_read_ds zl,z_pc ;zl = opcode
2076 adiw z_pcl,1 ;++z_pc
2077 ldi zh,high(DDFDCBjmp) ;
2083 #else ; TODO: geht das so?
2095 ; ----------------------- Opcode decoding -------------------------
2097 ; Lookup table for Z80 opcodes. Translates the first byte of the instruction word into three
2098 ; operations: fetch, do something, store.
2099 ; The table is made of 256 words.
2101 opctable opcjmp, PC ;+3*256
2103 instr fetch_nop, op_nop, store_nop ;00 ;NOP
2104 instr fetch_DIR16, op_nop, store_BC ;01 nn nn ;LD BC,nn
2105 instr fetch_nop, op_nop, store_MBC ;02 ;LD (BC),A
2106 ;instr fetch_BC, op_INC16, store_BC ;03 ;INC BC
2107 instr fetch_nop, op_INCBC, store_nop ;03 ;INC BC
2108 instr fetch_B, op_INC, store_B ;04 ;INC B
2109 instr fetch_B, op_DEC, store_B ;05 ;DEC B
2110 instr fetch_DIR8, op_nop, store_B ;06 ;LD B,n
2111 instr fetch_nop, op_RLCA, store_nop ;07 ;RLCA
2112 instr fetch_nop, op_EXAF, store_nop ;08 ;EX AF,AF'
2113 instr fetch_BC, op_ADDHL, store_nop ;09 ;ADD HL,BC
2114 instr fetch_MBC, op_nop, store_nop ;0A ;LD A,(BC)
2115 ;instr fetch_BC, op_DEC16, store_BC ;0B ;DEC BC
2116 instr fetch_nop, op_DECBC, store_nop ;0B ;DEC BC
2117 instr fetch_C, op_INC, store_C ;0C ;INC C
2118 instr fetch_C, op_DEC, store_C ;0D ;DEC C
2119 instr fetch_DIR8, op_nop, store_C ;0E nn ;LD C,n
2120 instr fetch_nop, op_RRCA, store_nop ;0F ;RRCA
2121 instr fetch_DIR8, op_DJNZ, store_nop ;10 oo ;DJNZ o
2122 instr fetch_DIR16, op_nop, store_DE ;11 nn nn ;LD DE,nn
2123 instr fetch_nop, op_nop, store_MDE ;12 ;LD (DE),A
2124 ;instr fetch_DE, op_INC16, store_DE ;13 ;INC DE
2125 instr fetch_nop, op_INCDE, store_nop ;13 ;INC DE
2126 instr fetch_D, op_INC, store_D ;14 ;INC D
2127 instr fetch_D, op_DEC, store_D ;15 ;DEC D
2128 instr fetch_DIR8, op_nop, store_D ;16 nn ;LD D,n
2129 instr fetch_nop, op_RLA, store_nop ;17 ;RLA
2130 instr fetch_DIR8, op_nop, store_pcrel ;18 oo ;JR o
2131 instr fetch_DE, op_ADDHL, store_nop ;19 ;ADD HL,DE
2132 instr fetch_MDE, op_nop, store_nop ;1A ;LD A,(DE)
2133 ;instr fetch_DE, op_DEC16, store_DE ;1B ;DEC DE
2134 instr fetch_nop, op_DECDE, store_nop ;1B ;DEC DE
2135 instr fetch_E, op_INC, store_E ;1C ;INC E
2136 instr fetch_E, op_DEC, store_E ;1D ;DEC E
2137 instr fetch_DIR8, op_nop, store_E ;1E nn ;LD E,n
2138 instr fetch_nop, op_RRA, store_nop ;1F ;RRA
2139 instr fetch_DIR8, op_IFNZ, store_pcrel ;20 oo ;JR NZ,o
2140 instr fetch_DIR16, op_nop, store_HL ;21 nn nn ;LD HL,nn
2141 instr fetch_DIR16, op_STHL, store_nop ;22 nn nn ;LD (nn),HL
2142 ;instr fetch_HL, op_INC16, store_HL ;23 ;INC HL
2143 instr fetch_nop, op_INCHL, store_nop ;23 ;INC HL
2144 instr fetch_H, op_INC, store_H ;24 ;INC H
2145 instr fetch_H, op_DEC, store_H ;25 ;DEC H
2146 instr fetch_DIR8, op_nop, store_H ;26 nn ;LD H,n
2147 instr fetch_A, op_DAA, store_A ;27 ;DAA
2148 instr fetch_DIR8, op_IFZ, store_pcrel ;28 oo ;JR Z,o
2149 instr fetch_HL, op_ADDHL, store_nop ;29 ;ADD HL,HL
2150 instr fetch_DIR16, op_RMEM16, store_HL ;2A nn nn ;LD HL,(nn)
2151 ;instr fetch_HL, op_DEC16, store_HL ;2B ;DEC HL
2152 instr fetch_nop, op_DECHL, store_nop ;2B ;DEC HL
2153 instr fetch_L, op_INC, store_L ;2C ;INC L
2154 instr fetch_L, op_DEC, store_L ;2D ;DEC L
2155 instr fetch_DIR8, op_nop, store_L ;2E nn ;LD L,n
2156 instr fetch_nop, op_CPL, store_nop ;2F ;CPL
2157 instr fetch_DIR8, op_IFNC, store_pcrel ;30 oo ;JR NC,o
2158 instr fetch_DIR16, op_nop, store_SP ;31 nn nn ;LD SP,nn
2159 instr fetch_DIR16, op_nop, store_AM ;32 nn nn ;LD (nn),A
2160 instr fetch_SP, op_INC16, store_SP ;33 ;INC SP
2161 instr fetch_MHL, op_INC, store_MHL ;34 ;INC (HL)
2162 instr fetch_MHL, op_DEC, store_MHL ;35 ;DEC (HL)
2163 instr fetch_DIR8, op_nop, store_MHL ;36 nn ;LD (HL),n
2164 instr fetch_nop, op_SCF, store_nop ;37 ;SCF
2165 instr fetch_DIR8, op_IFC, store_pcrel ;38 oo ;JR C,o
2166 instr fetch_SP, op_ADDHL, store_nop ;39 ;ADD HL,SP
2167 instr fetch_DIR16, op_RMEM8, store_A ;3A nn nn ;LD A,(nn)
2168 instr fetch_SP, op_DEC16, store_SP ;3B ;DEC SP
2169 instr fetch_nop, op_INCA, store_nop ;3C ;INC A
2170 instr fetch_nop, op_DECA, store_nop ;3D ;DEC A
2171 instr fetch_DIR8, op_nop, store_A ;3E nn ;LD A,n
2172 instr fetch_nop, op_CCF, store_nop ;3F ;CCF (Complement Carry Flag, gvd)
2173 instr fetch_nop, op_nop, store_nop ;40 ;LD B,B
2174 instr fetch_C, op_nop, store_B ;41 ;LD B,C
2175 instr fetch_D, op_nop, store_B ;42 ;LD B,D
2176 instr fetch_E, op_nop, store_B ;43 ;LD B,E
2177 instr fetch_H, op_nop, store_B ;44 ;LD B,H
2178 instr fetch_L, op_nop, store_B ;45 ;LD B,L
2179 instr fetch_MHL, op_nop, store_B ;46 ;LD B,(HL)
2180 instr fetch_A, op_nop, store_B ;47 ;LD B,A
2181 instr fetch_B, op_nop, store_C ;48 ;LD C,B
2182 instr fetch_nop, op_nop, store_nop ;49 ;LD C,C
2183 instr fetch_D, op_nop, store_C ;4A ;LD C,D
2184 instr fetch_E, op_nop, store_C ;4B ;LD C,E
2185 instr fetch_H, op_nop, store_C ;4C ;LD C,H
2186 instr fetch_L, op_nop, store_C ;4D ;LD C,L
2187 instr fetch_MHL, op_nop, store_C ;4E ;LD C,(HL)
2188 instr fetch_A, op_nop, store_C ;4F ;LD C,A
2189 instr fetch_B, op_nop, store_D ;50 ;LD D,B
2190 instr fetch_C, op_nop, store_D ;51 ;LD D,C
2191 instr fetch_nop, op_nop, store_nop ;52 ;LD D,D
2192 instr fetch_E, op_nop, store_D ;53 ;LD D,E
2193 instr fetch_H, op_nop, store_D ;54 ;LD D,H
2194 instr fetch_L, op_nop, store_D ;55 ;LD D,L
2195 instr fetch_MHL, op_nop, store_D ;56 ;LD D,(HL)
2196 instr fetch_A, op_nop, store_D ;57 ;LD D,A
2197 instr fetch_B, op_nop, store_E ;58 ;LD E,B
2198 instr fetch_C, op_nop, store_E ;59 ;LD E,C
2199 instr fetch_D, op_nop, store_E ;5A ;LD E,D
2200 instr fetch_nop, op_nop, store_nop ;5B ;LD E,E
2201 instr fetch_H, op_nop, store_E ;5C ;LD E,H
2202 instr fetch_L, op_nop, store_E ;5D ;LD E,L
2203 instr fetch_MHL, op_nop, store_E ;5E ;LD E,(HL)
2204 instr fetch_A, op_nop, store_E ;5F ;LD E,A
2205 instr fetch_B, op_nop, store_H ;60 ;LD H,B
2206 instr fetch_C, op_nop, store_H ;61 ;LD H,C
2207 instr fetch_D, op_nop, store_H ;62 ;LD H,D
2208 instr fetch_E, op_nop, store_H ;63 ;LD H,E
2209 instr fetch_nop, op_nop, store_nop ;64 ;LD H,H
2210 instr fetch_L, op_nop, store_H ;65 ;LD H,L
2211 instr fetch_MHL, op_nop, store_H ;66 ;LD H,(HL)
2212 instr fetch_A, op_nop, store_H ;67 ;LD H,A
2213 instr fetch_B, op_nop, store_L ;68 ;LD L,B
2214 instr fetch_C, op_nop, store_L ;69 ;LD L,C
2215 instr fetch_D, op_nop, store_L ;6A ;LD L,D
2216 instr fetch_E, op_nop, store_L ;6B ;LD L,E
2217 instr fetch_H, op_nop, store_L ;6C ;LD L,H
2218 instr fetch_nop, op_nop, store_nop ;6D ;LD L,L
2219 instr fetch_MHL, op_nop, store_L ;6E ;LD L,(HL)
2220 instr fetch_A, op_nop, store_L ;6F ;LD L,A
2221 instr fetch_B, op_nop, store_MHL ;70 ;LD (HL),B
2222 instr fetch_C, op_nop, store_MHL ;71 ;LD (HL),C
2223 instr fetch_D, op_nop, store_MHL ;72 ;LD (HL),D
2224 instr fetch_E, op_nop, store_MHL ;73 ;LD (HL),E
2225 instr fetch_H, op_nop, store_MHL ;74 ;LD (HL),H
2226 instr fetch_L, op_nop, store_MHL ;75 ;LD (HL),L
2227 instr fetch_nop, op_HALT, store_nop ;76 ;HALT
2228 instr fetch_A, op_nop, store_MHL ;77 ;LD (HL),A
2229 instr fetch_B, op_nop, store_A ;78 ;LD A,B
2230 instr fetch_C, op_nop, store_A ;79 ;LD A,C
2231 instr fetch_D, op_nop, store_A ;7A ;LD A,D
2232 instr fetch_E, op_nop, store_A ;7B ;LD A,E
2233 instr fetch_H, op_nop, store_A ;7C ;LD A,H
2234 instr fetch_L, op_nop, store_A ;7D ;LD A,L
2235 instr fetch_MHL, op_nop, store_A ;7E ;LD A,(HL)
2236 instr fetch_nop, op_nop, store_nop ;7F ;LD A,A
2237 instr fetch_B, op_ADDA, store_nop ;80 ;ADD A,B
2238 instr fetch_C, op_ADDA, store_nop ;81 ;ADD A,C
2239 instr fetch_D, op_ADDA, store_nop ;82 ;ADD A,D
2240 instr fetch_E, op_ADDA, store_nop ;83 ;ADD A,E
2241 instr fetch_H, op_ADDA, store_nop ;84 ;ADD A,H
2242 instr fetch_L, op_ADDA, store_nop ;85 ;ADD A,L
2243 instr fetch_MHL, op_ADDA, store_nop ;86 ;ADD A,(HL)
2244 instr fetch_A, op_ADDA, store_nop ;87 ;ADD A,A
2245 instr fetch_B, op_ADCA, store_nop ;88 ;ADC A,B
2246 instr fetch_C, op_ADCA, store_nop ;89 ;ADC A,C
2247 instr fetch_D, op_ADCA, store_nop ;8A ;ADC A,D
2248 instr fetch_E, op_ADCA, store_nop ;8B ;ADC A,E
2249 instr fetch_H, op_ADCA, store_nop ;8C ;ADC A,H
2250 instr fetch_L, op_ADCA, store_nop ;8D ;ADC A,L
2251 instr fetch_MHL, op_ADCA, store_nop ;8E ;ADC A,(HL)
2252 instr fetch_A, op_ADCA, store_nop ;8F ;ADC A,A
2253 instr fetch_B, op_SUBFA, store_nop ;90 ;SUB A,B
2254 instr fetch_C, op_SUBFA, store_nop ;91 ;SUB A,C
2255 instr fetch_D, op_SUBFA, store_nop ;92 ;SUB A,D
2256 instr fetch_E, op_SUBFA, store_nop ;93 ;SUB A,E
2257 instr fetch_H, op_SUBFA, store_nop ;94 ;SUB A,H
2258 instr fetch_L, op_SUBFA, store_nop ;95 ;SUB A,L
2259 instr fetch_MHL, op_SUBFA, store_nop ;96 ;SUB A,(HL)
2260 instr fetch_A, op_SUBFA, store_nop ;97 ;SUB A,A
2261 instr fetch_B, op_SBCFA, store_nop ;98 ;SBC A,B
2262 instr fetch_C, op_SBCFA, store_nop ;99 ;SBC A,C
2263 instr fetch_D, op_SBCFA, store_nop ;9A ;SBC A,D
2264 instr fetch_E, op_SBCFA, store_nop ;9B ;SBC A,E
2265 instr fetch_H, op_SBCFA, store_nop ;9C ;SBC A,H
2266 instr fetch_L, op_SBCFA, store_nop ;9D ;SBC A,L
2267 instr fetch_MHL, op_SBCFA, store_nop ;9E ;SBC A,(HL)
2268 instr fetch_A, op_SBCFA, store_nop ;9F ;SBC A,A
2269 instr fetch_B, op_ANDA, store_nop ;A0 ;AND A,B
2270 instr fetch_C, op_ANDA, store_nop ;A1 ;AND A,C
2271 instr fetch_D, op_ANDA, store_nop ;A2 ;AND A,D
2272 instr fetch_E, op_ANDA, store_nop ;A3 ;AND A,E
2273 instr fetch_H, op_ANDA, store_nop ;A4 ;AND A,H
2274 instr fetch_L, op_ANDA, store_nop ;A5 ;AND A,L
2275 instr fetch_MHL, op_ANDA, store_nop ;A6 ;AND A,(HL)
2276 instr fetch_A, op_ANDA, store_nop ;A7 ;AND A,A
2277 instr fetch_B, op_XORA, store_nop ;A8 ;XOR A,B
2278 instr fetch_C, op_XORA, store_nop ;A9 ;XOR A,C
2279 instr fetch_D, op_XORA, store_nop ;AA ;XOR A,D
2280 instr fetch_E, op_XORA, store_nop ;AB ;XOR A,E
2281 instr fetch_H, op_XORA, store_nop ;AC ;XOR A,H
2282 instr fetch_L, op_XORA, store_nop ;AD ;XOR A,L
2283 instr fetch_MHL, op_XORA, store_nop ;AE ;XOR A,(HL)
2284 instr fetch_A, op_XORA, store_nop ;AF ;XOR A,A
2285 instr fetch_B, op_ORA, store_nop ;B0 ;OR A,B
2286 instr fetch_C, op_ORA, store_nop ;B1 ;OR A,C
2287 instr fetch_D, op_ORA, store_nop ;B2 ;OR A,D
2288 instr fetch_E, op_ORA, store_nop ;B3 ;OR A,E
2289 instr fetch_H, op_ORA, store_nop ;B4 ;OR A,H
2290 instr fetch_L, op_ORA, store_nop ;B5 ;OR A,L
2291 instr fetch_MHL, op_ORA, store_nop ;B6 ;OR A,(HL)
2292 instr fetch_A, op_ORA, store_nop ;B7 ;OR A,A
2293 instr fetch_B, op_CPFA, store_nop ;B8 ;CP A,B
2294 instr fetch_C, op_CPFA, store_nop ;B9 ;CP A,C
2295 instr fetch_D, op_CPFA, store_nop ;BA ;CP A,D
2296 instr fetch_E, op_CPFA, store_nop ;BB ;CP A,E
2297 instr fetch_H, op_CPFA, store_nop ;BC ;CP A,H
2298 instr fetch_L, op_CPFA, store_nop ;BD ;CP A,L
2299 instr fetch_MHL, op_CPFA, store_nop ;BE ;CP A,(HL)
2300 instr fetch_A, op_CPFA, store_nop ;BF ;CP A,A
2301 instr fetch_nop, op_IFNZ, store_RET ;C0 ;RET NZ
2302 instr fetch_nop, op_POP16, store_BC ;C1 ;POP BC
2303 instr fetch_DIR16, op_IFNZ, store_PC ;C2 nn nn ;JP NZ,nn
2304 instr fetch_DIR16, op_nop, store_PC ;C3 nn nn ;JP nn
2305 instr fetch_DIR16, op_IFNZ, store_CALL ;C4 nn nn ;CALL NZ,nn
2306 instr fetch_BC, op_PUSH16, store_nop ;C5 ;PUSH BC
2307 instr fetch_DIR8, op_ADDA, store_nop ;C6 nn ;ADD A,n
2308 instr fetch_RST, op_nop, store_CALL ;C7 ;RST 0
2309 instr fetch_nop, op_IFZ, store_RET ;C8 ;RET Z
2310 instr fetch_nop, op_nop, store_RET ;C9 ;RET
2311 instr fetch_DIR16, op_IFZ, store_PC ;CA nn nn ;JP Z,nn
2312 instr fetch_nop, op_prefixCB, store_nop ;CB ;(CB opcode prefix)
2313 instr fetch_DIR16, op_IFZ, store_CALL ;CC nn nn ;CALL Z,nn
2314 instr fetch_DIR16, op_nop, store_CALL ;CD nn nn ;CALL nn
2315 instr fetch_DIR8, op_ADCA, store_nop ;CE nn ;ADC A,n
2316 instr fetch_RST, op_nop, store_CALL ;CF ;RST 8H
2317 instr fetch_nop, op_IFNC, store_RET ;D0 ;RET NC
2318 instr fetch_nop, op_POP16, store_DE ;D1 ;POP DE
2319 instr fetch_DIR16, op_IFNC, store_PC ;D2 nn nn ;JP NC,nn
2320 instr fetch_DIR8, op_OUTA, store_nop ;D3 nn ;OUT (n),A
2321 instr fetch_DIR16, op_IFNC, store_CALL ;D4 nn nn ;CALL NC,nn
2322 instr fetch_DE, op_PUSH16, store_nop ;D5 ;PUSH DE
2323 instr fetch_DIR8, op_SUBFA, store_nop ;D6 nn ;SUB n
2324 instr fetch_RST, op_nop, store_CALL ;D7 ;RST 10H
2325 instr fetch_nop, op_IFC, store_RET ;D8 ;RET C
2326 instr fetch_nop, op_EXX, store_nop ;D9 ;EXX
2327 instr fetch_DIR16, op_IFC, store_PC ;DA nn nn ;JP C,nn
2328 instr fetch_DIR8, op_INA, store_nop ;DB nn ;IN A,(n)
2329 instr fetch_DIR16, op_IFC, store_CALL ;DC nn nn ;CALL C,nn
2330 instr fetch_nop, op_prefixDD, store_nop ;DD ;(DD opcode prefix)
2331 instr fetch_DIR8, op_SBCFA, store_nop ;DE nn ;SBC A,n
2332 instr fetch_RST, op_nop, store_CALL ;DF ;RST 18H
2333 instr fetch_nop, op_IFPO, store_RET ;E0 ;RET PO
2334 instr fetch_nop, op_POP16, store_HL ;E1 ;POP HL
2335 instr fetch_DIR16, op_IFPO, store_PC ;E2 nn nn ;JP PO,nn
2336 instr fetch_MSP, op_EXHL, store_MSP ;E3 ;EX (SP),HL
2337 instr fetch_DIR16, op_IFPO, store_CALL ;E4 nn nn ;CALL PO,nn
2338 instr fetch_HL, op_PUSH16, store_nop ;E5 ;PUSH HL
2339 instr fetch_DIR8, op_ANDA, store_nop ;E6 nn ;AND n
2340 instr fetch_RST, op_nop, store_CALL ;E7 ;RST 20H
2341 instr fetch_nop, op_IFPE, store_RET ;E8 ;RET PE
2342 instr fetch_HL, op_nop, store_PC ;E9 ;JP HL
2343 instr fetch_DIR16, op_IFPE, store_PC ;EA nn nn ;JP PE,nn
2344 instr fetch_DE, op_EXHL, store_DE ;EB ;EX DE,HL
2345 instr fetch_DIR16, op_IFPE, store_CALL ;EC nn nn ;CALL PE,nn
2346 instr fetch_nop, op_prefixED, store_nop ;ED ;(ED opcode prefix)
2347 instr fetch_DIR8, op_XORA, store_nop ;EE nn ;XOR n
2348 instr fetch_RST, op_nop, store_CALL ;EF ;RST 28H
2349 instr fetch_nop, op_IFP, store_RET ;F0 ;RET P
2350 instr fetch_nop, op_POP16, store_AF ;F1 ;POP AF
2351 instr fetch_DIR16, op_IFP, store_PC ;F2 nn nn ;JP P,nn
2352 instr fetch_nop, op_DI, store_nop ;F3 ;DI
2353 instr fetch_DIR16, op_IFP, store_CALL ;F4 nn nn ;CALL P,nn
2354 instr fetch_AF, op_PUSH16, store_nop ;F5 ;PUSH AF
2355 instr fetch_DIR8, op_ORA, store_nop ;F6 nn ;OR n
2356 instr fetch_RST, op_nop, store_CALL ;F7 ;RST 30H
2357 instr fetch_nop, op_IFM, store_RET ;F8 ;RET M
2358 instr fetch_HL, op_nop, store_SP ;F9 ;LD SP,HL
2359 instr fetch_DIR16, op_IFM, store_PC ;FA nn nn ;JP M,nn
2360 instr fetch_nop, op_EI, store_nop ;FB ;EI
2361 instr fetch_DIR16, op_IFM, store_CALL ;FC nn nn ;CALL M,nn
2362 instr fetch_nop, op_prefixFD, store_nop ;FD ;(FD opcode prefix)
2363 instr fetch_DIR8, op_CPFA, store_nop ;FE nn ;CP n
2364 instr fetch_RST, op_nop, store_CALL ;FF ;RST 38H
2374 sbiw z_pcl,1 ;--z_pc
2416 mem_read_ds opl, z_pc ;get displacement
2418 mov oph,opl ;sign extend
2421 add xl,opl ;add displacement
2423 mem_read_d opl ;get operand
2424 ret ;(Ix+d) still in xl,xh
2470 mem_read_s z_pc ;get displacement
2472 mov temp2,temp ;sign extend
2475 add xl,temp ;add displacement
2477 mem_write_s opl ;store operand
2483 mem_write_s opl ;store operand
2498 mem_read_s z_pc ;get displacement
2501 mov temp2,temp ;sign extend
2504 add xl,temp ;add displacement
2506 mem_write_s opl ;store operand
2522 ;----------------------------------------------------------------
2523 ;|Mnemonic |SZHPNC|Description |Notes |
2524 ;----------------------------------------------------------------
2525 ;|LD dst,src|------|Load |dst=src |
2530 do_op_stxx: ;store xx to mem loc in opl:h
2547 ;----------------------------------------------------------------
2548 ;|Mnemonic |SZHPNC|Description |Notes |
2549 ;----------------------------------------------------------------
2550 ;|EX [SP],IX|------|Exchange |[SP]<->IX |
2551 ;|EX [SP],IY|------|Exchange |[SP]<->IY |
2572 ;----------------------------------------------------------------
2573 ;|Mnemonic |SZHPNC|Description |Notes |
2574 ;----------------------------------------------------------------
2575 ;|ADD IX,pp |--*-0*|Add |IX=IX+pp |
2576 ;|ADD IY,rr |--*-0*|Add |IY=IY+rr |
2600 bmov z_flags,ZFL_C, temp,AVR_C
2602 do_z80_flags_clear_N
2606 opctable DDFDjmp, PC ;+256
2608 instr fetch_nop, op_noni, store_nop ;00 ;
2609 instr fetch_nop, op_noni, store_nop ;01 ;
2610 instr fetch_nop, op_noni, store_nop ;02 ;
2611 instr fetch_nop, op_noni, store_nop ;03 ;
2612 instr fetch_nop, op_noni, store_nop ;04 ;
2613 instr fetch_nop, op_noni, store_nop ;05 ;
2614 instr fetch_nop, op_noni, store_nop ;06 ;
2615 instr fetch_nop, op_noni, store_nop ;07 ;
2616 instr fetch_nop, op_noni, store_nop ;08 ;
2617 instr fetch_BC, op_ADDxx, store_nop ;09 ;ADD xx,BC
2618 instr fetch_nop, op_noni, store_nop ;0A ;
2619 instr fetch_nop, op_noni, store_nop ;0B ;
2620 instr fetch_nop, op_noni, store_nop ;0C ;
2621 instr fetch_nop, op_noni, store_nop ;0D ;
2622 instr fetch_nop, op_noni, store_nop ;0E ;
2623 instr fetch_nop, op_noni, store_nop ;0F ;
2624 instr fetch_nop, op_noni, store_nop ;10 ;
2625 instr fetch_nop, op_noni, store_nop ;11 ;
2626 instr fetch_nop, op_noni, store_nop ;12 ;
2627 instr fetch_nop, op_noni, store_nop ;13 ;
2628 instr fetch_nop, op_noni, store_nop ;14 ;
2629 instr fetch_nop, op_noni, store_nop ;15 ;
2630 instr fetch_nop, op_noni, store_nop ;16 ;
2631 instr fetch_nop, op_noni, store_nop ;17 ;
2632 instr fetch_nop, op_noni, store_nop ;18 ;
2633 instr fetch_DE, op_ADDxx, store_nop ;19 ;ADD xx,DE
2634 instr fetch_nop, op_noni, store_nop ;1A ;
2635 instr fetch_nop, op_noni, store_nop ;1B ;
2636 instr fetch_nop, op_noni, store_nop ;1C ;
2637 instr fetch_nop, op_noni, store_nop ;1D ;
2638 instr fetch_nop, op_noni, store_nop ;1E ;
2639 instr fetch_nop, op_noni, store_nop ;1F ;
2640 instr fetch_nop, op_noni, store_nop ;20 ;
2641 instr fetch_DIR16, op_nop, store_xx ;21 ;LD xx,nn
2642 instr fetch_DIR16, op_STxx, store_nop ;22 ;LD (nn),xx
2643 instr fetch_xx, op_INC16, store_xx ;23 ;INC xx
2644 instr fetch_xH, op_INC, store_xH ;24 ;INC xh
2645 instr fetch_xH, op_DEC, store_xH ;25 ;DEC xh
2646 instr fetch_DIR8, op_nop, store_xH ;26 ;LD xh,n
2647 instr fetch_nop, op_noni, store_nop ;27 ;
2648 instr fetch_nop, op_noni, store_nop ;28 ;
2649 instr fetch_xx, op_ADDxx, store_nop ;29 ;ADD xx,xx
2650 instr fetch_DIR16, op_RMEM16, store_xx ;2A ;LD xx,(nn)
2651 instr fetch_xx, op_DEC16, store_xx ;2B ;DEC xx
2652 instr fetch_xL, op_INC, store_xL ;2C ;INC xl
2653 instr fetch_xL, op_DEC, store_xL ;2D ;DEC xl
2654 instr fetch_DIR8, op_nop, store_xL ;2E ;LD xl,n
2655 instr fetch_nop, op_noni, store_nop ;2F ;
2656 instr fetch_nop, op_noni, store_nop ;30 ;
2657 instr fetch_nop, op_noni, store_nop ;31 ;
2658 instr fetch_nop, op_noni, store_nop ;32 ;
2659 instr fetch_nop, op_noni, store_nop ;33 ;
2660 instr fetch_MXX, op_INC, store_MXX_0 ;34 ;INC (xx+d)
2661 instr fetch_MXX, op_DEC, store_MXX_0 ;35 ;DEC (xx+d)
2662 instr fetch_DIR8_2, op_nop, store_MXX_2 ;36 ;LD (xx+d),n
2663 instr fetch_nop, op_noni, store_nop ;37 ;
2664 instr fetch_nop, op_noni, store_nop ;38 ;
2665 instr fetch_SP, op_ADDxx, store_nop ;39 ;ADD xx,SP
2666 instr fetch_nop, op_noni, store_nop ;3A ;
2667 instr fetch_nop, op_noni, store_nop ;3B ;
2668 instr fetch_nop, op_noni, store_nop ;3C ;
2669 instr fetch_nop, op_noni, store_nop ;3D ;
2670 instr fetch_nop, op_noni, store_nop ;3E ;
2671 instr fetch_nop, op_noni, store_nop ;3F ;
2672 instr fetch_nop, op_noni, store_nop ;40 ;
2673 instr fetch_nop, op_noni, store_nop ;41 ;
2674 instr fetch_nop, op_noni, store_nop ;42 ;
2675 instr fetch_nop, op_noni, store_nop ;43 ;
2676 instr fetch_xH, op_nop, store_B ;44 ;LD B,xh
2677 instr fetch_xL, op_nop, store_B ;45 ;LD B,xl
2678 instr fetch_MXX, op_nop, store_B ;46 ;LD B,(xx+d)
2679 instr fetch_nop, op_noni, store_nop ;47 ;
2680 instr fetch_nop, op_noni, store_nop ;48 ;
2681 instr fetch_nop, op_noni, store_nop ;49 ;
2682 instr fetch_nop, op_noni, store_nop ;4A ;
2683 instr fetch_nop, op_noni, store_nop ;4B ;
2684 instr fetch_xH, op_nop, store_C ;4C ;LD C,xh
2685 instr fetch_xL, op_nop, store_C ;4D ;LD C,xl
2686 instr fetch_MXX, op_nop, store_C ;4E ;LD C,(xx+d)
2687 instr fetch_nop, op_noni, store_nop ;4F ;
2688 instr fetch_nop, op_noni, store_nop ;50 ;
2689 instr fetch_nop, op_noni, store_nop ;51 ;
2690 instr fetch_nop, op_noni, store_nop ;52 ;
2691 instr fetch_nop, op_noni, store_nop ;53 ;
2692 instr fetch_xH, op_nop, store_D ;54 ;LD D,xh
2693 instr fetch_xL, op_nop, store_D ;55 ;LD D,xl
2694 instr fetch_MXX, op_nop, store_D ;56 ;LD D,(xx+d)
2695 instr fetch_nop, op_noni, store_nop ;57 ;
2696 instr fetch_nop, op_noni, store_nop ;58 ;
2697 instr fetch_nop, op_noni, store_nop ;59 ;
2698 instr fetch_nop, op_noni, store_nop ;5A ;
2699 instr fetch_nop, op_noni, store_nop ;5B ;
2700 instr fetch_xH, op_nop, store_E ;5C ;LD E,xh
2701 instr fetch_xL, op_nop, store_E ;5D ;LD E,xl
2702 instr fetch_MXX, op_nop, store_E ;5E ;LD E,(xx+d)
2703 instr fetch_nop, op_noni, store_nop ;5F ;
2704 instr fetch_B, op_nop, store_xH ;60 ;LD xh,B
2705 instr fetch_C, op_nop, store_xH ;61 ;LD xh,C
2706 instr fetch_D, op_nop, store_xH ;62 ;LD xh,D
2707 instr fetch_E, op_nop, store_xH ;63 ;LD xh,E
2708 instr fetch_nop, op_noni, store_nop ;64 ;LD xh,xh
2709 instr fetch_xL, op_nop, store_xH ;65 ;LD xh,xl
2710 instr fetch_MXX, op_nop, store_H ;66 ;LD H,(xx+d)
2711 instr fetch_A, op_nop, store_xH ;67 ;LD xh,A
2712 instr fetch_B, op_nop, store_xL ;68 ;LD xl,B
2713 instr fetch_C, op_nop, store_xL ;69 ;LD xl,C
2714 instr fetch_D, op_nop, store_xL ;6A ;LD xl,D
2715 instr fetch_E, op_nop, store_xL ;6B ;LD xl,E
2716 instr fetch_xH, op_nop, store_xL ;6C ;LD xl,xh
2717 instr fetch_nop, op_noni, store_nop ;6D ;LD xl,xl
2718 instr fetch_MXX, op_nop, store_L ;6E ;LD L,(xx+d)
2719 instr fetch_A, op_nop, store_xL ;6F ;LD xl,A
2720 instr fetch_B, op_nop, store_MXX ;70 ;LD (xx+d),B
2721 instr fetch_C, op_nop, store_MXX ;71 ;LD (xx+d),C
2722 instr fetch_D, op_nop, store_MXX ;72 ;LD (xx+d),D
2723 instr fetch_E, op_nop, store_MXX ;73 ;LD (xx+d),E
2724 instr fetch_H, op_nop, store_MXX ;74 ;LD (xx+d),H
2725 instr fetch_L, op_nop, store_MXX ;75 ;LD (xx+d),L
2726 instr fetch_nop, op_noni, store_nop ;76 ;
2727 instr fetch_A, op_nop, store_MXX ;77 ;LD (xx+d),A
2728 instr fetch_nop, op_noni, store_nop ;78 ;
2729 instr fetch_nop, op_noni, store_nop ;79 ;
2730 instr fetch_nop, op_noni, store_nop ;7A ;
2731 instr fetch_nop, op_noni, store_nop ;7B ;
2732 instr fetch_xH, op_nop, store_A ;7C ;LD A,xh
2733 instr fetch_xL, op_nop, store_A ;7D ;LD A,xl
2734 instr fetch_MXX, op_nop, store_A ;7E ;LD A,(xx+d)
2735 instr fetch_nop, op_noni, store_nop ;7F ;
2736 instr fetch_nop, op_noni, store_nop ;80 ;
2737 instr fetch_nop, op_noni, store_nop ;81 ;
2738 instr fetch_nop, op_noni, store_nop ;82 ;
2739 instr fetch_nop, op_noni, store_nop ;83 ;
2740 instr fetch_xH, op_ADDA, store_nop ;84 ;ADD A,xh
2741 instr fetch_xL, op_ADDA, store_nop ;85 ;ADD A,xl
2742 instr fetch_MXX, op_ADDA, store_nop ;86 ;ADD A,(xx)
2743 instr fetch_nop, op_noni, store_nop ;87 ;
2744 instr fetch_nop, op_noni, store_nop ;88 ;
2745 instr fetch_nop, op_noni, store_nop ;89 ;
2746 instr fetch_nop, op_noni, store_nop ;8A ;
2747 instr fetch_nop, op_noni, store_nop ;8B ;
2748 instr fetch_xH, op_ADCA, store_nop ;8C ;ADC A,xh
2749 instr fetch_xL, op_ADCA, store_nop ;8D ;ADC A,xl
2750 instr fetch_MXX, op_ADCA, store_nop ;8E ;ADC A,(xx)
2751 instr fetch_nop, op_noni, store_nop ;8F ;
2752 instr fetch_nop, op_noni, store_nop ;90 ;
2753 instr fetch_nop, op_noni, store_nop ;91 ;
2754 instr fetch_nop, op_noni, store_nop ;92 ;
2755 instr fetch_nop, op_noni, store_nop ;93 ;
2756 instr fetch_xH, op_SUBFA, store_nop ;94 ;SUB A,xh
2757 instr fetch_xL, op_SUBFA, store_nop ;95 ;SUB A,xl
2758 instr fetch_MXX, op_SUBFA, store_nop ;96 ;SUB A,(xx)
2759 instr fetch_nop, op_noni, store_nop ;97 ;
2760 instr fetch_nop, op_noni, store_nop ;98 ;
2761 instr fetch_nop, op_noni, store_nop ;99 ;
2762 instr fetch_nop, op_noni, store_nop ;9A ;
2763 instr fetch_nop, op_noni, store_nop ;9B ;
2764 instr fetch_xH, op_SBCFA, store_nop ;9C ;SBC A,xh
2765 instr fetch_xL, op_SBCFA, store_nop ;9D ;SBC A,xl
2766 instr fetch_MXX, op_SBCFA, store_nop ;9E ;SBC A,(xx)
2767 instr fetch_nop, op_noni, store_nop ;9F ;
2768 instr fetch_nop, op_noni, store_nop ;A0 ;
2769 instr fetch_nop, op_noni, store_nop ;A1 ;
2770 instr fetch_nop, op_noni, store_nop ;A2 ;
2771 instr fetch_nop, op_noni, store_nop ;A3 ;
2772 instr fetch_xH, op_ANDA, store_nop ;A4 ;AND A,xh
2773 instr fetch_xL, op_ANDA, store_nop ;A5 ;AND A,xl
2774 instr fetch_MXX, op_ANDA, store_nop ;A6 ;AND A,(xx)
2775 instr fetch_nop, op_noni, store_nop ;A7 ;
2776 instr fetch_nop, op_noni, store_nop ;A8 ;
2777 instr fetch_nop, op_noni, store_nop ;A9 ;
2778 instr fetch_nop, op_noni, store_nop ;AA ;
2779 instr fetch_nop, op_noni, store_nop ;AB ;
2780 instr fetch_xH, op_XORA, store_nop ;AC ;XOR A,xh
2781 instr fetch_xL, op_XORA, store_nop ;AD ;XOR A,xl
2782 instr fetch_MXX, op_XORA, store_nop ;AE ;XOR A,(xx)
2783 instr fetch_nop, op_noni, store_nop ;AF ;
2784 instr fetch_nop, op_noni, store_nop ;B0 ;
2785 instr fetch_nop, op_noni, store_nop ;B1 ;
2786 instr fetch_nop, op_noni, store_nop ;B2 ;
2787 instr fetch_nop, op_noni, store_nop ;B3 ;
2788 instr fetch_xH, op_ORA, store_nop ;B4 ;OR A,xh
2789 instr fetch_xL, op_ORA, store_nop ;B5 ;OR A,xl
2790 instr fetch_MXX, op_ORA, store_nop ;B6 ;OR A,(xx)
2791 instr fetch_nop, op_noni, store_nop ;B7 ;
2792 instr fetch_nop, op_noni, store_nop ;B8 ;
2793 instr fetch_nop, op_noni, store_nop ;B9 ;
2794 instr fetch_nop, op_noni, store_nop ;BA ;
2795 instr fetch_nop, op_noni, store_nop ;BB ;
2796 instr fetch_xH, op_CPFA, store_nop ;BC ;CP A,xh
2797 instr fetch_xL, op_CPFA, store_nop ;BD ;CP A,xl
2798 instr fetch_MXX, op_CPFA, store_nop ;BE ;CP A,(xx)
2799 instr fetch_nop, op_noni, store_nop ;BF ;
2800 instr fetch_nop, op_noni, store_nop ;C0 ;
2801 instr fetch_nop, op_noni, store_nop ;C1 ;
2802 instr fetch_nop, op_noni, store_nop ;C2 ;
2803 instr fetch_nop, op_noni, store_nop ;C3 ;
2804 instr fetch_nop, op_noni, store_nop ;C4 ;
2805 instr fetch_nop, op_noni, store_nop ;C5 ;
2806 instr fetch_nop, op_noni, store_nop ;C6 ;
2807 instr fetch_nop, op_noni, store_nop ;C7 ;
2808 instr fetch_nop, op_noni, store_nop ;C8 ;
2809 instr fetch_nop, op_noni, store_nop ;C9 ;
2810 instr fetch_nop, op_noni, store_nop ;CA ;
2811 instr fetch_nop, op_prefixDDFDCB,store_nop ;CB ;
2812 instr fetch_nop, op_noni, store_nop ;CC ;
2813 instr fetch_nop, op_noni, store_nop ;CD ;
2814 instr fetch_nop, op_noni, store_nop ;CE ;
2815 instr fetch_nop, op_noni, store_nop ;CF ;
2816 instr fetch_nop, op_noni, store_nop ;D0 ;
2817 instr fetch_nop, op_noni, store_nop ;D1 ;
2818 instr fetch_nop, op_noni, store_nop ;D2 ;
2819 instr fetch_nop, op_noni, store_nop ;D3 ;
2820 instr fetch_nop, op_noni, store_nop ;D4 ;
2821 instr fetch_nop, op_noni, store_nop ;D5 ;
2822 instr fetch_nop, op_noni, store_nop ;D6 ;
2823 instr fetch_nop, op_noni, store_nop ;D7 ;
2824 instr fetch_nop, op_noni, store_nop ;D8 ;
2825 instr fetch_nop, op_noni, store_nop ;D9 ;
2826 instr fetch_nop, op_noni, store_nop ;DA ;
2827 instr fetch_nop, op_noni, store_nop ;DB ;
2828 instr fetch_nop, op_noni, store_nop ;DC ;
2829 instr fetch_nop, op_noni, store_nop ;DD ;
2830 instr fetch_nop, op_noni, store_nop ;DE ;
2831 instr fetch_nop, op_noni, store_nop ;DF ;
2832 instr fetch_nop, op_noni, store_nop ;E0 ;
2833 instr fetch_nop, op_POP16, store_xx ;E1 ;POP xx
2834 instr fetch_nop, op_noni, store_nop ;E2 ;
2835 instr fetch_MSP, op_EXxx, store_MSP ;E3 ;EX (SP),xx
2836 instr fetch_nop, op_noni, store_nop ;E4 ;
2837 instr fetch_xx, op_PUSH16, store_nop ;E5 ;PUSH xx
2838 instr fetch_nop, op_noni, store_nop ;E6 ;
2839 instr fetch_nop, op_noni, store_nop ;E7 ;
2840 instr fetch_nop, op_noni, store_nop ;E8 ;
2841 instr fetch_xx, op_nop, store_PC ;E9 ;JP xx
2842 instr fetch_nop, op_noni, store_nop ;EA ;
2843 instr fetch_nop, op_noni, store_nop ;EB ;
2844 instr fetch_nop, op_noni, store_nop ;EC ;
2845 instr fetch_nop, op_noni, store_nop ;ED ;
2846 instr fetch_nop, op_noni, store_nop ;EE ;
2847 instr fetch_nop, op_noni, store_nop ;EF ;
2848 instr fetch_nop, op_noni, store_nop ;F0 ;
2849 instr fetch_nop, op_noni, store_nop ;F1 ;
2850 instr fetch_nop, op_noni, store_nop ;F2 ;
2851 instr fetch_nop, op_noni, store_nop ;F3 ;
2852 instr fetch_nop, op_noni, store_nop ;F4 ;
2853 instr fetch_nop, op_noni, store_nop ;F5 ;
2854 instr fetch_nop, op_noni, store_nop ;F6 ;
2855 instr fetch_nop, op_noni, store_nop ;F7 ;
2856 instr fetch_nop, op_noni, store_nop ;F8 ;
2857 instr fetch_xx, op_nop, store_SP ;F9 ;LD SP,xx
2858 instr fetch_nop, op_noni, store_nop ;FA ;
2859 instr fetch_nop, op_noni, store_nop ;FB ;
2860 instr fetch_nop, op_noni, store_nop ;FC ;
2861 instr fetch_nop, op_noni, store_nop ;FD ;
2862 instr fetch_nop, op_noni, store_nop ;FE ;
2863 instr fetch_nop, op_noni, store_nop ;FF ;
2867 ;----------------------------------------------------------------
2868 ;|Mnemonic |SZHPNC|Description |Notes |
2869 ;----------------------------------------------------------------
2870 ;|RLC m |**0P0*|Rotate Left Circular |m=m<- |
2871 ;|RRC m |**0P0*|Rotate Right Circular|m=->m |
2872 ;|RL m |**0P0*|Rotate Left |m={CY,m}<- |
2873 ;|RR m |**0P0*|Rotate Right |m=->{CY,m} |
2874 ;|SLA m |**0P0*|Shift Left Arithmetic|m=m*2 |
2875 ;|SRA m |**0P0*|Shift Right Arith. |m=m/2 |
2876 ;|SLL m |**0P0*|Shift Right Logical |
2877 ;|SRL m |**0P0*|Shift Right Logical |m=->{0,m,CY} |
2883 ;Rotate Left Cyclical. All bits move 1 to the
2884 ;left, the msb becomes c and lsb.
2889 ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N
2896 ;Rotate Right Cyclical. All bits move 1 to the
2897 ;right, the lsb becomes c and msb.
2901 ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N
2902 bmov z_flags,ZFL_C, opl,7
2909 ;Rotate Left. All bits move 1 to the left, the msb
2910 ;becomes c, c becomes lsb.
2916 ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N
2917 bmov z_flags,ZFL_C, temp,AVR_C
2924 ;Rotate Right. All bits move 1 to the right, the lsb
2925 ;becomes c, c becomes msb.
2929 bmov opl,7, z_flags,ZFL_C ;old CY --> Bit 7
2930 ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N
2931 bmov z_flags,ZFL_C, temp,AVR_C ;
2939 ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N
2940 bmov z_flags,ZFL_C, temp,AVR_C ;
2948 bmov opl,7, opl,6 ;old CY --> Bit 7
2949 ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N
2950 bmov z_flags,ZFL_C, temp,AVR_C ;
2959 ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N
2960 bmov z_flags,ZFL_C, temp,AVR_C ;
2968 ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N
2969 bmov z_flags,ZFL_C, temp,AVR_C ;
2972 ;----------------------------------------------------------------
2973 ;|Mnemonic |SZHPNC|Description |Notes |
2974 ;----------------------------------------------------------------
2975 ;|BIT b,m |?*1?0-|Test Bit |m&{2^b} |
2976 ;|RES b,m |------|Reset bit |m=m&{~2^b} |
2977 ;|SET b,m |------|Set bit |m=mv{2^b} |
3013 andi z_flags,~((1<<ZFL_N)|(1<<ZFL_Z))
3014 ori z_flags,(1<<ZFL_H)
3017 ori z_flags,(1<<ZFL_Z)
3135 ;.macro m_do_store_b
3138 ;.equ do_store_b = 0
3177 mem_read_ds opl, z_hl
3180 opctable CBjmp, PC ;+256
3182 instr fetch_B, op_RLC, store2_B ;00 ;RLC B
3183 instr fetch_C, op_RLC, store2_C ;01 ;RLC C
3184 instr fetch_D, op_RLC, store2_D ;02 ;RLC D
3185 instr fetch_E, op_RLC, store2_E ;03 ;RLC E
3186 instr fetch_H, op_RLC, store2_H ;04 ;RLC H
3187 instr fetch_L, op_RLC, store2_L ;05 ;RLC L
3188 instr fetch2_mhl, op_RLC, store_MHL ;06 ;RLC (HL)
3189 instr fetch_A, op_RLC, store2_A ;07 ;RLC A
3190 instr fetch_B, op_RRC, store2_B ;08 ;RRC B
3191 instr fetch_C, op_RRC, store2_C ;09 ;RRC C
3192 instr fetch_D, op_RRC, store2_D ;0A ;RRC D
3193 instr fetch_E, op_RRC, store2_E ;0B ;RRC E
3194 instr fetch_H, op_RRC, store2_H ;0C ;RRC H
3195 instr fetch_L, op_RRC, store2_L ;0D ;RRC L
3196 instr fetch2_mhl, op_RRC, store_MHL ;0E ;RRC (HL)
3197 instr fetch_A, op_RRC, store2_A ;0F ;RRC A
3198 instr fetch_B, op_RL, store2_B ;10 ;RL B
3199 instr fetch_C, op_RL, store2_C ;11 ;RL C
3200 instr fetch_D, op_RL, store2_D ;12 ;RL D
3201 instr fetch_E, op_RL, store2_E ;13 ;RL E
3202 instr fetch_H, op_RL, store2_H ;14 ;RL H
3203 instr fetch_L, op_RL, store2_L ;15 ;RL L
3204 instr fetch2_mhl, op_RL, store_MHL ;16 ;RL (HL)
3205 instr fetch_A, op_RL, store2_A ;17 ;RL A
3206 instr fetch_B, op_RR, store2_B ;18 ;RR B
3207 instr fetch_C, op_RR, store2_C ;19 ;RR C
3208 instr fetch_D, op_RR, store2_D ;1A ;RR D
3209 instr fetch_E, op_RR, store2_E ;1B ;RR E
3210 instr fetch_H, op_RR, store2_H ;1C ;RR H
3211 instr fetch_L, op_RR, store2_L ;1D ;RR L
3212 instr fetch2_mhl, op_RR, store_MHL ;1E ;RR (HL)
3213 instr fetch_A, op_RR, store2_A ;1F ;RR A
3214 instr fetch_B, op_SLA, store2_B ;20 ;SLA B
3215 instr fetch_C, op_SLA, store2_C ;21 ;SLA C
3216 instr fetch_D, op_SLA, store2_D ;22 ;SLA D
3217 instr fetch_E, op_SLA, store2_E ;23 ;SLA E
3218 instr fetch_H, op_SLA, store2_H ;24 ;SLA H
3219 instr fetch_L, op_SLA, store2_L ;25 ;SLA L
3220 instr fetch2_mhl, op_SLA, store_MHL ;26 ;SLA (HL)
3221 instr fetch_A, op_SLA, store2_A ;27 ;SLA A
3222 instr fetch_B, op_SRA, store2_B ;28 ;SRA B
3223 instr fetch_C, op_SRA, store2_C ;29 ;SRA C
3224 instr fetch_D, op_SRA, store2_D ;2A ;SRA D
3225 instr fetch_E, op_SRA, store2_E ;2B ;SRA E
3226 instr fetch_H, op_SRA, store2_H ;2C ;SRA H
3227 instr fetch_L, op_SRA, store2_L ;2D ;SRA L
3228 instr fetch2_mhl, op_SRA, store_MHL ;2E ;SRA (HL)
3229 instr fetch_A, op_SRA, store2_A ;2F ;SRA A
3230 instr fetch_B, op_SLL, store2_B ;30 ;SLL B
3231 instr fetch_C, op_SLL, store2_C ;31 ;SLL C
3232 instr fetch_D, op_SLL, store2_D ;32 ;SLL D
3233 instr fetch_E, op_SLL, store2_E ;33 ;SLL E
3234 instr fetch_H, op_SLL, store2_H ;34 ;SLL H
3235 instr fetch_L, op_SLL, store2_L ;35 ;SLL L
3236 instr fetch2_mhl, op_SLL, store_MHL ;36 ;SLL (HL)
3237 instr fetch_A, op_SLL, store2_A ;37 ;SLL A
3238 instr fetch_B, op_SRL, store2_B ;38 ;SRL B
3239 instr fetch_C, op_SRL, store2_C ;39 ;SRL C
3240 instr fetch_D, op_SRL, store2_D ;3A ;SRL D
3241 instr fetch_E, op_SRL, store2_E ;3B ;SRL E
3242 instr fetch_H, op_SRL, store2_H ;3C ;SRL H
3243 instr fetch_L, op_SRL, store2_L ;3D ;SRL L
3244 instr fetch2_mhl, op_SRL, store_MHL ;3E ;SRL (HL)
3245 instr fetch_A, op_SRL, store2_A ;3F ;SRL A
3246 instr fetch_B, op_BIT0, store_nop ;40 ;BIT 0,B
3247 instr fetch_C, op_BIT0, store_nop ;41 ;BIT 0,C
3248 instr fetch_D, op_BIT0, store_nop ;42 ;BIT 0,D
3249 instr fetch_E, op_BIT0, store_nop ;43 ;BIT 0,E
3250 instr fetch_H, op_BIT0, store_nop ;44 ;BIT 0,H
3251 instr fetch_L, op_BIT0, store_nop ;45 ;BIT 0,L
3252 instr fetch2_mhl, op_BIT0, store_nop ;46 ;BIT 0,(HL)
3253 instr fetch_A, op_BIT0, store_nop ;47 ;BIT 0,A
3254 instr fetch_B, op_BIT1, store_nop ;48 ;BIT 1,B
3255 instr fetch_C, op_BIT1, store_nop ;49 ;BIT 1,C
3256 instr fetch_D, op_BIT1, store_nop ;4A ;BIT 1,D
3257 instr fetch_E, op_BIT1, store_nop ;4B ;BIT 1,E
3258 instr fetch_H, op_BIT1, store_nop ;4C ;BIT 1,H
3259 instr fetch_L, op_BIT1, store_nop ;4D ;BIT 1,L
3260 instr fetch2_mhl, op_BIT1, store_nop ;4E ;BIT 1,(HL)
3261 instr fetch_A, op_BIT1, store_nop ;4F ;BIT 1,A
3262 instr fetch_B, op_BIT2, store_nop ;50 ;BIT 2,B
3263 instr fetch_C, op_BIT2, store_nop ;51 ;BIT 2,C
3264 instr fetch_D, op_BIT2, store_nop ;52 ;BIT 2,D
3265 instr fetch_E, op_BIT2, store_nop ;53 ;BIT 2,E
3266 instr fetch_H, op_BIT2, store_nop ;54 ;BIT 2,H
3267 instr fetch_L, op_BIT2, store_nop ;55 ;BIT 2,L
3268 instr fetch2_mhl, op_BIT2, store_nop ;56 ;BIT 2,(HL)
3269 instr fetch_A, op_BIT2, store_nop ;57 ;BIT 2,A
3270 instr fetch_B, op_BIT3, store_nop ;58 ;BIT 3,B
3271 instr fetch_C, op_BIT3, store_nop ;59 ;BIT 3,C
3272 instr fetch_D, op_BIT3, store_nop ;5A ;BIT 3,D
3273 instr fetch_E, op_BIT3, store_nop ;5B ;BIT 3,E
3274 instr fetch_H, op_BIT3, store_nop ;5C ;BIT 3,H
3275 instr fetch_L, op_BIT3, store_nop ;5D ;BIT 3,L
3276 instr fetch2_mhl, op_BIT3, store_nop ;5E ;BIT 3,(HL)
3277 instr fetch_A, op_BIT3, store_nop ;5F ;BIT 3,A
3278 instr fetch_B, op_BIT4, store_nop ;60 ;BIT 4,B
3279 instr fetch_C, op_BIT4, store_nop ;61 ;BIT 4,C
3280 instr fetch_D, op_BIT4, store_nop ;62 ;BIT 4,D
3281 instr fetch_E, op_BIT4, store_nop ;63 ;BIT 4,E
3282 instr fetch_H, op_BIT4, store_nop ;64 ;BIT 4,H
3283 instr fetch_L, op_BIT4, store_nop ;65 ;BIT 4,L
3284 instr fetch2_mhl, op_BIT4, store_nop ;66 ;BIT 4,(HL)
3285 instr fetch_A, op_BIT4, store_nop ;67 ;BIT 4,A
3286 instr fetch_B, op_BIT5, store_nop ;68 ;BIT 5,B
3287 instr fetch_C, op_BIT5, store_nop ;69 ;BIT 5,C
3288 instr fetch_D, op_BIT5, store_nop ;6A ;BIT 5,D
3289 instr fetch_E, op_BIT5, store_nop ;6B ;BIT 5,E
3290 instr fetch_H, op_BIT5, store_nop ;6C ;BIT 5,H
3291 instr fetch_L, op_BIT5, store_nop ;6D ;BIT 5,L
3292 instr fetch2_mhl, op_BIT5, store_nop ;6E ;BIT 5,(HL)
3293 instr fetch_A, op_BIT5, store_nop ;6F ;BIT 5,A
3294 instr fetch_B, op_BIT6, store_nop ;70 ;BIT 6,B
3295 instr fetch_C, op_BIT6, store_nop ;71 ;BIT 6,C
3296 instr fetch_D, op_BIT6, store_nop ;72 ;BIT 6,D
3297 instr fetch_E, op_BIT6, store_nop ;73 ;BIT 6,E
3298 instr fetch_H, op_BIT6, store_nop ;74 ;BIT 6,H
3299 instr fetch_L, op_BIT6, store_nop ;75 ;BIT 6,L
3300 instr fetch2_mhl, op_BIT6, store_nop ;76 ;BIT 6,(HL)
3301 instr fetch_A, op_BIT6, store_nop ;77 ;BIT 6,A
3302 instr fetch_B, op_BIT7, store_nop ;78 ;BIT 7,B
3303 instr fetch_C, op_BIT7, store_nop ;79 ;BIT 7,C
3304 instr fetch_D, op_BIT7, store_nop ;7A ;BIT 7,D
3305 instr fetch_E, op_BIT7, store_nop ;7B ;BIT 7,E
3306 instr fetch_H, op_BIT7, store_nop ;7C ;BIT 7,H
3307 instr fetch_L, op_BIT7, store_nop ;7D ;BIT 7,L
3308 instr fetch2_mhl, op_BIT7, store_nop ;7E ;BIT 7,(HL)
3309 instr fetch_A, op_BIT7, store_nop ;7F ;BIT 7,A
3310 instr fetch_B, op_RES0, store2_B ;80 ;RES 0,B
3311 instr fetch_C, op_RES0, store2_C ;81 ;RES 0,C
3312 instr fetch_D, op_RES0, store2_D ;82 ;RES 0,D
3313 instr fetch_E, op_RES0, store2_E ;83 ;RES 0,E
3314 instr fetch_H, op_RES0, store2_H ;84 ;RES 0,H
3315 instr fetch_L, op_RES0, store2_L ;85 ;RES 0,L
3316 instr fetch2_mhl, op_RES0, store_MHL ;86 ;RES 0,(HL)
3317 instr fetch_A, op_RES0, store2_A ;87 ;RES 0,A
3318 instr fetch_B, op_RES1, store2_B ;88 ;RES 1,B
3319 instr fetch_C, op_RES1, store2_C ;89 ;RES 1,C
3320 instr fetch_D, op_RES1, store2_D ;8A ;RES 1,D
3321 instr fetch_E, op_RES1, store2_E ;8B ;RES 1,E
3322 instr fetch_H, op_RES1, store2_H ;8C ;RES 1,H
3323 instr fetch_L, op_RES1, store2_L ;8D ;RES 1,L
3324 instr fetch2_mhl, op_RES1, store_MHL ;8E ;RES 1,(HL)
3325 instr fetch_A, op_RES1, store2_A ;8F ;RES 1,A
3326 instr fetch_B, op_RES2, store2_B ;90 ;RES 2,B
3327 instr fetch_C, op_RES2, store2_C ;91 ;RES 2,C
3328 instr fetch_D, op_RES2, store2_D ;92 ;RES 2,D
3329 instr fetch_E, op_RES2, store2_E ;93 ;RES 2,E
3330 instr fetch_H, op_RES2, store2_H ;94 ;RES 2,H
3331 instr fetch_L, op_RES2, store2_L ;95 ;RES 2,L
3332 instr fetch2_mhl, op_RES2, store_MHL ;96 ;RES 2,(HL)
3333 instr fetch_A, op_RES2, store2_A ;97 ;RES 2,A
3334 instr fetch_B, op_RES3, store2_B ;98 ;RES 3,B
3335 instr fetch_C, op_RES3, store2_C ;99 ;RES 3,C
3336 instr fetch_D, op_RES3, store2_D ;9A ;RES 3,D
3337 instr fetch_E, op_RES3, store2_E ;9B ;RES 3,E
3338 instr fetch_H, op_RES3, store2_H ;9C ;RES 3,H
3339 instr fetch_L, op_RES3, store2_L ;9D ;RES 3,L
3340 instr fetch2_mhl, op_RES3, store_MHL ;9E ;RES 3,(HL)
3341 instr fetch_A, op_RES3, store2_A ;9F ;RES 3,A
3342 instr fetch_B, op_RES4, store2_B ;A0 ;RES 4,B
3343 instr fetch_C, op_RES4, store2_C ;A1 ;RES 4,C
3344 instr fetch_D, op_RES4, store2_D ;A2 ;RES 4,D
3345 instr fetch_E, op_RES4, store2_E ;A3 ;RES 4,E
3346 instr fetch_H, op_RES4, store2_H ;A4 ;RES 4,H
3347 instr fetch_L, op_RES4, store2_L ;A5 ;RES 4,L
3348 instr fetch2_mhl, op_RES4, store_MHL ;A6 ;RES 4,(HL)
3349 instr fetch_A, op_RES4, store2_A ;A7 ;RES 4,A
3350 instr fetch_B, op_RES5, store2_B ;A8 ;RES 5,B
3351 instr fetch_C, op_RES5, store2_C ;A9 ;RES 5,C
3352 instr fetch_D, op_RES5, store2_D ;AA ;RES 5,D
3353 instr fetch_E, op_RES5, store2_E ;AB ;RES 5,E
3354 instr fetch_H, op_RES5, store2_H ;AC ;RES 5,H
3355 instr fetch_L, op_RES5, store2_L ;AD ;RES 5,L
3356 instr fetch2_mhl, op_RES5, store_MHL ;AE ;RES 5,(HL)
3357 instr fetch_A, op_RES5, store2_A ;AF ;RES 5,A
3358 instr fetch_B, op_RES6, store2_B ;B0 ;RES 6,B
3359 instr fetch_C, op_RES6, store2_C ;B1 ;RES 6,C
3360 instr fetch_D, op_RES6, store2_D ;B2 ;RES 6,D
3361 instr fetch_E, op_RES6, store2_E ;B3 ;RES 6,E
3362 instr fetch_H, op_RES6, store2_H ;B4 ;RES 6,H
3363 instr fetch_L, op_RES6, store2_L ;B5 ;RES 6,L
3364 instr fetch2_mhl, op_RES6, store_MHL ;B6 ;RES 6,(HL)
3365 instr fetch_A, op_RES6, store2_A ;B7 ;RES 6,A
3366 instr fetch_B, op_RES7, store2_B ;B8 ;RES 7,B
3367 instr fetch_C, op_RES7, store2_C ;B9 ;RES 7,C
3368 instr fetch_D, op_RES7, store2_D ;BA ;RES 7,D
3369 instr fetch_E, op_RES7, store2_E ;BB ;RES 7,E
3370 instr fetch_H, op_RES7, store2_H ;BC ;RES 7,H
3371 instr fetch_L, op_RES7, store2_L ;BD ;RES 7,L
3372 instr fetch2_mhl, op_RES7, store_MHL ;BE ;RES 7,(HL)
3373 instr fetch_A, op_RES7, store2_A ;BF ;RES 7,A
3374 instr fetch_B, op_SET0, store2_B ;C0 ;SET 0,B
3375 instr fetch_C, op_SET0, store2_C ;C1 ;SET 0,C
3376 instr fetch_D, op_SET0, store2_D ;C2 ;SET 0,D
3377 instr fetch_E, op_SET0, store2_E ;C3 ;SET 0,E
3378 instr fetch_H, op_SET0, store2_H ;C4 ;SET 0,H
3379 instr fetch_L, op_SET0, store2_L ;C5 ;SET 0,L
3380 instr fetch2_mhl, op_SET0, store_MHL ;C6 ;SET 0,(HL)
3381 instr fetch_A, op_SET0, store2_A ;C7 ;SET 0,A
3382 instr fetch_B, op_SET1, store2_B ;C8 ;SET 1,B
3383 instr fetch_C, op_SET1, store2_C ;C9 ;SET 1,C
3384 instr fetch_D, op_SET1, store2_D ;CA ;SET 1,D
3385 instr fetch_E, op_SET1, store2_E ;CB ;SET 1,E
3386 instr fetch_H, op_SET1, store2_H ;CC ;SET 1,H
3387 instr fetch_L, op_SET1, store2_L ;CD ;SET 1,L
3388 instr fetch2_mhl, op_SET1, store_MHL ;CE ;SET 1,(HL)
3389 instr fetch_A, op_SET1, store2_A ;CF ;SET 1,A
3390 instr fetch_B, op_SET2, store2_B ;D0 ;SET 2,B
3391 instr fetch_C, op_SET2, store2_C ;D1 ;SET 2,C
3392 instr fetch_D, op_SET2, store2_D ;D2 ;SET 2,D
3393 instr fetch_E, op_SET2, store2_E ;D3 ;SET 2,E
3394 instr fetch_H, op_SET2, store2_H ;D4 ;SET 2,H
3395 instr fetch_L, op_SET2, store2_L ;D5 ;SET 2,L
3396 instr fetch2_mhl, op_SET2, store_MHL ;D6 ;SET 2,(HL)
3397 instr fetch_A, op_SET2, store2_A ;D7 ;SET 2,A
3398 instr fetch_B, op_SET3, store2_B ;D8 ;SET 3,B
3399 instr fetch_C, op_SET3, store2_C ;D9 ;SET 3,C
3400 instr fetch_D, op_SET3, store2_D ;DA ;SET 3,D
3401 instr fetch_E, op_SET3, store2_E ;DB ;SET 3,E
3402 instr fetch_H, op_SET3, store2_H ;DC ;SET 3,H
3403 instr fetch_L, op_SET3, store2_L ;DD ;SET 3,L
3404 instr fetch2_mhl, op_SET3, store_MHL ;DE ;SET 3,(HL)
3405 instr fetch_A, op_SET3, store2_A ;DF ;SET 3,A
3406 instr fetch_B, op_SET4, store2_B ;E0 ;SET 4,B
3407 instr fetch_C, op_SET4, store2_C ;E1 ;SET 4,C
3408 instr fetch_D, op_SET4, store2_D ;E2 ;SET 4,D
3409 instr fetch_E, op_SET4, store2_E ;E3 ;SET 4,E
3410 instr fetch_H, op_SET4, store2_H ;E4 ;SET 4,H
3411 instr fetch_L, op_SET4, store2_L ;E5 ;SET 4,L
3412 instr fetch2_mhl, op_SET4, store_MHL ;E6 ;SET 4,(HL)
3413 instr fetch_A, op_SET4, store2_A ;E7 ;SET 4,A
3414 instr fetch_B, op_SET5, store2_B ;E8 ;SET 5,B
3415 instr fetch_C, op_SET5, store2_C ;E9 ;SET 5,C
3416 instr fetch_D, op_SET5, store2_D ;EA ;SET 5,D
3417 instr fetch_E, op_SET5, store2_E ;EB ;SET 5,E
3418 instr fetch_H, op_SET5, store2_H ;EC ;SET 5,H
3419 instr fetch_L, op_SET5, store2_L ;ED ;SET 5,L
3420 instr fetch2_mhl, op_SET5, store_MHL ;EE ;SET 5,(HL)
3421 instr fetch_A, op_SET5, store2_A ;EF ;SET 5,A
3422 instr fetch_B, op_SET6, store2_B ;F0 ;SET 6,B
3423 instr fetch_C, op_SET6, store2_C ;F1 ;SET 6,C
3424 instr fetch_D, op_SET6, store2_D ;F2 ;SET 6,D
3425 instr fetch_E, op_SET6, store2_E ;F3 ;SET 6,E
3426 instr fetch_H, op_SET6, store2_H ;F4 ;SET 6,H
3427 instr fetch_L, op_SET6, store2_L ;F5 ;SET 6,L
3428 instr fetch2_mhl, op_SET6, store_MHL ;F6 ;SET 6,(HL)
3429 instr fetch_A, op_SET6, store2_A ;F7 ;SET 6,A
3430 instr fetch_B, op_SET7, store2_B ;F8 ;SET 7,B
3431 instr fetch_C, op_SET7, store2_C ;F9 ;SET 7,C
3432 instr fetch_D, op_SET7, store2_D ;FA ;SET 7,D
3433 instr fetch_E, op_SET7, store2_E ;FB ;SET 7,E
3434 instr fetch_H, op_SET7, store2_H ;FC ;SET 7,H
3435 instr fetch_L, op_SET7, store2_L ;FD ;SET 7,L
3436 instr fetch2_mhl, op_SET7, store_MHL ;FE ;SET 7,(HL)
3437 instr fetch_A, op_SET7, store2_A ;FF ;SET 7,A
3440 opctable DDFDCBjmp, PC ;+256
3442 instr fetch_nop, op_RLC, store2_B ;00 ;RLC (Ix+d),B
3443 instr fetch_nop, op_RLC, store2_C ;01 ;RLC (Ix+d),C
3444 instr fetch_nop, op_RLC, store2_D ;02 ;RLC (Ix+d),D
3445 instr fetch_nop, op_RLC, store2_E ;03 ;RLC (Ix+d),E
3446 instr fetch_nop, op_RLC, store2_H ;04 ;RLC (Ix+d),H
3447 instr fetch_nop, op_RLC, store2_L ;05 ;RLC (Ix+d),L
3448 instr fetch_nop, op_RLC, store_nop ;06 ;RLC (Ix+d)
3449 instr fetch_nop, op_RLC, store2_A ;07 ;RLC (Ix+d),A
3450 instr fetch_nop, op_RRC, store2_B ;08 ;RRC (Ix+d),B
3451 instr fetch_nop, op_RRC, store2_C ;09 ;RRC (Ix+d),C
3452 instr fetch_nop, op_RRC, store2_D ;0A ;RRC (Ix+d),D
3453 instr fetch_nop, op_RRC, store2_E ;0B ;RRC (Ix+d),E
3454 instr fetch_nop, op_RRC, store2_H ;0C ;RRC (Ix+d),H
3455 instr fetch_nop, op_RRC, store2_L ;0D ;RRC (Ix+d),L
3456 instr fetch_nop, op_RRC, store_nop ;0E ;RRC (Ix+d)
3457 instr fetch_nop, op_RRC, store2_A ;0F ;RRC (Ix+d),A
3458 instr fetch_nop, op_RL, store2_B ;10 ;RL (Ix+d),B
3459 instr fetch_nop, op_RL, store2_C ;11 ;RL (Ix+d),C
3460 instr fetch_nop, op_RL, store2_D ;12 ;RL (Ix+d),D
3461 instr fetch_nop, op_RL, store2_E ;13 ;RL (Ix+d),E
3462 instr fetch_nop, op_RL, store2_H ;14 ;RL (Ix+d),H
3463 instr fetch_nop, op_RL, store2_L ;15 ;RL (Ix+d),L
3464 instr fetch_nop, op_RL, store_nop ;16 ;RL (Ix+d)
3465 instr fetch_nop, op_RL, store2_A ;17 ;RL (Ix+d),A
3466 instr fetch_nop, op_RR, store2_B ;18 ;RR (Ix+d),B
3467 instr fetch_nop, op_RR, store2_C ;19 ;RR (Ix+d),C
3468 instr fetch_nop, op_RR, store2_D ;1A ;RR (Ix+d),D
3469 instr fetch_nop, op_RR, store2_E ;1B ;RR (Ix+d),E
3470 instr fetch_nop, op_RR, store2_H ;1C ;RR (Ix+d),H
3471 instr fetch_nop, op_RR, store2_L ;1D ;RR (Ix+d),L
3472 instr fetch_nop, op_RR, store_nop ;1E ;RR (Ix+d)
3473 instr fetch_nop, op_RR, store2_A ;1F ;RR (Ix+d),A
3474 instr fetch_nop, op_SLA, store2_B ;20 ;SLA (Ix+d),B
3475 instr fetch_nop, op_SLA, store2_C ;21 ;SLA (Ix+d),C
3476 instr fetch_nop, op_SLA, store2_D ;22 ;SLA (Ix+d),D
3477 instr fetch_nop, op_SLA, store2_E ;23 ;SLA (Ix+d),E
3478 instr fetch_nop, op_SLA, store2_H ;24 ;SLA (Ix+d),H
3479 instr fetch_nop, op_SLA, store2_L ;25 ;SLA (Ix+d),L
3480 instr fetch_nop, op_SLA, store_nop ;26 ;SLA (Ix+d)
3481 instr fetch_nop, op_SLA, store2_A ;27 ;SLA (Ix+d),A
3482 instr fetch_nop, op_SRA, store2_B ;28 ;SRA (Ix+d),B
3483 instr fetch_nop, op_SRA, store2_C ;29 ;SRA (Ix+d),C
3484 instr fetch_nop, op_SRA, store2_D ;2A ;SRA (Ix+d),D
3485 instr fetch_nop, op_SRA, store2_E ;2B ;SRA (Ix+d),E
3486 instr fetch_nop, op_SRA, store2_H ;2C ;SRA (Ix+d),H
3487 instr fetch_nop, op_SRA, store2_L ;2D ;SRA (Ix+d),L
3488 instr fetch_nop, op_SRA, store_nop ;2E ;SRA (Ix+d)
3489 instr fetch_nop, op_SRA, store2_A ;2F ;SRA (Ix+d),A
3490 instr fetch_nop, op_SLL, store2_B ;30 ;SLL (Ix+d),B
3491 instr fetch_nop, op_SLL, store2_C ;31 ;SLL (Ix+d),C
3492 instr fetch_nop, op_SLL, store2_D ;32 ;SLL (Ix+d),D
3493 instr fetch_nop, op_SLL, store2_E ;33 ;SLL (Ix+d),E
3494 instr fetch_nop, op_SLL, store2_H ;34 ;SLL (Ix+d),H
3495 instr fetch_nop, op_SLL, store2_L ;35 ;SLL (Ix+d),L
3496 instr fetch_nop, op_SLL, store_nop ;36 ;SLL (Ix+d)
3497 instr fetch_nop, op_SLL, store2_A ;37 ;SLL (Ix+d),A
3498 instr fetch_nop, op_SRL, store2_B ;38 ;SRL (Ix+d),B
3499 instr fetch_nop, op_SRL, store2_C ;39 ;SRL (Ix+d),C
3500 instr fetch_nop, op_SRL, store2_D ;3A ;SRL (Ix+d),D
3501 instr fetch_nop, op_SRL, store2_E ;3B ;SRL (Ix+d),E
3502 instr fetch_nop, op_SRL, store2_H ;3C ;SRL (Ix+d),H
3503 instr fetch_nop, op_SRL, store2_L ;3D ;SRL (Ix+d),L
3504 instr fetch_nop, op_SRL, store_nop ;3E ;SRL (Ix+d)
3505 instr fetch_nop, op_SRL, store2_A ;3F ;SRL (Ix+d),A
3506 instr fetch_nop, op_BIT0, store_nop ;40 ;BIT 0,(Ix+d),B
3507 instr fetch_nop, op_BIT0, store_nop ;41 ;BIT 0,(Ix+d),C
3508 instr fetch_nop, op_BIT0, store_nop ;42 ;BIT 0,(Ix+d),D
3509 instr fetch_nop, op_BIT0, store_nop ;43 ;BIT 0,(Ix+d),E
3510 instr fetch_nop, op_BIT0, store_nop ;44 ;BIT 0,(Ix+d),H
3511 instr fetch_nop, op_BIT0, store_nop ;45 ;BIT 0,(Ix+d),L
3512 instr fetch_nop, op_BIT0, store_nop ;46 ;BIT 0,(Ix+d)
3513 instr fetch_nop, op_BIT0, store_nop ;47 ;BIT 0,(Ix+d),A
3514 instr fetch_nop, op_BIT1, store_nop ;48 ;BIT 1,(Ix+d),B
3515 instr fetch_nop, op_BIT1, store_nop ;49 ;BIT 1,(Ix+d),C
3516 instr fetch_nop, op_BIT1, store_nop ;4A ;BIT 1,(Ix+d),D
3517 instr fetch_nop, op_BIT1, store_nop ;4B ;BIT 1,(Ix+d),E
3518 instr fetch_nop, op_BIT1, store_nop ;4C ;BIT 1,(Ix+d),H
3519 instr fetch_nop, op_BIT1, store_nop ;4D ;BIT 1,(Ix+d),L
3520 instr fetch_nop, op_BIT1, store_nop ;4E ;BIT 1,(Ix+d)
3521 instr fetch_nop, op_BIT1, store_nop ;4F ;BIT 1,(Ix+d),A
3522 instr fetch_nop, op_BIT2, store_nop ;50 ;BIT 2,(Ix+d),B
3523 instr fetch_nop, op_BIT2, store_nop ;51 ;BIT 2,(Ix+d),C
3524 instr fetch_nop, op_BIT2, store_nop ;52 ;BIT 2,(Ix+d),D
3525 instr fetch_nop, op_BIT2, store_nop ;53 ;BIT 2,(Ix+d),E
3526 instr fetch_nop, op_BIT2, store_nop ;54 ;BIT 2,(Ix+d),H
3527 instr fetch_nop, op_BIT2, store_nop ;55 ;BIT 2,(Ix+d),L
3528 instr fetch_nop, op_BIT2, store_nop ;56 ;BIT 2,(Ix+d)
3529 instr fetch_nop, op_BIT2, store_nop ;57 ;BIT 2,(Ix+d),A
3530 instr fetch_nop, op_BIT3, store_nop ;58 ;BIT 3,(Ix+d),B
3531 instr fetch_nop, op_BIT3, store_nop ;59 ;BIT 3,(Ix+d),C
3532 instr fetch_nop, op_BIT3, store_nop ;5A ;BIT 3,(Ix+d),D
3533 instr fetch_nop, op_BIT3, store_nop ;5B ;BIT 3,(Ix+d),E
3534 instr fetch_nop, op_BIT3, store_nop ;5C ;BIT 3,(Ix+d),H
3535 instr fetch_nop, op_BIT3, store_nop ;5D ;BIT 3,(Ix+d),L
3536 instr fetch_nop, op_BIT3, store_nop ;5E ;BIT 3,(Ix+d)
3537 instr fetch_nop, op_BIT3, store_nop ;5F ;BIT 3,(Ix+d),A
3538 instr fetch_nop, op_BIT4, store_nop ;60 ;BIT 4,(Ix+d),B
3539 instr fetch_nop, op_BIT4, store_nop ;61 ;BIT 4,(Ix+d),C
3540 instr fetch_nop, op_BIT4, store_nop ;62 ;BIT 4,(Ix+d),D
3541 instr fetch_nop, op_BIT4, store_nop ;63 ;BIT 4,(Ix+d),E
3542 instr fetch_nop, op_BIT4, store_nop ;64 ;BIT 4,(Ix+d),H
3543 instr fetch_nop, op_BIT4, store_nop ;65 ;BIT 4,(Ix+d),L
3544 instr fetch_nop, op_BIT4, store_nop ;66 ;BIT 4,(Ix+d)
3545 instr fetch_nop, op_BIT4, store_nop ;67 ;BIT 4,(Ix+d),A
3546 instr fetch_nop, op_BIT5, store_nop ;68 ;BIT 5,(Ix+d),B
3547 instr fetch_nop, op_BIT5, store_nop ;69 ;BIT 5,(Ix+d),C
3548 instr fetch_nop, op_BIT5, store_nop ;6A ;BIT 5,(Ix+d),D
3549 instr fetch_nop, op_BIT5, store_nop ;6B ;BIT 5,(Ix+d),E
3550 instr fetch_nop, op_BIT5, store_nop ;6C ;BIT 5,(Ix+d),H
3551 instr fetch_nop, op_BIT5, store_nop ;6D ;BIT 5,(Ix+d),L
3552 instr fetch_nop, op_BIT5, store_nop ;6E ;BIT 5,(Ix+d)
3553 instr fetch_nop, op_BIT5, store_nop ;6F ;BIT 5,(Ix+d),A
3554 instr fetch_nop, op_BIT6, store_nop ;70 ;BIT 6,(Ix+d),B
3555 instr fetch_nop, op_BIT6, store_nop ;71 ;BIT 6,(Ix+d),C
3556 instr fetch_nop, op_BIT6, store_nop ;72 ;BIT 6,(Ix+d),D
3557 instr fetch_nop, op_BIT6, store_nop ;73 ;BIT 6,(Ix+d),E
3558 instr fetch_nop, op_BIT6, store_nop ;74 ;BIT 6,(Ix+d),H
3559 instr fetch_nop, op_BIT6, store_nop ;75 ;BIT 6,(Ix+d),L
3560 instr fetch_nop, op_BIT6, store_nop ;76 ;BIT 6,(Ix+d)
3561 instr fetch_nop, op_BIT6, store_nop ;77 ;BIT 6,(Ix+d),A
3562 instr fetch_nop, op_BIT7, store_nop ;78 ;BIT 7,(Ix+d),B
3563 instr fetch_nop, op_BIT7, store_nop ;79 ;BIT 7,(Ix+d),C
3564 instr fetch_nop, op_BIT7, store_nop ;7A ;BIT 7,(Ix+d),D
3565 instr fetch_nop, op_BIT7, store_nop ;7B ;BIT 7,(Ix+d),E
3566 instr fetch_nop, op_BIT7, store_nop ;7C ;BIT 7,(Ix+d),H
3567 instr fetch_nop, op_BIT7, store_nop ;7D ;BIT 7,(Ix+d),L
3568 instr fetch_nop, op_BIT7, store_nop ;7E ;BIT 7,(Ix+d)
3569 instr fetch_nop, op_BIT7, store_nop ;7F ;BIT 7,(Ix+d),A
3570 instr fetch_nop, op_RES0, store2_B ;80 ;RES 0,(Ix+d),B
3571 instr fetch_nop, op_RES0, store2_C ;81 ;RES 0,(Ix+d),C
3572 instr fetch_nop, op_RES0, store2_D ;82 ;RES 0,(Ix+d),D
3573 instr fetch_nop, op_RES0, store2_E ;83 ;RES 0,(Ix+d),E
3574 instr fetch_nop, op_RES0, store2_H ;84 ;RES 0,(Ix+d),H
3575 instr fetch_nop, op_RES0, store2_L ;85 ;RES 0,(Ix+d),L
3576 instr fetch_nop, op_RES0, store_nop ;86 ;RES 0,(Ix+d)
3577 instr fetch_nop, op_RES0, store2_A ;87 ;RES 0,(Ix+d),A
3578 instr fetch_nop, op_RES1, store2_B ;88 ;RES 1,(Ix+d),B
3579 instr fetch_nop, op_RES1, store2_C ;89 ;RES 1,(Ix+d),C
3580 instr fetch_nop, op_RES1, store2_D ;8A ;RES 1,(Ix+d),D
3581 instr fetch_nop, op_RES1, store2_E ;8B ;RES 1,(Ix+d),E
3582 instr fetch_nop, op_RES1, store2_H ;8C ;RES 1,(Ix+d),H
3583 instr fetch_nop, op_RES1, store2_L ;8D ;RES 1,(Ix+d),L
3584 instr fetch_nop, op_RES1, store_nop ;8E ;RES 1,(Ix+d)
3585 instr fetch_nop, op_RES1, store2_A ;8F ;RES 1,(Ix+d),A
3586 instr fetch_nop, op_RES2, store2_B ;90 ;RES 2,(Ix+d),B
3587 instr fetch_nop, op_RES2, store2_C ;91 ;RES 2,(Ix+d),C
3588 instr fetch_nop, op_RES2, store2_D ;92 ;RES 2,(Ix+d),D
3589 instr fetch_nop, op_RES2, store2_E ;93 ;RES 2,(Ix+d),E
3590 instr fetch_nop, op_RES2, store2_H ;94 ;RES 2,(Ix+d),H
3591 instr fetch_nop, op_RES2, store2_L ;95 ;RES 2,(Ix+d),L
3592 instr fetch_nop, op_RES2, store_nop ;96 ;RES 2,(Ix+d)
3593 instr fetch_nop, op_RES2, store2_A ;97 ;RES 2,(Ix+d),A
3594 instr fetch_nop, op_RES3, store2_B ;98 ;RES 3,(Ix+d),B
3595 instr fetch_nop, op_RES3, store2_C ;99 ;RES 3,(Ix+d),C
3596 instr fetch_nop, op_RES3, store2_D ;9A ;RES 3,(Ix+d),D
3597 instr fetch_nop, op_RES3, store2_E ;9B ;RES 3,(Ix+d),E
3598 instr fetch_nop, op_RES3, store2_H ;9C ;RES 3,(Ix+d),H
3599 instr fetch_nop, op_RES3, store2_L ;9D ;RES 3,(Ix+d),L
3600 instr fetch_nop, op_RES3, store_nop ;9E ;RES 3,(Ix+d)
3601 instr fetch_nop, op_RES3, store2_A ;9F ;RES 3,(Ix+d),A
3602 instr fetch_nop, op_RES4, store2_B ;A0 ;RES 4,(Ix+d),B
3603 instr fetch_nop, op_RES4, store2_C ;A1 ;RES 4,(Ix+d),C
3604 instr fetch_nop, op_RES4, store2_D ;A2 ;RES 4,(Ix+d),D
3605 instr fetch_nop, op_RES4, store2_E ;A3 ;RES 4,(Ix+d),E
3606 instr fetch_nop, op_RES4, store2_H ;A4 ;RES 4,(Ix+d),H
3607 instr fetch_nop, op_RES4, store2_L ;A5 ;RES 4,(Ix+d),L
3608 instr fetch_nop, op_RES4, store_nop ;A6 ;RES 4,(Ix+d)
3609 instr fetch_nop, op_RES4, store2_A ;A7 ;RES 4,(Ix+d),A
3610 instr fetch_nop, op_RES5, store2_B ;A8 ;RES 5,(Ix+d),B
3611 instr fetch_nop, op_RES5, store2_C ;A9 ;RES 5,(Ix+d),C
3612 instr fetch_nop, op_RES5, store2_D ;AA ;RES 5,(Ix+d),D
3613 instr fetch_nop, op_RES5, store2_E ;AB ;RES 5,(Ix+d),E
3614 instr fetch_nop, op_RES5, store2_H ;AC ;RES 5,(Ix+d),H
3615 instr fetch_nop, op_RES5, store2_L ;AD ;RES 5,(Ix+d),L
3616 instr fetch_nop, op_RES5, store_nop ;AE ;RES 5,(Ix+d)
3617 instr fetch_nop, op_RES5, store2_A ;AF ;RES 5,(Ix+d),A
3618 instr fetch_nop, op_RES6, store2_B ;B0 ;RES 6,(Ix+d),B
3619 instr fetch_nop, op_RES6, store2_C ;B1 ;RES 6,(Ix+d),C
3620 instr fetch_nop, op_RES6, store2_D ;B2 ;RES 6,(Ix+d),D
3621 instr fetch_nop, op_RES6, store2_E ;B3 ;RES 6,(Ix+d),E
3622 instr fetch_nop, op_RES6, store2_H ;B4 ;RES 6,(Ix+d),H
3623 instr fetch_nop, op_RES6, store2_L ;B5 ;RES 6,(Ix+d),L
3624 instr fetch_nop, op_RES6, store_nop ;B6 ;RES 6,(Ix+d)
3625 instr fetch_nop, op_RES6, store2_A ;B7 ;RES 6,(Ix+d),A
3626 instr fetch_nop, op_RES7, store2_B ;B8 ;RES 7,(Ix+d),B
3627 instr fetch_nop, op_RES7, store2_C ;B9 ;RES 7,(Ix+d),C
3628 instr fetch_nop, op_RES7, store2_D ;BA ;RES 7,(Ix+d),D
3629 instr fetch_nop, op_RES7, store2_E ;BB ;RES 7,(Ix+d),E
3630 instr fetch_nop, op_RES7, store2_H ;BC ;RES 7,(Ix+d),H
3631 instr fetch_nop, op_RES7, store2_L ;BD ;RES 7,(Ix+d),L
3632 instr fetch_nop, op_RES7, store_nop ;BE ;RES 7,(Ix+d)
3633 instr fetch_nop, op_RES7, store2_A ;BF ;RES 7,(Ix+d),A
3634 instr fetch_nop, op_SET0, store2_B ;C0 ;SET 0,(Ix+d),B
3635 instr fetch_nop, op_SET0, store2_C ;C1 ;SET 0,(Ix+d),C
3636 instr fetch_nop, op_SET0, store2_D ;C2 ;SET 0,(Ix+d),D
3637 instr fetch_nop, op_SET0, store2_E ;C3 ;SET 0,(Ix+d),E
3638 instr fetch_nop, op_SET0, store2_H ;C4 ;SET 0,(Ix+d),H
3639 instr fetch_nop, op_SET0, store2_L ;C5 ;SET 0,(Ix+d),L
3640 instr fetch_nop, op_SET0, store_nop ;C6 ;SET 0,(Ix+d)
3641 instr fetch_nop, op_SET0, store2_A ;C7 ;SET 0,(Ix+d),A
3642 instr fetch_nop, op_SET1, store2_B ;C8 ;SET 1,(Ix+d),B
3643 instr fetch_nop, op_SET1, store2_C ;C9 ;SET 1,(Ix+d),C
3644 instr fetch_nop, op_SET1, store2_D ;CA ;SET 1,(Ix+d),D
3645 instr fetch_nop, op_SET1, store2_E ;CB ;SET 1,(Ix+d),E
3646 instr fetch_nop, op_SET1, store2_H ;CC ;SET 1,(Ix+d),H
3647 instr fetch_nop, op_SET1, store2_L ;CD ;SET 1,(Ix+d),L
3648 instr fetch_nop, op_SET1, store_nop ;CE ;SET 1,(Ix+d)
3649 instr fetch_nop, op_SET1, store2_A ;CF ;SET 1,(Ix+d),A
3650 instr fetch_nop, op_SET2, store2_B ;D0 ;SET 2,(Ix+d),B
3651 instr fetch_nop, op_SET2, store2_C ;D1 ;SET 2,(Ix+d),C
3652 instr fetch_nop, op_SET2, store2_D ;D2 ;SET 2,(Ix+d),D
3653 instr fetch_nop, op_SET2, store2_E ;D3 ;SET 2,(Ix+d),E
3654 instr fetch_nop, op_SET2, store2_H ;D4 ;SET 2,(Ix+d),H
3655 instr fetch_nop, op_SET2, store2_L ;D5 ;SET 2,(Ix+d),L
3656 instr fetch_nop, op_SET2, store_nop ;D6 ;SET 2,(Ix+d)
3657 instr fetch_nop, op_SET2, store2_A ;D7 ;SET 2,(Ix+d),A
3658 instr fetch_nop, op_SET3, store2_B ;D8 ;SET 3,(Ix+d),B
3659 instr fetch_nop, op_SET3, store2_C ;D9 ;SET 3,(Ix+d),C
3660 instr fetch_nop, op_SET3, store2_D ;DA ;SET 3,(Ix+d),D
3661 instr fetch_nop, op_SET3, store2_E ;DB ;SET 3,(Ix+d),E
3662 instr fetch_nop, op_SET3, store2_H ;DC ;SET 3,(Ix+d),H
3663 instr fetch_nop, op_SET3, store2_L ;DD ;SET 3,(Ix+d),L
3664 instr fetch_nop, op_SET3, store_nop ;DE ;SET 3,(Ix+d)
3665 instr fetch_nop, op_SET3, store2_A ;DF ;SET 3,(Ix+d),A
3666 instr fetch_nop, op_SET4, store2_B ;E0 ;SET 4,(Ix+d),B
3667 instr fetch_nop, op_SET4, store2_C ;E1 ;SET 4,(Ix+d),C
3668 instr fetch_nop, op_SET4, store2_D ;E2 ;SET 4,(Ix+d),D
3669 instr fetch_nop, op_SET4, store2_E ;E3 ;SET 4,(Ix+d),E
3670 instr fetch_nop, op_SET4, store2_H ;E4 ;SET 4,(Ix+d),H
3671 instr fetch_nop, op_SET4, store2_L ;E5 ;SET 4,(Ix+d),L
3672 instr fetch_nop, op_SET4, store_nop ;E6 ;SET 4,(Ix+d)
3673 instr fetch_nop, op_SET4, store2_A ;E7 ;SET 4,(Ix+d),A
3674 instr fetch_nop, op_SET5, store2_B ;E8 ;SET 5,(Ix+d),B
3675 instr fetch_nop, op_SET5, store2_C ;E9 ;SET 5,(Ix+d),C
3676 instr fetch_nop, op_SET5, store2_D ;EA ;SET 5,(Ix+d),D
3677 instr fetch_nop, op_SET5, store2_E ;EB ;SET 5,(Ix+d),E
3678 instr fetch_nop, op_SET5, store2_H ;EC ;SET 5,(Ix+d),H
3679 instr fetch_nop, op_SET5, store2_L ;ED ;SET 5,(Ix+d),L
3680 instr fetch_nop, op_SET5, store_nop ;EE ;SET 5,(Ix+d)
3681 instr fetch_nop, op_SET5, store2_A ;EF ;SET 5,(Ix+d),A
3682 instr fetch_nop, op_SET6, store2_B ;F0 ;SET 6,(Ix+d),B
3683 instr fetch_nop, op_SET6, store2_C ;F1 ;SET 6,(Ix+d),C
3684 instr fetch_nop, op_SET6, store2_D ;F2 ;SET 6,(Ix+d),D
3685 instr fetch_nop, op_SET6, store2_E ;F3 ;SET 6,(Ix+d),E
3686 instr fetch_nop, op_SET6, store2_H ;F4 ;SET 6,(Ix+d),H
3687 instr fetch_nop, op_SET6, store2_L ;F5 ;SET 6,(Ix+d),L
3688 instr fetch_nop, op_SET6, store_nop ;F6 ;SET 6,(Ix+d)
3689 instr fetch_nop, op_SET6, store2_A ;F7 ;SET 6,(Ix+d),A
3690 instr fetch_nop, op_SET7, store2_B ;F8 ;SET 7,(Ix+d),B
3691 instr fetch_nop, op_SET7, store2_C ;F9 ;SET 7,(Ix+d),C
3692 instr fetch_nop, op_SET7, store2_D ;FA ;SET 7,(Ix+d),D
3693 instr fetch_nop, op_SET7, store2_E ;FB ;SET 7,(Ix+d),E
3694 instr fetch_nop, op_SET7, store2_H ;FC ;SET 7,(Ix+d),H
3695 instr fetch_nop, op_SET7, store2_L ;FD ;SET 7,(Ix+d),L
3696 instr fetch_nop, op_SET7, store_nop ;FE ;SET 7,(Ix+d)
3697 instr fetch_nop, op_SET7, store2_A ;FF ;SET 7,(Ix+d),A
3706 ;----------------------------------------------------------------
3707 ;|Mnemonic |SZHPNC|Description |Notes |
3708 ;----------------------------------------------------------------
3709 ;|IN r,[C] |***P0-|Input |r=[C] |
3712 do_op_in: ; in opl,(opl)
3715 cp opl,_0 ; don't debug port 0 (con stat)
3718 printstring "Port read: ("
3728 bst z_flags,ZFL_C ;save Carry
3729 ldpmx z_flags,sz53p_tab,temp ;S,Z,P
3742 ;----------------------------------------------------------------
3743 ;|Mnemonic |SZHPNC|Description |Notes |
3744 ;----------------------------------------------------------------
3745 ;|OUT [C],r |------|Output |[C]=r |
3748 do_op_out: ; out (c),opl
3751 printstring "Port write: "
3764 ;----------------------------------------------------------------
3765 ;|Mnemonic |SZHPNC|Description |Notes |
3766 ;----------------------------------------------------------------
3767 ;|LD dst,src|------|Load |dst=src |
3770 do_op_stbc: ;store bc to mem loc in opl:h
3777 ;----------------------------------------------------------------
3778 ;|Mnemonic |SZHPNC|Description |Notes |
3779 ;----------------------------------------------------------------
3780 ;|LD dst,src|------|Load |dst=src |
3783 do_op_stde: ;store de to mem loc in opl:h
3790 ;----------------------------------------------------------------
3791 ;|Mnemonic |SZHPNC|Description |Notes |
3792 ;----------------------------------------------------------------
3793 ;|LD dst,src|------|Load |dst=src |
3796 do_op_stsp: ;store sp to mem loc in opl:h
3803 ;----------------------------------------------------------------
3804 ;|Mnemonic |SZHPNC|Description |Notes |
3805 ;----------------------------------------------------------------
3806 ;|ADC HL,ss |***V0*|Add with Carry |HL=HL+ss+CY |
3810 lsr z_flags ; ZFL_C --> Carry
3811 ldi z_flags,0 ; clear N
3813 in temp,sreg ; save lower Z
3817 and temp,temp2 ; 16bit Z
3818 bmov z_flags,ZFL_C, temp2,AVR_C
3819 bmov z_flags,ZFL_P, temp2,AVR_V
3820 bmov z_flags,ZFL_H, temp2,AVR_H
3821 bmov z_flags,ZFL_Z, temp,AVR_Z
3822 bmov z_flags,ZFL_S, temp2,AVR_N
3825 ;----------------------------------------------------------------
3826 ;|Mnemonic |SZHPNC|Description |Notes |
3827 ;----------------------------------------------------------------
3828 ;|SBC HL,ss |***V1*|Subtract with carry |HL=HL-ss-CY |
3834 lsr z_flags ; get Z80 carry
3839 ldi z_flags,(1<<ZFL_N) ; set N
3840 bmov z_flags,ZFL_C, temp,AVR_C
3841 bmov z_flags,ZFL_P, temp,AVR_V
3842 bmov z_flags,ZFL_H, temp,AVR_H
3843 bmov z_flags,ZFL_Z, temp,AVR_Z
3844 bmov z_flags,ZFL_S, temp,AVR_N
3847 ;----------------------------------------------------------------
3848 ;|Mnemonic |SZHPNC|Description |Notes |
3849 ;----------------------------------------------------------------
3850 ;|NEG |***V1*|Negate A |A=0-A |
3858 ldpmx z_flags,sz53p_tab,z_a ;S,Z,P
3859 bmov z_flags,ZFL_C, temp,AVR_C
3860 bmov z_flags,ZFL_H, temp,AVR_H
3865 ;----------------------------------------------------------------
3866 ;|Mnemonic |SZHPNC|Description |Notes |
3867 ;----------------------------------------------------------------
3868 ;|RETI |------|Return from Interrupt|PC=[SP]+ |
3869 ;|RETN |------|Return from NMI | Copy IFF2 to IFF1 |
3875 bmov temp,IFF1, temp,IFF2
3880 ;----------------------------------------------------------------
3881 ;|Mnemonic |SZHPNC|Description |Notes |
3882 ;----------------------------------------------------------------
3883 ;|IM n |------|Interrupt Mode | (n=0,1,2)|
3905 ;----------------------------------------------------------------
3906 ;|Mnemonic |SZHPNC|Description |Notes |
3907 ;----------------------------------------------------------------
3908 ;|LD A,i |**0*0-|Load |(i=I,R) IFF2 --> P |
3909 ;|LD i,A |------|Load |(i=I,R) |
3918 bst z_flags,ZFL_C ;save C
3919 ldpmx z_flags,sz53p_tab,z_a ;S,Z,H,P,N
3922 bmov z_flags,ZFL_P, temp,IFF2
3933 ;----------------------------------------------------------------
3934 ;|Mnemonic |SZHPNC|Description |Notes |
3935 ;----------------------------------------------------------------
3936 ;|RLD |**0P0-|Rotate Left 4 bits |{A,[HL]}={A,[HL]}<- ##|
3937 ;|RRD |**0P0-|Rotate Right 4 bits |{A,[HL]}=->{A,[HL]} ##|
3951 bst z_flags,ZFL_C ;save C
3952 ldpmx z_flags,sz53p_tab,z_a ;S,Z,H,P,N
3968 bst z_flags,ZFL_C ;save C
3969 ldpmx z_flags,sz53p_tab,z_a ;S,Z,H,P,N
3974 ;----------------------------------------------------------------
3975 ;|Mnemonic |SZHPNC|Description |Notes |
3976 ;----------------------------------------------------------------
3977 ;|LDD |--0*0-|Load and Decrement |[DE]=[HL],HL=HL-1,# |
3978 ;|LDDR |--000-|Load, Dec., Repeat |LDD till BC=0 |
3979 ;|LDI |--0*0-|Load and Increment |[DE]=[HL],HL=HL+1,# |
3980 ;|LDIR |--000-|Load, Inc., Repeat |LDI till BC=0 |
3987 ; lcall dram_read ; temp = (HL)
3988 mem_read_ds temp, z_hl
3990 ; lcall dram_write ; (DE) = temp
3991 mem_write_ds z_de, temp
3993 cbr z_flags,(1<<ZFL_H) | (1<<ZFL_P) | (1<<ZFL_N)
3999 sbr z_flags,(1<<ZFL_P)
4005 rcall op_LDxx_common
4006 sub z_e,_255 ;-low(-1) DE++
4007 sbc z_d,_255 ;-high(-1)
4008 sub z_l,_255 ;-low(-1) HL++
4009 sbc z_h,_255 ;-high(-1)
4015 rcall op_LDxx_common
4016 add z_e,_255 ;+low(-1) DE--
4017 adc z_d,_255 ;+high(-1)
4018 add z_l,_255 ;+low(-1) HL--
4019 adc z_h,_255 ;+high(-1)
4052 ;----------------------------------------------------------------
4053 ;|Mnemonic |SZHPNC|Description |Notes |
4054 ;----------------------------------------------------------------
4055 ;|CPD |****1-|Compare and Decrement|A-[HL],HL=HL-1,BC=BC-1|
4056 ;|CPDR |****1-|Compare, Dec., Repeat|CPD till A=[HL]or BC=0|
4057 ;|CPI |****1-|Compare and Increment|A-[HL],HL=HL+1,BC=BC-1|
4058 ;|CPIR |****1-|Compare, Inc., Repeat|CPI till A=[HL]or BC=0|
4068 cbr z_flags,(1<<ZFL_S)|(1<<ZFL_Z)|(1<<ZFL_H)|(1<<ZFL_P)
4069 sbr z_flags,(1<<ZFL_N)
4070 lcall dram_read ; temp = (HL)
4072 cp z_a,temp ; A - (HL)
4075 sbr z_flags,(1<<ZFL_S)
4077 sbr z_flags,(1<<ZFL_Z)
4079 sbr z_flags,(1<<ZFL_H)
4083 sbr z_flags,(1<<ZFL_P)
4090 rcall op_CPxx_common
4099 rcall op_CPxx_common
4126 ;----------------------------------------------------------------
4127 ;|Mnemonic |SZHPNC|Description |Notes |
4128 ;----------------------------------------------------------------
4129 ;|INI |?*??1-|Input and Increment |[HL]=[C],HL=HL+1,B=B-1|
4130 ;|IND |?*??1-|Input and Decrement |[HL]=[C],HL=HL-1,B=B-1|
4131 ;|INIR |?1??1-|Input, Inc., Repeat |INI till B=0 |
4132 ;|INDR |?1??1-|Input, Dec., Repeat |IND till B=0 |
4137 cbr z_flags,(1<<ZFL_Z)
4138 sbr z_flags,(1<<ZFL_N)
4145 sbr z_flags,(1<<ZFL_Z)
4151 rcall op_INxx_common
4159 rcall op_INxx_common
4182 ;----------------------------------------------------------------
4183 ;|Mnemonic |SZHPNC|Description |Notes |
4184 ;----------------------------------------------------------------
4185 ;|OUTI |?*??1-|Output and Increment |[C]=[HL],HL=HL+1,B=B-1|
4186 ;|OUTD |?*??1-|Output and Decrement |[C]=[HL],HL=HL-1,B=B-1|
4187 ;|OTIR |?1??1-|Output, Inc., Repeat |OUTI till B=0 |
4188 ;|OTDR |?1??1-|Output, Dec., Repeat |OUTD till B=0 |
4194 lcall dram_read ;temp = (z)
4197 cbr z_flags,(1<<ZFL_Z)
4198 sbr z_flags,(1<<ZFL_N)
4201 sbr z_flags,(1<<ZFL_Z)
4207 rcall op_OUTxx_common
4208 sub z_l,_255 ;-low(-1)
4209 sbc z_h,_255 ;-high(-1)
4215 rcall op_OUTxx_common
4216 add z_l,_255 ;+low(-1)
4217 adc z_h,_255 ;+high(-1)
4239 opctable EDjmp, PC ;+ 2*256
4241 instr fetch_nop, op_nop, store_nop ;00 ;NOP
4242 instr fetch_nop, op_nop, store_nop ;01 ;NOP
4243 instr fetch_nop, op_nop, store_nop ;02 ;NOP
4244 instr fetch_nop, op_nop, store_nop ;03 ;NOP
4245 instr fetch_nop, op_nop, store_nop ;04 ;NOP
4246 instr fetch_nop, op_nop, store_nop ;05 ;NOP
4247 instr fetch_nop, op_nop, store_nop ;06 ;NOP
4248 instr fetch_nop, op_nop, store_nop ;07 ;NOP
4249 instr fetch_nop, op_nop, store_nop ;08 ;NOP
4250 instr fetch_nop, op_nop, store_nop ;09 ;NOP
4251 instr fetch_nop, op_nop, store_nop ;0A ;NOP
4252 instr fetch_nop, op_nop, store_nop ;0B ;NOP
4253 instr fetch_nop, op_nop, store_nop ;0C ;NOP
4254 instr fetch_nop, op_nop, store_nop ;0D ;NOP
4255 instr fetch_nop, op_nop, store_nop ;0E ;NOP
4256 instr fetch_nop, op_nop, store_nop ;0F ;NOP
4257 instr fetch_nop, op_nop, store_nop ;10 ;NOP
4258 instr fetch_nop, op_nop, store_nop ;11 ;NOP
4259 instr fetch_nop, op_nop, store_nop ;12 ;NOP
4260 instr fetch_nop, op_nop, store_nop ;13 ;NOP
4261 instr fetch_nop, op_nop, store_nop ;14 ;NOP
4262 instr fetch_nop, op_nop, store_nop ;15 ;NOP
4263 instr fetch_nop, op_nop, store_nop ;16 ;NOP
4264 instr fetch_nop, op_nop, store_nop ;17 ;NOP
4265 instr fetch_nop, op_nop, store_nop ;18 ;NOP
4266 instr fetch_nop, op_nop, store_nop ;19 ;NOP
4267 instr fetch_nop, op_nop, store_nop ;1A ;NOP
4268 instr fetch_nop, op_nop, store_nop ;1B ;NOP
4269 instr fetch_nop, op_nop, store_nop ;1C ;NOP
4270 instr fetch_nop, op_nop, store_nop ;1D ;NOP
4271 instr fetch_nop, op_nop, store_nop ;1E ;NOP
4272 instr fetch_nop, op_nop, store_nop ;1F ;NOP
4273 instr fetch_nop, op_nop, store_nop ;20 ;NOP
4274 instr fetch_nop, op_nop, store_nop ;21 ;NOP
4275 instr fetch_nop, op_nop, store_nop ;22 ;NOP
4276 instr fetch_nop, op_nop, store_nop ;23 ;NOP
4277 instr fetch_nop, op_nop, store_nop ;24 ;NOP
4278 instr fetch_nop, op_nop, store_nop ;25 ;NOP
4279 instr fetch_nop, op_nop, store_nop ;26 ;NOP
4280 instr fetch_nop, op_nop, store_nop ;27 ;NOP
4281 instr fetch_nop, op_nop, store_nop ;28 ;NOP
4282 instr fetch_nop, op_nop, store_nop ;29 ;NOP
4283 instr fetch_nop, op_nop, store_nop ;2A ;NOP
4284 instr fetch_nop, op_nop, store_nop ;2B ;NOP
4285 instr fetch_nop, op_nop, store_nop ;2C ;NOP
4286 instr fetch_nop, op_nop, store_nop ;2D ;NOP
4287 instr fetch_nop, op_nop, store_nop ;2E ;NOP
4288 instr fetch_nop, op_nop, store_nop ;2F ;NOP
4289 instr fetch_nop, op_nop, store_nop ;30 ;NOP
4290 instr fetch_nop, op_nop, store_nop ;31 ;NOP
4291 instr fetch_nop, op_nop, store_nop ;32 ;NOP
4292 instr fetch_nop, op_nop, store_nop ;33 ;NOP
4293 instr fetch_nop, op_nop, store_nop ;34 ;NOP
4294 instr fetch_nop, op_nop, store_nop ;35 ;NOP
4295 instr fetch_nop, op_nop, store_nop ;36 ;NOP
4296 instr fetch_nop, op_nop, store_nop ;37 ;NOP
4297 instr fetch_nop, op_nop, store_nop ;38 ;NOP
4298 instr fetch_nop, op_nop, store_nop ;39 ;NOP
4299 instr fetch_nop, op_nop, store_nop ;3A ;NOP
4300 instr fetch_nop, op_nop, store_nop ;3B ;NOP
4301 instr fetch_nop, op_nop, store_nop ;3C ;NOP
4302 instr fetch_nop, op_nop, store_nop ;3D ;NOP
4303 instr fetch_nop, op_nop, store_nop ;3E ;NOP
4304 instr fetch_nop, op_nop, store_nop ;3F ;NOP
4305 instr fetch_C, op_IN, store2_B ;40 ;IN B,(C)
4306 instr fetch_B, op_OUT, store_nop ;41 ;OUT (C),B
4307 instr fetch_BC, op_SBCHL, store_nop ;42 ;SBC HL,BC
4308 instr fetch_DIR16, op_STBC, store_nop ;43 ;LD (nn),BC
4309 instr fetch_nop, op_NEG, store_nop ;44 ;NEG
4310 instr fetch_nop, op_RETN, store_nop ;45 ;RETN
4311 instr fetch_nop, op_IM0, store_nop ;46 ;IM 0
4312 instr fetch_nop, op_ldia, store_nop ;47 ;LD I,A
4313 instr fetch_C, op_IN, store2_C ;48 ;IN C,(C)
4314 instr fetch_C, op_OUT, store_nop ;49 ;OUT (C),C
4315 instr fetch_BC, op_ADCHL, store_nop ;4A ;ADC HL,BC
4316 instr fetch_DIR16, op_RMEM16, store_BC ;4B nn nn ;LD BC,(nn)
4317 instr fetch_nop, op_NEG, store_nop ;4C ;NEG
4318 instr fetch_nop, op_RETI, store_nop ;4D ;RETI
4319 instr fetch_nop, op_IM0, store_nop ;4E ;IM 0
4320 instr fetch_nop, op_ldra, store_nop ;4F ;LD R,A
4321 instr fetch_C, op_IN, store2_D ;50 ;IN D,(C)
4322 instr fetch_D, op_OUT, store_nop ;51 ;OUT (C),D
4323 instr fetch_DE, op_SBCHL, store_nop ;52 ;SBC HL,DE
4324 instr fetch_DIR16, op_STDE, store_nop ;53 nn nn ;LD (nn),DE
4325 instr fetch_nop, op_NEG, store_nop ;54 ;NEG
4326 instr fetch_nop, op_RETN, store_nop ;55 ;RETN
4327 instr fetch_nop, op_IM1, store_nop ;56 ;IM 1
4328 instr fetch_nop, op_ldai, store_nop ;57 ;LD A,I
4329 instr fetch_C, op_IN, store2_E ;58 ;IN E,(C)
4330 instr fetch_E, op_OUT, store_nop ;59 ;OUT (C),E
4331 instr fetch_DE, op_ADCHL, store_nop ;5A ;ADC HL,DE
4332 instr fetch_DIR16, op_RMEM16, store_DE ;5B nn nn ;LD DE,(nn)
4333 instr fetch_nop, op_NEG, store_nop ;5C ;NEG
4334 instr fetch_nop, op_RETN, store_nop ;5D ;RETN
4335 instr fetch_nop, op_IM2, store_nop ;5E ;IM 2
4336 instr fetch_nop, op_ldar, store_nop ;5F ;LD A,R
4337 instr fetch_C, op_IN, store2_H ;60 ;IN H,(C)
4338 instr fetch_H, op_OUT, store_nop ;61 ;OUT (C),H
4339 instr fetch_HL, op_SBCHL, store_nop ;62 ;SBC HL,HL
4340 instr fetch_DIR16, op_STHL, store_nop ;63 nn nn ;LD (nn),HL
4341 instr fetch_nop, op_NEG, store_nop ;64 ;NEG
4342 instr fetch_nop, op_RETN, store_nop ;65 ;RETN
4343 instr fetch_nop, op_IM0, store_nop ;66 ;IM 0
4344 instr fetch2_mhl, op_RRD, store_mhl ;67 ;RRD
4345 instr fetch_C, op_IN, store2_L ;68 ;IN L,(C)
4346 instr fetch_L, op_OUT, store_nop ;69 ;OUT (C),L
4347 instr fetch_HL, op_ADCHL, store_nop ;6A ;ADC HL,HL
4348 instr fetch_DIR16, op_RMEM16, store_HL ;6B nn nn ;LD HL,(nn)
4349 instr fetch_nop, op_NEG, store_nop ;6C ;NEG
4350 instr fetch_nop, op_RETN, store_nop ;6D ;RETN
4351 instr fetch_nop, op_IM0, store_nop ;6E ;IM 0
4352 instr fetch2_mhl, op_RLD, store_mhl ;6F ;RLD
4353 instr fetch_C, op_IN, store_nop ;70 ;IN (C)
4354 instr fetch_0, op_OUT, store_nop ;71 ;OUT (C),0
4355 instr fetch_SP, op_SBCHL, store_nop ;72 ;SBC HL,SP
4356 instr fetch_DIR16, op_STSP, store_nop ;73 nn nn ;LD (nn),SP
4357 instr fetch_nop, op_NEG, store_nop ;74 ;NEG
4358 instr fetch_nop, op_RETN, store_nop ;75 ;RETN
4359 instr fetch_nop, op_IM1, store_nop ;76 ;IM 1
4360 instr fetch_nop, op_nop, store_nop ;77 ;NOP
4361 instr fetch_C, op_IN, store2_A ;78 ;IN A,(C)
4362 instr fetch_A, op_OUT, store_nop ;79 ;OUT (C),A
4363 instr fetch_SP, op_ADCHL, store_nop ;7A ;ADC HL,SP
4364 instr fetch_DIR16, op_RMEM16, store_SP ;7B nn nn ;LD SP,(nn)
4365 instr fetch_nop, op_NEG, store_nop ;7C ;NEG
4366 instr fetch_nop, op_RETN, store_nop ;7D ;RETN
4367 instr fetch_nop, op_IM2, store_nop ;7E ;IM 2
4368 instr fetch_nop, op_nop, store_nop ;7F ;NOP
4369 instr fetch_nop, op_nop, store_nop ;80 ;NOP
4370 instr fetch_nop, op_nop, store_nop ;81 ;NOP
4371 instr fetch_nop, op_nop, store_nop ;82 ;NOP
4372 instr fetch_nop, op_nop, store_nop ;83 ;NOP
4373 instr fetch_nop, op_nop, store_nop ;84 ;NOP
4374 instr fetch_nop, op_nop, store_nop ;85 ;NOP
4375 instr fetch_nop, op_nop, store_nop ;86 ;NOP
4376 instr fetch_nop, op_nop, store_nop ;87 ;NOP
4377 instr fetch_nop, op_nop, store_nop ;88 ;NOP
4378 instr fetch_nop, op_nop, store_nop ;89 ;NOP
4379 instr fetch_nop, op_nop, store_nop ;8A ;NOP
4380 instr fetch_nop, op_nop, store_nop ;8B ;NOP
4381 instr fetch_nop, op_nop, store_nop ;8C ;NOP
4382 instr fetch_nop, op_nop, store_nop ;8D ;NOP
4383 instr fetch_nop, op_nop, store_nop ;8E ;NOP
4384 instr fetch_nop, op_nop, store_nop ;8F ;NOP
4385 instr fetch_nop, op_nop, store_nop ;90 ;NOP
4386 instr fetch_nop, op_nop, store_nop ;91 ;NOP
4387 instr fetch_nop, op_nop, store_nop ;92 ;NOP
4388 instr fetch_nop, op_nop, store_nop ;93 ;NOP
4389 instr fetch_nop, op_nop, store_nop ;94 ;NOP
4390 instr fetch_nop, op_nop, store_nop ;95 ;NOP
4391 instr fetch_nop, op_nop, store_nop ;96 ;NOP
4392 instr fetch_nop, op_nop, store_nop ;97 ;NOP
4393 instr fetch_nop, op_nop, store_nop ;98 ;NOP
4394 instr fetch_nop, op_nop, store_nop ;99 ;NOP
4395 instr fetch_nop, op_nop, store_nop ;9A ;NOP
4396 instr fetch_nop, op_nop, store_nop ;9B ;NOP
4397 instr fetch_nop, op_nop, store_nop ;9C ;NOP
4398 instr fetch_nop, op_nop, store_nop ;9D ;NOP
4399 instr fetch_nop, op_nop, store_nop ;9E ;NOP
4400 instr fetch_nop, op_nop, store_nop ;9F ;NOP
4401 instr fetch_nop, op_LDI, store_nop ;A0 ;LDI
4402 instr fetch_nop, op_CPI, store_nop ;A1 ;CPI
4403 instr fetch_nop, op_INI, store_nop ;A2 ;INI
4404 instr fetch_nop, op_OUTI, store_nop ;A3 ;OUTI
4405 instr fetch_nop, op_nop, store_nop ;A4 ;NOP
4406 instr fetch_nop, op_nop, store_nop ;A5 ;NOP
4407 instr fetch_nop, op_nop, store_nop ;A6 ;NOP
4408 instr fetch_nop, op_nop, store_nop ;A7 ;NOP
4409 instr fetch_nop, op_LDD, store_nop ;A8 ;LDD
4410 instr fetch_nop, op_CPD, store_nop ;A9 ;CPD
4411 instr fetch_nop, op_IND, store_nop ;AA ;IND
4412 instr fetch_nop, op_OUTD, store_nop ;AB ;OUTD
4413 instr fetch_nop, op_nop, store_nop ;AC ;NOP
4414 instr fetch_nop, op_nop, store_nop ;AD ;NOP
4415 instr fetch_nop, op_nop, store_nop ;AE ;NOP
4416 instr fetch_nop, op_nop, store_nop ;AF ;NOP
4417 instr fetch_nop, op_LDIR, store_nop ;B0 ;LDIR
4418 instr fetch_nop, op_CPIR, store_nop ;B1 ;CPIR
4419 instr fetch_nop, op_INIR, store_nop ;B2 ;INIR
4420 instr fetch_nop, op_OTIR, store_nop ;B3 ;OTIR
4421 instr fetch_nop, op_nop, store_nop ;B4 ;NOP
4422 instr fetch_nop, op_nop, store_nop ;B5 ;NOP
4423 instr fetch_nop, op_nop, store_nop ;B6 ;NOP
4424 instr fetch_nop, op_nop, store_nop ;B7 ;NOP
4425 instr fetch_nop, op_LDDR, store_nop ;B8 ;LDDR
4426 instr fetch_nop, op_CPDR, store_nop ;B9 ;CPDR
4427 instr fetch_nop, op_INDR, store_nop ;BA ;INDR
4428 instr fetch_nop, op_OTDR, store_nop ;BB ;OTDR
4429 instr fetch_nop, op_nop, store_nop ;BC ;NOP
4430 instr fetch_nop, op_nop, store_nop ;BD ;NOP
4431 instr fetch_nop, op_nop, store_nop ;BE ;NOP
4432 instr fetch_nop, op_nop, store_nop ;BF ;NOP
4433 instr fetch_nop, op_nop, store_nop ;C0 ;NOP
4434 instr fetch_nop, op_nop, store_nop ;C1 ;NOP
4435 instr fetch_nop, op_nop, store_nop ;C2 ;NOP
4436 instr fetch_nop, op_nop, store_nop ;C3 ;NOP
4437 instr fetch_nop, op_nop, store_nop ;C4 ;NOP
4438 instr fetch_nop, op_nop, store_nop ;C5 ;NOP
4439 instr fetch_nop, op_nop, store_nop ;C6 ;NOP
4440 instr fetch_nop, op_nop, store_nop ;C7 ;NOP
4441 instr fetch_nop, op_nop, store_nop ;C8 ;NOP
4442 instr fetch_nop, op_nop, store_nop ;C9 ;NOP
4443 instr fetch_nop, op_nop, store_nop ;CA ;NOP
4444 instr fetch_nop, op_nop, store_nop ;CB ;NOP
4445 instr fetch_nop, op_nop, store_nop ;CC ;NOP
4446 instr fetch_nop, op_nop, store_nop ;CD ;NOP
4447 instr fetch_nop, op_nop, store_nop ;CE ;NOP
4448 instr fetch_nop, op_nop, store_nop ;CF ;NOP
4449 instr fetch_nop, op_nop, store_nop ;D0 ;NOP
4450 instr fetch_nop, op_nop, store_nop ;D1 ;NOP
4451 instr fetch_nop, op_nop, store_nop ;D2 ;NOP
4452 instr fetch_nop, op_nop, store_nop ;D3 ;NOP
4453 instr fetch_nop, op_nop, store_nop ;D4 ;NOP
4454 instr fetch_nop, op_nop, store_nop ;D5 ;NOP
4455 instr fetch_nop, op_nop, store_nop ;D6 ;NOP
4456 instr fetch_nop, op_nop, store_nop ;D7 ;NOP
4457 instr fetch_nop, op_nop, store_nop ;D8 ;NOP
4458 instr fetch_nop, op_nop, store_nop ;D9 ;NOP
4459 instr fetch_nop, op_nop, store_nop ;DA ;NOP
4460 instr fetch_nop, op_nop, store_nop ;DB ;NOP
4461 instr fetch_nop, op_nop, store_nop ;DC ;NOP
4462 instr fetch_nop, op_nop, store_nop ;DD ;NOP
4463 instr fetch_nop, op_nop, store_nop ;DE ;NOP
4464 instr fetch_nop, op_nop, store_nop ;DF ;NOP
4465 instr fetch_nop, op_nop, store_nop ;E0 ;NOP
4466 instr fetch_nop, op_nop, store_nop ;E1 ;NOP
4467 instr fetch_nop, op_nop, store_nop ;E2 ;NOP
4468 instr fetch_nop, op_nop, store_nop ;E3 ;NOP
4469 instr fetch_nop, op_nop, store_nop ;E4 ;NOP
4470 instr fetch_nop, op_nop, store_nop ;E5 ;NOP
4471 instr fetch_nop, op_nop, store_nop ;E6 ;NOP
4472 instr fetch_nop, op_nop, store_nop ;E7 ;NOP
4473 instr fetch_nop, op_nop, store_nop ;E8 ;NOP
4474 instr fetch_nop, op_nop, store_nop ;E9 ;NOP
4475 instr fetch_nop, op_nop, store_nop ;EA ;NOP
4476 instr fetch_nop, op_nop, store_nop ;EB ;NOP
4477 instr fetch_nop, op_nop, store_nop ;EC ;NOP
4478 instr fetch_nop, op_nop, store_nop ;ED ;NOP
4479 instr fetch_nop, op_nop, store_nop ;EE ;NOP
4480 instr fetch_nop, op_nop, store_nop ;EF ;NOP
4481 instr fetch_nop, op_nop, store_nop ;F0 ;NOP
4482 instr fetch_nop, op_nop, store_nop ;F1 ;NOP
4483 instr fetch_nop, op_nop, store_nop ;F2 ;NOP
4484 instr fetch_nop, op_nop, store_nop ;F3 ;NOP
4485 instr fetch_nop, op_nop, store_nop ;F4 ;NOP
4486 instr fetch_nop, op_nop, store_nop ;F5 ;NOP
4487 instr fetch_nop, op_nop, store_nop ;F6 ;NOP
4488 instr fetch_nop, op_nop, store_nop ;F7 ;NOP
4489 instr fetch_nop, op_nop, store_nop ;F8 ;NOP
4490 instr fetch_nop, op_nop, store_nop ;F9 ;NOP
4491 instr fetch_nop, op_nop, store_nop ;FA ;NOP
4492 instr fetch_nop, op_nop, store_nop ;FB ;NOP
4493 instr fetch_nop, op_nop, store_nop ;FC ;NOP
4494 instr fetch_nop, op_nop, store_nop ;FD ;NOP
4495 instr fetch_nop, op_nop, store_nop ;FE ;NOP
4496 instr fetch_nop, op_nop, store_nop ;FF ;NOP
4501 ;----------------------------------------------------------------
4502 ; Lookup table, stolen from z80ex, Z80 emulation library.
4503 ; http://z80ex.sourceforge.net/
4505 ; The S, Z, 5 and 3 bits and the parity of the lookup value
4509 .org (PC+255) & 0xff00
4511 ; .org FLASHEND & 0xff00
4514 .db 0x44,0x00,0x00,0x04,0x00,0x04,0x04,0x00
4515 .db 0x08,0x0c,0x0c,0x08,0x0c,0x08,0x08,0x0c
4516 .db 0x00,0x04,0x04,0x00,0x04,0x00,0x00,0x04
4517 .db 0x0c,0x08,0x08,0x0c,0x08,0x0c,0x0c,0x08
4518 .db 0x20,0x24,0x24,0x20,0x24,0x20,0x20,0x24
4519 .db 0x2c,0x28,0x28,0x2c,0x28,0x2c,0x2c,0x28
4520 .db 0x24,0x20,0x20,0x24,0x20,0x24,0x24,0x20
4521 .db 0x28,0x2c,0x2c,0x28,0x2c,0x28,0x28,0x2c
4522 .db 0x00,0x04,0x04,0x00,0x04,0x00,0x00,0x04
4523 .db 0x0c,0x08,0x08,0x0c,0x08,0x0c,0x0c,0x08
4524 .db 0x04,0x00,0x00,0x04,0x00,0x04,0x04,0x00
4525 .db 0x08,0x0c,0x0c,0x08,0x0c,0x08,0x08,0x0c
4526 .db 0x24,0x20,0x20,0x24,0x20,0x24,0x24,0x20
4527 .db 0x28,0x2c,0x2c,0x28,0x2c,0x28,0x28,0x2c
4528 .db 0x20,0x24,0x24,0x20,0x24,0x20,0x20,0x24
4529 .db 0x2c,0x28,0x28,0x2c,0x28,0x2c,0x2c,0x28
4530 .db 0x80,0x84,0x84,0x80,0x84,0x80,0x80,0x84
4531 .db 0x8c,0x88,0x88,0x8c,0x88,0x8c,0x8c,0x88
4532 .db 0x84,0x80,0x80,0x84,0x80,0x84,0x84,0x80
4533 .db 0x88,0x8c,0x8c,0x88,0x8c,0x88,0x88,0x8c
4534 .db 0xa4,0xa0,0xa0,0xa4,0xa0,0xa4,0xa4,0xa0
4535 .db 0xa8,0xac,0xac,0xa8,0xac,0xa8,0xa8,0xac
4536 .db 0xa0,0xa4,0xa4,0xa0,0xa4,0xa0,0xa0,0xa4
4537 .db 0xac,0xa8,0xa8,0xac,0xa8,0xac,0xac,0xa8
4538 .db 0x84,0x80,0x80,0x84,0x80,0x84,0x84,0x80
4539 .db 0x88,0x8c,0x8c,0x88,0x8c,0x88,0x88,0x8c
4540 .db 0x80,0x84,0x84,0x80,0x84,0x80,0x80,0x84
4541 .db 0x8c,0x88,0x88,0x8c,0x88,0x8c,0x8c,0x88
4542 .db 0xa0,0xa4,0xa4,0xa0,0xa4,0xa0,0xa0,0xa4
4543 .db 0xac,0xa8,0xa8,0xac,0xa8,0xac,0xac,0xa8
4544 .db 0xa4,0xa0,0xa0,0xa4,0xa0,0xa4,0xa4,0xa0
4545 .db 0xa8,0xac,0xac,0xa8,0xac,0xa8,0xa8,0xac
4547 ; vim:set ts=8 noet nowrap