Open gvvaughan opened 22 hours ago
That's the Spectrum Next Z80N, which is not a normal Z80. SLL is often an alias to SL1, the broken shift-left instruction; at least as WLA-DX supports it; every opcode output by WLA-DX is compared against V80 to verify correctness. See "z80.wla" in "tests" folder.
Equivalence to WLA-DX seems to be a misfeature in this case. If SLL is not an official Z80 mnemonic, then an assembler can chose to use the opcodes for SL1 (presumably incase of a 1 vs l typo?), or treat shift-left-logical as identical to shift-left-arithmetic and use the opcodes for SLA instead.
If you know all this and prefer WLA-DX equivalence over mathematical pedantry, feel free to close this without changing anything! :-)
Even though there is no official opcode, other assemblers and existing code already use this form, so I just went with matching convention. We could remove "SLL" entirely and require "SL1"; but spec.next are incorrect here with their assumption. The use of "1" is intentional, the instruction is faulty and inserts a 1 into the left-most bit instead of a zero.
from https://wiki.specnext.dev/Extended_Z80_instruction_set:
But looking at is2_z80.v80 I see:
Where
sll
instructions are treated likesl1
instead ofsla
.