<?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/index.php?action=history&amp;feed=atom&amp;title=Z80_Routines%3AGraphic%3ALineDraw</id>
		<title>Z80 Routines:Graphic:LineDraw - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://wikiti.brandonw.net/index.php?action=history&amp;feed=atom&amp;title=Z80_Routines%3AGraphic%3ALineDraw"/>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Z80_Routines:Graphic:LineDraw&amp;action=history"/>
		<updated>2026-06-05T04:21:49Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.23.5</generator>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Z80_Routines:Graphic:LineDraw&amp;diff=9233&amp;oldid=prev</id>
		<title>Eeems: Fixed formatting errors</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Z80_Routines:Graphic:LineDraw&amp;diff=9233&amp;oldid=prev"/>
				<updated>2010-07-31T04:49:29Z</updated>
		
		<summary type="html">&lt;p&gt;Fixed formatting errors&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 04:49, 31 July 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 386:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 386:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; call _getkey&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; call _getkey&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; ret&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; ret&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; &amp;lt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;wiki&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; &amp;lt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;nowiki&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Comments ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Comments ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;There are benchmarks of some of this routines here: http://www.junemann.nl/maxcoderz/viewtopic.php?f=5&amp;amp;t=1940&amp;amp;start=15&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;There are benchmarks of some of this routines here: http://www.junemann.nl/maxcoderz/viewtopic.php?f=5&amp;amp;t=1940&amp;amp;start=15&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Eeems</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Z80_Routines:Graphic:LineDraw&amp;diff=9181&amp;oldid=prev</id>
		<title>Galandros: fix</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Z80_Routines:Graphic:LineDraw&amp;diff=9181&amp;oldid=prev"/>
				<updated>2010-05-16T13:53:19Z</updated>
		
		<summary type="html">&lt;p&gt;fix&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 13:53, 16 May 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 114:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 114:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Fast Version ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Fast Version ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &amp;lt;nowiki&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;Fast line routine, only sets pixels&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;Fast line routine, only sets pixels&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;(d,e),(h,l) = (x1,y1),(x2,y2)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;(d,e),(h,l) = (x1,y1),(x2,y2)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 364:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 365:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	djnz DrawY7&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	djnz DrawY7&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	ret&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	ret&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &amp;lt;/nowiki&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Special case of vertical lines ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Special case of vertical lines ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Galandros</name></author>	</entry>

	<entry>
		<id>https://wikiti.brandonw.net/index.php?title=Z80_Routines:Graphic:LineDraw&amp;diff=9180&amp;oldid=prev</id>
		<title>Galandros: created</title>
		<link rel="alternate" type="text/html" href="https://wikiti.brandonw.net/index.php?title=Z80_Routines:Graphic:LineDraw&amp;diff=9180&amp;oldid=prev"/>
				<updated>2010-05-16T13:52:00Z</updated>
		
		<summary type="html">&lt;p&gt;created&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:Z80 Routines:Graphic|LineDraw]]&lt;br /&gt;
[[Category:Z80 Routines|LineDraw]]&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These routines are the best line draws routines around for z80.&lt;br /&gt;
&lt;br /&gt;
=== Small (and fast for its size) ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
; Small and quite fast&lt;br /&gt;
; by Patai Gergely, thanks&lt;br /&gt;
DrawLineCompact		; This routine draws an unclipped line on an IX-pointed screen from (d,e) to (h,l)&lt;br /&gt;
 ld a,h			; Calculating delta X and swapping points if negative&lt;br /&gt;
 sub d			; (Lines are always drawn from left to right)&lt;br /&gt;
 jp nc,DL_okaydx&lt;br /&gt;
 ex de,hl&lt;br /&gt;
 neg&lt;br /&gt;
DL_okaydx:&lt;br /&gt;
 push af		; Saving DX (it will be popped into DE below)&lt;br /&gt;
 ld b,0			; Calculating the position of the first pixel to be drawn&lt;br /&gt;
 ld c,d			; IX+=D/8+E*12 (actually E*4+E*4+E*4)&lt;br /&gt;
 srl c&lt;br /&gt;
 srl c&lt;br /&gt;
 srl c&lt;br /&gt;
 add ix,bc&lt;br /&gt;
 ld c,e&lt;br /&gt;
 sla c&lt;br /&gt;
 sla c&lt;br /&gt;
 add ix,bc&lt;br /&gt;
 add ix,bc&lt;br /&gt;
 add ix,bc&lt;br /&gt;
 ld a,d			; Calculating the starting pixel mask&lt;br /&gt;
 ld c,$80&lt;br /&gt;
 and 7&lt;br /&gt;
 jp z,DL_okaymask&lt;br /&gt;
DL_calcmask:&lt;br /&gt;
 srl c&lt;br /&gt;
 dec a&lt;br /&gt;
 jp nz,DL_calcmask&lt;br /&gt;
DL_okaymask:&lt;br /&gt;
 ld a,l			; Calculating delta Y and negating the Y increment if necessary&lt;br /&gt;
 sub e			; This is the last instruction for which we need the original data&lt;br /&gt;
 ld hl,12&lt;br /&gt;
 jp nc,DL_okaydy&lt;br /&gt;
 ld hl,-12&lt;br /&gt;
 neg&lt;br /&gt;
DL_okaydy:&lt;br /&gt;
 pop de			; Recalling DX&lt;br /&gt;
 ld e,a			; D=DX, E=DY&lt;br /&gt;
 cp d&lt;br /&gt;
 jp c,DL_horizontal	; Line is rather horizontal than vertical&lt;br /&gt;
 ld (DL_VLinc+1),hl	; Modifying y increment&lt;br /&gt;
 push ix		; Loading IX to HL for speed; we don't need the old value of HL any more&lt;br /&gt;
 pop hl&lt;br /&gt;
 ld b,e			; Pixel counter&lt;br /&gt;
 inc b&lt;br /&gt;
 srl a			; Setting up gradient counter (A=E/2)&lt;br /&gt;
 ld (DL_HLinc+1),sp	; Backing up SP to a safe place&lt;br /&gt;
 di			; Interrupts are undesirable when we play around with SP :)&lt;br /&gt;
DL_VLinc:&lt;br /&gt;
 ld sp,0		; This value is replaced by +/- 12&lt;br /&gt;
DL_Vloop:&lt;br /&gt;
 ex af,af'		; Saving A to alternative register&lt;br /&gt;
 ld a,(hl)&lt;br /&gt;
 or c			; Writing pixel to current position&lt;br /&gt;
 ld (hl),a&lt;br /&gt;
 ex af,af'		; Recalling A (faster than push-pop, and there's no need for SP)&lt;br /&gt;
 add hl,sp&lt;br /&gt;
 sub d			; Handling gradient&lt;br /&gt;
 jp nc,DL_VnoSideStep&lt;br /&gt;
 rrc c			; Rotating mask&lt;br /&gt;
 jp nc,DL_VnoByte	; Handling byte boundary&lt;br /&gt;
 inc hl&lt;br /&gt;
DL_VnoByte:&lt;br /&gt;
 add a,e&lt;br /&gt;
DL_VnoSideStep:&lt;br /&gt;
 djnz DL_Vloop&lt;br /&gt;
 ld sp,(DL_HLinc+1)&lt;br /&gt;
 ret&lt;br /&gt;
DL_horizontal:&lt;br /&gt;
 ld (DL_HLinc+1),hl	; Modifying y increment&lt;br /&gt;
 push ix		; Loading IX to HL for speed; we don't need the old value of HL any more&lt;br /&gt;
 pop hl&lt;br /&gt;
 ld b,d			; Pixel counter&lt;br /&gt;
 inc b&lt;br /&gt;
 ld a,d			; Setting up gradient counter&lt;br /&gt;
 srl a&lt;br /&gt;
 ld (DL_VLinc+1),sp	; Backing up SP to a safe place&lt;br /&gt;
 di			; Interrupts again...&lt;br /&gt;
DL_HLinc:&lt;br /&gt;
 ld sp,0		; This value is replaced by +/- 12&lt;br /&gt;
DL_Hloop:&lt;br /&gt;
 ex af,af'		; Saving A to alternative register&lt;br /&gt;
 ld a,(hl)&lt;br /&gt;
 or c			; Writing pixel to current position&lt;br /&gt;
 ld (hl),a&lt;br /&gt;
 ex af,af'		; Recalling A&lt;br /&gt;
 rrc c			; Rotating mask&lt;br /&gt;
 jp nc,DL_HnoByte	; Handling byte boundary&lt;br /&gt;
 inc hl&lt;br /&gt;
DL_HnoByte:&lt;br /&gt;
 sub e			; Handling gradient&lt;br /&gt;
 jp nc,DL_HnoSideStep&lt;br /&gt;
 add hl,sp&lt;br /&gt;
 add a,d&lt;br /&gt;
DL_HnoSideStep:&lt;br /&gt;
 djnz DL_Hloop&lt;br /&gt;
 ld sp,(DL_VLinc+1)&lt;br /&gt;
 ret&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fast Version ===&lt;br /&gt;
&lt;br /&gt;
;Fast line routine, only sets pixels&lt;br /&gt;
;(d,e),(h,l) = (x1,y1),(x2,y2)&lt;br /&gt;
;NO clipping&lt;br /&gt;
;James Montelongo&lt;br /&gt;
FastLine:&lt;br /&gt;
	ld a,h&lt;br /&gt;
	cp d&lt;br /&gt;
	jp nc,noswapx&lt;br /&gt;
	ex de,hl&lt;br /&gt;
noswapx:&lt;br /&gt;
&lt;br /&gt;
	ld a,h&lt;br /&gt;
	sub d&lt;br /&gt;
	jp nc,posx&lt;br /&gt;
	neg&lt;br /&gt;
posx:&lt;br /&gt;
	ld b,a&lt;br /&gt;
	ld a,l&lt;br /&gt;
	sub e&lt;br /&gt;
	jp nc,posy&lt;br /&gt;
	neg&lt;br /&gt;
posY:&lt;br /&gt;
	ld c,a&lt;br /&gt;
	ld a,l&lt;br /&gt;
	ld hl,-12&lt;br /&gt;
	cp e&lt;br /&gt;
	jp c,lineup&lt;br /&gt;
	ld hl,12&lt;br /&gt;
lineup:&lt;br /&gt;
	ld ix,xbit&lt;br /&gt;
	ld a,b&lt;br /&gt;
	cp c&lt;br /&gt;
	jp nc,xline&lt;br /&gt;
	ld b,c&lt;br /&gt;
	ld c,a&lt;br /&gt;
	ld ix,ybit&lt;br /&gt;
xline:&lt;br /&gt;
	push hl&lt;br /&gt;
	ld a,d&lt;br /&gt;
	ld d,0&lt;br /&gt;
	ld h,d&lt;br /&gt;
	sla e&lt;br /&gt;
	sla e&lt;br /&gt;
	ld l,e&lt;br /&gt;
	add hl,de&lt;br /&gt;
	add hl,de&lt;br /&gt;
	ld e,a&lt;br /&gt;
	and %00000111&lt;br /&gt;
	srl e&lt;br /&gt;
	srl e&lt;br /&gt;
	srl e&lt;br /&gt;
	add hl,de&lt;br /&gt;
	ld de,gbuf&lt;br /&gt;
	add hl,de&lt;br /&gt;
	add a,a&lt;br /&gt;
	ld e,a&lt;br /&gt;
	ld d,0&lt;br /&gt;
	add ix,de&lt;br /&gt;
	ld e,(ix)&lt;br /&gt;
	ld d,(ix+1)&lt;br /&gt;
	push hl&lt;br /&gt;
	pop ix&lt;br /&gt;
	ex de,hl&lt;br /&gt;
	pop de&lt;br /&gt;
	push hl&lt;br /&gt;
	ld h,b&lt;br /&gt;
	ld l,c&lt;br /&gt;
	ld a,h&lt;br /&gt;
	srl a&lt;br /&gt;
	inc b&lt;br /&gt;
	ret&lt;br /&gt;
&lt;br /&gt;
Xbit:&lt;br /&gt;
 .dw drawX0,drawX1,drawX2,drawX3&lt;br /&gt;
 .dw drawX4,drawX5,drawX6,drawX7&lt;br /&gt;
Ybit:&lt;br /&gt;
 .dw drawY0,drawY1,drawY2,drawY3&lt;br /&gt;
 .dw drawY4,drawY5,drawY6,drawY7&lt;br /&gt;
	&lt;br /&gt;
DrawX0:&lt;br /&gt;
	set 7,(ix)&lt;br /&gt;
	add a,c&lt;br /&gt;
	cp h&lt;br /&gt;
	jp c,$+3+2+1&lt;br /&gt;
	add ix,de&lt;br /&gt;
	sub h&lt;br /&gt;
	djnz DrawX1&lt;br /&gt;
	ret&lt;br /&gt;
DrawX1:&lt;br /&gt;
	set 6,(ix)&lt;br /&gt;
	add a,c&lt;br /&gt;
	cp h&lt;br /&gt;
	jp c,$+3+2+1&lt;br /&gt;
	add ix,de&lt;br /&gt;
	sub h&lt;br /&gt;
	djnz DrawX2&lt;br /&gt;
	ret&lt;br /&gt;
DrawX2:&lt;br /&gt;
	set 5,(ix)&lt;br /&gt;
	add a,c&lt;br /&gt;
	cp h&lt;br /&gt;
	jp c,$+3+2+1&lt;br /&gt;
	add ix,de&lt;br /&gt;
	sub h&lt;br /&gt;
	djnz DrawX3&lt;br /&gt;
	ret&lt;br /&gt;
DrawX3:&lt;br /&gt;
	set 4,(ix)&lt;br /&gt;
	add a,c&lt;br /&gt;
	cp h&lt;br /&gt;
	jp c,$+3+2+1&lt;br /&gt;
	add ix,de&lt;br /&gt;
	sub h&lt;br /&gt;
	djnz DrawX4&lt;br /&gt;
	ret&lt;br /&gt;
DrawX4:&lt;br /&gt;
	set 3,(ix)&lt;br /&gt;
	add a,c&lt;br /&gt;
	cp h&lt;br /&gt;
	jp c,$+3+2+1&lt;br /&gt;
	add ix,de&lt;br /&gt;
	sub h&lt;br /&gt;
	djnz DrawX5&lt;br /&gt;
	ret&lt;br /&gt;
DrawX5:&lt;br /&gt;
	set 2,(ix)&lt;br /&gt;
	add a,c&lt;br /&gt;
	cp h&lt;br /&gt;
	jp c,$+3+2+1&lt;br /&gt;
	add ix,de&lt;br /&gt;
	sub h&lt;br /&gt;
	djnz DrawX6&lt;br /&gt;
	ret&lt;br /&gt;
DrawX6:&lt;br /&gt;
	set 1,(ix)&lt;br /&gt;
	add a,c&lt;br /&gt;
	cp h&lt;br /&gt;
	jp c,$+3+2+1&lt;br /&gt;
	add ix,de&lt;br /&gt;
	sub h&lt;br /&gt;
	djnz DrawX7&lt;br /&gt;
	ret&lt;br /&gt;
DrawX7:&lt;br /&gt;
	set 0,(ix)&lt;br /&gt;
	inc ix&lt;br /&gt;
	add a,c&lt;br /&gt;
	cp h&lt;br /&gt;
	jp c,$+3+2+1&lt;br /&gt;
	add ix,de&lt;br /&gt;
	sub h&lt;br /&gt;
	djnz DrawX0&lt;br /&gt;
	ret&lt;br /&gt;
&lt;br /&gt;
DrawY0_:&lt;br /&gt;
	inc ix&lt;br /&gt;
	sub h&lt;br /&gt;
	dec b&lt;br /&gt;
	ret z&lt;br /&gt;
DrawY0:&lt;br /&gt;
	set 7,(ix)&lt;br /&gt;
	add ix,de&lt;br /&gt;
	add a,l&lt;br /&gt;
	cp h&lt;br /&gt;
	jp nc,DrawY1_&lt;br /&gt;
	djnz DrawY0&lt;br /&gt;
	ret&lt;br /&gt;
DrawY1_:&lt;br /&gt;
	sub h&lt;br /&gt;
	dec b&lt;br /&gt;
	ret z&lt;br /&gt;
DrawY1:&lt;br /&gt;
	set 6,(ix)&lt;br /&gt;
	add ix,de&lt;br /&gt;
	add a,l&lt;br /&gt;
	cp h&lt;br /&gt;
	jp nc,DrawY2_&lt;br /&gt;
	djnz DrawY1&lt;br /&gt;
	ret&lt;br /&gt;
DrawY2_:&lt;br /&gt;
	sub h&lt;br /&gt;
	dec b&lt;br /&gt;
	ret z&lt;br /&gt;
DrawY2:&lt;br /&gt;
	set 5,(ix)&lt;br /&gt;
	add ix,de&lt;br /&gt;
	add a,l&lt;br /&gt;
	cp h&lt;br /&gt;
	jp nc,DrawY3_&lt;br /&gt;
	djnz DrawY2&lt;br /&gt;
	ret&lt;br /&gt;
DrawY3_:&lt;br /&gt;
	sub h&lt;br /&gt;
	dec b&lt;br /&gt;
	ret z&lt;br /&gt;
DrawY3:&lt;br /&gt;
	set 4,(ix)&lt;br /&gt;
	add ix,de&lt;br /&gt;
	add a,l&lt;br /&gt;
	cp h&lt;br /&gt;
	jp nc,DrawY4_&lt;br /&gt;
	djnz DrawY3&lt;br /&gt;
	ret&lt;br /&gt;
DrawY4_:&lt;br /&gt;
	sub h&lt;br /&gt;
	dec b&lt;br /&gt;
	ret z&lt;br /&gt;
DrawY4:&lt;br /&gt;
	set 3,(ix)&lt;br /&gt;
	add ix,de&lt;br /&gt;
	add a,l&lt;br /&gt;
	cp h&lt;br /&gt;
	jp nc,DrawY5_&lt;br /&gt;
	djnz DrawY4&lt;br /&gt;
	ret&lt;br /&gt;
DrawY5_:&lt;br /&gt;
	sub h&lt;br /&gt;
	dec b&lt;br /&gt;
	ret z&lt;br /&gt;
DrawY5:&lt;br /&gt;
	set 2,(ix)&lt;br /&gt;
	add ix,de&lt;br /&gt;
	add a,l&lt;br /&gt;
	cp h&lt;br /&gt;
	jp nc,DrawY6_&lt;br /&gt;
	djnz DrawY5&lt;br /&gt;
	ret&lt;br /&gt;
DrawY6_:&lt;br /&gt;
	sub h&lt;br /&gt;
	dec b&lt;br /&gt;
	ret z&lt;br /&gt;
DrawY6:&lt;br /&gt;
	set 1,(ix)&lt;br /&gt;
	add ix,de&lt;br /&gt;
	add a,l&lt;br /&gt;
	cp h&lt;br /&gt;
	jp nc,DrawY7_&lt;br /&gt;
	djnz DrawY6&lt;br /&gt;
	ret&lt;br /&gt;
DrawY7_:&lt;br /&gt;
	sub h&lt;br /&gt;
	dec b&lt;br /&gt;
	ret z&lt;br /&gt;
DrawY7:&lt;br /&gt;
	set 0,(ix)&lt;br /&gt;
	add ix,de&lt;br /&gt;
	add a,l&lt;br /&gt;
	cp h&lt;br /&gt;
	jp nc,DrawY0_&lt;br /&gt;
	djnz DrawY7&lt;br /&gt;
	ret&lt;br /&gt;
&lt;br /&gt;
=== Special case of vertical lines ===&lt;br /&gt;
&lt;br /&gt;
=== Special case of horizontal lines ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
For the compact version.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 ld hl,plotsscreen&lt;br /&gt;
 call ClearScreen&lt;br /&gt;
 ld de,$0000		; Hint: top left corner is at 0,0 and the bottom right at 95,63&lt;br /&gt;
 ld hl,$1008&lt;br /&gt;
 ld ix,plotsscreen&lt;br /&gt;
 call DrawLineCompact&lt;br /&gt;
 ld hl,SAVESSCREEN&lt;br /&gt;
 call ifastcopy&lt;br /&gt;
 call _getkey&lt;br /&gt;
 ret&lt;br /&gt;
 &amp;lt;/wiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Comments ==&lt;br /&gt;
There are benchmarks of some of this routines here: http://www.junemann.nl/maxcoderz/viewtopic.php?f=5&amp;amp;t=1940&amp;amp;start=15&lt;/div&gt;</summary>
		<author><name>Galandros</name></author>	</entry>

	</feed>