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/>.
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
607 printstring "Stack pop "
610 printstring ", SP is now "
627 printstring "Stack push "
630 printstring ", SP is now "
643 ; ------------ Operation phase stuff -----------------
645 ;----------------------------------------------------------------
649 ;| ZZZZZZZ 88888 000 |
655 ;| ZZZZZZZ 88888 000 |
657 ;| Z80 MICROPROCESSOR Instruction Set Summary |
659 ;----------------------------------------------------------------
660 ;----------------------------------------------------------------
661 ;|Mnemonic |SZHPNC|Description |Notes |
662 ;|----------+------+---------------------+----------------------|
663 ;|ADC A,s |***V0*|Add with Carry |A=A+s+CY |
664 ;|ADC HL,ss |**?V0*|Add with Carry |HL=HL+ss+CY |
665 ;|ADD A,s |***V0*|Add |A=A+s |
666 ;|ADD HL,ss |--*-0*|Add |HL=HL+ss |
667 ;|ADD IX,pp |--*-0*|Add |IX=IX+pp |
668 ;|ADD IY,rr |--*-0*|Add |IY=IY+rr |
669 ;|AND s |**1P00|Logical AND |A=A&s |
670 ;|BIT b,m |?*1?0-|Test Bit |m&{2^b} |
671 ;|CALL cc,nn|------|Conditional Call |If cc CALL |
672 ;|CALL nn |------|Unconditional Call |-[SP]=PC,PC=nn |
673 ;|CCF |--?-0*|Complement Carry Flag|CY=~CY |
674 ;|CP s |***V1*|Compare |A-s |
675 ;|CPD |****1-|Compare and Decrement|A-[HL],HL=HL-1,BC=BC-1|
676 ;|CPDR |****1-|Compare, Dec., Repeat|CPD till A=[HL]or BC=0|
677 ;|CPI |****1-|Compare and Increment|A-[HL],HL=HL+1,BC=BC-1|
678 ;|CPIR |****1-|Compare, Inc., Repeat|CPI till A=[HL]or BC=0|
679 ;|CPL |--1-1-|Complement |A=~A |
680 ;|DAA |***P-*|Decimal Adjust Acc. |A=BCD format |
681 ;|DEC s |***V1-|Decrement |s=s-1 |
682 ;|DEC xx |------|Decrement |xx=xx-1 |
683 ;|DEC ss |------|Decrement |ss=ss-1 |
684 ;|DI |------|Disable Interrupts |IFF1 = IFF2 = 0 |
685 ;|DJNZ e |------|Dec., Jump Non-Zero |B=B-1 till B=0 |
686 ;|EI |------|Enable Interrupts |IFF1 = IFF2 = 1 |
687 ;|EX [SP],HL|------|Exchange |[SP]<->HL |
688 ;|EX [SP],xx|------|Exchange |[SP]<->xx |
689 ;|EX AF,AF' |------|Exchange |AF<->AF' |
690 ;|EX DE,HL |------|Exchange |DE<->HL |
691 ;|EXX |------|Exchange |qq<->qq' (except AF)|
692 ;|HALT |------|Halt | |
693 ;|IM n |------|Interrupt Mode | (n=0,1,2)|
694 ;|IN A,[n] |------|Input |A=[n] |
695 ;|IN r,[C] |***P0-|Input |r=[C] |
696 ;|INC r |***V0-|Increment |r=r+1 |
697 ;|INC [HL] |***V0-|Increment |[HL]=[HL]+1 |
698 ;|INC xx |------|Increment |xx=xx+1 |
699 ;|INC [xx+d]|***V0-|Increment |[xx+d]=[xx+d]+1 |
700 ;|INC ss |------|Increment |ss=ss+1 |
701 ;|IND |?*??1-|Input and Decrement |[HL]=[C],HL=HL-1,B=B-1|
702 ;|INDR |?1??1-|Input, Dec., Repeat |IND till B=0 |
703 ;|INI |?*??1-|Input and Increment |[HL]=[C],HL=HL+1,B=B-1|
704 ;|INIR |?1??1-|Input, Inc., Repeat |INI till B=0 |
705 ;|JP [HL] |------|Unconditional Jump |PC=[HL] |
706 ;|JP [xx] |------|Unconditional Jump |PC=[xx] |
707 ;|JP nn |------|Unconditional Jump |PC=nn |
708 ;|JP cc,nn |------|Conditional Jump |If cc JP |
709 ;|JR e |------|Unconditional Jump |PC=PC+e |
710 ;|JR cc,e |------|Conditional Jump |If cc JR(cc=C,NC,NZ,Z)|
711 ;|LD dst,src|------|Load |dst=src |
712 ;|LD A,i |**0*0-|Load |A=i (i=I,R)|
713 ;|LDD |--0*0-|Load and Decrement |[DE]=[HL],HL=HL-1,# |
714 ;|LDDR |--000-|Load, Dec., Repeat |LDD till BC=0 |
715 ;|LDI |--0*0-|Load and Increment |[DE]=[HL],HL=HL+1,# |
716 ;|LDIR |--000-|Load, Inc., Repeat |LDI till BC=0 |
717 ;|NEG |***V1*|Negate |A=-A |
718 ;|NOP |------|No Operation | |
719 ;|OR s |**0P00|Logical inclusive OR |A=Avs |
720 ;|OTDR |?1??1-|Output, Dec., Repeat |OUTD till B=0 |
721 ;|OTIR |?1??1-|Output, Inc., Repeat |OUTI till B=0 |
722 ;|OUT [C],r |------|Output |[C]=r |
723 ;|OUT [n],A |------|Output |[n]=A |
724 ;|OUTD |?*??1-|Output and Decrement |[C]=[HL],HL=HL-1,B=B-1|
725 ;|OUTI |?*??1-|Output and Increment |[C]=[HL],HL=HL+1,B=B-1|
726 ;|POP xx |------|Pop |xx=[SP]+ |
727 ;|POP qq |------|Pop |qq=[SP]+ |
728 ;|PUSH xx |------|Push |-[SP]=xx |
729 ;|PUSH qq |------|Push |-[SP]=qq |
730 ;|RES b,m |------|Reset bit |m=m&{~2^b} |
731 ;|RET |------|Return |PC=[SP]+ |
732 ;|RET cc |------|Conditional Return |If cc RET |
733 ;|RETI |------|Return from Interrupt|PC=[SP]+ |
734 ;|RETN |------|Return from NMI |PC=[SP]+ |
735 ;|RL m |**0P0*|Rotate Left |m={CY,m}<- |
736 ;|RLA |--0-0*|Rotate Left Acc. |A={CY,A}<- |
737 ;|RLC m |**0P0*|Rotate Left Circular |m=m<- |
738 ;|RLCA |--0-0*|Rotate Left Circular |A=A<- |
739 ;|RLD |**0P0-|Rotate Left 4 bits |{A,[HL]}={A,[HL]}<- ##|
740 ;|RR m |**0P0*|Rotate Right |m=->{CY,m} |
741 ;|RRA |--0-0*|Rotate Right Acc. |A=->{CY,A} |
742 ;|RRC m |**0P0*|Rotate Right Circular|m=->m |
743 ;|RRCA |--0-0*|Rotate Right Circular|A=->A |
744 ;|RRD |**0P0-|Rotate Right 4 bits |{A,[HL]}=->{A,[HL]} ##|
745 ;|RST p |------|Restart | (p=0H,8H,10H,...,38H)|
746 ;|SBC A,s |***V1*|Subtract with Carry |A=A-s-CY |
747 ;|SBC HL,ss |***V1*|Subtract with Carry |HL=HL-ss-CY |
748 ;|SCF |--0-01|Set Carry Flag |CY=1 |
749 ;|SET b,m |------|Set bit |m=mv{2^b} |
750 ;|SLA m |**0P0*|Shift Left Arithmetic|m=m*2 |
751 ;|SRA m |**0P0*|Shift Right Arith. |m=m/2 |
752 ;|SRL m |**0P0*|Shift Right Logical |m=->{0,m,CY} |
753 ;|SUB s |***V1*|Subtract |A=A-s |
754 ;|XOR s |**0P00|Logical Exclusive OR |A=Axs |
755 ;|----------+------+--------------------------------------------|
756 ;| F |-*01? |Flag unaffected/affected/reset/set/unknown |
757 ;| S |S |Sign flag (Bit 7) |
758 ;| Z | Z |Zero flag (Bit 6) |
759 ;| HC | H |Half Carry flag (Bit 4) |
760 ;| P/V | P |Parity/Overflow flag (Bit 2, V=overflow) |
761 ;| N | N |Add/Subtract flag (Bit 1) |
762 ;| CY | C|Carry flag (Bit 0) |
763 ;|-----------------+--------------------------------------------|
764 ;| n |Immediate addressing |
765 ;| nn |Immediate extended addressing |
766 ;| e |Relative addressing (PC=PC+2+offset) |
767 ;| [nn] |Extended addressing |
768 ;| [xx+d] |Indexed addressing |
769 ;| r |Register addressing |
770 ;| [rr] |Register indirect addressing |
771 ;| |Implied addressing |
772 ;| b |Bit addressing |
773 ;| p |Modified page zero addressing (see RST) |
774 ;|-----------------+--------------------------------------------|
775 ;|DEFB n(,...) |Define Byte(s) |
776 ;|DEFB 'str'(,...) |Define Byte ASCII string(s) |
777 ;|DEFS nn |Define Storage Block |
778 ;|DEFW nn(,...) |Define Word(s) |
779 ;|-----------------+--------------------------------------------|
780 ;| A B C D E |Registers (8-bit) |
781 ;| AF BC DE HL |Register pairs (16-bit) |
782 ;| F |Flag register (8-bit) |
783 ;| I |Interrupt page address register (8-bit) |
784 ;| IX IY |Index registers (16-bit) |
785 ;| PC |Program Counter register (16-bit) |
786 ;| R |Memory Refresh register |
787 ;| SP |Stack Pointer register (16-bit) |
788 ;|-----------------+--------------------------------------------|
789 ;| b |One bit (0 to 7) |
790 ;| cc |Condition (C,M,NC,NZ,P,PE,PO,Z) |
791 ;| d |One-byte expression (-128 to +127) |
792 ;| dst |Destination s, ss, [BC], [DE], [HL], [nn] |
793 ;| e |One-byte expression (-126 to +129) |
794 ;| m |Any register r, [HL] or [xx+d] |
795 ;| n |One-byte expression (0 to 255) |
796 ;| nn |Two-byte expression (0 to 65535) |
797 ;| pp |Register pair BC, DE, IX or SP |
798 ;| qq |Register pair AF, BC, DE or HL |
799 ;| qq' |Alternative register pair AF, BC, DE or HL |
800 ;| r |Register A, B, C, D, E, H or L |
801 ;| rr |Register pair BC, DE, IY or SP |
802 ;| s |Any register r, value n, [HL] or [xx+d] |
803 ;| src |Source s, ss, [BC], [DE], [HL], nn, [nn] |
804 ;| ss |Register pair BC, DE, HL or SP |
805 ;| xx |Index register IX or IY |
806 ;|-----------------+--------------------------------------------|
807 ;| + - * / ^ |Add/subtract/multiply/divide/exponent |
808 ;| & ~ v x |Logical AND/NOT/inclusive OR/exclusive OR |
809 ;| <- -> |Rotate left/right |
810 ;| [ ] |Indirect addressing |
811 ;| [ ]+ -[ ] |Indirect addressing auto-increment/decrement|
812 ;| { } |Combination of operands |
813 ;| # |Also BC=BC-1,DE=DE-1 |
814 ;| ## |Only lower 4 bits of accumulator A used |
815 ;----------------------------------------------------------------
817 ;How the flags are supposed to work:
818 ;7 ZFL_S - Sign flag (=MSBit of result)
819 ;6 ZFL_Z - Zero flag. Is 1 when the result is 0
820 ;4 ZFL_H - Half-carry (carry from bit 3 to 4)
821 ;2 ZFL_P - Parity/2-complement Overflow
822 ;1 ZFL_N - Subtract - set if last op was a subtract
825 ;I sure hope I got the mapping between flags and instructions correct...
842 ; TODO: check Z80 flag settings
844 ;------------------------------------------------;
845 ; Load table value from flash indexed by source reg.
847 ; ldpmx dstreg,tablebase,indexreg
849 ; (3 words, 5 cycles)
852 ldi zh,high(@1*2) ; table must be page aligned
857 .macro do_z80_flags_V
859 bmov z_flags, ZFL_P, temp, AVR_V
863 .macro do_z80_flags_H
865 bmov z_flags, ZFL_H, temp, AVR_H
869 .macro do_z80_flags_set_N
871 ori z_flags, (1<<ZFL_N) ; Negation auf 1
875 .macro do_z80_flags_set_HN
877 ori z_flags,(1<<ZFL_N)|(1<<ZFL_H)
881 .macro do_z80_flags_clear_N
883 andi z_flags,~(1<<ZFL_N)
887 .macro do_z80_flags_clear_HN
889 andi z_flags,~((1<<ZFL_H)|(1<<ZFL_N))
894 .macro do_z80_flags_copy_HC
896 bmov z_flags, ZFL_H, z_flags, ZFL_C
900 .macro do_z80_flags_op_rotate
901 ; must not change avr carry flag!
903 andi z_flags, ~( (1<<ZFL_H) | (1<<ZFL_N) | (1<<ZFL_C) )
905 andi z_flags, ~( (1<<ZFL_C) )
909 .macro do_z80_flags_op_and
911 ori z_flags,(1<<ZFL_H)
915 .macro do_z80_flags_op_or
922 ;----------------------------------------------------------------
924 .equ do_op_nop = do_x_nop
929 printstring "Invalid opcode! "
935 ;----------------------------------------------------------------
936 ;|Mnemonic |SZHPNC|Description |Notes |
937 ;----------------------------------------------------------------
938 ;|HALT |------|Halt | |
945 sbr intstat,(1<<i_halt)
947 printstring "CPU halted! "
950 ;----------------------------------------------------------------
951 ;|Mnemonic |SZHPNC|Description |Notes |
952 ;----------------------------------------------------------------
953 ;|OUT [n],A |------|Output |[n]=A |
956 ;Interface with peripherials goes here :)
957 do_op_outa: ; out (opl),a
960 printstring "Port write: "
973 ;----------------------------------------------------------------
974 ;|Mnemonic |SZHPNC|Description |Notes |
975 ;----------------------------------------------------------------
976 ;|IN A,[n] |------|Input |A=[n] |
979 do_op_ina: ; in a,(opl)
982 cp opl,_0 ; don't debug port 0 (con stat)
985 printstring "Port read: ("
1006 ;----------------------------------------------------------------
1007 ;|Mnemonic |SZHPNC|Description |Notes |
1008 ;----------------------------------------------------------------
1009 ;|INC r |***V0-|Increment |r=r+1 |
1010 ;|INC [HL] |***V0-|Increment |[HL]=[HL]+1 |
1011 ;|INC [xx+d]|***V0-|Increment |[xx+d]=[xx+d]+1 |
1012 ;|----------|SZHP C|---------- 8080 ----------------------------|
1013 ;|INC r |**-P0-|Increment |r=r+1 |
1014 ;|INC [HL] |**-P0-|Increment |[HL]=[HL]+1 |
1020 andi z_flags,(1<<ZFL_C) ; preserve C-, Clear N-flag
1024 sbr z_flags,(1<<ZFL_S)
1026 sbr z_flags,(1<<ZFL_Z)
1028 sbr z_flags,(1<<ZFL_H)
1030 sbr z_flags,(1<<ZFL_P)
1032 andi z_flags,(1<<ZFL_C) ; preserve C-, Clear N-flag
1036 bmov z_flags,ZFL_S, temp,AVR_N
1037 bmov z_flags,ZFL_Z, temp,AVR_Z
1038 bmov z_flags,ZFL_H, temp,AVR_H
1039 bmov z_flags,ZFL_P, temp,AVR_V
1042 andi z_flags,(1<<ZFL_C)|(1<<ZFL_H) ; preserve C- and H-flag
1044 ldpmx temp,sz53p_tab,opl ;S,Z,P flag
1050 bst z_flags,ZFL_C ; save C flag
1053 ldpmx z_flags,flagmap_tab,temp
1060 andi z_flags,(1<<ZFL_C) ; preserve C-, Clear N-flag
1063 bmov z_flags,ZFL_S, temp,AVR_N
1064 bmov z_flags,ZFL_Z, temp,AVR_Z
1066 sbr z_flags,(1<<ZFL_H)
1067 bmov z_flags,ZFL_P, temp,AVR_V
1069 andi z_flags,(1<<ZFL_C)|(1<<ZFL_H) ; preserve C- and H-flag
1071 ldpmx temp,sz53p_tab,z_a ; S,Z,P flag
1076 ;----------------------------------------------------------------
1077 ;|Mnemonic |SZHPNC|Description |Notes |
1078 ;----------------------------------------------------------------
1079 ;|DEC r |***V1-|Decrement |s=s-1 |
1080 ;|DEC [HL] |***V1-|Increment |[HL]=[HL]-1 |
1081 ;|DEC [xx+d]|***V1-|Increment |[xx+d]=[xx+d]-1 |
1082 ;|----------|SZHP C|---------- 8080 ----------------------------|
1083 ;|DEC r |**-P -|Increment |r=r-1 |
1084 ;|DEC [HL] |**-P -|Increment |[HL]=[HL]-1 |
1091 bmov z_flags,ZFL_S, temp,AVR_N
1092 bmov z_flags,ZFL_Z, temp,AVR_Z
1093 bmov z_flags,ZFL_H, temp,AVR_H
1094 bmov z_flags,ZFL_P, temp,AVR_V
1095 ori z_flags,(1<<ZFL_N) ; Set N-flag
1097 andi z_flags,(1<<ZFL_C)|(1<<ZFL_H) ; preserve C- and H-flag
1098 ldpmx temp,sz53p_tab,opl ; S,Z,P flag
1108 bmov z_flags,ZFL_S, temp,AVR_N
1109 bmov z_flags,ZFL_Z, temp,AVR_Z
1110 bmov z_flags,ZFL_H, temp,AVR_H
1111 bmov z_flags,ZFL_P, temp,AVR_V
1112 ori z_flags,(1<<ZFL_N) ; Set N-flag
1115 andi z_flags,(1<<ZFL_C)|(1<<ZFL_H) ; preserve C- and H-flag
1116 ldpmx temp,sz53p_tab,z_a ; S,Z,P flag
1122 ;----------------------------------------------------------------
1123 ;|Mnemonic |SZHPNC|Description |Notes |
1124 ;----------------------------------------------------------------
1125 ;|INC xx |------|Increment |xx=xx+1 |
1126 ;|INC ss |------|Increment |ss=ss+1 |
1149 ;----------------------------------------------------------------
1150 ;|Mnemonic |SZHPNC|Description |Notes |
1151 ;----------------------------------------------------------------
1152 ;|DEC xx |------|Decrement |xx=xx-1 |
1153 ;|DEC ss |------|Decrement |ss=ss-1 |
1176 ;----------------------------------------------------------------
1177 ;|Mnemonic |SZHPNC|Description |Notes |
1178 ;----------------------------------------------------------------
1179 ;|RLCA |--0-0*|Rotate Left Circular |A=A<- |
1180 ;|----------|SZHP C|---------- 8080 ----------------------------|
1181 ;|RLCA |---- *|Rotate Left Circular |A=A<- |
1185 ;Rotate Left Cyclical. All bits move 1 to the
1186 ;left, the msb becomes c and lsb.
1187 do_z80_flags_op_rotate
1192 ori z_flags, (1<<ZFL_C)
1196 ;----------------------------------------------------------------
1197 ;|Mnemonic |SZHPNC|Description |Notes |
1198 ;----------------------------------------------------------------
1199 ;|RRCA |--0-0*|Rotate Right Circular|A=->A |
1200 ;|----------|SZHP C|---------- 8080 ----------------------------|
1201 ;|RRCA |---- *|Rotate Right Circular|A=->A |
1205 ;Rotate Right Cyclical. All bits move 1 to the
1206 ;right, the lsb becomes c and msb.
1207 do_z80_flags_op_rotate
1212 ori z_flags, (1<<ZFL_C)
1216 ;----------------------------------------------------------------
1217 ;|Mnemonic |SZHPNC|Description |Notes |
1218 ;----------------------------------------------------------------
1219 ;|RRA |--0-0*|Rotate Right Acc. |A=->{CY,A} |
1220 ;|----------|SZHP C|---------- 8080 ----------------------------|
1221 ;|RRA |---- *|Rotate Right Acc. |A=->{CY,A} |
1225 ;Rotate Right. All bits move 1 to the right, the lsb
1226 ;becomes c, c becomes msb.
1227 clc ; get z80 carry to avr carry
1230 do_z80_flags_op_rotate ; (clear ZFL_C, doesn't change AVR_C)
1231 bmov z_flags,ZFL_C, z_a,0 ; Bit 0 --> CY
1235 ;----------------------------------------------------------------
1236 ;|Mnemonic |SZHPNC|Description |Notes |
1237 ;----------------------------------------------------------------
1238 ;|RLA |--0-0*|Rotate Left Acc. |A={CY,A}<- |
1239 ;|----------|SZHP C|---------- 8080 ----------------------------|
1240 ;|RLA |---- *|Rotate Left Acc. |A={CY,A}<- |
1244 ;Rotate Left. All bits move 1 to the left, the msb
1245 ;becomes c, c becomes lsb.
1249 do_z80_flags_op_rotate ; (clear ZFL_C, doesn't change AVR_C)
1250 bmov z_flags,ZFL_C, z_a,7 ; Bit 7 --> CY
1254 ;----------------------------------------------------------------
1255 ;|Mnemonic |SZHPNC|Description |Notes |
1256 ;----------------------------------------------------------------
1257 ;|ADD A,s |***V0*|Add |A=A+s |
1258 ;|----------|SZHP C|---------- 8080 ----------------------------|
1259 ;|ADD A,s |***P *|Add |A=A+s |
1265 ldpmx z_flags,sz53p_tab,z_a ;S,Z,P flag
1266 bmov z_flags,ZFL_C, temp,AVR_C
1267 bmov z_flags,ZFL_H, temp,AVR_H
1271 ;----------------------------------------------------------------
1272 ;|Mnemonic |SZHPNC|Description |Notes |
1273 ;----------------------------------------------------------------
1274 ;|ADC A,s |***V0*|Add with Carry |A=A+s+CY |
1275 ;|----------|SZHP C|---------- 8080 ----------------------------|
1276 ;|ADC A,s |***P *|Add with Carry |A=A+s+CY |
1285 ldpmx z_flags,sz53p_tab,z_a ;S,Z,P
1286 bmov z_flags,ZFL_C, temp,AVR_C
1287 bmov z_flags,ZFL_H, temp,AVR_H
1291 ;----------------------------------------------------------------
1292 ;|Mnemonic |SZHPNC|Description |Notes |
1293 ;----------------------------------------------------------------
1294 ;|SUB s |***V1*|Subtract |A=A-s |
1295 ;|----------|SZHP C|---------- 8080 ----------------------------|
1296 ;|SUB s |***P *|Subtract |A=A-s |
1302 ldpmx z_flags,sz53p_tab,z_a ;S,Z,P
1303 bmov z_flags,ZFL_C, temp,AVR_C
1304 bmov z_flags,ZFL_H, temp,AVR_H
1309 ;----------------------------------------------------------------
1310 ;|Mnemonic |SZHPNC|Description |Notes |
1311 ;----------------------------------------------------------------
1312 ;|CP s |***V1*|Compare |A-s |
1313 ;|----------|SZHP C|---------- 8080 ----------------------------|
1314 ;|CP s |***P *|Compare |A-s |
1321 ldpmx z_flags,sz53p_tab,temp2 ;S,Z,P
1322 bmov z_flags,ZFL_C, temp,AVR_C
1323 bmov z_flags,ZFL_H, temp,AVR_H
1328 ;----------------------------------------------------------------
1329 ;|Mnemonic |SZHPNC|Description |Notes |
1330 ;----------------------------------------------------------------
1331 ;|SBC A,s |***V1*|Subtract with Carry |A=A-s-CY |
1332 ;|----------|SZHP C|---------- 8080 ----------------------------|
1333 ;|SBC A,s |***P *|Subtract with Carry |A=A-s-CY |
1342 ldpmx z_flags,sz53p_tab,z_a ;S,Z,P
1343 bmov z_flags,ZFL_C, temp,AVR_C
1344 bmov z_flags,ZFL_H, temp,AVR_H
1349 ;----------------------------------------------------------------
1350 ;|Mnemonic |SZHPNC|Description |Notes |
1351 ;----------------------------------------------------------------
1352 ;|AND s |**1P00|Logical AND |A=A&s |
1353 ;|----------|SZHP C|---------- 8080 ----------------------------|
1354 ;|AND s |**-P 0|Logical AND |A=A&s |
1359 ldpmx z_flags,sz53p_tab,z_a ;S,Z,P,N,C
1364 ;----------------------------------------------------------------
1365 ;|Mnemonic |SZHPNC|Description |Notes |
1366 ;----------------------------------------------------------------
1367 ;|OR s |**0P00|Logical inclusive OR |A=Avs |
1368 ;|----------|SZHP C|---------- 8080 ----------------------------|
1369 ;|OR s |**-P00|Logical inclusive OR |A=Avs |
1374 ldpmx z_flags,sz53p_tab,z_a ;S,Z,H,P,N,C
1378 ;----------------------------------------------------------------
1379 ;|Mnemonic |SZHPNC|Description |Notes |
1380 ;----------------------------------------------------------------
1381 ;|XOR s |**0P00|Logical Exclusive OR |A=Axs |
1382 ;|----------|SZHP C|---------- 8080 ----------------------------|
1383 ;|XOR s |**-P 0|Logical Exclusive OR |A=Axs |
1388 ldpmx z_flags,sz53p_tab,z_a ;S,Z,H,P,N,C
1392 ;----------------------------------------------------------------
1393 ;|Mnemonic |SZHPNC|Description |Notes |
1394 ;----------------------------------------------------------------
1395 ;|ADD HL,ss |--*-0*|Add |HL=HL+ss |
1396 ;|----------|SZHP C|---------- 8080 ----------------------------|
1397 ;|ADD HL,ss |---- *|Add |HL=HL+ss |
1404 bmov z_flags,ZFL_C, temp,AVR_C
1406 do_z80_flags_clear_N
1409 ;----------------------------------------------------------------
1410 ;|Mnemonic |SZHPNC|Description |Notes |
1411 ;----------------------------------------------------------------
1412 ;|LD dst,src|------|Load |dst=src |
1415 do_op_sthl: ;store hl to mem loc in opl:h
1422 ;----------------------------------------------------------------
1423 ;|Mnemonic |SZHPNC|Description |Notes |
1424 ;----------------------------------------------------------------
1425 ;|LD dst,src|------|Load |dst=src |
1435 ;----------------------------------------------------------------
1436 ;|Mnemonic |SZHPNC|Description |Notes |
1437 ;----------------------------------------------------------------
1438 ;|LD dst,src|------|Load |dst=src |
1445 ;----------------------------------------------------------------
1446 ;|Mnemonic |SZHPNC|Description |Notes |
1447 ;----------------------------------------------------------------
1448 ;|DAA |***P-*|Decimal Adjust Acc. | |
1449 ;|----------|SZHP C|---------- 8080 ----------------------------|
1452 ; Description (http://www.z80.info/z80syntx.htm#DAA):
1453 ; This instruction conditionally adjusts the accumulator for BCD addition
1454 ; and subtraction operations. For addition (ADD, ADC, INC) or subtraction
1455 ; (SUB, SBC, DEC, NEC), the following table indicates the operation performed:
1457 ; -------------------------------------------------------------------
1458 ; | |C Flag |HEX value in|H Flag |HEX val in | Number |C flag |
1459 ; | Oper |Before |upper digit |Before |lower digit| added |After |
1460 ; | |DAA |(bit 7-4) |DAA |(bit 3-0) | to A |DAA |
1461 ; |-------+-------+------------+-------+-----------+--------+-------|
1462 ; | | 0 | 0-9 | 0 | 0-9 | 00 | 0 |
1463 ; | ADD | 0 | 0-8 | 0 | A-F | 06 | 0 |
1464 ; | | 0 | 0-9 | 1 | 0-3 | 06 | 0 |
1465 ; | ADC | 0 | A-F | 0 | 0-9 | 60 | 1 |
1466 ; | | 0 | 9-F | 0 | A-F | 66 | 1 |
1467 ; | INC | 0 | A-F | 1 | 0-3 | 66 | 1 |
1468 ; | | 1 | 0-2 | 0 | 0-9 | 60 | 1 |
1469 ; | | 1 | 0-2 | 0 | A-F | 66 | 1 |
1470 ; | | 1 | 0-3 | 1 | 0-3 | 66 | 1 |
1471 ; |-------+-------+------------+-------+-----------+--------+-------|
1472 ; | SUB | 0 | 0-9 | 0 | 0-9 | 00 | 0 |
1473 ; | SBC | 0 | 0-8 | 1 | 6-F | FA | 0 |
1474 ; | DEC | 1 | 7-F | 0 | 0-9 | A0 | 1 |
1475 ; | NEG | 1 | 6-F | 1 | 6-F | 9A | 1 |
1476 ; -------------------------------------------------------------------
1478 ; The H flag is affected as follows:
1480 ; ---------------------
1481 ; | N | H | low |H' |
1483 ; |---+---+-------+---|
1484 ; | 0 | * | 0-9 | 0 |
1485 ; | 0 | * | a-f | 1 |
1487 ; | 1 | 1 | 6-f | 0 |
1488 ; | 1 | 1 | 0-5 | 1 |
1489 ; ---------------------
1493 ; P/V: Set if Acc. is even parity after operation, reset otherwise.
1494 ; Z: Set if Acc. is Zero after operation, reset otherwise.
1495 ; S: Set if most significant bit of Acc. is 1 after operation, reset otherwise.
1502 sbrc z_flags,ZFL_N ;if add-op
1503 rjmp op_da_sub ;then
1508 ldi temp2,0 ; new C, H and N flag
1509 sbrc z_flags,ZFL_H ; |
1510 rjmp op_da_a01 ; if (H flag ...
1513 cpi temp,0x0a ; or (lower nibble >= 0x0A))
1516 ldi oph,0x06 ; add 6 to lower nibble
1519 ori temp2,(1<<ZFL_H) ; set new H flag
1522 ori temp2,(1<<ZFL_C) ; set new H flag
1524 sbrc z_flags,ZFL_C ; |
1525 rjmp op_da_a12 ; if (C flag ...
1526 cpi opl,0xA0 ; |... or upper nibble >= 0xA0)
1529 ldi oph,0x60 ; add 6 to lower nibble
1531 ori temp2,(1<<ZFL_C) ; set new C flag
1533 ldpmx z_flags, sz53p_tab, opl ; get S,Z,P flag
1534 or z_flags,temp2 ; merge new C and H flag
1539 op_da_sub: ;Else (sub-op)
1540 ldi temp2,(1<<ZFL_N) ; new C, H and N flag
1541 sbrc z_flags,ZFL_H ; |
1542 rjmp op_da_s01 ; if (H flag ...
1545 cpi temp,0x0a ; or (lower nibble >= 0x0A))
1548 ldi oph,0x06 ; add 6 to lower nibble
1551 ori temp2,(1<<ZFL_H) ; set new H flag
1553 ori temp2,(1<<ZFL_C) ; set new C flag
1555 sbrc z_flags,ZFL_C ; |
1556 rjmp op_da_s12 ; if (C flag ...
1557 cpi opl,0x90 ; |... or upper nibble >= 0xA0)
1560 ldi oph,0x60 ; add 6 to lower nibble
1562 ori temp2,(1<<ZFL_C) ; set new C flag
1564 ldpmx z_flags, sz53p_tab, opl ; get S,Z,P flag
1565 or z_flags,temp2 ; merge new C and H flag
1573 ldi oph,0 ;oph: what to add
1576 sbrc z_flags,ZFL_N ;if add-op
1577 rjmp op_da_sub ;then
1581 ldi temp2,0 ; new C, H and N flag
1584 cpi temp,0x0a ; if (lower nibble >= 0x0A)
1586 ori oph,0x06 ; add 6
1587 ori temp2,(1<<ZFL_H) ; set new H flag
1589 sbrc z_flags,ZFL_C ; |
1590 rjmp op_da_a02 ; if (C flag ...
1591 cpi opl,0x90 ; |... or upper nibble >= 0x90)
1594 ori oph,0x60 ; add 0x60
1595 ori temp2,(1<<ZFL_C) ; set new C flag
1598 op_da_a10: ; else (lower nibble is 0x09 or lower)
1599 sbrc z_flags,ZFL_C ; |
1600 rjmp op_da_a12 ; if (C flag ...
1601 cpi opl,0xA0 ; |... or upper nibble >= 0xA0)
1604 ori oph,0x60 ; add 0x60
1605 ori temp2,(1<<ZFL_C) ; set new C flag
1607 sbrs z_flags,ZFL_H ; if (H flag)
1609 ori oph,0x06 ; add 0x06
1612 cpi temp,0x06 ; if (lower nibble < 0x6)
1614 ; ori temp2,(1<<ZFL_H) ; set new H flag
1619 ldpmx z_flags, sz53p_tab, opl ; get S,Z,P flag
1620 or z_flags,temp2 ; merge new C and H flag
1625 op_da_sub: ;Else (sub-op)
1626 ldi temp2,(1<<ZFL_N) ; new C, H and N flag
1629 cpi temp,0x0a ; if (lower nibble >= 0x0A)
1631 ori oph,0x06 ; sub 6
1633 sbrc z_flags,ZFL_C ; |
1634 rjmp op_da_s02 ; if (C flag ...
1635 cpi opl,0x90 ; |... or upper nibble >= 0x90)
1638 ori oph,0x60 ; sub 0x60
1639 ori temp2,(1<<ZFL_C) ; set new C flag
1642 op_da_s10: ; else (lower nibble is 0x09 or lower)
1643 sbrc z_flags,ZFL_C ; |
1644 rjmp op_da_s12 ; if (C flag ...
1645 cpi opl,0xA0 ; |... or upper nibble >= 0xA0)
1648 ori oph,0x60 ; sub 0x60
1649 ori temp2,(1<<ZFL_C) ; set new C flag
1651 sbrs z_flags,ZFL_H ; if (H flag)
1653 ori oph,0x06 ; sub 0x06
1656 cpi temp,0x06 ; if (lower nibble < 0x06)
1658 ori temp2,(1<<ZFL_H) ; set new H flag
1663 ldpmx z_flags, sz53p_tab, opl ; get S,Z,P flag
1664 or z_flags,temp2 ; merge new C and H flag
1668 #endif /* alternatives */
1671 ;----------------------------------------------------------------
1672 ;|Mnemonic |SZHPNC|Description |Notes |
1673 ;----------------------------------------------------------------
1674 ;|SCF |--0-01|Set Carry Flag |CY=1 |
1675 ;|----------|SZHP C|---------- 8080 ----------------------------|
1679 do_z80_flags_clear_HN
1680 ori z_flags,(1<<ZFL_C)
1683 ;----------------------------------------------------------------
1684 ;|Mnemonic |SZHPNC|Description |Notes |
1685 ;----------------------------------------------------------------
1686 ;|CCF |--?-0*|Complement Carry Flag|CY=~CY, HC=previous CY|
1687 ;|----------|SZHP C|---------- 8080 ----------------------------|
1688 ;|CCF |---- 1|Set Carry Flag |CY=1 |
1691 do_z80_flags_clear_N
1692 do_z80_flags_copy_HC
1697 ;----------------------------------------------------------------
1698 ;|Mnemonic |SZHPNC|Description |Notes |
1699 ;----------------------------------------------------------------
1700 ;|CPL |--1-1-|Complement |A=~A |
1701 ;|----------|SZHP C|---------- 8080 ----------------------------|
1702 ;|CPL |---- -|Complement |A=~A |
1711 ;----------------------------------------------------------------
1712 ;|Mnemonic |SZHPNC|Description |Notes |
1713 ;----------------------------------------------------------------
1714 ;|PUSH xx |------|Push |-[SP]=xx |
1715 ;|PUSH qq |------|Push |-[SP]=qq |
1728 printstring "Stack push "
1731 printstring ", SP is now "
1739 ;----------------------------------------------------------------
1740 ;|Mnemonic |SZHPNC|Description |Notes |
1741 ;----------------------------------------------------------------
1742 ;|POP xx |------|Pop |xx=[SP]+ |
1743 ;|POP qq |------|Pop |qq=[SP]+ |
1756 printstring "Stack pop "
1759 printstring ", SP is now "
1766 ;----------------------------------------------------------------
1767 ;|Mnemonic |SZHPNC|Description |Notes |
1768 ;----------------------------------------------------------------
1769 ;|EX [SP],HL|------|Exchange |[SP]<->HL |
1770 ;|EX DE,HL |------|Exchange |DE<->HL |
1771 ;-----------------------------Z80--------------------------------
1779 ;----------------------------------------------------------------
1780 ;|Mnemonic |SZHPNC|Description |Notes |
1781 ;----------------------------------------------------------------
1782 ;|DI |------|Disable Interrupts |IFF1 = IFF2 = 0 |
1783 ;|EI |------|Enable Interrupts |IFF1 = IFF2 = 1 |
1789 andi temp,~((1<<IFF2) | (1<<IFF1))
1797 ori temp,(1<<IFF2) | (1<<IFF1)
1802 ;----------------------------------------------------------------
1803 ;|Mnemonic |SZHPNC|Description |Notes |
1804 ;----------------------------------------------------------------
1805 ;|CALL cc,nn|------|Conditional Call |If cc CALL |
1806 ;|JP cc,nn |------|Conditional Jump |If cc JP |
1807 ;|RET cc |------|Conditional Return |If cc RET |
1814 pop temp ; direkt zurueck zu main
1817 ;----------------------------------------------------------------
1818 ;|Mnemonic |SZHPNC|Description |Notes |
1819 ;----------------------------------------------------------------
1820 ;|CALL cc,nn|------|Conditional Call |If cc CALL |
1821 ;|JP cc,nn |------|Conditional Jump |If cc JP |
1822 ;|RET cc |------|Conditional Return |If cc RET |
1829 pop temp ; direkt zurueck zu main
1832 ;----------------------------------------------------------------
1833 ;|Mnemonic |SZHPNC|Description |Notes |
1834 ;----------------------------------------------------------------
1835 ;|CALL cc,nn|------|Conditional Call |If cc CALL |
1836 ;|JP cc,nn |------|Conditional Jump |If cc JP |
1837 ;|RET cc |------|Conditional Return |If cc RET |
1844 pop temp ; direkt zuruech zu main
1847 ;----------------------------------------------------------------
1848 ;|Mnemonic |SZHPNC|Description |Notes |
1849 ;----------------------------------------------------------------
1850 ;|CALL cc,nn|------|Conditional Call |If cc CALL |
1851 ;|JP cc,nn |------|Conditional Jump |If cc JP |
1852 ;|RET cc |------|Conditional Return |If cc RET |
1859 pop temp ; direkt zuruech zu main
1862 ;----------------------------------------------------------------
1863 ;|Mnemonic |SZHPNC|Description |Notes |
1864 ;----------------------------------------------------------------
1865 ;|CALL cc,nn|------|Conditional Call |If cc CALL |
1866 ;|JP cc,nn |------|Conditional Jump |If cc JP |
1867 ;|RET cc |------|Conditional Return |If cc RET |
1874 pop temp ; direkt zuruech zu main
1877 ;----------------------------------------------------------------
1878 ;|Mnemonic |SZHPNC|Description |Notes |
1879 ;----------------------------------------------------------------
1880 ;|CALL cc,nn|------|Conditional Call |If cc CALL |
1881 ;|JP cc,nn |------|Conditional Jump |If cc JP |
1882 ;|RET cc |------|Conditional Return |If cc RET |
1889 pop temp ; direkt zuruech zu main
1892 ;----------------------------------------------------------------
1893 ;|Mnemonic |SZHPNC|Description |Notes |
1894 ;----------------------------------------------------------------
1895 ;|CALL cc,nn|------|Conditional Call |If cc CALL |
1896 ;|JP cc,nn |------|Conditional Jump |If cc JP |
1897 ;|RET cc |------|Conditional Return |If cc RET |
1900 do_op_ifp: ;sign positive, aka s=0
1904 pop temp ; direkt zuruech zu main
1907 ;----------------------------------------------------------------
1908 ;|Mnemonic |SZHPNC|Description |Notes |
1909 ;----------------------------------------------------------------
1910 ;|CALL cc,nn|------|Conditional Call |If cc CALL |
1911 ;|JP cc,nn |------|Conditional Jump |If cc JP |
1912 ;|RET cc |------|Conditional Return |If cc RET |
1915 do_op_ifm: ;sign negative, aka s=1
1919 pop temp ; direkt zuruech zu main
1922 ;----------------------------------------------------------------
1926 ;----------------------------------------------------------------
1927 ;|Mnemonic |SZHPNC|Description |Notes |
1928 ;----------------------------------------------------------------
1929 ;|DJNZ e |------|Dec., Jump Non-Zero |B=B-1 till B=0 |
1931 ;The b register is decremented, and if not zero, the signed value e is added to pc.
1932 ;The jump is measured from the start of the instruction opcode.
1933 ;e = Relative addressing (PC=PC+2+offset)
1938 do_op_DJNZ: ; decremt B, jump B=0
1939 dec z_b ; B decrementieren
1940 breq do_op_DJNZ_Z ; bei B=0
1941 subi opl, 0x80 ; z_pc + e im Zweierkomplement
1955 pop temp ; direkt zurueck zu main
1961 ;----------------------------------------------------------------
1962 ;|Mnemonic |SZHPNC|Description |Notes |
1963 ;----------------------------------------------------------------
1964 ;|EX AF,AF' |------|Exchange |AF<->AF' |
1976 ;----------------------------------------------------------------
1977 ;|Mnemonic |SZHPNC|Description |Notes |
1978 ;----------------------------------------------------------------
1979 ;|EXX |------|Exchange |qq<->qq' (except AF)|
2030 mem_read_ds zl,z_pc ;zl = memReadByte(z_pc)
2031 adiw z_pcl,1 ;++z_pc
2032 ldi zh,high(EDjmp) ;
2038 mem_read_ds zl,z_pc ;zl = memReadByte(z_pc)
2039 adiw z_pcl,1 ;++z_pc
2040 ldi zh,high(DDFDjmp) ;
2046 mem_read_ds zl,z_pc ;zl = memReadByte(z_pc)
2047 adiw z_pcl,1 ;++z_pc
2048 ldi zh,high(DDFDjmp) ;
2052 mem_read_ds zl,z_pc ;zl = memReadByte(z_pc)
2053 adiw z_pcl,1 ;++z_pc
2054 ldi zh,high(CBjmp) ;
2068 mem_read_s z_pc ;get displacement
2069 adiw z_pcl,1 ;++z_pc
2070 clr temp2 ;sign extend
2074 add xl,temp ;add displacement
2078 mem_read_ds zl,z_pc ;zl = opcode
2079 adiw z_pcl,1 ;++z_pc
2080 ldi zh,high(DDFDCBjmp) ;
2086 #else ; TODO: geht das so?
2098 ; ----------------------- Opcode decoding -------------------------
2100 ; Lookup table for Z80 opcodes. Translates the first byte of the instruction word into three
2101 ; operations: fetch, do something, store.
2102 ; The table is made of 256 words.
2104 opctable opcjmp, PC ;+3*256
2106 instr fetch_nop, op_nop, store_nop ;00 ;NOP
2107 instr fetch_DIR16, op_nop, store_BC ;01 nn nn ;LD BC,nn
2108 instr fetch_nop, op_nop, store_MBC ;02 ;LD (BC),A
2109 ;instr fetch_BC, op_INC16, store_BC ;03 ;INC BC
2110 instr fetch_nop, op_INCBC, store_nop ;03 ;INC BC
2111 instr fetch_B, op_INC, store_B ;04 ;INC B
2112 instr fetch_B, op_DEC, store_B ;05 ;DEC B
2113 instr fetch_DIR8, op_nop, store_B ;06 ;LD B,n
2114 instr fetch_nop, op_RLCA, store_nop ;07 ;RLCA
2115 instr fetch_nop, op_EXAF, store_nop ;08 ;EX AF,AF'
2116 instr fetch_BC, op_ADDHL, store_nop ;09 ;ADD HL,BC
2117 instr fetch_MBC, op_nop, store_nop ;0A ;LD A,(BC)
2118 ;instr fetch_BC, op_DEC16, store_BC ;0B ;DEC BC
2119 instr fetch_nop, op_DECBC, store_nop ;0B ;DEC BC
2120 instr fetch_C, op_INC, store_C ;0C ;INC C
2121 instr fetch_C, op_DEC, store_C ;0D ;DEC C
2122 instr fetch_DIR8, op_nop, store_C ;0E nn ;LD C,n
2123 instr fetch_nop, op_RRCA, store_nop ;0F ;RRCA
2124 instr fetch_DIR8, op_DJNZ, store_nop ;10 oo ;DJNZ o
2125 instr fetch_DIR16, op_nop, store_DE ;11 nn nn ;LD DE,nn
2126 instr fetch_nop, op_nop, store_MDE ;12 ;LD (DE),A
2127 ;instr fetch_DE, op_INC16, store_DE ;13 ;INC DE
2128 instr fetch_nop, op_INCDE, store_nop ;13 ;INC DE
2129 instr fetch_D, op_INC, store_D ;14 ;INC D
2130 instr fetch_D, op_DEC, store_D ;15 ;DEC D
2131 instr fetch_DIR8, op_nop, store_D ;16 nn ;LD D,n
2132 instr fetch_nop, op_RLA, store_nop ;17 ;RLA
2133 instr fetch_DIR8, op_nop, store_pcrel ;18 oo ;JR o
2134 instr fetch_DE, op_ADDHL, store_nop ;19 ;ADD HL,DE
2135 instr fetch_MDE, op_nop, store_nop ;1A ;LD A,(DE)
2136 ;instr fetch_DE, op_DEC16, store_DE ;1B ;DEC DE
2137 instr fetch_nop, op_DECDE, store_nop ;1B ;DEC DE
2138 instr fetch_E, op_INC, store_E ;1C ;INC E
2139 instr fetch_E, op_DEC, store_E ;1D ;DEC E
2140 instr fetch_DIR8, op_nop, store_E ;1E nn ;LD E,n
2141 instr fetch_nop, op_RRA, store_nop ;1F ;RRA
2142 instr fetch_DIR8, op_IFNZ, store_pcrel ;20 oo ;JR NZ,o
2143 instr fetch_DIR16, op_nop, store_HL ;21 nn nn ;LD HL,nn
2144 instr fetch_DIR16, op_STHL, store_nop ;22 nn nn ;LD (nn),HL
2145 ;instr fetch_HL, op_INC16, store_HL ;23 ;INC HL
2146 instr fetch_nop, op_INCHL, store_nop ;23 ;INC HL
2147 instr fetch_H, op_INC, store_H ;24 ;INC H
2148 instr fetch_H, op_DEC, store_H ;25 ;DEC H
2149 instr fetch_DIR8, op_nop, store_H ;26 nn ;LD H,n
2150 instr fetch_A, op_DAA, store_A ;27 ;DAA
2151 instr fetch_DIR8, op_IFZ, store_pcrel ;28 oo ;JR Z,o
2152 instr fetch_HL, op_ADDHL, store_nop ;29 ;ADD HL,HL
2153 instr fetch_DIR16, op_RMEM16, store_HL ;2A nn nn ;LD HL,(nn)
2154 ;instr fetch_HL, op_DEC16, store_HL ;2B ;DEC HL
2155 instr fetch_nop, op_DECHL, store_nop ;2B ;DEC HL
2156 instr fetch_L, op_INC, store_L ;2C ;INC L
2157 instr fetch_L, op_DEC, store_L ;2D ;DEC L
2158 instr fetch_DIR8, op_nop, store_L ;2E nn ;LD L,n
2159 instr fetch_nop, op_CPL, store_nop ;2F ;CPL
2160 instr fetch_DIR8, op_IFNC, store_pcrel ;30 oo ;JR NC,o
2161 instr fetch_DIR16, op_nop, store_SP ;31 nn nn ;LD SP,nn
2162 instr fetch_DIR16, op_nop, store_AM ;32 nn nn ;LD (nn),A
2163 instr fetch_SP, op_INC16, store_SP ;33 ;INC SP
2164 instr fetch_MHL, op_INC, store_MHL ;34 ;INC (HL)
2165 instr fetch_MHL, op_DEC, store_MHL ;35 ;DEC (HL)
2166 instr fetch_DIR8, op_nop, store_MHL ;36 nn ;LD (HL),n
2167 instr fetch_nop, op_SCF, store_nop ;37 ;SCF
2168 instr fetch_DIR8, op_IFC, store_pcrel ;38 oo ;JR C,o
2169 instr fetch_SP, op_ADDHL, store_nop ;39 ;ADD HL,SP
2170 instr fetch_DIR16, op_RMEM8, store_A ;3A nn nn ;LD A,(nn)
2171 instr fetch_SP, op_DEC16, store_SP ;3B ;DEC SP
2172 instr fetch_nop, op_INCA, store_nop ;3C ;INC A
2173 instr fetch_nop, op_DECA, store_nop ;3D ;DEC A
2174 instr fetch_DIR8, op_nop, store_A ;3E nn ;LD A,n
2175 instr fetch_nop, op_CCF, store_nop ;3F ;CCF (Complement Carry Flag, gvd)
2176 instr fetch_nop, op_nop, store_nop ;40 ;LD B,B
2177 instr fetch_C, op_nop, store_B ;41 ;LD B,C
2178 instr fetch_D, op_nop, store_B ;42 ;LD B,D
2179 instr fetch_E, op_nop, store_B ;43 ;LD B,E
2180 instr fetch_H, op_nop, store_B ;44 ;LD B,H
2181 instr fetch_L, op_nop, store_B ;45 ;LD B,L
2182 instr fetch_MHL, op_nop, store_B ;46 ;LD B,(HL)
2183 instr fetch_A, op_nop, store_B ;47 ;LD B,A
2184 instr fetch_B, op_nop, store_C ;48 ;LD C,B
2185 instr fetch_nop, op_nop, store_nop ;49 ;LD C,C
2186 instr fetch_D, op_nop, store_C ;4A ;LD C,D
2187 instr fetch_E, op_nop, store_C ;4B ;LD C,E
2188 instr fetch_H, op_nop, store_C ;4C ;LD C,H
2189 instr fetch_L, op_nop, store_C ;4D ;LD C,L
2190 instr fetch_MHL, op_nop, store_C ;4E ;LD C,(HL)
2191 instr fetch_A, op_nop, store_C ;4F ;LD C,A
2192 instr fetch_B, op_nop, store_D ;50 ;LD D,B
2193 instr fetch_C, op_nop, store_D ;51 ;LD D,C
2194 instr fetch_nop, op_nop, store_nop ;52 ;LD D,D
2195 instr fetch_E, op_nop, store_D ;53 ;LD D,E
2196 instr fetch_H, op_nop, store_D ;54 ;LD D,H
2197 instr fetch_L, op_nop, store_D ;55 ;LD D,L
2198 instr fetch_MHL, op_nop, store_D ;56 ;LD D,(HL)
2199 instr fetch_A, op_nop, store_D ;57 ;LD D,A
2200 instr fetch_B, op_nop, store_E ;58 ;LD E,B
2201 instr fetch_C, op_nop, store_E ;59 ;LD E,C
2202 instr fetch_D, op_nop, store_E ;5A ;LD E,D
2203 instr fetch_nop, op_nop, store_nop ;5B ;LD E,E
2204 instr fetch_H, op_nop, store_E ;5C ;LD E,H
2205 instr fetch_L, op_nop, store_E ;5D ;LD E,L
2206 instr fetch_MHL, op_nop, store_E ;5E ;LD E,(HL)
2207 instr fetch_A, op_nop, store_E ;5F ;LD E,A
2208 instr fetch_B, op_nop, store_H ;60 ;LD H,B
2209 instr fetch_C, op_nop, store_H ;61 ;LD H,C
2210 instr fetch_D, op_nop, store_H ;62 ;LD H,D
2211 instr fetch_E, op_nop, store_H ;63 ;LD H,E
2212 instr fetch_nop, op_nop, store_nop ;64 ;LD H,H
2213 instr fetch_L, op_nop, store_H ;65 ;LD H,L
2214 instr fetch_MHL, op_nop, store_H ;66 ;LD H,(HL)
2215 instr fetch_A, op_nop, store_H ;67 ;LD H,A
2216 instr fetch_B, op_nop, store_L ;68 ;LD L,B
2217 instr fetch_C, op_nop, store_L ;69 ;LD L,C
2218 instr fetch_D, op_nop, store_L ;6A ;LD L,D
2219 instr fetch_E, op_nop, store_L ;6B ;LD L,E
2220 instr fetch_H, op_nop, store_L ;6C ;LD L,H
2221 instr fetch_nop, op_nop, store_nop ;6D ;LD L,L
2222 instr fetch_MHL, op_nop, store_L ;6E ;LD L,(HL)
2223 instr fetch_A, op_nop, store_L ;6F ;LD L,A
2224 instr fetch_B, op_nop, store_MHL ;70 ;LD (HL),B
2225 instr fetch_C, op_nop, store_MHL ;71 ;LD (HL),C
2226 instr fetch_D, op_nop, store_MHL ;72 ;LD (HL),D
2227 instr fetch_E, op_nop, store_MHL ;73 ;LD (HL),E
2228 instr fetch_H, op_nop, store_MHL ;74 ;LD (HL),H
2229 instr fetch_L, op_nop, store_MHL ;75 ;LD (HL),L
2230 instr fetch_nop, op_HALT, store_nop ;76 ;HALT
2231 instr fetch_A, op_nop, store_MHL ;77 ;LD (HL),A
2232 instr fetch_B, op_nop, store_A ;78 ;LD A,B
2233 instr fetch_C, op_nop, store_A ;79 ;LD A,C
2234 instr fetch_D, op_nop, store_A ;7A ;LD A,D
2235 instr fetch_E, op_nop, store_A ;7B ;LD A,E
2236 instr fetch_H, op_nop, store_A ;7C ;LD A,H
2237 instr fetch_L, op_nop, store_A ;7D ;LD A,L
2238 instr fetch_MHL, op_nop, store_A ;7E ;LD A,(HL)
2239 instr fetch_nop, op_nop, store_nop ;7F ;LD A,A
2240 instr fetch_B, op_ADDA, store_nop ;80 ;ADD A,B
2241 instr fetch_C, op_ADDA, store_nop ;81 ;ADD A,C
2242 instr fetch_D, op_ADDA, store_nop ;82 ;ADD A,D
2243 instr fetch_E, op_ADDA, store_nop ;83 ;ADD A,E
2244 instr fetch_H, op_ADDA, store_nop ;84 ;ADD A,H
2245 instr fetch_L, op_ADDA, store_nop ;85 ;ADD A,L
2246 instr fetch_MHL, op_ADDA, store_nop ;86 ;ADD A,(HL)
2247 instr fetch_A, op_ADDA, store_nop ;87 ;ADD A,A
2248 instr fetch_B, op_ADCA, store_nop ;88 ;ADC A,B
2249 instr fetch_C, op_ADCA, store_nop ;89 ;ADC A,C
2250 instr fetch_D, op_ADCA, store_nop ;8A ;ADC A,D
2251 instr fetch_E, op_ADCA, store_nop ;8B ;ADC A,E
2252 instr fetch_H, op_ADCA, store_nop ;8C ;ADC A,H
2253 instr fetch_L, op_ADCA, store_nop ;8D ;ADC A,L
2254 instr fetch_MHL, op_ADCA, store_nop ;8E ;ADC A,(HL)
2255 instr fetch_A, op_ADCA, store_nop ;8F ;ADC A,A
2256 instr fetch_B, op_SUBFA, store_nop ;90 ;SUB A,B
2257 instr fetch_C, op_SUBFA, store_nop ;91 ;SUB A,C
2258 instr fetch_D, op_SUBFA, store_nop ;92 ;SUB A,D
2259 instr fetch_E, op_SUBFA, store_nop ;93 ;SUB A,E
2260 instr fetch_H, op_SUBFA, store_nop ;94 ;SUB A,H
2261 instr fetch_L, op_SUBFA, store_nop ;95 ;SUB A,L
2262 instr fetch_MHL, op_SUBFA, store_nop ;96 ;SUB A,(HL)
2263 instr fetch_A, op_SUBFA, store_nop ;97 ;SUB A,A
2264 instr fetch_B, op_SBCFA, store_nop ;98 ;SBC A,B
2265 instr fetch_C, op_SBCFA, store_nop ;99 ;SBC A,C
2266 instr fetch_D, op_SBCFA, store_nop ;9A ;SBC A,D
2267 instr fetch_E, op_SBCFA, store_nop ;9B ;SBC A,E
2268 instr fetch_H, op_SBCFA, store_nop ;9C ;SBC A,H
2269 instr fetch_L, op_SBCFA, store_nop ;9D ;SBC A,L
2270 instr fetch_MHL, op_SBCFA, store_nop ;9E ;SBC A,(HL)
2271 instr fetch_A, op_SBCFA, store_nop ;9F ;SBC A,A
2272 instr fetch_B, op_ANDA, store_nop ;A0 ;AND A,B
2273 instr fetch_C, op_ANDA, store_nop ;A1 ;AND A,C
2274 instr fetch_D, op_ANDA, store_nop ;A2 ;AND A,D
2275 instr fetch_E, op_ANDA, store_nop ;A3 ;AND A,E
2276 instr fetch_H, op_ANDA, store_nop ;A4 ;AND A,H
2277 instr fetch_L, op_ANDA, store_nop ;A5 ;AND A,L
2278 instr fetch_MHL, op_ANDA, store_nop ;A6 ;AND A,(HL)
2279 instr fetch_A, op_ANDA, store_nop ;A7 ;AND A,A
2280 instr fetch_B, op_XORA, store_nop ;A8 ;XOR A,B
2281 instr fetch_C, op_XORA, store_nop ;A9 ;XOR A,C
2282 instr fetch_D, op_XORA, store_nop ;AA ;XOR A,D
2283 instr fetch_E, op_XORA, store_nop ;AB ;XOR A,E
2284 instr fetch_H, op_XORA, store_nop ;AC ;XOR A,H
2285 instr fetch_L, op_XORA, store_nop ;AD ;XOR A,L
2286 instr fetch_MHL, op_XORA, store_nop ;AE ;XOR A,(HL)
2287 instr fetch_A, op_XORA, store_nop ;AF ;XOR A,A
2288 instr fetch_B, op_ORA, store_nop ;B0 ;OR A,B
2289 instr fetch_C, op_ORA, store_nop ;B1 ;OR A,C
2290 instr fetch_D, op_ORA, store_nop ;B2 ;OR A,D
2291 instr fetch_E, op_ORA, store_nop ;B3 ;OR A,E
2292 instr fetch_H, op_ORA, store_nop ;B4 ;OR A,H
2293 instr fetch_L, op_ORA, store_nop ;B5 ;OR A,L
2294 instr fetch_MHL, op_ORA, store_nop ;B6 ;OR A,(HL)
2295 instr fetch_A, op_ORA, store_nop ;B7 ;OR A,A
2296 instr fetch_B, op_CPFA, store_nop ;B8 ;CP A,B
2297 instr fetch_C, op_CPFA, store_nop ;B9 ;CP A,C
2298 instr fetch_D, op_CPFA, store_nop ;BA ;CP A,D
2299 instr fetch_E, op_CPFA, store_nop ;BB ;CP A,E
2300 instr fetch_H, op_CPFA, store_nop ;BC ;CP A,H
2301 instr fetch_L, op_CPFA, store_nop ;BD ;CP A,L
2302 instr fetch_MHL, op_CPFA, store_nop ;BE ;CP A,(HL)
2303 instr fetch_A, op_CPFA, store_nop ;BF ;CP A,A
2304 instr fetch_nop, op_IFNZ, store_RET ;C0 ;RET NZ
2305 instr fetch_nop, op_POP16, store_BC ;C1 ;POP BC
2306 instr fetch_DIR16, op_IFNZ, store_PC ;C2 nn nn ;JP NZ,nn
2307 instr fetch_DIR16, op_nop, store_PC ;C3 nn nn ;JP nn
2308 instr fetch_DIR16, op_IFNZ, store_CALL ;C4 nn nn ;CALL NZ,nn
2309 instr fetch_BC, op_PUSH16, store_nop ;C5 ;PUSH BC
2310 instr fetch_DIR8, op_ADDA, store_nop ;C6 nn ;ADD A,n
2311 instr fetch_RST, op_nop, store_CALL ;C7 ;RST 0
2312 instr fetch_nop, op_IFZ, store_RET ;C8 ;RET Z
2313 instr fetch_nop, op_nop, store_RET ;C9 ;RET
2314 instr fetch_DIR16, op_IFZ, store_PC ;CA nn nn ;JP Z,nn
2315 instr fetch_nop, op_prefixCB, store_nop ;CB ;(CB opcode prefix)
2316 instr fetch_DIR16, op_IFZ, store_CALL ;CC nn nn ;CALL Z,nn
2317 instr fetch_DIR16, op_nop, store_CALL ;CD nn nn ;CALL nn
2318 instr fetch_DIR8, op_ADCA, store_nop ;CE nn ;ADC A,n
2319 instr fetch_RST, op_nop, store_CALL ;CF ;RST 8H
2320 instr fetch_nop, op_IFNC, store_RET ;D0 ;RET NC
2321 instr fetch_nop, op_POP16, store_DE ;D1 ;POP DE
2322 instr fetch_DIR16, op_IFNC, store_PC ;D2 nn nn ;JP NC,nn
2323 instr fetch_DIR8, op_OUTA, store_nop ;D3 nn ;OUT (n),A
2324 instr fetch_DIR16, op_IFNC, store_CALL ;D4 nn nn ;CALL NC,nn
2325 instr fetch_DE, op_PUSH16, store_nop ;D5 ;PUSH DE
2326 instr fetch_DIR8, op_SUBFA, store_nop ;D6 nn ;SUB n
2327 instr fetch_RST, op_nop, store_CALL ;D7 ;RST 10H
2328 instr fetch_nop, op_IFC, store_RET ;D8 ;RET C
2329 instr fetch_nop, op_EXX, store_nop ;D9 ;EXX
2330 instr fetch_DIR16, op_IFC, store_PC ;DA nn nn ;JP C,nn
2331 instr fetch_DIR8, op_INA, store_nop ;DB nn ;IN A,(n)
2332 instr fetch_DIR16, op_IFC, store_CALL ;DC nn nn ;CALL C,nn
2333 instr fetch_nop, op_prefixDD, store_nop ;DD ;(DD opcode prefix)
2334 instr fetch_DIR8, op_SBCFA, store_nop ;DE nn ;SBC A,n
2335 instr fetch_RST, op_nop, store_CALL ;DF ;RST 18H
2336 instr fetch_nop, op_IFPO, store_RET ;E0 ;RET PO
2337 instr fetch_nop, op_POP16, store_HL ;E1 ;POP HL
2338 instr fetch_DIR16, op_IFPO, store_PC ;E2 nn nn ;JP PO,nn
2339 instr fetch_MSP, op_EXHL, store_MSP ;E3 ;EX (SP),HL
2340 instr fetch_DIR16, op_IFPO, store_CALL ;E4 nn nn ;CALL PO,nn
2341 instr fetch_HL, op_PUSH16, store_nop ;E5 ;PUSH HL
2342 instr fetch_DIR8, op_ANDA, store_nop ;E6 nn ;AND n
2343 instr fetch_RST, op_nop, store_CALL ;E7 ;RST 20H
2344 instr fetch_nop, op_IFPE, store_RET ;E8 ;RET PE
2345 instr fetch_HL, op_nop, store_PC ;E9 ;JP HL
2346 instr fetch_DIR16, op_IFPE, store_PC ;EA nn nn ;JP PE,nn
2347 instr fetch_DE, op_EXHL, store_DE ;EB ;EX DE,HL
2348 instr fetch_DIR16, op_IFPE, store_CALL ;EC nn nn ;CALL PE,nn
2349 instr fetch_nop, op_prefixED, store_nop ;ED ;(ED opcode prefix)
2350 instr fetch_DIR8, op_XORA, store_nop ;EE nn ;XOR n
2351 instr fetch_RST, op_nop, store_CALL ;EF ;RST 28H
2352 instr fetch_nop, op_IFP, store_RET ;F0 ;RET P
2353 instr fetch_nop, op_POP16, store_AF ;F1 ;POP AF
2354 instr fetch_DIR16, op_IFP, store_PC ;F2 nn nn ;JP P,nn
2355 instr fetch_nop, op_DI, store_nop ;F3 ;DI
2356 instr fetch_DIR16, op_IFP, store_CALL ;F4 nn nn ;CALL P,nn
2357 instr fetch_AF, op_PUSH16, store_nop ;F5 ;PUSH AF
2358 instr fetch_DIR8, op_ORA, store_nop ;F6 nn ;OR n
2359 instr fetch_RST, op_nop, store_CALL ;F7 ;RST 30H
2360 instr fetch_nop, op_IFM, store_RET ;F8 ;RET M
2361 instr fetch_HL, op_nop, store_SP ;F9 ;LD SP,HL
2362 instr fetch_DIR16, op_IFM, store_PC ;FA nn nn ;JP M,nn
2363 instr fetch_nop, op_EI, store_nop ;FB ;EI
2364 instr fetch_DIR16, op_IFM, store_CALL ;FC nn nn ;CALL M,nn
2365 instr fetch_nop, op_prefixFD, store_nop ;FD ;(FD opcode prefix)
2366 instr fetch_DIR8, op_CPFA, store_nop ;FE nn ;CP n
2367 instr fetch_RST, op_nop, store_CALL ;FF ;RST 38H
2377 sbiw z_pcl,1 ;--z_pc
2419 mem_read_ds opl, z_pc ;get displacement
2421 clr oph ;sign extend
2426 add xl,opl ;add displacement
2428 mem_read_d opl ;get operand
2429 ret ;(Ix+d) still in xl,xh
2475 mem_read_s z_pc ;get displacement
2477 clr temp2 ;sign extend
2482 add xl,temp ;add displacement
2484 mem_write_s opl ;store operand
2490 mem_write_s opl ;store operand
2505 mem_read_s z_pc ;get displacement
2508 clr temp2 ;sign extend
2513 add xl,temp ;add displacement
2515 mem_write_s opl ;store operand
2531 ;----------------------------------------------------------------
2532 ;|Mnemonic |SZHPNC|Description |Notes |
2533 ;----------------------------------------------------------------
2534 ;|LD dst,src|------|Load |dst=src |
2539 do_op_stxx: ;store xx to mem loc in opl:h
2556 ;----------------------------------------------------------------
2557 ;|Mnemonic |SZHPNC|Description |Notes |
2558 ;----------------------------------------------------------------
2559 ;|EX [SP],IX|------|Exchange |[SP]<->IX |
2560 ;|EX [SP],IY|------|Exchange |[SP]<->IY |
2581 ;----------------------------------------------------------------
2582 ;|Mnemonic |SZHPNC|Description |Notes |
2583 ;----------------------------------------------------------------
2584 ;|ADD IX,pp |--*-0*|Add |IX=IX+pp |
2585 ;|ADD IY,rr |--*-0*|Add |IY=IY+rr |
2609 bmov z_flags,ZFL_C, temp,AVR_C
2611 do_z80_flags_clear_N
2615 opctable DDFDjmp, PC ;+256
2617 instr fetch_nop, op_noni, store_nop ;00 ;
2618 instr fetch_nop, op_noni, store_nop ;01 ;
2619 instr fetch_nop, op_noni, store_nop ;02 ;
2620 instr fetch_nop, op_noni, store_nop ;03 ;
2621 instr fetch_nop, op_noni, store_nop ;04 ;
2622 instr fetch_nop, op_noni, store_nop ;05 ;
2623 instr fetch_nop, op_noni, store_nop ;06 ;
2624 instr fetch_nop, op_noni, store_nop ;07 ;
2625 instr fetch_nop, op_noni, store_nop ;08 ;
2626 instr fetch_BC, op_ADDxx, store_nop ;09 ;ADD xx,BC
2627 instr fetch_nop, op_noni, store_nop ;0A ;
2628 instr fetch_nop, op_noni, store_nop ;0B ;
2629 instr fetch_nop, op_noni, store_nop ;0C ;
2630 instr fetch_nop, op_noni, store_nop ;0D ;
2631 instr fetch_nop, op_noni, store_nop ;0E ;
2632 instr fetch_nop, op_noni, store_nop ;0F ;
2633 instr fetch_nop, op_noni, store_nop ;10 ;
2634 instr fetch_nop, op_noni, store_nop ;11 ;
2635 instr fetch_nop, op_noni, store_nop ;12 ;
2636 instr fetch_nop, op_noni, store_nop ;13 ;
2637 instr fetch_nop, op_noni, store_nop ;14 ;
2638 instr fetch_nop, op_noni, store_nop ;15 ;
2639 instr fetch_nop, op_noni, store_nop ;16 ;
2640 instr fetch_nop, op_noni, store_nop ;17 ;
2641 instr fetch_nop, op_noni, store_nop ;18 ;
2642 instr fetch_DE, op_ADDxx, store_nop ;19 ;ADD xx,DE
2643 instr fetch_nop, op_noni, store_nop ;1A ;
2644 instr fetch_nop, op_noni, store_nop ;1B ;
2645 instr fetch_nop, op_noni, store_nop ;1C ;
2646 instr fetch_nop, op_noni, store_nop ;1D ;
2647 instr fetch_nop, op_noni, store_nop ;1E ;
2648 instr fetch_nop, op_noni, store_nop ;1F ;
2649 instr fetch_nop, op_noni, store_nop ;20 ;
2650 instr fetch_DIR16, op_nop, store_xx ;21 ;LD xx,nn
2651 instr fetch_DIR16, op_STxx, store_nop ;22 ;LD (nn),xx
2652 instr fetch_xx, op_INC16, store_xx ;23 ;INC xx
2653 instr fetch_xH, op_INC, store_xH ;24 ;INC xh
2654 instr fetch_xH, op_DEC, store_xH ;25 ;DEC xh
2655 instr fetch_DIR8, op_nop, store_xH ;26 ;LD xh,n
2656 instr fetch_nop, op_noni, store_nop ;27 ;
2657 instr fetch_nop, op_noni, store_nop ;28 ;
2658 instr fetch_xx, op_ADDxx, store_nop ;29 ;ADD xx,xx
2659 instr fetch_DIR16, op_RMEM16, store_xx ;2A ;LD xx,(nn)
2660 instr fetch_xx, op_DEC16, store_xx ;2B ;DEC xx
2661 instr fetch_xL, op_INC, store_xL ;2C ;INC xl
2662 instr fetch_xL, op_DEC, store_xL ;2D ;DEC xl
2663 instr fetch_DIR8, op_nop, store_xL ;2E ;LD xl,n
2664 instr fetch_nop, op_noni, store_nop ;2F ;
2665 instr fetch_nop, op_noni, store_nop ;30 ;
2666 instr fetch_nop, op_noni, store_nop ;31 ;
2667 instr fetch_nop, op_noni, store_nop ;32 ;
2668 instr fetch_nop, op_noni, store_nop ;33 ;
2669 instr fetch_MXX, op_INC, store_MXX_0 ;34 ;INC (xx+d)
2670 instr fetch_MXX, op_DEC, store_MXX_0 ;35 ;DEC (xx+d)
2671 instr fetch_DIR8_2, op_nop, store_MXX_2 ;36 ;LD (xx+d),n
2672 instr fetch_nop, op_noni, store_nop ;37 ;
2673 instr fetch_nop, op_noni, store_nop ;38 ;
2674 instr fetch_SP, op_ADDxx, store_nop ;39 ;ADD xx,SP
2675 instr fetch_nop, op_noni, store_nop ;3A ;
2676 instr fetch_nop, op_noni, store_nop ;3B ;
2677 instr fetch_nop, op_noni, store_nop ;3C ;
2678 instr fetch_nop, op_noni, store_nop ;3D ;
2679 instr fetch_nop, op_noni, store_nop ;3E ;
2680 instr fetch_nop, op_noni, store_nop ;3F ;
2681 instr fetch_nop, op_noni, store_nop ;40 ;
2682 instr fetch_nop, op_noni, store_nop ;41 ;
2683 instr fetch_nop, op_noni, store_nop ;42 ;
2684 instr fetch_nop, op_noni, store_nop ;43 ;
2685 instr fetch_xH, op_nop, store_B ;44 ;LD B,xh
2686 instr fetch_xL, op_nop, store_B ;45 ;LD B,xl
2687 instr fetch_MXX, op_nop, store_B ;46 ;LD B,(xx+d)
2688 instr fetch_nop, op_noni, store_nop ;47 ;
2689 instr fetch_nop, op_noni, store_nop ;48 ;
2690 instr fetch_nop, op_noni, store_nop ;49 ;
2691 instr fetch_nop, op_noni, store_nop ;4A ;
2692 instr fetch_nop, op_noni, store_nop ;4B ;
2693 instr fetch_xH, op_nop, store_C ;4C ;LD C,xh
2694 instr fetch_xL, op_nop, store_C ;4D ;LD C,xl
2695 instr fetch_MXX, op_nop, store_C ;4E ;LD C,(xx+d)
2696 instr fetch_nop, op_noni, store_nop ;4F ;
2697 instr fetch_nop, op_noni, store_nop ;50 ;
2698 instr fetch_nop, op_noni, store_nop ;51 ;
2699 instr fetch_nop, op_noni, store_nop ;52 ;
2700 instr fetch_nop, op_noni, store_nop ;53 ;
2701 instr fetch_xH, op_nop, store_D ;54 ;LD D,xh
2702 instr fetch_xL, op_nop, store_D ;55 ;LD D,xl
2703 instr fetch_MXX, op_nop, store_D ;56 ;LD D,(xx+d)
2704 instr fetch_nop, op_noni, store_nop ;57 ;
2705 instr fetch_nop, op_noni, store_nop ;58 ;
2706 instr fetch_nop, op_noni, store_nop ;59 ;
2707 instr fetch_nop, op_noni, store_nop ;5A ;
2708 instr fetch_nop, op_noni, store_nop ;5B ;
2709 instr fetch_xH, op_nop, store_E ;5C ;LD E,xh
2710 instr fetch_xL, op_nop, store_E ;5D ;LD E,xl
2711 instr fetch_MXX, op_nop, store_E ;5E ;LD E,(xx+d)
2712 instr fetch_nop, op_noni, store_nop ;5F ;
2713 instr fetch_B, op_nop, store_xH ;60 ;LD xh,B
2714 instr fetch_C, op_nop, store_xH ;61 ;LD xh,C
2715 instr fetch_D, op_nop, store_xH ;62 ;LD xh,D
2716 instr fetch_E, op_nop, store_xH ;63 ;LD xh,E
2717 instr fetch_nop, op_noni, store_nop ;64 ;LD xh,xh
2718 instr fetch_xL, op_nop, store_xH ;65 ;LD xh,xl
2719 instr fetch_MXX, op_nop, store_H ;66 ;LD H,(xx+d)
2720 instr fetch_A, op_nop, store_xH ;67 ;LD xh,A
2721 instr fetch_B, op_nop, store_xL ;68 ;LD xl,B
2722 instr fetch_C, op_nop, store_xL ;69 ;LD xl,C
2723 instr fetch_D, op_nop, store_xL ;6A ;LD xl,D
2724 instr fetch_E, op_nop, store_xL ;6B ;LD xl,E
2725 instr fetch_xH, op_nop, store_xL ;6C ;LD xl,xh
2726 instr fetch_nop, op_noni, store_nop ;6D ;LD xl,xl
2727 instr fetch_MXX, op_nop, store_L ;6E ;LD L,(xx+d)
2728 instr fetch_A, op_nop, store_xL ;6F ;LD xl,A
2729 instr fetch_B, op_nop, store_MXX ;70 ;LD (xx+d),B
2730 instr fetch_C, op_nop, store_MXX ;71 ;LD (xx+d),C
2731 instr fetch_D, op_nop, store_MXX ;72 ;LD (xx+d),D
2732 instr fetch_E, op_nop, store_MXX ;73 ;LD (xx+d),E
2733 instr fetch_H, op_nop, store_MXX ;74 ;LD (xx+d),H
2734 instr fetch_L, op_nop, store_MXX ;75 ;LD (xx+d),L
2735 instr fetch_nop, op_noni, store_nop ;76 ;
2736 instr fetch_A, op_nop, store_MXX ;77 ;LD (xx+d),A
2737 instr fetch_nop, op_noni, store_nop ;78 ;
2738 instr fetch_nop, op_noni, store_nop ;79 ;
2739 instr fetch_nop, op_noni, store_nop ;7A ;
2740 instr fetch_nop, op_noni, store_nop ;7B ;
2741 instr fetch_xH, op_nop, store_A ;7C ;LD A,xh
2742 instr fetch_xL, op_nop, store_A ;7D ;LD A,xl
2743 instr fetch_MXX, op_nop, store_A ;7E ;LD A,(xx+d)
2744 instr fetch_nop, op_noni, store_nop ;7F ;
2745 instr fetch_nop, op_noni, store_nop ;80 ;
2746 instr fetch_nop, op_noni, store_nop ;81 ;
2747 instr fetch_nop, op_noni, store_nop ;82 ;
2748 instr fetch_nop, op_noni, store_nop ;83 ;
2749 instr fetch_xH, op_ADDA, store_nop ;84 ;ADD A,xh
2750 instr fetch_xL, op_ADDA, store_nop ;85 ;ADD A,xl
2751 instr fetch_MXX, op_ADDA, store_nop ;86 ;ADD A,(xx)
2752 instr fetch_nop, op_noni, store_nop ;87 ;
2753 instr fetch_nop, op_noni, store_nop ;88 ;
2754 instr fetch_nop, op_noni, store_nop ;89 ;
2755 instr fetch_nop, op_noni, store_nop ;8A ;
2756 instr fetch_nop, op_noni, store_nop ;8B ;
2757 instr fetch_xH, op_ADCA, store_nop ;8C ;ADC A,xh
2758 instr fetch_xL, op_ADCA, store_nop ;8D ;ADC A,xl
2759 instr fetch_MXX, op_ADCA, store_nop ;8E ;ADC A,(xx)
2760 instr fetch_nop, op_noni, store_nop ;8F ;
2761 instr fetch_nop, op_noni, store_nop ;90 ;
2762 instr fetch_nop, op_noni, store_nop ;91 ;
2763 instr fetch_nop, op_noni, store_nop ;92 ;
2764 instr fetch_nop, op_noni, store_nop ;93 ;
2765 instr fetch_xH, op_SUBFA, store_nop ;94 ;SUB A,xh
2766 instr fetch_xL, op_SUBFA, store_nop ;95 ;SUB A,xl
2767 instr fetch_MXX, op_SUBFA, store_nop ;96 ;SUB A,(xx)
2768 instr fetch_nop, op_noni, store_nop ;97 ;
2769 instr fetch_nop, op_noni, store_nop ;98 ;
2770 instr fetch_nop, op_noni, store_nop ;99 ;
2771 instr fetch_nop, op_noni, store_nop ;9A ;
2772 instr fetch_nop, op_noni, store_nop ;9B ;
2773 instr fetch_xH, op_SBCFA, store_nop ;9C ;SBC A,xh
2774 instr fetch_xL, op_SBCFA, store_nop ;9D ;SBC A,xl
2775 instr fetch_MXX, op_SBCFA, store_nop ;9E ;SBC A,(xx)
2776 instr fetch_nop, op_noni, store_nop ;9F ;
2777 instr fetch_nop, op_noni, store_nop ;A0 ;
2778 instr fetch_nop, op_noni, store_nop ;A1 ;
2779 instr fetch_nop, op_noni, store_nop ;A2 ;
2780 instr fetch_nop, op_noni, store_nop ;A3 ;
2781 instr fetch_xH, op_ANDA, store_nop ;A4 ;AND A,xh
2782 instr fetch_xL, op_ANDA, store_nop ;A5 ;AND A,xl
2783 instr fetch_MXX, op_ANDA, store_nop ;A6 ;AND A,(xx)
2784 instr fetch_nop, op_noni, store_nop ;A7 ;
2785 instr fetch_nop, op_noni, store_nop ;A8 ;
2786 instr fetch_nop, op_noni, store_nop ;A9 ;
2787 instr fetch_nop, op_noni, store_nop ;AA ;
2788 instr fetch_nop, op_noni, store_nop ;AB ;
2789 instr fetch_xH, op_XORA, store_nop ;AC ;XOR A,xh
2790 instr fetch_xL, op_XORA, store_nop ;AD ;XOR A,xl
2791 instr fetch_MXX, op_XORA, store_nop ;AE ;XOR A,(xx)
2792 instr fetch_nop, op_noni, store_nop ;AF ;
2793 instr fetch_nop, op_noni, store_nop ;B0 ;
2794 instr fetch_nop, op_noni, store_nop ;B1 ;
2795 instr fetch_nop, op_noni, store_nop ;B2 ;
2796 instr fetch_nop, op_noni, store_nop ;B3 ;
2797 instr fetch_xH, op_ORA, store_nop ;B4 ;OR A,xh
2798 instr fetch_xL, op_ORA, store_nop ;B5 ;OR A,xl
2799 instr fetch_MXX, op_ORA, store_nop ;B6 ;OR A,(xx)
2800 instr fetch_nop, op_noni, store_nop ;B7 ;
2801 instr fetch_nop, op_noni, store_nop ;B8 ;
2802 instr fetch_nop, op_noni, store_nop ;B9 ;
2803 instr fetch_nop, op_noni, store_nop ;BA ;
2804 instr fetch_nop, op_noni, store_nop ;BB ;
2805 instr fetch_xH, op_CPFA, store_nop ;BC ;CP A,xh
2806 instr fetch_xL, op_CPFA, store_nop ;BD ;CP A,xl
2807 instr fetch_MXX, op_CPFA, store_nop ;BE ;CP A,(xx)
2808 instr fetch_nop, op_noni, store_nop ;BF ;
2809 instr fetch_nop, op_noni, store_nop ;C0 ;
2810 instr fetch_nop, op_noni, store_nop ;C1 ;
2811 instr fetch_nop, op_noni, store_nop ;C2 ;
2812 instr fetch_nop, op_noni, store_nop ;C3 ;
2813 instr fetch_nop, op_noni, store_nop ;C4 ;
2814 instr fetch_nop, op_noni, store_nop ;C5 ;
2815 instr fetch_nop, op_noni, store_nop ;C6 ;
2816 instr fetch_nop, op_noni, store_nop ;C7 ;
2817 instr fetch_nop, op_noni, store_nop ;C8 ;
2818 instr fetch_nop, op_noni, store_nop ;C9 ;
2819 instr fetch_nop, op_noni, store_nop ;CA ;
2820 instr fetch_nop, op_prefixDDFDCB,store_nop ;CB ;
2821 instr fetch_nop, op_noni, store_nop ;CC ;
2822 instr fetch_nop, op_noni, store_nop ;CD ;
2823 instr fetch_nop, op_noni, store_nop ;CE ;
2824 instr fetch_nop, op_noni, store_nop ;CF ;
2825 instr fetch_nop, op_noni, store_nop ;D0 ;
2826 instr fetch_nop, op_noni, store_nop ;D1 ;
2827 instr fetch_nop, op_noni, store_nop ;D2 ;
2828 instr fetch_nop, op_noni, store_nop ;D3 ;
2829 instr fetch_nop, op_noni, store_nop ;D4 ;
2830 instr fetch_nop, op_noni, store_nop ;D5 ;
2831 instr fetch_nop, op_noni, store_nop ;D6 ;
2832 instr fetch_nop, op_noni, store_nop ;D7 ;
2833 instr fetch_nop, op_noni, store_nop ;D8 ;
2834 instr fetch_nop, op_noni, store_nop ;D9 ;
2835 instr fetch_nop, op_noni, store_nop ;DA ;
2836 instr fetch_nop, op_noni, store_nop ;DB ;
2837 instr fetch_nop, op_noni, store_nop ;DC ;
2838 instr fetch_nop, op_noni, store_nop ;DD ;
2839 instr fetch_nop, op_noni, store_nop ;DE ;
2840 instr fetch_nop, op_noni, store_nop ;DF ;
2841 instr fetch_nop, op_noni, store_nop ;E0 ;
2842 instr fetch_nop, op_POP16, store_xx ;E1 ;POP xx
2843 instr fetch_nop, op_noni, store_nop ;E2 ;
2844 instr fetch_MSP, op_EXxx, store_MSP ;E3 ;EX (SP),xx
2845 instr fetch_nop, op_noni, store_nop ;E4 ;
2846 instr fetch_xx, op_PUSH16, store_nop ;E5 ;PUSH xx
2847 instr fetch_nop, op_noni, store_nop ;E6 ;
2848 instr fetch_nop, op_noni, store_nop ;E7 ;
2849 instr fetch_nop, op_noni, store_nop ;E8 ;
2850 instr fetch_xx, op_nop, store_PC ;E9 ;JP xx
2851 instr fetch_nop, op_noni, store_nop ;EA ;
2852 instr fetch_nop, op_noni, store_nop ;EB ;
2853 instr fetch_nop, op_noni, store_nop ;EC ;
2854 instr fetch_nop, op_noni, store_nop ;ED ;
2855 instr fetch_nop, op_noni, store_nop ;EE ;
2856 instr fetch_nop, op_noni, store_nop ;EF ;
2857 instr fetch_nop, op_noni, store_nop ;F0 ;
2858 instr fetch_nop, op_noni, store_nop ;F1 ;
2859 instr fetch_nop, op_noni, store_nop ;F2 ;
2860 instr fetch_nop, op_noni, store_nop ;F3 ;
2861 instr fetch_nop, op_noni, store_nop ;F4 ;
2862 instr fetch_nop, op_noni, store_nop ;F5 ;
2863 instr fetch_nop, op_noni, store_nop ;F6 ;
2864 instr fetch_nop, op_noni, store_nop ;F7 ;
2865 instr fetch_nop, op_noni, store_nop ;F8 ;
2866 instr fetch_xx, op_nop, store_SP ;F9 ;LD SP,xx
2867 instr fetch_nop, op_noni, store_nop ;FA ;
2868 instr fetch_nop, op_noni, store_nop ;FB ;
2869 instr fetch_nop, op_noni, store_nop ;FC ;
2870 instr fetch_nop, op_noni, store_nop ;FD ;
2871 instr fetch_nop, op_noni, store_nop ;FE ;
2872 instr fetch_nop, op_noni, store_nop ;FF ;
2876 ;----------------------------------------------------------------
2877 ;|Mnemonic |SZHPNC|Description |Notes |
2878 ;----------------------------------------------------------------
2879 ;|RLC m |**0P0*|Rotate Left Circular |m=m<- |
2880 ;|RRC m |**0P0*|Rotate Right Circular|m=->m |
2881 ;|RL m |**0P0*|Rotate Left |m={CY,m}<- |
2882 ;|RR m |**0P0*|Rotate Right |m=->{CY,m} |
2883 ;|SLA m |**0P0*|Shift Left Arithmetic|m=m*2 |
2884 ;|SRA m |**0P0*|Shift Right Arith. |m=m/2 |
2885 ;|SLL m |**0P0*|Shift Right Logical |
2886 ;|SRL m |**0P0*|Shift Right Logical |m=->{0,m,CY} |
2892 ;Rotate Left Cyclical. All bits move 1 to the
2893 ;left, the msb becomes c and lsb.
2898 ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N
2905 ;Rotate Right Cyclical. All bits move 1 to the
2906 ;right, the lsb becomes c and msb.
2910 ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N
2911 bmov z_flags,ZFL_C, opl,7
2918 ;Rotate Left. All bits move 1 to the left, the msb
2919 ;becomes c, c becomes lsb.
2925 ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N
2926 bmov z_flags,ZFL_C, temp,AVR_C
2933 ;Rotate Right. All bits move 1 to the right, the lsb
2934 ;becomes c, c becomes msb.
2938 bmov opl,7, z_flags,ZFL_C ;old CY --> Bit 7
2939 ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N
2940 bmov z_flags,ZFL_C, temp,AVR_C ;
2948 ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N
2949 bmov z_flags,ZFL_C, temp,AVR_C ;
2957 bmov opl,7, opl,6 ;old CY --> Bit 7
2958 ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N
2959 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 ;
2977 ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N
2978 bmov z_flags,ZFL_C, temp,AVR_C ;
2981 ;----------------------------------------------------------------
2982 ;|Mnemonic |SZHPNC|Description |Notes |
2983 ;----------------------------------------------------------------
2984 ;|BIT b,m |?*1?0-|Test Bit |m&{2^b} |
2985 ;|RES b,m |------|Reset bit |m=m&{~2^b} |
2986 ;|SET b,m |------|Set bit |m=mv{2^b} |
3022 andi z_flags,~((1<<ZFL_N)|(1<<ZFL_Z))
3023 ori z_flags,(1<<ZFL_H)
3026 ori z_flags,(1<<ZFL_Z)
3144 ;.macro m_do_store_b
3147 ;.equ do_store_b = 0
3186 mem_read_ds opl, z_hl
3189 opctable CBjmp, PC ;+256
3191 instr fetch_B, op_RLC, store2_B ;00 ;RLC B
3192 instr fetch_C, op_RLC, store2_C ;01 ;RLC C
3193 instr fetch_D, op_RLC, store2_D ;02 ;RLC D
3194 instr fetch_E, op_RLC, store2_E ;03 ;RLC E
3195 instr fetch_H, op_RLC, store2_H ;04 ;RLC H
3196 instr fetch_L, op_RLC, store2_L ;05 ;RLC L
3197 instr fetch2_mhl, op_RLC, store_MHL ;06 ;RLC (HL)
3198 instr fetch_A, op_RLC, store2_A ;07 ;RLC A
3199 instr fetch_B, op_RRC, store2_B ;08 ;RRC B
3200 instr fetch_C, op_RRC, store2_C ;09 ;RRC C
3201 instr fetch_D, op_RRC, store2_D ;0A ;RRC D
3202 instr fetch_E, op_RRC, store2_E ;0B ;RRC E
3203 instr fetch_H, op_RRC, store2_H ;0C ;RRC H
3204 instr fetch_L, op_RRC, store2_L ;0D ;RRC L
3205 instr fetch2_mhl, op_RRC, store_MHL ;0E ;RRC (HL)
3206 instr fetch_A, op_RRC, store2_A ;0F ;RRC A
3207 instr fetch_B, op_RL, store2_B ;10 ;RL B
3208 instr fetch_C, op_RL, store2_C ;11 ;RL C
3209 instr fetch_D, op_RL, store2_D ;12 ;RL D
3210 instr fetch_E, op_RL, store2_E ;13 ;RL E
3211 instr fetch_H, op_RL, store2_H ;14 ;RL H
3212 instr fetch_L, op_RL, store2_L ;15 ;RL L
3213 instr fetch2_mhl, op_RL, store_MHL ;16 ;RL (HL)
3214 instr fetch_A, op_RL, store2_A ;17 ;RL A
3215 instr fetch_B, op_RR, store2_B ;18 ;RR B
3216 instr fetch_C, op_RR, store2_C ;19 ;RR C
3217 instr fetch_D, op_RR, store2_D ;1A ;RR D
3218 instr fetch_E, op_RR, store2_E ;1B ;RR E
3219 instr fetch_H, op_RR, store2_H ;1C ;RR H
3220 instr fetch_L, op_RR, store2_L ;1D ;RR L
3221 instr fetch2_mhl, op_RR, store_MHL ;1E ;RR (HL)
3222 instr fetch_A, op_RR, store2_A ;1F ;RR A
3223 instr fetch_B, op_SLA, store2_B ;20 ;SLA B
3224 instr fetch_C, op_SLA, store2_C ;21 ;SLA C
3225 instr fetch_D, op_SLA, store2_D ;22 ;SLA D
3226 instr fetch_E, op_SLA, store2_E ;23 ;SLA E
3227 instr fetch_H, op_SLA, store2_H ;24 ;SLA H
3228 instr fetch_L, op_SLA, store2_L ;25 ;SLA L
3229 instr fetch2_mhl, op_SLA, store_MHL ;26 ;SLA (HL)
3230 instr fetch_A, op_SLA, store2_A ;27 ;SLA A
3231 instr fetch_B, op_SRA, store2_B ;28 ;SRA B
3232 instr fetch_C, op_SRA, store2_C ;29 ;SRA C
3233 instr fetch_D, op_SRA, store2_D ;2A ;SRA D
3234 instr fetch_E, op_SRA, store2_E ;2B ;SRA E
3235 instr fetch_H, op_SRA, store2_H ;2C ;SRA H
3236 instr fetch_L, op_SRA, store2_L ;2D ;SRA L
3237 instr fetch2_mhl, op_SRA, store_MHL ;2E ;SRA (HL)
3238 instr fetch_A, op_SRA, store2_A ;2F ;SRA A
3239 instr fetch_B, op_SLL, store2_B ;30 ;SLL B
3240 instr fetch_C, op_SLL, store2_C ;31 ;SLL C
3241 instr fetch_D, op_SLL, store2_D ;32 ;SLL D
3242 instr fetch_E, op_SLL, store2_E ;33 ;SLL E
3243 instr fetch_H, op_SLL, store2_H ;34 ;SLL H
3244 instr fetch_L, op_SLL, store2_L ;35 ;SLL L
3245 instr fetch2_mhl, op_SLL, store_MHL ;36 ;SLL (HL)
3246 instr fetch_A, op_SLL, store2_A ;37 ;SLL A
3247 instr fetch_B, op_SRL, store2_B ;38 ;SRL B
3248 instr fetch_C, op_SRL, store2_C ;39 ;SRL C
3249 instr fetch_D, op_SRL, store2_D ;3A ;SRL D
3250 instr fetch_E, op_SRL, store2_E ;3B ;SRL E
3251 instr fetch_H, op_SRL, store2_H ;3C ;SRL H
3252 instr fetch_L, op_SRL, store2_L ;3D ;SRL L
3253 instr fetch2_mhl, op_SRL, store_MHL ;3E ;SRL (HL)
3254 instr fetch_A, op_SRL, store2_A ;3F ;SRL A
3255 instr fetch_B, op_BIT0, store_nop ;40 ;BIT 0,B
3256 instr fetch_C, op_BIT0, store_nop ;41 ;BIT 0,C
3257 instr fetch_D, op_BIT0, store_nop ;42 ;BIT 0,D
3258 instr fetch_E, op_BIT0, store_nop ;43 ;BIT 0,E
3259 instr fetch_H, op_BIT0, store_nop ;44 ;BIT 0,H
3260 instr fetch_L, op_BIT0, store_nop ;45 ;BIT 0,L
3261 instr fetch2_mhl, op_BIT0, store_nop ;46 ;BIT 0,(HL)
3262 instr fetch_A, op_BIT0, store_nop ;47 ;BIT 0,A
3263 instr fetch_B, op_BIT1, store_nop ;48 ;BIT 1,B
3264 instr fetch_C, op_BIT1, store_nop ;49 ;BIT 1,C
3265 instr fetch_D, op_BIT1, store_nop ;4A ;BIT 1,D
3266 instr fetch_E, op_BIT1, store_nop ;4B ;BIT 1,E
3267 instr fetch_H, op_BIT1, store_nop ;4C ;BIT 1,H
3268 instr fetch_L, op_BIT1, store_nop ;4D ;BIT 1,L
3269 instr fetch2_mhl, op_BIT1, store_nop ;4E ;BIT 1,(HL)
3270 instr fetch_A, op_BIT1, store_nop ;4F ;BIT 1,A
3271 instr fetch_B, op_BIT2, store_nop ;50 ;BIT 2,B
3272 instr fetch_C, op_BIT2, store_nop ;51 ;BIT 2,C
3273 instr fetch_D, op_BIT2, store_nop ;52 ;BIT 2,D
3274 instr fetch_E, op_BIT2, store_nop ;53 ;BIT 2,E
3275 instr fetch_H, op_BIT2, store_nop ;54 ;BIT 2,H
3276 instr fetch_L, op_BIT2, store_nop ;55 ;BIT 2,L
3277 instr fetch2_mhl, op_BIT2, store_nop ;56 ;BIT 2,(HL)
3278 instr fetch_A, op_BIT2, store_nop ;57 ;BIT 2,A
3279 instr fetch_B, op_BIT3, store_nop ;58 ;BIT 3,B
3280 instr fetch_C, op_BIT3, store_nop ;59 ;BIT 3,C
3281 instr fetch_D, op_BIT3, store_nop ;5A ;BIT 3,D
3282 instr fetch_E, op_BIT3, store_nop ;5B ;BIT 3,E
3283 instr fetch_H, op_BIT3, store_nop ;5C ;BIT 3,H
3284 instr fetch_L, op_BIT3, store_nop ;5D ;BIT 3,L
3285 instr fetch2_mhl, op_BIT3, store_nop ;5E ;BIT 3,(HL)
3286 instr fetch_A, op_BIT3, store_nop ;5F ;BIT 3,A
3287 instr fetch_B, op_BIT4, store_nop ;60 ;BIT 4,B
3288 instr fetch_C, op_BIT4, store_nop ;61 ;BIT 4,C
3289 instr fetch_D, op_BIT4, store_nop ;62 ;BIT 4,D
3290 instr fetch_E, op_BIT4, store_nop ;63 ;BIT 4,E
3291 instr fetch_H, op_BIT4, store_nop ;64 ;BIT 4,H
3292 instr fetch_L, op_BIT4, store_nop ;65 ;BIT 4,L
3293 instr fetch2_mhl, op_BIT4, store_nop ;66 ;BIT 4,(HL)
3294 instr fetch_A, op_BIT4, store_nop ;67 ;BIT 4,A
3295 instr fetch_B, op_BIT5, store_nop ;68 ;BIT 5,B
3296 instr fetch_C, op_BIT5, store_nop ;69 ;BIT 5,C
3297 instr fetch_D, op_BIT5, store_nop ;6A ;BIT 5,D
3298 instr fetch_E, op_BIT5, store_nop ;6B ;BIT 5,E
3299 instr fetch_H, op_BIT5, store_nop ;6C ;BIT 5,H
3300 instr fetch_L, op_BIT5, store_nop ;6D ;BIT 5,L
3301 instr fetch2_mhl, op_BIT5, store_nop ;6E ;BIT 5,(HL)
3302 instr fetch_A, op_BIT5, store_nop ;6F ;BIT 5,A
3303 instr fetch_B, op_BIT6, store_nop ;70 ;BIT 6,B
3304 instr fetch_C, op_BIT6, store_nop ;71 ;BIT 6,C
3305 instr fetch_D, op_BIT6, store_nop ;72 ;BIT 6,D
3306 instr fetch_E, op_BIT6, store_nop ;73 ;BIT 6,E
3307 instr fetch_H, op_BIT6, store_nop ;74 ;BIT 6,H
3308 instr fetch_L, op_BIT6, store_nop ;75 ;BIT 6,L
3309 instr fetch2_mhl, op_BIT6, store_nop ;76 ;BIT 6,(HL)
3310 instr fetch_A, op_BIT6, store_nop ;77 ;BIT 6,A
3311 instr fetch_B, op_BIT7, store_nop ;78 ;BIT 7,B
3312 instr fetch_C, op_BIT7, store_nop ;79 ;BIT 7,C
3313 instr fetch_D, op_BIT7, store_nop ;7A ;BIT 7,D
3314 instr fetch_E, op_BIT7, store_nop ;7B ;BIT 7,E
3315 instr fetch_H, op_BIT7, store_nop ;7C ;BIT 7,H
3316 instr fetch_L, op_BIT7, store_nop ;7D ;BIT 7,L
3317 instr fetch2_mhl, op_BIT7, store_nop ;7E ;BIT 7,(HL)
3318 instr fetch_A, op_BIT7, store_nop ;7F ;BIT 7,A
3319 instr fetch_B, op_RES0, store2_B ;80 ;RES 0,B
3320 instr fetch_C, op_RES0, store2_C ;81 ;RES 0,C
3321 instr fetch_D, op_RES0, store2_D ;82 ;RES 0,D
3322 instr fetch_E, op_RES0, store2_E ;83 ;RES 0,E
3323 instr fetch_H, op_RES0, store2_H ;84 ;RES 0,H
3324 instr fetch_L, op_RES0, store2_L ;85 ;RES 0,L
3325 instr fetch2_mhl, op_RES0, store_MHL ;86 ;RES 0,(HL)
3326 instr fetch_A, op_RES0, store2_A ;87 ;RES 0,A
3327 instr fetch_B, op_RES1, store2_B ;88 ;RES 1,B
3328 instr fetch_C, op_RES1, store2_C ;89 ;RES 1,C
3329 instr fetch_D, op_RES1, store2_D ;8A ;RES 1,D
3330 instr fetch_E, op_RES1, store2_E ;8B ;RES 1,E
3331 instr fetch_H, op_RES1, store2_H ;8C ;RES 1,H
3332 instr fetch_L, op_RES1, store2_L ;8D ;RES 1,L
3333 instr fetch2_mhl, op_RES1, store_MHL ;8E ;RES 1,(HL)
3334 instr fetch_A, op_RES1, store2_A ;8F ;RES 1,A
3335 instr fetch_B, op_RES2, store2_B ;90 ;RES 2,B
3336 instr fetch_C, op_RES2, store2_C ;91 ;RES 2,C
3337 instr fetch_D, op_RES2, store2_D ;92 ;RES 2,D
3338 instr fetch_E, op_RES2, store2_E ;93 ;RES 2,E
3339 instr fetch_H, op_RES2, store2_H ;94 ;RES 2,H
3340 instr fetch_L, op_RES2, store2_L ;95 ;RES 2,L
3341 instr fetch2_mhl, op_RES2, store_MHL ;96 ;RES 2,(HL)
3342 instr fetch_A, op_RES2, store2_A ;97 ;RES 2,A
3343 instr fetch_B, op_RES3, store2_B ;98 ;RES 3,B
3344 instr fetch_C, op_RES3, store2_C ;99 ;RES 3,C
3345 instr fetch_D, op_RES3, store2_D ;9A ;RES 3,D
3346 instr fetch_E, op_RES3, store2_E ;9B ;RES 3,E
3347 instr fetch_H, op_RES3, store2_H ;9C ;RES 3,H
3348 instr fetch_L, op_RES3, store2_L ;9D ;RES 3,L
3349 instr fetch2_mhl, op_RES3, store_MHL ;9E ;RES 3,(HL)
3350 instr fetch_A, op_RES3, store2_A ;9F ;RES 3,A
3351 instr fetch_B, op_RES4, store2_B ;A0 ;RES 4,B
3352 instr fetch_C, op_RES4, store2_C ;A1 ;RES 4,C
3353 instr fetch_D, op_RES4, store2_D ;A2 ;RES 4,D
3354 instr fetch_E, op_RES4, store2_E ;A3 ;RES 4,E
3355 instr fetch_H, op_RES4, store2_H ;A4 ;RES 4,H
3356 instr fetch_L, op_RES4, store2_L ;A5 ;RES 4,L
3357 instr fetch2_mhl, op_RES4, store_MHL ;A6 ;RES 4,(HL)
3358 instr fetch_A, op_RES4, store2_A ;A7 ;RES 4,A
3359 instr fetch_B, op_RES5, store2_B ;A8 ;RES 5,B
3360 instr fetch_C, op_RES5, store2_C ;A9 ;RES 5,C
3361 instr fetch_D, op_RES5, store2_D ;AA ;RES 5,D
3362 instr fetch_E, op_RES5, store2_E ;AB ;RES 5,E
3363 instr fetch_H, op_RES5, store2_H ;AC ;RES 5,H
3364 instr fetch_L, op_RES5, store2_L ;AD ;RES 5,L
3365 instr fetch2_mhl, op_RES5, store_MHL ;AE ;RES 5,(HL)
3366 instr fetch_A, op_RES5, store2_A ;AF ;RES 5,A
3367 instr fetch_B, op_RES6, store2_B ;B0 ;RES 6,B
3368 instr fetch_C, op_RES6, store2_C ;B1 ;RES 6,C
3369 instr fetch_D, op_RES6, store2_D ;B2 ;RES 6,D
3370 instr fetch_E, op_RES6, store2_E ;B3 ;RES 6,E
3371 instr fetch_H, op_RES6, store2_H ;B4 ;RES 6,H
3372 instr fetch_L, op_RES6, store2_L ;B5 ;RES 6,L
3373 instr fetch2_mhl, op_RES6, store_MHL ;B6 ;RES 6,(HL)
3374 instr fetch_A, op_RES6, store2_A ;B7 ;RES 6,A
3375 instr fetch_B, op_RES7, store2_B ;B8 ;RES 7,B
3376 instr fetch_C, op_RES7, store2_C ;B9 ;RES 7,C
3377 instr fetch_D, op_RES7, store2_D ;BA ;RES 7,D
3378 instr fetch_E, op_RES7, store2_E ;BB ;RES 7,E
3379 instr fetch_H, op_RES7, store2_H ;BC ;RES 7,H
3380 instr fetch_L, op_RES7, store2_L ;BD ;RES 7,L
3381 instr fetch2_mhl, op_RES7, store_MHL ;BE ;RES 7,(HL)
3382 instr fetch_A, op_RES7, store2_A ;BF ;RES 7,A
3383 instr fetch_B, op_SET0, store2_B ;C0 ;SET 0,B
3384 instr fetch_C, op_SET0, store2_C ;C1 ;SET 0,C
3385 instr fetch_D, op_SET0, store2_D ;C2 ;SET 0,D
3386 instr fetch_E, op_SET0, store2_E ;C3 ;SET 0,E
3387 instr fetch_H, op_SET0, store2_H ;C4 ;SET 0,H
3388 instr fetch_L, op_SET0, store2_L ;C5 ;SET 0,L
3389 instr fetch2_mhl, op_SET0, store_MHL ;C6 ;SET 0,(HL)
3390 instr fetch_A, op_SET0, store2_A ;C7 ;SET 0,A
3391 instr fetch_B, op_SET1, store2_B ;C8 ;SET 1,B
3392 instr fetch_C, op_SET1, store2_C ;C9 ;SET 1,C
3393 instr fetch_D, op_SET1, store2_D ;CA ;SET 1,D
3394 instr fetch_E, op_SET1, store2_E ;CB ;SET 1,E
3395 instr fetch_H, op_SET1, store2_H ;CC ;SET 1,H
3396 instr fetch_L, op_SET1, store2_L ;CD ;SET 1,L
3397 instr fetch2_mhl, op_SET1, store_MHL ;CE ;SET 1,(HL)
3398 instr fetch_A, op_SET1, store2_A ;CF ;SET 1,A
3399 instr fetch_B, op_SET2, store2_B ;D0 ;SET 2,B
3400 instr fetch_C, op_SET2, store2_C ;D1 ;SET 2,C
3401 instr fetch_D, op_SET2, store2_D ;D2 ;SET 2,D
3402 instr fetch_E, op_SET2, store2_E ;D3 ;SET 2,E
3403 instr fetch_H, op_SET2, store2_H ;D4 ;SET 2,H
3404 instr fetch_L, op_SET2, store2_L ;D5 ;SET 2,L
3405 instr fetch2_mhl, op_SET2, store_MHL ;D6 ;SET 2,(HL)
3406 instr fetch_A, op_SET2, store2_A ;D7 ;SET 2,A
3407 instr fetch_B, op_SET3, store2_B ;D8 ;SET 3,B
3408 instr fetch_C, op_SET3, store2_C ;D9 ;SET 3,C
3409 instr fetch_D, op_SET3, store2_D ;DA ;SET 3,D
3410 instr fetch_E, op_SET3, store2_E ;DB ;SET 3,E
3411 instr fetch_H, op_SET3, store2_H ;DC ;SET 3,H
3412 instr fetch_L, op_SET3, store2_L ;DD ;SET 3,L
3413 instr fetch2_mhl, op_SET3, store_MHL ;DE ;SET 3,(HL)
3414 instr fetch_A, op_SET3, store2_A ;DF ;SET 3,A
3415 instr fetch_B, op_SET4, store2_B ;E0 ;SET 4,B
3416 instr fetch_C, op_SET4, store2_C ;E1 ;SET 4,C
3417 instr fetch_D, op_SET4, store2_D ;E2 ;SET 4,D
3418 instr fetch_E, op_SET4, store2_E ;E3 ;SET 4,E
3419 instr fetch_H, op_SET4, store2_H ;E4 ;SET 4,H
3420 instr fetch_L, op_SET4, store2_L ;E5 ;SET 4,L
3421 instr fetch2_mhl, op_SET4, store_MHL ;E6 ;SET 4,(HL)
3422 instr fetch_A, op_SET4, store2_A ;E7 ;SET 4,A
3423 instr fetch_B, op_SET5, store2_B ;E8 ;SET 5,B
3424 instr fetch_C, op_SET5, store2_C ;E9 ;SET 5,C
3425 instr fetch_D, op_SET5, store2_D ;EA ;SET 5,D
3426 instr fetch_E, op_SET5, store2_E ;EB ;SET 5,E
3427 instr fetch_H, op_SET5, store2_H ;EC ;SET 5,H
3428 instr fetch_L, op_SET5, store2_L ;ED ;SET 5,L
3429 instr fetch2_mhl, op_SET5, store_MHL ;EE ;SET 5,(HL)
3430 instr fetch_A, op_SET5, store2_A ;EF ;SET 5,A
3431 instr fetch_B, op_SET6, store2_B ;F0 ;SET 6,B
3432 instr fetch_C, op_SET6, store2_C ;F1 ;SET 6,C
3433 instr fetch_D, op_SET6, store2_D ;F2 ;SET 6,D
3434 instr fetch_E, op_SET6, store2_E ;F3 ;SET 6,E
3435 instr fetch_H, op_SET6, store2_H ;F4 ;SET 6,H
3436 instr fetch_L, op_SET6, store2_L ;F5 ;SET 6,L
3437 instr fetch2_mhl, op_SET6, store_MHL ;F6 ;SET 6,(HL)
3438 instr fetch_A, op_SET6, store2_A ;F7 ;SET 6,A
3439 instr fetch_B, op_SET7, store2_B ;F8 ;SET 7,B
3440 instr fetch_C, op_SET7, store2_C ;F9 ;SET 7,C
3441 instr fetch_D, op_SET7, store2_D ;FA ;SET 7,D
3442 instr fetch_E, op_SET7, store2_E ;FB ;SET 7,E
3443 instr fetch_H, op_SET7, store2_H ;FC ;SET 7,H
3444 instr fetch_L, op_SET7, store2_L ;FD ;SET 7,L
3445 instr fetch2_mhl, op_SET7, store_MHL ;FE ;SET 7,(HL)
3446 instr fetch_A, op_SET7, store2_A ;FF ;SET 7,A
3449 opctable DDFDCBjmp, PC ;+256
3451 instr fetch_nop, op_RLC, store2_B ;00 ;RLC (Ix+d),B
3452 instr fetch_nop, op_RLC, store2_C ;01 ;RLC (Ix+d),C
3453 instr fetch_nop, op_RLC, store2_D ;02 ;RLC (Ix+d),D
3454 instr fetch_nop, op_RLC, store2_E ;03 ;RLC (Ix+d),E
3455 instr fetch_nop, op_RLC, store2_H ;04 ;RLC (Ix+d),H
3456 instr fetch_nop, op_RLC, store2_L ;05 ;RLC (Ix+d),L
3457 instr fetch_nop, op_RLC, store_nop ;06 ;RLC (Ix+d)
3458 instr fetch_nop, op_RLC, store2_A ;07 ;RLC (Ix+d),A
3459 instr fetch_nop, op_RRC, store2_B ;08 ;RRC (Ix+d),B
3460 instr fetch_nop, op_RRC, store2_C ;09 ;RRC (Ix+d),C
3461 instr fetch_nop, op_RRC, store2_D ;0A ;RRC (Ix+d),D
3462 instr fetch_nop, op_RRC, store2_E ;0B ;RRC (Ix+d),E
3463 instr fetch_nop, op_RRC, store2_H ;0C ;RRC (Ix+d),H
3464 instr fetch_nop, op_RRC, store2_L ;0D ;RRC (Ix+d),L
3465 instr fetch_nop, op_RRC, store_nop ;0E ;RRC (Ix+d)
3466 instr fetch_nop, op_RRC, store2_A ;0F ;RRC (Ix+d),A
3467 instr fetch_nop, op_RL, store2_B ;10 ;RL (Ix+d),B
3468 instr fetch_nop, op_RL, store2_C ;11 ;RL (Ix+d),C
3469 instr fetch_nop, op_RL, store2_D ;12 ;RL (Ix+d),D
3470 instr fetch_nop, op_RL, store2_E ;13 ;RL (Ix+d),E
3471 instr fetch_nop, op_RL, store2_H ;14 ;RL (Ix+d),H
3472 instr fetch_nop, op_RL, store2_L ;15 ;RL (Ix+d),L
3473 instr fetch_nop, op_RL, store_nop ;16 ;RL (Ix+d)
3474 instr fetch_nop, op_RL, store2_A ;17 ;RL (Ix+d),A
3475 instr fetch_nop, op_RR, store2_B ;18 ;RR (Ix+d),B
3476 instr fetch_nop, op_RR, store2_C ;19 ;RR (Ix+d),C
3477 instr fetch_nop, op_RR, store2_D ;1A ;RR (Ix+d),D
3478 instr fetch_nop, op_RR, store2_E ;1B ;RR (Ix+d),E
3479 instr fetch_nop, op_RR, store2_H ;1C ;RR (Ix+d),H
3480 instr fetch_nop, op_RR, store2_L ;1D ;RR (Ix+d),L
3481 instr fetch_nop, op_RR, store_nop ;1E ;RR (Ix+d)
3482 instr fetch_nop, op_RR, store2_A ;1F ;RR (Ix+d),A
3483 instr fetch_nop, op_SLA, store2_B ;20 ;SLA (Ix+d),B
3484 instr fetch_nop, op_SLA, store2_C ;21 ;SLA (Ix+d),C
3485 instr fetch_nop, op_SLA, store2_D ;22 ;SLA (Ix+d),D
3486 instr fetch_nop, op_SLA, store2_E ;23 ;SLA (Ix+d),E
3487 instr fetch_nop, op_SLA, store2_H ;24 ;SLA (Ix+d),H
3488 instr fetch_nop, op_SLA, store2_L ;25 ;SLA (Ix+d),L
3489 instr fetch_nop, op_SLA, store_nop ;26 ;SLA (Ix+d)
3490 instr fetch_nop, op_SLA, store2_A ;27 ;SLA (Ix+d),A
3491 instr fetch_nop, op_SRA, store2_B ;28 ;SRA (Ix+d),B
3492 instr fetch_nop, op_SRA, store2_C ;29 ;SRA (Ix+d),C
3493 instr fetch_nop, op_SRA, store2_D ;2A ;SRA (Ix+d),D
3494 instr fetch_nop, op_SRA, store2_E ;2B ;SRA (Ix+d),E
3495 instr fetch_nop, op_SRA, store2_H ;2C ;SRA (Ix+d),H
3496 instr fetch_nop, op_SRA, store2_L ;2D ;SRA (Ix+d),L
3497 instr fetch_nop, op_SRA, store_nop ;2E ;SRA (Ix+d)
3498 instr fetch_nop, op_SRA, store2_A ;2F ;SRA (Ix+d),A
3499 instr fetch_nop, op_SLL, store2_B ;30 ;SLL (Ix+d),B
3500 instr fetch_nop, op_SLL, store2_C ;31 ;SLL (Ix+d),C
3501 instr fetch_nop, op_SLL, store2_D ;32 ;SLL (Ix+d),D
3502 instr fetch_nop, op_SLL, store2_E ;33 ;SLL (Ix+d),E
3503 instr fetch_nop, op_SLL, store2_H ;34 ;SLL (Ix+d),H
3504 instr fetch_nop, op_SLL, store2_L ;35 ;SLL (Ix+d),L
3505 instr fetch_nop, op_SLL, store_nop ;36 ;SLL (Ix+d)
3506 instr fetch_nop, op_SLL, store2_A ;37 ;SLL (Ix+d),A
3507 instr fetch_nop, op_SRL, store2_B ;38 ;SRL (Ix+d),B
3508 instr fetch_nop, op_SRL, store2_C ;39 ;SRL (Ix+d),C
3509 instr fetch_nop, op_SRL, store2_D ;3A ;SRL (Ix+d),D
3510 instr fetch_nop, op_SRL, store2_E ;3B ;SRL (Ix+d),E
3511 instr fetch_nop, op_SRL, store2_H ;3C ;SRL (Ix+d),H
3512 instr fetch_nop, op_SRL, store2_L ;3D ;SRL (Ix+d),L
3513 instr fetch_nop, op_SRL, store_nop ;3E ;SRL (Ix+d)
3514 instr fetch_nop, op_SRL, store2_A ;3F ;SRL (Ix+d),A
3515 instr fetch_nop, op_BIT0, store_nop ;40 ;BIT 0,(Ix+d),B
3516 instr fetch_nop, op_BIT0, store_nop ;41 ;BIT 0,(Ix+d),C
3517 instr fetch_nop, op_BIT0, store_nop ;42 ;BIT 0,(Ix+d),D
3518 instr fetch_nop, op_BIT0, store_nop ;43 ;BIT 0,(Ix+d),E
3519 instr fetch_nop, op_BIT0, store_nop ;44 ;BIT 0,(Ix+d),H
3520 instr fetch_nop, op_BIT0, store_nop ;45 ;BIT 0,(Ix+d),L
3521 instr fetch_nop, op_BIT0, store_nop ;46 ;BIT 0,(Ix+d)
3522 instr fetch_nop, op_BIT0, store_nop ;47 ;BIT 0,(Ix+d),A
3523 instr fetch_nop, op_BIT1, store_nop ;48 ;BIT 1,(Ix+d),B
3524 instr fetch_nop, op_BIT1, store_nop ;49 ;BIT 1,(Ix+d),C
3525 instr fetch_nop, op_BIT1, store_nop ;4A ;BIT 1,(Ix+d),D
3526 instr fetch_nop, op_BIT1, store_nop ;4B ;BIT 1,(Ix+d),E
3527 instr fetch_nop, op_BIT1, store_nop ;4C ;BIT 1,(Ix+d),H
3528 instr fetch_nop, op_BIT1, store_nop ;4D ;BIT 1,(Ix+d),L
3529 instr fetch_nop, op_BIT1, store_nop ;4E ;BIT 1,(Ix+d)
3530 instr fetch_nop, op_BIT1, store_nop ;4F ;BIT 1,(Ix+d),A
3531 instr fetch_nop, op_BIT2, store_nop ;50 ;BIT 2,(Ix+d),B
3532 instr fetch_nop, op_BIT2, store_nop ;51 ;BIT 2,(Ix+d),C
3533 instr fetch_nop, op_BIT2, store_nop ;52 ;BIT 2,(Ix+d),D
3534 instr fetch_nop, op_BIT2, store_nop ;53 ;BIT 2,(Ix+d),E
3535 instr fetch_nop, op_BIT2, store_nop ;54 ;BIT 2,(Ix+d),H
3536 instr fetch_nop, op_BIT2, store_nop ;55 ;BIT 2,(Ix+d),L
3537 instr fetch_nop, op_BIT2, store_nop ;56 ;BIT 2,(Ix+d)
3538 instr fetch_nop, op_BIT2, store_nop ;57 ;BIT 2,(Ix+d),A
3539 instr fetch_nop, op_BIT3, store_nop ;58 ;BIT 3,(Ix+d),B
3540 instr fetch_nop, op_BIT3, store_nop ;59 ;BIT 3,(Ix+d),C
3541 instr fetch_nop, op_BIT3, store_nop ;5A ;BIT 3,(Ix+d),D
3542 instr fetch_nop, op_BIT3, store_nop ;5B ;BIT 3,(Ix+d),E
3543 instr fetch_nop, op_BIT3, store_nop ;5C ;BIT 3,(Ix+d),H
3544 instr fetch_nop, op_BIT3, store_nop ;5D ;BIT 3,(Ix+d),L
3545 instr fetch_nop, op_BIT3, store_nop ;5E ;BIT 3,(Ix+d)
3546 instr fetch_nop, op_BIT3, store_nop ;5F ;BIT 3,(Ix+d),A
3547 instr fetch_nop, op_BIT4, store_nop ;60 ;BIT 4,(Ix+d),B
3548 instr fetch_nop, op_BIT4, store_nop ;61 ;BIT 4,(Ix+d),C
3549 instr fetch_nop, op_BIT4, store_nop ;62 ;BIT 4,(Ix+d),D
3550 instr fetch_nop, op_BIT4, store_nop ;63 ;BIT 4,(Ix+d),E
3551 instr fetch_nop, op_BIT4, store_nop ;64 ;BIT 4,(Ix+d),H
3552 instr fetch_nop, op_BIT4, store_nop ;65 ;BIT 4,(Ix+d),L
3553 instr fetch_nop, op_BIT4, store_nop ;66 ;BIT 4,(Ix+d)
3554 instr fetch_nop, op_BIT4, store_nop ;67 ;BIT 4,(Ix+d),A
3555 instr fetch_nop, op_BIT5, store_nop ;68 ;BIT 5,(Ix+d),B
3556 instr fetch_nop, op_BIT5, store_nop ;69 ;BIT 5,(Ix+d),C
3557 instr fetch_nop, op_BIT5, store_nop ;6A ;BIT 5,(Ix+d),D
3558 instr fetch_nop, op_BIT5, store_nop ;6B ;BIT 5,(Ix+d),E
3559 instr fetch_nop, op_BIT5, store_nop ;6C ;BIT 5,(Ix+d),H
3560 instr fetch_nop, op_BIT5, store_nop ;6D ;BIT 5,(Ix+d),L
3561 instr fetch_nop, op_BIT5, store_nop ;6E ;BIT 5,(Ix+d)
3562 instr fetch_nop, op_BIT5, store_nop ;6F ;BIT 5,(Ix+d),A
3563 instr fetch_nop, op_BIT6, store_nop ;70 ;BIT 6,(Ix+d),B
3564 instr fetch_nop, op_BIT6, store_nop ;71 ;BIT 6,(Ix+d),C
3565 instr fetch_nop, op_BIT6, store_nop ;72 ;BIT 6,(Ix+d),D
3566 instr fetch_nop, op_BIT6, store_nop ;73 ;BIT 6,(Ix+d),E
3567 instr fetch_nop, op_BIT6, store_nop ;74 ;BIT 6,(Ix+d),H
3568 instr fetch_nop, op_BIT6, store_nop ;75 ;BIT 6,(Ix+d),L
3569 instr fetch_nop, op_BIT6, store_nop ;76 ;BIT 6,(Ix+d)
3570 instr fetch_nop, op_BIT6, store_nop ;77 ;BIT 6,(Ix+d),A
3571 instr fetch_nop, op_BIT7, store_nop ;78 ;BIT 7,(Ix+d),B
3572 instr fetch_nop, op_BIT7, store_nop ;79 ;BIT 7,(Ix+d),C
3573 instr fetch_nop, op_BIT7, store_nop ;7A ;BIT 7,(Ix+d),D
3574 instr fetch_nop, op_BIT7, store_nop ;7B ;BIT 7,(Ix+d),E
3575 instr fetch_nop, op_BIT7, store_nop ;7C ;BIT 7,(Ix+d),H
3576 instr fetch_nop, op_BIT7, store_nop ;7D ;BIT 7,(Ix+d),L
3577 instr fetch_nop, op_BIT7, store_nop ;7E ;BIT 7,(Ix+d)
3578 instr fetch_nop, op_BIT7, store_nop ;7F ;BIT 7,(Ix+d),A
3579 instr fetch_nop, op_RES0, store2_B ;80 ;RES 0,(Ix+d),B
3580 instr fetch_nop, op_RES0, store2_C ;81 ;RES 0,(Ix+d),C
3581 instr fetch_nop, op_RES0, store2_D ;82 ;RES 0,(Ix+d),D
3582 instr fetch_nop, op_RES0, store2_E ;83 ;RES 0,(Ix+d),E
3583 instr fetch_nop, op_RES0, store2_H ;84 ;RES 0,(Ix+d),H
3584 instr fetch_nop, op_RES0, store2_L ;85 ;RES 0,(Ix+d),L
3585 instr fetch_nop, op_RES0, store_nop ;86 ;RES 0,(Ix+d)
3586 instr fetch_nop, op_RES0, store2_A ;87 ;RES 0,(Ix+d),A
3587 instr fetch_nop, op_RES1, store2_B ;88 ;RES 1,(Ix+d),B
3588 instr fetch_nop, op_RES1, store2_C ;89 ;RES 1,(Ix+d),C
3589 instr fetch_nop, op_RES1, store2_D ;8A ;RES 1,(Ix+d),D
3590 instr fetch_nop, op_RES1, store2_E ;8B ;RES 1,(Ix+d),E
3591 instr fetch_nop, op_RES1, store2_H ;8C ;RES 1,(Ix+d),H
3592 instr fetch_nop, op_RES1, store2_L ;8D ;RES 1,(Ix+d),L
3593 instr fetch_nop, op_RES1, store_nop ;8E ;RES 1,(Ix+d)
3594 instr fetch_nop, op_RES1, store2_A ;8F ;RES 1,(Ix+d),A
3595 instr fetch_nop, op_RES2, store2_B ;90 ;RES 2,(Ix+d),B
3596 instr fetch_nop, op_RES2, store2_C ;91 ;RES 2,(Ix+d),C
3597 instr fetch_nop, op_RES2, store2_D ;92 ;RES 2,(Ix+d),D
3598 instr fetch_nop, op_RES2, store2_E ;93 ;RES 2,(Ix+d),E
3599 instr fetch_nop, op_RES2, store2_H ;94 ;RES 2,(Ix+d),H
3600 instr fetch_nop, op_RES2, store2_L ;95 ;RES 2,(Ix+d),L
3601 instr fetch_nop, op_RES2, store_nop ;96 ;RES 2,(Ix+d)
3602 instr fetch_nop, op_RES2, store2_A ;97 ;RES 2,(Ix+d),A
3603 instr fetch_nop, op_RES3, store2_B ;98 ;RES 3,(Ix+d),B
3604 instr fetch_nop, op_RES3, store2_C ;99 ;RES 3,(Ix+d),C
3605 instr fetch_nop, op_RES3, store2_D ;9A ;RES 3,(Ix+d),D
3606 instr fetch_nop, op_RES3, store2_E ;9B ;RES 3,(Ix+d),E
3607 instr fetch_nop, op_RES3, store2_H ;9C ;RES 3,(Ix+d),H
3608 instr fetch_nop, op_RES3, store2_L ;9D ;RES 3,(Ix+d),L
3609 instr fetch_nop, op_RES3, store_nop ;9E ;RES 3,(Ix+d)
3610 instr fetch_nop, op_RES3, store2_A ;9F ;RES 3,(Ix+d),A
3611 instr fetch_nop, op_RES4, store2_B ;A0 ;RES 4,(Ix+d),B
3612 instr fetch_nop, op_RES4, store2_C ;A1 ;RES 4,(Ix+d),C
3613 instr fetch_nop, op_RES4, store2_D ;A2 ;RES 4,(Ix+d),D
3614 instr fetch_nop, op_RES4, store2_E ;A3 ;RES 4,(Ix+d),E
3615 instr fetch_nop, op_RES4, store2_H ;A4 ;RES 4,(Ix+d),H
3616 instr fetch_nop, op_RES4, store2_L ;A5 ;RES 4,(Ix+d),L
3617 instr fetch_nop, op_RES4, store_nop ;A6 ;RES 4,(Ix+d)
3618 instr fetch_nop, op_RES4, store2_A ;A7 ;RES 4,(Ix+d),A
3619 instr fetch_nop, op_RES5, store2_B ;A8 ;RES 5,(Ix+d),B
3620 instr fetch_nop, op_RES5, store2_C ;A9 ;RES 5,(Ix+d),C
3621 instr fetch_nop, op_RES5, store2_D ;AA ;RES 5,(Ix+d),D
3622 instr fetch_nop, op_RES5, store2_E ;AB ;RES 5,(Ix+d),E
3623 instr fetch_nop, op_RES5, store2_H ;AC ;RES 5,(Ix+d),H
3624 instr fetch_nop, op_RES5, store2_L ;AD ;RES 5,(Ix+d),L
3625 instr fetch_nop, op_RES5, store_nop ;AE ;RES 5,(Ix+d)
3626 instr fetch_nop, op_RES5, store2_A ;AF ;RES 5,(Ix+d),A
3627 instr fetch_nop, op_RES6, store2_B ;B0 ;RES 6,(Ix+d),B
3628 instr fetch_nop, op_RES6, store2_C ;B1 ;RES 6,(Ix+d),C
3629 instr fetch_nop, op_RES6, store2_D ;B2 ;RES 6,(Ix+d),D
3630 instr fetch_nop, op_RES6, store2_E ;B3 ;RES 6,(Ix+d),E
3631 instr fetch_nop, op_RES6, store2_H ;B4 ;RES 6,(Ix+d),H
3632 instr fetch_nop, op_RES6, store2_L ;B5 ;RES 6,(Ix+d),L
3633 instr fetch_nop, op_RES6, store_nop ;B6 ;RES 6,(Ix+d)
3634 instr fetch_nop, op_RES6, store2_A ;B7 ;RES 6,(Ix+d),A
3635 instr fetch_nop, op_RES7, store2_B ;B8 ;RES 7,(Ix+d),B
3636 instr fetch_nop, op_RES7, store2_C ;B9 ;RES 7,(Ix+d),C
3637 instr fetch_nop, op_RES7, store2_D ;BA ;RES 7,(Ix+d),D
3638 instr fetch_nop, op_RES7, store2_E ;BB ;RES 7,(Ix+d),E
3639 instr fetch_nop, op_RES7, store2_H ;BC ;RES 7,(Ix+d),H
3640 instr fetch_nop, op_RES7, store2_L ;BD ;RES 7,(Ix+d),L
3641 instr fetch_nop, op_RES7, store_nop ;BE ;RES 7,(Ix+d)
3642 instr fetch_nop, op_RES7, store2_A ;BF ;RES 7,(Ix+d),A
3643 instr fetch_nop, op_SET0, store2_B ;C0 ;SET 0,(Ix+d),B
3644 instr fetch_nop, op_SET0, store2_C ;C1 ;SET 0,(Ix+d),C
3645 instr fetch_nop, op_SET0, store2_D ;C2 ;SET 0,(Ix+d),D
3646 instr fetch_nop, op_SET0, store2_E ;C3 ;SET 0,(Ix+d),E
3647 instr fetch_nop, op_SET0, store2_H ;C4 ;SET 0,(Ix+d),H
3648 instr fetch_nop, op_SET0, store2_L ;C5 ;SET 0,(Ix+d),L
3649 instr fetch_nop, op_SET0, store_nop ;C6 ;SET 0,(Ix+d)
3650 instr fetch_nop, op_SET0, store2_A ;C7 ;SET 0,(Ix+d),A
3651 instr fetch_nop, op_SET1, store2_B ;C8 ;SET 1,(Ix+d),B
3652 instr fetch_nop, op_SET1, store2_C ;C9 ;SET 1,(Ix+d),C
3653 instr fetch_nop, op_SET1, store2_D ;CA ;SET 1,(Ix+d),D
3654 instr fetch_nop, op_SET1, store2_E ;CB ;SET 1,(Ix+d),E
3655 instr fetch_nop, op_SET1, store2_H ;CC ;SET 1,(Ix+d),H
3656 instr fetch_nop, op_SET1, store2_L ;CD ;SET 1,(Ix+d),L
3657 instr fetch_nop, op_SET1, store_nop ;CE ;SET 1,(Ix+d)
3658 instr fetch_nop, op_SET1, store2_A ;CF ;SET 1,(Ix+d),A
3659 instr fetch_nop, op_SET2, store2_B ;D0 ;SET 2,(Ix+d),B
3660 instr fetch_nop, op_SET2, store2_C ;D1 ;SET 2,(Ix+d),C
3661 instr fetch_nop, op_SET2, store2_D ;D2 ;SET 2,(Ix+d),D
3662 instr fetch_nop, op_SET2, store2_E ;D3 ;SET 2,(Ix+d),E
3663 instr fetch_nop, op_SET2, store2_H ;D4 ;SET 2,(Ix+d),H
3664 instr fetch_nop, op_SET2, store2_L ;D5 ;SET 2,(Ix+d),L
3665 instr fetch_nop, op_SET2, store_nop ;D6 ;SET 2,(Ix+d)
3666 instr fetch_nop, op_SET2, store2_A ;D7 ;SET 2,(Ix+d),A
3667 instr fetch_nop, op_SET3, store2_B ;D8 ;SET 3,(Ix+d),B
3668 instr fetch_nop, op_SET3, store2_C ;D9 ;SET 3,(Ix+d),C
3669 instr fetch_nop, op_SET3, store2_D ;DA ;SET 3,(Ix+d),D
3670 instr fetch_nop, op_SET3, store2_E ;DB ;SET 3,(Ix+d),E
3671 instr fetch_nop, op_SET3, store2_H ;DC ;SET 3,(Ix+d),H
3672 instr fetch_nop, op_SET3, store2_L ;DD ;SET 3,(Ix+d),L
3673 instr fetch_nop, op_SET3, store_nop ;DE ;SET 3,(Ix+d)
3674 instr fetch_nop, op_SET3, store2_A ;DF ;SET 3,(Ix+d),A
3675 instr fetch_nop, op_SET4, store2_B ;E0 ;SET 4,(Ix+d),B
3676 instr fetch_nop, op_SET4, store2_C ;E1 ;SET 4,(Ix+d),C
3677 instr fetch_nop, op_SET4, store2_D ;E2 ;SET 4,(Ix+d),D
3678 instr fetch_nop, op_SET4, store2_E ;E3 ;SET 4,(Ix+d),E
3679 instr fetch_nop, op_SET4, store2_H ;E4 ;SET 4,(Ix+d),H
3680 instr fetch_nop, op_SET4, store2_L ;E5 ;SET 4,(Ix+d),L
3681 instr fetch_nop, op_SET4, store_nop ;E6 ;SET 4,(Ix+d)
3682 instr fetch_nop, op_SET4, store2_A ;E7 ;SET 4,(Ix+d),A
3683 instr fetch_nop, op_SET5, store2_B ;E8 ;SET 5,(Ix+d),B
3684 instr fetch_nop, op_SET5, store2_C ;E9 ;SET 5,(Ix+d),C
3685 instr fetch_nop, op_SET5, store2_D ;EA ;SET 5,(Ix+d),D
3686 instr fetch_nop, op_SET5, store2_E ;EB ;SET 5,(Ix+d),E
3687 instr fetch_nop, op_SET5, store2_H ;EC ;SET 5,(Ix+d),H
3688 instr fetch_nop, op_SET5, store2_L ;ED ;SET 5,(Ix+d),L
3689 instr fetch_nop, op_SET5, store_nop ;EE ;SET 5,(Ix+d)
3690 instr fetch_nop, op_SET5, store2_A ;EF ;SET 5,(Ix+d),A
3691 instr fetch_nop, op_SET6, store2_B ;F0 ;SET 6,(Ix+d),B
3692 instr fetch_nop, op_SET6, store2_C ;F1 ;SET 6,(Ix+d),C
3693 instr fetch_nop, op_SET6, store2_D ;F2 ;SET 6,(Ix+d),D
3694 instr fetch_nop, op_SET6, store2_E ;F3 ;SET 6,(Ix+d),E
3695 instr fetch_nop, op_SET6, store2_H ;F4 ;SET 6,(Ix+d),H
3696 instr fetch_nop, op_SET6, store2_L ;F5 ;SET 6,(Ix+d),L
3697 instr fetch_nop, op_SET6, store_nop ;F6 ;SET 6,(Ix+d)
3698 instr fetch_nop, op_SET6, store2_A ;F7 ;SET 6,(Ix+d),A
3699 instr fetch_nop, op_SET7, store2_B ;F8 ;SET 7,(Ix+d),B
3700 instr fetch_nop, op_SET7, store2_C ;F9 ;SET 7,(Ix+d),C
3701 instr fetch_nop, op_SET7, store2_D ;FA ;SET 7,(Ix+d),D
3702 instr fetch_nop, op_SET7, store2_E ;FB ;SET 7,(Ix+d),E
3703 instr fetch_nop, op_SET7, store2_H ;FC ;SET 7,(Ix+d),H
3704 instr fetch_nop, op_SET7, store2_L ;FD ;SET 7,(Ix+d),L
3705 instr fetch_nop, op_SET7, store_nop ;FE ;SET 7,(Ix+d)
3706 instr fetch_nop, op_SET7, store2_A ;FF ;SET 7,(Ix+d),A
3715 ;----------------------------------------------------------------
3716 ;|Mnemonic |SZHPNC|Description |Notes |
3717 ;----------------------------------------------------------------
3718 ;|IN r,[C] |***P0-|Input |r=[C] |
3721 do_op_in: ; in opl,(opl)
3724 cp opl,_0 ; don't debug port 0 (con stat)
3727 printstring "Port read: ("
3737 bst z_flags,ZFL_C ;save Carry
3738 ldpmx z_flags,sz53p_tab,temp ;S,Z,P
3751 ;----------------------------------------------------------------
3752 ;|Mnemonic |SZHPNC|Description |Notes |
3753 ;----------------------------------------------------------------
3754 ;|OUT [C],r |------|Output |[C]=r |
3757 do_op_out: ; out (c),opl
3760 printstring "Port write: "
3773 ;----------------------------------------------------------------
3774 ;|Mnemonic |SZHPNC|Description |Notes |
3775 ;----------------------------------------------------------------
3776 ;|LD dst,src|------|Load |dst=src |
3779 do_op_stbc: ;store bc to mem loc in opl:h
3786 ;----------------------------------------------------------------
3787 ;|Mnemonic |SZHPNC|Description |Notes |
3788 ;----------------------------------------------------------------
3789 ;|LD dst,src|------|Load |dst=src |
3792 do_op_stde: ;store de to mem loc in opl:h
3799 ;----------------------------------------------------------------
3800 ;|Mnemonic |SZHPNC|Description |Notes |
3801 ;----------------------------------------------------------------
3802 ;|LD dst,src|------|Load |dst=src |
3805 do_op_stsp: ;store sp to mem loc in opl:h
3812 ;----------------------------------------------------------------
3813 ;|Mnemonic |SZHPNC|Description |Notes |
3814 ;----------------------------------------------------------------
3815 ;|ADC HL,ss |***V0*|Add with Carry |HL=HL+ss+CY |
3819 lsr z_flags ; ZFL_C --> Carry
3820 ldi z_flags,0 ; clear N
3822 in temp,sreg ; save lower Z
3826 and temp,temp2 ; 16bit Z
3827 bmov z_flags,ZFL_C, temp2,AVR_C
3828 bmov z_flags,ZFL_P, temp2,AVR_V
3829 bmov z_flags,ZFL_H, temp2,AVR_H
3830 bmov z_flags,ZFL_Z, temp,AVR_Z
3831 bmov z_flags,ZFL_S, temp2,AVR_N
3834 ;----------------------------------------------------------------
3835 ;|Mnemonic |SZHPNC|Description |Notes |
3836 ;----------------------------------------------------------------
3837 ;|SBC HL,ss |***V1*|Subtract with carry |HL=HL-ss-CY |
3843 lsr z_flags ; get Z80 carry
3848 ldi z_flags,(1<<ZFL_N) ; set N
3849 bmov z_flags,ZFL_C, temp,AVR_C
3850 bmov z_flags,ZFL_P, temp,AVR_V
3851 bmov z_flags,ZFL_H, temp,AVR_H
3852 bmov z_flags,ZFL_Z, temp,AVR_Z
3853 bmov z_flags,ZFL_S, temp,AVR_N
3856 ;----------------------------------------------------------------
3857 ;|Mnemonic |SZHPNC|Description |Notes |
3858 ;----------------------------------------------------------------
3859 ;|NEG |***V1*|Negate A |A=0-A |
3867 ldpmx z_flags,sz53p_tab,z_a ;S,Z,P
3868 bmov z_flags,ZFL_C, temp,AVR_C
3869 bmov z_flags,ZFL_H, temp,AVR_H
3874 ;----------------------------------------------------------------
3875 ;|Mnemonic |SZHPNC|Description |Notes |
3876 ;----------------------------------------------------------------
3877 ;|RETI |------|Return from Interrupt|PC=[SP]+ |
3878 ;|RETN |------|Return from NMI | Copy IFF2 to IFF1 |
3884 bmov temp,IFF1, temp,IFF2
3889 ;----------------------------------------------------------------
3890 ;|Mnemonic |SZHPNC|Description |Notes |
3891 ;----------------------------------------------------------------
3892 ;|IM n |------|Interrupt Mode | (n=0,1,2)|
3914 ;----------------------------------------------------------------
3915 ;|Mnemonic |SZHPNC|Description |Notes |
3916 ;----------------------------------------------------------------
3917 ;|LD A,i |**0*0-|Load |(i=I,R) IFF2 --> P |
3918 ;|LD i,A |------|Load |(i=I,R) |
3927 bst z_flags,ZFL_C ;save C
3928 ldpmx z_flags,sz53p_tab,z_a ;S,Z,H,P,N
3931 bmov z_flags,ZFL_P, temp,IFF2
3942 ;----------------------------------------------------------------
3943 ;|Mnemonic |SZHPNC|Description |Notes |
3944 ;----------------------------------------------------------------
3945 ;|RLD |**0P0-|Rotate Left 4 bits |{A,[HL]}={A,[HL]}<- ##|
3946 ;|RRD |**0P0-|Rotate Right 4 bits |{A,[HL]}=->{A,[HL]} ##|
3960 bst z_flags,ZFL_C ;save C
3961 ldpmx z_flags,sz53p_tab,z_a ;S,Z,H,P,N
3977 bst z_flags,ZFL_C ;save C
3978 ldpmx z_flags,sz53p_tab,z_a ;S,Z,H,P,N
3983 ;----------------------------------------------------------------
3984 ;|Mnemonic |SZHPNC|Description |Notes |
3985 ;----------------------------------------------------------------
3986 ;|LDD |--0*0-|Load and Decrement |[DE]=[HL],HL=HL-1,# |
3987 ;|LDDR |--000-|Load, Dec., Repeat |LDD till BC=0 |
3988 ;|LDI |--0*0-|Load and Increment |[DE]=[HL],HL=HL+1,# |
3989 ;|LDIR |--000-|Load, Inc., Repeat |LDI till BC=0 |
3996 ; lcall dram_read ; temp = (HL)
3997 mem_read_ds temp, z_hl
3999 ; lcall dram_write ; (DE) = temp
4000 mem_write_ds z_de, temp
4002 cbr z_flags,(1<<ZFL_H) | (1<<ZFL_P) | (1<<ZFL_N)
4008 sbr z_flags,(1<<ZFL_P)
4014 rcall op_LDxx_common
4015 sub z_e,_255 ;-low(-1) DE++
4016 sbc z_d,_255 ;-high(-1)
4017 sub z_l,_255 ;-low(-1) HL++
4018 sbc z_h,_255 ;-high(-1)
4024 rcall op_LDxx_common
4025 add z_e,_255 ;+low(-1) DE--
4026 adc z_d,_255 ;+high(-1)
4027 add z_l,_255 ;+low(-1) HL--
4028 adc z_h,_255 ;+high(-1)
4061 ;----------------------------------------------------------------
4062 ;|Mnemonic |SZHPNC|Description |Notes |
4063 ;----------------------------------------------------------------
4064 ;|CPD |****1-|Compare and Decrement|A-[HL],HL=HL-1,BC=BC-1|
4065 ;|CPDR |****1-|Compare, Dec., Repeat|CPD till A=[HL]or BC=0|
4066 ;|CPI |****1-|Compare and Increment|A-[HL],HL=HL+1,BC=BC-1|
4067 ;|CPIR |****1-|Compare, Inc., Repeat|CPI till A=[HL]or BC=0|
4077 cbr z_flags,(1<<ZFL_S)|(1<<ZFL_Z)|(1<<ZFL_H)|(1<<ZFL_P)
4078 sbr z_flags,(1<<ZFL_N)
4079 lcall dram_read ; temp = (HL)
4081 cp z_a,temp ; A - (HL)
4084 sbr z_flags,(1<<ZFL_S)
4086 sbr z_flags,(1<<ZFL_Z)
4088 sbr z_flags,(1<<ZFL_H)
4092 sbr z_flags,(1<<ZFL_P)
4099 rcall op_CPxx_common
4108 rcall op_CPxx_common
4135 ;----------------------------------------------------------------
4136 ;|Mnemonic |SZHPNC|Description |Notes |
4137 ;----------------------------------------------------------------
4138 ;|INI |?*??1-|Input and Increment |[HL]=[C],HL=HL+1,B=B-1|
4139 ;|IND |?*??1-|Input and Decrement |[HL]=[C],HL=HL-1,B=B-1|
4140 ;|INIR |?1??1-|Input, Inc., Repeat |INI till B=0 |
4141 ;|INDR |?1??1-|Input, Dec., Repeat |IND till B=0 |
4146 cbr z_flags,(1<<ZFL_Z)
4147 sbr z_flags,(1<<ZFL_N)
4154 sbr z_flags,(1<<ZFL_Z)
4160 rcall op_INxx_common
4168 rcall op_INxx_common
4191 ;----------------------------------------------------------------
4192 ;|Mnemonic |SZHPNC|Description |Notes |
4193 ;----------------------------------------------------------------
4194 ;|OUTI |?*??1-|Output and Increment |[C]=[HL],HL=HL+1,B=B-1|
4195 ;|OUTD |?*??1-|Output and Decrement |[C]=[HL],HL=HL-1,B=B-1|
4196 ;|OTIR |?1??1-|Output, Inc., Repeat |OUTI till B=0 |
4197 ;|OTDR |?1??1-|Output, Dec., Repeat |OUTD till B=0 |
4203 lcall dram_read ;temp = (z)
4206 cbr z_flags,(1<<ZFL_Z)
4207 sbr z_flags,(1<<ZFL_N)
4210 sbr z_flags,(1<<ZFL_Z)
4216 rcall op_OUTxx_common
4217 sub z_l,_255 ;-low(-1)
4218 sbc z_h,_255 ;-high(-1)
4224 rcall op_OUTxx_common
4225 add z_l,_255 ;+low(-1)
4226 adc z_h,_255 ;+high(-1)
4248 opctable EDjmp, PC ;+ 2*256
4250 instr fetch_nop, op_nop, store_nop ;00 ;NOP
4251 instr fetch_nop, op_nop, store_nop ;01 ;NOP
4252 instr fetch_nop, op_nop, store_nop ;02 ;NOP
4253 instr fetch_nop, op_nop, store_nop ;03 ;NOP
4254 instr fetch_nop, op_nop, store_nop ;04 ;NOP
4255 instr fetch_nop, op_nop, store_nop ;05 ;NOP
4256 instr fetch_nop, op_nop, store_nop ;06 ;NOP
4257 instr fetch_nop, op_nop, store_nop ;07 ;NOP
4258 instr fetch_nop, op_nop, store_nop ;08 ;NOP
4259 instr fetch_nop, op_nop, store_nop ;09 ;NOP
4260 instr fetch_nop, op_nop, store_nop ;0A ;NOP
4261 instr fetch_nop, op_nop, store_nop ;0B ;NOP
4262 instr fetch_nop, op_nop, store_nop ;0C ;NOP
4263 instr fetch_nop, op_nop, store_nop ;0D ;NOP
4264 instr fetch_nop, op_nop, store_nop ;0E ;NOP
4265 instr fetch_nop, op_nop, store_nop ;0F ;NOP
4266 instr fetch_nop, op_nop, store_nop ;10 ;NOP
4267 instr fetch_nop, op_nop, store_nop ;11 ;NOP
4268 instr fetch_nop, op_nop, store_nop ;12 ;NOP
4269 instr fetch_nop, op_nop, store_nop ;13 ;NOP
4270 instr fetch_nop, op_nop, store_nop ;14 ;NOP
4271 instr fetch_nop, op_nop, store_nop ;15 ;NOP
4272 instr fetch_nop, op_nop, store_nop ;16 ;NOP
4273 instr fetch_nop, op_nop, store_nop ;17 ;NOP
4274 instr fetch_nop, op_nop, store_nop ;18 ;NOP
4275 instr fetch_nop, op_nop, store_nop ;19 ;NOP
4276 instr fetch_nop, op_nop, store_nop ;1A ;NOP
4277 instr fetch_nop, op_nop, store_nop ;1B ;NOP
4278 instr fetch_nop, op_nop, store_nop ;1C ;NOP
4279 instr fetch_nop, op_nop, store_nop ;1D ;NOP
4280 instr fetch_nop, op_nop, store_nop ;1E ;NOP
4281 instr fetch_nop, op_nop, store_nop ;1F ;NOP
4282 instr fetch_nop, op_nop, store_nop ;20 ;NOP
4283 instr fetch_nop, op_nop, store_nop ;21 ;NOP
4284 instr fetch_nop, op_nop, store_nop ;22 ;NOP
4285 instr fetch_nop, op_nop, store_nop ;23 ;NOP
4286 instr fetch_nop, op_nop, store_nop ;24 ;NOP
4287 instr fetch_nop, op_nop, store_nop ;25 ;NOP
4288 instr fetch_nop, op_nop, store_nop ;26 ;NOP
4289 instr fetch_nop, op_nop, store_nop ;27 ;NOP
4290 instr fetch_nop, op_nop, store_nop ;28 ;NOP
4291 instr fetch_nop, op_nop, store_nop ;29 ;NOP
4292 instr fetch_nop, op_nop, store_nop ;2A ;NOP
4293 instr fetch_nop, op_nop, store_nop ;2B ;NOP
4294 instr fetch_nop, op_nop, store_nop ;2C ;NOP
4295 instr fetch_nop, op_nop, store_nop ;2D ;NOP
4296 instr fetch_nop, op_nop, store_nop ;2E ;NOP
4297 instr fetch_nop, op_nop, store_nop ;2F ;NOP
4298 instr fetch_nop, op_nop, store_nop ;30 ;NOP
4299 instr fetch_nop, op_nop, store_nop ;31 ;NOP
4300 instr fetch_nop, op_nop, store_nop ;32 ;NOP
4301 instr fetch_nop, op_nop, store_nop ;33 ;NOP
4302 instr fetch_nop, op_nop, store_nop ;34 ;NOP
4303 instr fetch_nop, op_nop, store_nop ;35 ;NOP
4304 instr fetch_nop, op_nop, store_nop ;36 ;NOP
4305 instr fetch_nop, op_nop, store_nop ;37 ;NOP
4306 instr fetch_nop, op_nop, store_nop ;38 ;NOP
4307 instr fetch_nop, op_nop, store_nop ;39 ;NOP
4308 instr fetch_nop, op_nop, store_nop ;3A ;NOP
4309 instr fetch_nop, op_nop, store_nop ;3B ;NOP
4310 instr fetch_nop, op_nop, store_nop ;3C ;NOP
4311 instr fetch_nop, op_nop, store_nop ;3D ;NOP
4312 instr fetch_nop, op_nop, store_nop ;3E ;NOP
4313 instr fetch_nop, op_nop, store_nop ;3F ;NOP
4314 instr fetch_C, op_IN, store2_B ;40 ;IN B,(C)
4315 instr fetch_B, op_OUT, store_nop ;41 ;OUT (C),B
4316 instr fetch_BC, op_SBCHL, store_nop ;42 ;SBC HL,BC
4317 instr fetch_DIR16, op_STBC, store_nop ;43 ;LD (nn),BC
4318 instr fetch_nop, op_NEG, store_nop ;44 ;NEG
4319 instr fetch_nop, op_RETN, store_nop ;45 ;RETN
4320 instr fetch_nop, op_IM0, store_nop ;46 ;IM 0
4321 instr fetch_nop, op_ldia, store_nop ;47 ;LD I,A
4322 instr fetch_C, op_IN, store2_C ;48 ;IN C,(C)
4323 instr fetch_C, op_OUT, store_nop ;49 ;OUT (C),C
4324 instr fetch_BC, op_ADCHL, store_nop ;4A ;ADC HL,BC
4325 instr fetch_DIR16, op_RMEM16, store_BC ;4B nn nn ;LD BC,(nn)
4326 instr fetch_nop, op_NEG, store_nop ;4C ;NEG
4327 instr fetch_nop, op_RETI, store_nop ;4D ;RETI
4328 instr fetch_nop, op_IM0, store_nop ;4E ;IM 0
4329 instr fetch_nop, op_ldra, store_nop ;4F ;LD R,A
4330 instr fetch_C, op_IN, store2_D ;50 ;IN D,(C)
4331 instr fetch_D, op_OUT, store_nop ;51 ;OUT (C),D
4332 instr fetch_DE, op_SBCHL, store_nop ;52 ;SBC HL,DE
4333 instr fetch_DIR16, op_STDE, store_nop ;53 nn nn ;LD (nn),DE
4334 instr fetch_nop, op_NEG, store_nop ;54 ;NEG
4335 instr fetch_nop, op_RETN, store_nop ;55 ;RETN
4336 instr fetch_nop, op_IM1, store_nop ;56 ;IM 1
4337 instr fetch_nop, op_ldai, store_nop ;57 ;LD A,I
4338 instr fetch_C, op_IN, store2_E ;58 ;IN E,(C)
4339 instr fetch_E, op_OUT, store_nop ;59 ;OUT (C),E
4340 instr fetch_DE, op_ADCHL, store_nop ;5A ;ADC HL,DE
4341 instr fetch_DIR16, op_RMEM16, store_DE ;5B nn nn ;LD DE,(nn)
4342 instr fetch_nop, op_NEG, store_nop ;5C ;NEG
4343 instr fetch_nop, op_RETN, store_nop ;5D ;RETN
4344 instr fetch_nop, op_IM2, store_nop ;5E ;IM 2
4345 instr fetch_nop, op_ldar, store_nop ;5F ;LD A,R
4346 instr fetch_C, op_IN, store2_H ;60 ;IN H,(C)
4347 instr fetch_H, op_OUT, store_nop ;61 ;OUT (C),H
4348 instr fetch_HL, op_SBCHL, store_nop ;62 ;SBC HL,HL
4349 instr fetch_DIR16, op_STHL, store_nop ;63 nn nn ;LD (nn),HL
4350 instr fetch_nop, op_NEG, store_nop ;64 ;NEG
4351 instr fetch_nop, op_RETN, store_nop ;65 ;RETN
4352 instr fetch_nop, op_IM0, store_nop ;66 ;IM 0
4353 instr fetch2_mhl, op_RRD, store_mhl ;67 ;RRD
4354 instr fetch_C, op_IN, store2_L ;68 ;IN L,(C)
4355 instr fetch_L, op_OUT, store_nop ;69 ;OUT (C),L
4356 instr fetch_HL, op_ADCHL, store_nop ;6A ;ADC HL,HL
4357 instr fetch_DIR16, op_RMEM16, store_HL ;6B nn nn ;LD HL,(nn)
4358 instr fetch_nop, op_NEG, store_nop ;6C ;NEG
4359 instr fetch_nop, op_RETN, store_nop ;6D ;RETN
4360 instr fetch_nop, op_IM0, store_nop ;6E ;IM 0
4361 instr fetch2_mhl, op_RLD, store_mhl ;6F ;RLD
4362 instr fetch_C, op_IN, store_nop ;70 ;IN (C)
4363 instr fetch_0, op_OUT, store_nop ;71 ;OUT (C),0
4364 instr fetch_SP, op_SBCHL, store_nop ;72 ;SBC HL,SP
4365 instr fetch_DIR16, op_STSP, store_nop ;73 nn nn ;LD (nn),SP
4366 instr fetch_nop, op_NEG, store_nop ;74 ;NEG
4367 instr fetch_nop, op_RETN, store_nop ;75 ;RETN
4368 instr fetch_nop, op_IM1, store_nop ;76 ;IM 1
4369 instr fetch_nop, op_nop, store_nop ;77 ;NOP
4370 instr fetch_C, op_IN, store2_A ;78 ;IN A,(C)
4371 instr fetch_A, op_OUT, store_nop ;79 ;OUT (C),A
4372 instr fetch_SP, op_ADCHL, store_nop ;7A ;ADC HL,SP
4373 instr fetch_DIR16, op_RMEM16, store_SP ;7B nn nn ;LD SP,(nn)
4374 instr fetch_nop, op_NEG, store_nop ;7C ;NEG
4375 instr fetch_nop, op_RETN, store_nop ;7D ;RETN
4376 instr fetch_nop, op_IM2, store_nop ;7E ;IM 2
4377 instr fetch_nop, op_nop, store_nop ;7F ;NOP
4378 instr fetch_nop, op_nop, store_nop ;80 ;NOP
4379 instr fetch_nop, op_nop, store_nop ;81 ;NOP
4380 instr fetch_nop, op_nop, store_nop ;82 ;NOP
4381 instr fetch_nop, op_nop, store_nop ;83 ;NOP
4382 instr fetch_nop, op_nop, store_nop ;84 ;NOP
4383 instr fetch_nop, op_nop, store_nop ;85 ;NOP
4384 instr fetch_nop, op_nop, store_nop ;86 ;NOP
4385 instr fetch_nop, op_nop, store_nop ;87 ;NOP
4386 instr fetch_nop, op_nop, store_nop ;88 ;NOP
4387 instr fetch_nop, op_nop, store_nop ;89 ;NOP
4388 instr fetch_nop, op_nop, store_nop ;8A ;NOP
4389 instr fetch_nop, op_nop, store_nop ;8B ;NOP
4390 instr fetch_nop, op_nop, store_nop ;8C ;NOP
4391 instr fetch_nop, op_nop, store_nop ;8D ;NOP
4392 instr fetch_nop, op_nop, store_nop ;8E ;NOP
4393 instr fetch_nop, op_nop, store_nop ;8F ;NOP
4394 instr fetch_nop, op_nop, store_nop ;90 ;NOP
4395 instr fetch_nop, op_nop, store_nop ;91 ;NOP
4396 instr fetch_nop, op_nop, store_nop ;92 ;NOP
4397 instr fetch_nop, op_nop, store_nop ;93 ;NOP
4398 instr fetch_nop, op_nop, store_nop ;94 ;NOP
4399 instr fetch_nop, op_nop, store_nop ;95 ;NOP
4400 instr fetch_nop, op_nop, store_nop ;96 ;NOP
4401 instr fetch_nop, op_nop, store_nop ;97 ;NOP
4402 instr fetch_nop, op_nop, store_nop ;98 ;NOP
4403 instr fetch_nop, op_nop, store_nop ;99 ;NOP
4404 instr fetch_nop, op_nop, store_nop ;9A ;NOP
4405 instr fetch_nop, op_nop, store_nop ;9B ;NOP
4406 instr fetch_nop, op_nop, store_nop ;9C ;NOP
4407 instr fetch_nop, op_nop, store_nop ;9D ;NOP
4408 instr fetch_nop, op_nop, store_nop ;9E ;NOP
4409 instr fetch_nop, op_nop, store_nop ;9F ;NOP
4410 instr fetch_nop, op_LDI, store_nop ;A0 ;LDI
4411 instr fetch_nop, op_CPI, store_nop ;A1 ;CPI
4412 instr fetch_nop, op_INI, store_nop ;A2 ;INI
4413 instr fetch_nop, op_OUTI, store_nop ;A3 ;OUTI
4414 instr fetch_nop, op_nop, store_nop ;A4 ;NOP
4415 instr fetch_nop, op_nop, store_nop ;A5 ;NOP
4416 instr fetch_nop, op_nop, store_nop ;A6 ;NOP
4417 instr fetch_nop, op_nop, store_nop ;A7 ;NOP
4418 instr fetch_nop, op_LDD, store_nop ;A8 ;LDD
4419 instr fetch_nop, op_CPD, store_nop ;A9 ;CPD
4420 instr fetch_nop, op_IND, store_nop ;AA ;IND
4421 instr fetch_nop, op_OUTD, store_nop ;AB ;OUTD
4422 instr fetch_nop, op_nop, store_nop ;AC ;NOP
4423 instr fetch_nop, op_nop, store_nop ;AD ;NOP
4424 instr fetch_nop, op_nop, store_nop ;AE ;NOP
4425 instr fetch_nop, op_nop, store_nop ;AF ;NOP
4426 instr fetch_nop, op_LDIR, store_nop ;B0 ;LDIR
4427 instr fetch_nop, op_CPIR, store_nop ;B1 ;CPIR
4428 instr fetch_nop, op_INIR, store_nop ;B2 ;INIR
4429 instr fetch_nop, op_OTIR, store_nop ;B3 ;OTIR
4430 instr fetch_nop, op_nop, store_nop ;B4 ;NOP
4431 instr fetch_nop, op_nop, store_nop ;B5 ;NOP
4432 instr fetch_nop, op_nop, store_nop ;B6 ;NOP
4433 instr fetch_nop, op_nop, store_nop ;B7 ;NOP
4434 instr fetch_nop, op_LDDR, store_nop ;B8 ;LDDR
4435 instr fetch_nop, op_CPDR, store_nop ;B9 ;CPDR
4436 instr fetch_nop, op_INDR, store_nop ;BA ;INDR
4437 instr fetch_nop, op_OTDR, store_nop ;BB ;OTDR
4438 instr fetch_nop, op_nop, store_nop ;BC ;NOP
4439 instr fetch_nop, op_nop, store_nop ;BD ;NOP
4440 instr fetch_nop, op_nop, store_nop ;BE ;NOP
4441 instr fetch_nop, op_nop, store_nop ;BF ;NOP
4442 instr fetch_nop, op_nop, store_nop ;C0 ;NOP
4443 instr fetch_nop, op_nop, store_nop ;C1 ;NOP
4444 instr fetch_nop, op_nop, store_nop ;C2 ;NOP
4445 instr fetch_nop, op_nop, store_nop ;C3 ;NOP
4446 instr fetch_nop, op_nop, store_nop ;C4 ;NOP
4447 instr fetch_nop, op_nop, store_nop ;C5 ;NOP
4448 instr fetch_nop, op_nop, store_nop ;C6 ;NOP
4449 instr fetch_nop, op_nop, store_nop ;C7 ;NOP
4450 instr fetch_nop, op_nop, store_nop ;C8 ;NOP
4451 instr fetch_nop, op_nop, store_nop ;C9 ;NOP
4452 instr fetch_nop, op_nop, store_nop ;CA ;NOP
4453 instr fetch_nop, op_nop, store_nop ;CB ;NOP
4454 instr fetch_nop, op_nop, store_nop ;CC ;NOP
4455 instr fetch_nop, op_nop, store_nop ;CD ;NOP
4456 instr fetch_nop, op_nop, store_nop ;CE ;NOP
4457 instr fetch_nop, op_nop, store_nop ;CF ;NOP
4458 instr fetch_nop, op_nop, store_nop ;D0 ;NOP
4459 instr fetch_nop, op_nop, store_nop ;D1 ;NOP
4460 instr fetch_nop, op_nop, store_nop ;D2 ;NOP
4461 instr fetch_nop, op_nop, store_nop ;D3 ;NOP
4462 instr fetch_nop, op_nop, store_nop ;D4 ;NOP
4463 instr fetch_nop, op_nop, store_nop ;D5 ;NOP
4464 instr fetch_nop, op_nop, store_nop ;D6 ;NOP
4465 instr fetch_nop, op_nop, store_nop ;D7 ;NOP
4466 instr fetch_nop, op_nop, store_nop ;D8 ;NOP
4467 instr fetch_nop, op_nop, store_nop ;D9 ;NOP
4468 instr fetch_nop, op_nop, store_nop ;DA ;NOP
4469 instr fetch_nop, op_nop, store_nop ;DB ;NOP
4470 instr fetch_nop, op_nop, store_nop ;DC ;NOP
4471 instr fetch_nop, op_nop, store_nop ;DD ;NOP
4472 instr fetch_nop, op_nop, store_nop ;DE ;NOP
4473 instr fetch_nop, op_nop, store_nop ;DF ;NOP
4474 instr fetch_nop, op_nop, store_nop ;E0 ;NOP
4475 instr fetch_nop, op_nop, store_nop ;E1 ;NOP
4476 instr fetch_nop, op_nop, store_nop ;E2 ;NOP
4477 instr fetch_nop, op_nop, store_nop ;E3 ;NOP
4478 instr fetch_nop, op_nop, store_nop ;E4 ;NOP
4479 instr fetch_nop, op_nop, store_nop ;E5 ;NOP
4480 instr fetch_nop, op_nop, store_nop ;E6 ;NOP
4481 instr fetch_nop, op_nop, store_nop ;E7 ;NOP
4482 instr fetch_nop, op_nop, store_nop ;E8 ;NOP
4483 instr fetch_nop, op_nop, store_nop ;E9 ;NOP
4484 instr fetch_nop, op_nop, store_nop ;EA ;NOP
4485 instr fetch_nop, op_nop, store_nop ;EB ;NOP
4486 instr fetch_nop, op_nop, store_nop ;EC ;NOP
4487 instr fetch_nop, op_nop, store_nop ;ED ;NOP
4488 instr fetch_nop, op_nop, store_nop ;EE ;NOP
4489 instr fetch_nop, op_nop, store_nop ;EF ;NOP
4490 instr fetch_nop, op_nop, store_nop ;F0 ;NOP
4491 instr fetch_nop, op_nop, store_nop ;F1 ;NOP
4492 instr fetch_nop, op_nop, store_nop ;F2 ;NOP
4493 instr fetch_nop, op_nop, store_nop ;F3 ;NOP
4494 instr fetch_nop, op_nop, store_nop ;F4 ;NOP
4495 instr fetch_nop, op_nop, store_nop ;F5 ;NOP
4496 instr fetch_nop, op_nop, store_nop ;F6 ;NOP
4497 instr fetch_nop, op_nop, store_nop ;F7 ;NOP
4498 instr fetch_nop, op_nop, store_nop ;F8 ;NOP
4499 instr fetch_nop, op_nop, store_nop ;F9 ;NOP
4500 instr fetch_nop, op_nop, store_nop ;FA ;NOP
4501 instr fetch_nop, op_nop, store_nop ;FB ;NOP
4502 instr fetch_nop, op_nop, store_nop ;FC ;NOP
4503 instr fetch_nop, op_nop, store_nop ;FD ;NOP
4504 instr fetch_nop, op_nop, store_nop ;FE ;NOP
4505 instr fetch_nop, op_nop, store_nop ;FF ;NOP
4510 ;----------------------------------------------------------------
4511 ; Lookup table, stolen from z80ex, Z80 emulation library.
4512 ; http://z80ex.sourceforge.net/
4514 ; The S, Z, 5 and 3 bits and the parity of the lookup value
4518 .org (PC+255) & 0xff00
4520 ; .org FLASHEND & 0xff00
4523 .db 0x44,0x00,0x00,0x04,0x00,0x04,0x04,0x00
4524 .db 0x08,0x0c,0x0c,0x08,0x0c,0x08,0x08,0x0c
4525 .db 0x00,0x04,0x04,0x00,0x04,0x00,0x00,0x04
4526 .db 0x0c,0x08,0x08,0x0c,0x08,0x0c,0x0c,0x08
4527 .db 0x20,0x24,0x24,0x20,0x24,0x20,0x20,0x24
4528 .db 0x2c,0x28,0x28,0x2c,0x28,0x2c,0x2c,0x28
4529 .db 0x24,0x20,0x20,0x24,0x20,0x24,0x24,0x20
4530 .db 0x28,0x2c,0x2c,0x28,0x2c,0x28,0x28,0x2c
4531 .db 0x00,0x04,0x04,0x00,0x04,0x00,0x00,0x04
4532 .db 0x0c,0x08,0x08,0x0c,0x08,0x0c,0x0c,0x08
4533 .db 0x04,0x00,0x00,0x04,0x00,0x04,0x04,0x00
4534 .db 0x08,0x0c,0x0c,0x08,0x0c,0x08,0x08,0x0c
4535 .db 0x24,0x20,0x20,0x24,0x20,0x24,0x24,0x20
4536 .db 0x28,0x2c,0x2c,0x28,0x2c,0x28,0x28,0x2c
4537 .db 0x20,0x24,0x24,0x20,0x24,0x20,0x20,0x24
4538 .db 0x2c,0x28,0x28,0x2c,0x28,0x2c,0x2c,0x28
4539 .db 0x80,0x84,0x84,0x80,0x84,0x80,0x80,0x84
4540 .db 0x8c,0x88,0x88,0x8c,0x88,0x8c,0x8c,0x88
4541 .db 0x84,0x80,0x80,0x84,0x80,0x84,0x84,0x80
4542 .db 0x88,0x8c,0x8c,0x88,0x8c,0x88,0x88,0x8c
4543 .db 0xa4,0xa0,0xa0,0xa4,0xa0,0xa4,0xa4,0xa0
4544 .db 0xa8,0xac,0xac,0xa8,0xac,0xa8,0xa8,0xac
4545 .db 0xa0,0xa4,0xa4,0xa0,0xa4,0xa0,0xa0,0xa4
4546 .db 0xac,0xa8,0xa8,0xac,0xa8,0xac,0xac,0xa8
4547 .db 0x84,0x80,0x80,0x84,0x80,0x84,0x84,0x80
4548 .db 0x88,0x8c,0x8c,0x88,0x8c,0x88,0x88,0x8c
4549 .db 0x80,0x84,0x84,0x80,0x84,0x80,0x80,0x84
4550 .db 0x8c,0x88,0x88,0x8c,0x88,0x8c,0x8c,0x88
4551 .db 0xa0,0xa4,0xa4,0xa0,0xa4,0xa0,0xa0,0xa4
4552 .db 0xac,0xa8,0xa8,0xac,0xa8,0xac,0xac,0xa8
4553 .db 0xa4,0xa0,0xa0,0xa4,0xa0,0xa4,0xa4,0xa0
4554 .db 0xa8,0xac,0xac,0xa8,0xac,0xa8,0xa8,0xac
4556 ; vim:set ts=8 noet nowrap