<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://satyria.de/arm/index.php?action=history&amp;feed=atom&amp;title=Graphics_%28PI5%29</id>
	<title>Graphics (PI5) - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://satyria.de/arm/index.php?action=history&amp;feed=atom&amp;title=Graphics_%28PI5%29"/>
	<link rel="alternate" type="text/html" href="https://satyria.de/arm/index.php?title=Graphics_(PI5)&amp;action=history"/>
	<updated>2026-06-24T02:27:23Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in C und Assembler mit Raspberry</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://satyria.de/arm/index.php?title=Graphics_(PI5)&amp;diff=348&amp;oldid=prev</id>
		<title>Satyria: /* Kernel Breakdown */</title>
		<link rel="alternate" type="text/html" href="https://satyria.de/arm/index.php?title=Graphics_(PI5)&amp;diff=348&amp;oldid=prev"/>
		<updated>2024-08-23T10:48:50Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Kernel Breakdown&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 23. August 2024, 11:48 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l228&quot;&gt;Zeile 228:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 228:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| style=&amp;quot;width: 33%; text-align:center;&amp;quot; | [[English|&amp;lt; Home &amp;gt;]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| style=&amp;quot;width: 33%; text-align:center;&amp;quot; | [[English|&amp;lt; Home &amp;gt;]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| style=&amp;quot;width: 33%; text-align:right;&amp;quot; | [[Chars (PI5)e|Next (Chars (PI5)) &amp;gt;]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| style=&amp;quot;width: 33%; text-align:right;&amp;quot; | [[Chars (PI5)e|Next (Chars (PI5)) &amp;gt;]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|}&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{|&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| style=&quot;width: 33%; text-align:left;&quot; | [[Error Handling|&amp;lt; Back]] || style=&quot;width: 33%&quot; |[[English|^ Home]] || style=&quot;width: 33%; text-align:right;&quot; | [[Chars (PI5)e|Next &amp;gt;]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Satyria</name></author>
	</entry>
	<entry>
		<id>https://satyria.de/arm/index.php?title=Graphics_(PI5)&amp;diff=347&amp;oldid=prev</id>
		<title>Satyria: /* Kernel Breakdown */</title>
		<link rel="alternate" type="text/html" href="https://satyria.de/arm/index.php?title=Graphics_(PI5)&amp;diff=347&amp;oldid=prev"/>
		<updated>2024-08-23T10:48:33Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Kernel Breakdown&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 23. August 2024, 11:48 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l221&quot;&gt;Zeile 221:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 221:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;You can download the source code as a ZIP file from the following link: https://www.satyria.de/arm/sources/assem/graphics.zip&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;You can download the source code as a ZIP file from the following link: https://www.satyria.de/arm/sources/assem/graphics.zip&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;{| style=&quot;width: 100%;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;| style=&quot;width: 33%;&quot; | [[Error Handling|&amp;lt; Back (Error Handling)]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;| style=&quot;width: 33%; text-align:center;&quot; | [[English|&amp;lt; Home &amp;gt;]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;| style=&quot;width: 33%; text-align:right;&quot; | [[Chars (PI5)e|Next (Chars (PI5)) &amp;gt;]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{|&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{|&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| style=&amp;quot;width: 33%; text-align:left;&amp;quot; | [[Error Handling|&amp;lt; Back]] || style=&amp;quot;width: 33%&amp;quot; |[[English|^ Home]] || style=&amp;quot;width: 33%; text-align:right;&amp;quot; | [[Chars (PI5)e|Next &amp;gt;]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| style=&amp;quot;width: 33%; text-align:left;&amp;quot; | [[Error Handling|&amp;lt; Back]] || style=&amp;quot;width: 33%&amp;quot; |[[English|^ Home]] || style=&amp;quot;width: 33%; text-align:right;&amp;quot; | [[Chars (PI5)e|Next &amp;gt;]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Satyria</name></author>
	</entry>
	<entry>
		<id>https://satyria.de/arm/index.php?title=Graphics_(PI5)&amp;diff=233&amp;oldid=prev</id>
		<title>Satyria: /* Kernel Breakdown */</title>
		<link rel="alternate" type="text/html" href="https://satyria.de/arm/index.php?title=Graphics_(PI5)&amp;diff=233&amp;oldid=prev"/>
		<updated>2024-08-22T07:29:20Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Kernel Breakdown&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 22. August 2024, 08:29 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l221&quot;&gt;Zeile 221:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 221:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;You can download the source code as a ZIP file from the following link: https://www.satyria.de/arm/sources/assem/graphics.zip&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;You can download the source code as a ZIP file from the following link: https://www.satyria.de/arm/sources/assem/graphics.zip&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;| style=&quot;width: 33%; text-align:left;&quot; | [[Error Handling|&amp;lt; Back]] || style=&quot;width: 33%&quot; |[[English|^ Home]] || style=&quot;width: 33%; text-align:right;&quot; | [[Chars (PI5)e|Next &amp;gt;]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;/table&gt;</summary>
		<author><name>Satyria</name></author>
	</entry>
	<entry>
		<id>https://satyria.de/arm/index.php?title=Graphics_(PI5)&amp;diff=191&amp;oldid=prev</id>
		<title>Satyria: /* Kernel Breakdown */</title>
		<link rel="alternate" type="text/html" href="https://satyria.de/arm/index.php?title=Graphics_(PI5)&amp;diff=191&amp;oldid=prev"/>
		<updated>2024-08-19T19:20:25Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Kernel Breakdown&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 19. August 2024, 20:20 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l219&quot;&gt;Zeile 219:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 219:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;Endless loop&amp;#039;&amp;#039;:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;Endless loop&amp;#039;&amp;#039;:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*&amp;#039;&amp;#039;&amp;#039;999: b 999b&amp;#039;&amp;#039;&amp;#039;: An endless loop to keep the program running after the pixels are drawn and the error code is displayed.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*&amp;#039;&amp;#039;&amp;#039;999: b 999b&amp;#039;&amp;#039;&amp;#039;: An endless loop to keep the program running after the pixels are drawn and the error code is displayed.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;You can download the source code as a ZIP file from the following link: https://www.satyria.de/arm/sources/assem/graphics.zip&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Satyria</name></author>
	</entry>
	<entry>
		<id>https://satyria.de/arm/index.php?title=Graphics_(PI5)&amp;diff=126&amp;oldid=prev</id>
		<title>Satyria am 12. August 2024 um 12:03 Uhr</title>
		<link rel="alternate" type="text/html" href="https://satyria.de/arm/index.php?title=Graphics_(PI5)&amp;diff=126&amp;oldid=prev"/>
		<updated>2024-08-12T12:03:23Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 12. August 2024, 13:03 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Zeile 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;&#039;&#039;&#039;Note:&#039;&#039;&#039; On the Raspberry Pi 5, graphics have undergone significant changes, making it more challenging for BareMetal developers to program graphics correctly. There has already been a discussion on GitHub regarding this: Raspberry Pi Firmware Issue #1904.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; 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;&#039;&#039;&#039;Note:&#039;&#039;&#039; On the Raspberry Pi 5, graphics have undergone significant changes, making it more challenging for BareMetal developers to program graphics correctly. There has already been a discussion on GitHub regarding this: &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[https://github.com/raspberrypi/firmware/issues/1904 &lt;/ins&gt;Raspberry Pi Firmware Issue #1904&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=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;I am not pleased with this development or decision!&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;I am not pleased with this development or decision!&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Satyria</name></author>
	</entry>
	<entry>
		<id>https://satyria.de/arm/index.php?title=Graphics_(PI5)&amp;diff=103&amp;oldid=prev</id>
		<title>Satyria: Die Seite wurde neu angelegt: „&#039;&#039;&#039;Note:&#039;&#039;&#039; On the Raspberry Pi 5, graphics have undergone significant changes, making it more challenging for BareMetal developers to program graphics correctly. There has already been a discussion on GitHub regarding this: Raspberry Pi Firmware Issue #1904.  &#039;&#039;&#039;I am not pleased with this development or decision!&#039;&#039;&#039;  Nevertheless, I managed to implement a display on the Raspberry Pi 5 that is functional. Unlike previous models, the screen is set in the c…“</title>
		<link rel="alternate" type="text/html" href="https://satyria.de/arm/index.php?title=Graphics_(PI5)&amp;diff=103&amp;oldid=prev"/>
		<updated>2024-07-23T08:44:22Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039; On the Raspberry Pi 5, graphics have undergone significant changes, making it more challenging for BareMetal developers to program graphics correctly. There has already been a discussion on GitHub regarding this: Raspberry Pi Firmware Issue #1904.  &amp;#039;&amp;#039;&amp;#039;I am not pleased with this development or decision!&amp;#039;&amp;#039;&amp;#039;  Nevertheless, I managed to implement a display on the Raspberry Pi 5 that is functional. Unlike previous models, the screen is set in the c…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039; On the Raspberry Pi 5, graphics have undergone significant changes, making it more challenging for BareMetal developers to program graphics correctly. There has already been a discussion on GitHub regarding this: Raspberry Pi Firmware Issue #1904.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;I am not pleased with this development or decision!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Nevertheless, I managed to implement a display on the Raspberry Pi 5 that is functional. Unlike previous models, the screen is set in the config.txt file and is already available when the first boot occurs.&lt;br /&gt;
&lt;br /&gt;
We use the entry &amp;#039;&amp;#039;&amp;#039;framebuffer_depth=32&amp;#039;&amp;#039;&amp;#039; in the &amp;#039;&amp;#039;&amp;#039;config.txt&amp;#039;&amp;#039;&amp;#039; file. This entry creates a framebuffer with a depth of 32 bits and a resolution of 1920x1080 pixels.&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi has multiple processors responsible for different tasks. One of these processors (GPU) manages the graphics. Interestingly, this same processor is also responsible for the initial startup of the Raspberry Pi. After the initial initialization, it hands control over to the ARM processor.&lt;br /&gt;
&lt;br /&gt;
Since each processor works independently, we need a way for these processors to communicate with each other. For this purpose, a type of mailbox has been set up, where we send &amp;quot;letters&amp;quot; to specify what we want from the graphics processor. When the graphics processor responds, it uses the same mailbox. Naturally, as is typical in computer science, the format of the &amp;quot;letter&amp;quot; is defined, and we must adhere to these guidelines.&lt;br /&gt;
&lt;br /&gt;
=== Structure of a Mailbox Message ===&lt;br /&gt;
A TAG structure always begins with a 32-bit number indicating the length of the entire structure. This is followed by a 32-bit buffer to possibly store a response that will be transmitted during a call. Next come the individual TAGs. Each TAG has a basic structure: first, the name of the TAG is transmitted, followed by the number of values in bytes (32 bits, which is 4 bytes), and another buffer for the response. Then come the values for the respective TAG. The entire structure ends with a NULL TAG.&lt;br /&gt;
&lt;br /&gt;
* Mailbox Length&lt;br /&gt;
* Mailbox Request Code&lt;br /&gt;
** TAG1 Name&lt;br /&gt;
** TAG1 Length&lt;br /&gt;
** TAG1 Buffer&lt;br /&gt;
*** TAG1 Value1&lt;br /&gt;
*** TAG1 Value2&lt;br /&gt;
*** ...&lt;br /&gt;
** TAG2 Name&lt;br /&gt;
** ...&lt;br /&gt;
** TAGx NULL (End TAG)&lt;br /&gt;
For more information, you can refer to [https://github.com/raspberrypi/firmware/wiki/Mailbox-property-interface GitHub]. It is important that each TAG is aligned to 32 bits.&lt;br /&gt;
&lt;br /&gt;
Unlike previous models, it is easier to obtain the memory address of the graphics on the Raspberry Pi 5. Unfortunately, it is no longer possible to configure a desired display, such as the screen resolution. We must use what is available and request the graphics memory address with &amp;#039;&amp;#039;&amp;#039;PROPTAG_ALLOCATE_BUFFER&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Our structure for the mailbox call now looks as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
//**********************************************************&lt;br /&gt;
// Data&lt;br /&gt;
//**********************************************************&lt;br /&gt;
.section .data&lt;br /&gt;
.align 16&lt;br /&gt;
pScreen:&lt;br /&gt;
		.int pScreen_end - pScreen&lt;br /&gt;
		.int CODE_REQUEST&lt;br /&gt;
&lt;br /&gt;
        .int PROPTAG_ALLOCATE_BUFFER&lt;br /&gt;
        .int 8&lt;br /&gt;
        .int 4&lt;br /&gt;
m_nBufferPtr:&lt;br /&gt;
        .int 0&lt;br /&gt;
m_nBufferSize:&lt;br /&gt;
        .int 0&lt;br /&gt;
&lt;br /&gt;
        .int PROPTAG_END&lt;br /&gt;
pScreen_end:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We will pass the address of this structure in &amp;#039;&amp;#039;&amp;#039;x1&amp;#039;&amp;#039;&amp;#039; to the mailbox function that we will write, and we will write the mailbox channel in &amp;#039;&amp;#039;&amp;#039;w0&amp;#039;&amp;#039;&amp;#039;. For communication (ARM to VC), we use channel &amp;#039;&amp;#039;&amp;#039;8&amp;#039;&amp;#039;&amp;#039;, which we previously defined with &amp;#039;&amp;#039;&amp;#039;BCM_MAILBOX_PROP_OUT&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
// boolean Init_Screen (void)&lt;br /&gt;
.globl Init_Screen&lt;br /&gt;
Init_Screen:&lt;br /&gt;
	stp x29, x30, [sp, -16]!&lt;br /&gt;
	mov x29, sp&lt;br /&gt;
1:&lt;br /&gt;
	ldr w0,=BCM_MAILBOX_PROP_OUT  // Channel&lt;br /&gt;
	ldr x1,=pScreen               // Screen structure&lt;br /&gt;
	bl BcmMailBox_Write           // Call the mailbox&lt;br /&gt;
    &lt;br /&gt;
    ldr x0,=m_nBufferPtr          // Load the memory address&lt;br /&gt;
    ldr w0,[x0]&lt;br /&gt;
    cmp w0,#0&lt;br /&gt;
    beq 1b&lt;br /&gt;
    and w0,w0,#0x3FFFFFFF         // Adjust the address&lt;br /&gt;
    ldr x1,=graphicsAddress       // And store it&lt;br /&gt;
    str w0,[x1]&lt;br /&gt;
&lt;br /&gt;
    ldp x29, x30, [sp], 16&lt;br /&gt;
    ret&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In our tag list, we receive a response from the graphics chip under &amp;#039;&amp;#039;&amp;#039;PROPTAG_ALLOCATE_BUFFER&amp;#039;&amp;#039;&amp;#039;, indicating the address of the graphics memory. We have labeled this position in the tag as &amp;#039;&amp;#039;&amp;#039;m_nBufferPtr&amp;#039;&amp;#039;&amp;#039; so we can directly access it.&lt;br /&gt;
&lt;br /&gt;
If the memory address still holds a null value, we know that communication either has not occurred yet or there was an error. We call the mailbox repeatedly until we get a response.&lt;br /&gt;
&lt;br /&gt;
The address we get back is as seen by the graphics chip. However, since we are working on the ARM processor, we need to adjust the address to our address space. This is done with &amp;#039;&amp;#039;&amp;#039;and w0,w0,#0x3FFFFFFF&amp;#039;&amp;#039;&amp;#039;. Then we store this address under &amp;#039;&amp;#039;&amp;#039;graphicsAddress&amp;#039;&amp;#039;&amp;#039; so it is not lost.&lt;br /&gt;
&lt;br /&gt;
=== The Mailbox ===&lt;br /&gt;
Currently, we are keeping it very simple and leaving it to the calling program to evaluate the result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
.globl BcmMailBox_Write&lt;br /&gt;
// Inputs: x0 = nChannel, x1 = nData&lt;br /&gt;
BcmMailBox_Write:&lt;br /&gt;
    stp x29, x30, [sp, -16]!&lt;br /&gt;
    mov x29, sp&lt;br /&gt;
    ldr x2, =MAILBOX1_WRITE&lt;br /&gt;
    orr w1, w1, w0&lt;br /&gt;
    str w1, [x2]&lt;br /&gt;
    ldp x29, x30, [sp], 16&lt;br /&gt;
    ret&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
We store the address of the &amp;#039;&amp;#039;&amp;#039;MAILBOX1_WRITE&amp;#039;&amp;#039;&amp;#039; function in &amp;#039;&amp;#039;&amp;#039;x2&amp;#039;&amp;#039;&amp;#039;, combine the passed values &amp;#039;&amp;#039;&amp;#039;w0&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;x1&amp;#039;&amp;#039;&amp;#039; using the &amp;#039;&amp;#039;&amp;#039;orr&amp;#039;&amp;#039;&amp;#039; command, and write the result to the address.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Note&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
This is a very simple implementation of the mailbox function. Later, we will extend this, as we should first check if the mailbox is ready to process data. This is not always possible, and we would have to wait until the data in the mailbox is processed.&lt;br /&gt;
&lt;br /&gt;
=== DrawPixel Function ===&lt;br /&gt;
Now we have the graphics address, but so far, we can&amp;#039;t display anything. For this, we create a DrawPixel function.&lt;br /&gt;
&lt;br /&gt;
The function is passed the coordinates in &amp;#039;&amp;#039;&amp;#039;w0&amp;#039;&amp;#039;&amp;#039; (x) and &amp;#039;&amp;#039;&amp;#039;w1&amp;#039;&amp;#039;&amp;#039; (y). First, we check if the pixel fits on the screen. If not, we skip this function.&lt;br /&gt;
&lt;br /&gt;
If the pixel fits, we need to calculate the position in memory:&lt;br /&gt;
Each row can fit 1920 pixels. We multiply &amp;#039;&amp;#039;&amp;#039;y&amp;#039;&amp;#039;&amp;#039; by the number of pixels per row and add &amp;#039;&amp;#039;&amp;#039;x&amp;#039;&amp;#039;&amp;#039; to it. Since we have 32 bits (4 bytes) per pixel, we multiply the result by 4. This gives us the memory area that our screen point would occupy if the graphics address were zero. We simply add the graphics address to it.&lt;br /&gt;
&lt;br /&gt;
Now we have the calculated position where we can store our point. Since our system has a depth of 32 bits, representing the color, we just need to store our color value here.&lt;br /&gt;
&lt;br /&gt;
=== The Color ===&lt;br /&gt;
The color we use here is called ARGB. Each letter stands for a specific component:&lt;br /&gt;
&lt;br /&gt;
* A: Alpha (opacity)&lt;br /&gt;
* R: Red component&lt;br /&gt;
* G: Green component&lt;br /&gt;
* B: Blue component&lt;br /&gt;
Each value can range from 0 to 255. The higher the value, the more intense the color component or opacity. For simplicity, we will always choose an opacity of 100% and use the hexadecimal system:&lt;br /&gt;
&lt;br /&gt;
Examples of colors:&lt;br /&gt;
&lt;br /&gt;
* 0xffff0000: Red&lt;br /&gt;
* 0xff00ff00: Green&lt;br /&gt;
* 0xffffff00: Yellow&lt;br /&gt;
Before using the DrawPixel function, we store the color value as a variable &amp;#039;&amp;#039;&amp;#039;DrawColor&amp;#039;&amp;#039;&amp;#039; in memory. We read this value from there and copy it to the previously calculated position.&lt;br /&gt;
&lt;br /&gt;
Here is the code for the DrawPixel function:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
// void DrawPixel (x=w0, y=w1)&lt;br /&gt;
.globl DrawPixel&lt;br /&gt;
DrawPixel:&lt;br /&gt;
    stp x29, x30, [sp, -16]!&lt;br /&gt;
    stp x3, x4, [sp, -16]!&lt;br /&gt;
    mov x29, sp&lt;br /&gt;
&lt;br /&gt;
    cmp w0, #SCREEN_X         // Check if the pixel fits on the screen&lt;br /&gt;
    bge 1f&lt;br /&gt;
&lt;br /&gt;
    cmp w1, #SCREEN_Y&lt;br /&gt;
    bge 1f&lt;br /&gt;
&lt;br /&gt;
    mov w3, SCREEN_X&lt;br /&gt;
    mul w3, w3, w1&lt;br /&gt;
    add w3, w3, w0&lt;br /&gt;
&lt;br /&gt;
    lsl w3, w3, #2&lt;br /&gt;
&lt;br /&gt;
    ldr x4, =graphicsAddress&lt;br /&gt;
    ldr w4, [x4]&lt;br /&gt;
&lt;br /&gt;
    add w3, w3, w4&lt;br /&gt;
    ldr x2, =DrawColor&lt;br /&gt;
    ldr w2, [x2]&lt;br /&gt;
    str w2, [x3]&lt;br /&gt;
1:&lt;br /&gt;
    ldp x3, x4, [sp], 16&lt;br /&gt;
    ldp x29, x30, [sp], 16&lt;br /&gt;
    ret&lt;br /&gt;
&lt;br /&gt;
.section .data&lt;br /&gt;
DrawColor:&lt;br /&gt;
    .int 0xffffffff // for white&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DrawPixel Function in Action ===&lt;br /&gt;
Now we use our new function in our kernel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
//&lt;br /&gt;
// kernel.S&lt;br /&gt;
//&lt;br /&gt;
.section .text&lt;br /&gt;
.globl main&lt;br /&gt;
main:&lt;br /&gt;
    bl LED_off&lt;br /&gt;
    bl Init_Screen&lt;br /&gt;
    mov w10, 100&lt;br /&gt;
2:&lt;br /&gt;
    cmp w10, #500&lt;br /&gt;
    bge 1f&lt;br /&gt;
&lt;br /&gt;
    mov w0, w10&lt;br /&gt;
    mov w1, w10&lt;br /&gt;
    bl DrawPixel&lt;br /&gt;
    add w10, w10, #1&lt;br /&gt;
    b 2b&lt;br /&gt;
1:&lt;br /&gt;
    mov w0, #2&lt;br /&gt;
    bl LED_Error // To indicate the end.&lt;br /&gt;
999:&lt;br /&gt;
    b 999b&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We create a loop that counts from 100 to 500. We pass this value to the DrawPixel function as x and y. This creates a line that runs diagonally from the top left to the bottom right. If this is successfully executed, we intentionally go into error code 2 to see that the Raspberry has completed everything.&lt;br /&gt;
&lt;br /&gt;
==== Kernel Breakdown ====&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;bl LED_off&amp;#039;&amp;#039;&amp;#039;: Turns off the LED to ensure we have a defined initial state.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;bl Init_Screen&amp;#039;&amp;#039;&amp;#039;: Initializes the screen to ensure we have correctly obtained the graphics address.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Loop for drawing pixels&amp;#039;&amp;#039;:&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;mov w10, 100&amp;#039;&amp;#039;&amp;#039;: Sets the start value for the loop.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;cmp w10, #500&amp;#039;&amp;#039;&amp;#039;: Compares the current value of w10 with 500.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;bge 1f&amp;#039;&amp;#039;&amp;#039;: Jumps to label 1 if w10 is greater than or equal to 500 to end the loop.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;mov w0, w10&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;mov w1, w10&amp;#039;&amp;#039;&amp;#039;: Sets the x and y coordinates for the pixel to be drawn.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;bl DrawPixel&amp;#039;&amp;#039;&amp;#039;: Calls the DrawPixel function to draw the pixel.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;add w10, w10, #1&amp;#039;&amp;#039;&amp;#039;: Increases w10 by 1 to draw the next pixel.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;b 2b&amp;#039;&amp;#039;&amp;#039;: Jumps back to the beginning of the loop to draw the next pixel.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Error code indication&amp;#039;&amp;#039;:&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;mov w0, #2&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;bl LED_Error&amp;#039;&amp;#039;&amp;#039;: Sets the error code to 2 and calls the LED_Error function to indicate the end of execution.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Endless loop&amp;#039;&amp;#039;:&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;999: b 999b&amp;#039;&amp;#039;&amp;#039;: An endless loop to keep the program running after the pixels are drawn and the error code is displayed.&lt;/div&gt;</summary>
		<author><name>Satyria</name></author>
	</entry>
</feed>