\oblig HN pedantry: In this specific simplified problem, I think you could use stripes for Z80, with x in (HL), flag in (DE), and use literals for max&#x2F;min (as in 6502) instead of D&#x2F;E?  But it would still be much slower than the 6502, and you run out of registers if need more than two fields of an object...<p>I&#x27;d forgotten (IX+n) instructions were so expensive! It&#x27;s a shame, because your example is their purpose.<p>I guess Z80 is a higher-level micro-coded language: easier but slower. I also always found the orthogonal mnenonic style of Z80 much clearer, which I think 6502 could have used. e.g. &quot;LDA $F453,X&quot; could be &quot;LD A,($F453+X)&quot;<p>PS some references I found: 6502 addressing modes: 
<a href="http:&#x2F;&#x2F;www.dwheeler.com&#x2F;6502&#x2F;oneelkruns&#x2F;asm1step.html" rel="nofollow">http:&#x2F;&#x2F;www.dwheeler.com&#x2F;6502&#x2F;oneelkruns&#x2F;asm1step.html</a><p><pre><code>  LDA $F453,X  where X contains 3      </code></pre>
Absolute Indexed Addressing - 
Load the accumulator with the contents of address $F453 + 3 = $F456.<p>Z80 timings: <a href="http:&#x2F;&#x2F;map.grauw.nl&#x2F;resources&#x2F;z80instr.php" rel="nofollow">http:&#x2F;&#x2F;map.grauw.nl&#x2F;resources&#x2F;z80instr.php</a>