<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://wikiti.brandonw.net/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wikiti.brandonw.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tribal</id>
		<title>WikiTI - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wikiti.brandonw.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tribal"/>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Special:Contributions/Tribal"/>
		<updated>2026-04-05T20:45:18Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.23.5</generator>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Z80_Good_Programming_Practices</id>
		<title>Z80 Good Programming Practices</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Z80_Good_Programming_Practices"/>
				<updated>2010-11-10T23:40:42Z</updated>
		
		<summary type="html">&lt;p&gt;Tribal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Lookup table ==&lt;br /&gt;
&lt;br /&gt;
If you have a place in your code where a value is tested to choose between a lot of things, like subroutines or data, it can be a good idea to use lookup tables instead of a series of tests. It makes the code more readable, concise and extensible.&lt;br /&gt;
&lt;br /&gt;
In terms optimisation though it should be used when the data is not sequentially ordered or when the objects being pointed to are not the same size.  For example, using LUTs (Look Up Tables) to find a tile in a block of memory that is only tiles would both slower and cost more memory.  Using LUTs to find a particular string would be quicker but would waste more memory than a linear search.  Using LUTs as a jump table to different code blocks located through out a program would be faster and smaller compared to the alternative.&lt;br /&gt;
&lt;br /&gt;
However, if there aren't many jumps and many of the values of a are sequential, it would be more efficient to do something like:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 ld a,(Number)&lt;br /&gt;
 or a&lt;br /&gt;
 jp z,A_is_0&lt;br /&gt;
 dec a&lt;br /&gt;
 jp z,A_is_1&lt;br /&gt;
 dec a&lt;br /&gt;
 jp z,A_is_2&lt;br /&gt;
 sub 2&lt;br /&gt;
 jp z,A_is_4&lt;br /&gt;
 dec a&lt;br /&gt;
 jp z,A_is_5&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Without&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;With&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 ld a,(SpriteNumber)&lt;br /&gt;
 cp 0&lt;br /&gt;
 jp z,ChooseSprite0&lt;br /&gt;
 cp 1&lt;br /&gt;
 jp z,ChooseSprite1&lt;br /&gt;
 cp 2&lt;br /&gt;
 jp z,ChooseSprite2&lt;br /&gt;
 cp 3&lt;br /&gt;
 jp z,ChooseSprite3&lt;br /&gt;
 cp 4&lt;br /&gt;
 jp z,ChooseSprite4&lt;br /&gt;
 cp 5&lt;br /&gt;
 jp z,ChooseSprite5&lt;br /&gt;
...&lt;br /&gt;
ChooseSprite0&lt;br /&gt;
 ld hl,Sprite0&lt;br /&gt;
 jp DisplaySprite&lt;br /&gt;
ChooseSprite1&lt;br /&gt;
 ld hl,Sprite1&lt;br /&gt;
 jp DisplaySprite&lt;br /&gt;
ChooseSprite2&lt;br /&gt;
 ld hl,Sprite2&lt;br /&gt;
 jp DisplaySprite&lt;br /&gt;
ChooseSprite3&lt;br /&gt;
 ld hl,Sprite3&lt;br /&gt;
 jp DisplaySprite&lt;br /&gt;
ChooseSprite4&lt;br /&gt;
 ld hl,Sprite4&lt;br /&gt;
 jp DisplaySprite&lt;br /&gt;
ChooseSprite5&lt;br /&gt;
 ld hl,Sprite5&lt;br /&gt;
 jp DisplaySprite&lt;br /&gt;
...&lt;br /&gt;
DisplaySprite&lt;br /&gt;
 ld bc,(coordinates)&lt;br /&gt;
 call SpriteRoutine&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 ld a,(SpriteNumber)&lt;br /&gt;
 add a,a   ; a*2 (limits SpriteNumber to 128) &lt;br /&gt;
 ld h,0 &lt;br /&gt;
 ld l,a &lt;br /&gt;
 ld de,SpriteAddressLUT&lt;br /&gt;
 add hl,de&lt;br /&gt;
 ld a,(hl)&lt;br /&gt;
 inc hl&lt;br /&gt;
 ld h,(hl)&lt;br /&gt;
 ld l,a&lt;br /&gt;
 ld bc,(coordinates)&lt;br /&gt;
 jp SpriteRoutine&lt;br /&gt;
...&lt;br /&gt;
SpriteAddressLUT&lt;br /&gt;
 .dw Sprite0&lt;br /&gt;
 .dw Sprite1&lt;br /&gt;
 .dw Sprite2&lt;br /&gt;
 .dw Sprite3&lt;br /&gt;
 .dw Sprite4&lt;br /&gt;
 .dw Sprite5&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And this one :&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Without&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;With&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 ld a,(MenuChoice)&lt;br /&gt;
 cp 0&lt;br /&gt;
 jp z,Choice0&lt;br /&gt;
 cp 1&lt;br /&gt;
 jp z,Choice1&lt;br /&gt;
 cp 2&lt;br /&gt;
 jp z,Choice2&lt;br /&gt;
 cp 3&lt;br /&gt;
 jp z,Choice3&lt;br /&gt;
 cp 4&lt;br /&gt;
 jp z,Choice4&lt;br /&gt;
 cp 5&lt;br /&gt;
 jp z,Choice5&lt;br /&gt;
 cp 6&lt;br /&gt;
 jp z,Choice6&lt;br /&gt;
 cp 7&lt;br /&gt;
 jp z,Choice7&lt;br /&gt;
...&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 ld a,(MenuChoice)&lt;br /&gt;
 add a,a ; a*2&lt;br /&gt;
 ld h,0&lt;br /&gt;
 ld l,a&lt;br /&gt;
 ld de,CodeBranchLUT&lt;br /&gt;
 add hl,de&lt;br /&gt;
 ld a,(hl)&lt;br /&gt;
 inc hl&lt;br /&gt;
 ld h,(hl)&lt;br /&gt;
 ld l,a&lt;br /&gt;
 jp (hl)&lt;br /&gt;
...&lt;br /&gt;
CodeBranchLUT:&lt;br /&gt;
 .dw Choice0&lt;br /&gt;
 .dw Choice1&lt;br /&gt;
 .dw Choice2&lt;br /&gt;
 .dw Choice3&lt;br /&gt;
 .dw Choice4&lt;br /&gt;
 .dw Choice5&lt;br /&gt;
 .dw Choice6&lt;br /&gt;
 .dw Choice7&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related topics ==&lt;br /&gt;
* [http://www.unitedti.org/forum/index.php?showtopic=8461 Common Mistakes and Good techniques]&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;/div&gt;</summary>
		<author><name>Tribal</name></author>	</entry>

	</feed>