<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>http://wiki.specnext.dev/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mmattsteel</id>
	<title>SpecNext Wiki - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.specnext.dev/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mmattsteel"/>
	<link rel="alternate" type="text/html" href="http://wiki.specnext.dev/Special:Contributions/Mmattsteel"/>
	<updated>2026-04-09T11:29:16Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>http://wiki.specnext.dev/index.php?title=Extended_Z80_instruction_set&amp;diff=11665</id>
		<title>Extended Z80 instruction set</title>
		<link rel="alternate" type="text/html" href="http://wiki.specnext.dev/index.php?title=Extended_Z80_instruction_set&amp;diff=11665"/>
		<updated>2021-07-16T07:32:13Z</updated>

		<summary type="html">&lt;p&gt;Mmattsteel: INIR and OTIR: better explained boundary condition check on B.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This is a general list of Z80 instructions with descriptions. For summaries, you can view the [[Z80 Instruction Table]]. You can also [[Special:RunQuery/OpcodeQuery|search for opcodes]].&lt;br /&gt;
&lt;br /&gt;
=== Term references ===&lt;br /&gt;
* &#039;&#039;Any 8-bit register&#039;&#039; means A, B, C, D, E, H, and L. F, I and R do not count even though they are technically 8 bit registers. Also, the high and low bytes of IX and IY (IXH, IXL, IYH, IYL) can be used as 8-bit registers although this behavior was undocumented on the original Z80.&lt;br /&gt;
* IXY means IX or IY.&lt;br /&gt;
* For the status field:&lt;br /&gt;
** S means Standard. It&#039;s in the Z80 manual. Everything should support it.&lt;br /&gt;
** U means Undocumented. It works on Z80 chips, but it&#039;s not in the manual. These have been known for years and were acknowledged by Zilog, so they should work on everything, but some assemblers may vary the syntax.&lt;br /&gt;
** E means Extension. It &#039;&#039;only&#039;&#039; works on the Z80 core on the Next. It&#039;ll probably only be accepted by assemblers that have been updated specifically for the Next.&lt;br /&gt;
* Each of the flag effects is documented as follows:&lt;br /&gt;
** - means the flag is unchanged.&lt;br /&gt;
** 1 or 0 mean the flag is set or reset as appropriate.&lt;br /&gt;
** ? means we don&#039;t know what effect the instruction has on the flag.&lt;br /&gt;
** ! means the instruction has an unusual effect on the flag which is documented in the description.&lt;br /&gt;
** S means the effect on the flag is &amp;quot;standard&amp;quot;. C is set if a carry/borrow occurred beyond the MSB; Z is set if the result of the operation is zero; H is set if a carry/borrow occurred beyond bit 3.&lt;br /&gt;
** P, V, and L are used for the P/V flag which has several standard effects. P means it&#039;s parity. V means it&#039;s overflow. L means it checks BC as loop counter for some of the block copy and search instructions: P/V = (BC != 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Register and Data manipulation ===&lt;br /&gt;
;LD (LoaD)&lt;br /&gt;
&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LD r, r&#039;&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r := r&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r,n&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=r := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r, (HL)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=r := HL*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r, (IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=r := (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (HL),r&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=HL* := r&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (IXY+d),r&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=(IXY+D)* := r&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (HL), n&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=HL* := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (IXY+d), n&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=(IXY+d)* := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, (BC/DE)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := rr*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, (nn)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=A := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (BC/DE), A&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=rr* := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), A&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=(nn)* := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, I&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=A := I; P/V:=IFF2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, R&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=A := R; P/V:=IFF2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD I, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=I := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD R, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=R := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD BC/DE/HL/SP, nn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr := nn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD IXY, nn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=rr := nn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD HL, (nn)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD BC/DE/SP/IXY, (nn)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=rr := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), HL&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=(nn)* := HL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), BC/DE/SP/IXY&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=(nn)* := rr&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD SP, HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=SP := HL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD SP, IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=SP := IXY&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:The basic data load/transfer instruction. Transfers data from the location specified by the second argument, to the location specified by the first. Available combinations are as follows:&lt;br /&gt;
:* Any 8-bit register can be:&lt;br /&gt;
:** loaded with an immediate value;&lt;br /&gt;
:** loaded with the contents of any other 8-bit register except I and R;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by HL;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory offset-indexed by IX or IY.&lt;br /&gt;
:* Additionally, the accumulator A (only) can be:&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by BC or DE;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by an immediate address;&lt;br /&gt;
:** loaded with the contents of I or R.&lt;br /&gt;
:* Any 16-bit register pair can be:&lt;br /&gt;
:** loaded with an immediate value;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by an immediate address.&lt;br /&gt;
:* Additionally, SP (only) can be:&lt;br /&gt;
:** loaded with the contents of HL, IX, or IY.&lt;br /&gt;
:** The planned &#039;&#039;&#039;ld hl, sp&#039;&#039;&#039; didn&#039;t make it to Next yet, one possible workaround is: &#039;&#039;&#039;ld hl,0&#039;&#039;&#039;; &#039;&#039;&#039;add hl,sp&#039;&#039;&#039;;&lt;br /&gt;
:* Memory referred to by HL or through IX can be assigned immediate values.&lt;br /&gt;
:Although 16-bit register pairs cannot be directly moved between each other, they can be moved by moving the two 8-bit registers. (SP gets a special case because it can&#039;t be addressed via 8-bit registers.) Some assemblers will provide built-in macro instructions allowing, for example, &#039;&#039;&#039;ld bc, de&#039;&#039;&#039;.&lt;br /&gt;
:LD instructions do not alter any flags unless I or R are loaded into A.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EX (EXchange)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EX DE, HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(DE,HL)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX AF, AF&#039;&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=!&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(AF,AF&#039;)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX (SP), HL&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=swap(SP*,HL)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX (SP), IXY&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=swap(SP*,IXY)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Exchanges the contents of two sources. The only permitted combinations are&lt;br /&gt;
:* Exchanging DE and HL;&lt;br /&gt;
:* Exchanging AF and AF&#039;;&lt;br /&gt;
:* Exchanging HL, IX, or IY with the contents of memory pointed to by SP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EXX (EXchange all)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EXX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(BC,BC&#039;);swap(DE,DE&#039;);swap(HL,HL&#039;)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Exchanges BC, DE, and HL with their shadow registers. AF and AF&#039; are not exchanged. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PUSH&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PUSH BC/DE/HL/AF&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=SP-=2; SP*:=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=PUSH IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=SP-=2; SP*:=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=PUSH nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=SP-=2; SP*:=nn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Pushes the given argument on the stack. This can be any 16-bit register pair except SP. SP is reduced by 2 and then the argument is written to the new location SP points to.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;POP&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=POP BC/DE/HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=POP AF&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=!&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=POP IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Pops the given argument from the stack. This can be any 16-bit register pair except SP. The current value at SP is copied to the register pair and then SP is raised by 2.&lt;br /&gt;
:Popping into AF does set value of flag register F directly to low 8 bits of value from stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Block Copy ===&lt;br /&gt;
;LDI (LoaD and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=DE*:=HL*; DE++; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Copies the byte pointed to by HL to the address pointed to by DE, then adds 1 to DE and HL and subtracts 1 from BC. P/V is set to (BC!=0), i.e. set when non zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDIR (LoaD and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do LDI while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Automatically loops LDI until BC reaches zero. Note the last iteration starts when BC=1 and ends with BC=0 (starting the LDIR with BC=0 will start 64kiB transfer, most likely overwriting vital parts of system memory and/or code itself).&lt;br /&gt;
:Flag effects are the same as LDI except that P/V will always be reset, because BC by definition reaches 0 before this instruction ends (normally - unless something overwrites LDIR opcode while BC&amp;gt;0).&lt;br /&gt;
:Interrupts may interrupt LDIR instruction while looping (after each single LDI sub-part finished) and LDIR will resume after and finish loop properly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDD (LoaD and Decrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=DE*:=HL*; DE--; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as LDI, but subtracts 1 from DE and HL instead of adding.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDDR (LoaD and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=0&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do LDD while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as LDIR but loops LDD instead of LDI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDWS&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDWS&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=DE*:=HL*; INC L; INC D;&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next-only extended opcode. Copies the byte pointed to by HL to the address pointed to by DE and increments only L and D. This is used for vertically copying bytes to the Layer 2 display.&lt;br /&gt;
:The flags are identical to what the &#039;&#039;&#039;INC D&#039;&#039;&#039; instruction would produce.&lt;br /&gt;
:Note the source data are read only from single 256B (aligned) block of memory, because only L is incremented, not HL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDIX, LDIRX, LDDX, LDDRX&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDIX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx={if HL*!=A DE*:=HL*;} DE++; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDIRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do LDIX while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDDX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx={if HL*!=A DE*:=HL*;} DE++; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDDRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do LDDX while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next-only extended opcodes. Behave similarly as their non-X equivalents except the byte is not copied if it is equal to A and LDDX/LDDRX advance DE by incrementing it (like LDI), while HL is decremented (like LDD).&lt;br /&gt;
:Second difference to non-X instructions (as usual with next-only opcodes due to implementation), the extended ones don&#039;t modify any flags.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDPIRX &lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDPIRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do{t:=(HL&amp;amp;$FFF8+E&amp;amp;7)*; {if t!=A DE*:=t;} DE++; BC--}while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Similar to LDIRX except the source byte address is not just HL, but is obtained by using the top 13 bits of HL and the lower 3 bits of DE and HL does not increment during whole loop (HL works as base address of aligned 8 byte lookup table, DE works as destination and also wrapping index 0..7 into table). This is intended for &amp;quot;pattern fill&amp;quot; functionality.&lt;br /&gt;
&lt;br /&gt;
=== Block Search ===&lt;br /&gt;
;CPI (ComPare and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*==A?; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Compares the byte pointed to by HL with the contents of A and sets Z if it matches or S if the comparison goes negative. Then adds 1 to HL and subtracts 1 from BC. P/V is set to (BC!=0), i.e. set when non zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPIR (ComPare and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do CPI while (!Z &amp;amp;&amp;amp; BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Automatically loops CPI until either Z is set (A is found in the byte pointed to by HL) or P/V is reset (BC reached 0).&lt;br /&gt;
:Flag effects are the same as CPI except that one of the two terminating flag conditions will always be true.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPD (ComPare and Decrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*==A?; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as CPI, but subtracts 1 from HL instead of adding it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPDR (ComPare and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do CPD while (!Z &amp;amp;&amp;amp; BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as CPIR but loops CPD instead of CPI. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Arithmetic ===&lt;br /&gt;
;ADD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A+=r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A+=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL+=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD IXY, BC/DE/IXY/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=IXY+=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL/DE/BC, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=rr+=unsigned A&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL/DE/BC, nn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=rr+=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Adds values together. Legal combinations are:&lt;br /&gt;
:* When adding 8-bit values the first parameter must be A and the second may be:&lt;br /&gt;
:** The contents of an 8-bit register;&lt;br /&gt;
:** An immediate value;&lt;br /&gt;
:** The contents of memory pointed to by HL or by indexing based on IX or IY.&lt;br /&gt;
:* When adding 16-bit values the first parameter must be HL, IX or IY and the second must be another 16-bit register pair. If the first parameter is IX or IY, the second cannot be HL or the other index register. &lt;br /&gt;
:* For 16 bit additions (regular Z80), H is set if a carry occurred in bit 11 (ie, a half carry in the high byte)&lt;br /&gt;
:* On the Spectrum Next the extended opcodes also allow the first parameter to be HL, DE, or BC and the second to be A (A will be zero extended to 16 bits) or an 16bit immediate value.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;ADC (ADd with Carry)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A+=r+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=n+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=HL*+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A+=(IXY+d)*+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL+=rr+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Adds values together, adding an additional 1 if Carry is set. Legal combinations are the same as for ADD, although there are no extended opcode versions of ADC and in 16-bit values the first parameter can only be HL. For 16-bit values the H flag is set if carry from bit 11; otherwise, it is reset.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
;SUB&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SUB r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A -= r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A -= n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A -= HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A -= (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts a value from A. Legal combinations are the same as for ADD for 8-bit, except that A does not need to be specified as the first parameter because subtraction can only be done from A. SUB cannot be used for 16-bit numbers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SBC (SuBtract with Carry, er, borrow)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A-=(r+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=(n+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=(HL*+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A-=((IXY+d)+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL-=(rr+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts values, subtracting an additional 1 if Carry is set. Legal combinations are the same as for ADD, although there are no extended opcode versions of SBC and in 16-bit values the first parameter can only be HL. For 16-bit values the H flag is set if borrow from bit 12; otherwise, it is reset.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;AND, OR, XOR&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=AND r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A &amp;amp; r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A &amp;amp; n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A &amp;amp; HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A &amp;amp; (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A OR r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A OR n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A OR HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A OR (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A ^ r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A ^ n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A ^ HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A ^ (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Performs the appropriate bitwise operator on A. Legal combinations are the same as SUB. &lt;br /&gt;
&lt;br /&gt;
:XOR A is faster and shorter than LD A,0&lt;br /&gt;
&lt;br /&gt;
;MIRROR&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=MIRROR A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A[76543210]:=A[01234567]&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Mirrors (reverses the order) of bits in the accumulator. Older core versions supported MIRROR DE, but this was removed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CP (ComPare)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CP r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A-=r?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=n?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=HL*?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A-=(IXY+d)?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the flags as if a SUB was performed but does not perform it. Legal combinations are the same as SUB. This is commonly used to set the flags to perform an equality or greater/less test.&lt;br /&gt;
:* CP is &#039;&#039;not&#039;&#039; equivalent to &amp;quot;if&amp;quot; in high level languages. Flag based jumps can follow any instruction that sets the flags, not just CP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;TEST&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=TEST n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=A&amp;amp;n?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
: Next extended opcode. Similar to CP, but performs an AND instead of a subtraction. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INC (INCrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL*++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=rr++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr++&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Increments the target by one. The argument can be any 8-bit register, any 16-bit register pair, or the address pointed to by HL or indexed via IX or IY. P/V is set if the target held $7F. N is reset.&lt;br /&gt;
:* INC A is faster than ADD 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DEC (DECrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DEC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL*--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+D)*--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=rr--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Decrements the target by one. Allowed arguments are the same as INC. Flag effects are the same as INC except H refers to borrow, not carry; and P/V is set if the target held $80.&lt;br /&gt;
:* DEC A is faster than SUB 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLC (Rotate Left Circular)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[7]; r:=r&amp;lt;&amp;lt;1; r[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[7]; HL*:=HL*&amp;lt;&amp;lt;1; HL*[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[7]; (IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1; (IXY+d)*[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[7]; (IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; (IX+d)*[0]:=x; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Rotates the target bitwise left by one position. The MSB is copied to bit 0, and also to Carry. Can be applied to any 8-bit register or to a location in memory pointed to by HL or indexed via IX or IY. The final alternative is undocumented, and stores the result in a register as well as performing the operation. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RL (Rotate Left)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RL r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[7]; r:=r&amp;lt;&amp;lt;1; r[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[7]; HL*:=HL*&amp;lt;&amp;lt;1; HL*[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[7]; (IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1; (IXY+d)*[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[7]; (IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; (IX+d)*[0]:=CF; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLC, except the MSB is copied to Carry only, and the previous contents of Carry are copied to bit 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RRC, RR (Rotate Right Circular, Rotate Right)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RRC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[0]; r:=r&amp;gt;&amp;gt;1; r[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[0]; HL*:=HL*&amp;gt;&amp;gt;1; HL*[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[0]; (IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1; (IXY+d)*[7]:=x; CF:=x&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[0]; (IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1; (IX+d)*[7]:=x; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[0]; r:=r&amp;gt;&amp;gt;1; r[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[0]; HL*:=HL*&amp;gt;&amp;gt;1; HL*[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[0]; (IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1; (IXY+d)*[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[0]; (IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1; (IX+d)*[7]:=CF; CF:=x; r=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLC and RL except they rotate right instead of left.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SLA (Shift Left Arithmetic)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SLA r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL*&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; r=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RL except bit 0 is set to zero, not the previous contents of Carry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SRA (Shift Right Arithmetic)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SRA r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r&amp;gt;&amp;gt;1 OR r[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL*&amp;gt;&amp;gt;1 OR HL*[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1 OR (IXY+d)*[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1 OR (IX+d)*[7]; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RR except the MSB is left unchanged (on the assumption that it&#039;s the sign bit), not replaced with the previous contents of Carry. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SRL (Shift Right Logical)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SRL r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=unsigned(r)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=unsigned(HL*)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=unsigned((IXY+d)*)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL r,(IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=unsigned((IXY+d)*)&amp;gt;&amp;gt;1; r:=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as SLA except it shifts right instead of left.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLCA, RLA, RRCA, RRA&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLCA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[7]; A:=A&amp;lt;&amp;lt;1; A[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[7]; A:=A&amp;lt;&amp;lt;1; A[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRCA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[0]; A:=A&amp;gt;&amp;gt;1; A[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[0]; A:=A&amp;gt;&amp;gt;1; A[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as their matching instruction except they work only on A, are faster, and do not alter S, Z or P/V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SLL (Shift Left Logical)&lt;br /&gt;
:This mnemonic has no associated opcode. There is no difference between a logical and arithmetic shift left, so both can use SLA, but some assemblers will allow SLL as an equivalent. Unfortunately, some will also assemble it as SL1. So it&#039;s probably worth just avoiding.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SL1 or SLI (Shift Left and Add 1) or (Shift Left and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SL1 r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=(r&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=(HL*&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=((IXY+d)*&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 r,(IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=((IXY+d)*&amp;lt;&amp;lt;1)+1; r=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Undocumented opcodes that behave like SLA, but set bit 0 to 1 instead of 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLD (Rotate Left bcd Digit)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=18&lt;br /&gt;
 |shortfx=x=HL*; HL*[0123]:=A[0123]; HL*[7654]:=x[0123]; A[0123]:=x[7654]  &lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Rotates the lower nibble of the byte pointed to by HL, the upper nibble of that byte, and the lower nibble of A, in that order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RRD (Rotate Right bcd Digit)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RRD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=18&lt;br /&gt;
 |shortfx=x=HL*; HL*[7654]:=A[0123]; HL*[0123]:=x[7654]; A[0123]:=x[0123]&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLD, but the order is: the lower nibble pointed to by HL, the lower nibble of the A, and the upper nibble of the byte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Barrel (variable amount) shift and rotate (cores v2+ only)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=BSLA DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=DE&amp;lt;&amp;lt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRA DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=signed(DE)&amp;gt;&amp;gt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRL DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=unsigned(DE)&amp;gt;&amp;gt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRF DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=~(unsigned(~DE)&amp;gt;&amp;gt;(B&amp;amp;31))&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BRLC DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=DE&amp;lt;&amp;lt;(B&amp;amp;15) OR DE&amp;gt;&amp;gt;(16-B&amp;amp;15)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Shift instructions use only bits 4..0 of B, BSLA shifts DE left, BSRA/BSRL/BSRF shifts DE right in arithmetic/logical/fill-one way. BRLC rotates DE left by B places, uses only bits 3..0 of B (to rotate right, use B=16-places).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPL (ComPLement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPL&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A:=~A&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inverts the contents of the accumulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NEG (NEGate)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NEG&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=0-A&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts the contents of the accumulator from zero, making it negative for the purpose of two&#039;s complement. P/V is set if A previously held $80. C is set if accumulator did not previously hold $00.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CCF (Complement Carry Flag)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CCF&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=CF:=!CF&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inverts the carry flag. (Does not, as might be assumed, clear it!) Also sets H to the previous value of the carry flag.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SCF (Set Carry Flag)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SCF&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=1&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=CF:=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the carry flag.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;BIT (test BIT)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=HL*[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=(IXY+d)*[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Tests if a bit is set on target value. The first parameter states which bit. The second can be any 8-bit register, or the location in memory pointed to by HL or indexed by IX or IY. Sets Z if specified bit was 0. S and P/V are destroyed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SET (SET bit)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SET b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL* OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)* OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET r,b,(IX+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)* OR (1&amp;lt;&amp;lt;b); r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SETAE&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=unsigned($80)&amp;gt;&amp;gt;(E&amp;amp;7)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the numbered bit on target value. The possible targets are the same as BIT. The three parameter variant is undocumented and stores the result in a register as well as performing the SET.&lt;br /&gt;
:SETAE is a Next extended opcode which takes the bit number to set from E (only the low 3 bits) and sets whole A to value of that bit, but counted from top to bottom (E=0 will produce A:=$80, E=7 will produce A:=$01). This works as pixel mask for ULA bitmap modes, when E is 0..255 x-coordinate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RES (RESet bit)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RES b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL* &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)* &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES r,b,(IX+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)* &amp;amp; (~(1&amp;lt;&amp;lt;b)); r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Resets the numbered bit on target value. The possible targets are the same as BIT.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DAA (Decimal Adjust Accumulator)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DAA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=if(A&amp;amp;$0F&amp;gt;$09 or HF) A±=$06; if(A&amp;amp;$F0&amp;gt;$90 or CF) A±=$60 (± depends on NF)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Modifies the contents of the accumulator based on the flags left by previous operation to correct for binary coded decimal (BCD).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;MUL (MULtiply)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=MUL d,e&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=DE:=D*E&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Multiplies D by E, storing 16 bit result into DE. Does not alter any flags (the opcode is not compatible with any of the R800/Z180/eZ80/... variants of MUL, it is solely Next specific).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SWAPNIB (SWAP NIBbles)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SWAPNIB&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=A[3210]&amp;lt;&amp;lt;4 OR A[7654]&amp;gt;&amp;gt;4&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Swaps the high and low nibbles of the accumulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PIXELAD (PIXEL ADdress)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PIXELAD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=HL:=$4000+((D&amp;amp;$C0)&amp;lt;&amp;lt;5)+((D&amp;amp;$07)&amp;lt;&amp;lt;8)+((D&amp;amp;$38)&amp;lt;&amp;lt;2)+(E&amp;gt;&amp;gt;3)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Takes E and D as the X,Y coordinate of a point and calculates the address of the byte containing this pixel in the pixel area of standard ULA screen 0, storing it in HL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PIXELDN (PIXEL DowN)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PIXELDN&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=if(HL&amp;amp;$0700!=$0700) HL+=256;&amp;lt;br&amp;gt;&lt;br /&gt;
else if(HL&amp;amp;$e0!=$e0) HL:=HL&amp;amp;$F8FF+$20;&amp;lt;br&amp;gt;&lt;br /&gt;
else HL:=HL&amp;amp;$F81F+$0800&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Updates the address in HL to move down by one line of pixels.&lt;br /&gt;
&lt;br /&gt;
=== Control Flow ===&lt;br /&gt;
;JP (JumP)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JP nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (HL)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=PC:=HL (not PC:=HL*)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (IXY)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=PC:=IXY (not PC:=IXY*)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (C)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=?&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=?&lt;br /&gt;
 |z=?&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=PC:=PC&amp;amp;$C000+IN(C)&amp;lt;&amp;lt;6&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Jumps (sets the PC) to the given address. The address can be given immediately or read from HL, IX, or IY. Note that although the variants that use register pairs &#039;&#039;look&#039;&#039; like they are using indirect addressing, JP (HL) jumps to the address stored in the register HL, not the address stored at the address HL points to. The JP (C) sets bottom 14 bits of current PC&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; to value read from I/O port: PC[13:0] = (IN (C) &amp;lt;&amp;lt; 6) (can be used to execute code block read from a disk stream) * &amp;quot;current PC&amp;quot; is address of next instruction after JP (C), as the PC is advanced by fetching op code from memory and is already advanced when execution happens - if the JP instruction resides at the very end of 16k memory block (..FE or ..FF address), then newly composed PC value will land into following 16k block.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;JP cc (JumP conditionally)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JP Z/NZ/NC/C/PO/PE/P/M, nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=if cc PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Conditionally jumps (sets the PC) to the given address. The condition is set in terms of the flags: Zero (Z, NZ), Carry (C, NC), Parity (PO, PE), and Sign (P/M). The address can only be given immediately for a conditional jump.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;JR (Jump Relative)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JR nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JR C/NC/Z/NZ, nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12 ;   7 if not cc&lt;br /&gt;
 |shortfx=if cc PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Jumps to an alternate address by &#039;&#039;adding&#039;&#039; the parameter to the PC - in other words the parameter is an adjustment, not an absolute address. When used in an assembler with labels the syntax should be the same as JP. The JR address can only be given immediately. Conditions are legal, but only those based on carry and zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DJNZ (Decrement reg. b and Jump if Not Zero)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DJNZ n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=B--; if B!=0 PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Decrements B then performs JR NZ.. to the given address. Used for encapsulating loops.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CALL&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CALL nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17&lt;br /&gt;
 |shortfx=SP-=2; SP*:=PC; PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CALL Z/NZ/C/NC/PO/PE/P/M, nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17 ;   10 if not cc&lt;br /&gt;
 |shortfx=if cc {SP-=2; SP*:=PC; PC:=nn}&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Like JP (including the ability to have conditions), but PUSHes the PC before jumping. Used for subroutine calls. &lt;br /&gt;
:* If a subroutine ends with a CALL to another subroutine immediately before the RET, it is more efficient to JP to the other subroutine and allow its RET to return from the whole combination. This might make high-level programmers queasy but your compiler already does it (tail call optimization)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RET (RETurn)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RET&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RET Z/NZ/C/NC/PO/PE/P/M&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11 ;   5 if not cc&lt;br /&gt;
 |shortfx=if cc {PC:=SP*; SP+=2}&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:POPs the PC from the stack, returning from a previous CALL. This can also accept the same conditions as JP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RETI (RETurn from Interrupt)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RETI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Returns from an interrupt service routine (same as RET instruction, but also does signal to I/O device that the interrupt routine is completed).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RETN (RETurn from Non-maskable interrupt)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RETN&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=IFF1:=IFF2; PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Returns from a non-maskable interrupt service routine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RST (ReSTart)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RST n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=CALL n&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Performs a CALL to a routine located at one of eight fixed locations ($00, $08, ..., $38) in the zero page. This is located in ROM, and on the Spectrum only a limited number of values are useful to call built-in ROM routines. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NOP (No OPeration)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NOP&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=PC+=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Does &amp;quot;nothing&amp;quot; (just usual housekeeping like refreshing memory and advancing program counter to next instruction).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;HALT&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=HALT&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=waits for interrupt&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Suspends the CPU until an interrupt is received (maskable interrupts must be enabled to break the wait). While CPU is waiting for interrupt, the fake NOP instruction is being executed, to keep memory refresh going on.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DI (Disable Interrupts)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=IFF1:=0; IFF2:=0&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Disables maskable interrupts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EI (Enable Interrupts)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=IFF1:=1; IFF2:=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Enables maskable interrupts (after next instruction, i.e. for example &amp;quot;EI RET&amp;quot; - the interrupt may happen only after RET instruction is finished (or &amp;quot;EI DI&amp;quot; pair of instructions will not allow any maskable interrupt to happen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IM (Interrupt Mode)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IM n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=Interrupt mode:=n&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets interrupt handling mode. The default for Next is 1. 2 is used for user defined interrupt service routines. IM 0 is useless on Next (and pretty much everything else, to be honest)&lt;br /&gt;
&lt;br /&gt;
=== Input and Output ===&lt;br /&gt;
;IN r, (c); OUT (c), r&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN r, (c)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=r := in(BC)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (c),r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=out(BC,r)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs or outputs a byte value from the 16-bit port number given in BC. R can be any 8-bit register. Note that the port number is given in BC even though the instruction refers only to C. Some assemblers will allow the instruction to be written with &amp;quot;(bc)&amp;quot; instead of &amp;quot;(c)&amp;quot; as a reminder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IN (c); OUT (c), 0&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN (c)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=in(BC)?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (c),0&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=out(BC,0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Undocumented opcodes. The IN variation performs an input, but does not store the result, only setting the flags. The OUT variation outputs 0 on the port. This is the only number that can be output to a port in immediate mode. The Next FPGA does output zero, but some Z80 chips manufactured differently from early batches output different value like 255, so it is not recommended to use OUT (C),0 if you want to reuse your code also on classic ZX Spectrum or publish it as example.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IN a, (n); OUT (n), a&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN A, (n)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=A := in(An)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (n),A&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=out(An,A)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs or outputs the byte value in A from a 16-bit port number where the lower byte is N and the upper byte is A. This is only likely to be useful in cases where the upper byte of the port number is not relevant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INI (INput and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*:=in(BC); HL++; B--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs a value from port BC into memory at the address stored in HL, then increments HL and decrements B. Because B is decremented and is part of the port number, the port number for future INI instructions will change unless it is reset. Z is set if B reached 0; S, H, and P/V are destroyed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INIR (INput and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do INI while(B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Loops INIR until B reaches 0, so that if INIR starts with B=0 it loops 256 times. Because B is decremented during this process and is part of the port number, this is unlikely to be useful except when the upper byte of the port number is not relevant. Interrupts are recognized during execution.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IND, INDR (INput and Decrement, INput and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IND&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*:=in(BC); HL--; B--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do IND while(B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Behave like INI and INIR except that HL is decremented instead of incremented.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;OUTI (Out and Increment), OTIR (Out and Increment Repeated), OUTD (Out and Decrement), OTDR (Out and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=OUTI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=B--; out(BC,HL*); HL++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OTIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do OUTI while (B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUTD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=B--; out(BC,HL*); HL--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OTDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do OUTD while (B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Behave like INI, INIR, IND, INDR except that they output instead of input and B is decremented &#039;&#039;&#039;before&#039;&#039;&#039; the output instead of after. Condition check on B is performed &#039;&#039;&#039;after&#039;&#039;&#039;, so that if OTIR starts with B=0 it loops 256 times.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;OUTINB (Out and Increment with No B)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=OUTINB&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=?&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=?&lt;br /&gt;
 |z=?&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=out(BC,HL*); HL++&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Behaves like OUTI, but doesn&#039;t decrement B.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NEXTREG&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NEXTREG n,n&#039;&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=HwNextReg_n:=n&#039;&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=NEXTREG n, A&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17&lt;br /&gt;
 |shortfx=HwNextReg_n:=A&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Directly sets the [[Board feature control|Next Feature Control Registers]] without going through ports {{PortNo|$243B}} and {{PortNo|$253B}}.&lt;br /&gt;
&lt;br /&gt;
=== Z80N instructions opcodes ===&lt;br /&gt;
&lt;br /&gt;
The Z80 on the Next has extra instructions that are unique to it.  Below is a table of the opcode bytes that are required to select&lt;br /&gt;
those instructions.  The timings are based on some partial testing.  These may not be accurate.&lt;br /&gt;
&lt;br /&gt;
Also there&#039;s initiative led by Matt Davies (author of Odin assembler/editor/debugger tool for ZX Next) to have 4-letter aliases for all new instructions using long mnemonics, the abbreviations suggested are in the last column of the table.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Instruction !! Byte 1 !! Byte 2 !! Byte 3 !! Byte 4 !! T-States !! 4 letter&lt;br /&gt;
|-&lt;br /&gt;
| LDIX || ED || A4 || || || 16&lt;br /&gt;
|-&lt;br /&gt;
| LDWS || ED || A5 || || || 14&lt;br /&gt;
|-&lt;br /&gt;
| LDIRX || ED || B4 || || || 21/16 || LIRX&lt;br /&gt;
|-&lt;br /&gt;
| LDDX || ED || AC || || || 16&lt;br /&gt;
|-&lt;br /&gt;
| LDDRX || ED || BC || || || 21/16 || LDRX&lt;br /&gt;
|-&lt;br /&gt;
| LDPIRX || ED  || B7 || || || 21/16 || LPRX&lt;br /&gt;
|-&lt;br /&gt;
| OUTINB || ED  || 90 || || || 16 || OTIB&lt;br /&gt;
|-&lt;br /&gt;
| MUL D,E || ED || 30 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD HL,A || ED || 31 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD DE,A || ED || 32 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD BC,A || ED || 33 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD HL,$im16 || ED || 34 || low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| ADD DE,$im16 || ED || 35 || low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| ADD BC,$im16 || ED  || 36|| low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| SWAPNIB || ED || 23 || || || 8 || SWAP&lt;br /&gt;
|-&lt;br /&gt;
| MIRROR A || ED || 24 || || || 8 || MIRR&lt;br /&gt;
|-&lt;br /&gt;
| PUSH $im16 || ED || 8A || high || low || 23&lt;br /&gt;
|-&lt;br /&gt;
| NEXTREG $im8,$im8 || ED || 91 || register || value || 20 || NREG&lt;br /&gt;
|-&lt;br /&gt;
| NEXTREG $im8,A || ED  || 92 || register || || 17 || NREG&lt;br /&gt;
|-&lt;br /&gt;
| PIXELDN || ED || 93 || || || 8 || PXDN&lt;br /&gt;
|-&lt;br /&gt;
| PIXELAD || ED || 94 || || || 8 || PXAD&lt;br /&gt;
|-&lt;br /&gt;
| SETAE || ED  || 95 ||  || || 8 || STAE&lt;br /&gt;
|-&lt;br /&gt;
| TEST $im8 || ED || 27 || value || || 11&lt;br /&gt;
|-&lt;br /&gt;
| BSLA DE,B || ED || 28 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRA DE,B || ED || 29 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRL DE,B || ED || 2A || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRF DE,B || ED || 2B || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BRLC DE,B || ED || 2C || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| JP (C) || ED || 98 || || || 13&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;quot;PUSH $im16&amp;quot; instruction is not a mistake.  The operand is encoded in big-endian.&lt;/div&gt;</summary>
		<author><name>Mmattsteel</name></author>
	</entry>
	<entry>
		<id>http://wiki.specnext.dev/index.php?title=Extended_Z80_instruction_set&amp;diff=11526</id>
		<title>Extended Z80 instruction set</title>
		<link rel="alternate" type="text/html" href="http://wiki.specnext.dev/index.php?title=Extended_Z80_instruction_set&amp;diff=11526"/>
		<updated>2020-09-17T19:30:49Z</updated>

		<summary type="html">&lt;p&gt;Mmattsteel: specified T states on false condition for JR and RET&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This is a general list of Z80 instructions with descriptions. For summaries, you can view the [[Z80 Instruction Table]]. You can also [[Special:RunQuery/OpcodeQuery|search for opcodes]].&lt;br /&gt;
&lt;br /&gt;
=== Term references ===&lt;br /&gt;
* &#039;&#039;Any 8-bit register&#039;&#039; means A, B, C, D, E, H, and L. F, I and R do not count even though they are technically 8 bit registers. Also, the high and low bytes of IX and IY (IXH, IXL, IYH, IYL) can be used as 8-bit registers although this behavior was undocumented on the original Z80.&lt;br /&gt;
* IXY means IX or IY.&lt;br /&gt;
* For the status field:&lt;br /&gt;
** S means Standard. It&#039;s in the Z80 manual. Everything should support it.&lt;br /&gt;
** U means Undocumented. It works on Z80 chips, but it&#039;s not in the manual. These have been known for years and were acknowledged by Zilog, so they should work on everything, but some assemblers may vary the syntax.&lt;br /&gt;
** E means Extension. It &#039;&#039;only&#039;&#039; works on the Z80 core on the Next. It&#039;ll probably only be accepted by assemblers that have been updated specifically for the Next.&lt;br /&gt;
* Each of the flag effects is documented as follows:&lt;br /&gt;
** - means the flag is unchanged.&lt;br /&gt;
** 1 or 0 mean the flag is set or reset as appropriate.&lt;br /&gt;
** ? means we don&#039;t know what effect the instruction has on the flag.&lt;br /&gt;
** ! means the instruction has an unusual effect on the flag which is documented in the description.&lt;br /&gt;
** S means the effect on the flag is &amp;quot;standard&amp;quot;. C is set if a carry/borrow occurred beyond the MSB; Z is set if the result of the operation is zero; H is set if a carry/borrow occurred beyond bit 3.&lt;br /&gt;
** P, V, and L are used for the P/V flag which has several standard effects. P means it&#039;s parity. V means it&#039;s overflow. L means it checks BC as loop counter for some of the block copy and search instructions: P/V = (BC != 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Register and Data manipulation ===&lt;br /&gt;
;LD (LoaD)&lt;br /&gt;
&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LD r, r&#039;&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r := r&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r,n&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=r := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r, (HL)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=r := HL*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r, (IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=r := (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (HL),r&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=HL* := r&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (IXY+d),r&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=(IXY+D)* := r&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (HL), n&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=HL* := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (IXY+d), n&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=(IXY+d)* := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, (BC/DE)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := rr*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, (nn)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=A := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (BC/DE), A&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=rr* := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), A&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=(nn)* := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, I&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=A := I; P/V:=IFF2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, R&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=A := R; P/V:=IFF2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD I, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=I := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD R, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=R := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD BC/DE/HL/SP, nn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr := nn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD IXY, nn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=rr := nn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD HL, (nn)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD BC/DE/SP/IXY, (nn)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=rr := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), HL&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=(nn)* := HL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), BC/DE/SP/IXY&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=(nn)* := rr&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD SP, HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=SP := HL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD SP, IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=SP := IXY&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:The basic data load/transfer instruction. Transfers data from the location specified by the second argument, to the location specified by the first. Available combinations are as follows:&lt;br /&gt;
:* Any 8-bit register can be:&lt;br /&gt;
:** loaded with an immediate value;&lt;br /&gt;
:** loaded with the contents of any other 8-bit register except I and R;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by HL;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory offset-indexed by IX or IY.&lt;br /&gt;
:* Additionally, the accumulator A (only) can be:&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by BC or DE;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by an immediate address;&lt;br /&gt;
:** loaded with the contents of I or R.&lt;br /&gt;
:* Any 16-bit register pair can be:&lt;br /&gt;
:** loaded with an immediate value;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by an immediate address.&lt;br /&gt;
:* Additionally, SP (only) can be:&lt;br /&gt;
:** loaded with the contents of HL, IX, or IY.&lt;br /&gt;
:** The planned &#039;&#039;&#039;ld hl, sp&#039;&#039;&#039; didn&#039;t make it to Next yet, one possible workaround is: &#039;&#039;&#039;ld hl,0&#039;&#039;&#039;; &#039;&#039;&#039;add hl,sp&#039;&#039;&#039;;&lt;br /&gt;
:* Memory referred to by HL or through IX can be assigned immediate values.&lt;br /&gt;
:Although 16-bit register pairs cannot be directly moved between each other, they can be moved by moving the two 8-bit registers. (SP gets a special case because it can&#039;t be addressed via 8-bit registers.) Some assemblers will provide built-in macro instructions allowing, for example, &#039;&#039;&#039;ld bc, de&#039;&#039;&#039;.&lt;br /&gt;
:LD instructions do not alter any flags unless I or R are loaded into A.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EX (EXchange)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EX DE, HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(DE,HL)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX AF, AF&#039;&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=!&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(AF,AF&#039;)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX (SP), HL&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=swap(SP*,HL)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX (SP), IXY&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=swap(SP*,IXY)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Exchanges the contents of two sources. The only permitted combinations are&lt;br /&gt;
:* Exchanging DE and HL;&lt;br /&gt;
:* Exchanging AF and AF&#039;;&lt;br /&gt;
:* Exchanging HL, IX, or IY with the contents of memory pointed to by SP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EXX (EXchange all)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EXX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(BC,BC&#039;);swap(DE,DE&#039;);swap(HL,HL&#039;)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Exchanges BC, DE, and HL with their shadow registers. AF and AF&#039; are not exchanged. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PUSH&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PUSH BC/DE/HL/AF&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=SP-=2; SP*:=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=PUSH IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=SP-=2; SP*:=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=PUSH nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=SP-=2; SP*:=nn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Pushes the given argument on the stack. This can be any 16-bit register pair except SP. SP is reduced by 2 and then the argument is written to the new location SP points to.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;POP&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=POP BC/DE/HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=POP AF&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=!&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=POP IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Pops the given argument from the stack. This can be any 16-bit register pair except SP. The current value at SP is copied to the register pair and then SP is raised by 2.&lt;br /&gt;
:Popping into AF does set value of flag register F directly to low 8 bits of value from stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Block Copy ===&lt;br /&gt;
;LDI (LoaD and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=DE*:=HL*; DE++; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Copies the byte pointed to by HL to the address pointed to by DE, then adds 1 to DE and HL and subtracts 1 from BC. P/V is set to (BC!=0), i.e. set when non zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDIR (LoaD and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do LDI while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Automatically loops LDI until BC reaches zero. Note the last iteration starts when BC=1 and ends with BC=0 (starting the LDIR with BC=0 will start 64kiB transfer, most likely overwriting vital parts of system memory and/or code itself).&lt;br /&gt;
:Flag effects are the same as LDI except that P/V will always be reset, because BC by definition reaches 0 before this instruction ends (normally - unless something overwrites LDIR opcode while BC&amp;gt;0).&lt;br /&gt;
:Interrupts may interrupt LDIR instruction while looping (after each single LDI sub-part finished) and LDIR will resume after and finish loop properly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDD (LoaD and Decrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=DE*:=HL*; DE--; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as LDI, but subtracts 1 from DE and HL instead of adding.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDDR (LoaD and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=0&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do LDD while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as LDIR but loops LDD instead of LDI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDWS&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDWS&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=DE*:=HL*; INC L; INC D;&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next-only extended opcode. Copies the byte pointed to by HL to the address pointed to by DE and increments only L and D. This is used for vertically copying bytes to the Layer 2 display.&lt;br /&gt;
:The flags are identical to what the &#039;&#039;&#039;INC D&#039;&#039;&#039; instruction would produce.&lt;br /&gt;
:Note the source data are read only from single 256B (aligned) block of memory, because only L is incremented, not HL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDIX, LDIRX, LDDX, LDDRX&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDIX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx={if HL*!=A DE*:=HL*;} DE++; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDIRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do LDIX while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDDX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx={if HL*!=A DE*:=HL*;} DE++; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDDRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do LDDX while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next-only extended opcodes. Behave similarly as their non-X equivalents except the byte is not copied if it is equal to A and LDDX/LDDRX advance DE by incrementing it (like LDI), while HL is decremented (like LDD).&lt;br /&gt;
:Second difference to non-X instructions (as usual with next-only opcodes due to implementation), the extended ones don&#039;t modify any flags.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDPIRX &lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDPIRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do{t:=(HL&amp;amp;$FFF8+E&amp;amp;7)*; {if t!=A DE*:=t;} DE++; BC--}while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Similar to LDIRX except the source byte address is not just HL, but is obtained by using the top 13 bits of HL and the lower 3 bits of DE and HL does not increment during whole loop (HL works as base address of aligned 8 byte lookup table, DE works as destination and also wrapping index 0..7 into table). This is intended for &amp;quot;pattern fill&amp;quot; functionality.&lt;br /&gt;
&lt;br /&gt;
=== Block Search ===&lt;br /&gt;
;CPI (ComPare and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*==A?; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Compares the byte pointed to by HL with the contents of A and sets Z if it matches or S if the comparison goes negative. Then adds 1 to HL and subtracts 1 from BC. P/V is set to (BC!=0), i.e. set when non zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPIR (ComPare and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do CPI while (!Z &amp;amp;&amp;amp; BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Automatically loops CPI until either Z is set (A is found in the byte pointed to by HL) or P/V is reset (BC reached 0).&lt;br /&gt;
:Flag effects are the same as CPI except that one of the two terminating flag conditions will always be true.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPD (ComPare and Decrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*==A?; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as CPI, but subtracts 1 from HL instead of adding it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPDR (ComPare and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do CPD while (!Z &amp;amp;&amp;amp; BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as CPIR but loops CPD instead of CPI. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Arithmetic ===&lt;br /&gt;
;ADD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A+=r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A+=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL+=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD IXY, BC/DE/IXY/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=IXY+=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL/DE/BC, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=rr+=unsigned A&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL/DE/BC, nn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=rr+=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Adds values together. Legal combinations are:&lt;br /&gt;
:* When adding 8-bit values the first parameter must be A and the second may be:&lt;br /&gt;
:** The contents of an 8-bit register;&lt;br /&gt;
:** An immediate value;&lt;br /&gt;
:** The contents of memory pointed to by HL or by indexing based on IX or IY.&lt;br /&gt;
:* When adding 16-bit values the first parameter must be HL, IX or IY and the second must be another 16-bit register pair. If the first parameter is IX or IY, the second cannot be HL or the other index register. &lt;br /&gt;
:* For 16 bit additions (regular Z80), H is set if a carry occurred in bit 11 (ie, a half carry in the high byte)&lt;br /&gt;
:* On the Spectrum Next the extended opcodes also allow the first parameter to be HL, DE, or BC and the second to be A (A will be zero extended to 16 bits) or an 16bit immediate value.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;ADC (ADd with Carry)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A+=r+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=n+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=HL*+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A+=(IXY+d)*+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL+=rr+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Adds values together, adding an additional 1 if Carry is set. Legal combinations are the same as for ADD, although there are no extended opcode versions of ADC and in 16-bit values the first parameter can only be HL. For 16-bit values the H flag is set if carry from bit 11; otherwise, it is reset.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
;SUB&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SUB r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A -= r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A -= n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A -= HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A -= (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts a value from A. Legal combinations are the same as for ADD for 8-bit, except that A does not need to be specified as the first parameter because subtraction can only be done from A. SUB cannot be used for 16-bit numbers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SBC (SuBtract with Carry, er, borrow)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A-=(r+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=(n+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=(HL*+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A-=((IXY+d)+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL-=(rr+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts values, subtracting an additional 1 if Carry is set. Legal combinations are the same as for ADD, although there are no extended opcode versions of SBC and in 16-bit values the first parameter can only be HL. For 16-bit values the H flag is set if borrow from bit 12; otherwise, it is reset.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;AND, OR, XOR&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=AND r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A &amp;amp; r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A &amp;amp; n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A &amp;amp; HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A &amp;amp; (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A OR r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A OR n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A OR HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A OR (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A ^ r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A ^ n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A ^ HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A ^ (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Performs the appropriate bitwise operator on A. Legal combinations are the same as SUB. &lt;br /&gt;
&lt;br /&gt;
:XOR A is faster and shorter than LD A,0&lt;br /&gt;
&lt;br /&gt;
;MIRROR&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=MIRROR A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A[76543210]:=A[01234567]&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Mirrors (reverses the order) of bits in the accumulator. Older core versions supported MIRROR DE, but this was removed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CP (ComPare)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CP r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A-=r?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=n?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=HL*?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A-=(IXY+d)?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the flags as if a SUB was performed but does not perform it. Legal combinations are the same as SUB. This is commonly used to set the flags to perform an equality or greater/less test.&lt;br /&gt;
:* CP is &#039;&#039;not&#039;&#039; equivalent to &amp;quot;if&amp;quot; in high level languages. Flag based jumps can follow any instruction that sets the flags, not just CP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;TEST&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=TEST n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=A&amp;amp;n?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
: Next extended opcode. Similar to CP, but performs an AND instead of a subtraction. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INC (INCrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL*++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=rr++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr++&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Increments the target by one. The argument can be any 8-bit register, any 16-bit register pair, or the address pointed to by HL or indexed via IX or IY. P/V is set if the target held $7F. N is reset.&lt;br /&gt;
:* INC A is faster than ADD 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DEC (DECrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DEC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL*--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+D)*--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=rr--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Decrements the target by one. Allowed arguments are the same as INC. Flag effects are the same as INC except H refers to borrow, not carry; and P/V is set if the target held $80.&lt;br /&gt;
:* DEC A is faster than SUB 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLC (Rotate Left Circular)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[7]; r:=r&amp;lt;&amp;lt;1; r[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[7]; HL*:=HL*&amp;lt;&amp;lt;1; HL*[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[7]; (IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1; (IXY+d)*[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[7]; (IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; (IX+d)*[0]:=x; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Rotates the target bitwise left by one position. The MSB is copied to bit 0, and also to Carry. Can be applied to any 8-bit register or to a location in memory pointed to by HL or indexed via IX or IY. The final alternative is undocumented, and stores the result in a register as well as performing the operation. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RL (Rotate Left)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RL r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[7]; r:=r&amp;lt;&amp;lt;1; r[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[7]; HL*:=HL*&amp;lt;&amp;lt;1; HL*[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[7]; (IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1; (IXY+d)*[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[7]; (IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; (IX+d)*[0]:=CF; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLC, except the MSB is copied to Carry only, and the previous contents of Carry are copied to bit 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RRC, RR (Rotate Right Circular, Rotate Right)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RRC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[0]; r:=r&amp;gt;&amp;gt;1; r[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[0]; HL*:=HL*&amp;gt;&amp;gt;1; HL*[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[0]; (IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1; (IXY+d)*[7]:=x; CF:=x&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[0]; (IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1; (IX+d)*[7]:=x; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[0]; r:=r&amp;gt;&amp;gt;1; r[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[0]; HL*:=HL*&amp;gt;&amp;gt;1; HL*[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[0]; (IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1; (IXY+d)*[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[0]; (IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1; (IX+d)*[7]:=CF; CF:=x; r=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLC and RL except they rotate right instead of left.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SLA (Shift Left Arithmetic)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SLA r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL*&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; r=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RL except bit 0 is set to zero, not the previous contents of Carry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SRA (Shift Right Arithmetic)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SRA r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r&amp;gt;&amp;gt;1 OR r[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL*&amp;gt;&amp;gt;1 OR HL*[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1 OR (IXY+d)*[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1 OR (IX+d)*[7]; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RR except the MSB is left unchanged (on the assumption that it&#039;s the sign bit), not replaced with the previous contents of Carry. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SRL (Shift Right Logical)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SRL r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=unsigned(r)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=unsigned(HL*)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=unsigned((IXY+d)*)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL r,(IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=unsigned((IXY+d)*)&amp;gt;&amp;gt;1; r:=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as SLA except it shifts right instead of left.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLCA, RLA, RRCA, RRA&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLCA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[7]; A:=A&amp;lt;&amp;lt;1; A[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[7]; A:=A&amp;lt;&amp;lt;1; A[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRCA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[0]; A:=A&amp;gt;&amp;gt;1; A[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[0]; A:=A&amp;gt;&amp;gt;1; A[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as their matching instruction except they work only on A, are faster, and do not alter S, Z or P/V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SLL (Shift Left Logical)&lt;br /&gt;
:This mnemonic has no associated opcode. There is no difference between a logical and arithmetic shift left, so both can use SLA, but some assemblers will allow SLL as an equivalent. Unfortunately, some will also assemble it as SL1. So it&#039;s probably worth just avoiding.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SL1 or SLI (Shift Left and Add 1) or (Shift Left and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SL1 r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=(r&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=(HL*&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=((IXY+d)*&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 r,(IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=((IXY+d)*&amp;lt;&amp;lt;1)+1; r=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Undocumented opcodes that behave like SLA, but set bit 0 to 1 instead of 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLD (Rotate Left bcd Digit)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=18&lt;br /&gt;
 |shortfx=x=HL*; HL*[0123]:=A[0123]; HL*[7654]:=x[0123]; A[0123]:=x[7654]  &lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Rotates the lower nibble of the byte pointed to by HL, the upper nibble of that byte, and the lower nibble of A, in that order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RRD (Rotate Right bcd Digit)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RRD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=18&lt;br /&gt;
 |shortfx=x=HL*; HL*[7654]:=A[0123]; HL*[0123]:=x[7654]; A[0123]:=x[0123]&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLD, but the order is: the lower nibble pointed to by HL, the lower nibble of the A, and the upper nibble of the byte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Barrel (variable amount) shift and rotate (cores v2+ only)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=BSLA DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=DE&amp;lt;&amp;lt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRA DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=signed(DE)&amp;gt;&amp;gt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRL DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=unsigned(DE)&amp;gt;&amp;gt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRF DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=~(unsigned(~DE)&amp;gt;&amp;gt;(B&amp;amp;31))&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BRLC DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=DE&amp;lt;&amp;lt;(B&amp;amp;15) OR DE&amp;gt;&amp;gt;(16-B&amp;amp;15)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Shift instructions use only bits 4..0 of B, BSLA shifts DE left, BSRA/BSRL/BSRF shifts DE right in arithmetic/logical/fill-one way. BRLC rotates DE left by B places, uses only bits 3..0 of B (to rotate right, use B=16-places).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPL (ComPLement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPL&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A:=~A&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inverts the contents of the accumulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NEG (NEGate)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NEG&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=0-A&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts the contents of the accumulator from zero, making it negative for the purpose of two&#039;s complement. P/V is set if A previously held $80. C is set if accumulator did not previously hold $00.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CCF (Complement Carry Flag)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CCF&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=CF:=!CF&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inverts the carry flag. (Does not, as might be assumed, clear it!) Also sets H to the previous value of the carry flag.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SCF (Set Carry Flag)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SCF&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=1&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=CF:=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the carry flag.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;BIT (test BIT)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=HL*[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=(IXY+d)*[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Tests if a bit is set on target value. The first parameter states which bit. The second can be any 8-bit register, or the location in memory pointed to by HL or indexed by IX or IY. Sets Z if specified bit was 0. S and P/V are destroyed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SET (SET bit)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SET b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL* OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)* OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET r,b,(IX+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)* OR (1&amp;lt;&amp;lt;b); r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SETAE&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=unsigned($80)&amp;gt;&amp;gt;(E&amp;amp;7)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the numbered bit on target value. The possible targets are the same as BIT. The three parameter variant is undocumented and stores the result in a register as well as performing the SET.&lt;br /&gt;
:SETAE is a Next extended opcode which takes the bit number to set from E (only the low 3 bits) and sets whole A to value of that bit, but counted from top to bottom (E=0 will produce A:=$80, E=7 will produce A:=$01). This works as pixel mask for ULA bitmap modes, when E is 0..255 x-coordinate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RES (RESet bit)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RES b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL* &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)* &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES r,b,(IX+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)* &amp;amp; (~(1&amp;lt;&amp;lt;b)); r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Resets the numbered bit on target value. The possible targets are the same as BIT.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DAA (Decimal Adjust Accumulator)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DAA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=if(A&amp;amp;$0F&amp;gt;$09 or HF) A±=$06; if(A&amp;amp;$F0&amp;gt;$90 or CF) A±=$60 (± depends on NF)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Modifies the contents of the accumulator based on the flags left by previous operation to correct for binary coded decimal (BCD).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;MUL (MULtiply)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=MUL d,e&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=DE:=D*E&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Multiplies D by E, storing 16 bit result into DE. Does not alter any flags (the opcode is not compatible with any of the R800/Z180/eZ80/... variants of MUL, it is solely Next specific).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SWAPNIB (SWAP NIBbles)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SWAPNIB&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=A[3210]&amp;lt;&amp;lt;4 OR A[7654]&amp;gt;&amp;gt;4&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Swaps the high and low nibbles of the accumulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PIXELAD (PIXEL ADdress)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PIXELAD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=HL:=$4000+((D&amp;amp;$C0)&amp;lt;&amp;lt;5)+((D&amp;amp;$07)&amp;lt;&amp;lt;8)+((D&amp;amp;$38)&amp;lt;&amp;lt;2)+(E&amp;gt;&amp;gt;3)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Takes E and D as the X,Y coordinate of a point and calculates the address of the byte containing this pixel in the pixel area of standard ULA screen 0, storing it in HL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PIXELDN (PIXEL DowN)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PIXELDN&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=if(HL&amp;amp;$0700!=$0700) HL+=256;&amp;lt;br&amp;gt;&lt;br /&gt;
else if(HL&amp;amp;$e0!=$e0) HL:=HL&amp;amp;$F8FF+$20;&amp;lt;br&amp;gt;&lt;br /&gt;
else HL:=HL&amp;amp;$F81F+$0800&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Updates the address in HL to move down by one line of pixels.&lt;br /&gt;
&lt;br /&gt;
=== Control Flow ===&lt;br /&gt;
;JP (JumP)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JP nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (HL)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=PC:=HL (not PC:=HL*)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (IXY)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=PC:=IXY (not PC:=IXY*)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (C)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=?&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=?&lt;br /&gt;
 |z=?&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=PC:=PC&amp;amp;$C000+IN(C)&amp;lt;&amp;lt;6&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Jumps (sets the PC) to the given address. The address can be given immediately or read from HL, IX, or IY. Note that although the variants that use register pairs &#039;&#039;look&#039;&#039; like they are using indirect addressing, JP (HL) jumps to the address stored in the register HL, not the address stored at the address HL points to. The JP (C) sets bottom 14 bits of current PC&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; to value read from I/O port: PC[13:0] = (IN (C) &amp;lt;&amp;lt; 6) (can be used to execute code block read from a disk stream) * &amp;quot;current PC&amp;quot; is address of next instruction after JP (C), as the PC is advanced by fetching op code from memory and is already advanced when execution happens - if the JP instruction resides at the very end of 16k memory block (..FE or ..FF address), then newly composed PC value will land into following 16k block.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;JP cc (JumP conditionally)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JP Z/NZ/NC/C/PO/PE/P/M, nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=if cc PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Conditionally jumps (sets the PC) to the given address. The condition is set in terms of the flags: Zero (Z, NZ), Carry (C, NC), Parity (PO, PE), and Sign (P/M). The address can only be given immediately for a conditional jump.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;JR (Jump Relative)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JR nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JR C/NC/Z/NZ, nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12 ;   7 if not cc&lt;br /&gt;
 |shortfx=if cc PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Jumps to an alternate address by &#039;&#039;adding&#039;&#039; the parameter to the PC - in other words the parameter is an adjustment, not an absolute address. When used in an assembler with labels the syntax should be the same as JP. The JR address can only be given immediately. Conditions are legal, but only those based on carry and zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DJNZ (Decrement reg. b and Jump if Not Zero)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DJNZ n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=B--; if B!=0 PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Decrements B then performs JR NZ.. to the given address. Used for encapsulating loops.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CALL&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CALL nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17&lt;br /&gt;
 |shortfx=SP-=2; SP*:=PC; PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CALL Z/NZ/C/NC/PO/PE/P/M, nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17 ;   10 if not cc&lt;br /&gt;
 |shortfx=if cc {SP-=2; SP*:=PC; PC:=nn}&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Like JP (including the ability to have conditions), but PUSHes the PC before jumping. Used for subroutine calls. &lt;br /&gt;
:* If a subroutine ends with a CALL to another subroutine immediately before the RET, it is more efficient to JP to the other subroutine and allow its RET to return from the whole combination. This might make high-level programmers queasy but your compiler already does it (tail call optimization)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RET (RETurn)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RET&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RET Z/NZ/C/NC/PO/PE/P/M&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11 ;   5 if not cc&lt;br /&gt;
 |shortfx=if cc {PC:=SP*; SP+=2}&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:POPs the PC from the stack, returning from a previous CALL. This can also accept the same conditions as JP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RETI (RETurn from Interrupt)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RETI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Returns from an interrupt service routine (same as RET instruction, but also does signal to I/O device that the interrupt routine is completed).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RETN (RETurn from Non-maskable interrupt)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RETN&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=IFF1:=IFF2; PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Returns from a non-maskable interrupt service routine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RST (ReSTart)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RST n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=CALL n&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Performs a CALL to a routine located at one of eight fixed locations ($00, $08, ..., $38) in the zero page. This is located in ROM, and on the Spectrum only a limited number of values are useful to call built-in ROM routines. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NOP (No OPeration)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NOP&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=PC+=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Does &amp;quot;nothing&amp;quot; (just usual housekeeping like refreshing memory and advancing program counter to next instruction).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;HALT&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=HALT&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=waits for interrupt&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Suspends the CPU until an interrupt is received (maskable interrupts must be enabled to break the wait). While CPU is waiting for interrupt, the fake NOP instruction is being executed, to keep memory refresh going on.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DI (Disable Interrupts)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=IFF1:=0; IFF2:=0&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Disables maskable interrupts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EI (Enable Interrupts)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=IFF1:=1; IFF2:=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Enables maskable interrupts (after next instruction, i.e. for example &amp;quot;EI RET&amp;quot; - the interrupt may happen only after RET instruction is finished (or &amp;quot;EI DI&amp;quot; pair of instructions will not allow any maskable interrupt to happen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IM (Interrupt Mode)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IM n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=Interrupt mode:=n&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets interrupt handling mode. The default for Next is 1. 2 is used for user defined interrupt service routines. IM 0 is useless on Next (and pretty much everything else, to be honest)&lt;br /&gt;
&lt;br /&gt;
=== Input and Output ===&lt;br /&gt;
;IN r, (c); OUT (c), r&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN r, (c)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=r := in(BC)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (c),r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=out(BC,r)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs or outputs a byte value from the 16-bit port number given in BC. R can be any 8-bit register. Note that the port number is given in BC even though the instruction refers only to C. Some assemblers will allow the instruction to be written with &amp;quot;(bc)&amp;quot; instead of &amp;quot;(c)&amp;quot; as a reminder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IN (c); OUT (c), 0&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN (c)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=in(BC)?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (c),0&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=out(BC,0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Undocumented opcodes. The IN variation performs an input, but does not store the result, only setting the flags. The OUT variation outputs 0 on the port. This is the only number that can be output to a port in immediate mode. The Next FPGA does output zero, but some Z80 chips manufactured differently from early batches output different value like 255, so it is not recommended to use OUT (C),0 if you want to reuse your code also on classic ZX Spectrum or publish it as example.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IN a, (n); OUT (n), a&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN A, (n)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=A := in(An)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (n),A&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=out(An,A)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs or outputs the byte value in A from a 16-bit port number where the lower byte is N and the upper byte is A. This is only likely to be useful in cases where the upper byte of the port number is not relevant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INI (INput and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*:=in(BC); HL++; B--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs a value from port BC into memory at the address stored in HL, then increments HL and decrements B. Because B is decremented and is part of the port number, the port number for future INI instructions will change unless it is reset. Z is set if B reached 0; S, H, and P/V are destroyed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INIR (INput and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do INI while(B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Loops INIR until B reaches 0. Because B is decremented during this process and is part of the port number, this is unlikely to be useful except when the upper byte of the port number is not relevant. Interrupts are recognized during execution.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IND, INDR (INput and Decrement, INput and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IND&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*:=in(BC); HL--; B--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do IND while(B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Behave like INI and INIR except that HL is decremented instead of incremented.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;OUTI (Out and Increment), OTIR (Out and Increment Repeated), OUTD (Out and Decrement), OTDR (Out and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=OUTI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=B--; out(BC,HL*); HL++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OTIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do OUTI while (B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUTD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=B--; out(BC,HL*); HL--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OTDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do OUTD while (B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Behave like INI, INIR, IND, INDR except that they output instead of input and B is decremented &#039;&#039;&#039;before&#039;&#039;&#039; the output instead of after.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;OUTINB (Out and Increment with No B)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=OUTINB&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=?&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=?&lt;br /&gt;
 |z=?&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=out(BC,HL*); HL++&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Behaves like OUTI, but doesn&#039;t decrement B.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NEXTREG&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NEXTREG n,n&#039;&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=HwNextReg_n:=n&#039;&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=NEXTREG n, A&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17&lt;br /&gt;
 |shortfx=HwNextReg_n:=A&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Directly sets the [[Board feature control|Next Feature Control Registers]] without going through ports {{PortNo|$243B}} and {{PortNo|$253B}}.&lt;br /&gt;
&lt;br /&gt;
=== Z80N instructions opcodes ===&lt;br /&gt;
&lt;br /&gt;
The Z80 on the Next has extra instructions that are unique to it.  Below is a table of the opcode bytes that are required to select&lt;br /&gt;
those instructions.  The timings are based on some partial testing.  These may not be accurate.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Instruction !! Byte 1 !! Byte 2 !! Byte 3 !! Byte 4 || T-States&lt;br /&gt;
|-&lt;br /&gt;
| LDIX || ED || A4 || || || 16&lt;br /&gt;
|-&lt;br /&gt;
| LDWS || ED || A5 || || || 14&lt;br /&gt;
|-&lt;br /&gt;
| LDIRX || ED || B4 || || || 21/16&lt;br /&gt;
|-&lt;br /&gt;
| LDDX || ED || AC || || || 16&lt;br /&gt;
|-&lt;br /&gt;
| LDDRX || ED || BC || || || 21/16&lt;br /&gt;
|-&lt;br /&gt;
| LDPIRX || ED  || B7 || || || 21/16&lt;br /&gt;
|-&lt;br /&gt;
| OUTINB || ED  || 90 || || || 16&lt;br /&gt;
|-&lt;br /&gt;
| MUL D,E || ED || 30 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD HL,A || ED || 31 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD DE,A || ED || 32 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD BC,A || ED || 33 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD HL,$im16 || ED || 34 || low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| ADD DE,$im16 || ED || 35 || low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| ADD BC,$im16 || ED  || 36|| low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| SWAPNIB || ED || 23 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| MIRROR A || ED || 24 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| PUSH $im16 || ED || 8A || high || low || 23&lt;br /&gt;
|-&lt;br /&gt;
| NEXTREG $im8,$im8 || ED || 91 || register || value || 20&lt;br /&gt;
|-&lt;br /&gt;
| NEXTREG $im8,A || ED  || 92 || register || || 17&lt;br /&gt;
|-&lt;br /&gt;
| PIXELDN || ED || 93 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| PIXELAD || ED || 94 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| SETAE || ED  || 95 ||  || || 8&lt;br /&gt;
|-&lt;br /&gt;
| TEST $im8 || ED || 27 || value || || 11&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Also note that the &amp;quot;PUSH $im16&amp;quot; instruction is not a mistake.  The operand is in big-endian.&lt;br /&gt;
&lt;br /&gt;
The core version 2.00.22+ has these new instructions:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Instruction !! Byte 1 !! Byte 2 !! Byte 3 !! Byte 4 || T-States&lt;br /&gt;
|-&lt;br /&gt;
| BSLA DE,B || ED || 28 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRA DE,B || ED || 29 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRL DE,B || ED || 2A || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRF DE,B || ED || 2B || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BRLC DE,B || ED || 2C || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| JP (C) || ED || 98 || || || 13&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mmattsteel</name></author>
	</entry>
	<entry>
		<id>http://wiki.specnext.dev/index.php?title=Extended_Z80_instruction_set&amp;diff=11451</id>
		<title>Extended Z80 instruction set</title>
		<link rel="alternate" type="text/html" href="http://wiki.specnext.dev/index.php?title=Extended_Z80_instruction_set&amp;diff=11451"/>
		<updated>2020-06-21T22:05:08Z</updated>

		<summary type="html">&lt;p&gt;Mmattsteel: correct T state in CALL cc when cc is false&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This is a general list of Z80 instructions with descriptions. For summaries, you can view the [[Z80 Instruction Table]]. You can also [[Special:RunQuery/OpcodeQuery|search for opcodes]].&lt;br /&gt;
&lt;br /&gt;
=== Term references ===&lt;br /&gt;
* &#039;&#039;Any 8-bit register&#039;&#039; means A, B, C, D, E, H, and L. F, I and R do not count even though they are technically 8 bit registers. Also, the high and low bytes of IX and IY (IXH, IXL, IYH, IYL) can be used as 8-bit registers although this behavior was undocumented on the original Z80.&lt;br /&gt;
* IXY means IX or IY.&lt;br /&gt;
* For the status field:&lt;br /&gt;
** S means Standard. It&#039;s in the Z80 manual. Everything should support it.&lt;br /&gt;
** U means Undocumented. It works on Z80 chips, but it&#039;s not in the manual. These have been known for years and were acknowledged by Zilog, so they should work on everything, but some assemblers may vary the syntax.&lt;br /&gt;
** E means Extension. It &#039;&#039;only&#039;&#039; works on the Z80 core on the Next. It&#039;ll probably only be accepted by assemblers that have been updated specifically for the Next.&lt;br /&gt;
* Each of the flag effects is documented as follows:&lt;br /&gt;
** - means the flag is unchanged.&lt;br /&gt;
** 1 or 0 mean the flag is set or reset as appropriate.&lt;br /&gt;
** ? means we don&#039;t know what effect the instruction has on the flag.&lt;br /&gt;
** ! means the instruction has an unusual effect on the flag which is documented in the description.&lt;br /&gt;
** S means the effect on the flag is &amp;quot;standard&amp;quot;. C is set if a carry/borrow occurred beyond the MSB; Z is set if the result of the operation is zero; H is set if a carry/borrow occurred beyond bit 3.&lt;br /&gt;
** P, V, and L are used for the P/V flag which has several standard effects. P means it&#039;s parity. V means it&#039;s overflow. L means it checks BC as loop counter for some of the block copy and search instructions: P/V = (BC != 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Register and Data manipulation ===&lt;br /&gt;
;LD (LoaD)&lt;br /&gt;
&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LD r, r&#039;&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r := r&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r,n&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=r := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r, (HL)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=r := HL*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r, (IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=r := (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (HL),r&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=HL* := r&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (IXY+d),r&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=(IXY+D)* := r&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (HL), n&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=HL* := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (IXY+d), n&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=(IXY+d)* := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, (BC/DE)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := rr*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, (nn)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=A := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (BC/DE), A&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=rr* := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), A&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=(nn)* := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, I&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=A := I; P/V:=IFF2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, R&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=A := R; P/V:=IFF2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD I, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=I := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD R, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=R := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD BC/DE/HL/SP, nn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr := nn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD IXY, nn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=rr := nn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD HL, (nn)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD BC/DE/SP/IXY, (nn)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=rr := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), HL&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=(nn)* := HL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), BC/DE/SP/IXY&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=(nn)* := rr&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD SP, HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=SP := HL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD SP, IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=SP := IXY&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:The basic data load/transfer instruction. Transfers data from the location specified by the second argument, to the location specified by the first. Available combinations are as follows:&lt;br /&gt;
:* Any 8-bit register can be:&lt;br /&gt;
:** loaded with an immediate value;&lt;br /&gt;
:** loaded with the contents of any other 8-bit register except I and R;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by HL;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory offset-indexed by IX or IY.&lt;br /&gt;
:* Additionally, the accumulator A (only) can be:&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by BC or DE;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by an immediate address;&lt;br /&gt;
:** loaded with the contents of I or R.&lt;br /&gt;
:* Any 16-bit register pair can be:&lt;br /&gt;
:** loaded with an immediate value;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by an immediate address.&lt;br /&gt;
:* Additionally, SP (only) can be:&lt;br /&gt;
:** loaded with the contents of HL, IX, or IY.&lt;br /&gt;
:** The planned &#039;&#039;&#039;ld hl, sp&#039;&#039;&#039; didn&#039;t make it to Next yet, one possible workaround is: &#039;&#039;&#039;ld hl,0&#039;&#039;&#039;; &#039;&#039;&#039;add hl,sp&#039;&#039;&#039;;&lt;br /&gt;
:* Memory referred to by HL or through IX can be assigned immediate values.&lt;br /&gt;
:Although 16-bit register pairs cannot be directly moved between each other, they can be moved by moving the two 8-bit registers. (SP gets a special case because it can&#039;t be addressed via 8-bit registers.) Some assemblers will provide built-in macro instructions allowing, for example, &#039;&#039;&#039;ld bc, de&#039;&#039;&#039;.&lt;br /&gt;
:LD instructions do not alter any flags unless I or R are loaded into A.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EX (EXchange)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EX DE, HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(DE,HL)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX AF, AF&#039;&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=!&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(AF,AF&#039;)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX (SP), HL&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=swap(SP*,HL)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX (SP), IXY&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=swap(SP*,IXY)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Exchanges the contents of two sources. The only permitted combinations are&lt;br /&gt;
:* Exchanging DE and HL;&lt;br /&gt;
:* Exchanging AF and AF&#039;;&lt;br /&gt;
:* Exchanging HL, IX, or IY with the contents of memory pointed to by SP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EXX (EXchange all)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EXX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(BC,BC&#039;);swap(DE,DE&#039;);swap(HL,HL&#039;)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Exchanges BC, DE, and HL with their shadow registers. AF and AF&#039; are not exchanged. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PUSH&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PUSH BC/DE/HL/AF&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=SP-=2; SP*:=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=PUSH IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=SP-=2; SP*:=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=PUSH nnnn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=SP-=2; SP*:=nnnn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Pushes the given argument on the stack. This can be any 16-bit register pair except SP. SP is reduced by 2 and then the argument is written to the new location SP points to.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;POP&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=POP BC/DE/HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=POP AF&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=!&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=POP IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Pops the given argument from the stack. This can be any 16-bit register pair except SP. The current value at SP is copied to the register pair and then SP is raised by 2.&lt;br /&gt;
:Popping into AF does set value of flag register F directly to low 8 bits of value from stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Block Copy ===&lt;br /&gt;
;LDI (LoaD and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=DE*:=HL*; DE++; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Copies the byte pointed to by HL to the address pointed to by DE, then adds 1 to DE and HL and subtracts 1 from BC. P/V is set to (BC!=0), i.e. set when non zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDIR (LoaD and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do LDI while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Automatically loops LDI until BC reaches zero. Note the last iteration starts when BC=1 and ends with BC=0 (starting the LDIR with BC=0 will start 64kiB transfer, most likely overwriting vital parts of system memory and/or code itself).&lt;br /&gt;
:Flag effects are the same as LDI except that P/V will always be reset, because BC by definition reaches 0 before this instruction ends (normally - unless something overwrites LDIR opcode while BC&amp;gt;0).&lt;br /&gt;
:Interrupts may interrupt LDIR instruction while looping (after each single LDI sub-part finished) and LDIR will resume after and finish loop properly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDD (LoaD and Decrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=DE*:=HL*; DE--; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as LDI, but subtracts 1 from DE and HL instead of adding.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDDR (LoaD and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=0&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do LDD while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as LDIR but loops LDD instead of LDI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDWS&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDWS&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=DE*:=HL*; INC L; INC D;&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next-only extended opcode. Copies the byte pointed to by HL to the address pointed to by DE and increments only L and D. This is used for vertically copying bytes to the Layer 2 display.&lt;br /&gt;
:The flags are identical to what the &#039;&#039;&#039;INC D&#039;&#039;&#039; instruction would produce.&lt;br /&gt;
:Note the source data are read only from single 256B (aligned) block of memory, because only L is incremented, not HL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDIX, LDIRX, LDDX, LDDRX&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDIX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx={if HL*!=A DE*:=HL*;} DE++; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDIRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do LDIX while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDDX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx={if HL*!=A DE*:=HL*;} DE++; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDDRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do LDDX while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next-only extended opcodes. Behave similarly as their non-X equivalents except the byte is not copied if it is equal to A and LDDX/LDDRX advance DE by incrementing it (like LDI), while HL is decremented (like LDD).&lt;br /&gt;
:Second difference to non-X instructions (as usual with next-only opcodes due to implementation), the extended ones don&#039;t modify any flags.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDPIRX &lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDPIRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do{t:=(HL&amp;amp;$FFF8+E&amp;amp;7)*; {if t!=A DE*:=t;} DE++; BC--}while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Similar to LDIRX except the source byte address is not just HL, but is obtained by using the top 13 bits of HL and the lower 3 bits of DE and HL does not increment during whole loop (HL works as base address of aligned 8 byte lookup table, DE works as destination and also wrapping index 0..7 into table). This is intended for &amp;quot;pattern fill&amp;quot; functionality.&lt;br /&gt;
&lt;br /&gt;
=== Block Search ===&lt;br /&gt;
;CPI (ComPare and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*==A?; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Compares the byte pointed to by HL with the contents of A and sets Z if it matches or S if the comparison goes negative. Then adds 1 to HL and subtracts 1 from BC. P/V is set to (BC!=0), i.e. set when non zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPIR (ComPare and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do CPI while (!Z &amp;amp;&amp;amp; BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Automatically loops CPI until either Z is set (A is found in the byte pointed to by HL) or P/V is reset (BC reached 0).&lt;br /&gt;
:Flag effects are the same as CPI except that one of the two terminating flag conditions will always be true.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPD (ComPare and Decrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*==A?; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as CPI, but subtracts 1 from HL instead of adding it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPDR (ComPare and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do CPD while (!Z &amp;amp;&amp;amp; BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as CPIR but loops CPD instead of CPI. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Arithmetic ===&lt;br /&gt;
;ADD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A+=r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A+=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL+=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD IXY, BC/DE/IXY/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=IXY+=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL/DE/BC, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=rr+=unsigned A&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL/DE/BC, nnnn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=?&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=?&lt;br /&gt;
 |z=?&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=rr+=nnnn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Adds values together. Legal combinations are:&lt;br /&gt;
:* When adding 8-bit values the first parameter must be A and the second may be:&lt;br /&gt;
:** The contents of an 8-bit register;&lt;br /&gt;
:** An immediate value;&lt;br /&gt;
:** The contents of memory pointed to by HL or by indexing based on IX or IY.&lt;br /&gt;
:* When adding 16-bit values the first parameter must be HL, IX or IY and the second must be another 16-bit register pair. If the first parameter is IX or IY, the second cannot be HL or the other index register. &lt;br /&gt;
:* For 16 bit additions (regular Z80), H is set if a carry occurred in bit 11 (ie, a half carry in the high byte)&lt;br /&gt;
:* On the Spectrum Next the extended opcodes also allow the first parameter to be HL, DE, or BC and the second to be A (A will be zero extended to 16 bits) or an immediate value. It&#039;s not yet clear if the Next-extended ADD rr,nnnn will preserve or modify flags (the ADD rr,A keeps flags intact).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;ADC (ADd with Carry)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A+=r+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=n+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=HL*+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A+=(IXY+d)*+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL+=rr+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Adds values together, adding an additional 1 if Carry is set. Legal combinations are the same as for ADD, although there are no extended opcode versions of ADC and in 16-bit values the first parameter can only be HL. For 16-bit values the H flag is set if carry from bit 11; otherwise, it is reset.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
;SUB&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SUB r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A -= r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A -= n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A -= HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A -= (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts a value from A. Legal combinations are the same as for ADD for 8-bit, except that A does not need to be specified as the first parameter because subtraction can only be done from A. SUB cannot be used for 16-bit numbers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SBC (SuBtract with Carry, er, borrow)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A-=(r+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=(n+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=(HL*+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A-=((IXY+d)+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL-=(rr+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts values, subtracting an additional 1 if Carry is set. Legal combinations are the same as for ADD, although there are no extended opcode versions of SBC and in 16-bit values the first parameter can only be HL. For 16-bit values the H flag is set if borrow from bit 12; otherwise, it is reset.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;AND, OR, XOR&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=AND r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A &amp;amp; r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A &amp;amp; n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A &amp;amp; HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A &amp;amp; (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A OR r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A OR n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A OR HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A OR (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A ^ r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A ^ n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A ^ HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A ^ (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Performs the appropriate bitwise operator on A. Legal combinations are the same as SUB. &lt;br /&gt;
&lt;br /&gt;
:XOR A is faster and shorter than LD A,0&lt;br /&gt;
&lt;br /&gt;
;MIRROR&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=MIRROR A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A[76543210]:=A[01234567]&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Mirrors (reverses the order) of bits in the accumulator. Older core versions supported MIRROR DE, but this was removed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CP (ComPare)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CP r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A-=r?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=n?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=HL*?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A-=(IXY+d)?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the flags as if a SUB was performed but does not perform it. Legal combinations are the same as SUB. This is commonly used to set the flags to perform an equality or greater/less test.&lt;br /&gt;
:* CP is &#039;&#039;not&#039;&#039; equivalent to &amp;quot;if&amp;quot; in high level languages. Flag based jumps can follow any instruction that sets the flags, not just CP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;TEST&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=TEST n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=A&amp;amp;n?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
: Next extended opcode. Similar to CP, but performs an AND instead of a subtraction. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INC (INCrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL*++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=rr++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr++&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Increments the target by one. The argument can be any 8-bit register, any 16-bit register pair, or the address pointed to by HL or indexed via IX or IY. P/V is set if the target held $7F. N is reset.&lt;br /&gt;
:* INC A is faster than ADD 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DEC&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DEC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL*--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+D)*--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=rr--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Decrements the target by one. Allowed arguments are the same as INC. Flag effects are the same as INC except H refers to borrow, not carry; and P/V is set if the target held $80.&lt;br /&gt;
:* DEC A is faster than SUB 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLC (Rotate Left and Copy)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[7]; r:=r&amp;lt;&amp;lt;1; r[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[7]; HL*:=HL*&amp;lt;&amp;lt;1; HL*[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[7]; (IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1; (IXY+d)*[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[7]; (IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; (IX+d)*[0]:=x; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Rotates the target bitwise left by one position. The MSB is copied to bit 0, and also to Carry. Can be applied to any 8-bit register or to a location in memory pointed to by HL or indexed via IX or IY. The final alternative is undocumented, and stores the result in a register as well as performing the operation. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RL (Rotate Left)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RL r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[7]; r:=r&amp;lt;&amp;lt;1; r[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[7]; HL*:=HL*&amp;lt;&amp;lt;1; HL*[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[7]; (IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1; (IXY+d)*[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[7]; (IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; (IX+d)*[0]:=CF; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLC, except the MSB is copied to Carry only, and the previous contents of Carry are copied to bit 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RRC, RR (Rotate Right and Copy, Rotate Right)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RRC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[0]; r:=r&amp;gt;&amp;gt;1; r[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[0]; HL*:=HL*&amp;gt;&amp;gt;1; HL*[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[0]; (IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1; (IXY+d)*[7]:=x; CF:=x&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[0]; (IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1; (IX+d)*[7]:=x; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[0]; r:=r&amp;gt;&amp;gt;1; r[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[0]; HL*:=HL*&amp;gt;&amp;gt;1; HL*[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[0]; (IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1; (IXY+d)*[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[0]; (IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1; (IX+d)*[7]:=CF; CF:=x; r=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLC and RL except they rotate right instead of left.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SLA (Shift Left Arithmetic)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SLA r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL*&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; r=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RL except bit 0 is set to zero, not the previous contents of Carry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SRA (Shift Right Arithmetic)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SRA r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r&amp;gt;&amp;gt;1 OR r[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL*&amp;gt;&amp;gt;1 OR HL*[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1 OR (IXY+d)*[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1 OR (IX+d)*[7]; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RR except the MSB is left unchanged (on the assumption that it&#039;s the sign bit), not replaced with the previous contents of Carry. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SRL (Shift Right Logical)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SRL r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=unsigned(r)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=unsigned(HL*)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=unsigned((IXY+d)*)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL r,(IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=unsigned((IXY+d)*)&amp;gt;&amp;gt;1; r:=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as SLA except it shifts right instead of left.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLCA, RLA, RRCA, RRA&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLCA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[7]; A:=A&amp;lt;&amp;lt;1; A[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[7]; A:=A&amp;lt;&amp;lt;1; A[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRCA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[0]; A:=A&amp;gt;&amp;gt;1; A[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[0]; A:=A&amp;gt;&amp;gt;1; A[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as their matching instruction except they work only on A, are faster, and do not alter S, Z or P/V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SLL (Shift Left Logical)&lt;br /&gt;
:This mnemonic has no associated opcode. There is no difference between a logical and arithmetic shift left, so both can use SLA, but some assemblers will allow SLL as an equivalent. Unfortunately, some will also assemble it as SL1. So it&#039;s probably worth just avoiding.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SL1 or SLI (Shift Left and Add 1) or (Shift Left and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SL1 r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=(r&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=(HL*&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=((IXY+d)*&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 r,(IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=((IXY+d)*&amp;lt;&amp;lt;1)+1; r=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Undocumented opcodes that behave like SLA, but set bit 0 to 1 instead of 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=18&lt;br /&gt;
 |shortfx=x=HL*; HL*[0123]:=A[0123]; HL*[7654]:=x[0123]; A[0123]:=x[7654]  &lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Rotates the lower nibble of the byte pointed to by HL, the upper nibble of that byte, and the lower nibble of A, in that order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RRD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RRD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=18&lt;br /&gt;
 |shortfx=x=HL*; HL*[7654]:=A[0123]; HL*[0123]:=x[7654]; A[0123]:=x[0123]&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLD, but the order is: the lower nibble pointed to by HL, the lower nibble of the A, and the upper nibble of the byte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Barrel (variable amount) shift and rotate (cores v2+ only)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=BSLA DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=DE&amp;lt;&amp;lt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRA DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=signed(DE)&amp;gt;&amp;gt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRL DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=unsigned(DE)&amp;gt;&amp;gt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRF DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=~(unsigned(~DE)&amp;gt;&amp;gt;(B&amp;amp;31))&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BRLC DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=DE&amp;lt;&amp;lt;(B&amp;amp;15) OR DE&amp;gt;&amp;gt;(16-B&amp;amp;15)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Shift instructions use only bits 4..0 of B, BSLA shifts DE left, BSRA/BSRL/BSRF shifts DE right in arithmetic/logical/fill-one way. BRLC rotates DE left by B places, uses only bits 3..0 of B (to rotate right, use B=16-places).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPL (ComPLement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPL&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A:=~A&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inverts the contents of the accumulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NEG (NEGate)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NEG&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=0-A&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts the contents of the accumulator from zero, making it negative for the purpose of two&#039;s complement. P/V is set if A previously held $80. C is set if accumulator did not previously hold $00.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CCF (Change Carry Flag)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CCF&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=CF:=!CF&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inverts the carry flag. (Does not, as might be assumed, clear it!) Also sets H to the previous value of the carry flag.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SCF (Set Carry Flag)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SCF&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=1&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=CF:=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the carry flag.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;BIT&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=HL*[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=(IXY+d)*[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Tests if a bit is set on target value. The first parameter states which bit. The second can be any 8-bit register, or the location in memory pointed to by HL or indexed by IX or IY. Sets Z if specified bit was 0. S and P/V are destroyed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SET&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SET b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL* OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)* OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET r,b,(IX+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)* OR (1&amp;lt;&amp;lt;b); r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SETAE&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=unsigned($80)&amp;gt;&amp;gt;(E&amp;amp;7)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the numbered bit on target value. The possible targets are the same as BIT. The three parameter variant is undocumented and stores the result in a register as well as performing the SET.&lt;br /&gt;
:SETAE is a Next extended opcode which takes the bit number to set from E (only the low 3 bits) and sets whole A to value of that bit, but counted from top to bottom (E=0 will produce A:=$80, E=7 will produce A:=$01). This works as pixel mask for ULA bitmap modes, when E is 0..255 x-coordinate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RES (RESet)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RES b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL* &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)* &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES r,b,(IX+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)* &amp;amp; (~(1&amp;lt;&amp;lt;b)); r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Resets the numbered bit on target value. The possible targets are the same as BIT.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DAA (Decimal Adjust Accumulator)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DAA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=if(A&amp;amp;$0F&amp;gt;$09 or HF) A±=$06; if(A&amp;amp;$F0&amp;gt;$90 or CF) A±=$60 (± depends on NF)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Modifies the contents of the accumulator based on the flags left by previous operation to correct for binary coded decimal (BCD).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;MUL&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=MUL&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=DE:=D*E&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Multiplies D by E, storing 16 bit result into DE. Does not alter any flags.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SWAPNIB&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SWAPNIB&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=A[3210]&amp;lt;&amp;lt;4 OR A[7654]&amp;gt;&amp;gt;4&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Swaps the high and low nibbles of the accumulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PIXELAD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PIXELAD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=HL:=$4000+((D&amp;amp;$C0)&amp;lt;&amp;lt;5)+((D&amp;amp;$07)&amp;lt;&amp;lt;8)+((D&amp;amp;$38)&amp;lt;&amp;lt;2)+(E&amp;gt;&amp;gt;3)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Takes E and D as the X,Y coordinate of a point and calculates the address of the byte containing this pixel in the pixel area of standard ULA screen 0, storing it in HL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PIXELDN&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PIXELDN&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=if(HL&amp;amp;$0700!=$0700) HL+=256;&amp;lt;br&amp;gt;&lt;br /&gt;
else if(HL&amp;amp;$e0!=$e0) HL:=HL&amp;amp;$F8FF+$20;&amp;lt;br&amp;gt;&lt;br /&gt;
else HL:=HL&amp;amp;$F81F+$0800&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Updates the address in HL to move down by one line of pixels.&lt;br /&gt;
&lt;br /&gt;
=== Control Flow ===&lt;br /&gt;
;JP (JumP)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JP nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (HL)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=PC:=HL (not PC:=HL*)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (IXY)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=PC:=IXY (not PC:=IXY*)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (C)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=?&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=?&lt;br /&gt;
 |z=?&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=PC:=PC&amp;amp;$C000+IN(C)&amp;lt;&amp;lt;6&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Jumps (sets the PC) to the given address. The address can be given immediately or read from HL, IX, or IY. Note that although the variants that use register pairs &#039;&#039;look&#039;&#039; like they are using indirect addressing, JP (HL) jumps to the address stored in the register HL, not the address stored at the address HL points to. The JP (C) sets bottom 14 bits of current PC&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; to value read from I/O port: PC[13:0] = (IN (C) &amp;lt;&amp;lt; 6) (can be used to execute code block read from a disk stream) * &amp;quot;current PC&amp;quot; is address of next instruction after JP (C), as the PC is advanced by fetching op code from memory and is already advanced when execution happens - if the JP instruction resides at the very end of 16k memory block (..FE or ..FF address), then newly composed PC value will land into following 16k block.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;JP cc &lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JP Z/NZ/NC/C/PO/PE/P/M, nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=if cc PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Conditionally jumps (sets the PC) to the given address. The condition is set in terms of the flags: Zero (Z, NZ), Carry (C, NC), Parity (PO, PE), and Sign (P/M). The address can only be given immediately for a conditional jump.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;JR (Jump Relative)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JR nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JR C/NC/Z/NZ, nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=if cc PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Jumps to an alternate address by &#039;&#039;adding&#039;&#039; the parameter to the PC - in other words the parameter is an adjustment, not an absolute address. When used in an assembler with labels the syntax should be the same as JP. The JR address can only be given immediately. Conditions are legal, but only those based on carry and zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DJNZ (Decrement and Jump if Not Zero)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DJNZ n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=B--; if B!=0 PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Decrements B then performs JR NZ.. to the given address. Used for encapsulating loops.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CALL&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CALL nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17&lt;br /&gt;
 |shortfx=SP-=2; SP*:=PC; PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CALL Z/NZ/C/NC/PO/PE/P/M, nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17 ;   10 if not cc&lt;br /&gt;
 |shortfx=if cc {SP-=2; SP*:=PC; PC:=nn}&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Like JP (including the ability to have conditions), but PUSHes the PC before jumping. Used for subroutine calls. &lt;br /&gt;
:* If a subroutine ends with a CALL to another subroutine immediately before the RET, it is more efficient to JP to the other subroutine and allow its RET to return from the whole combination. This might make high-level programmers queasy but your compiler already does it (tail call optimization)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RET&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RET&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RET Z/NZ/C/NC/PO/PE/P/M&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=if cc {PC:=SP*; SP+=2}&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:POPs the PC from the stack, returning from a previous CALL. This can also accept the same conditions as JP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RETI&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RETI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Returns from an interrupt service routine (same as RET instruction, but also does signal to I/O device that the interrupt routine is completed).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RETN&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RETN&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=IFF1:=IFF2; PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Returns from a non-maskable interrupt service routine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RST (ReSTart)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RST n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=CALL n&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Performs a CALL to a routine located at one of eight fixed locations ($00, $08, ..., $38) in the zero page. This is located in ROM, and on the Spectrum only a limited number of values are useful to call built-in ROM routines. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NOP (No OPeration)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NOP&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=PC+=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Does &amp;quot;nothing&amp;quot; (just usual housekeeping like refreshing memory and advancing program counter to next instruction).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;HALT&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=HALT&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=waits for interrupt&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Suspends the CPU until an interrupt is received (maskable interrupts must be enabled to break the wait). While CPU is waiting for interrupt, the fake NOP instruction is being executed, to keep memory refresh going on.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DI (Disable Interrupts)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=IFF1:=0; IFF2:=0&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Disables maskable interrupts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EI (Enable Interrupts)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=IFF1:=1; IFF2:=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Enables maskable interrupts (after next instruction, i.e. for example &amp;quot;EI RET&amp;quot; - the interrupt may happen only after RET instruction is finished (or &amp;quot;EI DI&amp;quot; pair of instructions will not allow any maskable interrupt to happen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IM (Interrupt Mode)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IM n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=Interrupt mode:=n&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets interrupt handling mode. The default for Next is 1. 2 is used for user defined interrupt service routines. IM 0 is useless on Next (and pretty much everything else, to be honest)&lt;br /&gt;
&lt;br /&gt;
=== Input and Output ===&lt;br /&gt;
;IN r, (c); OUT (c), r&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN r, (c)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=r := in(BC)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (c),r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=out(BC,r)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs or outputs a byte value from the 16-bit port number given in BC. R can be any 8-bit register. Note that the port number is given in BC even though the instruction refers only to C. Some assemblers will allow the instruction to be written with &amp;quot;(bc)&amp;quot; instead of &amp;quot;(c)&amp;quot; as a reminder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IN (c); OUT (c), 0&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN (c)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=in(BC)?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (c),0&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=out(BC,0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Undocumented opcodes. The IN variation performs an input, but does not store the result, only setting the flags. The OUT variation outputs 0 on the port. This is the only number that can be output to a port in immediate mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IN a, (n); OUT (n), a&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN A, (n)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=A := in(An)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (n),A&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=out(An,A)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs or outputs the byte value in A from a 16-bit port number where the lower byte is N and the upper byte is A. This is only likely to be useful in cases where the upper byte of the port number is not relevant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INI (INput and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*:=in(BC); HL++; B--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs a value from port BC into memory at the address stored in HL, then increments HL and decrements B. Because B is decremented and is part of the port number, the port number for future INI instructions will change unless it is reset. Z is set if B reached 0; S, H, and P/V are destroyed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INIR (INput and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do INI while(B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Loops INIR until B reaches 0. Because B is decremented during this process and is part of the port number, this is unlikely to be useful except when the upper byte of the port number is not relevant. Interrupts are recognized during execution.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IND, INDR (INput and Decrement, INput and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IND&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*:=in(BC); HL--; B--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do IND while(B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Behave like INI and INIR except that HL is decremented instead of incremented.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;OUTI (Out and Increment), OTIR (Out and Increment Repeated), OUTD (Out and Decrement), OTDR (Out and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=OUTI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=B--; out(BC,HL*); HL++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OTIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do OUTI while (B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUTD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=B--; out(BC,HL*); HL--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OTDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do OUTD while (B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Behave like INI, INIR, IND, INDR except that they output instead of input and B is decremented &#039;&#039;&#039;before&#039;&#039;&#039; the output instead of after.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;OUTINB (Out and Increment with No B)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=OUTINB&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=?&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=?&lt;br /&gt;
 |z=?&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=out(BC,HL*); HL++&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Behaves like OUTI, but doesn&#039;t decrement B.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NEXTREG&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NEXTREG nn, nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=out($243B,nn1); out($253B,nn2)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=NEXTREG nn, A&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17&lt;br /&gt;
 |shortfx=out($243B,nn); out($253B,a)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Directly sets the [[Board feature control|Next Feature Control Registers]] without going through ports {{PortNo|$243B}} and {{PortNo|$253B}}.&lt;br /&gt;
&lt;br /&gt;
=== Z80N instructions opcodes ===&lt;br /&gt;
&lt;br /&gt;
The Z80 on the Next has extra instructions that are unique to it.  Below is a table of the opcode bytes that are required to select&lt;br /&gt;
those instructions.  The timings are based on some partial testing.  These may not be accurate.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Instruction !! Byte 1 !! Byte 2 !! Byte 3 !! Byte 4 || T-States&lt;br /&gt;
|-&lt;br /&gt;
| LDIX || ED || A4 || || || 16&lt;br /&gt;
|-&lt;br /&gt;
| LDWS || ED || A5 || || || 14&lt;br /&gt;
|-&lt;br /&gt;
| LDIRX || ED || B4 || || || 21/16&lt;br /&gt;
|-&lt;br /&gt;
| LDDX || ED || AC || || || 16&lt;br /&gt;
|-&lt;br /&gt;
| LDDRX || ED || BC || || || 21/16&lt;br /&gt;
|-&lt;br /&gt;
| LDPIRX || ED  || B7 || || || 21/16&lt;br /&gt;
|-&lt;br /&gt;
| OUTINB || ED  || 90 || || || 16&lt;br /&gt;
|-&lt;br /&gt;
| MUL || ED || 30 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD HL,A || ED || 31 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD DE,A || ED || 32 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD BC,A || ED || 33 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD HL,$nnnn || ED || 34 || low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| ADD DE,$nnnn || ED || 35 || low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| ADD BC,$nnnn || ED  || 36|| low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| SWAPNIB || ED || 23 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| MIRROR A || ED || 24 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| PUSH $nnnn || ED || 8A || high || low || 23&lt;br /&gt;
|-&lt;br /&gt;
| NEXTREG $rr,$nn || ED || 91 || register || value || 20&lt;br /&gt;
|-&lt;br /&gt;
| NEXTREG $rr,A || ED  || 92 || register || || 17&lt;br /&gt;
|-&lt;br /&gt;
| PIXELDN || ED || 93 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| PIXELAD || ED || 94 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| SETAE || ED  || 95 ||  || || 8&lt;br /&gt;
|-&lt;br /&gt;
| TEST $nn || ED || 27 || value || || 11&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Also note that the &amp;quot;PUSH $nnnn&amp;quot; instruction is not a mistake.  The operand is in big-endian.&lt;br /&gt;
&lt;br /&gt;
The core version 2.00.22+ has these new instructions:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Instruction !! Byte 1 !! Byte 2 !! Byte 3 !! Byte 4 || T-States&lt;br /&gt;
|-&lt;br /&gt;
| BSLA DE,B || ED || 28 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRA DE,B || ED || 29 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRL DE,B || ED || 2A || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRF DE,B || ED || 2B || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BRLC DE,B || ED || 2C || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| JP (C) || ED || 98 || || || 13&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mmattsteel</name></author>
	</entry>
	<entry>
		<id>http://wiki.specnext.dev/index.php?title=Extended_Z80_instruction_set&amp;diff=11443</id>
		<title>Extended Z80 instruction set</title>
		<link rel="alternate" type="text/html" href="http://wiki.specnext.dev/index.php?title=Extended_Z80_instruction_set&amp;diff=11443"/>
		<updated>2020-06-07T19:33:49Z</updated>

		<summary type="html">&lt;p&gt;Mmattsteel: improvement on DAA description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This is a general list of Z80 instructions with descriptions. For summaries, you can view the [[Z80 Instruction Table]]. You can also [[Special:RunQuery/OpcodeQuery|search for opcodes]].&lt;br /&gt;
&lt;br /&gt;
=== Term references ===&lt;br /&gt;
* &#039;&#039;Any 8-bit register&#039;&#039; means A, B, C, D, E, H, and L. F, I and R do not count even though they are technically 8 bit registers. Also, the high and low bytes of IX and IY (IXH, IXL, IYH, IYL) can be used as 8-bit registers although this behavior was undocumented on the original Z80.&lt;br /&gt;
* IXY means IX or IY.&lt;br /&gt;
* For the status field:&lt;br /&gt;
** S means Standard. It&#039;s in the Z80 manual. Everything should support it.&lt;br /&gt;
** U means Undocumented. It works on Z80 chips, but it&#039;s not in the manual. These have been known for years and were acknowledged by Zilog, so they should work on everything, but some assemblers may vary the syntax.&lt;br /&gt;
** E means Extension. It &#039;&#039;only&#039;&#039; works on the Z80 core on the Next. It&#039;ll probably only be accepted by assemblers that have been updated specifically for the Next.&lt;br /&gt;
* Each of the flag effects is documented as follows:&lt;br /&gt;
** - means the flag is unchanged.&lt;br /&gt;
** 1 or 0 mean the flag is set or reset as appropriate.&lt;br /&gt;
** ? means we don&#039;t know what effect the instruction has on the flag.&lt;br /&gt;
** ! means the instruction has an unusual effect on the flag which is documented in the description.&lt;br /&gt;
** S means the effect on the flag is &amp;quot;standard&amp;quot;. C is set if a carry/borrow occurred beyond the MSB; Z is set if the result of the operation is zero; H is set if a carry/borrow occurred beyond bit 3.&lt;br /&gt;
** P, V, and L are used for the P/V flag which has several standard effects. P means it&#039;s parity. V means it&#039;s overflow. L means it checks BC as loop counter for some of the block copy and search instructions: P/V = (BC != 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Register and Data manipulation ===&lt;br /&gt;
;LD (LoaD)&lt;br /&gt;
&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LD r, r&#039;&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r := r&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r,n&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=r := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r, (HL)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=r := HL*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r, (IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=r := (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (HL),r&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=HL* := r&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (IXY+d),r&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=(IXY+D)* := r&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (HL), n&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=HL* := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (IXY+d), n&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=(IXY+d)* := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, (BC/DE)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := rr*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, (nn)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=A := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (BC/DE), A&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=rr* := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), A&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=(nn)* := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, I&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=A := I; P/V:=IFF2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, R&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=A := R; P/V:=IFF2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD I, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=I := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD R, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=R := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD BC/DE/HL/SP, nn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr := nn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD IXY, nn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=rr := nn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD HL, (nn)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD BC/DE/SP/IXY, (nn)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=rr := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), HL&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=(nn)* := HL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), BC/DE/SP/IXY&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=(nn)* := rr&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD SP, HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=SP := HL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD SP, IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=SP := IXY&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:The basic data load/transfer instruction. Transfers data from the location specified by the second argument, to the location specified by the first. Available combinations are as follows:&lt;br /&gt;
:* Any 8-bit register can be:&lt;br /&gt;
:** loaded with an immediate value;&lt;br /&gt;
:** loaded with the contents of any other 8-bit register except I and R;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by HL;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory offset-indexed by IX or IY.&lt;br /&gt;
:* Additionally, the accumulator A (only) can be:&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by BC or DE;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by an immediate address;&lt;br /&gt;
:** loaded with the contents of I or R.&lt;br /&gt;
:* Any 16-bit register pair can be:&lt;br /&gt;
:** loaded with an immediate value;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by an immediate address.&lt;br /&gt;
:* Additionally, SP (only) can be:&lt;br /&gt;
:** loaded with the contents of HL, IX, or IY.&lt;br /&gt;
:** The planned &#039;&#039;&#039;ld hl, sp&#039;&#039;&#039; didn&#039;t make it to Next yet, one possible workaround is: &#039;&#039;&#039;ld hl,0&#039;&#039;&#039;; &#039;&#039;&#039;add hl,sp&#039;&#039;&#039;;&lt;br /&gt;
:* Memory referred to by HL or through IX can be assigned immediate values.&lt;br /&gt;
:Although 16-bit register pairs cannot be directly moved between each other, they can be moved by moving the two 8-bit registers. (SP gets a special case because it can&#039;t be addressed via 8-bit registers.) Some assemblers will provide built-in macro instructions allowing, for example, &#039;&#039;&#039;ld bc, de&#039;&#039;&#039;.&lt;br /&gt;
:LD instructions do not alter any flags unless I or R are loaded into A.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EX (EXchange)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EX DE, HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(DE,HL)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX AF, AF&#039;&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=!&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(AF,AF&#039;)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX (SP), HL&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=swap(SP*,HL)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX (SP), IXY&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=swap(SP*,IXY)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Exchanges the contents of two sources. The only permitted combinations are&lt;br /&gt;
:* Exchanging DE and HL;&lt;br /&gt;
:* Exchanging AF and AF&#039;;&lt;br /&gt;
:* Exchanging HL, IX, or IY with the contents of memory pointed to by SP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EXX (EXchange all)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EXX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(BC,BC&#039;);swap(DE,DE&#039;);swap(HL,HL&#039;)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Exchanges BC, DE, and HL with their shadow registers. AF and AF&#039; are not exchanged. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PUSH&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PUSH BC/DE/HL/AF&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=SP-=2; SP*:=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=PUSH IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=SP-=2; SP*:=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=PUSH nnnn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=SP-=2; SP*:=nnnn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Pushes the given argument on the stack. This can be any 16-bit register pair except SP. SP is reduced by 2 and then the argument is written to the new location SP points to.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;POP&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=POP BC/DE/HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=POP AF&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=!&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=POP IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Pops the given argument from the stack. This can be any 16-bit register pair except SP. The current value at SP is copied to the register pair and then SP is raised by 2.&lt;br /&gt;
:Popping into AF does set value of flag register F directly to low 8 bits of value from stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Block Copy ===&lt;br /&gt;
;LDI (LoaD and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=DE*:=HL*; DE++; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Copies the byte pointed to by HL to the address pointed to by DE, then adds 1 to DE and HL and subtracts 1 from BC. P/V is set to (BC!=0), i.e. set when non zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDIR (LoaD and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do LDI while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Automatically loops LDI until BC reaches zero. Note the last iteration starts when BC=1 and ends with BC=0 (starting the LDIR with BC=0 will start 64kiB transfer, most likely overwriting vital parts of system memory and/or code itself).&lt;br /&gt;
:Flag effects are the same as LDI except that P/V will always be reset, because BC by definition reaches 0 before this instruction ends (normally - unless something overwrites LDIR opcode while BC&amp;gt;0).&lt;br /&gt;
:Interrupts may interrupt LDIR instruction while looping (after each single LDI sub-part finished) and LDIR will resume after and finish loop properly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDD (LoaD and Decrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=DE*:=HL*; DE--; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as LDI, but subtracts 1 from DE and HL instead of adding.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDDR (LoaD and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=0&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do LDD while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as LDIR but loops LDD instead of LDI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDWS&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDWS&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=DE*:=HL*; INC L; INC D;&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next-only extended opcode. Copies the byte pointed to by HL to the address pointed to by DE and increments only L and D. This is used for vertically copying bytes to the Layer 2 display.&lt;br /&gt;
:The flags are identical to what the &#039;&#039;&#039;INC D&#039;&#039;&#039; instruction would produce.&lt;br /&gt;
:Note the source data are read only from single 256B (aligned) block of memory, because only L is incremented, not HL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDIX, LDIRX, LDDX, LDDRX&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDIX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx={if HL*!=A DE*:=HL*;} DE++; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDIRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do LDIX while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDDX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx={if HL*!=A DE*:=HL*;} DE++; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDDRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do LDDX while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next-only extended opcodes. Behave similarly as their non-X equivalents except the byte is not copied if it is equal to A and LDDX/LDDRX advance DE by incrementing it (like LDI), while HL is decremented (like LDD).&lt;br /&gt;
:Second difference to non-X instructions (as usual with next-only opcodes due to implementation), the extended ones don&#039;t modify any flags.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDPIRX &lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDPIRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do{t:=(HL&amp;amp;$FFF8+E&amp;amp;7)*; {if t!=A DE*:=t;} DE++; BC--}while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Similar to LDIRX except the source byte address is not just HL, but is obtained by using the top 13 bits of HL and the lower 3 bits of DE and HL does not increment during whole loop (HL works as base address of aligned 8 byte lookup table, DE works as destination and also wrapping index 0..7 into table). This is intended for &amp;quot;pattern fill&amp;quot; functionality.&lt;br /&gt;
&lt;br /&gt;
=== Block Search ===&lt;br /&gt;
;CPI (ComPare and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*==A?; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Compares the byte pointed to by HL with the contents of A and sets Z if it matches or S if the comparison goes negative. Then adds 1 to HL and subtracts 1 from BC. P/V is set to (BC!=0), i.e. set when non zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPIR (ComPare and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do CPI while (!Z &amp;amp;&amp;amp; BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Automatically loops CPI until either Z is set (A is found in the byte pointed to by HL) or P/V is reset (BC reached 0).&lt;br /&gt;
:Flag effects are the same as CPI except that one of the two terminating flag conditions will always be true.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPD (ComPare and Decrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*==A?; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as CPI, but subtracts 1 from HL instead of adding it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPDR (ComPare and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do CPD while (!Z &amp;amp;&amp;amp; BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as CPIR but loops CPD instead of CPI. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Arithmetic ===&lt;br /&gt;
;ADD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A+=r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A+=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL+=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD IXY, BC/DE/IXY/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=IXY+=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL/DE/BC, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=rr+=unsigned A&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL/DE/BC, nnnn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=?&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=?&lt;br /&gt;
 |z=?&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=rr+=nnnn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Adds values together. Legal combinations are:&lt;br /&gt;
:* When adding 8-bit values the first parameter must be A and the second may be:&lt;br /&gt;
:** The contents of an 8-bit register;&lt;br /&gt;
:** An immediate value;&lt;br /&gt;
:** The contents of memory pointed to by HL or by indexing based on IX or IY.&lt;br /&gt;
:* When adding 16-bit values the first parameter must be HL, IX or IY and the second must be another 16-bit register pair. If the first parameter is IX or IY, the second cannot be HL or the other index register. &lt;br /&gt;
:* For 16 bit additions (regular Z80), H is set if a carry occurred in bit 11 (ie, a half carry in the high byte)&lt;br /&gt;
:* On the Spectrum Next the extended opcodes also allow the first parameter to be HL, DE, or BC and the second to be A (A will be zero extended to 16 bits) or an immediate value. It&#039;s not yet clear if the Next-extended ADD rr,nnnn will preserve or modify flags (the ADD rr,A keeps flags intact).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;ADC (ADd with Carry)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A+=r+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=n+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=HL*+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A+=(IXY+d)*+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL+=rr+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Adds values together, adding an additional 1 if Carry is set. Legal combinations are the same as for ADD, although there are no extended opcode versions of ADC and in 16-bit values the first parameter can only be HL. For 16-bit values the H flag is set if carry from bit 11; otherwise, it is reset.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
;SUB&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SUB r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A -= r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A -= n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A -= HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A -= (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts a value from A. Legal combinations are the same as for ADD for 8-bit, except that A does not need to be specified as the first parameter because subtraction can only be done from A. SUB cannot be used for 16-bit numbers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SBC (SuBtract with Carry, er, borrow)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A-=(r+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=(n+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=(HL*+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A-=((IXY+d)+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL-=(rr+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts values, subtracting an additional 1 if Carry is set. Legal combinations are the same as for ADD, although there are no extended opcode versions of SBC and in 16-bit values the first parameter can only be HL. For 16-bit values the H flag is set if borrow from bit 12; otherwise, it is reset.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;AND, OR, XOR&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=AND r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A &amp;amp; r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A &amp;amp; n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A &amp;amp; HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A &amp;amp; (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A OR r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A OR n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A OR HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A OR (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A ^ r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A ^ n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A ^ HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A ^ (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Performs the appropriate bitwise operator on A. Legal combinations are the same as SUB. &lt;br /&gt;
&lt;br /&gt;
:XOR A is faster and shorter than LD A,0&lt;br /&gt;
&lt;br /&gt;
;MIRROR&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=MIRROR A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A[76543210]:=A[01234567]&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Mirrors (reverses the order) of bits in the accumulator. Older core versions supported MIRROR DE, but this was removed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CP (ComPare)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CP r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A-=r?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=n?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=HL*?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A-=(IXY+d)?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the flags as if a SUB was performed but does not perform it. Legal combinations are the same as SUB. This is commonly used to set the flags to perform an equality or greater/less test.&lt;br /&gt;
:* CP is &#039;&#039;not&#039;&#039; equivalent to &amp;quot;if&amp;quot; in high level languages. Flag based jumps can follow any instruction that sets the flags, not just CP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;TEST&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=TEST n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=A&amp;amp;n?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
: Next extended opcode. Similar to CP, but performs an AND instead of a subtraction. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INC (INCrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL*++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=rr++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr++&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Increments the target by one. The argument can be any 8-bit register, any 16-bit register pair, or the address pointed to by HL or indexed via IX or IY. P/V is set if the target held $7F. N is reset.&lt;br /&gt;
:* INC A is faster than ADD 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DEC&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DEC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL*--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+D)*--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=rr--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Decrements the target by one. Allowed arguments are the same as INC. Flag effects are the same as INC except H refers to borrow, not carry; and P/V is set if the target held $80.&lt;br /&gt;
:* DEC A is faster than SUB 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLC (Rotate Left and Copy)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[7]; r:=r&amp;lt;&amp;lt;1; r[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[7]; HL*:=HL*&amp;lt;&amp;lt;1; HL*[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[7]; (IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1; (IXY+d)*[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[7]; (IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; (IX+d)*[0]:=x; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Rotates the target bitwise left by one position. The MSB is copied to bit 0, and also to Carry. Can be applied to any 8-bit register or to a location in memory pointed to by HL or indexed via IX or IY. The final alternative is undocumented, and stores the result in a register as well as performing the operation. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RL (Rotate Left)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RL r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[7]; r:=r&amp;lt;&amp;lt;1; r[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[7]; HL*:=HL*&amp;lt;&amp;lt;1; HL*[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[7]; (IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1; (IXY+d)*[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[7]; (IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; (IX+d)*[0]:=CF; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLC, except the MSB is copied to Carry only, and the previous contents of Carry are copied to bit 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RRC, RR (Rotate Right and Copy, Rotate Right)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RRC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[0]; r:=r&amp;gt;&amp;gt;1; r[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[0]; HL*:=HL*&amp;gt;&amp;gt;1; HL*[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[0]; (IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1; (IXY+d)*[7]:=x; CF:=x&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[0]; (IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1; (IX+d)*[7]:=x; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[0]; r:=r&amp;gt;&amp;gt;1; r[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[0]; HL*:=HL*&amp;gt;&amp;gt;1; HL*[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[0]; (IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1; (IXY+d)*[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[0]; (IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1; (IX+d)*[7]:=CF; CF:=x; r=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLC and RL except they rotate right instead of left.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SLA (Shift Left Arithmetic)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SLA r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL*&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; r=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RL except bit 0 is set to zero, not the previous contents of Carry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SRA (Shift Right Arithmetic)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SRA r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r&amp;gt;&amp;gt;1 OR r[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL*&amp;gt;&amp;gt;1 OR HL*[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1 OR (IXY+d)*[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1 OR (IX+d)*[7]; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RR except the MSB is left unchanged (on the assumption that it&#039;s the sign bit), not replaced with the previous contents of Carry. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SRL (Shift Right Logical)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SRL r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=unsigned(r)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=unsigned(HL*)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=unsigned((IXY+d)*)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL r,(IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=unsigned((IXY+d)*)&amp;gt;&amp;gt;1; r:=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as SLA except it shifts right instead of left.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLCA, RLA, RRCA, RRA&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLCA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[7]; A:=A&amp;lt;&amp;lt;1; A[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[7]; A:=A&amp;lt;&amp;lt;1; A[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRCA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[0]; A:=A&amp;gt;&amp;gt;1; A[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[0]; A:=A&amp;gt;&amp;gt;1; A[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as their matching instruction except they work only on A, are faster, and do not alter S, Z or P/V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SLL (Shift Left Logical)&lt;br /&gt;
:This mnemonic has no associated opcode. There is no difference between a logical and arithmetic shift left, so both can use SLA, but some assemblers will allow SLL as an equivalent. Unfortunately, some will also assemble it as SL1. So it&#039;s probably worth just avoiding.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SL1 or SLI (Shift Left and Add 1) or (Shift Left and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SL1 r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=(r&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=(HL*&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=((IXY+d)*&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 r,(IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=((IXY+d)*&amp;lt;&amp;lt;1)+1; r=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Undocumented opcodes that behave like SLA, but set bit 0 to 1 instead of 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=18&lt;br /&gt;
 |shortfx=x=HL*; HL*[0123]:=A[0123]; HL*[7654]:=x[0123]; A[0123]:=x[7654]  &lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Rotates the lower nibble of the byte pointed to by HL, the upper nibble of that byte, and the lower nibble of A, in that order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RRD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RRD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=18&lt;br /&gt;
 |shortfx=x=HL*; HL*[7654]:=A[0123]; HL*[0123]:=x[7654]; A[0123]:=x[0123]&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLD, but the order is: the lower nibble pointed to by HL, the lower nibble of the A, and the upper nibble of the byte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Barrel (variable amount) shift and rotate (cores v2+ only)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=BSLA DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=DE&amp;lt;&amp;lt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRA DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=signed(DE)&amp;gt;&amp;gt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRL DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=unsigned(DE)&amp;gt;&amp;gt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRF DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=~(unsigned(~DE)&amp;gt;&amp;gt;(B&amp;amp;31))&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BRLC DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=DE&amp;lt;&amp;lt;(B&amp;amp;15) OR DE&amp;gt;&amp;gt;(16-B&amp;amp;15)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Shift instructions use only bits 4..0 of B, BSLA shifts DE left, BSRA/BSRL/BSRF shifts DE right in arithmetic/logical/fill-one way. BRLC rotates DE left by B places, uses only bits 3..0 of B (to rotate right, use B=16-places).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPL (ComPLement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPL&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A:=~A&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inverts the contents of the accumulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NEG (NEGate)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NEG&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=0-A&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts the contents of the accumulator from zero, making it negative for the purpose of two&#039;s complement. P/V is set if A previously held $80. C is set if accumulator did not previously hold $00.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CCF (Change Carry Flag)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CCF&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=CF:=!CF&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inverts the carry flag. (Does not, as might be assumed, clear it!) Also sets H to the previous value of the carry flag.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SCF (Set Carry Flag)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SCF&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=1&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=CF:=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the carry flag.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;BIT&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=HL*[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=(IXY+d)*[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Tests if a bit is set on target value. The first parameter states which bit. The second can be any 8-bit register, or the location in memory pointed to by HL or indexed by IX or IY. Sets Z if specified bit was 0. S and P/V are destroyed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SET&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SET b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL* OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)* OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET r,b,(IX+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)* OR (1&amp;lt;&amp;lt;b); r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SETAE&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=unsigned($80)&amp;gt;&amp;gt;(E&amp;amp;7)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the numbered bit on target value. The possible targets are the same as BIT. The three parameter variant is undocumented and stores the result in a register as well as performing the SET.&lt;br /&gt;
:SETAE is a Next extended opcode which takes the bit number to set from E (only the low 3 bits) and sets whole A to value of that bit, but counted from top to bottom (E=0 will produce A:=$80, E=7 will produce A:=$01). This works as pixel mask for ULA bitmap modes, when E is 0..255 x-coordinate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RES (RESet)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RES b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL* &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)* &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES r,b,(IX+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)* &amp;amp; (~(1&amp;lt;&amp;lt;b)); r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Resets the numbered bit on target value. The possible targets are the same as BIT.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DAA (Decimal Adjust Accumulator)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DAA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=if(A&amp;amp;$0F&amp;gt;$09 or HF) A±=$06; if(A&amp;amp;$F0&amp;gt;$90 or CF) A±=$60 (± depends on NF)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Modifies the contents of the accumulator based on the flags left by previous operation to correct for binary coded decimal (BCD).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;MUL&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=MUL&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=DE:=D*E&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Multiplies D by E, storing 16 bit result into DE. Does not alter any flags.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SWAPNIB&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SWAPNIB&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=A[3210]&amp;lt;&amp;lt;4 OR A[7654]&amp;gt;&amp;gt;4&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Swaps the high and low nibbles of the accumulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PIXELAD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PIXELAD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=HL:=$4000+((D&amp;amp;$C0)&amp;lt;&amp;lt;5)+((D&amp;amp;$07)&amp;lt;&amp;lt;8)+((D&amp;amp;$38)&amp;lt;&amp;lt;2)+(E&amp;gt;&amp;gt;3)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Takes E and D as the X,Y coordinate of a point and calculates the address of the byte containing this pixel in the pixel area of standard ULA screen 0, storing it in HL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PIXELDN&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PIXELDN&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=if(HL&amp;amp;$0700!=$0700) HL+=256;&amp;lt;br&amp;gt;&lt;br /&gt;
else if(HL&amp;amp;$e0!=$e0) HL:=HL&amp;amp;$F8FF+$20;&amp;lt;br&amp;gt;&lt;br /&gt;
else HL:=HL&amp;amp;$F81F+$0800&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Updates the address in HL to move down by one line of pixels.&lt;br /&gt;
&lt;br /&gt;
=== Control Flow ===&lt;br /&gt;
;JP (JumP)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JP nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (HL)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=PC:=HL (not PC:=HL*)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (IXY)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=PC:=IXY (not PC:=IXY*)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (C)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=?&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=?&lt;br /&gt;
 |z=?&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=PC:=PC&amp;amp;$C000+IN(C)&amp;lt;&amp;lt;6&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Jumps (sets the PC) to the given address. The address can be given immediately or read from HL, IX, or IY. Note that although the variants that use register pairs &#039;&#039;look&#039;&#039; like they are using indirect addressing, JP (HL) jumps to the address stored in the register HL, not the address stored at the address HL points to. The JP (C) sets bottom 14 bits of current PC&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; to value read from I/O port: PC[13:0] = (IN (C) &amp;lt;&amp;lt; 6) (can be used to execute code block read from a disk stream) * &amp;quot;current PC&amp;quot; is address of next instruction after JP (C), as the PC is advanced by fetching op code from memory and is already advanced when execution happens - if the JP instruction resides at the very end of 16k memory block (..FE or ..FF address), then newly composed PC value will land into following 16k block.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;JP cc &lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JP Z/NZ/NC/C/PO/PE/P/M, nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=if cc PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Conditionally jumps (sets the PC) to the given address. The condition is set in terms of the flags: Zero (Z, NZ), Carry (C, NC), Parity (PO, PE), and Sign (P/M). The address can only be given immediately for a conditional jump.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;JR (Jump Relative)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JR nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JR C/NC/Z/NZ, nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=if cc PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Jumps to an alternate address by &#039;&#039;adding&#039;&#039; the parameter to the PC - in other words the parameter is an adjustment, not an absolute address. When used in an assembler with labels the syntax should be the same as JP. The JR address can only be given immediately. Conditions are legal, but only those based on carry and zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DJNZ (Decrement and Jump if Not Zero)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DJNZ n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=B--; if B!=0 PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Decrements B then performs JR NZ.. to the given address. Used for encapsulating loops.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CALL&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CALL nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17&lt;br /&gt;
 |shortfx=SP-=2; SP*:=PC; PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CALL Z/NZ/C/NC/PO/PE/P/M, n&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17&lt;br /&gt;
 |shortfx=if cc {SP-=2; SP*:=PC; PC:=nn}&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Like JP (including the ability to have conditions), but PUSHes the PC before jumping. Used for subroutine calls. &lt;br /&gt;
:* If a subroutine ends with a CALL to another subroutine immediately before the RET, it is more efficient to JP to the other subroutine and allow its RET to return from the whole combination. This might make high-level programmers queasy but your compiler already does it (tail call optimization)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RET&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RET&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RET Z/NZ/C/NC/PO/PE/P/M&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=if cc {PC:=SP*; SP+=2}&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:POPs the PC from the stack, returning from a previous CALL. This can also accept the same conditions as JP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RETI&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RETI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Returns from an interrupt service routine (same as RET instruction, but also does signal to I/O device that the interrupt routine is completed).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RETN&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RETN&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=IFF1:=IFF2; PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Returns from a non-maskable interrupt service routine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RST (ReSTart)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RST n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=CALL n&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Performs a CALL to a routine located at one of eight fixed locations ($00, $08, ..., $38) in the zero page. This is located in ROM, and on the Spectrum only a limited number of values are useful to call built-in ROM routines. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NOP (No OPeration)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NOP&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=PC+=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Does &amp;quot;nothing&amp;quot; (just usual housekeeping like refreshing memory and advancing program counter to next instruction).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;HALT&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=HALT&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=waits for interrupt&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Suspends the CPU until an interrupt is received (maskable interrupts must be enabled to break the wait). While CPU is waiting for interrupt, the fake NOP instruction is being executed, to keep memory refresh going on.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DI (Disable Interrupts)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=IFF1:=0; IFF2:=0&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Disables maskable interrupts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EI (Enable Interrupts)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=IFF1:=1; IFF2:=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Enables maskable interrupts (after next instruction, i.e. for example &amp;quot;EI RET&amp;quot; - the interrupt may happen only after RET instruction is finished (or &amp;quot;EI DI&amp;quot; pair of instructions will not allow any maskable interrupt to happen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IM (Interrupt Mode)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IM n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=Interrupt mode:=n&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets interrupt handling mode. The default for Next is 1. 2 is used for user defined interrupt service routines. IM 0 is useless on Next (and pretty much everything else, to be honest)&lt;br /&gt;
&lt;br /&gt;
=== Input and Output ===&lt;br /&gt;
;IN r, (c); OUT (c), r&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN r, (c)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=r := in(BC)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (c),r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=out(BC,r)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs or outputs a byte value from the 16-bit port number given in BC. R can be any 8-bit register. Note that the port number is given in BC even though the instruction refers only to C. Some assemblers will allow the instruction to be written with &amp;quot;(bc)&amp;quot; instead of &amp;quot;(c)&amp;quot; as a reminder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IN (c); OUT (c), 0&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN (c)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=in(BC)?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (c),0&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=out(BC,0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Undocumented opcodes. The IN variation performs an input, but does not store the result, only setting the flags. The OUT variation outputs 0 on the port. This is the only number that can be output to a port in immediate mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IN a, (n); OUT (n), a&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN A, (n)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=A := in(An)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (n),A&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=out(An,A)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs or outputs the byte value in A from a 16-bit port number where the lower byte is N and the upper byte is A. This is only likely to be useful in cases where the upper byte of the port number is not relevant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INI (INput and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*:=in(BC); HL++; B--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs a value from port BC into memory at the address stored in HL, then increments HL and decrements B. Because B is decremented and is part of the port number, the port number for future INI instructions will change unless it is reset. Z is set if B reached 0; S, H, and P/V are destroyed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INIR (INput and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do INI while(B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Loops INIR until B reaches 0. Because B is decremented during this process and is part of the port number, this is unlikely to be useful except when the upper byte of the port number is not relevant. Interrupts are recognized during execution.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IND, INDR (INput and Decrement, INput and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IND&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*:=in(BC); HL--; B--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do IND while(B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Behave like INI and INIR except that HL is decremented instead of incremented.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;OUTI (Out and Increment), OTIR (Out and Increment Repeated), OUTD (Out and Decrement), OTDR (Out and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=OUTI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=B--; out(BC,HL*); HL++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OTIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do OUTI while (B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUTD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=B--; out(BC,HL*); HL--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OTDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do OUTD while (B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Behave like INI, INIR, IND, INDR except that they output instead of input and B is decremented &#039;&#039;&#039;before&#039;&#039;&#039; the output instead of after.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;OUTINB (Out and Increment with No B)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=OUTINB&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=?&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=?&lt;br /&gt;
 |z=?&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=out(BC,HL*); HL++&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Behaves like OUTI, but doesn&#039;t decrement B.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NEXTREG&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NEXTREG nn, nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=out($243B,nn1); out($253B,nn2)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=NEXTREG nn, A&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17&lt;br /&gt;
 |shortfx=out($243B,nn); out($253B,a)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Directly sets the [[Board feature control|Next Feature Control Registers]] without going through ports {{PortNo|$243B}} and {{PortNo|$253B}}.&lt;br /&gt;
&lt;br /&gt;
=== Z80N instructions opcodes ===&lt;br /&gt;
&lt;br /&gt;
The Z80 on the Next has extra instructions that are unique to it.  Below is a table of the opcode bytes that are required to select&lt;br /&gt;
those instructions.  The timings are based on some partial testing.  These may not be accurate.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Instruction !! Byte 1 !! Byte 2 !! Byte 3 !! Byte 4 || T-States&lt;br /&gt;
|-&lt;br /&gt;
| LDIX || ED || A4 || || || 16&lt;br /&gt;
|-&lt;br /&gt;
| LDWS || ED || A5 || || || 14&lt;br /&gt;
|-&lt;br /&gt;
| LDIRX || ED || B4 || || || 21/16&lt;br /&gt;
|-&lt;br /&gt;
| LDDX || ED || AC || || || 16&lt;br /&gt;
|-&lt;br /&gt;
| LDDRX || ED || BC || || || 21/16&lt;br /&gt;
|-&lt;br /&gt;
| LDPIRX || ED  || B7 || || || 21/16&lt;br /&gt;
|-&lt;br /&gt;
| OUTINB || ED  || 90 || || || 16&lt;br /&gt;
|-&lt;br /&gt;
| MUL || ED || 30 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD HL,A || ED || 31 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD DE,A || ED || 32 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD BC,A || ED || 33 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD HL,$nnnn || ED || 34 || low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| ADD DE,$nnnn || ED || 35 || low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| ADD BC,$nnnn || ED  || 36|| low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| SWAPNIB || ED || 23 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| MIRROR A || ED || 24 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| PUSH $nnnn || ED || 8A || high || low || 23&lt;br /&gt;
|-&lt;br /&gt;
| NEXTREG $rr,$nn || ED || 91 || register || value || 20&lt;br /&gt;
|-&lt;br /&gt;
| NEXTREG $rr,A || ED  || 92 || register || || 17&lt;br /&gt;
|-&lt;br /&gt;
| PIXELDN || ED || 93 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| PIXELAD || ED || 94 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| SETAE || ED  || 95 ||  || || 8&lt;br /&gt;
|-&lt;br /&gt;
| TEST $nn || ED || 27 || value || || 11&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Also note that the &amp;quot;PUSH $nnnn&amp;quot; instruction is not a mistake.  The operand is in big-endian.&lt;br /&gt;
&lt;br /&gt;
The core version 2.00.22+ has these new instructions:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Instruction !! Byte 1 !! Byte 2 !! Byte 3 !! Byte 4 || T-States&lt;br /&gt;
|-&lt;br /&gt;
| BSLA DE,B || ED || 28 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRA DE,B || ED || 29 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRL DE,B || ED || 2A || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRF DE,B || ED || 2B || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BRLC DE,B || ED || 2C || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| JP (C) || ED || 98 || || || 13&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mmattsteel</name></author>
	</entry>
	<entry>
		<id>http://wiki.specnext.dev/index.php?title=Extended_Z80_instruction_set&amp;diff=11441</id>
		<title>Extended Z80 instruction set</title>
		<link rel="alternate" type="text/html" href="http://wiki.specnext.dev/index.php?title=Extended_Z80_instruction_set&amp;diff=11441"/>
		<updated>2020-06-06T08:48:11Z</updated>

		<summary type="html">&lt;p&gt;Mmattsteel: MIRROR is MIRROR A&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This is a general list of Z80 instructions with descriptions. For summaries, you can view the [[Z80 Instruction Table]]. You can also [[Special:RunQuery/OpcodeQuery|search for opcodes]].&lt;br /&gt;
&lt;br /&gt;
=== Term references ===&lt;br /&gt;
* &#039;&#039;Any 8-bit register&#039;&#039; means A, B, C, D, E, H, and L. F, I and R do not count even though they are technically 8 bit registers. Also, the high and low bytes of IX and IY (IXH, IXL, IYH, IYL) can be used as 8-bit registers although this behavior was undocumented on the original Z80.&lt;br /&gt;
* IXY means IX or IY.&lt;br /&gt;
* For the status field:&lt;br /&gt;
** S means Standard. It&#039;s in the Z80 manual. Everything should support it.&lt;br /&gt;
** U means Undocumented. It works on Z80 chips, but it&#039;s not in the manual. These have been known for years and were acknowledged by Zilog, so they should work on everything, but some assemblers may vary the syntax.&lt;br /&gt;
** E means Extension. It &#039;&#039;only&#039;&#039; works on the Z80 core on the Next. It&#039;ll probably only be accepted by assemblers that have been updated specifically for the Next.&lt;br /&gt;
* Each of the flag effects is documented as follows:&lt;br /&gt;
** - means the flag is unchanged.&lt;br /&gt;
** 1 or 0 mean the flag is set or reset as appropriate.&lt;br /&gt;
** ? means we don&#039;t know what effect the instruction has on the flag.&lt;br /&gt;
** ! means the instruction has an unusual effect on the flag which is documented in the description.&lt;br /&gt;
** S means the effect on the flag is &amp;quot;standard&amp;quot;. C is set if a carry/borrow occurred beyond the MSB; Z is set if the result of the operation is zero; H is set if a carry/borrow occurred beyond bit 3.&lt;br /&gt;
** P, V, and L are used for the P/V flag which has several standard effects. P means it&#039;s parity. V means it&#039;s overflow. L means it checks BC as loop counter for some of the block copy and search instructions: P/V = (BC != 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Register and Data manipulation ===&lt;br /&gt;
;LD (LoaD)&lt;br /&gt;
&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LD r, r&#039;&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r := r&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r,n&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=r := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r, (HL)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=r := HL*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r, (IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=r := (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (HL),r&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=HL* := r&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (IXY+d),r&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=(IXY+D)* := r&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (HL), n&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=HL* := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (IXY+d), n&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=(IXY+d)* := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, (BC/DE)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := rr*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, (nn)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=A := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (BC/DE), A&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=rr* := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), A&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=(nn)* := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, I&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=A := I; P/V:=IFF2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, R&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=A := R; P/V:=IFF2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD I, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=I := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD R, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=R := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD BC/DE/HL/SP, nn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr := nn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD IXY, nn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=rr := nn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD HL, (nn)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD BC/DE/SP/IXY, (nn)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=rr := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), HL&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=(nn)* := HL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), BC/DE/SP/IXY&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=(nn)* := rr&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD SP, HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=SP := HL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD SP, IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=SP := IXY&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:The basic data load/transfer instruction. Transfers data from the location specified by the second argument, to the location specified by the first. Available combinations are as follows:&lt;br /&gt;
:* Any 8-bit register can be:&lt;br /&gt;
:** loaded with an immediate value;&lt;br /&gt;
:** loaded with the contents of any other 8-bit register except I and R;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by HL;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory offset-indexed by IX or IY.&lt;br /&gt;
:* Additionally, the accumulator A (only) can be:&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by BC or DE;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by an immediate address;&lt;br /&gt;
:** loaded with the contents of I or R.&lt;br /&gt;
:* Any 16-bit register pair can be:&lt;br /&gt;
:** loaded with an immediate value;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by an immediate address.&lt;br /&gt;
:* Additionally, SP (only) can be:&lt;br /&gt;
:** loaded with the contents of HL, IX, or IY.&lt;br /&gt;
:** The planned &#039;&#039;&#039;ld hl, sp&#039;&#039;&#039; didn&#039;t make it to Next yet, one possible workaround is: &#039;&#039;&#039;ld hl,0&#039;&#039;&#039;; &#039;&#039;&#039;add hl,sp&#039;&#039;&#039;;&lt;br /&gt;
:* Memory referred to by HL or through IX can be assigned immediate values.&lt;br /&gt;
:Although 16-bit register pairs cannot be directly moved between each other, they can be moved by moving the two 8-bit registers. (SP gets a special case because it can&#039;t be addressed via 8-bit registers.) Some assemblers will provide built-in macro instructions allowing, for example, &#039;&#039;&#039;ld bc, de&#039;&#039;&#039;.&lt;br /&gt;
:LD instructions do not alter any flags unless I or R are loaded into A.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EX (EXchange)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EX DE, HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(DE,HL)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX AF, AF&#039;&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=!&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(AF,AF&#039;)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX (SP), HL&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=swap(SP*,HL)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX (SP), IXY&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=swap(SP*,IXY)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Exchanges the contents of two sources. The only permitted combinations are&lt;br /&gt;
:* Exchanging DE and HL;&lt;br /&gt;
:* Exchanging AF and AF&#039;;&lt;br /&gt;
:* Exchanging HL, IX, or IY with the contents of memory pointed to by SP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EXX (EXchange all)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EXX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(BC,BC&#039;);swap(DE,DE&#039;);swap(HL,HL&#039;)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Exchanges BC, DE, and HL with their shadow registers. AF and AF&#039; are not exchanged. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PUSH&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PUSH BC/DE/HL/AF&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=SP-=2; SP*:=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=PUSH IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=SP-=2; SP*:=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=PUSH nnnn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=SP-=2; SP*:=nnnn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Pushes the given argument on the stack. This can be any 16-bit register pair except SP. SP is reduced by 2 and then the argument is written to the new location SP points to.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;POP&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=POP BC/DE/HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=POP AF&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=!&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=POP IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Pops the given argument from the stack. This can be any 16-bit register pair except SP. The current value at SP is copied to the register pair and then SP is raised by 2.&lt;br /&gt;
:Popping into AF does set value of flag register F directly to low 8 bits of value from stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Block Copy ===&lt;br /&gt;
;LDI (LoaD and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=DE*:=HL*; DE++; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Copies the byte pointed to by HL to the address pointed to by DE, then adds 1 to DE and HL and subtracts 1 from BC. P/V is set to (BC!=0), i.e. set when non zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDIR (LoaD and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do LDI while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Automatically loops LDI until BC reaches zero. Note the last iteration starts when BC=1 and ends with BC=0 (starting the LDIR with BC=0 will start 64kiB transfer, most likely overwriting vital parts of system memory and/or code itself).&lt;br /&gt;
:Flag effects are the same as LDI except that P/V will always be reset, because BC by definition reaches 0 before this instruction ends (normally - unless something overwrites LDIR opcode while BC&amp;gt;0).&lt;br /&gt;
:Interrupts may interrupt LDIR instruction while looping (after each single LDI sub-part finished) and LDIR will resume after and finish loop properly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDD (LoaD and Decrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=DE*:=HL*; DE--; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as LDI, but subtracts 1 from DE and HL instead of adding.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDDR (LoaD and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=0&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do LDD while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as LDIR but loops LDD instead of LDI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDWS&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDWS&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=DE*:=HL*; INC L; INC D;&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next-only extended opcode. Copies the byte pointed to by HL to the address pointed to by DE and increments only L and D. This is used for vertically copying bytes to the Layer 2 display.&lt;br /&gt;
:The flags are identical to what the &#039;&#039;&#039;INC D&#039;&#039;&#039; instruction would produce.&lt;br /&gt;
:Note the source data are read only from single 256B (aligned) block of memory, because only L is incremented, not HL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDIX, LDIRX, LDDX, LDDRX&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDIX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx={if HL*!=A DE*:=HL*;} DE++; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDIRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do LDIX while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDDX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx={if HL*!=A DE*:=HL*;} DE++; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDDRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do LDDX while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next-only extended opcodes. Behave similarly as their non-X equivalents except the byte is not copied if it is equal to A and LDDX/LDDRX advance DE by incrementing it (like LDI), while HL is decremented (like LDD).&lt;br /&gt;
:Second difference to non-X instructions (as usual with next-only opcodes due to implementation), the extended ones don&#039;t modify any flags.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDPIRX &lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDPIRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do{t:=(HL&amp;amp;$FFF8+E&amp;amp;7)*; {if t!=A DE*:=t;} DE++; BC--}while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Similar to LDIRX except the source byte address is not just HL, but is obtained by using the top 13 bits of HL and the lower 3 bits of DE and HL does not increment during whole loop (HL works as base address of aligned 8 byte lookup table, DE works as destination and also wrapping index 0..7 into table). This is intended for &amp;quot;pattern fill&amp;quot; functionality.&lt;br /&gt;
&lt;br /&gt;
=== Block Search ===&lt;br /&gt;
;CPI (ComPare and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*==A?; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Compares the byte pointed to by HL with the contents of A and sets Z if it matches or S if the comparison goes negative. Then adds 1 to HL and subtracts 1 from BC. P/V is set to (BC!=0), i.e. set when non zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPIR (ComPare and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do CPI while (!Z &amp;amp;&amp;amp; BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Automatically loops CPI until either Z is set (A is found in the byte pointed to by HL) or P/V is reset (BC reached 0).&lt;br /&gt;
:Flag effects are the same as CPI except that one of the two terminating flag conditions will always be true.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPD (ComPare and Decrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*==A?; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as CPI, but subtracts 1 from HL instead of adding it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPDR (ComPare and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do CPD while (!Z &amp;amp;&amp;amp; BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as CPIR but loops CPD instead of CPI. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Arithmetic ===&lt;br /&gt;
;ADD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A+=r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A+=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL+=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD IXY, BC/DE/IXY/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=IXY+=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL/DE/BC, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=rr+=unsigned A&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL/DE/BC, nnnn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=?&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=?&lt;br /&gt;
 |z=?&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=rr+=nnnn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Adds values together. Legal combinations are:&lt;br /&gt;
:* When adding 8-bit values the first parameter must be A and the second may be:&lt;br /&gt;
:** The contents of an 8-bit register;&lt;br /&gt;
:** An immediate value;&lt;br /&gt;
:** The contents of memory pointed to by HL or by indexing based on IX or IY.&lt;br /&gt;
:* When adding 16-bit values the first parameter must be HL, IX or IY and the second must be another 16-bit register pair. If the first parameter is IX or IY, the second cannot be HL or the other index register. &lt;br /&gt;
:* For 16 bit additions (regular Z80), H is set if a carry occurred in bit 11 (ie, a half carry in the high byte)&lt;br /&gt;
:* On the Spectrum Next the extended opcodes also allow the first parameter to be HL, DE, or BC and the second to be A (A will be zero extended to 16 bits) or an immediate value. It&#039;s not yet clear if the Next-extended ADD rr,nnnn will preserve or modify flags (the ADD rr,A keeps flags intact).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;ADC (ADd with Carry)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A+=r+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=n+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=HL*+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A+=(IXY+d)*+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL+=rr+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Adds values together, adding an additional 1 if Carry is set. Legal combinations are the same as for ADD, although there are no extended opcode versions of ADC and in 16-bit values the first parameter can only be HL. For 16-bit values the H flag is set if carry from bit 11; otherwise, it is reset.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
;SUB&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SUB r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A -= r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A -= n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A -= HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A -= (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts a value from A. Legal combinations are the same as for ADD for 8-bit, except that A does not need to be specified as the first parameter because subtraction can only be done from A. SUB cannot be used for 16-bit numbers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SBC (SuBtract with Carry, er, borrow)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A-=(r+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=(n+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=(HL*+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A-=((IXY+d)+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL-=(rr+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts values, subtracting an additional 1 if Carry is set. Legal combinations are the same as for ADD, although there are no extended opcode versions of SBC and in 16-bit values the first parameter can only be HL. For 16-bit values the H flag is set if borrow from bit 12; otherwise, it is reset.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;AND, OR, XOR&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=AND r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A &amp;amp; r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A &amp;amp; n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A &amp;amp; HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A &amp;amp; (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A OR r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A OR n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A OR HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A OR (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A ^ r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A ^ n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A ^ HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A ^ (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Performs the appropriate bitwise operator on A. Legal combinations are the same as SUB. &lt;br /&gt;
&lt;br /&gt;
:XOR A is faster and shorter than LD A,0&lt;br /&gt;
&lt;br /&gt;
;MIRROR&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=MIRROR A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A[76543210]:=A[01234567]&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Mirrors (reverses the order) of bits in the accumulator. Older core versions supported MIRROR DE, but this was removed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CP (ComPare)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CP r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A-=r?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=n?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=HL*?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A-=(IXY+d)?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the flags as if a SUB was performed but does not perform it. Legal combinations are the same as SUB. This is commonly used to set the flags to perform an equality or greater/less test.&lt;br /&gt;
:* CP is &#039;&#039;not&#039;&#039; equivalent to &amp;quot;if&amp;quot; in high level languages. Flag based jumps can follow any instruction that sets the flags, not just CP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;TEST&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=TEST n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=A&amp;amp;n?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
: Next extended opcode. Similar to CP, but performs an AND instead of a subtraction. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INC (INCrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL*++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=rr++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr++&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Increments the target by one. The argument can be any 8-bit register, any 16-bit register pair, or the address pointed to by HL or indexed via IX or IY. P/V is set if the target held $7F. N is reset.&lt;br /&gt;
:* INC A is faster than ADD 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DEC&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DEC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL*--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+D)*--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=rr--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Decrements the target by one. Allowed arguments are the same as INC. Flag effects are the same as INC except H refers to borrow, not carry; and P/V is set if the target held $80.&lt;br /&gt;
:* DEC A is faster than SUB 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLC (Rotate Left and Copy)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[7]; r:=r&amp;lt;&amp;lt;1; r[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[7]; HL*:=HL*&amp;lt;&amp;lt;1; HL*[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[7]; (IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1; (IXY+d)*[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[7]; (IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; (IX+d)*[0]:=x; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Rotates the target bitwise left by one position. The MSB is copied to bit 0, and also to Carry. Can be applied to any 8-bit register or to a location in memory pointed to by HL or indexed via IX or IY. The final alternative is undocumented, and stores the result in a register as well as performing the operation. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RL (Rotate Left)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RL r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[7]; r:=r&amp;lt;&amp;lt;1; r[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[7]; HL*:=HL*&amp;lt;&amp;lt;1; HL*[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[7]; (IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1; (IXY+d)*[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[7]; (IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; (IX+d)*[0]:=CF; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLC, except the MSB is copied to Carry only, and the previous contents of Carry are copied to bit 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RRC, RR (Rotate Right and Copy, Rotate Right)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RRC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[0]; r:=r&amp;gt;&amp;gt;1; r[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[0]; HL*:=HL*&amp;gt;&amp;gt;1; HL*[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[0]; (IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1; (IXY+d)*[7]:=x; CF:=x&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[0]; (IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1; (IX+d)*[7]:=x; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[0]; r:=r&amp;gt;&amp;gt;1; r[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[0]; HL*:=HL*&amp;gt;&amp;gt;1; HL*[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[0]; (IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1; (IXY+d)*[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[0]; (IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1; (IX+d)*[7]:=CF; CF:=x; r=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLC and RL except they rotate right instead of left.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SLA (Shift Left Arithmetic)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SLA r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL*&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; r=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RL except bit 0 is set to zero, not the previous contents of Carry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SRA (Shift Right Arithmetic)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SRA r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r&amp;gt;&amp;gt;1 OR r[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL*&amp;gt;&amp;gt;1 OR HL*[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1 OR (IXY+d)*[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1 OR (IX+d)*[7]; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RR except the MSB is left unchanged (on the assumption that it&#039;s the sign bit), not replaced with the previous contents of Carry. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SRL (Shift Right Logical)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SRL r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=unsigned(r)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=unsigned(HL*)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=unsigned((IXY+d)*)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL r,(IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=unsigned((IXY+d)*)&amp;gt;&amp;gt;1; r:=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as SLA except it shifts right instead of left.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLCA, RLA, RRCA, RRA&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLCA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[7]; A:=A&amp;lt;&amp;lt;1; A[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[7]; A:=A&amp;lt;&amp;lt;1; A[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRCA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[0]; A:=A&amp;gt;&amp;gt;1; A[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[0]; A:=A&amp;gt;&amp;gt;1; A[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as their matching instruction except they work only on A, are faster, and do not alter S, Z or P/V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SLL (Shift Left Logical)&lt;br /&gt;
:This mnemonic has no associated opcode. There is no difference between a logical and arithmetic shift left, so both can use SLA, but some assemblers will allow SLL as an equivalent. Unfortunately, some will also assemble it as SL1. So it&#039;s probably worth just avoiding.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SL1 or SLI (Shift Left and Add 1) or (Shift Left and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SL1 r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=(r&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=(HL*&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=((IXY+d)*&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 r,(IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=((IXY+d)*&amp;lt;&amp;lt;1)+1; r=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Undocumented opcodes that behave like SLA, but set bit 0 to 1 instead of 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=18&lt;br /&gt;
 |shortfx=x=HL*; HL*[0123]:=A[0123]; HL*[7654]:=x[0123]; A[0123]:=x[7654]  &lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Rotates the lower nibble of the byte pointed to by HL, the upper nibble of that byte, and the lower nibble of A, in that order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RRD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RRD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=18&lt;br /&gt;
 |shortfx=x=HL*; HL*[7654]:=A[0123]; HL*[0123]:=x[7654]; A[0123]:=x[0123]&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLD, but the order is: the lower nibble pointed to by HL, the lower nibble of the A, and the upper nibble of the byte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Barrel (variable amount) shift and rotate (cores v2+ only)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=BSLA DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=DE&amp;lt;&amp;lt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRA DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=signed(DE)&amp;gt;&amp;gt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRL DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=unsigned(DE)&amp;gt;&amp;gt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRF DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=~(unsigned(~DE)&amp;gt;&amp;gt;(B&amp;amp;31))&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BRLC DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=DE&amp;lt;&amp;lt;(B&amp;amp;15) OR DE&amp;gt;&amp;gt;(16-B&amp;amp;15)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Shift instructions use only bits 4..0 of B, BSLA shifts DE left, BSRA/BSRL/BSRF shifts DE right in arithmetic/logical/fill-one way. BRLC rotates DE left by B places, uses only bits 3..0 of B (to rotate right, use B=16-places).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPL (ComPLement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPL&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A:=~A&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inverts the contents of the accumulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NEG (NEGate)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NEG&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=0-A&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts the contents of the accumulator from zero, making it negative for the purpose of two&#039;s complement. P/V is set if A previously held $80. C is set if accumulator did not previously hold $00.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CCF (Change Carry Flag)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CCF&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=CF:=!CF&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inverts the carry flag. (Does not, as might be assumed, clear it!) Also sets H to the previous value of the carry flag.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SCF (Set Carry Flag)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SCF&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=1&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=CF:=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the carry flag.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;BIT&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=HL*[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=(IXY+d)*[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Tests if a bit is set on target value. The first parameter states which bit. The second can be any 8-bit register, or the location in memory pointed to by HL or indexed by IX or IY. Sets Z if specified bit was 0. S and P/V are destroyed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SET&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SET b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL* OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)* OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET r,b,(IX+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)* OR (1&amp;lt;&amp;lt;b); r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SETAE&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=unsigned($80)&amp;gt;&amp;gt;(E&amp;amp;7)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the numbered bit on target value. The possible targets are the same as BIT. The three parameter variant is undocumented and stores the result in a register as well as performing the SET.&lt;br /&gt;
:SETAE is a Next extended opcode which takes the bit number to set from E (only the low 3 bits) and sets whole A to value of that bit, but counted from top to bottom (E=0 will produce A:=$80, E=7 will produce A:=$01). This works as pixel mask for ULA bitmap modes, when E is 0..255 x-coordinate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RES (RESet)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RES b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL* &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)* &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES r,b,(IX+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)* &amp;amp; (~(1&amp;lt;&amp;lt;b)); r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Resets the numbered bit on target value. The possible targets are the same as BIT.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DAA (Decimal Adjust Accumulator)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DAA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=if(A&amp;amp;$0F&amp;gt;$09 or HF) A±=$06; if(A&amp;amp;$F0&amp;gt;$90 or CF) A±=$60 (± depends on NF)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Modifies the contents of the accumulator based on the flags and the previous operation to correct for binary coded decimal (BCD).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;MUL&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=MUL&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=DE:=D*E&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Multiplies D by E, storing 16 bit result into DE. Does not alter any flags.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SWAPNIB&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SWAPNIB&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=A[3210]&amp;lt;&amp;lt;4 OR A[7654]&amp;gt;&amp;gt;4&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Swaps the high and low nibbles of the accumulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PIXELAD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PIXELAD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=HL:=$4000+((D&amp;amp;$C0)&amp;lt;&amp;lt;5)+((D&amp;amp;$07)&amp;lt;&amp;lt;8)+((D&amp;amp;$38)&amp;lt;&amp;lt;2)+(E&amp;gt;&amp;gt;3)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Takes E and D as the X,Y coordinate of a point and calculates the address of the byte containing this pixel in the pixel area of standard ULA screen 0, storing it in HL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PIXELDN&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PIXELDN&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=if(HL&amp;amp;$0700!=$0700) HL+=256;&amp;lt;br&amp;gt;&lt;br /&gt;
else if(HL&amp;amp;$e0!=$e0) HL:=HL&amp;amp;$F8FF+$20;&amp;lt;br&amp;gt;&lt;br /&gt;
else HL:=HL&amp;amp;$F81F+$0800&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Updates the address in HL to move down by one line of pixels.&lt;br /&gt;
&lt;br /&gt;
=== Control Flow ===&lt;br /&gt;
;JP (JumP)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JP nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (HL)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=PC:=HL (not PC:=HL*)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (IXY)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=PC:=IXY (not PC:=IXY*)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (C)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=?&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=?&lt;br /&gt;
 |z=?&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=PC:=PC&amp;amp;$C000+IN(C)&amp;lt;&amp;lt;6&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Jumps (sets the PC) to the given address. The address can be given immediately or read from HL, IX, or IY. Note that although the variants that use register pairs &#039;&#039;look&#039;&#039; like they are using indirect addressing, JP (HL) jumps to the address stored in the register HL, not the address stored at the address HL points to. The JP (C) sets bottom 14 bits of current PC&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; to value read from I/O port: PC[13:0] = (IN (C) &amp;lt;&amp;lt; 6) (can be used to execute code block read from a disk stream) * &amp;quot;current PC&amp;quot; is address of next instruction after JP (C), as the PC is advanced by fetching op code from memory and is already advanced when execution happens - if the JP instruction resides at the very end of 16k memory block (..FE or ..FF address), then newly composed PC value will land into following 16k block.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;JP cc &lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JP Z/NZ/NC/C/PO/PE/P/M, nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=if cc PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Conditionally jumps (sets the PC) to the given address. The condition is set in terms of the flags: Zero (Z, NZ), Carry (C, NC), Parity (PO, PE), and Sign (P/M). The address can only be given immediately for a conditional jump.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;JR (Jump Relative)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JR nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JR C/NC/Z/NZ, nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=if cc PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Jumps to an alternate address by &#039;&#039;adding&#039;&#039; the parameter to the PC - in other words the parameter is an adjustment, not an absolute address. When used in an assembler with labels the syntax should be the same as JP. The JR address can only be given immediately. Conditions are legal, but only those based on carry and zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DJNZ (Decrement and Jump if Not Zero)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DJNZ n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=B--; if B!=0 PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Decrements B then performs JR NZ.. to the given address. Used for encapsulating loops.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CALL&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CALL nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17&lt;br /&gt;
 |shortfx=SP-=2; SP*:=PC; PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CALL Z/NZ/C/NC/PO/PE/P/M, n&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17&lt;br /&gt;
 |shortfx=if cc {SP-=2; SP*:=PC; PC:=nn}&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Like JP (including the ability to have conditions), but PUSHes the PC before jumping. Used for subroutine calls. &lt;br /&gt;
:* If a subroutine ends with a CALL to another subroutine immediately before the RET, it is more efficient to JP to the other subroutine and allow its RET to return from the whole combination. This might make high-level programmers queasy but your compiler already does it (tail call optimization)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RET&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RET&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RET Z/NZ/C/NC/PO/PE/P/M&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=if cc {PC:=SP*; SP+=2}&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:POPs the PC from the stack, returning from a previous CALL. This can also accept the same conditions as JP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RETI&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RETI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Returns from an interrupt service routine (same as RET instruction, but also does signal to I/O device that the interrupt routine is completed).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RETN&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RETN&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=IFF1:=IFF2; PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Returns from a non-maskable interrupt service routine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RST (ReSTart)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RST n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=CALL n&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Performs a CALL to a routine located at one of eight fixed locations ($00, $08, ..., $38) in the zero page. This is located in ROM, and on the Spectrum only a limited number of values are useful to call built-in ROM routines. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NOP (No OPeration)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NOP&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=PC+=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Does &amp;quot;nothing&amp;quot; (just usual housekeeping like refreshing memory and advancing program counter to next instruction).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;HALT&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=HALT&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=waits for interrupt&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Suspends the CPU until an interrupt is received (maskable interrupts must be enabled to break the wait). While CPU is waiting for interrupt, the fake NOP instruction is being executed, to keep memory refresh going on.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DI (Disable Interrupts)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=IFF1:=0; IFF2:=0&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Disables maskable interrupts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EI (Enable Interrupts)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=IFF1:=1; IFF2:=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Enables maskable interrupts (after next instruction, i.e. for example &amp;quot;EI RET&amp;quot; - the interrupt may happen only after RET instruction is finished (or &amp;quot;EI DI&amp;quot; pair of instructions will not allow any maskable interrupt to happen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IM (Interrupt Mode)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IM n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=Interrupt mode:=n&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets interrupt handling mode. The default for Next is 1. 2 is used for user defined interrupt service routines. IM 0 is useless on Next (and pretty much everything else, to be honest)&lt;br /&gt;
&lt;br /&gt;
=== Input and Output ===&lt;br /&gt;
;IN r, (c); OUT (c), r&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN r, (c)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=r := in(BC)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (c),r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=out(BC,r)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs or outputs a byte value from the 16-bit port number given in BC. R can be any 8-bit register. Note that the port number is given in BC even though the instruction refers only to C. Some assemblers will allow the instruction to be written with &amp;quot;(bc)&amp;quot; instead of &amp;quot;(c)&amp;quot; as a reminder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IN (c); OUT (c), 0&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN (c)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=in(BC)?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (c),0&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=out(BC,0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Undocumented opcodes. The IN variation performs an input, but does not store the result, only setting the flags. The OUT variation outputs 0 on the port. This is the only number that can be output to a port in immediate mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IN a, (n); OUT (n), a&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN A, (n)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=A := in(An)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (n),A&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=out(An,A)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs or outputs the byte value in A from a 16-bit port number where the lower byte is N and the upper byte is A. This is only likely to be useful in cases where the upper byte of the port number is not relevant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INI (INput and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*:=in(BC); HL++; B--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs a value from port BC into memory at the address stored in HL, then increments HL and decrements B. Because B is decremented and is part of the port number, the port number for future INI instructions will change unless it is reset. Z is set if B reached 0; S, H, and P/V are destroyed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INIR (INput and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do INI while(B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Loops INIR until B reaches 0. Because B is decremented during this process and is part of the port number, this is unlikely to be useful except when the upper byte of the port number is not relevant. Interrupts are recognized during execution.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IND, INDR (INput and Decrement, INput and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IND&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*:=in(BC); HL--; B--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do IND while(B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Behave like INI and INIR except that HL is decremented instead of incremented.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;OUTI (Out and Increment), OTIR (Out and Increment Repeated), OUTD (Out and Decrement), OTDR (Out and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=OUTI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=B--; out(BC,HL*); HL++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OTIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do OUTI while (B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUTD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=B--; out(BC,HL*); HL--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OTDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do OUTD while (B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Behave like INI, INIR, IND, INDR except that they output instead of input and B is decremented &#039;&#039;&#039;before&#039;&#039;&#039; the output instead of after.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;OUTINB (Out and Increment with No B)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=OUTINB&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=?&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=?&lt;br /&gt;
 |z=?&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=out(BC,HL*); HL++&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Behaves like OUTI, but doesn&#039;t decrement B.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NEXTREG&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NEXTREG nn, nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=out($243B,nn1); out($253B,nn2)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=NEXTREG nn, A&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17&lt;br /&gt;
 |shortfx=out($243B,nn); out($253B,a)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Directly sets the [[Board feature control|Next Feature Control Registers]] without going through ports {{PortNo|$243B}} and {{PortNo|$253B}}.&lt;br /&gt;
&lt;br /&gt;
=== Z80N instructions opcodes ===&lt;br /&gt;
&lt;br /&gt;
The Z80 on the Next has extra instructions that are unique to it.  Below is a table of the opcode bytes that are required to select&lt;br /&gt;
those instructions.  The timings are based on some partial testing.  These may not be accurate.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Instruction !! Byte 1 !! Byte 2 !! Byte 3 !! Byte 4 || T-States&lt;br /&gt;
|-&lt;br /&gt;
| LDIX || ED || A4 || || || 16&lt;br /&gt;
|-&lt;br /&gt;
| LDWS || ED || A5 || || || 14&lt;br /&gt;
|-&lt;br /&gt;
| LDIRX || ED || B4 || || || 21/16&lt;br /&gt;
|-&lt;br /&gt;
| LDDX || ED || AC || || || 16&lt;br /&gt;
|-&lt;br /&gt;
| LDDRX || ED || BC || || || 21/16&lt;br /&gt;
|-&lt;br /&gt;
| LDPIRX || ED  || B7 || || || 21/16&lt;br /&gt;
|-&lt;br /&gt;
| OUTINB || ED  || 90 || || || 16&lt;br /&gt;
|-&lt;br /&gt;
| MUL || ED || 30 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD HL,A || ED || 31 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD DE,A || ED || 32 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD BC,A || ED || 33 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD HL,$nnnn || ED || 34 || low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| ADD DE,$nnnn || ED || 35 || low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| ADD BC,$nnnn || ED  || 36|| low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| SWAPNIB || ED || 23 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| MIRROR A || ED || 24 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| PUSH $nnnn || ED || 8A || high || low || 23&lt;br /&gt;
|-&lt;br /&gt;
| NEXTREG $rr,$nn || ED || 91 || register || value || 20&lt;br /&gt;
|-&lt;br /&gt;
| NEXTREG $rr,A || ED  || 92 || register || || 17&lt;br /&gt;
|-&lt;br /&gt;
| PIXELDN || ED || 93 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| PIXELAD || ED || 94 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| SETAE || ED  || 95 ||  || || 8&lt;br /&gt;
|-&lt;br /&gt;
| TEST $nn || ED || 27 || value || || 11&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Also note that the &amp;quot;PUSH $nnnn&amp;quot; instruction is not a mistake.  The operand is in big-endian.&lt;br /&gt;
&lt;br /&gt;
The core version 2.00.22+ has these new instructions:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Instruction !! Byte 1 !! Byte 2 !! Byte 3 !! Byte 4 || T-States&lt;br /&gt;
|-&lt;br /&gt;
| BSLA DE,B || ED || 28 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRA DE,B || ED || 29 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRL DE,B || ED || 2A || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRF DE,B || ED || 2B || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BRLC DE,B || ED || 2C || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| JP (C) || ED || 98 || || || 13&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mmattsteel</name></author>
	</entry>
	<entry>
		<id>http://wiki.specnext.dev/index.php?title=Extended_Z80_instruction_set&amp;diff=11440</id>
		<title>Extended Z80 instruction set</title>
		<link rel="alternate" type="text/html" href="http://wiki.specnext.dev/index.php?title=Extended_Z80_instruction_set&amp;diff=11440"/>
		<updated>2020-06-06T08:46:11Z</updated>

		<summary type="html">&lt;p&gt;Mmattsteel: Added shortfx for DAA and fixed type in MUL D,E&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This is a general list of Z80 instructions with descriptions. For summaries, you can view the [[Z80 Instruction Table]]. You can also [[Special:RunQuery/OpcodeQuery|search for opcodes]].&lt;br /&gt;
&lt;br /&gt;
=== Term references ===&lt;br /&gt;
* &#039;&#039;Any 8-bit register&#039;&#039; means A, B, C, D, E, H, and L. F, I and R do not count even though they are technically 8 bit registers. Also, the high and low bytes of IX and IY (IXH, IXL, IYH, IYL) can be used as 8-bit registers although this behavior was undocumented on the original Z80.&lt;br /&gt;
* IXY means IX or IY.&lt;br /&gt;
* For the status field:&lt;br /&gt;
** S means Standard. It&#039;s in the Z80 manual. Everything should support it.&lt;br /&gt;
** U means Undocumented. It works on Z80 chips, but it&#039;s not in the manual. These have been known for years and were acknowledged by Zilog, so they should work on everything, but some assemblers may vary the syntax.&lt;br /&gt;
** E means Extension. It &#039;&#039;only&#039;&#039; works on the Z80 core on the Next. It&#039;ll probably only be accepted by assemblers that have been updated specifically for the Next.&lt;br /&gt;
* Each of the flag effects is documented as follows:&lt;br /&gt;
** - means the flag is unchanged.&lt;br /&gt;
** 1 or 0 mean the flag is set or reset as appropriate.&lt;br /&gt;
** ? means we don&#039;t know what effect the instruction has on the flag.&lt;br /&gt;
** ! means the instruction has an unusual effect on the flag which is documented in the description.&lt;br /&gt;
** S means the effect on the flag is &amp;quot;standard&amp;quot;. C is set if a carry/borrow occurred beyond the MSB; Z is set if the result of the operation is zero; H is set if a carry/borrow occurred beyond bit 3.&lt;br /&gt;
** P, V, and L are used for the P/V flag which has several standard effects. P means it&#039;s parity. V means it&#039;s overflow. L means it checks BC as loop counter for some of the block copy and search instructions: P/V = (BC != 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Register and Data manipulation ===&lt;br /&gt;
;LD (LoaD)&lt;br /&gt;
&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LD r, r&#039;&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r := r&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r,n&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=r := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r, (HL)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=r := HL*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r, (IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=r := (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (HL),r&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=HL* := r&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (IXY+d),r&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=(IXY+D)* := r&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (HL), n&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=HL* := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (IXY+d), n&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=(IXY+d)* := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, (BC/DE)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := rr*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, (nn)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=A := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (BC/DE), A&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=rr* := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), A&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=(nn)* := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, I&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=A := I; P/V:=IFF2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, R&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=A := R; P/V:=IFF2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD I, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=I := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD R, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=R := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD BC/DE/HL/SP, nn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr := nn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD IXY, nn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=rr := nn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD HL, (nn)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD BC/DE/SP/IXY, (nn)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=rr := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), HL&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=(nn)* := HL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), BC/DE/SP/IXY&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=(nn)* := rr&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD SP, HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=SP := HL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD SP, IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=SP := IXY&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:The basic data load/transfer instruction. Transfers data from the location specified by the second argument, to the location specified by the first. Available combinations are as follows:&lt;br /&gt;
:* Any 8-bit register can be:&lt;br /&gt;
:** loaded with an immediate value;&lt;br /&gt;
:** loaded with the contents of any other 8-bit register except I and R;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by HL;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory offset-indexed by IX or IY.&lt;br /&gt;
:* Additionally, the accumulator A (only) can be:&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by BC or DE;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by an immediate address;&lt;br /&gt;
:** loaded with the contents of I or R.&lt;br /&gt;
:* Any 16-bit register pair can be:&lt;br /&gt;
:** loaded with an immediate value;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by an immediate address.&lt;br /&gt;
:* Additionally, SP (only) can be:&lt;br /&gt;
:** loaded with the contents of HL, IX, or IY.&lt;br /&gt;
:** The planned &#039;&#039;&#039;ld hl, sp&#039;&#039;&#039; didn&#039;t make it to Next yet, one possible workaround is: &#039;&#039;&#039;ld hl,0&#039;&#039;&#039;; &#039;&#039;&#039;add hl,sp&#039;&#039;&#039;;&lt;br /&gt;
:* Memory referred to by HL or through IX can be assigned immediate values.&lt;br /&gt;
:Although 16-bit register pairs cannot be directly moved between each other, they can be moved by moving the two 8-bit registers. (SP gets a special case because it can&#039;t be addressed via 8-bit registers.) Some assemblers will provide built-in macro instructions allowing, for example, &#039;&#039;&#039;ld bc, de&#039;&#039;&#039;.&lt;br /&gt;
:LD instructions do not alter any flags unless I or R are loaded into A.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EX (EXchange)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EX DE, HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(DE,HL)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX AF, AF&#039;&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=!&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(AF,AF&#039;)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX (SP), HL&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=swap(SP*,HL)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX (SP), IXY&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=swap(SP*,IXY)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Exchanges the contents of two sources. The only permitted combinations are&lt;br /&gt;
:* Exchanging DE and HL;&lt;br /&gt;
:* Exchanging AF and AF&#039;;&lt;br /&gt;
:* Exchanging HL, IX, or IY with the contents of memory pointed to by SP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EXX (EXchange all)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EXX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(BC,BC&#039;);swap(DE,DE&#039;);swap(HL,HL&#039;)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Exchanges BC, DE, and HL with their shadow registers. AF and AF&#039; are not exchanged. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PUSH&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PUSH BC/DE/HL/AF&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=SP-=2; SP*:=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=PUSH IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=SP-=2; SP*:=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=PUSH nnnn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=SP-=2; SP*:=nnnn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Pushes the given argument on the stack. This can be any 16-bit register pair except SP. SP is reduced by 2 and then the argument is written to the new location SP points to.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;POP&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=POP BC/DE/HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=POP AF&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=!&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=POP IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Pops the given argument from the stack. This can be any 16-bit register pair except SP. The current value at SP is copied to the register pair and then SP is raised by 2.&lt;br /&gt;
:Popping into AF does set value of flag register F directly to low 8 bits of value from stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Block Copy ===&lt;br /&gt;
;LDI (LoaD and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=DE*:=HL*; DE++; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Copies the byte pointed to by HL to the address pointed to by DE, then adds 1 to DE and HL and subtracts 1 from BC. P/V is set to (BC!=0), i.e. set when non zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDIR (LoaD and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do LDI while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Automatically loops LDI until BC reaches zero. Note the last iteration starts when BC=1 and ends with BC=0 (starting the LDIR with BC=0 will start 64kiB transfer, most likely overwriting vital parts of system memory and/or code itself).&lt;br /&gt;
:Flag effects are the same as LDI except that P/V will always be reset, because BC by definition reaches 0 before this instruction ends (normally - unless something overwrites LDIR opcode while BC&amp;gt;0).&lt;br /&gt;
:Interrupts may interrupt LDIR instruction while looping (after each single LDI sub-part finished) and LDIR will resume after and finish loop properly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDD (LoaD and Decrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=DE*:=HL*; DE--; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as LDI, but subtracts 1 from DE and HL instead of adding.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDDR (LoaD and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=0&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do LDD while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as LDIR but loops LDD instead of LDI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDWS&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDWS&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=DE*:=HL*; INC L; INC D;&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next-only extended opcode. Copies the byte pointed to by HL to the address pointed to by DE and increments only L and D. This is used for vertically copying bytes to the Layer 2 display.&lt;br /&gt;
:The flags are identical to what the &#039;&#039;&#039;INC D&#039;&#039;&#039; instruction would produce.&lt;br /&gt;
:Note the source data are read only from single 256B (aligned) block of memory, because only L is incremented, not HL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDIX, LDIRX, LDDX, LDDRX&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDIX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx={if HL*!=A DE*:=HL*;} DE++; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDIRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do LDIX while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDDX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx={if HL*!=A DE*:=HL*;} DE++; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDDRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do LDDX while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next-only extended opcodes. Behave similarly as their non-X equivalents except the byte is not copied if it is equal to A and LDDX/LDDRX advance DE by incrementing it (like LDI), while HL is decremented (like LDD).&lt;br /&gt;
:Second difference to non-X instructions (as usual with next-only opcodes due to implementation), the extended ones don&#039;t modify any flags.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDPIRX &lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDPIRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do{t:=(HL&amp;amp;$FFF8+E&amp;amp;7)*; {if t!=A DE*:=t;} DE++; BC--}while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Similar to LDIRX except the source byte address is not just HL, but is obtained by using the top 13 bits of HL and the lower 3 bits of DE and HL does not increment during whole loop (HL works as base address of aligned 8 byte lookup table, DE works as destination and also wrapping index 0..7 into table). This is intended for &amp;quot;pattern fill&amp;quot; functionality.&lt;br /&gt;
&lt;br /&gt;
=== Block Search ===&lt;br /&gt;
;CPI (ComPare and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*==A?; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Compares the byte pointed to by HL with the contents of A and sets Z if it matches or S if the comparison goes negative. Then adds 1 to HL and subtracts 1 from BC. P/V is set to (BC!=0), i.e. set when non zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPIR (ComPare and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do CPI while (!Z &amp;amp;&amp;amp; BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Automatically loops CPI until either Z is set (A is found in the byte pointed to by HL) or P/V is reset (BC reached 0).&lt;br /&gt;
:Flag effects are the same as CPI except that one of the two terminating flag conditions will always be true.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPD (ComPare and Decrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*==A?; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as CPI, but subtracts 1 from HL instead of adding it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPDR (ComPare and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do CPD while (!Z &amp;amp;&amp;amp; BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as CPIR but loops CPD instead of CPI. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Arithmetic ===&lt;br /&gt;
;ADD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A+=r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A+=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL+=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD IXY, BC/DE/IXY/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=IXY+=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL/DE/BC, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=rr+=unsigned A&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL/DE/BC, nnnn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=?&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=?&lt;br /&gt;
 |z=?&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=rr+=nnnn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Adds values together. Legal combinations are:&lt;br /&gt;
:* When adding 8-bit values the first parameter must be A and the second may be:&lt;br /&gt;
:** The contents of an 8-bit register;&lt;br /&gt;
:** An immediate value;&lt;br /&gt;
:** The contents of memory pointed to by HL or by indexing based on IX or IY.&lt;br /&gt;
:* When adding 16-bit values the first parameter must be HL, IX or IY and the second must be another 16-bit register pair. If the first parameter is IX or IY, the second cannot be HL or the other index register. &lt;br /&gt;
:* For 16 bit additions (regular Z80), H is set if a carry occurred in bit 11 (ie, a half carry in the high byte)&lt;br /&gt;
:* On the Spectrum Next the extended opcodes also allow the first parameter to be HL, DE, or BC and the second to be A (A will be zero extended to 16 bits) or an immediate value. It&#039;s not yet clear if the Next-extended ADD rr,nnnn will preserve or modify flags (the ADD rr,A keeps flags intact).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;ADC (ADd with Carry)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A+=r+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=n+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=HL*+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A+=(IXY+d)*+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL+=rr+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Adds values together, adding an additional 1 if Carry is set. Legal combinations are the same as for ADD, although there are no extended opcode versions of ADC and in 16-bit values the first parameter can only be HL. For 16-bit values the H flag is set if carry from bit 11; otherwise, it is reset.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
;SUB&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SUB r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A -= r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A -= n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A -= HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A -= (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts a value from A. Legal combinations are the same as for ADD for 8-bit, except that A does not need to be specified as the first parameter because subtraction can only be done from A. SUB cannot be used for 16-bit numbers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SBC (SuBtract with Carry, er, borrow)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A-=(r+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=(n+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=(HL*+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A-=((IXY+d)+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL-=(rr+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts values, subtracting an additional 1 if Carry is set. Legal combinations are the same as for ADD, although there are no extended opcode versions of SBC and in 16-bit values the first parameter can only be HL. For 16-bit values the H flag is set if borrow from bit 12; otherwise, it is reset.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;AND, OR, XOR&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=AND r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A &amp;amp; r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A &amp;amp; n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A &amp;amp; HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A &amp;amp; (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A OR r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A OR n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A OR HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A OR (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A ^ r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A ^ n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A ^ HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A ^ (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Performs the appropriate bitwise operator on A. Legal combinations are the same as SUB. &lt;br /&gt;
&lt;br /&gt;
:XOR A is faster and shorter than LD A,0&lt;br /&gt;
&lt;br /&gt;
;MIRROR&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=MIRROR A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A[76543210]:=A[01234567]&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Mirrors (reverses the order) of bits in the accumulator. Older core versions supported MIRROR DE, but this was removed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CP (ComPare)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CP r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A-=r?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=n?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=HL*?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A-=(IXY+d)?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the flags as if a SUB was performed but does not perform it. Legal combinations are the same as SUB. This is commonly used to set the flags to perform an equality or greater/less test.&lt;br /&gt;
:* CP is &#039;&#039;not&#039;&#039; equivalent to &amp;quot;if&amp;quot; in high level languages. Flag based jumps can follow any instruction that sets the flags, not just CP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;TEST&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=TEST n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=A&amp;amp;n?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
: Next extended opcode. Similar to CP, but performs an AND instead of a subtraction. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INC (INCrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL*++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=rr++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr++&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Increments the target by one. The argument can be any 8-bit register, any 16-bit register pair, or the address pointed to by HL or indexed via IX or IY. P/V is set if the target held $7F. N is reset.&lt;br /&gt;
:* INC A is faster than ADD 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DEC&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DEC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL*--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+D)*--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=rr--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Decrements the target by one. Allowed arguments are the same as INC. Flag effects are the same as INC except H refers to borrow, not carry; and P/V is set if the target held $80.&lt;br /&gt;
:* DEC A is faster than SUB 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLC (Rotate Left and Copy)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[7]; r:=r&amp;lt;&amp;lt;1; r[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[7]; HL*:=HL*&amp;lt;&amp;lt;1; HL*[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[7]; (IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1; (IXY+d)*[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[7]; (IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; (IX+d)*[0]:=x; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Rotates the target bitwise left by one position. The MSB is copied to bit 0, and also to Carry. Can be applied to any 8-bit register or to a location in memory pointed to by HL or indexed via IX or IY. The final alternative is undocumented, and stores the result in a register as well as performing the operation. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RL (Rotate Left)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RL r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[7]; r:=r&amp;lt;&amp;lt;1; r[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[7]; HL*:=HL*&amp;lt;&amp;lt;1; HL*[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[7]; (IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1; (IXY+d)*[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[7]; (IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; (IX+d)*[0]:=CF; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLC, except the MSB is copied to Carry only, and the previous contents of Carry are copied to bit 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RRC, RR (Rotate Right and Copy, Rotate Right)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RRC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[0]; r:=r&amp;gt;&amp;gt;1; r[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[0]; HL*:=HL*&amp;gt;&amp;gt;1; HL*[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[0]; (IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1; (IXY+d)*[7]:=x; CF:=x&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[0]; (IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1; (IX+d)*[7]:=x; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[0]; r:=r&amp;gt;&amp;gt;1; r[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[0]; HL*:=HL*&amp;gt;&amp;gt;1; HL*[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[0]; (IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1; (IXY+d)*[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[0]; (IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1; (IX+d)*[7]:=CF; CF:=x; r=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLC and RL except they rotate right instead of left.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SLA (Shift Left Arithmetic)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SLA r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL*&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; r=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RL except bit 0 is set to zero, not the previous contents of Carry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SRA (Shift Right Arithmetic)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SRA r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r&amp;gt;&amp;gt;1 OR r[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL*&amp;gt;&amp;gt;1 OR HL*[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1 OR (IXY+d)*[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1 OR (IX+d)*[7]; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RR except the MSB is left unchanged (on the assumption that it&#039;s the sign bit), not replaced with the previous contents of Carry. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SRL (Shift Right Logical)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SRL r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=unsigned(r)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=unsigned(HL*)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=unsigned((IXY+d)*)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL r,(IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=unsigned((IXY+d)*)&amp;gt;&amp;gt;1; r:=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as SLA except it shifts right instead of left.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLCA, RLA, RRCA, RRA&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLCA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[7]; A:=A&amp;lt;&amp;lt;1; A[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[7]; A:=A&amp;lt;&amp;lt;1; A[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRCA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[0]; A:=A&amp;gt;&amp;gt;1; A[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[0]; A:=A&amp;gt;&amp;gt;1; A[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as their matching instruction except they work only on A, are faster, and do not alter S, Z or P/V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SLL (Shift Left Logical)&lt;br /&gt;
:This mnemonic has no associated opcode. There is no difference between a logical and arithmetic shift left, so both can use SLA, but some assemblers will allow SLL as an equivalent. Unfortunately, some will also assemble it as SL1. So it&#039;s probably worth just avoiding.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SL1 or SLI (Shift Left and Add 1) or (Shift Left and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SL1 r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=(r&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=(HL*&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=((IXY+d)*&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 r,(IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=((IXY+d)*&amp;lt;&amp;lt;1)+1; r=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Undocumented opcodes that behave like SLA, but set bit 0 to 1 instead of 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=18&lt;br /&gt;
 |shortfx=x=HL*; HL*[0123]:=A[0123]; HL*[7654]:=x[0123]; A[0123]:=x[7654]  &lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Rotates the lower nibble of the byte pointed to by HL, the upper nibble of that byte, and the lower nibble of A, in that order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RRD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RRD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=18&lt;br /&gt;
 |shortfx=x=HL*; HL*[7654]:=A[0123]; HL*[0123]:=x[7654]; A[0123]:=x[0123]&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLD, but the order is: the lower nibble pointed to by HL, the lower nibble of the A, and the upper nibble of the byte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Barrel (variable amount) shift and rotate (cores v2+ only)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=BSLA DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=DE&amp;lt;&amp;lt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRA DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=signed(DE)&amp;gt;&amp;gt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRL DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=unsigned(DE)&amp;gt;&amp;gt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRF DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=~(unsigned(~DE)&amp;gt;&amp;gt;(B&amp;amp;31))&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BRLC DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=DE&amp;lt;&amp;lt;(B&amp;amp;15) OR DE&amp;gt;&amp;gt;(16-B&amp;amp;15)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Shift instructions use only bits 4..0 of B, BSLA shifts DE left, BSRA/BSRL/BSRF shifts DE right in arithmetic/logical/fill-one way. BRLC rotates DE left by B places, uses only bits 3..0 of B (to rotate right, use B=16-places).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPL (ComPLement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPL&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A:=~A&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inverts the contents of the accumulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NEG (NEGate)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NEG&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=0-A&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts the contents of the accumulator from zero, making it negative for the purpose of two&#039;s complement. P/V is set if A previously held $80. C is set if accumulator did not previously hold $00.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CCF (Change Carry Flag)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CCF&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=CF:=!CF&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inverts the carry flag. (Does not, as might be assumed, clear it!) Also sets H to the previous value of the carry flag.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SCF (Set Carry Flag)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SCF&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=1&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=CF:=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the carry flag.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;BIT&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=HL*[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=(IXY+d)*[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Tests if a bit is set on target value. The first parameter states which bit. The second can be any 8-bit register, or the location in memory pointed to by HL or indexed by IX or IY. Sets Z if specified bit was 0. S and P/V are destroyed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SET&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SET b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL* OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)* OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET r,b,(IX+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)* OR (1&amp;lt;&amp;lt;b); r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SETAE&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=unsigned($80)&amp;gt;&amp;gt;(E&amp;amp;7)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the numbered bit on target value. The possible targets are the same as BIT. The three parameter variant is undocumented and stores the result in a register as well as performing the SET.&lt;br /&gt;
:SETAE is a Next extended opcode which takes the bit number to set from E (only the low 3 bits) and sets whole A to value of that bit, but counted from top to bottom (E=0 will produce A:=$80, E=7 will produce A:=$01). This works as pixel mask for ULA bitmap modes, when E is 0..255 x-coordinate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RES (RESet)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RES b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL* &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)* &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES r,b,(IX+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)* &amp;amp; (~(1&amp;lt;&amp;lt;b)); r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Resets the numbered bit on target value. The possible targets are the same as BIT.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DAA (Decimal Adjust Accumulator)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DAA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=if(A&amp;amp;$0F&amp;gt;$09 or HF) A±=$06; if(A&amp;amp;$F0&amp;gt;$90 or CF) A±=$60 (± depends on NF)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Modifies the contents of the accumulator based on the flags and the previous operation to correct for binary coded decimal (BCD).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;MUL&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=MUL&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=DE:=D*E&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Multiplies D by E, storing 16 bit result into DE. Does not alter any flags.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SWAPNIB&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SWAPNIB&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=A[3210]&amp;lt;&amp;lt;4 OR A[7654]&amp;gt;&amp;gt;4&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Swaps the high and low nibbles of the accumulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PIXELAD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PIXELAD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=HL:=$4000+((D&amp;amp;$C0)&amp;lt;&amp;lt;5)+((D&amp;amp;$07)&amp;lt;&amp;lt;8)+((D&amp;amp;$38)&amp;lt;&amp;lt;2)+(E&amp;gt;&amp;gt;3)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Takes E and D as the X,Y coordinate of a point and calculates the address of the byte containing this pixel in the pixel area of standard ULA screen 0, storing it in HL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PIXELDN&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PIXELDN&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=if(HL&amp;amp;$0700!=$0700) HL+=256;&amp;lt;br&amp;gt;&lt;br /&gt;
else if(HL&amp;amp;$e0!=$e0) HL:=HL&amp;amp;$F8FF+$20;&amp;lt;br&amp;gt;&lt;br /&gt;
else HL:=HL&amp;amp;$F81F+$0800&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Updates the address in HL to move down by one line of pixels.&lt;br /&gt;
&lt;br /&gt;
=== Control Flow ===&lt;br /&gt;
;JP (JumP)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JP nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (HL)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=PC:=HL (not PC:=HL*)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (IXY)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=PC:=IXY (not PC:=IXY*)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (C)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=?&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=?&lt;br /&gt;
 |z=?&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=PC:=PC&amp;amp;$C000+IN(C)&amp;lt;&amp;lt;6&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Jumps (sets the PC) to the given address. The address can be given immediately or read from HL, IX, or IY. Note that although the variants that use register pairs &#039;&#039;look&#039;&#039; like they are using indirect addressing, JP (HL) jumps to the address stored in the register HL, not the address stored at the address HL points to. The JP (C) sets bottom 14 bits of current PC&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; to value read from I/O port: PC[13:0] = (IN (C) &amp;lt;&amp;lt; 6) (can be used to execute code block read from a disk stream) * &amp;quot;current PC&amp;quot; is address of next instruction after JP (C), as the PC is advanced by fetching op code from memory and is already advanced when execution happens - if the JP instruction resides at the very end of 16k memory block (..FE or ..FF address), then newly composed PC value will land into following 16k block.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;JP cc &lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JP Z/NZ/NC/C/PO/PE/P/M, nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=if cc PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Conditionally jumps (sets the PC) to the given address. The condition is set in terms of the flags: Zero (Z, NZ), Carry (C, NC), Parity (PO, PE), and Sign (P/M). The address can only be given immediately for a conditional jump.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;JR (Jump Relative)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JR nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JR C/NC/Z/NZ, nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=if cc PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Jumps to an alternate address by &#039;&#039;adding&#039;&#039; the parameter to the PC - in other words the parameter is an adjustment, not an absolute address. When used in an assembler with labels the syntax should be the same as JP. The JR address can only be given immediately. Conditions are legal, but only those based on carry and zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DJNZ (Decrement and Jump if Not Zero)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DJNZ n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=B--; if B!=0 PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Decrements B then performs JR NZ.. to the given address. Used for encapsulating loops.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CALL&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CALL nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17&lt;br /&gt;
 |shortfx=SP-=2; SP*:=PC; PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CALL Z/NZ/C/NC/PO/PE/P/M, n&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17&lt;br /&gt;
 |shortfx=if cc {SP-=2; SP*:=PC; PC:=nn}&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Like JP (including the ability to have conditions), but PUSHes the PC before jumping. Used for subroutine calls. &lt;br /&gt;
:* If a subroutine ends with a CALL to another subroutine immediately before the RET, it is more efficient to JP to the other subroutine and allow its RET to return from the whole combination. This might make high-level programmers queasy but your compiler already does it (tail call optimization)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RET&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RET&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RET Z/NZ/C/NC/PO/PE/P/M&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=if cc {PC:=SP*; SP+=2}&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:POPs the PC from the stack, returning from a previous CALL. This can also accept the same conditions as JP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RETI&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RETI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Returns from an interrupt service routine (same as RET instruction, but also does signal to I/O device that the interrupt routine is completed).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RETN&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RETN&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=IFF1:=IFF2; PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Returns from a non-maskable interrupt service routine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RST (ReSTart)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RST n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=CALL n&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Performs a CALL to a routine located at one of eight fixed locations ($00, $08, ..., $38) in the zero page. This is located in ROM, and on the Spectrum only a limited number of values are useful to call built-in ROM routines. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NOP (No OPeration)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NOP&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=PC+=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Does &amp;quot;nothing&amp;quot; (just usual housekeeping like refreshing memory and advancing program counter to next instruction).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;HALT&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=HALT&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=waits for interrupt&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Suspends the CPU until an interrupt is received (maskable interrupts must be enabled to break the wait). While CPU is waiting for interrupt, the fake NOP instruction is being executed, to keep memory refresh going on.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DI (Disable Interrupts)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=IFF1:=0; IFF2:=0&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Disables maskable interrupts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EI (Enable Interrupts)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=IFF1:=1; IFF2:=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Enables maskable interrupts (after next instruction, i.e. for example &amp;quot;EI RET&amp;quot; - the interrupt may happen only after RET instruction is finished (or &amp;quot;EI DI&amp;quot; pair of instructions will not allow any maskable interrupt to happen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IM (Interrupt Mode)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IM n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=Interrupt mode:=n&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets interrupt handling mode. The default for Next is 1. 2 is used for user defined interrupt service routines. IM 0 is useless on Next (and pretty much everything else, to be honest)&lt;br /&gt;
&lt;br /&gt;
=== Input and Output ===&lt;br /&gt;
;IN r, (c); OUT (c), r&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN r, (c)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=r := in(BC)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (c),r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=out(BC,r)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs or outputs a byte value from the 16-bit port number given in BC. R can be any 8-bit register. Note that the port number is given in BC even though the instruction refers only to C. Some assemblers will allow the instruction to be written with &amp;quot;(bc)&amp;quot; instead of &amp;quot;(c)&amp;quot; as a reminder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IN (c); OUT (c), 0&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN (c)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=in(BC)?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (c),0&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=out(BC,0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Undocumented opcodes. The IN variation performs an input, but does not store the result, only setting the flags. The OUT variation outputs 0 on the port. This is the only number that can be output to a port in immediate mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IN a, (n); OUT (n), a&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN A, (n)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=A := in(An)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (n),A&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=out(An,A)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs or outputs the byte value in A from a 16-bit port number where the lower byte is N and the upper byte is A. This is only likely to be useful in cases where the upper byte of the port number is not relevant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INI (INput and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*:=in(BC); HL++; B--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs a value from port BC into memory at the address stored in HL, then increments HL and decrements B. Because B is decremented and is part of the port number, the port number for future INI instructions will change unless it is reset. Z is set if B reached 0; S, H, and P/V are destroyed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INIR (INput and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do INI while(B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Loops INIR until B reaches 0. Because B is decremented during this process and is part of the port number, this is unlikely to be useful except when the upper byte of the port number is not relevant. Interrupts are recognized during execution.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IND, INDR (INput and Decrement, INput and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IND&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*:=in(BC); HL--; B--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do IND while(B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Behave like INI and INIR except that HL is decremented instead of incremented.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;OUTI (Out and Increment), OTIR (Out and Increment Repeated), OUTD (Out and Decrement), OTDR (Out and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=OUTI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=B--; out(BC,HL*); HL++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OTIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do OUTI while (B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUTD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=B--; out(BC,HL*); HL--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OTDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do OUTD while (B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Behave like INI, INIR, IND, INDR except that they output instead of input and B is decremented &#039;&#039;&#039;before&#039;&#039;&#039; the output instead of after.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;OUTINB (Out and Increment with No B)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=OUTINB&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=?&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=?&lt;br /&gt;
 |z=?&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=out(BC,HL*); HL++&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Behaves like OUTI, but doesn&#039;t decrement B.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NEXTREG&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NEXTREG nn, nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=out($243B,nn1); out($253B,nn2)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=NEXTREG nn, A&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17&lt;br /&gt;
 |shortfx=out($243B,nn); out($253B,a)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Directly sets the [[Board feature control|Next Feature Control Registers]] without going through ports {{PortNo|$243B}} and {{PortNo|$253B}}.&lt;br /&gt;
&lt;br /&gt;
=== Z80N instructions opcodes ===&lt;br /&gt;
&lt;br /&gt;
The Z80 on the Next has extra instructions that are unique to it.  Below is a table of the opcode bytes that are required to select&lt;br /&gt;
those instructions.  The timings are based on some partial testing.  These may not be accurate.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Instruction !! Byte 1 !! Byte 2 !! Byte 3 !! Byte 4 || T-States&lt;br /&gt;
|-&lt;br /&gt;
| LDIX || ED || A4 || || || 16&lt;br /&gt;
|-&lt;br /&gt;
| LDWS || ED || A5 || || || 14&lt;br /&gt;
|-&lt;br /&gt;
| LDIRX || ED || B4 || || || 21/16&lt;br /&gt;
|-&lt;br /&gt;
| LDDX || ED || AC || || || 16&lt;br /&gt;
|-&lt;br /&gt;
| LDDRX || ED || BC || || || 21/16&lt;br /&gt;
|-&lt;br /&gt;
| LDPIRX || ED  || B7 || || || 21/16&lt;br /&gt;
|-&lt;br /&gt;
| OUTINB || ED  || 90 || || || 16&lt;br /&gt;
|-&lt;br /&gt;
| MUL || ED || 30 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD HL,A || ED || 31 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD DE,A || ED || 32 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD BC,A || ED || 33 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD HL,$nnnn || ED || 34 || low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| ADD DE,$nnnn || ED || 35 || low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| ADD BC,$nnnn || ED  || 36|| low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| SWAPNIB || ED || 23 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| MIRROR || ED || 24 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| PUSH $nnnn || ED || 8A || high || low || 23&lt;br /&gt;
|-&lt;br /&gt;
| NEXTREG $rr,$nn || ED || 91 || register || value || 20&lt;br /&gt;
|-&lt;br /&gt;
| NEXTREG $rr,A || ED  || 92 || register || || 17&lt;br /&gt;
|-&lt;br /&gt;
| PIXELDN || ED || 93 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| PIXELAD || ED || 94 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| SETAE || ED  || 95 ||  || || 8&lt;br /&gt;
|-&lt;br /&gt;
| TEST $nn || ED || 27 || value || || 11&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Also note that the &amp;quot;PUSH $nnnn&amp;quot; instruction is not a mistake.  The operand is in big-endian.&lt;br /&gt;
&lt;br /&gt;
The core version 2.00.22+ has these new instructions:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Instruction !! Byte 1 !! Byte 2 !! Byte 3 !! Byte 4 || T-States&lt;br /&gt;
|-&lt;br /&gt;
| BSLA DE,B || ED || 28 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRA DE,B || ED || 29 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRL DE,B || ED || 2A || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRF DE,B || ED || 2B || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BRLC DE,B || ED || 2C || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| JP (C) || ED || 98 || || || 13&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mmattsteel</name></author>
	</entry>
	<entry>
		<id>http://wiki.specnext.dev/index.php?title=Extended_Z80_instruction_set&amp;diff=11439</id>
		<title>Extended Z80 instruction set</title>
		<link rel="alternate" type="text/html" href="http://wiki.specnext.dev/index.php?title=Extended_Z80_instruction_set&amp;diff=11439"/>
		<updated>2020-06-06T07:47:40Z</updated>

		<summary type="html">&lt;p&gt;Mmattsteel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This is a general list of Z80 instructions with descriptions. For summaries, you can view the [[Z80 Instruction Table]]. You can also [[Special:RunQuery/OpcodeQuery|search for opcodes]].&lt;br /&gt;
&lt;br /&gt;
=== Term references ===&lt;br /&gt;
* &#039;&#039;Any 8-bit register&#039;&#039; means A, B, C, D, E, H, and L. F, I and R do not count even though they are technically 8 bit registers. Also, the high and low bytes of IX and IY (IXH, IXL, IYH, IYL) can be used as 8-bit registers although this behavior was undocumented on the original Z80.&lt;br /&gt;
* IXY means IX or IY.&lt;br /&gt;
* For the status field:&lt;br /&gt;
** S means Standard. It&#039;s in the Z80 manual. Everything should support it.&lt;br /&gt;
** U means Undocumented. It works on Z80 chips, but it&#039;s not in the manual. These have been known for years and were acknowledged by Zilog, so they should work on everything, but some assemblers may vary the syntax.&lt;br /&gt;
** E means Extension. It &#039;&#039;only&#039;&#039; works on the Z80 core on the Next. It&#039;ll probably only be accepted by assemblers that have been updated specifically for the Next.&lt;br /&gt;
* Each of the flag effects is documented as follows:&lt;br /&gt;
** - means the flag is unchanged.&lt;br /&gt;
** 1 or 0 mean the flag is set or reset as appropriate.&lt;br /&gt;
** ? means we don&#039;t know what effect the instruction has on the flag.&lt;br /&gt;
** ! means the instruction has an unusual effect on the flag which is documented in the description.&lt;br /&gt;
** S means the effect on the flag is &amp;quot;standard&amp;quot;. C is set if a carry/borrow occurred beyond the MSB; Z is set if the result of the operation is zero; H is set if a carry/borrow occurred beyond bit 3.&lt;br /&gt;
** P, V, and L are used for the P/V flag which has several standard effects. P means it&#039;s parity. V means it&#039;s overflow. L means it checks BC as loop counter for some of the block copy and search instructions: P/V = (BC != 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Register and Data manipulation ===&lt;br /&gt;
;LD (LoaD)&lt;br /&gt;
&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LD r, r&#039;&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r := r&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r,n&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=r := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r, (HL)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=r := HL*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r, (IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=r := (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (HL),r&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=HL* := r&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (IXY+d),r&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=(IXY+D)* := r&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (HL), n&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=HL* := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (IXY+d), n&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=(IXY+d)* := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, (BC/DE)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := rr*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, (nn)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=A := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (BC/DE), A&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=rr* := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), A&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=(nn)* := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, I&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=A := I; P/V:=IFF2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, R&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=A := R; P/V:=IFF2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD I, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=I := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD R, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=R := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD BC/DE/HL/SP, nn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr := nn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD IXY, nn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=rr := nn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD HL, (nn)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD BC/DE/SP/IXY, (nn)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=rr := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), HL&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=(nn)* := HL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), BC/DE/SP/IXY&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=(nn)* := rr&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD SP, HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=SP := HL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD SP, IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=SP := IXY&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:The basic data load/transfer instruction. Transfers data from the location specified by the second argument, to the location specified by the first. Available combinations are as follows:&lt;br /&gt;
:* Any 8-bit register can be:&lt;br /&gt;
:** loaded with an immediate value;&lt;br /&gt;
:** loaded with the contents of any other 8-bit register except I and R;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by HL;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory offset-indexed by IX or IY.&lt;br /&gt;
:* Additionally, the accumulator A (only) can be:&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by BC or DE;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by an immediate address;&lt;br /&gt;
:** loaded with the contents of I or R.&lt;br /&gt;
:* Any 16-bit register pair can be:&lt;br /&gt;
:** loaded with an immediate value;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by an immediate address.&lt;br /&gt;
:* Additionally, SP (only) can be:&lt;br /&gt;
:** loaded with the contents of HL, IX, or IY.&lt;br /&gt;
:** The planned &#039;&#039;&#039;ld hl, sp&#039;&#039;&#039; didn&#039;t make it to Next yet, one possible workaround is: &#039;&#039;&#039;ld hl,0&#039;&#039;&#039;; &#039;&#039;&#039;add hl,sp&#039;&#039;&#039;;&lt;br /&gt;
:* Memory referred to by HL or through IX can be assigned immediate values.&lt;br /&gt;
:Although 16-bit register pairs cannot be directly moved between each other, they can be moved by moving the two 8-bit registers. (SP gets a special case because it can&#039;t be addressed via 8-bit registers.) Some assemblers will provide built-in macro instructions allowing, for example, &#039;&#039;&#039;ld bc, de&#039;&#039;&#039;.&lt;br /&gt;
:LD instructions do not alter any flags unless I or R are loaded into A.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EX (EXchange)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EX DE, HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(DE,HL)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX AF, AF&#039;&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=!&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(AF,AF&#039;)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX (SP), HL&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=swap(SP*,HL)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX (SP), IXY&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=swap(SP*,IXY)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Exchanges the contents of two sources. The only permitted combinations are&lt;br /&gt;
:* Exchanging DE and HL;&lt;br /&gt;
:* Exchanging AF and AF&#039;;&lt;br /&gt;
:* Exchanging HL, IX, or IY with the contents of memory pointed to by SP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EXX (EXchange all)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EXX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(BC,BC&#039;);swap(DE,DE&#039;);swap(HL,HL&#039;)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Exchanges BC, DE, and HL with their shadow registers. AF and AF&#039; are not exchanged. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PUSH&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PUSH BC/DE/HL/AF&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=SP-=2; SP*:=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=PUSH IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=SP-=2; SP*:=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=PUSH nnnn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=SP-=2; SP*:=nnnn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Pushes the given argument on the stack. This can be any 16-bit register pair except SP. SP is reduced by 2 and then the argument is written to the new location SP points to.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;POP&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=POP BC/DE/HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=POP AF&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=!&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=POP IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Pops the given argument from the stack. This can be any 16-bit register pair except SP. The current value at SP is copied to the register pair and then SP is raised by 2.&lt;br /&gt;
:Popping into AF does set value of flag register F directly to low 8 bits of value from stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Block Copy ===&lt;br /&gt;
;LDI (LoaD and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=DE*:=HL*; DE++; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Copies the byte pointed to by HL to the address pointed to by DE, then adds 1 to DE and HL and subtracts 1 from BC. P/V is set to (BC!=0), i.e. set when non zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDIR (LoaD and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do LDI while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Automatically loops LDI until BC reaches zero. Note the last iteration starts when BC=1 and ends with BC=0 (starting the LDIR with BC=0 will start 64kiB transfer, most likely overwriting vital parts of system memory and/or code itself).&lt;br /&gt;
:Flag effects are the same as LDI except that P/V will always be reset, because BC by definition reaches 0 before this instruction ends (normally - unless something overwrites LDIR opcode while BC&amp;gt;0).&lt;br /&gt;
:Interrupts may interrupt LDIR instruction while looping (after each single LDI sub-part finished) and LDIR will resume after and finish loop properly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDD (LoaD and Decrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=DE*:=HL*; DE--; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as LDI, but subtracts 1 from DE and HL instead of adding.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDDR (LoaD and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=0&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do LDD while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as LDIR but loops LDD instead of LDI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDWS&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDWS&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=DE*:=HL*; INC L; INC D;&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next-only extended opcode. Copies the byte pointed to by HL to the address pointed to by DE and increments only L and D. This is used for vertically copying bytes to the Layer 2 display.&lt;br /&gt;
:The flags are identical to what the &#039;&#039;&#039;INC D&#039;&#039;&#039; instruction would produce.&lt;br /&gt;
:Note the source data are read only from single 256B (aligned) block of memory, because only L is incremented, not HL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDIX, LDIRX, LDDX, LDDRX&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDIX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx={if HL*!=A DE*:=HL*;} DE++; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDIRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do LDIX while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDDX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx={if HL*!=A DE*:=HL*;} DE++; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDDRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do LDDX while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next-only extended opcodes. Behave similarly as their non-X equivalents except the byte is not copied if it is equal to A and LDDX/LDDRX advance DE by incrementing it (like LDI), while HL is decremented (like LDD).&lt;br /&gt;
:Second difference to non-X instructions (as usual with next-only opcodes due to implementation), the extended ones don&#039;t modify any flags.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDPIRX &lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDPIRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do{t:=(HL&amp;amp;$FFF8+E&amp;amp;7)*; {if t!=A DE*:=t;} DE++; BC--}while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Similar to LDIRX except the source byte address is not just HL, but is obtained by using the top 13 bits of HL and the lower 3 bits of DE and HL does not increment during whole loop (HL works as base address of aligned 8 byte lookup table, DE works as destination and also wrapping index 0..7 into table). This is intended for &amp;quot;pattern fill&amp;quot; functionality.&lt;br /&gt;
&lt;br /&gt;
=== Block Search ===&lt;br /&gt;
;CPI (ComPare and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*==A?; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Compares the byte pointed to by HL with the contents of A and sets Z if it matches or S if the comparison goes negative. Then adds 1 to HL and subtracts 1 from BC. P/V is set to (BC!=0), i.e. set when non zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPIR (ComPare and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do CPI while (!Z &amp;amp;&amp;amp; BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Automatically loops CPI until either Z is set (A is found in the byte pointed to by HL) or P/V is reset (BC reached 0).&lt;br /&gt;
:Flag effects are the same as CPI except that one of the two terminating flag conditions will always be true.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPD (ComPare and Decrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*==A?; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as CPI, but subtracts 1 from HL instead of adding it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPDR (ComPare and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do CPD while (!Z &amp;amp;&amp;amp; BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as CPIR but loops CPD instead of CPI. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Arithmetic ===&lt;br /&gt;
;ADD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A+=r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A+=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL+=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD IXY, BC/DE/IXY/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=IXY+=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL/DE/BC, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=rr+=unsigned A&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL/DE/BC, nnnn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=?&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=?&lt;br /&gt;
 |z=?&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=rr+=nnnn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Adds values together. Legal combinations are:&lt;br /&gt;
:* When adding 8-bit values the first parameter must be A and the second may be:&lt;br /&gt;
:** The contents of an 8-bit register;&lt;br /&gt;
:** An immediate value;&lt;br /&gt;
:** The contents of memory pointed to by HL or by indexing based on IX or IY.&lt;br /&gt;
:* When adding 16-bit values the first parameter must be HL, IX or IY and the second must be another 16-bit register pair. If the first parameter is IX or IY, the second cannot be HL or the other index register. &lt;br /&gt;
:* For 16 bit additions (regular Z80), H is set if a carry occurred in bit 11 (ie, a half carry in the high byte)&lt;br /&gt;
:* On the Spectrum Next the extended opcodes also allow the first parameter to be HL, DE, or BC and the second to be A (A will be zero extended to 16 bits) or an immediate value. It&#039;s not yet clear if the Next-extended ADD rr,nnnn will preserve or modify flags (the ADD rr,A keeps flags intact).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;ADC (ADd with Carry)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A+=r+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=n+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=HL*+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A+=(IXY+d)*+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL+=rr+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Adds values together, adding an additional 1 if Carry is set. Legal combinations are the same as for ADD, although there are no extended opcode versions of ADC and in 16-bit values the first parameter can only be HL. For 16-bit values the H flag is set if carry from bit 11; otherwise, it is reset.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
;SUB&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SUB r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A -= r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A -= n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A -= HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A -= (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts a value from A. Legal combinations are the same as for ADD for 8-bit, except that A does not need to be specified as the first parameter because subtraction can only be done from A. SUB cannot be used for 16-bit numbers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SBC (SuBtract with Carry, er, borrow)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A-=(r+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=(n+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=(HL*+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A-=((IXY+d)+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL-=(rr+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts values, subtracting an additional 1 if Carry is set. Legal combinations are the same as for ADD, although there are no extended opcode versions of SBC and in 16-bit values the first parameter can only be HL. For 16-bit values the H flag is set if borrow from bit 12; otherwise, it is reset.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;AND, OR, XOR&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=AND r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A &amp;amp; r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A &amp;amp; n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A &amp;amp; HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A &amp;amp; (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A OR r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A OR n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A OR HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A OR (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A ^ r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A ^ n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A ^ HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A ^ (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Performs the appropriate bitwise operator on A. Legal combinations are the same as SUB. &lt;br /&gt;
&lt;br /&gt;
:XOR A is faster and shorter than LD A,0&lt;br /&gt;
&lt;br /&gt;
;MIRROR&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=MIRROR A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A[76543210]:=A[01234567]&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Mirrors (reverses the order) of bits in the accumulator. Older core versions supported MIRROR DE, but this was removed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CP (ComPare)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CP r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A-=r?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=n?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=HL*?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A-=(IXY+d)?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the flags as if a SUB was performed but does not perform it. Legal combinations are the same as SUB. This is commonly used to set the flags to perform an equality or greater/less test.&lt;br /&gt;
:* CP is &#039;&#039;not&#039;&#039; equivalent to &amp;quot;if&amp;quot; in high level languages. Flag based jumps can follow any instruction that sets the flags, not just CP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;TEST&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=TEST n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=A&amp;amp;n?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
: Next extended opcode. Similar to CP, but performs an AND instead of a subtraction. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INC (INCrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL*++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=rr++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr++&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Increments the target by one. The argument can be any 8-bit register, any 16-bit register pair, or the address pointed to by HL or indexed via IX or IY. P/V is set if the target held $7F. N is reset.&lt;br /&gt;
:* INC A is faster than ADD 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DEC&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DEC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL*--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+D)*--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=rr--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Decrements the target by one. Allowed arguments are the same as INC. Flag effects are the same as INC except H refers to borrow, not carry; and P/V is set if the target held $80.&lt;br /&gt;
:* DEC A is faster than SUB 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLC (Rotate Left and Copy)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[7]; r:=r&amp;lt;&amp;lt;1; r[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[7]; HL*:=HL*&amp;lt;&amp;lt;1; HL*[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[7]; (IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1; (IXY+d)*[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[7]; (IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; (IX+d)*[0]:=x; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Rotates the target bitwise left by one position. The MSB is copied to bit 0, and also to Carry. Can be applied to any 8-bit register or to a location in memory pointed to by HL or indexed via IX or IY. The final alternative is undocumented, and stores the result in a register as well as performing the operation. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RL (Rotate Left)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RL r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[7]; r:=r&amp;lt;&amp;lt;1; r[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[7]; HL*:=HL*&amp;lt;&amp;lt;1; HL*[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[7]; (IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1; (IXY+d)*[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[7]; (IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; (IX+d)*[0]:=CF; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLC, except the MSB is copied to Carry only, and the previous contents of Carry are copied to bit 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RRC, RR (Rotate Right and Copy, Rotate Right)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RRC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[0]; r:=r&amp;gt;&amp;gt;1; r[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[0]; HL*:=HL*&amp;gt;&amp;gt;1; HL*[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[0]; (IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1; (IXY+d)*[7]:=x; CF:=x&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[0]; (IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1; (IX+d)*[7]:=x; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[0]; r:=r&amp;gt;&amp;gt;1; r[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[0]; HL*:=HL*&amp;gt;&amp;gt;1; HL*[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[0]; (IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1; (IXY+d)*[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[0]; (IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1; (IX+d)*[7]:=CF; CF:=x; r=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLC and RL except they rotate right instead of left.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SLA (Shift Left Arithmetic)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SLA r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL*&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; r=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RL except bit 0 is set to zero, not the previous contents of Carry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SRA (Shift Right Arithmetic)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SRA r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r&amp;gt;&amp;gt;1 OR r[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL*&amp;gt;&amp;gt;1 OR HL*[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1 OR (IXY+d)*[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1 OR (IX+d)*[7]; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RR except the MSB is left unchanged (on the assumption that it&#039;s the sign bit), not replaced with the previous contents of Carry. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SRL (Shift Right Logical)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SRL r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=unsigned(r)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=unsigned(HL*)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=unsigned((IXY+d)*)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL r,(IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=unsigned((IXY+d)*)&amp;gt;&amp;gt;1; r:=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as SLA except it shifts right instead of left.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLCA, RLA, RRCA, RRA&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLCA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[7]; A:=A&amp;lt;&amp;lt;1; A[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[7]; A:=A&amp;lt;&amp;lt;1; A[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRCA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[0]; A:=A&amp;gt;&amp;gt;1; A[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[0]; A:=A&amp;gt;&amp;gt;1; A[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as their matching instruction except they work only on A, are faster, and do not alter S, Z or P/V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SLL (Shift Left Logical)&lt;br /&gt;
:This mnemonic has no associated opcode. There is no difference between a logical and arithmetic shift left, so both can use SLA, but some assemblers will allow SLL as an equivalent. Unfortunately, some will also assemble it as SL1. So it&#039;s probably worth just avoiding.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SL1 or SLI (Shift Left and Add 1) or (Shift Left and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SL1 r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=(r&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=(HL*&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=((IXY+d)*&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 r,(IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=((IXY+d)*&amp;lt;&amp;lt;1)+1; r=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Undocumented opcodes that behave like SLA, but set bit 0 to 1 instead of 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=18&lt;br /&gt;
 |shortfx=x=HL*; HL*[0123]:=A[0123]; HL*[7654]:=x[0123]; A[0123]:=x[7654]  &lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Rotates the lower nibble of the byte pointed to by HL, the upper nibble of that byte, and the lower nibble of A, in that order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RRD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RRD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=18&lt;br /&gt;
 |shortfx=x=HL*; HL*[7654]:=A[0123]; HL*[0123]:=x[7654]; A[0123]:=x[0123]&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLD, but the order is: the lower nibble pointed to by HL, the lower nibble of the A, and the upper nibble of the byte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Barrel (variable amount) shift and rotate (cores v2+ only)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=BSLA DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=DE&amp;lt;&amp;lt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRA DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=signed(DE)&amp;gt;&amp;gt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRL DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=unsigned(DE)&amp;gt;&amp;gt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRF DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=~(unsigned(~DE)&amp;gt;&amp;gt;(B&amp;amp;31))&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BRLC DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=DE&amp;lt;&amp;lt;(B&amp;amp;15) OR DE&amp;gt;&amp;gt;(16-B&amp;amp;15)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Shift instructions use only bits 4..0 of B, BSLA shifts DE left, BSRA/BSRL/BSRF shifts DE right in arithmetic/logical/fill-one way. BRLC rotates DE left by B places, uses only bits 3..0 of B (to rotate right, use B=16-places).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPL (ComPLement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPL&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A:=~A&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inverts the contents of the accumulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NEG (NEGate)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NEG&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=0-A&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts the contents of the accumulator from zero, making it negative for the purpose of two&#039;s complement. P/V is set if A previously held $80. C is set if accumulator did not previously hold $00.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CCF (Change Carry Flag)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CCF&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=CF:=!CF&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inverts the carry flag. (Does not, as might be assumed, clear it!) Also sets H to the previous value of the carry flag.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SCF (Set Carry Flag)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SCF&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=1&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=CF:=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the carry flag.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;BIT&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=HL*[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=(IXY+d)*[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Tests if a bit is set on target value. The first parameter states which bit. The second can be any 8-bit register, or the location in memory pointed to by HL or indexed by IX or IY. Sets Z if specified bit was 0. S and P/V are destroyed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SET&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SET b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL* OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)* OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET r,b,(IX+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)* OR (1&amp;lt;&amp;lt;b); r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SETAE&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=unsigned($80)&amp;gt;&amp;gt;(E&amp;amp;7)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the numbered bit on target value. The possible targets are the same as BIT. The three parameter variant is undocumented and stores the result in a register as well as performing the SET.&lt;br /&gt;
:SETAE is a Next extended opcode which takes the bit number to set from E (only the low 3 bits) and sets whole A to value of that bit, but counted from top to bottom (E=0 will produce A:=$80, E=7 will produce A:=$01). This works as pixel mask for ULA bitmap modes, when E is 0..255 x-coordinate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RES (RESet)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RES b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL* &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)* &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES r,b,(IX+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)* &amp;amp; (~(1&amp;lt;&amp;lt;b)); r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Resets the numbered bit on target value. The possible targets are the same as BIT.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DAA (Decimal Adjust Accumulator)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DAA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=if(A&amp;amp;$0F&amp;gt;$09 or HF) A±=$06; if(A&amp;amp;$F0&amp;gt;$90 or CF) A±=$60 (± depends on NF)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Modifies the contents of the accumulator based on the flags and the previous operation to correct for binary coded decimal (BCD).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;MUL&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=MUL&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=DE:=D*E&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Multiplies D by E, storing 16 bit result into DE. Does not alter any flags.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SWAPNIB&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SWAPNIB&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=A[3210]&amp;lt;&amp;lt;4 OR A[7654]&amp;gt;&amp;gt;4&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Swaps the high and low nibbles of the accumulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PIXELAD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PIXELAD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=HL:=$4000+((D&amp;amp;$C0)&amp;lt;&amp;lt;5)+((D&amp;amp;$07)&amp;lt;&amp;lt;8)+((D&amp;amp;$38)&amp;lt;&amp;lt;2)+(E&amp;gt;&amp;gt;3)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Takes E and D as the X,Y coordinate of a point and calculates the address of the byte containing this pixel in the pixel area of standard ULA screen 0, storing it in HL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PIXELDN&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PIXELDN&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=if(HL&amp;amp;$0700!=$0700) HL+=256;&amp;lt;br&amp;gt;&lt;br /&gt;
else if(HL&amp;amp;$e0!=$e0) HL:=HL&amp;amp;$F8FF+$20;&amp;lt;br&amp;gt;&lt;br /&gt;
else HL:=HL&amp;amp;$F81F+$0800&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Updates the address in HL to move down by one line of pixels.&lt;br /&gt;
&lt;br /&gt;
=== Control Flow ===&lt;br /&gt;
;JP (JumP)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JP nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (HL)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=PC:=HL (not PC:=HL*)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (IXY)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=PC:=IXY (not PC:=IXY*)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (C)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=?&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=?&lt;br /&gt;
 |z=?&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=PC:=PC&amp;amp;$C000+IN(C)&amp;lt;&amp;lt;6&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Jumps (sets the PC) to the given address. The address can be given immediately or read from HL, IX, or IY. Note that although the variants that use register pairs &#039;&#039;look&#039;&#039; like they are using indirect addressing, JP (HL) jumps to the address stored in the register HL, not the address stored at the address HL points to. The JP (C) sets bottom 14 bits of current PC&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; to value read from I/O port: PC[13:0] = (IN (C) &amp;lt;&amp;lt; 6) (can be used to execute code block read from a disk stream) * &amp;quot;current PC&amp;quot; is address of next instruction after JP (C), as the PC is advanced by fetching op code from memory and is already advanced when execution happens - if the JP instruction resides at the very end of 16k memory block (..FE or ..FF address), then newly composed PC value will land into following 16k block.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;JP cc &lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JP Z/NZ/NC/C/PO/PE/P/M, nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=if cc PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Conditionally jumps (sets the PC) to the given address. The condition is set in terms of the flags: Zero (Z, NZ), Carry (C, NC), Parity (PO, PE), and Sign (P/M). The address can only be given immediately for a conditional jump.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;JR (Jump Relative)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JR nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JR C/NC/Z/NZ, nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=if cc PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Jumps to an alternate address by &#039;&#039;adding&#039;&#039; the parameter to the PC - in other words the parameter is an adjustment, not an absolute address. When used in an assembler with labels the syntax should be the same as JP. The JR address can only be given immediately. Conditions are legal, but only those based on carry and zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DJNZ (Decrement and Jump if Not Zero)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DJNZ n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=B--; if B!=0 PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Decrements B then performs JR NZ.. to the given address. Used for encapsulating loops.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CALL&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CALL nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17&lt;br /&gt;
 |shortfx=SP-=2; SP*:=PC; PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CALL Z/NZ/C/NC/PO/PE/P/M, n&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17&lt;br /&gt;
 |shortfx=if cc {SP-=2; SP*:=PC; PC:=nn}&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Like JP (including the ability to have conditions), but PUSHes the PC before jumping. Used for subroutine calls. &lt;br /&gt;
:* If a subroutine ends with a CALL to another subroutine immediately before the RET, it is more efficient to JP to the other subroutine and allow its RET to return from the whole combination. This might make high-level programmers queasy but your compiler already does it (tail call optimization)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RET&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RET&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RET Z/NZ/C/NC/PO/PE/P/M&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=if cc {PC:=SP*; SP+=2}&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:POPs the PC from the stack, returning from a previous CALL. This can also accept the same conditions as JP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RETI&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RETI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Returns from an interrupt service routine (same as RET instruction, but also does signal to I/O device that the interrupt routine is completed).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RETN&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RETN&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=IFF1:=IFF2; PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Returns from a non-maskable interrupt service routine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RST (ReSTart)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RST n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=CALL n&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Performs a CALL to a routine located at one of eight fixed locations ($00, $08, ..., $38) in the zero page. This is located in ROM, and on the Spectrum only a limited number of values are useful to call built-in ROM routines. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NOP (No OPeration)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NOP&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=PC+=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Does &amp;quot;nothing&amp;quot; (just usual housekeeping like refreshing memory and advancing program counter to next instruction).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;HALT&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=HALT&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=waits for interrupt&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Suspends the CPU until an interrupt is received (maskable interrupts must be enabled to break the wait). While CPU is waiting for interrupt, the fake NOP instruction is being executed, to keep memory refresh going on.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DI (Disable Interrupts)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=IFF1:=0; IFF2:=0&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Disables maskable interrupts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EI (Enable Interrupts)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=IFF1:=1; IFF2:=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Enables maskable interrupts (after next instruction, i.e. for example &amp;quot;EI RET&amp;quot; - the interrupt may happen only after RET instruction is finished (or &amp;quot;EI DI&amp;quot; pair of instructions will not allow any maskable interrupt to happen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IM (Interrupt Mode)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IM n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=Interrupt mode:=n&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets interrupt handling mode. The default for Next is 1. 2 is used for user defined interrupt service routines. IM 0 is useless on Next (and pretty much everything else, to be honest)&lt;br /&gt;
&lt;br /&gt;
=== Input and Output ===&lt;br /&gt;
;IN r, (c); OUT (c), r&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN r, (c)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=r := in(BC)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (c),r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=out(BC,r)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs or outputs a byte value from the 16-bit port number given in BC. R can be any 8-bit register. Note that the port number is given in BC even though the instruction refers only to C. Some assemblers will allow the instruction to be written with &amp;quot;(bc)&amp;quot; instead of &amp;quot;(c)&amp;quot; as a reminder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IN (c); OUT (c), 0&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN (c)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=in(BC)?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (c),0&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=out(BC,0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Undocumented opcodes. The IN variation performs an input, but does not store the result, only setting the flags. The OUT variation outputs 0 on the port. This is the only number that can be output to a port in immediate mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IN a, (n); OUT (n), a&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN A, (n)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=A := in(An)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (n),A&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=out(An,A)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs or outputs the byte value in A from a 16-bit port number where the lower byte is N and the upper byte is A. This is only likely to be useful in cases where the upper byte of the port number is not relevant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INI (INput and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*:=in(BC); HL++; B--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs a value from port BC into memory at the address stored in HL, then increments HL and decrements B. Because B is decremented and is part of the port number, the port number for future INI instructions will change unless it is reset. Z is set if B reached 0; S, H, and P/V are destroyed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INIR (INput and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do INI while(B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Loops INIR until B reaches 0. Because B is decremented during this process and is part of the port number, this is unlikely to be useful except when the upper byte of the port number is not relevant. Interrupts are recognized during execution.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IND, INDR (INput and Decrement, INput and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IND&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*:=in(BC); HL--; B--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do IND while(B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Behave like INI and INIR except that HL is decremented instead of incremented.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;OUTI (Out and Increment), OTIR (Out and Increment Repeated), OUTD (Out and Decrement), OTDR (Out and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=OUTI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=B--; out(BC,HL*); HL++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OTIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do OUTI while (B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUTD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=B--; out(BC,HL*); HL--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OTDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do OUTD while (B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Behave like INI, INIR, IND, INDR except that they output instead of input and B is decremented &#039;&#039;&#039;before&#039;&#039;&#039; the output instead of after.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;OUTINB (Out and Increment with No B)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=OUTINB&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=?&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=?&lt;br /&gt;
 |z=?&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=out(BC,HL*); HL++&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Behaves like OUTI, but doesn&#039;t decrement B.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NEXTREG&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NEXTREG nn, nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=out($243B,nn1); out($253B,nn2)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=NEXTREG nn, A&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17&lt;br /&gt;
 |shortfx=out($243B,nn); out($253B,a)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Directly sets the [[Board feature control|Next Feature Control Registers]] without going through ports {{PortNo|$243B}} and {{PortNo|$253B}}.&lt;br /&gt;
&lt;br /&gt;
=== Z80N instructions opcodes ===&lt;br /&gt;
&lt;br /&gt;
The Z80 on the Next has extra instructions that are unique to it.  Below is a table of the opcode bytes that are required to select&lt;br /&gt;
those instructions.  The timings are based on some partial testing.  These may not be accurate.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Instruction !! Byte 1 !! Byte 2 !! Byte 3 !! Byte 4 || T-States&lt;br /&gt;
|-&lt;br /&gt;
| LDIX || ED || A4 || || || 16&lt;br /&gt;
|-&lt;br /&gt;
| LDWS || ED || A5 || || || 14&lt;br /&gt;
|-&lt;br /&gt;
| LDIRX || ED || B4 || || || 21/16&lt;br /&gt;
|-&lt;br /&gt;
| LDDX || ED || AC || || || 16&lt;br /&gt;
|-&lt;br /&gt;
| LDDRX || ED || BC || || || 21/16&lt;br /&gt;
|-&lt;br /&gt;
| LDPIRX || ED  || B7 || || || 21/16&lt;br /&gt;
|-&lt;br /&gt;
| OUTINB || ED  || 90 || || || 16&lt;br /&gt;
|-&lt;br /&gt;
| MUL D,E || ED || 30 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD HL,A || ED || 31 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD DE,A || ED || 32 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD BC,A || ED || 33 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD HL,$nnnn || ED || 34 || low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| ADD DE,$nnnn || ED || 35 || low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| ADD BC,$nnnn || ED  || 36|| low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| SWAPNIB || ED || 23 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| MIRROR || ED || 24 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| PUSH $nnnn || ED || 8A || high || low || 23&lt;br /&gt;
|-&lt;br /&gt;
| NEXTREG $rr,$nn || ED || 91 || register || value || 20&lt;br /&gt;
|-&lt;br /&gt;
| NEXTREG $rr,A || ED  || 92 || register || || 17&lt;br /&gt;
|-&lt;br /&gt;
| PIXELDN || ED || 93 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| PIXELAD || ED || 94 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| SETAE || ED  || 95 ||  || || 8&lt;br /&gt;
|-&lt;br /&gt;
| TEST $nn || ED || 27 || value || || 11&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Also note that the &amp;quot;PUSH $nnnn&amp;quot; instruction is not a mistake.  The operand is in big-endian.&lt;br /&gt;
&lt;br /&gt;
The core version 2.00.22+ has these new instructions:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Instruction !! Byte 1 !! Byte 2 !! Byte 3 !! Byte 4 || T-States&lt;br /&gt;
|-&lt;br /&gt;
| BSLA DE,B || ED || 28 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRA DE,B || ED || 29 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRL DE,B || ED || 2A || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRF DE,B || ED || 2B || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BRLC DE,B || ED || 2C || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| JP (C) || ED || 98 || || || 13&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mmattsteel</name></author>
	</entry>
	<entry>
		<id>http://wiki.specnext.dev/index.php?title=Extended_Z80_instruction_set&amp;diff=11436</id>
		<title>Extended Z80 instruction set</title>
		<link rel="alternate" type="text/html" href="http://wiki.specnext.dev/index.php?title=Extended_Z80_instruction_set&amp;diff=11436"/>
		<updated>2020-06-06T07:14:59Z</updated>

		<summary type="html">&lt;p&gt;Mmattsteel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This is a general list of Z80 instructions with descriptions. For summaries, you can view the [[Z80 Instruction Table]]. You can also [[Special:RunQuery/OpcodeQuery|search for opcodes]].&lt;br /&gt;
&lt;br /&gt;
=== Term references ===&lt;br /&gt;
* &#039;&#039;Any 8-bit register&#039;&#039; means A, B, C, D, E, H, and L. F, I and R do not count even though they are technically 8 bit registers. Also, the high and low bytes of IX and IY (IXH, IXL, IYH, IYL) can be used as 8-bit registers although this behavior was undocumented on the original Z80.&lt;br /&gt;
* IXY means IX or IY.&lt;br /&gt;
* For the status field:&lt;br /&gt;
** S means Standard. It&#039;s in the Z80 manual. Everything should support it.&lt;br /&gt;
** U means Undocumented. It works on Z80 chips, but it&#039;s not in the manual. These have been known for years and were acknowledged by Zilog, so they should work on everything, but some assemblers may vary the syntax.&lt;br /&gt;
** E means Extension. It &#039;&#039;only&#039;&#039; works on the Z80 core on the Next. It&#039;ll probably only be accepted by assemblers that have been updated specifically for the Next.&lt;br /&gt;
* Each of the flag effects is documented as follows:&lt;br /&gt;
** - means the flag is unchanged.&lt;br /&gt;
** 1 or 0 mean the flag is set or reset as appropriate.&lt;br /&gt;
** ? means we don&#039;t know what effect the instruction has on the flag.&lt;br /&gt;
** ! means the instruction has an unusual effect on the flag which is documented in the description.&lt;br /&gt;
** S means the effect on the flag is &amp;quot;standard&amp;quot;. C is set if a carry/borrow occurred beyond the MSB; Z is set if the result of the operation is zero; H is set if a carry/borrow occurred beyond bit 3.&lt;br /&gt;
** P, V, and L are used for the P/V flag which has several standard effects. P means it&#039;s parity. V means it&#039;s overflow. L means it checks BC as loop counter for some of the block copy and search instructions: P/V = (BC != 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Register and Data manipulation ===&lt;br /&gt;
;LD (LoaD)&lt;br /&gt;
&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LD r, r&#039;&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r := r&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r,n&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=r := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r, (HL)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=r := HL*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r, (IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=r := (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (HL),r&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=HL* := r&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (IXY+d),r&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=(IXY+D)* := r&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (HL), n&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=HL* := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (IXY+d), n&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=(IXY+d)* := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, (BC/DE)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := rr*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, (nn)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=A := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (BC/DE), A&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=rr* := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), A&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=(nn)* := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, I&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=A := I; P/V:=IFF2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, R&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=A := R; P/V:=IFF2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD I, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=I := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD R, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=R := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD BC/DE/HL/SP, nn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr := nn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD IXY, nn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=rr := nn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD HL, (nn)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD BC/DE/SP/IXY, (nn)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=rr := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), HL&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=(nn)* := HL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), BC/DE/SP/IXY&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=(nn)* := rr&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD SP, HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=SP := HL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD SP, IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=SP := IXY&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:The basic data load/transfer instruction. Transfers data from the location specified by the second argument, to the location specified by the first. Available combinations are as follows:&lt;br /&gt;
:* Any 8-bit register can be:&lt;br /&gt;
:** loaded with an immediate value;&lt;br /&gt;
:** loaded with the contents of any other 8-bit register except I and R;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by HL;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory offset-indexed by IX or IY.&lt;br /&gt;
:* Additionally, the accumulator A (only) can be:&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by BC or DE;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by an immediate address;&lt;br /&gt;
:** loaded with the contents of I or R.&lt;br /&gt;
:* Any 16-bit register pair can be:&lt;br /&gt;
:** loaded with an immediate value;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by an immediate address.&lt;br /&gt;
:* Additionally, SP (only) can be:&lt;br /&gt;
:** loaded with the contents of HL, IX, or IY.&lt;br /&gt;
:** The planned &#039;&#039;&#039;ld hl, sp&#039;&#039;&#039; didn&#039;t make it to Next yet, one possible workaround is: &#039;&#039;&#039;ld hl,0&#039;&#039;&#039;; &#039;&#039;&#039;add hl,sp&#039;&#039;&#039;;&lt;br /&gt;
:* Memory referred to by HL or through IX can be assigned immediate values.&lt;br /&gt;
:Although 16-bit register pairs cannot be directly moved between each other, they can be moved by moving the two 8-bit registers. (SP gets a special case because it can&#039;t be addressed via 8-bit registers.) Some assemblers will provide built-in macro instructions allowing, for example, &#039;&#039;&#039;ld bc, de&#039;&#039;&#039;.&lt;br /&gt;
:LD instructions do not alter any flags unless I or R are loaded into A.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EX (EXchange)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EX DE, HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(DE,HL)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX AF, AF&#039;&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=!&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(AF,AF&#039;)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX (SP), HL&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=swap(SP*,HL)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX (SP), IXY&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=swap(SP*,IXY)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Exchanges the contents of two sources. The only permitted combinations are&lt;br /&gt;
:* Exchanging DE and HL;&lt;br /&gt;
:* Exchanging AF and AF&#039;;&lt;br /&gt;
:* Exchanging HL, IX, or IY with the contents of memory pointed to by SP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EXX (EXchange all)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EXX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(BC,BC&#039;);swap(DE,DE&#039;);swap(HL,HL&#039;)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Exchanges BC, DE, and HL with their shadow registers. AF and AF&#039; are not exchanged. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PUSH&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PUSH BC/DE/HL/AF&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=SP-=2; SP*:=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=PUSH IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=SP-=2; SP*:=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=PUSH nnnn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=SP-=2; SP*:=nnnn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Pushes the given argument on the stack. This can be any 16-bit register pair except SP. SP is reduced by 2 and then the argument is written to the new location SP points to.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;POP&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=POP BC/DE/HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=POP AF&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=!&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=POP IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Pops the given argument from the stack. This can be any 16-bit register pair except SP. The current value at SP is copied to the register pair and then SP is raised by 2.&lt;br /&gt;
:Popping into AF does set value of flag register F directly to low 8 bits of value from stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Block Copy ===&lt;br /&gt;
;LDI (LoaD and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=DE*:=HL*; DE++; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Copies the byte pointed to by HL to the address pointed to by DE, then adds 1 to DE and HL and subtracts 1 from BC. P/V is set to (BC!=0), i.e. set when non zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDIR (LoaD and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do LDI while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Automatically loops LDI until BC reaches zero. Note the last iteration starts when BC=1 and ends with BC=0 (starting the LDIR with BC=0 will start 64kiB transfer, most likely overwriting vital parts of system memory and/or code itself).&lt;br /&gt;
:Flag effects are the same as LDI except that P/V will always be reset, because BC by definition reaches 0 before this instruction ends (normally - unless something overwrites LDIR opcode while BC&amp;gt;0).&lt;br /&gt;
:Interrupts may interrupt LDIR instruction while looping (after each single LDI sub-part finished) and LDIR will resume after and finish loop properly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDD (LoaD and Decrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=DE*:=HL*; DE--; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as LDI, but subtracts 1 from DE and HL instead of adding.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDDR (LoaD and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=0&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do LDD while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as LDIR but loops LDD instead of LDI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDWS&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDWS&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=DE*:=HL*; INC L; INC D;&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next-only extended opcode. Copies the byte pointed to by HL to the address pointed to by DE and increments only L and D. This is used for vertically copying bytes to the Layer 2 display.&lt;br /&gt;
:The flags are identical to what the &#039;&#039;&#039;INC D&#039;&#039;&#039; instruction would produce.&lt;br /&gt;
:Note the source data are read only from single 256B (aligned) block of memory, because only L is incremented, not HL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDIX, LDIRX, LDDX, LDDRX&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDIX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx={if HL*!=A DE*:=HL*;} DE++; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDIRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do LDIX while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDDX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx={if HL*!=A DE*:=HL*;} DE++; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDDRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do LDDX while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next-only extended opcodes. Behave similarly as their non-X equivalents except the byte is not copied if it is equal to A and LDDX/LDDRX advance DE by incrementing it (like LDI), while HL is decremented (like LDD).&lt;br /&gt;
:Second difference to non-X instructions (as usual with next-only opcodes due to implementation), the extended ones don&#039;t modify any flags.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDPIRX &lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDPIRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do{t:=(HL&amp;amp;$FFF8+E&amp;amp;7)*; {if t!=A DE*:=t;} DE++; BC--}while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Similar to LDIRX except the source byte address is not just HL, but is obtained by using the top 13 bits of HL and the lower 3 bits of DE and HL does not increment during whole loop (HL works as base address of aligned 8 byte lookup table, DE works as destination and also wrapping index 0..7 into table). This is intended for &amp;quot;pattern fill&amp;quot; functionality.&lt;br /&gt;
&lt;br /&gt;
=== Block Search ===&lt;br /&gt;
;CPI (ComPare and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*==A?; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Compares the byte pointed to by HL with the contents of A and sets Z if it matches or S if the comparison goes negative. Then adds 1 to HL and subtracts 1 from BC. P/V is set to (BC!=0), i.e. set when non zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPIR (ComPare and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do CPI while (!Z &amp;amp;&amp;amp; BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Automatically loops CPI until either Z is set (A is found in the byte pointed to by HL) or P/V is reset (BC reached 0).&lt;br /&gt;
:Flag effects are the same as CPI except that one of the two terminating flag conditions will always be true.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPD (ComPare and Decrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*==A?; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as CPI, but subtracts 1 from HL instead of adding it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPDR (ComPare and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do CPD while (!Z &amp;amp;&amp;amp; BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as CPIR but loops CPD instead of CPI. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Arithmetic ===&lt;br /&gt;
;ADD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A+=r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A+=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL+=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD IXY, BC/DE/IXY/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=IXY+=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL/DE/BC, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=rr+=unsigned A&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL/DE/BC, nnnn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=?&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=?&lt;br /&gt;
 |z=?&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=rr+=nnnn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Adds values together. Legal combinations are:&lt;br /&gt;
:* When adding 8-bit values the first parameter must be A and the second may be:&lt;br /&gt;
:** The contents of an 8-bit register;&lt;br /&gt;
:** An immediate value;&lt;br /&gt;
:** The contents of memory pointed to by HL or by indexing based on IX or IY.&lt;br /&gt;
:* When adding 16-bit values the first parameter must be HL, IX or IY and the second must be another 16-bit register pair. If the first parameter is IX or IY, the second cannot be HL or the other index register. &lt;br /&gt;
:* For 16 bit additions (regular Z80), H is set if a carry occurred in bit 11 (ie, a half carry in the high byte)&lt;br /&gt;
:* On the Spectrum Next the extended opcodes also allow the first parameter to be HL, DE, or BC and the second to be A (A will be zero extended to 16 bits) or an immediate value. It&#039;s not yet clear if the Next-extended ADD rr,nnnn will preserve or modify flags (the ADD rr,A keeps flags intact).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;ADC (ADd with Carry)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A+=r+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=n+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=HL*+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A+=(IXY+d)*+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL+=rr+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Adds values together, adding an additional 1 if Carry is set. Legal combinations are the same as for ADD, although there are no extended opcode versions of ADC and in 16-bit values the first parameter can only be HL. For 16-bit values the H flag is set if carry from bit 11; otherwise, it is reset.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
;SUB&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SUB r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A -= r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A -= n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A -= HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A -= (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts a value from A. Legal combinations are the same as for ADD for 8-bit, except that A does not need to be specified as the first parameter because subtraction can only be done from A. SUB cannot be used for 16-bit numbers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SBC (SuBtract with Carry, er, borrow)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A-=(r+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=(n+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=(HL*+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A-=((IXY+d)+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL-=(rr+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts values, subtracting an additional 1 if Carry is set. Legal combinations are the same as for ADD, although there are no extended opcode versions of SBC and in 16-bit values the first parameter can only be HL. For 16-bit values the H flag is set if borrow from bit 12; otherwise, it is reset.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;AND, OR, XOR&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=AND r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A &amp;amp; r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A &amp;amp; n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A &amp;amp; HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A &amp;amp; (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A OR r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A OR n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A OR HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A OR (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A ^ r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A ^ n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A ^ HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A ^ (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Performs the appropriate bitwise operator on A. Legal combinations are the same as SUB. &lt;br /&gt;
&lt;br /&gt;
:XOR A is faster and shorter than LD A,0&lt;br /&gt;
&lt;br /&gt;
;MIRROR&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=MIRROR A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A[76543210]:=A[01234567]&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Mirrors (reverses the order) of bits in the accumulator. Older core versions supported MIRROR DE, but this was removed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CP (ComPare)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CP r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A-=r?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=n?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=HL*?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A-=(IXY+d)?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the flags as if a SUB was performed but does not perform it. Legal combinations are the same as SUB. This is commonly used to set the flags to perform an equality or greater/less test.&lt;br /&gt;
:* CP is &#039;&#039;not&#039;&#039; equivalent to &amp;quot;if&amp;quot; in high level languages. Flag based jumps can follow any instruction that sets the flags, not just CP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;TEST&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=TEST n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=A&amp;amp;n?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
: Next extended opcode. Similar to CP, but performs an AND instead of a subtraction. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INC (INCrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL*++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=rr++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr++&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Increments the target by one. The argument can be any 8-bit register, any 16-bit register pair, or the address pointed to by HL or indexed via IX or IY. P/V is set if the target held $7F. N is reset.&lt;br /&gt;
:* INC A is faster than ADD 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DEC&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DEC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL*--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+D)*--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=rr--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Decrements the target by one. Allowed arguments are the same as INC. Flag effects are the same as INC except H refers to borrow, not carry; and P/V is set if the target held $80.&lt;br /&gt;
:* DEC A is faster than SUB 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLC (Rotate Left and Copy)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[7]; r:=r&amp;lt;&amp;lt;1; r[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[7]; HL*:=HL*&amp;lt;&amp;lt;1; HL*[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[7]; (IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1; (IXY+d)*[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[7]; (IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; (IX+d)*[0]:=x; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Rotates the target bitwise left by one position. The MSB is copied to bit 0, and also to Carry. Can be applied to any 8-bit register or to a location in memory pointed to by HL or indexed via IX or IY. The final alternative is undocumented, and stores the result in a register as well as performing the operation. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RL (Rotate Left)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RL r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[7]; r:=r&amp;lt;&amp;lt;1; r[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[7]; HL*:=HL*&amp;lt;&amp;lt;1; HL*[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[7]; (IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1; (IXY+d)*[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[7]; (IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; (IX+d)*[0]:=CF; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLC, except the MSB is copied to Carry only, and the previous contents of Carry are copied to bit 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RRC, RR (Rotate Right and Copy, Rotate Right)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RRC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[0]; r:=r&amp;gt;&amp;gt;1; r[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[0]; HL*:=HL*&amp;gt;&amp;gt;1; HL*[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[0]; (IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1; (IXY+d)*[7]:=x; CF:=x&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[0]; (IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1; (IX+d)*[7]:=x; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[0]; r:=r&amp;gt;&amp;gt;1; r[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[0]; HL*:=HL*&amp;gt;&amp;gt;1; HL*[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[0]; (IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1; (IXY+d)*[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[0]; (IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1; (IX+d)*[7]:=CF; CF:=x; r=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLC and RL except they rotate right instead of left.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SLA (Shift Left Arithmetic)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SLA r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL*&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; r=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RL except bit 0 is set to zero, not the previous contents of Carry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SRA (Shift Right Arithmetic)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SRA r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r&amp;gt;&amp;gt;1 OR r[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL*&amp;gt;&amp;gt;1 OR HL*[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1 OR (IXY+d)*[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1 OR (IX+d)*[7]; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RR except the MSB is left unchanged (on the assumption that it&#039;s the sign bit), not replaced with the previous contents of Carry. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SRL (Shift Right Logical)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SRL r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=unsigned(r)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=unsigned(HL*)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=unsigned((IXY+d)*)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL r,(IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=unsigned((IXY+d)*)&amp;gt;&amp;gt;1; r:=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as SLA except it shifts right instead of left.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLCA, RLA, RRCA, RRA&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLCA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[7]; A:=A&amp;lt;&amp;lt;1; A[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[7]; A:=A&amp;lt;&amp;lt;1; A[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRCA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[0]; A:=A&amp;gt;&amp;gt;1; A[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[0]; A:=A&amp;gt;&amp;gt;1; A[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as their matching instruction except they work only on A, are faster, and do not alter S, Z or P/V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SLL (Shift Left Logical)&lt;br /&gt;
:This mnemonic has no associated opcode. There is no difference between a logical and arithmetic shift left, so both can use SLA, but some assemblers will allow SLL as an equivalent. Unfortunately, some will also assemble it as SL1. So it&#039;s probably worth just avoiding.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SL1 or SLI (Shift Left and Add 1) or (Shift Left and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SL1 r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=(r&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=(HL*&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=((IXY+d)*&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 r,(IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=((IXY+d)*&amp;lt;&amp;lt;1)+1; r=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Undocumented opcodes that behave like SLA, but set bit 0 to 1 instead of 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=18&lt;br /&gt;
 |shortfx=x=HL*; HL*[0123]:=A[0123]; HL*[7654]:=x[0123]; A[0123]:=x[7654]  &lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Rotates the lower nibble of the byte pointed to by HL, the upper nibble of that byte, and the lower nibble of A, in that order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RRD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RRD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=18&lt;br /&gt;
 |shortfx=x=HL*; HL*[7654]:=A[0123]; HL*[0123]:=x[7654]; A[0123]:=x[0123]&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLD, but the order is: the lower nibble pointed to by HL, the lower nibble of the A, and the upper nibble of the byte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Barrel (variable amount) shift and rotate (cores v2+ only)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=BSLA DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=DE&amp;lt;&amp;lt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRA DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=signed(DE)&amp;gt;&amp;gt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRL DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=unsigned(DE)&amp;gt;&amp;gt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRF DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=~(unsigned(~DE)&amp;gt;&amp;gt;(B&amp;amp;31))&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BRLC DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=DE&amp;lt;&amp;lt;(B&amp;amp;15) OR DE&amp;gt;&amp;gt;(16-B&amp;amp;15)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Shift instructions use only bits 4..0 of B, BSLA shifts DE left, BSRA/BSRL/BSRF shifts DE right in arithmetic/logical/fill-one way. BRLC rotates DE left by B places, uses only bits 3..0 of B (to rotate right, use B=16-places).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPL (ComPLement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPL&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A:=~A&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inverts the contents of the accumulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NEG (NEGate)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NEG&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=0-A&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts the contents of the accumulator from zero, making it negative for the purpose of two&#039;s complement. P/V is set if A previously held $80. C is set if accumulator did not previously hold $00.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CCF (Change Carry Flag)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CCF&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=CF:=!CF&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inverts the carry flag. (Does not, as might be assumed, clear it!) Also sets H to the previous value of the carry flag.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SCF (Set Carry Flag)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SCF&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=1&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=CF:=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the carry flag.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;BIT&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=HL*[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=(IXY+d)*[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Tests if a bit is set on target value. The first parameter states which bit. The second can be any 8-bit register, or the location in memory pointed to by HL or indexed by IX or IY. Sets Z if specified bit was 0. S and P/V are destroyed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SET&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SET b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL* OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)* OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET r,b,(IX+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)* OR (1&amp;lt;&amp;lt;b); r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SETAE&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=unsigned($80)&amp;gt;&amp;gt;(E&amp;amp;7)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the numbered bit on target value. The possible targets are the same as BIT. The three parameter variant is undocumented and stores the result in a register as well as performing the SET.&lt;br /&gt;
:SETAE is a Next extended opcode which takes the bit number to set from E (only the low 3 bits) and sets whole A to value of that bit, but counted from top to bottom (E=0 will produce A:=$80, E=7 will produce A:=$01). This works as pixel mask for ULA bitmap modes, when E is 0..255 x-coordinate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RES (RESet)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RES b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL* &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)* &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES r,b,(IX+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)* &amp;amp; (~(1&amp;lt;&amp;lt;b)); r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Resets the numbered bit on target value. The possible targets are the same as BIT.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DAA (Decimal Adjust Accumulator)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DAA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A+=HF; if(A&amp;amp;$0F&amp;gt;$09) A±=$06 ; A+=CF; if(A&amp;amp;$F0&amp;gt;$90) A±=$60 (± depends on NF)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Modifies the contents of the accumulator based on the flags and the previous operation to correct for binary coded decimal (BCD).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;MUL&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=MUL&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=DE:=D*E&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Multiplies D by E, storing 16 bit result into DE. Does not alter any flags.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SWAPNIB&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SWAPNIB&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=A[3210]&amp;lt;&amp;lt;4 OR A[7654]&amp;gt;&amp;gt;4&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Swaps the high and low nibbles of the accumulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PIXELAD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PIXELAD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=HL:=$4000+((D&amp;amp;$C0)&amp;lt;&amp;lt;5)+((D&amp;amp;$07)&amp;lt;&amp;lt;8)+((D&amp;amp;$38)&amp;lt;&amp;lt;2)+(E&amp;gt;&amp;gt;3)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Takes E and D as the X,Y coordinate of a point and calculates the address of the byte containing this pixel in the pixel area of standard ULA screen 0, storing it in HL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PIXELDN&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PIXELDN&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=if(HL&amp;amp;$0700!=$0700) HL+=256;&amp;lt;br&amp;gt;&lt;br /&gt;
else if(HL&amp;amp;$e0!=$e0) HL:=HL&amp;amp;$F8FF+$20;&amp;lt;br&amp;gt;&lt;br /&gt;
else HL:=HL&amp;amp;$F81F+$0800&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Updates the address in HL to move down by one line of pixels.&lt;br /&gt;
&lt;br /&gt;
=== Control Flow ===&lt;br /&gt;
;JP (JumP)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JP nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (HL)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=PC:=HL (not PC:=HL*)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (IXY)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=PC:=IXY (not PC:=IXY*)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (C)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=?&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=?&lt;br /&gt;
 |z=?&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=PC:=PC&amp;amp;$C000+IN(C)&amp;lt;&amp;lt;6&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Jumps (sets the PC) to the given address. The address can be given immediately or read from HL, IX, or IY. Note that although the variants that use register pairs &#039;&#039;look&#039;&#039; like they are using indirect addressing, JP (HL) jumps to the address stored in the register HL, not the address stored at the address HL points to. The JP (C) sets bottom 14 bits of current PC&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; to value read from I/O port: PC[13:0] = (IN (C) &amp;lt;&amp;lt; 6) (can be used to execute code block read from a disk stream) * &amp;quot;current PC&amp;quot; is address of next instruction after JP (C), as the PC is advanced by fetching op code from memory and is already advanced when execution happens - if the JP instruction resides at the very end of 16k memory block (..FE or ..FF address), then newly composed PC value will land into following 16k block.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;JP cc &lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JP Z/NZ/NC/C/PO/PE/P/M, nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=if cc PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Conditionally jumps (sets the PC) to the given address. The condition is set in terms of the flags: Zero (Z, NZ), Carry (C, NC), Parity (PO, PE), and Sign (P/M). The address can only be given immediately for a conditional jump.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;JR (Jump Relative)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JR nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JR C/NC/Z/NZ, nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=if cc PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Jumps to an alternate address by &#039;&#039;adding&#039;&#039; the parameter to the PC - in other words the parameter is an adjustment, not an absolute address. When used in an assembler with labels the syntax should be the same as JP. The JR address can only be given immediately. Conditions are legal, but only those based on carry and zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DJNZ (Decrement and Jump if Not Zero)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DJNZ n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=B--; if B!=0 PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Decrements B then performs JR NZ.. to the given address. Used for encapsulating loops.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CALL&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CALL nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17&lt;br /&gt;
 |shortfx=SP-=2; SP*:=PC; PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CALL Z/NZ/C/NC/PO/PE/P/M, n&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17&lt;br /&gt;
 |shortfx=if cc {SP-=2; SP*:=PC; PC:=nn}&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Like JP (including the ability to have conditions), but PUSHes the PC before jumping. Used for subroutine calls. &lt;br /&gt;
:* If a subroutine ends with a CALL to another subroutine immediately before the RET, it is more efficient to JP to the other subroutine and allow its RET to return from the whole combination. This might make high-level programmers queasy but your compiler already does it (tail call optimization)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RET&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RET&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RET Z/NZ/C/NC/PO/PE/P/M&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=if cc {PC:=SP*; SP+=2}&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:POPs the PC from the stack, returning from a previous CALL. This can also accept the same conditions as JP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RETI&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RETI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Returns from an interrupt service routine (same as RET instruction, but also does signal to I/O device that the interrupt routine is completed).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RETN&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RETN&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=IFF1:=IFF2; PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Returns from a non-maskable interrupt service routine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RST (ReSTart)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RST n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=CALL n&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Performs a CALL to a routine located at one of eight fixed locations ($00, $08, ..., $38) in the zero page. This is located in ROM, and on the Spectrum only a limited number of values are useful to call built-in ROM routines. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NOP (No OPeration)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NOP&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=PC+=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Does &amp;quot;nothing&amp;quot; (just usual housekeeping like refreshing memory and advancing program counter to next instruction).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;HALT&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=HALT&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=waits for interrupt&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Suspends the CPU until an interrupt is received (maskable interrupts must be enabled to break the wait). While CPU is waiting for interrupt, the fake NOP instruction is being executed, to keep memory refresh going on.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DI (Disable Interrupts)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=IFF1:=0; IFF2:=0&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Disables maskable interrupts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EI (Enable Interrupts)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=IFF1:=1; IFF2:=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Enables maskable interrupts (after next instruction, i.e. for example &amp;quot;EI RET&amp;quot; - the interrupt may happen only after RET instruction is finished (or &amp;quot;EI DI&amp;quot; pair of instructions will not allow any maskable interrupt to happen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IM (Interrupt Mode)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IM n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=Interrupt mode:=n&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets interrupt handling mode. The default for Next is 1. 2 is used for user defined interrupt service routines. IM 0 is useless on Next (and pretty much everything else, to be honest)&lt;br /&gt;
&lt;br /&gt;
=== Input and Output ===&lt;br /&gt;
;IN r, (c); OUT (c), r&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN r, (c)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=r := in(BC)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (c),r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=out(BC,r)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs or outputs a byte value from the 16-bit port number given in BC. R can be any 8-bit register. Note that the port number is given in BC even though the instruction refers only to C. Some assemblers will allow the instruction to be written with &amp;quot;(bc)&amp;quot; instead of &amp;quot;(c)&amp;quot; as a reminder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IN (c); OUT (c), 0&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN (c)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=in(BC)?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (c),0&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=out(BC,0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Undocumented opcodes. The IN variation performs an input, but does not store the result, only setting the flags. The OUT variation outputs 0 on the port. This is the only number that can be output to a port in immediate mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IN a, (n); OUT (n), a&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN A, (n)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=A := in(An)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (n),A&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=out(An,A)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs or outputs the byte value in A from a 16-bit port number where the lower byte is N and the upper byte is A. This is only likely to be useful in cases where the upper byte of the port number is not relevant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INI (INput and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*:=in(BC); HL++; B--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs a value from port BC into memory at the address stored in HL, then increments HL and decrements B. Because B is decremented and is part of the port number, the port number for future INI instructions will change unless it is reset. Z is set if B reached 0; S, H, and P/V are destroyed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INIR (INput and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do INI while(B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Loops INIR until B reaches 0. Because B is decremented during this process and is part of the port number, this is unlikely to be useful except when the upper byte of the port number is not relevant. Interrupts are recognized during execution.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IND, INDR (INput and Decrement, INput and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IND&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*:=in(BC); HL--; B--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do IND while(B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Behave like INI and INIR except that HL is decremented instead of incremented.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;OUTI (Out and Increment), OTIR (Out and Increment Repeated), OUTD (Out and Decrement), OTDR (Out and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=OUTI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=B--; out(BC,HL*); HL++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OTIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do OUTI while (B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUTD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=B--; out(BC,HL*); HL--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OTDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do OUTD while (B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Behave like INI, INIR, IND, INDR except that they output instead of input and B is decremented &#039;&#039;&#039;before&#039;&#039;&#039; the output instead of after.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;OUTINB (Out and Increment with No B)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=OUTINB&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=?&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=?&lt;br /&gt;
 |z=?&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=out(BC,HL*); HL++&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Behaves like OUTI, but doesn&#039;t decrement B.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NEXTREG&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NEXTREG nn, nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=out($243B,nn1); out($253B,nn2)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=NEXTREG nn, A&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17&lt;br /&gt;
 |shortfx=out($243B,nn); out($253B,a)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Directly sets the [[Board feature control|Next Feature Control Registers]] without going through ports {{PortNo|$243B}} and {{PortNo|$253B}}.&lt;br /&gt;
&lt;br /&gt;
=== Z80N instructions opcodes ===&lt;br /&gt;
&lt;br /&gt;
The Z80 on the Next has extra instructions that are unique to it.  Below is a table of the opcode bytes that are required to select&lt;br /&gt;
those instructions.  The timings are based on some partial testing.  These may not be accurate.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Instruction !! Byte 1 !! Byte 2 !! Byte 3 !! Byte 4 || T-States&lt;br /&gt;
|-&lt;br /&gt;
| LDIX || ED || A4 || || || 16&lt;br /&gt;
|-&lt;br /&gt;
| LDWS || ED || A5 || || || 14&lt;br /&gt;
|-&lt;br /&gt;
| LDIRX || ED || B4 || || || 21/16&lt;br /&gt;
|-&lt;br /&gt;
| LDDX || ED || AC || || || 16&lt;br /&gt;
|-&lt;br /&gt;
| LDDRX || ED || BC || || || 21/16&lt;br /&gt;
|-&lt;br /&gt;
| LDPIRX || ED  || B7 || || || 21/16&lt;br /&gt;
|-&lt;br /&gt;
| OUTINB || ED  || 90 || || || 16&lt;br /&gt;
|-&lt;br /&gt;
| MUL D,E || ED || 30 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD HL,A || ED || 31 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD DE,A || ED || 32 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD BC,A || ED || 33 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD HL,$nnnn || ED || 34 || low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| ADD DE,$nnnn || ED || 35 || low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| ADD BC,$nnnn || ED  || 36|| low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| SWAPNIB || ED || 23 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| MIRROR || ED || 24 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| PUSH $nnnn || ED || 8A || high || low || 23&lt;br /&gt;
|-&lt;br /&gt;
| NEXTREG $rr,$nn || ED || 91 || register || value || 20&lt;br /&gt;
|-&lt;br /&gt;
| NEXTREG $rr,A || ED  || 92 || register || || 17&lt;br /&gt;
|-&lt;br /&gt;
| PIXELDN || ED || 93 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| PIXELAD || ED || 94 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| SETAE || ED  || 95 ||  || || 8&lt;br /&gt;
|-&lt;br /&gt;
| TEST $nn || ED || 27 || value || || 11&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Also note that the &amp;quot;PUSH $nnnn&amp;quot; instruction is not a mistake.  The operand is in big-endian.&lt;br /&gt;
&lt;br /&gt;
The core version 2.00.22+ has these new instructions:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Instruction !! Byte 1 !! Byte 2 !! Byte 3 !! Byte 4 || T-States&lt;br /&gt;
|-&lt;br /&gt;
| BSLA DE,B || ED || 28 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRA DE,B || ED || 29 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRL DE,B || ED || 2A || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRF DE,B || ED || 2B || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BRLC DE,B || ED || 2C || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| JP (C) || ED || 98 || || || 13&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mmattsteel</name></author>
	</entry>
	<entry>
		<id>http://wiki.specnext.dev/index.php?title=Extended_Z80_instruction_set&amp;diff=11435</id>
		<title>Extended Z80 instruction set</title>
		<link rel="alternate" type="text/html" href="http://wiki.specnext.dev/index.php?title=Extended_Z80_instruction_set&amp;diff=11435"/>
		<updated>2020-06-05T21:08:45Z</updated>

		<summary type="html">&lt;p&gt;Mmattsteel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This is a general list of Z80 instructions with descriptions. For summaries, you can view the [[Z80 Instruction Table]]. You can also [[Special:RunQuery/OpcodeQuery|search for opcodes]].&lt;br /&gt;
&lt;br /&gt;
=== Term references ===&lt;br /&gt;
* &#039;&#039;Any 8-bit register&#039;&#039; means A, B, C, D, E, H, and L. F, I and R do not count even though they are technically 8 bit registers. Also, the high and low bytes of IX and IY (IXH, IXL, IYH, IYL) can be used as 8-bit registers although this behavior was undocumented on the original Z80.&lt;br /&gt;
* IXY means IX or IY.&lt;br /&gt;
* For the status field:&lt;br /&gt;
** S means Standard. It&#039;s in the Z80 manual. Everything should support it.&lt;br /&gt;
** U means Undocumented. It works on Z80 chips, but it&#039;s not in the manual. These have been known for years and were acknowledged by Zilog, so they should work on everything, but some assemblers may vary the syntax.&lt;br /&gt;
** E means Extension. It &#039;&#039;only&#039;&#039; works on the Z80 core on the Next. It&#039;ll probably only be accepted by assemblers that have been updated specifically for the Next.&lt;br /&gt;
* Each of the flag effects is documented as follows:&lt;br /&gt;
** - means the flag is unchanged.&lt;br /&gt;
** 1 or 0 mean the flag is set or reset as appropriate.&lt;br /&gt;
** ? means we don&#039;t know what effect the instruction has on the flag.&lt;br /&gt;
** ! means the instruction has an unusual effect on the flag which is documented in the description.&lt;br /&gt;
** S means the effect on the flag is &amp;quot;standard&amp;quot;. C is set if a carry/borrow occurred beyond the MSB; Z is set if the result of the operation is zero; H is set if a carry/borrow occurred beyond bit 3.&lt;br /&gt;
** P, V, and L are used for the P/V flag which has several standard effects. P means it&#039;s parity. V means it&#039;s overflow. L means it checks BC as loop counter for some of the block copy and search instructions: P/V = (BC != 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Register and Data manipulation ===&lt;br /&gt;
;LD (LoaD)&lt;br /&gt;
&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LD r, r&#039;&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r := r&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r,n&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=r := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r, (HL)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=r := HL*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD r, (IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=r := (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (HL),r&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=HL* := r&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (IXY+d),r&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=(IXY+D)* := r&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (HL), n&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=HL* := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (IXY+d), n&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=(IXY+d)* := n&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, (BC/DE)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := rr*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, (nn)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=A := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (BC/DE), A&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=rr* := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), A&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=(nn)* := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, I&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=A := I; P/V:=IFF2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD A, R&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=A := R; P/V:=IFF2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD I, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=I := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD R, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=9&lt;br /&gt;
 |shortfx=R := A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD BC/DE/HL/SP, nn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr := nn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD IXY, nn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=rr := nn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD HL, (nn)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD BC/DE/SP/IXY, (nn)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Address&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=rr := (nn)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), HL&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=(nn)* := HL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD (nn), BC/DE/SP/IXY&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=(nn)* := rr&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD SP, HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=SP := HL&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Opcode|opdesc=LD SP, IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=SP := IXY&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:The basic data load/transfer instruction. Transfers data from the location specified by the second argument, to the location specified by the first. Available combinations are as follows:&lt;br /&gt;
:* Any 8-bit register can be:&lt;br /&gt;
:** loaded with an immediate value;&lt;br /&gt;
:** loaded with the contents of any other 8-bit register except I and R;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by HL;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory offset-indexed by IX or IY.&lt;br /&gt;
:* Additionally, the accumulator A (only) can be:&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by BC or DE;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by an immediate address;&lt;br /&gt;
:** loaded with the contents of I or R.&lt;br /&gt;
:* Any 16-bit register pair can be:&lt;br /&gt;
:** loaded with an immediate value;&lt;br /&gt;
:** loaded with the contents of, or stored in, memory pointed to by an immediate address.&lt;br /&gt;
:* Additionally, SP (only) can be:&lt;br /&gt;
:** loaded with the contents of HL, IX, or IY.&lt;br /&gt;
:** The planned &#039;&#039;&#039;ld hl, sp&#039;&#039;&#039; didn&#039;t make it to Next yet, one possible workaround is: &#039;&#039;&#039;ld hl,0&#039;&#039;&#039;; &#039;&#039;&#039;add hl,sp&#039;&#039;&#039;;&lt;br /&gt;
:* Memory referred to by HL or through IX can be assigned immediate values.&lt;br /&gt;
:Although 16-bit register pairs cannot be directly moved between each other, they can be moved by moving the two 8-bit registers. (SP gets a special case because it can&#039;t be addressed via 8-bit registers.) Some assemblers will provide built-in macro instructions allowing, for example, &#039;&#039;&#039;ld bc, de&#039;&#039;&#039;.&lt;br /&gt;
:LD instructions do not alter any flags unless I or R are loaded into A.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EX (EXchange)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EX DE, HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(DE,HL)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX AF, AF&#039;&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=!&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(AF,AF&#039;)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX (SP), HL&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=swap(SP*,HL)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=EX (SP), IXY&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=swap(SP*,IXY)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Exchanges the contents of two sources. The only permitted combinations are&lt;br /&gt;
:* Exchanging DE and HL;&lt;br /&gt;
:* Exchanging AF and AF&#039;;&lt;br /&gt;
:* Exchanging HL, IX, or IY with the contents of memory pointed to by SP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EXX (EXchange all)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EXX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=swap(BC,BC&#039;);swap(DE,DE&#039;);swap(HL,HL&#039;)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Exchanges BC, DE, and HL with their shadow registers. AF and AF&#039; are not exchanged. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PUSH&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PUSH BC/DE/HL/AF&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=SP-=2; SP*:=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=PUSH IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=SP-=2; SP*:=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=PUSH nnnn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=SP-=2; SP*:=nnnn&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Pushes the given argument on the stack. This can be any 16-bit register pair except SP. SP is reduced by 2 and then the argument is written to the new location SP points to.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;POP&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=POP BC/DE/HL&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=POP AF&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=!&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=POP IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=rr:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Pops the given argument from the stack. This can be any 16-bit register pair except SP. The current value at SP is copied to the register pair and then SP is raised by 2.&lt;br /&gt;
:Popping into AF does set value of flag register F directly to low 8 bits of value from stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Block Copy ===&lt;br /&gt;
;LDI (LoaD and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=DE*:=HL*; DE++; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Copies the byte pointed to by HL to the address pointed to by DE, then adds 1 to DE and HL and subtracts 1 from BC. P/V is set to (BC!=0), i.e. set when non zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDIR (LoaD and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do LDI while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Automatically loops LDI until BC reaches zero. Note the last iteration starts when BC=1 and ends with BC=0 (starting the LDIR with BC=0 will start 64kiB transfer, most likely overwriting vital parts of system memory and/or code itself).&lt;br /&gt;
:Flag effects are the same as LDI except that P/V will always be reset, because BC by definition reaches 0 before this instruction ends (normally - unless something overwrites LDIR opcode while BC&amp;gt;0).&lt;br /&gt;
:Interrupts may interrupt LDIR instruction while looping (after each single LDI sub-part finished) and LDIR will resume after and finish loop properly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDD (LoaD and Decrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=DE*:=HL*; DE--; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as LDI, but subtracts 1 from DE and HL instead of adding.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDDR (LoaD and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=0&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do LDD while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as LDIR but loops LDD instead of LDI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDWS&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDWS&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=DE*:=HL*; INC L; INC D;&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next-only extended opcode. Copies the byte pointed to by HL to the address pointed to by DE and increments only L and D. This is used for vertically copying bytes to the Layer 2 display.&lt;br /&gt;
:The flags are identical to what the &#039;&#039;&#039;INC D&#039;&#039;&#039; instruction would produce.&lt;br /&gt;
:Note the source data are read only from single 256B (aligned) block of memory, because only L is incremented, not HL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDIX, LDIRX, LDDX, LDDRX&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDIX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx={if HL*!=A DE*:=HL*;} DE++; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDIRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do LDIX while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDDX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx={if HL*!=A DE*:=HL*;} DE++; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=LDDRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do LDDX while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next-only extended opcodes. Behave similarly as their non-X equivalents except the byte is not copied if it is equal to A and LDDX/LDDRX advance DE by incrementing it (like LDI), while HL is decremented (like LDD).&lt;br /&gt;
:Second difference to non-X instructions (as usual with next-only opcodes due to implementation), the extended ones don&#039;t modify any flags.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LDPIRX &lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=LDPIRX&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=21/16&lt;br /&gt;
 |shortfx=do{t:=(HL&amp;amp;$FFF8+E&amp;amp;7)*; {if t!=A DE*:=t;} DE++; BC--}while(BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Similar to LDIRX except the source byte address is not just HL, but is obtained by using the top 13 bits of HL and the lower 3 bits of DE and HL does not increment during whole loop (HL works as base address of aligned 8 byte lookup table, DE works as destination and also wrapping index 0..7 into table). This is intended for &amp;quot;pattern fill&amp;quot; functionality.&lt;br /&gt;
&lt;br /&gt;
=== Block Search ===&lt;br /&gt;
;CPI (ComPare and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*==A?; HL++; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Compares the byte pointed to by HL with the contents of A and sets Z if it matches or S if the comparison goes negative. Then adds 1 to HL and subtracts 1 from BC. P/V is set to (BC!=0), i.e. set when non zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPIR (ComPare and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do CPI while (!Z &amp;amp;&amp;amp; BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Automatically loops CPI until either Z is set (A is found in the byte pointed to by HL) or P/V is reset (BC reached 0).&lt;br /&gt;
:Flag effects are the same as CPI except that one of the two terminating flag conditions will always be true.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPD (ComPare and Decrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*==A?; HL--; BC--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as CPI, but subtracts 1 from HL instead of adding it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPDR (ComPare and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=L&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do CPD while (!Z &amp;amp;&amp;amp; BC&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as CPIR but loops CPD instead of CPI. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Arithmetic ===&lt;br /&gt;
;ADD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A+=r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A+=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL+=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD IXY, BC/DE/IXY/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=IXY+=rr&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL/DE/BC, A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=rr+=unsigned A&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADD HL/DE/BC, nnnn&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=?&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=?&lt;br /&gt;
 |z=?&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=rr+=nnnn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Adds values together. Legal combinations are:&lt;br /&gt;
:* When adding 8-bit values the first parameter must be A and the second may be:&lt;br /&gt;
:** The contents of an 8-bit register;&lt;br /&gt;
:** An immediate value;&lt;br /&gt;
:** The contents of memory pointed to by HL or by indexing based on IX or IY.&lt;br /&gt;
:* When adding 16-bit values the first parameter must be HL, IX or IY and the second must be another 16-bit register pair. If the first parameter is IX or IY, the second cannot be HL or the other index register. &lt;br /&gt;
:* For 16 bit additions (regular Z80), H is set if a carry occurred in bit 11 (ie, a half carry in the high byte)&lt;br /&gt;
:* On the Spectrum Next the extended opcodes also allow the first parameter to be HL, DE, or BC and the second to be A (A will be zero extended to 16 bits) or an immediate value. It&#039;s not yet clear if the Next-extended ADD rr,nnnn will preserve or modify flags (the ADD rr,A keeps flags intact).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;ADC (ADd with Carry)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A+=r+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=n+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A+=HL*+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A+=(IXY+d)*+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=ADC HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL+=rr+(CF?1:0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Adds values together, adding an additional 1 if Carry is set. Legal combinations are the same as for ADD, although there are no extended opcode versions of ADC and in 16-bit values the first parameter can only be HL. For 16-bit values the H flag is set if carry from bit 11; otherwise, it is reset.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
;SUB&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SUB r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A -= r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A -= n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A -= HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SUB (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A -= (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts a value from A. Legal combinations are the same as for ADD for 8-bit, except that A does not need to be specified as the first parameter because subtraction can only be done from A. SUB cannot be used for 16-bit numbers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SBC (SuBtract with Carry, er, borrow)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, r&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A-=(r+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, n&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=(n+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, (HL)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=(HL*+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC A, (IXY+d)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A-=((IXY+d)+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SBC HL, BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL-=(rr+(CF?1:0))&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts values, subtracting an additional 1 if Carry is set. Legal combinations are the same as for ADD, although there are no extended opcode versions of SBC and in 16-bit values the first parameter can only be HL. For 16-bit values the H flag is set if borrow from bit 12; otherwise, it is reset.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;AND, OR, XOR&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=AND r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A &amp;amp; r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A &amp;amp; n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A &amp;amp; HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=AND (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A &amp;amp; (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A OR r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A OR n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A OR HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A OR (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A := A ^ r&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A ^ n&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A := A ^ HL*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=XOR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=0&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A := A ^ (IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Performs the appropriate bitwise operator on A. Legal combinations are the same as SUB. &lt;br /&gt;
&lt;br /&gt;
:XOR A is faster and shorter than LD A,0&lt;br /&gt;
&lt;br /&gt;
;MIRROR&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=MIRROR A&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A[76543210]:=A[01234567]&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Mirrors (reverses the order) of bits in the accumulator. Older core versions supported MIRROR DE, but this was removed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CP (ComPare)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CP r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A-=r?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=n?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=7&lt;br /&gt;
 |shortfx=A-=HL*?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CP (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=19&lt;br /&gt;
 |shortfx=A-=(IXY+d)?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the flags as if a SUB was performed but does not perform it. Legal combinations are the same as SUB. This is commonly used to set the flags to perform an equality or greater/less test.&lt;br /&gt;
:* CP is &#039;&#039;not&#039;&#039; equivalent to &amp;quot;if&amp;quot; in high level languages. Flag based jumps can follow any instruction that sets the flags, not just CP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;TEST&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=TEST n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=S&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=V&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=A&amp;amp;n?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
: Next extended opcode. Similar to CP, but performs an AND instead of a subtraction. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INC (INCrement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL*++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=rr++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INC IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr++&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Increments the target by one. The argument can be any 8-bit register, any 16-bit register pair, or the address pointed to by HL or indexed via IX or IY. P/V is set if the target held $7F. N is reset.&lt;br /&gt;
:* INC A is faster than ADD 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DEC&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DEC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=r--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=HL*--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+D)*--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC BC/DE/HL/SP&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=6&lt;br /&gt;
 |shortfx=rr--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=DEC IXY&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=rr--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Decrements the target by one. Allowed arguments are the same as INC. Flag effects are the same as INC except H refers to borrow, not carry; and P/V is set if the target held $80.&lt;br /&gt;
:* DEC A is faster than SUB 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLC (Rotate Left and Copy)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[7]; r:=r&amp;lt;&amp;lt;1; r[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[7]; HL*:=HL*&amp;lt;&amp;lt;1; HL*[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[7]; (IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1; (IXY+d)*[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLC r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[7]; (IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; (IX+d)*[0]:=x; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Rotates the target bitwise left by one position. The MSB is copied to bit 0, and also to Carry. Can be applied to any 8-bit register or to a location in memory pointed to by HL or indexed via IX or IY. The final alternative is undocumented, and stores the result in a register as well as performing the operation. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RL (Rotate Left)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RL r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[7]; r:=r&amp;lt;&amp;lt;1; r[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[7]; HL*:=HL*&amp;lt;&amp;lt;1; HL*[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[7]; (IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1; (IXY+d)*[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RL r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[7]; (IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; (IX+d)*[0]:=CF; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLC, except the MSB is copied to Carry only, and the previous contents of Carry are copied to bit 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RRC, RR (Rotate Right and Copy, Rotate Right)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RRC r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[0]; r:=r&amp;gt;&amp;gt;1; r[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[0]; HL*:=HL*&amp;gt;&amp;gt;1; HL*[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[0]; (IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1; (IXY+d)*[7]:=x; CF:=x&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRC r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[0]; (IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1; (IX+d)*[7]:=x; CF:=x; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=x:=r[0]; r:=r&amp;gt;&amp;gt;1; r[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=x:=HL*[0]; HL*:=HL*&amp;gt;&amp;gt;1; HL*[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IXY+d)*[0]; (IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1; (IXY+d)*[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RR r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=x:=(IX+d)*[0]; (IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1; (IX+d)*[7]:=CF; CF:=x; r=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLC and RL except they rotate right instead of left.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SLA (Shift Left Arithmetic)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SLA r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL*&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)*&amp;lt;&amp;lt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SLA r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)*&amp;lt;&amp;lt;1; r=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RL except bit 0 is set to zero, not the previous contents of Carry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SRA (Shift Right Arithmetic)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SRA r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r&amp;gt;&amp;gt;1 OR r[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL*&amp;gt;&amp;gt;1 OR HL*[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)*&amp;gt;&amp;gt;1 OR (IXY+d)*[7]&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRA r,(IX+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)*&amp;gt;&amp;gt;1 OR (IX+d)*[7]; r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RR except the MSB is left unchanged (on the assumption that it&#039;s the sign bit), not replaced with the previous contents of Carry. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SRL (Shift Right Logical)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SRL r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=unsigned(r)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=unsigned(HL*)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=unsigned((IXY+d)*)&amp;gt;&amp;gt;1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SRL r,(IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=0&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=unsigned((IXY+d)*)&amp;gt;&amp;gt;1; r:=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as SLA except it shifts right instead of left.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLCA, RLA, RRCA, RRA&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLCA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[7]; A:=A&amp;lt;&amp;lt;1; A[0]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RLA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[7]; A:=A&amp;lt;&amp;lt;1; A[0]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRCA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[0]; A:=A&amp;gt;&amp;gt;1; A[7]:=x; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RRA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=x:=A[0]; A:=A&amp;gt;&amp;gt;1; A[7]:=CF; CF:=x&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as their matching instruction except they work only on A, are faster, and do not alter S, Z or P/V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SLL (Shift Left Logical)&lt;br /&gt;
:This mnemonic has no associated opcode. There is no difference between a logical and arithmetic shift left, so both can use SLA, but some assemblers will allow SLL as an equivalent. Unfortunately, some will also assemble it as SL1. So it&#039;s probably worth just avoiding.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SL1 or SLI (Shift Left and Add 1) or (Shift Left and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SL1 r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=(r&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 (HL)&lt;br /&gt;
 |ad1=Indirect&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=(HL*&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 (IXY+d)&lt;br /&gt;
 |ad1=Indexed&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=((IXY+d)*&amp;lt;&amp;lt;1)+1&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SL1 r,(IXY+d)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=((IXY+d)*&amp;lt;&amp;lt;1)+1; r=(IXY+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Undocumented opcodes that behave like SLA, but set bit 0 to 1 instead of 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RLD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RLD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=18&lt;br /&gt;
 |shortfx=x=HL*; HL*[0123]:=A[0123]; HL*[7654]:=x[0123]; A[0123]:=x[7654]  &lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Rotates the lower nibble of the byte pointed to by HL, the upper nibble of that byte, and the lower nibble of A, in that order.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RRD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RRD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=18&lt;br /&gt;
 |shortfx=x=HL*; HL*[7654]:=A[0123]; HL*[0123]:=x[7654]; A[0123]:=x[0123]&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Same as RLD, but the order is: the lower nibble pointed to by HL, the lower nibble of the A, and the upper nibble of the byte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Barrel (variable amount) shift and rotate (cores v2+ only)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=BSLA DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=DE&amp;lt;&amp;lt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRA DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=signed(DE)&amp;gt;&amp;gt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRL DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=unsigned(DE)&amp;gt;&amp;gt;(B&amp;amp;31)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BSRF DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=~(unsigned(~DE)&amp;gt;&amp;gt;(B&amp;amp;31))&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BRLC DE,B&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |shortfx=DE:=DE&amp;lt;&amp;lt;(B&amp;amp;15) OR DE&amp;gt;&amp;gt;(16-B&amp;amp;15)&lt;br /&gt;
 |tstates=8&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Shift instructions use only bits 4..0 of B, BSLA shifts DE left, BSRA/BSRL/BSRF shifts DE right in arithmetic/logical/fill-one way. BRLC rotates DE left by B places, uses only bits 3..0 of B (to rotate right, use B=16-places).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CPL (ComPLement)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CPL&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=A:=~A&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inverts the contents of the accumulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NEG (NEGate)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NEG&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=S&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=0-A&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Subtracts the contents of the accumulator from zero, making it negative for the purpose of two&#039;s complement. P/V is set if A previously held $80. C is set if accumulator did not previously hold $00.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CCF (Change Carry Flag)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CCF&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=CF:=!CF&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inverts the carry flag. (Does not, as might be assumed, clear it!) Also sets H to the previous value of the carry flag.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SCF (Set Carry Flag)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SCF&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=1&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=CF:=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the carry flag.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;BIT&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indirect&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=HL*[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=BIT b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=1&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=(IXY+d)*[b]==1?&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Tests if a bit is set on target value. The first parameter states which bit. The second can be any 8-bit register, or the location in memory pointed to by HL or indexed by IX or IY. Sets Z if specified bit was 0. S and P/V are destroyed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SET&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SET b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL* OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)* OR (1&amp;lt;&amp;lt;b)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SET r,b,(IX+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)* OR (1&amp;lt;&amp;lt;b); r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=SETAE&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=unsigned($80)&amp;gt;&amp;gt;(E&amp;amp;7)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets the numbered bit on target value. The possible targets are the same as BIT. The three parameter variant is undocumented and stores the result in a register as well as performing the SET.&lt;br /&gt;
:SETAE is a Next extended opcode which takes the bit number to set from E (only the low 3 bits) and sets whole A to value of that bit, but counted from top to bottom (E=0 will produce A:=$80, E=7 will produce A:=$01). This works as pixel mask for ULA bitmap modes, when E is 0..255 x-coordinate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RES (RESet)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RES b,r&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=r:=r &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES b,(HL)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=15&lt;br /&gt;
 |shortfx=HL*:=HL* &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES b,(IXY+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IXY+d)*:=(IXY+d)* &amp;amp; (~(1&amp;lt;&amp;lt;b))&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RES r,b,(IX+d)&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Indexed&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=23&lt;br /&gt;
 |shortfx=(IX+d)*:=(IX+d)* &amp;amp; (~(1&amp;lt;&amp;lt;b)); r:=(IX+d)*&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Resets the numbered bit on target value. The possible targets are the same as BIT.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DAA (Decimal Adjust Accumulator)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DAA&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=!&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=if(A&amp;amp;$0F&amp;gt;$09) A+=$06 ; if(A&amp;amp;$F0&amp;gt;$90) A+=$60&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Modifies the contents of the accumulator based on the flags and the previous operation to correct for binary coded decimal (BCD).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;MUL&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=MUL&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=DE:=D*E&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Multiplies D by E, storing 16 bit result into DE. Does not alter any flags.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;SWAPNIB&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=SWAPNIB&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=A:=A[3210]&amp;lt;&amp;lt;4 OR A[7654]&amp;gt;&amp;gt;4&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Swaps the high and low nibbles of the accumulator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PIXELAD&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PIXELAD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=HL:=$4000+((D&amp;amp;$C0)&amp;lt;&amp;lt;5)+((D&amp;amp;$07)&amp;lt;&amp;lt;8)+((D&amp;amp;$38)&amp;lt;&amp;lt;2)+(E&amp;gt;&amp;gt;3)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Takes E and D as the X,Y coordinate of a point and calculates the address of the byte containing this pixel in the pixel area of standard ULA screen 0, storing it in HL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;PIXELDN&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=PIXELDN&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=if(HL&amp;amp;$0700!=$0700) HL+=256;&amp;lt;br&amp;gt;&lt;br /&gt;
else if(HL&amp;amp;$e0!=$e0) HL:=HL&amp;amp;$F8FF+$20;&amp;lt;br&amp;gt;&lt;br /&gt;
else HL:=HL&amp;amp;$F81F+$0800&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Updates the address in HL to move down by one line of pixels.&lt;br /&gt;
&lt;br /&gt;
=== Control Flow ===&lt;br /&gt;
;JP (JumP)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JP nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (HL)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=PC:=HL (not PC:=HL*)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (IXY)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=PC:=IXY (not PC:=IXY*)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JP (C)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=?&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=?&lt;br /&gt;
 |z=?&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=PC:=PC&amp;amp;$C000+IN(C)&amp;lt;&amp;lt;6&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Jumps (sets the PC) to the given address. The address can be given immediately or read from HL, IX, or IY. Note that although the variants that use register pairs &#039;&#039;look&#039;&#039; like they are using indirect addressing, JP (HL) jumps to the address stored in the register HL, not the address stored at the address HL points to. The JP (C) sets bottom 14 bits of current PC&amp;lt;sup&amp;gt;*&amp;lt;/sup&amp;gt; to value read from I/O port: PC[13:0] = (IN (C) &amp;lt;&amp;lt; 6) (can be used to execute code block read from a disk stream) * &amp;quot;current PC&amp;quot; is address of next instruction after JP (C), as the PC is advanced by fetching op code from memory and is already advanced when execution happens - if the JP instruction resides at the very end of 16k memory block (..FE or ..FF address), then newly composed PC value will land into following 16k block.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;JP cc &lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JP Z/NZ/NC/C/PO/PE/P/M, nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=if cc PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Conditionally jumps (sets the PC) to the given address. The condition is set in terms of the flags: Zero (Z, NZ), Carry (C, NC), Parity (PO, PE), and Sign (P/M). The address can only be given immediately for a conditional jump.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;JR (Jump Relative)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=JR nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=JR C/NC/Z/NZ, nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=if cc PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Jumps to an alternate address by &#039;&#039;adding&#039;&#039; the parameter to the PC - in other words the parameter is an adjustment, not an absolute address. When used in an assembler with labels the syntax should be the same as JP. The JR address can only be given immediately. Conditions are legal, but only those based on carry and zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DJNZ (Decrement and Jump if Not Zero)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DJNZ n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=13&lt;br /&gt;
 |shortfx=B--; if B!=0 PC+=nn&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Decrements B then performs JR NZ.. to the given address. Used for encapsulating loops.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;CALL&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=CALL nn&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17&lt;br /&gt;
 |shortfx=SP-=2; SP*:=PC; PC:=nn&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=CALL Z/NZ/C/NC/PO/PE/P/M, n&lt;br /&gt;
 |ad1=Address&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17&lt;br /&gt;
 |shortfx=if cc {SP-=2; SP*:=PC; PC:=nn}&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Like JP (including the ability to have conditions), but PUSHes the PC before jumping. Used for subroutine calls. &lt;br /&gt;
:* If a subroutine ends with a CALL to another subroutine immediately before the RET, it is more efficient to JP to the other subroutine and allow its RET to return from the whole combination. This might make high-level programmers queasy but your compiler already does it (tail call optimization)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RET&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RET&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=10&lt;br /&gt;
 |shortfx=PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=RET Z/NZ/C/NC/PO/PE/P/M&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=if cc {PC:=SP*; SP+=2}&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:POPs the PC from the stack, returning from a previous CALL. This can also accept the same conditions as JP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RETI&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RETI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Returns from an interrupt service routine (same as RET instruction, but also does signal to I/O device that the interrupt routine is completed).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RETN&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RETN&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=14&lt;br /&gt;
 |shortfx=IFF1:=IFF2; PC:=SP*; SP+=2&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Returns from a non-maskable interrupt service routine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;RST (ReSTart)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=RST n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=CALL n&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Performs a CALL to a routine located at one of eight fixed locations ($00, $08, ..., $38) in the zero page. This is located in ROM, and on the Spectrum only a limited number of values are useful to call built-in ROM routines. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NOP (No OPeration)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NOP&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=PC+=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Does &amp;quot;nothing&amp;quot; (just usual housekeeping like refreshing memory and advancing program counter to next instruction).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;HALT&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=HALT&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=waits for interrupt&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Suspends the CPU until an interrupt is received (maskable interrupts must be enabled to break the wait). While CPU is waiting for interrupt, the fake NOP instruction is being executed, to keep memory refresh going on.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;DI (Disable Interrupts)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=DI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=IFF1:=0; IFF2:=0&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Disables maskable interrupts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;EI (Enable Interrupts)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=EI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=4&lt;br /&gt;
 |shortfx=IFF1:=1; IFF2:=1&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Enables maskable interrupts (after next instruction, i.e. for example &amp;quot;EI RET&amp;quot; - the interrupt may happen only after RET instruction is finished (or &amp;quot;EI DI&amp;quot; pair of instructions will not allow any maskable interrupt to happen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IM (Interrupt Mode)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IM n&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=8&lt;br /&gt;
 |shortfx=Interrupt mode:=n&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Sets interrupt handling mode. The default for Next is 1. 2 is used for user defined interrupt service routines. IM 0 is useless on Next (and pretty much everything else, to be honest)&lt;br /&gt;
&lt;br /&gt;
=== Input and Output ===&lt;br /&gt;
;IN r, (c); OUT (c), r&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN r, (c)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=r := in(BC)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (c),r&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Register&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=out(BC,r)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs or outputs a byte value from the 16-bit port number given in BC. R can be any 8-bit register. Note that the port number is given in BC even though the instruction refers only to C. Some assemblers will allow the instruction to be written with &amp;quot;(bc)&amp;quot; instead of &amp;quot;(c)&amp;quot; as a reminder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IN (c); OUT (c), 0&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN (c)&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=0&lt;br /&gt;
 |pv=P&lt;br /&gt;
 |h=0&lt;br /&gt;
 |z=S&lt;br /&gt;
 |s=S&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=in(BC)?&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (c),0&lt;br /&gt;
 |ad1=Register&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=U&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=12&lt;br /&gt;
 |shortfx=out(BC,0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Undocumented opcodes. The IN variation performs an input, but does not store the result, only setting the flags. The OUT variation outputs 0 on the port. This is the only number that can be output to a port in immediate mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IN a, (n); OUT (n), a&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IN A, (n)&lt;br /&gt;
 |ad1=Accumulator&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=A := in(An)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUT (n),A&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=11&lt;br /&gt;
 |shortfx=out(An,A)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs or outputs the byte value in A from a 16-bit port number where the lower byte is N and the upper byte is A. This is only likely to be useful in cases where the upper byte of the port number is not relevant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INI (INput and Increment)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*:=in(BC); HL++; B--&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Inputs a value from port BC into memory at the address stored in HL, then increments HL and decrements B. Because B is decremented and is part of the port number, the port number for future INI instructions will change unless it is reset. Z is set if B reached 0; S, H, and P/V are destroyed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;INIR (INput and Increment Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=INIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do INI while(B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Loops INIR until B reaches 0. Because B is decremented during this process and is part of the port number, this is unlikely to be useful except when the upper byte of the port number is not relevant. Interrupts are recognized during execution.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;IND, INDR (INput and Decrement, INput and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=IND&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=HL*:=in(BC); HL--; B--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=INDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do IND while(B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Behave like INI and INIR except that HL is decremented instead of incremented.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;OUTI (Out and Increment), OTIR (Out and Increment Repeated), OUTD (Out and Decrement), OTDR (Out and Decrement Repeated)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=OUTI&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=B--; out(BC,HL*); HL++&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OTIR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do OUTI while (B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OUTD&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=!&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=B--; out(BC,HL*); HL--&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=OTDR&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=S&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=1&lt;br /&gt;
 |pv=!&lt;br /&gt;
 |h=!&lt;br /&gt;
 |z=1&lt;br /&gt;
 |s=!&lt;br /&gt;
 |tstates=21x+16&lt;br /&gt;
 |shortfx=do OUTD while (B&amp;gt;0)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Behave like INI, INIR, IND, INDR except that they output instead of input and B is decremented &#039;&#039;&#039;before&#039;&#039;&#039; the output instead of after.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;OUTINB (Out and Increment with No B)&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=OUTINB&lt;br /&gt;
 |ad1=-&lt;br /&gt;
 |ad2=-&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=?&lt;br /&gt;
 |n=?&lt;br /&gt;
 |pv=?&lt;br /&gt;
 |h=?&lt;br /&gt;
 |z=?&lt;br /&gt;
 |s=?&lt;br /&gt;
 |tstates=16&lt;br /&gt;
 |shortfx=out(BC,HL*); HL++&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Behaves like OUTI, but doesn&#039;t decrement B.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;NEXTREG&lt;br /&gt;
:{{Opcodelisttop}}&lt;br /&gt;
{{Opcode|opdesc=NEXTREG nn, nn&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Immediate&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=20&lt;br /&gt;
 |shortfx=out($243B,nn1); out($253B,nn2)&lt;br /&gt;
}}&lt;br /&gt;
{{Opcode|opdesc=NEXTREG nn, A&lt;br /&gt;
 |ad1=Immediate&lt;br /&gt;
 |ad2=Accumulator&lt;br /&gt;
 |status=E&lt;br /&gt;
 |c=-&lt;br /&gt;
 |n=-&lt;br /&gt;
 |pv=-&lt;br /&gt;
 |h=-&lt;br /&gt;
 |z=-&lt;br /&gt;
 |s=-&lt;br /&gt;
 |tstates=17&lt;br /&gt;
 |shortfx=out($243B,nn); out($253B,a)&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
:Next extended opcode. Directly sets the [[Board feature control|Next Feature Control Registers]] without going through ports {{PortNo|$243B}} and {{PortNo|$253B}}.&lt;br /&gt;
&lt;br /&gt;
=== Z80N instructions opcodes ===&lt;br /&gt;
&lt;br /&gt;
The Z80 on the Next has extra instructions that are unique to it.  Below is a table of the opcode bytes that are required to select&lt;br /&gt;
those instructions.  The timings are based on some partial testing.  These may not be accurate.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Instruction !! Byte 1 !! Byte 2 !! Byte 3 !! Byte 4 || T-States&lt;br /&gt;
|-&lt;br /&gt;
| LDIX || ED || A4 || || || 16&lt;br /&gt;
|-&lt;br /&gt;
| LDWS || ED || A5 || || || 14&lt;br /&gt;
|-&lt;br /&gt;
| LDIRX || ED || B4 || || || 21/16&lt;br /&gt;
|-&lt;br /&gt;
| LDDX || ED || AC || || || 16&lt;br /&gt;
|-&lt;br /&gt;
| LDDRX || ED || BC || || || 21/16&lt;br /&gt;
|-&lt;br /&gt;
| LDPIRX || ED  || B7 || || || 21/16&lt;br /&gt;
|-&lt;br /&gt;
| OUTINB || ED  || 90 || || || 16&lt;br /&gt;
|-&lt;br /&gt;
| MUL D,E || ED || 30 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD HL,A || ED || 31 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD DE,A || ED || 32 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD BC,A || ED || 33 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| ADD HL,$nnnn || ED || 34 || low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| ADD DE,$nnnn || ED || 35 || low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| ADD BC,$nnnn || ED  || 36|| low || high || 16&lt;br /&gt;
|-&lt;br /&gt;
| SWAPNIB || ED || 23 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| MIRROR || ED || 24 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| PUSH $nnnn || ED || 8A || high || low || 23&lt;br /&gt;
|-&lt;br /&gt;
| NEXTREG $rr,$nn || ED || 91 || register || value || 20&lt;br /&gt;
|-&lt;br /&gt;
| NEXTREG $rr,A || ED  || 92 || register || || 17&lt;br /&gt;
|-&lt;br /&gt;
| PIXELDN || ED || 93 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| PIXELAD || ED || 94 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| SETAE || ED  || 95 ||  || || 8&lt;br /&gt;
|-&lt;br /&gt;
| TEST $nn || ED || 27 || value || || 11&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Also note that the &amp;quot;PUSH $nnnn&amp;quot; instruction is not a mistake.  The operand is in big-endian.&lt;br /&gt;
&lt;br /&gt;
The core version 2.00.22+ has these new instructions:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Instruction !! Byte 1 !! Byte 2 !! Byte 3 !! Byte 4 || T-States&lt;br /&gt;
|-&lt;br /&gt;
| BSLA DE,B || ED || 28 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRA DE,B || ED || 29 || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRL DE,B || ED || 2A || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BSRF DE,B || ED || 2B || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| BRLC DE,B || ED || 2C || || || 8&lt;br /&gt;
|-&lt;br /&gt;
| JP (C) || ED || 98 || || || 13&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mmattsteel</name></author>
	</entry>
</feed>