<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://aoineko.org/msxgl/index.php?action=history&amp;feed=atom&amp;title=NEO_mapper%2FExtension2</id>
		<title>NEO mapper/Extension2 - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://aoineko.org/msxgl/index.php?action=history&amp;feed=atom&amp;title=NEO_mapper%2FExtension2"/>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;action=history"/>
		<updated>2026-09-27T21:00:14Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.30.2</generator>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4036&amp;oldid=prev</id>
		<title>Aoineko: /* Principles */</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4036&amp;oldid=prev"/>
				<updated>2026-09-26T20:13:07Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Principles&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&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 style=&quot;vertical-align: top;&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 20:13, 26 September 2026&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-l24&quot; &gt;Line 24:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 24:&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;|style=&amp;quot;background-color:#FAA;&amp;quot;| 0&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;|style=&amp;quot;background-color:#FAA;&amp;quot;| 0&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;|style=&amp;quot;background-color:#FAA;&amp;quot;| 0&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;|style=&amp;quot;background-color:#FAA;&amp;quot;| 0&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;|style=&amp;quot;background-color:#&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;BBB&lt;/del&gt;;&amp;quot;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;| 0&lt;/del&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;|style=&amp;quot;background-color:#&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;AAF&lt;/ins&gt;;&amp;quot; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;colspan&lt;/ins&gt;=&amp;quot;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;3&lt;/ins&gt;&amp;quot;| &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Bank&lt;/ins&gt;&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;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;|style&lt;/del&gt;=&amp;quot;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;background-color:#BBB;&amp;quot;| 0&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&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;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;|style=&amp;quot;background-color:#BBB;&lt;/del&gt;&amp;quot;| &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;0&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&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;|style=&amp;quot;background-color:#AAF;&amp;quot; colspan=&amp;quot;8&amp;quot;| Function&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;|style=&amp;quot;background-color:#AAF;&amp;quot; colspan=&amp;quot;8&amp;quot;| Function&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;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l38&quot; &gt;Line 38:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 36:&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;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;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;&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;&gt;&amp;#160;&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;=== Functions ===&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;=== Functions ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4035&amp;oldid=prev</id>
		<title>Aoineko at 20:11, 26 September 2026</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4035&amp;oldid=prev"/>
				<updated>2026-09-26T20:11:04Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&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 style=&quot;vertical-align: top;&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 20:11, 26 September 2026&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-l7&quot; &gt;Line 7:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 7:&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;=== Principles ===&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;=== Principles ===&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;−&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;Any write operation to the NEO mapper with &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;data bit 7 &lt;/del&gt;set to &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;1 and address bit &lt;/del&gt;0 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;set to 1 &lt;/del&gt;is considered &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;an &lt;/del&gt;access to extended features. In that case, the mapper bank register is not modified.&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;Any write operation to the NEO mapper with &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;address bits 10-12 &lt;/ins&gt;set to 0 is considered &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;as &lt;/ins&gt;access to extended features. In that case, the mapper bank register is not modified.&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;All other write operations should be considered normal access to the mapper's bank register.&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;All other write operations should be considered normal access to the mapper's bank register.&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;−&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;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;The data contains:&lt;/del&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;The address contains an 8-bit function &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ID&lt;/ins&gt;.&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;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;* The number of an extended function in the mapper&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&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;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;* A bit indicating whether the function should be enabled or disabled&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&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;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&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;The address contains an 8-bit &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;parameter to be passed to the &lt;/del&gt;function.&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&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;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;/table&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4034&amp;oldid=prev</id>
		<title>Aoineko: Created page with &quot;{{WARNING|This page is still in the proposal stage and should not yet be considered an official specification.}}  Proposal for an extension to the NEO mapper format.  == S...&quot;</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4034&amp;oldid=prev"/>
				<updated>2026-09-26T19:59:55Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;{{WARNING|This page is still in the proposal stage and should not yet be considered an official specification.}}  Proposal for an extension to the &lt;a href=&quot;/msxgl/index.php?title=NEO_mapper&quot; title=&quot;NEO mapper&quot;&gt;NEO mapper&lt;/a&gt; format.  == S...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{WARNING|This page is still in the proposal stage and should not yet be considered an official specification.}}&lt;br /&gt;
&lt;br /&gt;
Proposal for an extension to the [[NEO mapper]] format.&lt;br /&gt;
&lt;br /&gt;
== Specifications ==&lt;br /&gt;
&lt;br /&gt;
=== Principles ===&lt;br /&gt;
&lt;br /&gt;
Any write operation to the NEO mapper with data bit 7 set to 1 and address bit 0 set to 1 is considered an access to extended features. In that case, the mapper bank register is not modified.&lt;br /&gt;
&lt;br /&gt;
All other write operations should be considered normal access to the mapper's bank register.&lt;br /&gt;
&lt;br /&gt;
The data contains:&lt;br /&gt;
* The number of an extended function in the mapper&lt;br /&gt;
* A bit indicating whether the function should be enabled or disabled&lt;br /&gt;
&lt;br /&gt;
The address contains an 8-bit parameter to be passed to the function.&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
! 15 || 14 || 13 || 12 || 11 || 10 || 9 || 8 || 7 || 6 || 5 || 4 || 3 || 2 || 1 || 0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#BBB;&amp;quot; colspan=&amp;quot;2&amp;quot;| Page&lt;br /&gt;
|style=&amp;quot;background-color:#FAA;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#FAA;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#FAA;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#BBB;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#BBB;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#BBB;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#AAF;&amp;quot; colspan=&amp;quot;8&amp;quot;| Function&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ DATA&lt;br /&gt;
|-&lt;br /&gt;
! 7 || 6 || 5 || 4 || 3 || 2 || 1 || 0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#AAF;&amp;quot; colspan=&amp;quot;8&amp;quot;| Parameter&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
==== 0x00: Cartridge information ====&lt;br /&gt;
When activated, any read access to the given bank will return the cartridge information (8 KB, mirrored on NEO-16).&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ PARAMETER&lt;br /&gt;
|-&lt;br /&gt;
! 8 || 7 || 6 || 5 || 4 || 3 || 2 || 1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#BBB;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#BBB;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#BBB;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#BBB;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#BBB;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#AAF;&amp;quot; colspan=&amp;quot;5&amp;quot;| ROM Bank&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Action || Pseudo-code&lt;br /&gt;
|-&lt;br /&gt;
| Activate information in bank 2 of NEO-16 || &amp;lt;tt&amp;gt;[0x7005] = 0xC0&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Read information (offset +5) from bank 2 of NEO-16 || &amp;lt;tt&amp;gt;BankSize = [0x8005]&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Disactivate information in bank 2 of NEO-16 || &amp;lt;tt&amp;gt;[0x7005] = 0x80&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x01: Cartridge configuration ====&lt;br /&gt;
&lt;br /&gt;
==== 0x04: Activate SRAM/FRAM ====&lt;br /&gt;
When activated, any read/write access to the specified bank (defined in the parameter) is redirected to the selected segment of the SRAM/FRAM.&lt;br /&gt;
&lt;br /&gt;
SRAM/FRAM is accessed through 8 KB segments (on the NEO-16, the segment is mirrored).&lt;br /&gt;
&lt;br /&gt;
Up to 16 segments can be accessed, for a total capacity of 128 KB.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ PARAMETER&lt;br /&gt;
|-&lt;br /&gt;
! 8 || 7 || 6 || 5 || 4 || 3 || 2 || 1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#AAF;&amp;quot; colspan=&amp;quot;4&amp;quot;| RAM Segment&lt;br /&gt;
|style=&amp;quot;background-color:#BBB;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#AAF;&amp;quot; colspan=&amp;quot;5&amp;quot;| ROM Bank&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x05: Activate device ====&lt;br /&gt;
Activate or disactivate the given device.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ PARAMETER&lt;br /&gt;
|-&lt;br /&gt;
! 8 || 7 || 6 || 5 || 4 || 3 || 2 || 1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background-color:#BBB;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#BBB;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#BBB;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#AAF;&amp;quot; colspan=&amp;quot;5&amp;quot;| Device ID&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Devices:&lt;br /&gt;
* &amp;lt;tt&amp;gt;00&amp;lt;/tt&amp;gt;: MSX-Music (OPLL)&lt;br /&gt;
* &amp;lt;tt&amp;gt;01&amp;lt;/tt&amp;gt;: MSX-Audio&lt;br /&gt;
* &amp;lt;tt&amp;gt;02&amp;lt;/tt&amp;gt;: SCC&lt;br /&gt;
* &amp;lt;tt&amp;gt;03&amp;lt;/tt&amp;gt;: SCC+&lt;br /&gt;
* &amp;lt;tt&amp;gt;04&amp;lt;/tt&amp;gt;: 2nd PSG (port 10h)&lt;br /&gt;
* &amp;lt;tt&amp;gt;05&amp;lt;/tt&amp;gt;: Darky (2 x ePSG)&lt;br /&gt;
* &amp;lt;tt&amp;gt;06&amp;lt;/tt&amp;gt;: Darky Jr. (2 x PSG)&lt;br /&gt;
* &amp;lt;tt&amp;gt;08&amp;lt;/tt&amp;gt;: OPM (SFK-01, SFG-01 et SFG-05 ver.1)&lt;br /&gt;
* &amp;lt;tt&amp;gt;09&amp;lt;/tt&amp;gt;: OPP (SFG-05 ver.2)&lt;br /&gt;
* &amp;lt;tt&amp;gt;12&amp;lt;/tt&amp;gt;: OPL4&lt;br /&gt;
* &amp;lt;tt&amp;gt;15&amp;lt;/tt&amp;gt;: SAM2695&lt;br /&gt;
&lt;br /&gt;
== Appendix ==&lt;br /&gt;
=== Programmable processor and emulation ===&lt;br /&gt;
Here is a pseudo code in C to handle NEO mappers extension for programmable processor based cartridges or for emulators:&lt;br /&gt;
&lt;br /&gt;
NEO-16 mapper:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
const uint8* romData; // ROM data&lt;br /&gt;
uint16 bankValue[3]; // Bank switching register value&lt;br /&gt;
&lt;br /&gt;
// Extended function prototypes&lt;br /&gt;
typedef void (*funcEnable_t)(bool, uint8);&lt;br /&gt;
typedef void (*funcWrite_t)(uint16, uint8);&lt;br /&gt;
typedef uint8 (*funcRead_t)(uint16);&lt;br /&gt;
// Extended functions table&lt;br /&gt;
funcEnable_t funcEnableTable[32];&lt;br /&gt;
funcWrite_t funcWriteTable[3];&lt;br /&gt;
funcRead_t funcReadTable[3];&lt;br /&gt;
&lt;br /&gt;
// Handle device initialization&lt;br /&gt;
void NEO16_Init()&lt;br /&gt;
{&lt;br /&gt;
	for (uint8 i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
	{&lt;br /&gt;
		bankValue[i] = 0x0000;&lt;br /&gt;
		funcWriteTable[i] = NULL;&lt;br /&gt;
		funcReadTable[i] = NULL;		&lt;br /&gt;
	}&lt;br /&gt;
	for (uint8 i = 0; i &amp;lt; 32; i++)&lt;br /&gt;
		funcEnableTable[i] = NULL;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Handle write access&lt;br /&gt;
void NEO16_Write(uint16 address, uint8 value)&lt;br /&gt;
{&lt;br /&gt;
	uint8 bank = ((address &amp;gt;&amp;gt; 12) &amp;amp; 0x03) - 1; // Get the corresponding bank number&lt;br /&gt;
	if (bank &amp;gt; 2)&lt;br /&gt;
		return; // skip&lt;br /&gt;
&lt;br /&gt;
	if (funcWriteTable[bank] != NULL) // Check for bank write callback&lt;br /&gt;
	{&lt;br /&gt;
		funcWriteTable[bank](address, value);&lt;br /&gt;
	}&lt;br /&gt;
	else if ((address &amp;amp; 0x0001) &amp;amp;&amp;amp; (value &amp;amp; 0x80)) // Handle extended function&lt;br /&gt;
	{&lt;br /&gt;
		uint8 funcId = value &amp;amp; 0x3F; // Get function ID&lt;br /&gt;
		if (funcEnableTable[funcId] != NULL)&lt;br /&gt;
			funcEnableTable[funcId](value &amp;amp; 0x40, (address &amp;gt;&amp;gt; 1) &amp;amp; 0xFF); // Execute function specific code&lt;br /&gt;
	}&lt;br /&gt;
	else // Write to the given bank register&lt;br /&gt;
	{&lt;br /&gt;
		if (address &amp;amp; 1) // Set bank register MSB&lt;br /&gt;
			bankValue[bank] = ((value &amp;amp; 0x0F) &amp;lt;&amp;lt; 8) | (bankValue[bank] &amp;amp; 0x00FF);&lt;br /&gt;
		else // Set bank register LSB&lt;br /&gt;
			bankValue[bank] = (bankValue[bank] &amp;amp; 0xFF00) | (value);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Handle read access&lt;br /&gt;
uint8 NEO16_Read(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	uint8 bank = address &amp;gt;&amp;gt; 14; // Get the corresponding bank number&lt;br /&gt;
	if (bank &amp;gt; 2)&lt;br /&gt;
		return 0xFF; // skip&lt;br /&gt;
&lt;br /&gt;
	if (funcReadTable[bank] != NULL) // Check for bank read callback&lt;br /&gt;
		return funcReadTable[bank](address);&lt;br /&gt;
	else&lt;br /&gt;
		return romData[(bankValue[bank]) &amp;lt;&amp;lt; 14 + (address &amp;amp; 0x3FFF)];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Extension example ===&lt;br /&gt;
Here is a pseudo code in C to handle a SRAM extension for NEO mapper:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
uint8 sramSeg; // Current SRAM segment [0:15]&lt;br /&gt;
uint8 sramBank; // Current bank where SRAM is selected (0xFF if not selected)&lt;br /&gt;
uint8* sramData; // SRAM data (hardware specific)&lt;br /&gt;
&lt;br /&gt;
// Write to SRAM&lt;br /&gt;
void SRAM_Write(uint16 address, uint8 value)&lt;br /&gt;
{&lt;br /&gt;
	sramData[(sramSeg * 0x2000) + (address &amp;amp; 0x1FFF)] = value; // &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Read from SRAM&lt;br /&gt;
uint8 SRAM_Read(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	return sramData[(sramSeg * 0x2000) + (address &amp;amp; 0x1FFF)];	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Enable/disable SRAM feature&lt;br /&gt;
void SRAM_Enable(bool enable, uint8 param)&lt;br /&gt;
{&lt;br /&gt;
	if (sramBank != 0xFF) // Disable previous SRAM registration&lt;br /&gt;
	{&lt;br /&gt;
		if (funcWriteTable[sramBank] == SRAM_Write)&lt;br /&gt;
			funcWriteTable[sramBank] = NULL;&lt;br /&gt;
		if (funcReadTable[sramBank] == SRAM_Read)&lt;br /&gt;
			funcReadTable[sramBank] = NULL;&lt;br /&gt;
		sramBank = 0xFF;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if (enable) // Enable a SRAM segment in the given bank&lt;br /&gt;
	{&lt;br /&gt;
		uint8 bank = param &amp;amp; 0x07; // Get bank number&lt;br /&gt;
		if (bank &amp;gt; 2)&lt;br /&gt;
			return; // skip (for NEO-16)&lt;br /&gt;
&lt;br /&gt;
		sramSeg = (param &amp;gt;&amp;gt; 4) &amp;amp; 0x0F; // SRAM segment number&lt;br /&gt;
		sramBank = bank;&lt;br /&gt;
		funcWriteTable[sramBank] = SRAM_Write; // Register SRAM callbacks&lt;br /&gt;
		funcReadTable[sramBank] = SRAM_Read;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Initialize SRAM feature&lt;br /&gt;
void SRAM_Init()&lt;br /&gt;
{&lt;br /&gt;
	sramBank = 0xFF;&lt;br /&gt;
	funcEnableTable[0x04] = SRAM_Enable; // Register to function 0x04 (SRAM/FRAM feature)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, you just need to call &amp;lt;tt&amp;gt;SRAM_Init()&amp;lt;/tt&amp;gt; from &amp;lt;tt&amp;gt;NEO16_Init()&amp;lt;/tt&amp;gt; to register the extended feature.&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	</feed>