<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://aoineko.org/msxgl/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aoineko</id>
		<title>MSX Game Library - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://aoineko.org/msxgl/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aoineko"/>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=Special:Contributions/Aoineko"/>
		<updated>2026-10-27T13:00:25Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.30.2</generator>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=Projects&amp;diff=4063</id>
		<title>Projects</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=Projects&amp;diff=4063"/>
				<updated>2026-10-25T14:35:48Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: /* Released software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here's a list of known projects (games, applications or demos) using {{MSXGL}}:&lt;br /&gt;
&lt;br /&gt;
== Released software ==&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Genre&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Author&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Release&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Target&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Link&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;MSXgl Version&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Signature&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Image&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=msx3d&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=JBikker&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2022, Feb.&lt;br /&gt;
|site=https://github.com/jbikker/msx3d&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=0.3.0&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://msxvillage.fr/upload/msx3d.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Simple scroller&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=xchip&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2022, Apr.&lt;br /&gt;
|site=https://github.com/aguaviva/msx1_smooth_scroller&lt;br /&gt;
|webmsx=https://webmsx.org/?ROM=https://github.com/aguaviva/msx1_smooth_scroller/raw/refs/heads/main/precompiled/template.rom&amp;amp;MACHINE=MSX1A&lt;br /&gt;
|version=0.3.2&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/scroller.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=VATT&lt;br /&gt;
|genre=Tool&lt;br /&gt;
|author=Aoineko&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX122P&lt;br /&gt;
|state=✅ 2023, Apr.&lt;br /&gt;
|site=https://github.com/aoineko-fr/VATT&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=0.9.10&lt;br /&gt;
|signature=&amp;quot;GLVT&amp;quot;&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/VATT/master/doc/vatt.jpg&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Mandoroids&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Igor Moreno&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Apr.&lt;br /&gt;
|site=https://github.com/MorenoIgor/Mandoroids&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/MorenoIgor/Mandoroids/raw/main/mandoroids/emul/rom/mandoroids.rom&lt;br /&gt;
|code=https://github.com/MorenoIgor/Mandoroids/tree/main/mandoroids&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=https://user-images.githubusercontent.com/35140312/233985120-45d4fb8e-fe30-47a0-a8ec-93438ad86cc3.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Martian War&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_16K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2023, May&lt;br /&gt;
|site=https://www.msxdev.org/2023/05/06/msxdev23-07-martian-war/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=martianwar&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;FPMW&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/05/MSXdev23_MartianWar_v1.0_001-1024x766.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/05/MSXdev23_MartianWar_v1.0_002-1024x768.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=screen3&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=HSK&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2023, May&lt;br /&gt;
|site=https://github.com/hsk/msxgl/tree/main&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=Unknown&lt;br /&gt;
|image1=http://aoineko.org/files/hsk_screen3v4.gif&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=A Lone Wolf&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=FutureDisk&lt;br /&gt;
|target=DISK&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|ext1=MSXMUSIC&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Jul.&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;FDLW&amp;quot;&lt;br /&gt;
|image1=https://www.msx.org/sites/default/files/news/2024/11/WMSX_Screen_1.png&lt;br /&gt;
|image2=https://www.msx.org/sites/default/files/news/2024/11/WMSX_Screen_2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Eggy’s Maze&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Bik5 (JBikker)&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2023, Aug.&lt;br /&gt;
|site=https://www.msxdev.org/2023/08/30/msxdev23-15-eggys-maze/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=eggysmaze&lt;br /&gt;
|purchase=https://cotegamers.com/shop/en/accueil/177-eggy-s-maze-preorder.html&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;B5EM&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/08/MSXdev23_EggysMaze_v1.0.0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/08/MSXdev23_EggysMaze_v1.0.0002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Attack of the&amp;lt;br/&amp;gt;Petscii Robots&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=RoboSoft (ToriHino)&lt;br /&gt;
|target=ROM_ASCII8_2M&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=V9990&lt;br /&gt;
|ext2=OPL4&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Sep.&lt;br /&gt;
|site=https://www.msxdev.org/2023/09/19/msxdev23-18-attack-of-the-petscii-robots/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=attackofthepetsciirobots&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;RSPE&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/09/MSXdev23_AttackofthePetsciiRobots_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/09/MSXdev23_AttackofthePetsciiRobots_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Crawlers&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|ext1=NINJATAP&lt;br /&gt;
|ext2=PAC&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Oct.&lt;br /&gt;
|site=https://github.com/aoineko-fr/Crawlers&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/aoineko-fr/Crawlers/raw/master/emul/rom/crawlers.rom&amp;amp;PRESETS=PAC2&lt;br /&gt;
|purchase=https://www.ebsoft.fr/shop/fr/home/117-crawlers.html&lt;br /&gt;
|version=0.10.1&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,1&lt;br /&gt;
|image1=https://github.com/aoineko-fr/MSXgl/raw/main/engine/doc/img/crawlers.png&lt;br /&gt;
|image2=https://github.com/aoineko-fr/MSXgl/raw/main/engine/doc/img/crawlers_2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Phenix Corrupta&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Casper Croes&lt;br /&gt;
|target=ROM_ASCII8_512K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2023, Oct.&lt;br /&gt;
|site=https://www.msxdev.org/2023/10/16/msxdev23-27-phenix-corrupta/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=phenixcorrupta&lt;br /&gt;
|purchase=https://cotegamers.com/shop/fr/accueil/187-phenix-corrupta-msx-precommande.html&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;CCPC&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_PhenixCorrupta_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_PhenixCorrupta_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Tetpuz&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Totta&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2023, Oct.&lt;br /&gt;
|site=https://www.msxdev.org/2023/10/17/msxdev23-28-tetpuz/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=tetpuz&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;TTTP&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_Tetpuz_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_Tetpuz_v1.0_002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=NY2024&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2024, Jan.&lt;br /&gt;
|site=https://github.com/aoineko-fr/NY2024&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/aoineko-fr/NY2024&lt;br /&gt;
|purchase=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;GL24&amp;quot;&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
|video=Yd4Q1YYXJbA&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Sam.Pr&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2024, Jul.&lt;br /&gt;
|site=https://www.msxdev.org/2024/07/16/msxdev24-07-sam-pr/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=sampr&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;FPSP&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2024/07/MSXdev24_Sam.Pr_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2024/07/MSXdev24_Sam.Pr_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Alley Cat&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Rutagames (Diogo Patrão)&lt;br /&gt;
|target=ROM_ASCII8_128K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2024, Nov.&lt;br /&gt;
|site=https://sites.google.com/view/alleycatparamsx/&lt;br /&gt;
|purchase=https://sites.google.com/view/alleycatparamsx/&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=https://aoineko.org/msxgl/images/thumb/9/92/AllyCatTitle.png/724px-AllyCatTitle.png&lt;br /&gt;
|image2=https://aoineko.org/msxgl/images/c/c3/AlleyCatGame.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Sam.Pr Explore&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_ASCII16_256K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2024, Dec.&lt;br /&gt;
|site=https://www.msxdev.org/2024/12/20/msxdev24-19-sam-pr-explorer/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=samprexplorer&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;FPEX&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2024/12/Msxdev24_sam.prexplorer_v1.0_0002.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2024/12/Msxdev24_sam.prexplorer_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=NY2025&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Jan.&lt;br /&gt;
|site=https://github.com/aoineko-fr/NY2025&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/aoineko-fr/NY2025&lt;br /&gt;
|purchase=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;GL25&amp;quot;&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
|video=Rl-1g2TtrtA&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Room 5&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=MO5.com&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=✅ 2025, Jan.&lt;br /&gt;
|site=https://mo5com.itch.io/room-5&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/Asso-MO5/room5/raw/main/room5/emul/rom/Room5.rom&lt;br /&gt;
|version=0.10.1&lt;br /&gt;
|signature=&amp;quot;MOR5&amp;quot;&lt;br /&gt;
|image1=https://img.itch.zone/aW1hZ2UvMjEzNTQ1Mi8xMzQ2MTQ1MC5qcGc=/original/YUiAHD.jpg&lt;br /&gt;
|image2=https://img.itch.zone/aW1hZ2UvMjEzNTQ1Mi8xMzQ2MTQ2Ny5qcGc=/original/Ssow9u.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Super Sokoban&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=2NICE&lt;br /&gt;
|target=ROM_KONAMI_SCC_128K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, March&lt;br /&gt;
|site=https://www.msxdev.org/2025/01/28/msxdev24-28-super-sokoban/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=supersokoban&lt;br /&gt;
|version=1.2.12&lt;br /&gt;
|signature=&amp;quot;2NSO&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2025/01/MSXdev24_SuperSokoban_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2025/01/MSXdev24_SuperSokoban_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Doomlings&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Totta&lt;br /&gt;
|target=ROM_ASCII16_256K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2025, Jan.&lt;br /&gt;
|site=https://www.msxdev.org/2025/02/03/msxdev24-31-doomlings/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=doomlings&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;TTDL&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2025/02/Msxdev24_doomlings_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2025/02/Msxdev24_doomlings_v1.0_0002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=EMinEx&lt;br /&gt;
|genre=Tool&lt;br /&gt;
|author=LudoJoey&lt;br /&gt;
|target=BIN_TAPE&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2025, Apr.&lt;br /&gt;
|site=https://github.com/ludosevilla/EMinEx&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://raw.githubusercontent.com/ludosevilla/EMinEx/refs/heads/main/images/minipavi.png&lt;br /&gt;
|image2=https://raw.githubusercontent.com/ludosevilla/EMinEx/refs/heads/main/images/meteo.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Peng Pong&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=✅ 2025, March&lt;br /&gt;
|site=https://github.com/aoineko-fr/PengPong&lt;br /&gt;
|webmsx=https://webmsx.org/?ROM=https://github.com/aoineko-fr/PengPong/raw/refs/heads/master/emul/rom/pengpong.rom&lt;br /&gt;
|version=1.3.0&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,3&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/PengPong/master/doc/img/pengpong1.png&lt;br /&gt;
|image2=https://raw.githubusercontent.com/aoineko-fr/PengPong/master/doc/img/pengpong2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Toride no Kōbō&amp;lt;br/&amp;gt;砦の攻防&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Hando&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Sep.&lt;br /&gt;
|site=https://github.com/handomade/ToridenoKoubou-for-MSX2&lt;br /&gt;
|webmsx=https://webmsx.org/?ROM=https://github.com/handomade/ToridenoKoubou-for-MSX2/raw/refs/heads/main/Toride.rom&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://aoineko.org/msxgl/images/thumb/6/6e/Game_fortress_01.png/775px-Game_fortress_01.png&lt;br /&gt;
|image2=https://aoineko.org/msxgl/images/thumb/3/37/Game_fortress_02.png/775px-Game_fortress_02.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=The new Castle&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Nicola Brogelli&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2025, October&lt;br /&gt;
|site=https://www.msxdev.org/2025/10/18/msxdev25-13-the-new-castle/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=thenewcastle&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2025/10/Msxdev25_thenewcastle_v1.0_0001.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2025/10/Msxdev25_thenewcastle_v1.0_0002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=TerMSX&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Diogo Patrão&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Nov.&lt;br /&gt;
|site=https://rutagamesltda.itch.io/termsx&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://img.itch.zone/aW1nLzIzOTAyMzMzLnBuZw==/315x250%23c/kVbbsO.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Super Sokoban&amp;lt;br/&amp;gt;Xmas quiz '25&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=2NICE&lt;br /&gt;
|target=ROM_KONAMI_128K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Dec.&lt;br /&gt;
|site=https://2nicemsx.nl/super-sokoban/xmasquiz/&lt;br /&gt;
|webmsx=https://2nicemsx.nl/super-sokoban/xmasquiz/webmsx/&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=https://2nicemsx.nl/super-sokoban/xmasquiz/img/supersokobanxmas1.jpg&lt;br /&gt;
|image2=https://2nicemsx.nl/super-sokoban/xmasquiz/img/supersokobanxmas3.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=NY2026&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_48K_ISR&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, Jan.&lt;br /&gt;
|site=https://github.com/aoineko-fr/NY2026&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/aoineko-fr/NY2026&lt;br /&gt;
|purchase=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;GL26&amp;quot;&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
|video=1kbN7VnbfaU&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=DELTA&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Bik5 (JBikker)&lt;br /&gt;
|target=ROM_ASCII16_4M&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|ext1=SCC&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2026, February&lt;br /&gt;
|site=https://www.msxdev.org/2026/02/21/msxdev25-30-delta/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=delta&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;B5R3&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_DELTA_v1.0_000.jpg&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_DELTA_v1.0_002.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=TerMSX Multi&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Rutagames (Diogo Patrão)&lt;br /&gt;
|target=ROM_ASCII8_512K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, February&lt;br /&gt;
|site=https://www.msxdev.org/2026/02/26/msxdev25-32-termsx/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=termsx&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;RGTM&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/01/Msxdev25_termsx_v1.0_001.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/02/Msxdev25_termsx_v1.0_002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Soccer League&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_YAMANOOTO_8M&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=V9990&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/02/msxdev25-34-soccer-league/&lt;br /&gt;
|webmsx=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_SoccerLeague_v1.2.zip&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;FPSL&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_SoccerLeague_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_SoccerLeague_v1.0_005.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=AstroJump&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Tiago Tresoldi&amp;lt;br/&amp;gt;Freja Lindgren&lt;br /&gt;
|target=ROM_16K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/05/msxdev25-35-astrojump/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=astrojump&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;RGAJ&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/Msxdev25_astrojump_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/Msxdev25_astrojump_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Chrono Runner&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=MSX Italia Association&lt;br /&gt;
|target=ROM_ASCII16_128K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/14/msxdev25-38-chrono-runner/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=chronorunner&lt;br /&gt;
|source=https://github.com/AssociazioneMsxItalia/Chrono-runners&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;AMCR&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/msxdev25_chrono-runner_v1.0-0001.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/msxdev25_chrono-runner_v1.0-0005.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Tiny Tetris VS&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Antxiko&lt;br /&gt;
|target=ROM_16K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/16/msxdev25-44-tiny-tetris-vs/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=tinytetrisvs&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_TinyTetrisVS_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_TinyTetrisVS_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Soul Trapped&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Casper Croes&amp;lt;br/&amp;gt;[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_NEO16_16M&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=MSXMUSIC&lt;br /&gt;
|ext2=MOUSE&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/18/msxdev25-47-soul-trapped/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=soultrapped&lt;br /&gt;
|version=1.4.0&lt;br /&gt;
|signature=&amp;quot;CCTR&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_SoulTrapped_v1.0_01.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_SoulTrapped_v1.0_03.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Snake Exacape&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=2NICE&lt;br /&gt;
|target=ROM_64K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|ext1=MSXMUSIC&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://2nicemsx.nl/snake-escape&lt;br /&gt;
|webmsx=https://2nicemsx.nl/snake-escape/webmsx&lt;br /&gt;
|version=1.2.12&lt;br /&gt;
|signature=&amp;quot;2NSE&amp;quot;&lt;br /&gt;
|image1=https://2nicemsx.nl/snake-escape/img/snakeescape1.jpg&lt;br /&gt;
|image2=https://2nicemsx.nl/snake-escape/img/snakeescape2.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=MUGI&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Hando&lt;br /&gt;
|target=ROM_48K_ISR&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, May&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=&amp;quot;HNMG&amp;quot;&lt;br /&gt;
|image1=https://aoineko.org/msxgl/images/thumb/b/b6/Game_mugi_01.png/775px-Game_mugi_01.png&lt;br /&gt;
|image2=https://aoineko.org/msxgl/images/thumb/6/60/Game_mugi_02.png/775px-Game_mugi_02.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=City MSX&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=BigFive (mgoulartBR)&lt;br /&gt;
|target=ROM ASCII16&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, Sep.&lt;br /&gt;
|site=https://mgoulartbr.itch.io/city-msx&lt;br /&gt;
|purchase=https://mgoulartbr.itch.io/city-msx&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://i.postimg.cc/P5P4sxTp/859c2b11-9446-4212-9435-e7ce8df679e4.png&lt;br /&gt;
|image2=https://i.postimg.cc/zXD777M5/demo-city-itch.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Berzerk&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Pixel Forge&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, Sep.&lt;br /&gt;
|site=https://www.msxdev.org/2026/09/21/msxdev26-02-berzerk/&lt;br /&gt;
|purchase=&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=berzerk&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/09/MSXdev26_Berzerk_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/09/MSXdev26_Berzerk_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Invictus&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Pablo David Garaguso&lt;br /&gt;
|target=ROM_ASCII16_128K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, Oct.&lt;br /&gt;
|site=https://www.msxdev.org/2026/10/24/msxdev26-09-invictus/&lt;br /&gt;
|purchase=&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=invictus&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/10/MSXdev26_Invictus_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/10/MSXdev26_Invictus_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Wizzl&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (GFX)&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|ext1=PAC&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2026, Oct.&lt;br /&gt;
|site=https://wizzl.lululand.fr/&lt;br /&gt;
|purchase=https://wizzl.lululand.fr/&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=1.5.2&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,4&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/wizzl_1.png&lt;br /&gt;
|image2=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/wizzl_2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Work in progress software ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Genre&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Author&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Release&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Target&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Link&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;MSXgl Version&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Signature&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Image&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Final Smash&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=https://github.com/aoineko-fr/FinalSmash&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/aoineko-fr/FinalSmash/raw/master/emul/rom/tennis.rom&lt;br /&gt;
|version=0.9.0&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,2&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/finalsmash.jpg&lt;br /&gt;
|image2=https://msxvillage.fr/upload/fs_score.gif&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Popeye&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Wim&lt;br /&gt;
|target=&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=Unknown&lt;br /&gt;
|image1=https://cdn.discordapp.com/attachments/574951023374761988/1164328603375374448/image.png?ex=6542d083&amp;amp;is=65305b83&amp;amp;hm=c3b357b359cbc2b3809277cac00ca8252242d1977f0c950e2927230d9aa346f9&amp;amp;&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Duæl Drop&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Totta&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=1.0.0&lt;br /&gt;
|signature=&amp;quot;TTDD&amp;quot;&lt;br /&gt;
|image1=https://cdn.discordapp.com/attachments/1049454935261073409/1227685092323754035/DuaelDrop-7.png?ex=672e56d7&amp;amp;is=672d0557&amp;amp;hm=06e8a0789277e4f07bb046520c4129c99a39d89d479a107a6fca0f718db56978&amp;amp;&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Debug-Riken&amp;lt;br/&amp;gt;デバグリケン&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=HtDreams&lt;br /&gt;
|target=&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=GBMSX&lt;br /&gt;
|genre=Tool&lt;br /&gt;
|author=Bruno Catao&lt;br /&gt;
|target=DOS2&lt;br /&gt;
|msx=MSX2+&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=https://github.com/brunogamacatao/msxgb&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/brunogamacatao/msxgb&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Samples programs ==&lt;br /&gt;
&lt;br /&gt;
MSXgl is supplied with a [[Samples|large number of sample programs]] which you can use as a reference for using the engine's various features.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_game.png&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_draw.jpg&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_clock.jpg&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_swtile.png&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/html&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=Projects&amp;diff=4062</id>
		<title>Projects</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=Projects&amp;diff=4062"/>
				<updated>2026-10-25T14:34:42Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here's a list of known projects (games, applications or demos) using {{MSXGL}}:&lt;br /&gt;
&lt;br /&gt;
== Released software ==&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Genre&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Author&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Release&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Target&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Link&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;MSXgl Version&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Signature&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Image&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=msx3d&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=JBikker&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2022, Feb.&lt;br /&gt;
|site=https://github.com/jbikker/msx3d&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=0.3.0&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://msxvillage.fr/upload/msx3d.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Simple scroller&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=xchip&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2022, Apr.&lt;br /&gt;
|site=https://github.com/aguaviva/msx1_smooth_scroller&lt;br /&gt;
|webmsx=https://webmsx.org/?ROM=https://github.com/aguaviva/msx1_smooth_scroller/raw/refs/heads/main/precompiled/template.rom&amp;amp;MACHINE=MSX1A&lt;br /&gt;
|version=0.3.2&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/scroller.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=VATT&lt;br /&gt;
|genre=Tool&lt;br /&gt;
|author=Aoineko&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX122P&lt;br /&gt;
|state=✅ 2023, Apr.&lt;br /&gt;
|site=https://github.com/aoineko-fr/VATT&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=0.9.10&lt;br /&gt;
|signature=&amp;quot;GLVT&amp;quot;&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/VATT/master/doc/vatt.jpg&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Mandoroids&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Igor Moreno&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Apr.&lt;br /&gt;
|site=https://github.com/MorenoIgor/Mandoroids&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/MorenoIgor/Mandoroids/raw/main/mandoroids/emul/rom/mandoroids.rom&lt;br /&gt;
|code=https://github.com/MorenoIgor/Mandoroids/tree/main/mandoroids&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=https://user-images.githubusercontent.com/35140312/233985120-45d4fb8e-fe30-47a0-a8ec-93438ad86cc3.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Martian War&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_16K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2023, May&lt;br /&gt;
|site=https://www.msxdev.org/2023/05/06/msxdev23-07-martian-war/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=martianwar&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;FPMW&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/05/MSXdev23_MartianWar_v1.0_001-1024x766.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/05/MSXdev23_MartianWar_v1.0_002-1024x768.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=screen3&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=HSK&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2023, May&lt;br /&gt;
|site=https://github.com/hsk/msxgl/tree/main&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=Unknown&lt;br /&gt;
|image1=http://aoineko.org/files/hsk_screen3v4.gif&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=A Lone Wolf&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=FutureDisk&lt;br /&gt;
|target=DISK&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|ext1=MSXMUSIC&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Jul.&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;FDLW&amp;quot;&lt;br /&gt;
|image1=https://www.msx.org/sites/default/files/news/2024/11/WMSX_Screen_1.png&lt;br /&gt;
|image2=https://www.msx.org/sites/default/files/news/2024/11/WMSX_Screen_2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Eggy’s Maze&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Bik5 (JBikker)&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2023, Aug.&lt;br /&gt;
|site=https://www.msxdev.org/2023/08/30/msxdev23-15-eggys-maze/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=eggysmaze&lt;br /&gt;
|purchase=https://cotegamers.com/shop/en/accueil/177-eggy-s-maze-preorder.html&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;B5EM&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/08/MSXdev23_EggysMaze_v1.0.0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/08/MSXdev23_EggysMaze_v1.0.0002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Attack of the&amp;lt;br/&amp;gt;Petscii Robots&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=RoboSoft (ToriHino)&lt;br /&gt;
|target=ROM_ASCII8_2M&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=V9990&lt;br /&gt;
|ext2=OPL4&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Sep.&lt;br /&gt;
|site=https://www.msxdev.org/2023/09/19/msxdev23-18-attack-of-the-petscii-robots/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=attackofthepetsciirobots&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;RSPE&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/09/MSXdev23_AttackofthePetsciiRobots_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/09/MSXdev23_AttackofthePetsciiRobots_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Crawlers&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|ext1=NINJATAP&lt;br /&gt;
|ext2=PAC&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Oct.&lt;br /&gt;
|site=https://github.com/aoineko-fr/Crawlers&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/aoineko-fr/Crawlers/raw/master/emul/rom/crawlers.rom&amp;amp;PRESETS=PAC2&lt;br /&gt;
|purchase=https://www.ebsoft.fr/shop/fr/home/117-crawlers.html&lt;br /&gt;
|version=0.10.1&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,1&lt;br /&gt;
|image1=https://github.com/aoineko-fr/MSXgl/raw/main/engine/doc/img/crawlers.png&lt;br /&gt;
|image2=https://github.com/aoineko-fr/MSXgl/raw/main/engine/doc/img/crawlers_2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Phenix Corrupta&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Casper Croes&lt;br /&gt;
|target=ROM_ASCII8_512K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2023, Oct.&lt;br /&gt;
|site=https://www.msxdev.org/2023/10/16/msxdev23-27-phenix-corrupta/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=phenixcorrupta&lt;br /&gt;
|purchase=https://cotegamers.com/shop/fr/accueil/187-phenix-corrupta-msx-precommande.html&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;CCPC&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_PhenixCorrupta_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_PhenixCorrupta_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Tetpuz&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Totta&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2023, Oct.&lt;br /&gt;
|site=https://www.msxdev.org/2023/10/17/msxdev23-28-tetpuz/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=tetpuz&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;TTTP&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_Tetpuz_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_Tetpuz_v1.0_002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=NY2024&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2024, Jan.&lt;br /&gt;
|site=https://github.com/aoineko-fr/NY2024&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/aoineko-fr/NY2024&lt;br /&gt;
|purchase=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;GL24&amp;quot;&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
|video=Yd4Q1YYXJbA&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Sam.Pr&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2024, Jul.&lt;br /&gt;
|site=https://www.msxdev.org/2024/07/16/msxdev24-07-sam-pr/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=sampr&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;FPSP&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2024/07/MSXdev24_Sam.Pr_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2024/07/MSXdev24_Sam.Pr_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Alley Cat&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Rutagames (Diogo Patrão)&lt;br /&gt;
|target=ROM_ASCII8_128K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2024, Nov.&lt;br /&gt;
|site=https://sites.google.com/view/alleycatparamsx/&lt;br /&gt;
|purchase=https://sites.google.com/view/alleycatparamsx/&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=https://aoineko.org/msxgl/images/thumb/9/92/AllyCatTitle.png/724px-AllyCatTitle.png&lt;br /&gt;
|image2=https://aoineko.org/msxgl/images/c/c3/AlleyCatGame.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Sam.Pr Explore&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_ASCII16_256K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2024, Dec.&lt;br /&gt;
|site=https://www.msxdev.org/2024/12/20/msxdev24-19-sam-pr-explorer/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=samprexplorer&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;FPEX&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2024/12/Msxdev24_sam.prexplorer_v1.0_0002.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2024/12/Msxdev24_sam.prexplorer_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=NY2025&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Jan.&lt;br /&gt;
|site=https://github.com/aoineko-fr/NY2025&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/aoineko-fr/NY2025&lt;br /&gt;
|purchase=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;GL25&amp;quot;&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
|video=Rl-1g2TtrtA&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Room 5&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=MO5.com&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=✅ 2025, Jan.&lt;br /&gt;
|site=https://mo5com.itch.io/room-5&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/Asso-MO5/room5/raw/main/room5/emul/rom/Room5.rom&lt;br /&gt;
|version=0.10.1&lt;br /&gt;
|signature=&amp;quot;MOR5&amp;quot;&lt;br /&gt;
|image1=https://img.itch.zone/aW1hZ2UvMjEzNTQ1Mi8xMzQ2MTQ1MC5qcGc=/original/YUiAHD.jpg&lt;br /&gt;
|image2=https://img.itch.zone/aW1hZ2UvMjEzNTQ1Mi8xMzQ2MTQ2Ny5qcGc=/original/Ssow9u.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Super Sokoban&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=2NICE&lt;br /&gt;
|target=ROM_KONAMI_SCC_128K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, March&lt;br /&gt;
|site=https://www.msxdev.org/2025/01/28/msxdev24-28-super-sokoban/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=supersokoban&lt;br /&gt;
|version=1.2.12&lt;br /&gt;
|signature=&amp;quot;2NSO&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2025/01/MSXdev24_SuperSokoban_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2025/01/MSXdev24_SuperSokoban_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Doomlings&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Totta&lt;br /&gt;
|target=ROM_ASCII16_256K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2025, Jan.&lt;br /&gt;
|site=https://www.msxdev.org/2025/02/03/msxdev24-31-doomlings/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=doomlings&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;TTDL&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2025/02/Msxdev24_doomlings_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2025/02/Msxdev24_doomlings_v1.0_0002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=EMinEx&lt;br /&gt;
|genre=Tool&lt;br /&gt;
|author=LudoJoey&lt;br /&gt;
|target=BIN_TAPE&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2025, Apr.&lt;br /&gt;
|site=https://github.com/ludosevilla/EMinEx&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://raw.githubusercontent.com/ludosevilla/EMinEx/refs/heads/main/images/minipavi.png&lt;br /&gt;
|image2=https://raw.githubusercontent.com/ludosevilla/EMinEx/refs/heads/main/images/meteo.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Peng Pong&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=✅ 2025, March&lt;br /&gt;
|site=https://github.com/aoineko-fr/PengPong&lt;br /&gt;
|webmsx=https://webmsx.org/?ROM=https://github.com/aoineko-fr/PengPong/raw/refs/heads/master/emul/rom/pengpong.rom&lt;br /&gt;
|version=1.3.0&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,3&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/PengPong/master/doc/img/pengpong1.png&lt;br /&gt;
|image2=https://raw.githubusercontent.com/aoineko-fr/PengPong/master/doc/img/pengpong2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Toride no Kōbō&amp;lt;br/&amp;gt;砦の攻防&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Hando&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Sep.&lt;br /&gt;
|site=https://github.com/handomade/ToridenoKoubou-for-MSX2&lt;br /&gt;
|webmsx=https://webmsx.org/?ROM=https://github.com/handomade/ToridenoKoubou-for-MSX2/raw/refs/heads/main/Toride.rom&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://aoineko.org/msxgl/images/thumb/6/6e/Game_fortress_01.png/775px-Game_fortress_01.png&lt;br /&gt;
|image2=https://aoineko.org/msxgl/images/thumb/3/37/Game_fortress_02.png/775px-Game_fortress_02.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=The new Castle&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Nicola Brogelli&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2025, October&lt;br /&gt;
|site=https://www.msxdev.org/2025/10/18/msxdev25-13-the-new-castle/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=thenewcastle&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2025/10/Msxdev25_thenewcastle_v1.0_0001.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2025/10/Msxdev25_thenewcastle_v1.0_0002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=TerMSX&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Diogo Patrão&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Nov.&lt;br /&gt;
|site=https://rutagamesltda.itch.io/termsx&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://img.itch.zone/aW1nLzIzOTAyMzMzLnBuZw==/315x250%23c/kVbbsO.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Super Sokoban&amp;lt;br/&amp;gt;Xmas quiz '25&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=2NICE&lt;br /&gt;
|target=ROM_KONAMI_128K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Dec.&lt;br /&gt;
|site=https://2nicemsx.nl/super-sokoban/xmasquiz/&lt;br /&gt;
|webmsx=https://2nicemsx.nl/super-sokoban/xmasquiz/webmsx/&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=https://2nicemsx.nl/super-sokoban/xmasquiz/img/supersokobanxmas1.jpg&lt;br /&gt;
|image2=https://2nicemsx.nl/super-sokoban/xmasquiz/img/supersokobanxmas3.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=NY2026&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_48K_ISR&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, Jan.&lt;br /&gt;
|site=https://github.com/aoineko-fr/NY2026&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/aoineko-fr/NY2026&lt;br /&gt;
|purchase=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;GL26&amp;quot;&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
|video=1kbN7VnbfaU&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=DELTA&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Bik5 (JBikker)&lt;br /&gt;
|target=ROM_ASCII16_4M&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|ext1=SCC&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2026, February&lt;br /&gt;
|site=https://www.msxdev.org/2026/02/21/msxdev25-30-delta/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=delta&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;B5R3&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_DELTA_v1.0_000.jpg&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_DELTA_v1.0_002.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=TerMSX Multi&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Rutagames (Diogo Patrão)&lt;br /&gt;
|target=ROM_ASCII8_512K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, February&lt;br /&gt;
|site=https://www.msxdev.org/2026/02/26/msxdev25-32-termsx/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=termsx&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;RGTM&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/01/Msxdev25_termsx_v1.0_001.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/02/Msxdev25_termsx_v1.0_002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Soccer League&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_YAMANOOTO_8M&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=V9990&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/02/msxdev25-34-soccer-league/&lt;br /&gt;
|webmsx=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_SoccerLeague_v1.2.zip&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;FPSL&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_SoccerLeague_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_SoccerLeague_v1.0_005.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=AstroJump&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Tiago Tresoldi&amp;lt;br/&amp;gt;Freja Lindgren&lt;br /&gt;
|target=ROM_16K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/05/msxdev25-35-astrojump/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=astrojump&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;RGAJ&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/Msxdev25_astrojump_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/Msxdev25_astrojump_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Chrono Runner&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=MSX Italia Association&lt;br /&gt;
|target=ROM_ASCII16_128K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/14/msxdev25-38-chrono-runner/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=chronorunner&lt;br /&gt;
|source=https://github.com/AssociazioneMsxItalia/Chrono-runners&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;AMCR&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/msxdev25_chrono-runner_v1.0-0001.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/msxdev25_chrono-runner_v1.0-0005.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Tiny Tetris VS&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Antxiko&lt;br /&gt;
|target=ROM_16K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/16/msxdev25-44-tiny-tetris-vs/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=tinytetrisvs&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_TinyTetrisVS_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_TinyTetrisVS_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Soul Trapped&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Casper Croes&amp;lt;br/&amp;gt;[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_NEO16_16M&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=MSXMUSIC&lt;br /&gt;
|ext2=MOUSE&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/18/msxdev25-47-soul-trapped/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=soultrapped&lt;br /&gt;
|version=1.4.0&lt;br /&gt;
|signature=&amp;quot;CCTR&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_SoulTrapped_v1.0_01.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_SoulTrapped_v1.0_03.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Snake Exacape&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=2NICE&lt;br /&gt;
|target=ROM_64K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|ext1=MSXMUSIC&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://2nicemsx.nl/snake-escape&lt;br /&gt;
|webmsx=https://2nicemsx.nl/snake-escape/webmsx&lt;br /&gt;
|version=1.2.12&lt;br /&gt;
|signature=&amp;quot;2NSE&amp;quot;&lt;br /&gt;
|image1=https://2nicemsx.nl/snake-escape/img/snakeescape1.jpg&lt;br /&gt;
|image2=https://2nicemsx.nl/snake-escape/img/snakeescape2.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=MUGI&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Hando&lt;br /&gt;
|target=ROM_48K_ISR&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, May&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=&amp;quot;HNMG&amp;quot;&lt;br /&gt;
|image1=https://aoineko.org/msxgl/images/thumb/b/b6/Game_mugi_01.png/775px-Game_mugi_01.png&lt;br /&gt;
|image2=https://aoineko.org/msxgl/images/thumb/6/60/Game_mugi_02.png/775px-Game_mugi_02.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=City MSX&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=BigFive (mgoulartBR)&lt;br /&gt;
|target=ROM ASCII16&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, Sep.&lt;br /&gt;
|site=https://mgoulartbr.itch.io/city-msx&lt;br /&gt;
|purchase=https://mgoulartbr.itch.io/city-msx&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://i.postimg.cc/P5P4sxTp/859c2b11-9446-4212-9435-e7ce8df679e4.png&lt;br /&gt;
|image2=https://i.postimg.cc/zXD777M5/demo-city-itch.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Berzerk&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Pixel Forge&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, Sep.&lt;br /&gt;
|site=https://www.msxdev.org/2026/09/21/msxdev26-02-berzerk/&lt;br /&gt;
|purchase=&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=berzerk&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/09/MSXdev26_Berzerk_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/09/MSXdev26_Berzerk_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Invictus&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Pablo David Garaguso&lt;br /&gt;
|target=ROM_ASCII16_128K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, Oct.&lt;br /&gt;
|site=https://www.msxdev.org/2026/10/24/msxdev26-09-invictus/&lt;br /&gt;
|purchase=&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=invictus&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/10/MSXdev26_Invictus_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/10/MSXdev26_Invictus_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Wizzl&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (GFX)&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=✅ 2026, Oct.&lt;br /&gt;
|site=https://wizzl.lululand.fr/&lt;br /&gt;
|purchase=https://wizzl.lululand.fr/&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=1.5.2&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,4&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/wizzl_1.png&lt;br /&gt;
|image2=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/wizzl_2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Work in progress software ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Genre&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Author&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Release&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Target&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Link&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;MSXgl Version&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Signature&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Image&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Final Smash&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=https://github.com/aoineko-fr/FinalSmash&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/aoineko-fr/FinalSmash/raw/master/emul/rom/tennis.rom&lt;br /&gt;
|version=0.9.0&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,2&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/finalsmash.jpg&lt;br /&gt;
|image2=https://msxvillage.fr/upload/fs_score.gif&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Popeye&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Wim&lt;br /&gt;
|target=&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=Unknown&lt;br /&gt;
|image1=https://cdn.discordapp.com/attachments/574951023374761988/1164328603375374448/image.png?ex=6542d083&amp;amp;is=65305b83&amp;amp;hm=c3b357b359cbc2b3809277cac00ca8252242d1977f0c950e2927230d9aa346f9&amp;amp;&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Duæl Drop&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Totta&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=1.0.0&lt;br /&gt;
|signature=&amp;quot;TTDD&amp;quot;&lt;br /&gt;
|image1=https://cdn.discordapp.com/attachments/1049454935261073409/1227685092323754035/DuaelDrop-7.png?ex=672e56d7&amp;amp;is=672d0557&amp;amp;hm=06e8a0789277e4f07bb046520c4129c99a39d89d479a107a6fca0f718db56978&amp;amp;&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Debug-Riken&amp;lt;br/&amp;gt;デバグリケン&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=HtDreams&lt;br /&gt;
|target=&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=GBMSX&lt;br /&gt;
|genre=Tool&lt;br /&gt;
|author=Bruno Catao&lt;br /&gt;
|target=DOS2&lt;br /&gt;
|msx=MSX2+&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=https://github.com/brunogamacatao/msxgb&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/brunogamacatao/msxgb&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Samples programs ==&lt;br /&gt;
&lt;br /&gt;
MSXgl is supplied with a [[Samples|large number of sample programs]] which you can use as a reference for using the engine's various features.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_game.png&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_draw.jpg&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_clock.jpg&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_swtile.png&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/html&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=Projects&amp;diff=4061</id>
		<title>Projects</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=Projects&amp;diff=4061"/>
				<updated>2026-10-25T14:33:52Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: /* Work-in-progress software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here's a list of known projects (games, applications or demos) using {{MSXGL}}:&lt;br /&gt;
&lt;br /&gt;
== Released software ==&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Genre&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Author&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Release&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Target&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Link&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;MSXgl Version&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Signature&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Image&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=msx3d&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=JBikker&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2022, Feb.&lt;br /&gt;
|site=https://github.com/jbikker/msx3d&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=0.3.0&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://msxvillage.fr/upload/msx3d.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Simple scroller&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=xchip&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2022, Apr.&lt;br /&gt;
|site=https://github.com/aguaviva/msx1_smooth_scroller&lt;br /&gt;
|webmsx=https://webmsx.org/?ROM=https://github.com/aguaviva/msx1_smooth_scroller/raw/refs/heads/main/precompiled/template.rom&amp;amp;MACHINE=MSX1A&lt;br /&gt;
|version=0.3.2&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/scroller.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=VATT&lt;br /&gt;
|genre=Tool&lt;br /&gt;
|author=Aoineko&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX122P&lt;br /&gt;
|state=✅ 2023, Apr.&lt;br /&gt;
|site=https://github.com/aoineko-fr/VATT&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=0.9.10&lt;br /&gt;
|signature=&amp;quot;GLVT&amp;quot;&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/VATT/master/doc/vatt.jpg&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Mandoroids&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Igor Moreno&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Apr.&lt;br /&gt;
|site=https://github.com/MorenoIgor/Mandoroids&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/MorenoIgor/Mandoroids/raw/main/mandoroids/emul/rom/mandoroids.rom&lt;br /&gt;
|code=https://github.com/MorenoIgor/Mandoroids/tree/main/mandoroids&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=https://user-images.githubusercontent.com/35140312/233985120-45d4fb8e-fe30-47a0-a8ec-93438ad86cc3.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Martian War&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_16K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2023, May&lt;br /&gt;
|site=https://www.msxdev.org/2023/05/06/msxdev23-07-martian-war/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=martianwar&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;FPMW&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/05/MSXdev23_MartianWar_v1.0_001-1024x766.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/05/MSXdev23_MartianWar_v1.0_002-1024x768.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=screen3&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=HSK&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2023, May&lt;br /&gt;
|site=https://github.com/hsk/msxgl/tree/main&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=Unknown&lt;br /&gt;
|image1=http://aoineko.org/files/hsk_screen3v4.gif&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=A Lone Wolf&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=FutureDisk&lt;br /&gt;
|target=DISK&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|ext1=MSXMUSIC&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Jul.&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;FDLW&amp;quot;&lt;br /&gt;
|image1=https://www.msx.org/sites/default/files/news/2024/11/WMSX_Screen_1.png&lt;br /&gt;
|image2=https://www.msx.org/sites/default/files/news/2024/11/WMSX_Screen_2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Eggy’s Maze&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Bik5 (JBikker)&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2023, Aug.&lt;br /&gt;
|site=https://www.msxdev.org/2023/08/30/msxdev23-15-eggys-maze/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=eggysmaze&lt;br /&gt;
|purchase=https://cotegamers.com/shop/en/accueil/177-eggy-s-maze-preorder.html&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;B5EM&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/08/MSXdev23_EggysMaze_v1.0.0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/08/MSXdev23_EggysMaze_v1.0.0002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Attack of the Petscii Robots&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=RoboSoft (ToriHino)&lt;br /&gt;
|target=ROM_ASCII8_2M&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=V9990&lt;br /&gt;
|ext2=OPL4&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Sep.&lt;br /&gt;
|site=https://www.msxdev.org/2023/09/19/msxdev23-18-attack-of-the-petscii-robots/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=attackofthepetsciirobots&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;RSPE&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/09/MSXdev23_AttackofthePetsciiRobots_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/09/MSXdev23_AttackofthePetsciiRobots_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Crawlers&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|ext1=NINJATAP&lt;br /&gt;
|ext2=PAC&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Oct.&lt;br /&gt;
|site=https://github.com/aoineko-fr/Crawlers&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/aoineko-fr/Crawlers/raw/master/emul/rom/crawlers.rom&amp;amp;PRESETS=PAC2&lt;br /&gt;
|purchase=https://www.ebsoft.fr/shop/fr/home/117-crawlers.html&lt;br /&gt;
|version=0.10.1&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,1&lt;br /&gt;
|image1=https://github.com/aoineko-fr/MSXgl/raw/main/engine/doc/img/crawlers.png&lt;br /&gt;
|image2=https://github.com/aoineko-fr/MSXgl/raw/main/engine/doc/img/crawlers_2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Phenix Corrupta&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Casper Croes&lt;br /&gt;
|target=ROM_ASCII8_512K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2023, Oct.&lt;br /&gt;
|site=https://www.msxdev.org/2023/10/16/msxdev23-27-phenix-corrupta/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=phenixcorrupta&lt;br /&gt;
|purchase=https://cotegamers.com/shop/fr/accueil/187-phenix-corrupta-msx-precommande.html&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;CCPC&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_PhenixCorrupta_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_PhenixCorrupta_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Tetpuz&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Totta&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2023, Oct.&lt;br /&gt;
|site=https://www.msxdev.org/2023/10/17/msxdev23-28-tetpuz/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=tetpuz&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;TTTP&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_Tetpuz_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_Tetpuz_v1.0_002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=NY2024&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2024, Jan.&lt;br /&gt;
|site=https://github.com/aoineko-fr/NY2024&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/aoineko-fr/NY2024&lt;br /&gt;
|purchase=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;GL24&amp;quot;&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
|video=Yd4Q1YYXJbA&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Sam.Pr&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2024, Jul.&lt;br /&gt;
|site=https://www.msxdev.org/2024/07/16/msxdev24-07-sam-pr/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=sampr&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;FPSP&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2024/07/MSXdev24_Sam.Pr_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2024/07/MSXdev24_Sam.Pr_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Alley Cat&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Rutagames (Diogo Patrão)&lt;br /&gt;
|target=ROM_ASCII8_128K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2024, Nov.&lt;br /&gt;
|site=https://sites.google.com/view/alleycatparamsx/&lt;br /&gt;
|purchase=https://sites.google.com/view/alleycatparamsx/&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=https://aoineko.org/msxgl/images/thumb/9/92/AllyCatTitle.png/724px-AllyCatTitle.png&lt;br /&gt;
|image2=https://aoineko.org/msxgl/images/c/c3/AlleyCatGame.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Sam.Pr Explore&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_ASCII16_256K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2024, Dec.&lt;br /&gt;
|site=https://www.msxdev.org/2024/12/20/msxdev24-19-sam-pr-explorer/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=samprexplorer&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;FPEX&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2024/12/Msxdev24_sam.prexplorer_v1.0_0002.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2024/12/Msxdev24_sam.prexplorer_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=NY2025&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Jan.&lt;br /&gt;
|site=https://github.com/aoineko-fr/NY2025&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/aoineko-fr/NY2025&lt;br /&gt;
|purchase=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;GL25&amp;quot;&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
|video=Rl-1g2TtrtA&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Room 5&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=MO5.com&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=✅ 2025, Jan.&lt;br /&gt;
|site=https://mo5com.itch.io/room-5&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/Asso-MO5/room5/raw/main/room5/emul/rom/Room5.rom&lt;br /&gt;
|version=0.10.1&lt;br /&gt;
|signature=&amp;quot;MOR5&amp;quot;&lt;br /&gt;
|image1=https://img.itch.zone/aW1hZ2UvMjEzNTQ1Mi8xMzQ2MTQ1MC5qcGc=/original/YUiAHD.jpg&lt;br /&gt;
|image2=https://img.itch.zone/aW1hZ2UvMjEzNTQ1Mi8xMzQ2MTQ2Ny5qcGc=/original/Ssow9u.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Super Sokoban&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=2NICE&lt;br /&gt;
|target=ROM_KONAMI_SCC_128K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, March&lt;br /&gt;
|site=https://www.msxdev.org/2025/01/28/msxdev24-28-super-sokoban/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=supersokoban&lt;br /&gt;
|version=1.2.12&lt;br /&gt;
|signature=&amp;quot;2NSO&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2025/01/MSXdev24_SuperSokoban_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2025/01/MSXdev24_SuperSokoban_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Doomlings&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Totta&lt;br /&gt;
|target=ROM_ASCII16_256K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2025, Jan.&lt;br /&gt;
|site=https://www.msxdev.org/2025/02/03/msxdev24-31-doomlings/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=doomlings&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;TTDL&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2025/02/Msxdev24_doomlings_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2025/02/Msxdev24_doomlings_v1.0_0002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=EMinEx&lt;br /&gt;
|genre=Tool&lt;br /&gt;
|author=LudoJoey&lt;br /&gt;
|target=BIN_TAPE&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2025, Apr.&lt;br /&gt;
|site=https://github.com/ludosevilla/EMinEx&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://raw.githubusercontent.com/ludosevilla/EMinEx/refs/heads/main/images/minipavi.png&lt;br /&gt;
|image2=https://raw.githubusercontent.com/ludosevilla/EMinEx/refs/heads/main/images/meteo.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Peng Pong&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=✅ 2025, March&lt;br /&gt;
|site=https://github.com/aoineko-fr/PengPong&lt;br /&gt;
|webmsx=https://webmsx.org/?ROM=https://github.com/aoineko-fr/PengPong/raw/refs/heads/master/emul/rom/pengpong.rom&lt;br /&gt;
|version=1.3.0&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,3&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/PengPong/master/doc/img/pengpong1.png&lt;br /&gt;
|image2=https://raw.githubusercontent.com/aoineko-fr/PengPong/master/doc/img/pengpong2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Toride no Kōbō&amp;lt;br/&amp;gt;砦の攻防&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Hando&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Sep.&lt;br /&gt;
|site=https://github.com/handomade/ToridenoKoubou-for-MSX2&lt;br /&gt;
|webmsx=https://webmsx.org/?ROM=https://github.com/handomade/ToridenoKoubou-for-MSX2/raw/refs/heads/main/Toride.rom&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://aoineko.org/msxgl/images/thumb/6/6e/Game_fortress_01.png/775px-Game_fortress_01.png&lt;br /&gt;
|image2=https://aoineko.org/msxgl/images/thumb/3/37/Game_fortress_02.png/775px-Game_fortress_02.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=The new Castle&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Nicola Brogelli&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2025, October&lt;br /&gt;
|site=https://www.msxdev.org/2025/10/18/msxdev25-13-the-new-castle/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=thenewcastle&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2025/10/Msxdev25_thenewcastle_v1.0_0001.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2025/10/Msxdev25_thenewcastle_v1.0_0002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=TerMSX&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Diogo Patrão&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Nov.&lt;br /&gt;
|site=https://rutagamesltda.itch.io/termsx&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://img.itch.zone/aW1nLzIzOTAyMzMzLnBuZw==/315x250%23c/kVbbsO.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Super Sokoban Xmas quiz '25&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=2NICE&lt;br /&gt;
|target=ROM_KONAMI_128K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Dec.&lt;br /&gt;
|site=https://2nicemsx.nl/super-sokoban/xmasquiz/&lt;br /&gt;
|webmsx=https://2nicemsx.nl/super-sokoban/xmasquiz/webmsx/&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=https://2nicemsx.nl/super-sokoban/xmasquiz/img/supersokobanxmas1.jpg&lt;br /&gt;
|image2=https://2nicemsx.nl/super-sokoban/xmasquiz/img/supersokobanxmas3.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=NY2026&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_48K_ISR&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, Jan.&lt;br /&gt;
|site=https://github.com/aoineko-fr/NY2026&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/aoineko-fr/NY2026&lt;br /&gt;
|purchase=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;GL26&amp;quot;&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
|video=1kbN7VnbfaU&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=DELTA&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Bik5 (JBikker)&lt;br /&gt;
|target=ROM_ASCII16_4M&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|ext1=SCC&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2026, February&lt;br /&gt;
|site=https://www.msxdev.org/2026/02/21/msxdev25-30-delta/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=delta&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;B5R3&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_DELTA_v1.0_000.jpg&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_DELTA_v1.0_002.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=TerMSX Multi&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Rutagames (Diogo Patrão)&lt;br /&gt;
|target=ROM_ASCII8_512K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, February&lt;br /&gt;
|site=https://www.msxdev.org/2026/02/26/msxdev25-32-termsx/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=termsx&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;RGTM&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/01/Msxdev25_termsx_v1.0_001.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/02/Msxdev25_termsx_v1.0_002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Soccer League&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_YAMANOOTO_8M&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=V9990&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/02/msxdev25-34-soccer-league/&lt;br /&gt;
|webmsx=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_SoccerLeague_v1.2.zip&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;FPSL&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_SoccerLeague_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_SoccerLeague_v1.0_005.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=AstroJump&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Tiago Tresoldi&amp;lt;br/&amp;gt;Freja Lindgren&lt;br /&gt;
|target=ROM_16K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/05/msxdev25-35-astrojump/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=astrojump&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;RGAJ&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/Msxdev25_astrojump_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/Msxdev25_astrojump_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Chrono Runner&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=MSX Italia Association&lt;br /&gt;
|target=ROM_ASCII16_128K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/14/msxdev25-38-chrono-runner/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=chronorunner&lt;br /&gt;
|source=https://github.com/AssociazioneMsxItalia/Chrono-runners&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;AMCR&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/msxdev25_chrono-runner_v1.0-0001.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/msxdev25_chrono-runner_v1.0-0005.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Tiny Tetris VS&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Antxiko&lt;br /&gt;
|target=ROM_16K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/16/msxdev25-44-tiny-tetris-vs/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=tinytetrisvs&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_TinyTetrisVS_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_TinyTetrisVS_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Soul Trapped&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Casper Croes&amp;lt;br/&amp;gt;[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_NEO16_16M&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=MSXMUSIC&lt;br /&gt;
|ext2=MOUSE&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/18/msxdev25-47-soul-trapped/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=soultrapped&lt;br /&gt;
|version=1.4.0&lt;br /&gt;
|signature=&amp;quot;CCTR&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_SoulTrapped_v1.0_01.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_SoulTrapped_v1.0_03.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Snake Exacape&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=2NICE&lt;br /&gt;
|target=ROM_64K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|ext1=MSXMUSIC&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://2nicemsx.nl/snake-escape&lt;br /&gt;
|webmsx=https://2nicemsx.nl/snake-escape/webmsx&lt;br /&gt;
|version=1.2.12&lt;br /&gt;
|signature=&amp;quot;2NSE&amp;quot;&lt;br /&gt;
|image1=https://2nicemsx.nl/snake-escape/img/snakeescape1.jpg&lt;br /&gt;
|image2=https://2nicemsx.nl/snake-escape/img/snakeescape2.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=MUGI&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Hando&lt;br /&gt;
|target=ROM_48K_ISR&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, May&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=&amp;quot;HNMG&amp;quot;&lt;br /&gt;
|image1=https://aoineko.org/msxgl/images/thumb/b/b6/Game_mugi_01.png/775px-Game_mugi_01.png&lt;br /&gt;
|image2=https://aoineko.org/msxgl/images/thumb/6/60/Game_mugi_02.png/775px-Game_mugi_02.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=City MSX&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=BigFive (mgoulartBR)&lt;br /&gt;
|target=ROM ASCII16&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, Sep.&lt;br /&gt;
|site=https://mgoulartbr.itch.io/city-msx&lt;br /&gt;
|purchase=https://mgoulartbr.itch.io/city-msx&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://i.postimg.cc/P5P4sxTp/859c2b11-9446-4212-9435-e7ce8df679e4.png&lt;br /&gt;
|image2=https://i.postimg.cc/zXD777M5/demo-city-itch.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Berzerk&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Pixel Forge&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, Sep.&lt;br /&gt;
|site=https://www.msxdev.org/2026/09/21/msxdev26-02-berzerk/&lt;br /&gt;
|purchase=&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=berzerk&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/09/MSXdev26_Berzerk_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/09/MSXdev26_Berzerk_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Invictus&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Pablo David Garaguso&lt;br /&gt;
|target=ROM_ASCII16_128K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, Oct.&lt;br /&gt;
|site=https://www.msxdev.org/2026/10/24/msxdev26-09-invictus/&lt;br /&gt;
|purchase=&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=invictus&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/10/MSXdev26_Invictus_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/10/MSXdev26_Invictus_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Wizzl&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (GFX)&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=✅ 2026, Oct.&lt;br /&gt;
|site=https://wizzl.lululand.fr/&lt;br /&gt;
|purchase=https://wizzl.lululand.fr/&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=1.5.2&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,4&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/wizzl_1.png&lt;br /&gt;
|image2=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/wizzl_2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Work in progress software ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Genre&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Author&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Release&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Target&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Link&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;MSXgl Version&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Signature&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Image&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Final Smash&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=https://github.com/aoineko-fr/FinalSmash&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/aoineko-fr/FinalSmash/raw/master/emul/rom/tennis.rom&lt;br /&gt;
|version=0.9.0&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,2&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/finalsmash.jpg&lt;br /&gt;
|image2=https://msxvillage.fr/upload/fs_score.gif&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Popeye&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Wim&lt;br /&gt;
|target=&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=Unknown&lt;br /&gt;
|image1=https://cdn.discordapp.com/attachments/574951023374761988/1164328603375374448/image.png?ex=6542d083&amp;amp;is=65305b83&amp;amp;hm=c3b357b359cbc2b3809277cac00ca8252242d1977f0c950e2927230d9aa346f9&amp;amp;&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Duæl Drop&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Totta&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=1.0.0&lt;br /&gt;
|signature=&amp;quot;TTDD&amp;quot;&lt;br /&gt;
|image1=https://cdn.discordapp.com/attachments/1049454935261073409/1227685092323754035/DuaelDrop-7.png?ex=672e56d7&amp;amp;is=672d0557&amp;amp;hm=06e8a0789277e4f07bb046520c4129c99a39d89d479a107a6fca0f718db56978&amp;amp;&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Debug-Riken&amp;lt;br/&amp;gt;デバグリケン&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=HtDreams&lt;br /&gt;
|target=&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=GBMSX&lt;br /&gt;
|genre=Tool&lt;br /&gt;
|author=Bruno Catao&lt;br /&gt;
|target=DOS2&lt;br /&gt;
|msx=MSX2+&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=https://github.com/brunogamacatao/msxgb&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/brunogamacatao/msxgb&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Samples programs ==&lt;br /&gt;
&lt;br /&gt;
MSXgl is supplied with a [[Samples|large number of sample programs]] which you can use as a reference for using the engine's various features.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_game.png&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_draw.jpg&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_clock.jpg&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_swtile.png&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/html&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=Pixel_Phenix&amp;diff=4060</id>
		<title>Pixel Phenix</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=Pixel_Phenix&amp;diff=4060"/>
				<updated>2026-10-25T14:22:50Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: /* Released */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;img src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/refs/heads/main/engine/doc/img/phenix.png&amp;quot; style=&amp;quot;width:192px; image-rendering:pixelated; float:right;&amp;quot; /&amp;gt;&lt;br /&gt;
'''Pixel Phenix''' is an MSX video game creation group whose objectives are:&lt;br /&gt;
* Create a high-quality gaming experience:&lt;br /&gt;
** Precise, fluid and responsive gameplay,&lt;br /&gt;
** High-quality graphics that take advantage of the machine's capabilities,&lt;br /&gt;
** Immersive storytelling (when applicable).&lt;br /&gt;
* Ensure a polished finalization:&lt;br /&gt;
** In-depth playtesting of the game,&lt;br /&gt;
** Debugging to remove known issues and instabilities.&lt;br /&gt;
* Make the best use of the hardware capabilities and available features (MSX1 game with MSX2 enhancement for example).&lt;br /&gt;
* Maintain maximum compatibility (if MSX1 is enough for the game concept, go for it).&lt;br /&gt;
&lt;br /&gt;
== Members ==&lt;br /&gt;
* Guillaume &amp;quot;Aoineko&amp;quot; (design, code, graph)&lt;br /&gt;
* Ludo &amp;quot;GFX&amp;quot; (design, code, graph, music)&lt;br /&gt;
* Makoto (music)&lt;br /&gt;
&lt;br /&gt;
== Games ==&lt;br /&gt;
=== Released ===&lt;br /&gt;
* '''''Crawlers''''' [PH-001] (2023)&lt;br /&gt;
* '''''Room 5''''' (2025, in association with [https://mo5.com MO5.com])&lt;br /&gt;
* '''''Peng Pong''''' [PH-003] (2025)&lt;br /&gt;
* '''''Soul Trapped''''' (2026, in association with [https://caspercroes.itch.io Casper Croes])&lt;br /&gt;
* '''''Wizzl''''' [PH-004] (2026)&lt;br /&gt;
&lt;br /&gt;
=== Work in progress ===&lt;br /&gt;
* '''''Final Smash''''' [PH-002]&lt;br /&gt;
* '''''Pongoid''''' [PH-005]&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=Pixel_Phenix&amp;diff=4059</id>
		<title>Pixel Phenix</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=Pixel_Phenix&amp;diff=4059"/>
				<updated>2026-10-25T11:24:37Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: /* Games */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;img src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/refs/heads/main/engine/doc/img/phenix.png&amp;quot; style=&amp;quot;width:192px; image-rendering:pixelated; float:right;&amp;quot; /&amp;gt;&lt;br /&gt;
'''Pixel Phenix''' is an MSX video game creation group whose objectives are:&lt;br /&gt;
* Create a high-quality gaming experience:&lt;br /&gt;
** Precise, fluid and responsive gameplay,&lt;br /&gt;
** High-quality graphics that take advantage of the machine's capabilities,&lt;br /&gt;
** Immersive storytelling (when applicable).&lt;br /&gt;
* Ensure a polished finalization:&lt;br /&gt;
** In-depth playtesting of the game,&lt;br /&gt;
** Debugging to remove known issues and instabilities.&lt;br /&gt;
* Make the best use of the hardware capabilities and available features (MSX1 game with MSX2 enhancement for example).&lt;br /&gt;
* Maintain maximum compatibility (if MSX1 is enough for the game concept, go for it).&lt;br /&gt;
&lt;br /&gt;
== Members ==&lt;br /&gt;
* Guillaume &amp;quot;Aoineko&amp;quot; (design, code, graph)&lt;br /&gt;
* Ludo &amp;quot;GFX&amp;quot; (design, code, graph, music)&lt;br /&gt;
* Makoto (music)&lt;br /&gt;
&lt;br /&gt;
== Games ==&lt;br /&gt;
=== Released ===&lt;br /&gt;
* '''''Crawlers''''' [PH-001] (2023)&lt;br /&gt;
* '''''Room 5''''' (2025, in association with [https://mo5.com MO5.com])&lt;br /&gt;
* '''''Peng Pong''''' [PH-003] (2025)&lt;br /&gt;
* '''''Soul Trapped''''' (2026, in association with [https://caspercroes.itch.io Casper Croes])&lt;br /&gt;
* '''''Wizzl''''' [PH-004]&lt;br /&gt;
&lt;br /&gt;
=== Work in progress ===&lt;br /&gt;
* '''''Final Smash''''' [PH-002]&lt;br /&gt;
* '''''Pongoid''''' [PH-005]&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=Projects&amp;diff=4058</id>
		<title>Projects</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=Projects&amp;diff=4058"/>
				<updated>2026-10-25T11:23:54Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here's a list of known projects (games, applications or demos) using {{MSXGL}}:&lt;br /&gt;
&lt;br /&gt;
== Released software ==&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Genre&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Author&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Release&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Target&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Link&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;MSXgl Version&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Signature&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Image&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=msx3d&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=JBikker&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2022, Feb.&lt;br /&gt;
|site=https://github.com/jbikker/msx3d&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=0.3.0&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://msxvillage.fr/upload/msx3d.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Simple scroller&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=xchip&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2022, Apr.&lt;br /&gt;
|site=https://github.com/aguaviva/msx1_smooth_scroller&lt;br /&gt;
|webmsx=https://webmsx.org/?ROM=https://github.com/aguaviva/msx1_smooth_scroller/raw/refs/heads/main/precompiled/template.rom&amp;amp;MACHINE=MSX1A&lt;br /&gt;
|version=0.3.2&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/scroller.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=VATT&lt;br /&gt;
|genre=Tool&lt;br /&gt;
|author=Aoineko&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX122P&lt;br /&gt;
|state=✅ 2023, Apr.&lt;br /&gt;
|site=https://github.com/aoineko-fr/VATT&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=0.9.10&lt;br /&gt;
|signature=&amp;quot;GLVT&amp;quot;&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/VATT/master/doc/vatt.jpg&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Mandoroids&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Igor Moreno&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Apr.&lt;br /&gt;
|site=https://github.com/MorenoIgor/Mandoroids&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/MorenoIgor/Mandoroids/raw/main/mandoroids/emul/rom/mandoroids.rom&lt;br /&gt;
|code=https://github.com/MorenoIgor/Mandoroids/tree/main/mandoroids&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=https://user-images.githubusercontent.com/35140312/233985120-45d4fb8e-fe30-47a0-a8ec-93438ad86cc3.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Martian War&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_16K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2023, May&lt;br /&gt;
|site=https://www.msxdev.org/2023/05/06/msxdev23-07-martian-war/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=martianwar&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;FPMW&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/05/MSXdev23_MartianWar_v1.0_001-1024x766.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/05/MSXdev23_MartianWar_v1.0_002-1024x768.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=screen3&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=HSK&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2023, May&lt;br /&gt;
|site=https://github.com/hsk/msxgl/tree/main&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=Unknown&lt;br /&gt;
|image1=http://aoineko.org/files/hsk_screen3v4.gif&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=A Lone Wolf&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=FutureDisk&lt;br /&gt;
|target=DISK&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|ext1=MSXMUSIC&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Jul.&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;FDLW&amp;quot;&lt;br /&gt;
|image1=https://www.msx.org/sites/default/files/news/2024/11/WMSX_Screen_1.png&lt;br /&gt;
|image2=https://www.msx.org/sites/default/files/news/2024/11/WMSX_Screen_2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Eggy’s Maze&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Bik5 (JBikker)&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2023, Aug.&lt;br /&gt;
|site=https://www.msxdev.org/2023/08/30/msxdev23-15-eggys-maze/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=eggysmaze&lt;br /&gt;
|purchase=https://cotegamers.com/shop/en/accueil/177-eggy-s-maze-preorder.html&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;B5EM&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/08/MSXdev23_EggysMaze_v1.0.0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/08/MSXdev23_EggysMaze_v1.0.0002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Attack of the Petscii Robots&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=RoboSoft (ToriHino)&lt;br /&gt;
|target=ROM_ASCII8_2M&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=V9990&lt;br /&gt;
|ext2=OPL4&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Sep.&lt;br /&gt;
|site=https://www.msxdev.org/2023/09/19/msxdev23-18-attack-of-the-petscii-robots/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=attackofthepetsciirobots&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;RSPE&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/09/MSXdev23_AttackofthePetsciiRobots_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/09/MSXdev23_AttackofthePetsciiRobots_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Crawlers&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|ext1=NINJATAP&lt;br /&gt;
|ext2=PAC&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Oct.&lt;br /&gt;
|site=https://github.com/aoineko-fr/Crawlers&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/aoineko-fr/Crawlers/raw/master/emul/rom/crawlers.rom&amp;amp;PRESETS=PAC2&lt;br /&gt;
|purchase=https://www.ebsoft.fr/shop/fr/home/117-crawlers.html&lt;br /&gt;
|version=0.10.1&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,1&lt;br /&gt;
|image1=https://github.com/aoineko-fr/MSXgl/raw/main/engine/doc/img/crawlers.png&lt;br /&gt;
|image2=https://github.com/aoineko-fr/MSXgl/raw/main/engine/doc/img/crawlers_2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Phenix Corrupta&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Casper Croes&lt;br /&gt;
|target=ROM_ASCII8_512K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2023, Oct.&lt;br /&gt;
|site=https://www.msxdev.org/2023/10/16/msxdev23-27-phenix-corrupta/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=phenixcorrupta&lt;br /&gt;
|purchase=https://cotegamers.com/shop/fr/accueil/187-phenix-corrupta-msx-precommande.html&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;CCPC&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_PhenixCorrupta_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_PhenixCorrupta_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Tetpuz&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Totta&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2023, Oct.&lt;br /&gt;
|site=https://www.msxdev.org/2023/10/17/msxdev23-28-tetpuz/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=tetpuz&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;TTTP&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_Tetpuz_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_Tetpuz_v1.0_002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=NY2024&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2024, Jan.&lt;br /&gt;
|site=https://github.com/aoineko-fr/NY2024&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/aoineko-fr/NY2024&lt;br /&gt;
|purchase=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;GL24&amp;quot;&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
|video=Yd4Q1YYXJbA&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Sam.Pr&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2024, Jul.&lt;br /&gt;
|site=https://www.msxdev.org/2024/07/16/msxdev24-07-sam-pr/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=sampr&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;FPSP&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2024/07/MSXdev24_Sam.Pr_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2024/07/MSXdev24_Sam.Pr_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Alley Cat&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Rutagames (Diogo Patrão)&lt;br /&gt;
|target=ROM_ASCII8_128K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2024, Nov.&lt;br /&gt;
|site=https://sites.google.com/view/alleycatparamsx/&lt;br /&gt;
|purchase=https://sites.google.com/view/alleycatparamsx/&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=https://aoineko.org/msxgl/images/thumb/9/92/AllyCatTitle.png/724px-AllyCatTitle.png&lt;br /&gt;
|image2=https://aoineko.org/msxgl/images/c/c3/AlleyCatGame.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Sam.Pr Explore&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_ASCII16_256K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2024, Dec.&lt;br /&gt;
|site=https://www.msxdev.org/2024/12/20/msxdev24-19-sam-pr-explorer/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=samprexplorer&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;FPEX&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2024/12/Msxdev24_sam.prexplorer_v1.0_0002.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2024/12/Msxdev24_sam.prexplorer_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=NY2025&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Jan.&lt;br /&gt;
|site=https://github.com/aoineko-fr/NY2025&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/aoineko-fr/NY2025&lt;br /&gt;
|purchase=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;GL25&amp;quot;&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
|video=Rl-1g2TtrtA&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Room 5&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=MO5.com&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=✅ 2025, Jan.&lt;br /&gt;
|site=https://mo5com.itch.io/room-5&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/Asso-MO5/room5/raw/main/room5/emul/rom/Room5.rom&lt;br /&gt;
|version=0.10.1&lt;br /&gt;
|signature=&amp;quot;MOR5&amp;quot;&lt;br /&gt;
|image1=https://img.itch.zone/aW1hZ2UvMjEzNTQ1Mi8xMzQ2MTQ1MC5qcGc=/original/YUiAHD.jpg&lt;br /&gt;
|image2=https://img.itch.zone/aW1hZ2UvMjEzNTQ1Mi8xMzQ2MTQ2Ny5qcGc=/original/Ssow9u.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Super Sokoban&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=2NICE&lt;br /&gt;
|target=ROM_KONAMI_SCC_128K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, March&lt;br /&gt;
|site=https://www.msxdev.org/2025/01/28/msxdev24-28-super-sokoban/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=supersokoban&lt;br /&gt;
|version=1.2.12&lt;br /&gt;
|signature=&amp;quot;2NSO&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2025/01/MSXdev24_SuperSokoban_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2025/01/MSXdev24_SuperSokoban_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Doomlings&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Totta&lt;br /&gt;
|target=ROM_ASCII16_256K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2025, Jan.&lt;br /&gt;
|site=https://www.msxdev.org/2025/02/03/msxdev24-31-doomlings/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=doomlings&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;TTDL&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2025/02/Msxdev24_doomlings_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2025/02/Msxdev24_doomlings_v1.0_0002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=EMinEx&lt;br /&gt;
|genre=Tool&lt;br /&gt;
|author=LudoJoey&lt;br /&gt;
|target=BIN_TAPE&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2025, Apr.&lt;br /&gt;
|site=https://github.com/ludosevilla/EMinEx&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://raw.githubusercontent.com/ludosevilla/EMinEx/refs/heads/main/images/minipavi.png&lt;br /&gt;
|image2=https://raw.githubusercontent.com/ludosevilla/EMinEx/refs/heads/main/images/meteo.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Peng Pong&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=✅ 2025, March&lt;br /&gt;
|site=https://github.com/aoineko-fr/PengPong&lt;br /&gt;
|webmsx=https://webmsx.org/?ROM=https://github.com/aoineko-fr/PengPong/raw/refs/heads/master/emul/rom/pengpong.rom&lt;br /&gt;
|version=1.3.0&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,3&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/PengPong/master/doc/img/pengpong1.png&lt;br /&gt;
|image2=https://raw.githubusercontent.com/aoineko-fr/PengPong/master/doc/img/pengpong2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Toride no Kōbō&amp;lt;br/&amp;gt;砦の攻防&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Hando&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Sep.&lt;br /&gt;
|site=https://github.com/handomade/ToridenoKoubou-for-MSX2&lt;br /&gt;
|webmsx=https://webmsx.org/?ROM=https://github.com/handomade/ToridenoKoubou-for-MSX2/raw/refs/heads/main/Toride.rom&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://aoineko.org/msxgl/images/thumb/6/6e/Game_fortress_01.png/775px-Game_fortress_01.png&lt;br /&gt;
|image2=https://aoineko.org/msxgl/images/thumb/3/37/Game_fortress_02.png/775px-Game_fortress_02.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=The new Castle&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Nicola Brogelli&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2025, October&lt;br /&gt;
|site=https://www.msxdev.org/2025/10/18/msxdev25-13-the-new-castle/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=thenewcastle&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2025/10/Msxdev25_thenewcastle_v1.0_0001.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2025/10/Msxdev25_thenewcastle_v1.0_0002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=TerMSX&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Diogo Patrão&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Nov.&lt;br /&gt;
|site=https://rutagamesltda.itch.io/termsx&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://img.itch.zone/aW1nLzIzOTAyMzMzLnBuZw==/315x250%23c/kVbbsO.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Super Sokoban Xmas quiz '25&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=2NICE&lt;br /&gt;
|target=ROM_KONAMI_128K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Dec.&lt;br /&gt;
|site=https://2nicemsx.nl/super-sokoban/xmasquiz/&lt;br /&gt;
|webmsx=https://2nicemsx.nl/super-sokoban/xmasquiz/webmsx/&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=https://2nicemsx.nl/super-sokoban/xmasquiz/img/supersokobanxmas1.jpg&lt;br /&gt;
|image2=https://2nicemsx.nl/super-sokoban/xmasquiz/img/supersokobanxmas3.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=NY2026&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_48K_ISR&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, Jan.&lt;br /&gt;
|site=https://github.com/aoineko-fr/NY2026&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/aoineko-fr/NY2026&lt;br /&gt;
|purchase=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;GL26&amp;quot;&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
|video=1kbN7VnbfaU&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=DELTA&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Bik5 (JBikker)&lt;br /&gt;
|target=ROM_ASCII16_4M&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|ext1=SCC&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2026, February&lt;br /&gt;
|site=https://www.msxdev.org/2026/02/21/msxdev25-30-delta/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=delta&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;B5R3&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_DELTA_v1.0_000.jpg&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_DELTA_v1.0_002.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=TerMSX Multi&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Rutagames (Diogo Patrão)&lt;br /&gt;
|target=ROM_ASCII8_512K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, February&lt;br /&gt;
|site=https://www.msxdev.org/2026/02/26/msxdev25-32-termsx/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=termsx&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;RGTM&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/01/Msxdev25_termsx_v1.0_001.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/02/Msxdev25_termsx_v1.0_002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Soccer League&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_YAMANOOTO_8M&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=V9990&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/02/msxdev25-34-soccer-league/&lt;br /&gt;
|webmsx=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_SoccerLeague_v1.2.zip&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;FPSL&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_SoccerLeague_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_SoccerLeague_v1.0_005.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=AstroJump&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Tiago Tresoldi&amp;lt;br/&amp;gt;Freja Lindgren&lt;br /&gt;
|target=ROM_16K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/05/msxdev25-35-astrojump/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=astrojump&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;RGAJ&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/Msxdev25_astrojump_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/Msxdev25_astrojump_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Chrono Runner&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=MSX Italia Association&lt;br /&gt;
|target=ROM_ASCII16_128K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/14/msxdev25-38-chrono-runner/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=chronorunner&lt;br /&gt;
|source=https://github.com/AssociazioneMsxItalia/Chrono-runners&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;AMCR&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/msxdev25_chrono-runner_v1.0-0001.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/msxdev25_chrono-runner_v1.0-0005.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Tiny Tetris VS&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Antxiko&lt;br /&gt;
|target=ROM_16K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/16/msxdev25-44-tiny-tetris-vs/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=tinytetrisvs&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_TinyTetrisVS_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_TinyTetrisVS_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Soul Trapped&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Casper Croes&amp;lt;br/&amp;gt;[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_NEO16_16M&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=MSXMUSIC&lt;br /&gt;
|ext2=MOUSE&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/18/msxdev25-47-soul-trapped/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=soultrapped&lt;br /&gt;
|version=1.4.0&lt;br /&gt;
|signature=&amp;quot;CCTR&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_SoulTrapped_v1.0_01.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_SoulTrapped_v1.0_03.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Snake Exacape&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=2NICE&lt;br /&gt;
|target=ROM_64K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|ext1=MSXMUSIC&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://2nicemsx.nl/snake-escape&lt;br /&gt;
|webmsx=https://2nicemsx.nl/snake-escape/webmsx&lt;br /&gt;
|version=1.2.12&lt;br /&gt;
|signature=&amp;quot;2NSE&amp;quot;&lt;br /&gt;
|image1=https://2nicemsx.nl/snake-escape/img/snakeescape1.jpg&lt;br /&gt;
|image2=https://2nicemsx.nl/snake-escape/img/snakeescape2.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=MUGI&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Hando&lt;br /&gt;
|target=ROM_48K_ISR&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, May&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=&amp;quot;HNMG&amp;quot;&lt;br /&gt;
|image1=https://aoineko.org/msxgl/images/thumb/b/b6/Game_mugi_01.png/775px-Game_mugi_01.png&lt;br /&gt;
|image2=https://aoineko.org/msxgl/images/thumb/6/60/Game_mugi_02.png/775px-Game_mugi_02.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=City MSX&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=BigFive (mgoulartBR)&lt;br /&gt;
|target=ROM ASCII16&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, Sep.&lt;br /&gt;
|site=https://mgoulartbr.itch.io/city-msx&lt;br /&gt;
|purchase=https://mgoulartbr.itch.io/city-msx&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://i.postimg.cc/P5P4sxTp/859c2b11-9446-4212-9435-e7ce8df679e4.png&lt;br /&gt;
|image2=https://i.postimg.cc/zXD777M5/demo-city-itch.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Berzerk&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Pixel Forge&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, Sep.&lt;br /&gt;
|site=https://www.msxdev.org/2026/09/21/msxdev26-02-berzerk/&lt;br /&gt;
|purchase=&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=berzerk&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/09/MSXdev26_Berzerk_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/09/MSXdev26_Berzerk_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Invictus&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Pablo David Garaguso&lt;br /&gt;
|target=ROM_ASCII16_128K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, Oct.&lt;br /&gt;
|site=https://www.msxdev.org/2026/10/24/msxdev26-09-invictus/&lt;br /&gt;
|purchase=&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=invictus&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/10/MSXdev26_Invictus_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/10/MSXdev26_Invictus_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Wizzl&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (GFX)&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=✅ 2026, Oct.&lt;br /&gt;
|site=https://wizzl.lululand.fr/&lt;br /&gt;
|purchase=https://wizzl.lululand.fr/&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=1.5.2&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,4&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/wizzl_1.png&lt;br /&gt;
|image2=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/wizzl_2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Work-in-progress software ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Genre&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Author&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Release&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Target&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Link&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;MSXgl Version&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Signature&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Image&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Final Smash&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=https://github.com/aoineko-fr/FinalSmash&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/aoineko-fr/FinalSmash/raw/master/emul/rom/tennis.rom&lt;br /&gt;
|version=0.9.0&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,2&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/finalsmash.jpg&lt;br /&gt;
|image2=https://msxvillage.fr/upload/fs_score.gif&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Popeye&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Wim&lt;br /&gt;
|target=&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=Unknown&lt;br /&gt;
|image1=https://cdn.discordapp.com/attachments/574951023374761988/1164328603375374448/image.png?ex=6542d083&amp;amp;is=65305b83&amp;amp;hm=c3b357b359cbc2b3809277cac00ca8252242d1977f0c950e2927230d9aa346f9&amp;amp;&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Duæl Drop&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Totta&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=1.0.0&lt;br /&gt;
|signature=&amp;quot;TTDD&amp;quot;&lt;br /&gt;
|image1=https://cdn.discordapp.com/attachments/1049454935261073409/1227685092323754035/DuaelDrop-7.png?ex=672e56d7&amp;amp;is=672d0557&amp;amp;hm=06e8a0789277e4f07bb046520c4129c99a39d89d479a107a6fca0f718db56978&amp;amp;&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Debug-Riken&amp;lt;br/&amp;gt;デバグリケン&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=HtDreams&lt;br /&gt;
|target=&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=GBMSX&lt;br /&gt;
|genre=Tool&lt;br /&gt;
|author=Bruno Catao&lt;br /&gt;
|target=DOS2&lt;br /&gt;
|msx=MSX2+&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=https://github.com/brunogamacatao/msxgb&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/brunogamacatao/msxgb&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Samples programs ==&lt;br /&gt;
&lt;br /&gt;
MSXgl is supplied with a [[Samples|large number of sample programs]] which you can use as a reference for using the engine's various features.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_game.png&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_draw.jpg&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_clock.jpg&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_swtile.png&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/html&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=Projects&amp;diff=4057</id>
		<title>Projects</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=Projects&amp;diff=4057"/>
				<updated>2026-10-25T11:23:00Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here's a list of known projects (games, applications or demos) using {{MSXGL}}:&lt;br /&gt;
&lt;br /&gt;
== Released software ==&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Genre&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Author&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Release&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Target&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Link&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;MSXgl Version&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Signature&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Image&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=msx3d&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=JBikker&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2022, Feb.&lt;br /&gt;
|site=https://github.com/jbikker/msx3d&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=0.3.0&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://msxvillage.fr/upload/msx3d.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Simple scroller&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=xchip&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2022, Apr.&lt;br /&gt;
|site=https://github.com/aguaviva/msx1_smooth_scroller&lt;br /&gt;
|webmsx=https://webmsx.org/?ROM=https://github.com/aguaviva/msx1_smooth_scroller/raw/refs/heads/main/precompiled/template.rom&amp;amp;MACHINE=MSX1A&lt;br /&gt;
|version=0.3.2&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/scroller.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=VATT&lt;br /&gt;
|genre=Tool&lt;br /&gt;
|author=Aoineko&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX122P&lt;br /&gt;
|state=✅ 2023, Apr.&lt;br /&gt;
|site=https://github.com/aoineko-fr/VATT&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=0.9.10&lt;br /&gt;
|signature=&amp;quot;GLVT&amp;quot;&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/VATT/master/doc/vatt.jpg&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Mandoroids&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Igor Moreno&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Apr.&lt;br /&gt;
|site=https://github.com/MorenoIgor/Mandoroids&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/MorenoIgor/Mandoroids/raw/main/mandoroids/emul/rom/mandoroids.rom&lt;br /&gt;
|code=https://github.com/MorenoIgor/Mandoroids/tree/main/mandoroids&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=https://user-images.githubusercontent.com/35140312/233985120-45d4fb8e-fe30-47a0-a8ec-93438ad86cc3.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Martian War&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_16K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2023, May&lt;br /&gt;
|site=https://www.msxdev.org/2023/05/06/msxdev23-07-martian-war/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=martianwar&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;FPMW&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/05/MSXdev23_MartianWar_v1.0_001-1024x766.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/05/MSXdev23_MartianWar_v1.0_002-1024x768.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=screen3&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=HSK&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2023, May&lt;br /&gt;
|site=https://github.com/hsk/msxgl/tree/main&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=Unknown&lt;br /&gt;
|image1=http://aoineko.org/files/hsk_screen3v4.gif&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=A Lone Wolf&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=FutureDisk&lt;br /&gt;
|target=DISK&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|ext1=MSXMUSIC&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Jul.&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;FDLW&amp;quot;&lt;br /&gt;
|image1=https://www.msx.org/sites/default/files/news/2024/11/WMSX_Screen_1.png&lt;br /&gt;
|image2=https://www.msx.org/sites/default/files/news/2024/11/WMSX_Screen_2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Eggy’s Maze&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Bik5 (JBikker)&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2023, Aug.&lt;br /&gt;
|site=https://www.msxdev.org/2023/08/30/msxdev23-15-eggys-maze/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=eggysmaze&lt;br /&gt;
|purchase=https://cotegamers.com/shop/en/accueil/177-eggy-s-maze-preorder.html&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;B5EM&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/08/MSXdev23_EggysMaze_v1.0.0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/08/MSXdev23_EggysMaze_v1.0.0002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Attack of the Petscii Robots&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=RoboSoft (ToriHino)&lt;br /&gt;
|target=ROM_ASCII8_2M&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=V9990&lt;br /&gt;
|ext2=OPL4&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Sep.&lt;br /&gt;
|site=https://www.msxdev.org/2023/09/19/msxdev23-18-attack-of-the-petscii-robots/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=attackofthepetsciirobots&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;RSPE&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/09/MSXdev23_AttackofthePetsciiRobots_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/09/MSXdev23_AttackofthePetsciiRobots_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Crawlers&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|ext1=NINJATAP&lt;br /&gt;
|ext2=PAC&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Oct.&lt;br /&gt;
|site=https://github.com/aoineko-fr/Crawlers&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/aoineko-fr/Crawlers/raw/master/emul/rom/crawlers.rom&amp;amp;PRESETS=PAC2&lt;br /&gt;
|purchase=https://www.ebsoft.fr/shop/fr/home/117-crawlers.html&lt;br /&gt;
|version=0.10.1&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,1&lt;br /&gt;
|image1=https://github.com/aoineko-fr/MSXgl/raw/main/engine/doc/img/crawlers.png&lt;br /&gt;
|image2=https://github.com/aoineko-fr/MSXgl/raw/main/engine/doc/img/crawlers_2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Phenix Corrupta&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Casper Croes&lt;br /&gt;
|target=ROM_ASCII8_512K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2023, Oct.&lt;br /&gt;
|site=https://www.msxdev.org/2023/10/16/msxdev23-27-phenix-corrupta/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=phenixcorrupta&lt;br /&gt;
|purchase=https://cotegamers.com/shop/fr/accueil/187-phenix-corrupta-msx-precommande.html&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;CCPC&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_PhenixCorrupta_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_PhenixCorrupta_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Tetpuz&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Totta&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2023, Oct.&lt;br /&gt;
|site=https://www.msxdev.org/2023/10/17/msxdev23-28-tetpuz/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=tetpuz&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;TTTP&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_Tetpuz_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_Tetpuz_v1.0_002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=NY2024&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2024, Jan.&lt;br /&gt;
|site=https://github.com/aoineko-fr/NY2024&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/aoineko-fr/NY2024&lt;br /&gt;
|purchase=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;GL24&amp;quot;&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
|video=Yd4Q1YYXJbA&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Sam.Pr&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2024, Jul.&lt;br /&gt;
|site=https://www.msxdev.org/2024/07/16/msxdev24-07-sam-pr/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=sampr&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;FPSP&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2024/07/MSXdev24_Sam.Pr_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2024/07/MSXdev24_Sam.Pr_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Alley Cat&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Rutagames (Diogo Patrão)&lt;br /&gt;
|target=ROM_ASCII8_128K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2024, Nov.&lt;br /&gt;
|site=https://sites.google.com/view/alleycatparamsx/&lt;br /&gt;
|purchase=https://sites.google.com/view/alleycatparamsx/&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=https://aoineko.org/msxgl/images/thumb/9/92/AllyCatTitle.png/724px-AllyCatTitle.png&lt;br /&gt;
|image2=https://aoineko.org/msxgl/images/c/c3/AlleyCatGame.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Sam.Pr Explore&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_ASCII16_256K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2024, Dec.&lt;br /&gt;
|site=https://www.msxdev.org/2024/12/20/msxdev24-19-sam-pr-explorer/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=samprexplorer&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;FPEX&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2024/12/Msxdev24_sam.prexplorer_v1.0_0002.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2024/12/Msxdev24_sam.prexplorer_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=NY2025&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Jan.&lt;br /&gt;
|site=https://github.com/aoineko-fr/NY2025&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/aoineko-fr/NY2025&lt;br /&gt;
|purchase=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;GL25&amp;quot;&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
|video=Rl-1g2TtrtA&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Room 5&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=MO5.com&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=✅ 2025, Jan.&lt;br /&gt;
|site=https://mo5com.itch.io/room-5&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/Asso-MO5/room5/raw/main/room5/emul/rom/Room5.rom&lt;br /&gt;
|version=0.10.1&lt;br /&gt;
|signature=&amp;quot;MOR5&amp;quot;&lt;br /&gt;
|image1=https://img.itch.zone/aW1hZ2UvMjEzNTQ1Mi8xMzQ2MTQ1MC5qcGc=/original/YUiAHD.jpg&lt;br /&gt;
|image2=https://img.itch.zone/aW1hZ2UvMjEzNTQ1Mi8xMzQ2MTQ2Ny5qcGc=/original/Ssow9u.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Super Sokoban&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=2NICE&lt;br /&gt;
|target=ROM_KONAMI_SCC_128K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, March&lt;br /&gt;
|site=https://www.msxdev.org/2025/01/28/msxdev24-28-super-sokoban/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=supersokoban&lt;br /&gt;
|version=1.2.12&lt;br /&gt;
|signature=&amp;quot;2NSO&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2025/01/MSXdev24_SuperSokoban_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2025/01/MSXdev24_SuperSokoban_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Doomlings&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Totta&lt;br /&gt;
|target=ROM_ASCII16_256K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2025, Jan.&lt;br /&gt;
|site=https://www.msxdev.org/2025/02/03/msxdev24-31-doomlings/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=doomlings&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;TTDL&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2025/02/Msxdev24_doomlings_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2025/02/Msxdev24_doomlings_v1.0_0002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=EMinEx&lt;br /&gt;
|genre=Tool&lt;br /&gt;
|author=LudoJoey&lt;br /&gt;
|target=BIN_TAPE&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2025, Apr.&lt;br /&gt;
|site=https://github.com/ludosevilla/EMinEx&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://raw.githubusercontent.com/ludosevilla/EMinEx/refs/heads/main/images/minipavi.png&lt;br /&gt;
|image2=https://raw.githubusercontent.com/ludosevilla/EMinEx/refs/heads/main/images/meteo.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Peng Pong&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=✅ 2025, March&lt;br /&gt;
|site=https://github.com/aoineko-fr/PengPong&lt;br /&gt;
|webmsx=https://webmsx.org/?ROM=https://github.com/aoineko-fr/PengPong/raw/refs/heads/master/emul/rom/pengpong.rom&lt;br /&gt;
|version=1.3.0&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,3&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/PengPong/master/doc/img/pengpong1.png&lt;br /&gt;
|image2=https://raw.githubusercontent.com/aoineko-fr/PengPong/master/doc/img/pengpong2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Toride no Kōbō&amp;lt;br/&amp;gt;砦の攻防&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Hando&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Sep.&lt;br /&gt;
|site=https://github.com/handomade/ToridenoKoubou-for-MSX2&lt;br /&gt;
|webmsx=https://webmsx.org/?ROM=https://github.com/handomade/ToridenoKoubou-for-MSX2/raw/refs/heads/main/Toride.rom&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://aoineko.org/msxgl/images/thumb/6/6e/Game_fortress_01.png/775px-Game_fortress_01.png&lt;br /&gt;
|image2=https://aoineko.org/msxgl/images/thumb/3/37/Game_fortress_02.png/775px-Game_fortress_02.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=The new Castle&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Nicola Brogelli&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2025, October&lt;br /&gt;
|site=https://www.msxdev.org/2025/10/18/msxdev25-13-the-new-castle/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=thenewcastle&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2025/10/Msxdev25_thenewcastle_v1.0_0001.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2025/10/Msxdev25_thenewcastle_v1.0_0002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=TerMSX&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Diogo Patrão&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Nov.&lt;br /&gt;
|site=https://rutagamesltda.itch.io/termsx&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://img.itch.zone/aW1nLzIzOTAyMzMzLnBuZw==/315x250%23c/kVbbsO.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Super Sokoban Xmas quiz '25&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=2NICE&lt;br /&gt;
|target=ROM_KONAMI_128K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Dec.&lt;br /&gt;
|site=https://2nicemsx.nl/super-sokoban/xmasquiz/&lt;br /&gt;
|webmsx=https://2nicemsx.nl/super-sokoban/xmasquiz/webmsx/&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=https://2nicemsx.nl/super-sokoban/xmasquiz/img/supersokobanxmas1.jpg&lt;br /&gt;
|image2=https://2nicemsx.nl/super-sokoban/xmasquiz/img/supersokobanxmas3.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=NY2026&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_48K_ISR&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, Jan.&lt;br /&gt;
|site=https://github.com/aoineko-fr/NY2026&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/aoineko-fr/NY2026&lt;br /&gt;
|purchase=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;GL26&amp;quot;&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
|video=1kbN7VnbfaU&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=DELTA&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Bik5 (JBikker)&lt;br /&gt;
|target=ROM_ASCII16_4M&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|ext1=SCC&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2026, February&lt;br /&gt;
|site=https://www.msxdev.org/2026/02/21/msxdev25-30-delta/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=delta&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;B5R3&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_DELTA_v1.0_000.jpg&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_DELTA_v1.0_002.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=TerMSX Multi&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Rutagames (Diogo Patrão)&lt;br /&gt;
|target=ROM_ASCII8_512K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, February&lt;br /&gt;
|site=https://www.msxdev.org/2026/02/26/msxdev25-32-termsx/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=termsx&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;RGTM&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/01/Msxdev25_termsx_v1.0_001.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/02/Msxdev25_termsx_v1.0_002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Soccer League&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_YAMANOOTO_8M&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=V9990&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/02/msxdev25-34-soccer-league/&lt;br /&gt;
|webmsx=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_SoccerLeague_v1.2.zip&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;FPSL&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_SoccerLeague_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_SoccerLeague_v1.0_005.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=AstroJump&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Tiago Tresoldi&amp;lt;br/&amp;gt;Freja Lindgren&lt;br /&gt;
|target=ROM_16K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/05/msxdev25-35-astrojump/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=astrojump&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;RGAJ&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/Msxdev25_astrojump_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/Msxdev25_astrojump_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Chrono Runner&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=MSX Italia Association&lt;br /&gt;
|target=ROM_ASCII16_128K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/14/msxdev25-38-chrono-runner/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=chronorunner&lt;br /&gt;
|source=https://github.com/AssociazioneMsxItalia/Chrono-runners&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;AMCR&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/msxdev25_chrono-runner_v1.0-0001.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/msxdev25_chrono-runner_v1.0-0005.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Tiny Tetris VS&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Antxiko&lt;br /&gt;
|target=ROM_16K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/16/msxdev25-44-tiny-tetris-vs/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=tinytetrisvs&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_TinyTetrisVS_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_TinyTetrisVS_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Soul Trapped&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Casper Croes&amp;lt;br/&amp;gt;[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_NEO16_16M&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=MSXMUSIC&lt;br /&gt;
|ext2=MOUSE&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/18/msxdev25-47-soul-trapped/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=soultrapped&lt;br /&gt;
|version=1.4.0&lt;br /&gt;
|signature=&amp;quot;CCTR&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_SoulTrapped_v1.0_01.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_SoulTrapped_v1.0_03.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Snake Exacape&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=2NICE&lt;br /&gt;
|target=ROM_64K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|ext1=MSXMUSIC&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://2nicemsx.nl/snake-escape&lt;br /&gt;
|webmsx=https://2nicemsx.nl/snake-escape/webmsx&lt;br /&gt;
|version=1.2.12&lt;br /&gt;
|signature=&amp;quot;2NSE&amp;quot;&lt;br /&gt;
|image1=https://2nicemsx.nl/snake-escape/img/snakeescape1.jpg&lt;br /&gt;
|image2=https://2nicemsx.nl/snake-escape/img/snakeescape2.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=MUGI&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Hando&lt;br /&gt;
|target=ROM_48K_ISR&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, May&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=&amp;quot;HNMG&amp;quot;&lt;br /&gt;
|image1=https://aoineko.org/msxgl/images/thumb/b/b6/Game_mugi_01.png/775px-Game_mugi_01.png&lt;br /&gt;
|image2=https://aoineko.org/msxgl/images/thumb/6/60/Game_mugi_02.png/775px-Game_mugi_02.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=City MSX&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=BigFive (mgoulartBR)&lt;br /&gt;
|target=ROM ASCII16&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, Sep.&lt;br /&gt;
|site=https://mgoulartbr.itch.io/city-msx&lt;br /&gt;
|purchase=https://mgoulartbr.itch.io/city-msx&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://i.postimg.cc/P5P4sxTp/859c2b11-9446-4212-9435-e7ce8df679e4.png&lt;br /&gt;
|image2=https://i.postimg.cc/zXD777M5/demo-city-itch.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Berzerk&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Pixel Forge&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, Sep.&lt;br /&gt;
|site=https://www.msxdev.org/2026/09/21/msxdev26-02-berzerk/&lt;br /&gt;
|purchase=&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=berzerk&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/09/MSXdev26_Berzerk_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/09/MSXdev26_Berzerk_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Invictus&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Pablo David Garaguso&lt;br /&gt;
|target=ROM_ASCII16_128K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, Oct.&lt;br /&gt;
|site=https://www.msxdev.org/2026/10/24/msxdev26-09-invictus/&lt;br /&gt;
|purchase=&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=invictus&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/10/MSXdev26_Invictus_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/10/MSXdev26_Invictus_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Wizzl&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (GFX)&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=✅ 2026, Oct.&lt;br /&gt;
|site=https://wizzl.lululand.fr/&lt;br /&gt;
|purchase=https://wizzl.lululand.fr/&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=1.5.2&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,4&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/wizzl_1.png&lt;br /&gt;
|image2=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/wizzl_2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Work-in-progress software ==&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Final Smash&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=https://github.com/aoineko-fr/FinalSmash&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/aoineko-fr/FinalSmash/raw/master/emul/rom/tennis.rom&lt;br /&gt;
|version=0.9.0&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,2&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/finalsmash.jpg&lt;br /&gt;
|image2=https://msxvillage.fr/upload/fs_score.gif&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Popeye&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Wim&lt;br /&gt;
|target=&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=Unknown&lt;br /&gt;
|image1=https://cdn.discordapp.com/attachments/574951023374761988/1164328603375374448/image.png?ex=6542d083&amp;amp;is=65305b83&amp;amp;hm=c3b357b359cbc2b3809277cac00ca8252242d1977f0c950e2927230d9aa346f9&amp;amp;&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Duæl Drop&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Totta&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=1.0.0&lt;br /&gt;
|signature=&amp;quot;TTDD&amp;quot;&lt;br /&gt;
|image1=https://cdn.discordapp.com/attachments/1049454935261073409/1227685092323754035/DuaelDrop-7.png?ex=672e56d7&amp;amp;is=672d0557&amp;amp;hm=06e8a0789277e4f07bb046520c4129c99a39d89d479a107a6fca0f718db56978&amp;amp;&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Debug-Riken&amp;lt;br/&amp;gt;デバグリケン&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=HtDreams&lt;br /&gt;
|target=&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=GBMSX&lt;br /&gt;
|genre=Tool&lt;br /&gt;
|author=Bruno Catao&lt;br /&gt;
|target=DOS2&lt;br /&gt;
|msx=MSX2+&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=https://github.com/brunogamacatao/msxgb&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/brunogamacatao/msxgb&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Samples programs ==&lt;br /&gt;
&lt;br /&gt;
MSXgl is supplied with a [[Samples|large number of sample programs]] which you can use as a reference for using the engine's various features.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_game.png&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_draw.jpg&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_clock.jpg&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_swtile.png&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/html&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=Projects&amp;diff=4056</id>
		<title>Projects</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=Projects&amp;diff=4056"/>
				<updated>2026-10-24T12:01:17Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here's a list of known projects using {{MSXGL}}:&lt;br /&gt;
&lt;br /&gt;
== Games, applications and demos ==&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Genre&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Author&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Release&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Target&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Link&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;MSXgl Version&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Signature&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Image&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=msx3d&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=JBikker&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2022, Feb.&lt;br /&gt;
|site=https://github.com/jbikker/msx3d&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=0.3.0&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://msxvillage.fr/upload/msx3d.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Simple scroller&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=xchip&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2022, Apr.&lt;br /&gt;
|site=https://github.com/aguaviva/msx1_smooth_scroller&lt;br /&gt;
|webmsx=https://webmsx.org/?ROM=https://github.com/aguaviva/msx1_smooth_scroller/raw/refs/heads/main/precompiled/template.rom&amp;amp;MACHINE=MSX1A&lt;br /&gt;
|version=0.3.2&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/scroller.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=VATT&lt;br /&gt;
|genre=Tool&lt;br /&gt;
|author=Aoineko&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX122P&lt;br /&gt;
|state=✅ 2023, Apr.&lt;br /&gt;
|site=https://github.com/aoineko-fr/VATT&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=0.9.10&lt;br /&gt;
|signature=&amp;quot;GLVT&amp;quot;&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/VATT/master/doc/vatt.jpg&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Mandoroids&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Igor Moreno&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Apr.&lt;br /&gt;
|site=https://github.com/MorenoIgor/Mandoroids&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/MorenoIgor/Mandoroids/raw/main/mandoroids/emul/rom/mandoroids.rom&lt;br /&gt;
|code=https://github.com/MorenoIgor/Mandoroids/tree/main/mandoroids&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=https://user-images.githubusercontent.com/35140312/233985120-45d4fb8e-fe30-47a0-a8ec-93438ad86cc3.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Martian War&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_16K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2023, May&lt;br /&gt;
|site=https://www.msxdev.org/2023/05/06/msxdev23-07-martian-war/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=martianwar&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;FPMW&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/05/MSXdev23_MartianWar_v1.0_001-1024x766.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/05/MSXdev23_MartianWar_v1.0_002-1024x768.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=screen3&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=HSK&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2023, May&lt;br /&gt;
|site=https://github.com/hsk/msxgl/tree/main&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=Unknown&lt;br /&gt;
|image1=http://aoineko.org/files/hsk_screen3v4.gif&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=A Lone Wolf&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=FutureDisk&lt;br /&gt;
|target=DISK&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|ext1=MSXMUSIC&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Jul.&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;FDLW&amp;quot;&lt;br /&gt;
|image1=https://www.msx.org/sites/default/files/news/2024/11/WMSX_Screen_1.png&lt;br /&gt;
|image2=https://www.msx.org/sites/default/files/news/2024/11/WMSX_Screen_2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Eggy’s Maze&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Bik5 (JBikker)&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2023, Aug.&lt;br /&gt;
|site=https://www.msxdev.org/2023/08/30/msxdev23-15-eggys-maze/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=eggysmaze&lt;br /&gt;
|purchase=https://cotegamers.com/shop/en/accueil/177-eggy-s-maze-preorder.html&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;B5EM&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/08/MSXdev23_EggysMaze_v1.0.0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/08/MSXdev23_EggysMaze_v1.0.0002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Attack of the Petscii Robots&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=RoboSoft (ToriHino)&lt;br /&gt;
|target=ROM_ASCII8_2M&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=V9990&lt;br /&gt;
|ext2=OPL4&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Sep.&lt;br /&gt;
|site=https://www.msxdev.org/2023/09/19/msxdev23-18-attack-of-the-petscii-robots/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=attackofthepetsciirobots&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;RSPE&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/09/MSXdev23_AttackofthePetsciiRobots_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/09/MSXdev23_AttackofthePetsciiRobots_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Crawlers&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|ext1=NINJATAP&lt;br /&gt;
|ext2=PAC&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Oct.&lt;br /&gt;
|site=https://github.com/aoineko-fr/Crawlers&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/aoineko-fr/Crawlers/raw/master/emul/rom/crawlers.rom&amp;amp;PRESETS=PAC2&lt;br /&gt;
|purchase=https://www.ebsoft.fr/shop/fr/home/117-crawlers.html&lt;br /&gt;
|version=0.10.1&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,1&lt;br /&gt;
|image1=https://github.com/aoineko-fr/MSXgl/raw/main/engine/doc/img/crawlers.png&lt;br /&gt;
|image2=https://github.com/aoineko-fr/MSXgl/raw/main/engine/doc/img/crawlers_2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Phenix Corrupta&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Casper Croes&lt;br /&gt;
|target=ROM_ASCII8_512K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2023, Oct.&lt;br /&gt;
|site=https://www.msxdev.org/2023/10/16/msxdev23-27-phenix-corrupta/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=phenixcorrupta&lt;br /&gt;
|purchase=https://cotegamers.com/shop/fr/accueil/187-phenix-corrupta-msx-precommande.html&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;CCPC&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_PhenixCorrupta_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_PhenixCorrupta_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Tetpuz&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Totta&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2023, Oct.&lt;br /&gt;
|site=https://www.msxdev.org/2023/10/17/msxdev23-28-tetpuz/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=tetpuz&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;TTTP&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_Tetpuz_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_Tetpuz_v1.0_002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=NY2024&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2024, Jan.&lt;br /&gt;
|site=https://github.com/aoineko-fr/NY2024&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/aoineko-fr/NY2024&lt;br /&gt;
|purchase=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;GL24&amp;quot;&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
|video=Yd4Q1YYXJbA&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Sam.Pr&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2024, Jul.&lt;br /&gt;
|site=https://www.msxdev.org/2024/07/16/msxdev24-07-sam-pr/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=sampr&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;FPSP&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2024/07/MSXdev24_Sam.Pr_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2024/07/MSXdev24_Sam.Pr_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Alley Cat&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Rutagames (Diogo Patrão)&lt;br /&gt;
|target=ROM_ASCII8_128K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2024, Nov.&lt;br /&gt;
|site=https://sites.google.com/view/alleycatparamsx/&lt;br /&gt;
|purchase=https://sites.google.com/view/alleycatparamsx/&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=https://aoineko.org/msxgl/images/thumb/9/92/AllyCatTitle.png/724px-AllyCatTitle.png&lt;br /&gt;
|image2=https://aoineko.org/msxgl/images/c/c3/AlleyCatGame.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Sam.Pr Explore&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_ASCII16_256K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2024, Dec.&lt;br /&gt;
|site=https://www.msxdev.org/2024/12/20/msxdev24-19-sam-pr-explorer/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=samprexplorer&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;FPEX&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2024/12/Msxdev24_sam.prexplorer_v1.0_0002.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2024/12/Msxdev24_sam.prexplorer_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=NY2025&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Jan.&lt;br /&gt;
|site=https://github.com/aoineko-fr/NY2025&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/aoineko-fr/NY2025&lt;br /&gt;
|purchase=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;GL25&amp;quot;&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
|video=Rl-1g2TtrtA&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Room 5&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=MO5.com&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=✅ 2025, Jan.&lt;br /&gt;
|site=https://mo5com.itch.io/room-5&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/Asso-MO5/room5/raw/main/room5/emul/rom/Room5.rom&lt;br /&gt;
|version=0.10.1&lt;br /&gt;
|signature=&amp;quot;MOR5&amp;quot;&lt;br /&gt;
|image1=https://img.itch.zone/aW1hZ2UvMjEzNTQ1Mi8xMzQ2MTQ1MC5qcGc=/original/YUiAHD.jpg&lt;br /&gt;
|image2=https://img.itch.zone/aW1hZ2UvMjEzNTQ1Mi8xMzQ2MTQ2Ny5qcGc=/original/Ssow9u.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Super Sokoban&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=2NICE&lt;br /&gt;
|target=ROM_KONAMI_SCC_128K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, March&lt;br /&gt;
|site=https://www.msxdev.org/2025/01/28/msxdev24-28-super-sokoban/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=supersokoban&lt;br /&gt;
|version=1.2.12&lt;br /&gt;
|signature=&amp;quot;2NSO&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2025/01/MSXdev24_SuperSokoban_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2025/01/MSXdev24_SuperSokoban_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Doomlings&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Totta&lt;br /&gt;
|target=ROM_ASCII16_256K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2025, Jan.&lt;br /&gt;
|site=https://www.msxdev.org/2025/02/03/msxdev24-31-doomlings/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=doomlings&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;TTDL&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2025/02/Msxdev24_doomlings_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2025/02/Msxdev24_doomlings_v1.0_0002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=EMinEx&lt;br /&gt;
|genre=Tool&lt;br /&gt;
|author=LudoJoey&lt;br /&gt;
|target=BIN_TAPE&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2025, Apr.&lt;br /&gt;
|site=https://github.com/ludosevilla/EMinEx&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://raw.githubusercontent.com/ludosevilla/EMinEx/refs/heads/main/images/minipavi.png&lt;br /&gt;
|image2=https://raw.githubusercontent.com/ludosevilla/EMinEx/refs/heads/main/images/meteo.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Peng Pong&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=✅ 2025, March&lt;br /&gt;
|site=https://github.com/aoineko-fr/PengPong&lt;br /&gt;
|webmsx=https://webmsx.org/?ROM=https://github.com/aoineko-fr/PengPong/raw/refs/heads/master/emul/rom/pengpong.rom&lt;br /&gt;
|version=1.3.0&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,3&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/PengPong/master/doc/img/pengpong1.png&lt;br /&gt;
|image2=https://raw.githubusercontent.com/aoineko-fr/PengPong/master/doc/img/pengpong2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Toride no Kōbō&amp;lt;br/&amp;gt;砦の攻防&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Hando&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Sep.&lt;br /&gt;
|site=https://github.com/handomade/ToridenoKoubou-for-MSX2&lt;br /&gt;
|webmsx=https://webmsx.org/?ROM=https://github.com/handomade/ToridenoKoubou-for-MSX2/raw/refs/heads/main/Toride.rom&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://aoineko.org/msxgl/images/thumb/6/6e/Game_fortress_01.png/775px-Game_fortress_01.png&lt;br /&gt;
|image2=https://aoineko.org/msxgl/images/thumb/3/37/Game_fortress_02.png/775px-Game_fortress_02.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=The new Castle&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Nicola Brogelli&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2025, October&lt;br /&gt;
|site=https://www.msxdev.org/2025/10/18/msxdev25-13-the-new-castle/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=thenewcastle&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2025/10/Msxdev25_thenewcastle_v1.0_0001.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2025/10/Msxdev25_thenewcastle_v1.0_0002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=TerMSX&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Diogo Patrão&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Nov.&lt;br /&gt;
|site=https://rutagamesltda.itch.io/termsx&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://img.itch.zone/aW1nLzIzOTAyMzMzLnBuZw==/315x250%23c/kVbbsO.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Super Sokoban Xmas quiz '25&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=2NICE&lt;br /&gt;
|target=ROM_KONAMI_128K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Dec.&lt;br /&gt;
|site=https://2nicemsx.nl/super-sokoban/xmasquiz/&lt;br /&gt;
|webmsx=https://2nicemsx.nl/super-sokoban/xmasquiz/webmsx/&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=https://2nicemsx.nl/super-sokoban/xmasquiz/img/supersokobanxmas1.jpg&lt;br /&gt;
|image2=https://2nicemsx.nl/super-sokoban/xmasquiz/img/supersokobanxmas3.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=NY2026&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_48K_ISR&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, Jan.&lt;br /&gt;
|site=https://github.com/aoineko-fr/NY2026&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/aoineko-fr/NY2026&lt;br /&gt;
|purchase=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;GL26&amp;quot;&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
|video=1kbN7VnbfaU&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=DELTA&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Bik5 (JBikker)&lt;br /&gt;
|target=ROM_ASCII16_4M&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|ext1=SCC&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2026, February&lt;br /&gt;
|site=https://www.msxdev.org/2026/02/21/msxdev25-30-delta/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=delta&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;B5R3&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_DELTA_v1.0_000.jpg&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_DELTA_v1.0_002.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=TerMSX Multi&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Rutagames (Diogo Patrão)&lt;br /&gt;
|target=ROM_ASCII8_512K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, February&lt;br /&gt;
|site=https://www.msxdev.org/2026/02/26/msxdev25-32-termsx/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=termsx&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;RGTM&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/01/Msxdev25_termsx_v1.0_001.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/02/Msxdev25_termsx_v1.0_002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Soccer League&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_YAMANOOTO_8M&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=V9990&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/02/msxdev25-34-soccer-league/&lt;br /&gt;
|webmsx=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_SoccerLeague_v1.2.zip&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;FPSL&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_SoccerLeague_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_SoccerLeague_v1.0_005.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=AstroJump&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Tiago Tresoldi&amp;lt;br/&amp;gt;Freja Lindgren&lt;br /&gt;
|target=ROM_16K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/05/msxdev25-35-astrojump/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=astrojump&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;RGAJ&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/Msxdev25_astrojump_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/Msxdev25_astrojump_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Chrono Runner&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=MSX Italia Association&lt;br /&gt;
|target=ROM_ASCII16_128K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/14/msxdev25-38-chrono-runner/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=chronorunner&lt;br /&gt;
|source=https://github.com/AssociazioneMsxItalia/Chrono-runners&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;AMCR&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/msxdev25_chrono-runner_v1.0-0001.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/msxdev25_chrono-runner_v1.0-0005.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Tiny Tetris VS&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Antxiko&lt;br /&gt;
|target=ROM_16K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/16/msxdev25-44-tiny-tetris-vs/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=tinytetrisvs&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_TinyTetrisVS_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_TinyTetrisVS_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Soul Trapped&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Casper Croes&amp;lt;br/&amp;gt;[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_NEO16_16M&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=MSXMUSIC&lt;br /&gt;
|ext2=MOUSE&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/18/msxdev25-47-soul-trapped/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=soultrapped&lt;br /&gt;
|version=1.4.0&lt;br /&gt;
|signature=&amp;quot;CCTR&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_SoulTrapped_v1.0_01.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_SoulTrapped_v1.0_03.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Snake Exacape&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=2NICE&lt;br /&gt;
|target=ROM_64K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|ext1=MSXMUSIC&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://2nicemsx.nl/snake-escape&lt;br /&gt;
|webmsx=https://2nicemsx.nl/snake-escape/webmsx&lt;br /&gt;
|version=1.2.12&lt;br /&gt;
|signature=&amp;quot;2NSE&amp;quot;&lt;br /&gt;
|image1=https://2nicemsx.nl/snake-escape/img/snakeescape1.jpg&lt;br /&gt;
|image2=https://2nicemsx.nl/snake-escape/img/snakeescape2.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=MUGI&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Hando&lt;br /&gt;
|target=ROM_48K_ISR&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, May&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=&amp;quot;HNMG&amp;quot;&lt;br /&gt;
|image1=https://aoineko.org/msxgl/images/thumb/b/b6/Game_mugi_01.png/775px-Game_mugi_01.png&lt;br /&gt;
|image2=https://aoineko.org/msxgl/images/thumb/6/60/Game_mugi_02.png/775px-Game_mugi_02.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=City MSX&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=BigFive (mgoulartBR)&lt;br /&gt;
|target=ROM ASCII16&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, Sep.&lt;br /&gt;
|site=https://mgoulartbr.itch.io/city-msx&lt;br /&gt;
|purchase=https://mgoulartbr.itch.io/city-msx&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://i.postimg.cc/P5P4sxTp/859c2b11-9446-4212-9435-e7ce8df679e4.png&lt;br /&gt;
|image2=https://i.postimg.cc/zXD777M5/demo-city-itch.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Berzerk&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Pixel Forge&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, Sep.&lt;br /&gt;
|site=https://www.msxdev.org/2026/09/21/msxdev26-02-berzerk/&lt;br /&gt;
|purchase=&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=berzerk&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/09/MSXdev26_Berzerk_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/09/MSXdev26_Berzerk_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Invictus&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Pablo David Garaguso&lt;br /&gt;
|target=ROM_ASCII16_128K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, Oct.&lt;br /&gt;
|site=https://www.msxdev.org/2026/10/24/msxdev26-09-invictus/&lt;br /&gt;
|purchase=&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=invictus&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/10/MSXdev26_Invictus_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/10/MSXdev26_Invictus_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Wizzl&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (GFX)&lt;br /&gt;
|target=ROM_KONAMI_256K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=1.4.1&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,4&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/wizzl_1.png&lt;br /&gt;
|image2=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/wizzl_2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Final Smash&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=https://github.com/aoineko-fr/FinalSmash&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/aoineko-fr/FinalSmash/raw/master/emul/rom/tennis.rom&lt;br /&gt;
|version=0.9.0&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,2&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/finalsmash.jpg&lt;br /&gt;
|image2=https://msxvillage.fr/upload/fs_score.gif&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Popeye&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Wim&lt;br /&gt;
|target=&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=Unknown&lt;br /&gt;
|image1=https://cdn.discordapp.com/attachments/574951023374761988/1164328603375374448/image.png?ex=6542d083&amp;amp;is=65305b83&amp;amp;hm=c3b357b359cbc2b3809277cac00ca8252242d1977f0c950e2927230d9aa346f9&amp;amp;&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Duæl Drop&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Totta&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=1.0.0&lt;br /&gt;
|signature=&amp;quot;TTDD&amp;quot;&lt;br /&gt;
|image1=https://cdn.discordapp.com/attachments/1049454935261073409/1227685092323754035/DuaelDrop-7.png?ex=672e56d7&amp;amp;is=672d0557&amp;amp;hm=06e8a0789277e4f07bb046520c4129c99a39d89d479a107a6fca0f718db56978&amp;amp;&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Debug-Riken&amp;lt;br/&amp;gt;デバグリケン&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=HtDreams&lt;br /&gt;
|target=&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=GBMSX&lt;br /&gt;
|genre=Tool&lt;br /&gt;
|author=Bruno Catao&lt;br /&gt;
|target=DOS2&lt;br /&gt;
|msx=MSX2+&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=https://github.com/brunogamacatao/msxgb&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/brunogamacatao/msxgb&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Samples programs ==&lt;br /&gt;
&lt;br /&gt;
MSXgl is supplied with a [[Samples|large number of sample programs]] which you can use as a reference for using the engine's various features.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_game.png&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_draw.jpg&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_clock.jpg&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_swtile.png&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/html&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4055</id>
		<title>NEO mapper/Extension2</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4055"/>
				<updated>2026-10-20T22:40:50Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: &lt;/p&gt;
&lt;hr /&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 address bits 11-13 set to 0 is considered as 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 address contains an 4-bit function ID, and a 3-bit destination bank value for function that applied to a given mapper's bank.&lt;br /&gt;
&lt;br /&gt;
The data can be use by the function as a parameter.&lt;br /&gt;
&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:#AAF;&amp;quot; colspan=&amp;quot;3&amp;quot;| Bank&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;4&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;
=== Functions ===&lt;br /&gt;
==== 0x00: ROM mapper ====&lt;br /&gt;
Activate access to the cartridge ROM mapper through the given bank (default mode)&lt;br /&gt;
&lt;br /&gt;
Parameter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#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;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x01: Cartridge information ====&lt;br /&gt;
Activate read access to the cartridge information data through the given bank (8 KB mirrored on NEO-16)&lt;br /&gt;
&lt;br /&gt;
Parameter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#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;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x02: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x03: RAM ====&lt;br /&gt;
Activate read/write access to RAM through the given bank&lt;br /&gt;
&lt;br /&gt;
Parameter: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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;8&amp;quot;| RAM segment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x04: SRAM/FRAM ====&lt;br /&gt;
Activate read/write access to SRAM/FRAM through the given bank (8 KB mirrored on NEO-16)&lt;br /&gt;
&lt;br /&gt;
Parameter: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#AAF;&amp;quot; colspan=&amp;quot;4&amp;quot;| Segment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x05: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x06: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x07: SCC/SCC+ ====&lt;br /&gt;
Activate SCC to be accessed through memory area from 9800h to 9FFFh (4 KB mirrored)&lt;br /&gt;
Any bank number is valid, but bank #4 is recommanded for NEO-8 and #2 for NEO-16 to use standard address for &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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;| C&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:#BBB;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#BBB;&amp;quot;| 0&lt;br /&gt;
|}&lt;br /&gt;
* C: 0=SCC, 1=SCC+&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;
#define BANK_NUM				3&lt;br /&gt;
#define BANK_SIZE				(16 * 1024)&lt;br /&gt;
#define ROM_SEG_NUM				1024&lt;br /&gt;
#define ROM_SEG_MASK			(ROM_SEG_NUM - 1)&lt;br /&gt;
#define ROM_SIZE				(ROM_SEG_NUM * BANK_SIZE)&lt;br /&gt;
#define FUNC_NUM				16&lt;br /&gt;
&lt;br /&gt;
// Extended function prototypes&lt;br /&gt;
typedef void (*funcSelect_t)(uint8, uint8);&lt;br /&gt;
typedef void (*funcWrite_t)(uint16, uint8);&lt;br /&gt;
typedef uint8 (*funcRead_t)(uint16);&lt;br /&gt;
&lt;br /&gt;
// Extended functions tables&lt;br /&gt;
funcSelect_t funcSelectTable[FUNC_NUM];&lt;br /&gt;
funcWrite_t funcWriteTable[BANK_NUM];&lt;br /&gt;
funcRead_t funcReadTable[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
// Supported extended function initialization&lt;br /&gt;
void initMapper();&lt;br /&gt;
void initInfo();&lt;br /&gt;
void initRAM();&lt;br /&gt;
void initSRAM();&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// NEO-16 Interface&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
// Handle device initialization&lt;br /&gt;
void NEO16_Init()&lt;br /&gt;
{&lt;br /&gt;
	// Mandatory functions&lt;br /&gt;
	initMapper();&lt;br /&gt;
	initInfo();&lt;br /&gt;
	// Optional functions&lt;br /&gt;
	initRAM();&lt;br /&gt;
	initSRAM();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Handle write access&lt;br /&gt;
void NEO16_Write(uint16 address, uint8 data)&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;lt; BANK_NUM)&lt;br /&gt;
	{&lt;br /&gt;
		funcWriteTable[bank](address, data);&lt;br /&gt;
	}&lt;br /&gt;
	else // Extended function&lt;br /&gt;
	{&lt;br /&gt;
		uint8 funcId = address &amp;amp; 0xFF; // Get function ID&lt;br /&gt;
		bank = (address &amp;gt;&amp;gt; 8) &amp;amp; 0x07; // Get destination bank&lt;br /&gt;
		if ((bank &amp;lt; BANK_NUM) &amp;amp;&amp;amp; (funcSelectTable[funcId] != NULL)) // Is function supported?&lt;br /&gt;
			funcSelectTable[funcId](bank, data); // Initialize function specific code&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;lt; BANK_NUM)&lt;br /&gt;
		return funcReadTable[bank](address);&lt;br /&gt;
&lt;br /&gt;
	return 0xFF; // skip&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x00 - ROM Mapper&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
// ROM data&lt;br /&gt;
extern const uint8* romData; &lt;br /&gt;
&lt;br /&gt;
// Bank switching register value&lt;br /&gt;
uint16 romSegment[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
void writeMapper(uint16 address, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	if (address &amp;amp; 1) // Set bank register MSB&lt;br /&gt;
		romSegment[bank] = ((data &amp;amp; 0x0F) &amp;lt;&amp;lt; 8) | (romSegment[bank] &amp;amp; 0x00FF);&lt;br /&gt;
	else // Set bank register LSB&lt;br /&gt;
		romSegment[bank] = (romSegment[bank] &amp;amp; 0xFF00) | (data);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8 readMapper(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	return romData[(romSegment[bank]) &amp;lt;&amp;lt; 14 + (address &amp;amp; 0x3FFF)];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectMapper(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	funcWriteTable[bank] = writeMapper;&lt;br /&gt;
	funcReadTable[bank] = readMapper;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initMapper()&lt;br /&gt;
{&lt;br /&gt;
	for (uint8 i = 0; i &amp;lt; BANK_NUM; i++)&lt;br /&gt;
	{&lt;br /&gt;
		romSegment[i] = 0x0000;&lt;br /&gt;
		selectMapper(i, 0);		&lt;br /&gt;
	}&lt;br /&gt;
	funcSelectTable[0] = selectMapper;&lt;br /&gt;
}&lt;br /&gt;
	&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x01 - Cartridge Information&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
struct info&lt;br /&gt;
{&lt;br /&gt;
	char	Sign[3];&lt;br /&gt;
	uint8	Version;&lt;br /&gt;
	uint8	Flag;&lt;br /&gt;
	uint8	_reserved1;&lt;br /&gt;
	uint16	SegmentNum;&lt;br /&gt;
	uint8	_reserved2[8];&lt;br /&gt;
	uint8	Functions[FUNC_NUM]; // Must be different from 0 for supported functions &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
const struct infoData = &lt;br /&gt;
{&lt;br /&gt;
	{ 'N', 'E', 'O' },&lt;br /&gt;
	0x13, // Version 1.3&lt;br /&gt;
	0x01, // NEO-16&lt;br /&gt;
	0,&lt;br /&gt;
	ROM_SEG_NUM, // 1204 segments (16 MB)&lt;br /&gt;
	{ 0, 0, 0, 0, 0, 0, 0, 0 },&lt;br /&gt;
	{&lt;br /&gt;
		1, // Mapper&lt;br /&gt;
		1, // Info&lt;br /&gt;
		0,&lt;br /&gt;
		32,	// RAM&lt;br /&gt;
		32, // SRAM/FRAM&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0, // SCC&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,		&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
	},&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void writeInfo(uint16 address, uint8 data) {}&lt;br /&gt;
&lt;br /&gt;
uint8 readInfo(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	uint8 index = address &amp;amp; 0xFF; // mirrored every 256 bytes&lt;br /&gt;
	if (index &amp;gt; sizeof(info))&lt;br /&gt;
		return 0;&lt;br /&gt;
	return ((const uint8*)&amp;amp;infoData)[index]; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectInfo(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	funcWriteTable[bank] = writeInfo;&lt;br /&gt;
	funcReadTable[bank] = readInfo;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initInfo()&lt;br /&gt;
{&lt;br /&gt;
	funcSelectTable[1] = selectInfo;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x03 - RAM&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
#define RAM_SEG_NUM				32&lt;br /&gt;
#define RAM_SEG_MASK			(RAM_SEG_NUM - 1)&lt;br /&gt;
&lt;br /&gt;
// RAM data&lt;br /&gt;
uint8 ramData[16 * 1024 * RAM_SEG_NUM]; // 32 * 16 KB = 512 KB&lt;br /&gt;
&lt;br /&gt;
// Bank switching register value&lt;br /&gt;
uint8 ramSegment[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
void writeRAM(uint16 address, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	ramData[(ramSegment[bank]) &amp;lt;&amp;lt; 14 + (address &amp;amp; 0x3FFF)] = data;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8 readRAM(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	return ramData[(ramSegment[bank]) &amp;lt;&amp;lt; 14 + (address &amp;amp; 0x3FFF)];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectRAM(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	ramSegment[bank] = data &amp;amp; RAM_SEG_MASK;&lt;br /&gt;
	funcWriteTable[bank] = writeRAM;&lt;br /&gt;
	funcReadTable[bank] = readRAM;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initRAM()&lt;br /&gt;
{&lt;br /&gt;
	for (uint8 i = 0; i &amp;lt; BANK_NUM; i++)&lt;br /&gt;
		ramSegment = 0;&lt;br /&gt;
	funcSelectTable[3] = selectRAM;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x04 - SRAM&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
#define SRAM_SEG_NUM			16&lt;br /&gt;
#define SRAM_SEG_MASK			(SRAM_SEG_NUM - 1)&lt;br /&gt;
&lt;br /&gt;
// SRAM data&lt;br /&gt;
uint8 sramData[8 * 1024 * SRAM_SEG_NUM]; // 16 * 8 KB = 128 KB&lt;br /&gt;
&lt;br /&gt;
// Bank switching register value&lt;br /&gt;
uint8 sramSegment[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
void writeSRAM(uint16 address, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	sramData[(sramSegment[bank]) &amp;lt;&amp;lt; 13 + (address &amp;amp; 0x1FFF)] = data;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8 readSRAM(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	return sramData[(sramSegment[bank]) &amp;lt;&amp;lt; 13 + (address &amp;amp; 0x1FFF)];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectSRAM(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	sramSegment[bank] = data &amp;amp; SRAM_SEG_MASK;&lt;br /&gt;
	funcWriteTable[bank] = writeSRAM;&lt;br /&gt;
	funcReadTable[bank] = readSRAM;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initSRAM()&lt;br /&gt;
{&lt;br /&gt;
	for (uint8 i = 0; i &amp;lt; BANK_NUM; i++)&lt;br /&gt;
		sramSegment = 0;&lt;br /&gt;
	funcSelectTable[4] = selectSRAM;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4054</id>
		<title>NEO mapper/Extension2</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4054"/>
				<updated>2026-10-20T22:17:10Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: /* Principles */&lt;/p&gt;
&lt;hr /&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 address bits 11-13 set to 0 is considered as 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 address contains an 4-bit function ID, and a 3-bit destination bank value for function that applied to a given mapper's bank.&lt;br /&gt;
&lt;br /&gt;
The data can be use by the function as a parameter.&lt;br /&gt;
&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:#AAF;&amp;quot; colspan=&amp;quot;3&amp;quot;| Bank&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;4&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;
=== Functions ===&lt;br /&gt;
==== 0x00: ROM mapper ====&lt;br /&gt;
Activate access to the cartridge ROM mapper through the given bank (default mode)&lt;br /&gt;
&lt;br /&gt;
Parameter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#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;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x01: Cartridge information ====&lt;br /&gt;
Activate read access to the cartridge information data through the given bank (8 KB mirrored on NEO-16)&lt;br /&gt;
&lt;br /&gt;
Parameter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#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;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x02: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x03: RAM ====&lt;br /&gt;
Activate read/write access to RAM through the given bank&lt;br /&gt;
&lt;br /&gt;
Parameter: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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;8&amp;quot;| RAM segment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x04: SRAM/FRAM ====&lt;br /&gt;
Activate read/write access to SRAM/FRAM through the given bank (8 KB mirrored on NEO-16)&lt;br /&gt;
&lt;br /&gt;
Parameter: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#AAF;&amp;quot; colspan=&amp;quot;4&amp;quot;| Segment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x05: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x06: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x07: SCC/SCC+ ====&lt;br /&gt;
Activate SCC to be accessed through memory area from 9800h to 9FFFh (4 KB mirrored)&lt;br /&gt;
Any bank number is valid, but bank #4 is recommanded for NEO-8 and #2 for NEO-16 to use standard address for &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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;| C&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:#BBB;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#BBB;&amp;quot;| 0&lt;br /&gt;
|}&lt;br /&gt;
* C: 0=SCC, 1=SCC+&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;
#define BANK_NUM				3&lt;br /&gt;
#define BANK_SIZE				(16 * 1024)&lt;br /&gt;
#define ROM_SEG_NUM				1024&lt;br /&gt;
#define ROM_SEG_MASK			(ROM_SEG_NUM - 1)&lt;br /&gt;
#define ROM_SIZE				(ROM_SEG_NUM * BANK_SIZE)&lt;br /&gt;
#define FUNC_NUM				16&lt;br /&gt;
&lt;br /&gt;
// Extended function prototypes&lt;br /&gt;
typedef void (*funcSelect_t)(uint8, uint8);&lt;br /&gt;
typedef void (*funcWrite_t)(uint16, uint8);&lt;br /&gt;
typedef uint8 (*funcRead_t)(uint16);&lt;br /&gt;
&lt;br /&gt;
// Extended functions tables&lt;br /&gt;
funcSelect_t funcSelectTable[FUNC_NUM];&lt;br /&gt;
funcWrite_t funcWriteTable[BANK_NUM];&lt;br /&gt;
funcRead_t funcReadTable[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
// Supported extended function initialization&lt;br /&gt;
void initMapper();&lt;br /&gt;
void initInfo();&lt;br /&gt;
void initRAM();&lt;br /&gt;
void initSRAM();&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// NEO-16 Interface&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
// Handle device initialization&lt;br /&gt;
void NEO16_Init()&lt;br /&gt;
{&lt;br /&gt;
	// Mandatory functions&lt;br /&gt;
	initMapper();&lt;br /&gt;
	initInfo();&lt;br /&gt;
	// Optional functions&lt;br /&gt;
	initRAM();&lt;br /&gt;
	initSRAM();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Handle write access&lt;br /&gt;
void NEO16_Write(uint16 address, uint8 data)&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;lt; BANK_NUM)&lt;br /&gt;
	{&lt;br /&gt;
		funcWriteTable[bank](address, data);&lt;br /&gt;
	}&lt;br /&gt;
	else // Extended function&lt;br /&gt;
	{&lt;br /&gt;
		uint8 funcId = address &amp;amp; 0xFF; // Get function ID&lt;br /&gt;
		bank = (address &amp;gt;&amp;gt; 8) &amp;amp; 0x07; // Get destination bank&lt;br /&gt;
		if ((bank &amp;lt; BANK_NUM) &amp;amp;&amp;amp; (funcSelectTable[funcId] != NULL)) // Is function supported?&lt;br /&gt;
			funcSelectTable[funcId](bank, data); // Initialize function specific code&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;lt; BANK_NUM)&lt;br /&gt;
		return funcReadTable[bank](address);&lt;br /&gt;
&lt;br /&gt;
	return 0xFF; // skip&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x00 - ROM Mapper&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
// ROM data&lt;br /&gt;
extern const uint8* romData; &lt;br /&gt;
&lt;br /&gt;
// Bank switching register value&lt;br /&gt;
uint16 romSegment[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
void writeMapper(uint16 address, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	if (address &amp;amp; 1) // Set bank register MSB&lt;br /&gt;
		romSegment[bank] = ((data &amp;amp; 0x0F) &amp;lt;&amp;lt; 8) | (romSegment[bank] &amp;amp; 0x00FF);&lt;br /&gt;
	else // Set bank register LSB&lt;br /&gt;
		romSegment[bank] = (romSegment[bank] &amp;amp; 0xFF00) | (data);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8 readMapper(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	return romData[(romSegment[bank]) &amp;lt;&amp;lt; 14 + (address &amp;amp; 0x3FFF)];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectMapper(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	funcWriteTable[bank] = writeMapper;&lt;br /&gt;
	funcReadTable[bank] = readMapper;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initMapper()&lt;br /&gt;
{&lt;br /&gt;
	for (uint8 i = 0; i &amp;lt; BANK_NUM; i++)&lt;br /&gt;
	{&lt;br /&gt;
		romSegment[i] = 0x0000;&lt;br /&gt;
		selectMapper(i, 0);		&lt;br /&gt;
	}&lt;br /&gt;
	funcSelectTable[0] = selectMapper;&lt;br /&gt;
}&lt;br /&gt;
	&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x01 - Cartridge Information&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
struct info&lt;br /&gt;
{&lt;br /&gt;
	char	Sign[3];&lt;br /&gt;
	uint8	Version;&lt;br /&gt;
	uint8	Flag;&lt;br /&gt;
	uint8	_reserved1;&lt;br /&gt;
	uint16	SegmentNum;&lt;br /&gt;
	uint8	_reserved2[8];&lt;br /&gt;
	uint8	Functions[FUNC_NUM]; // Must be different from 0 for supported functions &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
const struct infoData = &lt;br /&gt;
{&lt;br /&gt;
	{ 'N', 'E', 'O' },&lt;br /&gt;
	0x13, // Version 1.3&lt;br /&gt;
	0x01, // NEO-16&lt;br /&gt;
	0,&lt;br /&gt;
	ROM_SEG_NUM, // 1204 segments (16 MB)&lt;br /&gt;
	{ 0, 0, 0, 0, 0, 0, 0, 0 },&lt;br /&gt;
	{&lt;br /&gt;
		1, // Mapper&lt;br /&gt;
		1, // Info&lt;br /&gt;
		0,&lt;br /&gt;
		32,	// RAM&lt;br /&gt;
		32, // SRAM/FRAM&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0, // SCC&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,		&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
	},&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void writeInfo(uint16 address, uint8 data) {}&lt;br /&gt;
&lt;br /&gt;
uint8 readInfo(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	uint8 index = address &amp;amp; 0xFF; // mirrored every 256 bytes&lt;br /&gt;
	if (index &amp;gt; sizeof(info))&lt;br /&gt;
		return 0;&lt;br /&gt;
	return ((const uint8*)&amp;amp;infoData)[index]; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectInfo(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	funcWriteTable[bank] = writeInfo;&lt;br /&gt;
	funcReadTable[bank] = readInfo;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initMapper()&lt;br /&gt;
{&lt;br /&gt;
	funcSelectTable[1] = selectInfo;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x03 - RAM&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
#define RAM_SEG_NUM				32&lt;br /&gt;
#define RAM_SEG_MASK			(RAM_SEG_NUM - 1)&lt;br /&gt;
&lt;br /&gt;
// RAM data&lt;br /&gt;
uint8 ramData[16 * 1024 * RAM_SEG_NUM]; // 32 * 16 KB = 512 KB&lt;br /&gt;
&lt;br /&gt;
// Bank switching register value&lt;br /&gt;
uint8 ramSegment[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
void writeRAM(uint16 address, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	ramData[(ramSegment[bank]) &amp;lt;&amp;lt; 14 + (address &amp;amp; 0x3FFF)] = data;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8 readRAM(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	return ramData[(ramSegment[bank]) &amp;lt;&amp;lt; 14 + (address &amp;amp; 0x3FFF)];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectRAM(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	ramSegment[bank] = data &amp;amp; RAM_SEG_MASK;&lt;br /&gt;
	funcWriteTable[bank] = writeRAM;&lt;br /&gt;
	funcReadTable[bank] = readRAM;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initRAM()&lt;br /&gt;
{&lt;br /&gt;
	for (uint8 i = 0; i &amp;lt; BANK_NUM; i++)&lt;br /&gt;
		ramSegment = 0;&lt;br /&gt;
	funcSelectTable[3] = selectRAM;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x04 - SRAM&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
#define SRAM_SEG_NUM			16&lt;br /&gt;
#define SRAM_SEG_MASK			(SRAM_SEG_NUM - 1)&lt;br /&gt;
&lt;br /&gt;
// SRAM data&lt;br /&gt;
uint8 sramData[8 * 1024 * SRAM_SEG_NUM]; // 16 * 8 KB = 128 KB&lt;br /&gt;
&lt;br /&gt;
// Bank switching register value&lt;br /&gt;
uint8 sramSegment[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
void writeSRAM(uint16 address, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	sramData[(sramSegment[bank]) &amp;lt;&amp;lt; 13 + (address &amp;amp; 0x1FFF)] = data;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8 readSRAM(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	return sramData[(sramSegment[bank]) &amp;lt;&amp;lt; 13 + (address &amp;amp; 0x1FFF)];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectSRAM(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	sramSegment[bank] = data &amp;amp; SRAM_SEG_MASK;&lt;br /&gt;
	funcWriteTable[bank] = writeSRAM;&lt;br /&gt;
	funcReadTable[bank] = readSRAM;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initSRAM()&lt;br /&gt;
{&lt;br /&gt;
	for (uint8 i = 0; i &amp;lt; BANK_NUM; i++)&lt;br /&gt;
		sramSegment = 0;&lt;br /&gt;
	funcSelectTable[4] = selectSRAM;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4053</id>
		<title>NEO mapper/Extension2</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4053"/>
				<updated>2026-10-20T22:15:53Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: /* Principles */&lt;/p&gt;
&lt;hr /&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 address bits 11-13 set to 0 is considered as 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 address contains an 8-bit function ID, and a 3-bit destination bank value for function to be applied to a given mapper's bank.&lt;br /&gt;
&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:#AAF;&amp;quot; colspan=&amp;quot;3&amp;quot;| Bank&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;4&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;
=== Functions ===&lt;br /&gt;
==== 0x00: ROM mapper ====&lt;br /&gt;
Activate access to the cartridge ROM mapper through the given bank (default mode)&lt;br /&gt;
&lt;br /&gt;
Parameter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#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;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x01: Cartridge information ====&lt;br /&gt;
Activate read access to the cartridge information data through the given bank (8 KB mirrored on NEO-16)&lt;br /&gt;
&lt;br /&gt;
Parameter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#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;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x02: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x03: RAM ====&lt;br /&gt;
Activate read/write access to RAM through the given bank&lt;br /&gt;
&lt;br /&gt;
Parameter: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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;8&amp;quot;| RAM segment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x04: SRAM/FRAM ====&lt;br /&gt;
Activate read/write access to SRAM/FRAM through the given bank (8 KB mirrored on NEO-16)&lt;br /&gt;
&lt;br /&gt;
Parameter: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#AAF;&amp;quot; colspan=&amp;quot;4&amp;quot;| Segment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x05: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x06: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x07: SCC/SCC+ ====&lt;br /&gt;
Activate SCC to be accessed through memory area from 9800h to 9FFFh (4 KB mirrored)&lt;br /&gt;
Any bank number is valid, but bank #4 is recommanded for NEO-8 and #2 for NEO-16 to use standard address for &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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;| C&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:#BBB;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#BBB;&amp;quot;| 0&lt;br /&gt;
|}&lt;br /&gt;
* C: 0=SCC, 1=SCC+&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;
#define BANK_NUM				3&lt;br /&gt;
#define BANK_SIZE				(16 * 1024)&lt;br /&gt;
#define ROM_SEG_NUM				1024&lt;br /&gt;
#define ROM_SEG_MASK			(ROM_SEG_NUM - 1)&lt;br /&gt;
#define ROM_SIZE				(ROM_SEG_NUM * BANK_SIZE)&lt;br /&gt;
#define FUNC_NUM				16&lt;br /&gt;
&lt;br /&gt;
// Extended function prototypes&lt;br /&gt;
typedef void (*funcSelect_t)(uint8, uint8);&lt;br /&gt;
typedef void (*funcWrite_t)(uint16, uint8);&lt;br /&gt;
typedef uint8 (*funcRead_t)(uint16);&lt;br /&gt;
&lt;br /&gt;
// Extended functions tables&lt;br /&gt;
funcSelect_t funcSelectTable[FUNC_NUM];&lt;br /&gt;
funcWrite_t funcWriteTable[BANK_NUM];&lt;br /&gt;
funcRead_t funcReadTable[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
// Supported extended function initialization&lt;br /&gt;
void initMapper();&lt;br /&gt;
void initInfo();&lt;br /&gt;
void initRAM();&lt;br /&gt;
void initSRAM();&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// NEO-16 Interface&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
// Handle device initialization&lt;br /&gt;
void NEO16_Init()&lt;br /&gt;
{&lt;br /&gt;
	// Mandatory functions&lt;br /&gt;
	initMapper();&lt;br /&gt;
	initInfo();&lt;br /&gt;
	// Optional functions&lt;br /&gt;
	initRAM();&lt;br /&gt;
	initSRAM();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Handle write access&lt;br /&gt;
void NEO16_Write(uint16 address, uint8 data)&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;lt; BANK_NUM)&lt;br /&gt;
	{&lt;br /&gt;
		funcWriteTable[bank](address, data);&lt;br /&gt;
	}&lt;br /&gt;
	else // Extended function&lt;br /&gt;
	{&lt;br /&gt;
		uint8 funcId = address &amp;amp; 0xFF; // Get function ID&lt;br /&gt;
		bank = (address &amp;gt;&amp;gt; 8) &amp;amp; 0x07; // Get destination bank&lt;br /&gt;
		if ((bank &amp;lt; BANK_NUM) &amp;amp;&amp;amp; (funcSelectTable[funcId] != NULL)) // Is function supported?&lt;br /&gt;
			funcSelectTable[funcId](bank, data); // Initialize function specific code&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;lt; BANK_NUM)&lt;br /&gt;
		return funcReadTable[bank](address);&lt;br /&gt;
&lt;br /&gt;
	return 0xFF; // skip&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x00 - ROM Mapper&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
// ROM data&lt;br /&gt;
extern const uint8* romData; &lt;br /&gt;
&lt;br /&gt;
// Bank switching register value&lt;br /&gt;
uint16 romSegment[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
void writeMapper(uint16 address, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	if (address &amp;amp; 1) // Set bank register MSB&lt;br /&gt;
		romSegment[bank] = ((data &amp;amp; 0x0F) &amp;lt;&amp;lt; 8) | (romSegment[bank] &amp;amp; 0x00FF);&lt;br /&gt;
	else // Set bank register LSB&lt;br /&gt;
		romSegment[bank] = (romSegment[bank] &amp;amp; 0xFF00) | (data);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8 readMapper(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	return romData[(romSegment[bank]) &amp;lt;&amp;lt; 14 + (address &amp;amp; 0x3FFF)];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectMapper(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	funcWriteTable[bank] = writeMapper;&lt;br /&gt;
	funcReadTable[bank] = readMapper;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initMapper()&lt;br /&gt;
{&lt;br /&gt;
	for (uint8 i = 0; i &amp;lt; BANK_NUM; i++)&lt;br /&gt;
	{&lt;br /&gt;
		romSegment[i] = 0x0000;&lt;br /&gt;
		selectMapper(i, 0);		&lt;br /&gt;
	}&lt;br /&gt;
	funcSelectTable[0] = selectMapper;&lt;br /&gt;
}&lt;br /&gt;
	&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x01 - Cartridge Information&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
struct info&lt;br /&gt;
{&lt;br /&gt;
	char	Sign[3];&lt;br /&gt;
	uint8	Version;&lt;br /&gt;
	uint8	Flag;&lt;br /&gt;
	uint8	_reserved1;&lt;br /&gt;
	uint16	SegmentNum;&lt;br /&gt;
	uint8	_reserved2[8];&lt;br /&gt;
	uint8	Functions[FUNC_NUM]; // Must be different from 0 for supported functions &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
const struct infoData = &lt;br /&gt;
{&lt;br /&gt;
	{ 'N', 'E', 'O' },&lt;br /&gt;
	0x13, // Version 1.3&lt;br /&gt;
	0x01, // NEO-16&lt;br /&gt;
	0,&lt;br /&gt;
	ROM_SEG_NUM, // 1204 segments (16 MB)&lt;br /&gt;
	{ 0, 0, 0, 0, 0, 0, 0, 0 },&lt;br /&gt;
	{&lt;br /&gt;
		1, // Mapper&lt;br /&gt;
		1, // Info&lt;br /&gt;
		0,&lt;br /&gt;
		32,	// RAM&lt;br /&gt;
		32, // SRAM/FRAM&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0, // SCC&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,		&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
	},&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void writeInfo(uint16 address, uint8 data) {}&lt;br /&gt;
&lt;br /&gt;
uint8 readInfo(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	uint8 index = address &amp;amp; 0xFF; // mirrored every 256 bytes&lt;br /&gt;
	if (index &amp;gt; sizeof(info))&lt;br /&gt;
		return 0;&lt;br /&gt;
	return ((const uint8*)&amp;amp;infoData)[index]; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectInfo(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	funcWriteTable[bank] = writeInfo;&lt;br /&gt;
	funcReadTable[bank] = readInfo;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initMapper()&lt;br /&gt;
{&lt;br /&gt;
	funcSelectTable[1] = selectInfo;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x03 - RAM&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
#define RAM_SEG_NUM				32&lt;br /&gt;
#define RAM_SEG_MASK			(RAM_SEG_NUM - 1)&lt;br /&gt;
&lt;br /&gt;
// RAM data&lt;br /&gt;
uint8 ramData[16 * 1024 * RAM_SEG_NUM]; // 32 * 16 KB = 512 KB&lt;br /&gt;
&lt;br /&gt;
// Bank switching register value&lt;br /&gt;
uint8 ramSegment[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
void writeRAM(uint16 address, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	ramData[(ramSegment[bank]) &amp;lt;&amp;lt; 14 + (address &amp;amp; 0x3FFF)] = data;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8 readRAM(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	return ramData[(ramSegment[bank]) &amp;lt;&amp;lt; 14 + (address &amp;amp; 0x3FFF)];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectRAM(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	ramSegment[bank] = data &amp;amp; RAM_SEG_MASK;&lt;br /&gt;
	funcWriteTable[bank] = writeRAM;&lt;br /&gt;
	funcReadTable[bank] = readRAM;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initRAM()&lt;br /&gt;
{&lt;br /&gt;
	for (uint8 i = 0; i &amp;lt; BANK_NUM; i++)&lt;br /&gt;
		ramSegment = 0;&lt;br /&gt;
	funcSelectTable[3] = selectRAM;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x04 - SRAM&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
#define SRAM_SEG_NUM			16&lt;br /&gt;
#define SRAM_SEG_MASK			(SRAM_SEG_NUM - 1)&lt;br /&gt;
&lt;br /&gt;
// SRAM data&lt;br /&gt;
uint8 sramData[8 * 1024 * SRAM_SEG_NUM]; // 16 * 8 KB = 128 KB&lt;br /&gt;
&lt;br /&gt;
// Bank switching register value&lt;br /&gt;
uint8 sramSegment[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
void writeSRAM(uint16 address, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	sramData[(sramSegment[bank]) &amp;lt;&amp;lt; 13 + (address &amp;amp; 0x1FFF)] = data;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8 readSRAM(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	return sramData[(sramSegment[bank]) &amp;lt;&amp;lt; 13 + (address &amp;amp; 0x1FFF)];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectSRAM(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	sramSegment[bank] = data &amp;amp; SRAM_SEG_MASK;&lt;br /&gt;
	funcWriteTable[bank] = writeSRAM;&lt;br /&gt;
	funcReadTable[bank] = readSRAM;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initSRAM()&lt;br /&gt;
{&lt;br /&gt;
	for (uint8 i = 0; i &amp;lt; BANK_NUM; i++)&lt;br /&gt;
		sramSegment = 0;&lt;br /&gt;
	funcSelectTable[4] = selectSRAM;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=MGS&amp;diff=4052</id>
		<title>MGS</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=MGS&amp;diff=4052"/>
				<updated>2026-10-19T23:04:53Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''MSX Game Scores''' (MGS) is an online leaderboard platform for MSX games: https://msx.org/mgs&amp;lt;ref&amp;gt;The server is actually located at https://aoineko.org/mgs, but it is recommended that you use the https://msx.org/mgs address in your communications to ensure a more future-proof address (if the server needs to be migrated elsewhere for example).&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It allows players to submit their high scores using codes generated by the games themselves.&lt;br /&gt;
Developers can integrate score encoding into their games, and once submitted, the scores are verified server-side and displayed on public leaderboards.&lt;br /&gt;
The goal is to bring a modern, competitive scoring system to new MSX games.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Note&amp;lt;/u&amp;gt;: The MGS site has the same author but is not directly linked to [[What is MSXgl?|MSXgl]], even though this library includes tools to help generate score code.&lt;br /&gt;
&lt;br /&gt;
== How do I add my game to MGS? ==&lt;br /&gt;
&lt;br /&gt;
=== Generate a score code ===&lt;br /&gt;
The basic idea is that your MSX game must generate a code that encodes the relevant data: &lt;br /&gt;
* the score, &lt;br /&gt;
* the corresponding leaderboard (if there are several), &lt;br /&gt;
* and any other useful information that you'd like to be feedback in your leaderboard.&lt;br /&gt;
&lt;br /&gt;
For example, in a racing game, besides the time to complete the race (the score) and the track (the leaderboard), you might also want to record the used car model, whether the player used a manual or automatic gearbox, etc.&lt;br /&gt;
&lt;br /&gt;
You are free to use any technique you want to encrypt your data.&lt;br /&gt;
Just make sure the encoding is strong enough to prevent someone from inputting random codes and getting a valid score.&lt;br /&gt;
MSXgl provides a [[Modules/crypt|C module for encoding data]] than can be easily adapt to other development environment.&lt;br /&gt;
&lt;br /&gt;
=== Add your game to MGS ===&lt;br /&gt;
After that, the game and its leaderboards have to be added to the MGS site.&lt;br /&gt;
For now, this is a manual process that is handled directly by the site owner (MRC user Aoineko).&lt;br /&gt;
&lt;br /&gt;
Finally, the interface for converting score code to leaderboard entry needs to be created.&lt;br /&gt;
It consist of several PHP functions (the site owner can help you write them).&lt;br /&gt;
&lt;br /&gt;
==== Decode ====&lt;br /&gt;
If you are not using MSXgl encryption feature in your MSX game, you will have to provide your own decrypt function in PHP (a language that looks a lot like C).&lt;br /&gt;
&lt;br /&gt;
This function have to check the validity of the submitted code and, if valid, generates a bytes array to be sent to submission function.&lt;br /&gt;
&lt;br /&gt;
Function prototype:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Decode a string and if valid, output a data stream and return true&lt;br /&gt;
// Parameters:&lt;br /&gt;
//  $code       [in] Crypted code&lt;br /&gt;
//  $key        [in] Decoder key (game specific)&lt;br /&gt;
//  $data       [out] Data stream (bytes array)&lt;br /&gt;
// Return:&lt;br /&gt;
//  true if decode succeed&lt;br /&gt;
function Decode(string $code, string $key, array &amp;amp;$data): bool&lt;br /&gt;
{&lt;br /&gt;
	$len = strlen($code);&lt;br /&gt;
	AddLog(&amp;quot;Start decode: $code ($len)&amp;quot;);&lt;br /&gt;
	if($len != 6)&lt;br /&gt;
	{&lt;br /&gt;
		AddLog(&amp;quot;Error: Invalid number of character (must be 6)&amp;quot;);&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
	for($i = 0; $i &amp;lt; $len; $i += 2)&lt;br /&gt;
		$data[] = 'Z' - ($code[$i] - 'A'); // Invert letter (useless encodage ^^)&lt;br /&gt;
&lt;br /&gt;
	AddLog(&amp;quot;End decode: $data&amp;quot;);&lt;br /&gt;
	return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Initialization ====&lt;br /&gt;
This function is used for game specific initialization. This function can be empty.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Initialize score submission&lt;br /&gt;
function InitializeSubmission() {}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Columns description ====&lt;br /&gt;
This function describe the format of each column in addition to the 3 defaults columns:&lt;br /&gt;
- Rank&lt;br /&gt;
- User name&lt;br /&gt;
- Time stamp&lt;br /&gt;
&lt;br /&gt;
Example of adding a single score column:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Get metadata format&lt;br /&gt;
// Return:&lt;br /&gt;
//  Array describing the format of each table row&lt;br /&gt;
function GetMetaFormat(): array&lt;br /&gt;
{&lt;br /&gt;
	$metaStruct = array(&lt;br /&gt;
		&amp;quot;score&amp;quot; =&amp;gt; BOARD_TYPE_INT,&lt;br /&gt;
	);&lt;br /&gt;
	return $metaStruct;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Column format can be:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_BOOL&amp;quot;,	0x00); // Boolean&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_INT&amp;quot;,	0x01); // Integer number&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_FLOAT&amp;quot;,	0x02); // Float number&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_SEC&amp;quot;,	0x05); // Time in seconds&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_MIN&amp;quot;,	0x06); // Time in minutes&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_TIME&amp;quot;,	0x07); // Time&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_DATE&amp;quot;,	0x08); // Date&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_STRING&amp;quot;,	0x0A); // Character string&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_LOC&amp;quot;,	0x0B); // Localized string key&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_IMAGE&amp;quot;,	0x0C); // Image URL&lt;br /&gt;
//-----------------------------&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_HIDE&amp;quot;,	0x10); // Meta-data not to be displayer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Validate data ====&lt;br /&gt;
This function will validate then convert the input data stream (bytes array) into leaderboard entry.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Validate decoded data&lt;br /&gt;
// Parameters:&lt;br /&gt;
//  $data       [in] Decode bytes list&lt;br /&gt;
//  $board      [out] Board to add the score in&lt;br /&gt;
//  $keyValue   [out] Key value for sorting (ascendent)&lt;br /&gt;
//  $metadata   [out] Score metadata (encoded JSON)&lt;br /&gt;
// Return:&lt;br /&gt;
//  true if validation succeed&lt;br /&gt;
function Validate(array &amp;amp;$data, string &amp;amp;$board, int &amp;amp;$keyValue, string &amp;amp;$metadata): bool&lt;br /&gt;
{&lt;br /&gt;
	// Validate data size&lt;br /&gt;
	if(count($data) &amp;lt; 1)&lt;br /&gt;
		return false;&lt;br /&gt;
&lt;br /&gt;
	// Extract data from bytes array&lt;br /&gt;
	$score = $data[0];&lt;br /&gt;
&lt;br /&gt;
	// Set output variables&lt;br /&gt;
	$board = &amp;quot;myboard&amp;quot;; // The leaderboard to add the entry&lt;br /&gt;
	$keyValue = $score; // The integer value used for rank sorting&lt;br /&gt;
&lt;br /&gt;
	// Create board metadata&lt;br /&gt;
	$metaStruct = array(&lt;br /&gt;
		&amp;quot;score&amp;quot; =&amp;gt; $score,&lt;br /&gt;
	);&lt;br /&gt;
	$metadata = json_encode($metaStruct);&lt;br /&gt;
	return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Files to provide ==&lt;br /&gt;
 📁 MGS&lt;br /&gt;
 └─📁 game&lt;br /&gt;
   └─📁 mygame                Your project directory&lt;br /&gt;
     ├─📁 img&lt;br /&gt;
     │ └─🗎 (icon.png)         Game logo (16x16 pixels)&lt;br /&gt;
     ├─📁 script&lt;br /&gt;
     │ └─🗎 (loc.php)          Game localization table&lt;br /&gt;
     │ └─🗎 main.php           Game functions described above&lt;br /&gt;
     └─🗎 (game.css)           Game specific style (applied when the game is selected)&lt;br /&gt;
&lt;br /&gt;
Files in parentheses are optional.&lt;br /&gt;
&lt;br /&gt;
=== Localization file ===&lt;br /&gt;
The localization file must follow this format:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$g_GameLoc = array(&lt;br /&gt;
	//------------------------------------------------------------------------- ENGLISH&lt;br /&gt;
    &amp;quot;en&amp;quot; =&amp;gt; array(&lt;br /&gt;
		&amp;quot;column.ending&amp;quot;					=&amp;gt; &amp;quot;Ending&amp;quot;,&lt;br /&gt;
	),&lt;br /&gt;
	//------------------------------------------------------------------------- FRANCAIS&lt;br /&gt;
    &amp;quot;fr&amp;quot; =&amp;gt; array(&lt;br /&gt;
		&amp;quot;column.ending&amp;quot;					=&amp;gt; &amp;quot;Fin&amp;quot;,&lt;br /&gt;
    ),&lt;br /&gt;
	//------------------------------------------------------------------------- NIHONGO&lt;br /&gt;
	&amp;quot;ja&amp;quot; =&amp;gt; array(&lt;br /&gt;
		&amp;quot;column.ending&amp;quot;					=&amp;gt; &amp;quot;終わり&amp;quot;,&lt;br /&gt;
	),&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Note&amp;lt;/u&amp;gt;: You cannot overwrite existing translations on the site.&lt;br /&gt;
&lt;br /&gt;
== How do I install a local test server? ==&lt;br /&gt;
&lt;br /&gt;
* First you need to ask for access to [https://github.com/aoineko-fr/MGS MGS GitHub] (ask to 'aoineko' user on MRC).&lt;br /&gt;
* Install a PHP and MySQL local servers. You can use a all-in-one package like wAmp for example. Tested version are PHP 7.0.3 to 7.2 and MySQL 5.7.11 to 8.0.&lt;br /&gt;
* Download MGS source code package and unpack it on your local machine.&lt;br /&gt;
* Duplicate &amp;lt;tt&amp;gt;/script/settings.php&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;/script/local_settings.php&amp;lt;/tt&amp;gt; and modify settings to match your local configuration. Keep &amp;lt;tt&amp;gt;&amp;quot;mgs_&amp;quot;&amp;lt;/tt&amp;gt; for &amp;lt;tt&amp;gt;$sqlTablePrefix&amp;lt;/tt&amp;gt; parameter. You can remove the unchanged parameters to keep default value.&lt;br /&gt;
* Download [https://aoineko.org/msx/files/mgs_tables.sql the tables structure SQL script] and execute it on your local server.&lt;br /&gt;
* Now you should be ready to run MGS local server. Open &amp;lt;tt&amp;gt;/index.php&amp;lt;/tt&amp;gt; in your browser: it should display the MGS site.&lt;br /&gt;
* To access debug information, create a user (from the site), go to PHPmyAdmin, search for &amp;lt;tt&amp;gt;'mgs_user'&amp;lt;/tt&amp;gt; table, and set your user's &amp;lt;tt&amp;gt;'role'&amp;lt;/tt&amp;gt; parameter to 127. This grant you admin role.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=MGS&amp;diff=4051</id>
		<title>MGS</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=MGS&amp;diff=4051"/>
				<updated>2026-10-19T23:03:31Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''MSX Game Scores''' (MGS) is an online leaderboard platform for MSX games: https://msx.org/mgs&amp;lt;ref&amp;gt;The server is actually located at https://aoineko.org/mgs, but it is recommended that you use the https://msx.org/mgs address in your communications to ensure a more future-proof address&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It allows players to submit their high scores using codes generated by the games themselves.&lt;br /&gt;
Developers can integrate score encoding into their games, and once submitted, the scores are verified server-side and displayed on public leaderboards.&lt;br /&gt;
The goal is to bring a modern, competitive scoring system to new MSX games.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Note&amp;lt;/u&amp;gt;: The MGS site has the same author but is not directly linked to [[What is MSXgl?|MSXgl]], even though this library includes tools to help generate score code.&lt;br /&gt;
&lt;br /&gt;
== How do I add my game to MGS? ==&lt;br /&gt;
&lt;br /&gt;
=== Generate a score code ===&lt;br /&gt;
The basic idea is that your MSX game must generate a code that encodes the relevant data: &lt;br /&gt;
* the score, &lt;br /&gt;
* the corresponding leaderboard (if there are several), &lt;br /&gt;
* and any other useful information that you'd like to be feedback in your leaderboard.&lt;br /&gt;
&lt;br /&gt;
For example, in a racing game, besides the time to complete the race (the score) and the track (the leaderboard), you might also want to record the used car model, whether the player used a manual or automatic gearbox, etc.&lt;br /&gt;
&lt;br /&gt;
You are free to use any technique you want to encrypt your data.&lt;br /&gt;
Just make sure the encoding is strong enough to prevent someone from inputting random codes and getting a valid score.&lt;br /&gt;
MSXgl provides a [[Modules/crypt|C module for encoding data]] than can be easily adapt to other development environment.&lt;br /&gt;
&lt;br /&gt;
=== Add your game to MGS ===&lt;br /&gt;
After that, the game and its leaderboards have to be added to the MGS site.&lt;br /&gt;
For now, this is a manual process that is handled directly by the site owner (MRC user Aoineko).&lt;br /&gt;
&lt;br /&gt;
Finally, the interface for converting score code to leaderboard entry needs to be created.&lt;br /&gt;
It consist of several PHP functions (the site owner can help you write them).&lt;br /&gt;
&lt;br /&gt;
==== Decode ====&lt;br /&gt;
If you are not using MSXgl encryption feature in your MSX game, you will have to provide your own decrypt function in PHP (a language that looks a lot like C).&lt;br /&gt;
&lt;br /&gt;
This function have to check the validity of the submitted code and, if valid, generates a bytes array to be sent to submission function.&lt;br /&gt;
&lt;br /&gt;
Function prototype:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Decode a string and if valid, output a data stream and return true&lt;br /&gt;
// Parameters:&lt;br /&gt;
//  $code       [in] Crypted code&lt;br /&gt;
//  $key        [in] Decoder key (game specific)&lt;br /&gt;
//  $data       [out] Data stream (bytes array)&lt;br /&gt;
// Return:&lt;br /&gt;
//  true if decode succeed&lt;br /&gt;
function Decode(string $code, string $key, array &amp;amp;$data): bool&lt;br /&gt;
{&lt;br /&gt;
	$len = strlen($code);&lt;br /&gt;
	AddLog(&amp;quot;Start decode: $code ($len)&amp;quot;);&lt;br /&gt;
	if($len != 6)&lt;br /&gt;
	{&lt;br /&gt;
		AddLog(&amp;quot;Error: Invalid number of character (must be 6)&amp;quot;);&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
	for($i = 0; $i &amp;lt; $len; $i += 2)&lt;br /&gt;
		$data[] = 'Z' - ($code[$i] - 'A'); // Invert letter (useless encodage ^^)&lt;br /&gt;
&lt;br /&gt;
	AddLog(&amp;quot;End decode: $data&amp;quot;);&lt;br /&gt;
	return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Initialization ====&lt;br /&gt;
This function is used for game specific initialization. This function can be empty.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Initialize score submission&lt;br /&gt;
function InitializeSubmission() {}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Columns description ====&lt;br /&gt;
This function describe the format of each column in addition to the 3 defaults columns:&lt;br /&gt;
- Rank&lt;br /&gt;
- User name&lt;br /&gt;
- Time stamp&lt;br /&gt;
&lt;br /&gt;
Example of adding a single score column:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Get metadata format&lt;br /&gt;
// Return:&lt;br /&gt;
//  Array describing the format of each table row&lt;br /&gt;
function GetMetaFormat(): array&lt;br /&gt;
{&lt;br /&gt;
	$metaStruct = array(&lt;br /&gt;
		&amp;quot;score&amp;quot; =&amp;gt; BOARD_TYPE_INT,&lt;br /&gt;
	);&lt;br /&gt;
	return $metaStruct;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Column format can be:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_BOOL&amp;quot;,	0x00); // Boolean&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_INT&amp;quot;,	0x01); // Integer number&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_FLOAT&amp;quot;,	0x02); // Float number&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_SEC&amp;quot;,	0x05); // Time in seconds&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_MIN&amp;quot;,	0x06); // Time in minutes&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_TIME&amp;quot;,	0x07); // Time&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_DATE&amp;quot;,	0x08); // Date&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_STRING&amp;quot;,	0x0A); // Character string&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_LOC&amp;quot;,	0x0B); // Localized string key&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_IMAGE&amp;quot;,	0x0C); // Image URL&lt;br /&gt;
//-----------------------------&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_HIDE&amp;quot;,	0x10); // Meta-data not to be displayer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Validate data ====&lt;br /&gt;
This function will validate then convert the input data stream (bytes array) into leaderboard entry.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Validate decoded data&lt;br /&gt;
// Parameters:&lt;br /&gt;
//  $data       [in] Decode bytes list&lt;br /&gt;
//  $board      [out] Board to add the score in&lt;br /&gt;
//  $keyValue   [out] Key value for sorting (ascendent)&lt;br /&gt;
//  $metadata   [out] Score metadata (encoded JSON)&lt;br /&gt;
// Return:&lt;br /&gt;
//  true if validation succeed&lt;br /&gt;
function Validate(array &amp;amp;$data, string &amp;amp;$board, int &amp;amp;$keyValue, string &amp;amp;$metadata): bool&lt;br /&gt;
{&lt;br /&gt;
	// Validate data size&lt;br /&gt;
	if(count($data) &amp;lt; 1)&lt;br /&gt;
		return false;&lt;br /&gt;
&lt;br /&gt;
	// Extract data from bytes array&lt;br /&gt;
	$score = $data[0];&lt;br /&gt;
&lt;br /&gt;
	// Set output variables&lt;br /&gt;
	$board = &amp;quot;myboard&amp;quot;; // The leaderboard to add the entry&lt;br /&gt;
	$keyValue = $score; // The integer value used for rank sorting&lt;br /&gt;
&lt;br /&gt;
	// Create board metadata&lt;br /&gt;
	$metaStruct = array(&lt;br /&gt;
		&amp;quot;score&amp;quot; =&amp;gt; $score,&lt;br /&gt;
	);&lt;br /&gt;
	$metadata = json_encode($metaStruct);&lt;br /&gt;
	return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Files to provide ==&lt;br /&gt;
 📁 MGS&lt;br /&gt;
 └─📁 game&lt;br /&gt;
   └─📁 mygame                Your project directory&lt;br /&gt;
     ├─📁 img&lt;br /&gt;
     │ └─🗎 (icon.png)         Game logo (16x16 pixels)&lt;br /&gt;
     ├─📁 script&lt;br /&gt;
     │ └─🗎 (loc.php)          Game localization table&lt;br /&gt;
     │ └─🗎 main.php           Game functions described above&lt;br /&gt;
     └─🗎 (game.css)           Game specific style (applied when the game is selected)&lt;br /&gt;
&lt;br /&gt;
Files in parentheses are optional.&lt;br /&gt;
&lt;br /&gt;
=== Localization file ===&lt;br /&gt;
The localization file must follow this format:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$g_GameLoc = array(&lt;br /&gt;
	//------------------------------------------------------------------------- ENGLISH&lt;br /&gt;
    &amp;quot;en&amp;quot; =&amp;gt; array(&lt;br /&gt;
		&amp;quot;column.ending&amp;quot;					=&amp;gt; &amp;quot;Ending&amp;quot;,&lt;br /&gt;
	),&lt;br /&gt;
	//------------------------------------------------------------------------- FRANCAIS&lt;br /&gt;
    &amp;quot;fr&amp;quot; =&amp;gt; array(&lt;br /&gt;
		&amp;quot;column.ending&amp;quot;					=&amp;gt; &amp;quot;Fin&amp;quot;,&lt;br /&gt;
    ),&lt;br /&gt;
	//------------------------------------------------------------------------- NIHONGO&lt;br /&gt;
	&amp;quot;ja&amp;quot; =&amp;gt; array(&lt;br /&gt;
		&amp;quot;column.ending&amp;quot;					=&amp;gt; &amp;quot;終わり&amp;quot;,&lt;br /&gt;
	),&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Note&amp;lt;/u&amp;gt;: You cannot overwrite existing translations on the site.&lt;br /&gt;
&lt;br /&gt;
== How do I install a local test server? ==&lt;br /&gt;
&lt;br /&gt;
* First you need to ask for access to [https://github.com/aoineko-fr/MGS MGS GitHub] (ask to 'aoineko' user on MRC).&lt;br /&gt;
* Install a PHP and MySQL local servers. You can use a all-in-one package like wAmp for example. Tested version are PHP 7.0.3 to 7.2 and MySQL 5.7.11 to 8.0.&lt;br /&gt;
* Download MGS source code package and unpack it on your local machine.&lt;br /&gt;
* Duplicate &amp;lt;tt&amp;gt;/script/settings.php&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;/script/local_settings.php&amp;lt;/tt&amp;gt; and modify settings to match your local configuration. Keep &amp;lt;tt&amp;gt;&amp;quot;mgs_&amp;quot;&amp;lt;/tt&amp;gt; for &amp;lt;tt&amp;gt;$sqlTablePrefix&amp;lt;/tt&amp;gt; parameter. You can remove the unchanged parameters to keep default value.&lt;br /&gt;
* Download [https://aoineko.org/msx/files/mgs_tables.sql the tables structure SQL script] and execute it on your local server.&lt;br /&gt;
* Now you should be ready to run MGS local server. Open &amp;lt;tt&amp;gt;/index.php&amp;lt;/tt&amp;gt; in your browser: it should display the MGS site.&lt;br /&gt;
* To access debug information, create a user (from the site), go to PHPmyAdmin, search for &amp;lt;tt&amp;gt;'mgs_user'&amp;lt;/tt&amp;gt; table, and set your user's &amp;lt;tt&amp;gt;'role'&amp;lt;/tt&amp;gt; parameter to 127. This grant you admin role.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=MGS&amp;diff=4050</id>
		<title>MGS</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=MGS&amp;diff=4050"/>
				<updated>2026-10-19T23:02:46Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''MSX Game Scores''' (MGS) is an online leaderboard platform for MSX games: https://msx.org/mgs.&amp;lt;ref&amp;gt;The server is actually located at https://aoineko.org/mgs, but it is recommended that you use the msx.org address to ensure a more future-proof address&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It allows players to submit their high scores using codes generated by the games themselves.&lt;br /&gt;
Developers can integrate score encoding into their games, and once submitted, the scores are verified server-side and displayed on public leaderboards.&lt;br /&gt;
The goal is to bring a modern, competitive scoring system to new MSX games.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Note&amp;lt;/u&amp;gt;: The MGS site has the same author but is not directly linked to [[What is MSXgl?|MSXgl]], even though this library includes tools to help generate score code.&lt;br /&gt;
&lt;br /&gt;
== How do I add my game to MGS? ==&lt;br /&gt;
&lt;br /&gt;
=== Generate a score code ===&lt;br /&gt;
The basic idea is that your MSX game must generate a code that encodes the relevant data: &lt;br /&gt;
* the score, &lt;br /&gt;
* the corresponding leaderboard (if there are several), &lt;br /&gt;
* and any other useful information that you'd like to be feedback in your leaderboard.&lt;br /&gt;
&lt;br /&gt;
For example, in a racing game, besides the time to complete the race (the score) and the track (the leaderboard), you might also want to record the used car model, whether the player used a manual or automatic gearbox, etc.&lt;br /&gt;
&lt;br /&gt;
You are free to use any technique you want to encrypt your data.&lt;br /&gt;
Just make sure the encoding is strong enough to prevent someone from inputting random codes and getting a valid score.&lt;br /&gt;
MSXgl provides a [[Modules/crypt|C module for encoding data]] than can be easily adapt to other development environment.&lt;br /&gt;
&lt;br /&gt;
=== Add your game to MGS ===&lt;br /&gt;
After that, the game and its leaderboards have to be added to the MGS site.&lt;br /&gt;
For now, this is a manual process that is handled directly by the site owner (MRC user Aoineko).&lt;br /&gt;
&lt;br /&gt;
Finally, the interface for converting score code to leaderboard entry needs to be created.&lt;br /&gt;
It consist of several PHP functions (the site owner can help you write them).&lt;br /&gt;
&lt;br /&gt;
==== Decode ====&lt;br /&gt;
If you are not using MSXgl encryption feature in your MSX game, you will have to provide your own decrypt function in PHP (a language that looks a lot like C).&lt;br /&gt;
&lt;br /&gt;
This function have to check the validity of the submitted code and, if valid, generates a bytes array to be sent to submission function.&lt;br /&gt;
&lt;br /&gt;
Function prototype:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Decode a string and if valid, output a data stream and return true&lt;br /&gt;
// Parameters:&lt;br /&gt;
//  $code       [in] Crypted code&lt;br /&gt;
//  $key        [in] Decoder key (game specific)&lt;br /&gt;
//  $data       [out] Data stream (bytes array)&lt;br /&gt;
// Return:&lt;br /&gt;
//  true if decode succeed&lt;br /&gt;
function Decode(string $code, string $key, array &amp;amp;$data): bool&lt;br /&gt;
{&lt;br /&gt;
	$len = strlen($code);&lt;br /&gt;
	AddLog(&amp;quot;Start decode: $code ($len)&amp;quot;);&lt;br /&gt;
	if($len != 6)&lt;br /&gt;
	{&lt;br /&gt;
		AddLog(&amp;quot;Error: Invalid number of character (must be 6)&amp;quot;);&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
	for($i = 0; $i &amp;lt; $len; $i += 2)&lt;br /&gt;
		$data[] = 'Z' - ($code[$i] - 'A'); // Invert letter (useless encodage ^^)&lt;br /&gt;
&lt;br /&gt;
	AddLog(&amp;quot;End decode: $data&amp;quot;);&lt;br /&gt;
	return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Initialization ====&lt;br /&gt;
This function is used for game specific initialization. This function can be empty.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Initialize score submission&lt;br /&gt;
function InitializeSubmission() {}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Columns description ====&lt;br /&gt;
This function describe the format of each column in addition to the 3 defaults columns:&lt;br /&gt;
- Rank&lt;br /&gt;
- User name&lt;br /&gt;
- Time stamp&lt;br /&gt;
&lt;br /&gt;
Example of adding a single score column:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Get metadata format&lt;br /&gt;
// Return:&lt;br /&gt;
//  Array describing the format of each table row&lt;br /&gt;
function GetMetaFormat(): array&lt;br /&gt;
{&lt;br /&gt;
	$metaStruct = array(&lt;br /&gt;
		&amp;quot;score&amp;quot; =&amp;gt; BOARD_TYPE_INT,&lt;br /&gt;
	);&lt;br /&gt;
	return $metaStruct;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Column format can be:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_BOOL&amp;quot;,	0x00); // Boolean&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_INT&amp;quot;,	0x01); // Integer number&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_FLOAT&amp;quot;,	0x02); // Float number&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_SEC&amp;quot;,	0x05); // Time in seconds&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_MIN&amp;quot;,	0x06); // Time in minutes&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_TIME&amp;quot;,	0x07); // Time&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_DATE&amp;quot;,	0x08); // Date&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_STRING&amp;quot;,	0x0A); // Character string&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_LOC&amp;quot;,	0x0B); // Localized string key&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_IMAGE&amp;quot;,	0x0C); // Image URL&lt;br /&gt;
//-----------------------------&lt;br /&gt;
define(&amp;quot;BOARD_TYPE_HIDE&amp;quot;,	0x10); // Meta-data not to be displayer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Validate data ====&lt;br /&gt;
This function will validate then convert the input data stream (bytes array) into leaderboard entry.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Validate decoded data&lt;br /&gt;
// Parameters:&lt;br /&gt;
//  $data       [in] Decode bytes list&lt;br /&gt;
//  $board      [out] Board to add the score in&lt;br /&gt;
//  $keyValue   [out] Key value for sorting (ascendent)&lt;br /&gt;
//  $metadata   [out] Score metadata (encoded JSON)&lt;br /&gt;
// Return:&lt;br /&gt;
//  true if validation succeed&lt;br /&gt;
function Validate(array &amp;amp;$data, string &amp;amp;$board, int &amp;amp;$keyValue, string &amp;amp;$metadata): bool&lt;br /&gt;
{&lt;br /&gt;
	// Validate data size&lt;br /&gt;
	if(count($data) &amp;lt; 1)&lt;br /&gt;
		return false;&lt;br /&gt;
&lt;br /&gt;
	// Extract data from bytes array&lt;br /&gt;
	$score = $data[0];&lt;br /&gt;
&lt;br /&gt;
	// Set output variables&lt;br /&gt;
	$board = &amp;quot;myboard&amp;quot;; // The leaderboard to add the entry&lt;br /&gt;
	$keyValue = $score; // The integer value used for rank sorting&lt;br /&gt;
&lt;br /&gt;
	// Create board metadata&lt;br /&gt;
	$metaStruct = array(&lt;br /&gt;
		&amp;quot;score&amp;quot; =&amp;gt; $score,&lt;br /&gt;
	);&lt;br /&gt;
	$metadata = json_encode($metaStruct);&lt;br /&gt;
	return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Files to provide ==&lt;br /&gt;
 📁 MGS&lt;br /&gt;
 └─📁 game&lt;br /&gt;
   └─📁 mygame                Your project directory&lt;br /&gt;
     ├─📁 img&lt;br /&gt;
     │ └─🗎 (icon.png)         Game logo (16x16 pixels)&lt;br /&gt;
     ├─📁 script&lt;br /&gt;
     │ └─🗎 (loc.php)          Game localization table&lt;br /&gt;
     │ └─🗎 main.php           Game functions described above&lt;br /&gt;
     └─🗎 (game.css)           Game specific style (applied when the game is selected)&lt;br /&gt;
&lt;br /&gt;
Files in parentheses are optional.&lt;br /&gt;
&lt;br /&gt;
=== Localization file ===&lt;br /&gt;
The localization file must follow this format:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$g_GameLoc = array(&lt;br /&gt;
	//------------------------------------------------------------------------- ENGLISH&lt;br /&gt;
    &amp;quot;en&amp;quot; =&amp;gt; array(&lt;br /&gt;
		&amp;quot;column.ending&amp;quot;					=&amp;gt; &amp;quot;Ending&amp;quot;,&lt;br /&gt;
	),&lt;br /&gt;
	//------------------------------------------------------------------------- FRANCAIS&lt;br /&gt;
    &amp;quot;fr&amp;quot; =&amp;gt; array(&lt;br /&gt;
		&amp;quot;column.ending&amp;quot;					=&amp;gt; &amp;quot;Fin&amp;quot;,&lt;br /&gt;
    ),&lt;br /&gt;
	//------------------------------------------------------------------------- NIHONGO&lt;br /&gt;
	&amp;quot;ja&amp;quot; =&amp;gt; array(&lt;br /&gt;
		&amp;quot;column.ending&amp;quot;					=&amp;gt; &amp;quot;終わり&amp;quot;,&lt;br /&gt;
	),&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Note&amp;lt;/u&amp;gt;: You cannot overwrite existing translations on the site.&lt;br /&gt;
&lt;br /&gt;
== How do I install a local test server? ==&lt;br /&gt;
&lt;br /&gt;
* First you need to ask for access to [https://github.com/aoineko-fr/MGS MGS GitHub] (ask to 'aoineko' user on MRC).&lt;br /&gt;
* Install a PHP and MySQL local servers. You can use a all-in-one package like wAmp for example. Tested version are PHP 7.0.3 to 7.2 and MySQL 5.7.11 to 8.0.&lt;br /&gt;
* Download MGS source code package and unpack it on your local machine.&lt;br /&gt;
* Duplicate &amp;lt;tt&amp;gt;/script/settings.php&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;/script/local_settings.php&amp;lt;/tt&amp;gt; and modify settings to match your local configuration. Keep &amp;lt;tt&amp;gt;&amp;quot;mgs_&amp;quot;&amp;lt;/tt&amp;gt; for &amp;lt;tt&amp;gt;$sqlTablePrefix&amp;lt;/tt&amp;gt; parameter. You can remove the unchanged parameters to keep default value.&lt;br /&gt;
* Download [https://aoineko.org/msx/files/mgs_tables.sql the tables structure SQL script] and execute it on your local server.&lt;br /&gt;
* Now you should be ready to run MGS local server. Open &amp;lt;tt&amp;gt;/index.php&amp;lt;/tt&amp;gt; in your browser: it should display the MGS site.&lt;br /&gt;
* To access debug information, create a user (from the site), go to PHPmyAdmin, search for &amp;lt;tt&amp;gt;'mgs_user'&amp;lt;/tt&amp;gt; table, and set your user's &amp;lt;tt&amp;gt;'role'&amp;lt;/tt&amp;gt; parameter to 127. This grant you admin role.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=Main_Page&amp;diff=4049</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=Main_Page&amp;diff=4049"/>
				<updated>2026-10-15T22:10:46Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&amp;lt;img style=&amp;quot;width:512px;&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/logo/logo_msxgl_tate.png&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;border:solid thin black; padding-right:0.2em; font-family:'Arial Black';&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;color:white; background:black; padding:0 0.3em 0 0.2em; margin-right:0.2em;&amp;quot;&amp;gt;MSX&amp;lt;/span&amp;gt;GL&amp;lt;/span&amp;gt; is a free and open source Game Library wrote in C and targeting MSX computers.&lt;br /&gt;
&lt;br /&gt;
'''GitHub: https://github.com/aoineko-fr/MSXgl''' [[image:Github_Logo.png|16px]]&lt;br /&gt;
&lt;br /&gt;
== Get Starting ==&lt;br /&gt;
* [[What is MSXgl?]]&lt;br /&gt;
* '''[[Install|Install and Setup]]'''&lt;br /&gt;
* [[Create my first program]]&lt;br /&gt;
** [[What to choose?|What to choose before starting?]]&lt;br /&gt;
** [[Create a plain ROM]]&lt;br /&gt;
** [[Create a mapped ROM]]&lt;br /&gt;
* [[Samples|Sample programs]] (showcase MSXgl features)&lt;br /&gt;
* [[Code documentation]] (library source documentation)&lt;br /&gt;
* [[Types|Variables type]]&lt;br /&gt;
* [[Release]] | [[Roadmap]] (what coming next?)&lt;br /&gt;
* [[Projects]]&lt;br /&gt;
* [[Help]]&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
{{:Modules}}&lt;br /&gt;
&lt;br /&gt;
== Build tool ==&lt;br /&gt;
* [[Target|Target media]] (ROM, MegaROM, DOS Disk, etc.)&lt;br /&gt;
* [[Build tool]] (project configuration options)&lt;br /&gt;
* [[Defines]]&lt;br /&gt;
* [[Emulators]]&lt;br /&gt;
&lt;br /&gt;
== Data ==&lt;br /&gt;
* [[:category:Font|Font]]&lt;br /&gt;
* [[:category:Cursor|Cursor]]&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
* [[MSXtk]] (tool kit)&lt;br /&gt;
** [[MSXbin]] (binary data convertor)&lt;br /&gt;
** [[MSXcrypt]] (encryption tool)&lt;br /&gt;
** [[MSXhex]] (binary generator from IHX file)&lt;br /&gt;
** [[MSXimg]] (image convertor)&lt;br /&gt;
** [[MSXmath]] (precompute table generator)&lt;br /&gt;
** [[MSXzip]] (compressor)&lt;br /&gt;
* [[SDCC]]&lt;br /&gt;
* [[VS Code]]&lt;br /&gt;
* [[MGS|MSX Game Scores]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[Image:Github_Logo.png|16px]] [https://github.com/aoineko-fr/MSXgl GitHub repository]&lt;br /&gt;
* [[Image:Discord_Logo.png|16px]] [https://discord.gg/REmAhcw6rp Discord server]&lt;br /&gt;
* [[Image:Bookcase.png|16px]] [https://aoineko.org/msxgl-doc Online documentation]&lt;br /&gt;
* [[Resources]] (about MSXgl and MSX)&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4048</id>
		<title>NEO mapper/Extension2</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4048"/>
				<updated>2026-10-03T22:18:51Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: /* Programmable processor and emulation */&lt;/p&gt;
&lt;hr /&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 address bits 10-12 set to 0 is considered as 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 address contains an 8-bit function ID, and a 3-bit destination bank value for function to be applied to a given mapper's bank.&lt;br /&gt;
&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:#AAF;&amp;quot; colspan=&amp;quot;3&amp;quot;| Bank&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;4&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;
=== Functions ===&lt;br /&gt;
==== 0x00: ROM mapper ====&lt;br /&gt;
Activate access to the cartridge ROM mapper through the given bank (default mode)&lt;br /&gt;
&lt;br /&gt;
Parameter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#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;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x01: Cartridge information ====&lt;br /&gt;
Activate read access to the cartridge information data through the given bank (8 KB mirrored on NEO-16)&lt;br /&gt;
&lt;br /&gt;
Parameter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#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;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x02: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x03: RAM ====&lt;br /&gt;
Activate read/write access to RAM through the given bank&lt;br /&gt;
&lt;br /&gt;
Parameter: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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;8&amp;quot;| RAM segment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x04: SRAM/FRAM ====&lt;br /&gt;
Activate read/write access to SRAM/FRAM through the given bank (8 KB mirrored on NEO-16)&lt;br /&gt;
&lt;br /&gt;
Parameter: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#AAF;&amp;quot; colspan=&amp;quot;4&amp;quot;| Segment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x05: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x06: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x07: SCC/SCC+ ====&lt;br /&gt;
Activate SCC to be accessed through memory area from 9800h to 9FFFh (4 KB mirrored)&lt;br /&gt;
Any bank number is valid, but bank #4 is recommanded for NEO-8 and #2 for NEO-16 to use standard address for &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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;| C&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:#BBB;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#BBB;&amp;quot;| 0&lt;br /&gt;
|}&lt;br /&gt;
* C: 0=SCC, 1=SCC+&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;
#define BANK_NUM				3&lt;br /&gt;
#define BANK_SIZE				(16 * 1024)&lt;br /&gt;
#define ROM_SEG_NUM				1024&lt;br /&gt;
#define ROM_SEG_MASK			(ROM_SEG_NUM - 1)&lt;br /&gt;
#define ROM_SIZE				(ROM_SEG_NUM * BANK_SIZE)&lt;br /&gt;
#define FUNC_NUM				16&lt;br /&gt;
&lt;br /&gt;
// Extended function prototypes&lt;br /&gt;
typedef void (*funcSelect_t)(uint8, uint8);&lt;br /&gt;
typedef void (*funcWrite_t)(uint16, uint8);&lt;br /&gt;
typedef uint8 (*funcRead_t)(uint16);&lt;br /&gt;
&lt;br /&gt;
// Extended functions tables&lt;br /&gt;
funcSelect_t funcSelectTable[FUNC_NUM];&lt;br /&gt;
funcWrite_t funcWriteTable[BANK_NUM];&lt;br /&gt;
funcRead_t funcReadTable[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
// Supported extended function initialization&lt;br /&gt;
void initMapper();&lt;br /&gt;
void initInfo();&lt;br /&gt;
void initRAM();&lt;br /&gt;
void initSRAM();&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// NEO-16 Interface&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
// Handle device initialization&lt;br /&gt;
void NEO16_Init()&lt;br /&gt;
{&lt;br /&gt;
	// Mandatory functions&lt;br /&gt;
	initMapper();&lt;br /&gt;
	initInfo();&lt;br /&gt;
	// Optional functions&lt;br /&gt;
	initRAM();&lt;br /&gt;
	initSRAM();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Handle write access&lt;br /&gt;
void NEO16_Write(uint16 address, uint8 data)&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;lt; BANK_NUM)&lt;br /&gt;
	{&lt;br /&gt;
		funcWriteTable[bank](address, data);&lt;br /&gt;
	}&lt;br /&gt;
	else // Extended function&lt;br /&gt;
	{&lt;br /&gt;
		uint8 funcId = address &amp;amp; 0xFF; // Get function ID&lt;br /&gt;
		bank = (address &amp;gt;&amp;gt; 8) &amp;amp; 0x07; // Get destination bank&lt;br /&gt;
		if ((bank &amp;lt; BANK_NUM) &amp;amp;&amp;amp; (funcSelectTable[funcId] != NULL)) // Is function supported?&lt;br /&gt;
			funcSelectTable[funcId](bank, data); // Initialize function specific code&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;lt; BANK_NUM)&lt;br /&gt;
		return funcReadTable[bank](address);&lt;br /&gt;
&lt;br /&gt;
	return 0xFF; // skip&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x00 - ROM Mapper&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
// ROM data&lt;br /&gt;
extern const uint8* romData; &lt;br /&gt;
&lt;br /&gt;
// Bank switching register value&lt;br /&gt;
uint16 romSegment[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
void writeMapper(uint16 address, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	if (address &amp;amp; 1) // Set bank register MSB&lt;br /&gt;
		romSegment[bank] = ((data &amp;amp; 0x0F) &amp;lt;&amp;lt; 8) | (romSegment[bank] &amp;amp; 0x00FF);&lt;br /&gt;
	else // Set bank register LSB&lt;br /&gt;
		romSegment[bank] = (romSegment[bank] &amp;amp; 0xFF00) | (data);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8 readMapper(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	return romData[(romSegment[bank]) &amp;lt;&amp;lt; 14 + (address &amp;amp; 0x3FFF)];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectMapper(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	funcWriteTable[bank] = writeMapper;&lt;br /&gt;
	funcReadTable[bank] = readMapper;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initMapper()&lt;br /&gt;
{&lt;br /&gt;
	for (uint8 i = 0; i &amp;lt; BANK_NUM; i++)&lt;br /&gt;
	{&lt;br /&gt;
		romSegment[i] = 0x0000;&lt;br /&gt;
		selectMapper(i, 0);		&lt;br /&gt;
	}&lt;br /&gt;
	funcSelectTable[0] = selectMapper;&lt;br /&gt;
}&lt;br /&gt;
	&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x01 - Cartridge Information&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
struct info&lt;br /&gt;
{&lt;br /&gt;
	char	Sign[3];&lt;br /&gt;
	uint8	Version;&lt;br /&gt;
	uint8	Flag;&lt;br /&gt;
	uint8	_reserved1;&lt;br /&gt;
	uint16	SegmentNum;&lt;br /&gt;
	uint8	_reserved2[8];&lt;br /&gt;
	uint8	Functions[FUNC_NUM]; // Must be different from 0 for supported functions &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
const struct infoData = &lt;br /&gt;
{&lt;br /&gt;
	{ 'N', 'E', 'O' },&lt;br /&gt;
	0x13, // Version 1.3&lt;br /&gt;
	0x01, // NEO-16&lt;br /&gt;
	0,&lt;br /&gt;
	ROM_SEG_NUM, // 1204 segments (16 MB)&lt;br /&gt;
	{ 0, 0, 0, 0, 0, 0, 0, 0 },&lt;br /&gt;
	{&lt;br /&gt;
		1, // Mapper&lt;br /&gt;
		1, // Info&lt;br /&gt;
		0,&lt;br /&gt;
		32,	// RAM&lt;br /&gt;
		32, // SRAM/FRAM&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0, // SCC&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,		&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
	},&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void writeInfo(uint16 address, uint8 data) {}&lt;br /&gt;
&lt;br /&gt;
uint8 readInfo(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	uint8 index = address &amp;amp; 0xFF; // mirrored every 256 bytes&lt;br /&gt;
	if (index &amp;gt; sizeof(info))&lt;br /&gt;
		return 0;&lt;br /&gt;
	return ((const uint8*)&amp;amp;infoData)[index]; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectInfo(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	funcWriteTable[bank] = writeInfo;&lt;br /&gt;
	funcReadTable[bank] = readInfo;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initMapper()&lt;br /&gt;
{&lt;br /&gt;
	funcSelectTable[1] = selectInfo;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x03 - RAM&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
#define RAM_SEG_NUM				32&lt;br /&gt;
#define RAM_SEG_MASK			(RAM_SEG_NUM - 1)&lt;br /&gt;
&lt;br /&gt;
// RAM data&lt;br /&gt;
uint8 ramData[16 * 1024 * RAM_SEG_NUM]; // 32 * 16 KB = 512 KB&lt;br /&gt;
&lt;br /&gt;
// Bank switching register value&lt;br /&gt;
uint8 ramSegment[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
void writeRAM(uint16 address, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	ramData[(ramSegment[bank]) &amp;lt;&amp;lt; 14 + (address &amp;amp; 0x3FFF)] = data;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8 readRAM(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	return ramData[(ramSegment[bank]) &amp;lt;&amp;lt; 14 + (address &amp;amp; 0x3FFF)];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectRAM(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	ramSegment[bank] = data &amp;amp; RAM_SEG_MASK;&lt;br /&gt;
	funcWriteTable[bank] = writeRAM;&lt;br /&gt;
	funcReadTable[bank] = readRAM;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initRAM()&lt;br /&gt;
{&lt;br /&gt;
	for (uint8 i = 0; i &amp;lt; BANK_NUM; i++)&lt;br /&gt;
		ramSegment = 0;&lt;br /&gt;
	funcSelectTable[3] = selectRAM;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x04 - SRAM&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
#define SRAM_SEG_NUM			16&lt;br /&gt;
#define SRAM_SEG_MASK			(SRAM_SEG_NUM - 1)&lt;br /&gt;
&lt;br /&gt;
// SRAM data&lt;br /&gt;
uint8 sramData[8 * 1024 * SRAM_SEG_NUM]; // 16 * 8 KB = 128 KB&lt;br /&gt;
&lt;br /&gt;
// Bank switching register value&lt;br /&gt;
uint8 sramSegment[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
void writeSRAM(uint16 address, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	sramData[(sramSegment[bank]) &amp;lt;&amp;lt; 13 + (address &amp;amp; 0x1FFF)] = data;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8 readSRAM(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	return sramData[(sramSegment[bank]) &amp;lt;&amp;lt; 13 + (address &amp;amp; 0x1FFF)];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectSRAM(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	sramSegment[bank] = data &amp;amp; SRAM_SEG_MASK;&lt;br /&gt;
	funcWriteTable[bank] = writeSRAM;&lt;br /&gt;
	funcReadTable[bank] = readSRAM;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initSRAM()&lt;br /&gt;
{&lt;br /&gt;
	for (uint8 i = 0; i &amp;lt; BANK_NUM; i++)&lt;br /&gt;
		sramSegment = 0;&lt;br /&gt;
	funcSelectTable[4] = selectSRAM;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4047</id>
		<title>NEO mapper/Extension2</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4047"/>
				<updated>2026-10-03T22:18:29Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: /* Programmable processor and emulation */&lt;/p&gt;
&lt;hr /&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 address bits 10-12 set to 0 is considered as 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 address contains an 8-bit function ID, and a 3-bit destination bank value for function to be applied to a given mapper's bank.&lt;br /&gt;
&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:#AAF;&amp;quot; colspan=&amp;quot;3&amp;quot;| Bank&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;4&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;
=== Functions ===&lt;br /&gt;
==== 0x00: ROM mapper ====&lt;br /&gt;
Activate access to the cartridge ROM mapper through the given bank (default mode)&lt;br /&gt;
&lt;br /&gt;
Parameter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#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;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x01: Cartridge information ====&lt;br /&gt;
Activate read access to the cartridge information data through the given bank (8 KB mirrored on NEO-16)&lt;br /&gt;
&lt;br /&gt;
Parameter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#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;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x02: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x03: RAM ====&lt;br /&gt;
Activate read/write access to RAM through the given bank&lt;br /&gt;
&lt;br /&gt;
Parameter: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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;8&amp;quot;| RAM segment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x04: SRAM/FRAM ====&lt;br /&gt;
Activate read/write access to SRAM/FRAM through the given bank (8 KB mirrored on NEO-16)&lt;br /&gt;
&lt;br /&gt;
Parameter: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#AAF;&amp;quot; colspan=&amp;quot;4&amp;quot;| Segment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x05: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x06: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x07: SCC/SCC+ ====&lt;br /&gt;
Activate SCC to be accessed through memory area from 9800h to 9FFFh (4 KB mirrored)&lt;br /&gt;
Any bank number is valid, but bank #4 is recommanded for NEO-8 and #2 for NEO-16 to use standard address for &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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;| C&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:#BBB;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#BBB;&amp;quot;| 0&lt;br /&gt;
|}&lt;br /&gt;
* C: 0=SCC, 1=SCC+&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;
#define BANK_NUM				3&lt;br /&gt;
#define BANK_SIZE				(16 * 1024)&lt;br /&gt;
#define ROM_SEG_NUM				1024&lt;br /&gt;
#define ROM_SEG_MASK			(ROM_SEG_NUM - 1)&lt;br /&gt;
#define ROM_SIZE				(ROM_SEG_NUM * BANK_SIZE)&lt;br /&gt;
#define FUNC_NUM				16&lt;br /&gt;
&lt;br /&gt;
// Extended function prototypes&lt;br /&gt;
typedef void (*funcSelect_t)(uint8, uint8);&lt;br /&gt;
typedef void (*funcWrite_t)(uint16, uint8);&lt;br /&gt;
typedef uint8 (*funcRead_t)(uint16);&lt;br /&gt;
&lt;br /&gt;
// Supported extended function initialization&lt;br /&gt;
void initMapper();&lt;br /&gt;
void initInfo();&lt;br /&gt;
void initRAM();&lt;br /&gt;
void initSRAM();&lt;br /&gt;
&lt;br /&gt;
// Extended functions tables&lt;br /&gt;
funcSelect_t funcSelectTable[FUNC_NUM];&lt;br /&gt;
funcWrite_t funcWriteTable[BANK_NUM];&lt;br /&gt;
funcRead_t funcReadTable[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// NEO-16 Interface&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
// Handle device initialization&lt;br /&gt;
void NEO16_Init()&lt;br /&gt;
{&lt;br /&gt;
	// Mandatory functions&lt;br /&gt;
	initMapper();&lt;br /&gt;
	initInfo();&lt;br /&gt;
	// Optional functions&lt;br /&gt;
	initRAM();&lt;br /&gt;
	initSRAM();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Handle write access&lt;br /&gt;
void NEO16_Write(uint16 address, uint8 data)&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;lt; BANK_NUM)&lt;br /&gt;
	{&lt;br /&gt;
		funcWriteTable[bank](address, data);&lt;br /&gt;
	}&lt;br /&gt;
	else // Extended function&lt;br /&gt;
	{&lt;br /&gt;
		uint8 funcId = address &amp;amp; 0xFF; // Get function ID&lt;br /&gt;
		bank = (address &amp;gt;&amp;gt; 8) &amp;amp; 0x07; // Get destination bank&lt;br /&gt;
		if ((bank &amp;lt; BANK_NUM) &amp;amp;&amp;amp; (funcSelectTable[funcId] != NULL)) // Is function supported?&lt;br /&gt;
			funcSelectTable[funcId](bank, data); // Initialize function specific code&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;lt; BANK_NUM)&lt;br /&gt;
		return funcReadTable[bank](address);&lt;br /&gt;
&lt;br /&gt;
	return 0xFF; // skip&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x00 - ROM Mapper&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
// ROM data&lt;br /&gt;
extern const uint8* romData; &lt;br /&gt;
&lt;br /&gt;
// Bank switching register value&lt;br /&gt;
uint16 romSegment[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
void writeMapper(uint16 address, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	if (address &amp;amp; 1) // Set bank register MSB&lt;br /&gt;
		romSegment[bank] = ((data &amp;amp; 0x0F) &amp;lt;&amp;lt; 8) | (romSegment[bank] &amp;amp; 0x00FF);&lt;br /&gt;
	else // Set bank register LSB&lt;br /&gt;
		romSegment[bank] = (romSegment[bank] &amp;amp; 0xFF00) | (data);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8 readMapper(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	return romData[(romSegment[bank]) &amp;lt;&amp;lt; 14 + (address &amp;amp; 0x3FFF)];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectMapper(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	funcWriteTable[bank] = writeMapper;&lt;br /&gt;
	funcReadTable[bank] = readMapper;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initMapper()&lt;br /&gt;
{&lt;br /&gt;
	for (uint8 i = 0; i &amp;lt; BANK_NUM; i++)&lt;br /&gt;
	{&lt;br /&gt;
		romSegment[i] = 0x0000;&lt;br /&gt;
		selectMapper(i, 0);		&lt;br /&gt;
	}&lt;br /&gt;
	funcSelectTable[0] = selectMapper;&lt;br /&gt;
}&lt;br /&gt;
	&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x01 - Cartridge Information&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
struct info&lt;br /&gt;
{&lt;br /&gt;
	char	Sign[3];&lt;br /&gt;
	uint8	Version;&lt;br /&gt;
	uint8	Flag;&lt;br /&gt;
	uint8	_reserved1;&lt;br /&gt;
	uint16	SegmentNum;&lt;br /&gt;
	uint8	_reserved2[8];&lt;br /&gt;
	uint8	Functions[FUNC_NUM]; // Must be different from 0 for supported functions &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
const struct infoData = &lt;br /&gt;
{&lt;br /&gt;
	{ 'N', 'E', 'O' },&lt;br /&gt;
	0x13, // Version 1.3&lt;br /&gt;
	0x01, // NEO-16&lt;br /&gt;
	0,&lt;br /&gt;
	ROM_SEG_NUM, // 1204 segments (16 MB)&lt;br /&gt;
	{ 0, 0, 0, 0, 0, 0, 0, 0 },&lt;br /&gt;
	{&lt;br /&gt;
		1, // Mapper&lt;br /&gt;
		1, // Info&lt;br /&gt;
		0,&lt;br /&gt;
		32,	// RAM&lt;br /&gt;
		32, // SRAM/FRAM&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0, // SCC&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,		&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
	},&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void writeInfo(uint16 address, uint8 data) {}&lt;br /&gt;
&lt;br /&gt;
uint8 readInfo(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	uint8 index = address &amp;amp; 0xFF; // mirrored every 256 bytes&lt;br /&gt;
	if (index &amp;gt; sizeof(info))&lt;br /&gt;
		return 0;&lt;br /&gt;
	return ((const uint8*)&amp;amp;infoData)[index]; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectInfo(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	funcWriteTable[bank] = writeInfo;&lt;br /&gt;
	funcReadTable[bank] = readInfo;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initMapper()&lt;br /&gt;
{&lt;br /&gt;
	funcSelectTable[1] = selectInfo;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x03 - RAM&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
#define RAM_SEG_NUM				32&lt;br /&gt;
#define RAM_SEG_MASK			(RAM_SEG_NUM - 1)&lt;br /&gt;
&lt;br /&gt;
// RAM data&lt;br /&gt;
uint8 ramData[16 * 1024 * RAM_SEG_NUM]; // 32 * 16 KB = 512 KB&lt;br /&gt;
&lt;br /&gt;
// Bank switching register value&lt;br /&gt;
uint8 ramSegment[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
void writeRAM(uint16 address, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	ramData[(ramSegment[bank]) &amp;lt;&amp;lt; 14 + (address &amp;amp; 0x3FFF)] = data;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8 readRAM(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	return ramData[(ramSegment[bank]) &amp;lt;&amp;lt; 14 + (address &amp;amp; 0x3FFF)];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectRAM(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	ramSegment[bank] = data &amp;amp; RAM_SEG_MASK;&lt;br /&gt;
	funcWriteTable[bank] = writeRAM;&lt;br /&gt;
	funcReadTable[bank] = readRAM;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initRAM()&lt;br /&gt;
{&lt;br /&gt;
	for (uint8 i = 0; i &amp;lt; BANK_NUM; i++)&lt;br /&gt;
		ramSegment = 0;&lt;br /&gt;
	funcSelectTable[3] = selectRAM;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x04 - SRAM&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
#define SRAM_SEG_NUM			16&lt;br /&gt;
#define SRAM_SEG_MASK			(SRAM_SEG_NUM - 1)&lt;br /&gt;
&lt;br /&gt;
// SRAM data&lt;br /&gt;
uint8 sramData[8 * 1024 * SRAM_SEG_NUM]; // 16 * 8 KB = 128 KB&lt;br /&gt;
&lt;br /&gt;
// Bank switching register value&lt;br /&gt;
uint8 sramSegment[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
void writeSRAM(uint16 address, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	sramData[(sramSegment[bank]) &amp;lt;&amp;lt; 13 + (address &amp;amp; 0x1FFF)] = data;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8 readSRAM(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	return sramData[(sramSegment[bank]) &amp;lt;&amp;lt; 13 + (address &amp;amp; 0x1FFF)];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectSRAM(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	sramSegment[bank] = data &amp;amp; SRAM_SEG_MASK;&lt;br /&gt;
	funcWriteTable[bank] = writeSRAM;&lt;br /&gt;
	funcReadTable[bank] = readSRAM;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initSRAM()&lt;br /&gt;
{&lt;br /&gt;
	for (uint8 i = 0; i &amp;lt; BANK_NUM; i++)&lt;br /&gt;
		sramSegment = 0;&lt;br /&gt;
	funcSelectTable[4] = selectSRAM;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4046</id>
		<title>NEO mapper/Extension2</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4046"/>
				<updated>2026-10-03T22:12:50Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: /* 0x07: SCC/SCC+ */&lt;/p&gt;
&lt;hr /&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 address bits 10-12 set to 0 is considered as 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 address contains an 8-bit function ID, and a 3-bit destination bank value for function to be applied to a given mapper's bank.&lt;br /&gt;
&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:#AAF;&amp;quot; colspan=&amp;quot;3&amp;quot;| Bank&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;4&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;
=== Functions ===&lt;br /&gt;
==== 0x00: ROM mapper ====&lt;br /&gt;
Activate access to the cartridge ROM mapper through the given bank (default mode)&lt;br /&gt;
&lt;br /&gt;
Parameter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#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;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x01: Cartridge information ====&lt;br /&gt;
Activate read access to the cartridge information data through the given bank (8 KB mirrored on NEO-16)&lt;br /&gt;
&lt;br /&gt;
Parameter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#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;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x02: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x03: RAM ====&lt;br /&gt;
Activate read/write access to RAM through the given bank&lt;br /&gt;
&lt;br /&gt;
Parameter: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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;8&amp;quot;| RAM segment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x04: SRAM/FRAM ====&lt;br /&gt;
Activate read/write access to SRAM/FRAM through the given bank (8 KB mirrored on NEO-16)&lt;br /&gt;
&lt;br /&gt;
Parameter: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#AAF;&amp;quot; colspan=&amp;quot;4&amp;quot;| Segment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x05: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x06: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x07: SCC/SCC+ ====&lt;br /&gt;
Activate SCC to be accessed through memory area from 9800h to 9FFFh (4 KB mirrored)&lt;br /&gt;
Any bank number is valid, but bank #4 is recommanded for NEO-8 and #2 for NEO-16 to use standard address for &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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;| C&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:#BBB;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#BBB;&amp;quot;| 0&lt;br /&gt;
|}&lt;br /&gt;
* C: 0=SCC, 1=SCC+&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;
#define BANK_NUM				3&lt;br /&gt;
#define BANK_SIZE				(16 * 1024)&lt;br /&gt;
#define ROM_SEG_NUM				1024&lt;br /&gt;
#define ROM_SEG_MASK			(ROM_SEG_NUM - 1)&lt;br /&gt;
#define ROM_SIZE				(ROM_SEG_NUM * BANK_SIZE)&lt;br /&gt;
#define FUNC_NUM				16&lt;br /&gt;
&lt;br /&gt;
// Extended function prototypes&lt;br /&gt;
typedef void (*funcInit_t)();&lt;br /&gt;
typedef void (*funcSelect_t)(uint8, uint8);&lt;br /&gt;
typedef void (*funcWrite_t)(uint16, uint8);&lt;br /&gt;
typedef uint8 (*funcRead_t)(uint16);&lt;br /&gt;
&lt;br /&gt;
// Supported extended functions&lt;br /&gt;
void initMapper();&lt;br /&gt;
void initInfo();&lt;br /&gt;
void initRAM();&lt;br /&gt;
void initSRAM();&lt;br /&gt;
&lt;br /&gt;
// Extended functions table&lt;br /&gt;
funcSelect_t funcSelectTable[FUNC_NUM];&lt;br /&gt;
funcWrite_t funcWriteTable[BANK_NUM];&lt;br /&gt;
funcRead_t funcReadTable[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// NEO-16 Interface&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
// Handle device initialization&lt;br /&gt;
void NEO16_Init()&lt;br /&gt;
{&lt;br /&gt;
	initMapper();&lt;br /&gt;
	initInfo();&lt;br /&gt;
	initRAM();&lt;br /&gt;
	initSRAM();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Handle write access&lt;br /&gt;
void NEO16_Write(uint16 address, uint8 data)&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;lt; BANK_NUM)&lt;br /&gt;
	{&lt;br /&gt;
		funcWriteTable[bank](address, data);&lt;br /&gt;
	}&lt;br /&gt;
	else // Extended function&lt;br /&gt;
	{&lt;br /&gt;
		uint8 funcId = address &amp;amp; 0xFF; // Get function ID&lt;br /&gt;
		bank = (address &amp;gt;&amp;gt; 8) &amp;amp; 0x07; // Get destination bank&lt;br /&gt;
		if ((bank &amp;lt; BANK_NUM) &amp;amp;&amp;amp; (funcSelectTable[funcId] != NULL)) // Is function supported?&lt;br /&gt;
			funcSelectTable[funcId](bank, data); // Initialize function specific code&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;lt; BANK_NUM)&lt;br /&gt;
		return funcReadTable[bank](address);&lt;br /&gt;
&lt;br /&gt;
	return 0xFF; // skip&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x00 - ROM Mapper&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
// ROM data&lt;br /&gt;
extern const uint8* romData; &lt;br /&gt;
&lt;br /&gt;
// Bank switching register value&lt;br /&gt;
uint16 romSegment[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
void writeMapper(uint16 address, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	if (address &amp;amp; 1) // Set bank register MSB&lt;br /&gt;
		romSegment[bank] = ((data &amp;amp; 0x0F) &amp;lt;&amp;lt; 8) | (romSegment[bank] &amp;amp; 0x00FF);&lt;br /&gt;
	else // Set bank register LSB&lt;br /&gt;
		romSegment[bank] = (romSegment[bank] &amp;amp; 0xFF00) | (data);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8 readMapper(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	return romData[(romSegment[bank]) &amp;lt;&amp;lt; 14 + (address &amp;amp; 0x3FFF)];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectMapper(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	funcWriteTable[bank] = writeMapper;&lt;br /&gt;
	funcReadTable[bank] = readMapper;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initMapper()&lt;br /&gt;
{&lt;br /&gt;
	for (uint8 i = 0; i &amp;lt; BANK_NUM; i++)&lt;br /&gt;
	{&lt;br /&gt;
		romSegment[i] = 0x0000;&lt;br /&gt;
		selectMapper(i, 0);		&lt;br /&gt;
	}&lt;br /&gt;
	funcSelectTable[0] = selectMapper;&lt;br /&gt;
}&lt;br /&gt;
	&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x01 - Cartridge Information&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
struct info&lt;br /&gt;
{&lt;br /&gt;
	char	Sign[3];&lt;br /&gt;
	uint8	Version;&lt;br /&gt;
	uint8	Flag;&lt;br /&gt;
	uint8	_reserved1;&lt;br /&gt;
	uint16	SegmentNum;&lt;br /&gt;
	uint8	_reserved2[8];&lt;br /&gt;
	uint8	Functions[FUNC_NUM]; // Must be different from 0 for supported functions &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
const struct infoData = &lt;br /&gt;
{&lt;br /&gt;
	{ 'N', 'E', 'O' },&lt;br /&gt;
	0x13, // Version 1.3&lt;br /&gt;
	0x01, // NEO-16&lt;br /&gt;
	0,&lt;br /&gt;
	ROM_SEG_NUM, // 1204 segments (16 MB)&lt;br /&gt;
	{ 0, 0, 0, 0, 0, 0, 0, 0 },&lt;br /&gt;
	{&lt;br /&gt;
		1, // Mapper&lt;br /&gt;
		1, // Info&lt;br /&gt;
		0,&lt;br /&gt;
		32,	// RAM&lt;br /&gt;
		32, // SRAM/FRAM&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0, // SCC&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,		&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
	},&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void writeInfo(uint16 address, uint8 data) {}&lt;br /&gt;
&lt;br /&gt;
uint8 readInfo(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	uint8 index = address &amp;amp; 0xFF; // mirrored every 256 bytes&lt;br /&gt;
	if (index &amp;gt; sizeof(info))&lt;br /&gt;
		return 0;&lt;br /&gt;
	return ((const uint8*)&amp;amp;infoData)[index]; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectInfo(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	funcWriteTable[bank] = writeInfo;&lt;br /&gt;
	funcReadTable[bank] = readInfo;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initMapper()&lt;br /&gt;
{&lt;br /&gt;
	funcSelectTable[1] = selectInfo;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x03 - RAM&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
#define RAM_SEG_NUM				32&lt;br /&gt;
#define RAM_SEG_MASK			(RAM_SEG_NUM - 1)&lt;br /&gt;
&lt;br /&gt;
// RAM data&lt;br /&gt;
uint8 ramData[16 * 1024 * RAM_SEG_NUM]; // 32 * 16 KB = 512 KB&lt;br /&gt;
&lt;br /&gt;
// Bank switching register value&lt;br /&gt;
uint8 ramSegment[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
void writeRAM(uint16 address, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	ramData[(ramSegment[bank]) &amp;lt;&amp;lt; 14 + (address &amp;amp; 0x3FFF)] = data;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8 readRAM(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	return ramData[(ramSegment[bank]) &amp;lt;&amp;lt; 14 + (address &amp;amp; 0x3FFF)];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectRAM(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	ramSegment[bank] = data &amp;amp; RAM_SEG_MASK;&lt;br /&gt;
	funcWriteTable[bank] = writeRAM;&lt;br /&gt;
	funcReadTable[bank] = readRAM;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initRAM()&lt;br /&gt;
{&lt;br /&gt;
	for (uint8 i = 0; i &amp;lt; BANK_NUM; i++)&lt;br /&gt;
		ramSegment = 0;&lt;br /&gt;
	funcSelectTable[3] = selectRAM;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x04 - SRAM&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
#define SRAM_SEG_NUM			16&lt;br /&gt;
#define SRAM_SEG_MASK			(SRAM_SEG_NUM - 1)&lt;br /&gt;
&lt;br /&gt;
// SRAM data&lt;br /&gt;
uint8 sramData[8 * 1024 * SRAM_SEG_NUM]; // 16 * 8 KB = 128 KB&lt;br /&gt;
&lt;br /&gt;
// Bank switching register value&lt;br /&gt;
uint8 sramSegment[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
void writeSRAM(uint16 address, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	sramData[(sramSegment[bank]) &amp;lt;&amp;lt; 13 + (address &amp;amp; 0x1FFF)] = data;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8 readSRAM(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	return sramData[(sramSegment[bank]) &amp;lt;&amp;lt; 13 + (address &amp;amp; 0x1FFF)];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectSRAM(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	sramSegment[bank] = data &amp;amp; SRAM_SEG_MASK;&lt;br /&gt;
	funcWriteTable[bank] = writeSRAM;&lt;br /&gt;
	funcReadTable[bank] = readSRAM;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initSRAM()&lt;br /&gt;
{&lt;br /&gt;
	for (uint8 i = 0; i &amp;lt; BANK_NUM; i++)&lt;br /&gt;
		sramSegment = 0;&lt;br /&gt;
	funcSelectTable[4] = selectSRAM;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4045</id>
		<title>NEO mapper/Extension2</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4045"/>
				<updated>2026-10-03T22:12:19Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: &lt;/p&gt;
&lt;hr /&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 address bits 10-12 set to 0 is considered as 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 address contains an 8-bit function ID, and a 3-bit destination bank value for function to be applied to a given mapper's bank.&lt;br /&gt;
&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:#AAF;&amp;quot; colspan=&amp;quot;3&amp;quot;| Bank&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;4&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;
=== Functions ===&lt;br /&gt;
==== 0x00: ROM mapper ====&lt;br /&gt;
Activate access to the cartridge ROM mapper through the given bank (default mode)&lt;br /&gt;
&lt;br /&gt;
Parameter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#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;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x01: Cartridge information ====&lt;br /&gt;
Activate read access to the cartridge information data through the given bank (8 KB mirrored on NEO-16)&lt;br /&gt;
&lt;br /&gt;
Parameter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#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;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x02: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x03: RAM ====&lt;br /&gt;
Activate read/write access to RAM through the given bank&lt;br /&gt;
&lt;br /&gt;
Parameter: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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;8&amp;quot;| RAM segment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x04: SRAM/FRAM ====&lt;br /&gt;
Activate read/write access to SRAM/FRAM through the given bank (8 KB mirrored on NEO-16)&lt;br /&gt;
&lt;br /&gt;
Parameter: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#AAF;&amp;quot; colspan=&amp;quot;4&amp;quot;| Segment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x05: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x06: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x07: SCC/SCC+ ====&lt;br /&gt;
Activate SCC to be accessed through memory area from 9800h to 9FFFh (4 KB mirrored)&lt;br /&gt;
Any bank number is valid, but bank #4 is recommanded for NEO-8 and #2 for NEO-16 to use standard address for &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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;| C&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:#BBB;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#BBB;&amp;quot;| 0&lt;br /&gt;
|}&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;
#define BANK_NUM				3&lt;br /&gt;
#define BANK_SIZE				(16 * 1024)&lt;br /&gt;
#define ROM_SEG_NUM				1024&lt;br /&gt;
#define ROM_SEG_MASK			(ROM_SEG_NUM - 1)&lt;br /&gt;
#define ROM_SIZE				(ROM_SEG_NUM * BANK_SIZE)&lt;br /&gt;
#define FUNC_NUM				16&lt;br /&gt;
&lt;br /&gt;
// Extended function prototypes&lt;br /&gt;
typedef void (*funcInit_t)();&lt;br /&gt;
typedef void (*funcSelect_t)(uint8, uint8);&lt;br /&gt;
typedef void (*funcWrite_t)(uint16, uint8);&lt;br /&gt;
typedef uint8 (*funcRead_t)(uint16);&lt;br /&gt;
&lt;br /&gt;
// Supported extended functions&lt;br /&gt;
void initMapper();&lt;br /&gt;
void initInfo();&lt;br /&gt;
void initRAM();&lt;br /&gt;
void initSRAM();&lt;br /&gt;
&lt;br /&gt;
// Extended functions table&lt;br /&gt;
funcSelect_t funcSelectTable[FUNC_NUM];&lt;br /&gt;
funcWrite_t funcWriteTable[BANK_NUM];&lt;br /&gt;
funcRead_t funcReadTable[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// NEO-16 Interface&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
// Handle device initialization&lt;br /&gt;
void NEO16_Init()&lt;br /&gt;
{&lt;br /&gt;
	initMapper();&lt;br /&gt;
	initInfo();&lt;br /&gt;
	initRAM();&lt;br /&gt;
	initSRAM();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Handle write access&lt;br /&gt;
void NEO16_Write(uint16 address, uint8 data)&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;lt; BANK_NUM)&lt;br /&gt;
	{&lt;br /&gt;
		funcWriteTable[bank](address, data);&lt;br /&gt;
	}&lt;br /&gt;
	else // Extended function&lt;br /&gt;
	{&lt;br /&gt;
		uint8 funcId = address &amp;amp; 0xFF; // Get function ID&lt;br /&gt;
		bank = (address &amp;gt;&amp;gt; 8) &amp;amp; 0x07; // Get destination bank&lt;br /&gt;
		if ((bank &amp;lt; BANK_NUM) &amp;amp;&amp;amp; (funcSelectTable[funcId] != NULL)) // Is function supported?&lt;br /&gt;
			funcSelectTable[funcId](bank, data); // Initialize function specific code&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;lt; BANK_NUM)&lt;br /&gt;
		return funcReadTable[bank](address);&lt;br /&gt;
&lt;br /&gt;
	return 0xFF; // skip&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x00 - ROM Mapper&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
// ROM data&lt;br /&gt;
extern const uint8* romData; &lt;br /&gt;
&lt;br /&gt;
// Bank switching register value&lt;br /&gt;
uint16 romSegment[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
void writeMapper(uint16 address, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	if (address &amp;amp; 1) // Set bank register MSB&lt;br /&gt;
		romSegment[bank] = ((data &amp;amp; 0x0F) &amp;lt;&amp;lt; 8) | (romSegment[bank] &amp;amp; 0x00FF);&lt;br /&gt;
	else // Set bank register LSB&lt;br /&gt;
		romSegment[bank] = (romSegment[bank] &amp;amp; 0xFF00) | (data);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8 readMapper(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	return romData[(romSegment[bank]) &amp;lt;&amp;lt; 14 + (address &amp;amp; 0x3FFF)];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectMapper(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	funcWriteTable[bank] = writeMapper;&lt;br /&gt;
	funcReadTable[bank] = readMapper;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initMapper()&lt;br /&gt;
{&lt;br /&gt;
	for (uint8 i = 0; i &amp;lt; BANK_NUM; i++)&lt;br /&gt;
	{&lt;br /&gt;
		romSegment[i] = 0x0000;&lt;br /&gt;
		selectMapper(i, 0);		&lt;br /&gt;
	}&lt;br /&gt;
	funcSelectTable[0] = selectMapper;&lt;br /&gt;
}&lt;br /&gt;
	&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x01 - Cartridge Information&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
struct info&lt;br /&gt;
{&lt;br /&gt;
	char	Sign[3];&lt;br /&gt;
	uint8	Version;&lt;br /&gt;
	uint8	Flag;&lt;br /&gt;
	uint8	_reserved1;&lt;br /&gt;
	uint16	SegmentNum;&lt;br /&gt;
	uint8	_reserved2[8];&lt;br /&gt;
	uint8	Functions[FUNC_NUM]; // Must be different from 0 for supported functions &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
const struct infoData = &lt;br /&gt;
{&lt;br /&gt;
	{ 'N', 'E', 'O' },&lt;br /&gt;
	0x13, // Version 1.3&lt;br /&gt;
	0x01, // NEO-16&lt;br /&gt;
	0,&lt;br /&gt;
	ROM_SEG_NUM, // 1204 segments (16 MB)&lt;br /&gt;
	{ 0, 0, 0, 0, 0, 0, 0, 0 },&lt;br /&gt;
	{&lt;br /&gt;
		1, // Mapper&lt;br /&gt;
		1, // Info&lt;br /&gt;
		0,&lt;br /&gt;
		32,	// RAM&lt;br /&gt;
		32, // SRAM/FRAM&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0, // SCC&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,		&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
	},&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void writeInfo(uint16 address, uint8 data) {}&lt;br /&gt;
&lt;br /&gt;
uint8 readInfo(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	uint8 index = address &amp;amp; 0xFF; // mirrored every 256 bytes&lt;br /&gt;
	if (index &amp;gt; sizeof(info))&lt;br /&gt;
		return 0;&lt;br /&gt;
	return ((const uint8*)&amp;amp;infoData)[index]; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectInfo(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	funcWriteTable[bank] = writeInfo;&lt;br /&gt;
	funcReadTable[bank] = readInfo;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initMapper()&lt;br /&gt;
{&lt;br /&gt;
	funcSelectTable[1] = selectInfo;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x03 - RAM&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
#define RAM_SEG_NUM				32&lt;br /&gt;
#define RAM_SEG_MASK			(RAM_SEG_NUM - 1)&lt;br /&gt;
&lt;br /&gt;
// RAM data&lt;br /&gt;
uint8 ramData[16 * 1024 * RAM_SEG_NUM]; // 32 * 16 KB = 512 KB&lt;br /&gt;
&lt;br /&gt;
// Bank switching register value&lt;br /&gt;
uint8 ramSegment[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
void writeRAM(uint16 address, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	ramData[(ramSegment[bank]) &amp;lt;&amp;lt; 14 + (address &amp;amp; 0x3FFF)] = data;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8 readRAM(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	return ramData[(ramSegment[bank]) &amp;lt;&amp;lt; 14 + (address &amp;amp; 0x3FFF)];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectRAM(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	ramSegment[bank] = data &amp;amp; RAM_SEG_MASK;&lt;br /&gt;
	funcWriteTable[bank] = writeRAM;&lt;br /&gt;
	funcReadTable[bank] = readRAM;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initRAM()&lt;br /&gt;
{&lt;br /&gt;
	for (uint8 i = 0; i &amp;lt; BANK_NUM; i++)&lt;br /&gt;
		ramSegment = 0;&lt;br /&gt;
	funcSelectTable[3] = selectRAM;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Function 0x04 - SRAM&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
#define SRAM_SEG_NUM			16&lt;br /&gt;
#define SRAM_SEG_MASK			(SRAM_SEG_NUM - 1)&lt;br /&gt;
&lt;br /&gt;
// SRAM data&lt;br /&gt;
uint8 sramData[8 * 1024 * SRAM_SEG_NUM]; // 16 * 8 KB = 128 KB&lt;br /&gt;
&lt;br /&gt;
// Bank switching register value&lt;br /&gt;
uint8 sramSegment[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
void writeSRAM(uint16 address, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	sramData[(sramSegment[bank]) &amp;lt;&amp;lt; 13 + (address &amp;amp; 0x1FFF)] = data;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8 readSRAM(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	return sramData[(sramSegment[bank]) &amp;lt;&amp;lt; 13 + (address &amp;amp; 0x1FFF)];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectSRAM(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	sramSegment[bank] = data &amp;amp; SRAM_SEG_MASK;&lt;br /&gt;
	funcWriteTable[bank] = writeSRAM;&lt;br /&gt;
	funcReadTable[bank] = readSRAM;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initSRAM()&lt;br /&gt;
{&lt;br /&gt;
	for (uint8 i = 0; i &amp;lt; BANK_NUM; i++)&lt;br /&gt;
		sramSegment = 0;&lt;br /&gt;
	funcSelectTable[4] = selectSRAM;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4044</id>
		<title>NEO mapper/Extension2</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4044"/>
				<updated>2026-10-03T21:56:33Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: /* Programmable processor and emulation */&lt;/p&gt;
&lt;hr /&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 address bits 10-12 set to 0 is considered as 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 address contains an 8-bit function ID, and a 3-bit destination bank value for function to be applied to a given mapper's bank.&lt;br /&gt;
&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:#AAF;&amp;quot; colspan=&amp;quot;3&amp;quot;| Bank&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;4&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;
=== Functions ===&lt;br /&gt;
==== 0x00: ROM mapper ====&lt;br /&gt;
Activate access to the cartridge ROM mapper through the given bank (default mode)&lt;br /&gt;
&lt;br /&gt;
Parameter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#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;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x01: Cartridge information ====&lt;br /&gt;
Activate read access to the cartridge information data through the given bank (8 KB mirrored on NEO-16)&lt;br /&gt;
&lt;br /&gt;
Parameter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#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;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x02: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x03: RAM ====&lt;br /&gt;
Activate read/write access to RAM through the given bank&lt;br /&gt;
&lt;br /&gt;
Parameter: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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;8&amp;quot;| RAM segment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x04: SRAM/FRAM ====&lt;br /&gt;
Activate read/write access to SRAM/FRAM through the given bank (8 KB mirrored on NEO-16)&lt;br /&gt;
&lt;br /&gt;
Parameter: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#AAF;&amp;quot; colspan=&amp;quot;4&amp;quot;| Segment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x05: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x06: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x07: SCC/SCC+ ====&lt;br /&gt;
Activate SCC to be accessed through memory area from 9800h to 9FFFh (4 KB mirrored)&lt;br /&gt;
Any bank number is valid, but bank #4 is recommanded for NEO-8 and #2 for NEO-16 to use standard address for &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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;| C&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:#BBB;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#BBB;&amp;quot;| 0&lt;br /&gt;
|}&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;
#define BANK_NUM				3&lt;br /&gt;
#define BANK_SIZE				(16 * 1024)&lt;br /&gt;
#define ROM_SEG_NUM				1024&lt;br /&gt;
#define ROM_SEG_MASK			(ROM_SEG_NUM - 1)&lt;br /&gt;
#define ROM_SIZE				(ROM_SEG_NUM * BANK_SIZE)&lt;br /&gt;
#define FUNC_NUM				16&lt;br /&gt;
&lt;br /&gt;
// Extended function prototypes&lt;br /&gt;
typedef void (*funcSelect_t)(uint8, uint8);&lt;br /&gt;
typedef void (*funcWrite_t)(uint16, uint8);&lt;br /&gt;
typedef uint8 (*funcRead_t)(uint16);&lt;br /&gt;
&lt;br /&gt;
// Supported extended functions&lt;br /&gt;
void InitMapper();&lt;br /&gt;
void selectMapper(uint8 bank, uint8 data);&lt;br /&gt;
void selectInfo(uint8 bank, uint8 data);&lt;br /&gt;
void selectRAM(uint8 bank, uint8 data);&lt;br /&gt;
void selectSRAM(uint8 bank, uint8 data);&lt;br /&gt;
&lt;br /&gt;
// Extended functions table&lt;br /&gt;
const funcSelect_t funcSelectTable[FUNC_NUM] = {&lt;br /&gt;
	selectMapper,&lt;br /&gt;
	selectInfo,&lt;br /&gt;
	NULL,&lt;br /&gt;
	selectRAM,	&lt;br /&gt;
	selectSRAM,&lt;br /&gt;
	NULL,&lt;br /&gt;
	NULL,&lt;br /&gt;
	NULL,&lt;br /&gt;
	NULL,&lt;br /&gt;
	NULL,&lt;br /&gt;
	NULL,&lt;br /&gt;
	NULL,		&lt;br /&gt;
	NULL,&lt;br /&gt;
	NULL,&lt;br /&gt;
	NULL,&lt;br /&gt;
	NULL,&lt;br /&gt;
};&lt;br /&gt;
funcWrite_t funcWriteTable[BANK_NUM];&lt;br /&gt;
funcRead_t funcReadTable[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// NEO-16 Interface&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
// Handle device initialization&lt;br /&gt;
void NEO16_Init()&lt;br /&gt;
{&lt;br /&gt;
	InitMapper();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Handle write access&lt;br /&gt;
void NEO16_Write(uint16 address, uint8 data)&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;lt; BANK_NUM)&lt;br /&gt;
	{&lt;br /&gt;
		funcWriteTable[bank](address, data);&lt;br /&gt;
	}&lt;br /&gt;
	else // Extended function&lt;br /&gt;
	{&lt;br /&gt;
		uint8 funcId = address &amp;amp; 0xFF; // Get function ID&lt;br /&gt;
		bank = (address &amp;gt;&amp;gt; 8) &amp;amp; 0x07; // Get destination bank&lt;br /&gt;
		if ((bank &amp;lt; BANK_NUM) &amp;amp;&amp;amp; (funcSelectTable[funcId] != NULL)) // Is function supported?&lt;br /&gt;
			funcSelectTable[funcId](bank, data); // Initialize function specific code&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;lt; BANK_NUM)&lt;br /&gt;
		return funcReadTable[bank](address);&lt;br /&gt;
&lt;br /&gt;
	return 0xFF; // skip&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// ROM Mapper&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
// ROM data&lt;br /&gt;
extern const uint8* romData; &lt;br /&gt;
&lt;br /&gt;
// Bank switching register value&lt;br /&gt;
uint16 romSegment[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
void writeMapper(uint16 address, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	if (address &amp;amp; 1) // Set bank register MSB&lt;br /&gt;
		romSegment[bank] = ((data &amp;amp; 0x0F) &amp;lt;&amp;lt; 8) | (romSegment[bank] &amp;amp; 0x00FF);&lt;br /&gt;
	else // Set bank register LSB&lt;br /&gt;
		romSegment[bank] = (romSegment[bank] &amp;amp; 0xFF00) | (data);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8 readMapper(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	return romData[(romSegment[bank]) &amp;lt;&amp;lt; 14 + (address &amp;amp; 0x3FFF)];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectMapper(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	funcWriteTable[bank] = writeMapper;&lt;br /&gt;
	funcReadTable[bank] = readMapper;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void InitMapper()&lt;br /&gt;
{&lt;br /&gt;
	for (uint8 i = 0; i &amp;lt; BANK_NUM; i++)&lt;br /&gt;
	{&lt;br /&gt;
		romSegment[i] = 0x0000;&lt;br /&gt;
		selectMapper(i, 0);		&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
	&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// Cartridge Information&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
struct info&lt;br /&gt;
{&lt;br /&gt;
	char	Sign[3];&lt;br /&gt;
	uint8	Version;&lt;br /&gt;
	uint8	Flag;&lt;br /&gt;
	uint8	_reserved1;&lt;br /&gt;
	uint16	SegmentNum;&lt;br /&gt;
	uint8	_reserved2[8];&lt;br /&gt;
	uint8	Functions[FUNC_NUM]; // Must be different from 0 for supported functions &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
const struct infoData = &lt;br /&gt;
{&lt;br /&gt;
	{ 'N', 'E', 'O' },&lt;br /&gt;
	0x13, // Version 1.3&lt;br /&gt;
	0x01, // NEO-16&lt;br /&gt;
	0,&lt;br /&gt;
	ROM_SEG_NUM, // 1204 segments (16 MB)&lt;br /&gt;
	{ 0, 0, 0, 0, 0, 0, 0, 0 },&lt;br /&gt;
	{&lt;br /&gt;
		1, // Mapper&lt;br /&gt;
		1, // Info&lt;br /&gt;
		0,&lt;br /&gt;
		32,	// RAM&lt;br /&gt;
		32, // SRAM/FRAM&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0, // SCC&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,		&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
		0,&lt;br /&gt;
	},&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void writeInfo(uint16 address, uint8 data) {}&lt;br /&gt;
&lt;br /&gt;
uint8 readInfo(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	uint8 index = address &amp;amp; 0xFF; // mirrored every 256 bytes&lt;br /&gt;
	if (index &amp;gt; sizeof(info))&lt;br /&gt;
		return 0;&lt;br /&gt;
	return ((const uint8*)&amp;amp;infoData)[index]; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectInfo(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	funcWriteTable[bank] = writeInfo;&lt;br /&gt;
	funcReadTable[bank] = readInfo;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// RAM&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
#define RAM_SEG_NUM				32&lt;br /&gt;
#define RAM_SEG_MASK			(RAM_SEG_NUM - 1)&lt;br /&gt;
&lt;br /&gt;
// RAM data&lt;br /&gt;
uint8 ramData[16 * 1024 * RAM_SEG_NUM]; // 32 * 16 KB = 512 KB&lt;br /&gt;
&lt;br /&gt;
// Bank switching register value&lt;br /&gt;
uint8 ramSegment[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
void writeRAM(uint16 address, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	ramData[(ramSegment[bank]) &amp;lt;&amp;lt; 14 + (address &amp;amp; 0x3FFF)] = data;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8 readRAM(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	return ramData[(ramSegment[bank]) &amp;lt;&amp;lt; 14 + (address &amp;amp; 0x3FFF)];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectRAM(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	ramSegment[bank] = data &amp;amp; RAM_SEG_MASK;&lt;br /&gt;
	funcWriteTable[bank] = writeRAM;&lt;br /&gt;
	funcReadTable[bank] = readRAM;		&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//=============================================================================&lt;br /&gt;
// SRAM&lt;br /&gt;
//=============================================================================&lt;br /&gt;
&lt;br /&gt;
#define SRAM_SEG_NUM			16&lt;br /&gt;
#define SRAM_SEG_MASK			(SRAM_SEG_NUM - 1)&lt;br /&gt;
&lt;br /&gt;
// SRAM data&lt;br /&gt;
uint8 sramData[8 * 1024 * SRAM_SEG_NUM]; // 16 * 8 KB = 128 KB&lt;br /&gt;
&lt;br /&gt;
// Bank switching register value&lt;br /&gt;
uint8 sramSegment[BANK_NUM];&lt;br /&gt;
&lt;br /&gt;
void writeSRAM(uint16 address, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	sramData[(sramSegment[bank]) &amp;lt;&amp;lt; 13 + (address &amp;amp; 0x1FFF)] = data;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8 readSRAM(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
	return sramData[(sramSegment[bank]) &amp;lt;&amp;lt; 13 + (address &amp;amp; 0x1FFF)];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void selectSRAM(uint8 bank, uint8 data)&lt;br /&gt;
{&lt;br /&gt;
	sramSegment[bank] = data &amp;amp; SRAM_SEG_MASK;&lt;br /&gt;
	funcWriteTable[bank] = writeSRAM;&lt;br /&gt;
	funcReadTable[bank] = readSRAM;		&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>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4043</id>
		<title>NEO mapper/Extension2</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4043"/>
				<updated>2026-10-03T19:48:38Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: /* Principles */&lt;/p&gt;
&lt;hr /&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 address bits 10-12 set to 0 is considered as 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 address contains an 8-bit function ID, and a 3-bit destination bank value for function to be applied to a given mapper's bank.&lt;br /&gt;
&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:#AAF;&amp;quot; colspan=&amp;quot;3&amp;quot;| Bank&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;4&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;
=== Functions ===&lt;br /&gt;
==== 0x00: ROM mapper ====&lt;br /&gt;
Activate access to the cartridge ROM mapper through the given bank (default mode)&lt;br /&gt;
&lt;br /&gt;
Parameter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#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;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x01: Cartridge information ====&lt;br /&gt;
Activate read access to the cartridge information data through the given bank (8 KB mirrored on NEO-16)&lt;br /&gt;
&lt;br /&gt;
Parameter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#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;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x02: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x03: RAM ====&lt;br /&gt;
Activate read/write access to RAM through the given bank&lt;br /&gt;
&lt;br /&gt;
Parameter: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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;8&amp;quot;| RAM segment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x04: SRAM/FRAM ====&lt;br /&gt;
Activate read/write access to SRAM/FRAM through the given bank (8 KB mirrored on NEO-16)&lt;br /&gt;
&lt;br /&gt;
Parameter: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#AAF;&amp;quot; colspan=&amp;quot;4&amp;quot;| Segment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x05: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x06: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x07: SCC/SCC+ ====&lt;br /&gt;
Activate SCC to be accessed through memory area from 9800h to 9FFFh (4 KB mirrored)&lt;br /&gt;
Any bank number is valid, but bank #4 is recommanded for NEO-8 and #2 for NEO-16 to use standard address for &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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;| C&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:#BBB;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#BBB;&amp;quot;| 0&lt;br /&gt;
|}&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>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4042</id>
		<title>NEO mapper/Extension2</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4042"/>
				<updated>2026-10-03T19:48:22Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: /* Principles */&lt;/p&gt;
&lt;hr /&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 address bits 10-12 set to 0 is considered as 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 address contains an 8-bit function ID, and a 3-bit destination bank value for function to be applied to a given mapper's bank.&lt;br /&gt;
&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:#AAF;&amp;quot; colspan=&amp;quot;3&amp;quot;| Bank&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:#FAA;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#AAF;&amp;quot; colspan=&amp;quot;4&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;
=== Functions ===&lt;br /&gt;
==== 0x00: ROM mapper ====&lt;br /&gt;
Activate access to the cartridge ROM mapper through the given bank (default mode)&lt;br /&gt;
&lt;br /&gt;
Parameter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#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;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x01: Cartridge information ====&lt;br /&gt;
Activate read access to the cartridge information data through the given bank (8 KB mirrored on NEO-16)&lt;br /&gt;
&lt;br /&gt;
Parameter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#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;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x02: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x03: RAM ====&lt;br /&gt;
Activate read/write access to RAM through the given bank&lt;br /&gt;
&lt;br /&gt;
Parameter: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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;8&amp;quot;| RAM segment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x04: SRAM/FRAM ====&lt;br /&gt;
Activate read/write access to SRAM/FRAM through the given bank (8 KB mirrored on NEO-16)&lt;br /&gt;
&lt;br /&gt;
Parameter: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#AAF;&amp;quot; colspan=&amp;quot;4&amp;quot;| Segment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x05: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x06: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x07: SCC/SCC+ ====&lt;br /&gt;
Activate SCC to be accessed through memory area from 9800h to 9FFFh (4 KB mirrored)&lt;br /&gt;
Any bank number is valid, but bank #4 is recommanded for NEO-8 and #2 for NEO-16 to use standard address for &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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;| C&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:#BBB;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#BBB;&amp;quot;| 0&lt;br /&gt;
|}&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>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4041</id>
		<title>NEO mapper/Extension2</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4041"/>
				<updated>2026-10-03T19:35:01Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: &lt;/p&gt;
&lt;hr /&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 address bits 10-12 set to 0 is considered as 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 address contains an 8-bit function ID, and a 3-bit destination bank value for function to be applied to a given mapper's bank.&lt;br /&gt;
&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:#AAF;&amp;quot; colspan=&amp;quot;3&amp;quot;| Bank&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;
=== Functions ===&lt;br /&gt;
==== 0x00: ROM mapper ====&lt;br /&gt;
Activate access to the cartridge ROM mapper through the given bank (default mode)&lt;br /&gt;
&lt;br /&gt;
Parameter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#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;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x01: Cartridge information ====&lt;br /&gt;
Activate read access to the cartridge information data through the given bank (8 KB mirrored on NEO-16)&lt;br /&gt;
&lt;br /&gt;
Parameter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#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;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x02: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x03: RAM ====&lt;br /&gt;
Activate read/write access to RAM through the given bank&lt;br /&gt;
&lt;br /&gt;
Parameter: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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;8&amp;quot;| RAM segment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x04: SRAM/FRAM ====&lt;br /&gt;
Activate read/write access to SRAM/FRAM through the given bank (8 KB mirrored on NEO-16)&lt;br /&gt;
&lt;br /&gt;
Parameter: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#AAF;&amp;quot; colspan=&amp;quot;4&amp;quot;| Segment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x05: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x06: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x07: SCC/SCC+ ====&lt;br /&gt;
Activate SCC to be accessed through memory area from 9800h to 9FFFh (4 KB mirrored)&lt;br /&gt;
Any bank number is valid, but bank #4 is recommanded for NEO-8 and #2 for NEO-16 to use standard address for &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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;| C&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:#BBB;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#BBB;&amp;quot;| 0&lt;br /&gt;
|}&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>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4040</id>
		<title>NEO mapper/Extension2</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4040"/>
				<updated>2026-10-03T19:34:08Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: /* 0x07: SCC/SCC+ */&lt;/p&gt;
&lt;hr /&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 address bits 10-12 set to 0 is considered as 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 address contains an 8-bit function ID, and a 3-bit destination bank value for function to be applied to a given mapper's bank.&lt;br /&gt;
&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:#AAF;&amp;quot; colspan=&amp;quot;3&amp;quot;| Bank&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;
=== Functions ===&lt;br /&gt;
==== 0x00: ROM mapper ====&lt;br /&gt;
Activate access to the cartridge ROM mapper through the given bank (default mode)&lt;br /&gt;
&lt;br /&gt;
Parameter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#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;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x01: Cartridge information ====&lt;br /&gt;
Activate read access to the cartridge information data through the given bank (8 KB mirrored on NEO-16)&lt;br /&gt;
&lt;br /&gt;
Parameter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#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;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x02: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x03: RAM ====&lt;br /&gt;
Activate read/write access to RAM through the given bank&lt;br /&gt;
&lt;br /&gt;
Parameter: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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;8&amp;quot;| RAM segment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x04: SRAM/FRAM ====&lt;br /&gt;
Activate read/write access to SRAM/FRAM through the given bank (8 KB mirrored on NEO-16)&lt;br /&gt;
&lt;br /&gt;
Parameter: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#AAF;&amp;quot; colspan=&amp;quot;4&amp;quot;| Segment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x05: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x07: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x07: SCC/SCC+ ====&lt;br /&gt;
Activate SCC to be accessed through memory area from 9800h to 9FFFh (4 KB mirrored)&lt;br /&gt;
Any bank number is valid, but bank #4 is recommanded for NEO-8 and #2 for NEO-16 to use standard address for &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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;| C&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:#BBB;&amp;quot;| 0&lt;br /&gt;
|style=&amp;quot;background-color:#BBB;&amp;quot;| 0&lt;br /&gt;
|}&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>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4039</id>
		<title>NEO mapper/Extension2</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4039"/>
				<updated>2026-10-03T19:33:58Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: &lt;/p&gt;
&lt;hr /&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 address bits 10-12 set to 0 is considered as 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 address contains an 8-bit function ID, and a 3-bit destination bank value for function to be applied to a given mapper's bank.&lt;br /&gt;
&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:#AAF;&amp;quot; colspan=&amp;quot;3&amp;quot;| Bank&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;
=== Functions ===&lt;br /&gt;
==== 0x00: ROM mapper ====&lt;br /&gt;
Activate access to the cartridge ROM mapper through the given bank (default mode)&lt;br /&gt;
&lt;br /&gt;
Parameter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#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;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x01: Cartridge information ====&lt;br /&gt;
Activate read access to the cartridge information data through the given bank (8 KB mirrored on NEO-16)&lt;br /&gt;
&lt;br /&gt;
Parameter:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#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;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x02: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x03: RAM ====&lt;br /&gt;
Activate read/write access to RAM through the given bank&lt;br /&gt;
&lt;br /&gt;
Parameter: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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;8&amp;quot;| RAM segment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x04: SRAM/FRAM ====&lt;br /&gt;
Activate read/write access to SRAM/FRAM through the given bank (8 KB mirrored on NEO-16)&lt;br /&gt;
&lt;br /&gt;
Parameter: &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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:#AAF;&amp;quot; colspan=&amp;quot;4&amp;quot;| Segment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 0x05: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x07: ''Reserved'' ====&lt;br /&gt;
&lt;br /&gt;
==== 0x07: SCC/SCC+ ====&lt;br /&gt;
Activate SCC to be accessed through memory area from 9800h to 9FFFh (4 KB mirrored)&lt;br /&gt;
Any bank number is valid, but bank #4 is recommanded for NEO-8 and #2 for NEO-16 to use standard address for &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&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;| C&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:#BBB;&amp;quot;| 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&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>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4038</id>
		<title>NEO mapper/Extension2</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4038"/>
				<updated>2026-10-03T19:26:52Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: &lt;/p&gt;
&lt;hr /&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 address bits 10-12 set to 0 is considered as 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 address contains an 8-bit function ID, and a 3-bit destination bank value for function to be applied to a given mapper's bank.&lt;br /&gt;
&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:#AAF;&amp;quot; colspan=&amp;quot;3&amp;quot;| Bank&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;
=== 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>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=NEO_mapper&amp;diff=4037</id>
		<title>NEO mapper</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=NEO_mapper&amp;diff=4037"/>
				<updated>2026-09-27T08:27:15Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: /* Programmable processor and emulation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right&amp;quot;&amp;gt;[[NEO mapper|EN]] | [[NEO mapper/JA|JA]]&amp;lt;/div&amp;gt;&lt;br /&gt;
Here's a proposal for a mapper format operating with a 16-bit segment register and allowing ROMs larger than the 2/4 MB limit of classic mappers.&lt;br /&gt;
&lt;br /&gt;
== Specifications ==&lt;br /&gt;
&lt;br /&gt;
=== Principles ===&lt;br /&gt;
&lt;br /&gt;
This mapper format is designed to facilitate the creation of MSX games, not only by increasing the size of the ROM available for content, but also by offering programmers new possibilities for organizing their code and data.&lt;br /&gt;
&lt;br /&gt;
Like conventional mappers, the basic idea is to use data write signals to the cartridge to change mapper registers value and thus, the ROM segment visible in each of the mapper's banks (sub-pages). So, predefined addresses can be used to write to the mapper registers (see [[#Format|tables below]]).&lt;br /&gt;
Read accesses, however, work as normal accesses to the memory visible through the banks.&lt;br /&gt;
&lt;br /&gt;
The format is inspired by ASCII8/16 mappers and is even compatible with most ROMs using these formats (the only exception being the rare programs that use odd-numbered addresses to switch banks). The aim of this proximity to these classic mappers is to facilitate the work of manufacturers to create cartridge in this new mapper format.&lt;br /&gt;
&lt;br /&gt;
Compared to conventional mappers, this proposal is based on two new main features:&lt;br /&gt;
* A 16-bit segment register,&lt;br /&gt;
* Banks covering page #0 of MSX memory space (address 0000h~3FFFh).&lt;br /&gt;
&lt;br /&gt;
Usage of page #0 makes it easy to have an extra 16 KB accessible at any time (either by temporarily disabling interrupts for the duration of accesses, or by adding its own ISR).&lt;br /&gt;
&lt;br /&gt;
For the time being, we propose to reserve the 2 most significant bits of the 16-bit bank registers for future extensions of the format (such as SRAM or sound chips support for example).&lt;br /&gt;
This leaves 14 bits to select which segment is visible in each bank, for a maximum of 16384 segments.&lt;br /&gt;
The reserved bits, must be set to 0.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;8&amp;quot;| Higher byte&lt;br /&gt;
|&lt;br /&gt;
!colspan=&amp;quot;8&amp;quot;| Lower byte &lt;br /&gt;
|-&lt;br /&gt;
! 15 || 14 || 13 || 12 || 11 || 10 || 9 || 8 &lt;br /&gt;
|&lt;br /&gt;
! 7 || 6 || 5 || 4 || 3 || 2 || 1 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0&lt;br /&gt;
|colspan=&amp;quot;6&amp;quot;| Segment MSB&lt;br /&gt;
| &lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;| Segment LSB &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The maximum ROM size is therefore 128 MB (for 8 KB segments) or 256 MB (for 16 KB segments).&lt;br /&gt;
&lt;br /&gt;
=== Write Access ===&lt;br /&gt;
&lt;br /&gt;
Write access to the mapper is use to change the value of the bank switching register (where you can select the ROM segment visible through a bank).&lt;br /&gt;
Bellow is the list of the predefined segment switching addresses.&lt;br /&gt;
&lt;br /&gt;
As this new mapper uses 16-bit segment switching registers, it uses 2 bytes for the segment number to be selected in each bank.&lt;br /&gt;
All even-numbered addresses (bit #0 of the address set to 0) access the low byte of the 16-bit register, while odd-numbered addresses (bit #0 of the address set to 1) access the high byte.&lt;br /&gt;
This way, the segment number can be initialized at once with the [[#Bank switching cost|Z80 instructions for 16-bit memory write access]].&lt;br /&gt;
&lt;br /&gt;
==== NEO-8 mapper ====&lt;br /&gt;
&lt;br /&gt;
* Size of a segment: 8 KB&lt;br /&gt;
* Segment switching addresses:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Bank (8kB) !! Switching address !! Initial segment&lt;br /&gt;
|-&lt;br /&gt;
| 0: 0000h~1FFFh || 5000h (mirror at 1000h, 9000h and D000h) || 0000h&lt;br /&gt;
|-&lt;br /&gt;
| 1: 2000h~3FFFh || 5800h (mirror at 1800h, 9800h and D800h) || 0000h&lt;br /&gt;
|-&lt;br /&gt;
| 2: 4000h~5FFFh || 6000h (mirror at 2000h, A000h and E000h) || 0000h&lt;br /&gt;
|-&lt;br /&gt;
| 3: 6000h~7FFFh || 6800h (mirror at 2800h, A800h and E800h) || 0000h&lt;br /&gt;
|-&lt;br /&gt;
| 4: 8000h~9FFFh || 7000h (mirror at 3000h, B000h and F000h) || 0000h&lt;br /&gt;
|-&lt;br /&gt;
| 5: A000h~BFFFh || 7800h (mirror at 3800h, B800h and F800h) || 0000h&lt;br /&gt;
|}&lt;br /&gt;
* Maximum number of segments: 16384&lt;br /&gt;
* Maximum ROM size: 128 MB&lt;br /&gt;
&lt;br /&gt;
==== NEO-16 mapper ====&lt;br /&gt;
&lt;br /&gt;
* Size of a segment: 16 KB&lt;br /&gt;
* Segment switching addresses:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Bank (16kB) !! Switching address !! Initial segment&lt;br /&gt;
|-&lt;br /&gt;
| 0: 0000h~3FFFh || 5000h (mirror at 1000h, 9000h and D000h) || 0000h&lt;br /&gt;
|-&lt;br /&gt;
| 1: 4000h~7FFFh || 6000h (mirror at 2000h, A000h and E000h) || 0000h&lt;br /&gt;
|-&lt;br /&gt;
| 2: 8000h~BFFFh || 7000h (mirror at 3000h, B000h and F000h) || 0000h&lt;br /&gt;
|}&lt;br /&gt;
* Maximum number of segments: 16384&lt;br /&gt;
* Maximum ROM size: 256 MB&lt;br /&gt;
&lt;br /&gt;
=== Read Access ===&lt;br /&gt;
When mapper is selected, read accesses to memory pages 0, 1 and 2 (addresses 0000h to BFFFh), are redirected to a given ROM segment according to the value of the bank register corresponding to the address.&lt;br /&gt;
&lt;br /&gt;
For page 3, read accesses are invalid and the value returned is undefined and should not be used. Implementations of the NEO mapper should return the value FFh if page 3 is read, but this value is not guaranteed by the mapper specifications.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
For emulators and flash tool to detect the NEO mappers, the ROM have to include the following 8 bytes signature right after the 16 bytes ROM header:&lt;br /&gt;
* &amp;quot;&amp;lt;tt&amp;gt;ROM_NEO8&amp;lt;/tt&amp;gt;&amp;quot; for NEO-8 mapper,&lt;br /&gt;
* &amp;quot;&amp;lt;tt&amp;gt;ROM_NE16&amp;lt;/tt&amp;gt;&amp;quot; for NEO-16 mapper.&lt;br /&gt;
&lt;br /&gt;
The ROM header (starting with &amp;quot;AB&amp;quot;) must be in the first ROM segment at offset 0.&lt;br /&gt;
The signature is therefore located at offset 16 of the ROM and may be visible to the Z80 on start-up at addresses 0010h, 4010h and 8010h.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Note&amp;lt;/u&amp;gt;: Signature characters have been carefully choosed to prevent existing ROMs to generate false positive signature (See [[ROM type signature]]).&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
Hardware supporting NEO mapper:&lt;br /&gt;
* '''[https://www.msxpico.com/ MSX Pico]''' (normal or WiFi): Support for NEO-8 and NEO-16 mappers up to ~15 MB (firmware 1.25 or above).&lt;br /&gt;
* '''[https://www.msxpico.com/ MSX Pico+]''': Support for NEO-8 and NEO-16 mappers up to ~14 MB (firmware 2.12 or above).&lt;br /&gt;
* '''[https://github.com/cristianoag/msx-picoverse-public PicoVerse] 2040 and 2350''': Support for NEO-8 and NEO-16 mappers up to ~15 MB.&lt;br /&gt;
* '''[https://github.com/arkadiuszmakarenko/RISKYMSX RISKY MSX]''': Support for NEO-8 and NEO-16 mappers up to 256 KB.&lt;br /&gt;
* '''[https://github.com/piigaa-densetu-two-dai/MSXpi MSXπ]''': Support for NEO-16 mappers up to 16 MB.&lt;br /&gt;
* '''[https://github.com/piigaa-densetu-two-dai/MSXpi_plus_v2 MSXπ Plus (V2)]''': Support for NEO-16 mappers up to 16 MB.&lt;br /&gt;
&lt;br /&gt;
=== Emulator ===&lt;br /&gt;
Emulators supporting NEO mapper:&lt;br /&gt;
* {{blueMSX}} '''blueMSX+''': Full support for NEO-8 and NEO-16 mappers.&lt;br /&gt;
* {{Emulicious}} '''Emulicious''': Full support for NEO-8 and NEO-16 mappers.&lt;br /&gt;
* {{MSXEC}} '''MSXEC''': Support NEO-8 and NEO-16 mappers up to 64 MB (version 20260303 or above).&lt;br /&gt;
* {{openMSX}} '''openMSX''': Full support for NEO-8 and NEO-16 mappers (version 20.0 or above).&lt;br /&gt;
* {{WebMSX}} '''WebMSX''': Full support for NEO-8 and NEO-16 mappers (version 6.0.7 or above).&lt;br /&gt;
&lt;br /&gt;
=== MSXgl ===&lt;br /&gt;
&lt;br /&gt;
Both NEO-8 and NEO-16 mappers are supported. Use respectively &amp;lt;tt&amp;gt;ROM_NEO8&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ROM_NEO16&amp;lt;/tt&amp;gt; as [[target|target format]].&lt;br /&gt;
&lt;br /&gt;
MSXgl uses macros to wrap quick bank switching mechanisms. It would therefore be totally transparent for a user to switch, for example, from an ASCII8 or even Konami-SCC mapper, to an NEO-8 mapper.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define SET_BANK_SEGMENT(bank, segment) /* ... */&lt;br /&gt;
&lt;br /&gt;
// Make segment #30 visible through bank #1&lt;br /&gt;
SET_BANK_SEGMENT(1, 30);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MSXgl initialize the banks with a unique segment each, to offer the largest possible space available to the user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img style=&amp;quot;width:400px; margin:0.5em;&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/mapper_neo8.png&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img style=&amp;quot;width:400px; margin:0.5em;&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/mapper_neo16.png&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Note&amp;lt;/u&amp;gt;: When the application start, segment at 0x4000 always point to segment 0 that include the ROM header. See [[Create a mapped ROM#NEO mapper]] for more details.&lt;br /&gt;
&lt;br /&gt;
== Appendix ==&lt;br /&gt;
&lt;br /&gt;
=== Segment switching address format ===&lt;br /&gt;
&lt;br /&gt;
From a software point of view, the segment switching address is defined as:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;17&amp;quot;| 16-bit address&lt;br /&gt;
|-&lt;br /&gt;
! 15 || 14 || 13 || 12 || 11 || 10 || 9 || 8 &lt;br /&gt;
|&lt;br /&gt;
! 7 || 6 || 5 || 4 || 3 || 2 || 1 || 0&lt;br /&gt;
|-&lt;br /&gt;
| P || P || B || B || B || x || x || x || || x || x || x || x || x || x || x || R&lt;br /&gt;
|}&lt;br /&gt;
Where:&lt;br /&gt;
* 'PP' (0-3) is the page selection for the MSX to redirect access to the mappers slot. Those bits are ignored by the mapper and contribute to mirroring, but the mapper registers can only be accessed from selected pages.&lt;br /&gt;
* 'BBB' (0-7) is the bank's register to write in. All unspecified values are discarded.&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Bank !! NEO-8 !! NEO-16&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 010 || 010&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 011 || 100&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 100 || 110&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 101 || &lt;br /&gt;
|-&lt;br /&gt;
| 4 || 110 || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 111 || &lt;br /&gt;
|}&lt;br /&gt;
* 'R' (0-1) is the segment switching register's byte selector (0: less significant byte; 1: most significant byte).&lt;br /&gt;
* 'x' can be any value (generating mirroring).&lt;br /&gt;
&lt;br /&gt;
So, mirroring occurs on all addresses from the given switching address +2 to the switching address +7FEh on all even-numbered addresses. For example, 5000h is mirrored at 5002h~57FEh.&lt;br /&gt;
&lt;br /&gt;
=== Programmable processor and emulation ===&lt;br /&gt;
Here is a pseudo code in C to handle NEO mappers for programmable processor based cartridges or for emulators:&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| NEO-8 mapper:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
extern const uint8* romData; // ROM data&lt;br /&gt;
uint16 bankValue[6]; // Bank switching register value&lt;br /&gt;
&lt;br /&gt;
// Handle device initialization&lt;br /&gt;
void NEO8_Init()&lt;br /&gt;
{&lt;br /&gt;
   for (uint8 i=0; i&amp;lt;6; i++)&lt;br /&gt;
      bankValue[i] = 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Handle write access&lt;br /&gt;
void NEO8_Write(uint16 address, uint8 value)&lt;br /&gt;
{&lt;br /&gt;
   uint8 bank = ((address &amp;gt;&amp;gt; 11) &amp;amp; 0x07) - 2;&lt;br /&gt;
   if (bank &amp;gt; 5)&lt;br /&gt;
      return; // skip&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;
// Handle read access&lt;br /&gt;
uint8 NEO8_Read(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
   uint8 bank = address &amp;gt;&amp;gt; 13;&lt;br /&gt;
   if (bank &amp;gt; 5)&lt;br /&gt;
      return 0xFF; // skip&lt;br /&gt;
   return romData[(bankValue[bank]) &amp;lt;&amp;lt; 13 + (address &amp;amp; 0x1FFF)];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
| NEO-16 mapper:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
extern const uint8* romData; // ROM data&lt;br /&gt;
uint16 bankValue[3]; // Bank switching register value&lt;br /&gt;
&lt;br /&gt;
// Handle device initialization&lt;br /&gt;
void NEO16_Init()&lt;br /&gt;
{&lt;br /&gt;
   bankValue[0] = bankValue[1] = bankValue[2] = 0;&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;&lt;br /&gt;
   if (bank &amp;gt; 2)&lt;br /&gt;
      return; // skip&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;
// 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;&lt;br /&gt;
   if (bank &amp;gt; 2)&lt;br /&gt;
      return 0xFF; // skip&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;
&lt;br /&gt;
=== Sample program ===&lt;br /&gt;
A sample program is available for testing purpose on: https://aoineko.org/msx/targets/rom/&lt;br /&gt;
&lt;br /&gt;
It is available in various sizes:&lt;br /&gt;
* NEO-8: 256 KB to 32 MB&lt;br /&gt;
* NEO-16: 256 KB to 64 MB&lt;br /&gt;
&lt;br /&gt;
=== Bank switching cost ===&lt;br /&gt;
For a program using NEO mapper, the cost of switching only the lower or higher byte of the 16-bit segment register is the same that switching segment for standard ASCII/Konami mappers.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
; Direct access (22 t-states)&lt;br /&gt;
LD A,n      ;  8 t-states&lt;br /&gt;
LD (nn),A   ; 14 t-states&lt;br /&gt;
&lt;br /&gt;
; Indirect access (22 t-states)&lt;br /&gt;
LD HL,nn    ; 11 t-states&lt;br /&gt;
LD (HL),n   ; 11 t-states&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Although a program can avoid having to change the 2 bytes (16-bit) of the segment register at once, there are cases where this may be necessary. In such cases, the cost is higher, but remains reasonable.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
; Direct access (28 t-states)&lt;br /&gt;
LD HL,nn    ; 11 t-states&lt;br /&gt;
LD (nn),HL  ; 17 t-states&lt;br /&gt;
&lt;br /&gt;
; Indirect access (40 t-states)&lt;br /&gt;
LD HL,nn    ; 11 t-states&lt;br /&gt;
LD (HL),n   ; 11 t-states&lt;br /&gt;
INC HL      ;  7 t-states&lt;br /&gt;
LD (HL),n   ; 11 t-states&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Logos ===&lt;br /&gt;
Here are the logos you can use to indicate that a product is compatible with the NEO mapper:&lt;br /&gt;
&lt;br /&gt;
[https://aoineko.org/msx/files/neomapper8b-logo.png &amp;lt;img style=&amp;quot;width:128px&amp;quot; src=&amp;quot;https://aoineko.org/msx/files/neomapper8b-logo.png&amp;quot; /&amp;gt;]&lt;br /&gt;
[https://aoineko.org/msx/files/neomapper8w-logo.png &amp;lt;img style=&amp;quot;width:128px&amp;quot; src=&amp;quot;https://aoineko.org/msx/files/neomapper8w-logo.png&amp;quot; /&amp;gt;]&lt;br /&gt;
[https://aoineko.org/msx/files/neomapper16b-logo.png &amp;lt;img style=&amp;quot;width:128px&amp;quot; src=&amp;quot;https://aoineko.org/msx/files/neomapper16b-logo.png&amp;quot; /&amp;gt;]&lt;br /&gt;
[https://aoineko.org/msx/files/neomapper16w-logo.png &amp;lt;img style=&amp;quot;width:128px&amp;quot; src=&amp;quot;https://aoineko.org/msx/files/neomapper16w-logo.png&amp;quot; /&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
== Change log ==&lt;br /&gt;
* Version 1.0 (2024/02/12)&lt;br /&gt;
** Original version&lt;br /&gt;
* Version 1.1 (2024/02/20)&lt;br /&gt;
** Changed mappers signature to minimize the risk of an old cartridge generating a false positive and to comply to [[ROM type signature]] format.&lt;br /&gt;
** Added clarification on PP and BBB values for bank switching addresses.&lt;br /&gt;
** Added clarification for read access to the mapper and especially when try to read the page 3.&lt;br /&gt;
* Version 1.2 (2026/04/06)&lt;br /&gt;
** Added optional official logo for NEO mapper product.&lt;br /&gt;
** Added bits 12 and 13 to the register value, increasing the maximum number of segments from 4096 to 16384.&lt;br /&gt;
[[Category:Proposal]][[Category:Proposal/Mapper]]&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4036</id>
		<title>NEO mapper/Extension2</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4036"/>
				<updated>2026-09-26T20:13:07Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: /* Principles */&lt;/p&gt;
&lt;hr /&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 address bits 10-12 set to 0 is considered as 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 address contains an 8-bit function ID.&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:#AAF;&amp;quot; colspan=&amp;quot;3&amp;quot;| Bank&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;
=== 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>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4035</id>
		<title>NEO mapper/Extension2</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4035"/>
				<updated>2026-09-26T20:11:04Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: &lt;/p&gt;
&lt;hr /&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 address bits 10-12 set to 0 is considered as 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 address contains an 8-bit function ID.&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>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4034</id>
		<title>NEO mapper/Extension2</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=NEO_mapper/Extension2&amp;diff=4034"/>
				<updated>2026-09-26T19:59:55Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: 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 NEO mapper format.  == S...&amp;quot;&lt;/p&gt;
&lt;hr /&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>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=AppSignature&amp;diff=4033</id>
		<title>AppSignature</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=AppSignature&amp;diff=4033"/>
				<updated>2026-09-26T11:38:14Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: /* Programming */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This [[Build tool]] option allow to add an '''application signature''' to binary data (right after the header).&lt;br /&gt;
&lt;br /&gt;
The MSXgl signature format is directly inspired by the meta-data used by '''Konami''' to identify their cartridges and add cross-games options.&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
&lt;br /&gt;
Application's signature is 4 bytes long and composed of:&lt;br /&gt;
* &amp;lt;tt&amp;gt;AppCompany&amp;lt;/tt&amp;gt;: 2 bytes for the creator ID ([[#Creator ID|reserve yours!]]),&lt;br /&gt;
* &amp;lt;tt&amp;gt;AppID&amp;lt;/tt&amp;gt;: 2 bytes for the product ID (the numbering of the applications is up to each creator).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
//-- Add application signature to binary data (boolean)&lt;br /&gt;
AppSignature = true;&lt;br /&gt;
&lt;br /&gt;
//-- Application creator ID. Can be 2 character string or 16-bits integer (0~65535)&lt;br /&gt;
AppCompany = &amp;quot;GL&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//-- Application product ID. Can be 2 character string or 16-bits integer (0~65535)&lt;br /&gt;
AppID = 0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If 2-character string is recommended for creator ID and integer for product ID, in fact, both of those parameters can be any of:&lt;br /&gt;
* 2-character string (&amp;lt;tt&amp;gt;&amp;quot;MX&amp;quot;&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;&amp;quot;a7&amp;quot;&amp;lt;/tt&amp;gt; for example),&lt;br /&gt;
* 16-bits decimal unsigned number (&amp;lt;tt&amp;gt;12345&amp;lt;/tt&amp;gt; for example),&lt;br /&gt;
* 16-bits hexadecimal number starting with &amp;lt;tt&amp;gt;0x&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;0x0750&amp;lt;/tt&amp;gt; for example).&lt;br /&gt;
&lt;br /&gt;
For example, the header first 2 words of Konami's ''Penguin Adventure'' are &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;, 0x4307&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;&amp;lt;/tt&amp;gt; is one of the signature used by Konami to mark there ROM (see next section) and &amp;lt;tt&amp;gt;0x4307&amp;lt;/tt&amp;gt; show in binary viewer the number 0743... the serial number of ''Penguin Adventure'' (RC743).&lt;br /&gt;
&lt;br /&gt;
You can also add extra data using [[AppExtra]] option. {{WIP}}&lt;br /&gt;
&lt;br /&gt;
== Programming ==&lt;br /&gt;
If &amp;lt;tt&amp;gt;AppSignature&amp;lt;/tt&amp;gt; is set to TRUE in Build tool configuration, then &amp;lt;tt&amp;gt;APPSIGN&amp;lt;/tt&amp;gt; is defined in your C program.&lt;br /&gt;
&lt;br /&gt;
Application signature is put just after the binary header:&lt;br /&gt;
* At ROM header address +0x0010 (should be 0x4010 or 0x8010),&lt;br /&gt;
* At Basic binary header address +0x0007 (should be 0x8007),&lt;br /&gt;
* At DOS binary start address +0x0002 (should be 0x0102).&lt;br /&gt;
&lt;br /&gt;
Define an external variable as &amp;lt;tt&amp;gt;g_AppSignature&amp;lt;/tt&amp;gt; if you need to access the data from your program.&lt;br /&gt;
It can be defined in several ways depending on your needs. For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
extern const u16 g_AppSignature[2];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
extern const u8 g_AppSignature[4];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Keep in mind than MSX store data as Less significant byte first (Little endian).&lt;br /&gt;
&lt;br /&gt;
For ROM targets, if a [[ROM type signature]] is present at offset +0010h, then the application signature is placed just after (header +0x0018).&lt;br /&gt;
&lt;br /&gt;
To handle all cases, the addresses to check are: 0x4010, 0x4018, 0x8010 and 0x8018.&lt;br /&gt;
&lt;br /&gt;
The MSXgl's {{MOD|tool/sign}} module provides C functions for detecting games in other cartridge ports.&lt;br /&gt;
&lt;br /&gt;
== Creator ID ==&lt;br /&gt;
Some creators' ID are already reserved:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! ID !! Rel !! Creator's name&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;0x00??&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2N&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || 2NICE&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AB&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Boxing'' and ''Football'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AM&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Associazione MSX Italia&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AG&amp;quot;&amp;lt;/tt&amp;gt; ||  || Antxiko Gorjon&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Bik5 (J. Bikker)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CC&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Casper Croes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (many games)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CL&amp;quot;&amp;lt;/tt&amp;gt; ||  || Chien Loco&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;EF&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Pennant Race'' and ''Knightmare 3'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FD&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || FutureDisk&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FP&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Fausto Pracek&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;JP&amp;quot;&amp;lt;/tt&amp;gt; ||  || Johan de Punder &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GH&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GL&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || MSXgl (samples)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;H_&amp;quot;&amp;lt;/tt&amp;gt; ||  || Peruho&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;HN&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Hando&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;MO&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || MO5.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;NB&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Nicola &amp;quot;8bit&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Pixel Phenix&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PP&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Pixel Phenix (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RC&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RG&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Rutagames (Diogo Patrão)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RO&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved for [[ROM type signature]]''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RS&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || RoboSoft&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TL&amp;quot;&amp;lt;/tt&amp;gt; ||  || Tele-Line&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TT&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Thomas ‘Totta’ Lundgren&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;YZ&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Game Master 2)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;WD&amp;quot;&amp;lt;/tt&amp;gt; ||  || Wim Dewijngaert&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;ZR&amp;quot;&amp;lt;/tt&amp;gt; ||  || Zdrmonster Productions&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;XX&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;0xFF??&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Come on the MSXgl's [https://discord.gg/pMeadGfv8E Discord Server] to reserve your own creator ID.&lt;br /&gt;
* Creator ID are only definitively assigned when an application is published with this code.&lt;br /&gt;
&lt;br /&gt;
== Known signed applications ==&lt;br /&gt;
List of released applications that contain compatible signature.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Sign !! Author !! Application&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2NEM&amp;quot;&amp;lt;/tt&amp;gt; || 2NICE || ''Snake Escape''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2NR3&amp;quot;&amp;lt;/tt&amp;gt; || 2NICE || ''Super Sokoban''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AMCR&amp;quot;&amp;lt;/tt&amp;gt; || Associazione MSX Italia || ''Chrono Runner''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5EM&amp;quot;&amp;lt;/tt&amp;gt; || Bik5 (J. Bikker) || ''Eggy's Maze''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5R3&amp;quot;&amp;lt;/tt&amp;gt; || Bik5 (J. Bikker) || ''DELTA''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CCPC&amp;quot;&amp;lt;/tt&amp;gt; || Casper Croes || ''Phenix Corrupta''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CCTR&amp;quot;&amp;lt;/tt&amp;gt; || Casper Croes&amp;lt;br/&amp;gt;Pixel Phenix || ''Soul Trapped''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FDLW&amp;quot;&amp;lt;/tt&amp;gt; || FutureDisk || ''A Lone Wolf''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPEX&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Sam.Pr Explore''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPMW&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Martian War''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPSL&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Soccer League''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPSP&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Sam.Pr''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;HNMG&amp;quot;&amp;lt;/tt&amp;gt; || Hando || ''MUGI''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;MOR5&amp;quot;&amp;lt;/tt&amp;gt; || MO5.com || ''Room 5''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;NBTC&amp;quot;&amp;lt;/tt&amp;gt; || Nicola &amp;quot;8bit&amp;quot; || ''The New Castle''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PPCR&amp;quot;&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Crawlers (MSXdev'23)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;,001&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Crawlers (cartridge)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;,003&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Peng Pong''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RGAJ&amp;quot;&amp;lt;/tt&amp;gt; || Tiago Tresoldi&amp;lt;br/&amp;gt;Freja Lindgren || ''AstroJump''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RGTM&amp;quot;&amp;lt;/tt&amp;gt; || Rutagames || ''TerMSX Multi''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RSP9&amp;quot;&amp;lt;/tt&amp;gt; || RoboSoft || ''Planet X9''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RSPE&amp;quot;&amp;lt;/tt&amp;gt; || RoboSoft || ''Attack of the Petscii Robots''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TT4P&amp;quot;&amp;lt;/tt&amp;gt; || Antxiko || ''Tiny Tetris VS''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TTDL&amp;quot;&amp;lt;/tt&amp;gt; || Thomas &amp;quot;Totta&amp;quot; Lundgren || ''Doomlings''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TTTP&amp;quot;&amp;lt;/tt&amp;gt; || Thomas &amp;quot;Totta&amp;quot; Lundgren || ''Tetpuz''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GL&amp;quot;,...&amp;lt;/tt&amp;gt; || MSXgl || (samples)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AB&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (''Boxing'' and ''Football'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (many games)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;EF&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (''Pennant Race'' and ''Knightmare 3'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;YZ&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (''Game Master 2)''&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=Modules/tool/sign/Desc&amp;diff=4032</id>
		<title>Modules/tool/sign/Desc</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=Modules/tool/sign/Desc&amp;diff=4032"/>
				<updated>2026-09-26T11:30:40Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The {{MOD|tool/sign}} module allows to detect other games on secondary cartridge slot using [[AppSignature|Konami-style signature]].&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=Modules/tool/sign/Desc&amp;diff=4031</id>
		<title>Modules/tool/sign/Desc</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=Modules/tool/sign/Desc&amp;diff=4031"/>
				<updated>2026-09-26T11:28:46Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: Created page with &amp;quot;The {{MOD|tool/sign}} module allows to check for the presence of another application in the cartridge ports (to create Konami-style cartridge combinations).&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The {{MOD|tool/sign}} module allows to check for the presence of another application in the cartridge ports (to create Konami-style cartridge combinations).&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=Modules/tool/sign&amp;diff=4030</id>
		<title>Modules/tool/sign</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=Modules/tool/sign&amp;diff=4030"/>
				<updated>2026-09-26T11:27:08Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: Created page with &amp;quot;{{MODULE |name=tool/sign |category=Tool |dependency1= |dependency2= |dependency3= |sample1= |sample2= |sample3= }}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{MODULE&lt;br /&gt;
|name=tool/sign&lt;br /&gt;
|category=Tool&lt;br /&gt;
|dependency1=&lt;br /&gt;
|dependency2=&lt;br /&gt;
|dependency3=&lt;br /&gt;
|sample1=&lt;br /&gt;
|sample2=&lt;br /&gt;
|sample3=&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=Modules&amp;diff=4029</id>
		<title>Modules</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=Modules&amp;diff=4029"/>
				<updated>2026-09-26T11:26:52Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{COLUMN|4}}&lt;br /&gt;
Core:&lt;br /&gt;
* {{MOD|bios}} (MSX BIOS)&lt;br /&gt;
* {{MOD|clock}} (RTC)&lt;br /&gt;
* {{MOD|dos}} (MSX-DOS 1 &amp;amp; 2)&lt;br /&gt;
* {{MOD|input}} (Joystick, keyboard and mouse)&lt;br /&gt;
* {{MOD|math}} (Random and fast computation)&lt;br /&gt;
* {{MOD|memory}} (Heap or dynamic allocator)&lt;br /&gt;
* {{MOD|print}} (Display text)&lt;br /&gt;
* {{MOD|string}}&lt;br /&gt;
* {{MOD|system}} (Low-level features)&lt;br /&gt;
&lt;br /&gt;
Graphic:&lt;br /&gt;
* {{MOD|vdp}} (Video chip)&lt;br /&gt;
* {{MOD|v9990}}&lt;br /&gt;
* {{MOD|draw}}&lt;br /&gt;
* {{MOD|scroll}}&lt;br /&gt;
* {{MOD|sprite_fx}}&lt;br /&gt;
* {{MOD|tile}} (Software tiles)&lt;br /&gt;
&lt;br /&gt;
Gameplay:&lt;br /&gt;
* {{MOD|game/state}} (Game states)&lt;br /&gt;
* {{MOD|game/menu}} (Menu)&lt;br /&gt;
* {{MOD|game/pawn}} (Character move, anim, physics and collision)&lt;br /&gt;
* {{MOD|game/sequence}}&lt;br /&gt;
* {{MOD|input_manager}}&lt;br /&gt;
&lt;br /&gt;
Tools:&lt;br /&gt;
* {{MOD|crypt}} (Encryptage)&lt;br /&gt;
* {{MOD|debug}} (debug features)&lt;br /&gt;
* {{MOD|dos_mapper}}&lt;br /&gt;
* {{MOD|fsm}} (Finite-state machine)&lt;br /&gt;
* {{MOD|localize}} (Translation manager)&lt;br /&gt;
* {{MOD|tool/disk_save}} (Save on disk from ROM)&lt;br /&gt;
* {{MOD|tool/mem_op}} (Quick operation on buffer)&lt;br /&gt;
* {{MOD|tool/qrcode_tiny}} (Tiny QR Code generator)&lt;br /&gt;
* {{MOD|tool/qrcode}} (QR Code generator)&lt;br /&gt;
* {{MOD|tool/reg}} (Registers setting)&lt;br /&gt;
* {{MOD|tool/sign}} (Application signature)&lt;br /&gt;
* {{MOD|tool/sjis}} (Shift-JIS conversion)&lt;br /&gt;
&lt;br /&gt;
Devices:&lt;br /&gt;
* {{MOD|device/joymega}} (JoyMega)&lt;br /&gt;
* {{MOD|device/msx-hid}} (MSX-HID detection)&lt;br /&gt;
* {{MOD|device/ninjatap}}&lt;br /&gt;
* {{MOD|device/pac}} (SRAM catridge)&lt;br /&gt;
* {{MOD|device/paddle}} (Arkanoid Vaus Paddle)&lt;br /&gt;
* {{MOD|device/wavegame}} (Pico+ WaveGame)&lt;br /&gt;
&lt;br /&gt;
Audio chips:&lt;br /&gt;
* {{MOD|psg}}&lt;br /&gt;
* {{MOD|msx-music}}&lt;br /&gt;
* {{MOD|msx-audio}}&lt;br /&gt;
* {{MOD|scc}}&lt;br /&gt;
&lt;br /&gt;
Audio players:&lt;br /&gt;
* {{MOD|arkos/akg_player}} (Arkos Tracker 2 and 3)&lt;br /&gt;
* {{MOD|arkos/akm_player}}&lt;br /&gt;
* {{MOD|arkos/aky_player}}&lt;br /&gt;
* {{MOD|ayfx/ayfx_player}}&lt;br /&gt;
* {{MOD|ndp/ndp_player}} (NDP driver)&lt;br /&gt;
* {{MOD|pcm/pcmenc}}&lt;br /&gt;
* {{MOD|pcm/pcmplay}}&lt;br /&gt;
* {{MOD|pt3/pt3_player}} (Pro Tracker 3)&lt;br /&gt;
* {{MOD|trilo/trilo_scc_player}} (Trilo Tracker)&lt;br /&gt;
* {{MOD|trilo/trilo_fm_player}} {{WIP}}&lt;br /&gt;
* {{MOD|vgm/lvgm_player}} (Light-VGM)&lt;br /&gt;
* {{MOD|vgm/vgm_player}}&lt;br /&gt;
* {{MOD|wyz/wyz_player}} (WYZ Tracker)&lt;br /&gt;
* {{MOD|wyz/wyz_player2}}&lt;br /&gt;
&lt;br /&gt;
Compression:&lt;br /&gt;
* {{MOD|compress}} (RLEp)&lt;br /&gt;
* {{MOD|compress/bitbuster}}&lt;br /&gt;
* {{MOD|compress/bitbuster2}}&lt;br /&gt;
* {{MOD|compress/lz48}} (3 unpackers)&lt;br /&gt;
* {{MOD|compress/pletter}}&lt;br /&gt;
* {{MOD|compress/zx0}} (4 unpackers)&lt;br /&gt;
* {{MOD|msxi/msxi_unpack}} {{WIP}}&lt;br /&gt;
&lt;br /&gt;
Network:&lt;br /&gt;
* {{MOD|obsonet}} {{WIP}}&lt;br /&gt;
* {{MOD|unapi_tcp}} {{WIP}}&lt;br /&gt;
&lt;br /&gt;
Helpers:&lt;br /&gt;
* {{MOD|asm}} (Assembler helper)&lt;br /&gt;
* {{MOD|basic_usr}} (Interface with BASIC)&lt;br /&gt;
* {{MOD|color}}&lt;br /&gt;
* {{MOD|core}}&lt;br /&gt;
* {{MOD|extbios}} (Extended BIOS)&lt;br /&gt;
* {{MOD|memory_mapper}}&lt;br /&gt;
* {{MOD|mutex}}&lt;br /&gt;
&lt;br /&gt;
{{COLUMN_END}}&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=AppSignature&amp;diff=4028</id>
		<title>AppSignature</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=AppSignature&amp;diff=4028"/>
				<updated>2026-09-26T11:25:51Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: /* Programming */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This [[Build tool]] option allow to add an '''application signature''' to binary data (right after the header).&lt;br /&gt;
&lt;br /&gt;
The MSXgl signature format is directly inspired by the meta-data used by '''Konami''' to identify their cartridges and add cross-games options.&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
&lt;br /&gt;
Application's signature is 4 bytes long and composed of:&lt;br /&gt;
* &amp;lt;tt&amp;gt;AppCompany&amp;lt;/tt&amp;gt;: 2 bytes for the creator ID ([[#Creator ID|reserve yours!]]),&lt;br /&gt;
* &amp;lt;tt&amp;gt;AppID&amp;lt;/tt&amp;gt;: 2 bytes for the product ID (the numbering of the applications is up to each creator).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
//-- Add application signature to binary data (boolean)&lt;br /&gt;
AppSignature = true;&lt;br /&gt;
&lt;br /&gt;
//-- Application creator ID. Can be 2 character string or 16-bits integer (0~65535)&lt;br /&gt;
AppCompany = &amp;quot;GL&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//-- Application product ID. Can be 2 character string or 16-bits integer (0~65535)&lt;br /&gt;
AppID = 0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If 2-character string is recommended for creator ID and integer for product ID, in fact, both of those parameters can be any of:&lt;br /&gt;
* 2-character string (&amp;lt;tt&amp;gt;&amp;quot;MX&amp;quot;&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;&amp;quot;a7&amp;quot;&amp;lt;/tt&amp;gt; for example),&lt;br /&gt;
* 16-bits decimal unsigned number (&amp;lt;tt&amp;gt;12345&amp;lt;/tt&amp;gt; for example),&lt;br /&gt;
* 16-bits hexadecimal number starting with &amp;lt;tt&amp;gt;0x&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;0x0750&amp;lt;/tt&amp;gt; for example).&lt;br /&gt;
&lt;br /&gt;
For example, the header first 2 words of Konami's ''Penguin Adventure'' are &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;, 0x4307&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;&amp;lt;/tt&amp;gt; is one of the signature used by Konami to mark there ROM (see next section) and &amp;lt;tt&amp;gt;0x4307&amp;lt;/tt&amp;gt; show in binary viewer the number 0743... the serial number of ''Penguin Adventure'' (RC743).&lt;br /&gt;
&lt;br /&gt;
You can also add extra data using [[AppExtra]] option. {{WIP}}&lt;br /&gt;
&lt;br /&gt;
== Programming ==&lt;br /&gt;
If &amp;lt;tt&amp;gt;AppSignature&amp;lt;/tt&amp;gt; is set to TRUE in Build tool configuration, then &amp;lt;tt&amp;gt;APPSIGN&amp;lt;/tt&amp;gt; is defined in your C program.&lt;br /&gt;
&lt;br /&gt;
Application signature is put just after the binary header:&lt;br /&gt;
* At ROM header address +0x0010 (should be 0x4010 or 0x8010),&lt;br /&gt;
* At Basic binary header address +0x0007 (should be 0x8007),&lt;br /&gt;
* At DOS binary start address +0x0002 (should be 0x0102).&lt;br /&gt;
&lt;br /&gt;
Define an external variable as &amp;lt;tt&amp;gt;g_AppSignature&amp;lt;/tt&amp;gt; if you need to access the data from your program.&lt;br /&gt;
It can be defined in several ways depending on your needs. For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
extern const u16 g_AppSignature[2];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
extern const u8 g_AppSignature[4];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Keep in mind than MSX store data as Less significant byte first (Little endian).&lt;br /&gt;
&lt;br /&gt;
For ROM targets, if a [[ROM type signature]] is present at offset +0010h, then the application signature is placed just after (header +0x0018).&lt;br /&gt;
&lt;br /&gt;
To handle all cases, the addresses to check are: 0x4010, 0x4018, 0x8010 and 0x8018.&lt;br /&gt;
&lt;br /&gt;
== Creator ID ==&lt;br /&gt;
Some creators' ID are already reserved:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! ID !! Rel !! Creator's name&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;0x00??&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2N&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || 2NICE&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AB&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Boxing'' and ''Football'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AM&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Associazione MSX Italia&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AG&amp;quot;&amp;lt;/tt&amp;gt; ||  || Antxiko Gorjon&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Bik5 (J. Bikker)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CC&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Casper Croes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (many games)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CL&amp;quot;&amp;lt;/tt&amp;gt; ||  || Chien Loco&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;EF&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Pennant Race'' and ''Knightmare 3'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FD&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || FutureDisk&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FP&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Fausto Pracek&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;JP&amp;quot;&amp;lt;/tt&amp;gt; ||  || Johan de Punder &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GH&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GL&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || MSXgl (samples)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;H_&amp;quot;&amp;lt;/tt&amp;gt; ||  || Peruho&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;HN&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Hando&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;MO&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || MO5.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;NB&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Nicola &amp;quot;8bit&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Pixel Phenix&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PP&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Pixel Phenix (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RC&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RG&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Rutagames (Diogo Patrão)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RO&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved for [[ROM type signature]]''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RS&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || RoboSoft&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TL&amp;quot;&amp;lt;/tt&amp;gt; ||  || Tele-Line&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TT&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Thomas ‘Totta’ Lundgren&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;YZ&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Game Master 2)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;WD&amp;quot;&amp;lt;/tt&amp;gt; ||  || Wim Dewijngaert&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;ZR&amp;quot;&amp;lt;/tt&amp;gt; ||  || Zdrmonster Productions&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;XX&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;0xFF??&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Come on the MSXgl's [https://discord.gg/pMeadGfv8E Discord Server] to reserve your own creator ID.&lt;br /&gt;
* Creator ID are only definitively assigned when an application is published with this code.&lt;br /&gt;
&lt;br /&gt;
== Known signed applications ==&lt;br /&gt;
List of released applications that contain compatible signature.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Sign !! Author !! Application&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2NEM&amp;quot;&amp;lt;/tt&amp;gt; || 2NICE || ''Snake Escape''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2NR3&amp;quot;&amp;lt;/tt&amp;gt; || 2NICE || ''Super Sokoban''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AMCR&amp;quot;&amp;lt;/tt&amp;gt; || Associazione MSX Italia || ''Chrono Runner''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5EM&amp;quot;&amp;lt;/tt&amp;gt; || Bik5 (J. Bikker) || ''Eggy's Maze''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5R3&amp;quot;&amp;lt;/tt&amp;gt; || Bik5 (J. Bikker) || ''DELTA''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CCPC&amp;quot;&amp;lt;/tt&amp;gt; || Casper Croes || ''Phenix Corrupta''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CCTR&amp;quot;&amp;lt;/tt&amp;gt; || Casper Croes&amp;lt;br/&amp;gt;Pixel Phenix || ''Soul Trapped''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FDLW&amp;quot;&amp;lt;/tt&amp;gt; || FutureDisk || ''A Lone Wolf''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPEX&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Sam.Pr Explore''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPMW&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Martian War''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPSL&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Soccer League''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPSP&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Sam.Pr''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;HNMG&amp;quot;&amp;lt;/tt&amp;gt; || Hando || ''MUGI''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;MOR5&amp;quot;&amp;lt;/tt&amp;gt; || MO5.com || ''Room 5''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;NBTC&amp;quot;&amp;lt;/tt&amp;gt; || Nicola &amp;quot;8bit&amp;quot; || ''The New Castle''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PPCR&amp;quot;&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Crawlers (MSXdev'23)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;,001&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Crawlers (cartridge)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;,003&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Peng Pong''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RGAJ&amp;quot;&amp;lt;/tt&amp;gt; || Tiago Tresoldi&amp;lt;br/&amp;gt;Freja Lindgren || ''AstroJump''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RGTM&amp;quot;&amp;lt;/tt&amp;gt; || Rutagames || ''TerMSX Multi''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RSP9&amp;quot;&amp;lt;/tt&amp;gt; || RoboSoft || ''Planet X9''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RSPE&amp;quot;&amp;lt;/tt&amp;gt; || RoboSoft || ''Attack of the Petscii Robots''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TT4P&amp;quot;&amp;lt;/tt&amp;gt; || Antxiko || ''Tiny Tetris VS''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TTDL&amp;quot;&amp;lt;/tt&amp;gt; || Thomas &amp;quot;Totta&amp;quot; Lundgren || ''Doomlings''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TTTP&amp;quot;&amp;lt;/tt&amp;gt; || Thomas &amp;quot;Totta&amp;quot; Lundgren || ''Tetpuz''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GL&amp;quot;,...&amp;lt;/tt&amp;gt; || MSXgl || (samples)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AB&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (''Boxing'' and ''Football'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (many games)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;EF&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (''Pennant Race'' and ''Knightmare 3'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;YZ&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (''Game Master 2)''&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=AppSignature&amp;diff=4027</id>
		<title>AppSignature</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=AppSignature&amp;diff=4027"/>
				<updated>2026-09-26T11:25:37Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: /* Programming */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This [[Build tool]] option allow to add an '''application signature''' to binary data (right after the header).&lt;br /&gt;
&lt;br /&gt;
The MSXgl signature format is directly inspired by the meta-data used by '''Konami''' to identify their cartridges and add cross-games options.&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
&lt;br /&gt;
Application's signature is 4 bytes long and composed of:&lt;br /&gt;
* &amp;lt;tt&amp;gt;AppCompany&amp;lt;/tt&amp;gt;: 2 bytes for the creator ID ([[#Creator ID|reserve yours!]]),&lt;br /&gt;
* &amp;lt;tt&amp;gt;AppID&amp;lt;/tt&amp;gt;: 2 bytes for the product ID (the numbering of the applications is up to each creator).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
//-- Add application signature to binary data (boolean)&lt;br /&gt;
AppSignature = true;&lt;br /&gt;
&lt;br /&gt;
//-- Application creator ID. Can be 2 character string or 16-bits integer (0~65535)&lt;br /&gt;
AppCompany = &amp;quot;GL&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//-- Application product ID. Can be 2 character string or 16-bits integer (0~65535)&lt;br /&gt;
AppID = 0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If 2-character string is recommended for creator ID and integer for product ID, in fact, both of those parameters can be any of:&lt;br /&gt;
* 2-character string (&amp;lt;tt&amp;gt;&amp;quot;MX&amp;quot;&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;&amp;quot;a7&amp;quot;&amp;lt;/tt&amp;gt; for example),&lt;br /&gt;
* 16-bits decimal unsigned number (&amp;lt;tt&amp;gt;12345&amp;lt;/tt&amp;gt; for example),&lt;br /&gt;
* 16-bits hexadecimal number starting with &amp;lt;tt&amp;gt;0x&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;0x0750&amp;lt;/tt&amp;gt; for example).&lt;br /&gt;
&lt;br /&gt;
For example, the header first 2 words of Konami's ''Penguin Adventure'' are &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;, 0x4307&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;&amp;lt;/tt&amp;gt; is one of the signature used by Konami to mark there ROM (see next section) and &amp;lt;tt&amp;gt;0x4307&amp;lt;/tt&amp;gt; show in binary viewer the number 0743... the serial number of ''Penguin Adventure'' (RC743).&lt;br /&gt;
&lt;br /&gt;
You can also add extra data using [[AppExtra]] option. {{WIP}}&lt;br /&gt;
&lt;br /&gt;
== Programming ==&lt;br /&gt;
If &amp;lt;tt&amp;gt;AppSignature&amp;lt;/tt&amp;gt; is set to TRUE in Build tool configuration, then &amp;lt;tt&amp;gt;APPSIGN&amp;lt;/tt&amp;gt; is defined in your C program.&lt;br /&gt;
&lt;br /&gt;
Application signature is put just after the binary header:&lt;br /&gt;
* At ROM header address +0x0010 (should be 0x4010 or 0x8010),&lt;br /&gt;
* At Basic binary header address +0x0007 (should be 0x8007),&lt;br /&gt;
* At DOS binary start address +0x0002 (should be 0x0102).&lt;br /&gt;
&lt;br /&gt;
Define an external variable as &amp;lt;tt&amp;gt;g_AppSignature&amp;lt;/tt&amp;gt; if you need to access the data from your program.&lt;br /&gt;
It can be defined in several ways depending on your needs. For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
extern const u16 g_AppSignature[2];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
extern const u8 g_AppSignature[4];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Keep in mind than MSX store data as Less significant byte first (Little endian).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Note&amp;lt;/u&amp;gt;: For ROM targets, if a [[ROM type signature]] is present at offset +0010h, then the application signature is placed just after (header +0x0018). To handle all cases, the addresses to check are: 0x4010, 0x4018, 0x8010 and 0x8018.&lt;br /&gt;
&lt;br /&gt;
== Creator ID ==&lt;br /&gt;
Some creators' ID are already reserved:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! ID !! Rel !! Creator's name&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;0x00??&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2N&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || 2NICE&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AB&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Boxing'' and ''Football'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AM&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Associazione MSX Italia&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AG&amp;quot;&amp;lt;/tt&amp;gt; ||  || Antxiko Gorjon&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Bik5 (J. Bikker)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CC&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Casper Croes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (many games)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CL&amp;quot;&amp;lt;/tt&amp;gt; ||  || Chien Loco&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;EF&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Pennant Race'' and ''Knightmare 3'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FD&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || FutureDisk&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FP&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Fausto Pracek&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;JP&amp;quot;&amp;lt;/tt&amp;gt; ||  || Johan de Punder &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GH&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GL&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || MSXgl (samples)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;H_&amp;quot;&amp;lt;/tt&amp;gt; ||  || Peruho&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;HN&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Hando&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;MO&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || MO5.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;NB&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Nicola &amp;quot;8bit&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Pixel Phenix&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PP&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Pixel Phenix (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RC&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RG&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Rutagames (Diogo Patrão)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RO&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved for [[ROM type signature]]''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RS&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || RoboSoft&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TL&amp;quot;&amp;lt;/tt&amp;gt; ||  || Tele-Line&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TT&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Thomas ‘Totta’ Lundgren&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;YZ&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Game Master 2)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;WD&amp;quot;&amp;lt;/tt&amp;gt; ||  || Wim Dewijngaert&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;ZR&amp;quot;&amp;lt;/tt&amp;gt; ||  || Zdrmonster Productions&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;XX&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;0xFF??&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Come on the MSXgl's [https://discord.gg/pMeadGfv8E Discord Server] to reserve your own creator ID.&lt;br /&gt;
* Creator ID are only definitively assigned when an application is published with this code.&lt;br /&gt;
&lt;br /&gt;
== Known signed applications ==&lt;br /&gt;
List of released applications that contain compatible signature.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Sign !! Author !! Application&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2NEM&amp;quot;&amp;lt;/tt&amp;gt; || 2NICE || ''Snake Escape''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2NR3&amp;quot;&amp;lt;/tt&amp;gt; || 2NICE || ''Super Sokoban''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AMCR&amp;quot;&amp;lt;/tt&amp;gt; || Associazione MSX Italia || ''Chrono Runner''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5EM&amp;quot;&amp;lt;/tt&amp;gt; || Bik5 (J. Bikker) || ''Eggy's Maze''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5R3&amp;quot;&amp;lt;/tt&amp;gt; || Bik5 (J. Bikker) || ''DELTA''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CCPC&amp;quot;&amp;lt;/tt&amp;gt; || Casper Croes || ''Phenix Corrupta''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CCTR&amp;quot;&amp;lt;/tt&amp;gt; || Casper Croes&amp;lt;br/&amp;gt;Pixel Phenix || ''Soul Trapped''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FDLW&amp;quot;&amp;lt;/tt&amp;gt; || FutureDisk || ''A Lone Wolf''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPEX&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Sam.Pr Explore''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPMW&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Martian War''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPSL&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Soccer League''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPSP&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Sam.Pr''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;HNMG&amp;quot;&amp;lt;/tt&amp;gt; || Hando || ''MUGI''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;MOR5&amp;quot;&amp;lt;/tt&amp;gt; || MO5.com || ''Room 5''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;NBTC&amp;quot;&amp;lt;/tt&amp;gt; || Nicola &amp;quot;8bit&amp;quot; || ''The New Castle''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PPCR&amp;quot;&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Crawlers (MSXdev'23)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;,001&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Crawlers (cartridge)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;,003&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Peng Pong''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RGAJ&amp;quot;&amp;lt;/tt&amp;gt; || Tiago Tresoldi&amp;lt;br/&amp;gt;Freja Lindgren || ''AstroJump''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RGTM&amp;quot;&amp;lt;/tt&amp;gt; || Rutagames || ''TerMSX Multi''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RSP9&amp;quot;&amp;lt;/tt&amp;gt; || RoboSoft || ''Planet X9''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RSPE&amp;quot;&amp;lt;/tt&amp;gt; || RoboSoft || ''Attack of the Petscii Robots''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TT4P&amp;quot;&amp;lt;/tt&amp;gt; || Antxiko || ''Tiny Tetris VS''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TTDL&amp;quot;&amp;lt;/tt&amp;gt; || Thomas &amp;quot;Totta&amp;quot; Lundgren || ''Doomlings''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TTTP&amp;quot;&amp;lt;/tt&amp;gt; || Thomas &amp;quot;Totta&amp;quot; Lundgren || ''Tetpuz''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GL&amp;quot;,...&amp;lt;/tt&amp;gt; || MSXgl || (samples)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AB&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (''Boxing'' and ''Football'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (many games)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;EF&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (''Pennant Race'' and ''Knightmare 3'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;YZ&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (''Game Master 2)''&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=AppSignature&amp;diff=4026</id>
		<title>AppSignature</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=AppSignature&amp;diff=4026"/>
				<updated>2026-09-26T11:24:38Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: /* Programming */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This [[Build tool]] option allow to add an '''application signature''' to binary data (right after the header).&lt;br /&gt;
&lt;br /&gt;
The MSXgl signature format is directly inspired by the meta-data used by '''Konami''' to identify their cartridges and add cross-games options.&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
&lt;br /&gt;
Application's signature is 4 bytes long and composed of:&lt;br /&gt;
* &amp;lt;tt&amp;gt;AppCompany&amp;lt;/tt&amp;gt;: 2 bytes for the creator ID ([[#Creator ID|reserve yours!]]),&lt;br /&gt;
* &amp;lt;tt&amp;gt;AppID&amp;lt;/tt&amp;gt;: 2 bytes for the product ID (the numbering of the applications is up to each creator).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
//-- Add application signature to binary data (boolean)&lt;br /&gt;
AppSignature = true;&lt;br /&gt;
&lt;br /&gt;
//-- Application creator ID. Can be 2 character string or 16-bits integer (0~65535)&lt;br /&gt;
AppCompany = &amp;quot;GL&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//-- Application product ID. Can be 2 character string or 16-bits integer (0~65535)&lt;br /&gt;
AppID = 0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If 2-character string is recommended for creator ID and integer for product ID, in fact, both of those parameters can be any of:&lt;br /&gt;
* 2-character string (&amp;lt;tt&amp;gt;&amp;quot;MX&amp;quot;&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;&amp;quot;a7&amp;quot;&amp;lt;/tt&amp;gt; for example),&lt;br /&gt;
* 16-bits decimal unsigned number (&amp;lt;tt&amp;gt;12345&amp;lt;/tt&amp;gt; for example),&lt;br /&gt;
* 16-bits hexadecimal number starting with &amp;lt;tt&amp;gt;0x&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;0x0750&amp;lt;/tt&amp;gt; for example).&lt;br /&gt;
&lt;br /&gt;
For example, the header first 2 words of Konami's ''Penguin Adventure'' are &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;, 0x4307&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;&amp;lt;/tt&amp;gt; is one of the signature used by Konami to mark there ROM (see next section) and &amp;lt;tt&amp;gt;0x4307&amp;lt;/tt&amp;gt; show in binary viewer the number 0743... the serial number of ''Penguin Adventure'' (RC743).&lt;br /&gt;
&lt;br /&gt;
You can also add extra data using [[AppExtra]] option. {{WIP}}&lt;br /&gt;
&lt;br /&gt;
== Programming ==&lt;br /&gt;
If &amp;lt;tt&amp;gt;AppSignature&amp;lt;/tt&amp;gt; is set to TRUE in Build tool configuration, then &amp;lt;tt&amp;gt;APPSIGN&amp;lt;/tt&amp;gt; is defined in your C program.&lt;br /&gt;
&lt;br /&gt;
Application signature is put just after the binary header:&lt;br /&gt;
* At ROM header address +0x0010 (should be 0x4010 or 0x8010),&lt;br /&gt;
* At Basic binary header address +0x0007 (should be 0x8007),&lt;br /&gt;
* At DOS binary start address +0x0002 (should be 0x0102).&lt;br /&gt;
&lt;br /&gt;
Define an external variable as &amp;lt;tt&amp;gt;g_AppSignature&amp;lt;/tt&amp;gt; if you need to access the data from your program.&lt;br /&gt;
It can be defined in several ways depending on your needs. For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
extern const u16 g_AppSignature[2];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
extern const u8 g_AppSignature[4];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Keep in mind than MSX store data as Less significant byte first (Little endian).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Note&amp;lt;/u&amp;gt;: For ROM targets, if a [[ROM type signature]] is present at offset +0010h, then the application signature is placed just after (header +0x0018). In that case, the addresses to check are: 0x4010, 0x4018, 0x8010 and 0x8018.&lt;br /&gt;
&lt;br /&gt;
== Creator ID ==&lt;br /&gt;
Some creators' ID are already reserved:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! ID !! Rel !! Creator's name&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;0x00??&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2N&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || 2NICE&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AB&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Boxing'' and ''Football'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AM&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Associazione MSX Italia&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AG&amp;quot;&amp;lt;/tt&amp;gt; ||  || Antxiko Gorjon&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Bik5 (J. Bikker)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CC&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Casper Croes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (many games)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CL&amp;quot;&amp;lt;/tt&amp;gt; ||  || Chien Loco&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;EF&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Pennant Race'' and ''Knightmare 3'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FD&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || FutureDisk&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FP&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Fausto Pracek&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;JP&amp;quot;&amp;lt;/tt&amp;gt; ||  || Johan de Punder &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GH&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GL&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || MSXgl (samples)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;H_&amp;quot;&amp;lt;/tt&amp;gt; ||  || Peruho&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;HN&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Hando&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;MO&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || MO5.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;NB&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Nicola &amp;quot;8bit&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Pixel Phenix&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PP&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Pixel Phenix (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RC&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RG&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Rutagames (Diogo Patrão)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RO&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved for [[ROM type signature]]''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RS&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || RoboSoft&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TL&amp;quot;&amp;lt;/tt&amp;gt; ||  || Tele-Line&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TT&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Thomas ‘Totta’ Lundgren&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;YZ&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Game Master 2)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;WD&amp;quot;&amp;lt;/tt&amp;gt; ||  || Wim Dewijngaert&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;ZR&amp;quot;&amp;lt;/tt&amp;gt; ||  || Zdrmonster Productions&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;XX&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;0xFF??&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Come on the MSXgl's [https://discord.gg/pMeadGfv8E Discord Server] to reserve your own creator ID.&lt;br /&gt;
* Creator ID are only definitively assigned when an application is published with this code.&lt;br /&gt;
&lt;br /&gt;
== Known signed applications ==&lt;br /&gt;
List of released applications that contain compatible signature.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Sign !! Author !! Application&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2NEM&amp;quot;&amp;lt;/tt&amp;gt; || 2NICE || ''Snake Escape''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2NR3&amp;quot;&amp;lt;/tt&amp;gt; || 2NICE || ''Super Sokoban''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AMCR&amp;quot;&amp;lt;/tt&amp;gt; || Associazione MSX Italia || ''Chrono Runner''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5EM&amp;quot;&amp;lt;/tt&amp;gt; || Bik5 (J. Bikker) || ''Eggy's Maze''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5R3&amp;quot;&amp;lt;/tt&amp;gt; || Bik5 (J. Bikker) || ''DELTA''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CCPC&amp;quot;&amp;lt;/tt&amp;gt; || Casper Croes || ''Phenix Corrupta''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CCTR&amp;quot;&amp;lt;/tt&amp;gt; || Casper Croes&amp;lt;br/&amp;gt;Pixel Phenix || ''Soul Trapped''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FDLW&amp;quot;&amp;lt;/tt&amp;gt; || FutureDisk || ''A Lone Wolf''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPEX&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Sam.Pr Explore''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPMW&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Martian War''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPSL&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Soccer League''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPSP&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Sam.Pr''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;HNMG&amp;quot;&amp;lt;/tt&amp;gt; || Hando || ''MUGI''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;MOR5&amp;quot;&amp;lt;/tt&amp;gt; || MO5.com || ''Room 5''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;NBTC&amp;quot;&amp;lt;/tt&amp;gt; || Nicola &amp;quot;8bit&amp;quot; || ''The New Castle''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PPCR&amp;quot;&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Crawlers (MSXdev'23)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;,001&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Crawlers (cartridge)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;,003&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Peng Pong''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RGAJ&amp;quot;&amp;lt;/tt&amp;gt; || Tiago Tresoldi&amp;lt;br/&amp;gt;Freja Lindgren || ''AstroJump''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RGTM&amp;quot;&amp;lt;/tt&amp;gt; || Rutagames || ''TerMSX Multi''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RSP9&amp;quot;&amp;lt;/tt&amp;gt; || RoboSoft || ''Planet X9''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RSPE&amp;quot;&amp;lt;/tt&amp;gt; || RoboSoft || ''Attack of the Petscii Robots''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TT4P&amp;quot;&amp;lt;/tt&amp;gt; || Antxiko || ''Tiny Tetris VS''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TTDL&amp;quot;&amp;lt;/tt&amp;gt; || Thomas &amp;quot;Totta&amp;quot; Lundgren || ''Doomlings''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TTTP&amp;quot;&amp;lt;/tt&amp;gt; || Thomas &amp;quot;Totta&amp;quot; Lundgren || ''Tetpuz''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GL&amp;quot;,...&amp;lt;/tt&amp;gt; || MSXgl || (samples)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AB&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (''Boxing'' and ''Football'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (many games)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;EF&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (''Pennant Race'' and ''Knightmare 3'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;YZ&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (''Game Master 2)''&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=AppSignature&amp;diff=4025</id>
		<title>AppSignature</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=AppSignature&amp;diff=4025"/>
				<updated>2026-09-26T11:22:34Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: /* Known signed applications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This [[Build tool]] option allow to add an '''application signature''' to binary data (right after the header).&lt;br /&gt;
&lt;br /&gt;
The MSXgl signature format is directly inspired by the meta-data used by '''Konami''' to identify their cartridges and add cross-games options.&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
&lt;br /&gt;
Application's signature is 4 bytes long and composed of:&lt;br /&gt;
* &amp;lt;tt&amp;gt;AppCompany&amp;lt;/tt&amp;gt;: 2 bytes for the creator ID ([[#Creator ID|reserve yours!]]),&lt;br /&gt;
* &amp;lt;tt&amp;gt;AppID&amp;lt;/tt&amp;gt;: 2 bytes for the product ID (the numbering of the applications is up to each creator).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
//-- Add application signature to binary data (boolean)&lt;br /&gt;
AppSignature = true;&lt;br /&gt;
&lt;br /&gt;
//-- Application creator ID. Can be 2 character string or 16-bits integer (0~65535)&lt;br /&gt;
AppCompany = &amp;quot;GL&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//-- Application product ID. Can be 2 character string or 16-bits integer (0~65535)&lt;br /&gt;
AppID = 0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If 2-character string is recommended for creator ID and integer for product ID, in fact, both of those parameters can be any of:&lt;br /&gt;
* 2-character string (&amp;lt;tt&amp;gt;&amp;quot;MX&amp;quot;&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;&amp;quot;a7&amp;quot;&amp;lt;/tt&amp;gt; for example),&lt;br /&gt;
* 16-bits decimal unsigned number (&amp;lt;tt&amp;gt;12345&amp;lt;/tt&amp;gt; for example),&lt;br /&gt;
* 16-bits hexadecimal number starting with &amp;lt;tt&amp;gt;0x&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;0x0750&amp;lt;/tt&amp;gt; for example).&lt;br /&gt;
&lt;br /&gt;
For example, the header first 2 words of Konami's ''Penguin Adventure'' are &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;, 0x4307&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;&amp;lt;/tt&amp;gt; is one of the signature used by Konami to mark there ROM (see next section) and &amp;lt;tt&amp;gt;0x4307&amp;lt;/tt&amp;gt; show in binary viewer the number 0743... the serial number of ''Penguin Adventure'' (RC743).&lt;br /&gt;
&lt;br /&gt;
You can also add extra data using [[AppExtra]] option. {{WIP}}&lt;br /&gt;
&lt;br /&gt;
== Programming ==&lt;br /&gt;
If &amp;lt;tt&amp;gt;AppSignature&amp;lt;/tt&amp;gt; is set to TRUE in Build tool configuration, then &amp;lt;tt&amp;gt;APPSIGN&amp;lt;/tt&amp;gt; is defined in your C program.&lt;br /&gt;
&lt;br /&gt;
Application signature is put just after the binary header:&lt;br /&gt;
* At ROM header address +0x0010 (should be 0x4010 or 0x8010),&lt;br /&gt;
* At Basic binary header address +0x0007 (should be 0x8007),&lt;br /&gt;
* At DOS binary start address +0x0002 (should be 0x0102).&lt;br /&gt;
&lt;br /&gt;
Define an external variable as &amp;lt;tt&amp;gt;g_AppSignature&amp;lt;/tt&amp;gt; if you need to access the data from your program.&lt;br /&gt;
It can be defined in several ways depending on your needs. For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
extern const u16 g_AppSignature[2];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
extern const u8 g_AppSignature[4];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Keep in mind than MSX store data as Less significant byte first (Little endian).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Note&amp;lt;/u&amp;gt;: For ROM targets, if a [[ROM type signature]] is present at offset +0010h, then the application signature is placed just after (header +0x0018)&lt;br /&gt;
&lt;br /&gt;
== Creator ID ==&lt;br /&gt;
Some creators' ID are already reserved:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! ID !! Rel !! Creator's name&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;0x00??&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2N&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || 2NICE&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AB&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Boxing'' and ''Football'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AM&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Associazione MSX Italia&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AG&amp;quot;&amp;lt;/tt&amp;gt; ||  || Antxiko Gorjon&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Bik5 (J. Bikker)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CC&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Casper Croes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (many games)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CL&amp;quot;&amp;lt;/tt&amp;gt; ||  || Chien Loco&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;EF&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Pennant Race'' and ''Knightmare 3'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FD&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || FutureDisk&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FP&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Fausto Pracek&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;JP&amp;quot;&amp;lt;/tt&amp;gt; ||  || Johan de Punder &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GH&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GL&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || MSXgl (samples)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;H_&amp;quot;&amp;lt;/tt&amp;gt; ||  || Peruho&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;HN&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Hando&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;MO&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || MO5.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;NB&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Nicola &amp;quot;8bit&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Pixel Phenix&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PP&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Pixel Phenix (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RC&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RG&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Rutagames (Diogo Patrão)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RO&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved for [[ROM type signature]]''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RS&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || RoboSoft&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TL&amp;quot;&amp;lt;/tt&amp;gt; ||  || Tele-Line&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TT&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Thomas ‘Totta’ Lundgren&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;YZ&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Game Master 2)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;WD&amp;quot;&amp;lt;/tt&amp;gt; ||  || Wim Dewijngaert&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;ZR&amp;quot;&amp;lt;/tt&amp;gt; ||  || Zdrmonster Productions&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;XX&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;0xFF??&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Come on the MSXgl's [https://discord.gg/pMeadGfv8E Discord Server] to reserve your own creator ID.&lt;br /&gt;
* Creator ID are only definitively assigned when an application is published with this code.&lt;br /&gt;
&lt;br /&gt;
== Known signed applications ==&lt;br /&gt;
List of released applications that contain compatible signature.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Sign !! Author !! Application&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2NEM&amp;quot;&amp;lt;/tt&amp;gt; || 2NICE || ''Snake Escape''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2NR3&amp;quot;&amp;lt;/tt&amp;gt; || 2NICE || ''Super Sokoban''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AMCR&amp;quot;&amp;lt;/tt&amp;gt; || Associazione MSX Italia || ''Chrono Runner''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5EM&amp;quot;&amp;lt;/tt&amp;gt; || Bik5 (J. Bikker) || ''Eggy's Maze''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5R3&amp;quot;&amp;lt;/tt&amp;gt; || Bik5 (J. Bikker) || ''DELTA''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CCPC&amp;quot;&amp;lt;/tt&amp;gt; || Casper Croes || ''Phenix Corrupta''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CCTR&amp;quot;&amp;lt;/tt&amp;gt; || Casper Croes&amp;lt;br/&amp;gt;Pixel Phenix || ''Soul Trapped''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FDLW&amp;quot;&amp;lt;/tt&amp;gt; || FutureDisk || ''A Lone Wolf''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPEX&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Sam.Pr Explore''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPMW&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Martian War''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPSL&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Soccer League''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPSP&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Sam.Pr''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;HNMG&amp;quot;&amp;lt;/tt&amp;gt; || Hando || ''MUGI''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;MOR5&amp;quot;&amp;lt;/tt&amp;gt; || MO5.com || ''Room 5''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;NBTC&amp;quot;&amp;lt;/tt&amp;gt; || Nicola &amp;quot;8bit&amp;quot; || ''The New Castle''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PPCR&amp;quot;&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Crawlers (MSXdev'23)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;,001&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Crawlers (cartridge)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;,003&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Peng Pong''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RGAJ&amp;quot;&amp;lt;/tt&amp;gt; || Tiago Tresoldi&amp;lt;br/&amp;gt;Freja Lindgren || ''AstroJump''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RGTM&amp;quot;&amp;lt;/tt&amp;gt; || Rutagames || ''TerMSX Multi''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RSP9&amp;quot;&amp;lt;/tt&amp;gt; || RoboSoft || ''Planet X9''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RSPE&amp;quot;&amp;lt;/tt&amp;gt; || RoboSoft || ''Attack of the Petscii Robots''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TT4P&amp;quot;&amp;lt;/tt&amp;gt; || Antxiko || ''Tiny Tetris VS''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TTDL&amp;quot;&amp;lt;/tt&amp;gt; || Thomas &amp;quot;Totta&amp;quot; Lundgren || ''Doomlings''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TTTP&amp;quot;&amp;lt;/tt&amp;gt; || Thomas &amp;quot;Totta&amp;quot; Lundgren || ''Tetpuz''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GL&amp;quot;,...&amp;lt;/tt&amp;gt; || MSXgl || (samples)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AB&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (''Boxing'' and ''Football'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (many games)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;EF&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (''Pennant Race'' and ''Knightmare 3'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;YZ&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (''Game Master 2)''&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=AppSignature&amp;diff=4024</id>
		<title>AppSignature</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=AppSignature&amp;diff=4024"/>
				<updated>2026-09-26T11:15:53Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: /* Creator ID */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This [[Build tool]] option allow to add an '''application signature''' to binary data (right after the header).&lt;br /&gt;
&lt;br /&gt;
The MSXgl signature format is directly inspired by the meta-data used by '''Konami''' to identify their cartridges and add cross-games options.&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
&lt;br /&gt;
Application's signature is 4 bytes long and composed of:&lt;br /&gt;
* &amp;lt;tt&amp;gt;AppCompany&amp;lt;/tt&amp;gt;: 2 bytes for the creator ID ([[#Creator ID|reserve yours!]]),&lt;br /&gt;
* &amp;lt;tt&amp;gt;AppID&amp;lt;/tt&amp;gt;: 2 bytes for the product ID (the numbering of the applications is up to each creator).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
//-- Add application signature to binary data (boolean)&lt;br /&gt;
AppSignature = true;&lt;br /&gt;
&lt;br /&gt;
//-- Application creator ID. Can be 2 character string or 16-bits integer (0~65535)&lt;br /&gt;
AppCompany = &amp;quot;GL&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//-- Application product ID. Can be 2 character string or 16-bits integer (0~65535)&lt;br /&gt;
AppID = 0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If 2-character string is recommended for creator ID and integer for product ID, in fact, both of those parameters can be any of:&lt;br /&gt;
* 2-character string (&amp;lt;tt&amp;gt;&amp;quot;MX&amp;quot;&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;&amp;quot;a7&amp;quot;&amp;lt;/tt&amp;gt; for example),&lt;br /&gt;
* 16-bits decimal unsigned number (&amp;lt;tt&amp;gt;12345&amp;lt;/tt&amp;gt; for example),&lt;br /&gt;
* 16-bits hexadecimal number starting with &amp;lt;tt&amp;gt;0x&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;0x0750&amp;lt;/tt&amp;gt; for example).&lt;br /&gt;
&lt;br /&gt;
For example, the header first 2 words of Konami's ''Penguin Adventure'' are &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;, 0x4307&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;&amp;lt;/tt&amp;gt; is one of the signature used by Konami to mark there ROM (see next section) and &amp;lt;tt&amp;gt;0x4307&amp;lt;/tt&amp;gt; show in binary viewer the number 0743... the serial number of ''Penguin Adventure'' (RC743).&lt;br /&gt;
&lt;br /&gt;
You can also add extra data using [[AppExtra]] option. {{WIP}}&lt;br /&gt;
&lt;br /&gt;
== Programming ==&lt;br /&gt;
If &amp;lt;tt&amp;gt;AppSignature&amp;lt;/tt&amp;gt; is set to TRUE in Build tool configuration, then &amp;lt;tt&amp;gt;APPSIGN&amp;lt;/tt&amp;gt; is defined in your C program.&lt;br /&gt;
&lt;br /&gt;
Application signature is put just after the binary header:&lt;br /&gt;
* At ROM header address +0x0010 (should be 0x4010 or 0x8010),&lt;br /&gt;
* At Basic binary header address +0x0007 (should be 0x8007),&lt;br /&gt;
* At DOS binary start address +0x0002 (should be 0x0102).&lt;br /&gt;
&lt;br /&gt;
Define an external variable as &amp;lt;tt&amp;gt;g_AppSignature&amp;lt;/tt&amp;gt; if you need to access the data from your program.&lt;br /&gt;
It can be defined in several ways depending on your needs. For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
extern const u16 g_AppSignature[2];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
extern const u8 g_AppSignature[4];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Keep in mind than MSX store data as Less significant byte first (Little endian).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Note&amp;lt;/u&amp;gt;: For ROM targets, if a [[ROM type signature]] is present at offset +0010h, then the application signature is placed just after (header +0x0018)&lt;br /&gt;
&lt;br /&gt;
== Creator ID ==&lt;br /&gt;
Some creators' ID are already reserved:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! ID !! Rel !! Creator's name&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;0x00??&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2N&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || 2NICE&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AB&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Boxing'' and ''Football'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AM&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Associazione MSX Italia&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AG&amp;quot;&amp;lt;/tt&amp;gt; ||  || Antxiko Gorjon&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Bik5 (J. Bikker)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CC&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Casper Croes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (many games)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CL&amp;quot;&amp;lt;/tt&amp;gt; ||  || Chien Loco&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;EF&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Pennant Race'' and ''Knightmare 3'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FD&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || FutureDisk&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FP&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Fausto Pracek&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;JP&amp;quot;&amp;lt;/tt&amp;gt; ||  || Johan de Punder &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GH&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GL&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || MSXgl (samples)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;H_&amp;quot;&amp;lt;/tt&amp;gt; ||  || Peruho&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;HN&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Hando&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;MO&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || MO5.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;NB&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Nicola &amp;quot;8bit&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Pixel Phenix&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PP&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Pixel Phenix (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RC&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RG&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Rutagames (Diogo Patrão)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RO&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved for [[ROM type signature]]''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RS&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || RoboSoft&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TL&amp;quot;&amp;lt;/tt&amp;gt; ||  || Tele-Line&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TT&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Thomas ‘Totta’ Lundgren&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;YZ&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Game Master 2)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;WD&amp;quot;&amp;lt;/tt&amp;gt; ||  || Wim Dewijngaert&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;ZR&amp;quot;&amp;lt;/tt&amp;gt; ||  || Zdrmonster Productions&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;XX&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;0xFF??&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Come on the MSXgl's [https://discord.gg/pMeadGfv8E Discord Server] to reserve your own creator ID.&lt;br /&gt;
* Creator ID are only definitively assigned when an application is published with this code.&lt;br /&gt;
&lt;br /&gt;
== Known signed applications ==&lt;br /&gt;
List of released applications that contain compatible signature.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Sign !! Author !! Application&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2NEM&amp;quot;&amp;lt;/tt&amp;gt; || 2NICE || ''Snake Escape''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2NR3&amp;quot;&amp;lt;/tt&amp;gt; || 2NICE || ''Super Sokoban''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5EM&amp;quot;&amp;lt;/tt&amp;gt; || Bik5 (J. Bikker) || ''Eggy's Maze''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5R3&amp;quot;&amp;lt;/tt&amp;gt; || Bik5 (J. Bikker) || ''DELTA''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CCPC&amp;quot;&amp;lt;/tt&amp;gt; || Casper Croes || ''Phenix Corrupta''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CCTR&amp;quot;&amp;lt;/tt&amp;gt; || Casper Croes&amp;lt;br/&amp;gt;Pixel Phenix || ''Soul Trapped''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FDLW&amp;quot;&amp;lt;/tt&amp;gt; || FutureDisk || ''A Lone Wolf''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPEX&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Sam.Pr Explore''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPMW&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Martian War''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPSL&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Soccer League''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPSP&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Sam.Pr''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;NBTC&amp;quot;&amp;lt;/tt&amp;gt; || Nicola &amp;quot;8bit&amp;quot; || ''The New Castle''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PPCR&amp;quot;&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Crawlers (MSXdev'23)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;,001&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Crawlers (cartridge)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;,003&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Peng Pong''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RGTM&amp;quot;&amp;lt;/tt&amp;gt; || Rutagames || ''TerMSX Multi''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RSP9&amp;quot;&amp;lt;/tt&amp;gt; || RoboSoft || ''Planet X9''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RSPE&amp;quot;&amp;lt;/tt&amp;gt; || RoboSoft || ''Attack of the Petscii Robots''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TTTP&amp;quot;&amp;lt;/tt&amp;gt; || Thomas &amp;quot;Totta&amp;quot; Lundgren || ''Tetpuz''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TTDL&amp;quot;&amp;lt;/tt&amp;gt; || Thomas &amp;quot;Totta&amp;quot; Lundgren || ''Doomlings''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;MOR5&amp;quot;&amp;lt;/tt&amp;gt; || MO5.com || ''Room 5''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GL&amp;quot;,...&amp;lt;/tt&amp;gt; || MSXgl || (samples)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AB&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (''Boxing'' and ''Football'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (many games)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;EF&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (''Pennant Race'' and ''Knightmare 3'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;YZ&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (''Game Master 2)''&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=AppSignature&amp;diff=4023</id>
		<title>AppSignature</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=AppSignature&amp;diff=4023"/>
				<updated>2026-09-26T11:15:21Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: /* Creator ID */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This [[Build tool]] option allow to add an '''application signature''' to binary data (right after the header).&lt;br /&gt;
&lt;br /&gt;
The MSXgl signature format is directly inspired by the meta-data used by '''Konami''' to identify their cartridges and add cross-games options.&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
&lt;br /&gt;
Application's signature is 4 bytes long and composed of:&lt;br /&gt;
* &amp;lt;tt&amp;gt;AppCompany&amp;lt;/tt&amp;gt;: 2 bytes for the creator ID ([[#Creator ID|reserve yours!]]),&lt;br /&gt;
* &amp;lt;tt&amp;gt;AppID&amp;lt;/tt&amp;gt;: 2 bytes for the product ID (the numbering of the applications is up to each creator).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
//-- Add application signature to binary data (boolean)&lt;br /&gt;
AppSignature = true;&lt;br /&gt;
&lt;br /&gt;
//-- Application creator ID. Can be 2 character string or 16-bits integer (0~65535)&lt;br /&gt;
AppCompany = &amp;quot;GL&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//-- Application product ID. Can be 2 character string or 16-bits integer (0~65535)&lt;br /&gt;
AppID = 0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If 2-character string is recommended for creator ID and integer for product ID, in fact, both of those parameters can be any of:&lt;br /&gt;
* 2-character string (&amp;lt;tt&amp;gt;&amp;quot;MX&amp;quot;&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;&amp;quot;a7&amp;quot;&amp;lt;/tt&amp;gt; for example),&lt;br /&gt;
* 16-bits decimal unsigned number (&amp;lt;tt&amp;gt;12345&amp;lt;/tt&amp;gt; for example),&lt;br /&gt;
* 16-bits hexadecimal number starting with &amp;lt;tt&amp;gt;0x&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;0x0750&amp;lt;/tt&amp;gt; for example).&lt;br /&gt;
&lt;br /&gt;
For example, the header first 2 words of Konami's ''Penguin Adventure'' are &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;, 0x4307&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;&amp;lt;/tt&amp;gt; is one of the signature used by Konami to mark there ROM (see next section) and &amp;lt;tt&amp;gt;0x4307&amp;lt;/tt&amp;gt; show in binary viewer the number 0743... the serial number of ''Penguin Adventure'' (RC743).&lt;br /&gt;
&lt;br /&gt;
You can also add extra data using [[AppExtra]] option. {{WIP}}&lt;br /&gt;
&lt;br /&gt;
== Programming ==&lt;br /&gt;
If &amp;lt;tt&amp;gt;AppSignature&amp;lt;/tt&amp;gt; is set to TRUE in Build tool configuration, then &amp;lt;tt&amp;gt;APPSIGN&amp;lt;/tt&amp;gt; is defined in your C program.&lt;br /&gt;
&lt;br /&gt;
Application signature is put just after the binary header:&lt;br /&gt;
* At ROM header address +0x0010 (should be 0x4010 or 0x8010),&lt;br /&gt;
* At Basic binary header address +0x0007 (should be 0x8007),&lt;br /&gt;
* At DOS binary start address +0x0002 (should be 0x0102).&lt;br /&gt;
&lt;br /&gt;
Define an external variable as &amp;lt;tt&amp;gt;g_AppSignature&amp;lt;/tt&amp;gt; if you need to access the data from your program.&lt;br /&gt;
It can be defined in several ways depending on your needs. For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
extern const u16 g_AppSignature[2];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
extern const u8 g_AppSignature[4];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Keep in mind than MSX store data as Less significant byte first (Little endian).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Note&amp;lt;/u&amp;gt;: For ROM targets, if a [[ROM type signature]] is present at offset +0010h, then the application signature is placed just after (header +0x0018)&lt;br /&gt;
&lt;br /&gt;
== Creator ID ==&lt;br /&gt;
Some creators' ID are already reserved:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! ID !! Rel !! Creator's name&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;0x00??&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2N&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || 2NICE&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AB&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Boxing'' and ''Football'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AM&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Associazione MSX Italia&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AG&amp;quot;&amp;lt;/tt&amp;gt; ||  || Antxiko Gorjon&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Bik5 (J. Bikker)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CC&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Casper Croes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (many games)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CL&amp;quot;&amp;lt;/tt&amp;gt; ||  || Chien Loco&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;EF&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Pennant Race'' and ''Knightmare 3'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FD&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || FutureDisk&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FP&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Fausto Pracek&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;JP&amp;quot;&amp;lt;/tt&amp;gt; ||  || Johan de Punder &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GH&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GL&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || MSXgl (samples)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;H_&amp;quot;&amp;lt;/tt&amp;gt; ||  || Peruho&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;HN&amp;quot;&amp;lt;/tt&amp;gt; ||  || Hando&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;MO&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || MO5.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;NB&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Nicola &amp;quot;8bit&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Pixel Phenix&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PP&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Pixel Phenix (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RC&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RG&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Rutagames (Diogo Patrão)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RO&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved for [[ROM type signature]]''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RS&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || RoboSoft&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TL&amp;quot;&amp;lt;/tt&amp;gt; ||  || Tele-Line&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TT&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Thomas ‘Totta’ Lundgren&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;YZ&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Game Master 2)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;WD&amp;quot;&amp;lt;/tt&amp;gt; ||  || Wim Dewijngaert&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;ZR&amp;quot;&amp;lt;/tt&amp;gt; ||  || Zdrmonster Productions&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;XX&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;0xFF??&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Come on the MSXgl's [https://discord.gg/pMeadGfv8E Discord Server] to reserve your own creator ID.&lt;br /&gt;
* Creator ID are only definitively assigned when an application is published with this code.&lt;br /&gt;
&lt;br /&gt;
== Known signed applications ==&lt;br /&gt;
List of released applications that contain compatible signature.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Sign !! Author !! Application&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2NEM&amp;quot;&amp;lt;/tt&amp;gt; || 2NICE || ''Snake Escape''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2NR3&amp;quot;&amp;lt;/tt&amp;gt; || 2NICE || ''Super Sokoban''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5EM&amp;quot;&amp;lt;/tt&amp;gt; || Bik5 (J. Bikker) || ''Eggy's Maze''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5R3&amp;quot;&amp;lt;/tt&amp;gt; || Bik5 (J. Bikker) || ''DELTA''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CCPC&amp;quot;&amp;lt;/tt&amp;gt; || Casper Croes || ''Phenix Corrupta''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CCTR&amp;quot;&amp;lt;/tt&amp;gt; || Casper Croes&amp;lt;br/&amp;gt;Pixel Phenix || ''Soul Trapped''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FDLW&amp;quot;&amp;lt;/tt&amp;gt; || FutureDisk || ''A Lone Wolf''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPEX&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Sam.Pr Explore''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPMW&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Martian War''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPSL&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Soccer League''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPSP&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Sam.Pr''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;NBTC&amp;quot;&amp;lt;/tt&amp;gt; || Nicola &amp;quot;8bit&amp;quot; || ''The New Castle''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PPCR&amp;quot;&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Crawlers (MSXdev'23)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;,001&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Crawlers (cartridge)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;,003&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Peng Pong''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RGTM&amp;quot;&amp;lt;/tt&amp;gt; || Rutagames || ''TerMSX Multi''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RSP9&amp;quot;&amp;lt;/tt&amp;gt; || RoboSoft || ''Planet X9''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RSPE&amp;quot;&amp;lt;/tt&amp;gt; || RoboSoft || ''Attack of the Petscii Robots''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TTTP&amp;quot;&amp;lt;/tt&amp;gt; || Thomas &amp;quot;Totta&amp;quot; Lundgren || ''Tetpuz''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TTDL&amp;quot;&amp;lt;/tt&amp;gt; || Thomas &amp;quot;Totta&amp;quot; Lundgren || ''Doomlings''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;MOR5&amp;quot;&amp;lt;/tt&amp;gt; || MO5.com || ''Room 5''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GL&amp;quot;,...&amp;lt;/tt&amp;gt; || MSXgl || (samples)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AB&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (''Boxing'' and ''Football'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (many games)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;EF&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (''Pennant Race'' and ''Knightmare 3'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;YZ&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (''Game Master 2)''&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=AppSignature&amp;diff=4022</id>
		<title>AppSignature</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=AppSignature&amp;diff=4022"/>
				<updated>2026-09-26T11:13:52Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: /* Known signed applications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This [[Build tool]] option allow to add an '''application signature''' to binary data (right after the header).&lt;br /&gt;
&lt;br /&gt;
The MSXgl signature format is directly inspired by the meta-data used by '''Konami''' to identify their cartridges and add cross-games options.&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
&lt;br /&gt;
Application's signature is 4 bytes long and composed of:&lt;br /&gt;
* &amp;lt;tt&amp;gt;AppCompany&amp;lt;/tt&amp;gt;: 2 bytes for the creator ID ([[#Creator ID|reserve yours!]]),&lt;br /&gt;
* &amp;lt;tt&amp;gt;AppID&amp;lt;/tt&amp;gt;: 2 bytes for the product ID (the numbering of the applications is up to each creator).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
//-- Add application signature to binary data (boolean)&lt;br /&gt;
AppSignature = true;&lt;br /&gt;
&lt;br /&gt;
//-- Application creator ID. Can be 2 character string or 16-bits integer (0~65535)&lt;br /&gt;
AppCompany = &amp;quot;GL&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//-- Application product ID. Can be 2 character string or 16-bits integer (0~65535)&lt;br /&gt;
AppID = 0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If 2-character string is recommended for creator ID and integer for product ID, in fact, both of those parameters can be any of:&lt;br /&gt;
* 2-character string (&amp;lt;tt&amp;gt;&amp;quot;MX&amp;quot;&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;&amp;quot;a7&amp;quot;&amp;lt;/tt&amp;gt; for example),&lt;br /&gt;
* 16-bits decimal unsigned number (&amp;lt;tt&amp;gt;12345&amp;lt;/tt&amp;gt; for example),&lt;br /&gt;
* 16-bits hexadecimal number starting with &amp;lt;tt&amp;gt;0x&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;0x0750&amp;lt;/tt&amp;gt; for example).&lt;br /&gt;
&lt;br /&gt;
For example, the header first 2 words of Konami's ''Penguin Adventure'' are &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;, 0x4307&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;&amp;lt;/tt&amp;gt; is one of the signature used by Konami to mark there ROM (see next section) and &amp;lt;tt&amp;gt;0x4307&amp;lt;/tt&amp;gt; show in binary viewer the number 0743... the serial number of ''Penguin Adventure'' (RC743).&lt;br /&gt;
&lt;br /&gt;
You can also add extra data using [[AppExtra]] option. {{WIP}}&lt;br /&gt;
&lt;br /&gt;
== Programming ==&lt;br /&gt;
If &amp;lt;tt&amp;gt;AppSignature&amp;lt;/tt&amp;gt; is set to TRUE in Build tool configuration, then &amp;lt;tt&amp;gt;APPSIGN&amp;lt;/tt&amp;gt; is defined in your C program.&lt;br /&gt;
&lt;br /&gt;
Application signature is put just after the binary header:&lt;br /&gt;
* At ROM header address +0x0010 (should be 0x4010 or 0x8010),&lt;br /&gt;
* At Basic binary header address +0x0007 (should be 0x8007),&lt;br /&gt;
* At DOS binary start address +0x0002 (should be 0x0102).&lt;br /&gt;
&lt;br /&gt;
Define an external variable as &amp;lt;tt&amp;gt;g_AppSignature&amp;lt;/tt&amp;gt; if you need to access the data from your program.&lt;br /&gt;
It can be defined in several ways depending on your needs. For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
extern const u16 g_AppSignature[2];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
extern const u8 g_AppSignature[4];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Keep in mind than MSX store data as Less significant byte first (Little endian).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Note&amp;lt;/u&amp;gt;: For ROM targets, if a [[ROM type signature]] is present at offset +0010h, then the application signature is placed just after (header +0x0018)&lt;br /&gt;
&lt;br /&gt;
== Creator ID ==&lt;br /&gt;
Some creators' ID are already reserved:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! ID !! Rel !! Creator's name&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;0x00??&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2N&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || 2NICE&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AB&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Boxing'' and ''Football'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AM&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Associazione MSX Italia&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AG&amp;quot;&amp;lt;/tt&amp;gt; ||  || Antxiko Gorjon&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Bik5 (J. Bikker)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CC&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Casper Croes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (many games)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CL&amp;quot;&amp;lt;/tt&amp;gt; ||  || Chien Loco&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;EF&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Pennant Race'' and ''Knightmare 3'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FD&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || FutureDisk&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FP&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Fausto &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;JP&amp;quot;&amp;lt;/tt&amp;gt; ||  || Johan de Punder &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GH&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GL&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || MSXgl (samples)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;H_&amp;quot;&amp;lt;/tt&amp;gt; ||  || Peruho&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;HN&amp;quot;&amp;lt;/tt&amp;gt; ||  || Hando&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;MO&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || MO5.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;NB&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Nicola &amp;quot;8bit&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Pixel Phenix&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PP&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Pixel Phenix (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RC&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RG&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Rutagames (Diogo Patrão)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RO&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved for [[ROM type signature]]''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RS&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || RoboSoft&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TL&amp;quot;&amp;lt;/tt&amp;gt; ||  || Tele-Line&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TT&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Thomas ‘Totta’ Lundgren&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;YZ&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Game Master 2)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;WD&amp;quot;&amp;lt;/tt&amp;gt; ||  || Wim Dewijngaert&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;ZR&amp;quot;&amp;lt;/tt&amp;gt; ||  || Zdrmonster Productions&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;XX&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;0xFF??&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Come on the MSXgl's [https://discord.gg/pMeadGfv8E Discord Server] to reserve your own creator ID.&lt;br /&gt;
* Creator ID are only definitively assigned when an application is published with this code.&lt;br /&gt;
&lt;br /&gt;
== Known signed applications ==&lt;br /&gt;
List of released applications that contain compatible signature.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Sign !! Author !! Application&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2NEM&amp;quot;&amp;lt;/tt&amp;gt; || 2NICE || ''Snake Escape''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2NR3&amp;quot;&amp;lt;/tt&amp;gt; || 2NICE || ''Super Sokoban''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5EM&amp;quot;&amp;lt;/tt&amp;gt; || Bik5 (J. Bikker) || ''Eggy's Maze''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5R3&amp;quot;&amp;lt;/tt&amp;gt; || Bik5 (J. Bikker) || ''DELTA''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CCPC&amp;quot;&amp;lt;/tt&amp;gt; || Casper Croes || ''Phenix Corrupta''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CCTR&amp;quot;&amp;lt;/tt&amp;gt; || Casper Croes&amp;lt;br/&amp;gt;Pixel Phenix || ''Soul Trapped''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FDLW&amp;quot;&amp;lt;/tt&amp;gt; || FutureDisk || ''A Lone Wolf''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPEX&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Sam.Pr Explore''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPMW&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Martian War''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPSL&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Soccer League''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPSP&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Sam.Pr''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;NBTC&amp;quot;&amp;lt;/tt&amp;gt; || Nicola &amp;quot;8bit&amp;quot; || ''The New Castle''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PPCR&amp;quot;&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Crawlers (MSXdev'23)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;,001&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Crawlers (cartridge)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;,003&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Peng Pong''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RGTM&amp;quot;&amp;lt;/tt&amp;gt; || Rutagames || ''TerMSX Multi''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RSP9&amp;quot;&amp;lt;/tt&amp;gt; || RoboSoft || ''Planet X9''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RSPE&amp;quot;&amp;lt;/tt&amp;gt; || RoboSoft || ''Attack of the Petscii Robots''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TTTP&amp;quot;&amp;lt;/tt&amp;gt; || Thomas &amp;quot;Totta&amp;quot; Lundgren || ''Tetpuz''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TTDL&amp;quot;&amp;lt;/tt&amp;gt; || Thomas &amp;quot;Totta&amp;quot; Lundgren || ''Doomlings''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;MOR5&amp;quot;&amp;lt;/tt&amp;gt; || MO5.com || ''Room 5''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GL&amp;quot;,...&amp;lt;/tt&amp;gt; || MSXgl || (samples)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AB&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (''Boxing'' and ''Football'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (many games)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;EF&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (''Pennant Race'' and ''Knightmare 3'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;YZ&amp;quot;,...&amp;lt;/tt&amp;gt; || Konami || (''Game Master 2)''&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=AppSignature&amp;diff=4021</id>
		<title>AppSignature</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=AppSignature&amp;diff=4021"/>
				<updated>2026-09-26T11:13:29Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: /* Known signed applications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This [[Build tool]] option allow to add an '''application signature''' to binary data (right after the header).&lt;br /&gt;
&lt;br /&gt;
The MSXgl signature format is directly inspired by the meta-data used by '''Konami''' to identify their cartridges and add cross-games options.&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
&lt;br /&gt;
Application's signature is 4 bytes long and composed of:&lt;br /&gt;
* &amp;lt;tt&amp;gt;AppCompany&amp;lt;/tt&amp;gt;: 2 bytes for the creator ID ([[#Creator ID|reserve yours!]]),&lt;br /&gt;
* &amp;lt;tt&amp;gt;AppID&amp;lt;/tt&amp;gt;: 2 bytes for the product ID (the numbering of the applications is up to each creator).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
//-- Add application signature to binary data (boolean)&lt;br /&gt;
AppSignature = true;&lt;br /&gt;
&lt;br /&gt;
//-- Application creator ID. Can be 2 character string or 16-bits integer (0~65535)&lt;br /&gt;
AppCompany = &amp;quot;GL&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//-- Application product ID. Can be 2 character string or 16-bits integer (0~65535)&lt;br /&gt;
AppID = 0;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If 2-character string is recommended for creator ID and integer for product ID, in fact, both of those parameters can be any of:&lt;br /&gt;
* 2-character string (&amp;lt;tt&amp;gt;&amp;quot;MX&amp;quot;&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;&amp;quot;a7&amp;quot;&amp;lt;/tt&amp;gt; for example),&lt;br /&gt;
* 16-bits decimal unsigned number (&amp;lt;tt&amp;gt;12345&amp;lt;/tt&amp;gt; for example),&lt;br /&gt;
* 16-bits hexadecimal number starting with &amp;lt;tt&amp;gt;0x&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;0x0750&amp;lt;/tt&amp;gt; for example).&lt;br /&gt;
&lt;br /&gt;
For example, the header first 2 words of Konami's ''Penguin Adventure'' are &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;, 0x4307&amp;lt;/tt&amp;gt;. &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;&amp;lt;/tt&amp;gt; is one of the signature used by Konami to mark there ROM (see next section) and &amp;lt;tt&amp;gt;0x4307&amp;lt;/tt&amp;gt; show in binary viewer the number 0743... the serial number of ''Penguin Adventure'' (RC743).&lt;br /&gt;
&lt;br /&gt;
You can also add extra data using [[AppExtra]] option. {{WIP}}&lt;br /&gt;
&lt;br /&gt;
== Programming ==&lt;br /&gt;
If &amp;lt;tt&amp;gt;AppSignature&amp;lt;/tt&amp;gt; is set to TRUE in Build tool configuration, then &amp;lt;tt&amp;gt;APPSIGN&amp;lt;/tt&amp;gt; is defined in your C program.&lt;br /&gt;
&lt;br /&gt;
Application signature is put just after the binary header:&lt;br /&gt;
* At ROM header address +0x0010 (should be 0x4010 or 0x8010),&lt;br /&gt;
* At Basic binary header address +0x0007 (should be 0x8007),&lt;br /&gt;
* At DOS binary start address +0x0002 (should be 0x0102).&lt;br /&gt;
&lt;br /&gt;
Define an external variable as &amp;lt;tt&amp;gt;g_AppSignature&amp;lt;/tt&amp;gt; if you need to access the data from your program.&lt;br /&gt;
It can be defined in several ways depending on your needs. For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
extern const u16 g_AppSignature[2];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
extern const u8 g_AppSignature[4];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Keep in mind than MSX store data as Less significant byte first (Little endian).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Note&amp;lt;/u&amp;gt;: For ROM targets, if a [[ROM type signature]] is present at offset +0010h, then the application signature is placed just after (header +0x0018)&lt;br /&gt;
&lt;br /&gt;
== Creator ID ==&lt;br /&gt;
Some creators' ID are already reserved:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! ID !! Rel !! Creator's name&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;0x00??&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2N&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || 2NICE&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AB&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Boxing'' and ''Football'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AM&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Associazione MSX Italia&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AG&amp;quot;&amp;lt;/tt&amp;gt; ||  || Antxiko Gorjon&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Bik5 (J. Bikker)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CC&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Casper Croes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (many games)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CL&amp;quot;&amp;lt;/tt&amp;gt; ||  || Chien Loco&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;EF&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Pennant Race'' and ''Knightmare 3'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FD&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || FutureDisk&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FP&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Fausto &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;JP&amp;quot;&amp;lt;/tt&amp;gt; ||  || Johan de Punder &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GH&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GL&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || MSXgl (samples)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;H_&amp;quot;&amp;lt;/tt&amp;gt; ||  || Peruho&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;HN&amp;quot;&amp;lt;/tt&amp;gt; ||  || Hando&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;MO&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || MO5.com&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;NB&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Nicola &amp;quot;8bit&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Pixel Phenix&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PP&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Pixel Phenix (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RC&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RG&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Rutagames (Diogo Patrão)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RO&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved for [[ROM type signature]]''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RS&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || RoboSoft&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TL&amp;quot;&amp;lt;/tt&amp;gt; ||  || Tele-Line&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TT&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Thomas ‘Totta’ Lundgren&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;YZ&amp;quot;&amp;lt;/tt&amp;gt; || ✔️ || Konami (''Game Master 2)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;WD&amp;quot;&amp;lt;/tt&amp;gt; ||  || Wim Dewijngaert&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;ZR&amp;quot;&amp;lt;/tt&amp;gt; ||  || Zdrmonster Productions&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;XX&amp;quot;&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;0xFF??&amp;lt;/tt&amp;gt; || ➖ || ''Reserved''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* Come on the MSXgl's [https://discord.gg/pMeadGfv8E Discord Server] to reserve your own creator ID.&lt;br /&gt;
* Creator ID are only definitively assigned when an application is published with this code.&lt;br /&gt;
&lt;br /&gt;
== Known signed applications ==&lt;br /&gt;
List of released applications that contain compatible signature.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Sign !! Author !! Application&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2NEM&amp;quot;&amp;lt;/tt&amp;gt; || 2NICE || ''Snake Escape''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;2NR3&amp;quot;&amp;lt;/tt&amp;gt; || 2NICE || ''Super Sokoban''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5EM&amp;quot;&amp;lt;/tt&amp;gt; || Bik5 (J. Bikker) || ''Eggy's Maze''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;B5R3&amp;quot;&amp;lt;/tt&amp;gt; || Bik5 (J. Bikker) || ''DELTA''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CCPC&amp;quot;&amp;lt;/tt&amp;gt; || Casper Croes || ''Phenix Corrupta''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CCTR&amp;quot;&amp;lt;/tt&amp;gt; || Casper Croes&amp;lt;br/&amp;gt;Pixel Phenix || ''Soul Trapped''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FDLW&amp;quot;&amp;lt;/tt&amp;gt; || FutureDisk || ''A Lone Wolf''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPEX&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Sam.Pr Explore''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPMW&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Martian War''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPSL&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Soccer League''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;FPSP&amp;quot;&amp;lt;/tt&amp;gt; || Fausto Pracek || ''Sam.Pr''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;NBTC&amp;quot;&amp;lt;/tt&amp;gt; || Nicola &amp;quot;8bit&amp;quot; || ''The New Castle''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PPCR&amp;quot;&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Crawlers (MSXdev'23)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;,001&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Crawlers (cartridge)''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;PH&amp;quot;,003&amp;lt;/tt&amp;gt; || Pixel Phenix || ''Peng Pong''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RGTM&amp;quot;&amp;lt;/tt&amp;gt; || Rutagames || ''TerMSX Multi''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RSP9&amp;quot;&amp;lt;/tt&amp;gt; || RoboSoft || ''Planet X9''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;RSPE&amp;quot;&amp;lt;/tt&amp;gt; || RoboSoft || ''Attack of the Petscii Robots''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TTTP&amp;quot;&amp;lt;/tt&amp;gt; || Thomas &amp;quot;Totta&amp;quot; Lundgren || ''Tetpuz''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;TTDL&amp;quot;&amp;lt;/tt&amp;gt; || Thomas &amp;quot;Totta&amp;quot; Lundgren || ''Doomlings''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;MOR5&amp;quot;&amp;lt;/tt&amp;gt; || MO5.com || ''Room 5''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;GL&amp;quot;,?&amp;lt;/tt&amp;gt; || MSXgl || (samples)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;AB&amp;quot;,?&amp;lt;/tt&amp;gt; || Konami || (''Boxing'' and ''Football'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;CD&amp;quot;,?&amp;lt;/tt&amp;gt; || Konami || (many games)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;EF&amp;quot;,?&amp;lt;/tt&amp;gt; || Konami || (''Pennant Race'' and ''Knightmare 3'')&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;quot;YZ&amp;quot;,?&amp;lt;/tt&amp;gt; || Konami || (''Game Master 2)''&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=Projects&amp;diff=4020</id>
		<title>Projects</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=Projects&amp;diff=4020"/>
				<updated>2026-09-26T10:49:53Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here's a list of known projects using {{MSXGL}}:&lt;br /&gt;
&lt;br /&gt;
== Games, applications and demos ==&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Genre&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Author&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Release&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Target&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Link&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;MSXgl Version&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Signature&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Image&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=msx3d&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=JBikker&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2022, Feb.&lt;br /&gt;
|site=https://github.com/jbikker/msx3d&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=0.3.0&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://msxvillage.fr/upload/msx3d.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Simple scroller&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=xchip&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2022, Apr.&lt;br /&gt;
|site=https://github.com/aguaviva/msx1_smooth_scroller&lt;br /&gt;
|webmsx=https://webmsx.org/?ROM=https://github.com/aguaviva/msx1_smooth_scroller/raw/refs/heads/main/precompiled/template.rom&amp;amp;MACHINE=MSX1A&lt;br /&gt;
|version=0.3.2&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/scroller.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=VATT&lt;br /&gt;
|genre=Tool&lt;br /&gt;
|author=Aoineko&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX122P&lt;br /&gt;
|state=✅ 2023, Apr.&lt;br /&gt;
|site=https://github.com/aoineko-fr/VATT&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=0.9.10&lt;br /&gt;
|signature=&amp;quot;GLVT&amp;quot;&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/VATT/master/doc/vatt.jpg&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Mandoroids&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Igor Moreno&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Apr.&lt;br /&gt;
|site=https://github.com/MorenoIgor/Mandoroids&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/MorenoIgor/Mandoroids/raw/main/mandoroids/emul/rom/mandoroids.rom&lt;br /&gt;
|code=https://github.com/MorenoIgor/Mandoroids/tree/main/mandoroids&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=https://user-images.githubusercontent.com/35140312/233985120-45d4fb8e-fe30-47a0-a8ec-93438ad86cc3.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Martian War&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_16K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2023, May&lt;br /&gt;
|site=https://www.msxdev.org/2023/05/06/msxdev23-07-martian-war/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=martianwar&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;FPMW&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/05/MSXdev23_MartianWar_v1.0_001-1024x766.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/05/MSXdev23_MartianWar_v1.0_002-1024x768.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=screen3&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=HSK&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2023, May&lt;br /&gt;
|site=https://github.com/hsk/msxgl/tree/main&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=Unknown&lt;br /&gt;
|image1=http://aoineko.org/files/hsk_screen3v4.gif&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=A Lone Wolf&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=FutureDisk&lt;br /&gt;
|target=DISK&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|ext1=MSXMUSIC&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Jul.&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;FDLW&amp;quot;&lt;br /&gt;
|image1=https://www.msx.org/sites/default/files/news/2024/11/WMSX_Screen_1.png&lt;br /&gt;
|image2=https://www.msx.org/sites/default/files/news/2024/11/WMSX_Screen_2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Eggy’s Maze&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Bik5 (JBikker)&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2023, Aug.&lt;br /&gt;
|site=https://www.msxdev.org/2023/08/30/msxdev23-15-eggys-maze/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=eggysmaze&lt;br /&gt;
|purchase=https://cotegamers.com/shop/en/accueil/177-eggy-s-maze-preorder.html&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;B5EM&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/08/MSXdev23_EggysMaze_v1.0.0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/08/MSXdev23_EggysMaze_v1.0.0002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Attack of the Petscii Robots&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=RoboSoft (ToriHino)&lt;br /&gt;
|target=ROM_ASCII8_2M&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=V9990&lt;br /&gt;
|ext2=OPL4&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Sep.&lt;br /&gt;
|site=https://www.msxdev.org/2023/09/19/msxdev23-18-attack-of-the-petscii-robots/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=attackofthepetsciirobots&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;RSPE&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/09/MSXdev23_AttackofthePetsciiRobots_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/09/MSXdev23_AttackofthePetsciiRobots_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Crawlers&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|ext1=NINJATAP&lt;br /&gt;
|ext2=PAC&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Oct.&lt;br /&gt;
|site=https://github.com/aoineko-fr/Crawlers&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/aoineko-fr/Crawlers/raw/master/emul/rom/crawlers.rom&amp;amp;PRESETS=PAC2&lt;br /&gt;
|purchase=https://www.ebsoft.fr/shop/fr/home/117-crawlers.html&lt;br /&gt;
|version=0.10.1&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,1&lt;br /&gt;
|image1=https://github.com/aoineko-fr/MSXgl/raw/main/engine/doc/img/crawlers.png&lt;br /&gt;
|image2=https://github.com/aoineko-fr/MSXgl/raw/main/engine/doc/img/crawlers_2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Phenix Corrupta&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Casper Croes&lt;br /&gt;
|target=ROM_ASCII8_512K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2023, Oct.&lt;br /&gt;
|site=https://www.msxdev.org/2023/10/16/msxdev23-27-phenix-corrupta/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=phenixcorrupta&lt;br /&gt;
|purchase=https://cotegamers.com/shop/fr/accueil/187-phenix-corrupta-msx-precommande.html&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;CCPC&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_PhenixCorrupta_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_PhenixCorrupta_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Tetpuz&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Totta&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2023, Oct.&lt;br /&gt;
|site=https://www.msxdev.org/2023/10/17/msxdev23-28-tetpuz/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=tetpuz&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;TTTP&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_Tetpuz_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_Tetpuz_v1.0_002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=NY2024&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2024, Jan.&lt;br /&gt;
|site=https://github.com/aoineko-fr/NY2024&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/aoineko-fr/NY2024&lt;br /&gt;
|purchase=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;GL24&amp;quot;&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
|video=Yd4Q1YYXJbA&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Sam.Pr&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2024, Jul.&lt;br /&gt;
|site=https://www.msxdev.org/2024/07/16/msxdev24-07-sam-pr/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=sampr&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;FPSP&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2024/07/MSXdev24_Sam.Pr_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2024/07/MSXdev24_Sam.Pr_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Alley Cat&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Rutagames (Diogo Patrão)&lt;br /&gt;
|target=ROM_ASCII8_128K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2024, Nov.&lt;br /&gt;
|site=https://sites.google.com/view/alleycatparamsx/&lt;br /&gt;
|purchase=https://sites.google.com/view/alleycatparamsx/&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=https://aoineko.org/msxgl/images/thumb/9/92/AllyCatTitle.png/724px-AllyCatTitle.png&lt;br /&gt;
|image2=https://aoineko.org/msxgl/images/c/c3/AlleyCatGame.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Sam.Pr Explore&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_ASCII16_256K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2024, Dec.&lt;br /&gt;
|site=https://www.msxdev.org/2024/12/20/msxdev24-19-sam-pr-explorer/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=samprexplorer&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;FPEX&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2024/12/Msxdev24_sam.prexplorer_v1.0_0002.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2024/12/Msxdev24_sam.prexplorer_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=NY2025&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Jan.&lt;br /&gt;
|site=https://github.com/aoineko-fr/NY2025&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/aoineko-fr/NY2025&lt;br /&gt;
|purchase=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;GL25&amp;quot;&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
|video=Rl-1g2TtrtA&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Room 5&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=MO5.com&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=✅ 2025, Jan.&lt;br /&gt;
|site=https://mo5com.itch.io/room-5&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/Asso-MO5/room5/raw/main/room5/emul/rom/Room5.rom&lt;br /&gt;
|version=0.10.1&lt;br /&gt;
|signature=&amp;quot;MOR5&amp;quot;&lt;br /&gt;
|image1=https://img.itch.zone/aW1hZ2UvMjEzNTQ1Mi8xMzQ2MTQ1MC5qcGc=/original/YUiAHD.jpg&lt;br /&gt;
|image2=https://img.itch.zone/aW1hZ2UvMjEzNTQ1Mi8xMzQ2MTQ2Ny5qcGc=/original/Ssow9u.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Super Sokoban&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=2NICE&lt;br /&gt;
|target=ROM_KONAMI_SCC_128K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, March&lt;br /&gt;
|site=https://www.msxdev.org/2025/01/28/msxdev24-28-super-sokoban/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=supersokoban&lt;br /&gt;
|version=1.2.12&lt;br /&gt;
|signature=&amp;quot;2NSO&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2025/01/MSXdev24_SuperSokoban_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2025/01/MSXdev24_SuperSokoban_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Doomlings&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Totta&lt;br /&gt;
|target=ROM_ASCII16_256K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2025, Jan.&lt;br /&gt;
|site=https://www.msxdev.org/2025/02/03/msxdev24-31-doomlings/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=doomlings&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;TTDL&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2025/02/Msxdev24_doomlings_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2025/02/Msxdev24_doomlings_v1.0_0002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=EMinEx&lt;br /&gt;
|genre=Tool&lt;br /&gt;
|author=LudoJoey&lt;br /&gt;
|target=BIN_TAPE&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2025, Apr.&lt;br /&gt;
|site=https://github.com/ludosevilla/EMinEx&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://raw.githubusercontent.com/ludosevilla/EMinEx/refs/heads/main/images/minipavi.png&lt;br /&gt;
|image2=https://raw.githubusercontent.com/ludosevilla/EMinEx/refs/heads/main/images/meteo.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Peng Pong&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=✅ 2025, March&lt;br /&gt;
|site=https://github.com/aoineko-fr/PengPong&lt;br /&gt;
|webmsx=https://webmsx.org/?ROM=https://github.com/aoineko-fr/PengPong/raw/refs/heads/master/emul/rom/pengpong.rom&lt;br /&gt;
|version=1.3.0&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,3&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/PengPong/master/doc/img/pengpong1.png&lt;br /&gt;
|image2=https://raw.githubusercontent.com/aoineko-fr/PengPong/master/doc/img/pengpong2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Toride no Kōbō&amp;lt;br/&amp;gt;砦の攻防&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Hando&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Sep.&lt;br /&gt;
|site=https://github.com/handomade/ToridenoKoubou-for-MSX2&lt;br /&gt;
|webmsx=https://webmsx.org/?ROM=https://github.com/handomade/ToridenoKoubou-for-MSX2/raw/refs/heads/main/Toride.rom&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://aoineko.org/msxgl/images/thumb/6/6e/Game_fortress_01.png/775px-Game_fortress_01.png&lt;br /&gt;
|image2=https://aoineko.org/msxgl/images/thumb/3/37/Game_fortress_02.png/775px-Game_fortress_02.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=The new Castle&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Nicola Brogelli&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2025, October&lt;br /&gt;
|site=https://www.msxdev.org/2025/10/18/msxdev25-13-the-new-castle/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=thenewcastle&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2025/10/Msxdev25_thenewcastle_v1.0_0001.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2025/10/Msxdev25_thenewcastle_v1.0_0002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=TerMSX&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Diogo Patrão&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Nov.&lt;br /&gt;
|site=https://rutagamesltda.itch.io/termsx&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://img.itch.zone/aW1nLzIzOTAyMzMzLnBuZw==/315x250%23c/kVbbsO.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Super Sokoban Xmas quiz '25&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=2NICE&lt;br /&gt;
|target=ROM_KONAMI_128K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Dec.&lt;br /&gt;
|site=https://2nicemsx.nl/super-sokoban/xmasquiz/&lt;br /&gt;
|webmsx=https://2nicemsx.nl/super-sokoban/xmasquiz/webmsx/&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=https://2nicemsx.nl/super-sokoban/xmasquiz/img/supersokobanxmas1.jpg&lt;br /&gt;
|image2=https://2nicemsx.nl/super-sokoban/xmasquiz/img/supersokobanxmas3.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=NY2026&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_48K_ISR&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, Jan.&lt;br /&gt;
|site=https://github.com/aoineko-fr/NY2026&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/aoineko-fr/NY2026&lt;br /&gt;
|purchase=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;GL26&amp;quot;&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
|video=1kbN7VnbfaU&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=DELTA&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Bik5 (JBikker)&lt;br /&gt;
|target=ROM_ASCII16_4M&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|ext1=SCC&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2026, February&lt;br /&gt;
|site=https://www.msxdev.org/2026/02/21/msxdev25-30-delta/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=delta&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;B5R3&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_DELTA_v1.0_000.jpg&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_DELTA_v1.0_002.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=TerMSX Multi&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Rutagames (Diogo Patrão)&lt;br /&gt;
|target=ROM_ASCII8_512K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, February&lt;br /&gt;
|site=https://www.msxdev.org/2026/02/26/msxdev25-32-termsx/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=termsx&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;RGTM&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/01/Msxdev25_termsx_v1.0_001.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/02/Msxdev25_termsx_v1.0_002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Soccer League&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_YAMANOOTO_8M&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=V9990&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/02/msxdev25-34-soccer-league/&lt;br /&gt;
|webmsx=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_SoccerLeague_v1.2.zip&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;FPSL&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_SoccerLeague_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_SoccerLeague_v1.0_005.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=AstroJump&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Tiago Tresoldi&amp;lt;br/&amp;gt;Freja Lindgren&lt;br /&gt;
|target=ROM_16K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/05/msxdev25-35-astrojump/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=astrojump&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;RGAJ&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/Msxdev25_astrojump_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/Msxdev25_astrojump_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Chrono Runner&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=MSX Italia Association&lt;br /&gt;
|target=ROM_ASCII16_128K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/14/msxdev25-38-chrono-runner/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=chronorunner&lt;br /&gt;
|source=https://github.com/AssociazioneMsxItalia/Chrono-runners&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;AMCR&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/msxdev25_chrono-runner_v1.0-0001.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/msxdev25_chrono-runner_v1.0-0005.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Tiny Tetris VS&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Antxiko&lt;br /&gt;
|target=ROM_16K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/16/msxdev25-44-tiny-tetris-vs/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=tinytetrisvs&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_TinyTetrisVS_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_TinyTetrisVS_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Soul Trapped&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Casper Croes&amp;lt;br/&amp;gt;[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_NEO16_16M&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=MSXMUSIC&lt;br /&gt;
|ext2=MOUSE&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/18/msxdev25-47-soul-trapped/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=soultrapped&lt;br /&gt;
|version=1.4.0&lt;br /&gt;
|signature=&amp;quot;CCTR&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_SoulTrapped_v1.0_01.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_SoulTrapped_v1.0_03.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Snake Exacape&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=2NICE&lt;br /&gt;
|target=ROM_64K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|ext1=MSXMUSIC&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://2nicemsx.nl/snake-escape&lt;br /&gt;
|webmsx=https://2nicemsx.nl/snake-escape/webmsx&lt;br /&gt;
|version=1.2.12&lt;br /&gt;
|signature=&amp;quot;2NSE&amp;quot;&lt;br /&gt;
|image1=https://2nicemsx.nl/snake-escape/img/snakeescape1.jpg&lt;br /&gt;
|image2=https://2nicemsx.nl/snake-escape/img/snakeescape2.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=MUGI&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Hando&lt;br /&gt;
|target=ROM_48K_ISR&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, May&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=&amp;quot;HNMG&amp;quot;&lt;br /&gt;
|image1=https://aoineko.org/msxgl/images/thumb/b/b6/Game_mugi_01.png/775px-Game_mugi_01.png&lt;br /&gt;
|image2=https://aoineko.org/msxgl/images/thumb/6/60/Game_mugi_02.png/775px-Game_mugi_02.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=City MSX&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=BigFive (mgoulartBR)&lt;br /&gt;
|target=ROM ASCII16&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, Sep.&lt;br /&gt;
|site=https://mgoulartbr.itch.io/city-msx&lt;br /&gt;
|purchase=https://mgoulartbr.itch.io/city-msx&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://i.postimg.cc/P5P4sxTp/859c2b11-9446-4212-9435-e7ce8df679e4.png&lt;br /&gt;
|image2=https://i.postimg.cc/zXD777M5/demo-city-itch.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Berzerk&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Pixel Forge&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, Sep.&lt;br /&gt;
|site=https://www.msxdev.org/2026/09/21/msxdev26-02-berzerk/&lt;br /&gt;
|purchase=&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=berzerk&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/09/MSXdev26_Berzerk_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/09/MSXdev26_Berzerk_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Wizzl&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (GFX)&lt;br /&gt;
|target=ROM_KONAMI_256K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=1.4.1&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,4&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/wizzl_1.png&lt;br /&gt;
|image2=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/wizzl_2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Final Smash&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=https://github.com/aoineko-fr/FinalSmash&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/aoineko-fr/FinalSmash/raw/master/emul/rom/tennis.rom&lt;br /&gt;
|version=0.9.0&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,2&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/finalsmash.jpg&lt;br /&gt;
|image2=https://msxvillage.fr/upload/fs_score.gif&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Popeye&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Wim&lt;br /&gt;
|target=&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=Unknown&lt;br /&gt;
|image1=https://cdn.discordapp.com/attachments/574951023374761988/1164328603375374448/image.png?ex=6542d083&amp;amp;is=65305b83&amp;amp;hm=c3b357b359cbc2b3809277cac00ca8252242d1977f0c950e2927230d9aa346f9&amp;amp;&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Duæl Drop&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Totta&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=1.0.0&lt;br /&gt;
|signature=&amp;quot;TTDD&amp;quot;&lt;br /&gt;
|image1=https://cdn.discordapp.com/attachments/1049454935261073409/1227685092323754035/DuaelDrop-7.png?ex=672e56d7&amp;amp;is=672d0557&amp;amp;hm=06e8a0789277e4f07bb046520c4129c99a39d89d479a107a6fca0f718db56978&amp;amp;&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Debug-Riken&amp;lt;br/&amp;gt;デバグリケン&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=HtDreams&lt;br /&gt;
|target=&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=GBMSX&lt;br /&gt;
|genre=Tool&lt;br /&gt;
|author=Bruno Catao&lt;br /&gt;
|target=DOS2&lt;br /&gt;
|msx=MSX2+&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=https://github.com/brunogamacatao/msxgb&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/brunogamacatao/msxgb&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Samples programs ==&lt;br /&gt;
&lt;br /&gt;
MSXgl is supplied with a [[Samples|large number of sample programs]] which you can use as a reference for using the engine's various features.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_game.png&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_draw.jpg&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_clock.jpg&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_swtile.png&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/html&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=NEO_mapper&amp;diff=4019</id>
		<title>NEO mapper</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=NEO_mapper&amp;diff=4019"/>
				<updated>2026-09-26T08:15:34Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: /* Hardware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right&amp;quot;&amp;gt;[[NEO mapper|EN]] | [[NEO mapper/JA|JA]]&amp;lt;/div&amp;gt;&lt;br /&gt;
Here's a proposal for a mapper format operating with a 16-bit segment register and allowing ROMs larger than the 2/4 MB limit of classic mappers.&lt;br /&gt;
&lt;br /&gt;
== Specifications ==&lt;br /&gt;
&lt;br /&gt;
=== Principles ===&lt;br /&gt;
&lt;br /&gt;
This mapper format is designed to facilitate the creation of MSX games, not only by increasing the size of the ROM available for content, but also by offering programmers new possibilities for organizing their code and data.&lt;br /&gt;
&lt;br /&gt;
Like conventional mappers, the basic idea is to use data write signals to the cartridge to change mapper registers value and thus, the ROM segment visible in each of the mapper's banks (sub-pages). So, predefined addresses can be used to write to the mapper registers (see [[#Format|tables below]]).&lt;br /&gt;
Read accesses, however, work as normal accesses to the memory visible through the banks.&lt;br /&gt;
&lt;br /&gt;
The format is inspired by ASCII8/16 mappers and is even compatible with most ROMs using these formats (the only exception being the rare programs that use odd-numbered addresses to switch banks). The aim of this proximity to these classic mappers is to facilitate the work of manufacturers to create cartridge in this new mapper format.&lt;br /&gt;
&lt;br /&gt;
Compared to conventional mappers, this proposal is based on two new main features:&lt;br /&gt;
* A 16-bit segment register,&lt;br /&gt;
* Banks covering page #0 of MSX memory space (address 0000h~3FFFh).&lt;br /&gt;
&lt;br /&gt;
Usage of page #0 makes it easy to have an extra 16 KB accessible at any time (either by temporarily disabling interrupts for the duration of accesses, or by adding its own ISR).&lt;br /&gt;
&lt;br /&gt;
For the time being, we propose to reserve the 2 most significant bits of the 16-bit bank registers for future extensions of the format (such as SRAM or sound chips support for example).&lt;br /&gt;
This leaves 14 bits to select which segment is visible in each bank, for a maximum of 16384 segments.&lt;br /&gt;
The reserved bits, must be set to 0.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;8&amp;quot;| Higher byte&lt;br /&gt;
|&lt;br /&gt;
!colspan=&amp;quot;8&amp;quot;| Lower byte &lt;br /&gt;
|-&lt;br /&gt;
! 15 || 14 || 13 || 12 || 11 || 10 || 9 || 8 &lt;br /&gt;
|&lt;br /&gt;
! 7 || 6 || 5 || 4 || 3 || 2 || 1 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0&lt;br /&gt;
|colspan=&amp;quot;6&amp;quot;| Segment MSB&lt;br /&gt;
| &lt;br /&gt;
|colspan=&amp;quot;8&amp;quot;| Segment LSB &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The maximum ROM size is therefore 128 MB (for 8 KB segments) or 256 MB (for 16 KB segments).&lt;br /&gt;
&lt;br /&gt;
=== Write Access ===&lt;br /&gt;
&lt;br /&gt;
Write access to the mapper is use to change the value of the bank switching register (where you can select the ROM segment visible through a bank).&lt;br /&gt;
Bellow is the list of the predefined segment switching addresses.&lt;br /&gt;
&lt;br /&gt;
As this new mapper uses 16-bit segment switching registers, it uses 2 bytes for the segment number to be selected in each bank.&lt;br /&gt;
All even-numbered addresses (bit #0 of the address set to 0) access the low byte of the 16-bit register, while odd-numbered addresses (bit #0 of the address set to 1) access the high byte.&lt;br /&gt;
This way, the segment number can be initialized at once with the [[#Bank switching cost|Z80 instructions for 16-bit memory write access]].&lt;br /&gt;
&lt;br /&gt;
==== NEO-8 mapper ====&lt;br /&gt;
&lt;br /&gt;
* Size of a segment: 8 KB&lt;br /&gt;
* Segment switching addresses:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Bank (8kB) !! Switching address !! Initial segment&lt;br /&gt;
|-&lt;br /&gt;
| 0: 0000h~1FFFh || 5000h (mirror at 1000h, 9000h and D000h) || 0000h&lt;br /&gt;
|-&lt;br /&gt;
| 1: 2000h~3FFFh || 5800h (mirror at 1800h, 9800h and D800h) || 0000h&lt;br /&gt;
|-&lt;br /&gt;
| 2: 4000h~5FFFh || 6000h (mirror at 2000h, A000h and E000h) || 0000h&lt;br /&gt;
|-&lt;br /&gt;
| 3: 6000h~7FFFh || 6800h (mirror at 2800h, A800h and E800h) || 0000h&lt;br /&gt;
|-&lt;br /&gt;
| 4: 8000h~9FFFh || 7000h (mirror at 3000h, B000h and F000h) || 0000h&lt;br /&gt;
|-&lt;br /&gt;
| 5: A000h~BFFFh || 7800h (mirror at 3800h, B800h and F800h) || 0000h&lt;br /&gt;
|}&lt;br /&gt;
* Maximum number of segments: 16384&lt;br /&gt;
* Maximum ROM size: 128 MB&lt;br /&gt;
&lt;br /&gt;
==== NEO-16 mapper ====&lt;br /&gt;
&lt;br /&gt;
* Size of a segment: 16 KB&lt;br /&gt;
* Segment switching addresses:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Bank (16kB) !! Switching address !! Initial segment&lt;br /&gt;
|-&lt;br /&gt;
| 0: 0000h~3FFFh || 5000h (mirror at 1000h, 9000h and D000h) || 0000h&lt;br /&gt;
|-&lt;br /&gt;
| 1: 4000h~7FFFh || 6000h (mirror at 2000h, A000h and E000h) || 0000h&lt;br /&gt;
|-&lt;br /&gt;
| 2: 8000h~BFFFh || 7000h (mirror at 3000h, B000h and F000h) || 0000h&lt;br /&gt;
|}&lt;br /&gt;
* Maximum number of segments: 16384&lt;br /&gt;
* Maximum ROM size: 256 MB&lt;br /&gt;
&lt;br /&gt;
=== Read Access ===&lt;br /&gt;
When mapper is selected, read accesses to memory pages 0, 1 and 2 (addresses 0000h to BFFFh), are redirected to a given ROM segment according to the value of the bank register corresponding to the address.&lt;br /&gt;
&lt;br /&gt;
For page 3, read accesses are invalid and the value returned is undefined and should not be used. Implementations of the NEO mapper should return the value FFh if page 3 is read, but this value is not guaranteed by the mapper specifications.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
For emulators and flash tool to detect the NEO mappers, the ROM have to include the following 8 bytes signature right after the 16 bytes ROM header:&lt;br /&gt;
* &amp;quot;&amp;lt;tt&amp;gt;ROM_NEO8&amp;lt;/tt&amp;gt;&amp;quot; for NEO-8 mapper,&lt;br /&gt;
* &amp;quot;&amp;lt;tt&amp;gt;ROM_NE16&amp;lt;/tt&amp;gt;&amp;quot; for NEO-16 mapper.&lt;br /&gt;
&lt;br /&gt;
The ROM header (starting with &amp;quot;AB&amp;quot;) must be in the first ROM segment at offset 0.&lt;br /&gt;
The signature is therefore located at offset 16 of the ROM and may be visible to the Z80 on start-up at addresses 0010h, 4010h and 8010h.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Note&amp;lt;/u&amp;gt;: Signature characters have been carefully choosed to prevent existing ROMs to generate false positive signature (See [[ROM type signature]]).&lt;br /&gt;
&lt;br /&gt;
== Support ==&lt;br /&gt;
&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
Hardware supporting NEO mapper:&lt;br /&gt;
* '''[https://www.msxpico.com/ MSX Pico]''' (normal or WiFi): Support for NEO-8 and NEO-16 mappers up to ~15 MB (firmware 1.25 or above).&lt;br /&gt;
* '''[https://www.msxpico.com/ MSX Pico+]''': Support for NEO-8 and NEO-16 mappers up to ~14 MB (firmware 2.12 or above).&lt;br /&gt;
* '''[https://github.com/cristianoag/msx-picoverse-public PicoVerse] 2040 and 2350''': Support for NEO-8 and NEO-16 mappers up to ~15 MB.&lt;br /&gt;
* '''[https://github.com/arkadiuszmakarenko/RISKYMSX RISKY MSX]''': Support for NEO-8 and NEO-16 mappers up to 256 KB.&lt;br /&gt;
* '''[https://github.com/piigaa-densetu-two-dai/MSXpi MSXπ]''': Support for NEO-16 mappers up to 16 MB.&lt;br /&gt;
* '''[https://github.com/piigaa-densetu-two-dai/MSXpi_plus_v2 MSXπ Plus (V2)]''': Support for NEO-16 mappers up to 16 MB.&lt;br /&gt;
&lt;br /&gt;
=== Emulator ===&lt;br /&gt;
Emulators supporting NEO mapper:&lt;br /&gt;
* {{blueMSX}} '''blueMSX+''': Full support for NEO-8 and NEO-16 mappers.&lt;br /&gt;
* {{Emulicious}} '''Emulicious''': Full support for NEO-8 and NEO-16 mappers.&lt;br /&gt;
* {{MSXEC}} '''MSXEC''': Support NEO-8 and NEO-16 mappers up to 64 MB (version 20260303 or above).&lt;br /&gt;
* {{openMSX}} '''openMSX''': Full support for NEO-8 and NEO-16 mappers (version 20.0 or above).&lt;br /&gt;
* {{WebMSX}} '''WebMSX''': Full support for NEO-8 and NEO-16 mappers (version 6.0.7 or above).&lt;br /&gt;
&lt;br /&gt;
=== MSXgl ===&lt;br /&gt;
&lt;br /&gt;
Both NEO-8 and NEO-16 mappers are supported. Use respectively &amp;lt;tt&amp;gt;ROM_NEO8&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ROM_NEO16&amp;lt;/tt&amp;gt; as [[target|target format]].&lt;br /&gt;
&lt;br /&gt;
MSXgl uses macros to wrap quick bank switching mechanisms. It would therefore be totally transparent for a user to switch, for example, from an ASCII8 or even Konami-SCC mapper, to an NEO-8 mapper.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define SET_BANK_SEGMENT(bank, segment) /* ... */&lt;br /&gt;
&lt;br /&gt;
// Make segment #30 visible through bank #1&lt;br /&gt;
SET_BANK_SEGMENT(1, 30);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MSXgl initialize the banks with a unique segment each, to offer the largest possible space available to the user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img style=&amp;quot;width:400px; margin:0.5em;&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/mapper_neo8.png&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img style=&amp;quot;width:400px; margin:0.5em;&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/mapper_neo16.png&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Note&amp;lt;/u&amp;gt;: When the application start, segment at 0x4000 always point to segment 0 that include the ROM header. See [[Create a mapped ROM#NEO mapper]] for more details.&lt;br /&gt;
&lt;br /&gt;
== Appendix ==&lt;br /&gt;
&lt;br /&gt;
=== Segment switching address format ===&lt;br /&gt;
&lt;br /&gt;
From a software point of view, the segment switching address is defined as:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;17&amp;quot;| 16-bit address&lt;br /&gt;
|-&lt;br /&gt;
! 15 || 14 || 13 || 12 || 11 || 10 || 9 || 8 &lt;br /&gt;
|&lt;br /&gt;
! 7 || 6 || 5 || 4 || 3 || 2 || 1 || 0&lt;br /&gt;
|-&lt;br /&gt;
| P || P || B || B || B || x || x || x || || x || x || x || x || x || x || x || R&lt;br /&gt;
|}&lt;br /&gt;
Where:&lt;br /&gt;
* 'PP' (0-3) is the page selection for the MSX to redirect access to the mappers slot. Those bits are ignored by the mapper and contribute to mirroring, but the mapper registers can only be accessed from selected pages.&lt;br /&gt;
* 'BBB' (0-7) is the bank's register to write in. All unspecified values are discarded.&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Bank !! NEO-8 !! NEO-16&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 010 || 010&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 011 || 100&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 100 || 110&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 101 || &lt;br /&gt;
|-&lt;br /&gt;
| 4 || 110 || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 111 || &lt;br /&gt;
|}&lt;br /&gt;
* 'R' (0-1) is the segment switching register's byte selector (0: less significant byte; 1: most significant byte).&lt;br /&gt;
* 'x' can be any value (generating mirroring).&lt;br /&gt;
&lt;br /&gt;
So, mirroring occurs on all addresses from the given switching address +2 to the switching address +7FEh on all even-numbered addresses. For example, 5000h is mirrored at 5002h~57FEh.&lt;br /&gt;
&lt;br /&gt;
=== Programmable processor and emulation ===&lt;br /&gt;
Here is a pseudo code in C to handle NEO mappers for programmable processor based cartridges or for emulators:&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| NEO-8 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[6]; // Bank switching register value&lt;br /&gt;
&lt;br /&gt;
// Handle device initialization&lt;br /&gt;
void NEO8_Init()&lt;br /&gt;
{&lt;br /&gt;
   for (uint8 i=0; i&amp;lt;6; i++)&lt;br /&gt;
      bankValue[i] = 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Handle write access&lt;br /&gt;
void NEO8_Write(uint16 address, uint8 value)&lt;br /&gt;
{&lt;br /&gt;
   uint8 bank = ((address &amp;gt;&amp;gt; 11) &amp;amp; 0x07) - 2;&lt;br /&gt;
   if (bank &amp;gt; 5)&lt;br /&gt;
      return; // skip&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;
// Handle read access&lt;br /&gt;
uint8 NEO8_Read(uint16 address)&lt;br /&gt;
{&lt;br /&gt;
   uint8 bank = address &amp;gt;&amp;gt; 13;&lt;br /&gt;
   if (bank &amp;gt; 5)&lt;br /&gt;
      return 0xFF; // skip&lt;br /&gt;
   return romData[(bankValue[bank]) &amp;lt;&amp;lt; 13 + (address &amp;amp; 0x1FFF)];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;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;
// Handle device initialization&lt;br /&gt;
void NEO16_Init()&lt;br /&gt;
{&lt;br /&gt;
   bankValue[0] = bankValue[1] = bankValue[2] = 0;&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;&lt;br /&gt;
   if (bank &amp;gt; 2)&lt;br /&gt;
      return; // skip&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;
// 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;&lt;br /&gt;
   if (bank &amp;gt; 2)&lt;br /&gt;
      return 0xFF; // skip&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;
&lt;br /&gt;
=== Sample program ===&lt;br /&gt;
A sample program is available for testing purpose on: https://aoineko.org/msx/targets/rom/&lt;br /&gt;
&lt;br /&gt;
It is available in various sizes:&lt;br /&gt;
* NEO-8: 256 KB to 32 MB&lt;br /&gt;
* NEO-16: 256 KB to 64 MB&lt;br /&gt;
&lt;br /&gt;
=== Bank switching cost ===&lt;br /&gt;
For a program using NEO mapper, the cost of switching only the lower or higher byte of the 16-bit segment register is the same that switching segment for standard ASCII/Konami mappers.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
; Direct access (22 t-states)&lt;br /&gt;
LD A,n      ;  8 t-states&lt;br /&gt;
LD (nn),A   ; 14 t-states&lt;br /&gt;
&lt;br /&gt;
; Indirect access (22 t-states)&lt;br /&gt;
LD HL,nn    ; 11 t-states&lt;br /&gt;
LD (HL),n   ; 11 t-states&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Although a program can avoid having to change the 2 bytes (16-bit) of the segment register at once, there are cases where this may be necessary. In such cases, the cost is higher, but remains reasonable.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
; Direct access (28 t-states)&lt;br /&gt;
LD HL,nn    ; 11 t-states&lt;br /&gt;
LD (nn),HL  ; 17 t-states&lt;br /&gt;
&lt;br /&gt;
; Indirect access (40 t-states)&lt;br /&gt;
LD HL,nn    ; 11 t-states&lt;br /&gt;
LD (HL),n   ; 11 t-states&lt;br /&gt;
INC HL      ;  7 t-states&lt;br /&gt;
LD (HL),n   ; 11 t-states&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Logos ===&lt;br /&gt;
Here are the logos you can use to indicate that a product is compatible with the NEO mapper:&lt;br /&gt;
&lt;br /&gt;
[https://aoineko.org/msx/files/neomapper8b-logo.png &amp;lt;img style=&amp;quot;width:128px&amp;quot; src=&amp;quot;https://aoineko.org/msx/files/neomapper8b-logo.png&amp;quot; /&amp;gt;]&lt;br /&gt;
[https://aoineko.org/msx/files/neomapper8w-logo.png &amp;lt;img style=&amp;quot;width:128px&amp;quot; src=&amp;quot;https://aoineko.org/msx/files/neomapper8w-logo.png&amp;quot; /&amp;gt;]&lt;br /&gt;
[https://aoineko.org/msx/files/neomapper16b-logo.png &amp;lt;img style=&amp;quot;width:128px&amp;quot; src=&amp;quot;https://aoineko.org/msx/files/neomapper16b-logo.png&amp;quot; /&amp;gt;]&lt;br /&gt;
[https://aoineko.org/msx/files/neomapper16w-logo.png &amp;lt;img style=&amp;quot;width:128px&amp;quot; src=&amp;quot;https://aoineko.org/msx/files/neomapper16w-logo.png&amp;quot; /&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
== Change log ==&lt;br /&gt;
* Version 1.0 (2024/02/12)&lt;br /&gt;
** Original version&lt;br /&gt;
* Version 1.1 (2024/02/20)&lt;br /&gt;
** Changed mappers signature to minimize the risk of an old cartridge generating a false positive and to comply to [[ROM type signature]] format.&lt;br /&gt;
** Added clarification on PP and BBB values for bank switching addresses.&lt;br /&gt;
** Added clarification for read access to the mapper and especially when try to read the page 3.&lt;br /&gt;
* Version 1.2 (2026/04/06)&lt;br /&gt;
** Added optional official logo for NEO mapper product.&lt;br /&gt;
** Added bits 12 and 13 to the register value, increasing the maximum number of segments from 4096 to 16384.&lt;br /&gt;
[[Category:Proposal]][[Category:Proposal/Mapper]]&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=Projects&amp;diff=4018</id>
		<title>Projects</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=Projects&amp;diff=4018"/>
				<updated>2026-09-24T20:44:32Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here's a list of known projects using {{MSXGL}}:&lt;br /&gt;
&lt;br /&gt;
== Games, applications and demos ==&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable sortable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Genre&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Author&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Release&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Target&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Link&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;MSXgl Version&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Signature&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Image&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=msx3d&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=JBikker&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2022, Feb.&lt;br /&gt;
|site=https://github.com/jbikker/msx3d&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=0.3.0&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://msxvillage.fr/upload/msx3d.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Simple scroller&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=xchip&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2022, Apr.&lt;br /&gt;
|site=https://github.com/aguaviva/msx1_smooth_scroller&lt;br /&gt;
|webmsx=https://webmsx.org/?ROM=https://github.com/aguaviva/msx1_smooth_scroller/raw/refs/heads/main/precompiled/template.rom&amp;amp;MACHINE=MSX1A&lt;br /&gt;
|version=0.3.2&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/scroller.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=VATT&lt;br /&gt;
|genre=Tool&lt;br /&gt;
|author=Aoineko&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX122P&lt;br /&gt;
|state=✅ 2023, Apr.&lt;br /&gt;
|site=https://github.com/aoineko-fr/VATT&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=0.9.10&lt;br /&gt;
|signature=&amp;quot;GLVT&amp;quot;&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/VATT/master/doc/vatt.jpg&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Mandoroids&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Igor Moreno&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Apr.&lt;br /&gt;
|site=https://github.com/MorenoIgor/Mandoroids&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/MorenoIgor/Mandoroids/raw/main/mandoroids/emul/rom/mandoroids.rom&lt;br /&gt;
|code=https://github.com/MorenoIgor/Mandoroids/tree/main/mandoroids&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=https://user-images.githubusercontent.com/35140312/233985120-45d4fb8e-fe30-47a0-a8ec-93438ad86cc3.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Martian War&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_16K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2023, May&lt;br /&gt;
|site=https://www.msxdev.org/2023/05/06/msxdev23-07-martian-war/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=martianwar&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;FPMW&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/05/MSXdev23_MartianWar_v1.0_001-1024x766.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/05/MSXdev23_MartianWar_v1.0_002-1024x768.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=screen3&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=HSK&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2023, May&lt;br /&gt;
|site=https://github.com/hsk/msxgl/tree/main&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=Unknown&lt;br /&gt;
|image1=http://aoineko.org/files/hsk_screen3v4.gif&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=A Lone Wolf&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=FutureDisk&lt;br /&gt;
|target=DISK&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|ext1=MSXMUSIC&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Jul.&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;FDLW&amp;quot;&lt;br /&gt;
|image1=https://www.msx.org/sites/default/files/news/2024/11/WMSX_Screen_1.png&lt;br /&gt;
|image2=https://www.msx.org/sites/default/files/news/2024/11/WMSX_Screen_2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Eggy’s Maze&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Bik5 (JBikker)&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2023, Aug.&lt;br /&gt;
|site=https://www.msxdev.org/2023/08/30/msxdev23-15-eggys-maze/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=eggysmaze&lt;br /&gt;
|purchase=https://cotegamers.com/shop/en/accueil/177-eggy-s-maze-preorder.html&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;B5EM&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/08/MSXdev23_EggysMaze_v1.0.0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/08/MSXdev23_EggysMaze_v1.0.0002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Attack of the Petscii Robots&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=RoboSoft (ToriHino)&lt;br /&gt;
|target=ROM_ASCII8_2M&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=V9990&lt;br /&gt;
|ext2=OPL4&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Sep.&lt;br /&gt;
|site=https://www.msxdev.org/2023/09/19/msxdev23-18-attack-of-the-petscii-robots/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=attackofthepetsciirobots&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;RSPE&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/09/MSXdev23_AttackofthePetsciiRobots_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/09/MSXdev23_AttackofthePetsciiRobots_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Crawlers&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|ext1=NINJATAP&lt;br /&gt;
|ext2=PAC&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2023, Oct.&lt;br /&gt;
|site=https://github.com/aoineko-fr/Crawlers&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/aoineko-fr/Crawlers/raw/master/emul/rom/crawlers.rom&amp;amp;PRESETS=PAC2&lt;br /&gt;
|purchase=https://www.ebsoft.fr/shop/fr/home/117-crawlers.html&lt;br /&gt;
|version=0.10.1&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,1&lt;br /&gt;
|image1=https://github.com/aoineko-fr/MSXgl/raw/main/engine/doc/img/crawlers.png&lt;br /&gt;
|image2=https://github.com/aoineko-fr/MSXgl/raw/main/engine/doc/img/crawlers_2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Phenix Corrupta&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Casper Croes&lt;br /&gt;
|target=ROM_ASCII8_512K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2023, Oct.&lt;br /&gt;
|site=https://www.msxdev.org/2023/10/16/msxdev23-27-phenix-corrupta/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=phenixcorrupta&lt;br /&gt;
|purchase=https://cotegamers.com/shop/fr/accueil/187-phenix-corrupta-msx-precommande.html&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;CCPC&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_PhenixCorrupta_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_PhenixCorrupta_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Tetpuz&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Totta&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2023, Oct.&lt;br /&gt;
|site=https://www.msxdev.org/2023/10/17/msxdev23-28-tetpuz/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=tetpuz&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=&amp;quot;TTTP&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_Tetpuz_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2023/10/MSXdev23_Tetpuz_v1.0_002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=NY2024&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2024, Jan.&lt;br /&gt;
|site=https://github.com/aoineko-fr/NY2024&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/aoineko-fr/NY2024&lt;br /&gt;
|purchase=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;GL24&amp;quot;&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
|video=Yd4Q1YYXJbA&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Sam.Pr&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2024, Jul.&lt;br /&gt;
|site=https://www.msxdev.org/2024/07/16/msxdev24-07-sam-pr/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=sampr&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;FPSP&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2024/07/MSXdev24_Sam.Pr_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2024/07/MSXdev24_Sam.Pr_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Alley Cat&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Rutagames (Diogo Patrão)&lt;br /&gt;
|target=ROM_ASCII8_128K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2024, Nov.&lt;br /&gt;
|site=https://sites.google.com/view/alleycatparamsx/&lt;br /&gt;
|purchase=https://sites.google.com/view/alleycatparamsx/&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=https://aoineko.org/msxgl/images/thumb/9/92/AllyCatTitle.png/724px-AllyCatTitle.png&lt;br /&gt;
|image2=https://aoineko.org/msxgl/images/c/c3/AlleyCatGame.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Sam.Pr Explore&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_ASCII16_256K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2024, Dec.&lt;br /&gt;
|site=https://www.msxdev.org/2024/12/20/msxdev24-19-sam-pr-explorer/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=samprexplorer&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;FPEX&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2024/12/Msxdev24_sam.prexplorer_v1.0_0002.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2024/12/Msxdev24_sam.prexplorer_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=NY2025&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Jan.&lt;br /&gt;
|site=https://github.com/aoineko-fr/NY2025&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/aoineko-fr/NY2025&lt;br /&gt;
|purchase=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;GL25&amp;quot;&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
|video=Rl-1g2TtrtA&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Room 5&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=MO5.com&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=✅ 2025, Jan.&lt;br /&gt;
|site=https://mo5com.itch.io/room-5&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/Asso-MO5/room5/raw/main/room5/emul/rom/Room5.rom&lt;br /&gt;
|version=0.10.1&lt;br /&gt;
|signature=&amp;quot;MOR5&amp;quot;&lt;br /&gt;
|image1=https://img.itch.zone/aW1hZ2UvMjEzNTQ1Mi8xMzQ2MTQ1MC5qcGc=/original/YUiAHD.jpg&lt;br /&gt;
|image2=https://img.itch.zone/aW1hZ2UvMjEzNTQ1Mi8xMzQ2MTQ2Ny5qcGc=/original/Ssow9u.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Super Sokoban&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=2NICE&lt;br /&gt;
|target=ROM_KONAMI_SCC_128K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, March&lt;br /&gt;
|site=https://www.msxdev.org/2025/01/28/msxdev24-28-super-sokoban/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=supersokoban&lt;br /&gt;
|version=1.2.12&lt;br /&gt;
|signature=&amp;quot;2NSO&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2025/01/MSXdev24_SuperSokoban_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2025/01/MSXdev24_SuperSokoban_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Doomlings&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Totta&lt;br /&gt;
|target=ROM_ASCII16_256K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2025, Jan.&lt;br /&gt;
|site=https://www.msxdev.org/2025/02/03/msxdev24-31-doomlings/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=doomlings&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;TTDL&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2025/02/Msxdev24_doomlings_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2025/02/Msxdev24_doomlings_v1.0_0002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=EMinEx&lt;br /&gt;
|genre=Tool&lt;br /&gt;
|author=LudoJoey&lt;br /&gt;
|target=BIN_TAPE&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2025, Apr.&lt;br /&gt;
|site=https://github.com/ludosevilla/EMinEx&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://raw.githubusercontent.com/ludosevilla/EMinEx/refs/heads/main/images/minipavi.png&lt;br /&gt;
|image2=https://raw.githubusercontent.com/ludosevilla/EMinEx/refs/heads/main/images/meteo.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Peng Pong&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=✅ 2025, March&lt;br /&gt;
|site=https://github.com/aoineko-fr/PengPong&lt;br /&gt;
|webmsx=https://webmsx.org/?ROM=https://github.com/aoineko-fr/PengPong/raw/refs/heads/master/emul/rom/pengpong.rom&lt;br /&gt;
|version=1.3.0&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,3&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/PengPong/master/doc/img/pengpong1.png&lt;br /&gt;
|image2=https://raw.githubusercontent.com/aoineko-fr/PengPong/master/doc/img/pengpong2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Toride no Kōbō&amp;lt;br/&amp;gt;砦の攻防&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Hando&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Sep.&lt;br /&gt;
|site=https://github.com/handomade/ToridenoKoubou-for-MSX2&lt;br /&gt;
|webmsx=https://webmsx.org/?ROM=https://github.com/handomade/ToridenoKoubou-for-MSX2/raw/refs/heads/main/Toride.rom&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://aoineko.org/msxgl/images/thumb/6/6e/Game_fortress_01.png/775px-Game_fortress_01.png&lt;br /&gt;
|image2=https://aoineko.org/msxgl/images/thumb/3/37/Game_fortress_02.png/775px-Game_fortress_02.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=The new Castle&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Nicola Brogelli&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2025, October&lt;br /&gt;
|site=https://www.msxdev.org/2025/10/18/msxdev25-13-the-new-castle/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=thenewcastle&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2025/10/Msxdev25_thenewcastle_v1.0_0001.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2025/10/Msxdev25_thenewcastle_v1.0_0002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=TerMSX&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Diogo Patrão&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Nov.&lt;br /&gt;
|site=https://rutagamesltda.itch.io/termsx&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://img.itch.zone/aW1nLzIzOTAyMzMzLnBuZw==/315x250%23c/kVbbsO.png&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Super Sokoban Xmas quiz '25&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=2NICE&lt;br /&gt;
|target=ROM_KONAMI_128K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2025, Dec.&lt;br /&gt;
|site=https://2nicemsx.nl/super-sokoban/xmasquiz/&lt;br /&gt;
|webmsx=https://2nicemsx.nl/super-sokoban/xmasquiz/webmsx/&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=https://2nicemsx.nl/super-sokoban/xmasquiz/img/supersokobanxmas1.jpg&lt;br /&gt;
|image2=https://2nicemsx.nl/super-sokoban/xmasquiz/img/supersokobanxmas3.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=NY2026&lt;br /&gt;
|genre=Demo&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_48K_ISR&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, Jan.&lt;br /&gt;
|site=https://github.com/aoineko-fr/NY2026&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/aoineko-fr/NY2026&lt;br /&gt;
|purchase=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&amp;quot;GL26&amp;quot;&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
|video=1kbN7VnbfaU&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=DELTA&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Bik5 (JBikker)&lt;br /&gt;
|target=ROM_ASCII16_4M&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|ext1=SCC&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2026, February&lt;br /&gt;
|site=https://www.msxdev.org/2026/02/21/msxdev25-30-delta/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=delta&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;5BR3&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_DELTA_v1.0_000.jpg&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_DELTA_v1.0_002.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=TerMSX Multi&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Rutagames (Diogo Patrão)&lt;br /&gt;
|target=ROM_ASCII8_512K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, February&lt;br /&gt;
|site=https://www.msxdev.org/2026/02/26/msxdev25-32-termsx/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=termsx&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;RGTM&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/01/Msxdev25_termsx_v1.0_001.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/02/Msxdev25_termsx_v1.0_002.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Soccer League&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Fausto Pracek&lt;br /&gt;
|target=ROM_YAMANOOTO_8M&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=V9990&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/02/msxdev25-34-soccer-league/&lt;br /&gt;
|webmsx=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_SoccerLeague_v1.2.zip&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;FPSL&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_SoccerLeague_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/02/MSXdev25_SoccerLeague_v1.0_005.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=AstroJump&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Tiago Tresoldi&amp;lt;br/&amp;gt;Freja Lindgren&lt;br /&gt;
|target=ROM_16K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/05/msxdev25-35-astrojump/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=astrojump&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;RGAJ&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/Msxdev25_astrojump_v1.0_0000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/Msxdev25_astrojump_v1.0_0001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Chrono Runner&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=MSX Italia Association&lt;br /&gt;
|target=ROM_ASCII16_128K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/14/msxdev25-38-chrono-runner/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=chronorunner&lt;br /&gt;
|source=https://github.com/AssociazioneMsxItalia/Chrono-runners&lt;br /&gt;
|version=1.3.2&lt;br /&gt;
|signature=&amp;quot;AMCR&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/msxdev25_chrono-runner_v1.0-0001.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/msxdev25_chrono-runner_v1.0-0005.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Tiny Tetris VS&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Antxiko&lt;br /&gt;
|target=ROM_16K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/16/msxdev25-44-tiny-tetris-vs/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=tinytetrisvs&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_TinyTetrisVS_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_TinyTetrisVS_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Soul Trapped&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Casper Croes&amp;lt;br/&amp;gt;[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_NEO16_16M&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|ext1=MSXMUSIC&lt;br /&gt;
|ext2=MOUSE&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://www.msxdev.org/2026/03/18/msxdev25-47-soul-trapped/&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=soultrapped&lt;br /&gt;
|version=1.4.0&lt;br /&gt;
|signature=&amp;quot;CCTR&amp;quot;&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_SoulTrapped_v1.0_01.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/03/MSXdev25_SoulTrapped_v1.0_03.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Snake Exacape&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=2NICE&lt;br /&gt;
|target=ROM_64K&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|ext1=MSXMUSIC&lt;br /&gt;
|ext2=&lt;br /&gt;
|ext3=&lt;br /&gt;
|state=✅ 2026, March&lt;br /&gt;
|site=https://2nicemsx.nl/snake-escape&lt;br /&gt;
|webmsx=https://2nicemsx.nl/snake-escape/webmsx&lt;br /&gt;
|version=1.2.12&lt;br /&gt;
|signature=&amp;quot;2NSE&amp;quot;&lt;br /&gt;
|image1=https://2nicemsx.nl/snake-escape/img/snakeescape1.jpg&lt;br /&gt;
|image2=https://2nicemsx.nl/snake-escape/img/snakeescape2.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=MUGI&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Hando&lt;br /&gt;
|target=ROM_48K_ISR&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, May&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=&amp;quot;HNMG&amp;quot;&lt;br /&gt;
|image1=https://aoineko.org/msxgl/images/thumb/b/b6/Game_mugi_01.png/775px-Game_mugi_01.png&lt;br /&gt;
|image2=https://aoineko.org/msxgl/images/thumb/6/60/Game_mugi_02.png/775px-Game_mugi_02.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=City MSX&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=BigFive (mgoulartBR)&lt;br /&gt;
|target=ROM ASCII16&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=✅ 2026, Sep.&lt;br /&gt;
|site=https://mgoulartbr.itch.io/city-msx&lt;br /&gt;
|purchase=https://mgoulartbr.itch.io/city-msx&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=Unknow&lt;br /&gt;
|image1=https://i.postimg.cc/P5P4sxTp/859c2b11-9446-4212-9435-e7ce8df679e4.png&lt;br /&gt;
|image2=https://i.postimg.cc/zXD777M5/demo-city-itch.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Berzerk&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Pixel Forge&lt;br /&gt;
|target=ROM_32K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=✅ 2026, Sep.&lt;br /&gt;
|site=https://www.msxdev.org/2026/09/21/msxdev26-02-berzerk/&lt;br /&gt;
|purchase=&lt;br /&gt;
|webmsx=https://www.file-hunter.com/MSXdev/?id=berzerk&lt;br /&gt;
|version=Unknow&lt;br /&gt;
|signature=None&lt;br /&gt;
|image1=https://www.msxdev.org/wp-content/uploads/2026/09/MSXdev26_Berzerk_v1.0_000.png&lt;br /&gt;
|image2=https://www.msxdev.org/wp-content/uploads/2026/09/MSXdev26_Berzerk_v1.0_001.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Wizzl&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (GFX)&lt;br /&gt;
|target=ROM_KONAMI_256K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=1.4.1&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,4&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/wizzl_1.png&lt;br /&gt;
|image2=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/wizzl_2.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Final Smash&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=[[Pixel Phenix]] (Aoineko)&lt;br /&gt;
|target=ROM_48K&lt;br /&gt;
|msx=MSX12&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=https://github.com/aoineko-fr/FinalSmash&lt;br /&gt;
|webmsx=https://webmsx.org/?M=MSX1&amp;amp;ROM=https://github.com/aoineko-fr/FinalSmash/raw/master/emul/rom/tennis.rom&lt;br /&gt;
|version=0.9.0&lt;br /&gt;
|signature=&amp;quot;PH&amp;quot;,2&lt;br /&gt;
|image1=https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/finalsmash.jpg&lt;br /&gt;
|image2=https://msxvillage.fr/upload/fs_score.gif&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Popeye&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Wim&lt;br /&gt;
|target=&lt;br /&gt;
|msx=MSX2&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=Unknown&lt;br /&gt;
|signature=Unknown&lt;br /&gt;
|image1=https://cdn.discordapp.com/attachments/574951023374761988/1164328603375374448/image.png?ex=6542d083&amp;amp;is=65305b83&amp;amp;hm=c3b357b359cbc2b3809277cac00ca8252242d1977f0c950e2927230d9aa346f9&amp;amp;&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Duæl Drop&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=Totta&lt;br /&gt;
|target=ROM_ASCII8_256K&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|version=1.0.0&lt;br /&gt;
|signature=&amp;quot;TTDD&amp;quot;&lt;br /&gt;
|image1=https://cdn.discordapp.com/attachments/1049454935261073409/1227685092323754035/DuaelDrop-7.png?ex=672e56d7&amp;amp;is=672d0557&amp;amp;hm=06e8a0789277e4f07bb046520c4129c99a39d89d479a107a6fca0f718db56978&amp;amp;&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=Debug-Riken&amp;lt;br/&amp;gt;デバグリケン&lt;br /&gt;
|genre=Game&lt;br /&gt;
|author=HtDreams&lt;br /&gt;
|target=&lt;br /&gt;
|msx=MSX1&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{PROJ&lt;br /&gt;
|name=GBMSX&lt;br /&gt;
|genre=Tool&lt;br /&gt;
|author=Bruno Catao&lt;br /&gt;
|target=DOS2&lt;br /&gt;
|msx=MSX2+&lt;br /&gt;
|state=🚧 WIP&lt;br /&gt;
|site=https://github.com/brunogamacatao/msxgb&lt;br /&gt;
|webmsx=&lt;br /&gt;
|source=https://github.com/brunogamacatao/msxgb&lt;br /&gt;
|version=&lt;br /&gt;
|signature=&lt;br /&gt;
|image1=&lt;br /&gt;
|image2=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Samples programs ==&lt;br /&gt;
&lt;br /&gt;
MSXgl is supplied with a [[Samples|large number of sample programs]] which you can use as a reference for using the engine's various features.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_game.png&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_draw.jpg&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_clock.jpg&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;img height=&amp;quot;200px&amp;quot; src=&amp;quot;https://raw.githubusercontent.com/aoineko-fr/MSXgl/main/engine/doc/img/sample_swtile.png&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/html&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=Free_call_to_BIOS_routine&amp;diff=4017</id>
		<title>Free call to BIOS routine</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=Free_call_to_BIOS_routine&amp;diff=4017"/>
				<updated>2026-09-22T18:35:53Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a technique to remove 100% of the C language overhead on calling some of the [https://www.msx.org/wiki/Main-ROM_BIOS BIOS routines].&lt;br /&gt;
&lt;br /&gt;
The idea is to &amp;quot;cast&amp;quot; an address with the signature of a C function so that the calling code initializes the registers properly before calling the BIOS function.&lt;br /&gt;
&lt;br /&gt;
For example, the function &amp;lt;tt&amp;gt;GTSTCK&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;00D5h&amp;lt;/tt&amp;gt;) which returns the status of the joystick, takes its input parameter in A and returns its final value in A. Among the possible function signatures, &amp;lt;tt&amp;gt;(u8(*)(u8))&amp;lt;/tt&amp;gt; uses these same registers.&lt;br /&gt;
&lt;br /&gt;
Thus, with this function definition...&lt;br /&gt;
 inline u8 Bios_GetJoystickDirection(u8 port) { return ((u8(*)(u8))R_GTSTCK)(port); }&lt;br /&gt;
...the calling code will put the port number into register A, call the &amp;lt;tt&amp;gt;GTSTCK&amp;lt;/tt&amp;gt; function, then read the result into register A.&lt;br /&gt;
&lt;br /&gt;
Since the function is inline, we gain C typing verification, while having zero C overhead.&lt;br /&gt;
&lt;br /&gt;
Obviously, this only works with BIOS routines that use registers for which there is a C function signature. There are few of them, but by playing with the &amp;lt;tt&amp;gt;sdcccall1&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;z88dk_fastcall&amp;lt;/tt&amp;gt; calling conventions, we still have some possibilities. In the case of a &amp;lt;tt&amp;gt;z88dk_fastcall&amp;lt;/tt&amp;gt; signature you have to use a &amp;lt;tt&amp;gt;typedef&amp;lt;/tt&amp;gt; to define the signature before you can use it.&lt;br /&gt;
&lt;br /&gt;
Here is a summary of all possible the combinations:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!	!!__sdcccall(0)	!!__sdcccall(1)	 !!__z88dk_fastcall&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|RETURN&lt;br /&gt;
|-&lt;br /&gt;
|8 bits	||L	||A	||L&lt;br /&gt;
|-&lt;br /&gt;
|16 bits	||HL	||DE	||HL&lt;br /&gt;
|-&lt;br /&gt;
|32 bits	||DE-HL	||HL-DE	||DE-HL&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot; style=&amp;quot;text-align:center;&amp;quot;|PARAMETERS&lt;br /&gt;
|-&lt;br /&gt;
|8 bits	||Stack	||A	||L&lt;br /&gt;
|-&lt;br /&gt;
|16 bits	||Stack	||HL	||HL&lt;br /&gt;
|-&lt;br /&gt;
|32 bits	||Stack	||HL-DE	||DE-HL&lt;br /&gt;
|-&lt;br /&gt;
|8 + 8 bits	||Stack	||A + L	||''Invalid''&lt;br /&gt;
|-&lt;br /&gt;
|8 + 16 bits	||Stack	||A + DE	||''Invalid''&lt;br /&gt;
|-&lt;br /&gt;
|16 + 16 bits	||Stack	||HL + DE	||''Invalid''&lt;br /&gt;
|-&lt;br /&gt;
|16 + 8 bits	||Stack	||HL + Stack	||''Invalid''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can found many examples in &amp;lt;tt&amp;gt;engine\src\bios.h&amp;lt;/tt&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=Free_call_to_BIOS_routine&amp;diff=4016</id>
		<title>Free call to BIOS routine</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=Free_call_to_BIOS_routine&amp;diff=4016"/>
				<updated>2026-09-22T18:32:30Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a technique to remove 100% of the C language overhead on calling some of the [https://www.msx.org/wiki/Main-ROM_BIOS BIOS routines].&lt;br /&gt;
&lt;br /&gt;
The idea is to &amp;quot;cast&amp;quot; an address with the signature of a C function so that the calling code initializes the registers properly before calling the BIOS function.&lt;br /&gt;
&lt;br /&gt;
For example, the function &amp;lt;tt&amp;gt;GTSTCK&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;00D5h&amp;lt;/tt&amp;gt;) which returns the status of the joystick, takes its input parameter in A and returns its final value in A. Among the possible function signatures, &amp;lt;tt&amp;gt;(u8(*)(u8))&amp;lt;/tt&amp;gt; uses these same registers.&lt;br /&gt;
&lt;br /&gt;
Thus, with this function definition...&lt;br /&gt;
 inline u8 Bios_GetJoystickDirection(u8 port) { return ((u8(*)(u8))R_GTSTCK)(port); }&lt;br /&gt;
...the calling code will put the port number into register A, call the &amp;lt;tt&amp;gt;GTSTCK&amp;lt;/tt&amp;gt; function, then read the result into register A.&lt;br /&gt;
&lt;br /&gt;
Since the function is inline, we gain C typing verification, while having zero C overhead.&lt;br /&gt;
&lt;br /&gt;
Obviously, this only works with BIOS routines that use registers for which there is a C function signature. There are few of them, but by playing with the &amp;lt;tt&amp;gt;sdcccall1&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;z88dk_fastcall&amp;lt;/tt&amp;gt; calling conventions, we still have some possibilities. In the case of a &amp;lt;tt&amp;gt;z88dk_fastcall&amp;lt;/tt&amp;gt; signature you have to use a &amp;lt;tt&amp;gt;typedef&amp;lt;/tt&amp;gt; to define the signature before you can use it.&lt;br /&gt;
&lt;br /&gt;
Here is a summary of all possible the combinations:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!	!!__sdcccall(0)	!!__sdcccall(1)	 !!__z88dk_fastcall&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|RETURN			&lt;br /&gt;
|-&lt;br /&gt;
|8 bits	||L	||A	||L&lt;br /&gt;
|-&lt;br /&gt;
|16 bits	||HL	||DE	||HL&lt;br /&gt;
|-&lt;br /&gt;
|32 bits	||DE-HL	||HL-DE	||DE-HL&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|PARAMETERS			&lt;br /&gt;
|-&lt;br /&gt;
|8 bits	||Stack	||A	||L&lt;br /&gt;
|-&lt;br /&gt;
|16 bits	||Stack	||HL	||HL&lt;br /&gt;
|-&lt;br /&gt;
|32 bits	||Stack	||HL-DE	||DE-HL&lt;br /&gt;
|-&lt;br /&gt;
|8 + 8 bits	||Stack	||A + L	||''Invalid''&lt;br /&gt;
|-&lt;br /&gt;
|8 + 16 bits	||Stack	||A + DE	||''Invalid''&lt;br /&gt;
|-&lt;br /&gt;
|16 + 16 bits	||Stack	||HL + DE	||''Invalid''&lt;br /&gt;
|-&lt;br /&gt;
|16 + 8 bits	||Stack	||HL + Stack	||''Invalid''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can found many examples in &amp;lt;tt&amp;gt;engine\src\bios.h&amp;lt;/tt&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=Free_call_to_BIOS_routine&amp;diff=4015</id>
		<title>Free call to BIOS routine</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=Free_call_to_BIOS_routine&amp;diff=4015"/>
				<updated>2026-09-22T18:32:15Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a technique to remove 100% of the C language overhead on calling some of the [https://www.msx.org/wiki/Main-ROM_BIOS BIOS routines].&lt;br /&gt;
&lt;br /&gt;
The idea is to &amp;quot;cast&amp;quot; an address with the signature of a C function so that the calling code initializes the registers properly before calling the BIOS function.&lt;br /&gt;
&lt;br /&gt;
For example, the function &amp;lt;tt&amp;gt;GTSTCK&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;00D5h&amp;lt;/tt&amp;gt;) which returns the status of the joystick, takes its input parameter in A and returns its final value in A. Among the possible function signatures, &amp;lt;tt&amp;gt;(u8(*)(u8))&amp;lt;/tt&amp;gt; uses these same registers.&lt;br /&gt;
&lt;br /&gt;
Thus, with this function definition...&lt;br /&gt;
 inline u8 Bios_GetJoystickDirection(u8 port) { return ((u8(*)(u8))R_GTSTCK)(port); }&lt;br /&gt;
...the calling code will put the port number into register A, call the &amp;lt;tt&amp;gt;GTSTCK&amp;lt;/tt&amp;gt; function, then read the result into register A.&lt;br /&gt;
&lt;br /&gt;
Since the function is inline, we gain C typing verification, while having zero C overhead.&lt;br /&gt;
&lt;br /&gt;
Obviously, this only works with BIOS routines that use registers for which there is a C function signature. There are few of them, but by playing with the &amp;lt;tt&amp;gt;sdcccall1&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;z88dk_fastcall&amp;lt;/tt&amp;gt; calling conventions, we still have some possibilities. In the case of a &amp;lt;tt&amp;gt;z88dk_fastcall&amp;lt;/tt&amp;gt; signature you have to use a &amp;lt;tt&amp;gt;typedef&amp;lt;/tt&amp;gt; to define the signature before you can use it.&lt;br /&gt;
&lt;br /&gt;
Here is a summary of all possible the combinations:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!	!!__sdcccall(0)	!!__sdcccall(1)	 !!__z88dk_fastcall&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|RETURN			&lt;br /&gt;
|-&lt;br /&gt;
|8 bits	||L	||A	||L&lt;br /&gt;
|-&lt;br /&gt;
|16 bits	||HL	||DE	||HL&lt;br /&gt;
|-&lt;br /&gt;
|32 bits	||DE-HL	||HL-DE	||DE-HL&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;4&amp;quot;|PARAMETERS			&lt;br /&gt;
|-&lt;br /&gt;
|8 bits	||Stack	||A	||L&lt;br /&gt;
|-&lt;br /&gt;
|16 bits	||Stack	||HL	||HL&lt;br /&gt;
|-&lt;br /&gt;
|32 bits	||Stack	||HL-DE	||DE-HL&lt;br /&gt;
|-&lt;br /&gt;
|8 + 8 bits	||Stack	||A + L	||Invalid&lt;br /&gt;
|-&lt;br /&gt;
|8 + 16 bits	||Stack	||A + DE	||Invalid&lt;br /&gt;
|-&lt;br /&gt;
|16 + 16 bits	||Stack	||HL + DE	||Invalid&lt;br /&gt;
|-&lt;br /&gt;
|16 + 8 bits	||Stack	||HL + Stack	||Invalid&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can found many examples in &amp;lt;tt&amp;gt;engine\src\bios.h&amp;lt;/tt&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	<entry>
		<id>https://aoineko.org/msxgl/index.php?title=Free_call_to_BIOS_routine&amp;diff=4014</id>
		<title>Free call to BIOS routine</title>
		<link rel="alternate" type="text/html" href="https://aoineko.org/msxgl/index.php?title=Free_call_to_BIOS_routine&amp;diff=4014"/>
				<updated>2026-09-22T18:31:07Z</updated>
		
		<summary type="html">&lt;p&gt;Aoineko: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a technique to remove 100% of the C language overhead on calling some of the [https://www.msx.org/wiki/Main-ROM_BIOS BIOS routines].&lt;br /&gt;
&lt;br /&gt;
The idea is to &amp;quot;cast&amp;quot; an address with the signature of a C function so that the calling code initializes the registers properly before calling the BIOS function.&lt;br /&gt;
&lt;br /&gt;
For example, the function &amp;lt;tt&amp;gt;GTSTCK&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;00D5h&amp;lt;/tt&amp;gt;) which returns the status of the joystick, takes its input parameter in A and returns its final value in A. Among the possible function signatures, &amp;lt;tt&amp;gt;(u8(*)(u8))&amp;lt;/tt&amp;gt; uses these same registers.&lt;br /&gt;
&lt;br /&gt;
Thus, with this function definition...&lt;br /&gt;
 inline u8 Bios_GetJoystickDirection(u8 port) { return ((u8(*)(u8))R_GTSTCK)(port); }&lt;br /&gt;
...the calling code will put the port number into register A, call the &amp;lt;tt&amp;gt;GTSTCK&amp;lt;/tt&amp;gt; function, then read the result into register A.&lt;br /&gt;
&lt;br /&gt;
Since the function is inline, we gain C typing verification, while having zero C overhead.&lt;br /&gt;
&lt;br /&gt;
Obviously, this only works with BIOS routines that use registers for which there is a C function signature. There are few of them, but by playing with the &amp;lt;tt&amp;gt;sdcccall1&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;z88dk_fastcall&amp;lt;/tt&amp;gt; calling conventions, we still have some possibilities. In the case of a &amp;lt;tt&amp;gt;z88dk_fastcall&amp;lt;/tt&amp;gt; signature you have to use a &amp;lt;tt&amp;gt;typedef&amp;lt;/tt&amp;gt; to define the signature before you can use it.&lt;br /&gt;
&lt;br /&gt;
Here is a summary of all possible the combinations:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable'&lt;br /&gt;
|-&lt;br /&gt;
!	!!__sdcccall(0)	!!__sdcccall(1)	 !!__z88dk_fastcall&lt;br /&gt;
|-&lt;br /&gt;
|spancol=&amp;quot;4&amp;quot;|RETURN			&lt;br /&gt;
|-&lt;br /&gt;
|8 bits	||L	||A	||L&lt;br /&gt;
|-&lt;br /&gt;
|16 bits	||HL	||DE	||HL&lt;br /&gt;
|-&lt;br /&gt;
|32 bits	||DE-HL	||HL-DE	||DE-HL&lt;br /&gt;
|-&lt;br /&gt;
|spancol=&amp;quot;4&amp;quot;|PARAMETERS			&lt;br /&gt;
|-&lt;br /&gt;
|8 bits	Stack	||A	||L&lt;br /&gt;
|-&lt;br /&gt;
|16 bits	||Stack	||HL	||HL&lt;br /&gt;
|-&lt;br /&gt;
|32 bits	||Stack	||HL-DE	||DE-HL&lt;br /&gt;
|-&lt;br /&gt;
|8 + 8 bits	||Stack	||A + L	||Invalid&lt;br /&gt;
|-&lt;br /&gt;
|8 + 16 bits	||Stack	||A + DE	||Invalid&lt;br /&gt;
|-&lt;br /&gt;
|16 + 16 bits	||Stack	||HL + DE	||Invalid&lt;br /&gt;
|-&lt;br /&gt;
|16 + 8 bits	||Stack	||HL + Stack	||Invalid&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can found many examples in &amp;lt;tt&amp;gt;engine\src\bios.h&amp;lt;/tt&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Aoineko</name></author>	</entry>

	</feed>