<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://oldwiki.cpcwiki.eu/index.php?action=history&amp;feed=atom&amp;title=Programming%3ACPC_Plus_RLE_Hardware_Sprites</id>
		<title>Programming:CPC Plus RLE Hardware Sprites - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://oldwiki.cpcwiki.eu/index.php?action=history&amp;feed=atom&amp;title=Programming%3ACPC_Plus_RLE_Hardware_Sprites"/>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Programming:CPC_Plus_RLE_Hardware_Sprites&amp;action=history"/>
		<updated>2026-08-28T10:39:12Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.25.1</generator>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Programming:CPC_Plus_RLE_Hardware_Sprites&amp;diff=14880&amp;oldid=prev</id>
		<title>Octoate: added category</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Programming:CPC_Plus_RLE_Hardware_Sprites&amp;diff=14880&amp;oldid=prev"/>
				<updated>2007-03-12T16:02:11Z</updated>
		
		<summary type="html">&lt;p&gt;added category&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 16:02, 12 March 2007&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;L136&quot; &gt;Line 136:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 136:&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;defb &amp;amp;ff,&amp;amp;00,&amp;amp;ff,&amp;amp;77,&amp;amp;b3,&amp;amp;51,&amp;amp;a8,&amp;amp;d4,&amp;amp;62,&amp;amp;39,&amp;amp;9c,&amp;amp;46,&amp;amp;2b,&amp;amp;15,&amp;amp;8a,&amp;amp;cd,&amp;amp;ee&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;defb &amp;amp;ff,&amp;amp;00,&amp;amp;ff,&amp;amp;77,&amp;amp;b3,&amp;amp;51,&amp;amp;a8,&amp;amp;d4,&amp;amp;62,&amp;amp;39,&amp;amp;9c,&amp;amp;46,&amp;amp;2b,&amp;amp;15,&amp;amp;8a,&amp;amp;cd,&amp;amp;ee&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;lt;/pre&amp;gt;&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;lt;/pre&amp;gt;&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;&lt;/ins&gt;&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;[[Category:CPC Plus]]&lt;/ins&gt;&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;[[Category:Programming]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wikidb:diff:version:1.11a:oldid:14871:newid:14880 --&gt;
&lt;/table&gt;</summary>
		<author><name>Octoate</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Programming:CPC_Plus_RLE_Hardware_Sprites&amp;diff=14871&amp;oldid=prev</id>
		<title>CPCLER at 15:44, 12 March 2007</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Programming:CPC_Plus_RLE_Hardware_Sprites&amp;diff=14871&amp;oldid=prev"/>
				<updated>2007-03-12T15:44:17Z</updated>
		
		<summary type="html">&lt;p&gt;&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 15:44, 12 March 2007&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;L1&quot; &gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&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;From the '''The Unofficial Amstrad WWW Resource''':&lt;/ins&gt;&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;&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;&amp;lt;pre&amp;gt;&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;lt;pre&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;div&gt;;;------------------------------------------------------------------------&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;;;------------------------------------------------------------------------&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wikidb:diff:version:1.11a:oldid:14860:newid:14871 --&gt;
&lt;/table&gt;</summary>
		<author><name>CPCLER</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Programming:CPC_Plus_RLE_Hardware_Sprites&amp;diff=14860&amp;oldid=prev</id>
		<title>CPCLER at 14:38, 12 March 2007</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Programming:CPC_Plus_RLE_Hardware_Sprites&amp;diff=14860&amp;oldid=prev"/>
				<updated>2007-03-12T14:38:23Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
;;------------------------------------------------------------------------&lt;br /&gt;
;; RLE compressed hardware sprites&lt;br /&gt;
;;&lt;br /&gt;
;; This example will only run on the CPC+.&lt;br /&gt;
;; &lt;br /&gt;
;; In this example:&lt;br /&gt;
;;&lt;br /&gt;
;; - An animation sequence is defined by a sequence of images (frames)&lt;br /&gt;
;; - The first frame is stored completely, subsequent frames are stored in a compressed&lt;br /&gt;
;;   format, where the data represents the differences between the new frame and the&lt;br /&gt;
;;   previous frame. (Each frame is a &amp;quot;delta&amp;quot; of the previous frame)&lt;br /&gt;
;; - The sequence must be played from the beginning to the end for the&lt;br /&gt;
;;   result to be correct; otherwise there will be errors.&lt;br /&gt;
&lt;br /&gt;
;; this code must not be in the range &amp;amp;4000-&amp;amp;7fff, because it must &lt;br /&gt;
;; run when the CPC+ hardware registers are active in this range.&lt;br /&gt;
org &amp;amp;8000&lt;br /&gt;
nolist&lt;br /&gt;
&lt;br /&gt;
;;----------------------------------------------------------------------&lt;br /&gt;
;; unlock asic to gain access to asic registers&lt;br /&gt;
di&lt;br /&gt;
ld b,&amp;amp;bc&lt;br /&gt;
ld hl,sequence&lt;br /&gt;
ld e,17&lt;br /&gt;
.seq &lt;br /&gt;
ld a,(hl)&lt;br /&gt;
out (c),a&lt;br /&gt;
inc hl&lt;br /&gt;
dec e&lt;br /&gt;
jr nz,seq&lt;br /&gt;
&lt;br /&gt;
;;----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
;; set initial sprite frame&lt;br /&gt;
xor a&lt;br /&gt;
ld (sprite_frame),a&lt;br /&gt;
&lt;br /&gt;
call update_sprite&lt;br /&gt;
&lt;br /&gt;
ld a,(sprite_frame)&lt;br /&gt;
inc a&lt;br /&gt;
ld (sprite_frame),a&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;;----------------------------------------------------------------------&lt;br /&gt;
;; update sprite ram with image data&lt;br /&gt;
;; &lt;br /&gt;
;; DE = points to CPC+ hardware sprite RAM&lt;br /&gt;
;; A = index of sprite frame&lt;br /&gt;
&lt;br /&gt;
.update_sprite&lt;br /&gt;
;; page in ASIC hardware registers&lt;br /&gt;
ld bc,&amp;amp;7fb8&lt;br /&gt;
out (c),c&lt;br /&gt;
&lt;br /&gt;
ld a,(sprite_frame)				;; sprite frame&lt;br /&gt;
ld l,a&lt;br /&gt;
add hl,hl						;; x2 to get offset in table&lt;br /&gt;
ld bc,sprite_frames				;; base of table&lt;br /&gt;
add hl,bc						;; address of entry in table&lt;br /&gt;
ld a,(hl)						;; get entry from table (address of sprite frame)&lt;br /&gt;
inc hl&lt;br /&gt;
ld h,(hl)&lt;br /&gt;
ld l,a&lt;br /&gt;
&lt;br /&gt;
call rle_decode_sprite&lt;br /&gt;
&lt;br /&gt;
;; page out ASIC hardware registers&lt;br /&gt;
ld bc,&amp;amp;7fa0&lt;br /&gt;
out (c),c&lt;br /&gt;
ret&lt;br /&gt;
&lt;br /&gt;
;;----------------------------------------------------------------------&lt;br /&gt;
;; decode compressed sprite pixel data into the CPC+ hardware sprite RAM&lt;br /&gt;
;;&lt;br /&gt;
;; HL = points to compressed sprite data pixel data&lt;br /&gt;
;; DE = points to CPC+ hardware sprite RAM&lt;br /&gt;
;; HL,DE,BC corrupt&lt;br /&gt;
;;&lt;br /&gt;
;; compressed sprite pixel data format:&lt;br /&gt;
;; &lt;br /&gt;
;; The data is a list of one or more &amp;quot;packets&amp;quot;.&lt;br /&gt;
;; Each packet has a code byte with parameters dependant on the value of the code byte.&lt;br /&gt;
;;&lt;br /&gt;
;; code byte:&lt;br /&gt;
;; 0 = end of compressed data, no parameters &lt;br /&gt;
;; -ve = no parameters.  negate code byte to get number of bytes to add onto current DE&lt;br /&gt;
;; +ve = number of bytes to copy to hardware sprite RAM, followed by the actual bytes&lt;br /&gt;
&lt;br /&gt;
.rle_decode_sprite&lt;br /&gt;
.rle_next&lt;br /&gt;
ld a,(hl)		;; get code&lt;br /&gt;
&lt;br /&gt;
inc hl&lt;br /&gt;
or a			&lt;br /&gt;
ret z			;; quit if end of compressed data code&lt;br /&gt;
jp m,rle_move	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;; +ve code. Code is the number of bytes to copy to hardware sprite RAM&lt;br /&gt;
;; the bytes to copy follow the code.&lt;br /&gt;
&lt;br /&gt;
ld b,a	&lt;br /&gt;
ld c,0			;; BC = count&lt;br /&gt;
ldir			;; transfer&lt;br /&gt;
jr next&lt;br /&gt;
&lt;br /&gt;
.rle_move&lt;br /&gt;
neg&lt;br /&gt;
add a,e&lt;br /&gt;
&lt;br /&gt;
ld e,a&lt;br /&gt;
jr next&lt;br /&gt;
&lt;br /&gt;
;;----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
.sprite_frame&lt;br /&gt;
defb 0				;; index of current frame&lt;br /&gt;
&lt;br /&gt;
;; pointer to data for each sprite frame&lt;br /&gt;
.sprite_frames&lt;br /&gt;
defw frame0&lt;br /&gt;
defw frame1&lt;br /&gt;
defw frame2&lt;br /&gt;
defw frame3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;;----------------------------------------------------------------------&lt;br /&gt;
;; this is the sequence to unlock the ASIC extra features&lt;br /&gt;
.sequence&lt;br /&gt;
defb &amp;amp;ff,&amp;amp;00,&amp;amp;ff,&amp;amp;77,&amp;amp;b3,&amp;amp;51,&amp;amp;a8,&amp;amp;d4,&amp;amp;62,&amp;amp;39,&amp;amp;9c,&amp;amp;46,&amp;amp;2b,&amp;amp;15,&amp;amp;8a,&amp;amp;cd,&amp;amp;ee&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>CPCLER</name></author>	</entry>

	</feed>