<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://pandorawiki.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Adventus</id>
	<title>Pandora Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://pandorawiki.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Adventus"/>
	<link rel="alternate" type="text/html" href="https://pandorawiki.org/Special:Contributions/Adventus"/>
	<updated>2026-04-23T16:19:23Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.32.0-alpha</generator>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Software_projects&amp;diff=1540</id>
		<title>Software projects</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Software_projects&amp;diff=1540"/>
		<updated>2009-10-22T06:48:03Z</updated>

		<summary type="html">&lt;p&gt;Adventus: /* Games */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See the [[Port Requests]] article for open-source projects which ''could'' be ported but have not been taken on by anyone yet.&lt;br /&gt;
&lt;br /&gt;
== Operating Systems ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Android Omap&lt;br /&gt;
|[http://elinux.org/Android_on_OMAP Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Angstrom Linux&lt;br /&gt;
|[http://www.angstrom-distribution.org/ Link]&lt;br /&gt;
|Working build, not completed&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|AROS Arm&lt;br /&gt;
|[http://projects.powerdeveloper.org/project/imx515/735 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FreeBSD&lt;br /&gt;
|[http://wiki.freebsd.org/FreeBSD/arm/OMAP Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Gentoo Linux&lt;br /&gt;
|[http://gentoo.openpandora.org Link]&lt;br /&gt;
|Working build, not completed&lt;br /&gt;
|javaJake, Viridior&lt;br /&gt;
|IRC: (FreeNode) #gentoo-pandora&lt;br /&gt;
|-&lt;br /&gt;
|HaikuOS&lt;br /&gt;
|[http://www.haiku-os.org Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ubuntu ARM&lt;br /&gt;
|[http://www.ubuntu.com/products/whatisubuntu/arm Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Fedora ARM&lt;br /&gt;
|&lt;br /&gt;
|Unknown&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Games ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Abuse&lt;br /&gt;
|[http://abuse.zoy.org/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|2D Platform&lt;br /&gt;
|-&lt;br /&gt;
|Battle for Wesnoth v1.6.2&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47936 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|BattleJewels&lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Skeezix&lt;br /&gt;
|Logical&lt;br /&gt;
|-&lt;br /&gt;
|BlobWars&lt;br /&gt;
|[http://www.parallelrealities.co.uk/projects/blobWars.php Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|2D Platform&lt;br /&gt;
|-&lt;br /&gt;
|Caster&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46813 Link]&lt;br /&gt;
|Working build (tested on PC)&lt;br /&gt;
|Svartalf&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Chaotic Vortex&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?/topic/49754-chaotic-vortex-dual-stick-arena-shooter Link]&lt;br /&gt;
|WIP&lt;br /&gt;
|Ruben&lt;br /&gt;
|Dual stick 2D shooter&lt;br /&gt;
|-&lt;br /&gt;
|Descent 1 (d1x-rebirth engine)&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1032 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPS&lt;br /&gt;
|-&lt;br /&gt;
|Descent 2 (d2x-rebirth engine)&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1032 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPS&lt;br /&gt;
|-&lt;br /&gt;
|FHeroes Port (Heroes Of Might And Magic 2)&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47553 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|FreeCiv 2.1.9&lt;br /&gt;
|[http://freeciv.wikia.com/wiki/Main_Page Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|Galactic Artifact&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46836 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Trevor Bradley&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|GemRB (Infinity Engine)&lt;br /&gt;
|&lt;br /&gt;
|wip&lt;br /&gt;
|Adventus&lt;br /&gt;
|open-source implementation of Bioware's Infinity Engine, supports games including Baldurs Gate 2 and Planescape Torment.&lt;br /&gt;
|-&lt;br /&gt;
|Giannas Return&lt;br /&gt;
|[http://www.gianas-return.de/ Link]&lt;br /&gt;
|Working&lt;br /&gt;
|Giannas Team&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Gravity Blocks&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47662 Link]&lt;br /&gt;
|wip (early in developement)&lt;br /&gt;
|Awekening&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Homeworld Port&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47565 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|LinuxHacker&lt;br /&gt;
|Simulation&lt;br /&gt;
|-&lt;br /&gt;
|Human Condition (was TINCS)&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46487 Link1][http://www.youtube.com/user/ButtermanHimself Link2]&lt;br /&gt;
|wip&lt;br /&gt;
|Butterman&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Lerp&lt;br /&gt;
|[http://grapefruitopia.com/lerp/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|benjymous&lt;br /&gt;
|2D physics puzzle platformer&lt;br /&gt;
|-&lt;br /&gt;
|Lord of the Rings Port&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46792&amp;amp;hl= Link]&lt;br /&gt;
|Unknown&lt;br /&gt;
|Daeglin&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Mental&lt;br /&gt;
|&lt;br /&gt;
|Working build, tested on PC&lt;br /&gt;
|Colin Jones (xentalion)&lt;br /&gt;
|2D Horror Survival Adventure&lt;br /&gt;
|-&lt;br /&gt;
|Monster!&lt;br /&gt;
|[http://christophsdevblog.blogspot.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Chris R&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|NAEV&lt;br /&gt;
|[http://code.google.com/p/naev/ Link]&lt;br /&gt;
|wip (waiting for pandora to finish and test)&lt;br /&gt;
|bobbens&lt;br /&gt;
|Action/RPG/Sim&lt;br /&gt;
|-&lt;br /&gt;
|Nails Adventure&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46961 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|jsmtux/Mr. Gonzo&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenLiero (Liero)&lt;br /&gt;
|&lt;br /&gt;
|working build, need to be polished&lt;br /&gt;
|Pickle&lt;br /&gt;
|Shoot'Em Up&lt;br /&gt;
|-&lt;br /&gt;
|OpenTyrian&lt;br /&gt;
|[http://code.google.com/p/opentyrian/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Shoot'Em Up&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Panic!&lt;br /&gt;
|[http://www.youtube.com/watch?v=y9d6UXhQP6o Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|PokeParadox / GP32X Community&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Pool Panic&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46996 Link]&lt;br /&gt;
|Almost Finished&lt;br /&gt;
|Unfathomable Depths&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|PanMMO - Pandora MMO Game via Internet&lt;br /&gt;
|[http://www.youtube.com/user/enirya Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Enirya&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Powermanga&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Quake 1&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Quake 2&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Quake 3&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Quake 3&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Reminiscence (flashback)&lt;br /&gt;
|[http://cyxdown.free.fr/reminiscence/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Action/Adventure&lt;br /&gt;
|-&lt;br /&gt;
|Rise of The Triad&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47931 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|arrrgh&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Stratagus&lt;br /&gt;
|[http://stratagus.sourceforge.net/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|RTS Engine&lt;br /&gt;
|-&lt;br /&gt;
|Super Lumenal&lt;br /&gt;
|[http://www.youtube.com/watch?v=sZHi3YT3xuE&amp;amp;feature=channel_page Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Adventus&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|SuperTux 1&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1040 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|Platform&lt;br /&gt;
|-&lt;br /&gt;
|SuperTux 2&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1040 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|Platform&lt;br /&gt;
|-&lt;br /&gt;
|Tecnoballz&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Teeworlds&lt;br /&gt;
|[http://www.teeworlds.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|The Mana World&lt;br /&gt;
|[http://www.themanaworld.org/ Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|MMORPG&lt;br /&gt;
|-&lt;br /&gt;
|uHexen2: Hammer of Thyrion &lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Adventus&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Ur-Quan Masters&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43625&amp;amp;st=165&amp;amp;p=673047&amp;amp;#entry673047 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|Space Exploration&lt;br /&gt;
|-&lt;br /&gt;
|Warioland-inspired game&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?/topic/48680-warioland-inspired-game/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|foxblock&lt;br /&gt;
|Platformer&lt;br /&gt;
|-&lt;br /&gt;
|We Come In Peace&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43655 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Otaco&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|Where in world is...&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|Casual&lt;br /&gt;
|-&lt;br /&gt;
|Wizzley Presto and the Mysterious Time Machine&lt;br /&gt;
|[http://www.30daygame.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Craigix, Zodttd, Ruckage&lt;br /&gt;
|Arcade, 30 Day Game Competition&lt;br /&gt;
|-&lt;br /&gt;
|Wolf4SDL (Wolfenstein 3D)&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|XSwing Plus&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?s=&amp;amp;showtopic=43655&amp;amp;view=findpost&amp;amp;p=733021 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Tobse&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|ZEQ2Lite&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47623&amp;amp;hl= Link]&lt;br /&gt;
|Work in progress&lt;br /&gt;
|MDave&lt;br /&gt;
|Dragonball Z Third Person Fighter/Shooter&lt;br /&gt;
|-&lt;br /&gt;
|Zdoom &lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Adventus&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Zombd&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46933 Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|iprice/Mr Gonzo&lt;br /&gt;
|Shoot'Em Up&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Emulators ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Emulated System&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Caprice32&lt;br /&gt;
|Amstrad CPC&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=48140 Link1] [http://www.caprice32.cybercube.com/ Link2]&lt;br /&gt;
|wip&lt;br /&gt;
|hdonk&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DosBox&lt;br /&gt;
|x86 DOS&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FinalBurnAdvance&lt;br /&gt;
|CPS1/2/3/taito...&lt;br /&gt;
|[http://www.youtube.com/watch?v=06hjDLMBaf8 Link]&lt;br /&gt;
|&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Frotz&lt;br /&gt;
|Z-Machine interpreter&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/frotz-2.43.zip Link]&lt;br /&gt;
|working build&lt;br /&gt;
|SteveM&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Fuse&lt;br /&gt;
|ZX Spectrum&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/fuse-0.9.0.zip Link]&lt;br /&gt;
|working build&lt;br /&gt;
|SteveM&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GnGeo&lt;br /&gt;
|SNK NeoGeo&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|gpSP&lt;br /&gt;
|Nintendo GBA&lt;br /&gt;
|&lt;br /&gt;
|wip&lt;br /&gt;
|ZodTTD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Hatari&lt;br /&gt;
|Atari ST&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Jzintv&lt;br /&gt;
|Mattel Intellivision&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=48035 Link]&lt;br /&gt;
|&lt;br /&gt;
|WizardStan&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MAME4All&lt;br /&gt;
|Arcade&lt;br /&gt;
|[http://www.youtube.com/user/franxism Link]&lt;br /&gt;
|&lt;br /&gt;
|Franxis&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Mupen64plus&lt;br /&gt;
|Nintendo 64&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?/topic/49358-mupen64plus/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Ari64&lt;br /&gt;
|Adventus ported graphics plugin&lt;br /&gt;
|-&lt;br /&gt;
|NeoPop&lt;br /&gt;
|SNK NeoGeo Pocket&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NullDC&lt;br /&gt;
|Sega Dreamcast&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?s=&amp;amp;showtopic=47065&amp;amp;view=findpost&amp;amp;p=709910 Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|Zezu / drkIIraziel&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PandaSNES&lt;br /&gt;
|Nintendo SNES&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43213 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Pandora-PSP&lt;br /&gt;
|Sony Playstation Portable&lt;br /&gt;
|[http://jayfoxrox.bplaced.net/pandora-psp/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|[[User:JayFoxRox|JayFoxRox]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PAtari&lt;br /&gt;
|Atari 800&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PicoDrive&lt;br /&gt;
|Sega Genesis/CD/32x&lt;br /&gt;
|[http://www.youtube.com/watch?v=QDbLQI91510 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Notaz&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|PSMS&lt;br /&gt;
|Sega Master System&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PSnes&lt;br /&gt;
|Nintendo SNES&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Psx4All&lt;br /&gt;
|Sony PlayStation&lt;br /&gt;
|[http://www.zodttd.com Link]&lt;br /&gt;
|Not Status, working build&lt;br /&gt;
|ZodTTD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ScummVM&lt;br /&gt;
|x86 Scumm engine games&lt;br /&gt;
|&lt;br /&gt;
|Working build&lt;br /&gt;
|DJ Willis&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|SIMH&lt;br /&gt;
|old hardware&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/simh-3.8.zip Link]&lt;br /&gt;
|working build&lt;br /&gt;
|SteveM&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Temper&lt;br /&gt;
|NEC PC Engine&lt;br /&gt;
|[http://exophase.devzero.co.uk/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Exophase&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|Tempest&lt;br /&gt;
|Atari Jaguar&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43119 Link]&lt;br /&gt;
|&lt;br /&gt;
|Firefox&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Uae4All&lt;br /&gt;
|Amiga&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=44100 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|XMAME&lt;br /&gt;
|Arcade&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Graphic Engines ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|GLES2D&lt;br /&gt;
|&lt;br /&gt;
|Wip&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|OpenGL ES 2D library&lt;br /&gt;
|-&lt;br /&gt;
|GL-WES-v2.0&lt;br /&gt;
|[http://code.google.com/p/gl-wes-v2/ link] &lt;br /&gt;
|Working Build&lt;br /&gt;
|Adventus&lt;br /&gt;
|Opensource OpenGL 2.0 driver built on OpenGL ES 2.0.&lt;br /&gt;
|-&lt;br /&gt;
|Irrlicht&lt;br /&gt;
|[http://irrlicht.sourceforge.net/] [http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=32538&amp;amp;start=45]&lt;br /&gt;
|working build&lt;br /&gt;
|Hybrid&lt;br /&gt;
|3D game engine&lt;br /&gt;
|-&lt;br /&gt;
|NSS Engine&lt;br /&gt;
|[http://www.nosiestastudios.com/wiki/ Link1] [http://www.youtube.com/user/Prompt84 Link2]&lt;br /&gt;
|&lt;br /&gt;
|No Siesta Studios&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OGRE Engine&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46706 Link1] [http://www.youtube.com/watch?v=LDtUE5PIhV0 Link2]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3D real-time renderer&lt;br /&gt;
|-&lt;br /&gt;
|Otaco Glost Engine&lt;br /&gt;
|[http://www.youtube.com/user/otacogloost Link1], [http://www.gp32x.com/board/index.php?/topic/48393-i-did-stuff/page__p__736650&amp;amp;#entry736650 Link2]&lt;br /&gt;
|working&lt;br /&gt;
|Otaco&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Quad-Ren 2D&lt;br /&gt;
|[http://quad-ren.sourceforge.net/index.php Link]&lt;br /&gt;
|&lt;br /&gt;
|Hessiess&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SDL GLES&lt;br /&gt;
|[http://github.com/Cpasjuste/sdl-1.2.13_gles/tree Link]&lt;br /&gt;
|working&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|XreaL&lt;br /&gt;
|[http://xreal.sourceforge.net/xrealwiki/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Pickle [?]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Other programs ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|AbiWord - Word Processor&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|Claws Mail&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|Epiphany Web Bowser&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FireFox - Internet Browser&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|GIMP - Image Editor&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|GMenu&lt;br /&gt;
|[http://www.youtube.com/watch?v=VYzi8gziC7E Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pandora Team&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Gnumeric Spreadsheet - Spreadsheet&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|GoView&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Image Gallery&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Inside The Box&lt;br /&gt;
|[http://www.openpandora.pl Link1] [http://www.youtube.com/watch?v=uLMmJBDEs2E Link2]&lt;br /&gt;
|wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|Pandora e-zine&lt;br /&gt;
|-&lt;br /&gt;
|IRC Client&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LeafPad&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matchbox Shell / GUI&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MPlayer&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=41420 Link1] [http://www.youtube.com/watch?v=v9RAPNa-55k Link2]&lt;br /&gt;
|Working build&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Math-NEON&lt;br /&gt;
|[http://code.google.com/p/math-neon/ Link1]&lt;br /&gt;
|Wip&lt;br /&gt;
|Adventus&lt;br /&gt;
|cmath like library optimised for ARM NEON coprocessor.&lt;br /&gt;
|-&lt;br /&gt;
|Pandaphone&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?/topic/48327-pandaphone/ Link]&lt;br /&gt;
|&lt;br /&gt;
|jb0yx&lt;br /&gt;
|A project to incorporate the Open Pandora handheld device with cell phone technology&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Sync Suite&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|StreaK&lt;br /&gt;
|for Windows 9x/NT&lt;br /&gt;
|-&lt;br /&gt;
|Pangea GUI&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=45631&amp;amp;hl=pangea Link]&lt;br /&gt;
|WIP&lt;br /&gt;
|efegea&lt;br /&gt;
|Gmenu alternative&lt;br /&gt;
|-&lt;br /&gt;
|PDM&lt;br /&gt;
|[http://github.com/Cpasjuste/pdm/tree Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Light desktop manager for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|PGui&lt;br /&gt;
|[http://github.com/Cpasjuste/pgui/tree Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Standard emulator fronted for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|Pidgin - IM (for Angstrom OpenPandora)&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PMenu&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Minimal Menu for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|PND Maker (for Windows 9x/NT)&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|StreaK&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Qemu&lt;br /&gt;
|[http://www.nongnu.org/qemu/status.html Link]&lt;br /&gt;
|testing build&lt;br /&gt;
|Fabrice Bellard&lt;br /&gt;
|open source machine emulator and virtualizer&lt;br /&gt;
|-&lt;br /&gt;
|Scale&lt;br /&gt;
|[http://www.youtube.com/user/Zoxc64 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Zoxc64&lt;br /&gt;
|Minimal Menu for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|Simple Dev Studio for Pandora&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|for Windows 9x/NT&lt;br /&gt;
|-&lt;br /&gt;
|[[TINXL]]&lt;br /&gt;
|[[TINXL]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Application stack for multiplayer internet games&lt;br /&gt;
|-&lt;br /&gt;
|[[TS2A]]&lt;br /&gt;
|[[TS2A]]&lt;br /&gt;
|Documentation only&lt;br /&gt;
||[[User:JayFoxRox|JayFoxRox]]&lt;br /&gt;
|Teamspeak 2 Alternative Client / Server, Needs developer&lt;br /&gt;
|-&lt;br /&gt;
|XMMS&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ZiB Emulator Frontend&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47203 Link1] [http://www.youtube.com/watch?v=UJvON8lCM3M Link2]&lt;br /&gt;
|&lt;br /&gt;
|Aimless_E&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Demos / Technical Demos for OpenPandora ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Cell Shading&lt;br /&gt;
|[http://www.youtube.com/watch?v=cpAj0jHglGw Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Demo with MP3 Playback&lt;br /&gt;
|[http://www.youtube.com/watch?v=hkx18kruRJs Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Skull Demo&lt;br /&gt;
|[http://www.youtube.com/watch?v=qG7EDaZpyOo Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|WaveDemo&lt;br /&gt;
|[http://www.youtube.com/watch?v=4wgEHFCq9Lo Link]&lt;br /&gt;
|Working&lt;br /&gt;
|Otaco&lt;br /&gt;
|&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Software_projects&amp;diff=1539</id>
		<title>Software projects</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Software_projects&amp;diff=1539"/>
		<updated>2009-10-22T06:47:00Z</updated>

		<summary type="html">&lt;p&gt;Adventus: /* Graphic Engines */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See the [[Port Requests]] article for open-source projects which ''could'' be ported but have not been taken on by anyone yet.&lt;br /&gt;
&lt;br /&gt;
== Operating Systems ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Android Omap&lt;br /&gt;
|[http://elinux.org/Android_on_OMAP Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Angstrom Linux&lt;br /&gt;
|[http://www.angstrom-distribution.org/ Link]&lt;br /&gt;
|Working build, not completed&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|AROS Arm&lt;br /&gt;
|[http://projects.powerdeveloper.org/project/imx515/735 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FreeBSD&lt;br /&gt;
|[http://wiki.freebsd.org/FreeBSD/arm/OMAP Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Gentoo Linux&lt;br /&gt;
|[http://gentoo.openpandora.org Link]&lt;br /&gt;
|Working build, not completed&lt;br /&gt;
|javaJake, Viridior&lt;br /&gt;
|IRC: (FreeNode) #gentoo-pandora&lt;br /&gt;
|-&lt;br /&gt;
|HaikuOS&lt;br /&gt;
|[http://www.haiku-os.org Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ubuntu ARM&lt;br /&gt;
|[http://www.ubuntu.com/products/whatisubuntu/arm Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Fedora ARM&lt;br /&gt;
|&lt;br /&gt;
|Unknown&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Games ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Abuse&lt;br /&gt;
|[http://abuse.zoy.org/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|2D Platform&lt;br /&gt;
|-&lt;br /&gt;
|Battle for Wesnoth v1.6.2&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47936 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|BattleJewels&lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Skeezix&lt;br /&gt;
|Logical&lt;br /&gt;
|-&lt;br /&gt;
|BlobWars&lt;br /&gt;
|[http://www.parallelrealities.co.uk/projects/blobWars.php Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|2D Platform&lt;br /&gt;
|-&lt;br /&gt;
|Caster&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46813 Link]&lt;br /&gt;
|Working build (tested on PC)&lt;br /&gt;
|Svartalf&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Chaotic Vortex&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?/topic/49754-chaotic-vortex-dual-stick-arena-shooter Link]&lt;br /&gt;
|WIP&lt;br /&gt;
|Ruben&lt;br /&gt;
|Dual stick 2D shooter&lt;br /&gt;
|-&lt;br /&gt;
|Descent 1 (d1x-rebirth engine)&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1032 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPS&lt;br /&gt;
|-&lt;br /&gt;
|Descent 2 (d2x-rebirth engine)&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1032 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPS&lt;br /&gt;
|-&lt;br /&gt;
|FHeroes Port (Heroes Of Might And Magic 2)&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47553 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|FreeCiv 2.1.9&lt;br /&gt;
|[http://freeciv.wikia.com/wiki/Main_Page Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|Galactic Artifact&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46836 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Trevor Bradley&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|Giannas Return&lt;br /&gt;
|[http://www.gianas-return.de/ Link]&lt;br /&gt;
|Working&lt;br /&gt;
|Giannas Team&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Gravity Blocks&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47662 Link]&lt;br /&gt;
|wip (early in developement)&lt;br /&gt;
|Awekening&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Homeworld Port&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47565 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|LinuxHacker&lt;br /&gt;
|Simulation&lt;br /&gt;
|-&lt;br /&gt;
|Human Condition (was TINCS)&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46487 Link1][http://www.youtube.com/user/ButtermanHimself Link2]&lt;br /&gt;
|wip&lt;br /&gt;
|Butterman&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Lerp&lt;br /&gt;
|[http://grapefruitopia.com/lerp/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|benjymous&lt;br /&gt;
|2D physics puzzle platformer&lt;br /&gt;
|-&lt;br /&gt;
|Lord of the Rings Port&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46792&amp;amp;hl= Link]&lt;br /&gt;
|Unknown&lt;br /&gt;
|Daeglin&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Mental&lt;br /&gt;
|&lt;br /&gt;
|Working build, tested on PC&lt;br /&gt;
|Colin Jones (xentalion)&lt;br /&gt;
|2D Horror Survival Adventure&lt;br /&gt;
|-&lt;br /&gt;
|Monster!&lt;br /&gt;
|[http://christophsdevblog.blogspot.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Chris R&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|NAEV&lt;br /&gt;
|[http://code.google.com/p/naev/ Link]&lt;br /&gt;
|wip (waiting for pandora to finish and test)&lt;br /&gt;
|bobbens&lt;br /&gt;
|Action/RPG/Sim&lt;br /&gt;
|-&lt;br /&gt;
|Nails Adventure&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46961 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|jsmtux/Mr. Gonzo&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenLiero (Liero)&lt;br /&gt;
|&lt;br /&gt;
|working build, need to be polished&lt;br /&gt;
|Pickle&lt;br /&gt;
|Shoot'Em Up&lt;br /&gt;
|-&lt;br /&gt;
|OpenTyrian&lt;br /&gt;
|[http://code.google.com/p/opentyrian/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Shoot'Em Up&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Panic!&lt;br /&gt;
|[http://www.youtube.com/watch?v=y9d6UXhQP6o Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|PokeParadox / GP32X Community&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Pool Panic&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46996 Link]&lt;br /&gt;
|Almost Finished&lt;br /&gt;
|Unfathomable Depths&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|PanMMO - Pandora MMO Game via Internet&lt;br /&gt;
|[http://www.youtube.com/user/enirya Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Enirya&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Powermanga&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Quake 1&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Quake 2&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Quake 3&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Quake 3&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Reminiscence (flashback)&lt;br /&gt;
|[http://cyxdown.free.fr/reminiscence/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Action/Adventure&lt;br /&gt;
|-&lt;br /&gt;
|Rise of The Triad&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47931 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|arrrgh&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Stratagus&lt;br /&gt;
|[http://stratagus.sourceforge.net/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|RTS Engine&lt;br /&gt;
|-&lt;br /&gt;
|Super Lumenal&lt;br /&gt;
|[http://www.youtube.com/watch?v=sZHi3YT3xuE&amp;amp;feature=channel_page Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Adventus&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|SuperTux 1&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1040 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|Platform&lt;br /&gt;
|-&lt;br /&gt;
|SuperTux 2&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1040 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|Platform&lt;br /&gt;
|-&lt;br /&gt;
|Tecnoballz&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Teeworlds&lt;br /&gt;
|[http://www.teeworlds.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|The Mana World&lt;br /&gt;
|[http://www.themanaworld.org/ Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|MMORPG&lt;br /&gt;
|-&lt;br /&gt;
|uHexen2: Hammer of Thyrion &lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Adventus&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Ur-Quan Masters&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43625&amp;amp;st=165&amp;amp;p=673047&amp;amp;#entry673047 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|Space Exploration&lt;br /&gt;
|-&lt;br /&gt;
|Warioland-inspired game&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?/topic/48680-warioland-inspired-game/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|foxblock&lt;br /&gt;
|Platformer&lt;br /&gt;
|-&lt;br /&gt;
|We Come In Peace&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43655 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Otaco&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|Where in world is...&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|Casual&lt;br /&gt;
|-&lt;br /&gt;
|Wizzley Presto and the Mysterious Time Machine&lt;br /&gt;
|[http://www.30daygame.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Craigix, Zodttd, Ruckage&lt;br /&gt;
|Arcade, 30 Day Game Competition&lt;br /&gt;
|-&lt;br /&gt;
|Wolf4SDL (Wolfenstein 3D)&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|XSwing Plus&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?s=&amp;amp;showtopic=43655&amp;amp;view=findpost&amp;amp;p=733021 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Tobse&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|ZEQ2Lite&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47623&amp;amp;hl= Link]&lt;br /&gt;
|Work in progress&lt;br /&gt;
|MDave&lt;br /&gt;
|Dragonball Z Third Person Fighter/Shooter&lt;br /&gt;
|-&lt;br /&gt;
|Zdoom &lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Adventus&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Zombd&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46933 Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|iprice/Mr Gonzo&lt;br /&gt;
|Shoot'Em Up&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Emulators ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Emulated System&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Caprice32&lt;br /&gt;
|Amstrad CPC&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=48140 Link1] [http://www.caprice32.cybercube.com/ Link2]&lt;br /&gt;
|wip&lt;br /&gt;
|hdonk&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DosBox&lt;br /&gt;
|x86 DOS&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FinalBurnAdvance&lt;br /&gt;
|CPS1/2/3/taito...&lt;br /&gt;
|[http://www.youtube.com/watch?v=06hjDLMBaf8 Link]&lt;br /&gt;
|&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Frotz&lt;br /&gt;
|Z-Machine interpreter&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/frotz-2.43.zip Link]&lt;br /&gt;
|working build&lt;br /&gt;
|SteveM&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Fuse&lt;br /&gt;
|ZX Spectrum&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/fuse-0.9.0.zip Link]&lt;br /&gt;
|working build&lt;br /&gt;
|SteveM&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GnGeo&lt;br /&gt;
|SNK NeoGeo&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|gpSP&lt;br /&gt;
|Nintendo GBA&lt;br /&gt;
|&lt;br /&gt;
|wip&lt;br /&gt;
|ZodTTD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Hatari&lt;br /&gt;
|Atari ST&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Jzintv&lt;br /&gt;
|Mattel Intellivision&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=48035 Link]&lt;br /&gt;
|&lt;br /&gt;
|WizardStan&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MAME4All&lt;br /&gt;
|Arcade&lt;br /&gt;
|[http://www.youtube.com/user/franxism Link]&lt;br /&gt;
|&lt;br /&gt;
|Franxis&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Mupen64plus&lt;br /&gt;
|Nintendo 64&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?/topic/49358-mupen64plus/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Ari64&lt;br /&gt;
|Adventus ported graphics plugin&lt;br /&gt;
|-&lt;br /&gt;
|NeoPop&lt;br /&gt;
|SNK NeoGeo Pocket&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NullDC&lt;br /&gt;
|Sega Dreamcast&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?s=&amp;amp;showtopic=47065&amp;amp;view=findpost&amp;amp;p=709910 Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|Zezu / drkIIraziel&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PandaSNES&lt;br /&gt;
|Nintendo SNES&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43213 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Pandora-PSP&lt;br /&gt;
|Sony Playstation Portable&lt;br /&gt;
|[http://jayfoxrox.bplaced.net/pandora-psp/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|[[User:JayFoxRox|JayFoxRox]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PAtari&lt;br /&gt;
|Atari 800&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PicoDrive&lt;br /&gt;
|Sega Genesis/CD/32x&lt;br /&gt;
|[http://www.youtube.com/watch?v=QDbLQI91510 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Notaz&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|PSMS&lt;br /&gt;
|Sega Master System&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PSnes&lt;br /&gt;
|Nintendo SNES&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Psx4All&lt;br /&gt;
|Sony PlayStation&lt;br /&gt;
|[http://www.zodttd.com Link]&lt;br /&gt;
|Not Status, working build&lt;br /&gt;
|ZodTTD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ScummVM&lt;br /&gt;
|x86 Scumm engine games&lt;br /&gt;
|&lt;br /&gt;
|Working build&lt;br /&gt;
|DJ Willis&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|SIMH&lt;br /&gt;
|old hardware&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/simh-3.8.zip Link]&lt;br /&gt;
|working build&lt;br /&gt;
|SteveM&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Temper&lt;br /&gt;
|NEC PC Engine&lt;br /&gt;
|[http://exophase.devzero.co.uk/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Exophase&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|Tempest&lt;br /&gt;
|Atari Jaguar&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43119 Link]&lt;br /&gt;
|&lt;br /&gt;
|Firefox&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Uae4All&lt;br /&gt;
|Amiga&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=44100 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|XMAME&lt;br /&gt;
|Arcade&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Graphic Engines ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|GLES2D&lt;br /&gt;
|&lt;br /&gt;
|Wip&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|OpenGL ES 2D library&lt;br /&gt;
|-&lt;br /&gt;
|GL-WES-v2.0&lt;br /&gt;
|[http://code.google.com/p/gl-wes-v2/ link] &lt;br /&gt;
|Working Build&lt;br /&gt;
|Adventus&lt;br /&gt;
|Opensource OpenGL 2.0 driver built on OpenGL ES 2.0.&lt;br /&gt;
|-&lt;br /&gt;
|Irrlicht&lt;br /&gt;
|[http://irrlicht.sourceforge.net/] [http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=32538&amp;amp;start=45]&lt;br /&gt;
|working build&lt;br /&gt;
|Hybrid&lt;br /&gt;
|3D game engine&lt;br /&gt;
|-&lt;br /&gt;
|NSS Engine&lt;br /&gt;
|[http://www.nosiestastudios.com/wiki/ Link1] [http://www.youtube.com/user/Prompt84 Link2]&lt;br /&gt;
|&lt;br /&gt;
|No Siesta Studios&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OGRE Engine&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46706 Link1] [http://www.youtube.com/watch?v=LDtUE5PIhV0 Link2]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3D real-time renderer&lt;br /&gt;
|-&lt;br /&gt;
|Otaco Glost Engine&lt;br /&gt;
|[http://www.youtube.com/user/otacogloost Link1], [http://www.gp32x.com/board/index.php?/topic/48393-i-did-stuff/page__p__736650&amp;amp;#entry736650 Link2]&lt;br /&gt;
|working&lt;br /&gt;
|Otaco&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Quad-Ren 2D&lt;br /&gt;
|[http://quad-ren.sourceforge.net/index.php Link]&lt;br /&gt;
|&lt;br /&gt;
|Hessiess&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SDL GLES&lt;br /&gt;
|[http://github.com/Cpasjuste/sdl-1.2.13_gles/tree Link]&lt;br /&gt;
|working&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|XreaL&lt;br /&gt;
|[http://xreal.sourceforge.net/xrealwiki/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Pickle [?]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Other programs ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|AbiWord - Word Processor&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|Claws Mail&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|Epiphany Web Bowser&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FireFox - Internet Browser&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|GIMP - Image Editor&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|GMenu&lt;br /&gt;
|[http://www.youtube.com/watch?v=VYzi8gziC7E Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pandora Team&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Gnumeric Spreadsheet - Spreadsheet&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|GoView&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Image Gallery&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Inside The Box&lt;br /&gt;
|[http://www.openpandora.pl Link1] [http://www.youtube.com/watch?v=uLMmJBDEs2E Link2]&lt;br /&gt;
|wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|Pandora e-zine&lt;br /&gt;
|-&lt;br /&gt;
|IRC Client&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LeafPad&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matchbox Shell / GUI&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MPlayer&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=41420 Link1] [http://www.youtube.com/watch?v=v9RAPNa-55k Link2]&lt;br /&gt;
|Working build&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Math-NEON&lt;br /&gt;
|[http://code.google.com/p/math-neon/ Link1]&lt;br /&gt;
|Wip&lt;br /&gt;
|Adventus&lt;br /&gt;
|cmath like library optimised for ARM NEON coprocessor.&lt;br /&gt;
|-&lt;br /&gt;
|Pandaphone&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?/topic/48327-pandaphone/ Link]&lt;br /&gt;
|&lt;br /&gt;
|jb0yx&lt;br /&gt;
|A project to incorporate the Open Pandora handheld device with cell phone technology&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Sync Suite&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|StreaK&lt;br /&gt;
|for Windows 9x/NT&lt;br /&gt;
|-&lt;br /&gt;
|Pangea GUI&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=45631&amp;amp;hl=pangea Link]&lt;br /&gt;
|WIP&lt;br /&gt;
|efegea&lt;br /&gt;
|Gmenu alternative&lt;br /&gt;
|-&lt;br /&gt;
|PDM&lt;br /&gt;
|[http://github.com/Cpasjuste/pdm/tree Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Light desktop manager for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|PGui&lt;br /&gt;
|[http://github.com/Cpasjuste/pgui/tree Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Standard emulator fronted for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|Pidgin - IM (for Angstrom OpenPandora)&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PMenu&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Minimal Menu for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|PND Maker (for Windows 9x/NT)&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|StreaK&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Qemu&lt;br /&gt;
|[http://www.nongnu.org/qemu/status.html Link]&lt;br /&gt;
|testing build&lt;br /&gt;
|Fabrice Bellard&lt;br /&gt;
|open source machine emulator and virtualizer&lt;br /&gt;
|-&lt;br /&gt;
|Scale&lt;br /&gt;
|[http://www.youtube.com/user/Zoxc64 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Zoxc64&lt;br /&gt;
|Minimal Menu for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|Simple Dev Studio for Pandora&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|for Windows 9x/NT&lt;br /&gt;
|-&lt;br /&gt;
|[[TINXL]]&lt;br /&gt;
|[[TINXL]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Application stack for multiplayer internet games&lt;br /&gt;
|-&lt;br /&gt;
|[[TS2A]]&lt;br /&gt;
|[[TS2A]]&lt;br /&gt;
|Documentation only&lt;br /&gt;
||[[User:JayFoxRox|JayFoxRox]]&lt;br /&gt;
|Teamspeak 2 Alternative Client / Server, Needs developer&lt;br /&gt;
|-&lt;br /&gt;
|XMMS&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ZiB Emulator Frontend&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47203 Link1] [http://www.youtube.com/watch?v=UJvON8lCM3M Link2]&lt;br /&gt;
|&lt;br /&gt;
|Aimless_E&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Demos / Technical Demos for OpenPandora ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Cell Shading&lt;br /&gt;
|[http://www.youtube.com/watch?v=cpAj0jHglGw Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Demo with MP3 Playback&lt;br /&gt;
|[http://www.youtube.com/watch?v=hkx18kruRJs Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Skull Demo&lt;br /&gt;
|[http://www.youtube.com/watch?v=qG7EDaZpyOo Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|WaveDemo&lt;br /&gt;
|[http://www.youtube.com/watch?v=4wgEHFCq9Lo Link]&lt;br /&gt;
|Working&lt;br /&gt;
|Otaco&lt;br /&gt;
|&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Software_projects&amp;diff=1538</id>
		<title>Software projects</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Software_projects&amp;diff=1538"/>
		<updated>2009-10-22T06:45:04Z</updated>

		<summary type="html">&lt;p&gt;Adventus: /* Emulators */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See the [[Port Requests]] article for open-source projects which ''could'' be ported but have not been taken on by anyone yet.&lt;br /&gt;
&lt;br /&gt;
== Operating Systems ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Android Omap&lt;br /&gt;
|[http://elinux.org/Android_on_OMAP Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Angstrom Linux&lt;br /&gt;
|[http://www.angstrom-distribution.org/ Link]&lt;br /&gt;
|Working build, not completed&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|AROS Arm&lt;br /&gt;
|[http://projects.powerdeveloper.org/project/imx515/735 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FreeBSD&lt;br /&gt;
|[http://wiki.freebsd.org/FreeBSD/arm/OMAP Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Gentoo Linux&lt;br /&gt;
|[http://gentoo.openpandora.org Link]&lt;br /&gt;
|Working build, not completed&lt;br /&gt;
|javaJake, Viridior&lt;br /&gt;
|IRC: (FreeNode) #gentoo-pandora&lt;br /&gt;
|-&lt;br /&gt;
|HaikuOS&lt;br /&gt;
|[http://www.haiku-os.org Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ubuntu ARM&lt;br /&gt;
|[http://www.ubuntu.com/products/whatisubuntu/arm Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Fedora ARM&lt;br /&gt;
|&lt;br /&gt;
|Unknown&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Games ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Abuse&lt;br /&gt;
|[http://abuse.zoy.org/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|2D Platform&lt;br /&gt;
|-&lt;br /&gt;
|Battle for Wesnoth v1.6.2&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47936 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|BattleJewels&lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Skeezix&lt;br /&gt;
|Logical&lt;br /&gt;
|-&lt;br /&gt;
|BlobWars&lt;br /&gt;
|[http://www.parallelrealities.co.uk/projects/blobWars.php Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|2D Platform&lt;br /&gt;
|-&lt;br /&gt;
|Caster&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46813 Link]&lt;br /&gt;
|Working build (tested on PC)&lt;br /&gt;
|Svartalf&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Chaotic Vortex&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?/topic/49754-chaotic-vortex-dual-stick-arena-shooter Link]&lt;br /&gt;
|WIP&lt;br /&gt;
|Ruben&lt;br /&gt;
|Dual stick 2D shooter&lt;br /&gt;
|-&lt;br /&gt;
|Descent 1 (d1x-rebirth engine)&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1032 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPS&lt;br /&gt;
|-&lt;br /&gt;
|Descent 2 (d2x-rebirth engine)&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1032 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPS&lt;br /&gt;
|-&lt;br /&gt;
|FHeroes Port (Heroes Of Might And Magic 2)&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47553 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|FreeCiv 2.1.9&lt;br /&gt;
|[http://freeciv.wikia.com/wiki/Main_Page Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|Galactic Artifact&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46836 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Trevor Bradley&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|Giannas Return&lt;br /&gt;
|[http://www.gianas-return.de/ Link]&lt;br /&gt;
|Working&lt;br /&gt;
|Giannas Team&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Gravity Blocks&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47662 Link]&lt;br /&gt;
|wip (early in developement)&lt;br /&gt;
|Awekening&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Homeworld Port&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47565 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|LinuxHacker&lt;br /&gt;
|Simulation&lt;br /&gt;
|-&lt;br /&gt;
|Human Condition (was TINCS)&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46487 Link1][http://www.youtube.com/user/ButtermanHimself Link2]&lt;br /&gt;
|wip&lt;br /&gt;
|Butterman&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Lerp&lt;br /&gt;
|[http://grapefruitopia.com/lerp/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|benjymous&lt;br /&gt;
|2D physics puzzle platformer&lt;br /&gt;
|-&lt;br /&gt;
|Lord of the Rings Port&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46792&amp;amp;hl= Link]&lt;br /&gt;
|Unknown&lt;br /&gt;
|Daeglin&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Mental&lt;br /&gt;
|&lt;br /&gt;
|Working build, tested on PC&lt;br /&gt;
|Colin Jones (xentalion)&lt;br /&gt;
|2D Horror Survival Adventure&lt;br /&gt;
|-&lt;br /&gt;
|Monster!&lt;br /&gt;
|[http://christophsdevblog.blogspot.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Chris R&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|NAEV&lt;br /&gt;
|[http://code.google.com/p/naev/ Link]&lt;br /&gt;
|wip (waiting for pandora to finish and test)&lt;br /&gt;
|bobbens&lt;br /&gt;
|Action/RPG/Sim&lt;br /&gt;
|-&lt;br /&gt;
|Nails Adventure&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46961 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|jsmtux/Mr. Gonzo&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenLiero (Liero)&lt;br /&gt;
|&lt;br /&gt;
|working build, need to be polished&lt;br /&gt;
|Pickle&lt;br /&gt;
|Shoot'Em Up&lt;br /&gt;
|-&lt;br /&gt;
|OpenTyrian&lt;br /&gt;
|[http://code.google.com/p/opentyrian/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Shoot'Em Up&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Panic!&lt;br /&gt;
|[http://www.youtube.com/watch?v=y9d6UXhQP6o Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|PokeParadox / GP32X Community&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Pool Panic&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46996 Link]&lt;br /&gt;
|Almost Finished&lt;br /&gt;
|Unfathomable Depths&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|PanMMO - Pandora MMO Game via Internet&lt;br /&gt;
|[http://www.youtube.com/user/enirya Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Enirya&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Powermanga&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Quake 1&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Quake 2&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Quake 3&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Quake 3&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Reminiscence (flashback)&lt;br /&gt;
|[http://cyxdown.free.fr/reminiscence/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Action/Adventure&lt;br /&gt;
|-&lt;br /&gt;
|Rise of The Triad&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47931 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|arrrgh&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Stratagus&lt;br /&gt;
|[http://stratagus.sourceforge.net/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|RTS Engine&lt;br /&gt;
|-&lt;br /&gt;
|Super Lumenal&lt;br /&gt;
|[http://www.youtube.com/watch?v=sZHi3YT3xuE&amp;amp;feature=channel_page Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Adventus&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|SuperTux 1&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1040 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|Platform&lt;br /&gt;
|-&lt;br /&gt;
|SuperTux 2&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1040 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|Platform&lt;br /&gt;
|-&lt;br /&gt;
|Tecnoballz&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Teeworlds&lt;br /&gt;
|[http://www.teeworlds.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|The Mana World&lt;br /&gt;
|[http://www.themanaworld.org/ Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|MMORPG&lt;br /&gt;
|-&lt;br /&gt;
|uHexen2: Hammer of Thyrion &lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Adventus&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Ur-Quan Masters&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43625&amp;amp;st=165&amp;amp;p=673047&amp;amp;#entry673047 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|Space Exploration&lt;br /&gt;
|-&lt;br /&gt;
|Warioland-inspired game&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?/topic/48680-warioland-inspired-game/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|foxblock&lt;br /&gt;
|Platformer&lt;br /&gt;
|-&lt;br /&gt;
|We Come In Peace&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43655 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Otaco&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|Where in world is...&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|Casual&lt;br /&gt;
|-&lt;br /&gt;
|Wizzley Presto and the Mysterious Time Machine&lt;br /&gt;
|[http://www.30daygame.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Craigix, Zodttd, Ruckage&lt;br /&gt;
|Arcade, 30 Day Game Competition&lt;br /&gt;
|-&lt;br /&gt;
|Wolf4SDL (Wolfenstein 3D)&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|XSwing Plus&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?s=&amp;amp;showtopic=43655&amp;amp;view=findpost&amp;amp;p=733021 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Tobse&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|ZEQ2Lite&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47623&amp;amp;hl= Link]&lt;br /&gt;
|Work in progress&lt;br /&gt;
|MDave&lt;br /&gt;
|Dragonball Z Third Person Fighter/Shooter&lt;br /&gt;
|-&lt;br /&gt;
|Zdoom &lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Adventus&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Zombd&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46933 Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|iprice/Mr Gonzo&lt;br /&gt;
|Shoot'Em Up&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Emulators ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Emulated System&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Caprice32&lt;br /&gt;
|Amstrad CPC&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=48140 Link1] [http://www.caprice32.cybercube.com/ Link2]&lt;br /&gt;
|wip&lt;br /&gt;
|hdonk&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DosBox&lt;br /&gt;
|x86 DOS&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FinalBurnAdvance&lt;br /&gt;
|CPS1/2/3/taito...&lt;br /&gt;
|[http://www.youtube.com/watch?v=06hjDLMBaf8 Link]&lt;br /&gt;
|&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Frotz&lt;br /&gt;
|Z-Machine interpreter&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/frotz-2.43.zip Link]&lt;br /&gt;
|working build&lt;br /&gt;
|SteveM&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Fuse&lt;br /&gt;
|ZX Spectrum&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/fuse-0.9.0.zip Link]&lt;br /&gt;
|working build&lt;br /&gt;
|SteveM&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GnGeo&lt;br /&gt;
|SNK NeoGeo&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|gpSP&lt;br /&gt;
|Nintendo GBA&lt;br /&gt;
|&lt;br /&gt;
|wip&lt;br /&gt;
|ZodTTD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Hatari&lt;br /&gt;
|Atari ST&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Jzintv&lt;br /&gt;
|Mattel Intellivision&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=48035 Link]&lt;br /&gt;
|&lt;br /&gt;
|WizardStan&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MAME4All&lt;br /&gt;
|Arcade&lt;br /&gt;
|[http://www.youtube.com/user/franxism Link]&lt;br /&gt;
|&lt;br /&gt;
|Franxis&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Mupen64plus&lt;br /&gt;
|Nintendo 64&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?/topic/49358-mupen64plus/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Ari64&lt;br /&gt;
|Adventus ported graphics plugin&lt;br /&gt;
|-&lt;br /&gt;
|NeoPop&lt;br /&gt;
|SNK NeoGeo Pocket&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NullDC&lt;br /&gt;
|Sega Dreamcast&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?s=&amp;amp;showtopic=47065&amp;amp;view=findpost&amp;amp;p=709910 Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|Zezu / drkIIraziel&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PandaSNES&lt;br /&gt;
|Nintendo SNES&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43213 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Pandora-PSP&lt;br /&gt;
|Sony Playstation Portable&lt;br /&gt;
|[http://jayfoxrox.bplaced.net/pandora-psp/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|[[User:JayFoxRox|JayFoxRox]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PAtari&lt;br /&gt;
|Atari 800&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PicoDrive&lt;br /&gt;
|Sega Genesis/CD/32x&lt;br /&gt;
|[http://www.youtube.com/watch?v=QDbLQI91510 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Notaz&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|PSMS&lt;br /&gt;
|Sega Master System&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PSnes&lt;br /&gt;
|Nintendo SNES&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Psx4All&lt;br /&gt;
|Sony PlayStation&lt;br /&gt;
|[http://www.zodttd.com Link]&lt;br /&gt;
|Not Status, working build&lt;br /&gt;
|ZodTTD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ScummVM&lt;br /&gt;
|x86 Scumm engine games&lt;br /&gt;
|&lt;br /&gt;
|Working build&lt;br /&gt;
|DJ Willis&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|SIMH&lt;br /&gt;
|old hardware&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/simh-3.8.zip Link]&lt;br /&gt;
|working build&lt;br /&gt;
|SteveM&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Temper&lt;br /&gt;
|NEC PC Engine&lt;br /&gt;
|[http://exophase.devzero.co.uk/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Exophase&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|Tempest&lt;br /&gt;
|Atari Jaguar&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43119 Link]&lt;br /&gt;
|&lt;br /&gt;
|Firefox&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Uae4All&lt;br /&gt;
|Amiga&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=44100 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|XMAME&lt;br /&gt;
|Arcade&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Graphic Engines ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|GemRB (Infinity Engine)&lt;br /&gt;
|&lt;br /&gt;
|wip&lt;br /&gt;
|Adventus&lt;br /&gt;
|open-source implementation of Bioware's Infinity Engine, supports games including Baldurs Gate 2 and Planescape Torment.&lt;br /&gt;
|-&lt;br /&gt;
|GLES2D&lt;br /&gt;
|&lt;br /&gt;
|Wip&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|OpenGL ES 2D library&lt;br /&gt;
|-&lt;br /&gt;
|GL-WES-v2.0&lt;br /&gt;
|[http://code.google.com/p/gl-wes-v2/ link] &lt;br /&gt;
|Working Build&lt;br /&gt;
|Adventus&lt;br /&gt;
|Opensource OpenGL 2.0 driver built on OpenGL ES 2.0.&lt;br /&gt;
|-&lt;br /&gt;
|Irrlicht&lt;br /&gt;
|[http://irrlicht.sourceforge.net/] [http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=32538&amp;amp;start=45]&lt;br /&gt;
|working build&lt;br /&gt;
|Hybrid&lt;br /&gt;
|3D game engine&lt;br /&gt;
|-&lt;br /&gt;
|NSS Engine&lt;br /&gt;
|[http://www.nosiestastudios.com/wiki/ Link1] [http://www.youtube.com/user/Prompt84 Link2]&lt;br /&gt;
|&lt;br /&gt;
|No Siesta Studios&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OGRE Engine&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46706 Link1] [http://www.youtube.com/watch?v=LDtUE5PIhV0 Link2]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3D real-time renderer&lt;br /&gt;
|-&lt;br /&gt;
|Otaco Glost Engine&lt;br /&gt;
|[http://www.youtube.com/user/otacogloost Link1], [http://www.gp32x.com/board/index.php?/topic/48393-i-did-stuff/page__p__736650&amp;amp;#entry736650 Link2]&lt;br /&gt;
|working&lt;br /&gt;
|Otaco&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Quad-Ren 2D&lt;br /&gt;
|[http://quad-ren.sourceforge.net/index.php Link]&lt;br /&gt;
|&lt;br /&gt;
|Hessiess&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SDL GLES&lt;br /&gt;
|[http://github.com/Cpasjuste/sdl-1.2.13_gles/tree Link]&lt;br /&gt;
|working&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|XreaL&lt;br /&gt;
|[http://xreal.sourceforge.net/xrealwiki/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Pickle [?]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Other programs ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|AbiWord - Word Processor&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|Claws Mail&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|Epiphany Web Bowser&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FireFox - Internet Browser&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|GIMP - Image Editor&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|GMenu&lt;br /&gt;
|[http://www.youtube.com/watch?v=VYzi8gziC7E Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pandora Team&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Gnumeric Spreadsheet - Spreadsheet&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|GoView&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Image Gallery&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Inside The Box&lt;br /&gt;
|[http://www.openpandora.pl Link1] [http://www.youtube.com/watch?v=uLMmJBDEs2E Link2]&lt;br /&gt;
|wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|Pandora e-zine&lt;br /&gt;
|-&lt;br /&gt;
|IRC Client&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LeafPad&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matchbox Shell / GUI&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MPlayer&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=41420 Link1] [http://www.youtube.com/watch?v=v9RAPNa-55k Link2]&lt;br /&gt;
|Working build&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Math-NEON&lt;br /&gt;
|[http://code.google.com/p/math-neon/ Link1]&lt;br /&gt;
|Wip&lt;br /&gt;
|Adventus&lt;br /&gt;
|cmath like library optimised for ARM NEON coprocessor.&lt;br /&gt;
|-&lt;br /&gt;
|Pandaphone&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?/topic/48327-pandaphone/ Link]&lt;br /&gt;
|&lt;br /&gt;
|jb0yx&lt;br /&gt;
|A project to incorporate the Open Pandora handheld device with cell phone technology&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Sync Suite&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|StreaK&lt;br /&gt;
|for Windows 9x/NT&lt;br /&gt;
|-&lt;br /&gt;
|Pangea GUI&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=45631&amp;amp;hl=pangea Link]&lt;br /&gt;
|WIP&lt;br /&gt;
|efegea&lt;br /&gt;
|Gmenu alternative&lt;br /&gt;
|-&lt;br /&gt;
|PDM&lt;br /&gt;
|[http://github.com/Cpasjuste/pdm/tree Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Light desktop manager for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|PGui&lt;br /&gt;
|[http://github.com/Cpasjuste/pgui/tree Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Standard emulator fronted for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|Pidgin - IM (for Angstrom OpenPandora)&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PMenu&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Minimal Menu for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|PND Maker (for Windows 9x/NT)&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|StreaK&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Qemu&lt;br /&gt;
|[http://www.nongnu.org/qemu/status.html Link]&lt;br /&gt;
|testing build&lt;br /&gt;
|Fabrice Bellard&lt;br /&gt;
|open source machine emulator and virtualizer&lt;br /&gt;
|-&lt;br /&gt;
|Scale&lt;br /&gt;
|[http://www.youtube.com/user/Zoxc64 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Zoxc64&lt;br /&gt;
|Minimal Menu for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|Simple Dev Studio for Pandora&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|for Windows 9x/NT&lt;br /&gt;
|-&lt;br /&gt;
|[[TINXL]]&lt;br /&gt;
|[[TINXL]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Application stack for multiplayer internet games&lt;br /&gt;
|-&lt;br /&gt;
|[[TS2A]]&lt;br /&gt;
|[[TS2A]]&lt;br /&gt;
|Documentation only&lt;br /&gt;
||[[User:JayFoxRox|JayFoxRox]]&lt;br /&gt;
|Teamspeak 2 Alternative Client / Server, Needs developer&lt;br /&gt;
|-&lt;br /&gt;
|XMMS&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ZiB Emulator Frontend&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47203 Link1] [http://www.youtube.com/watch?v=UJvON8lCM3M Link2]&lt;br /&gt;
|&lt;br /&gt;
|Aimless_E&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Demos / Technical Demos for OpenPandora ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Cell Shading&lt;br /&gt;
|[http://www.youtube.com/watch?v=cpAj0jHglGw Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Demo with MP3 Playback&lt;br /&gt;
|[http://www.youtube.com/watch?v=hkx18kruRJs Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Skull Demo&lt;br /&gt;
|[http://www.youtube.com/watch?v=qG7EDaZpyOo Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|WaveDemo&lt;br /&gt;
|[http://www.youtube.com/watch?v=4wgEHFCq9Lo Link]&lt;br /&gt;
|Working&lt;br /&gt;
|Otaco&lt;br /&gt;
|&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Software_projects&amp;diff=1537</id>
		<title>Software projects</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Software_projects&amp;diff=1537"/>
		<updated>2009-10-22T06:43:33Z</updated>

		<summary type="html">&lt;p&gt;Adventus: /* Other programs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See the [[Port Requests]] article for open-source projects which ''could'' be ported but have not been taken on by anyone yet.&lt;br /&gt;
&lt;br /&gt;
== Operating Systems ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Android Omap&lt;br /&gt;
|[http://elinux.org/Android_on_OMAP Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Angstrom Linux&lt;br /&gt;
|[http://www.angstrom-distribution.org/ Link]&lt;br /&gt;
|Working build, not completed&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|AROS Arm&lt;br /&gt;
|[http://projects.powerdeveloper.org/project/imx515/735 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FreeBSD&lt;br /&gt;
|[http://wiki.freebsd.org/FreeBSD/arm/OMAP Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Gentoo Linux&lt;br /&gt;
|[http://gentoo.openpandora.org Link]&lt;br /&gt;
|Working build, not completed&lt;br /&gt;
|javaJake, Viridior&lt;br /&gt;
|IRC: (FreeNode) #gentoo-pandora&lt;br /&gt;
|-&lt;br /&gt;
|HaikuOS&lt;br /&gt;
|[http://www.haiku-os.org Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ubuntu ARM&lt;br /&gt;
|[http://www.ubuntu.com/products/whatisubuntu/arm Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Fedora ARM&lt;br /&gt;
|&lt;br /&gt;
|Unknown&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Games ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Abuse&lt;br /&gt;
|[http://abuse.zoy.org/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|2D Platform&lt;br /&gt;
|-&lt;br /&gt;
|Battle for Wesnoth v1.6.2&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47936 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|BattleJewels&lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Skeezix&lt;br /&gt;
|Logical&lt;br /&gt;
|-&lt;br /&gt;
|BlobWars&lt;br /&gt;
|[http://www.parallelrealities.co.uk/projects/blobWars.php Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|2D Platform&lt;br /&gt;
|-&lt;br /&gt;
|Caster&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46813 Link]&lt;br /&gt;
|Working build (tested on PC)&lt;br /&gt;
|Svartalf&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Chaotic Vortex&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?/topic/49754-chaotic-vortex-dual-stick-arena-shooter Link]&lt;br /&gt;
|WIP&lt;br /&gt;
|Ruben&lt;br /&gt;
|Dual stick 2D shooter&lt;br /&gt;
|-&lt;br /&gt;
|Descent 1 (d1x-rebirth engine)&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1032 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPS&lt;br /&gt;
|-&lt;br /&gt;
|Descent 2 (d2x-rebirth engine)&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1032 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPS&lt;br /&gt;
|-&lt;br /&gt;
|FHeroes Port (Heroes Of Might And Magic 2)&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47553 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|FreeCiv 2.1.9&lt;br /&gt;
|[http://freeciv.wikia.com/wiki/Main_Page Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|Galactic Artifact&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46836 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Trevor Bradley&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|Giannas Return&lt;br /&gt;
|[http://www.gianas-return.de/ Link]&lt;br /&gt;
|Working&lt;br /&gt;
|Giannas Team&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Gravity Blocks&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47662 Link]&lt;br /&gt;
|wip (early in developement)&lt;br /&gt;
|Awekening&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Homeworld Port&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47565 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|LinuxHacker&lt;br /&gt;
|Simulation&lt;br /&gt;
|-&lt;br /&gt;
|Human Condition (was TINCS)&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46487 Link1][http://www.youtube.com/user/ButtermanHimself Link2]&lt;br /&gt;
|wip&lt;br /&gt;
|Butterman&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Lerp&lt;br /&gt;
|[http://grapefruitopia.com/lerp/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|benjymous&lt;br /&gt;
|2D physics puzzle platformer&lt;br /&gt;
|-&lt;br /&gt;
|Lord of the Rings Port&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46792&amp;amp;hl= Link]&lt;br /&gt;
|Unknown&lt;br /&gt;
|Daeglin&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Mental&lt;br /&gt;
|&lt;br /&gt;
|Working build, tested on PC&lt;br /&gt;
|Colin Jones (xentalion)&lt;br /&gt;
|2D Horror Survival Adventure&lt;br /&gt;
|-&lt;br /&gt;
|Monster!&lt;br /&gt;
|[http://christophsdevblog.blogspot.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Chris R&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|NAEV&lt;br /&gt;
|[http://code.google.com/p/naev/ Link]&lt;br /&gt;
|wip (waiting for pandora to finish and test)&lt;br /&gt;
|bobbens&lt;br /&gt;
|Action/RPG/Sim&lt;br /&gt;
|-&lt;br /&gt;
|Nails Adventure&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46961 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|jsmtux/Mr. Gonzo&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenLiero (Liero)&lt;br /&gt;
|&lt;br /&gt;
|working build, need to be polished&lt;br /&gt;
|Pickle&lt;br /&gt;
|Shoot'Em Up&lt;br /&gt;
|-&lt;br /&gt;
|OpenTyrian&lt;br /&gt;
|[http://code.google.com/p/opentyrian/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Shoot'Em Up&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Panic!&lt;br /&gt;
|[http://www.youtube.com/watch?v=y9d6UXhQP6o Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|PokeParadox / GP32X Community&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Pool Panic&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46996 Link]&lt;br /&gt;
|Almost Finished&lt;br /&gt;
|Unfathomable Depths&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|PanMMO - Pandora MMO Game via Internet&lt;br /&gt;
|[http://www.youtube.com/user/enirya Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Enirya&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Powermanga&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Quake 1&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Quake 2&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Quake 3&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Quake 3&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Reminiscence (flashback)&lt;br /&gt;
|[http://cyxdown.free.fr/reminiscence/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Action/Adventure&lt;br /&gt;
|-&lt;br /&gt;
|Rise of The Triad&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47931 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|arrrgh&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Stratagus&lt;br /&gt;
|[http://stratagus.sourceforge.net/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|RTS Engine&lt;br /&gt;
|-&lt;br /&gt;
|Super Lumenal&lt;br /&gt;
|[http://www.youtube.com/watch?v=sZHi3YT3xuE&amp;amp;feature=channel_page Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Adventus&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|SuperTux 1&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1040 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|Platform&lt;br /&gt;
|-&lt;br /&gt;
|SuperTux 2&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1040 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|Platform&lt;br /&gt;
|-&lt;br /&gt;
|Tecnoballz&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Teeworlds&lt;br /&gt;
|[http://www.teeworlds.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|The Mana World&lt;br /&gt;
|[http://www.themanaworld.org/ Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|MMORPG&lt;br /&gt;
|-&lt;br /&gt;
|uHexen2: Hammer of Thyrion &lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Adventus&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Ur-Quan Masters&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43625&amp;amp;st=165&amp;amp;p=673047&amp;amp;#entry673047 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|Space Exploration&lt;br /&gt;
|-&lt;br /&gt;
|Warioland-inspired game&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?/topic/48680-warioland-inspired-game/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|foxblock&lt;br /&gt;
|Platformer&lt;br /&gt;
|-&lt;br /&gt;
|We Come In Peace&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43655 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Otaco&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|Where in world is...&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|Casual&lt;br /&gt;
|-&lt;br /&gt;
|Wizzley Presto and the Mysterious Time Machine&lt;br /&gt;
|[http://www.30daygame.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Craigix, Zodttd, Ruckage&lt;br /&gt;
|Arcade, 30 Day Game Competition&lt;br /&gt;
|-&lt;br /&gt;
|Wolf4SDL (Wolfenstein 3D)&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|XSwing Plus&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?s=&amp;amp;showtopic=43655&amp;amp;view=findpost&amp;amp;p=733021 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Tobse&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|ZEQ2Lite&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47623&amp;amp;hl= Link]&lt;br /&gt;
|Work in progress&lt;br /&gt;
|MDave&lt;br /&gt;
|Dragonball Z Third Person Fighter/Shooter&lt;br /&gt;
|-&lt;br /&gt;
|Zdoom &lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Adventus&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Zombd&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46933 Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|iprice/Mr Gonzo&lt;br /&gt;
|Shoot'Em Up&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Emulators ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Emulated System&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Caprice32&lt;br /&gt;
|Amstrad CPC&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=48140 Link1] [http://www.caprice32.cybercube.com/ Link2]&lt;br /&gt;
|wip&lt;br /&gt;
|hdonk&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DosBox&lt;br /&gt;
|x86 DOS&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FinalBurnAdvance&lt;br /&gt;
|CPS1/2/3/taito...&lt;br /&gt;
|[http://www.youtube.com/watch?v=06hjDLMBaf8 Link]&lt;br /&gt;
|&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Frotz&lt;br /&gt;
|Z-Machine interpreter&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/frotz-2.43.zip Link]&lt;br /&gt;
|working build&lt;br /&gt;
|SteveM&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Fuse&lt;br /&gt;
|ZX Spectrum&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/fuse-0.9.0.zip Link]&lt;br /&gt;
|working build&lt;br /&gt;
|SteveM&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GnGeo&lt;br /&gt;
|SNK NeoGeo&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|gpSP&lt;br /&gt;
|Nintendo GBA&lt;br /&gt;
|&lt;br /&gt;
|wip&lt;br /&gt;
|ZodTTD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Hatari&lt;br /&gt;
|Atari ST&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Jzintv&lt;br /&gt;
|Mattel Intellivision&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=48035 Link]&lt;br /&gt;
|&lt;br /&gt;
|WizardStan&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MAME4All&lt;br /&gt;
|Arcade&lt;br /&gt;
|[http://www.youtube.com/user/franxism Link]&lt;br /&gt;
|&lt;br /&gt;
|Franxis&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Mupen64plus&lt;br /&gt;
|Nintendo 64&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?/topic/49358-mupen64plus/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Ari64&lt;br /&gt;
|Pickle working on OpenGL&lt;br /&gt;
|-&lt;br /&gt;
|NeoPop&lt;br /&gt;
|SNK NeoGeo Pocket&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NullDC&lt;br /&gt;
|Sega Dreamcast&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?s=&amp;amp;showtopic=47065&amp;amp;view=findpost&amp;amp;p=709910 Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|Zezu / drkIIraziel&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PandaSNES&lt;br /&gt;
|Nintendo SNES&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43213 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Pandora-PSP&lt;br /&gt;
|Sony Playstation Portable&lt;br /&gt;
|[http://jayfoxrox.bplaced.net/pandora-psp/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|[[User:JayFoxRox|JayFoxRox]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PAtari&lt;br /&gt;
|Atari 800&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PicoDrive&lt;br /&gt;
|Sega Genesis/CD/32x&lt;br /&gt;
|[http://www.youtube.com/watch?v=QDbLQI91510 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Notaz&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|PSMS&lt;br /&gt;
|Sega Master System&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PSnes&lt;br /&gt;
|Nintendo SNES&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Psx4All&lt;br /&gt;
|Sony PlayStation&lt;br /&gt;
|[http://www.zodttd.com Link]&lt;br /&gt;
|Not Status, working build&lt;br /&gt;
|ZodTTD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ScummVM&lt;br /&gt;
|x86 Scumm engine games&lt;br /&gt;
|&lt;br /&gt;
|Working build&lt;br /&gt;
|DJ Willis&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|SIMH&lt;br /&gt;
|old hardware&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/simh-3.8.zip Link]&lt;br /&gt;
|working build&lt;br /&gt;
|SteveM&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Temper&lt;br /&gt;
|NEC PC Engine&lt;br /&gt;
|[http://exophase.devzero.co.uk/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Exophase&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|Tempest&lt;br /&gt;
|Atari Jaguar&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43119 Link]&lt;br /&gt;
|&lt;br /&gt;
|Firefox&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Uae4All&lt;br /&gt;
|Amiga&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=44100 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|XMAME&lt;br /&gt;
|Arcade&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Graphic Engines ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|GemRB (Infinity Engine)&lt;br /&gt;
|&lt;br /&gt;
|wip&lt;br /&gt;
|Adventus&lt;br /&gt;
|open-source implementation of Bioware's Infinity Engine, supports games including Baldurs Gate 2 and Planescape Torment.&lt;br /&gt;
|-&lt;br /&gt;
|GLES2D&lt;br /&gt;
|&lt;br /&gt;
|Wip&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|OpenGL ES 2D library&lt;br /&gt;
|-&lt;br /&gt;
|GL-WES-v2.0&lt;br /&gt;
|[http://code.google.com/p/gl-wes-v2/ link] &lt;br /&gt;
|Working Build&lt;br /&gt;
|Adventus&lt;br /&gt;
|Opensource OpenGL 2.0 driver built on OpenGL ES 2.0.&lt;br /&gt;
|-&lt;br /&gt;
|Irrlicht&lt;br /&gt;
|[http://irrlicht.sourceforge.net/] [http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=32538&amp;amp;start=45]&lt;br /&gt;
|working build&lt;br /&gt;
|Hybrid&lt;br /&gt;
|3D game engine&lt;br /&gt;
|-&lt;br /&gt;
|NSS Engine&lt;br /&gt;
|[http://www.nosiestastudios.com/wiki/ Link1] [http://www.youtube.com/user/Prompt84 Link2]&lt;br /&gt;
|&lt;br /&gt;
|No Siesta Studios&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OGRE Engine&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46706 Link1] [http://www.youtube.com/watch?v=LDtUE5PIhV0 Link2]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|3D real-time renderer&lt;br /&gt;
|-&lt;br /&gt;
|Otaco Glost Engine&lt;br /&gt;
|[http://www.youtube.com/user/otacogloost Link1], [http://www.gp32x.com/board/index.php?/topic/48393-i-did-stuff/page__p__736650&amp;amp;#entry736650 Link2]&lt;br /&gt;
|working&lt;br /&gt;
|Otaco&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Quad-Ren 2D&lt;br /&gt;
|[http://quad-ren.sourceforge.net/index.php Link]&lt;br /&gt;
|&lt;br /&gt;
|Hessiess&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SDL GLES&lt;br /&gt;
|[http://github.com/Cpasjuste/sdl-1.2.13_gles/tree Link]&lt;br /&gt;
|working&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|XreaL&lt;br /&gt;
|[http://xreal.sourceforge.net/xrealwiki/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Pickle [?]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Other programs ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|AbiWord - Word Processor&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|Claws Mail&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|Epiphany Web Bowser&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FireFox - Internet Browser&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|GIMP - Image Editor&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|GMenu&lt;br /&gt;
|[http://www.youtube.com/watch?v=VYzi8gziC7E Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pandora Team&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Gnumeric Spreadsheet - Spreadsheet&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|GoView&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Image Gallery&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Inside The Box&lt;br /&gt;
|[http://www.openpandora.pl Link1] [http://www.youtube.com/watch?v=uLMmJBDEs2E Link2]&lt;br /&gt;
|wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|Pandora e-zine&lt;br /&gt;
|-&lt;br /&gt;
|IRC Client&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LeafPad&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matchbox Shell / GUI&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MPlayer&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=41420 Link1] [http://www.youtube.com/watch?v=v9RAPNa-55k Link2]&lt;br /&gt;
|Working build&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Math-NEON&lt;br /&gt;
|[http://code.google.com/p/math-neon/ Link1]&lt;br /&gt;
|Wip&lt;br /&gt;
|Adventus&lt;br /&gt;
|cmath like library optimised for ARM NEON coprocessor.&lt;br /&gt;
|-&lt;br /&gt;
|Pandaphone&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?/topic/48327-pandaphone/ Link]&lt;br /&gt;
|&lt;br /&gt;
|jb0yx&lt;br /&gt;
|A project to incorporate the Open Pandora handheld device with cell phone technology&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Sync Suite&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|StreaK&lt;br /&gt;
|for Windows 9x/NT&lt;br /&gt;
|-&lt;br /&gt;
|Pangea GUI&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=45631&amp;amp;hl=pangea Link]&lt;br /&gt;
|WIP&lt;br /&gt;
|efegea&lt;br /&gt;
|Gmenu alternative&lt;br /&gt;
|-&lt;br /&gt;
|PDM&lt;br /&gt;
|[http://github.com/Cpasjuste/pdm/tree Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Light desktop manager for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|PGui&lt;br /&gt;
|[http://github.com/Cpasjuste/pgui/tree Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Standard emulator fronted for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|Pidgin - IM (for Angstrom OpenPandora)&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PMenu&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Minimal Menu for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|PND Maker (for Windows 9x/NT)&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|StreaK&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Qemu&lt;br /&gt;
|[http://www.nongnu.org/qemu/status.html Link]&lt;br /&gt;
|testing build&lt;br /&gt;
|Fabrice Bellard&lt;br /&gt;
|open source machine emulator and virtualizer&lt;br /&gt;
|-&lt;br /&gt;
|Scale&lt;br /&gt;
|[http://www.youtube.com/user/Zoxc64 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Zoxc64&lt;br /&gt;
|Minimal Menu for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|Simple Dev Studio for Pandora&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|for Windows 9x/NT&lt;br /&gt;
|-&lt;br /&gt;
|[[TINXL]]&lt;br /&gt;
|[[TINXL]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Application stack for multiplayer internet games&lt;br /&gt;
|-&lt;br /&gt;
|[[TS2A]]&lt;br /&gt;
|[[TS2A]]&lt;br /&gt;
|Documentation only&lt;br /&gt;
||[[User:JayFoxRox|JayFoxRox]]&lt;br /&gt;
|Teamspeak 2 Alternative Client / Server, Needs developer&lt;br /&gt;
|-&lt;br /&gt;
|XMMS&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ZiB Emulator Frontend&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47203 Link1] [http://www.youtube.com/watch?v=UJvON8lCM3M Link2]&lt;br /&gt;
|&lt;br /&gt;
|Aimless_E&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Demos / Technical Demos for OpenPandora ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Cell Shading&lt;br /&gt;
|[http://www.youtube.com/watch?v=cpAj0jHglGw Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Demo with MP3 Playback&lt;br /&gt;
|[http://www.youtube.com/watch?v=hkx18kruRJs Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Skull Demo&lt;br /&gt;
|[http://www.youtube.com/watch?v=qG7EDaZpyOo Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|WaveDemo&lt;br /&gt;
|[http://www.youtube.com/watch?v=4wgEHFCq9Lo Link]&lt;br /&gt;
|Working&lt;br /&gt;
|Otaco&lt;br /&gt;
|&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1437</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1437"/>
		<updated>2009-08-01T01:06:56Z</updated>

		<summary type="html">&lt;p&gt;Adventus: /* Summary */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
In the past it was rare for an embedded processor to have dedicated floating point hardware, this usually limited you to either using fixed point math (which can be very tricky to write) or very slow software floating point emulation. Fortunately the ARM Cortex A8 found in the OMAP3 has 2 Floating Point Units, a non-pipelined VFP-lite conforming to the IEEE754 standard for floating point arithmetic and a pipelined SIMD NEON coprocessor. The VFP-lite can handle both single and double precision arithmetic, as well as properly handling exceptions and subnormal numbers. However, Due to the full spec compliance and presence of the NEON, it is a relatively slow implementation in the A8, usually taking between 18 - 21 cycles to perform a single precision multiply accumulate. The NEON unit on the other hand is designed for very fast single precision vector math, it can sustain multiply accumulates at a rate of two per cycle. Efficiently utilizing these coprocessors in GCC will be the focus of this article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In this article I refer to the A8's integer pipeline as the &amp;quot;ARM&amp;quot; , the VFP-lite as simply the &amp;quot;VFP&amp;quot; and the NEON unit as the &amp;quot;NFP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Compiler Support ==&lt;br /&gt;
The NEON + VFP-lite is a new design from ARM and hence does not yet have very mature compiler support. At present the Code Sourcery toolchain has the best support since the mainline GCCs do not support NEON yet. Code Sourcery Compiler versions:&lt;br /&gt;
* CSL 2007q3: Working NEON, Softfp Support&lt;br /&gt;
* CSL 2008q3: Broken NEON!&lt;br /&gt;
* CSL 2009q1: Working NEON, Hardfp + Softfp Support&lt;br /&gt;
&lt;br /&gt;
Generally the CS2007q3 release is recommended, the CSL 2009q1 release is promising but it has not been thoroughly tested yet. One big problem with the current compilers is the heavy dependence on VFP code, currently they only output NEON code when an obvious chance of vectorization is encountered (rarely). Apart from the esoteric rounding, vector, etc modes of the VFP (most of which compilers don't use) and predication (used occasionally), most VFP floating point instructions can be exactly replicated using an order of magnitude faster NEON instructions.... Infact it has been reported to me that the GCC packaged with the iPhone 3GS SDK does exactly this. Hopefully future compilers will support this feature. &lt;br /&gt;
&lt;br /&gt;
Inorder to instruct the compiler to produce NEON or VFP code you should use the following compile flags: -mfpu=neon or -mfpu=vfp. Unfortunately the CSL 2007 / 2008 toolchains do not support the passing of values in floating point registers (i talk about this some more in the Transfers section), so you must specify a software ABI via -mfloat-abi=softfp. The CSL 2009q1 release is the first release to support the passing of values in FP registers (AKA hardfp) via the -mfloat-abi=hard compile flag. Note that hardfp compiled binaries are not compatible with softfp ones and vice versa, so make sure your libraries have the correct ABI. Additionally, If you want the compiler to attempt to vectorize your integer / floating point code for the NEON you should add: -ftree-vectorize to your flags. &lt;br /&gt;
&lt;br /&gt;
Therefore i recommend the following flags: '''-O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=(softfp|hard) -ffast-math -fsingle-precision-constant''' where -mfloat-abi=hard for the CSL 2009q1 release and softfp for all the others.&lt;br /&gt;
&lt;br /&gt;
== VFP-Lite RunFast ==&lt;br /&gt;
Under the correct circumstances some of The VFPs instructions will be executed in the NEON coprocessor. Unfortunately this does not gain the full benefit of the NEON, it still takes 7 cycles for an FMAC / FMUL / FADD. Due to this quirk you will likely get better scalar performance by accessing the NEON directly via Intrinsics or ASM.&lt;br /&gt;
&lt;br /&gt;
Inorder for VFP instructions to execute in the NFP the following constraints must be met:&lt;br /&gt;
* RunFast mode must be enabled&lt;br /&gt;
* Must be single precision floating point operands&lt;br /&gt;
* Must not be a vector instruction (GCC doesn't appear to use this feature, so don't worry about it)&lt;br /&gt;
&lt;br /&gt;
Runfast mode is enabled when the following conditions are present:&lt;br /&gt;
* Subnormal numbers are being flushed to zero &lt;br /&gt;
* Default NaN mode is active&lt;br /&gt;
* No floating point exceptions are enabled&lt;br /&gt;
&lt;br /&gt;
I'm not sure if Runfast mode will be enabled by default in the Angstrom distribution packaged with the Pandora. If it isn't you can use the following C code to enforce it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void enable_runfast()&lt;br /&gt;
{&lt;br /&gt;
	static const unsigned int x = 0x04086060;&lt;br /&gt;
	static const unsigned int y = 0x03000000;&lt;br /&gt;
	int r;&lt;br /&gt;
	asm volatile (&lt;br /&gt;
		&amp;quot;fmrx	%0, fpscr			\n\t&amp;quot;	//r0 = FPSCR&lt;br /&gt;
		&amp;quot;and	%0, %0, %1			\n\t&amp;quot;	//r0 = r0 &amp;amp; 0x04086060&lt;br /&gt;
		&amp;quot;orr	%0, %0, %2			\n\t&amp;quot;	//r0 = r0 | 0x03000000&lt;br /&gt;
		&amp;quot;fmxr	fpscr, %0			\n\t&amp;quot;	//FPSCR = r0&lt;br /&gt;
		: &amp;quot;=r&amp;quot;(r)&lt;br /&gt;
		: &amp;quot;r&amp;quot;(x), &amp;quot;r&amp;quot;(y)&lt;br /&gt;
	);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instructions that are executed on the NFP are: FADDS, FSUBS, FABSS, FNEGS, FMULS, FNMULS, FMACS, FNMACS, FMSCS, FNMSCS, FCMPS, FCMPES, FCMPZS, FCMPEZS, FUITOS, FSITOS, FTOUIS, FTOSIS, FTOUIZS, FTOSIZS, FSHTOS, FSLTOS, FUHTOS, FULTOS, FTOSHS, FTOSLS, FTOUHS, FTOULS.&lt;br /&gt;
&lt;br /&gt;
== Single Precision Floating Point ==&lt;br /&gt;
One important and easy optimization is to make sure that single precision constants are being used. By default this is not the case, instead a double precision constant is being used, so all related operations involving that constant require slower double precision instructions and cannot be executed on the NEON. eg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{ &lt;br /&gt;
	return (2.123 * x); &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
might end up the same as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{&lt;br /&gt;
	double dx = (double) x;&lt;br /&gt;
	double dy = (double) 2.123; &lt;br /&gt;
	double dr = dx * dy;&lt;br /&gt;
	float r = (float) dr;&lt;br /&gt;
	return r;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can enforce single precision constants by including the compiler flag: '''-fsingle-precision-constant''', alternatively you can append an 'f' to the end of each constant. ie 2.123f&lt;br /&gt;
&lt;br /&gt;
Another thing to watch out for is the double versions of the functions in libm (sin, exp, sqrt, etc). By default these functions operate on double precision floating point values and suffer the same problems as the constants. Luckily libm supplies floating point versions aswell, they can be accessed by appending an 'f' to the end of the function. ie sinf(), expf(), sqrtf().&lt;br /&gt;
&lt;br /&gt;
== NFP / VFP to ARM Transfers ==&lt;br /&gt;
Probably the biggest bottleneck in the architecture is that inorder to transfer a number from the VFP / NFP registers onto the ARM you must stall both the ARM and NFP / VFP for &amp;gt;20 cycles. This is particularly troublesome because this is how GCC (except the CSL 2009q1 release) supplies arguments and recieves returns from functions. Possibly The best way to minimize operand passing stalls is to make the floating point functions inline.&lt;br /&gt;
&lt;br /&gt;
Another source of NFP / VFP to ARM transfers are conditional branches that depend on floating point numbers. You can do the condition on the VFP but inorder to branch the flags must be sent from the VFP to the ARM. For very simple branches your best bet is to not branch at all and instead use arithmetic. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;if (x &amp;lt; 0) {x += 1.1244;}&amp;lt;/source&amp;gt;&lt;br /&gt;
Is the same as:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;x = x + (x &amp;lt; 0) * 1.1244&amp;lt;/source&amp;gt;&lt;br /&gt;
However you might want to keep a close eye on what the compiler actually produces with the above code. &lt;br /&gt;
&lt;br /&gt;
One interesting fact is that using stores and loads do not cause a stall. So aslong as you don't need the result straight away you can hide the 20 cycle latency. Instead of doing a transfer you; store your NFP / VFP result to memory, do some work on the ARM, then load the result back onto the ARM without penalty. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;void foo(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 123 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void bar(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 546 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
	float x = 10;&lt;br /&gt;
	float y, z;&lt;br /&gt;
	foo(&amp;amp;x, &amp;amp;y)&lt;br /&gt;
	&lt;br /&gt;
	//do ~20 cycles of ARM work&lt;br /&gt;
	&lt;br /&gt;
	bar(&amp;amp;y, &amp;amp;z);&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last common source of transfers is when you cast a floating point value as an integer, by default all integer work will be done in the ARM pipeline and hence a transfer operation occurs. This is particularly problematic for complex algorithms that rely on bitwise or rounding operations on floating point numbers, ie almost all the functions in cmath depend on range reduction (rounding). A smart compiler would recognize that they can almost always be done in the NEON's integer pipeline.&lt;br /&gt;
&lt;br /&gt;
== NEON SIMD ==&lt;br /&gt;
The NEON unit is similar to the MMX and SSE extensions found on X86 processors, it is optimized for Single Instruction Multiple Data (SIMD) operations.&lt;br /&gt;
The NEON unit has 2 floating point pipelines, an integer pipeline and a 128bit load/store/permute pipeline. When properly utilized it is a very powerful coprocessor. Unfortunately GCC does a rather poor job of vectorizing code for the NEON unit. To get the best performance you should use either the intrinsics provided in the &amp;quot;arm_neon.h&amp;quot; header or hand written assembly. &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
It's often said amongst software developers that you 'may aswell not bother trying to out perform a compiler', whilst there is a grain of truth in this where X86 is concerned, this is definitely not the case with Floating point on the ARM Cortex A8. Infact it is almost the opposite, you can almost always make significant gains via targeting the NEON. Therefore, Inorder to achieve the best floating point performance on the Pandora (or ARM Cortex A8 device):&lt;br /&gt;
* Use the CodeSourcery 2007q3 or 2009q1 releases and these flags: -O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=(softfp|hard) -ffast-math -fsingle-precision-constant&lt;br /&gt;
* Only use single precision floating point&lt;br /&gt;
* Use NEON intrinsics / ASM when ever you find a bottlenecking FP function. You can do better than the compiler.&lt;br /&gt;
* Minimize Conditional Branches&lt;br /&gt;
* Enable RunFast mode&lt;br /&gt;
&lt;br /&gt;
For softfp:&lt;br /&gt;
* Inline floating point code (unless its very large)&lt;br /&gt;
* Pass FP arguments via pointers instead of by value and do integer work in between function calls.&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1436</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1436"/>
		<updated>2009-08-01T00:58:13Z</updated>

		<summary type="html">&lt;p&gt;Adventus: /* NFP / VFP to ARM Transfers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
In the past it was rare for an embedded processor to have dedicated floating point hardware, this usually limited you to either using fixed point math (which can be very tricky to write) or very slow software floating point emulation. Fortunately the ARM Cortex A8 found in the OMAP3 has 2 Floating Point Units, a non-pipelined VFP-lite conforming to the IEEE754 standard for floating point arithmetic and a pipelined SIMD NEON coprocessor. The VFP-lite can handle both single and double precision arithmetic, as well as properly handling exceptions and subnormal numbers. However, Due to the full spec compliance and presence of the NEON, it is a relatively slow implementation in the A8, usually taking between 18 - 21 cycles to perform a single precision multiply accumulate. The NEON unit on the other hand is designed for very fast single precision vector math, it can sustain multiply accumulates at a rate of two per cycle. Efficiently utilizing these coprocessors in GCC will be the focus of this article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In this article I refer to the A8's integer pipeline as the &amp;quot;ARM&amp;quot; , the VFP-lite as simply the &amp;quot;VFP&amp;quot; and the NEON unit as the &amp;quot;NFP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Compiler Support ==&lt;br /&gt;
The NEON + VFP-lite is a new design from ARM and hence does not yet have very mature compiler support. At present the Code Sourcery toolchain has the best support since the mainline GCCs do not support NEON yet. Code Sourcery Compiler versions:&lt;br /&gt;
* CSL 2007q3: Working NEON, Softfp Support&lt;br /&gt;
* CSL 2008q3: Broken NEON!&lt;br /&gt;
* CSL 2009q1: Working NEON, Hardfp + Softfp Support&lt;br /&gt;
&lt;br /&gt;
Generally the CS2007q3 release is recommended, the CSL 2009q1 release is promising but it has not been thoroughly tested yet. One big problem with the current compilers is the heavy dependence on VFP code, currently they only output NEON code when an obvious chance of vectorization is encountered (rarely). Apart from the esoteric rounding, vector, etc modes of the VFP (most of which compilers don't use) and predication (used occasionally), most VFP floating point instructions can be exactly replicated using an order of magnitude faster NEON instructions.... Infact it has been reported to me that the GCC packaged with the iPhone 3GS SDK does exactly this. Hopefully future compilers will support this feature. &lt;br /&gt;
&lt;br /&gt;
Inorder to instruct the compiler to produce NEON or VFP code you should use the following compile flags: -mfpu=neon or -mfpu=vfp. Unfortunately the CSL 2007 / 2008 toolchains do not support the passing of values in floating point registers (i talk about this some more in the Transfers section), so you must specify a software ABI via -mfloat-abi=softfp. The CSL 2009q1 release is the first release to support the passing of values in FP registers (AKA hardfp) via the -mfloat-abi=hard compile flag. Note that hardfp compiled binaries are not compatible with softfp ones and vice versa, so make sure your libraries have the correct ABI. Additionally, If you want the compiler to attempt to vectorize your integer / floating point code for the NEON you should add: -ftree-vectorize to your flags. &lt;br /&gt;
&lt;br /&gt;
Therefore i recommend the following flags: '''-O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=(softfp|hard) -ffast-math -fsingle-precision-constant''' where -mfloat-abi=hard for the CSL 2009q1 release and softfp for all the others.&lt;br /&gt;
&lt;br /&gt;
== VFP-Lite RunFast ==&lt;br /&gt;
Under the correct circumstances some of The VFPs instructions will be executed in the NEON coprocessor. Unfortunately this does not gain the full benefit of the NEON, it still takes 7 cycles for an FMAC / FMUL / FADD. Due to this quirk you will likely get better scalar performance by accessing the NEON directly via Intrinsics or ASM.&lt;br /&gt;
&lt;br /&gt;
Inorder for VFP instructions to execute in the NFP the following constraints must be met:&lt;br /&gt;
* RunFast mode must be enabled&lt;br /&gt;
* Must be single precision floating point operands&lt;br /&gt;
* Must not be a vector instruction (GCC doesn't appear to use this feature, so don't worry about it)&lt;br /&gt;
&lt;br /&gt;
Runfast mode is enabled when the following conditions are present:&lt;br /&gt;
* Subnormal numbers are being flushed to zero &lt;br /&gt;
* Default NaN mode is active&lt;br /&gt;
* No floating point exceptions are enabled&lt;br /&gt;
&lt;br /&gt;
I'm not sure if Runfast mode will be enabled by default in the Angstrom distribution packaged with the Pandora. If it isn't you can use the following C code to enforce it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void enable_runfast()&lt;br /&gt;
{&lt;br /&gt;
	static const unsigned int x = 0x04086060;&lt;br /&gt;
	static const unsigned int y = 0x03000000;&lt;br /&gt;
	int r;&lt;br /&gt;
	asm volatile (&lt;br /&gt;
		&amp;quot;fmrx	%0, fpscr			\n\t&amp;quot;	//r0 = FPSCR&lt;br /&gt;
		&amp;quot;and	%0, %0, %1			\n\t&amp;quot;	//r0 = r0 &amp;amp; 0x04086060&lt;br /&gt;
		&amp;quot;orr	%0, %0, %2			\n\t&amp;quot;	//r0 = r0 | 0x03000000&lt;br /&gt;
		&amp;quot;fmxr	fpscr, %0			\n\t&amp;quot;	//FPSCR = r0&lt;br /&gt;
		: &amp;quot;=r&amp;quot;(r)&lt;br /&gt;
		: &amp;quot;r&amp;quot;(x), &amp;quot;r&amp;quot;(y)&lt;br /&gt;
	);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instructions that are executed on the NFP are: FADDS, FSUBS, FABSS, FNEGS, FMULS, FNMULS, FMACS, FNMACS, FMSCS, FNMSCS, FCMPS, FCMPES, FCMPZS, FCMPEZS, FUITOS, FSITOS, FTOUIS, FTOSIS, FTOUIZS, FTOSIZS, FSHTOS, FSLTOS, FUHTOS, FULTOS, FTOSHS, FTOSLS, FTOUHS, FTOULS.&lt;br /&gt;
&lt;br /&gt;
== Single Precision Floating Point ==&lt;br /&gt;
One important and easy optimization is to make sure that single precision constants are being used. By default this is not the case, instead a double precision constant is being used, so all related operations involving that constant require slower double precision instructions and cannot be executed on the NEON. eg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{ &lt;br /&gt;
	return (2.123 * x); &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
might end up the same as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{&lt;br /&gt;
	double dx = (double) x;&lt;br /&gt;
	double dy = (double) 2.123; &lt;br /&gt;
	double dr = dx * dy;&lt;br /&gt;
	float r = (float) dr;&lt;br /&gt;
	return r;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can enforce single precision constants by including the compiler flag: '''-fsingle-precision-constant''', alternatively you can append an 'f' to the end of each constant. ie 2.123f&lt;br /&gt;
&lt;br /&gt;
Another thing to watch out for is the double versions of the functions in libm (sin, exp, sqrt, etc). By default these functions operate on double precision floating point values and suffer the same problems as the constants. Luckily libm supplies floating point versions aswell, they can be accessed by appending an 'f' to the end of the function. ie sinf(), expf(), sqrtf().&lt;br /&gt;
&lt;br /&gt;
== NFP / VFP to ARM Transfers ==&lt;br /&gt;
Probably the biggest bottleneck in the architecture is that inorder to transfer a number from the VFP / NFP registers onto the ARM you must stall both the ARM and NFP / VFP for &amp;gt;20 cycles. This is particularly troublesome because this is how GCC (except the CSL 2009q1 release) supplies arguments and recieves returns from functions. Possibly The best way to minimize operand passing stalls is to make the floating point functions inline.&lt;br /&gt;
&lt;br /&gt;
Another source of NFP / VFP to ARM transfers are conditional branches that depend on floating point numbers. You can do the condition on the VFP but inorder to branch the flags must be sent from the VFP to the ARM. For very simple branches your best bet is to not branch at all and instead use arithmetic. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;if (x &amp;lt; 0) {x += 1.1244;}&amp;lt;/source&amp;gt;&lt;br /&gt;
Is the same as:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;x = x + (x &amp;lt; 0) * 1.1244&amp;lt;/source&amp;gt;&lt;br /&gt;
However you might want to keep a close eye on what the compiler actually produces with the above code. &lt;br /&gt;
&lt;br /&gt;
One interesting fact is that using stores and loads do not cause a stall. So aslong as you don't need the result straight away you can hide the 20 cycle latency. Instead of doing a transfer you; store your NFP / VFP result to memory, do some work on the ARM, then load the result back onto the ARM without penalty. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;void foo(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 123 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void bar(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 546 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
	float x = 10;&lt;br /&gt;
	float y, z;&lt;br /&gt;
	foo(&amp;amp;x, &amp;amp;y)&lt;br /&gt;
	&lt;br /&gt;
	//do ~20 cycles of ARM work&lt;br /&gt;
	&lt;br /&gt;
	bar(&amp;amp;y, &amp;amp;z);&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last common source of transfers is when you cast a floating point value as an integer, by default all integer work will be done in the ARM pipeline and hence a transfer operation occurs. This is particularly problematic for complex algorithms that rely on bitwise or rounding operations on floating point numbers, ie almost all the functions in cmath depend on range reduction (rounding). A smart compiler would recognize that they can almost always be done in the NEON's integer pipeline.&lt;br /&gt;
&lt;br /&gt;
== NEON SIMD ==&lt;br /&gt;
The NEON unit is similar to the MMX and SSE extensions found on X86 processors, it is optimized for Single Instruction Multiple Data (SIMD) operations.&lt;br /&gt;
The NEON unit has 2 floating point pipelines, an integer pipeline and a 128bit load/store/permute pipeline. When properly utilized it is a very powerful coprocessor. Unfortunately GCC does a rather poor job of vectorizing code for the NEON unit. To get the best performance you should use either the intrinsics provided in the &amp;quot;arm_neon.h&amp;quot; header or hand written assembly. &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Therefore, Inorder to achieve the best floating point performance on the Pandora:&lt;br /&gt;
* Use the CodeSourcery 2007q3 release and these flags: -O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant&lt;br /&gt;
* Only use single precision floating point&lt;br /&gt;
* Enable RunFast mode&lt;br /&gt;
* Use NEON intrinsics / ASM for vector, or even scalar, code.&lt;br /&gt;
* Inline floating point code (unless its very large)&lt;br /&gt;
* Minimize Conditional Branches&lt;br /&gt;
* Pass Arguments via pointers instead of by value and do integer work in between function calls.&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1435</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1435"/>
		<updated>2009-08-01T00:47:36Z</updated>

		<summary type="html">&lt;p&gt;Adventus: /* NFP / VFP to ARM Transfers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
In the past it was rare for an embedded processor to have dedicated floating point hardware, this usually limited you to either using fixed point math (which can be very tricky to write) or very slow software floating point emulation. Fortunately the ARM Cortex A8 found in the OMAP3 has 2 Floating Point Units, a non-pipelined VFP-lite conforming to the IEEE754 standard for floating point arithmetic and a pipelined SIMD NEON coprocessor. The VFP-lite can handle both single and double precision arithmetic, as well as properly handling exceptions and subnormal numbers. However, Due to the full spec compliance and presence of the NEON, it is a relatively slow implementation in the A8, usually taking between 18 - 21 cycles to perform a single precision multiply accumulate. The NEON unit on the other hand is designed for very fast single precision vector math, it can sustain multiply accumulates at a rate of two per cycle. Efficiently utilizing these coprocessors in GCC will be the focus of this article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In this article I refer to the A8's integer pipeline as the &amp;quot;ARM&amp;quot; , the VFP-lite as simply the &amp;quot;VFP&amp;quot; and the NEON unit as the &amp;quot;NFP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Compiler Support ==&lt;br /&gt;
The NEON + VFP-lite is a new design from ARM and hence does not yet have very mature compiler support. At present the Code Sourcery toolchain has the best support since the mainline GCCs do not support NEON yet. Code Sourcery Compiler versions:&lt;br /&gt;
* CSL 2007q3: Working NEON, Softfp Support&lt;br /&gt;
* CSL 2008q3: Broken NEON!&lt;br /&gt;
* CSL 2009q1: Working NEON, Hardfp + Softfp Support&lt;br /&gt;
&lt;br /&gt;
Generally the CS2007q3 release is recommended, the CSL 2009q1 release is promising but it has not been thoroughly tested yet. One big problem with the current compilers is the heavy dependence on VFP code, currently they only output NEON code when an obvious chance of vectorization is encountered (rarely). Apart from the esoteric rounding, vector, etc modes of the VFP (most of which compilers don't use) and predication (used occasionally), most VFP floating point instructions can be exactly replicated using an order of magnitude faster NEON instructions.... Infact it has been reported to me that the GCC packaged with the iPhone 3GS SDK does exactly this. Hopefully future compilers will support this feature. &lt;br /&gt;
&lt;br /&gt;
Inorder to instruct the compiler to produce NEON or VFP code you should use the following compile flags: -mfpu=neon or -mfpu=vfp. Unfortunately the CSL 2007 / 2008 toolchains do not support the passing of values in floating point registers (i talk about this some more in the Transfers section), so you must specify a software ABI via -mfloat-abi=softfp. The CSL 2009q1 release is the first release to support the passing of values in FP registers (AKA hardfp) via the -mfloat-abi=hard compile flag. Note that hardfp compiled binaries are not compatible with softfp ones and vice versa, so make sure your libraries have the correct ABI. Additionally, If you want the compiler to attempt to vectorize your integer / floating point code for the NEON you should add: -ftree-vectorize to your flags. &lt;br /&gt;
&lt;br /&gt;
Therefore i recommend the following flags: '''-O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=(softfp|hard) -ffast-math -fsingle-precision-constant''' where -mfloat-abi=hard for the CSL 2009q1 release and softfp for all the others.&lt;br /&gt;
&lt;br /&gt;
== VFP-Lite RunFast ==&lt;br /&gt;
Under the correct circumstances some of The VFPs instructions will be executed in the NEON coprocessor. Unfortunately this does not gain the full benefit of the NEON, it still takes 7 cycles for an FMAC / FMUL / FADD. Due to this quirk you will likely get better scalar performance by accessing the NEON directly via Intrinsics or ASM.&lt;br /&gt;
&lt;br /&gt;
Inorder for VFP instructions to execute in the NFP the following constraints must be met:&lt;br /&gt;
* RunFast mode must be enabled&lt;br /&gt;
* Must be single precision floating point operands&lt;br /&gt;
* Must not be a vector instruction (GCC doesn't appear to use this feature, so don't worry about it)&lt;br /&gt;
&lt;br /&gt;
Runfast mode is enabled when the following conditions are present:&lt;br /&gt;
* Subnormal numbers are being flushed to zero &lt;br /&gt;
* Default NaN mode is active&lt;br /&gt;
* No floating point exceptions are enabled&lt;br /&gt;
&lt;br /&gt;
I'm not sure if Runfast mode will be enabled by default in the Angstrom distribution packaged with the Pandora. If it isn't you can use the following C code to enforce it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void enable_runfast()&lt;br /&gt;
{&lt;br /&gt;
	static const unsigned int x = 0x04086060;&lt;br /&gt;
	static const unsigned int y = 0x03000000;&lt;br /&gt;
	int r;&lt;br /&gt;
	asm volatile (&lt;br /&gt;
		&amp;quot;fmrx	%0, fpscr			\n\t&amp;quot;	//r0 = FPSCR&lt;br /&gt;
		&amp;quot;and	%0, %0, %1			\n\t&amp;quot;	//r0 = r0 &amp;amp; 0x04086060&lt;br /&gt;
		&amp;quot;orr	%0, %0, %2			\n\t&amp;quot;	//r0 = r0 | 0x03000000&lt;br /&gt;
		&amp;quot;fmxr	fpscr, %0			\n\t&amp;quot;	//FPSCR = r0&lt;br /&gt;
		: &amp;quot;=r&amp;quot;(r)&lt;br /&gt;
		: &amp;quot;r&amp;quot;(x), &amp;quot;r&amp;quot;(y)&lt;br /&gt;
	);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instructions that are executed on the NFP are: FADDS, FSUBS, FABSS, FNEGS, FMULS, FNMULS, FMACS, FNMACS, FMSCS, FNMSCS, FCMPS, FCMPES, FCMPZS, FCMPEZS, FUITOS, FSITOS, FTOUIS, FTOSIS, FTOUIZS, FTOSIZS, FSHTOS, FSLTOS, FUHTOS, FULTOS, FTOSHS, FTOSLS, FTOUHS, FTOULS.&lt;br /&gt;
&lt;br /&gt;
== Single Precision Floating Point ==&lt;br /&gt;
One important and easy optimization is to make sure that single precision constants are being used. By default this is not the case, instead a double precision constant is being used, so all related operations involving that constant require slower double precision instructions and cannot be executed on the NEON. eg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{ &lt;br /&gt;
	return (2.123 * x); &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
might end up the same as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{&lt;br /&gt;
	double dx = (double) x;&lt;br /&gt;
	double dy = (double) 2.123; &lt;br /&gt;
	double dr = dx * dy;&lt;br /&gt;
	float r = (float) dr;&lt;br /&gt;
	return r;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can enforce single precision constants by including the compiler flag: '''-fsingle-precision-constant''', alternatively you can append an 'f' to the end of each constant. ie 2.123f&lt;br /&gt;
&lt;br /&gt;
Another thing to watch out for is the double versions of the functions in libm (sin, exp, sqrt, etc). By default these functions operate on double precision floating point values and suffer the same problems as the constants. Luckily libm supplies floating point versions aswell, they can be accessed by appending an 'f' to the end of the function. ie sinf(), expf(), sqrtf().&lt;br /&gt;
&lt;br /&gt;
== NFP / VFP to ARM Transfers ==&lt;br /&gt;
Probably the biggest bottleneck in the architecture is that inorder to transfer a number from the VFP / NFP registers onto the ARM you must stall both the ARM and NFP / VFP for &amp;gt;20 cycles. This is particularly troublesome because this is how GCC (except the CSL 2009q1 release) supplies arguments and recieves returns from functions. Possibly The best way to minimize operand passing stalls is to make the floating point functions inline.&lt;br /&gt;
&lt;br /&gt;
Another source of NFP / VFP to ARM transfers are conditional branches that depend on floating point numbers. You can do the condition on the VFP but inorder to branch the flags must be sent from the VFP to the ARM. For very simple branches your best bet is to not branch at all and instead use arithmetic. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;if (x &amp;lt; 0) {x += 1.1244;}&amp;lt;/source&amp;gt;&lt;br /&gt;
Is the same as:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;x = x + (x &amp;lt; 0) * 1.1244&amp;lt;/source&amp;gt;&lt;br /&gt;
However you might want to keep a close eye on what the compiler actually produces with the above code. &lt;br /&gt;
&lt;br /&gt;
One interesting fact is that using stores and loads do not cause a stall. So aslong as you don't need the result straight away you can hide the 20 cycle latency. Instead of doing a transfer you; store your NFP / VFP result to memory, do some work on the ARM, then load the result back onto the ARM without penalty. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;void foo(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 123 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void bar(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 546 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
	float x = 10;&lt;br /&gt;
	float y, z;&lt;br /&gt;
	foo(&amp;amp;x, &amp;amp;y)&lt;br /&gt;
	&lt;br /&gt;
	//do ~20 cycles of ARM work&lt;br /&gt;
	&lt;br /&gt;
	bar(&amp;amp;y, &amp;amp;z);&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NEON SIMD ==&lt;br /&gt;
The NEON unit is similar to the MMX and SSE extensions found on X86 processors, it is optimized for Single Instruction Multiple Data (SIMD) operations.&lt;br /&gt;
The NEON unit has 2 floating point pipelines, an integer pipeline and a 128bit load/store/permute pipeline. When properly utilized it is a very powerful coprocessor. Unfortunately GCC does a rather poor job of vectorizing code for the NEON unit. To get the best performance you should use either the intrinsics provided in the &amp;quot;arm_neon.h&amp;quot; header or hand written assembly. &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Therefore, Inorder to achieve the best floating point performance on the Pandora:&lt;br /&gt;
* Use the CodeSourcery 2007q3 release and these flags: -O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant&lt;br /&gt;
* Only use single precision floating point&lt;br /&gt;
* Enable RunFast mode&lt;br /&gt;
* Use NEON intrinsics / ASM for vector, or even scalar, code.&lt;br /&gt;
* Inline floating point code (unless its very large)&lt;br /&gt;
* Minimize Conditional Branches&lt;br /&gt;
* Pass Arguments via pointers instead of by value and do integer work in between function calls.&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1434</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1434"/>
		<updated>2009-08-01T00:46:51Z</updated>

		<summary type="html">&lt;p&gt;Adventus: /* NFP / VFP to ARM Transfers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
In the past it was rare for an embedded processor to have dedicated floating point hardware, this usually limited you to either using fixed point math (which can be very tricky to write) or very slow software floating point emulation. Fortunately the ARM Cortex A8 found in the OMAP3 has 2 Floating Point Units, a non-pipelined VFP-lite conforming to the IEEE754 standard for floating point arithmetic and a pipelined SIMD NEON coprocessor. The VFP-lite can handle both single and double precision arithmetic, as well as properly handling exceptions and subnormal numbers. However, Due to the full spec compliance and presence of the NEON, it is a relatively slow implementation in the A8, usually taking between 18 - 21 cycles to perform a single precision multiply accumulate. The NEON unit on the other hand is designed for very fast single precision vector math, it can sustain multiply accumulates at a rate of two per cycle. Efficiently utilizing these coprocessors in GCC will be the focus of this article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In this article I refer to the A8's integer pipeline as the &amp;quot;ARM&amp;quot; , the VFP-lite as simply the &amp;quot;VFP&amp;quot; and the NEON unit as the &amp;quot;NFP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Compiler Support ==&lt;br /&gt;
The NEON + VFP-lite is a new design from ARM and hence does not yet have very mature compiler support. At present the Code Sourcery toolchain has the best support since the mainline GCCs do not support NEON yet. Code Sourcery Compiler versions:&lt;br /&gt;
* CSL 2007q3: Working NEON, Softfp Support&lt;br /&gt;
* CSL 2008q3: Broken NEON!&lt;br /&gt;
* CSL 2009q1: Working NEON, Hardfp + Softfp Support&lt;br /&gt;
&lt;br /&gt;
Generally the CS2007q3 release is recommended, the CSL 2009q1 release is promising but it has not been thoroughly tested yet. One big problem with the current compilers is the heavy dependence on VFP code, currently they only output NEON code when an obvious chance of vectorization is encountered (rarely). Apart from the esoteric rounding, vector, etc modes of the VFP (most of which compilers don't use) and predication (used occasionally), most VFP floating point instructions can be exactly replicated using an order of magnitude faster NEON instructions.... Infact it has been reported to me that the GCC packaged with the iPhone 3GS SDK does exactly this. Hopefully future compilers will support this feature. &lt;br /&gt;
&lt;br /&gt;
Inorder to instruct the compiler to produce NEON or VFP code you should use the following compile flags: -mfpu=neon or -mfpu=vfp. Unfortunately the CSL 2007 / 2008 toolchains do not support the passing of values in floating point registers (i talk about this some more in the Transfers section), so you must specify a software ABI via -mfloat-abi=softfp. The CSL 2009q1 release is the first release to support the passing of values in FP registers (AKA hardfp) via the -mfloat-abi=hard compile flag. Note that hardfp compiled binaries are not compatible with softfp ones and vice versa, so make sure your libraries have the correct ABI. Additionally, If you want the compiler to attempt to vectorize your integer / floating point code for the NEON you should add: -ftree-vectorize to your flags. &lt;br /&gt;
&lt;br /&gt;
Therefore i recommend the following flags: '''-O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=(softfp|hard) -ffast-math -fsingle-precision-constant''' where -mfloat-abi=hard for the CSL 2009q1 release and softfp for all the others.&lt;br /&gt;
&lt;br /&gt;
== VFP-Lite RunFast ==&lt;br /&gt;
Under the correct circumstances some of The VFPs instructions will be executed in the NEON coprocessor. Unfortunately this does not gain the full benefit of the NEON, it still takes 7 cycles for an FMAC / FMUL / FADD. Due to this quirk you will likely get better scalar performance by accessing the NEON directly via Intrinsics or ASM.&lt;br /&gt;
&lt;br /&gt;
Inorder for VFP instructions to execute in the NFP the following constraints must be met:&lt;br /&gt;
* RunFast mode must be enabled&lt;br /&gt;
* Must be single precision floating point operands&lt;br /&gt;
* Must not be a vector instruction (GCC doesn't appear to use this feature, so don't worry about it)&lt;br /&gt;
&lt;br /&gt;
Runfast mode is enabled when the following conditions are present:&lt;br /&gt;
* Subnormal numbers are being flushed to zero &lt;br /&gt;
* Default NaN mode is active&lt;br /&gt;
* No floating point exceptions are enabled&lt;br /&gt;
&lt;br /&gt;
I'm not sure if Runfast mode will be enabled by default in the Angstrom distribution packaged with the Pandora. If it isn't you can use the following C code to enforce it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void enable_runfast()&lt;br /&gt;
{&lt;br /&gt;
	static const unsigned int x = 0x04086060;&lt;br /&gt;
	static const unsigned int y = 0x03000000;&lt;br /&gt;
	int r;&lt;br /&gt;
	asm volatile (&lt;br /&gt;
		&amp;quot;fmrx	%0, fpscr			\n\t&amp;quot;	//r0 = FPSCR&lt;br /&gt;
		&amp;quot;and	%0, %0, %1			\n\t&amp;quot;	//r0 = r0 &amp;amp; 0x04086060&lt;br /&gt;
		&amp;quot;orr	%0, %0, %2			\n\t&amp;quot;	//r0 = r0 | 0x03000000&lt;br /&gt;
		&amp;quot;fmxr	fpscr, %0			\n\t&amp;quot;	//FPSCR = r0&lt;br /&gt;
		: &amp;quot;=r&amp;quot;(r)&lt;br /&gt;
		: &amp;quot;r&amp;quot;(x), &amp;quot;r&amp;quot;(y)&lt;br /&gt;
	);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instructions that are executed on the NFP are: FADDS, FSUBS, FABSS, FNEGS, FMULS, FNMULS, FMACS, FNMACS, FMSCS, FNMSCS, FCMPS, FCMPES, FCMPZS, FCMPEZS, FUITOS, FSITOS, FTOUIS, FTOSIS, FTOUIZS, FTOSIZS, FSHTOS, FSLTOS, FUHTOS, FULTOS, FTOSHS, FTOSLS, FTOUHS, FTOULS.&lt;br /&gt;
&lt;br /&gt;
== Single Precision Floating Point ==&lt;br /&gt;
One important and easy optimization is to make sure that single precision constants are being used. By default this is not the case, instead a double precision constant is being used, so all related operations involving that constant require slower double precision instructions and cannot be executed on the NEON. eg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{ &lt;br /&gt;
	return (2.123 * x); &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
might end up the same as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{&lt;br /&gt;
	double dx = (double) x;&lt;br /&gt;
	double dy = (double) 2.123; &lt;br /&gt;
	double dr = dx * dy;&lt;br /&gt;
	float r = (float) dr;&lt;br /&gt;
	return r;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can enforce single precision constants by including the compiler flag: '''-fsingle-precision-constant''', alternatively you can append an 'f' to the end of each constant. ie 2.123f&lt;br /&gt;
&lt;br /&gt;
Another thing to watch out for is the double versions of the functions in libm (sin, exp, sqrt, etc). By default these functions operate on double precision floating point values and suffer the same problems as the constants. Luckily libm supplies floating point versions aswell, they can be accessed by appending an 'f' to the end of the function. ie sinf(), expf(), sqrtf().&lt;br /&gt;
&lt;br /&gt;
== NFP / VFP to ARM Transfers ==&lt;br /&gt;
Probably the biggest bottleneck in the architecture is that inorder to transfer a number from the VFP / NFP registers onto the ARM you must stall both the ARM and NFP / VFP for &amp;gt;20 cycles. This is particularly troublesome because this is how GCC (except the CSL 2009q1 release) supplies arguments and recieves returns from functions. Possibly The best way to minimize operand passing stalls is to make the floating point functions inline.&lt;br /&gt;
&lt;br /&gt;
Another source of NFP / VFP - ARM transfers are conditional branches that depend on floating point numbers. You can do the condition on the VFP but inorder to branch the flags must be sent from the VFP to the ARM. For very simple branches your best bet is to not branch at all and instead use arithmetic. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;if (x &amp;lt; 0) {x += 1.1244;}&amp;lt;/source&amp;gt;&lt;br /&gt;
Is the same as:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;x = x + (x &amp;lt; 0) * 1.1244&amp;lt;/source&amp;gt;&lt;br /&gt;
However you might want to keep a close eye on what the compiler actually produces with the above code. &lt;br /&gt;
&lt;br /&gt;
One interesting fact is that using stores and loads do not cause a stall. So aslong as you don't need the result straight away you can hide the 20 cycle latency. Instead of doing a transfer you; store your NFP / VFP result to memory, do some work on the ARM, then load the result back onto the ARM without penalty. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;void foo(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 123 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void bar(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 546 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
	float x = 10;&lt;br /&gt;
	float y, z;&lt;br /&gt;
	foo(&amp;amp;x, &amp;amp;y)&lt;br /&gt;
	&lt;br /&gt;
	//do ~20 cycles of ARM work&lt;br /&gt;
	&lt;br /&gt;
	bar(&amp;amp;y, &amp;amp;z);&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NEON SIMD ==&lt;br /&gt;
The NEON unit is similar to the MMX and SSE extensions found on X86 processors, it is optimized for Single Instruction Multiple Data (SIMD) operations.&lt;br /&gt;
The NEON unit has 2 floating point pipelines, an integer pipeline and a 128bit load/store/permute pipeline. When properly utilized it is a very powerful coprocessor. Unfortunately GCC does a rather poor job of vectorizing code for the NEON unit. To get the best performance you should use either the intrinsics provided in the &amp;quot;arm_neon.h&amp;quot; header or hand written assembly. &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Therefore, Inorder to achieve the best floating point performance on the Pandora:&lt;br /&gt;
* Use the CodeSourcery 2007q3 release and these flags: -O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant&lt;br /&gt;
* Only use single precision floating point&lt;br /&gt;
* Enable RunFast mode&lt;br /&gt;
* Use NEON intrinsics / ASM for vector, or even scalar, code.&lt;br /&gt;
* Inline floating point code (unless its very large)&lt;br /&gt;
* Minimize Conditional Branches&lt;br /&gt;
* Pass Arguments via pointers instead of by value and do integer work in between function calls.&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1433</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1433"/>
		<updated>2009-08-01T00:45:58Z</updated>

		<summary type="html">&lt;p&gt;Adventus: /* Single Precision Floating Point */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
In the past it was rare for an embedded processor to have dedicated floating point hardware, this usually limited you to either using fixed point math (which can be very tricky to write) or very slow software floating point emulation. Fortunately the ARM Cortex A8 found in the OMAP3 has 2 Floating Point Units, a non-pipelined VFP-lite conforming to the IEEE754 standard for floating point arithmetic and a pipelined SIMD NEON coprocessor. The VFP-lite can handle both single and double precision arithmetic, as well as properly handling exceptions and subnormal numbers. However, Due to the full spec compliance and presence of the NEON, it is a relatively slow implementation in the A8, usually taking between 18 - 21 cycles to perform a single precision multiply accumulate. The NEON unit on the other hand is designed for very fast single precision vector math, it can sustain multiply accumulates at a rate of two per cycle. Efficiently utilizing these coprocessors in GCC will be the focus of this article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In this article I refer to the A8's integer pipeline as the &amp;quot;ARM&amp;quot; , the VFP-lite as simply the &amp;quot;VFP&amp;quot; and the NEON unit as the &amp;quot;NFP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Compiler Support ==&lt;br /&gt;
The NEON + VFP-lite is a new design from ARM and hence does not yet have very mature compiler support. At present the Code Sourcery toolchain has the best support since the mainline GCCs do not support NEON yet. Code Sourcery Compiler versions:&lt;br /&gt;
* CSL 2007q3: Working NEON, Softfp Support&lt;br /&gt;
* CSL 2008q3: Broken NEON!&lt;br /&gt;
* CSL 2009q1: Working NEON, Hardfp + Softfp Support&lt;br /&gt;
&lt;br /&gt;
Generally the CS2007q3 release is recommended, the CSL 2009q1 release is promising but it has not been thoroughly tested yet. One big problem with the current compilers is the heavy dependence on VFP code, currently they only output NEON code when an obvious chance of vectorization is encountered (rarely). Apart from the esoteric rounding, vector, etc modes of the VFP (most of which compilers don't use) and predication (used occasionally), most VFP floating point instructions can be exactly replicated using an order of magnitude faster NEON instructions.... Infact it has been reported to me that the GCC packaged with the iPhone 3GS SDK does exactly this. Hopefully future compilers will support this feature. &lt;br /&gt;
&lt;br /&gt;
Inorder to instruct the compiler to produce NEON or VFP code you should use the following compile flags: -mfpu=neon or -mfpu=vfp. Unfortunately the CSL 2007 / 2008 toolchains do not support the passing of values in floating point registers (i talk about this some more in the Transfers section), so you must specify a software ABI via -mfloat-abi=softfp. The CSL 2009q1 release is the first release to support the passing of values in FP registers (AKA hardfp) via the -mfloat-abi=hard compile flag. Note that hardfp compiled binaries are not compatible with softfp ones and vice versa, so make sure your libraries have the correct ABI. Additionally, If you want the compiler to attempt to vectorize your integer / floating point code for the NEON you should add: -ftree-vectorize to your flags. &lt;br /&gt;
&lt;br /&gt;
Therefore i recommend the following flags: '''-O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=(softfp|hard) -ffast-math -fsingle-precision-constant''' where -mfloat-abi=hard for the CSL 2009q1 release and softfp for all the others.&lt;br /&gt;
&lt;br /&gt;
== VFP-Lite RunFast ==&lt;br /&gt;
Under the correct circumstances some of The VFPs instructions will be executed in the NEON coprocessor. Unfortunately this does not gain the full benefit of the NEON, it still takes 7 cycles for an FMAC / FMUL / FADD. Due to this quirk you will likely get better scalar performance by accessing the NEON directly via Intrinsics or ASM.&lt;br /&gt;
&lt;br /&gt;
Inorder for VFP instructions to execute in the NFP the following constraints must be met:&lt;br /&gt;
* RunFast mode must be enabled&lt;br /&gt;
* Must be single precision floating point operands&lt;br /&gt;
* Must not be a vector instruction (GCC doesn't appear to use this feature, so don't worry about it)&lt;br /&gt;
&lt;br /&gt;
Runfast mode is enabled when the following conditions are present:&lt;br /&gt;
* Subnormal numbers are being flushed to zero &lt;br /&gt;
* Default NaN mode is active&lt;br /&gt;
* No floating point exceptions are enabled&lt;br /&gt;
&lt;br /&gt;
I'm not sure if Runfast mode will be enabled by default in the Angstrom distribution packaged with the Pandora. If it isn't you can use the following C code to enforce it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void enable_runfast()&lt;br /&gt;
{&lt;br /&gt;
	static const unsigned int x = 0x04086060;&lt;br /&gt;
	static const unsigned int y = 0x03000000;&lt;br /&gt;
	int r;&lt;br /&gt;
	asm volatile (&lt;br /&gt;
		&amp;quot;fmrx	%0, fpscr			\n\t&amp;quot;	//r0 = FPSCR&lt;br /&gt;
		&amp;quot;and	%0, %0, %1			\n\t&amp;quot;	//r0 = r0 &amp;amp; 0x04086060&lt;br /&gt;
		&amp;quot;orr	%0, %0, %2			\n\t&amp;quot;	//r0 = r0 | 0x03000000&lt;br /&gt;
		&amp;quot;fmxr	fpscr, %0			\n\t&amp;quot;	//FPSCR = r0&lt;br /&gt;
		: &amp;quot;=r&amp;quot;(r)&lt;br /&gt;
		: &amp;quot;r&amp;quot;(x), &amp;quot;r&amp;quot;(y)&lt;br /&gt;
	);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instructions that are executed on the NFP are: FADDS, FSUBS, FABSS, FNEGS, FMULS, FNMULS, FMACS, FNMACS, FMSCS, FNMSCS, FCMPS, FCMPES, FCMPZS, FCMPEZS, FUITOS, FSITOS, FTOUIS, FTOSIS, FTOUIZS, FTOSIZS, FSHTOS, FSLTOS, FUHTOS, FULTOS, FTOSHS, FTOSLS, FTOUHS, FTOULS.&lt;br /&gt;
&lt;br /&gt;
== Single Precision Floating Point ==&lt;br /&gt;
One important and easy optimization is to make sure that single precision constants are being used. By default this is not the case, instead a double precision constant is being used, so all related operations involving that constant require slower double precision instructions and cannot be executed on the NEON. eg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{ &lt;br /&gt;
	return (2.123 * x); &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
might end up the same as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{&lt;br /&gt;
	double dx = (double) x;&lt;br /&gt;
	double dy = (double) 2.123; &lt;br /&gt;
	double dr = dx * dy;&lt;br /&gt;
	float r = (float) dr;&lt;br /&gt;
	return r;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can enforce single precision constants by including the compiler flag: '''-fsingle-precision-constant''', alternatively you can append an 'f' to the end of each constant. ie 2.123f&lt;br /&gt;
&lt;br /&gt;
Another thing to watch out for is the double versions of the functions in libm (sin, exp, sqrt, etc). By default these functions operate on double precision floating point values and suffer the same problems as the constants. Luckily libm supplies floating point versions aswell, they can be accessed by appending an 'f' to the end of the function. ie sinf(), expf(), sqrtf().&lt;br /&gt;
&lt;br /&gt;
== NFP / VFP to ARM Transfers ==&lt;br /&gt;
Probably the biggest bottleneck in the architecture is that inorder to transfer a number from the VFP / NFP registers onto the ARM you must stall both the ARM and NFP / VFP for &amp;gt;20 cycles. This is particularly troublesome because this is how GCC supplies arguments and recieves returns from functions. Possibly The best way to minimize operand passing stalls is to make the floating point functions inline.&lt;br /&gt;
&lt;br /&gt;
Another source of NFP / VFP - ARM transfers are conditional branches that depend on floating point numbers. You can do the condition on the VFP but inorder to branch the flags must be sent from the VFP to the ARM. For very simple branches your best bet is to not branch at all and instead use arithmetic. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;if (x &amp;lt; 0) {x += 1.1244;}&amp;lt;/source&amp;gt;&lt;br /&gt;
Is the same as:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;x = x + (x &amp;lt; 0) * 1.1244&amp;lt;/source&amp;gt;&lt;br /&gt;
However you might want to keep a close eye on what the compiler actually produces with the above code. &lt;br /&gt;
&lt;br /&gt;
One interesting fact is that using stores and loads do not cause a stall. So aslong as you don't need the result straight away you can hide the 20 cycle latency. Instead of doing a transfer you; store your NFP / VFP result to memory, do some work on the ARM, then load the result back onto the ARM without penalty. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;void foo(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 123 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void bar(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 546 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
	float x = 10;&lt;br /&gt;
	float y, z;&lt;br /&gt;
	foo(&amp;amp;x, &amp;amp;y)&lt;br /&gt;
	&lt;br /&gt;
	//do ~20 cycles of ARM work&lt;br /&gt;
	&lt;br /&gt;
	bar(&amp;amp;y, &amp;amp;z);&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NEON SIMD ==&lt;br /&gt;
The NEON unit is similar to the MMX and SSE extensions found on X86 processors, it is optimized for Single Instruction Multiple Data (SIMD) operations.&lt;br /&gt;
The NEON unit has 2 floating point pipelines, an integer pipeline and a 128bit load/store/permute pipeline. When properly utilized it is a very powerful coprocessor. Unfortunately GCC does a rather poor job of vectorizing code for the NEON unit. To get the best performance you should use either the intrinsics provided in the &amp;quot;arm_neon.h&amp;quot; header or hand written assembly. &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Therefore, Inorder to achieve the best floating point performance on the Pandora:&lt;br /&gt;
* Use the CodeSourcery 2007q3 release and these flags: -O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant&lt;br /&gt;
* Only use single precision floating point&lt;br /&gt;
* Enable RunFast mode&lt;br /&gt;
* Use NEON intrinsics / ASM for vector, or even scalar, code.&lt;br /&gt;
* Inline floating point code (unless its very large)&lt;br /&gt;
* Minimize Conditional Branches&lt;br /&gt;
* Pass Arguments via pointers instead of by value and do integer work in between function calls.&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1432</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1432"/>
		<updated>2009-08-01T00:44:32Z</updated>

		<summary type="html">&lt;p&gt;Adventus: /* VFP-Lite RunFast */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
In the past it was rare for an embedded processor to have dedicated floating point hardware, this usually limited you to either using fixed point math (which can be very tricky to write) or very slow software floating point emulation. Fortunately the ARM Cortex A8 found in the OMAP3 has 2 Floating Point Units, a non-pipelined VFP-lite conforming to the IEEE754 standard for floating point arithmetic and a pipelined SIMD NEON coprocessor. The VFP-lite can handle both single and double precision arithmetic, as well as properly handling exceptions and subnormal numbers. However, Due to the full spec compliance and presence of the NEON, it is a relatively slow implementation in the A8, usually taking between 18 - 21 cycles to perform a single precision multiply accumulate. The NEON unit on the other hand is designed for very fast single precision vector math, it can sustain multiply accumulates at a rate of two per cycle. Efficiently utilizing these coprocessors in GCC will be the focus of this article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In this article I refer to the A8's integer pipeline as the &amp;quot;ARM&amp;quot; , the VFP-lite as simply the &amp;quot;VFP&amp;quot; and the NEON unit as the &amp;quot;NFP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Compiler Support ==&lt;br /&gt;
The NEON + VFP-lite is a new design from ARM and hence does not yet have very mature compiler support. At present the Code Sourcery toolchain has the best support since the mainline GCCs do not support NEON yet. Code Sourcery Compiler versions:&lt;br /&gt;
* CSL 2007q3: Working NEON, Softfp Support&lt;br /&gt;
* CSL 2008q3: Broken NEON!&lt;br /&gt;
* CSL 2009q1: Working NEON, Hardfp + Softfp Support&lt;br /&gt;
&lt;br /&gt;
Generally the CS2007q3 release is recommended, the CSL 2009q1 release is promising but it has not been thoroughly tested yet. One big problem with the current compilers is the heavy dependence on VFP code, currently they only output NEON code when an obvious chance of vectorization is encountered (rarely). Apart from the esoteric rounding, vector, etc modes of the VFP (most of which compilers don't use) and predication (used occasionally), most VFP floating point instructions can be exactly replicated using an order of magnitude faster NEON instructions.... Infact it has been reported to me that the GCC packaged with the iPhone 3GS SDK does exactly this. Hopefully future compilers will support this feature. &lt;br /&gt;
&lt;br /&gt;
Inorder to instruct the compiler to produce NEON or VFP code you should use the following compile flags: -mfpu=neon or -mfpu=vfp. Unfortunately the CSL 2007 / 2008 toolchains do not support the passing of values in floating point registers (i talk about this some more in the Transfers section), so you must specify a software ABI via -mfloat-abi=softfp. The CSL 2009q1 release is the first release to support the passing of values in FP registers (AKA hardfp) via the -mfloat-abi=hard compile flag. Note that hardfp compiled binaries are not compatible with softfp ones and vice versa, so make sure your libraries have the correct ABI. Additionally, If you want the compiler to attempt to vectorize your integer / floating point code for the NEON you should add: -ftree-vectorize to your flags. &lt;br /&gt;
&lt;br /&gt;
Therefore i recommend the following flags: '''-O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=(softfp|hard) -ffast-math -fsingle-precision-constant''' where -mfloat-abi=hard for the CSL 2009q1 release and softfp for all the others.&lt;br /&gt;
&lt;br /&gt;
== VFP-Lite RunFast ==&lt;br /&gt;
Under the correct circumstances some of The VFPs instructions will be executed in the NEON coprocessor. Unfortunately this does not gain the full benefit of the NEON, it still takes 7 cycles for an FMAC / FMUL / FADD. Due to this quirk you will likely get better scalar performance by accessing the NEON directly via Intrinsics or ASM.&lt;br /&gt;
&lt;br /&gt;
Inorder for VFP instructions to execute in the NFP the following constraints must be met:&lt;br /&gt;
* RunFast mode must be enabled&lt;br /&gt;
* Must be single precision floating point operands&lt;br /&gt;
* Must not be a vector instruction (GCC doesn't appear to use this feature, so don't worry about it)&lt;br /&gt;
&lt;br /&gt;
Runfast mode is enabled when the following conditions are present:&lt;br /&gt;
* Subnormal numbers are being flushed to zero &lt;br /&gt;
* Default NaN mode is active&lt;br /&gt;
* No floating point exceptions are enabled&lt;br /&gt;
&lt;br /&gt;
I'm not sure if Runfast mode will be enabled by default in the Angstrom distribution packaged with the Pandora. If it isn't you can use the following C code to enforce it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void enable_runfast()&lt;br /&gt;
{&lt;br /&gt;
	static const unsigned int x = 0x04086060;&lt;br /&gt;
	static const unsigned int y = 0x03000000;&lt;br /&gt;
	int r;&lt;br /&gt;
	asm volatile (&lt;br /&gt;
		&amp;quot;fmrx	%0, fpscr			\n\t&amp;quot;	//r0 = FPSCR&lt;br /&gt;
		&amp;quot;and	%0, %0, %1			\n\t&amp;quot;	//r0 = r0 &amp;amp; 0x04086060&lt;br /&gt;
		&amp;quot;orr	%0, %0, %2			\n\t&amp;quot;	//r0 = r0 | 0x03000000&lt;br /&gt;
		&amp;quot;fmxr	fpscr, %0			\n\t&amp;quot;	//FPSCR = r0&lt;br /&gt;
		: &amp;quot;=r&amp;quot;(r)&lt;br /&gt;
		: &amp;quot;r&amp;quot;(x), &amp;quot;r&amp;quot;(y)&lt;br /&gt;
	);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instructions that are executed on the NFP are: FADDS, FSUBS, FABSS, FNEGS, FMULS, FNMULS, FMACS, FNMACS, FMSCS, FNMSCS, FCMPS, FCMPES, FCMPZS, FCMPEZS, FUITOS, FSITOS, FTOUIS, FTOSIS, FTOUIZS, FTOSIZS, FSHTOS, FSLTOS, FUHTOS, FULTOS, FTOSHS, FTOSLS, FTOUHS, FTOULS.&lt;br /&gt;
&lt;br /&gt;
== Single Precision Floating Point ==&lt;br /&gt;
One important and easy optimization is to make sure that single precision constants are being used. By default this is not the case, instead a double precision constant is being used, so all related operations involving that constant require double precision instructions and cannot be executed on the NEON. eg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{ &lt;br /&gt;
	return (2.123 * x); &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
might end up the same as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{&lt;br /&gt;
	double dx = (double) x;&lt;br /&gt;
	double dy = (double) 2.123; &lt;br /&gt;
	double dr = dx * dy;&lt;br /&gt;
	float r = (float) dr;&lt;br /&gt;
	return r;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can enforce single precision constants by including the compiler flag: '''-fsingle-precision-constant''', alternatively you can append an 'f' to the end of each constant. ie 2.123f&lt;br /&gt;
&lt;br /&gt;
Another thing to watch out for is the double versions of the functions in libm (sin, exp, sqrt) etc. By default these functions operate on double precision floating point values and suffer the same problems as the constants. Luckily libm supplies floating point versions aswell, they can be accessed by appending an 'f' to the end of the function. ie sinf(), expf(), sqrtf().&lt;br /&gt;
&lt;br /&gt;
== NFP / VFP to ARM Transfers ==&lt;br /&gt;
Probably the biggest bottleneck in the architecture is that inorder to transfer a number from the VFP / NFP registers onto the ARM you must stall both the ARM and NFP / VFP for &amp;gt;20 cycles. This is particularly troublesome because this is how GCC supplies arguments and recieves returns from functions. Possibly The best way to minimize operand passing stalls is to make the floating point functions inline.&lt;br /&gt;
&lt;br /&gt;
Another source of NFP / VFP - ARM transfers are conditional branches that depend on floating point numbers. You can do the condition on the VFP but inorder to branch the flags must be sent from the VFP to the ARM. For very simple branches your best bet is to not branch at all and instead use arithmetic. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;if (x &amp;lt; 0) {x += 1.1244;}&amp;lt;/source&amp;gt;&lt;br /&gt;
Is the same as:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;x = x + (x &amp;lt; 0) * 1.1244&amp;lt;/source&amp;gt;&lt;br /&gt;
However you might want to keep a close eye on what the compiler actually produces with the above code. &lt;br /&gt;
&lt;br /&gt;
One interesting fact is that using stores and loads do not cause a stall. So aslong as you don't need the result straight away you can hide the 20 cycle latency. Instead of doing a transfer you; store your NFP / VFP result to memory, do some work on the ARM, then load the result back onto the ARM without penalty. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;void foo(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 123 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void bar(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 546 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
	float x = 10;&lt;br /&gt;
	float y, z;&lt;br /&gt;
	foo(&amp;amp;x, &amp;amp;y)&lt;br /&gt;
	&lt;br /&gt;
	//do ~20 cycles of ARM work&lt;br /&gt;
	&lt;br /&gt;
	bar(&amp;amp;y, &amp;amp;z);&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NEON SIMD ==&lt;br /&gt;
The NEON unit is similar to the MMX and SSE extensions found on X86 processors, it is optimized for Single Instruction Multiple Data (SIMD) operations.&lt;br /&gt;
The NEON unit has 2 floating point pipelines, an integer pipeline and a 128bit load/store/permute pipeline. When properly utilized it is a very powerful coprocessor. Unfortunately GCC does a rather poor job of vectorizing code for the NEON unit. To get the best performance you should use either the intrinsics provided in the &amp;quot;arm_neon.h&amp;quot; header or hand written assembly. &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Therefore, Inorder to achieve the best floating point performance on the Pandora:&lt;br /&gt;
* Use the CodeSourcery 2007q3 release and these flags: -O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant&lt;br /&gt;
* Only use single precision floating point&lt;br /&gt;
* Enable RunFast mode&lt;br /&gt;
* Use NEON intrinsics / ASM for vector, or even scalar, code.&lt;br /&gt;
* Inline floating point code (unless its very large)&lt;br /&gt;
* Minimize Conditional Branches&lt;br /&gt;
* Pass Arguments via pointers instead of by value and do integer work in between function calls.&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1431</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1431"/>
		<updated>2009-08-01T00:43:38Z</updated>

		<summary type="html">&lt;p&gt;Adventus: /* VFP-Lite RunFast */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
In the past it was rare for an embedded processor to have dedicated floating point hardware, this usually limited you to either using fixed point math (which can be very tricky to write) or very slow software floating point emulation. Fortunately the ARM Cortex A8 found in the OMAP3 has 2 Floating Point Units, a non-pipelined VFP-lite conforming to the IEEE754 standard for floating point arithmetic and a pipelined SIMD NEON coprocessor. The VFP-lite can handle both single and double precision arithmetic, as well as properly handling exceptions and subnormal numbers. However, Due to the full spec compliance and presence of the NEON, it is a relatively slow implementation in the A8, usually taking between 18 - 21 cycles to perform a single precision multiply accumulate. The NEON unit on the other hand is designed for very fast single precision vector math, it can sustain multiply accumulates at a rate of two per cycle. Efficiently utilizing these coprocessors in GCC will be the focus of this article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In this article I refer to the A8's integer pipeline as the &amp;quot;ARM&amp;quot; , the VFP-lite as simply the &amp;quot;VFP&amp;quot; and the NEON unit as the &amp;quot;NFP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Compiler Support ==&lt;br /&gt;
The NEON + VFP-lite is a new design from ARM and hence does not yet have very mature compiler support. At present the Code Sourcery toolchain has the best support since the mainline GCCs do not support NEON yet. Code Sourcery Compiler versions:&lt;br /&gt;
* CSL 2007q3: Working NEON, Softfp Support&lt;br /&gt;
* CSL 2008q3: Broken NEON!&lt;br /&gt;
* CSL 2009q1: Working NEON, Hardfp + Softfp Support&lt;br /&gt;
&lt;br /&gt;
Generally the CS2007q3 release is recommended, the CSL 2009q1 release is promising but it has not been thoroughly tested yet. One big problem with the current compilers is the heavy dependence on VFP code, currently they only output NEON code when an obvious chance of vectorization is encountered (rarely). Apart from the esoteric rounding, vector, etc modes of the VFP (most of which compilers don't use) and predication (used occasionally), most VFP floating point instructions can be exactly replicated using an order of magnitude faster NEON instructions.... Infact it has been reported to me that the GCC packaged with the iPhone 3GS SDK does exactly this. Hopefully future compilers will support this feature. &lt;br /&gt;
&lt;br /&gt;
Inorder to instruct the compiler to produce NEON or VFP code you should use the following compile flags: -mfpu=neon or -mfpu=vfp. Unfortunately the CSL 2007 / 2008 toolchains do not support the passing of values in floating point registers (i talk about this some more in the Transfers section), so you must specify a software ABI via -mfloat-abi=softfp. The CSL 2009q1 release is the first release to support the passing of values in FP registers (AKA hardfp) via the -mfloat-abi=hard compile flag. Note that hardfp compiled binaries are not compatible with softfp ones and vice versa, so make sure your libraries have the correct ABI. Additionally, If you want the compiler to attempt to vectorize your integer / floating point code for the NEON you should add: -ftree-vectorize to your flags. &lt;br /&gt;
&lt;br /&gt;
Therefore i recommend the following flags: '''-O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=(softfp|hard) -ffast-math -fsingle-precision-constant''' where -mfloat-abi=hard for the CSL 2009q1 release and softfp for all the others.&lt;br /&gt;
&lt;br /&gt;
== VFP-Lite RunFast ==&lt;br /&gt;
Under the correct circumstances some of The VFPs instructions will be executed in the NEON coprocessor. Unfortunately this does not gain the full benefit of the NEON, it still takes 7 cycles for an FMAC / FMUL / FADD. Due to this quirk you will likely get better scalar performance by accessing the NEON directly via Intrinsics or ASM.&lt;br /&gt;
&lt;br /&gt;
Inorder for VFP instructions to execute in the NFP the following constraints must be met:&lt;br /&gt;
* RunFast mode must be enabled&lt;br /&gt;
* Must be single precision floating point operands&lt;br /&gt;
* Must not be a vector instruction (GCC doesn't appear to use this feature, so don't worry about it)&lt;br /&gt;
&lt;br /&gt;
Runfast mode is enabled when the following conditions are present:&lt;br /&gt;
* Subnormal numbers are being flushed to zero &lt;br /&gt;
* Default NaN mode is active&lt;br /&gt;
* No floating point exceptions are enabled&lt;br /&gt;
&lt;br /&gt;
At the present time, it is unsure to me whether Runfast mode will be enabled by default in the Angstrom distribution packaged with the Pandora. If it isn't you can use the following C code to enforce it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void enable_runfast()&lt;br /&gt;
{&lt;br /&gt;
	static const unsigned int x = 0x04086060;&lt;br /&gt;
	static const unsigned int y = 0x03000000;&lt;br /&gt;
	int r;&lt;br /&gt;
	asm volatile (&lt;br /&gt;
		&amp;quot;fmrx	%0, fpscr			\n\t&amp;quot;	//r0 = FPSCR&lt;br /&gt;
		&amp;quot;and	%0, %0, %1			\n\t&amp;quot;	//r0 = r0 &amp;amp; 0x04086060&lt;br /&gt;
		&amp;quot;orr	%0, %0, %2			\n\t&amp;quot;	//r0 = r0 | 0x03000000&lt;br /&gt;
		&amp;quot;fmxr	fpscr, %0			\n\t&amp;quot;	//FPSCR = r0&lt;br /&gt;
		: &amp;quot;=r&amp;quot;(r)&lt;br /&gt;
		: &amp;quot;r&amp;quot;(x), &amp;quot;r&amp;quot;(y)&lt;br /&gt;
	);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instructions that are executed on the NFP are: FADDS, FSUBS, FABSS, FNEGS, FMULS, FNMULS, FMACS, FNMACS, FMSCS, FNMSCS, FCMPS, FCMPES, FCMPZS, FCMPEZS, FUITOS, FSITOS, FTOUIS, FTOSIS, FTOUIZS, FTOSIZS, FSHTOS, FSLTOS, FUHTOS, FULTOS, FTOSHS, FTOSLS, FTOUHS, FTOULS.&lt;br /&gt;
&lt;br /&gt;
== Single Precision Floating Point ==&lt;br /&gt;
One important and easy optimization is to make sure that single precision constants are being used. By default this is not the case, instead a double precision constant is being used, so all related operations involving that constant require double precision instructions and cannot be executed on the NEON. eg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{ &lt;br /&gt;
	return (2.123 * x); &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
might end up the same as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{&lt;br /&gt;
	double dx = (double) x;&lt;br /&gt;
	double dy = (double) 2.123; &lt;br /&gt;
	double dr = dx * dy;&lt;br /&gt;
	float r = (float) dr;&lt;br /&gt;
	return r;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can enforce single precision constants by including the compiler flag: '''-fsingle-precision-constant''', alternatively you can append an 'f' to the end of each constant. ie 2.123f&lt;br /&gt;
&lt;br /&gt;
Another thing to watch out for is the double versions of the functions in libm (sin, exp, sqrt) etc. By default these functions operate on double precision floating point values and suffer the same problems as the constants. Luckily libm supplies floating point versions aswell, they can be accessed by appending an 'f' to the end of the function. ie sinf(), expf(), sqrtf().&lt;br /&gt;
&lt;br /&gt;
== NFP / VFP to ARM Transfers ==&lt;br /&gt;
Probably the biggest bottleneck in the architecture is that inorder to transfer a number from the VFP / NFP registers onto the ARM you must stall both the ARM and NFP / VFP for &amp;gt;20 cycles. This is particularly troublesome because this is how GCC supplies arguments and recieves returns from functions. Possibly The best way to minimize operand passing stalls is to make the floating point functions inline.&lt;br /&gt;
&lt;br /&gt;
Another source of NFP / VFP - ARM transfers are conditional branches that depend on floating point numbers. You can do the condition on the VFP but inorder to branch the flags must be sent from the VFP to the ARM. For very simple branches your best bet is to not branch at all and instead use arithmetic. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;if (x &amp;lt; 0) {x += 1.1244;}&amp;lt;/source&amp;gt;&lt;br /&gt;
Is the same as:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;x = x + (x &amp;lt; 0) * 1.1244&amp;lt;/source&amp;gt;&lt;br /&gt;
However you might want to keep a close eye on what the compiler actually produces with the above code. &lt;br /&gt;
&lt;br /&gt;
One interesting fact is that using stores and loads do not cause a stall. So aslong as you don't need the result straight away you can hide the 20 cycle latency. Instead of doing a transfer you; store your NFP / VFP result to memory, do some work on the ARM, then load the result back onto the ARM without penalty. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;void foo(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 123 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void bar(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 546 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
	float x = 10;&lt;br /&gt;
	float y, z;&lt;br /&gt;
	foo(&amp;amp;x, &amp;amp;y)&lt;br /&gt;
	&lt;br /&gt;
	//do ~20 cycles of ARM work&lt;br /&gt;
	&lt;br /&gt;
	bar(&amp;amp;y, &amp;amp;z);&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NEON SIMD ==&lt;br /&gt;
The NEON unit is similar to the MMX and SSE extensions found on X86 processors, it is optimized for Single Instruction Multiple Data (SIMD) operations.&lt;br /&gt;
The NEON unit has 2 floating point pipelines, an integer pipeline and a 128bit load/store/permute pipeline. When properly utilized it is a very powerful coprocessor. Unfortunately GCC does a rather poor job of vectorizing code for the NEON unit. To get the best performance you should use either the intrinsics provided in the &amp;quot;arm_neon.h&amp;quot; header or hand written assembly. &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Therefore, Inorder to achieve the best floating point performance on the Pandora:&lt;br /&gt;
* Use the CodeSourcery 2007q3 release and these flags: -O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant&lt;br /&gt;
* Only use single precision floating point&lt;br /&gt;
* Enable RunFast mode&lt;br /&gt;
* Use NEON intrinsics / ASM for vector, or even scalar, code.&lt;br /&gt;
* Inline floating point code (unless its very large)&lt;br /&gt;
* Minimize Conditional Branches&lt;br /&gt;
* Pass Arguments via pointers instead of by value and do integer work in between function calls.&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1430</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1430"/>
		<updated>2009-08-01T00:42:29Z</updated>

		<summary type="html">&lt;p&gt;Adventus: /* VFP-Lite RunFast */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
In the past it was rare for an embedded processor to have dedicated floating point hardware, this usually limited you to either using fixed point math (which can be very tricky to write) or very slow software floating point emulation. Fortunately the ARM Cortex A8 found in the OMAP3 has 2 Floating Point Units, a non-pipelined VFP-lite conforming to the IEEE754 standard for floating point arithmetic and a pipelined SIMD NEON coprocessor. The VFP-lite can handle both single and double precision arithmetic, as well as properly handling exceptions and subnormal numbers. However, Due to the full spec compliance and presence of the NEON, it is a relatively slow implementation in the A8, usually taking between 18 - 21 cycles to perform a single precision multiply accumulate. The NEON unit on the other hand is designed for very fast single precision vector math, it can sustain multiply accumulates at a rate of two per cycle. Efficiently utilizing these coprocessors in GCC will be the focus of this article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In this article I refer to the A8's integer pipeline as the &amp;quot;ARM&amp;quot; , the VFP-lite as simply the &amp;quot;VFP&amp;quot; and the NEON unit as the &amp;quot;NFP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Compiler Support ==&lt;br /&gt;
The NEON + VFP-lite is a new design from ARM and hence does not yet have very mature compiler support. At present the Code Sourcery toolchain has the best support since the mainline GCCs do not support NEON yet. Code Sourcery Compiler versions:&lt;br /&gt;
* CSL 2007q3: Working NEON, Softfp Support&lt;br /&gt;
* CSL 2008q3: Broken NEON!&lt;br /&gt;
* CSL 2009q1: Working NEON, Hardfp + Softfp Support&lt;br /&gt;
&lt;br /&gt;
Generally the CS2007q3 release is recommended, the CSL 2009q1 release is promising but it has not been thoroughly tested yet. One big problem with the current compilers is the heavy dependence on VFP code, currently they only output NEON code when an obvious chance of vectorization is encountered (rarely). Apart from the esoteric rounding, vector, etc modes of the VFP (most of which compilers don't use) and predication (used occasionally), most VFP floating point instructions can be exactly replicated using an order of magnitude faster NEON instructions.... Infact it has been reported to me that the GCC packaged with the iPhone 3GS SDK does exactly this. Hopefully future compilers will support this feature. &lt;br /&gt;
&lt;br /&gt;
Inorder to instruct the compiler to produce NEON or VFP code you should use the following compile flags: -mfpu=neon or -mfpu=vfp. Unfortunately the CSL 2007 / 2008 toolchains do not support the passing of values in floating point registers (i talk about this some more in the Transfers section), so you must specify a software ABI via -mfloat-abi=softfp. The CSL 2009q1 release is the first release to support the passing of values in FP registers (AKA hardfp) via the -mfloat-abi=hard compile flag. Note that hardfp compiled binaries are not compatible with softfp ones and vice versa, so make sure your libraries have the correct ABI. Additionally, If you want the compiler to attempt to vectorize your integer / floating point code for the NEON you should add: -ftree-vectorize to your flags. &lt;br /&gt;
&lt;br /&gt;
Therefore i recommend the following flags: '''-O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=(softfp|hard) -ffast-math -fsingle-precision-constant''' where -mfloat-abi=hard for the CSL 2009q1 release and softfp for all the others.&lt;br /&gt;
&lt;br /&gt;
== VFP-Lite RunFast ==&lt;br /&gt;
Under the correct circumstances some of The VFPs instructions will be executed in the NEON coprocessor. Unfortunately this does not gain the full benefit of the NEON, it still takes 7 cycles for an FMAC / FMUL / FADD. Due to this quirk you will likely get better scalar performance by accessing the NEON directly via Intrinsics or ASM.&lt;br /&gt;
&lt;br /&gt;
Inorder for VFP instructions to execute in the NFP the following constraints must be met:&lt;br /&gt;
* RunFast mode must be enabled&lt;br /&gt;
* Must be single precision floating point operands&lt;br /&gt;
* Must not be a vector instruction (GCC doesn't appear to use this feature, so don't worry about it)&lt;br /&gt;
&lt;br /&gt;
Runfast mode is enabled when the following conditions are present:&lt;br /&gt;
* Subnormal numbers are being flushed to zero &lt;br /&gt;
* Default NaN mode is active&lt;br /&gt;
* No floating point exceptions are enabled&lt;br /&gt;
&lt;br /&gt;
At the present time, it is unsure to me whether Runfast mode will be enabled by default in the Angstrom distribution. If it is not you can use the following C code to enforce it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void enable_runfast()&lt;br /&gt;
{&lt;br /&gt;
	static const unsigned int x = 0x04086060;&lt;br /&gt;
	static const unsigned int y = 0x03000000;&lt;br /&gt;
	int r;&lt;br /&gt;
	asm volatile (&lt;br /&gt;
		&amp;quot;fmrx	%0, fpscr			\n\t&amp;quot;	//r0 = FPSCR&lt;br /&gt;
		&amp;quot;and	%0, %0, %1			\n\t&amp;quot;	//r0 = r0 &amp;amp; 0x04086060&lt;br /&gt;
		&amp;quot;orr	%0, %0, %2			\n\t&amp;quot;	//r0 = r0 | 0x03000000&lt;br /&gt;
		&amp;quot;fmxr	fpscr, %0			\n\t&amp;quot;	//FPSCR = r0&lt;br /&gt;
		: &amp;quot;=r&amp;quot;(r)&lt;br /&gt;
		: &amp;quot;r&amp;quot;(x), &amp;quot;r&amp;quot;(y)&lt;br /&gt;
	);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instructions that are executed on the NFP are: FADDS, FSUBS, FABSS, FNEGS, FMULS, FNMULS, FMACS, FNMACS, FMSCS, FNMSCS, FCMPS, FCMPES, FCMPZS, FCMPEZS, FUITOS, FSITOS, FTOUIS, FTOSIS, FTOUIZS, FTOSIZS, FSHTOS, FSLTOS, FUHTOS, FULTOS, FTOSHS, FTOSLS, FTOUHS, FTOULS.&lt;br /&gt;
&lt;br /&gt;
== Single Precision Floating Point ==&lt;br /&gt;
One important and easy optimization is to make sure that single precision constants are being used. By default this is not the case, instead a double precision constant is being used, so all related operations involving that constant require double precision instructions and cannot be executed on the NEON. eg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{ &lt;br /&gt;
	return (2.123 * x); &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
might end up the same as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{&lt;br /&gt;
	double dx = (double) x;&lt;br /&gt;
	double dy = (double) 2.123; &lt;br /&gt;
	double dr = dx * dy;&lt;br /&gt;
	float r = (float) dr;&lt;br /&gt;
	return r;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can enforce single precision constants by including the compiler flag: '''-fsingle-precision-constant''', alternatively you can append an 'f' to the end of each constant. ie 2.123f&lt;br /&gt;
&lt;br /&gt;
Another thing to watch out for is the double versions of the functions in libm (sin, exp, sqrt) etc. By default these functions operate on double precision floating point values and suffer the same problems as the constants. Luckily libm supplies floating point versions aswell, they can be accessed by appending an 'f' to the end of the function. ie sinf(), expf(), sqrtf().&lt;br /&gt;
&lt;br /&gt;
== NFP / VFP to ARM Transfers ==&lt;br /&gt;
Probably the biggest bottleneck in the architecture is that inorder to transfer a number from the VFP / NFP registers onto the ARM you must stall both the ARM and NFP / VFP for &amp;gt;20 cycles. This is particularly troublesome because this is how GCC supplies arguments and recieves returns from functions. Possibly The best way to minimize operand passing stalls is to make the floating point functions inline.&lt;br /&gt;
&lt;br /&gt;
Another source of NFP / VFP - ARM transfers are conditional branches that depend on floating point numbers. You can do the condition on the VFP but inorder to branch the flags must be sent from the VFP to the ARM. For very simple branches your best bet is to not branch at all and instead use arithmetic. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;if (x &amp;lt; 0) {x += 1.1244;}&amp;lt;/source&amp;gt;&lt;br /&gt;
Is the same as:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;x = x + (x &amp;lt; 0) * 1.1244&amp;lt;/source&amp;gt;&lt;br /&gt;
However you might want to keep a close eye on what the compiler actually produces with the above code. &lt;br /&gt;
&lt;br /&gt;
One interesting fact is that using stores and loads do not cause a stall. So aslong as you don't need the result straight away you can hide the 20 cycle latency. Instead of doing a transfer you; store your NFP / VFP result to memory, do some work on the ARM, then load the result back onto the ARM without penalty. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;void foo(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 123 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void bar(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 546 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
	float x = 10;&lt;br /&gt;
	float y, z;&lt;br /&gt;
	foo(&amp;amp;x, &amp;amp;y)&lt;br /&gt;
	&lt;br /&gt;
	//do ~20 cycles of ARM work&lt;br /&gt;
	&lt;br /&gt;
	bar(&amp;amp;y, &amp;amp;z);&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NEON SIMD ==&lt;br /&gt;
The NEON unit is similar to the MMX and SSE extensions found on X86 processors, it is optimized for Single Instruction Multiple Data (SIMD) operations.&lt;br /&gt;
The NEON unit has 2 floating point pipelines, an integer pipeline and a 128bit load/store/permute pipeline. When properly utilized it is a very powerful coprocessor. Unfortunately GCC does a rather poor job of vectorizing code for the NEON unit. To get the best performance you should use either the intrinsics provided in the &amp;quot;arm_neon.h&amp;quot; header or hand written assembly. &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Therefore, Inorder to achieve the best floating point performance on the Pandora:&lt;br /&gt;
* Use the CodeSourcery 2007q3 release and these flags: -O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant&lt;br /&gt;
* Only use single precision floating point&lt;br /&gt;
* Enable RunFast mode&lt;br /&gt;
* Use NEON intrinsics / ASM for vector, or even scalar, code.&lt;br /&gt;
* Inline floating point code (unless its very large)&lt;br /&gt;
* Minimize Conditional Branches&lt;br /&gt;
* Pass Arguments via pointers instead of by value and do integer work in between function calls.&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1429</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1429"/>
		<updated>2009-08-01T00:41:16Z</updated>

		<summary type="html">&lt;p&gt;Adventus: /* Compiler Support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
In the past it was rare for an embedded processor to have dedicated floating point hardware, this usually limited you to either using fixed point math (which can be very tricky to write) or very slow software floating point emulation. Fortunately the ARM Cortex A8 found in the OMAP3 has 2 Floating Point Units, a non-pipelined VFP-lite conforming to the IEEE754 standard for floating point arithmetic and a pipelined SIMD NEON coprocessor. The VFP-lite can handle both single and double precision arithmetic, as well as properly handling exceptions and subnormal numbers. However, Due to the full spec compliance and presence of the NEON, it is a relatively slow implementation in the A8, usually taking between 18 - 21 cycles to perform a single precision multiply accumulate. The NEON unit on the other hand is designed for very fast single precision vector math, it can sustain multiply accumulates at a rate of two per cycle. Efficiently utilizing these coprocessors in GCC will be the focus of this article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In this article I refer to the A8's integer pipeline as the &amp;quot;ARM&amp;quot; , the VFP-lite as simply the &amp;quot;VFP&amp;quot; and the NEON unit as the &amp;quot;NFP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Compiler Support ==&lt;br /&gt;
The NEON + VFP-lite is a new design from ARM and hence does not yet have very mature compiler support. At present the Code Sourcery toolchain has the best support since the mainline GCCs do not support NEON yet. Code Sourcery Compiler versions:&lt;br /&gt;
* CSL 2007q3: Working NEON, Softfp Support&lt;br /&gt;
* CSL 2008q3: Broken NEON!&lt;br /&gt;
* CSL 2009q1: Working NEON, Hardfp + Softfp Support&lt;br /&gt;
&lt;br /&gt;
Generally the CS2007q3 release is recommended, the CSL 2009q1 release is promising but it has not been thoroughly tested yet. One big problem with the current compilers is the heavy dependence on VFP code, currently they only output NEON code when an obvious chance of vectorization is encountered (rarely). Apart from the esoteric rounding, vector, etc modes of the VFP (most of which compilers don't use) and predication (used occasionally), most VFP floating point instructions can be exactly replicated using an order of magnitude faster NEON instructions.... Infact it has been reported to me that the GCC packaged with the iPhone 3GS SDK does exactly this. Hopefully future compilers will support this feature. &lt;br /&gt;
&lt;br /&gt;
Inorder to instruct the compiler to produce NEON or VFP code you should use the following compile flags: -mfpu=neon or -mfpu=vfp. Unfortunately the CSL 2007 / 2008 toolchains do not support the passing of values in floating point registers (i talk about this some more in the Transfers section), so you must specify a software ABI via -mfloat-abi=softfp. The CSL 2009q1 release is the first release to support the passing of values in FP registers (AKA hardfp) via the -mfloat-abi=hard compile flag. Note that hardfp compiled binaries are not compatible with softfp ones and vice versa, so make sure your libraries have the correct ABI. Additionally, If you want the compiler to attempt to vectorize your integer / floating point code for the NEON you should add: -ftree-vectorize to your flags. &lt;br /&gt;
&lt;br /&gt;
Therefore i recommend the following flags: '''-O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=(softfp|hard) -ffast-math -fsingle-precision-constant''' where -mfloat-abi=hard for the CSL 2009q1 release and softfp for all the others.&lt;br /&gt;
&lt;br /&gt;
== VFP-Lite RunFast ==&lt;br /&gt;
Under the correct circumstances some of The VFPs instructions will be executed in the NEON coprocessor. Unfortunately this does not gain the full benefit of the NEON, it still takes 7 cycles for an FMAC / FMUL / FADD. Due to this quirk you will likely get better scalar performance by accessing the NEON directly via Intrinsics or ASM.&lt;br /&gt;
&lt;br /&gt;
Inorder for VFP instructions to execute in the NFP the following constraints must be met:&lt;br /&gt;
* RunFast mode must be enabled&lt;br /&gt;
* Must be single precision floating point operands&lt;br /&gt;
* Must not be a vector instruction (GCC doesn't appear to use this feature, so don't worry about it)&lt;br /&gt;
&lt;br /&gt;
Runfast mode is enabled when the following conditions are present:&lt;br /&gt;
* subnormal numbers are being flushed to zero &lt;br /&gt;
* default NaN mode is active&lt;br /&gt;
* no floating point exceptions are enabled&lt;br /&gt;
&lt;br /&gt;
At the present time, it is unsure to me whether Runfast mode will be enabled by default in the Angstrom distribution. If it is not you can use the following C code to enforce it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void enable_runfast()&lt;br /&gt;
{&lt;br /&gt;
	static const unsigned int x = 0x04086060;&lt;br /&gt;
	static const unsigned int y = 0x03000000;&lt;br /&gt;
	int r;&lt;br /&gt;
	asm volatile (&lt;br /&gt;
		&amp;quot;fmrx	%0, fpscr			\n\t&amp;quot;	//r0 = FPSCR&lt;br /&gt;
		&amp;quot;and	%0, %0, %1			\n\t&amp;quot;	//r0 = r0 &amp;amp; 0x04086060&lt;br /&gt;
		&amp;quot;orr	%0, %0, %2			\n\t&amp;quot;	//r0 = r0 | 0x03000000&lt;br /&gt;
		&amp;quot;fmxr	fpscr, %0			\n\t&amp;quot;	//FPSCR = r0&lt;br /&gt;
		: &amp;quot;=r&amp;quot;(r)&lt;br /&gt;
		: &amp;quot;r&amp;quot;(x), &amp;quot;r&amp;quot;(y)&lt;br /&gt;
	);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instructions that are executed on the NFP are: FADDS, FSUBS, FABSS, FNEGS, FMULS, FNMULS, FMACS, FNMACS, FMSCS, FNMSCS, FCMPS, FCMPES, FCMPZS, FCMPEZS, FUITOS, FSITOS, FTOUIS, FTOSIS, FTOUIZS, FTOSIZS, FSHTOS, FSLTOS, FUHTOS, FULTOS, FTOSHS, FTOSLS, FTOUHS, FTOULS.&lt;br /&gt;
&lt;br /&gt;
== Single Precision Floating Point ==&lt;br /&gt;
One important and easy optimization is to make sure that single precision constants are being used. By default this is not the case, instead a double precision constant is being used, so all related operations involving that constant require double precision instructions and cannot be executed on the NEON. eg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{ &lt;br /&gt;
	return (2.123 * x); &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
might end up the same as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{&lt;br /&gt;
	double dx = (double) x;&lt;br /&gt;
	double dy = (double) 2.123; &lt;br /&gt;
	double dr = dx * dy;&lt;br /&gt;
	float r = (float) dr;&lt;br /&gt;
	return r;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can enforce single precision constants by including the compiler flag: '''-fsingle-precision-constant''', alternatively you can append an 'f' to the end of each constant. ie 2.123f&lt;br /&gt;
&lt;br /&gt;
Another thing to watch out for is the double versions of the functions in libm (sin, exp, sqrt) etc. By default these functions operate on double precision floating point values and suffer the same problems as the constants. Luckily libm supplies floating point versions aswell, they can be accessed by appending an 'f' to the end of the function. ie sinf(), expf(), sqrtf().&lt;br /&gt;
&lt;br /&gt;
== NFP / VFP to ARM Transfers ==&lt;br /&gt;
Probably the biggest bottleneck in the architecture is that inorder to transfer a number from the VFP / NFP registers onto the ARM you must stall both the ARM and NFP / VFP for &amp;gt;20 cycles. This is particularly troublesome because this is how GCC supplies arguments and recieves returns from functions. Possibly The best way to minimize operand passing stalls is to make the floating point functions inline.&lt;br /&gt;
&lt;br /&gt;
Another source of NFP / VFP - ARM transfers are conditional branches that depend on floating point numbers. You can do the condition on the VFP but inorder to branch the flags must be sent from the VFP to the ARM. For very simple branches your best bet is to not branch at all and instead use arithmetic. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;if (x &amp;lt; 0) {x += 1.1244;}&amp;lt;/source&amp;gt;&lt;br /&gt;
Is the same as:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;x = x + (x &amp;lt; 0) * 1.1244&amp;lt;/source&amp;gt;&lt;br /&gt;
However you might want to keep a close eye on what the compiler actually produces with the above code. &lt;br /&gt;
&lt;br /&gt;
One interesting fact is that using stores and loads do not cause a stall. So aslong as you don't need the result straight away you can hide the 20 cycle latency. Instead of doing a transfer you; store your NFP / VFP result to memory, do some work on the ARM, then load the result back onto the ARM without penalty. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;void foo(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 123 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void bar(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 546 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
	float x = 10;&lt;br /&gt;
	float y, z;&lt;br /&gt;
	foo(&amp;amp;x, &amp;amp;y)&lt;br /&gt;
	&lt;br /&gt;
	//do ~20 cycles of ARM work&lt;br /&gt;
	&lt;br /&gt;
	bar(&amp;amp;y, &amp;amp;z);&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NEON SIMD ==&lt;br /&gt;
The NEON unit is similar to the MMX and SSE extensions found on X86 processors, it is optimized for Single Instruction Multiple Data (SIMD) operations.&lt;br /&gt;
The NEON unit has 2 floating point pipelines, an integer pipeline and a 128bit load/store/permute pipeline. When properly utilized it is a very powerful coprocessor. Unfortunately GCC does a rather poor job of vectorizing code for the NEON unit. To get the best performance you should use either the intrinsics provided in the &amp;quot;arm_neon.h&amp;quot; header or hand written assembly. &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Therefore, Inorder to achieve the best floating point performance on the Pandora:&lt;br /&gt;
* Use the CodeSourcery 2007q3 release and these flags: -O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant&lt;br /&gt;
* Only use single precision floating point&lt;br /&gt;
* Enable RunFast mode&lt;br /&gt;
* Use NEON intrinsics / ASM for vector, or even scalar, code.&lt;br /&gt;
* Inline floating point code (unless its very large)&lt;br /&gt;
* Minimize Conditional Branches&lt;br /&gt;
* Pass Arguments via pointers instead of by value and do integer work in between function calls.&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1428</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1428"/>
		<updated>2009-08-01T00:39:47Z</updated>

		<summary type="html">&lt;p&gt;Adventus: /* Compiler Support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
In the past it was rare for an embedded processor to have dedicated floating point hardware, this usually limited you to either using fixed point math (which can be very tricky to write) or very slow software floating point emulation. Fortunately the ARM Cortex A8 found in the OMAP3 has 2 Floating Point Units, a non-pipelined VFP-lite conforming to the IEEE754 standard for floating point arithmetic and a pipelined SIMD NEON coprocessor. The VFP-lite can handle both single and double precision arithmetic, as well as properly handling exceptions and subnormal numbers. However, Due to the full spec compliance and presence of the NEON, it is a relatively slow implementation in the A8, usually taking between 18 - 21 cycles to perform a single precision multiply accumulate. The NEON unit on the other hand is designed for very fast single precision vector math, it can sustain multiply accumulates at a rate of two per cycle. Efficiently utilizing these coprocessors in GCC will be the focus of this article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In this article I refer to the A8's integer pipeline as the &amp;quot;ARM&amp;quot; , the VFP-lite as simply the &amp;quot;VFP&amp;quot; and the NEON unit as the &amp;quot;NFP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Compiler Support ==&lt;br /&gt;
The NEON + VFP-lite is a new design from ARM and hence does not yet have very mature compiler support. At present the Code Sourcery toolchain has the best support since the mainline GCCs do not support NEON yet. Code Sourcery Compiler versions:&lt;br /&gt;
* CSL 2007q3: Working NEON, Softfp Support&lt;br /&gt;
* CSL 2008q3: Broken NEON!&lt;br /&gt;
* CSL 2009q1: Working NEON, Hardfp + Softfp Support&lt;br /&gt;
&lt;br /&gt;
Generally the CS2007q3 release is recommended, the CSL 2009q1 release is promising but it has not been thoroughly tested yet. One big problem with the current compilers is the heavy dependence on VFP code, currently they only output NEON code when an obvious chance of vectorization is encountered (rarely). Apart from the esoteric rounding, vector, etc modes of the VFP (most of which compilers don't use) and predication (used occasionally), most VFP floating point instructions can be exactly replicated using an order of magnitude faster NEON instructions.... Infact it has been reported to me that the GCC packaged with the iPhone 3GS SDK does exactly this. Hopefully future compilers will support this feature. &lt;br /&gt;
&lt;br /&gt;
Inorder to instruct the compiler to produce NEON or VFP code you should use the following compile flags: -mfpu=neon or -mfpu=vfp. Unfortunately the CSL 2007 / CSL 2008 toolchains do not support the passing of values in floating point registers (i talk about this some more in the Transfers section), so you must specify a software ABI via -mfloat-abi=softfp. The CSL 2009q1 release is the first release to support the passing of values in FP registers (AKA hardfp) via the -mfloat-abi=hard compile flag. Note that hardfp compiled binaries are not compatible with softfp ones and vice versa, so make sure your libraries have the correct ABI. Additionally, If you want the compiler to attempt to vectorize your integer / floating point code for the NEON you should add: -ftree-vectorize to your flags. &lt;br /&gt;
&lt;br /&gt;
Therefore i recommend the following flags: '''-O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=(softfp|hard) -ffast-math -fsingle-precision-constant''' where -mfloat-abi=hard for the CSL 2009q1 release and softfp for all the others.&lt;br /&gt;
&lt;br /&gt;
== VFP-Lite RunFast ==&lt;br /&gt;
Under the correct circumstances some of The VFPs instructions will be executed in the NEON coprocessor. Unfortunately this does not gain the full benefit of the NEON, it still takes 7 cycles for an FMAC / FMUL / FADD. Due to this quirk you will likely get better scalar performance by accessing the NEON directly via Intrinsics or ASM.&lt;br /&gt;
&lt;br /&gt;
Inorder for VFP instructions to execute in the NFP the following constraints must be met:&lt;br /&gt;
* RunFast mode must be enabled&lt;br /&gt;
* Must be single precision floating point operands&lt;br /&gt;
* Must not be a vector instruction (GCC doesn't appear to use this feature, so don't worry about it)&lt;br /&gt;
&lt;br /&gt;
Runfast mode is enabled when the following conditions are present:&lt;br /&gt;
* subnormal numbers are being flushed to zero &lt;br /&gt;
* default NaN mode is active&lt;br /&gt;
* no floating point exceptions are enabled&lt;br /&gt;
&lt;br /&gt;
At the present time, it is unsure to me whether Runfast mode will be enabled by default in the Angstrom distribution. If it is not you can use the following C code to enforce it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void enable_runfast()&lt;br /&gt;
{&lt;br /&gt;
	static const unsigned int x = 0x04086060;&lt;br /&gt;
	static const unsigned int y = 0x03000000;&lt;br /&gt;
	int r;&lt;br /&gt;
	asm volatile (&lt;br /&gt;
		&amp;quot;fmrx	%0, fpscr			\n\t&amp;quot;	//r0 = FPSCR&lt;br /&gt;
		&amp;quot;and	%0, %0, %1			\n\t&amp;quot;	//r0 = r0 &amp;amp; 0x04086060&lt;br /&gt;
		&amp;quot;orr	%0, %0, %2			\n\t&amp;quot;	//r0 = r0 | 0x03000000&lt;br /&gt;
		&amp;quot;fmxr	fpscr, %0			\n\t&amp;quot;	//FPSCR = r0&lt;br /&gt;
		: &amp;quot;=r&amp;quot;(r)&lt;br /&gt;
		: &amp;quot;r&amp;quot;(x), &amp;quot;r&amp;quot;(y)&lt;br /&gt;
	);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instructions that are executed on the NFP are: FADDS, FSUBS, FABSS, FNEGS, FMULS, FNMULS, FMACS, FNMACS, FMSCS, FNMSCS, FCMPS, FCMPES, FCMPZS, FCMPEZS, FUITOS, FSITOS, FTOUIS, FTOSIS, FTOUIZS, FTOSIZS, FSHTOS, FSLTOS, FUHTOS, FULTOS, FTOSHS, FTOSLS, FTOUHS, FTOULS.&lt;br /&gt;
&lt;br /&gt;
== Single Precision Floating Point ==&lt;br /&gt;
One important and easy optimization is to make sure that single precision constants are being used. By default this is not the case, instead a double precision constant is being used, so all related operations involving that constant require double precision instructions and cannot be executed on the NEON. eg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{ &lt;br /&gt;
	return (2.123 * x); &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
might end up the same as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{&lt;br /&gt;
	double dx = (double) x;&lt;br /&gt;
	double dy = (double) 2.123; &lt;br /&gt;
	double dr = dx * dy;&lt;br /&gt;
	float r = (float) dr;&lt;br /&gt;
	return r;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can enforce single precision constants by including the compiler flag: '''-fsingle-precision-constant''', alternatively you can append an 'f' to the end of each constant. ie 2.123f&lt;br /&gt;
&lt;br /&gt;
Another thing to watch out for is the double versions of the functions in libm (sin, exp, sqrt) etc. By default these functions operate on double precision floating point values and suffer the same problems as the constants. Luckily libm supplies floating point versions aswell, they can be accessed by appending an 'f' to the end of the function. ie sinf(), expf(), sqrtf().&lt;br /&gt;
&lt;br /&gt;
== NFP / VFP to ARM Transfers ==&lt;br /&gt;
Probably the biggest bottleneck in the architecture is that inorder to transfer a number from the VFP / NFP registers onto the ARM you must stall both the ARM and NFP / VFP for &amp;gt;20 cycles. This is particularly troublesome because this is how GCC supplies arguments and recieves returns from functions. Possibly The best way to minimize operand passing stalls is to make the floating point functions inline.&lt;br /&gt;
&lt;br /&gt;
Another source of NFP / VFP - ARM transfers are conditional branches that depend on floating point numbers. You can do the condition on the VFP but inorder to branch the flags must be sent from the VFP to the ARM. For very simple branches your best bet is to not branch at all and instead use arithmetic. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;if (x &amp;lt; 0) {x += 1.1244;}&amp;lt;/source&amp;gt;&lt;br /&gt;
Is the same as:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;x = x + (x &amp;lt; 0) * 1.1244&amp;lt;/source&amp;gt;&lt;br /&gt;
However you might want to keep a close eye on what the compiler actually produces with the above code. &lt;br /&gt;
&lt;br /&gt;
One interesting fact is that using stores and loads do not cause a stall. So aslong as you don't need the result straight away you can hide the 20 cycle latency. Instead of doing a transfer you; store your NFP / VFP result to memory, do some work on the ARM, then load the result back onto the ARM without penalty. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;void foo(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 123 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void bar(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 546 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
	float x = 10;&lt;br /&gt;
	float y, z;&lt;br /&gt;
	foo(&amp;amp;x, &amp;amp;y)&lt;br /&gt;
	&lt;br /&gt;
	//do ~20 cycles of ARM work&lt;br /&gt;
	&lt;br /&gt;
	bar(&amp;amp;y, &amp;amp;z);&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NEON SIMD ==&lt;br /&gt;
The NEON unit is similar to the MMX and SSE extensions found on X86 processors, it is optimized for Single Instruction Multiple Data (SIMD) operations.&lt;br /&gt;
The NEON unit has 2 floating point pipelines, an integer pipeline and a 128bit load/store/permute pipeline. When properly utilized it is a very powerful coprocessor. Unfortunately GCC does a rather poor job of vectorizing code for the NEON unit. To get the best performance you should use either the intrinsics provided in the &amp;quot;arm_neon.h&amp;quot; header or hand written assembly. &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Therefore, Inorder to achieve the best floating point performance on the Pandora:&lt;br /&gt;
* Use the CodeSourcery 2007q3 release and these flags: -O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant&lt;br /&gt;
* Only use single precision floating point&lt;br /&gt;
* Enable RunFast mode&lt;br /&gt;
* Use NEON intrinsics / ASM for vector, or even scalar, code.&lt;br /&gt;
* Inline floating point code (unless its very large)&lt;br /&gt;
* Minimize Conditional Branches&lt;br /&gt;
* Pass Arguments via pointers instead of by value and do integer work in between function calls.&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1427</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1427"/>
		<updated>2009-08-01T00:24:28Z</updated>

		<summary type="html">&lt;p&gt;Adventus: /* Compiler Support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
In the past it was rare for an embedded processor to have dedicated floating point hardware, this usually limited you to either using fixed point math (which can be very tricky to write) or very slow software floating point emulation. Fortunately the ARM Cortex A8 found in the OMAP3 has 2 Floating Point Units, a non-pipelined VFP-lite conforming to the IEEE754 standard for floating point arithmetic and a pipelined SIMD NEON coprocessor. The VFP-lite can handle both single and double precision arithmetic, as well as properly handling exceptions and subnormal numbers. However, Due to the full spec compliance and presence of the NEON, it is a relatively slow implementation in the A8, usually taking between 18 - 21 cycles to perform a single precision multiply accumulate. The NEON unit on the other hand is designed for very fast single precision vector math, it can sustain multiply accumulates at a rate of two per cycle. Efficiently utilizing these coprocessors in GCC will be the focus of this article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In this article I refer to the A8's integer pipeline as the &amp;quot;ARM&amp;quot; , the VFP-lite as simply the &amp;quot;VFP&amp;quot; and the NEON unit as the &amp;quot;NFP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Compiler Support ==&lt;br /&gt;
The NEON + VFP-lite is a new design from ARM and hence does not yet have very mature compiler support. At present the Code Sourcery toolchain has the best support since the mainline GCCs do not support NEON yet. Code Sourcery Compiler versions:&lt;br /&gt;
* CSL 2007q3: Working NEON, Softfp Support&lt;br /&gt;
* CSL 2008q3: Broken NEON!&lt;br /&gt;
* CSL 2009q1: Working NEON, Hardfp + Softfp Support&lt;br /&gt;
&lt;br /&gt;
Generally the CS2007q3 release is recommended, the CSL 2009q1 release is promising but it has not been thoroughly tested yet. &lt;br /&gt;
&lt;br /&gt;
Inorder to instruct the compiler to produce NEON or VFP code you should use the following compile flags: -mfpu=neon or -mfpu=vfp. Unfortunately the CSL 2007 / CSL 2008 toolchains do not support the passing of values in floating point registers (i talk about this some more in the Transfers section), so you must specify a software ABI via -mfloat-abi=softfp. The CSL 2009q1 release is the first release to support the passing of values in FP registers (AKA hardfp) via the -mfloat-abi=hard compile flag. Note that hardfp compiled binaries are not compatible with softfp ones and vice versa, so make sure your libraries have the correct ABI. Additionally, If you want the compiler to attempt to vectorize your integer / floating point code for the NEON you should add: -ftree-vectorize to your flags. &lt;br /&gt;
&lt;br /&gt;
Therefore i recommend the following flags: '''-O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=(softfp|hard) -ffast-math -fsingle-precision-constant''' where -mfloat-abi=hard for the CSL 2009q1 release and softfp for all the others.&lt;br /&gt;
&lt;br /&gt;
== VFP-Lite RunFast ==&lt;br /&gt;
Under the correct circumstances some of The VFPs instructions will be executed in the NEON coprocessor. Unfortunately this does not gain the full benefit of the NEON, it still takes 7 cycles for an FMAC / FMUL / FADD. Due to this quirk you will likely get better scalar performance by accessing the NEON directly via Intrinsics or ASM.&lt;br /&gt;
&lt;br /&gt;
Inorder for VFP instructions to execute in the NFP the following constraints must be met:&lt;br /&gt;
* RunFast mode must be enabled&lt;br /&gt;
* Must be single precision floating point operands&lt;br /&gt;
* Must not be a vector instruction (GCC doesn't appear to use this feature, so don't worry about it)&lt;br /&gt;
&lt;br /&gt;
Runfast mode is enabled when the following conditions are present:&lt;br /&gt;
* subnormal numbers are being flushed to zero &lt;br /&gt;
* default NaN mode is active&lt;br /&gt;
* no floating point exceptions are enabled&lt;br /&gt;
&lt;br /&gt;
At the present time, it is unsure to me whether Runfast mode will be enabled by default in the Angstrom distribution. If it is not you can use the following C code to enforce it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void enable_runfast()&lt;br /&gt;
{&lt;br /&gt;
	static const unsigned int x = 0x04086060;&lt;br /&gt;
	static const unsigned int y = 0x03000000;&lt;br /&gt;
	int r;&lt;br /&gt;
	asm volatile (&lt;br /&gt;
		&amp;quot;fmrx	%0, fpscr			\n\t&amp;quot;	//r0 = FPSCR&lt;br /&gt;
		&amp;quot;and	%0, %0, %1			\n\t&amp;quot;	//r0 = r0 &amp;amp; 0x04086060&lt;br /&gt;
		&amp;quot;orr	%0, %0, %2			\n\t&amp;quot;	//r0 = r0 | 0x03000000&lt;br /&gt;
		&amp;quot;fmxr	fpscr, %0			\n\t&amp;quot;	//FPSCR = r0&lt;br /&gt;
		: &amp;quot;=r&amp;quot;(r)&lt;br /&gt;
		: &amp;quot;r&amp;quot;(x), &amp;quot;r&amp;quot;(y)&lt;br /&gt;
	);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instructions that are executed on the NFP are: FADDS, FSUBS, FABSS, FNEGS, FMULS, FNMULS, FMACS, FNMACS, FMSCS, FNMSCS, FCMPS, FCMPES, FCMPZS, FCMPEZS, FUITOS, FSITOS, FTOUIS, FTOSIS, FTOUIZS, FTOSIZS, FSHTOS, FSLTOS, FUHTOS, FULTOS, FTOSHS, FTOSLS, FTOUHS, FTOULS.&lt;br /&gt;
&lt;br /&gt;
== Single Precision Floating Point ==&lt;br /&gt;
One important and easy optimization is to make sure that single precision constants are being used. By default this is not the case, instead a double precision constant is being used, so all related operations involving that constant require double precision instructions and cannot be executed on the NEON. eg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{ &lt;br /&gt;
	return (2.123 * x); &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
might end up the same as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{&lt;br /&gt;
	double dx = (double) x;&lt;br /&gt;
	double dy = (double) 2.123; &lt;br /&gt;
	double dr = dx * dy;&lt;br /&gt;
	float r = (float) dr;&lt;br /&gt;
	return r;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can enforce single precision constants by including the compiler flag: '''-fsingle-precision-constant''', alternatively you can append an 'f' to the end of each constant. ie 2.123f&lt;br /&gt;
&lt;br /&gt;
Another thing to watch out for is the double versions of the functions in libm (sin, exp, sqrt) etc. By default these functions operate on double precision floating point values and suffer the same problems as the constants. Luckily libm supplies floating point versions aswell, they can be accessed by appending an 'f' to the end of the function. ie sinf(), expf(), sqrtf().&lt;br /&gt;
&lt;br /&gt;
== NFP / VFP to ARM Transfers ==&lt;br /&gt;
Probably the biggest bottleneck in the architecture is that inorder to transfer a number from the VFP / NFP registers onto the ARM you must stall both the ARM and NFP / VFP for &amp;gt;20 cycles. This is particularly troublesome because this is how GCC supplies arguments and recieves returns from functions. Possibly The best way to minimize operand passing stalls is to make the floating point functions inline.&lt;br /&gt;
&lt;br /&gt;
Another source of NFP / VFP - ARM transfers are conditional branches that depend on floating point numbers. You can do the condition on the VFP but inorder to branch the flags must be sent from the VFP to the ARM. For very simple branches your best bet is to not branch at all and instead use arithmetic. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;if (x &amp;lt; 0) {x += 1.1244;}&amp;lt;/source&amp;gt;&lt;br /&gt;
Is the same as:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;x = x + (x &amp;lt; 0) * 1.1244&amp;lt;/source&amp;gt;&lt;br /&gt;
However you might want to keep a close eye on what the compiler actually produces with the above code. &lt;br /&gt;
&lt;br /&gt;
One interesting fact is that using stores and loads do not cause a stall. So aslong as you don't need the result straight away you can hide the 20 cycle latency. Instead of doing a transfer you; store your NFP / VFP result to memory, do some work on the ARM, then load the result back onto the ARM without penalty. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;void foo(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 123 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void bar(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 546 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
	float x = 10;&lt;br /&gt;
	float y, z;&lt;br /&gt;
	foo(&amp;amp;x, &amp;amp;y)&lt;br /&gt;
	&lt;br /&gt;
	//do ~20 cycles of ARM work&lt;br /&gt;
	&lt;br /&gt;
	bar(&amp;amp;y, &amp;amp;z);&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NEON SIMD ==&lt;br /&gt;
The NEON unit is similar to the MMX and SSE extensions found on X86 processors, it is optimized for Single Instruction Multiple Data (SIMD) operations.&lt;br /&gt;
The NEON unit has 2 floating point pipelines, an integer pipeline and a 128bit load/store/permute pipeline. When properly utilized it is a very powerful coprocessor. Unfortunately GCC does a rather poor job of vectorizing code for the NEON unit. To get the best performance you should use either the intrinsics provided in the &amp;quot;arm_neon.h&amp;quot; header or hand written assembly. &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Therefore, Inorder to achieve the best floating point performance on the Pandora:&lt;br /&gt;
* Use the CodeSourcery 2007q3 release and these flags: -O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant&lt;br /&gt;
* Only use single precision floating point&lt;br /&gt;
* Enable RunFast mode&lt;br /&gt;
* Use NEON intrinsics / ASM for vector, or even scalar, code.&lt;br /&gt;
* Inline floating point code (unless its very large)&lt;br /&gt;
* Minimize Conditional Branches&lt;br /&gt;
* Pass Arguments via pointers instead of by value and do integer work in between function calls.&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1426</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1426"/>
		<updated>2009-08-01T00:22:36Z</updated>

		<summary type="html">&lt;p&gt;Adventus: /* Compiler Support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
In the past it was rare for an embedded processor to have dedicated floating point hardware, this usually limited you to either using fixed point math (which can be very tricky to write) or very slow software floating point emulation. Fortunately the ARM Cortex A8 found in the OMAP3 has 2 Floating Point Units, a non-pipelined VFP-lite conforming to the IEEE754 standard for floating point arithmetic and a pipelined SIMD NEON coprocessor. The VFP-lite can handle both single and double precision arithmetic, as well as properly handling exceptions and subnormal numbers. However, Due to the full spec compliance and presence of the NEON, it is a relatively slow implementation in the A8, usually taking between 18 - 21 cycles to perform a single precision multiply accumulate. The NEON unit on the other hand is designed for very fast single precision vector math, it can sustain multiply accumulates at a rate of two per cycle. Efficiently utilizing these coprocessors in GCC will be the focus of this article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In this article I refer to the A8's integer pipeline as the &amp;quot;ARM&amp;quot; , the VFP-lite as simply the &amp;quot;VFP&amp;quot; and the NEON unit as the &amp;quot;NFP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Compiler Support ==&lt;br /&gt;
The NEON + VFP-lite is a new design from ARM and hence does not yet have very mature compiler support. At present the Code Sourcery toolchain has the best support since the mainline GCCs do not support NEON yet. Code Sourcery Compiler versions:&lt;br /&gt;
* CSL 2007q3: Working NEON, Softfp Support&lt;br /&gt;
* CSL 2008q3: Broken NEON!&lt;br /&gt;
* CSL 2009q1: Working NEON, Hardfp + Softfp Support&lt;br /&gt;
&lt;br /&gt;
Generally the CS2007q3 release is recommended, the CSL 2009q1 release is promising but it has not been thoroughly tested yet. &lt;br /&gt;
&lt;br /&gt;
Inorder to instruct the compiler to produce NEON or VFP code you should use the following compile flags: -mfpu=neon or -mfpu=vfp. Unfortunately the CSL 2007 / CSL 2008 toolchains do not support the passing of values in floating point registers (i talk about this some more in the Transfers section), so you must specify a software ABI via -mfloat-abi=softfp. The CSL 2009q1 release is the first release to support the passing of values in FP registers (AKA hardfp) via the -mfloat-abi=hard compile flag. Note that hardfp compiled binaries are not compatible with softfp ones and vice versa. Additionally, If you want the compiler to attempt to vectorize your integer / floating point code for the NEON you should add: -ftree-vectorize to your flags. &lt;br /&gt;
&lt;br /&gt;
Therefore i recommend the following flags: '''-O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=(softfp|hard) -ffast-math -fsingle-precision-constant''' where -mfloat-abi=hard for the CSL 2009q1 release and softfp for all the others.&lt;br /&gt;
&lt;br /&gt;
== VFP-Lite RunFast ==&lt;br /&gt;
Under the correct circumstances some of The VFPs instructions will be executed in the NEON coprocessor. Unfortunately this does not gain the full benefit of the NEON, it still takes 7 cycles for an FMAC / FMUL / FADD. Due to this quirk you will likely get better scalar performance by accessing the NEON directly via Intrinsics or ASM.&lt;br /&gt;
&lt;br /&gt;
Inorder for VFP instructions to execute in the NFP the following constraints must be met:&lt;br /&gt;
* RunFast mode must be enabled&lt;br /&gt;
* Must be single precision floating point operands&lt;br /&gt;
* Must not be a vector instruction (GCC doesn't appear to use this feature, so don't worry about it)&lt;br /&gt;
&lt;br /&gt;
Runfast mode is enabled when the following conditions are present:&lt;br /&gt;
* subnormal numbers are being flushed to zero &lt;br /&gt;
* default NaN mode is active&lt;br /&gt;
* no floating point exceptions are enabled&lt;br /&gt;
&lt;br /&gt;
At the present time, it is unsure to me whether Runfast mode will be enabled by default in the Angstrom distribution. If it is not you can use the following C code to enforce it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void enable_runfast()&lt;br /&gt;
{&lt;br /&gt;
	static const unsigned int x = 0x04086060;&lt;br /&gt;
	static const unsigned int y = 0x03000000;&lt;br /&gt;
	int r;&lt;br /&gt;
	asm volatile (&lt;br /&gt;
		&amp;quot;fmrx	%0, fpscr			\n\t&amp;quot;	//r0 = FPSCR&lt;br /&gt;
		&amp;quot;and	%0, %0, %1			\n\t&amp;quot;	//r0 = r0 &amp;amp; 0x04086060&lt;br /&gt;
		&amp;quot;orr	%0, %0, %2			\n\t&amp;quot;	//r0 = r0 | 0x03000000&lt;br /&gt;
		&amp;quot;fmxr	fpscr, %0			\n\t&amp;quot;	//FPSCR = r0&lt;br /&gt;
		: &amp;quot;=r&amp;quot;(r)&lt;br /&gt;
		: &amp;quot;r&amp;quot;(x), &amp;quot;r&amp;quot;(y)&lt;br /&gt;
	);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instructions that are executed on the NFP are: FADDS, FSUBS, FABSS, FNEGS, FMULS, FNMULS, FMACS, FNMACS, FMSCS, FNMSCS, FCMPS, FCMPES, FCMPZS, FCMPEZS, FUITOS, FSITOS, FTOUIS, FTOSIS, FTOUIZS, FTOSIZS, FSHTOS, FSLTOS, FUHTOS, FULTOS, FTOSHS, FTOSLS, FTOUHS, FTOULS.&lt;br /&gt;
&lt;br /&gt;
== Single Precision Floating Point ==&lt;br /&gt;
One important and easy optimization is to make sure that single precision constants are being used. By default this is not the case, instead a double precision constant is being used, so all related operations involving that constant require double precision instructions and cannot be executed on the NEON. eg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{ &lt;br /&gt;
	return (2.123 * x); &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
might end up the same as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{&lt;br /&gt;
	double dx = (double) x;&lt;br /&gt;
	double dy = (double) 2.123; &lt;br /&gt;
	double dr = dx * dy;&lt;br /&gt;
	float r = (float) dr;&lt;br /&gt;
	return r;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can enforce single precision constants by including the compiler flag: '''-fsingle-precision-constant''', alternatively you can append an 'f' to the end of each constant. ie 2.123f&lt;br /&gt;
&lt;br /&gt;
Another thing to watch out for is the double versions of the functions in libm (sin, exp, sqrt) etc. By default these functions operate on double precision floating point values and suffer the same problems as the constants. Luckily libm supplies floating point versions aswell, they can be accessed by appending an 'f' to the end of the function. ie sinf(), expf(), sqrtf().&lt;br /&gt;
&lt;br /&gt;
== NFP / VFP to ARM Transfers ==&lt;br /&gt;
Probably the biggest bottleneck in the architecture is that inorder to transfer a number from the VFP / NFP registers onto the ARM you must stall both the ARM and NFP / VFP for &amp;gt;20 cycles. This is particularly troublesome because this is how GCC supplies arguments and recieves returns from functions. Possibly The best way to minimize operand passing stalls is to make the floating point functions inline.&lt;br /&gt;
&lt;br /&gt;
Another source of NFP / VFP - ARM transfers are conditional branches that depend on floating point numbers. You can do the condition on the VFP but inorder to branch the flags must be sent from the VFP to the ARM. For very simple branches your best bet is to not branch at all and instead use arithmetic. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;if (x &amp;lt; 0) {x += 1.1244;}&amp;lt;/source&amp;gt;&lt;br /&gt;
Is the same as:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;x = x + (x &amp;lt; 0) * 1.1244&amp;lt;/source&amp;gt;&lt;br /&gt;
However you might want to keep a close eye on what the compiler actually produces with the above code. &lt;br /&gt;
&lt;br /&gt;
One interesting fact is that using stores and loads do not cause a stall. So aslong as you don't need the result straight away you can hide the 20 cycle latency. Instead of doing a transfer you; store your NFP / VFP result to memory, do some work on the ARM, then load the result back onto the ARM without penalty. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;void foo(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 123 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void bar(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 546 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
	float x = 10;&lt;br /&gt;
	float y, z;&lt;br /&gt;
	foo(&amp;amp;x, &amp;amp;y)&lt;br /&gt;
	&lt;br /&gt;
	//do ~20 cycles of ARM work&lt;br /&gt;
	&lt;br /&gt;
	bar(&amp;amp;y, &amp;amp;z);&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NEON SIMD ==&lt;br /&gt;
The NEON unit is similar to the MMX and SSE extensions found on X86 processors, it is optimized for Single Instruction Multiple Data (SIMD) operations.&lt;br /&gt;
The NEON unit has 2 floating point pipelines, an integer pipeline and a 128bit load/store/permute pipeline. When properly utilized it is a very powerful coprocessor. Unfortunately GCC does a rather poor job of vectorizing code for the NEON unit. To get the best performance you should use either the intrinsics provided in the &amp;quot;arm_neon.h&amp;quot; header or hand written assembly. &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Therefore, Inorder to achieve the best floating point performance on the Pandora:&lt;br /&gt;
* Use the CodeSourcery 2007q3 release and these flags: -O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant&lt;br /&gt;
* Only use single precision floating point&lt;br /&gt;
* Enable RunFast mode&lt;br /&gt;
* Use NEON intrinsics / ASM for vector, or even scalar, code.&lt;br /&gt;
* Inline floating point code (unless its very large)&lt;br /&gt;
* Minimize Conditional Branches&lt;br /&gt;
* Pass Arguments via pointers instead of by value and do integer work in between function calls.&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1425</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1425"/>
		<updated>2009-07-31T23:59:23Z</updated>

		<summary type="html">&lt;p&gt;Adventus: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
In the past it was rare for an embedded processor to have dedicated floating point hardware, this usually limited you to either using fixed point math (which can be very tricky to write) or very slow software floating point emulation. Fortunately the ARM Cortex A8 found in the OMAP3 has 2 Floating Point Units, a non-pipelined VFP-lite conforming to the IEEE754 standard for floating point arithmetic and a pipelined SIMD NEON coprocessor. The VFP-lite can handle both single and double precision arithmetic, as well as properly handling exceptions and subnormal numbers. However, Due to the full spec compliance and presence of the NEON, it is a relatively slow implementation in the A8, usually taking between 18 - 21 cycles to perform a single precision multiply accumulate. The NEON unit on the other hand is designed for very fast single precision vector math, it can sustain multiply accumulates at a rate of two per cycle. Efficiently utilizing these coprocessors in GCC will be the focus of this article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In this article I refer to the A8's integer pipeline as the &amp;quot;ARM&amp;quot; , the VFP-lite as simply the &amp;quot;VFP&amp;quot; and the NEON unit as the &amp;quot;NFP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Compiler Support ==&lt;br /&gt;
The NEON + VFP-lite is a new design from ARM and hence does not yet have very mature compiler support. At present the CodeSourcery toolchain has the best support since the mainline GCCs do not support NEON yet. Compiler versions:&lt;br /&gt;
* CS2007q3: Working NEON&lt;br /&gt;
* CS2008q3: Broken NEON&lt;br /&gt;
* CS2009q1: Working NEON (Apparently)&lt;br /&gt;
&lt;br /&gt;
Generally the CS2007q3 release is recommended. The newest release does have better support for vectorizing integer and floating point computations on the NEON, but it has not been thoroughly tested yet. &lt;br /&gt;
&lt;br /&gt;
Inorder to instruct the compiler to produce NEON / VFP code you should use the following compile flags: -mfpu=neon -mfloat-abi=softfp, or -mfpu=vfp -mfloat-abi=softfp. Unfortunately the prebuilt toolchains do not support the passing / returning of values in floating point registers (i talk about this some more in the Transfers section), there is however a patch being tested that supports hardfp and may be included in future toolchains. Additionally, If you want the compiler to attempt to vectorize your integer / floating point code for the NEON you should add: -ftree-vectorize to your flags. &lt;br /&gt;
&lt;br /&gt;
Therefore i recommend the following flags: '''-O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant'''&lt;br /&gt;
&lt;br /&gt;
== VFP-Lite RunFast ==&lt;br /&gt;
Under the correct circumstances some of The VFPs instructions will be executed in the NEON coprocessor. Unfortunately this does not gain the full benefit of the NEON, it still takes 7 cycles for an FMAC / FMUL / FADD. Due to this quirk you will likely get better scalar performance by accessing the NEON directly via Intrinsics or ASM.&lt;br /&gt;
&lt;br /&gt;
Inorder for VFP instructions to execute in the NFP the following constraints must be met:&lt;br /&gt;
* RunFast mode must be enabled&lt;br /&gt;
* Must be single precision floating point operands&lt;br /&gt;
* Must not be a vector instruction (GCC doesn't appear to use this feature, so don't worry about it)&lt;br /&gt;
&lt;br /&gt;
Runfast mode is enabled when the following conditions are present:&lt;br /&gt;
* subnormal numbers are being flushed to zero &lt;br /&gt;
* default NaN mode is active&lt;br /&gt;
* no floating point exceptions are enabled&lt;br /&gt;
&lt;br /&gt;
At the present time, it is unsure to me whether Runfast mode will be enabled by default in the Angstrom distribution. If it is not you can use the following C code to enforce it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void enable_runfast()&lt;br /&gt;
{&lt;br /&gt;
	static const unsigned int x = 0x04086060;&lt;br /&gt;
	static const unsigned int y = 0x03000000;&lt;br /&gt;
	int r;&lt;br /&gt;
	asm volatile (&lt;br /&gt;
		&amp;quot;fmrx	%0, fpscr			\n\t&amp;quot;	//r0 = FPSCR&lt;br /&gt;
		&amp;quot;and	%0, %0, %1			\n\t&amp;quot;	//r0 = r0 &amp;amp; 0x04086060&lt;br /&gt;
		&amp;quot;orr	%0, %0, %2			\n\t&amp;quot;	//r0 = r0 | 0x03000000&lt;br /&gt;
		&amp;quot;fmxr	fpscr, %0			\n\t&amp;quot;	//FPSCR = r0&lt;br /&gt;
		: &amp;quot;=r&amp;quot;(r)&lt;br /&gt;
		: &amp;quot;r&amp;quot;(x), &amp;quot;r&amp;quot;(y)&lt;br /&gt;
	);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instructions that are executed on the NFP are: FADDS, FSUBS, FABSS, FNEGS, FMULS, FNMULS, FMACS, FNMACS, FMSCS, FNMSCS, FCMPS, FCMPES, FCMPZS, FCMPEZS, FUITOS, FSITOS, FTOUIS, FTOSIS, FTOUIZS, FTOSIZS, FSHTOS, FSLTOS, FUHTOS, FULTOS, FTOSHS, FTOSLS, FTOUHS, FTOULS.&lt;br /&gt;
&lt;br /&gt;
== Single Precision Floating Point ==&lt;br /&gt;
One important and easy optimization is to make sure that single precision constants are being used. By default this is not the case, instead a double precision constant is being used, so all related operations involving that constant require double precision instructions and cannot be executed on the NEON. eg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{ &lt;br /&gt;
	return (2.123 * x); &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
might end up the same as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{&lt;br /&gt;
	double dx = (double) x;&lt;br /&gt;
	double dy = (double) 2.123; &lt;br /&gt;
	double dr = dx * dy;&lt;br /&gt;
	float r = (float) dr;&lt;br /&gt;
	return r;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can enforce single precision constants by including the compiler flag: '''-fsingle-precision-constant''', alternatively you can append an 'f' to the end of each constant. ie 2.123f&lt;br /&gt;
&lt;br /&gt;
Another thing to watch out for is the double versions of the functions in libm (sin, exp, sqrt) etc. By default these functions operate on double precision floating point values and suffer the same problems as the constants. Luckily libm supplies floating point versions aswell, they can be accessed by appending an 'f' to the end of the function. ie sinf(), expf(), sqrtf().&lt;br /&gt;
&lt;br /&gt;
== NFP / VFP to ARM Transfers ==&lt;br /&gt;
Probably the biggest bottleneck in the architecture is that inorder to transfer a number from the VFP / NFP registers onto the ARM you must stall both the ARM and NFP / VFP for &amp;gt;20 cycles. This is particularly troublesome because this is how GCC supplies arguments and recieves returns from functions. Possibly The best way to minimize operand passing stalls is to make the floating point functions inline.&lt;br /&gt;
&lt;br /&gt;
Another source of NFP / VFP - ARM transfers are conditional branches that depend on floating point numbers. You can do the condition on the VFP but inorder to branch the flags must be sent from the VFP to the ARM. For very simple branches your best bet is to not branch at all and instead use arithmetic. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;if (x &amp;lt; 0) {x += 1.1244;}&amp;lt;/source&amp;gt;&lt;br /&gt;
Is the same as:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;x = x + (x &amp;lt; 0) * 1.1244&amp;lt;/source&amp;gt;&lt;br /&gt;
However you might want to keep a close eye on what the compiler actually produces with the above code. &lt;br /&gt;
&lt;br /&gt;
One interesting fact is that using stores and loads do not cause a stall. So aslong as you don't need the result straight away you can hide the 20 cycle latency. Instead of doing a transfer you; store your NFP / VFP result to memory, do some work on the ARM, then load the result back onto the ARM without penalty. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;void foo(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 123 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void bar(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 546 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
	float x = 10;&lt;br /&gt;
	float y, z;&lt;br /&gt;
	foo(&amp;amp;x, &amp;amp;y)&lt;br /&gt;
	&lt;br /&gt;
	//do ~20 cycles of ARM work&lt;br /&gt;
	&lt;br /&gt;
	bar(&amp;amp;y, &amp;amp;z);&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NEON SIMD ==&lt;br /&gt;
The NEON unit is similar to the MMX and SSE extensions found on X86 processors, it is optimized for Single Instruction Multiple Data (SIMD) operations.&lt;br /&gt;
The NEON unit has 2 floating point pipelines, an integer pipeline and a 128bit load/store/permute pipeline. When properly utilized it is a very powerful coprocessor. Unfortunately GCC does a rather poor job of vectorizing code for the NEON unit. To get the best performance you should use either the intrinsics provided in the &amp;quot;arm_neon.h&amp;quot; header or hand written assembly. &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Therefore, Inorder to achieve the best floating point performance on the Pandora:&lt;br /&gt;
* Use the CodeSourcery 2007q3 release and these flags: -O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant&lt;br /&gt;
* Only use single precision floating point&lt;br /&gt;
* Enable RunFast mode&lt;br /&gt;
* Use NEON intrinsics / ASM for vector, or even scalar, code.&lt;br /&gt;
* Inline floating point code (unless its very large)&lt;br /&gt;
* Minimize Conditional Branches&lt;br /&gt;
* Pass Arguments via pointers instead of by value and do integer work in between function calls.&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1424</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1424"/>
		<updated>2009-07-26T02:42:28Z</updated>

		<summary type="html">&lt;p&gt;Adventus: /* VFP-Lite RunFast */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
In the past it was rare for an embedded processor to have dedicated floating point hardware, this usually limited you to either using fixed point math (which can be very tricky to write) or very slow software floating point emulation. Fortunately the ARM Cortex A8 found in the OMAP3 has 2 Floating Point Units, a non-pipelined VFP-lite conforming to the IEEE754 standard for floating point arithmetic and a pipelined SIMD NEON coprocessor. The VFP-lite can handle both single and double precession arithmetic, as well as properly handling exceptions and subnormal numbers. However, Due to the full spec compliance and presence of the NEON, it is a relatively slow implementation in the A8, usually taking from 18 to 21 cycles to perform a single precision multiply accumulate. The NEON unit on the other hand is designed for very fast single precision vector math, it can sustain multiply accumulates at a rate of two per cycle. Efficiently utilizing these coprocessors in GCC will be the focus of this article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In this article I refer to the A8's integer pipeline as the &amp;quot;ARM&amp;quot; , the VFP-lite as simply the &amp;quot;VFP&amp;quot; and the NEON unit as the &amp;quot;NFP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Compiler Support ==&lt;br /&gt;
The NEON + VFP-lite is a new design from ARM and hence does not yet have very mature compiler support. At present the CodeSourcery toolchain has the best support since the mainline GCCs do not support NEON yet. Compiler versions:&lt;br /&gt;
* CS2007q3: Working NEON&lt;br /&gt;
* CS2008q3: Broken NEON&lt;br /&gt;
* CS2009q1: Working NEON (Apparently)&lt;br /&gt;
&lt;br /&gt;
Generally the CS2007q3 release is recommended. The newest release does have better support for vectorizing integer and floating point computations on the NEON, but it has not been thoroughly tested yet. &lt;br /&gt;
&lt;br /&gt;
Inorder to instruct the compiler to produce NEON / VFP code you should use the following compile flags: -mfpu=neon -mfloat-abi=softfp, or -mfpu=vfp -mfloat-abi=softfp. Unfortunately the prebuilt toolchains do not support the passing / returning of values in floating point registers (i talk about this some more in the Transfers section), there is however a patch being tested that supports hardfp and may be included in future toolchains. Additionally, If you want the compiler to attempt to vectorize your integer / floating point code for the NEON you should add: -ftree-vectorize to your flags. &lt;br /&gt;
&lt;br /&gt;
Therefore i recommend the following flags: '''-O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant'''&lt;br /&gt;
&lt;br /&gt;
== VFP-Lite RunFast ==&lt;br /&gt;
Under the correct circumstances some of The VFPs instructions will be executed in the NEON coprocessor. Unfortunately this does not gain the full benefit of the NEON, it still takes 7 cycles for an FMAC / FMUL / FADD. Due to this quirk you will likely get better scalar performance by accessing the NEON directly via Intrinsics or ASM.&lt;br /&gt;
&lt;br /&gt;
Inorder for VFP instructions to execute in the NFP the following constraints must be met:&lt;br /&gt;
* RunFast mode must be enabled&lt;br /&gt;
* Must be single precision floating point operands&lt;br /&gt;
* Must not be a vector instruction (GCC doesn't appear to use this feature, so don't worry about it)&lt;br /&gt;
&lt;br /&gt;
Runfast mode is enabled when the following conditions are present:&lt;br /&gt;
* subnormal numbers are being flushed to zero &lt;br /&gt;
* default NaN mode is active&lt;br /&gt;
* no floating point exceptions are enabled&lt;br /&gt;
&lt;br /&gt;
At the present time, it is unsure to me whether Runfast mode will be enabled by default in the Angstrom distribution. If it is not you can use the following C code to enforce it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void enable_runfast()&lt;br /&gt;
{&lt;br /&gt;
	static const unsigned int x = 0x04086060;&lt;br /&gt;
	static const unsigned int y = 0x03000000;&lt;br /&gt;
	int r;&lt;br /&gt;
	asm volatile (&lt;br /&gt;
		&amp;quot;fmrx	%0, fpscr			\n\t&amp;quot;	//r0 = FPSCR&lt;br /&gt;
		&amp;quot;and	%0, %0, %1			\n\t&amp;quot;	//r0 = r0 &amp;amp; 0x04086060&lt;br /&gt;
		&amp;quot;orr	%0, %0, %2			\n\t&amp;quot;	//r0 = r0 | 0x03000000&lt;br /&gt;
		&amp;quot;fmxr	fpscr, %0			\n\t&amp;quot;	//FPSCR = r0&lt;br /&gt;
		: &amp;quot;=r&amp;quot;(r)&lt;br /&gt;
		: &amp;quot;r&amp;quot;(x), &amp;quot;r&amp;quot;(y)&lt;br /&gt;
	);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instructions that are executed on the NFP are: FADDS, FSUBS, FABSS, FNEGS, FMULS, FNMULS, FMACS, FNMACS, FMSCS, FNMSCS, FCMPS, FCMPES, FCMPZS, FCMPEZS, FUITOS, FSITOS, FTOUIS, FTOSIS, FTOUIZS, FTOSIZS, FSHTOS, FSLTOS, FUHTOS, FULTOS, FTOSHS, FTOSLS, FTOUHS, FTOULS.&lt;br /&gt;
&lt;br /&gt;
== Single Precision Floating Point ==&lt;br /&gt;
One important and easy optimization is to make sure that single precision constants are being used. By default this is not the case, instead a double precision constant is being used, so all related operations involving that constant require double precision instructions and cannot be executed on the NEON. eg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{ &lt;br /&gt;
	return (2.123 * x); &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
might end up the same as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{&lt;br /&gt;
	double dx = (double) x;&lt;br /&gt;
	double dy = (double) 2.123; &lt;br /&gt;
	double dr = dx * dy;&lt;br /&gt;
	float r = (float) dr;&lt;br /&gt;
	return r;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can enforce single precision constants by including the compiler flag: '''-fsingle-precision-constant''', alternatively you can append an 'f' to the end of each constant. ie 2.123f&lt;br /&gt;
&lt;br /&gt;
Another thing to watch out for is the double versions of the functions in libm (sin, exp, sqrt) etc. By default these functions operate on double precision floating point values and suffer the same problems as the constants. Luckily libm supplies floating point versions aswell, they can be accessed by appending an 'f' to the end of the function. ie sinf(), expf(), sqrtf().&lt;br /&gt;
&lt;br /&gt;
== NFP / VFP to ARM Transfers ==&lt;br /&gt;
Probably the biggest bottleneck in the architecture is that inorder to transfer a number from the VFP / NFP registers onto the ARM you must stall both the ARM and NFP / VFP for &amp;gt;20 cycles. This is particularly troublesome because this is how GCC supplies arguments and recieves returns from functions. Possibly The best way to minimize operand passing stalls is to make the floating point functions inline.&lt;br /&gt;
&lt;br /&gt;
Another source of NFP / VFP - ARM transfers are conditional branches that depend on floating point numbers. You can do the condition on the VFP but inorder to branch the flags must be sent from the VFP to the ARM. For very simple branches your best bet is to not branch at all and instead use arithmetic. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;if (x &amp;lt; 0) {x += 1.1244;}&amp;lt;/source&amp;gt;&lt;br /&gt;
Is the same as:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;x = x + (x &amp;lt; 0) * 1.1244&amp;lt;/source&amp;gt;&lt;br /&gt;
However you might want to keep a close eye on what the compiler actually produces with the above code. &lt;br /&gt;
&lt;br /&gt;
One interesting fact is that using stores and loads do not cause a stall. So aslong as you don't need the result straight away you can hide the 20 cycle latency. Instead of doing a transfer you; store your NFP / VFP result to memory, do some work on the ARM, then load the result back onto the ARM without penalty. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;void foo(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 123 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void bar(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 546 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
	float x = 10;&lt;br /&gt;
	float y, z;&lt;br /&gt;
	foo(&amp;amp;x, &amp;amp;y)&lt;br /&gt;
	&lt;br /&gt;
	//do ~20 cycles of ARM work&lt;br /&gt;
	&lt;br /&gt;
	bar(&amp;amp;y, &amp;amp;z);&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NEON SIMD ==&lt;br /&gt;
The NEON unit is similar to the MMX and SSE extensions found on X86 processors, it is optimized for Single Instruction Multiple Data (SIMD) operations.&lt;br /&gt;
The NEON unit has 2 floating point pipelines, an integer pipeline and a 128bit load/store/permute pipeline. When properly utilized it is a very powerful coprocessor. Unfortunately GCC does a rather poor job of vectorizing code for the NEON unit. To get the best performance you should use either the intrinsics provided in the &amp;quot;arm_neon.h&amp;quot; header or hand written assembly. &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Therefore, Inorder to achieve the best floating point performance on the Pandora:&lt;br /&gt;
* Use the CodeSourcery 2007q3 release and these flags: -O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant&lt;br /&gt;
* Only use single precision floating point&lt;br /&gt;
* Enable RunFast mode&lt;br /&gt;
* Use NEON intrinsics / ASM for vector, or even scalar, code.&lt;br /&gt;
* Inline floating point code (unless its very large)&lt;br /&gt;
* Minimize Conditional Branches&lt;br /&gt;
* Pass Arguments via pointers instead of by value and do integer work in between function calls.&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1423</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1423"/>
		<updated>2009-07-26T02:39:24Z</updated>

		<summary type="html">&lt;p&gt;Adventus: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
In the past it was rare for an embedded processor to have dedicated floating point hardware, this usually limited you to either using fixed point math (which can be very tricky to write) or very slow software floating point emulation. Fortunately the ARM Cortex A8 found in the OMAP3 has 2 Floating Point Units, a non-pipelined VFP-lite conforming to the IEEE754 standard for floating point arithmetic and a pipelined SIMD NEON coprocessor. The VFP-lite can handle both single and double precession arithmetic, as well as properly handling exceptions and subnormal numbers. However, Due to the full spec compliance and presence of the NEON, it is a relatively slow implementation in the A8, usually taking from 18 to 21 cycles to perform a single precision multiply accumulate. The NEON unit on the other hand is designed for very fast single precision vector math, it can sustain multiply accumulates at a rate of two per cycle. Efficiently utilizing these coprocessors in GCC will be the focus of this article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In this article I refer to the A8's integer pipeline as the &amp;quot;ARM&amp;quot; , the VFP-lite as simply the &amp;quot;VFP&amp;quot; and the NEON unit as the &amp;quot;NFP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Compiler Support ==&lt;br /&gt;
The NEON + VFP-lite is a new design from ARM and hence does not yet have very mature compiler support. At present the CodeSourcery toolchain has the best support since the mainline GCCs do not support NEON yet. Compiler versions:&lt;br /&gt;
* CS2007q3: Working NEON&lt;br /&gt;
* CS2008q3: Broken NEON&lt;br /&gt;
* CS2009q1: Working NEON (Apparently)&lt;br /&gt;
&lt;br /&gt;
Generally the CS2007q3 release is recommended. The newest release does have better support for vectorizing integer and floating point computations on the NEON, but it has not been thoroughly tested yet. &lt;br /&gt;
&lt;br /&gt;
Inorder to instruct the compiler to produce NEON / VFP code you should use the following compile flags: -mfpu=neon -mfloat-abi=softfp, or -mfpu=vfp -mfloat-abi=softfp. Unfortunately the prebuilt toolchains do not support the passing / returning of values in floating point registers (i talk about this some more in the Transfers section), there is however a patch being tested that supports hardfp and may be included in future toolchains. Additionally, If you want the compiler to attempt to vectorize your integer / floating point code for the NEON you should add: -ftree-vectorize to your flags. &lt;br /&gt;
&lt;br /&gt;
Therefore i recommend the following flags: '''-O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant'''&lt;br /&gt;
&lt;br /&gt;
== VFP-Lite RunFast ==&lt;br /&gt;
Under the correct circumstances some of The VFPs instructions will be executed in the NEON coprocessor. Unfortunately this does not gain the full benefit of the NEON, it still takes 7 cycles for an FMAC / FMUL / FADD. Due to this quirk you will likely get better scalar performance by accessing the NEON directly via Intrinsics or ASM.&lt;br /&gt;
&lt;br /&gt;
Inorder for VFP instruction to execute in the NFP the following constraints must be met:&lt;br /&gt;
* RunFast mode must be enabled&lt;br /&gt;
* Must be single precision floating point operands&lt;br /&gt;
* Must not be a vector instruction (GCC doesn't appear to use this feature, so don't worry about it)&lt;br /&gt;
&lt;br /&gt;
Runfast mode is enabled when the following conditions are present:&lt;br /&gt;
* subnormal numbers are being flushed to zero &lt;br /&gt;
* default NaN mode is active&lt;br /&gt;
* no floating point exceptions are enabled&lt;br /&gt;
&lt;br /&gt;
At the present time, it is unsure to me whether Runfast mode will be enabled by default in the Angstrom distribution. If it is not you can use the following C code to enforce it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void enable_runfast()&lt;br /&gt;
{&lt;br /&gt;
	static const unsigned int x = 0x04086060;&lt;br /&gt;
	static const unsigned int y = 0x03000000;&lt;br /&gt;
	int r;&lt;br /&gt;
	asm volatile (&lt;br /&gt;
		&amp;quot;fmrx	%0, fpscr			\n\t&amp;quot;	//r0 = FPSCR&lt;br /&gt;
		&amp;quot;and	%0, %0, %1			\n\t&amp;quot;	//r0 = r0 &amp;amp; 0x04086060&lt;br /&gt;
		&amp;quot;orr	%0, %0, %2			\n\t&amp;quot;	//r0 = r0 | 0x03000000&lt;br /&gt;
		&amp;quot;fmxr	fpscr, %0			\n\t&amp;quot;	//FPSCR = r0&lt;br /&gt;
		: &amp;quot;=r&amp;quot;(r)&lt;br /&gt;
		: &amp;quot;r&amp;quot;(x), &amp;quot;r&amp;quot;(y)&lt;br /&gt;
	);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instructions that are executed on the NFP are: FADDS, FSUBS, FABSS, FNEGS, FMULS, FNMULS, FMACS, FNMACS, FMSCS, FNMSCS, FCMPS, FCMPES, FCMPZS, FCMPEZS, FUITOS, FSITOS, FTOUIS, FTOSIS, FTOUIZS, FTOSIZS, FSHTOS, FSLTOS, FUHTOS, FULTOS, FTOSHS, FTOSLS, FTOUHS, FTOULS.&lt;br /&gt;
&lt;br /&gt;
== Single Precision Floating Point ==&lt;br /&gt;
One important and easy optimization is to make sure that single precision constants are being used. By default this is not the case, instead a double precision constant is being used, so all related operations involving that constant require double precision instructions and cannot be executed on the NEON. eg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{ &lt;br /&gt;
	return (2.123 * x); &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
might end up the same as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{&lt;br /&gt;
	double dx = (double) x;&lt;br /&gt;
	double dy = (double) 2.123; &lt;br /&gt;
	double dr = dx * dy;&lt;br /&gt;
	float r = (float) dr;&lt;br /&gt;
	return r;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can enforce single precision constants by including the compiler flag: '''-fsingle-precision-constant''', alternatively you can append an 'f' to the end of each constant. ie 2.123f&lt;br /&gt;
&lt;br /&gt;
Another thing to watch out for is the double versions of the functions in libm (sin, exp, sqrt) etc. By default these functions operate on double precision floating point values and suffer the same problems as the constants. Luckily libm supplies floating point versions aswell, they can be accessed by appending an 'f' to the end of the function. ie sinf(), expf(), sqrtf().&lt;br /&gt;
&lt;br /&gt;
== NFP / VFP to ARM Transfers ==&lt;br /&gt;
Probably the biggest bottleneck in the architecture is that inorder to transfer a number from the VFP / NFP registers onto the ARM you must stall both the ARM and NFP / VFP for &amp;gt;20 cycles. This is particularly troublesome because this is how GCC supplies arguments and recieves returns from functions. Possibly The best way to minimize operand passing stalls is to make the floating point functions inline.&lt;br /&gt;
&lt;br /&gt;
Another source of NFP / VFP - ARM transfers are conditional branches that depend on floating point numbers. You can do the condition on the VFP but inorder to branch the flags must be sent from the VFP to the ARM. For very simple branches your best bet is to not branch at all and instead use arithmetic. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;if (x &amp;lt; 0) {x += 1.1244;}&amp;lt;/source&amp;gt;&lt;br /&gt;
Is the same as:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;x = x + (x &amp;lt; 0) * 1.1244&amp;lt;/source&amp;gt;&lt;br /&gt;
However you might want to keep a close eye on what the compiler actually produces with the above code. &lt;br /&gt;
&lt;br /&gt;
One interesting fact is that using stores and loads do not cause a stall. So aslong as you don't need the result straight away you can hide the 20 cycle latency. Instead of doing a transfer you; store your NFP / VFP result to memory, do some work on the ARM, then load the result back onto the ARM without penalty. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;void foo(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 123 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void bar(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 546 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
	float x = 10;&lt;br /&gt;
	float y, z;&lt;br /&gt;
	foo(&amp;amp;x, &amp;amp;y)&lt;br /&gt;
	&lt;br /&gt;
	//do ~20 cycles of ARM work&lt;br /&gt;
	&lt;br /&gt;
	bar(&amp;amp;y, &amp;amp;z);&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NEON SIMD ==&lt;br /&gt;
The NEON unit is similar to the MMX and SSE extensions found on X86 processors, it is optimized for Single Instruction Multiple Data (SIMD) operations.&lt;br /&gt;
The NEON unit has 2 floating point pipelines, an integer pipeline and a 128bit load/store/permute pipeline. When properly utilized it is a very powerful coprocessor. Unfortunately GCC does a rather poor job of vectorizing code for the NEON unit. To get the best performance you should use either the intrinsics provided in the &amp;quot;arm_neon.h&amp;quot; header or hand written assembly. &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Therefore, Inorder to achieve the best floating point performance on the Pandora:&lt;br /&gt;
* Use the CodeSourcery 2007q3 release and these flags: -O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant&lt;br /&gt;
* Only use single precision floating point&lt;br /&gt;
* Enable RunFast mode&lt;br /&gt;
* Use NEON intrinsics / ASM for vector, or even scalar, code.&lt;br /&gt;
* Inline floating point code (unless its very large)&lt;br /&gt;
* Minimize Conditional Branches&lt;br /&gt;
* Pass Arguments via pointers instead of by value and do integer work in between function calls.&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1422</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1422"/>
		<updated>2009-07-26T02:11:52Z</updated>

		<summary type="html">&lt;p&gt;Adventus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
In the past it was rare for an embedded processor to have dedicated floating point hardware, this usually limited you to either using fixed point math (which can be very tricky to write) or very slow software floating point emulation. Fortunately the ARM Cortex A8 found in the OMAP3 has 2 Floating Point Units, a non-pipelined VFP-lite conforming to the IEEE754 standard for floating point arithmetic and a pipelined SIMD NEON coprocessor. The VFP-lite can handle both single and double precession arithmetic, as well as properly handling exceptions and subnormal numbers. However, This full spec compliance and due to the presence of the NEON has resulted in a relatively slow implementation, it usually takes from 18 to 21 cycles to perform a single precision multiply accumulate. The NEON unit on the other hand is designed for very fast single precision vector math, it can sustain multiply accumulates at a rate of two per cycle. Efficiently utilizing these coprocessors in GCC will be the focus of this article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In this article I refer to the A8's integer pipeline as the &amp;quot;ARM&amp;quot; , the VFP-lite as simply the &amp;quot;VFP&amp;quot; and the NEON unit as the &amp;quot;NFP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Compiler Support ==&lt;br /&gt;
The NEON + VFP-lite is a new design from ARM and hence does not yet have very mature compiler support. At present the CodeSourcery toolchain has the best support since the mainline GCCs do not support NEON yet. Compiler versions:&lt;br /&gt;
* CS2007q3: Working NEON&lt;br /&gt;
* CS2008q3: Broken NEON&lt;br /&gt;
* CS2009q1: Working NEON (Apparently)&lt;br /&gt;
&lt;br /&gt;
Generally the CS2007q3 release is recommended. The newest release does have better support for vectorizing integer and floating point computations on the NEON, but it has not been thoroughly tested yet. &lt;br /&gt;
&lt;br /&gt;
Inorder to instruct the compiler to produce NEON / VFP code you should use the following compile flags: -mfpu=neon -mfloat-abi=softfp, or -mfpu=vfp -mfloat-abi=softfp. Unfortunately the prebuilt toolchains do not support the passing / returning of values in floating point registers (i talk about this some more in the Transfers section), there is however a patch being tested that supports hardfp and may be included in future toolchains. Additionally, If you want the compiler to attempt to vectorize your integer / floating point code for the NEON you should add: -ftree-vectorize to your flags. &lt;br /&gt;
&lt;br /&gt;
Therefore i recommend the following flags: '''-O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant'''&lt;br /&gt;
&lt;br /&gt;
== VFP-Lite RunFast ==&lt;br /&gt;
Under the correct circumstances some of The VFPs instructions will be executed in the NEON coprocessor. Unfortunately this does not gain the full benefit of the NEON, it still takes 7 cycles for an FMAC / FMUL / FADD. Due to this quirk you will likely get better scalar performance by accessing the NEON directly via Intrinsics or ASM.&lt;br /&gt;
&lt;br /&gt;
Inorder for VFP instruction to execute in the NFP the following constraints must be met:&lt;br /&gt;
* RunFast mode must be enabled&lt;br /&gt;
* Must be single precision floating point operands&lt;br /&gt;
* Must not be a vector instruction (GCC doesn't appear to use this feature, so don't worry about it)&lt;br /&gt;
&lt;br /&gt;
Runfast mode is enabled when the following conditions are present:&lt;br /&gt;
* subnormal numbers are being flushed to zero &lt;br /&gt;
* default NaN mode is active&lt;br /&gt;
* no floating point exceptions are enabled&lt;br /&gt;
&lt;br /&gt;
At the present time, it is unsure to me whether Runfast mode will be enabled by default in the Angstrom distribution. If it is not you can use the following C code to enforce it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void enable_runfast()&lt;br /&gt;
{&lt;br /&gt;
	static const unsigned int x = 0x04086060;&lt;br /&gt;
	static const unsigned int y = 0x03000000;&lt;br /&gt;
	int r;&lt;br /&gt;
	asm volatile (&lt;br /&gt;
		&amp;quot;fmrx	%0, fpscr			\n\t&amp;quot;	//r0 = FPSCR&lt;br /&gt;
		&amp;quot;and	%0, %0, %1			\n\t&amp;quot;	//r0 = r0 &amp;amp; 0x04086060&lt;br /&gt;
		&amp;quot;orr	%0, %0, %2			\n\t&amp;quot;	//r0 = r0 | 0x03000000&lt;br /&gt;
		&amp;quot;fmxr	fpscr, %0			\n\t&amp;quot;	//FPSCR = r0&lt;br /&gt;
		: &amp;quot;=r&amp;quot;(r)&lt;br /&gt;
		: &amp;quot;r&amp;quot;(x), &amp;quot;r&amp;quot;(y)&lt;br /&gt;
	);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instructions that are executed on the NFP are: FADDS, FSUBS, FABSS, FNEGS, FMULS, FNMULS, FMACS, FNMACS, FMSCS, FNMSCS, FCMPS, FCMPES, FCMPZS, FCMPEZS, FUITOS, FSITOS, FTOUIS, FTOSIS, FTOUIZS, FTOSIZS, FSHTOS, FSLTOS, FUHTOS, FULTOS, FTOSHS, FTOSLS, FTOUHS, FTOULS.&lt;br /&gt;
&lt;br /&gt;
== Single Precision Floating Point ==&lt;br /&gt;
One important and easy optimization is to make sure that single precision constants are being used. By default this is not the case, instead a double precision constant is being used, so all related operations involving that constant require double precision instructions and cannot be executed on the NEON. eg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{ &lt;br /&gt;
	return (2.123 * x); &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
might end up the same as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{&lt;br /&gt;
	double dx = (double) x;&lt;br /&gt;
	double dy = (double) 2.123; &lt;br /&gt;
	double dr = dx * dy;&lt;br /&gt;
	float r = (float) dr;&lt;br /&gt;
	return r;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can enforce single precision constants by including the compiler flag: '''-fsingle-precision-constant''', alternatively you can append an 'f' to the end of each constant. ie 2.123f&lt;br /&gt;
&lt;br /&gt;
Another thing to watch out for is the double versions of the functions in libm (sin, exp, sqrt) etc. By default these functions operate on double precision floating point values and suffer the same problems as the constants. Luckily libm supplies floating point versions aswell, they can be accessed by appending an 'f' to the end of the function. ie sinf(), expf(), sqrtf().&lt;br /&gt;
&lt;br /&gt;
== NFP / VFP to ARM Transfers ==&lt;br /&gt;
Probably the biggest bottleneck in the architecture is that inorder to transfer a number from the VFP / NFP registers onto the ARM you must stall both the ARM and NFP / VFP for &amp;gt;20 cycles. This is particularly troublesome because this is how GCC supplies arguments and recieves returns from functions. Possibly The best way to minimize operand passing stalls is to make the floating point functions inline.&lt;br /&gt;
&lt;br /&gt;
Another source of NFP / VFP - ARM transfers are conditional branches that depend on floating point numbers. You can do the condition on the VFP but inorder to branch the flags must be sent from the VFP to the ARM. For very simple branches your best bet is to not branch at all and instead use arithmetic. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;if (x &amp;lt; 0) {x += 1.1244;}&amp;lt;/source&amp;gt;&lt;br /&gt;
Is the same as:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;x = x + (x &amp;lt; 0) * 1.1244&amp;lt;/source&amp;gt;&lt;br /&gt;
However you might want to keep a close eye on what the compiler actually produces with the above code. &lt;br /&gt;
&lt;br /&gt;
One interesting fact is that using stores and loads do not cause a stall. So aslong as you don't need the result straight away you can hide the 20 cycle latency. Instead of doing a transfer you; store your NFP / VFP result to memory, do some work on the ARM, then load the result back onto the ARM without penalty. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;void foo(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 123 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void bar(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 546 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
	float x = 10;&lt;br /&gt;
	float y, z;&lt;br /&gt;
	foo(&amp;amp;x, &amp;amp;y)&lt;br /&gt;
	&lt;br /&gt;
	//do ~20 cycles of ARM work&lt;br /&gt;
	&lt;br /&gt;
	bar(&amp;amp;y, &amp;amp;z);&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NEON SIMD ==&lt;br /&gt;
The NEON unit is similar to the MMX and SSE extensions found on X86 processors, it is optimized for Single Instruction Multiple Data (SIMD) operations.&lt;br /&gt;
The NEON unit has 2 floating point pipelines, an integer pipeline and a 128bit load/store/permute pipeline. When properly utilized it is a very powerful coprocessor. Unfortunately GCC does a rather poor job of vectorizing code for the NEON unit. To get the best performance you should use either the intrinsics provided in the &amp;quot;arm_neon.h&amp;quot; header or hand written assembly. &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Therefore, Inorder to achieve the best floating point performance on the Pandora:&lt;br /&gt;
* Use the CodeSourcery 2007q3 release and these flags: -O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant&lt;br /&gt;
* Only use single precision floating point&lt;br /&gt;
* Enable RunFast mode&lt;br /&gt;
* Use NEON intrinsics / ASM for vector, or even scalar, code.&lt;br /&gt;
* Inline floating point code (unless its very large)&lt;br /&gt;
* Minimize Conditional Branches&lt;br /&gt;
* Pass Arguments via pointers instead of by value and do integer work in between function calls.&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1421</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1421"/>
		<updated>2009-07-26T02:04:14Z</updated>

		<summary type="html">&lt;p&gt;Adventus: /* Compiler Support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
In the past it was rare for an embedded processor to have dedicated floating point hardware, this usually limited you to either using fixed point math (which can be very tricky to write) or very slow software floating point emulation. Fortunately the ARM Cortex A8 found in the OMAP3 has 2 Floating Point Units, a non-pipelined VFP-lite conforming to the IEEE754 standard for floating point arithmetic and a pipelined SIMD NEON coprocessor. The VFP-lite can handle both single and double precession arithmetic, as well as properly handling exceptions and subnormal numbers. However, This full spec compliance and due to the presence of the NEON has resulted in a relatively slow implementation, it usually takes from 18 to 21 cycles to perform a single precision multiply accumulate. The NEON unit on the other hand is designed for very fast single precision vector math, it can sustain multiply accumulates at a rate of two per cycle. Efficiently utilizing these coprocessors in GCC will be the focus of this article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In this article I refer to the A8's integer pipeline as the &amp;quot;ARM&amp;quot; , the VFP-lite as simply the &amp;quot;VFP&amp;quot; and the NEON unit as the &amp;quot;NFP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Compiler Support ==&lt;br /&gt;
The NEON + VFP-lite is a new design from ARM and hence does not yet have very mature compiler support. At present the CodeSourcery toolchain has the best support since the mainline GCCs do not support NEON yet. Compiler versions:&lt;br /&gt;
* CS2007q3: Working NEON&lt;br /&gt;
* CS2008q3: Broken NEON&lt;br /&gt;
* CS2009q1: Working NEON (Apparently)&lt;br /&gt;
&lt;br /&gt;
Generally the CS2007q3 release is recommended. The newest release does have better support for vectorizing integer and floating point computations on the NEON, but it has not been thoroughly tested yet. &lt;br /&gt;
&lt;br /&gt;
Inorder to instruct the compiler to produce NEON / VFP code you should use the following compile flags: -mfpu=neon -mfloat-abi=softfp, or -mfpu=vfp -mfloat-abi=softfp. Unfortunately the prebuilt toolchains do not support the passing / returning of values in floating point registers (i talk about this some more in the Transfers section), there is however a patch being tested that supports hardfp and may be included in future toolchains. Additionally, If you want the compiler to attempt to vectorize your integer / floating point code for the NEON you should add: -ftree-vectorize to your flags. &lt;br /&gt;
&lt;br /&gt;
Therefore i recommend the following flags: '''-O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant'''&lt;br /&gt;
&lt;br /&gt;
== VFP-Lite RunFast ==&lt;br /&gt;
Under the correct circumstances some of The VFPs instructions will be executed in the NEON coprocessor. Unfortunately this does not gain the full benefit of the NEON, it still takes 7 cycles for an FMAC / FMUL / FADD. Due to this quirk you will likely get better scalar performance by accessing the NEON directly via Intrinsics or ASM.&lt;br /&gt;
&lt;br /&gt;
Inorder for VFP instruction to execute in the NFP the following constraints must be met:&lt;br /&gt;
* RunFast mode must be enabled&lt;br /&gt;
* Must be single precision floating point operands&lt;br /&gt;
* Must not be a vector instruction (GCC doesn't appear to use this feature, so don't worry about it)&lt;br /&gt;
&lt;br /&gt;
Runfast mode is enabled when the following conditions are present:&lt;br /&gt;
* subnormal numbers are being flushed to zero &lt;br /&gt;
* default NaN mode is active&lt;br /&gt;
* no floating point exceptions are enabled&lt;br /&gt;
&lt;br /&gt;
At the present time, it is unsure to me whether Runfast mode will be enabled by default in the Angstrom distribution. If it is not you can use the following C code to enforce it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void enable_runfast()&lt;br /&gt;
{&lt;br /&gt;
	static const unsigned int x = 0x04086060;&lt;br /&gt;
	static const unsigned int y = 0x03000000;&lt;br /&gt;
	int r;&lt;br /&gt;
	asm volatile (&lt;br /&gt;
		&amp;quot;fmrx	%0, fpscr			\n\t&amp;quot;	//r0 = FPSCR&lt;br /&gt;
		&amp;quot;and	%0, %0, %1			\n\t&amp;quot;	//r0 = r0 &amp;amp; 0x04086060&lt;br /&gt;
		&amp;quot;orr	%0, %0, %2			\n\t&amp;quot;	//r0 = r0 | 0x03000000&lt;br /&gt;
		&amp;quot;fmxr	fpscr, %0			\n\t&amp;quot;	//FPSCR = r0&lt;br /&gt;
		: &amp;quot;=r&amp;quot;(r)&lt;br /&gt;
		: &amp;quot;r&amp;quot;(x), &amp;quot;r&amp;quot;(y)&lt;br /&gt;
	);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instructions that are executed on the NFP are: FADDS, FSUBS, FABSS, FNEGS, FMULS, FNMULS, FMACS, FNMACS, FMSCS, FNMSCS, FCMPS, FCMPES, FCMPZS, FCMPEZS, FUITOS, FSITOS, FTOUIS, FTOSIS, FTOUIZS, FTOSIZS, FSHTOS, FSLTOS, FUHTOS, FULTOS, FTOSHS, FTOSLS, FTOUHS, FTOULS.&lt;br /&gt;
&lt;br /&gt;
== Single Precision Constants ==&lt;br /&gt;
One important and easy optimization is to make sure that single precision constants are being used. By default this is not the case, instead a double precision constant is being used, so all related operations involving that constant require double precision instructions and cannot be executed on the NEON. eg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{ &lt;br /&gt;
	return (2.123 * x); &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
might end up the same as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{&lt;br /&gt;
	double dx = (double) x;&lt;br /&gt;
	double dy = (double) 2.123; &lt;br /&gt;
	double dr = dx * dy;&lt;br /&gt;
	float r = (float) dr;&lt;br /&gt;
	return r;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can enforce single precision constants by including the compiler flag: '''-fsingle-precision-constant''', alternatively you can append an 'f' to the end of each constant. ie 2.123f&lt;br /&gt;
&lt;br /&gt;
== NFP / VFP to ARM Transfers ==&lt;br /&gt;
Probably the biggest bottleneck in the architecture is that inorder to transfer a number from the VFP / NFP registers onto the ARM you must stall both the ARM and NFP / VFP for &amp;gt;20 cycles. This is particularly troublesome because this is how GCC supplies arguments and recieves returns from functions. Possibly The best way to minimize operand passing stalls is to make the floating point functions inline.&lt;br /&gt;
&lt;br /&gt;
Another source of NFP / VFP - ARM transfers are conditional branches that depend on floating point numbers. You can do the condition on the VFP but inorder to branch the flags must be sent from the VFP to the ARM. For very simple branches your best bet is to not branch at all and instead use arithmetic. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;if (x &amp;lt; 0) {x += 1.1244;}&amp;lt;/source&amp;gt;&lt;br /&gt;
Is the same as:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;x = x + (x &amp;lt; 0) * 1.1244&amp;lt;/source&amp;gt;&lt;br /&gt;
However you might want to keep a close eye on what the compiler actually produces with the above code. &lt;br /&gt;
&lt;br /&gt;
One interesting fact is that using stores and loads do not cause a stall. So aslong as you don't need the result straight away you can hide the 20 cycle latency. Instead of doing a transfer you; store your NFP / VFP result to memory, do some work on the ARM, then load the result back onto the ARM without penalty. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;void foo(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 123 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void bar(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 546 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
	float x = 10;&lt;br /&gt;
	float y, z;&lt;br /&gt;
	foo(&amp;amp;x, &amp;amp;y)&lt;br /&gt;
	&lt;br /&gt;
	//do ~20 cycles of ARM work&lt;br /&gt;
	&lt;br /&gt;
	bar(&amp;amp;y, &amp;amp;z);&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NEON SIMD ==&lt;br /&gt;
The NEON unit is similar to the MMX and SSE extensions found on X86 processors, it is optimized for Single Instruction Multiple Data (SIMD) operations.&lt;br /&gt;
The NEON unit has 2 floating point pipelines, an integer pipeline and a 128bit load/store/permute pipeline. When properly utilized it is a very powerful coprocessor. Unfortunately GCC does a rather poor job of vectorizing code for the NEON unit. To get the best performance you should use either the intrinsics provided in the &amp;quot;arm_neon.h&amp;quot; header or hand written assembly. &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Therefore, Inorder to achieve the best floating point performance on the Pandora:&lt;br /&gt;
* Use the CodeSourcery 2007q3 release and these flags: -O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant&lt;br /&gt;
* Only use single precision floating point&lt;br /&gt;
* Enable RunFast mode&lt;br /&gt;
* Use NEON intrinsics / ASM for vector, or even scalar, code.&lt;br /&gt;
* Inline floating point code (unless its very large)&lt;br /&gt;
* Minimize Conditional Branches&lt;br /&gt;
* Pass Arguments via pointers instead of by value and do integer work in between function calls.&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1420</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1420"/>
		<updated>2009-07-26T01:06:54Z</updated>

		<summary type="html">&lt;p&gt;Adventus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
In the past it was rare for an embedded processor to have dedicated floating point hardware, this usually limited you to either using fixed point math (which can be very tricky to write) or very slow software floating point emulation. Fortunately the ARM Cortex A8 found in the OMAP3 has 2 Floating Point Units, a non-pipelined VFP-lite conforming to the IEEE754 standard for floating point arithmetic and a pipelined SIMD NEON coprocessor. The VFP-lite can handle both single and double precession arithmetic, as well as properly handling exceptions and subnormal numbers. However, This full spec compliance and due to the presence of the NEON has resulted in a relatively slow implementation, it usually takes from 18 to 21 cycles to perform a single precision multiply accumulate. The NEON unit on the other hand is designed for very fast single precision vector math, it can sustain multiply accumulates at a rate of two per cycle. Efficiently utilizing these coprocessors in GCC will be the focus of this article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In this article I refer to the A8's integer pipeline as the &amp;quot;ARM&amp;quot; , the VFP-lite as simply the &amp;quot;VFP&amp;quot; and the NEON unit as the &amp;quot;NFP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Compiler Support ==&lt;br /&gt;
The NEON + VFP-lite is a new design from ARM and hence does not yet have very mature compiler support. At present the CodeSourcery toolchain has the best support since the mainline GCCs do not support NEON yet. Compiler versions:&lt;br /&gt;
* CS2007q3: Working NEON&lt;br /&gt;
* CS2008q1: Broken NEON&lt;br /&gt;
* CS2009q1: Partially Working NEON. &lt;br /&gt;
&lt;br /&gt;
Generally the CS2007q3 release is recommended. The newest release does have better support for vectorizing integer and floating point computations on the NEON, but this has proven to be buggy. &lt;br /&gt;
&lt;br /&gt;
Inorder to instruct the compiler to produce NEON / VFP code you should use the following compile flags: -mfpu=neon -mfloat-abi=softfp, or -mfpu=vfp -mfloat-abi=softfp. Unfortunately the prebuilt toolchains do not support the passing / returning of values in floating point registers (i talk about this some more in the Transfers section), there is however a patch being tested that supports hardfp and may be included in future toolchains. Additionally, If you want the compiler to attempt to vectorize your integer / floating point code for the NEON you should add: -ftree-vectorize to your flags. &lt;br /&gt;
&lt;br /&gt;
Therefore i recommend the following flags: '''-O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant'''&lt;br /&gt;
&lt;br /&gt;
== VFP-Lite RunFast ==&lt;br /&gt;
Under the correct circumstances some of The VFPs instructions will be executed in the NEON coprocessor. Unfortunately this does not gain the full benefit of the NEON, it still takes 7 cycles for an FMAC / FMUL / FADD. Due to this quirk you will likely get better scalar performance by accessing the NEON directly via Intrinsics or ASM.&lt;br /&gt;
&lt;br /&gt;
Inorder for VFP instruction to execute in the NFP the following constraints must be met:&lt;br /&gt;
* RunFast mode must be enabled&lt;br /&gt;
* Must be single precision floating point operands&lt;br /&gt;
* Must not be a vector instruction (GCC doesn't appear to use this feature, so don't worry about it)&lt;br /&gt;
&lt;br /&gt;
Runfast mode is enabled when the following conditions are present:&lt;br /&gt;
* subnormal numbers are being flushed to zero &lt;br /&gt;
* default NaN mode is active&lt;br /&gt;
* no floating point exceptions are enabled&lt;br /&gt;
&lt;br /&gt;
At the present time, it is unsure to me whether Runfast mode will be enabled by default in the Angstrom distribution. If it is not you can use the following C code to enforce it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void enable_runfast()&lt;br /&gt;
{&lt;br /&gt;
	static const unsigned int x = 0x04086060;&lt;br /&gt;
	static const unsigned int y = 0x03000000;&lt;br /&gt;
	int r;&lt;br /&gt;
	asm volatile (&lt;br /&gt;
		&amp;quot;fmrx	%0, fpscr			\n\t&amp;quot;	//r0 = FPSCR&lt;br /&gt;
		&amp;quot;and	%0, %0, %1			\n\t&amp;quot;	//r0 = r0 &amp;amp; 0x04086060&lt;br /&gt;
		&amp;quot;orr	%0, %0, %2			\n\t&amp;quot;	//r0 = r0 | 0x03000000&lt;br /&gt;
		&amp;quot;fmxr	fpscr, %0			\n\t&amp;quot;	//FPSCR = r0&lt;br /&gt;
		: &amp;quot;=r&amp;quot;(r)&lt;br /&gt;
		: &amp;quot;r&amp;quot;(x), &amp;quot;r&amp;quot;(y)&lt;br /&gt;
	);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instructions that are executed on the NFP are: FADDS, FSUBS, FABSS, FNEGS, FMULS, FNMULS, FMACS, FNMACS, FMSCS, FNMSCS, FCMPS, FCMPES, FCMPZS, FCMPEZS, FUITOS, FSITOS, FTOUIS, FTOSIS, FTOUIZS, FTOSIZS, FSHTOS, FSLTOS, FUHTOS, FULTOS, FTOSHS, FTOSLS, FTOUHS, FTOULS.&lt;br /&gt;
&lt;br /&gt;
== Single Precision Constants ==&lt;br /&gt;
One important and easy optimization is to make sure that single precision constants are being used. By default this is not the case, instead a double precision constant is being used, so all related operations involving that constant require double precision instructions and cannot be executed on the NEON. eg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{ &lt;br /&gt;
	return (2.123 * x); &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
might end up the same as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{&lt;br /&gt;
	double dx = (double) x;&lt;br /&gt;
	double dy = (double) 2.123; &lt;br /&gt;
	double dr = dx * dy;&lt;br /&gt;
	float r = (float) dr;&lt;br /&gt;
	return r;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can enforce single precision constants by including the compiler flag: '''-fsingle-precision-constant''', alternatively you can append an 'f' to the end of each constant. ie 2.123f&lt;br /&gt;
&lt;br /&gt;
== NFP / VFP to ARM Transfers ==&lt;br /&gt;
Probably the biggest bottleneck in the architecture is that inorder to transfer a number from the VFP / NFP registers onto the ARM you must stall both the ARM and NFP / VFP for &amp;gt;20 cycles. This is particularly troublesome because this is how GCC supplies arguments and recieves returns from functions. Possibly The best way to minimize operand passing stalls is to make the floating point functions inline.&lt;br /&gt;
&lt;br /&gt;
Another source of NFP / VFP - ARM transfers are conditional branches that depend on floating point numbers. You can do the condition on the VFP but inorder to branch the flags must be sent from the VFP to the ARM. For very simple branches your best bet is to not branch at all and instead use arithmetic. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;if (x &amp;lt; 0) {x += 1.1244;}&amp;lt;/source&amp;gt;&lt;br /&gt;
Is the same as:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;x = x + (x &amp;lt; 0) * 1.1244&amp;lt;/source&amp;gt;&lt;br /&gt;
However you might want to keep a close eye on what the compiler actually produces with the above code. &lt;br /&gt;
&lt;br /&gt;
One interesting fact is that using stores and loads do not cause a stall. So aslong as you don't need the result straight away you can hide the 20 cycle latency. Instead of doing a transfer you; store your NFP / VFP result to memory, do some work on the ARM, then load the result back onto the ARM without penalty. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;void foo(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 123 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void bar(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 546 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
	float x = 10;&lt;br /&gt;
	float y, z;&lt;br /&gt;
	foo(&amp;amp;x, &amp;amp;y)&lt;br /&gt;
	&lt;br /&gt;
	//do ~20 cycles of ARM work&lt;br /&gt;
	&lt;br /&gt;
	bar(&amp;amp;y, &amp;amp;z);&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NEON SIMD ==&lt;br /&gt;
The NEON unit is similar to the MMX and SSE extensions found on X86 processors, it is optimized for Single Instruction Multiple Data (SIMD) operations.&lt;br /&gt;
The NEON unit has 2 floating point pipelines, an integer pipeline and a 128bit load/store/permute pipeline. When properly utilized it is a very powerful coprocessor. Unfortunately GCC does a rather poor job of vectorizing code for the NEON unit. To get the best performance you should use either the intrinsics provided in the &amp;quot;arm_neon.h&amp;quot; header or hand written assembly. &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Therefore, Inorder to achieve the best floating point performance on the Pandora:&lt;br /&gt;
* Use the CodeSourcery 2007q3 release and these flags: -O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant&lt;br /&gt;
* Only use single precision floating point&lt;br /&gt;
* Enable RunFast mode&lt;br /&gt;
* Use NEON intrinsics / ASM for vector, or even scalar, code.&lt;br /&gt;
* Inline floating point code (unless its very large)&lt;br /&gt;
* Minimize Conditional Branches&lt;br /&gt;
* Pass Arguments via pointers instead of by value and do integer work in between function calls.&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1419</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1419"/>
		<updated>2009-07-26T01:04:39Z</updated>

		<summary type="html">&lt;p&gt;Adventus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
In the past it was rare for an embedded processor to have dedicated floating point hardware, this usually limited you to either using fixed point math (which can be very tricky to write) or very slow software floating point emulation. Fortunately the ARM Cortex A8 found in the OMAP3 has 2 Floating Point Units, a non-pipelined VFP-lite conforming to the IEEE754 standard for floating point arithmetic and a pipelined SIMD NEON coprocessor. The VFP-lite can handle both single and double precession arithmetic, as well as properly handling exceptions and subnormal numbers. However, This full spec compliance and due to the presence of the NEON has resulted in a relatively slow implementation, it usually takes from 18 to 21 cycles to perform a single precision multiply accumulate. The NEON unit on the other hand is designed for very fast single precision vector math, it can sustain multiply accumulates at a rate of two per cycle. Efficiently utilizing these coprocessors in GCC will be the focus of this article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In this article I refer to the A8's integer pipeline as the &amp;quot;ARM&amp;quot; , the VFP-lite as simply the &amp;quot;VFP&amp;quot; and the NEON unit as the &amp;quot;NFP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Compiler Support ==&lt;br /&gt;
The NEON + VFP-lite is a new design from ARM and hence does not yet have very mature compiler support. At present the CodeSourcery toolchain has the best support since the mainline GCCs do not support NEON yet. Compiler versions:&lt;br /&gt;
* CS2007q3: Working NEON&lt;br /&gt;
* CS2008q1: Broken NEON&lt;br /&gt;
* CS2009q1: Partially Working NEON. &lt;br /&gt;
&lt;br /&gt;
Generally the CS2007q3 release is recommended. The newest release does have better support for vectorizing integer and floating point computations on the NEON, but this has proven to be buggy. &lt;br /&gt;
&lt;br /&gt;
Inorder to instruct the compiler to produce NEON / VFP code you should use the following compile flags: -mfpu=neon -mfloat-abi=softfp, or -mfpu=vfp -mfloat-abi=softfp. Unfortunately the prebuilt toolchains do not support the passing / returning of values in floating point registers (i talk about this some more in the Transfers section), there is however a patch being tested that supports hardfp and may be included in future toolchains. Additionally, If you want the compiler to attempt to vectorize your integer / floating point code for the NEON you should add: -ftree-vectorize to your flags. &lt;br /&gt;
&lt;br /&gt;
Therefore i recommend the following flags: '''-O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant'''&lt;br /&gt;
&lt;br /&gt;
== VFP-Lite RunFast ==&lt;br /&gt;
Under the correct circumstances some of The VFPs instructions will be executed in the NEON coprocessor. Unfortunately this does not gain the full benefit of the NEON, it still takes 7 cycles for an FMAC / FMUL / FADD. Due to this quirk you will likely get better scalar performance by accessing the NEON directly via Intrinsics or ASM.&lt;br /&gt;
&lt;br /&gt;
Inorder for VFP instruction to execute in the NFP the following constraints must be met:&lt;br /&gt;
* RunFast mode must be enabled&lt;br /&gt;
* Must be single precision floating point operands&lt;br /&gt;
* Must not be a vector instruction (GCC doesn't appear to use this feature, so don't worry about it)&lt;br /&gt;
&lt;br /&gt;
Runfast mode is enabled when the following conditions are present:&lt;br /&gt;
* subnormal numbers are being flushed to zero &lt;br /&gt;
* default NaN mode is active&lt;br /&gt;
* no floating point exceptions are enabled&lt;br /&gt;
&lt;br /&gt;
At the present time, it is unsure to me whether Runfast mode will be enabled by default in the Angstrom distribution. If it is not you can use the following C code to enforce it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void enable_runfast()&lt;br /&gt;
{&lt;br /&gt;
	static const unsigned int x = 0x04086060;&lt;br /&gt;
	static const unsigned int y = 0x03000000;&lt;br /&gt;
	int r;&lt;br /&gt;
	asm volatile (&lt;br /&gt;
		&amp;quot;fmrx	%0, fpscr			\n\t&amp;quot;	//r0 = FPSCR&lt;br /&gt;
		&amp;quot;and	%0, %0, %1			\n\t&amp;quot;	//r0 = r0 &amp;amp; 0x04086060&lt;br /&gt;
		&amp;quot;orr	%0, %0, %2			\n\t&amp;quot;	//r0 = r0 | 0x03000000&lt;br /&gt;
		&amp;quot;fmxr	fpscr, %0			\n\t&amp;quot;	//FPSCR = r0&lt;br /&gt;
		: &amp;quot;=r&amp;quot;(r)&lt;br /&gt;
		: &amp;quot;r&amp;quot;(x), &amp;quot;r&amp;quot;(y)&lt;br /&gt;
	);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instructions that are executed on the NFP are: FADDS, FSUBS, FABSS, FNEGS, FMULS, FNMULS, FMACS, FNMACS, FMSCS, FNMSCS, FCMPS, FCMPES, FCMPZS, FCMPEZS, FUITOS, FSITOS, FTOUIS, FTOSIS, FTOUIZS, FTOSIZS, FSHTOS, FSLTOS, FUHTOS, FULTOS, FTOSHS, FTOSLS, FTOUHS, FTOULS.&lt;br /&gt;
&lt;br /&gt;
== Single Precision Constants ==&lt;br /&gt;
One important and easy optimization is to make sure that single precision constants are being used. By default this is not the case, instead a double precision constant is being used, so all related operations involving that constant require double precision instructions and cannot be executed on the NEON. eg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{ &lt;br /&gt;
	return (2.123 * x); &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
might end up the same as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{&lt;br /&gt;
	double dx = (double) x;&lt;br /&gt;
	double dy = (double) 2.123; &lt;br /&gt;
	double dr = dx * dy;&lt;br /&gt;
	float r = (float) dr;&lt;br /&gt;
	return r;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can enforce single precision constants by including the compiler flag: '''-fsingle-precision-constant''', alternatively you can append an 'f' to the end of each constant. ie 2.123f&lt;br /&gt;
&lt;br /&gt;
== NFP / VFP to ARM Transfers ==&lt;br /&gt;
Probably the biggest bottleneck in the architecture is that inorder to transfer a number from the VFP / NFP registers onto the ARM you must stall both the ARM and NFP / VFP for &amp;gt;20 cycles. This is particularly troublesome because this is how GCC supplies arguments and recieves returns from functions. Possibly The best way to minimize operand passing stalls is to make the floating point functions inline.&lt;br /&gt;
&lt;br /&gt;
Another source of NFP / VFP - ARM transfers are conditional branches that depend on floating point numbers. You can do the condition on the VFP but inorder to branch the flags must be sent from the VFP to the ARM. For very simple branches your best bet is to not branch at all and instead use arithmetic. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;if (x &amp;lt; 0) {x += 1.1244;}&amp;lt;/source&amp;gt;&lt;br /&gt;
Is the same as:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;x = x + (x &amp;lt; 0) * 1.1244&amp;lt;/source&amp;gt;&lt;br /&gt;
However you might want to keep a close eye on what the compiler actually produces with the above code. &lt;br /&gt;
&lt;br /&gt;
One interesting fact is that using stores and loads do not cause a stall. So aslong as you don't need the result straight away you can hide the 20 cycle latency. Instead of doing a transfer you; store your NFP / VFP result to memory, do some work on the ARM, then load the result back onto the ARM without penalty. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;void foo(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 123 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void bar(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 546 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
	float x = 10;&lt;br /&gt;
	float y, z;&lt;br /&gt;
	foo(&amp;amp;x, &amp;amp;y)&lt;br /&gt;
	&lt;br /&gt;
	//do ~20 cycles of ARM work&lt;br /&gt;
	&lt;br /&gt;
	bar(&amp;amp;y, &amp;amp;z);&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NEON SIMD ==&lt;br /&gt;
The NEON unit is similar to the MMX and SSE extensions found on X86 processors, it is optimized for Single Instruction Multiple Data (SIMD) operations.&lt;br /&gt;
The NEON unit has 2 floating point pipelines, an integer pipeline and a 128bit load/store/permute pipeline. When properly utilized it is a very powerful coprocessor. Unfortunately GCC does a rather poor job of vectorizing code for the NEON unit. To get the best performance you should use either the intrinsics provided in the &amp;quot;arm_neon.h&amp;quot; header or hand written assembly. &lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Therefore, Inorder to achieve the best floating point performance on the Pandora:&lt;br /&gt;
* Use the CodeSourcery 2007q3 release and these flags: -O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant&lt;br /&gt;
* Only use single precision floating point&lt;br /&gt;
* Enable RunFast mode&lt;br /&gt;
* Inline floating point code (unless its very large)&lt;br /&gt;
* Minimize Conditional Branches&lt;br /&gt;
* Pass Arguments via pointers instead of by value and do integer work in between function calls.&lt;br /&gt;
* Use NEON intrinsics / ASM for vectoriseable code.&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1418</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1418"/>
		<updated>2009-07-26T00:41:56Z</updated>

		<summary type="html">&lt;p&gt;Adventus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
In the past it was rare for an embedded processor to have dedicated floating point hardware, this usually limited you to either using fixed point math (which can be very tricky to write) or very slow software floating point emulation. Fortunately the ARM Cortex A8 found in the OMAP3 has 2 Floating Point Units, a non-pipelined VFP-lite conforming to the IEEE754 standard for floating point arithmetic and a pipelined SIMD NEON coprocessor. The VFP-lite can handle both single and double precession arithmetic, as well as properly handling exceptions and subnormal numbers. However, This full spec compliance and due to the presence of the NEON has resulted in a relatively slow implementation, it usually takes from 18 to 21 cycles to perform a single precision multiply accumulate. The NEON unit on the other hand is designed for very fast single precision vector math, it can sustain multiply accumulates at a rate of two per cycle. Efficiently utilizing these coprocessors in GCC will be the focus of this article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In this article I refer to the A8's integer pipeline as the &amp;quot;ARM&amp;quot; , the VFP-lite as simply the &amp;quot;VFP&amp;quot; and the NEON unit as the &amp;quot;NFP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Compiler Support ==&lt;br /&gt;
The NEON + VFP-lite is a new design from ARM and hence does not yet have very mature compiler support. At present the CodeSourcery toolchain has the best support since the mainline GCCs do not support NEON yet. Compiler versions:&lt;br /&gt;
* CS2007q3: Working NEON&lt;br /&gt;
* CS2008q1: Broken NEON&lt;br /&gt;
* CS2009q1: Partially Working NEON. &lt;br /&gt;
&lt;br /&gt;
Generally the CS2007q3 release is recommended. The newest release does have better support for vectorizing integer and floating point computations on the NEON, but this has proven to be buggy. &lt;br /&gt;
&lt;br /&gt;
Inorder to instruct the compiler to produce NEON / VFP code you should use the following compile flags: -mfpu=neon -mfloat-abi=softfp, or -mfpu=vfp -mfloat-abi=softfp. Unfortunately the prebuilt toolchains do not support the passing / returning of values in floating point registers (i talk about this some more in the Transfers section), there is however a patch being tested that supports hardfp and may be included in future toolchains. Additionally, If you want the compiler to attempt to vectorize your integer / floating point code for the NEON you should add: -ftree-vectorize to your flags. &lt;br /&gt;
&lt;br /&gt;
Therefore i recommend the following flags: '''-O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant'''&lt;br /&gt;
&lt;br /&gt;
== VFP-Lite RunFast ==&lt;br /&gt;
The VFP-Lite has one saving grace, under the correct circumstances some of its instructions will be executed in the NEON coprocessor and will gain benefits of doing so. Inorder for this to occur the following constraints must be met:&lt;br /&gt;
* RunFast mode must be enabled&lt;br /&gt;
* Must be single precision floating point operands&lt;br /&gt;
* Must not be a vector instruction (GCC doesn't appear to use this feature, so don't worry about it)&lt;br /&gt;
&lt;br /&gt;
Runfast mode is enabled when the following conditions are present:&lt;br /&gt;
* subnormal numbers are being flushed to zero &lt;br /&gt;
* default NaN mode is active&lt;br /&gt;
* no floating point exceptions are enabled&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the present time, it is unsure to me whether Runfast mode will be enabled by default in the Angstrom distribution. If it is not you can use the following C code to enforce it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void enable_runfast()&lt;br /&gt;
{&lt;br /&gt;
	static const unsigned int x = 0x04086060;&lt;br /&gt;
	static const unsigned int y = 0x03000000;&lt;br /&gt;
	int r;&lt;br /&gt;
	asm volatile (&lt;br /&gt;
		&amp;quot;fmrx	%0, fpscr			\n\t&amp;quot;	//r0 = FPSCR&lt;br /&gt;
		&amp;quot;and	%0, %0, %1			\n\t&amp;quot;	//r0 = r0 &amp;amp; 0x04086060&lt;br /&gt;
		&amp;quot;orr	%0, %0, %2			\n\t&amp;quot;	//r0 = r0 | 0x03000000&lt;br /&gt;
		&amp;quot;fmxr	fpscr, %0			\n\t&amp;quot;	//FPSCR = r0&lt;br /&gt;
		: &amp;quot;=r&amp;quot;(r)&lt;br /&gt;
		: &amp;quot;r&amp;quot;(x), &amp;quot;r&amp;quot;(y)&lt;br /&gt;
	);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instructions that are executed on the NFP are: FADDS, FSUBS, FABSS, FNEGS, FMULS, FNMULS, FMACS, FNMACS, FMSCS, FNMSCS, FCMPS, FCMPES, FCMPZS, FCMPEZS, FUITOS, FSITOS, FTOUIS, FTOSIS, FTOUIZS, FTOSIZS, FSHTOS, FSLTOS, FUHTOS, FULTOS, FTOSHS, FTOSLS, FTOUHS, FTOULS.&lt;br /&gt;
&lt;br /&gt;
== Single Precision Constants ==&lt;br /&gt;
One important and easy optimization is to make sure that single precision constants are being used. By default this is not the case, instead a double precision constant is being used, so all related operations involving that constant require double precision instructions and cannot be executed on the NEON. eg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{ &lt;br /&gt;
	return (2.123 * x); &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
might end up the same as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{&lt;br /&gt;
	double dx = (double) x;&lt;br /&gt;
	double dy = (double) 2.123; &lt;br /&gt;
	double dr = dx * dy;&lt;br /&gt;
	float r = (float) dr;&lt;br /&gt;
	return r;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can enforce single precision constants by including the compiler flag: '''-fsingle-precision-constant''', alternatively you can append an 'f' to the end of each constant. ie 2.123f&lt;br /&gt;
&lt;br /&gt;
== NFP / VFP to ARM Transfers ==&lt;br /&gt;
Probably the biggest bottleneck in the architecture is that inorder to transfer a number from the VFP / NFP registers onto the ARM you must stall both the ARM and NFP / VFP for &amp;gt;20 cycles. This is particularly troublesome because this is how GCC supplies arguments and recieves returns from functions. Possibly The best way to minimize operand passing stalls is to make the floating point functions inline.&lt;br /&gt;
&lt;br /&gt;
Another source of NFP / VFP - ARM transfers are conditional branches that depend on floating point numbers. You can do the condition on the VFP but inorder to branch the flags must be sent from the VFP to the ARM. For very simple branches your best bet is to not branch at all and instead use arithmetic. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;if (x &amp;lt; 0) {x += 1.1244;}&amp;lt;/source&amp;gt;&lt;br /&gt;
Is the same as:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;x = x + (x &amp;lt; 0) * 1.1244&amp;lt;/source&amp;gt;&lt;br /&gt;
However you might want to keep a close eye on what the compiler actually produces with the above code. &lt;br /&gt;
&lt;br /&gt;
One interesting fact is that using stores and loads do not cause a stall. So aslong as you don't need the result straight away you can hide the 20 cycle latency. Instead of doing a transfer you; store your NFP / VFP result to memory, do some work on the ARM, then load the result back onto the ARM without penalty. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;void foo(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 123 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void bar(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 546 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
	float x = 10;&lt;br /&gt;
	float y, z;&lt;br /&gt;
	foo(&amp;amp;x, &amp;amp;y)&lt;br /&gt;
	&lt;br /&gt;
	//do ~20 cycles of ARM work&lt;br /&gt;
	&lt;br /&gt;
	bar(&amp;amp;y, &amp;amp;z);&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NEON SIMD ==&lt;br /&gt;
The NEON unit is similar to the MMX and SSE extensions found on X86 processors, it is optimized for Single Instruction Multiple Data (SIMD) operations.&lt;br /&gt;
The NEON unit has 2 floating point pipelines, an integer pipeline and a 128bit load/store/permute pipeline. When properly utilized it is a very powerful coprocessor. Unfortunately GCC does a rather poor job of vectorizing code for the NEON unit. To get the best performance you should use either the intrinsics provided in the &amp;quot;arm_neon.h&amp;quot; header or hand written assembly.&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Therefore, Inorder to achieve the best floating point performance on the Pandora:&lt;br /&gt;
* Use the CodeSourcery 2007q3 release and these flags: -O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant&lt;br /&gt;
* Only use single precision floating point&lt;br /&gt;
* Enable RunFast mode&lt;br /&gt;
* Inline floating point code (unless its very large)&lt;br /&gt;
* Minimize Conditional Branches&lt;br /&gt;
* Pass Arguments via pointers instead of by value and do integer work in between function calls.&lt;br /&gt;
* Use NEON intrinsics / ASM for vectoriseable code.&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1417</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1417"/>
		<updated>2009-07-26T00:39:43Z</updated>

		<summary type="html">&lt;p&gt;Adventus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
In the past it was rare for an embedded processor to have dedicated floating point hardware, this usually limited you to either using fixed point math (which can be very tricky to write) or very slow software floating point emulation. Fortunately the ARM Cortex A8 found in the OMAP3 has 2 Floating Point Units, a non-pipelined VFP-lite conforming to the IEEE754 standard for floating point arithmetic and a pipelined SIMD NEON coprocessor. The VFP-lite can handle both single and double precession arithmetic, as well as properly handling exceptions and subnormal numbers. However, This full spec compliance and due to the presence of the NEON has resulted in a relatively slow implementation, it usually takes from 18 to 21 cycles to perform a single precision multiply accumulate. The NEON unit on the other hand is designed for very fast single precision vector math, it can sustain multiply accumulates at a rate of two per cycle. Efficiently utilizing these coprocessors in GCC will be the focus of this article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In this article I refer to the A8's integer pipeline as the &amp;quot;ARM&amp;quot; , the VFP-lite as simply the &amp;quot;VFP&amp;quot; and the NEON unit as the &amp;quot;NFP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Compiler Support ==&lt;br /&gt;
The NEON + VFP-lite is a new design from ARM and hence does not yet have very mature compiler support. At present the CodeSourcery toolchain has the best support since the mainline GCCs do not support NEON yet. Compiler versions:&lt;br /&gt;
* CS2007q3: Working NEON&lt;br /&gt;
* CS2008q1: Broken NEON&lt;br /&gt;
* CS2009q1: Partially Working NEON. &lt;br /&gt;
&lt;br /&gt;
Generally the CS2007q3 release is recommended. The newest release does have better support for vectorizing integer and floating point computations on the NEON, but this has proven to be buggy. &lt;br /&gt;
&lt;br /&gt;
Inorder to instruct the compiler to produce NEON / VFP code you should use the following compile flags: -mfpu=neon -mfloat-abi=softfp, or -mfpu=vfp -mfloat-abi=softfp. Unfortunately the prebuilt toolchains do not support the passing / returning of values in floating point registers (i talk about this some more in the Transfers section), there is however a patch being tested that supports hardfp and may be included in future toolchains. Additionally, If you want the compiler to attempt to vectorize your integer / floating point code for the NEON you should add: -ftree-vectorize to your flags. &lt;br /&gt;
&lt;br /&gt;
Therefore i recommend the following flags: -O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -ffast-math -fsingle-precision-constant&lt;br /&gt;
&lt;br /&gt;
== VFP-Lite RunFast ==&lt;br /&gt;
The VFP-Lite has one saving grace, under the correct circumstances some of its instructions will be executed in the NEON coprocessor and will gain benefits of doing so. Inorder for this to occur the following constraints must be met:&lt;br /&gt;
* RunFast mode must be enabled&lt;br /&gt;
* Must be single precision floating point operands&lt;br /&gt;
* Must not be a vector instruction (GCC doesn't appear to use this feature, so don't worry about it)&lt;br /&gt;
&lt;br /&gt;
Runfast mode is enabled when the following conditions are present:&lt;br /&gt;
* subnormal numbers are being flushed to zero &lt;br /&gt;
* default NaN mode is active&lt;br /&gt;
* no floating point exceptions are enabled&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the present time, it is unsure to me whether Runfast mode will be enabled by default in the Angstrom distribution. If it is not you can use the following C code to enforce it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void enable_runfast()&lt;br /&gt;
{&lt;br /&gt;
	static const unsigned int x = 0x04086060;&lt;br /&gt;
	static const unsigned int y = 0x03000000;&lt;br /&gt;
	int r;&lt;br /&gt;
	asm volatile (&lt;br /&gt;
		&amp;quot;fmrx	%0, fpscr			\n\t&amp;quot;	//r0 = FPSCR&lt;br /&gt;
		&amp;quot;and	%0, %0, %1			\n\t&amp;quot;	//r0 = r0 &amp;amp; 0x04086060&lt;br /&gt;
		&amp;quot;orr	%0, %0, %2			\n\t&amp;quot;	//r0 = r0 | 0x03000000&lt;br /&gt;
		&amp;quot;fmxr	fpscr, %0			\n\t&amp;quot;	//FPSCR = r0&lt;br /&gt;
		: &amp;quot;=r&amp;quot;(r)&lt;br /&gt;
		: &amp;quot;r&amp;quot;(x), &amp;quot;r&amp;quot;(y)&lt;br /&gt;
	);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instructions that are executed on the NFP are: FADDS, FSUBS, FABSS, FNEGS, FMULS, FNMULS, FMACS, FNMACS, FMSCS, FNMSCS, FCMPS, FCMPES, FCMPZS, FCMPEZS, FUITOS, FSITOS, FTOUIS, FTOSIS, FTOUIZS, FTOSIZS, FSHTOS, FSLTOS, FUHTOS, FULTOS, FTOSHS, FTOSLS, FTOUHS, FTOULS.&lt;br /&gt;
&lt;br /&gt;
== Single Precision Constants ==&lt;br /&gt;
One important and easy optimization is to make sure that single precision constants are being used. By default this is not the case, instead a double precision constant is being used, so all related operations involving that constant require double precision instructions and cannot be executed on the NEON. eg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{ &lt;br /&gt;
	return (2.123 * x); &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
might end up the same as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{&lt;br /&gt;
	double dx = (double) x;&lt;br /&gt;
	double dy = (double) 2.123; &lt;br /&gt;
	double dr = dx * dy;&lt;br /&gt;
	float r = (float) dr;&lt;br /&gt;
	return r;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can enforce single precision constants by including the compiler flag: '''-fsingle-precision-constant''', alternatively you can append an 'f' to the end of each constant. ie 2.123f&lt;br /&gt;
&lt;br /&gt;
== NFP / VFP to ARM Transfers ==&lt;br /&gt;
Probably the biggest bottleneck in the architecture is that inorder to transfer a number from the VFP / NFP registers onto the ARM you must stall both the ARM and NFP / VFP for &amp;gt;20 cycles. This is particularly troublesome because this is how GCC supplies arguments and recieves returns from functions. Possibly The best way to minimize operand passing stalls is to make the floating point functions inline.&lt;br /&gt;
&lt;br /&gt;
Another source of NFP / VFP - ARM transfers are conditional branches that depend on floating point numbers. You can do the condition on the VFP but inorder to branch the flags must be sent from the VFP to the ARM. For very simple branches your best bet is to not branch at all and instead use arithmetic. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;if (x &amp;lt; 0) {x += 1.1244;}&amp;lt;/source&amp;gt;&lt;br /&gt;
Is the same as:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;x = x + (x &amp;lt; 0) * 1.1244&amp;lt;/source&amp;gt;&lt;br /&gt;
However you might want to keep a close eye on what the compiler actually produces with the above code. &lt;br /&gt;
&lt;br /&gt;
One interesting fact is that using stores and loads do not cause a stall. So aslong as you don't need the result straight away you can hide the 20 cycle latency. Instead of doing a transfer you; store your NFP / VFP result to memory, do some work on the ARM, then load the result back onto the ARM without penalty. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;void foo(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 123 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void bar(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 546 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
	float x = 10;&lt;br /&gt;
	float y, z;&lt;br /&gt;
	foo(&amp;amp;x, &amp;amp;y)&lt;br /&gt;
	&lt;br /&gt;
	//do ~20 cycles of ARM work&lt;br /&gt;
	&lt;br /&gt;
	bar(&amp;amp;y, &amp;amp;z);&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NEON SIMD ==&lt;br /&gt;
The NEON unit is similar to the MMX and SSE extensions found on X86 processors, it is optimized for Single Instruction Multiple Data (SIMD) operations.&lt;br /&gt;
The NEON unit has 2 floating point pipelines, an integer pipeline and a 128bit load/store/permute pipeline. When properly utilized it is a very powerful coprocessor. Unfortunately GCC does a rather poor job of vectorizing code for the NEON unit. To get the best performance you should use either the intrinsics provided in the &amp;quot;arm_neon.h&amp;quot; header or hand written assembly.&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Therefore, Inorder to achieve the best floating point performance on the Pandora:&lt;br /&gt;
* Only use single precision floating point&lt;br /&gt;
* Use single precision constants&lt;br /&gt;
* Enable RunFast mode&lt;br /&gt;
* Inline floating point code (unless its very large)&lt;br /&gt;
* Minimize Conditional Branches&lt;br /&gt;
* Pass Arguments via pointers instead of by value and do integer work in between function calls.&lt;br /&gt;
* Use NEON intrinsics / ASM for vectoriseable code.&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Development_tutorials&amp;diff=1416</id>
		<title>Development tutorials</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Development_tutorials&amp;diff=1416"/>
		<updated>2009-07-25T07:22:37Z</updated>

		<summary type="html">&lt;p&gt;Adventus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ARM Cortex A8 Tutorials ==&lt;br /&gt;
* [[Floating Point Optimization]]&lt;br /&gt;
&lt;br /&gt;
== SDL Tutorials ==&lt;br /&gt;
&lt;br /&gt;
These tutorials assume you know the basics of C++ programming, and know your way around a C++ compiler.&lt;br /&gt;
&lt;br /&gt;
* [http://www.lazyfoo.net/SDL_tutorials/index.php Lazy Foo's Tutorials].  Not Pandora specific, but a good guide to getting your programming environment set up, along with many SDL tutorials.&lt;br /&gt;
* [http://iki.fi/sol/gp/ Sol's Graphics for beginners].  Not Pandora specific, but a good place to get started with SDL graphics coding.&lt;br /&gt;
&lt;br /&gt;
==OpenGL on the Pandora==&lt;br /&gt;
&lt;br /&gt;
*[[OpenGL ES 1.1 Tutorial]]&lt;br /&gt;
&lt;br /&gt;
*[[OpenGL ES 2.0 Tutorial]]&lt;br /&gt;
&lt;br /&gt;
*[[Combining OpenGL ES 1.1 and SDL to create a window on the Pandora]]&lt;br /&gt;
&lt;br /&gt;
== The Kernel ==&lt;br /&gt;
* [[Kernel build instructions|Compiling the Kernel from Git]]&lt;br /&gt;
* [[Kernel interface|Kernel Interface]]&lt;br /&gt;
&lt;br /&gt;
== Matchbox Window Manager ==&lt;br /&gt;
&lt;br /&gt;
* [[Matchbox|Matchbox version]]&lt;br /&gt;
* [[xoo on ubuntu|Setting up xoo on Ubuntu 8.04/8.10]] (Theme Testing and Development)&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Development Tools]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1415</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1415"/>
		<updated>2009-07-25T07:16:23Z</updated>

		<summary type="html">&lt;p&gt;Adventus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
In the past it was rare for an embedded processor to have dedicated floating point hardware, this usually limited you to either using fixed point math (which can be very tricky to write) or very slow software floating point emulation. Fortunately the ARM Cortex A8 found in the OMAP3 has 2 Floating Point Units, a non-pipelined VFP-lite conforming to the IEEE754 standard for floating point arithmetic and a pipelined SIMD NEON coprocessor. The VFP-lite can handle both single and double precession arithmetic, as well as properly handling exceptions and subnormal numbers. However, This full spec compliance and the limited die space available has resulted in a relatively slow implementation, it usually takes from 18 to 21 cycles to perform a single precision multiply accumulate. The NEON unit on the other hand is designed for very fast single precision vector math, it can sustain multiply accumulates at a rate of two per cycle. Efficiently utilizing these coprocessors in GCC will be the focus of this article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In this article I refer to the A8's integer pipeline as the &amp;quot;ARM&amp;quot; , the VFP-lite as simply the &amp;quot;VFP&amp;quot; and the NEON unit as the &amp;quot;NFP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== VFP-Lite RunFast ==&lt;br /&gt;
The VFP-Lite has one saving grace, under the correct circumstances some of its instructions will be executed in the NEON coprocessor and will gain the full benefits of doing so. Inorder for this to occur the following constraints must be met:&lt;br /&gt;
* RunFast mode must be enabled&lt;br /&gt;
* Must be single precision floating point operands&lt;br /&gt;
* Must not be a vector instruction (GCC doesn't appear to use this feature, so don't worry about it)&lt;br /&gt;
&lt;br /&gt;
Runfast mode is enabled when the following conditions are present:&lt;br /&gt;
* subnormal numbers are being flushed to zero &lt;br /&gt;
* default NaN mode is active&lt;br /&gt;
* no floating point exceptions are enabled&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the present time, it is unsure to me whether Runfast mode will be enabled by default in the Angstrom distribution. If it is not you can use the following C code to enforce it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void enable_runfast()&lt;br /&gt;
{&lt;br /&gt;
	static const unsigned int x = 0x04086060;&lt;br /&gt;
	static const unsigned int y = 0x03000000;&lt;br /&gt;
	int r;&lt;br /&gt;
	asm volatile (&lt;br /&gt;
		&amp;quot;fmrx	%0, fpscr			\n\t&amp;quot;	//r0 = FPSCR&lt;br /&gt;
		&amp;quot;and	%0, %0, %1			\n\t&amp;quot;	//r0 = r0 &amp;amp; 0x04086060&lt;br /&gt;
		&amp;quot;orr	%0, %0, %2			\n\t&amp;quot;	//r0 = r0 | 0x03000000&lt;br /&gt;
		&amp;quot;fmxr	fpscr, %0			\n\t&amp;quot;	//FPSCR = r0&lt;br /&gt;
		: &amp;quot;=r&amp;quot;(r)&lt;br /&gt;
		: &amp;quot;r&amp;quot;(x), &amp;quot;r&amp;quot;(y)&lt;br /&gt;
	);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instructions that are executed on the NFP are: FADDS, FSUBS, FABSS, FNEGS, FMULS, FNMULS, FMACS, FNMACS, FMSCS, FNMSCS, FCMPS, FCMPES, FCMPZS, FCMPEZS, FUITOS, FSITOS, FTOUIS, FTOSIS, FTOUIZS, FTOSIZS, FSHTOS, FSLTOS, FUHTOS, FULTOS, FTOSHS, FTOSLS, FTOUHS, FTOULS.&lt;br /&gt;
&lt;br /&gt;
== Single Precision Constants ==&lt;br /&gt;
One important and easy optimization is to make sure that single precision constants are begin used. By default this is not the case, instead a double precision constant is being used, so all related operations involving that constant require double precision instructions and cannot be executed on the NEON. eg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{ &lt;br /&gt;
	return (2.123 * x); &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
might end up the same as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{&lt;br /&gt;
	double dx = (double) x;&lt;br /&gt;
	double dy = (double) 2.123; &lt;br /&gt;
	double dr = dx * dy;&lt;br /&gt;
	float r = (float) dr;&lt;br /&gt;
	return r;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can enforce single precision constants by including the compiler flag: '''-fsingle-precision-constant'''.&lt;br /&gt;
&lt;br /&gt;
== NFP / VFP to ARM Transfers ==&lt;br /&gt;
Probably the biggest bottleneck in the architecture is that inorder to transfer a number from the VFP / NFP registers onto the ARM you must stall both the ARM and NFP / VFP for &amp;gt;20 cycles. This is particularly troublesome because this is how GCC supplies arguments and recieves returns from functions. Possibly The best way to minimize operand passing stalls is to make the floating point functions inline.&lt;br /&gt;
&lt;br /&gt;
Another source of NFP / VFP - ARM transfers are conditional branches that depend on floating point numbers. You can do the condition on the VFP but inorder to branch the flags must be sent from the VFP to the ARM. For very simple branches your best bet is to not branch at all and instead use arithmetic. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;if (x &amp;lt; 0) {x += 1.1244;}&amp;lt;/source&amp;gt;&lt;br /&gt;
Is the same as:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;x = x + (x &amp;lt; 0) * 1.1244&amp;lt;/source&amp;gt;&lt;br /&gt;
However you might want to keep a close eye on what the compiler actually produces with the above code. &lt;br /&gt;
&lt;br /&gt;
One interesting fact is that using stores and loads do not cause a stall. So aslong as you don't need the result straight away you can hide the 20 cycle latency. Instead of doing a transfer you; store your NFP / VFP result to memory, do some work on the ARM, then load the result back onto the ARM without penalty. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;void foo(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 123 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void bar(float *x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 546 + *x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
	float x = 10;&lt;br /&gt;
	float y, z;&lt;br /&gt;
	foo(&amp;amp;x, &amp;amp;y)&lt;br /&gt;
	&lt;br /&gt;
	//do ~20 cycles of ARM work&lt;br /&gt;
	&lt;br /&gt;
	bar(&amp;amp;y, &amp;amp;z);&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NEON SIMD ==&lt;br /&gt;
The NEON unit is similar to the MMX and SSE extensions found on X86 processors, it is optimized for Single Instruction Multiple Data (SIMD) operations.&lt;br /&gt;
The NEON unit has 2 floating point pipelines, an integer pipeline and a 128bit load/store/permute pipeline. When properly utilized it is a very powerful coprocessor. Unfortunately GCC does a rather poor job of vectorizing code for the NEON unit. To get the best performance you should use either the intrinsics provided in the &amp;quot;arm_neon.h&amp;quot; header or hand written assembly.&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
Therefore, Inorder to achieve the best floating point performance on the Pandora:&lt;br /&gt;
* Only use single precision floating point&lt;br /&gt;
* Use single precision constants&lt;br /&gt;
* Enable RunFast mode&lt;br /&gt;
* Inline floating point code (unless its very large)&lt;br /&gt;
* Minimize Conditional Branches&lt;br /&gt;
* Pass Arguments via pointers instead of by value and do integer work in between function calls.&lt;br /&gt;
* Use NEON intrinsics / ASM for vectoriseable code.&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1414</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1414"/>
		<updated>2009-07-25T07:04:42Z</updated>

		<summary type="html">&lt;p&gt;Adventus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
In the past it was rare for an embedded processor to have dedicated floating point hardware, this usually limited you to either using fixed point math (which can be very tricky to write) or very slow software floating point emulation. Fortunately the ARM Cortex A8 found in the OMAP3 has 2 Floating Point Units, a non-pipelined VFP-lite conforming to the IEEE754 standard for floating point arithmetic and a pipelined SIMD NEON coprocessor. The VFP-lite can handle both single and double precession arithmetic, as well as properly handling exceptions and subnormal numbers. However, This full spec compliance and the limited die space available has resulted in a relatively slow implementation, it usually takes from 18 to 21 cycles to perform a single precision multiply accumulate. The NEON unit on the other hand is designed for very fast single precision vector math, it can sustain multiply accumulates at a rate of two per cycle. Efficiently utilizing these coprocessors in GCC will be the focus of this article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In this article I refer to the A8's integer pipeline as the &amp;quot;ARM&amp;quot; , the VFP-lite as simply the &amp;quot;VFP&amp;quot; and the NEON unit as the &amp;quot;NFP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== VFP-Lite RunFast ==&lt;br /&gt;
The VFP-Lite has one saving grace, under the correct circumstances some of its instructions will be executed in the NEON coprocessor and will gain the full benefits of doing so. Inorder for this to occur the following constraints must be met:&lt;br /&gt;
* RunFast mode must be enabled&lt;br /&gt;
* Must be single precision floating point operands&lt;br /&gt;
* Must not be a vector instruction (GCC doesn't appear to use this feature, so don't worry about it)&lt;br /&gt;
&lt;br /&gt;
Runfast mode is enabled when the following conditions are present:&lt;br /&gt;
* subnormal numbers are being flushed to zero &lt;br /&gt;
* default NaN mode is active&lt;br /&gt;
* no floating point exceptions are enabled&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the present time, it is unsure to me whether Runfast mode will be enabled by default in the Angstrom distribution. If it is not you can use the following C code to enforce it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void enable_runfast()&lt;br /&gt;
{&lt;br /&gt;
	static const unsigned int x = 0x04086060;&lt;br /&gt;
	static const unsigned int y = 0x03000000;&lt;br /&gt;
	int r;&lt;br /&gt;
	asm volatile (&lt;br /&gt;
		&amp;quot;fmrx	%0, fpscr			\n\t&amp;quot;	//r0 = FPSCR&lt;br /&gt;
		&amp;quot;and	%0, %0, %1			\n\t&amp;quot;	//r0 = r0 &amp;amp; 0x04086060&lt;br /&gt;
		&amp;quot;orr	%0, %0, %2			\n\t&amp;quot;	//r0 = r0 | 0x03000000&lt;br /&gt;
		&amp;quot;fmxr	fpscr, %0			\n\t&amp;quot;	//FPSCR = r0&lt;br /&gt;
		: &amp;quot;=r&amp;quot;(r)&lt;br /&gt;
		: &amp;quot;r&amp;quot;(x), &amp;quot;r&amp;quot;(y)&lt;br /&gt;
	);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instructions that are executed on the NFP are: FADDS, FSUBS, FABSS, FNEGS, FMULS, FNMULS, FMACS, FNMACS, FMSCS, FNMSCS, FCMPS, FCMPES, FCMPZS, FCMPEZS, FUITOS, FSITOS, FTOUIS, FTOSIS, FTOUIZS, FTOSIZS, FSHTOS, FSLTOS, FUHTOS, FULTOS, FTOSHS, FTOSLS, FTOUHS, FTOULS.&lt;br /&gt;
&lt;br /&gt;
== Single Precision Constants ==&lt;br /&gt;
One important and easy optimization is to make sure that single precision constants are begin used. By default this is not the case, instead a double precision constant is being used, so all related operations involving that constant require double precision instructions and cannot be executed on the NEON. eg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{ &lt;br /&gt;
	return (2.123 * x); &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
might end up the same as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{&lt;br /&gt;
	double dx = (double) x;&lt;br /&gt;
	double dy = (double) 2.123; &lt;br /&gt;
	double dr = dx * dy;&lt;br /&gt;
	float r = (float) dr;&lt;br /&gt;
	return r;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can enforce single precision constants by including the compiler flag: '''-fsingle-precision-constant'''.&lt;br /&gt;
&lt;br /&gt;
== NFP / VFP to ARM Transfers ==&lt;br /&gt;
Probably the biggest bottleneck in the architecture is that inorder to transfer a number from the VFP / NFP registers onto the ARM you must stall both the ARM and NFP / VFP for &amp;gt;20 cycles. This is particularly troublesome because this is how GCC supplies arguments and recieves returns from functions. Possibly The best way to minimize operand passing stalls is to make the floating point functions inline.&lt;br /&gt;
&lt;br /&gt;
Another source of NFP / VFP - ARM transfers are conditional branches that depend on floating point numbers. You can do the condition on the VFP but inorder to branch the flags must be sent from the VFP to the ARM. For very simple branches your best bet is to not branch at all and instead use arithmetic. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;if (x &amp;lt; 0) {x += 1.1244;}&amp;lt;/source&amp;gt;&lt;br /&gt;
Is the same as:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;x = x + (x &amp;lt; 0) * 1.1244&amp;lt;/source&amp;gt;&lt;br /&gt;
However you might want to keep a close eye on what the compiler actually produces with the above code. &lt;br /&gt;
&lt;br /&gt;
One interesting fact is that using stores and loads do not cause a stall. So aslong as you don't need the result straight away you can hide the 20 cycle latency. Instead of doing a transfer you; store your NFP / VFP result to memory, do some work on the ARM, then load the result back onto the ARM without penalty. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void foo(float x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 123 + x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void bar()&lt;br /&gt;
{&lt;br /&gt;
	float x = 10;&lt;br /&gt;
	float r;&lt;br /&gt;
	foo(x, &amp;amp;r)&lt;br /&gt;
	//do ~20 cycles of ARM work&lt;br /&gt;
	//then access r, ie r = r * 10;&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NEON SIMD ==&lt;br /&gt;
The NEON unit is similar to the MMX and SSE extensions found on X86 processors, it is optimized for Single Instruction Multiple Data (SIMD) operations.&lt;br /&gt;
The NEON unit has 2 floating point pipelines, an integer pipeline and a 128bit load/store/permute pipeline. When properly utilized it is a very powerful coprocessor. Unfortunately GCC does a rather poor job of vectorizing code for the NEON unit. To get the best performance you should use either the intrinsics provided in the &amp;quot;arm_neon.h&amp;quot; header or hand written assembly.&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1413</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1413"/>
		<updated>2009-07-25T06:57:34Z</updated>

		<summary type="html">&lt;p&gt;Adventus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
In the past it was rare for an embedded processor to have dedicated floating point hardware, this usually limited you to either using fixed point math (which can be very tricky to write) or very slow software floating point emulation. Fortunately the ARM Cortex A8 found in the OMAP3 has 2 Floating Point Units, a non-pipelined VFP-lite conforming to the IEEE754 standard for floating point arithmetic and a pipelined SIMD NEON coprocessor. The VFP-lite can handle both single and double precession arithmetic, as well as properly handling exceptions and subnormal numbers. However, This full spec compliance and the limited die space available has resulted in a relatively slow implementation, it usually takes from 18 to 21 cycles to perform a single precision multiply accumulate. The NEON unit on the other hand is designed for very fast single precision vector math, it can sustain multiply accumulates at a rate of two per cycle. Efficiently utilizing these coprocessors in GCC will be the focus of this article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In this article I refer to the A8's integer pipeline as the &amp;quot;ARM&amp;quot; , the VFP-lite as simply the &amp;quot;VFP&amp;quot; and the NEON unit as the &amp;quot;NFP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== VFP-Lite RunFast ==&lt;br /&gt;
The VFP-Lite has one saving grace, under the correct circumstances some of its instructions will be executed in the NEON coprocessor and will gain the full benefits of doing so. Inorder for this to occur the following constraints must be met:&lt;br /&gt;
* RunFast mode must be enabled&lt;br /&gt;
* Must be single precision floating point operands&lt;br /&gt;
* Must not be a vector instruction (GCC doesn't appear to use this feature, so don't worry about it)&lt;br /&gt;
&lt;br /&gt;
Runfast mode is enabled when the following conditions are present:&lt;br /&gt;
* subnormal numbers are being flushed to zero &lt;br /&gt;
* default NaN mode is active&lt;br /&gt;
* no floating point exceptions are enabled&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the present time, it is unsure to me whether Runfast mode will be enabled by default in the Angstrom distribution. If it is not you can use the following C code to enforce it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void enable_runfast()&lt;br /&gt;
{&lt;br /&gt;
	static const unsigned int x = 0x04086060;&lt;br /&gt;
	static const unsigned int y = 0x03000000;&lt;br /&gt;
	int r;&lt;br /&gt;
	asm volatile (&lt;br /&gt;
		&amp;quot;fmrx	%0, fpscr			\n\t&amp;quot;	//r0 = FPSCR&lt;br /&gt;
		&amp;quot;and	%0, %0, %1			\n\t&amp;quot;	//r0 = r0 &amp;amp; 0x04086060&lt;br /&gt;
		&amp;quot;orr	%0, %0, %2			\n\t&amp;quot;	//r0 = r0 | 0x03000000&lt;br /&gt;
		&amp;quot;fmxr	fpscr, %0			\n\t&amp;quot;	//FPSCR = r0&lt;br /&gt;
		: &amp;quot;=r&amp;quot;(r)&lt;br /&gt;
		: &amp;quot;r&amp;quot;(x), &amp;quot;r&amp;quot;(y)&lt;br /&gt;
	);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instructions that are executed on the NFP are: FADDS, FSUBS, FABSS, FNEGS, FMULS, FNMULS, FMACS, FNMACS, FMSCS, FNMSCS, FCMPS, FCMPES, FCMPZS, FCMPEZS, FUITOS, FSITOS, FTOUIS, FTOSIS, FTOUIZS, FTOSIZS, FSHTOS, FSLTOS, FUHTOS, FULTOS, FTOSHS, FTOSLS, FTOUHS, FTOULS.&lt;br /&gt;
&lt;br /&gt;
== Single Precision Constants ==&lt;br /&gt;
One important and easy optimization is to make sure that single precision constants are begin used. By default this is not the case, instead a double precision constant is being used, so all related operations involving that constant require double precision instructions and cannot be executed on the NEON. eg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{ &lt;br /&gt;
	float y = 2.123;&lt;br /&gt;
	float r = y * x;&lt;br /&gt;
	return r; &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
might end up the same as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{&lt;br /&gt;
	double dx = (double) x;&lt;br /&gt;
	double dy = (double) 2.123; &lt;br /&gt;
	double dr = dx * dy;&lt;br /&gt;
	float r = (float) dr;&lt;br /&gt;
	return r;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can enforce single precision constants by including the compiler flag: '''-fsingle-precision-constant'''.&lt;br /&gt;
&lt;br /&gt;
== NFP / VFP to ARM Transfers ==&lt;br /&gt;
Probably the biggest bottleneck in the architecture is that inorder to transfer a number from the VFP / NFP registers onto the ARM you must stall both the ARM and NFP / VFP for &amp;gt;20 cycles. This is particularly troublesome because this is how GCC supplies arguments and recieves returns from functions. Possibly The best way to minimize operand passing stalls is to make the floating point functions inline.&lt;br /&gt;
&lt;br /&gt;
Another source of NFP / VFP - ARM transfers are conditional branches that depend on floating point numbers. You can do the condition on the VFP but inorder to branch the flags must be sent from the VFP to the ARM. For very simple branches your best bet is to not branch at all and instead use arithmetic. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;if (x &amp;lt; 0) {x += 1.1244;}&amp;lt;/source&amp;gt;&lt;br /&gt;
Is the same as:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;x = x + (x &amp;lt; 0) * 1.1244&amp;lt;/source&amp;gt;&lt;br /&gt;
However you might want to keep a close eye on what the compiler actually produces with the above code. &lt;br /&gt;
&lt;br /&gt;
One interesting fact is that using stores and loads do not cause a stall. So aslong as you don't need the result straight away you can hide the 20 cycle latency. Instead of doing a transfer you; store your NFP / VFP result to memory, do some work on the ARM, then load the result back onto the ARM without penalty. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void foo(float x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 123 + x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void bar()&lt;br /&gt;
{&lt;br /&gt;
	float x = 10;&lt;br /&gt;
	float r;&lt;br /&gt;
	foo(x, &amp;amp;r)&lt;br /&gt;
	//do ~20 cycles of ARM work&lt;br /&gt;
	//then access r, ie r = r * 10;&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NEON SIMD ==&lt;br /&gt;
The NEON unit is similar to the MMX and SSE extensions found on X86 processors, it is optimized for Single Instruction Multiple Data (SIMD) operations.&lt;br /&gt;
The NEON unit has 2 floating point pipelines, an integer pipeline and a 128bit load/store/permute pipeline. When properly utilized it is a very powerful coprocessor. Unfortunately GCC does a rather poor job of vectorizing code for the NEON unit. To get the best performance you should use either the intrinsics provided in the &amp;quot;arm_neon.h&amp;quot; header or hand written assembly.&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1412</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=1412"/>
		<updated>2009-07-25T06:41:49Z</updated>

		<summary type="html">&lt;p&gt;Adventus: New page: == Introduction == In the past it was rare for an embedded processor to have dedicated floating point hardware, this usually limited you to either using fixed point math (which can be very...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
In the past it was rare for an embedded processor to have dedicated floating point hardware, this usually limited you to either using fixed point math (which can be very tricky to write) or very slow software floating point emulation. Fortunately the ARM Cortex A8 found in the OMAP3 has 2 Floating Point Units, a non-pipelined VFP-lite conforming to the IEEE754 standard for floating point arithmetic and a pipelined SIMD NEON coprocessor. The VFP-lite can handle both single and double precession arithmetic, as well as properly handling exceptions and subnormal numbers. However, This full spec compliance and the limited die space available has resulted in a relatively slow implementation, it usually takes from 18 to 21 cycles to perform a single precision multiply accumulate. The NEON unit on the other hand is designed for very fast single precision vector math, it can sustain multiply accumulates at a rate of two per cycle.&lt;br /&gt;
&lt;br /&gt;
Efficiently utilizing these coprocessors in GCC will be the focus of this article.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In this article I refer to the A8's integer pipeline as the &amp;quot;ARM&amp;quot; , the VFP-lite as simply the &amp;quot;VFP&amp;quot; and the NEON unit as the &amp;quot;NFP&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== VFP-Lite RunFast ==&lt;br /&gt;
The VFP-Lite has one saving grace, under the correct circumstances some of its instructions will be executed in the NEON coprocessor and will gain the full benefits of doing so. Inorder for this to occur the following constraints must be met:&lt;br /&gt;
* RunFast mode must be enabled&lt;br /&gt;
* Must be single precision floating point operands&lt;br /&gt;
* Must not be a vector instruction (GCC doesn't appear to use this feature, so don't worry about it)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Runfast mode is enabled when the following conditions are present:&lt;br /&gt;
* subnormal numbers are being flushed to zero &lt;br /&gt;
* default NaN mode is active&lt;br /&gt;
* no floating point exceptions are enabled&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At the present time, it is unsure to me whether Runfast mode will be enabled by default in the Angstrom distribution. If it is not you can use the following C code to enforce it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void enable_runfast()&lt;br /&gt;
{&lt;br /&gt;
	static const unsigned int x = 0x04086060;&lt;br /&gt;
	static const unsigned int y = 0x03000000;&lt;br /&gt;
	int r;&lt;br /&gt;
	asm volatile (&lt;br /&gt;
		&amp;quot;fmrx	%0, fpscr			\n\t&amp;quot;	//r0 = FPSCR&lt;br /&gt;
		&amp;quot;and	%0, %0, %1			\n\t&amp;quot;	//r0 = r0 &amp;amp; 0x04086060&lt;br /&gt;
		&amp;quot;orr	%0, %0, %2			\n\t&amp;quot;	//r0 = r0 | 0x03000000&lt;br /&gt;
		&amp;quot;fmxr	fpscr, %0			\n\t&amp;quot;	//FPSCR = r0&lt;br /&gt;
		: &amp;quot;=r&amp;quot;(r)&lt;br /&gt;
		: &amp;quot;r&amp;quot;(x), &amp;quot;r&amp;quot;(y)&lt;br /&gt;
	);&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The instructions that are executed on the NFP are: FADDS, FSUBS, FABSS, FNEGS, FMULS, FNMULS, FMACS, FNMACS, FMSCS, FNMSCS, FCMPS, FCMPES, FCMPZS, FCMPEZS, FUITOS, FSITOS, FTOUIS, FTOSIS, FTOUIZS, FTOSIZS, FSHTOS, FSLTOS, FUHTOS, FULTOS, FTOSHS, FTOSLS, FTOUHS, FTOULS.&lt;br /&gt;
&lt;br /&gt;
== Single Precision Constants ==&lt;br /&gt;
One important and easy optimization is to make sure that single precision constants are begin used. By default this is not the case, instead a double precision constant is being used, so all related operations involving that constant require double precision instructions and cannot be executed on the NEON. eg&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{ &lt;br /&gt;
	float y = 2.123;&lt;br /&gt;
	float r = y * x;&lt;br /&gt;
	return r; &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
might end up the same as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float foo(float x)&lt;br /&gt;
{&lt;br /&gt;
	double dx = (double) x;&lt;br /&gt;
	double dy = (double) 2.123; &lt;br /&gt;
	double dr = dx * dy;&lt;br /&gt;
	float r = (float) dr;&lt;br /&gt;
	return r;&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can enforce single precision constants by including the compiler flag: '''-fsingle-precision-constant'''.&lt;br /&gt;
&lt;br /&gt;
== NFP / VFP to ARM Transfers ==&lt;br /&gt;
Probably the biggest bottleneck in the architecture is that inorder to transfer a number from the VFP / NFP registers onto the ARM you must stall both the ARM and NFP / VFP for &amp;gt;20 cycles. This is particularly troublesome because this is how GCC supplies arguments and recieves returns from functions. Possibly The best way to minimize operand passing stalls is to make the floating point functions inline.&lt;br /&gt;
&lt;br /&gt;
Another source of NFP / VFP - ARM transfers are conditional branches that depend on floating point numbers. You can do the condition on the VFP but inorder to branch the flags must be sent from the VFP to the ARM. For very simple branches your best bet is to not branch at all and instead use arithmetic. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;if (x &amp;lt; 0) {x += 1.1244;}&amp;lt;/source&amp;gt;&lt;br /&gt;
Is the same as:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;x = x + (x &amp;lt; 0) * 1.1244&amp;lt;/source&amp;gt;&lt;br /&gt;
However you might want to keep a close eye on what the compiler actually produces with the above code. &lt;br /&gt;
&lt;br /&gt;
One interesting fact is that using stores and loads do not cause a stall. So aslong as you don't need the result straight away you can hide the 20 cycle latency. Instead of doing a transfer you; store your NFP / VFP result to memory, do some work on the ARM, then load the result back onto the ARM without penalty. ie&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void foo(float x, float *r)&lt;br /&gt;
{&lt;br /&gt;
	*r = 123 + x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void bar()&lt;br /&gt;
{&lt;br /&gt;
	float x = 10;&lt;br /&gt;
	float r;&lt;br /&gt;
	foo(x, &amp;amp;r)&lt;br /&gt;
	//do ~20 cycles of ARM work&lt;br /&gt;
	//then access r, ie r = r * 10;&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Software_projects&amp;diff=1390</id>
		<title>Software projects</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Software_projects&amp;diff=1390"/>
		<updated>2009-07-02T23:56:34Z</updated>

		<summary type="html">&lt;p&gt;Adventus: /* Other programs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See the [[Port Requests]] article for open-source projects which ''could'' be ported but have not been taken on by anyone yet.&lt;br /&gt;
&lt;br /&gt;
== Operating Systems ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Android Omap&lt;br /&gt;
|[http://elinux.org/Android_on_OMAP Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Angstrom Linux&lt;br /&gt;
|[http://www.angstrom-distribution.org/ Link]&lt;br /&gt;
|Working build, not completed&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|AROS Arm&lt;br /&gt;
|[http://projects.powerdeveloper.org/project/imx515/735 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FreeBSD&lt;br /&gt;
|[http://wiki.freebsd.org/FreeBSD/arm/OMAP Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Gentoo Linux&lt;br /&gt;
|[http://gentoo.openpandora.org Link]&lt;br /&gt;
|Working build, not completed&lt;br /&gt;
|javaJake, Viridior&lt;br /&gt;
|IRC: (FreeNode) #gentoo-pandora&lt;br /&gt;
|-&lt;br /&gt;
|HaikuOS&lt;br /&gt;
|[http://www.haiku-os.org Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ubuntu ARM&lt;br /&gt;
|[http://www.ubuntu.com/products/whatisubuntu/arm Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Fedora ARM&lt;br /&gt;
|&lt;br /&gt;
|Unknown&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Games ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Abuse&lt;br /&gt;
|[http://abuse.zoy.org/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|2D Platform&lt;br /&gt;
|-&lt;br /&gt;
|Battle for Wesnoth v1.6.2&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47936 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|BattleJewels&lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Skeezix&lt;br /&gt;
|Logical&lt;br /&gt;
|-&lt;br /&gt;
|BlobWars&lt;br /&gt;
|[http://www.parallelrealities.co.uk/projects/blobWars.php Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|2D Platform&lt;br /&gt;
|-&lt;br /&gt;
|Caster&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46813 Link]&lt;br /&gt;
|Working build (tested on PC)&lt;br /&gt;
|Svartalf&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Descent 1 (d1x-rebirth engine)&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1032 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPS&lt;br /&gt;
|-&lt;br /&gt;
|Descent 2 (d2x-rebirth engine)&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1032 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPS&lt;br /&gt;
|-&lt;br /&gt;
|FHeroes Port (Heroes Of Might And Magic 2)&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47553 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|FreeCiv 2.1.9&lt;br /&gt;
|[http://freeciv.wikia.com/wiki/Main_Page Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|Galactic Artifact&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46836 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Trevor Bradley&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|Giannas Return&lt;br /&gt;
|[http://www.gianas-return.de/ Link]&lt;br /&gt;
|Working&lt;br /&gt;
|Giannas Team&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Gravity Blocks&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47662 Link]&lt;br /&gt;
|wip (early in developement)&lt;br /&gt;
|Awekening&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Homeworld Port&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47565 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|LinuxHacker&lt;br /&gt;
|Simulation&lt;br /&gt;
|-&lt;br /&gt;
|Human Condition (was TINCS)&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46487 Link1][http://www.youtube.com/user/ButtermanHimself Link2]&lt;br /&gt;
|wip&lt;br /&gt;
|Butterman&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Lerp&lt;br /&gt;
|[http://grapefruitopia.com/lerp/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|benjymous&lt;br /&gt;
|2D physics puzzle platformer&lt;br /&gt;
|-&lt;br /&gt;
|Lord of the Rings Port&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46792&amp;amp;hl= Link]&lt;br /&gt;
|Unknown&lt;br /&gt;
|Daeglin&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Monster!&lt;br /&gt;
|[http://christophsdevblog.blogspot.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Chris R&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|NAEV&lt;br /&gt;
|[http://code.google.com/p/naev/ Link]&lt;br /&gt;
|wip (waiting for pandora to finish and test)&lt;br /&gt;
|bobbens&lt;br /&gt;
|Action/RPG/Sim&lt;br /&gt;
|-&lt;br /&gt;
|Nails Adventure&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46961 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|jsmtux/Mr. Gonzo&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenLiero (Liero)&lt;br /&gt;
|&lt;br /&gt;
|working build, need to be polished&lt;br /&gt;
|Pickle&lt;br /&gt;
|Shoot'Em Up&lt;br /&gt;
|-&lt;br /&gt;
|OpenTyrian&lt;br /&gt;
|[http://code.google.com/p/opentyrian/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Shoot'Em Up&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Panic!&lt;br /&gt;
|[http://www.youtube.com/watch?v=y9d6UXhQP6o Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|PokeParadox / GP32X Community&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Pool Panic&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46996 Link]&lt;br /&gt;
|Almost Finished&lt;br /&gt;
|Unfathomable Depths&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|PanMMO - Pandora MMO Game via Internet&lt;br /&gt;
|[http://www.youtube.com/user/enirya Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Enirya&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Powermanga&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Quake 1&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Quake 2&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Quake 3&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Quake 3&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Reminiscence (flashback)&lt;br /&gt;
|[http://cyxdown.free.fr/reminiscence/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Action/Adventure&lt;br /&gt;
|-&lt;br /&gt;
|Rise of The Triad&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47931 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|arrrgh&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Super Lumenal&lt;br /&gt;
|[http://www.youtube.com/watch?v=sZHi3YT3xuE&amp;amp;feature=channel_page Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Adventus&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|SuperTux 1&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1040 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|Platform&lt;br /&gt;
|-&lt;br /&gt;
|SuperTux 2&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1040 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|Platform&lt;br /&gt;
|-&lt;br /&gt;
|Tecnoballz&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Teeworlds&lt;br /&gt;
|[http://www.teeworlds.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|The Mana World&lt;br /&gt;
|[http://www.themanaworld.org/ Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|MMORPG&lt;br /&gt;
|-&lt;br /&gt;
|uHexen2: Hammer of Thyrion &lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Adventus&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Ur-Quan Masters&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43625&amp;amp;st=165&amp;amp;p=673047&amp;amp;#entry673047 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|Space Exploration&lt;br /&gt;
|-&lt;br /&gt;
|We Come In Peace&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43655 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Otaco&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|Stratagus&lt;br /&gt;
|[http://stratagus.sourceforge.net/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|RTS Engine&lt;br /&gt;
|-&lt;br /&gt;
|Where in world is...&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|Casual&lt;br /&gt;
|-&lt;br /&gt;
|Wizzley Presto and the Mysterious Time Machine&lt;br /&gt;
|[http://www.30daygame.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Craigix, Zodttd, Ruckage&lt;br /&gt;
|Arcade, 30 Day Game Competition&lt;br /&gt;
|-&lt;br /&gt;
|Wolf4SDL (Wolfenstein 3D)&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|XSwing Plus&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?s=&amp;amp;showtopic=43655&amp;amp;view=findpost&amp;amp;p=733021 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Tobse&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|ZEQ2Lite&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47623&amp;amp;hl= Link]&lt;br /&gt;
|Work in progress&lt;br /&gt;
|MDave&lt;br /&gt;
|Dragonball Z Third Person Fighter/Shooter&lt;br /&gt;
|-&lt;br /&gt;
|Zdoom &lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Adventus&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Zombd&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46933 Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|iprice/Mr Gonzo&lt;br /&gt;
|Shoot'Em Up&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Emulators ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Emulated System&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Caprice32&lt;br /&gt;
|Amstrad CPC&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=48140 Link1] [http://www.caprice32.cybercube.com/ Link2]&lt;br /&gt;
|wip&lt;br /&gt;
|hdonk&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DosBox&lt;br /&gt;
|x86 DOS&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FinalBurnAdvance&lt;br /&gt;
|CPS1/2/3/taito...&lt;br /&gt;
|[http://www.youtube.com/watch?v=06hjDLMBaf8 Link]&lt;br /&gt;
|&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Frotz&lt;br /&gt;
|Z-Machine interpreter&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/frotz-2.43.zip Link]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Fuse&lt;br /&gt;
|ZX Spectrum&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/fuse-0.9.0.zip Link]&lt;br /&gt;
|working build&lt;br /&gt;
|SteveM&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GnGeo&lt;br /&gt;
|SNK NeoGeo&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|gpSP&lt;br /&gt;
|Nintendo GBA&lt;br /&gt;
|&lt;br /&gt;
|wip&lt;br /&gt;
|ZodTTD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Hatari&lt;br /&gt;
|Atari ST&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Jzintv&lt;br /&gt;
|Mattel Intellivision&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=48035 Link]&lt;br /&gt;
|&lt;br /&gt;
|WizardStan&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MAME4All&lt;br /&gt;
|Arcade&lt;br /&gt;
|[http://www.youtube.com/user/franxism Link]&lt;br /&gt;
|&lt;br /&gt;
|Franxis&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NeoPop&lt;br /&gt;
|SNK NeoGeo Pocket&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NullDC&lt;br /&gt;
|Sega Dreamcast&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?s=&amp;amp;showtopic=47065&amp;amp;view=findpost&amp;amp;p=709910 Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|Zezu / drkIIraziel&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PandaSNES&lt;br /&gt;
|Nintendo SNES&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43213 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Pandora-PSP&lt;br /&gt;
|Sony Playstation Portable&lt;br /&gt;
|[http://jayfoxrox.bplaced.net/pandora-psp/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|[[User:JayFoxRox|JayFoxRox]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PAtari&lt;br /&gt;
|Atari 800&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PicoDrive&lt;br /&gt;
|Sega Genesis/CD/32x&lt;br /&gt;
|[http://www.youtube.com/watch?v=QDbLQI91510 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Notaz&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|PSMS&lt;br /&gt;
|Sega Master System&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PSnes&lt;br /&gt;
|Nintendo SNES&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Psx4All&lt;br /&gt;
|Sony PlayStation&lt;br /&gt;
|[http://www.zodttd.com Link]&lt;br /&gt;
|Not Status, working build&lt;br /&gt;
|ZodTTD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ScummVM&lt;br /&gt;
|x86 Scumm engine games&lt;br /&gt;
|&lt;br /&gt;
|Working build&lt;br /&gt;
|DJ Willis&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|SIMH&lt;br /&gt;
|old hardware&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/simh-3.8.zip Link]&lt;br /&gt;
|working build&lt;br /&gt;
|SteveM&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Temper&lt;br /&gt;
|NEC PC Engine&lt;br /&gt;
|[http://exophase.devzero.co.uk/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Exophase&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|Tempest&lt;br /&gt;
|Atari Jaguar&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43119 Link]&lt;br /&gt;
|&lt;br /&gt;
|Firefox&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Uae4All&lt;br /&gt;
|Amiga&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=44100 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|XMAME&lt;br /&gt;
|Arcade&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Graphic Engines ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|GemRB (Infinity Engine)&lt;br /&gt;
|&lt;br /&gt;
|wip&lt;br /&gt;
|Adventus&lt;br /&gt;
|open-source implementation of Bioware's Infinity Engine, supports games including Baldurs Gate 2 and Planescape Torment.&lt;br /&gt;
|-&lt;br /&gt;
|GLES2D&lt;br /&gt;
|&lt;br /&gt;
|Wip&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|OpenGL ES 2D library&lt;br /&gt;
|-&lt;br /&gt;
|GL-WES-v2.0&lt;br /&gt;
|[http://code.google.com/p/gl-wes-v2/ link] &lt;br /&gt;
|Working Build&lt;br /&gt;
|Adventus&lt;br /&gt;
|Opensource OpenGL 2.0 driver built on OpenGL ES 2.0.&lt;br /&gt;
|-&lt;br /&gt;
|Irrlicht&lt;br /&gt;
|[http://irrlicht.sourceforge.net/] [http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=32538&amp;amp;start=45]&lt;br /&gt;
|working build&lt;br /&gt;
|Hybrid&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NSS Engine&lt;br /&gt;
|[http://www.nosiestastudios.com/wiki/ Link1] [http://www.youtube.com/user/Prompt84 Link2]&lt;br /&gt;
|&lt;br /&gt;
|No Siesta Studios&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OGRE Engine&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46706 Link1] [http://www.youtube.com/watch?v=LDtUE5PIhV0 Link2]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Otaco Glost Engine&lt;br /&gt;
|[http://www.youtube.com/user/otacogloost Link]&lt;br /&gt;
|working&lt;br /&gt;
|Otaco&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Quad-Ren 2D&lt;br /&gt;
|[http://quad-ren.sourceforge.net/index.php Link]&lt;br /&gt;
|&lt;br /&gt;
|Hessiess&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SDL GLES&lt;br /&gt;
|[http://github.com/Cpasjuste/sdl-1.2.13_gles/tree Link]&lt;br /&gt;
|working&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|XreaL&lt;br /&gt;
|[http://xreal.sourceforge.net/xrealwiki/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Pickle [?]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Other programs ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|AbiWord - Word Processor&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|Claws Mail&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|Epiphany Web Bowser&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FireFox - Internet Browser&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|GIMP - Image Editor&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|GMenu&lt;br /&gt;
|[http://www.youtube.com/watch?v=VYzi8gziC7E Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pandora Team&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Gnumeric Spreadsheet - Spreadsheet&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|GoView&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Image Gallery&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Inside The Box&lt;br /&gt;
|[http://www.openpandora.pl Link1] [http://www.youtube.com/watch?v=uLMmJBDEs2E Link2]&lt;br /&gt;
|wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|Pandora e-zine&lt;br /&gt;
|-&lt;br /&gt;
|IRC Client&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LeafPad&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matchbox Shell / GUI&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MPlayer&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=41420 Link1] [http://www.youtube.com/watch?v=v9RAPNa-55k Link2]&lt;br /&gt;
|Working build&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Math-NEON&lt;br /&gt;
|&lt;br /&gt;
|Wip&lt;br /&gt;
|Adventus&lt;br /&gt;
|cmath like library optimised for ARM NEON coprocessor.&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Sync Suite&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|StreaK&lt;br /&gt;
|for Windows 9x/NT&lt;br /&gt;
|-&lt;br /&gt;
|Pangea GUI&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=45631&amp;amp;hl=pangea Link]&lt;br /&gt;
|WIP&lt;br /&gt;
|efegea&lt;br /&gt;
|Gmenu alternative&lt;br /&gt;
|-&lt;br /&gt;
|PDM&lt;br /&gt;
|[http://github.com/Cpasjuste/pdm/tree Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Light desktop manager for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|PGui&lt;br /&gt;
|[http://github.com/Cpasjuste/pgui/tree Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Standard emulator fronted for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|Pidgin - IM (for Angstrom OpenPandora)&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PMenu&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Minimal Menu for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|PND Maker (for Windows 9x/NT)&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|StreaK&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Qemu&lt;br /&gt;
|[http://www.nongnu.org/qemu/status.html Link]&lt;br /&gt;
|testing build&lt;br /&gt;
|Fabrice Bellard&lt;br /&gt;
|open source machine emulator and virtualizer&lt;br /&gt;
|-&lt;br /&gt;
|Scale&lt;br /&gt;
|[http://www.youtube.com/user/Zoxc64 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Zoxc64&lt;br /&gt;
|Minimal Menu for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|Simple Dev Studio for Pandora&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|for Windows 9x/NT&lt;br /&gt;
|-&lt;br /&gt;
|[[TINXL]]&lt;br /&gt;
|[[TINXL]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Application stack for multiplayer internet games&lt;br /&gt;
|-&lt;br /&gt;
|[[TS2A]]&lt;br /&gt;
|[[TS2A]]&lt;br /&gt;
|Documentation only&lt;br /&gt;
||[[User:JayFoxRox|JayFoxRox]]&lt;br /&gt;
|Teamspeak 2 Alternative Client / Server, Needs developer&lt;br /&gt;
|-&lt;br /&gt;
|XMMS&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ZiB Emulator Frontend&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47203 Link1] [http://www.youtube.com/watch?v=UJvON8lCM3M Link2]&lt;br /&gt;
|&lt;br /&gt;
|Aimless_E&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Demos / Technical Demos for OpenPandora ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Cell Shading&lt;br /&gt;
|[http://www.youtube.com/watch?v=cpAj0jHglGw Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Demo with MP3 Playback&lt;br /&gt;
|[http://www.youtube.com/watch?v=hkx18kruRJs Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Skull Demo&lt;br /&gt;
|[http://www.youtube.com/watch?v=qG7EDaZpyOo Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|WaveDemo&lt;br /&gt;
|[http://www.youtube.com/watch?v=4wgEHFCq9Lo Link]&lt;br /&gt;
|Working&lt;br /&gt;
|Otaco&lt;br /&gt;
|&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Software_projects&amp;diff=1389</id>
		<title>Software projects</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Software_projects&amp;diff=1389"/>
		<updated>2009-07-02T23:55:47Z</updated>

		<summary type="html">&lt;p&gt;Adventus: /* Other programs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See the [[Port Requests]] article for open-source projects which ''could'' be ported but have not been taken on by anyone yet.&lt;br /&gt;
&lt;br /&gt;
== Operating Systems ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Android Omap&lt;br /&gt;
|[http://elinux.org/Android_on_OMAP Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Angstrom Linux&lt;br /&gt;
|[http://www.angstrom-distribution.org/ Link]&lt;br /&gt;
|Working build, not completed&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|AROS Arm&lt;br /&gt;
|[http://projects.powerdeveloper.org/project/imx515/735 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FreeBSD&lt;br /&gt;
|[http://wiki.freebsd.org/FreeBSD/arm/OMAP Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Gentoo Linux&lt;br /&gt;
|[http://gentoo.openpandora.org Link]&lt;br /&gt;
|Working build, not completed&lt;br /&gt;
|javaJake, Viridior&lt;br /&gt;
|IRC: (FreeNode) #gentoo-pandora&lt;br /&gt;
|-&lt;br /&gt;
|HaikuOS&lt;br /&gt;
|[http://www.haiku-os.org Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ubuntu ARM&lt;br /&gt;
|[http://www.ubuntu.com/products/whatisubuntu/arm Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Fedora ARM&lt;br /&gt;
|&lt;br /&gt;
|Unknown&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Games ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Abuse&lt;br /&gt;
|[http://abuse.zoy.org/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|2D Platform&lt;br /&gt;
|-&lt;br /&gt;
|Battle for Wesnoth v1.6.2&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47936 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|BattleJewels&lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Skeezix&lt;br /&gt;
|Logical&lt;br /&gt;
|-&lt;br /&gt;
|BlobWars&lt;br /&gt;
|[http://www.parallelrealities.co.uk/projects/blobWars.php Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|2D Platform&lt;br /&gt;
|-&lt;br /&gt;
|Caster&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46813 Link]&lt;br /&gt;
|Working build (tested on PC)&lt;br /&gt;
|Svartalf&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Descent 1 (d1x-rebirth engine)&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1032 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPS&lt;br /&gt;
|-&lt;br /&gt;
|Descent 2 (d2x-rebirth engine)&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1032 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPS&lt;br /&gt;
|-&lt;br /&gt;
|FHeroes Port (Heroes Of Might And Magic 2)&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47553 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|FreeCiv 2.1.9&lt;br /&gt;
|[http://freeciv.wikia.com/wiki/Main_Page Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|Galactic Artifact&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46836 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Trevor Bradley&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|Giannas Return&lt;br /&gt;
|[http://www.gianas-return.de/ Link]&lt;br /&gt;
|Working&lt;br /&gt;
|Giannas Team&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Gravity Blocks&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47662 Link]&lt;br /&gt;
|wip (early in developement)&lt;br /&gt;
|Awekening&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Homeworld Port&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47565 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|LinuxHacker&lt;br /&gt;
|Simulation&lt;br /&gt;
|-&lt;br /&gt;
|Human Condition (was TINCS)&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46487 Link1][http://www.youtube.com/user/ButtermanHimself Link2]&lt;br /&gt;
|wip&lt;br /&gt;
|Butterman&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Lerp&lt;br /&gt;
|[http://grapefruitopia.com/lerp/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|benjymous&lt;br /&gt;
|2D physics puzzle platformer&lt;br /&gt;
|-&lt;br /&gt;
|Lord of the Rings Port&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46792&amp;amp;hl= Link]&lt;br /&gt;
|Unknown&lt;br /&gt;
|Daeglin&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Monster!&lt;br /&gt;
|[http://christophsdevblog.blogspot.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Chris R&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|NAEV&lt;br /&gt;
|[http://code.google.com/p/naev/ Link]&lt;br /&gt;
|wip (waiting for pandora to finish and test)&lt;br /&gt;
|bobbens&lt;br /&gt;
|Action/RPG/Sim&lt;br /&gt;
|-&lt;br /&gt;
|Nails Adventure&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46961 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|jsmtux/Mr. Gonzo&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenLiero (Liero)&lt;br /&gt;
|&lt;br /&gt;
|working build, need to be polished&lt;br /&gt;
|Pickle&lt;br /&gt;
|Shoot'Em Up&lt;br /&gt;
|-&lt;br /&gt;
|OpenTyrian&lt;br /&gt;
|[http://code.google.com/p/opentyrian/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Shoot'Em Up&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Panic!&lt;br /&gt;
|[http://www.youtube.com/watch?v=y9d6UXhQP6o Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|PokeParadox / GP32X Community&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Pool Panic&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46996 Link]&lt;br /&gt;
|Almost Finished&lt;br /&gt;
|Unfathomable Depths&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|PanMMO - Pandora MMO Game via Internet&lt;br /&gt;
|[http://www.youtube.com/user/enirya Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Enirya&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Powermanga&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Quake 1&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Quake 2&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Quake 3&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Quake 3&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Reminiscence (flashback)&lt;br /&gt;
|[http://cyxdown.free.fr/reminiscence/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Action/Adventure&lt;br /&gt;
|-&lt;br /&gt;
|Rise of The Triad&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47931 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|arrrgh&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Super Lumenal&lt;br /&gt;
|[http://www.youtube.com/watch?v=sZHi3YT3xuE&amp;amp;feature=channel_page Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Adventus&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|SuperTux 1&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1040 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|Platform&lt;br /&gt;
|-&lt;br /&gt;
|SuperTux 2&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1040 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|Platform&lt;br /&gt;
|-&lt;br /&gt;
|Tecnoballz&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Teeworlds&lt;br /&gt;
|[http://www.teeworlds.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|The Mana World&lt;br /&gt;
|[http://www.themanaworld.org/ Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|MMORPG&lt;br /&gt;
|-&lt;br /&gt;
|uHexen2: Hammer of Thyrion &lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Adventus&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Ur-Quan Masters&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43625&amp;amp;st=165&amp;amp;p=673047&amp;amp;#entry673047 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|Space Exploration&lt;br /&gt;
|-&lt;br /&gt;
|We Come In Peace&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43655 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Otaco&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|Stratagus&lt;br /&gt;
|[http://stratagus.sourceforge.net/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|RTS Engine&lt;br /&gt;
|-&lt;br /&gt;
|Where in world is...&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|Casual&lt;br /&gt;
|-&lt;br /&gt;
|Wizzley Presto and the Mysterious Time Machine&lt;br /&gt;
|[http://www.30daygame.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Craigix, Zodttd, Ruckage&lt;br /&gt;
|Arcade, 30 Day Game Competition&lt;br /&gt;
|-&lt;br /&gt;
|Wolf4SDL (Wolfenstein 3D)&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|XSwing Plus&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?s=&amp;amp;showtopic=43655&amp;amp;view=findpost&amp;amp;p=733021 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Tobse&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|ZEQ2Lite&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47623&amp;amp;hl= Link]&lt;br /&gt;
|Work in progress&lt;br /&gt;
|MDave&lt;br /&gt;
|Dragonball Z Third Person Fighter/Shooter&lt;br /&gt;
|-&lt;br /&gt;
|Zdoom &lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Adventus&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Zombd&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46933 Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|iprice/Mr Gonzo&lt;br /&gt;
|Shoot'Em Up&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Emulators ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Emulated System&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Caprice32&lt;br /&gt;
|Amstrad CPC&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=48140 Link1] [http://www.caprice32.cybercube.com/ Link2]&lt;br /&gt;
|wip&lt;br /&gt;
|hdonk&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DosBox&lt;br /&gt;
|x86 DOS&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FinalBurnAdvance&lt;br /&gt;
|CPS1/2/3/taito...&lt;br /&gt;
|[http://www.youtube.com/watch?v=06hjDLMBaf8 Link]&lt;br /&gt;
|&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Frotz&lt;br /&gt;
|Z-Machine interpreter&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/frotz-2.43.zip Link]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Fuse&lt;br /&gt;
|ZX Spectrum&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/fuse-0.9.0.zip Link]&lt;br /&gt;
|working build&lt;br /&gt;
|SteveM&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GnGeo&lt;br /&gt;
|SNK NeoGeo&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|gpSP&lt;br /&gt;
|Nintendo GBA&lt;br /&gt;
|&lt;br /&gt;
|wip&lt;br /&gt;
|ZodTTD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Hatari&lt;br /&gt;
|Atari ST&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Jzintv&lt;br /&gt;
|Mattel Intellivision&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=48035 Link]&lt;br /&gt;
|&lt;br /&gt;
|WizardStan&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MAME4All&lt;br /&gt;
|Arcade&lt;br /&gt;
|[http://www.youtube.com/user/franxism Link]&lt;br /&gt;
|&lt;br /&gt;
|Franxis&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NeoPop&lt;br /&gt;
|SNK NeoGeo Pocket&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NullDC&lt;br /&gt;
|Sega Dreamcast&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?s=&amp;amp;showtopic=47065&amp;amp;view=findpost&amp;amp;p=709910 Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|Zezu / drkIIraziel&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PandaSNES&lt;br /&gt;
|Nintendo SNES&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43213 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Pandora-PSP&lt;br /&gt;
|Sony Playstation Portable&lt;br /&gt;
|[http://jayfoxrox.bplaced.net/pandora-psp/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|[[User:JayFoxRox|JayFoxRox]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PAtari&lt;br /&gt;
|Atari 800&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PicoDrive&lt;br /&gt;
|Sega Genesis/CD/32x&lt;br /&gt;
|[http://www.youtube.com/watch?v=QDbLQI91510 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Notaz&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|PSMS&lt;br /&gt;
|Sega Master System&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PSnes&lt;br /&gt;
|Nintendo SNES&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Psx4All&lt;br /&gt;
|Sony PlayStation&lt;br /&gt;
|[http://www.zodttd.com Link]&lt;br /&gt;
|Not Status, working build&lt;br /&gt;
|ZodTTD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ScummVM&lt;br /&gt;
|x86 Scumm engine games&lt;br /&gt;
|&lt;br /&gt;
|Working build&lt;br /&gt;
|DJ Willis&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|SIMH&lt;br /&gt;
|old hardware&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/simh-3.8.zip Link]&lt;br /&gt;
|working build&lt;br /&gt;
|SteveM&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Temper&lt;br /&gt;
|NEC PC Engine&lt;br /&gt;
|[http://exophase.devzero.co.uk/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Exophase&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|Tempest&lt;br /&gt;
|Atari Jaguar&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43119 Link]&lt;br /&gt;
|&lt;br /&gt;
|Firefox&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Uae4All&lt;br /&gt;
|Amiga&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=44100 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|XMAME&lt;br /&gt;
|Arcade&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Graphic Engines ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|GemRB (Infinity Engine)&lt;br /&gt;
|&lt;br /&gt;
|wip&lt;br /&gt;
|Adventus&lt;br /&gt;
|open-source implementation of Bioware's Infinity Engine, supports games including Baldurs Gate 2 and Planescape Torment.&lt;br /&gt;
|-&lt;br /&gt;
|GLES2D&lt;br /&gt;
|&lt;br /&gt;
|Wip&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|OpenGL ES 2D library&lt;br /&gt;
|-&lt;br /&gt;
|GL-WES-v2.0&lt;br /&gt;
|[http://code.google.com/p/gl-wes-v2/ link] &lt;br /&gt;
|Working Build&lt;br /&gt;
|Adventus&lt;br /&gt;
|Opensource OpenGL 2.0 driver built on OpenGL ES 2.0.&lt;br /&gt;
|-&lt;br /&gt;
|Irrlicht&lt;br /&gt;
|[http://irrlicht.sourceforge.net/] [http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=32538&amp;amp;start=45]&lt;br /&gt;
|working build&lt;br /&gt;
|Hybrid&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NSS Engine&lt;br /&gt;
|[http://www.nosiestastudios.com/wiki/ Link1] [http://www.youtube.com/user/Prompt84 Link2]&lt;br /&gt;
|&lt;br /&gt;
|No Siesta Studios&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OGRE Engine&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46706 Link1] [http://www.youtube.com/watch?v=LDtUE5PIhV0 Link2]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Otaco Glost Engine&lt;br /&gt;
|[http://www.youtube.com/user/otacogloost Link]&lt;br /&gt;
|working&lt;br /&gt;
|Otaco&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Quad-Ren 2D&lt;br /&gt;
|[http://quad-ren.sourceforge.net/index.php Link]&lt;br /&gt;
|&lt;br /&gt;
|Hessiess&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SDL GLES&lt;br /&gt;
|[http://github.com/Cpasjuste/sdl-1.2.13_gles/tree Link]&lt;br /&gt;
|working&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|XreaL&lt;br /&gt;
|[http://xreal.sourceforge.net/xrealwiki/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Pickle [?]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Other programs ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|AbiWord - Word Processor&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|Claws Mail&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|Epiphany Web Bowser&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FireFox - Internet Browser&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|GIMP - Image Editor&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|GMenu&lt;br /&gt;
|[http://www.youtube.com/watch?v=VYzi8gziC7E Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pandora Team&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Gnumeric Spreadsheet - Spreadsheet&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|GoView&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Image Gallery&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Inside The Box&lt;br /&gt;
|[http://www.openpandora.pl Link1] [http://www.youtube.com/watch?v=uLMmJBDEs2E Link2]&lt;br /&gt;
|wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|Pandora e-zine&lt;br /&gt;
|-&lt;br /&gt;
|IRC Client&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LeafPad&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matchbox Shell / GUI&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MPlayer&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=41420 Link1] [http://www.youtube.com/watch?v=v9RAPNa-55k Link2]&lt;br /&gt;
|Working build&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|math_neon&lt;br /&gt;
|&lt;br /&gt;
|Wip&lt;br /&gt;
|Adventus&lt;br /&gt;
|cmath like library optimised for ARM NEON coprocessor.&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Sync Suite&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|StreaK&lt;br /&gt;
|for Windows 9x/NT&lt;br /&gt;
|-&lt;br /&gt;
|Pangea GUI&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=45631&amp;amp;hl=pangea Link]&lt;br /&gt;
|WIP&lt;br /&gt;
|efegea&lt;br /&gt;
|Gmenu alternative&lt;br /&gt;
|-&lt;br /&gt;
|PDM&lt;br /&gt;
|[http://github.com/Cpasjuste/pdm/tree Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Light desktop manager for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|PGui&lt;br /&gt;
|[http://github.com/Cpasjuste/pgui/tree Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Standard emulator fronted for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|Pidgin - IM (for Angstrom OpenPandora)&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PMenu&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Minimal Menu for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|PND Maker (for Windows 9x/NT)&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|StreaK&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Qemu&lt;br /&gt;
|[http://www.nongnu.org/qemu/status.html Link]&lt;br /&gt;
|testing build&lt;br /&gt;
|Fabrice Bellard&lt;br /&gt;
|open source machine emulator and virtualizer&lt;br /&gt;
|-&lt;br /&gt;
|Scale&lt;br /&gt;
|[http://www.youtube.com/user/Zoxc64 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Zoxc64&lt;br /&gt;
|Minimal Menu for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|Simple Dev Studio for Pandora&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|for Windows 9x/NT&lt;br /&gt;
|-&lt;br /&gt;
|[[TINXL]]&lt;br /&gt;
|[[TINXL]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Application stack for multiplayer internet games&lt;br /&gt;
|-&lt;br /&gt;
|[[TS2A]]&lt;br /&gt;
|[[TS2A]]&lt;br /&gt;
|Documentation only&lt;br /&gt;
||[[User:JayFoxRox|JayFoxRox]]&lt;br /&gt;
|Teamspeak 2 Alternative Client / Server, Needs developer&lt;br /&gt;
|-&lt;br /&gt;
|XMMS&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ZiB Emulator Frontend&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47203 Link1] [http://www.youtube.com/watch?v=UJvON8lCM3M Link2]&lt;br /&gt;
|&lt;br /&gt;
|Aimless_E&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Demos / Technical Demos for OpenPandora ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Cell Shading&lt;br /&gt;
|[http://www.youtube.com/watch?v=cpAj0jHglGw Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Demo with MP3 Playback&lt;br /&gt;
|[http://www.youtube.com/watch?v=hkx18kruRJs Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Skull Demo&lt;br /&gt;
|[http://www.youtube.com/watch?v=qG7EDaZpyOo Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|WaveDemo&lt;br /&gt;
|[http://www.youtube.com/watch?v=4wgEHFCq9Lo Link]&lt;br /&gt;
|Working&lt;br /&gt;
|Otaco&lt;br /&gt;
|&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Software_projects&amp;diff=1388</id>
		<title>Software projects</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Software_projects&amp;diff=1388"/>
		<updated>2009-07-02T23:53:33Z</updated>

		<summary type="html">&lt;p&gt;Adventus: /* Graphic Engines */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See the [[Port Requests]] article for open-source projects which ''could'' be ported but have not been taken on by anyone yet.&lt;br /&gt;
&lt;br /&gt;
== Operating Systems ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Android Omap&lt;br /&gt;
|[http://elinux.org/Android_on_OMAP Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Angstrom Linux&lt;br /&gt;
|[http://www.angstrom-distribution.org/ Link]&lt;br /&gt;
|Working build, not completed&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|AROS Arm&lt;br /&gt;
|[http://projects.powerdeveloper.org/project/imx515/735 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FreeBSD&lt;br /&gt;
|[http://wiki.freebsd.org/FreeBSD/arm/OMAP Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Gentoo Linux&lt;br /&gt;
|[http://gentoo.openpandora.org Link]&lt;br /&gt;
|Working build, not completed&lt;br /&gt;
|javaJake, Viridior&lt;br /&gt;
|IRC: (FreeNode) #gentoo-pandora&lt;br /&gt;
|-&lt;br /&gt;
|HaikuOS&lt;br /&gt;
|[http://www.haiku-os.org Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ubuntu ARM&lt;br /&gt;
|[http://www.ubuntu.com/products/whatisubuntu/arm Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Fedora ARM&lt;br /&gt;
|&lt;br /&gt;
|Unknown&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Games ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Abuse&lt;br /&gt;
|[http://abuse.zoy.org/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|2D Platform&lt;br /&gt;
|-&lt;br /&gt;
|Battle for Wesnoth v1.6.2&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47936 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|BattleJewels&lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Skeezix&lt;br /&gt;
|Logical&lt;br /&gt;
|-&lt;br /&gt;
|BlobWars&lt;br /&gt;
|[http://www.parallelrealities.co.uk/projects/blobWars.php Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|2D Platform&lt;br /&gt;
|-&lt;br /&gt;
|Caster&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46813 Link]&lt;br /&gt;
|Working build (tested on PC)&lt;br /&gt;
|Svartalf&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Descent 1 (d1x-rebirth engine)&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1032 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPS&lt;br /&gt;
|-&lt;br /&gt;
|Descent 2 (d2x-rebirth engine)&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1032 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPS&lt;br /&gt;
|-&lt;br /&gt;
|FHeroes Port (Heroes Of Might And Magic 2)&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47553 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|FreeCiv 2.1.9&lt;br /&gt;
|[http://freeciv.wikia.com/wiki/Main_Page Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|Galactic Artifact&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46836 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Trevor Bradley&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|Giannas Return&lt;br /&gt;
|[http://www.gianas-return.de/ Link]&lt;br /&gt;
|Working&lt;br /&gt;
|Giannas Team&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Gravity Blocks&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47662 Link]&lt;br /&gt;
|wip (early in developement)&lt;br /&gt;
|Awekening&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Homeworld Port&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47565 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|LinuxHacker&lt;br /&gt;
|Simulation&lt;br /&gt;
|-&lt;br /&gt;
|Human Condition (was TINCS)&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46487 Link1][http://www.youtube.com/user/ButtermanHimself Link2]&lt;br /&gt;
|wip&lt;br /&gt;
|Butterman&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Lerp&lt;br /&gt;
|[http://grapefruitopia.com/lerp/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|benjymous&lt;br /&gt;
|2D physics puzzle platformer&lt;br /&gt;
|-&lt;br /&gt;
|Lord of the Rings Port&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46792&amp;amp;hl= Link]&lt;br /&gt;
|Unknown&lt;br /&gt;
|Daeglin&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Monster!&lt;br /&gt;
|[http://christophsdevblog.blogspot.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Chris R&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|NAEV&lt;br /&gt;
|[http://code.google.com/p/naev/ Link]&lt;br /&gt;
|wip (waiting for pandora to finish and test)&lt;br /&gt;
|bobbens&lt;br /&gt;
|Action/RPG/Sim&lt;br /&gt;
|-&lt;br /&gt;
|Nails Adventure&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46961 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|jsmtux/Mr. Gonzo&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenLiero (Liero)&lt;br /&gt;
|&lt;br /&gt;
|working build, need to be polished&lt;br /&gt;
|Pickle&lt;br /&gt;
|Shoot'Em Up&lt;br /&gt;
|-&lt;br /&gt;
|OpenTyrian&lt;br /&gt;
|[http://code.google.com/p/opentyrian/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Shoot'Em Up&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Panic!&lt;br /&gt;
|[http://www.youtube.com/watch?v=y9d6UXhQP6o Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|PokeParadox / GP32X Community&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Pool Panic&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46996 Link]&lt;br /&gt;
|Almost Finished&lt;br /&gt;
|Unfathomable Depths&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|PanMMO - Pandora MMO Game via Internet&lt;br /&gt;
|[http://www.youtube.com/user/enirya Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Enirya&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Powermanga&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Quake 1&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Quake 2&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Quake 3&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Quake 3&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Reminiscence (flashback)&lt;br /&gt;
|[http://cyxdown.free.fr/reminiscence/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Action/Adventure&lt;br /&gt;
|-&lt;br /&gt;
|Rise of The Triad&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47931 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|arrrgh&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Super Lumenal&lt;br /&gt;
|[http://www.youtube.com/watch?v=sZHi3YT3xuE&amp;amp;feature=channel_page Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Adventus&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|SuperTux 1&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1040 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|Platform&lt;br /&gt;
|-&lt;br /&gt;
|SuperTux 2&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1040 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|Platform&lt;br /&gt;
|-&lt;br /&gt;
|Tecnoballz&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Teeworlds&lt;br /&gt;
|[http://www.teeworlds.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|The Mana World&lt;br /&gt;
|[http://www.themanaworld.org/ Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|MMORPG&lt;br /&gt;
|-&lt;br /&gt;
|uHexen2: Hammer of Thyrion &lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Adventus&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Ur-Quan Masters&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43625&amp;amp;st=165&amp;amp;p=673047&amp;amp;#entry673047 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|Space Exploration&lt;br /&gt;
|-&lt;br /&gt;
|We Come In Peace&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43655 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Otaco&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|Stratagus&lt;br /&gt;
|[http://stratagus.sourceforge.net/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|RTS Engine&lt;br /&gt;
|-&lt;br /&gt;
|Where in world is...&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|Casual&lt;br /&gt;
|-&lt;br /&gt;
|Wizzley Presto and the Mysterious Time Machine&lt;br /&gt;
|[http://www.30daygame.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Craigix, Zodttd, Ruckage&lt;br /&gt;
|Arcade, 30 Day Game Competition&lt;br /&gt;
|-&lt;br /&gt;
|Wolf4SDL (Wolfenstein 3D)&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|XSwing Plus&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?s=&amp;amp;showtopic=43655&amp;amp;view=findpost&amp;amp;p=733021 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Tobse&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|ZEQ2Lite&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47623&amp;amp;hl= Link]&lt;br /&gt;
|Work in progress&lt;br /&gt;
|MDave&lt;br /&gt;
|Dragonball Z Third Person Fighter/Shooter&lt;br /&gt;
|-&lt;br /&gt;
|Zdoom &lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Adventus&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Zombd&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46933 Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|iprice/Mr Gonzo&lt;br /&gt;
|Shoot'Em Up&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Emulators ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Emulated System&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Caprice32&lt;br /&gt;
|Amstrad CPC&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=48140 Link1] [http://www.caprice32.cybercube.com/ Link2]&lt;br /&gt;
|wip&lt;br /&gt;
|hdonk&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DosBox&lt;br /&gt;
|x86 DOS&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FinalBurnAdvance&lt;br /&gt;
|CPS1/2/3/taito...&lt;br /&gt;
|[http://www.youtube.com/watch?v=06hjDLMBaf8 Link]&lt;br /&gt;
|&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Frotz&lt;br /&gt;
|Z-Machine interpreter&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/frotz-2.43.zip Link]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Fuse&lt;br /&gt;
|ZX Spectrum&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/fuse-0.9.0.zip Link]&lt;br /&gt;
|working build&lt;br /&gt;
|SteveM&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GnGeo&lt;br /&gt;
|SNK NeoGeo&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|gpSP&lt;br /&gt;
|Nintendo GBA&lt;br /&gt;
|&lt;br /&gt;
|wip&lt;br /&gt;
|ZodTTD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Hatari&lt;br /&gt;
|Atari ST&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Jzintv&lt;br /&gt;
|Mattel Intellivision&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=48035 Link]&lt;br /&gt;
|&lt;br /&gt;
|WizardStan&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MAME4All&lt;br /&gt;
|Arcade&lt;br /&gt;
|[http://www.youtube.com/user/franxism Link]&lt;br /&gt;
|&lt;br /&gt;
|Franxis&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NeoPop&lt;br /&gt;
|SNK NeoGeo Pocket&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NullDC&lt;br /&gt;
|Sega Dreamcast&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?s=&amp;amp;showtopic=47065&amp;amp;view=findpost&amp;amp;p=709910 Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|Zezu / drkIIraziel&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PandaSNES&lt;br /&gt;
|Nintendo SNES&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43213 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Pandora-PSP&lt;br /&gt;
|Sony Playstation Portable&lt;br /&gt;
|[http://jayfoxrox.bplaced.net/pandora-psp/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|[[User:JayFoxRox|JayFoxRox]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PAtari&lt;br /&gt;
|Atari 800&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PicoDrive&lt;br /&gt;
|Sega Genesis/CD/32x&lt;br /&gt;
|[http://www.youtube.com/watch?v=QDbLQI91510 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Notaz&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|PSMS&lt;br /&gt;
|Sega Master System&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PSnes&lt;br /&gt;
|Nintendo SNES&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Psx4All&lt;br /&gt;
|Sony PlayStation&lt;br /&gt;
|[http://www.zodttd.com Link]&lt;br /&gt;
|Not Status, working build&lt;br /&gt;
|ZodTTD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ScummVM&lt;br /&gt;
|x86 Scumm engine games&lt;br /&gt;
|&lt;br /&gt;
|Working build&lt;br /&gt;
|DJ Willis&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|SIMH&lt;br /&gt;
|old hardware&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/simh-3.8.zip Link]&lt;br /&gt;
|working build&lt;br /&gt;
|SteveM&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Temper&lt;br /&gt;
|NEC PC Engine&lt;br /&gt;
|[http://exophase.devzero.co.uk/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Exophase&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|Tempest&lt;br /&gt;
|Atari Jaguar&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43119 Link]&lt;br /&gt;
|&lt;br /&gt;
|Firefox&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Uae4All&lt;br /&gt;
|Amiga&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=44100 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|XMAME&lt;br /&gt;
|Arcade&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Graphic Engines ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|GemRB (Infinity Engine)&lt;br /&gt;
|&lt;br /&gt;
|wip&lt;br /&gt;
|Adventus&lt;br /&gt;
|open-source implementation of Bioware's Infinity Engine, supports games including Baldurs Gate 2 and Planescape Torment.&lt;br /&gt;
|-&lt;br /&gt;
|GLES2D&lt;br /&gt;
|&lt;br /&gt;
|Wip&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|OpenGL ES 2D library&lt;br /&gt;
|-&lt;br /&gt;
|GL-WES-v2.0&lt;br /&gt;
|[http://code.google.com/p/gl-wes-v2/ link] &lt;br /&gt;
|Working Build&lt;br /&gt;
|Adventus&lt;br /&gt;
|Opensource OpenGL 2.0 driver built on OpenGL ES 2.0.&lt;br /&gt;
|-&lt;br /&gt;
|Irrlicht&lt;br /&gt;
|[http://irrlicht.sourceforge.net/] [http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=32538&amp;amp;start=45]&lt;br /&gt;
|working build&lt;br /&gt;
|Hybrid&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NSS Engine&lt;br /&gt;
|[http://www.nosiestastudios.com/wiki/ Link1] [http://www.youtube.com/user/Prompt84 Link2]&lt;br /&gt;
|&lt;br /&gt;
|No Siesta Studios&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OGRE Engine&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46706 Link1] [http://www.youtube.com/watch?v=LDtUE5PIhV0 Link2]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Otaco Glost Engine&lt;br /&gt;
|[http://www.youtube.com/user/otacogloost Link]&lt;br /&gt;
|working&lt;br /&gt;
|Otaco&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Quad-Ren 2D&lt;br /&gt;
|[http://quad-ren.sourceforge.net/index.php Link]&lt;br /&gt;
|&lt;br /&gt;
|Hessiess&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SDL GLES&lt;br /&gt;
|[http://github.com/Cpasjuste/sdl-1.2.13_gles/tree Link]&lt;br /&gt;
|working&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|XreaL&lt;br /&gt;
|[http://xreal.sourceforge.net/xrealwiki/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Pickle [?]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Other programs ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|AbiWord - Word Processor&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|Claws Mail&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|Epiphany Web Bowser&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FireFox - Internet Browser&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|GIMP - Image Editor&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|GMenu&lt;br /&gt;
|[http://www.youtube.com/watch?v=VYzi8gziC7E Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pandora Team&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Gnumeric Spreadsheet - Spreadsheet&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|GoView&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Image Gallery&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Inside The Box&lt;br /&gt;
|[http://www.openpandora.pl Link1] [http://www.youtube.com/watch?v=uLMmJBDEs2E Link2]&lt;br /&gt;
|wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|Pandora e-zine&lt;br /&gt;
|-&lt;br /&gt;
|IRC Client&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LeafPad&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matchbox Shell / GUI&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MPlayer&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=41420 Link1] [http://www.youtube.com/watch?v=v9RAPNa-55k Link2]&lt;br /&gt;
|Working build&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Sync Suite&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|StreaK&lt;br /&gt;
|for Windows 9x/NT&lt;br /&gt;
|-&lt;br /&gt;
|Pangea GUI&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=45631&amp;amp;hl=pangea Link]&lt;br /&gt;
|WIP&lt;br /&gt;
|efegea&lt;br /&gt;
|Gmenu alternative&lt;br /&gt;
|-&lt;br /&gt;
|PDM&lt;br /&gt;
|[http://github.com/Cpasjuste/pdm/tree Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Light desktop manager for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|PGui&lt;br /&gt;
|[http://github.com/Cpasjuste/pgui/tree Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Standard emulator fronted for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|Pidgin - IM (for Angstrom OpenPandora)&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PMenu&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Minimal Menu for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|PND Maker (for Windows 9x/NT)&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|StreaK&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Qemu&lt;br /&gt;
|[http://www.nongnu.org/qemu/status.html Link]&lt;br /&gt;
|testing build&lt;br /&gt;
|Fabrice Bellard&lt;br /&gt;
|open source machine emulator and virtualizer&lt;br /&gt;
|-&lt;br /&gt;
|Scale&lt;br /&gt;
|[http://www.youtube.com/user/Zoxc64 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Zoxc64&lt;br /&gt;
|Minimal Menu for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|Simple Dev Studio for Pandora&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|for Windows 9x/NT&lt;br /&gt;
|-&lt;br /&gt;
|[[TINXL]]&lt;br /&gt;
|[[TINXL]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Application stack for multiplayer internet games&lt;br /&gt;
|-&lt;br /&gt;
|[[TS2A]]&lt;br /&gt;
|[[TS2A]]&lt;br /&gt;
|Documentation only&lt;br /&gt;
||[[User:JayFoxRox|JayFoxRox]]&lt;br /&gt;
|Teamspeak 2 Alternative Client / Server, Needs developer&lt;br /&gt;
|-&lt;br /&gt;
|XMMS&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ZiB Emulator Frontend&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47203 Link1] [http://www.youtube.com/watch?v=UJvON8lCM3M Link2]&lt;br /&gt;
|&lt;br /&gt;
|Aimless_E&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Demos / Technical Demos for OpenPandora ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Cell Shading&lt;br /&gt;
|[http://www.youtube.com/watch?v=cpAj0jHglGw Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Demo with MP3 Playback&lt;br /&gt;
|[http://www.youtube.com/watch?v=hkx18kruRJs Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Skull Demo&lt;br /&gt;
|[http://www.youtube.com/watch?v=qG7EDaZpyOo Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|WaveDemo&lt;br /&gt;
|[http://www.youtube.com/watch?v=4wgEHFCq9Lo Link]&lt;br /&gt;
|Working&lt;br /&gt;
|Otaco&lt;br /&gt;
|&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Software_projects&amp;diff=1387</id>
		<title>Software projects</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Software_projects&amp;diff=1387"/>
		<updated>2009-07-02T23:52:45Z</updated>

		<summary type="html">&lt;p&gt;Adventus: /* Graphic Engines */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See the [[Port Requests]] article for open-source projects which ''could'' be ported but have not been taken on by anyone yet.&lt;br /&gt;
&lt;br /&gt;
== Operating Systems ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Android Omap&lt;br /&gt;
|[http://elinux.org/Android_on_OMAP Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Angstrom Linux&lt;br /&gt;
|[http://www.angstrom-distribution.org/ Link]&lt;br /&gt;
|Working build, not completed&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|AROS Arm&lt;br /&gt;
|[http://projects.powerdeveloper.org/project/imx515/735 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FreeBSD&lt;br /&gt;
|[http://wiki.freebsd.org/FreeBSD/arm/OMAP Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Gentoo Linux&lt;br /&gt;
|[http://gentoo.openpandora.org Link]&lt;br /&gt;
|Working build, not completed&lt;br /&gt;
|javaJake, Viridior&lt;br /&gt;
|IRC: (FreeNode) #gentoo-pandora&lt;br /&gt;
|-&lt;br /&gt;
|HaikuOS&lt;br /&gt;
|[http://www.haiku-os.org Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ubuntu ARM&lt;br /&gt;
|[http://www.ubuntu.com/products/whatisubuntu/arm Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Fedora ARM&lt;br /&gt;
|&lt;br /&gt;
|Unknown&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Games ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Abuse&lt;br /&gt;
|[http://abuse.zoy.org/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|2D Platform&lt;br /&gt;
|-&lt;br /&gt;
|Battle for Wesnoth v1.6.2&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47936 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|BattleJewels&lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Skeezix&lt;br /&gt;
|Logical&lt;br /&gt;
|-&lt;br /&gt;
|BlobWars&lt;br /&gt;
|[http://www.parallelrealities.co.uk/projects/blobWars.php Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|2D Platform&lt;br /&gt;
|-&lt;br /&gt;
|Caster&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46813 Link]&lt;br /&gt;
|Working build (tested on PC)&lt;br /&gt;
|Svartalf&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Descent 1 (d1x-rebirth engine)&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1032 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPS&lt;br /&gt;
|-&lt;br /&gt;
|Descent 2 (d2x-rebirth engine)&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1032 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPS&lt;br /&gt;
|-&lt;br /&gt;
|FHeroes Port (Heroes Of Might And Magic 2)&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47553 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|FreeCiv 2.1.9&lt;br /&gt;
|[http://freeciv.wikia.com/wiki/Main_Page Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|Galactic Artifact&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46836 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Trevor Bradley&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|Giannas Return&lt;br /&gt;
|[http://www.gianas-return.de/ Link]&lt;br /&gt;
|Working&lt;br /&gt;
|Giannas Team&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Gravity Blocks&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47662 Link]&lt;br /&gt;
|wip (early in developement)&lt;br /&gt;
|Awekening&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Homeworld Port&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47565 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|LinuxHacker&lt;br /&gt;
|Simulation&lt;br /&gt;
|-&lt;br /&gt;
|Human Condition (was TINCS)&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46487 Link1][http://www.youtube.com/user/ButtermanHimself Link2]&lt;br /&gt;
|wip&lt;br /&gt;
|Butterman&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Lerp&lt;br /&gt;
|[http://grapefruitopia.com/lerp/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|benjymous&lt;br /&gt;
|2D physics puzzle platformer&lt;br /&gt;
|-&lt;br /&gt;
|Lord of the Rings Port&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46792&amp;amp;hl= Link]&lt;br /&gt;
|Unknown&lt;br /&gt;
|Daeglin&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Monster!&lt;br /&gt;
|[http://christophsdevblog.blogspot.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Chris R&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|NAEV&lt;br /&gt;
|[http://code.google.com/p/naev/ Link]&lt;br /&gt;
|wip (waiting for pandora to finish and test)&lt;br /&gt;
|bobbens&lt;br /&gt;
|Action/RPG/Sim&lt;br /&gt;
|-&lt;br /&gt;
|Nails Adventure&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46961 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|jsmtux/Mr. Gonzo&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenLiero (Liero)&lt;br /&gt;
|&lt;br /&gt;
|working build, need to be polished&lt;br /&gt;
|Pickle&lt;br /&gt;
|Shoot'Em Up&lt;br /&gt;
|-&lt;br /&gt;
|OpenTyrian&lt;br /&gt;
|[http://code.google.com/p/opentyrian/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Shoot'Em Up&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Panic!&lt;br /&gt;
|[http://www.youtube.com/watch?v=y9d6UXhQP6o Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|PokeParadox / GP32X Community&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Pool Panic&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46996 Link]&lt;br /&gt;
|Almost Finished&lt;br /&gt;
|Unfathomable Depths&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|PanMMO - Pandora MMO Game via Internet&lt;br /&gt;
|[http://www.youtube.com/user/enirya Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Enirya&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Powermanga&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Quake 1&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Quake 2&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Quake 3&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Quake 3&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Reminiscence (flashback)&lt;br /&gt;
|[http://cyxdown.free.fr/reminiscence/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Action/Adventure&lt;br /&gt;
|-&lt;br /&gt;
|Rise of The Triad&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47931 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|arrrgh&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Super Lumenal&lt;br /&gt;
|[http://www.youtube.com/watch?v=sZHi3YT3xuE&amp;amp;feature=channel_page Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Adventus&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|SuperTux 1&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1040 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|Platform&lt;br /&gt;
|-&lt;br /&gt;
|SuperTux 2&lt;br /&gt;
|[http://forum.openhandhelds.org/viewtopic.php?f=6&amp;amp;t=1040 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|Platform&lt;br /&gt;
|-&lt;br /&gt;
|Tecnoballz&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Teeworlds&lt;br /&gt;
|[http://www.teeworlds.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|The Mana World&lt;br /&gt;
|[http://www.themanaworld.org/ Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|MMORPG&lt;br /&gt;
|-&lt;br /&gt;
|uHexen2: Hammer of Thyrion &lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Adventus&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Ur-Quan Masters&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43625&amp;amp;st=165&amp;amp;p=673047&amp;amp;#entry673047 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|Space Exploration&lt;br /&gt;
|-&lt;br /&gt;
|We Come In Peace&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43655 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Otaco&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|Stratagus&lt;br /&gt;
|[http://stratagus.sourceforge.net/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|RTS Engine&lt;br /&gt;
|-&lt;br /&gt;
|Where in world is...&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|Casual&lt;br /&gt;
|-&lt;br /&gt;
|Wizzley Presto and the Mysterious Time Machine&lt;br /&gt;
|[http://www.30daygame.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Craigix, Zodttd, Ruckage&lt;br /&gt;
|Arcade, 30 Day Game Competition&lt;br /&gt;
|-&lt;br /&gt;
|Wolf4SDL (Wolfenstein 3D)&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|XSwing Plus&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?s=&amp;amp;showtopic=43655&amp;amp;view=findpost&amp;amp;p=733021 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Tobse&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|ZEQ2Lite&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47623&amp;amp;hl= Link]&lt;br /&gt;
|Work in progress&lt;br /&gt;
|MDave&lt;br /&gt;
|Dragonball Z Third Person Fighter/Shooter&lt;br /&gt;
|-&lt;br /&gt;
|Zdoom &lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Adventus&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Zombd&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46933 Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|iprice/Mr Gonzo&lt;br /&gt;
|Shoot'Em Up&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Emulators ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Emulated System&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Caprice32&lt;br /&gt;
|Amstrad CPC&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=48140 Link1] [http://www.caprice32.cybercube.com/ Link2]&lt;br /&gt;
|wip&lt;br /&gt;
|hdonk&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DosBox&lt;br /&gt;
|x86 DOS&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FinalBurnAdvance&lt;br /&gt;
|CPS1/2/3/taito...&lt;br /&gt;
|[http://www.youtube.com/watch?v=06hjDLMBaf8 Link]&lt;br /&gt;
|&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Frotz&lt;br /&gt;
|Z-Machine interpreter&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/frotz-2.43.zip Link]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Fuse&lt;br /&gt;
|ZX Spectrum&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/fuse-0.9.0.zip Link]&lt;br /&gt;
|working build&lt;br /&gt;
|SteveM&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GnGeo&lt;br /&gt;
|SNK NeoGeo&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|gpSP&lt;br /&gt;
|Nintendo GBA&lt;br /&gt;
|&lt;br /&gt;
|wip&lt;br /&gt;
|ZodTTD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Hatari&lt;br /&gt;
|Atari ST&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Jzintv&lt;br /&gt;
|Mattel Intellivision&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=48035 Link]&lt;br /&gt;
|&lt;br /&gt;
|WizardStan&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MAME4All&lt;br /&gt;
|Arcade&lt;br /&gt;
|[http://www.youtube.com/user/franxism Link]&lt;br /&gt;
|&lt;br /&gt;
|Franxis&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NeoPop&lt;br /&gt;
|SNK NeoGeo Pocket&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NullDC&lt;br /&gt;
|Sega Dreamcast&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?s=&amp;amp;showtopic=47065&amp;amp;view=findpost&amp;amp;p=709910 Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|Zezu / drkIIraziel&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PandaSNES&lt;br /&gt;
|Nintendo SNES&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43213 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Pandora-PSP&lt;br /&gt;
|Sony Playstation Portable&lt;br /&gt;
|[http://jayfoxrox.bplaced.net/pandora-psp/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|[[User:JayFoxRox|JayFoxRox]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PAtari&lt;br /&gt;
|Atari 800&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PicoDrive&lt;br /&gt;
|Sega Genesis/CD/32x&lt;br /&gt;
|[http://www.youtube.com/watch?v=QDbLQI91510 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Notaz&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|PSMS&lt;br /&gt;
|Sega Master System&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PSnes&lt;br /&gt;
|Nintendo SNES&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Psx4All&lt;br /&gt;
|Sony PlayStation&lt;br /&gt;
|[http://www.zodttd.com Link]&lt;br /&gt;
|Not Status, working build&lt;br /&gt;
|ZodTTD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ScummVM&lt;br /&gt;
|x86 Scumm engine games&lt;br /&gt;
|&lt;br /&gt;
|Working build&lt;br /&gt;
|DJ Willis&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|SIMH&lt;br /&gt;
|old hardware&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/simh-3.8.zip Link]&lt;br /&gt;
|working build&lt;br /&gt;
|SteveM&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Temper&lt;br /&gt;
|NEC PC Engine&lt;br /&gt;
|[http://exophase.devzero.co.uk/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Exophase&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|Tempest&lt;br /&gt;
|Atari Jaguar&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43119 Link]&lt;br /&gt;
|&lt;br /&gt;
|Firefox&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Uae4All&lt;br /&gt;
|Amiga&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=44100 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|XMAME&lt;br /&gt;
|Arcade&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Graphic Engines ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|GemRB (Infinity Engine)&lt;br /&gt;
|&lt;br /&gt;
|wip&lt;br /&gt;
|Adventus&lt;br /&gt;
|open-source implementation of Bioware's Infinity Engine, supports games including Baldurs Gate 2 and Planescape Torment.&lt;br /&gt;
|-&lt;br /&gt;
|GLES2D&lt;br /&gt;
|&lt;br /&gt;
|Wip&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|OpenGL ES 2D library&lt;br /&gt;
|-&lt;br /&gt;
|GL-WES-v2.0&lt;br /&gt;
|http://code.google.com/p/gl-wes-v2/&lt;br /&gt;
|Working Build&lt;br /&gt;
|Adventus&lt;br /&gt;
|Opensource OpenGL 2.0 driver built on OpenGL ES 2.0.&lt;br /&gt;
|-&lt;br /&gt;
|Irrlicht&lt;br /&gt;
|[http://irrlicht.sourceforge.net/] [http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=32538&amp;amp;start=45]&lt;br /&gt;
|working build&lt;br /&gt;
|Hybrid&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NSS Engine&lt;br /&gt;
|[http://www.nosiestastudios.com/wiki/ Link1] [http://www.youtube.com/user/Prompt84 Link2]&lt;br /&gt;
|&lt;br /&gt;
|No Siesta Studios&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OGRE Engine&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46706 Link1] [http://www.youtube.com/watch?v=LDtUE5PIhV0 Link2]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Otaco Glost Engine&lt;br /&gt;
|[http://www.youtube.com/user/otacogloost Link]&lt;br /&gt;
|working&lt;br /&gt;
|Otaco&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Quad-Ren 2D&lt;br /&gt;
|[http://quad-ren.sourceforge.net/index.php Link]&lt;br /&gt;
|&lt;br /&gt;
|Hessiess&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SDL GLES&lt;br /&gt;
|[http://github.com/Cpasjuste/sdl-1.2.13_gles/tree Link]&lt;br /&gt;
|working&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|XreaL&lt;br /&gt;
|[http://xreal.sourceforge.net/xrealwiki/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Pickle [?]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Other programs ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|AbiWord - Word Processor&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|Claws Mail&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|Epiphany Web Bowser&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FireFox - Internet Browser&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|GIMP - Image Editor&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|GMenu&lt;br /&gt;
|[http://www.youtube.com/watch?v=VYzi8gziC7E Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pandora Team&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Gnumeric Spreadsheet - Spreadsheet&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|for Angstrom OpenPandora&lt;br /&gt;
|-&lt;br /&gt;
|GoView&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Image Gallery&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Inside The Box&lt;br /&gt;
|[http://www.openpandora.pl Link1] [http://www.youtube.com/watch?v=uLMmJBDEs2E Link2]&lt;br /&gt;
|wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|Pandora e-zine&lt;br /&gt;
|-&lt;br /&gt;
|IRC Client&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LeafPad&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matchbox Shell / GUI&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MPlayer&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=41420 Link1] [http://www.youtube.com/watch?v=v9RAPNa-55k Link2]&lt;br /&gt;
|Working build&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Sync Suite&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|StreaK&lt;br /&gt;
|for Windows 9x/NT&lt;br /&gt;
|-&lt;br /&gt;
|Pangea GUI&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=45631&amp;amp;hl=pangea Link]&lt;br /&gt;
|WIP&lt;br /&gt;
|efegea&lt;br /&gt;
|Gmenu alternative&lt;br /&gt;
|-&lt;br /&gt;
|PDM&lt;br /&gt;
|[http://github.com/Cpasjuste/pdm/tree Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Light desktop manager for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|PGui&lt;br /&gt;
|[http://github.com/Cpasjuste/pgui/tree Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Standard emulator fronted for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|Pidgin - IM (for Angstrom OpenPandora)&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PMenu&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Minimal Menu for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|PND Maker (for Windows 9x/NT)&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|StreaK&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Qemu&lt;br /&gt;
|[http://www.nongnu.org/qemu/status.html Link]&lt;br /&gt;
|testing build&lt;br /&gt;
|Fabrice Bellard&lt;br /&gt;
|open source machine emulator and virtualizer&lt;br /&gt;
|-&lt;br /&gt;
|Scale&lt;br /&gt;
|[http://www.youtube.com/user/Zoxc64 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Zoxc64&lt;br /&gt;
|Minimal Menu for Pandora&lt;br /&gt;
|-&lt;br /&gt;
|Simple Dev Studio for Pandora&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|for Windows 9x/NT&lt;br /&gt;
|-&lt;br /&gt;
|[[TINXL]]&lt;br /&gt;
|[[TINXL]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Application stack for multiplayer internet games&lt;br /&gt;
|-&lt;br /&gt;
|[[TS2A]]&lt;br /&gt;
|[[TS2A]]&lt;br /&gt;
|Documentation only&lt;br /&gt;
||[[User:JayFoxRox|JayFoxRox]]&lt;br /&gt;
|Teamspeak 2 Alternative Client / Server, Needs developer&lt;br /&gt;
|-&lt;br /&gt;
|XMMS&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ZiB Emulator Frontend&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47203 Link1] [http://www.youtube.com/watch?v=UJvON8lCM3M Link2]&lt;br /&gt;
|&lt;br /&gt;
|Aimless_E&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Demos / Technical Demos for OpenPandora ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 90%; border:1px solid gray; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec&amp;quot;&lt;br /&gt;
! Project Name&lt;br /&gt;
! Link&lt;br /&gt;
! Status&lt;br /&gt;
! Author/Port Author&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Cell Shading&lt;br /&gt;
|[http://www.youtube.com/watch?v=cpAj0jHglGw Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Demo with MP3 Playback&lt;br /&gt;
|[http://www.youtube.com/watch?v=hkx18kruRJs Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Skull Demo&lt;br /&gt;
|[http://www.youtube.com/watch?v=qG7EDaZpyOo Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|WaveDemo&lt;br /&gt;
|[http://www.youtube.com/watch?v=4wgEHFCq9Lo Link]&lt;br /&gt;
|Working&lt;br /&gt;
|Otaco&lt;br /&gt;
|&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Software_projects&amp;diff=1200</id>
		<title>Software projects</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Software_projects&amp;diff=1200"/>
		<updated>2009-04-25T01:04:19Z</updated>

		<summary type="html">&lt;p&gt;Adventus: /* Games */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Operating Systems ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; style=&amp;quot;;border: 1px solid;text-align:center;&amp;quot; width=100%&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Project Name&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Link&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Status&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Author/Port Author&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Notes&lt;br /&gt;
|-&lt;br /&gt;
|Angstrom Linux&lt;br /&gt;
|[http://www.angstrom-distribution.org/ Link]&lt;br /&gt;
|Working build, not completed&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|HaikuOS&lt;br /&gt;
|[http://www.haiku-os.org Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Gentoo Linux&lt;br /&gt;
|[http://gentoo.openpandora.org Link]&lt;br /&gt;
|Working build, not completed&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ubuntu ARM&lt;br /&gt;
|&lt;br /&gt;
|Unknown&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|AROS Arm&lt;br /&gt;
|[http://projects.powerdeveloper.org/project/imx515/735 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FreeBSD&lt;br /&gt;
|[http://wiki.freebsd.org/FreeBSD/arm/OMAP Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Android Omap&lt;br /&gt;
|[http://elinux.org/Android_on_OMAP Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Games ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; style=&amp;quot;;border: 1px solid;text-align:center;&amp;quot; width=100%&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Project Name&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Link&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Status&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Author/Port Author&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Notes&lt;br /&gt;
|-&lt;br /&gt;
|FHeroes Port (Heroes Of Might And Magic 2)&lt;br /&gt;
|&lt;br /&gt;
|Working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|OpenLiero (Liero)&lt;br /&gt;
|&lt;br /&gt;
|working build, need to be polished&lt;br /&gt;
|Pickle&lt;br /&gt;
|Shoot'Em Up&lt;br /&gt;
|-&lt;br /&gt;
|Quake 2&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Homeworld Port&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47565 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|LinuxHacker&lt;br /&gt;
|Simulation&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Panic!&lt;br /&gt;
|[http://www.youtube.com/watch?v=y9d6UXhQP6o Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|PokeParadox / GP32X Community&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|TINCS&lt;br /&gt;
|[http://www.youtube.com/user/ButtermanHimself Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Butterman&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Where in world is...&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|Casual&lt;br /&gt;
|-&lt;br /&gt;
|Galactic Artifact&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46836 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Trevor Bradley&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|Nails Adventure&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46961 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|jsmtux/Mr. Gonzo&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Tecnoballz&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Powermanga&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Battle for Wesnoth&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|Quake 3&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Zombd&lt;br /&gt;
|&lt;br /&gt;
|Wip&lt;br /&gt;
|iprice/Mr Gonzo&lt;br /&gt;
|Shoot'Em Up&lt;br /&gt;
|-&lt;br /&gt;
|Wolf4SDL (Wolfenstein 3D)&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|PrBoom (Doom)&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Quake 1&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Quake 3&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Wizzley Presto&lt;br /&gt;
|[http://www.30daygame.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Craigix, Zodttd, Ruckage&lt;br /&gt;
|Arcade, 30 Day Game Competition&lt;br /&gt;
|-&lt;br /&gt;
|We Come In Peace&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43655 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Otaco&lt;br /&gt;
|Strategy&lt;br /&gt;
|-&lt;br /&gt;
|Lerp&lt;br /&gt;
|[http://grapefruitopia.com/lerp/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Pool Panic&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46996 Link]&lt;br /&gt;
|Almost Finished&lt;br /&gt;
|Unfathomable Depths&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Caster&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46813 Link]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Lord Of The Rings Port&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46792&amp;amp;hl= Link]&lt;br /&gt;
|Unknown&lt;br /&gt;
|Daeglin&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Teeworlds&lt;br /&gt;
|[http://www.teeworlds.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|zeg2Lite&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47623&amp;amp;hl= Link]&lt;br /&gt;
|wip&lt;br /&gt;
|MDave&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|Monster!&lt;br /&gt;
|[http://christophsdevblog.blogspot.com/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Chris R&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|PanMMO - Pandora MMO Game via Internet&lt;br /&gt;
|[http://www.youtube.com/user/enirya Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Enirya&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|Super Lumenal&lt;br /&gt;
|[http://www.youtube.com/watch?v=sZHi3YT3xuE&amp;amp;feature=channel_page Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Adventus&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Zdoom &lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Adventus&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|uHexen2: Hammer of Thyrion &lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Adventus&lt;br /&gt;
|FPP&lt;br /&gt;
|-&lt;br /&gt;
|GemRB (Infinity Engine)&lt;br /&gt;
|&lt;br /&gt;
|wip&lt;br /&gt;
|Adventus&lt;br /&gt;
|RPG&lt;br /&gt;
|-&lt;br /&gt;
|BattleJewels&lt;br /&gt;
|&lt;br /&gt;
|Completed build for GP2X, WIP for Pandora&lt;br /&gt;
|Skeezix&lt;br /&gt;
|Logical&lt;br /&gt;
|-&lt;br /&gt;
|Giannas Return&lt;br /&gt;
|[http://www.gianas-return.de/ Link]&lt;br /&gt;
|Working&lt;br /&gt;
|Giannas Team&lt;br /&gt;
|Arcade&lt;br /&gt;
|-&lt;br /&gt;
|Ur-Quan Masters&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43625&amp;amp;st=165&amp;amp;p=673047&amp;amp;#entry673047 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|Strategy&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Emulators ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; style=&amp;quot;;border: 1px solid;text-align:center;&amp;quot; width=100%&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Project Name&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Link&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Status&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Author/Port Author&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Notes&lt;br /&gt;
|-&lt;br /&gt;
|Psx4All (Sony Playstation emulator)&lt;br /&gt;
|[http://www.zodttd.com Link]&lt;br /&gt;
|Not Status, working build&lt;br /&gt;
|ZodTTD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PicoDrive (Sega Genesis emulator)&lt;br /&gt;
|[http://www.youtube.com/watch?v=QDbLQI91510 Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Notaz&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|PSnes (Nintendo SNES]&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PAtari (Atari 800)&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PSMS (Sega MasterSystem)&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|working build&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Pandora-PSP (Sony Playstation Portable)&lt;br /&gt;
|[http://jayfoxrox.bplaced.net/pandora-psp/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|JayFoxRox&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Tempest (Atari Jaguar)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Temper (PC Engine)&lt;br /&gt;
|[http://exophase.devzero.co.uk/ Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Exophase&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|MAME4All (MAME)&lt;br /&gt;
|[http://www.youtube.com/user/franxism Link]&lt;br /&gt;
|&lt;br /&gt;
|Franxis&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FinalBurnAdvance (CPS1/2/3/taito...)&lt;br /&gt;
|[http://www.youtube.com/watch?v=06hjDLMBaf8 Link]&lt;br /&gt;
|&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|The Frotz Z-Machine (Zork interpreter)&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/frotz-2.43.zip Link]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Fuse (ZX Spectrum)&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/fuse-0.9.0.zip Link]&lt;br /&gt;
|working build&lt;br /&gt;
|SteveM&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|ScummVM (Scumm games)&lt;br /&gt;
|&lt;br /&gt;
|Working build&lt;br /&gt;
|DJ Willis&lt;br /&gt;
|Fullspeed emulator&lt;br /&gt;
|-&lt;br /&gt;
|Simh (emulate old hardware)&lt;br /&gt;
|[http://www.cosam.org/computers/pandora/simh-3.8.zip Link]&lt;br /&gt;
|working build&lt;br /&gt;
|SteveM&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GnGeo (NeoGeo)&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NeoPop (Neogeo Pocket)&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Hatari (Atari ST)&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link1] [http://www.youtube.com/user/cpasjuste Link2]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|XMAME (MAME)&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DosBox&lt;br /&gt;
|&lt;br /&gt;
|working build&lt;br /&gt;
|Pickle&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|NullDC (Sega Dreamcast)&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?s=&amp;amp;showtopic=47065&amp;amp;view=findpost&amp;amp;p=709910 Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|Zezu / drkIIraziel&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Uae4All (Amiga)&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=44100 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PandaSNES (Super Nintendo)&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=43213 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|gpSP (Game Boy Advance)&lt;br /&gt;
|&lt;br /&gt;
|wip&lt;br /&gt;
|ZodTTD&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Graphic Engines ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; style=&amp;quot;;border: 1px solid;text-align:center;&amp;quot; width=100%&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Project Name&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Link&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Status&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Author/Port Author&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Notes&lt;br /&gt;
|-&lt;br /&gt;
|NSS Engine&lt;br /&gt;
|[http://www.nosiestastudios.com/wiki/ Link1] [http://www.youtube.com/user/Prompt84 Link2]&lt;br /&gt;
|&lt;br /&gt;
|No Siesta Studios&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|XreaL&lt;br /&gt;
|[http://xreal.sourceforge.net/xrealwiki/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Pickle [?]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Quad-Ren 2D&lt;br /&gt;
|[http://quad-ren.sourceforge.net/index.php Link]&lt;br /&gt;
|&lt;br /&gt;
|Hessiess&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OGRE Engine&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=46706 Link1] [http://www.youtube.com/watch?v=LDtUE5PIhV0 Link2]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|SDL GLES&lt;br /&gt;
|[http://github.com/Cpasjuste/sdl-1.2.13_gles/tree Link]&lt;br /&gt;
|working&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Otaco Glost Engine&lt;br /&gt;
|[http://www.youtube.com/user/otacogloost Link]&lt;br /&gt;
|working&lt;br /&gt;
|Otaco&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Other programs ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; style=&amp;quot;;border: 1px solid;text-align:center;&amp;quot; width=100%&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Project Name&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Link&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Status&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Author/Port Author&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Notes&lt;br /&gt;
|-&lt;br /&gt;
|ZiB Emulator Frontend&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=47203 Link1] [http://www.youtube.com/watch?v=UJvON8lCM3M Link2]&lt;br /&gt;
|&lt;br /&gt;
|Aimless_E&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PND Maker (for Windows 9x/NT)&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|StreaK&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Pandora Sync Suite (for Windows 9x/NT)&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|StreaK&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Inside The Box (Pandora e-zine)&lt;br /&gt;
|[http://www.openpandora.pl Link1] [http://www.youtube.com/watch?v=uLMmJBDEs2E Link2]&lt;br /&gt;
|wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PMenu (Minimal Menu for Pandora)&lt;br /&gt;
|[http://mydedibox.fr/_stuff/pandora/ Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Simple Dev Studio for Pandora (for Windows 9x/NT)&lt;br /&gt;
|[http://www.openpandora.pl Link]&lt;br /&gt;
|Wip&lt;br /&gt;
|StreaK&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Qemu - open source machine emulator and virtualizer&lt;br /&gt;
|[http://www.nongnu.org/qemu/status.html Link]&lt;br /&gt;
|testing build&lt;br /&gt;
|Fabrice Bellard&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|TINXL - Application stack for multiplayer internet games&lt;br /&gt;
|[[TINXL]]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PGui - Standard emulator fronted for the pandora gaming console&lt;br /&gt;
|[http://github.com/Cpasjuste/pgui/tree Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|PDM - A light desktop manager for the pandora gaming console&lt;br /&gt;
|[http://github.com/Cpasjuste/pdm/tree Link]&lt;br /&gt;
|&lt;br /&gt;
|Cpasjuste&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Scale - Minimal Menu for Pandora&lt;br /&gt;
|[http://www.youtube.com/user/Zoxc64 Link]&lt;br /&gt;
|wip&lt;br /&gt;
|Zoxc64&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|FireFox - Internet Browser (for Angstrom OpenPandora)&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GIMP - Image Editor (for Angstrom OpenPandora)&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Claws Mail (for Angstrom OpenPandora)&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|AbiWord - Word Processor (for Angstrom OpenPandora)&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Pidgin - IM (for Angstrom OpenPandora)&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Gnumeric Spreadsheet - Spreadsheet (for Angstrom OpenPandora)&lt;br /&gt;
|[http://www.youtube.com/watch?v=oYf-I1UuWhk Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Matchbox Shell / GUI&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|MPlayer&lt;br /&gt;
|[http://www.gp32x.com/board/index.php?showtopic=41420 Link1] [http://www.youtube.com/watch?v=v9RAPNa-55k Link2]&lt;br /&gt;
|Working build&lt;br /&gt;
|Squidge&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Epiphany Web Bowser&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|LeafPad&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Image Gallery&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GoView&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|IRC Client&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|XMMS&lt;br /&gt;
|[http://www.youtube.com/watch?v=sKKMj37Psd8 Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GMenu&lt;br /&gt;
|[http://www.youtube.com/watch?v=VYzi8gziC7E Link]&lt;br /&gt;
|Working build&lt;br /&gt;
|Pandora Team&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Demos / Technical Demos for OpenPandora ==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; style=&amp;quot;;border: 1px solid;text-align:center;&amp;quot; width=100%&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Project Name&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Link&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Status&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Author/Port Author&lt;br /&gt;
! style=&amp;quot;background:#E9E9E9;border: 1px #111111 solid;&amp;quot; |Notes&lt;br /&gt;
|-&lt;br /&gt;
|WaveDemo&lt;br /&gt;
|[http://www.youtube.com/watch?v=4wgEHFCq9Lo Link]&lt;br /&gt;
|Working&lt;br /&gt;
|Otaco&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Skull Demo&lt;br /&gt;
|[http://www.youtube.com/watch?v=qG7EDaZpyOo Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Cell Shading&lt;br /&gt;
|[http://www.youtube.com/watch?v=cpAj0jHglGw Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|OpenGL Demo with MP3 Playback&lt;br /&gt;
|[http://www.youtube.com/watch?v=hkx18kruRJs Link]&lt;br /&gt;
|working build&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Adventus</name></author>
		
	</entry>
</feed>