<?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=Lolla</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=Lolla"/>
	<link rel="alternate" type="text/html" href="https://pandorawiki.org/Special:Contributions/Lolla"/>
	<updated>2026-05-03T19:55:40Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.32.0-alpha</generator>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Kernel_interface&amp;diff=29124</id>
		<title>Kernel interface</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Kernel_interface&amp;diff=29124"/>
		<updated>2013-11-27T10:14:15Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{hint|For apps use higher level libraries/interfaces like SDL, Qt, X or similar for your own good (portability). It may be impossible to retain this layout on some major hardware revision, let's say Pandora 3000, and your program will break. Also this requires some level of Linux programming knowledge.}}&lt;br /&gt;
&lt;br /&gt;
In case you need to write low level code (you can't/don't want to use high level libs like [[SDL]]), you can use kernel interface. This is the recommended way to access hardware (as opposed to GP2X style of accessing chip registers by mmap'ing /dev/mem), because in case hardware changes are needed in future, they could be handled by kernel and all programs would still work. It also should allow several programs to work at the same time and should be more stable.&lt;br /&gt;
&lt;br /&gt;
==Input==&lt;br /&gt;
Buttons, keypad, touchscreen and [[nubs]] are all exposed through Linux event interface (EVDEV). All devices are represented by '''/dev/input/eventX''' files, which can be opened, read and queried (using ioctl calls). The reads can be synchronous (the read will only return when user does something, like presses the button), or asynchronous (the system will report what changed since the last time you asked).&lt;br /&gt;
&lt;br /&gt;
{{warning&lt;br /&gt;
|Don't hardcode device filenames in your program!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
For example, currently /dev/input/event2 represents game buttons, but in future it may become touchscreen. Scan input device names instead, example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (i = 0; 1; i++)&lt;br /&gt;
{&lt;br /&gt;
  sprintf(name, &amp;quot;/dev/input/event%i&amp;quot;, i);&lt;br /&gt;
  fd = open(name, O_RDONLY);&lt;br /&gt;
  if (fd &amp;lt; 0) break; /* no more devices */&lt;br /&gt;
  ioctl(fd, EVIOCGNAME(sizeof(name)), name);&lt;br /&gt;
  if (strcmp(name, &amp;quot;gpio-keys&amp;quot;) == 0)&lt;br /&gt;
    return fd; /* found the buttons! */&lt;br /&gt;
  close(fd); /* we don't need this device */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
List of device names and events they send:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!name&lt;br /&gt;
!description&lt;br /&gt;
!event.type&lt;br /&gt;
!event.code&lt;br /&gt;
!event.value&lt;br /&gt;
|-&lt;br /&gt;
|keypad&lt;br /&gt;
|keypad&lt;br /&gt;
|EV_KEY&lt;br /&gt;
|KEY_0...KEY_Z, KEY_BACKSPACE, KEY_LEFTSHIFT, KEY_SPACE, KEY_ENTER, KEY_COMMA, KEY_DOT, KEY_FN&lt;br /&gt;
|0 - released&amp;lt;br&amp;gt; 1 - pressed&amp;lt;br&amp;gt; 2 - autorepeat event&lt;br /&gt;
|-&lt;br /&gt;
|gpio-keys&lt;br /&gt;
|game buttons&lt;br /&gt;
|EV_KEY&lt;br /&gt;
|KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT, KEY_MENU (Pandora button), KEY_LEFTALT (Start), KEY_LEFTCTRL (Select), KEY_PAGEUP (Y/North), KEY_HOME (A/East), KEY_PAGEDOWN (X/South), KEY_END (B/West), KEY_RIGHTSHIFT (Shoulder L), KEY_RIGHTCTRL (Shoulder R), KEY_KPPLUS (Shoulder L2), KEY_KPMINUS (Shoulder R2), KEY_COFFEE (Hold)&lt;br /&gt;
|0 - released&amp;lt;br&amp;gt; 1 - pressed&lt;br /&gt;
|-&lt;br /&gt;
|gpio-keys&lt;br /&gt;
|lid state&lt;br /&gt;
|EV_SW&lt;br /&gt;
|SW_LID&lt;br /&gt;
|0 - closing&amp;lt;br&amp;gt; 1 - opening&lt;br /&gt;
|-&lt;br /&gt;
|touchscreen&lt;br /&gt;
|touchscreen&lt;br /&gt;
|EV_ABS&lt;br /&gt;
|ABS_X, ABS_Y, ABS_PRESSURE&lt;br /&gt;
|varies, use calibration data&lt;br /&gt;
|-&lt;br /&gt;
|nub0&lt;br /&gt;
|left nub&lt;br /&gt;
|EV_ABS&lt;br /&gt;
|ABS_X, ABS_Y&lt;br /&gt;
| -256 (Left/Up)&amp;lt;br&amp;gt;0&amp;lt;br&amp;gt;+256 (Right/Down)&lt;br /&gt;
|-&lt;br /&gt;
|nub1&lt;br /&gt;
|right nub&lt;br /&gt;
|EV_ABS&lt;br /&gt;
|ABS_X, ABS_Y&lt;br /&gt;
| -256 (Left/Up))&amp;lt;br&amp;gt;0&amp;lt;br&amp;gt;+256 (Right/Down)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sample code:&amp;lt;br&amp;gt;&lt;br /&gt;
[http://beagleboard.googlecode.com/files/evtest.c evtest.c]&lt;br /&gt;
[http://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-misc.git;a=blob;f=op_test_inputs.c;hb=HEAD op_test_inputs.c]&lt;br /&gt;
&lt;br /&gt;
===Nubs===&lt;br /&gt;
Nubs have 3 modes that can be switched during runtime: absolute, mouse, mbuttons; this can be done by writing one of those 3 strings to /proc/pandora/nubX/mode . On mode change /dev/input/event* device reenumeration starts and files belonging to nubs are recreated and must be reopened.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Warning:&amp;lt;/strong&amp;gt; it is not guaranteed that input files will finish recreating after a write to /proc/pandora/nubX/mode finishes, it is application's responsibility to wait until those files are available.&lt;br /&gt;
&lt;br /&gt;
To solve the above problem, the OS provides a helper script that will wait for enumeration to complete:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/usr/pandora/scripts/op_nubchange.sh &amp;lt;left_num_mode&amp;gt; &amp;lt;right_nub_mode&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
op_nubchange.sh is not available on HF6 or earlier firmwares, to support them, something like this could be used:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ -e /usr/pandora/scripts/op_nubchange.sh ]; then&lt;br /&gt;
  /usr/pandora/scripts/op_nubchange.sh absolute absolute&lt;br /&gt;
else&lt;br /&gt;
  echo absolute &amp;gt; /proc/pandora/nub0/mode&lt;br /&gt;
  echo absolute &amp;gt; /proc/pandora/nub1/mode&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Touchscreen===&lt;br /&gt;
Event interface returns uncalibrated values directly from driver, so you need to use tslib or manage calibration yourself (using data from /etc/pointercal).&lt;br /&gt;
&lt;br /&gt;
===X11===&lt;br /&gt;
When using the direct kernel api for input, it is also important to stop X processing the events as well. To do this you can create an X window to eat the events. There is also a utility that comes with the Pandora to do this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
op_runfbapp ./yourapp&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sound==&lt;br /&gt;
Pandora uses ALSA, but it has OSS emulation enabled too, so GP2X code should work.&lt;br /&gt;
&lt;br /&gt;
==Video==&lt;br /&gt;
===Architecture===&lt;br /&gt;
Framebuffer device (/dev/fbX) is supported. There are 3 framebuffers available ('''/dev/fb0''', /dev/fb1 and /dev/fb2), which represent 3 graphics/video layers on OMAP3 by default (but can be reconfigured). Only /dev/fb0 is enabled by default.&lt;br /&gt;
&lt;br /&gt;
OMAP3 display subsystem is controlled by a driver known as DSS2, which has various controls available on /sys/devices/platform/omapdss/ (but they are not meant to be changed by programs, so they are root writable only). The driver exposes 3 layers (called overlays) and 2 displays. Overlays 1 and 2 can perform hardware scaling on the fly using 5-tap poly-phase filter, overlay0 can not. Displays 0 and 1 represent LCD and TV respectively. By default the 3 framebuffers (/dev/fbX) are redirected to 3 overlays, which all output to the LCD. This configuration is not meant to be changed by programs, only firmware should manage these.&lt;br /&gt;
&lt;br /&gt;
===Basic usage===&lt;br /&gt;
====framebuffer interface====&lt;br /&gt;
Framebuffers can be accessed Linux fbdev interface:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
fbdev = open(&amp;quot;/dev/fb0&amp;quot;, O_RDWR);&lt;br /&gt;
buffer = mmap(0, 800*480*2, PROT_READ | PROT_WRITE, MAP_SHARED, fbdev, 0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
(this is basic example, no error checks)&lt;br /&gt;
&lt;br /&gt;
the returned pointer can be used to draw on the screen.&lt;br /&gt;
&lt;br /&gt;
Be sure to #include &amp;lt;linux/fb.h&amp;gt; to get access to the FB device ioctl interface, and &amp;lt;sys/ioctl.h&amp;gt; for access to ioctl itself.&lt;br /&gt;
&lt;br /&gt;
====double buffering====&lt;br /&gt;
This can be achieved using FBIOPAN_DISPLAY ioctl system call. For this you need to mmap framebuffer of double size&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
buffer1 = mmap(0, 800*480*2 * 2, PROT_WRITE, MAP_SHARED, fbdev, 0);&lt;br /&gt;
buffer2 = (char *)mem + 800*480*2;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then to display buffer2 you would call:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct fb_var_screeninfo fbvar;&lt;br /&gt;
ioctl(fbdev, FBIOGET_VSCREENINFO, &amp;amp;fbvar);&lt;br /&gt;
fbvar.yoffset = 480;&lt;br /&gt;
ioctl(fbdev, FBIOPAN_DISPLAY, &amp;amp;fbvar);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
going back to buffer1 would be repeating above with fbvar.yoffset = 0. Tripple or quad buffering can be implemented using the same technique.&lt;br /&gt;
&lt;br /&gt;
====vertical sync====&lt;br /&gt;
Linux has standard FBIO_WAITFORVSYNC for this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int arg = 0;&lt;br /&gt;
ioctl(fbdev, FBIO_WAITFORVSYNC, &amp;amp;arg);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
be sure to pass argument value 0 or it will not work.&lt;br /&gt;
&lt;br /&gt;
Some toolchains don't have FBIO_WAITFORVSYNC defined in &amp;lt;linux/fb.h&amp;gt;, in which case you can define it in the following manner:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#ifndef FBIO_WAITFORVSYNC&lt;br /&gt;
  #define FBIO_WAITFORVSYNC _IOW('F', 0x20, __u32)&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====hardware scaling====&lt;br /&gt;
Overlay1 (/dev/fb1) can be used to achieve hardware scaling. Technically overlay2 (fb2) can be used for this too, but it is planned to be used by the system for TV-out functionality, so don't use it. The overlay is configured using series of standard and OMAP specific ioctl calls, but the system ships with some tools to achieve this from scripts too. This way the framebuffer can be set up for some arbitrary size (say 320x240) and can output to LCD as 800x480 with hardware scaling.&lt;br /&gt;
Here is an example script:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ofbset -fb /dev/fb1 -pos 0 0 -size 800 480 -mem 307200 -en 1&lt;br /&gt;
fbset -fb /dev/fb1 -g 320 240 320 480 16&lt;br /&gt;
&lt;br /&gt;
./your_app_here&lt;br /&gt;
&lt;br /&gt;
ofbset -fb /dev/fb1 -pos 0 0 -size 0 0 -mem 0 -en 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What it does:&lt;br /&gt;
* allocates OMAP DSS layer, asks video output to be 800x480 at position 0,0 (could set it to 640x480 at 80,0 instead to get centered 2x scaling of 320x240). 307200 bytes of video memory are allocated for 2 320x240 16bpp screens (for doublebuffering).&lt;br /&gt;
* sets video mode to 320x240@16bpp, virtual resolution 320x480 for doublebuffering.&lt;br /&gt;
* runs your app&lt;br /&gt;
* cleans the video layer on exit&lt;br /&gt;
&lt;br /&gt;
Now the program can act as if it works with 320x240 16bpp screen.&lt;br /&gt;
&lt;br /&gt;
====LCD refresh rate====&lt;br /&gt;
The OS has a dedicated script which can change the LCD refresh rate. It must be ran with sudo:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
sudo -n /usr/pandora/scripts/op_lcdrate.sh 50&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
From code, system() function can be used for this.&lt;br /&gt;
&lt;br /&gt;
'''Note''': this doesn't mean your program has to run as root to use this (it never should!), just run the script as shown above.&lt;br /&gt;
&lt;br /&gt;
====gamma====&lt;br /&gt;
Since SZ 1.52, gamma can be controlled with another script, the same way as LCD refresh:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
sudo -n /usr/pandora/scripts/op_gamma.sh 1.0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
where 1.0 is the gamma level. If supplied gamma level is 0, then user defaults are used (useful to set on exit). There is also an optional -b N argument (to be specified before gamma value), where N controls black level (0-255, useful to combat LCD ghosting).&lt;br /&gt;
&lt;br /&gt;
===Hardware scaling filter control===&lt;br /&gt;
The hardware scaler in pandora uses poly-phase 5-tap 8-phase filter. It is described in 15.4.2.3.4 and 15.6.1.3 sections of TRM. There are 40 coefficients programmable for both horizontal and vertical resampling (vertical resampling might also use 3 taps/24 coefficients, it depends on available pixel clock).&lt;br /&gt;
====using predefined filters====&lt;br /&gt;
Just run 'sudo /usr/pandora/scripts/op_videofir.sh &amp;lt;name&amp;gt;', where name currently can be:&lt;br /&gt;
* default - the default filter from OMAP manual&lt;br /&gt;
* none - nearest neighbor&lt;br /&gt;
====using custom filters====&lt;br /&gt;
run 'sudo /usr/pandora/scripts/op_videofir.sh &amp;lt;basename&amp;gt;', where basename* files contains coefficient table. The script will look for &amp;lt;basename&amp;gt;_h, &amp;lt;basename&amp;gt;_v3 and &amp;lt;basename&amp;gt;_v5 files for 5-tap horizontal, 3-tap vertical and 5-tap vertical configurations respectively. Pass absolute or relative path for basename with './', like './something'. The coefficients should be in a form of table like described in TRM, for example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
  0   0 128   0   0&lt;br /&gt;
 -1  13 124  -8   0&lt;br /&gt;
 -2  30 112 -11  -1&lt;br /&gt;
 -5  51  95 -11  -2&lt;br /&gt;
  0  -9  73  73  -9&lt;br /&gt;
 -2 -11  95  51  -5&lt;br /&gt;
 -1 -11 112  30  -2&lt;br /&gt;
  0  -8 124  13  -1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
For 3-tap table, first and last columns should contain zeros.&lt;br /&gt;
&lt;br /&gt;
==LEDs and Display backlight==&lt;br /&gt;
The LEDs can be controlled via '''/sys/class/leds/''', and then a file [http://www.gp32x.com/board/index.php?s=&amp;amp;showtopic=45309&amp;amp;view=findpost&amp;amp;p=673593]:&lt;br /&gt;
* pandora::sd1&lt;br /&gt;
* pandora::sd2&lt;br /&gt;
* pandora::charger&lt;br /&gt;
* pandora::power&lt;br /&gt;
* pandora::bluetooth&lt;br /&gt;
* pandora::wifi&lt;br /&gt;
* pandora::keypad_bl&lt;br /&gt;
Backlight can be controlled via '''/sys/class/backlight/'''.&lt;br /&gt;
&lt;br /&gt;
==Battery==&lt;br /&gt;
There is bq27500 battery monitoring chip onboard, that exports various files at /sys/class/power_supply/bq27500-0/ , for example 'capacity' tells charge percenage left. See Data_provided_by_Battery_and_Power_driver for more details.&amp;lt;br&amp;gt;&lt;br /&gt;
There are also similar directories at /sys/class/power_supply/twl4030_* that provide info while charging.&lt;br /&gt;
&lt;br /&gt;
==Misc==&lt;br /&gt;
===Overclocking===&lt;br /&gt;
Can be performed by running a helper script&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo /usr/pandora/scripts/op_cpuspeed.sh X&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In case you want to do it from another program or non-interactively, you can use system() function (or similar) with:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo -n /usr/pandora/scripts/op_cpuspeed.sh -n X&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Note: you are advised not to change the clock explicitly from a program because optimal clock may differ on different pandora revisions, or somebody might want to run at different clock speed to save battery, CPU life, etc. . Let the user decide about the clock before running the program and set it using the system tools.&lt;br /&gt;
* Note: '-n' script argument is not available on pre-SuperZaxxon Final firmwares.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Kernel]]&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Kernel_interface&amp;diff=29123</id>
		<title>Kernel interface</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Kernel_interface&amp;diff=29123"/>
		<updated>2013-11-27T10:08:40Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{hint|For apps use higher level libraries/interfaces like SDL, Qt, X or similar for your own good (portability). It may be impossible to retain this layout on some major hardware revision, let's say Pandora 3000, and your program will break. Also this requires some level of Linux programming knowledge.}}&lt;br /&gt;
&lt;br /&gt;
In case you need to write low level code (you can't/don't want to use high level libs like [[SDL]]), you can use kernel interface. This is the recommended way to access hardware (as opposed to GP2X style of accessing chip registers by mmap'ing /dev/mem), because in case hardware changes are needed in future, they could be handled by kernel and all programs would still work. It also should allow several programs to work at the same time and should be more stable.&lt;br /&gt;
&lt;br /&gt;
==Input==&lt;br /&gt;
Buttons, keypad, touchscreen and [[nubs]] are all exposed through Linux event interface (EVDEV). All devices are represented by '''/dev/input/eventX''' files, which can be opened, read and queried (using ioctl calls). The reads can be synchronous (the read will only return when user does something, like presses the button), or asynchronous (the system will report what changed since the last time you asked).&lt;br /&gt;
&lt;br /&gt;
{{warning&lt;br /&gt;
|Don't hardcode device filenames in your program!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
For example, currently /dev/input/event2 represents game buttons, but in future it may become touchscreen. Scan input device names instead, example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (i = 0; 1; i++)&lt;br /&gt;
{&lt;br /&gt;
  sprintf(name, &amp;quot;/dev/input/event%i&amp;quot;, i);&lt;br /&gt;
  fd = open(name, O_RDONLY);&lt;br /&gt;
  if (fd &amp;lt; 0) break; /* no more devices */&lt;br /&gt;
  ioctl(fd, EVIOCGNAME(sizeof(name)), name);&lt;br /&gt;
  if (strcmp(name, &amp;quot;gpio-keys&amp;quot;) == 0)&lt;br /&gt;
    return fd; /* found the buttons! */&lt;br /&gt;
  close(fd); /* we don't need this device */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
List of device names and events they send:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!name&lt;br /&gt;
!description&lt;br /&gt;
!event.type&lt;br /&gt;
!event.code&lt;br /&gt;
!event.value&lt;br /&gt;
|-&lt;br /&gt;
|keypad&lt;br /&gt;
|keypad&lt;br /&gt;
|EV_KEY&lt;br /&gt;
|KEY_0...KEY_Z, KEY_BACKSPACE, KEY_LEFTSHIFT, KEY_SPACE, KEY_ENTER, KEY_COMMA, KEY_DOT, KEY_FN&lt;br /&gt;
|0 - released&amp;lt;br&amp;gt; 1 - pressed&amp;lt;br&amp;gt; 2 - autorepeat event&lt;br /&gt;
|-&lt;br /&gt;
|gpio-keys&lt;br /&gt;
|game buttons&lt;br /&gt;
|EV_KEY&lt;br /&gt;
|KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT, KEY_MENU (Pandora button), KEY_LEFTALT (Start), KEY_LEFTCTRL (Select), KEY_PAGEUP (Y/North), KEY_HOME (A/East), KEY_PAGEDOWN (X/South), KEY_END (B/West), KEY_RIGHTSHIFT (Shoulder L), KEY_RIGHTCTRL (Shoulder R), KEY_KPPLUS (Shoulder L2), KEY_KPMINUS (Shoulder R2), KEY_COFFEE (Hold)&lt;br /&gt;
|0 - released&amp;lt;br&amp;gt; 1 - pressed&lt;br /&gt;
|-&lt;br /&gt;
|gpio-keys&lt;br /&gt;
|lid state&lt;br /&gt;
|EV_SW&lt;br /&gt;
|SW_LID&lt;br /&gt;
|0 - closing&amp;lt;br&amp;gt; 1 - opening&lt;br /&gt;
|-&lt;br /&gt;
|touchscreen&lt;br /&gt;
|touchscreen&lt;br /&gt;
|EV_ABS&lt;br /&gt;
|ABS_X, ABS_Y, ABS_PRESSURE&lt;br /&gt;
|varies, use calibration data&lt;br /&gt;
|-&lt;br /&gt;
|nub0&lt;br /&gt;
|left nub&lt;br /&gt;
|EV_ABS&lt;br /&gt;
|ABS_X, ABS_Y&lt;br /&gt;
| -256 (Left/Up)&amp;lt;br&amp;gt;0&amp;lt;br&amp;gt;+256 (Right/Down)&lt;br /&gt;
|-&lt;br /&gt;
|nub1&lt;br /&gt;
|right nub&lt;br /&gt;
|EV_ABS&lt;br /&gt;
|ABS_X, ABS_Y&lt;br /&gt;
| -256 (Left/Up))&amp;lt;br&amp;gt;0&amp;lt;br&amp;gt;+256 (Right/Down)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sample code:&amp;lt;br&amp;gt;&lt;br /&gt;
[http://beagleboard.googlecode.com/files/evtest.c evtest.c]&lt;br /&gt;
[http://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-misc.git;a=blob;f=op_test_inputs.c;hb=HEAD op_test_inputs.c]&lt;br /&gt;
&lt;br /&gt;
===Nubs===&lt;br /&gt;
Nubs have 3 modes that can be switched during runtime: absolute, mouse, mbuttons; this can be done by writing one of those 3 strings to /proc/pandora/nubX/mode . On mode change /dev/input/event* device reenumeration starts and files belonging to nubs are recreated and must be reopened.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Warning:&amp;lt;/strong&amp;gt; it is not guaranteed that input files will finish recreating after a write to /proc/pandora/nubX/mode finishes, it is application's responsibility to wait until those files are available.&lt;br /&gt;
&lt;br /&gt;
To solve the above problem, the OS provides a helper script that will wait for enumeration to complete:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/usr/pandora/scripts/op_nubchange.sh &amp;lt;left_num_mode&amp;gt; &amp;lt;right_nub_mode&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
op_nubchange.sh is not available on HF6 or earlier firmwares, to support them, something like this could be used:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ -e /usr/pandora/scripts/op_nubchange.sh ]; then&lt;br /&gt;
  /usr/pandora/scripts/op_nubchange.sh absolute absolute&lt;br /&gt;
else&lt;br /&gt;
  echo absolute &amp;gt; /proc/pandora/nub0/mode&lt;br /&gt;
  echo absolute &amp;gt; /proc/pandora/nub1/mode&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Touchscreen===&lt;br /&gt;
Event interface returns uncalibrated values directly from driver, so you need to use tslib or manage calibration yourself (using data from /etc/pointercal).&lt;br /&gt;
&lt;br /&gt;
===X11===&lt;br /&gt;
When using the direct kernel api for input, it is also important to stop X processing the events as well. To do this you can create an X window to eat the events. There is also a utility that comes with the Pandora to do this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
op_runfbapp ./yourapp&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sound==&lt;br /&gt;
Pandora uses ALSA, but it has OSS emulation enabled too, so GP2X code should work.&lt;br /&gt;
&lt;br /&gt;
==Video==&lt;br /&gt;
===Architecture===&lt;br /&gt;
Framebuffer device (/dev/fbX) is supported. There are 3 framebuffers available ('''/dev/fb0''', /dev/fb1 and /dev/fb2), which represent 3 graphics/video layers on [[OMAP3]] by default (but can be reconfigured). Only /dev/fb0 is enabled by default.&lt;br /&gt;
&lt;br /&gt;
[[OMAP3]] display subsystem is controlled by a driver known as [[DSS2]], which has various controls available on /sys/devices/platform/omapdss/ (but they are not meant to be changed by programs, so they are root writable only). The driver exposes 3 layers (called overlays) and 2 displays. Overlays 1 and 2 can perform hardware scaling on the fly using 5-tap poly-phase filter, overlay0 can not. Displays 0 and 1 represent LCD and TV respectively. By default the 3 framebuffers (/dev/fbX) are redirected to 3 overlays, which all output to the LCD. This configuration is not meant to be changed by programs, only firmware should manage these.&lt;br /&gt;
&lt;br /&gt;
===Basic usage===&lt;br /&gt;
====framebuffer interface====&lt;br /&gt;
Framebuffers can be accessed Linux fbdev interface:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
fbdev = open(&amp;quot;/dev/fb0&amp;quot;, O_RDWR);&lt;br /&gt;
buffer = mmap(0, 800*480*2, PROT_READ | PROT_WRITE, MAP_SHARED, fbdev, 0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
(this is basic example, no error checks)&lt;br /&gt;
&lt;br /&gt;
the returned pointer can be used to draw on the screen.&lt;br /&gt;
&lt;br /&gt;
Be sure to #include &amp;lt;linux/fb.h&amp;gt; to get access to the FB device ioctl interface, and &amp;lt;sys/ioctl.h&amp;gt; for access to ioctl itself.&lt;br /&gt;
&lt;br /&gt;
====double buffering====&lt;br /&gt;
This can be achieved using FBIOPAN_DISPLAY ioctl system call. For this you need to mmap framebuffer of double size&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
buffer1 = mmap(0, 800*480*2 * 2, PROT_WRITE, MAP_SHARED, fbdev, 0);&lt;br /&gt;
buffer2 = (char *)mem + 800*480*2;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then to display buffer2 you would call:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct fb_var_screeninfo fbvar;&lt;br /&gt;
ioctl(fbdev, FBIOGET_VSCREENINFO, &amp;amp;fbvar);&lt;br /&gt;
fbvar.yoffset = 480;&lt;br /&gt;
ioctl(fbdev, FBIOPAN_DISPLAY, &amp;amp;fbvar);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
going back to buffer1 would be repeating above with fbvar.yoffset = 0. Tripple or quad buffering can be implemented using the same technique.&lt;br /&gt;
&lt;br /&gt;
====vertical sync====&lt;br /&gt;
Linux has standard FBIO_WAITFORVSYNC for this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int arg = 0;&lt;br /&gt;
ioctl(fbdev, FBIO_WAITFORVSYNC, &amp;amp;arg);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
be sure to pass argument value 0 or it will not work.&lt;br /&gt;
&lt;br /&gt;
Some toolchains don't have FBIO_WAITFORVSYNC defined in &amp;lt;linux/fb.h&amp;gt;, in which case you can define it in the following manner:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#ifndef FBIO_WAITFORVSYNC&lt;br /&gt;
  #define FBIO_WAITFORVSYNC _IOW('F', 0x20, __u32)&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====hardware scaling====&lt;br /&gt;
Overlay1 (/dev/fb1) can be used to achieve hardware scaling. Technically overlay2 (fb2) can be used for this too, but it is planned to be used by the system for TV-out functionality, so don't use it. The overlay is configured using series of standard and OMAP specific ioctl calls, but the system ships with some tools to achieve this from scripts too. This way the framebuffer can be set up for some arbitrary size (say 320x240) and can output to LCD as 800x480 with hardware scaling.&lt;br /&gt;
Here is an example script:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ofbset -fb /dev/fb1 -pos 0 0 -size 800 480 -mem 307200 -en 1&lt;br /&gt;
fbset -fb /dev/fb1 -g 320 240 320 480 16&lt;br /&gt;
&lt;br /&gt;
./your_app_here&lt;br /&gt;
&lt;br /&gt;
ofbset -fb /dev/fb1 -pos 0 0 -size 0 0 -mem 0 -en 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What it does:&lt;br /&gt;
* allocates OMAP DSS layer, asks video output to be 800x480 at position 0,0 (could set it to 640x480 at 80,0 instead to get centered 2x scaling of 320x240). 307200 bytes of video memory are allocated for 2 320x240 16bpp screens (for doublebuffering).&lt;br /&gt;
* sets video mode to 320x240@16bpp, virtual resolution 320x480 for doublebuffering.&lt;br /&gt;
* runs your app&lt;br /&gt;
* cleans the video layer on exit&lt;br /&gt;
&lt;br /&gt;
Now the program can act as if it works with 320x240 16bpp screen.&lt;br /&gt;
&lt;br /&gt;
====LCD refresh rate====&lt;br /&gt;
The OS has a dedicated script which can change the LCD refresh rate. It must be ran with sudo:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
sudo -n /usr/pandora/scripts/op_lcdrate.sh 50&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
From code, system() function can be used for this.&lt;br /&gt;
&lt;br /&gt;
'''Note''': this doesn't mean your program has to run as root to use this (it never should!), just run the script as shown above.&lt;br /&gt;
&lt;br /&gt;
====gamma====&lt;br /&gt;
Since SZ 1.52, gamma can be controlled with another script, the same way as LCD refresh:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
sudo -n /usr/pandora/scripts/op_gamma.sh 1.0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
where 1.0 is the gamma level. If supplied gamma level is 0, then user defaults are used (useful to set on exit). There is also an optional -b N argument (to be specified before gamma value), where N controls black level (0-255, useful to combat LCD ghosting).&lt;br /&gt;
&lt;br /&gt;
===Hardware scaling filter control===&lt;br /&gt;
The hardware scaler in pandora uses poly-phase 5-tap 8-phase filter. It is described in 15.4.2.3.4 and 15.6.1.3 sections of TRM. There are 40 coefficients programmable for both horizontal and vertical resampling (vertical resampling might also use 3 taps/24 coefficients, it depends on available pixel clock).&lt;br /&gt;
====using predefined filters====&lt;br /&gt;
Just run 'sudo /usr/pandora/scripts/op_videofir.sh &amp;lt;name&amp;gt;', where name currently can be:&lt;br /&gt;
* default - the default filter from OMAP manual&lt;br /&gt;
* none - nearest neighbor&lt;br /&gt;
====using custom filters====&lt;br /&gt;
run 'sudo /usr/pandora/scripts/op_videofir.sh &amp;lt;basename&amp;gt;', where basename* files contains coefficient table. The script will look for &amp;lt;basename&amp;gt;_h, &amp;lt;basename&amp;gt;_v3 and &amp;lt;basename&amp;gt;_v5 files for 5-tap horizontal, 3-tap vertical and 5-tap vertical configurations respectively. Pass absolute or relative path for basename with './', like './something'. The coefficients should be in a form of table like described in TRM, for example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
  0   0 128   0   0&lt;br /&gt;
 -1  13 124  -8   0&lt;br /&gt;
 -2  30 112 -11  -1&lt;br /&gt;
 -5  51  95 -11  -2&lt;br /&gt;
  0  -9  73  73  -9&lt;br /&gt;
 -2 -11  95  51  -5&lt;br /&gt;
 -1 -11 112  30  -2&lt;br /&gt;
  0  -8 124  13  -1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
For 3-tap table, first and last columns should contain zeros.&lt;br /&gt;
&lt;br /&gt;
==LEDs and Display backlight==&lt;br /&gt;
The LEDs can be controlled via '''/sys/class/leds/''', and then a file [http://www.gp32x.com/board/index.php?s=&amp;amp;showtopic=45309&amp;amp;view=findpost&amp;amp;p=673593]:&lt;br /&gt;
* pandora::sd1&lt;br /&gt;
* pandora::sd2&lt;br /&gt;
* pandora::charger&lt;br /&gt;
* pandora::power&lt;br /&gt;
* pandora::bluetooth&lt;br /&gt;
* pandora::wifi&lt;br /&gt;
* pandora::keypad_bl&lt;br /&gt;
Backlight can be controlled via '''/sys/class/backlight/'''.&lt;br /&gt;
&lt;br /&gt;
==Battery==&lt;br /&gt;
There is bq27500 battery monitoring chip onboard, that exports various files at /sys/class/power_supply/bq27500-0/ , for example 'capacity' tells charge percenage left. See [[Data_provided_by_Battery_and_Power_driver]] for more details.&amp;lt;br&amp;gt;&lt;br /&gt;
There are also similar directories at /sys/class/power_supply/twl4030_* that provide info while charging.&lt;br /&gt;
&lt;br /&gt;
==Misc==&lt;br /&gt;
===Overclocking===&lt;br /&gt;
Can be performed by running a helper script&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo /usr/pandora/scripts/op_cpuspeed.sh X&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In case you want to do it from another program or non-interactively, you can use system() function (or similar) with:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo -n /usr/pandora/scripts/op_cpuspeed.sh -n X&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Note: you are advised not to change the clock explicitly from a program because optimal clock may differ on different pandora revisions, or somebody might want to run at different clock speed to save battery, CPU life, etc. . Let the user decide about the clock before running the program and set it using the system tools.&lt;br /&gt;
* Note: '-n' script argument is not available on pre-SuperZaxxon Final firmwares.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Kernel]]&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Kernel_interface&amp;diff=29120</id>
		<title>Kernel interface</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Kernel_interface&amp;diff=29120"/>
		<updated>2013-11-27T10:00:24Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{hint|For apps use higher level libraries/interfaces like SDL, Qt, X or similar for your own good (portability). It may be impossible to retain this layout on some major hardware revision, let's say Pandora 3000, and your program will break. Also this requires some level of Linux programming knowledge.}}&lt;br /&gt;
&lt;br /&gt;
In case you need to write low level code (you can't/don't want to use high level libs like [[SDL]]), you can use kernel interface. This is the recommended way to access hardware (as opposed to GP2X style of accessing chip registers by mmap'ing /dev/mem), because in case hardware changes are needed in future, they could be handled by kernel and all programs would still work. It also should allow several programs to work at the same time and should be more stable.&lt;br /&gt;
&lt;br /&gt;
==Input==&lt;br /&gt;
Buttons, keypad, touchscreen and [[nubs]] are all exposed through Linux event interface (EVDEV). All devices are represented by '''/dev/input/eventX''' files, which can be opened, read and queried (using ioctl calls). The reads can be synchronous (the read will only return when user does something, like presses the button), or asynchronous (the system will report what changed since the last time you asked).&lt;br /&gt;
&lt;br /&gt;
{{warning&lt;br /&gt;
|Don't hardcode device filenames in your program!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
For example, currently /dev/input/event2 represents game buttons, but in future it may become touchscreen. Scan input device names instead, example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (i = 0; 1; i++)&lt;br /&gt;
{&lt;br /&gt;
  sprintf(name, &amp;quot;/dev/input/event%i&amp;quot;, i);&lt;br /&gt;
  fd = open(name, O_RDONLY);&lt;br /&gt;
  if (fd &amp;lt; 0) break; /* no more devices */&lt;br /&gt;
  ioctl(fd, EVIOCGNAME(sizeof(name)), name);&lt;br /&gt;
  if (strcmp(name, &amp;quot;gpio-keys&amp;quot;) == 0)&lt;br /&gt;
    return fd; /* found the buttons! */&lt;br /&gt;
  close(fd); /* we don't need this device */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
List of device names and events they send:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!name&lt;br /&gt;
!description&lt;br /&gt;
!event.type&lt;br /&gt;
!event.code&lt;br /&gt;
!event.value&lt;br /&gt;
|-&lt;br /&gt;
|keypad&lt;br /&gt;
|keypad&lt;br /&gt;
|EV_KEY&lt;br /&gt;
|KEY_0...KEY_Z, KEY_BACKSPACE, KEY_LEFTSHIFT, KEY_SPACE, KEY_ENTER, KEY_COMMA, KEY_DOT, KEY_FN&lt;br /&gt;
|0 - released&amp;lt;br&amp;gt; 1 - pressed&amp;lt;br&amp;gt; 2 - autorepeat event&lt;br /&gt;
|-&lt;br /&gt;
|gpio-keys&lt;br /&gt;
|game buttons&lt;br /&gt;
|EV_KEY&lt;br /&gt;
|KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT, KEY_MENU (Pandora button), KEY_LEFTALT (Start), KEY_LEFTCTRL (Select), KEY_PAGEUP (Y/North), KEY_HOME (A/East), KEY_PAGEDOWN (X/South), KEY_END (B/West), KEY_RIGHTSHIFT (Shoulder L), KEY_RIGHTCTRL (Shoulder R), KEY_KPPLUS (Shoulder L2), KEY_KPMINUS (Shoulder R2), KEY_COFFEE (Hold)&lt;br /&gt;
|0 - released&amp;lt;br&amp;gt; 1 - pressed&lt;br /&gt;
|-&lt;br /&gt;
|gpio-keys&lt;br /&gt;
|lid state&lt;br /&gt;
|EV_SW&lt;br /&gt;
|SW_LID&lt;br /&gt;
|0 - closing&amp;lt;br&amp;gt; 1 - opening&lt;br /&gt;
|-&lt;br /&gt;
|touchscreen&lt;br /&gt;
|touchscreen&lt;br /&gt;
|EV_ABS&lt;br /&gt;
|ABS_X, ABS_Y, ABS_PRESSURE&lt;br /&gt;
|varies, use calibration data&lt;br /&gt;
|-&lt;br /&gt;
|nub0&lt;br /&gt;
|left nub&lt;br /&gt;
|EV_ABS&lt;br /&gt;
|ABS_X, ABS_Y&lt;br /&gt;
| -256 (Left/Up)&amp;lt;br&amp;gt;0&amp;lt;br&amp;gt;+256 (Right/Down)&lt;br /&gt;
|-&lt;br /&gt;
|nub1&lt;br /&gt;
|right nub&lt;br /&gt;
|EV_ABS&lt;br /&gt;
|ABS_X, ABS_Y&lt;br /&gt;
| -256 (Left/Up))&amp;lt;br&amp;gt;0&amp;lt;br&amp;gt;+256 (Right/Down)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sample code:&amp;lt;br&amp;gt;&lt;br /&gt;
[http://beagleboard.googlecode.com/files/evtest.c evtest.c]&lt;br /&gt;
[http://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-misc.git;a=blob;f=op_test_inputs.c;hb=HEAD op_test_inputs.c]&lt;br /&gt;
&lt;br /&gt;
===Nubs===&lt;br /&gt;
Nubs have 3 modes that can be switched during runtime: absolute, mouse, mbuttons; this can be done by writing one of those 3 strings to /proc/pandora/nubX/mode . On mode change /dev/input/event* device reenumeration starts and files belonging to nubs are recreated and must be reopened.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Warning:&amp;lt;/strong&amp;gt; it is not guaranteed that input files will finish recreating after a write to /proc/pandora/nubX/mode finishes, it is application's responsibility to wait until those files are available.&lt;br /&gt;
&lt;br /&gt;
To solve the above problem, the OS provides a helper script that will wait for enumeration to complete:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/usr/pandora/scripts/op_nubchange.sh &amp;lt;left_num_mode&amp;gt; &amp;lt;right_nub_mode&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
op_nubchange.sh is not available on HF6 or earlier firmwares, to support them, something like this could be used:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ -e /usr/pandora/scripts/op_nubchange.sh ]; then&lt;br /&gt;
  /usr/pandora/scripts/op_nubchange.sh absolute absolute&lt;br /&gt;
else&lt;br /&gt;
  echo absolute &amp;gt; /proc/pandora/nub0/mode&lt;br /&gt;
  echo absolute &amp;gt; /proc/pandora/nub1/mode&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Touchscreen===&lt;br /&gt;
Event interface returns uncalibrated values directly from driver, so you need to use tslib or manage calibration yourself (using data from /etc/pointercal).&lt;br /&gt;
&lt;br /&gt;
===X11===&lt;br /&gt;
When using the direct kernel api for input, it is also important to stop X processing the events as well. To do this you can create an X window to eat the events. There is also a utility that comes with the Pandora to do this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
op_runfbapp ./yourapp&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sound==&lt;br /&gt;
Pandora uses [[ALSA]], but it has [[OSS]] emulation enabled too, so [[GP2X]] code should work.&lt;br /&gt;
&lt;br /&gt;
==Video==&lt;br /&gt;
===Architecture===&lt;br /&gt;
Framebuffer device (/dev/fbX) is supported. There are 3 framebuffers available ('''/dev/fb0''', /dev/fb1 and /dev/fb2), which represent 3 graphics/video layers on [[OMAP3]] by default (but can be reconfigured). Only /dev/fb0 is enabled by default.&lt;br /&gt;
&lt;br /&gt;
[[OMAP3]] display subsystem is controlled by a driver known as [[DSS2]], which has various controls available on /sys/devices/platform/omapdss/ (but they are not meant to be changed by programs, so they are root writable only). The driver exposes 3 layers (called overlays) and 2 displays. Overlays 1 and 2 can perform hardware scaling on the fly using 5-tap poly-phase filter, overlay0 can not. Displays 0 and 1 represent LCD and TV respectively. By default the 3 framebuffers (/dev/fbX) are redirected to 3 overlays, which all output to the LCD. This configuration is not meant to be changed by programs, only firmware should manage these.&lt;br /&gt;
&lt;br /&gt;
===Basic usage===&lt;br /&gt;
====framebuffer interface====&lt;br /&gt;
Framebuffers can be accessed Linux fbdev interface:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
fbdev = open(&amp;quot;/dev/fb0&amp;quot;, O_RDWR);&lt;br /&gt;
buffer = mmap(0, 800*480*2, PROT_READ | PROT_WRITE, MAP_SHARED, fbdev, 0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
(this is basic example, no error checks)&lt;br /&gt;
&lt;br /&gt;
the returned pointer can be used to draw on the screen.&lt;br /&gt;
&lt;br /&gt;
Be sure to #include &amp;lt;linux/fb.h&amp;gt; to get access to the FB device ioctl interface, and &amp;lt;sys/ioctl.h&amp;gt; for access to ioctl itself.&lt;br /&gt;
&lt;br /&gt;
====double buffering====&lt;br /&gt;
This can be achieved using FBIOPAN_DISPLAY ioctl system call. For this you need to mmap framebuffer of double size&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
buffer1 = mmap(0, 800*480*2 * 2, PROT_WRITE, MAP_SHARED, fbdev, 0);&lt;br /&gt;
buffer2 = (char *)mem + 800*480*2;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then to display buffer2 you would call:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct fb_var_screeninfo fbvar;&lt;br /&gt;
ioctl(fbdev, FBIOGET_VSCREENINFO, &amp;amp;fbvar);&lt;br /&gt;
fbvar.yoffset = 480;&lt;br /&gt;
ioctl(fbdev, FBIOPAN_DISPLAY, &amp;amp;fbvar);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
going back to buffer1 would be repeating above with fbvar.yoffset = 0. Tripple or quad buffering can be implemented using the same technique.&lt;br /&gt;
&lt;br /&gt;
====vertical sync====&lt;br /&gt;
Linux has standard FBIO_WAITFORVSYNC for this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int arg = 0;&lt;br /&gt;
ioctl(fbdev, FBIO_WAITFORVSYNC, &amp;amp;arg);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
be sure to pass argument value 0 or it will not work.&lt;br /&gt;
&lt;br /&gt;
Some toolchains don't have FBIO_WAITFORVSYNC defined in &amp;lt;linux/fb.h&amp;gt;, in which case you can define it in the following manner:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#ifndef FBIO_WAITFORVSYNC&lt;br /&gt;
  #define FBIO_WAITFORVSYNC _IOW('F', 0x20, __u32)&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====hardware scaling====&lt;br /&gt;
Overlay1 (/dev/fb1) can be used to achieve hardware scaling. Technically overlay2 (fb2) can be used for this too, but it is planned to be used by the system for TV-out functionality, so don't use it. The overlay is configured using series of standard and OMAP specific ioctl calls, but the system ships with some tools to achieve this from scripts too. This way the framebuffer can be set up for some arbitrary size (say 320x240) and can output to LCD as 800x480 with hardware scaling.&lt;br /&gt;
Here is an example script:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ofbset -fb /dev/fb1 -pos 0 0 -size 800 480 -mem 307200 -en 1&lt;br /&gt;
fbset -fb /dev/fb1 -g 320 240 320 480 16&lt;br /&gt;
&lt;br /&gt;
./your_app_here&lt;br /&gt;
&lt;br /&gt;
ofbset -fb /dev/fb1 -pos 0 0 -size 0 0 -mem 0 -en 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What it does:&lt;br /&gt;
* allocates OMAP DSS layer, asks video output to be 800x480 at position 0,0 (could set it to 640x480 at 80,0 instead to get centered 2x scaling of 320x240). 307200 bytes of video memory are allocated for 2 320x240 16bpp screens (for doublebuffering).&lt;br /&gt;
* sets video mode to 320x240@16bpp, virtual resolution 320x480 for doublebuffering.&lt;br /&gt;
* runs your app&lt;br /&gt;
* cleans the video layer on exit&lt;br /&gt;
&lt;br /&gt;
Now the program can act as if it works with 320x240 16bpp screen.&lt;br /&gt;
&lt;br /&gt;
====LCD refresh rate====&lt;br /&gt;
The OS has a dedicated script which can change the LCD refresh rate. It must be ran with sudo:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
sudo -n /usr/pandora/scripts/op_lcdrate.sh 50&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
From code, system() function can be used for this.&lt;br /&gt;
&lt;br /&gt;
'''Note''': this doesn't mean your program has to run as root to use this (it never should!), just run the script as shown above.&lt;br /&gt;
&lt;br /&gt;
====gamma====&lt;br /&gt;
Since SZ 1.52, gamma can be controlled with another script, the same way as LCD refresh:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
sudo -n /usr/pandora/scripts/op_gamma.sh 1.0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
where 1.0 is the gamma level. If supplied gamma level is 0, then user defaults are used (useful to set on exit). There is also an optional -b N argument (to be specified before gamma value), where N controls black level (0-255, useful to combat LCD ghosting).&lt;br /&gt;
&lt;br /&gt;
===Hardware scaling filter control===&lt;br /&gt;
The hardware scaler in pandora uses poly-phase 5-tap 8-phase filter. It is described in 15.4.2.3.4 and 15.6.1.3 sections of TRM. There are 40 coefficients programmable for both horizontal and vertical resampling (vertical resampling might also use 3 taps/24 coefficients, it depends on available pixel clock).&lt;br /&gt;
====using predefined filters====&lt;br /&gt;
Just run 'sudo /usr/pandora/scripts/op_videofir.sh &amp;lt;name&amp;gt;', where name currently can be:&lt;br /&gt;
* default - the default filter from OMAP manual&lt;br /&gt;
* none - nearest neighbor&lt;br /&gt;
====using custom filters====&lt;br /&gt;
run 'sudo /usr/pandora/scripts/op_videofir.sh &amp;lt;basename&amp;gt;', where basename* files contains coefficient table. The script will look for &amp;lt;basename&amp;gt;_h, &amp;lt;basename&amp;gt;_v3 and &amp;lt;basename&amp;gt;_v5 files for 5-tap horizontal, 3-tap vertical and 5-tap vertical configurations respectively. Pass absolute or relative path for basename with './', like './something'. The coefficients should be in a form of table like described in TRM, for example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
  0   0 128   0   0&lt;br /&gt;
 -1  13 124  -8   0&lt;br /&gt;
 -2  30 112 -11  -1&lt;br /&gt;
 -5  51  95 -11  -2&lt;br /&gt;
  0  -9  73  73  -9&lt;br /&gt;
 -2 -11  95  51  -5&lt;br /&gt;
 -1 -11 112  30  -2&lt;br /&gt;
  0  -8 124  13  -1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
For 3-tap table, first and last columns should contain zeros.&lt;br /&gt;
&lt;br /&gt;
==LEDs and Display backlight==&lt;br /&gt;
The LEDs can be controlled via '''/sys/class/leds/''', and then a file [http://www.gp32x.com/board/index.php?s=&amp;amp;showtopic=45309&amp;amp;view=findpost&amp;amp;p=673593]:&lt;br /&gt;
* pandora::sd1&lt;br /&gt;
* pandora::sd2&lt;br /&gt;
* pandora::charger&lt;br /&gt;
* pandora::power&lt;br /&gt;
* pandora::bluetooth&lt;br /&gt;
* pandora::wifi&lt;br /&gt;
* pandora::keypad_bl&lt;br /&gt;
Backlight can be controlled via '''/sys/class/backlight/'''.&lt;br /&gt;
&lt;br /&gt;
==Battery==&lt;br /&gt;
There is bq27500 battery monitoring chip onboard, that exports various files at /sys/class/power_supply/bq27500-0/ , for example 'capacity' tells charge percenage left. See [[Data_provided_by_Battery_and_Power_driver]] for more details.&amp;lt;br&amp;gt;&lt;br /&gt;
There are also similar directories at /sys/class/power_supply/twl4030_* that provide info while charging.&lt;br /&gt;
&lt;br /&gt;
==Misc==&lt;br /&gt;
===Overclocking===&lt;br /&gt;
Can be performed by running a helper script&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo /usr/pandora/scripts/op_cpuspeed.sh X&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In case you want to do it from another program or non-interactively, you can use system() function (or similar) with:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo -n /usr/pandora/scripts/op_cpuspeed.sh -n X&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Note: you are advised not to change the clock explicitly from a program because optimal clock may differ on different pandora revisions, or somebody might want to run at different clock speed to save battery, CPU life, etc. . Let the user decide about the clock before running the program and set it using the system tools.&lt;br /&gt;
* Note: '-n' script argument is not available on pre-SuperZaxxon Final firmwares.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Kernel]]&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Kernel_interface&amp;diff=29119</id>
		<title>Kernel interface</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Kernel_interface&amp;diff=29119"/>
		<updated>2013-11-27T09:58:37Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{hint|For apps use higher level libraries/interfaces like SDL, Qt, X or similar for your own good (portability). It may be impossible to retain this layout on some major hardware revision, let's say Pandora 3000, and your program will break. Also this requires some level of Linux programming knowledge.}}&lt;br /&gt;
&lt;br /&gt;
In case you need to write low level code (you can't/don't want to use high level libs like [[SDL]]), you can use kernel interface. This is the recommended way to access hardware (as opposed to GP2X style of accessing chip registers by mmap'ing /dev/mem), because in case hardware changes are needed in future, they could be handled by kernel and all programs would still work. It also should allow several programs to work at the same time and should be more stable.&lt;br /&gt;
&lt;br /&gt;
==Input==&lt;br /&gt;
[[Buttons]], [[keypad]], [[touchscreen]] and [[nubs]] are all exposed through Linux event interface (EVDEV). All devices are represented by '''/dev/input/eventX''' files, which can be opened, read and queried (using ioctl calls). The reads can be synchronous (the read will only return when user does something, like presses the button), or asynchronous (the system will report what changed since the last time you asked).&lt;br /&gt;
&lt;br /&gt;
{{warning&lt;br /&gt;
|Don't hardcode device filenames in your program!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
For example, currently /dev/input/event2 represents game buttons, but in future it may become touchscreen. Scan input device names instead, example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (i = 0; 1; i++)&lt;br /&gt;
{&lt;br /&gt;
  sprintf(name, &amp;quot;/dev/input/event%i&amp;quot;, i);&lt;br /&gt;
  fd = open(name, O_RDONLY);&lt;br /&gt;
  if (fd &amp;lt; 0) break; /* no more devices */&lt;br /&gt;
  ioctl(fd, EVIOCGNAME(sizeof(name)), name);&lt;br /&gt;
  if (strcmp(name, &amp;quot;gpio-keys&amp;quot;) == 0)&lt;br /&gt;
    return fd; /* found the buttons! */&lt;br /&gt;
  close(fd); /* we don't need this device */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
List of device names and events they send:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!name&lt;br /&gt;
!description&lt;br /&gt;
!event.type&lt;br /&gt;
!event.code&lt;br /&gt;
!event.value&lt;br /&gt;
|-&lt;br /&gt;
|keypad&lt;br /&gt;
|keypad&lt;br /&gt;
|EV_KEY&lt;br /&gt;
|KEY_0...KEY_Z, KEY_BACKSPACE, KEY_LEFTSHIFT, KEY_SPACE, KEY_ENTER, KEY_COMMA, KEY_DOT, KEY_FN&lt;br /&gt;
|0 - released&amp;lt;br&amp;gt; 1 - pressed&amp;lt;br&amp;gt; 2 - autorepeat event&lt;br /&gt;
|-&lt;br /&gt;
|gpio-keys&lt;br /&gt;
|game buttons&lt;br /&gt;
|EV_KEY&lt;br /&gt;
|KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT, KEY_MENU (Pandora button), KEY_LEFTALT (Start), KEY_LEFTCTRL (Select), KEY_PAGEUP (Y/North), KEY_HOME (A/East), KEY_PAGEDOWN (X/South), KEY_END (B/West), KEY_RIGHTSHIFT (Shoulder L), KEY_RIGHTCTRL (Shoulder R), KEY_KPPLUS (Shoulder L2), KEY_KPMINUS (Shoulder R2), KEY_COFFEE (Hold)&lt;br /&gt;
|0 - released&amp;lt;br&amp;gt; 1 - pressed&lt;br /&gt;
|-&lt;br /&gt;
|gpio-keys&lt;br /&gt;
|lid state&lt;br /&gt;
|EV_SW&lt;br /&gt;
|SW_LID&lt;br /&gt;
|0 - closing&amp;lt;br&amp;gt; 1 - opening&lt;br /&gt;
|-&lt;br /&gt;
|touchscreen&lt;br /&gt;
|touchscreen&lt;br /&gt;
|EV_ABS&lt;br /&gt;
|ABS_X, ABS_Y, ABS_PRESSURE&lt;br /&gt;
|varies, use calibration data&lt;br /&gt;
|-&lt;br /&gt;
|nub0&lt;br /&gt;
|left nub&lt;br /&gt;
|EV_ABS&lt;br /&gt;
|ABS_X, ABS_Y&lt;br /&gt;
| -256 (Left/Up)&amp;lt;br&amp;gt;0&amp;lt;br&amp;gt;+256 (Right/Down)&lt;br /&gt;
|-&lt;br /&gt;
|nub1&lt;br /&gt;
|right nub&lt;br /&gt;
|EV_ABS&lt;br /&gt;
|ABS_X, ABS_Y&lt;br /&gt;
| -256 (Left/Up))&amp;lt;br&amp;gt;0&amp;lt;br&amp;gt;+256 (Right/Down)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sample code:&amp;lt;br&amp;gt;&lt;br /&gt;
[http://beagleboard.googlecode.com/files/evtest.c evtest.c]&lt;br /&gt;
[http://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-misc.git;a=blob;f=op_test_inputs.c;hb=HEAD op_test_inputs.c]&lt;br /&gt;
&lt;br /&gt;
===Nubs===&lt;br /&gt;
Nubs have 3 modes that can be switched during runtime: absolute, mouse, mbuttons; this can be done by writing one of those 3 strings to /proc/pandora/nubX/mode . On mode change /dev/input/event* device reenumeration starts and files belonging to nubs are recreated and must be reopened.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Warning:&amp;lt;/strong&amp;gt; it is not guaranteed that input files will finish recreating after a write to /proc/pandora/nubX/mode finishes, it is application's responsibility to wait until those files are available.&lt;br /&gt;
&lt;br /&gt;
To solve the above problem, the OS provides a helper script that will wait for enumeration to complete:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/usr/pandora/scripts/op_nubchange.sh &amp;lt;left_num_mode&amp;gt; &amp;lt;right_nub_mode&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
op_nubchange.sh is not available on HF6 or earlier firmwares, to support them, something like this could be used:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ -e /usr/pandora/scripts/op_nubchange.sh ]; then&lt;br /&gt;
  /usr/pandora/scripts/op_nubchange.sh absolute absolute&lt;br /&gt;
else&lt;br /&gt;
  echo absolute &amp;gt; /proc/pandora/nub0/mode&lt;br /&gt;
  echo absolute &amp;gt; /proc/pandora/nub1/mode&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Touchscreen===&lt;br /&gt;
Event interface returns uncalibrated values directly from driver, so you need to use tslib or manage calibration yourself (using data from /etc/pointercal).&lt;br /&gt;
&lt;br /&gt;
===X11===&lt;br /&gt;
When using the direct kernel api for input, it is also important to stop X processing the events as well. To do this you can create an X window to eat the events. There is also a utility that comes with the Pandora to do this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
op_runfbapp ./yourapp&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sound==&lt;br /&gt;
Pandora uses [[ALSA]], but it has [[OSS]] emulation enabled too, so [[GP2X]] code should work.&lt;br /&gt;
&lt;br /&gt;
==Video==&lt;br /&gt;
===Architecture===&lt;br /&gt;
Framebuffer device (/dev/fbX) is supported. There are 3 framebuffers available ('''/dev/fb0''', /dev/fb1 and /dev/fb2), which represent 3 graphics/video layers on [[OMAP3]] by default (but can be reconfigured). Only /dev/fb0 is enabled by default.&lt;br /&gt;
&lt;br /&gt;
[[OMAP3]] display subsystem is controlled by a driver known as [[DSS2]], which has various controls available on /sys/devices/platform/omapdss/ (but they are not meant to be changed by programs, so they are root writable only). The driver exposes 3 layers (called overlays) and 2 displays. Overlays 1 and 2 can perform hardware scaling on the fly using 5-tap poly-phase filter, overlay0 can not. Displays 0 and 1 represent LCD and TV respectively. By default the 3 framebuffers (/dev/fbX) are redirected to 3 overlays, which all output to the LCD. This configuration is not meant to be changed by programs, only firmware should manage these.&lt;br /&gt;
&lt;br /&gt;
===Basic usage===&lt;br /&gt;
====framebuffer interface====&lt;br /&gt;
Framebuffers can be accessed Linux fbdev interface:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
fbdev = open(&amp;quot;/dev/fb0&amp;quot;, O_RDWR);&lt;br /&gt;
buffer = mmap(0, 800*480*2, PROT_READ | PROT_WRITE, MAP_SHARED, fbdev, 0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
(this is basic example, no error checks)&lt;br /&gt;
&lt;br /&gt;
the returned pointer can be used to draw on the screen.&lt;br /&gt;
&lt;br /&gt;
Be sure to #include &amp;lt;linux/fb.h&amp;gt; to get access to the FB device ioctl interface, and &amp;lt;sys/ioctl.h&amp;gt; for access to ioctl itself.&lt;br /&gt;
&lt;br /&gt;
====double buffering====&lt;br /&gt;
This can be achieved using FBIOPAN_DISPLAY ioctl system call. For this you need to mmap framebuffer of double size&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
buffer1 = mmap(0, 800*480*2 * 2, PROT_WRITE, MAP_SHARED, fbdev, 0);&lt;br /&gt;
buffer2 = (char *)mem + 800*480*2;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then to display buffer2 you would call:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct fb_var_screeninfo fbvar;&lt;br /&gt;
ioctl(fbdev, FBIOGET_VSCREENINFO, &amp;amp;fbvar);&lt;br /&gt;
fbvar.yoffset = 480;&lt;br /&gt;
ioctl(fbdev, FBIOPAN_DISPLAY, &amp;amp;fbvar);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
going back to buffer1 would be repeating above with fbvar.yoffset = 0. Tripple or quad buffering can be implemented using the same technique.&lt;br /&gt;
&lt;br /&gt;
====vertical sync====&lt;br /&gt;
Linux has standard FBIO_WAITFORVSYNC for this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int arg = 0;&lt;br /&gt;
ioctl(fbdev, FBIO_WAITFORVSYNC, &amp;amp;arg);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
be sure to pass argument value 0 or it will not work.&lt;br /&gt;
&lt;br /&gt;
Some toolchains don't have FBIO_WAITFORVSYNC defined in &amp;lt;linux/fb.h&amp;gt;, in which case you can define it in the following manner:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#ifndef FBIO_WAITFORVSYNC&lt;br /&gt;
  #define FBIO_WAITFORVSYNC _IOW('F', 0x20, __u32)&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====hardware scaling====&lt;br /&gt;
Overlay1 (/dev/fb1) can be used to achieve hardware scaling. Technically overlay2 (fb2) can be used for this too, but it is planned to be used by the system for TV-out functionality, so don't use it. The overlay is configured using series of standard and OMAP specific ioctl calls, but the system ships with some tools to achieve this from scripts too. This way the framebuffer can be set up for some arbitrary size (say 320x240) and can output to LCD as 800x480 with hardware scaling.&lt;br /&gt;
Here is an example script:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ofbset -fb /dev/fb1 -pos 0 0 -size 800 480 -mem 307200 -en 1&lt;br /&gt;
fbset -fb /dev/fb1 -g 320 240 320 480 16&lt;br /&gt;
&lt;br /&gt;
./your_app_here&lt;br /&gt;
&lt;br /&gt;
ofbset -fb /dev/fb1 -pos 0 0 -size 0 0 -mem 0 -en 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What it does:&lt;br /&gt;
* allocates OMAP DSS layer, asks video output to be 800x480 at position 0,0 (could set it to 640x480 at 80,0 instead to get centered 2x scaling of 320x240). 307200 bytes of video memory are allocated for 2 320x240 16bpp screens (for doublebuffering).&lt;br /&gt;
* sets video mode to 320x240@16bpp, virtual resolution 320x480 for doublebuffering.&lt;br /&gt;
* runs your app&lt;br /&gt;
* cleans the video layer on exit&lt;br /&gt;
&lt;br /&gt;
Now the program can act as if it works with 320x240 16bpp screen.&lt;br /&gt;
&lt;br /&gt;
====LCD refresh rate====&lt;br /&gt;
The OS has a dedicated script which can change the LCD refresh rate. It must be ran with sudo:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
sudo -n /usr/pandora/scripts/op_lcdrate.sh 50&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
From code, system() function can be used for this.&lt;br /&gt;
&lt;br /&gt;
'''Note''': this doesn't mean your program has to run as root to use this (it never should!), just run the script as shown above.&lt;br /&gt;
&lt;br /&gt;
====gamma====&lt;br /&gt;
Since SZ 1.52, gamma can be controlled with another script, the same way as LCD refresh:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
sudo -n /usr/pandora/scripts/op_gamma.sh 1.0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
where 1.0 is the gamma level. If supplied gamma level is 0, then user defaults are used (useful to set on exit). There is also an optional -b N argument (to be specified before gamma value), where N controls black level (0-255, useful to combat LCD ghosting).&lt;br /&gt;
&lt;br /&gt;
===Hardware scaling filter control===&lt;br /&gt;
The hardware scaler in pandora uses poly-phase 5-tap 8-phase filter. It is described in 15.4.2.3.4 and 15.6.1.3 sections of TRM. There are 40 coefficients programmable for both horizontal and vertical resampling (vertical resampling might also use 3 taps/24 coefficients, it depends on available pixel clock).&lt;br /&gt;
====using predefined filters====&lt;br /&gt;
Just run 'sudo /usr/pandora/scripts/op_videofir.sh &amp;lt;name&amp;gt;', where name currently can be:&lt;br /&gt;
* default - the default filter from OMAP manual&lt;br /&gt;
* none - nearest neighbor&lt;br /&gt;
====using custom filters====&lt;br /&gt;
run 'sudo /usr/pandora/scripts/op_videofir.sh &amp;lt;basename&amp;gt;', where basename* files contains coefficient table. The script will look for &amp;lt;basename&amp;gt;_h, &amp;lt;basename&amp;gt;_v3 and &amp;lt;basename&amp;gt;_v5 files for 5-tap horizontal, 3-tap vertical and 5-tap vertical configurations respectively. Pass absolute or relative path for basename with './', like './something'. The coefficients should be in a form of table like described in TRM, for example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
  0   0 128   0   0&lt;br /&gt;
 -1  13 124  -8   0&lt;br /&gt;
 -2  30 112 -11  -1&lt;br /&gt;
 -5  51  95 -11  -2&lt;br /&gt;
  0  -9  73  73  -9&lt;br /&gt;
 -2 -11  95  51  -5&lt;br /&gt;
 -1 -11 112  30  -2&lt;br /&gt;
  0  -8 124  13  -1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
For 3-tap table, first and last columns should contain zeros.&lt;br /&gt;
&lt;br /&gt;
==LEDs and Display backlight==&lt;br /&gt;
The LEDs can be controlled via '''/sys/class/leds/''', and then a file [http://www.gp32x.com/board/index.php?s=&amp;amp;showtopic=45309&amp;amp;view=findpost&amp;amp;p=673593]:&lt;br /&gt;
* pandora::sd1&lt;br /&gt;
* pandora::sd2&lt;br /&gt;
* pandora::charger&lt;br /&gt;
* pandora::power&lt;br /&gt;
* pandora::bluetooth&lt;br /&gt;
* pandora::wifi&lt;br /&gt;
* pandora::keypad_bl&lt;br /&gt;
Backlight can be controlled via '''/sys/class/backlight/'''.&lt;br /&gt;
&lt;br /&gt;
==Battery==&lt;br /&gt;
There is bq27500 battery monitoring chip onboard, that exports various files at /sys/class/power_supply/bq27500-0/ , for example 'capacity' tells charge percenage left. See [[Data_provided_by_Battery_and_Power_driver]] for more details.&amp;lt;br&amp;gt;&lt;br /&gt;
There are also similar directories at /sys/class/power_supply/twl4030_* that provide info while charging.&lt;br /&gt;
&lt;br /&gt;
==Misc==&lt;br /&gt;
===Overclocking===&lt;br /&gt;
Can be performed by running a helper script&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo /usr/pandora/scripts/op_cpuspeed.sh X&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In case you want to do it from another program or non-interactively, you can use system() function (or similar) with:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo -n /usr/pandora/scripts/op_cpuspeed.sh -n X&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Note: you are advised not to change the clock explicitly from a program because optimal clock may differ on different pandora revisions, or somebody might want to run at different clock speed to save battery, CPU life, etc. . Let the user decide about the clock before running the program and set it using the system tools.&lt;br /&gt;
* Note: '-n' script argument is not available on pre-SuperZaxxon Final firmwares.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Kernel]]&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Kernel_interface&amp;diff=29118</id>
		<title>Kernel interface</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Kernel_interface&amp;diff=29118"/>
		<updated>2013-11-27T09:57:36Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{hint|For apps use higher level libraries/interfaces like SDL, Qt, X or similar for your own good (portability). It may be impossible to retain this layout on some major hardware revision, let's say Pandora 3000, and your program will break. Also this requires some level of Linux programming knowledge.}}&lt;br /&gt;
&lt;br /&gt;
In case you need to write low level code (you can't/don't want to use high level libs like [[SDL]]), you can use [[kernel]] interface. This is the recommended way to access hardware (as opposed to GP2X style of accessing chip registers by mmap'ing /dev/mem), because in case hardware changes are needed in future, they could be handled by kernel and all programs would still work. It also should allow several programs to work at the same time and should be more stable.&lt;br /&gt;
&lt;br /&gt;
==Input==&lt;br /&gt;
[[Buttons]], [[keypad]], [[touchscreen]] and [[nubs]] are all exposed through Linux event interface (EVDEV). All devices are represented by '''/dev/input/eventX''' files, which can be opened, read and queried (using ioctl calls). The reads can be synchronous (the read will only return when user does something, like presses the button), or asynchronous (the system will report what changed since the last time you asked).&lt;br /&gt;
&lt;br /&gt;
{{warning&lt;br /&gt;
|Don't hardcode device filenames in your program!&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
For example, currently /dev/input/event2 represents game buttons, but in future it may become touchscreen. Scan input device names instead, example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for (i = 0; 1; i++)&lt;br /&gt;
{&lt;br /&gt;
  sprintf(name, &amp;quot;/dev/input/event%i&amp;quot;, i);&lt;br /&gt;
  fd = open(name, O_RDONLY);&lt;br /&gt;
  if (fd &amp;lt; 0) break; /* no more devices */&lt;br /&gt;
  ioctl(fd, EVIOCGNAME(sizeof(name)), name);&lt;br /&gt;
  if (strcmp(name, &amp;quot;gpio-keys&amp;quot;) == 0)&lt;br /&gt;
    return fd; /* found the buttons! */&lt;br /&gt;
  close(fd); /* we don't need this device */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
List of device names and events they send:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!name&lt;br /&gt;
!description&lt;br /&gt;
!event.type&lt;br /&gt;
!event.code&lt;br /&gt;
!event.value&lt;br /&gt;
|-&lt;br /&gt;
|keypad&lt;br /&gt;
|keypad&lt;br /&gt;
|EV_KEY&lt;br /&gt;
|KEY_0...KEY_Z, KEY_BACKSPACE, KEY_LEFTSHIFT, KEY_SPACE, KEY_ENTER, KEY_COMMA, KEY_DOT, KEY_FN&lt;br /&gt;
|0 - released&amp;lt;br&amp;gt; 1 - pressed&amp;lt;br&amp;gt; 2 - autorepeat event&lt;br /&gt;
|-&lt;br /&gt;
|gpio-keys&lt;br /&gt;
|game buttons&lt;br /&gt;
|EV_KEY&lt;br /&gt;
|KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT, KEY_MENU (Pandora button), KEY_LEFTALT (Start), KEY_LEFTCTRL (Select), KEY_PAGEUP (Y/North), KEY_HOME (A/East), KEY_PAGEDOWN (X/South), KEY_END (B/West), KEY_RIGHTSHIFT (Shoulder L), KEY_RIGHTCTRL (Shoulder R), KEY_KPPLUS (Shoulder L2), KEY_KPMINUS (Shoulder R2), KEY_COFFEE (Hold)&lt;br /&gt;
|0 - released&amp;lt;br&amp;gt; 1 - pressed&lt;br /&gt;
|-&lt;br /&gt;
|gpio-keys&lt;br /&gt;
|lid state&lt;br /&gt;
|EV_SW&lt;br /&gt;
|SW_LID&lt;br /&gt;
|0 - closing&amp;lt;br&amp;gt; 1 - opening&lt;br /&gt;
|-&lt;br /&gt;
|touchscreen&lt;br /&gt;
|touchscreen&lt;br /&gt;
|EV_ABS&lt;br /&gt;
|ABS_X, ABS_Y, ABS_PRESSURE&lt;br /&gt;
|varies, use calibration data&lt;br /&gt;
|-&lt;br /&gt;
|nub0&lt;br /&gt;
|left nub&lt;br /&gt;
|EV_ABS&lt;br /&gt;
|ABS_X, ABS_Y&lt;br /&gt;
| -256 (Left/Up)&amp;lt;br&amp;gt;0&amp;lt;br&amp;gt;+256 (Right/Down)&lt;br /&gt;
|-&lt;br /&gt;
|nub1&lt;br /&gt;
|right nub&lt;br /&gt;
|EV_ABS&lt;br /&gt;
|ABS_X, ABS_Y&lt;br /&gt;
| -256 (Left/Up))&amp;lt;br&amp;gt;0&amp;lt;br&amp;gt;+256 (Right/Down)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sample code:&amp;lt;br&amp;gt;&lt;br /&gt;
[http://beagleboard.googlecode.com/files/evtest.c evtest.c]&lt;br /&gt;
[http://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-misc.git;a=blob;f=op_test_inputs.c;hb=HEAD op_test_inputs.c]&lt;br /&gt;
&lt;br /&gt;
===Nubs===&lt;br /&gt;
Nubs have 3 modes that can be switched during runtime: absolute, mouse, mbuttons; this can be done by writing one of those 3 strings to /proc/pandora/nubX/mode . On mode change /dev/input/event* device reenumeration starts and files belonging to nubs are recreated and must be reopened.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Warning:&amp;lt;/strong&amp;gt; it is not guaranteed that input files will finish recreating after a write to /proc/pandora/nubX/mode finishes, it is application's responsibility to wait until those files are available.&lt;br /&gt;
&lt;br /&gt;
To solve the above problem, the OS provides a helper script that will wait for enumeration to complete:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/usr/pandora/scripts/op_nubchange.sh &amp;lt;left_num_mode&amp;gt; &amp;lt;right_nub_mode&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
op_nubchange.sh is not available on HF6 or earlier firmwares, to support them, something like this could be used:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if [ -e /usr/pandora/scripts/op_nubchange.sh ]; then&lt;br /&gt;
  /usr/pandora/scripts/op_nubchange.sh absolute absolute&lt;br /&gt;
else&lt;br /&gt;
  echo absolute &amp;gt; /proc/pandora/nub0/mode&lt;br /&gt;
  echo absolute &amp;gt; /proc/pandora/nub1/mode&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Touchscreen===&lt;br /&gt;
Event interface returns uncalibrated values directly from driver, so you need to use tslib or manage calibration yourself (using data from /etc/pointercal).&lt;br /&gt;
&lt;br /&gt;
===X11===&lt;br /&gt;
When using the direct kernel api for input, it is also important to stop X processing the events as well. To do this you can create an X window to eat the events. There is also a utility that comes with the Pandora to do this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
op_runfbapp ./yourapp&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sound==&lt;br /&gt;
Pandora uses [[ALSA]], but it has [[OSS]] emulation enabled too, so [[GP2X]] code should work.&lt;br /&gt;
&lt;br /&gt;
==Video==&lt;br /&gt;
===Architecture===&lt;br /&gt;
Framebuffer device (/dev/fbX) is supported. There are 3 framebuffers available ('''/dev/fb0''', /dev/fb1 and /dev/fb2), which represent 3 graphics/video layers on [[OMAP3]] by default (but can be reconfigured). Only /dev/fb0 is enabled by default.&lt;br /&gt;
&lt;br /&gt;
[[OMAP3]] display subsystem is controlled by a driver known as [[DSS2]], which has various controls available on /sys/devices/platform/omapdss/ (but they are not meant to be changed by programs, so they are root writable only). The driver exposes 3 layers (called overlays) and 2 displays. Overlays 1 and 2 can perform hardware scaling on the fly using 5-tap poly-phase filter, overlay0 can not. Displays 0 and 1 represent LCD and TV respectively. By default the 3 framebuffers (/dev/fbX) are redirected to 3 overlays, which all output to the LCD. This configuration is not meant to be changed by programs, only firmware should manage these.&lt;br /&gt;
&lt;br /&gt;
===Basic usage===&lt;br /&gt;
====framebuffer interface====&lt;br /&gt;
Framebuffers can be accessed Linux fbdev interface:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
fbdev = open(&amp;quot;/dev/fb0&amp;quot;, O_RDWR);&lt;br /&gt;
buffer = mmap(0, 800*480*2, PROT_READ | PROT_WRITE, MAP_SHARED, fbdev, 0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
(this is basic example, no error checks)&lt;br /&gt;
&lt;br /&gt;
the returned pointer can be used to draw on the screen.&lt;br /&gt;
&lt;br /&gt;
Be sure to #include &amp;lt;linux/fb.h&amp;gt; to get access to the FB device ioctl interface, and &amp;lt;sys/ioctl.h&amp;gt; for access to ioctl itself.&lt;br /&gt;
&lt;br /&gt;
====double buffering====&lt;br /&gt;
This can be achieved using FBIOPAN_DISPLAY ioctl system call. For this you need to mmap framebuffer of double size&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
buffer1 = mmap(0, 800*480*2 * 2, PROT_WRITE, MAP_SHARED, fbdev, 0);&lt;br /&gt;
buffer2 = (char *)mem + 800*480*2;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then to display buffer2 you would call:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct fb_var_screeninfo fbvar;&lt;br /&gt;
ioctl(fbdev, FBIOGET_VSCREENINFO, &amp;amp;fbvar);&lt;br /&gt;
fbvar.yoffset = 480;&lt;br /&gt;
ioctl(fbdev, FBIOPAN_DISPLAY, &amp;amp;fbvar);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
going back to buffer1 would be repeating above with fbvar.yoffset = 0. Tripple or quad buffering can be implemented using the same technique.&lt;br /&gt;
&lt;br /&gt;
====vertical sync====&lt;br /&gt;
Linux has standard FBIO_WAITFORVSYNC for this:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int arg = 0;&lt;br /&gt;
ioctl(fbdev, FBIO_WAITFORVSYNC, &amp;amp;arg);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
be sure to pass argument value 0 or it will not work.&lt;br /&gt;
&lt;br /&gt;
Some toolchains don't have FBIO_WAITFORVSYNC defined in &amp;lt;linux/fb.h&amp;gt;, in which case you can define it in the following manner:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#ifndef FBIO_WAITFORVSYNC&lt;br /&gt;
  #define FBIO_WAITFORVSYNC _IOW('F', 0x20, __u32)&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====hardware scaling====&lt;br /&gt;
Overlay1 (/dev/fb1) can be used to achieve hardware scaling. Technically overlay2 (fb2) can be used for this too, but it is planned to be used by the system for TV-out functionality, so don't use it. The overlay is configured using series of standard and OMAP specific ioctl calls, but the system ships with some tools to achieve this from scripts too. This way the framebuffer can be set up for some arbitrary size (say 320x240) and can output to LCD as 800x480 with hardware scaling.&lt;br /&gt;
Here is an example script:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ofbset -fb /dev/fb1 -pos 0 0 -size 800 480 -mem 307200 -en 1&lt;br /&gt;
fbset -fb /dev/fb1 -g 320 240 320 480 16&lt;br /&gt;
&lt;br /&gt;
./your_app_here&lt;br /&gt;
&lt;br /&gt;
ofbset -fb /dev/fb1 -pos 0 0 -size 0 0 -mem 0 -en 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What it does:&lt;br /&gt;
* allocates OMAP DSS layer, asks video output to be 800x480 at position 0,0 (could set it to 640x480 at 80,0 instead to get centered 2x scaling of 320x240). 307200 bytes of video memory are allocated for 2 320x240 16bpp screens (for doublebuffering).&lt;br /&gt;
* sets video mode to 320x240@16bpp, virtual resolution 320x480 for doublebuffering.&lt;br /&gt;
* runs your app&lt;br /&gt;
* cleans the video layer on exit&lt;br /&gt;
&lt;br /&gt;
Now the program can act as if it works with 320x240 16bpp screen.&lt;br /&gt;
&lt;br /&gt;
====LCD refresh rate====&lt;br /&gt;
The OS has a dedicated script which can change the LCD refresh rate. It must be ran with sudo:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
sudo -n /usr/pandora/scripts/op_lcdrate.sh 50&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
From code, system() function can be used for this.&lt;br /&gt;
&lt;br /&gt;
'''Note''': this doesn't mean your program has to run as root to use this (it never should!), just run the script as shown above.&lt;br /&gt;
&lt;br /&gt;
====gamma====&lt;br /&gt;
Since SZ 1.52, gamma can be controlled with another script, the same way as LCD refresh:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
sudo -n /usr/pandora/scripts/op_gamma.sh 1.0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
where 1.0 is the gamma level. If supplied gamma level is 0, then user defaults are used (useful to set on exit). There is also an optional -b N argument (to be specified before gamma value), where N controls black level (0-255, useful to combat LCD ghosting).&lt;br /&gt;
&lt;br /&gt;
===Hardware scaling filter control===&lt;br /&gt;
The hardware scaler in pandora uses poly-phase 5-tap 8-phase filter. It is described in 15.4.2.3.4 and 15.6.1.3 sections of TRM. There are 40 coefficients programmable for both horizontal and vertical resampling (vertical resampling might also use 3 taps/24 coefficients, it depends on available pixel clock).&lt;br /&gt;
====using predefined filters====&lt;br /&gt;
Just run 'sudo /usr/pandora/scripts/op_videofir.sh &amp;lt;name&amp;gt;', where name currently can be:&lt;br /&gt;
* default - the default filter from OMAP manual&lt;br /&gt;
* none - nearest neighbor&lt;br /&gt;
====using custom filters====&lt;br /&gt;
run 'sudo /usr/pandora/scripts/op_videofir.sh &amp;lt;basename&amp;gt;', where basename* files contains coefficient table. The script will look for &amp;lt;basename&amp;gt;_h, &amp;lt;basename&amp;gt;_v3 and &amp;lt;basename&amp;gt;_v5 files for 5-tap horizontal, 3-tap vertical and 5-tap vertical configurations respectively. Pass absolute or relative path for basename with './', like './something'. The coefficients should be in a form of table like described in TRM, for example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
  0   0 128   0   0&lt;br /&gt;
 -1  13 124  -8   0&lt;br /&gt;
 -2  30 112 -11  -1&lt;br /&gt;
 -5  51  95 -11  -2&lt;br /&gt;
  0  -9  73  73  -9&lt;br /&gt;
 -2 -11  95  51  -5&lt;br /&gt;
 -1 -11 112  30  -2&lt;br /&gt;
  0  -8 124  13  -1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
For 3-tap table, first and last columns should contain zeros.&lt;br /&gt;
&lt;br /&gt;
==LEDs and Display backlight==&lt;br /&gt;
The LEDs can be controlled via '''/sys/class/leds/''', and then a file [http://www.gp32x.com/board/index.php?s=&amp;amp;showtopic=45309&amp;amp;view=findpost&amp;amp;p=673593]:&lt;br /&gt;
* pandora::sd1&lt;br /&gt;
* pandora::sd2&lt;br /&gt;
* pandora::charger&lt;br /&gt;
* pandora::power&lt;br /&gt;
* pandora::bluetooth&lt;br /&gt;
* pandora::wifi&lt;br /&gt;
* pandora::keypad_bl&lt;br /&gt;
Backlight can be controlled via '''/sys/class/backlight/'''.&lt;br /&gt;
&lt;br /&gt;
==Battery==&lt;br /&gt;
There is bq27500 battery monitoring chip onboard, that exports various files at /sys/class/power_supply/bq27500-0/ , for example 'capacity' tells charge percenage left. See [[Data_provided_by_Battery_and_Power_driver]] for more details.&amp;lt;br&amp;gt;&lt;br /&gt;
There are also similar directories at /sys/class/power_supply/twl4030_* that provide info while charging.&lt;br /&gt;
&lt;br /&gt;
==Misc==&lt;br /&gt;
===Overclocking===&lt;br /&gt;
Can be performed by running a helper script&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo /usr/pandora/scripts/op_cpuspeed.sh X&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
In case you want to do it from another program or non-interactively, you can use system() function (or similar) with:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo -n /usr/pandora/scripts/op_cpuspeed.sh -n X&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Note: you are advised not to change the clock explicitly from a program because optimal clock may differ on different pandora revisions, or somebody might want to run at different clock speed to save battery, CPU life, etc. . Let the user decide about the clock before running the program and set it using the system tools.&lt;br /&gt;
* Note: '-n' script argument is not available on pre-SuperZaxxon Final firmwares.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Kernel]]&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=28099</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=28099"/>
		<updated>2013-10-09T22:16:43Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &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;
In order to instruct the compiler to produce NEON or VFP code you should use the following compile flags: &amp;lt;pre&amp;gt;-mfpu=neon or -mfpu=vfp&amp;lt;/pre&amp;gt;&lt;br /&gt;
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:&lt;br /&gt;
&amp;lt;pre&amp;gt;-O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=(softfp|hard) -ffast-math -fsingle-precision-constant&amp;lt;/pre&amp;gt;&lt;br /&gt;
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;
In order 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 as well, 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 in order 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 in order 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 as well not bother trying to outperform 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. In fact it is almost the opposite, you can almost always make significant gains via targeting the NEON. Therefore, In order 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&lt;br /&gt;
&amp;lt;pre&amp;gt; -O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=(softfp|hard) -ffast-math -fsingle-precision-constant&amp;lt;/pre&amp;gt;&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;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Chipset]]&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=28098</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=28098"/>
		<updated>2013-10-09T22:12:25Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &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;
In order to instruct the compiler to produce NEON or VFP code you should use the following compile flags: &amp;lt;pre&amp;gt;-mfpu=neon or -mfpu=vfp&amp;lt;/pre&amp;gt;&lt;br /&gt;
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:&lt;br /&gt;
&amp;lt;pre&amp;gt;-O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=(softfp|hard) -ffast-math -fsingle-precision-constant&amp;lt;/pre&amp;gt;&lt;br /&gt;
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;
In order 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 as well, 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 in order 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 in order 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 as well not bother trying to outperform 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. In fact it is almost the opposite, you can almost always make significant gains via targeting the [[NEON]]. Therefore, In order 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&lt;br /&gt;
&amp;lt;pre&amp;gt; -O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=(softfp|hard) -ffast-math -fsingle-precision-constant&amp;lt;/pre&amp;gt;&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;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Chipset]]&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=28096</id>
		<title>Floating Point Optimization</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Floating_Point_Optimization&amp;diff=28096"/>
		<updated>2013-10-09T21:59:04Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &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;
In order to instruct the compiler to produce NEON or VFP code you should use the following compile flags: &amp;lt;pre&amp;gt;-mfpu=neon or -mfpu=vfp&amp;lt;/pre&amp;gt;&lt;br /&gt;
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:&lt;br /&gt;
&amp;lt;pre&amp;gt;-O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=(softfp|hard) -ffast-math -fsingle-precision-constant&amp;lt;/pre&amp;gt;&lt;br /&gt;
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;
In order 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 as well, 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 in order 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 in order 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 as well not bother trying to outperform 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. In fact it is almost the opposite, you can almost always make significant gains via targeting the [[NEON]]. Therefore, In order 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&lt;br /&gt;
&amp;lt;pre&amp;gt; -O3 -mcpu=cortex-a8 -mfpu=neon -ftree-vectorize -mfloat-abi=(softfp|hard) -ffast-math -fsingle-precision-constant&amp;lt;/pre&amp;gt;&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;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Chipset]]&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27715</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27715"/>
		<updated>2013-09-13T23:45:04Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Hardware documentation|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;HARDWARE DOCUMENTATION&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Hardware Hacking‏‎]] || •[[Configuring ext signals‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[USB reference‏‎]] || •[[USB compatibility list‏‎]]&lt;br /&gt;
|- &lt;br /&gt;
| •[[SD compat. list]] || •[[Formatting]] || •[[Backup SD inst.to SD]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Display]] || •[[LEDs and backlight]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[NAND‏]] || ‎•[[Swap]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[WiFi‏‎]] || •[[Wireless from the Terminal]] ||‏‎ •[[Bluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Audio system]] || •[[MIDI]]‏‎ || •[[Microphone‏]]‎&lt;br /&gt;
|-&lt;br /&gt;
| •[[Keyboard‏]]‎ || •[[Nubs‏‎]] || •[[Wiimote]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Power modes‏]] || •[[Overclocking‏‎]] || •[[Hardware defects]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[GPS‏]] || •[[Mobile Broadband]] || •[[dvb-t]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |•[[Software projects|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;SOFTWARE PROJECTS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Ångström]] || •[[Basic Linux Guide‏]] || ‎•[[Reporting bugs]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Extend Utils]] || •[[Kernel build instructions]]‏ || •[[Interface]] •[[Status]]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| •[[Debian On SD‏‎]] •[[Android]]• || [[‎RISC OS‏]] ‎•[[Soleil]] || • [[Slackware]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[‎Games]]‏‎  •[[Unreleased]]‏‎ || •[[Pandora Bounties]]‏‎ || •[[Port Requests]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[PickleLauncher]] || ‏‎•[[MogsVsDogs]] || •[[Greyout]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[NetKeen]] ||  •[[Pencil]] || •[[NoteCase Pro‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Emulators|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;EMULATORS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Legal Emulation Resources‏‎]] || •[[Emulator List]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[QEMU‏‎]] || •[[QEMU Premade Images]]‏‎ || •[[QEMU Compatibility]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[DOSBox‏]] || •[[compat list]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PCSX-ReARMed‏‎]] || •[[Creating images of PSX games using Linux]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[UAE4ALL‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[MEME4ALL]] || ‏‎•[[MAME]] || ‏‎•[[PanMAME]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Mupen64plus dynamic recompiler‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PicoDrive]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[SNES9X4P‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[DraStic Compatibility List‏‎]] || •[[compat list 1.x]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Compo4All]] || •[[Compo4AllSDK‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[ResidualVM‏‎]] || •[[ScummVM‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Emul. ARM sys on win‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Gui|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;GUI&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[OpenBox‏‎]] &lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Minimenu]]‏‎ || •[[Configuration‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Screenshot]] || •[[Wallpaper cronjob]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[development|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;DEVELOPMENT&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Development tutorials]] || •[[Development Tools‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[SGX drivers]] || •[[SDL]]‏‎ || •[[SDL Controls‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Floating Point Optimization‏‎]] || •[[Assembly Optimization‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Porting to GLES from GL‏]]‎ || •[[Porting guide‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[GLES]] || •[[window]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[GLESGAE‏‎]] || •[[GLBasic tutorial]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[cross-compiler‏‎‏‎]] || •[[Compile on the Pandora]]&lt;br /&gt;
|- &lt;br /&gt;
| [[Client repo API]] || [[Repo delta transfers]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PND repo spec‏‎]] || •[[PND nub modes]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Introduction to PNDs‏]] || •[[PND:FAQ‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Make and run simple PND‏‎]] || •[[Mounting a PND‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Libpnd hub‏‎]] || •[[PND management workflow‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PXML specification]]‏‎ || •[[PXML archetype‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PND Cookbook‏‎]] || •[[New PND format]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Team|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;TEAM&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Community Links‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[IRC‏]]‎ || •[[Wiki TODO]] || ‏‎•[[Donations‏‎]]  &lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Multisite username check]]&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27714</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27714"/>
		<updated>2013-09-13T23:44:41Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Hardware documentation|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;HARDWARE DOCUMENTATION&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Hardware Hacking‏‎]] || •[[Configuring ext signals‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[USB reference‏‎]] || •[[USB compatibility list‏‎]]&lt;br /&gt;
|- &lt;br /&gt;
| •[[SD compat. list]] || •[[Formatting]] || •[[Backup SD inst.to SD]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Display]] || •[[LEDs and backlight]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[NAND‏]] || ‎•[[Swap]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[WiFi‏‎]] || •[[Wireless from the Terminal]] ||‏‎ •[[Bluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Audio system]] || •[[MIDI]]‏‎ || •[[Microphone‏]]‎&lt;br /&gt;
|-&lt;br /&gt;
| •[[Keyboard‏]]‎ || •[[Nubs‏‎]] || •[[Wiimote]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Power modes‏]] || •[[Overclocking‏‎]] || •[[Hardware defects]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[GPS‏]] || •[[Mobile Broadband]] || •[[dvb-t]]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |•[[Software projects|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;SOFTWARE PROJECTS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Ångström]] || •[[Basic Linux Guide‏]] || ‎•[[Reporting bugs]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Extend Utils]] || •[[Kernel build instructions]]‏ || •[[Interface]] •[[Status]]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| •[[Debian On SD‏‎]] •[[Android]]• || [[‎RISC OS‏]] ‎•[[Soleil]] || • [[Slackware]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[‎Games]]‏‎  •[[Unreleased]]‏‎ || •[[Pandora Bounties]]‏‎ || •[[Port Requests]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[PickleLauncher]] || ‏‎•[[MogsVsDogs]] || •[[Greyout]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[NetKeen]] ||  •[[Pencil]] || •[[NoteCase Pro‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Emulators|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;EMULATORS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Legal Emulation Resources‏‎]] || •[[Emulator List]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[QEMU‏‎]] || •[[QEMU Premade Images]]‏‎ || •[[QEMU Compatibility]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[DOSBox‏]] || •[[compat list]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PCSX-ReARMed‏‎]] || •[[Creating images of PSX games using Linux]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[UAE4ALL‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[MEME4ALL]] || ‏‎•[[MAME]] || ‏‎•[[PanMAME]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Mupen64plus dynamic recompiler‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PicoDrive]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[SNES9X4P‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[DraStic Compatibility List‏‎]] || •[[compat list 1.x]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Compo4All]] || •[[Compo4AllSDK‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[ResidualVM‏‎]] || •[[ScummVM‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Emul. ARM sys on win‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Gui|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;GUI&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[OpenBox‏‎]] &lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Minimenu]]‏‎ || •[[Configuration‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Screenshot]] || •[[Wallpaper cronjob]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[development|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;DEVELOPMENT&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Development tutorials]] || •[[Development Tools‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[SGX drivers]] || •[[SDL]]‏‎ || •[[SDL Controls‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Floating Point Optimization‏‎]] || •[[Assembly Optimization‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Porting to GLES from GL‏]]‎ || •[[Porting guide‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[GLES]] || •[[window]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[GLESGAE‏‎]] || •[[GLBasic tutorial]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[cross-compiler‏‎‏‎]] || •[[Compile on the Pandora]]&lt;br /&gt;
|- &lt;br /&gt;
| [[Client repo API]] || [[Repo delta transfers]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PND repo spec‏‎]] || •[[PND nub modes]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Introduction to PNDs‏]] || •[[PND:FAQ‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Make and run simple PND‏‎]] || •[[Mounting a PND‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Libpnd hub‏‎]] || •[[PND management workflow‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PXML specification]]‏‎ || •[[PXML archetype‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PND Cookbook‏‎]] || •[[New PND format]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Team|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;TEAM&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Community Links‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[IRC‏]]‎ || •[[Wiki TODO]] || ‏‎•[[Donations‏‎]]  &lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Multisite username check]]&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27713</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27713"/>
		<updated>2013-09-13T23:41:29Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Hardware documentation|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;HARDWARE DOCUMENTATION&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Hardware Hacking‏‎]] || •[[Configuring ext signals‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[USB reference‏‎]] || •[[USB compatibility list‏‎]]&lt;br /&gt;
|- &lt;br /&gt;
| •[[SD compat. list]] || •[[Formatting]] || •[[Backup SD inst.to SD]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Display]] || •[[LEDs and backlight]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[NAND‏]] || ‎•[[Swap]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[WiFi‏‎]] || •[[Wireless from the Terminal]] ||‏‎ •[[Bluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Audio system]] || •[[MIDI]]‏‎ || •[[Microphone‏]]‎&lt;br /&gt;
|-&lt;br /&gt;
| •[[Keyboard‏]]‎ || •[[Nubs‏‎]] || •[[Wiimote]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Power modes‏]] || •[[Overclocking‏‎]] || •[[Hardware defects]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[GPS‏]] || •[[Mobile Broadband]] || •[[dvb-t]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |•[[Software projects|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;SOFTWARE PROJECTS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Ångström]] || •[[Basic Linux Guide‏]] || ‎•[[Reporting bugs]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Extend Utils]] || •[[Kernel build instructions]]‏ || •[[Interface]] •[[Status]]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| •[[Debian On SD‏‎]] •[[Android]]• || [[‎RISC OS‏]] ‎•[[Soleil]] || • [[Slackware]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[‎Games]]‏‎  •[[Unreleased]]‏‎ || •[[Pandora Bounties]]‏‎ || •[[Port Requests]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[PickleLauncher]] || ‏‎•[[MogsVsDogs]] || •[[Greyout]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[NetKeen]] ||  •[[Pencil]] || •[[NoteCase Pro‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Emulators|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;EMULATORS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Legal Emulation Resources‏‎]] || •[[Emulator List]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[QEMU‏‎]] || •[[QEMU Premade Images]]‏‎ || •[[QEMU Compatibility]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[DOSBox‏]] || •[[compat list]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PCSX-ReARMed‏‎]] || •[[Creating images of PSX games using Linux]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[UAE4ALL‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[MEME4ALL]] || ‏‎•[[MAME]] || ‏‎•[[PanMAME]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Mupen64plus dynamic recompiler‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PicoDrive]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[SNES9X4P‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[DraStic Compatibility List‏‎]] || •[[compat list 1.x]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Compo4All]] || •[[Compo4AllSDK‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[ResidualVM‏‎]] || •[[ScummVM‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Emul. ARM sys on win‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Gui|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;GUI&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[OpenBox‏‎]] &lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Minimenu]]‏‎ || •[[Configuration‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Screenshot]] || •[[Wallpaper cronjob]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[development|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;DEVELOPMENT&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Development tutorials]] || •[[Development Tools‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[SGX drivers]] || •[[SDL]]‏‎ || •[[SDL Controls‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Floating Point Optimization‏‎]] || •[[Assembly Optimization‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Porting to GLES from GL‏]]‎ || •[[Porting guide‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[GLES]] || •[[window]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[GLESGAE‏‎]] || •[[GLBasic tutorial]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[cross-compiler‏‎‏‎]] || •[[Compile on the Pandora]]&lt;br /&gt;
|- &lt;br /&gt;
| [[Client repo API]] || [[Repo delta transfers]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PND repo spec‏‎]] || •[[PND nub modes]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Introduction to PNDs‏]] || •[[PND:FAQ‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Make and run simple PND‏‎]] || •[[Mounting a PND‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Libpnd hub‏‎]] || •[[PND management workflow‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PXML specification]]‏‎ || •[[PXML archetype‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PND Cookbook‏‎]] || •[[New PND format]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Team|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;TEAM&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Community Links‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[IRC‏]]‎ || •[[Wiki TODO]] || ‏‎•[[Donations‏‎]]  &lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Multisite username check]]&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27712</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27712"/>
		<updated>2013-09-13T23:40:29Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Hardware documentation|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;HARDWARE DOCUMENTATION&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Hardware Hacking‏‎]] || •[[Configuring ext signals‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[USB reference‏‎]] || •[[USB compatibility list‏‎]]&lt;br /&gt;
|- &lt;br /&gt;
| •[[SD compat. list]] || •[[Formatting]] || •[[Backup SD inst.to SD]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Display]] || •[[LEDs and backlight]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[NAND‏]] || ‎•[[Swap]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[WiFi‏‎]] || •[[Wireless from the Terminal]] ||‏‎ •[[Bluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Audio system]] || •[[MIDI]]‏‎ || •[[Microphone‏]]‎&lt;br /&gt;
|-&lt;br /&gt;
| •[[Keyboard‏]]‎ || •[[Nubs‏‎]] || •[[Wiimote]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Power modes‏]] || •[[Overclocking‏‎]] || •[[Hardware defects]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[GPS‏]] || •[[Mobile Broadband]] || •[[dvb-t]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |•[[Software projects|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;SOFTWARE PROJECTS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Ångström]] || •[[Basic Linux Guide‏]] || ‎•[[Reporting bugs]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Extend Utils]] || •[[Kernel build instructions]]‏ || •[[Interface]] •[[Status]]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| •[[Debian On SD‏‎]] •[[Android]]• || [[‎RISC OS‏]] ‎•[[Soleil]] || • [[Slackware]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[‎Games]]‏‎  •[[Unreleased]]‏‎ || •[[Pandora Bounties]]‏‎ || •[[Port Requests]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[PickleLauncher]] || ‏‎•[[MogsVsDogs]] || •[[Greyout]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[NetKeen]] ||  •[[Pencil]] || •[[NoteCase Pro‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Emulators|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;EMULATORS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Legal Emulation Resources‏‎]] || •[[Emulator List]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[QEMU‏‎]] || •[[QEMU Premade Images]]‏‎ || •[[QEMU Compatibility]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[DOSBox‏]] || •[[compat list]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PCSX-ReARMed‏‎]] || •[[Creating images of PSX games using Linux]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[UAE4ALL‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[MEME4ALL]] || ‏‎•[[MAME]] || ‏‎•[[PanMAME]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Mupen64plus dynamic recompiler‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PicoDrive]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[SNES9X4P‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[DraStic Compatibility List‏‎]] || •[[compat list 1.x]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Compo4All]] || •[[Compo4AllSDK‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[ResidualVM‏‎]] || •[[ScummVM‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Emul. ARM sys on win‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Gui|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;GUI&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[OpenBox‏‎]] &lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Minimenu]]‏‎ || •[[Configuration‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Screenshot]] || •[[Wallpaper cronjob]]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Getting started with pandora development|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;GETTING STARTED WITH PANDORA DEVELOPMENT&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Development tutorials]] || •[[Development Tools‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[SGX drivers]] || •[[SDL]]‏‎ || •[[SDL Controls‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Floating Point Optimization‏‎]] || •[[Assembly Optimization‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Porting to GLES from GL‏]]‎ || •[[Porting guide‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[GLES]] || •[[window]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[GLESGAE‏‎]] || •[[GLBasic tutorial]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[cross-compiler‏‎‏‎]] || •[[Compile on the Pandora]]&lt;br /&gt;
|- &lt;br /&gt;
| [[Client repo API]] || [[Repo delta transfers]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PND repo spec‏‎]] || •[[PND nub modes]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Introduction to PNDs‏]] || •[[PND:FAQ‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Make and run simple PND‏‎]] || •[[Mounting a PND‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Libpnd hub‏‎]] || •[[PND management workflow‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PXML specification]]‏‎ || •[[PXML archetype‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PND Cookbook‏‎]] || •[[New PND format]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Team|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;TEAM&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Community Links‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[IRC‏]]‎ || •[[Wiki TODO]] || ‏‎•[[Donations‏‎]]  &lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Multisite username check]]&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27711</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27711"/>
		<updated>2013-09-13T23:39:37Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Hardware documentation|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;HARDWARE DOCUMENTATION&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Hardware Hacking‏‎]] || •[[Configuring ext signals‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[USB reference‏‎]] || •[[USB compatibility list‏‎]]&lt;br /&gt;
|- &lt;br /&gt;
| •[[SD compat. list]] || •[[Formatting]] || •[[Backup SD inst.to SD]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Display]] || •[[LEDs and backlight]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[NAND‏]] || ‎•[[Swap]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[WiFi‏‎]] || •[[Wireless from the Terminal]] ||‏‎ •[[Bluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Audio system]] || •[[MIDI]]‏‎ || •[[Microphone‏]]‎&lt;br /&gt;
|-&lt;br /&gt;
| •[[Keyboard‏]]‎ || •[[Nubs‏‎]] || •[[Wiimote]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Power modes‏]] || •[[Overclocking‏‎]] || •[[Hardware defects]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[GPS‏]] || •[[Mobile Broadband]] || •[[dvb-t]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |•[[Software projects|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;SOFTWARE PROJECTS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Ångström]] || •[[Basic Linux Guide‏]] || ‎•[[Reporting bugs]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Extend Utils]] || •[[Kernel build instructions]]‏ || •[[Interface]] •[[Status]]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| •[[Debian On SD‏‎]] •[[Android]]• || [[‎RISC OS‏]] ‎•[[Soleil]] || • [[Slackware]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[‎Games]]‏‎  •[[Unreleased]]‏‎ || •[[Pandora Bounties]]‏‎ || •[[Port Requests]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[PickleLauncher]] || ‏‎•[[MogsVsDogs]] || •[[Greyout]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[NetKeen]] ||  •[[Pencil]] || •[[NoteCase Pro‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Emulators|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;EMULATORS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Legal Emulation Resources‏‎]] || •[[Emulator List]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[QEMU‏‎]] || •[[QEMU Premade Images]]‏‎ || •[[QEMU Compatibility]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[DOSBox‏]] || •[[compat list]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PCSX-ReARMed‏‎]] || •[[Creating images of PSX games using Linux]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[UAE4ALL‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[MEME4ALL]] || ‏‎•[[MAME]] || ‏‎•[[PanMAME]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Mupen64plus dynamic recompiler‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PicoDrive]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[SNES9X4P‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[DraStic Compatibility List‏‎]] || •[[compat list 1.x]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Compo4All]] || •[[Compo4AllSDK‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[ResidualVM‏‎]] || •[[ScummVM‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Emul. ARM sys on win‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Gui|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;GUI&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[OpenBox‏‎]] &lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Minimenu]]‏‎ || •[[Configuration‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Screenshot]] || •[[Wallpaper cronjob]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Getting started with pandora development|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;GETTING STARTED WITH PANDORA DEVELOPMENT&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Development tutorials]] || •[[Development Tools‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[SGX drivers]] || •[[SDL]]‏‎ || •[[SDL Controls‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Floating Point Optimization‏‎]] || •[[Assembly Optimization‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Porting to GLES from GL‏]]‎ || •[[Porting guide‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[GLES]] || •[[window]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[GLESGAE‏‎]] || •[[GLBasic tutorial]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[cross-compiler‏‎‏‎]] || •[[Compile on the Pandora]]&lt;br /&gt;
|- &lt;br /&gt;
| [[Client repo API]] || [[Repo delta transfers]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PND repo spec‏‎]] || •[[PND nub modes]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Introduction to PNDs‏]] || •[[PND:FAQ‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Make and run simple PND‏‎]] || •[[Mounting a PND‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Libpnd hub‏‎]] || •[[PND management workflow‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PXML specification]]‏‎ || •[[PXML archetype‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PND Cookbook‏‎]] || •[[New PND format]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Team|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;TEAM&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Community Links‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[IRC‏]]‎ || •[[Wiki TODO]] || ‏‎•[[Donations‏‎]]  &lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Multisite username check]]&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27710</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27710"/>
		<updated>2013-09-13T23:38:28Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Hardware documentation|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;HARDWARE DOCUMENTATION&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Hardware Hacking‏‎]] || •[[Configuring ext signals‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[USB reference‏‎]] || •[[USB compatibility list‏‎]]&lt;br /&gt;
|- &lt;br /&gt;
| •[[SD compat. list]] || •[[Formatting]] || •[[Backup SD inst.to SD]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Display]] || •[[LEDs and backlight]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[NAND‏]] || ‎•[[Swap]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[WiFi‏‎]] || •[[Wireless from the Terminal]] ||‏‎ •[[Bluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Audio system]] || •[[MIDI]]‏‎ || •[[Microphone‏]]‎&lt;br /&gt;
|-&lt;br /&gt;
| •[[Keyboard‏]]‎ || •[[Nubs‏‎]] || •[[Wiimote]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Power modes‏]] || •[[Overclocking‏‎]] || •[[Hardware defects]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[GPS‏]] || •[[Mobile Broadband]] || •[[dvb-t]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |•[[Software projects|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;SOFTWARE PROJECTS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Ångström]] || •[[Basic Linux Guide‏]] || ‎•[[Reporting bugs]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Extend Utils]] || •[[Kernel build instructions]]‏ || •[[Interface]] •[[Status]]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| •[[Debian On SD‏‎]] •[[Android]]• || [[‎RISC OS‏]] ‎•[[Soleil]] || • [[Slackware]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[‎Games]]‏‎  •[[Unreleased]]‏‎ || •[[Pandora Bounties]]‏‎ || •[[Port Requests]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[PickleLauncher]] || ‏‎•[[MogsVsDogs]] || •[[Greyout]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[NetKeen]] ||  •[[Pencil]] || •[[NoteCase Pro‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Emulators|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;EMULATORS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Legal Emulation Resources‏‎]] || •[[Emulator List]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[QEMU‏‎]] || •[[QEMU Premade Images]]‏‎ || •[[QEMU Compatibility]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[DOSBox‏]] || •[[compat list]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PCSX-ReARMed‏‎]] || •[[Creating images of PSX games using Linux]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[UAE4ALL‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[MEME4ALL]] || ‏‎•[[MAME]] || ‏‎•[[PanMAME]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Mupen64plus dynamic recompiler‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PicoDrive]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[SNES9X4P‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[DraStic Compatibility List‏‎]] || •[[compat list 1.x]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Compo4All]] || •[[Compo4AllSDK‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[ResidualVM‏‎]] || •[[ScummVM‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Emul. ARM sys on win‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Gui|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;GUI&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[OpenBox‏‎]] &lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Minimenu]]‏‎ || •[[Configuration‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Screenshot]] || •[[Wallpaper cronjob]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Getting started with pandora development|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;GETTING STARTED WITH PANDORA DEVELOPMENT&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Development tutorials]] || •[[Development Tools‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[SGX drivers]] || •[[SDL]]‏‎ || •[[SDL Controls‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Floating Point Optimization‏‎]] || •[[Assembly Optimization‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Porting to GLES from GL‏]]‎ || •[[Porting guide‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[GLES]] || •[[window]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[GLESGAE‏‎]] || •[[GLBasic tutorial]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[cross-compiler‏‎‏‎]] || •[[Compile on the Pandora]]&lt;br /&gt;
|- &lt;br /&gt;
| [[Client repo API]] || [[Repo delta transfers]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PND repo spec‏‎]] || •[[PND nub modes]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Introduction to PNDs‏]] || •[[PND:FAQ‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Make and run simple PND‏‎]] || •[[Mounting a PND‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Libpnd hub‏‎]] || •[[PND management workflow‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PXML specification]]‏‎ || •[[PXML archetype‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PND Cookbook‏‎]] || •[[New PND format]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Team|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;TEAM&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Community Links‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[IRC‏]]‎ || •[[Wiki TODO]] || ‏‎•[[Donations‏‎]]  &lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Multisite username check]]&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27707</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27707"/>
		<updated>2013-09-13T23:22:56Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Hardware documentation|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;HARDWARE DOCUMENTATION&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Hardware Hacking‏‎]] || •[[Configuring ext signals‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[USB reference‏‎]] || •[[USB compatibility list‏‎]]&lt;br /&gt;
|- &lt;br /&gt;
| •[[SD compat. list]] || •[[Formatting]] || •[[Backup SD inst.to SD]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Display]] || •[[LEDs and backlight]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[NAND‏]] || ‎•[[Swap]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[WiFi‏‎]] || •[[Wireless from the Terminal]] ||‏‎ •[[Bluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Audio system]] || •[[MIDI]]‏‎ || •[[Microphone‏]]‎&lt;br /&gt;
|-&lt;br /&gt;
| •[[Keyboard‏]]‎ || •[[Nubs‏‎]] || •[[Wiimote]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Power modes‏]] || •[[Overclocking‏‎]] || •[[Hardware defects]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[GPS‏]] || •[[Mobile Broadband]] || •[[dvb-t]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |•[[Software projects|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;SOFTWARE PROJECTS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Ångström]] || •[[Basic Linux Guide‏]] || ‎•[[Reporting bugs]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Extend Utils]] || •[[Kernel build instructions]]‏ || •[[Interface]] •[[Status]]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| •[[Debian On SD‏‎]] •[[Android]]• || [[‎RISC OS‏]] ‎•[[Soleil]] || • [[Slackware]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[‎Games]]‏‎  •[[Unreleased]]‏‎ || •[[Pandora Bounties]]‏‎ || •[[Port Requests]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[PickleLauncher]] || ‏‎•[[MogsVsDogs]] || •[[Greyout]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[NetKeen]] ||  •[[Pencil]] || •[[NoteCase Pro‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Emulators|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;EMULATORS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Legal Emulation Resources‏‎]] || •[[Emulator List]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[QEMU‏‎]] || •[[QEMU Premade Images]]‏‎ || •[[QEMU Compatibility]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[DOSBox‏]] || •[[compat list]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PCSX-ReARMed‏‎]] || •[[Creating images of PSX games using Linux]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[UAE4ALL‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[MEME4ALL]] || ‏‎•[[MAME]] || ‏‎•[[PanMAME]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Mupen64plus dynamic recompiler‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PicoDrive]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[SNES9X4P‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[DraStic Compatibility List‏‎]] || •[[compat list 1.x]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Compo4All]] || •[[Compo4AllSDK‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[ResidualVM‏‎]] || •[[ScummVM‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Emul. ARM sys on win‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Gui|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;GUI&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[OpenBox‏‎]] &lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Minimenu]]‏‎ || •[[Configuration‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Screenshot]] || •[[Wallpaper cronjob]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Getting started with pandora development|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;GETTING STARTED WITH PANDORA DEVELOPMENT&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Development tutorials]] || •[[Development Tools‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[SGX drivers]] || •[[SDL]]‏‎ || •[[SDL Controls‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Floating Point Optimization‏‎]] || •[[Assembly Optimization‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Porting to GLES from GL‏]]‎ || •[[Porting guide‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[GLES]] || •[[window]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[GLESGAE‏‎]] || •[[GLBasic tutorial]]&lt;br /&gt;
‏‎|-&lt;br /&gt;
| ‏‎•[[cross-compiler‏‎‏‎]] || •[[Compile on the Pandora]]&lt;br /&gt;
‏‎|-&lt;br /&gt;
| ‏‎•[[Client repo API‏]] || •[[Repo delta transfers‏‎]]&lt;br /&gt;
‎|-&lt;br /&gt;
| ‏‎•[[PND repo spec‏‎]] || •[[PND nub modes]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Introduction to PNDs‏]] || •[[PND:FAQ‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Make and run simple PND‏‎]] || •[[Mounting a PND‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Libpnd hub‏‎]] || •[[PND management workflow‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PXML specification]]‏‎ || •[[PXML archetype‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PND Cookbook‏‎ || •[[New PND format]]&lt;br /&gt;
|-&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27706</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27706"/>
		<updated>2013-09-13T23:04:13Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Hardware documentation|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;HARDWARE DOCUMENTATION&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Hardware Hacking‏‎]] || •[[Configuring ext signals‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[USB reference‏‎]] || •[[USB compatibility list‏‎]]&lt;br /&gt;
|- &lt;br /&gt;
| •[[SD compat. list]] || •[[Formatting]] || •[[Backup SD inst.to SD]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Display]] || •[[LEDs and backlight]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[NAND‏]] || ‎•[[Swap]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[WiFi‏‎]] || •[[Wireless from the Terminal]] ||‏‎ •[[Bluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Audio system]] || •[[MIDI]]‏‎ || •[[Microphone‏]]‎&lt;br /&gt;
|-&lt;br /&gt;
| •[[Keyboard‏]]‎ || •[[Nubs‏‎]] || •[[Wiimote]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Power modes‏]] || •[[Overclocking‏‎]] || •[[Hardware defects]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[GPS‏]] || •[[Mobile Broadband]] || •[[dvb-t]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |•[[Software projects|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;SOFTWARE PROJECTS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Ångström]] || •[[Basic Linux Guide‏]] || ‎•[[Reporting bugs]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Extend Utils]] || •[[Kernel build instructions]]‏ || •[[Interface]] •[[Status]]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| •[[Debian On SD‏‎]] •[[Android]]• || [[‎RISC OS‏]] ‎•[[Soleil]] || • [[Slackware]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[‎Games]]‏‎  •[[Unreleased]]‏‎ || •[[Pandora Bounties]]‏‎ || •[[Port Requests]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[PickleLauncher]] || ‏‎•[[MogsVsDogs]] || •[[Greyout]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[NetKeen]] ||  •[[Pencil]] || •[[NoteCase Pro‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Emulators|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;EMULATORS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Legal Emulation Resources‏‎]] || •[[Emulator List]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[QEMU‏‎]] || •[[QEMU Premade Images]]‏‎ || •[[QEMU Compatibility]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[DOSBox‏]] || •[[compat list]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PCSX-ReARMed‏‎]] || •[[Creating images of PSX games using Linux]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[UAE4ALL‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[MEME4ALL]] || ‏‎•[[MAME]] || ‏‎•[[PanMAME]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Mupen64plus dynamic recompiler‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PicoDrive]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[SNES9X4P‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[DraStic Compatibility List‏‎]] || •[[compat list 1.x]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Compo4All]] || •[[Compo4AllSDK‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[ResidualVM‏‎]] || •[[ScummVM‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Emul. ARM sys on win‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Gui|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;GUI&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[OpenBox‏‎]] &lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Minimenu]]‏‎ || •[[Configuration‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Screenshot]] || •[[Wallpaper cronjob]]&lt;br /&gt;
|-&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27705</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27705"/>
		<updated>2013-09-13T23:03:18Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Hardware documentation|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;HARDWARE DOCUMENTATION&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Hardware Hacking‏‎]] || •[[Configuring ext signals‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[USB reference‏‎]] || •[[USB compatibility list‏‎]]&lt;br /&gt;
|- &lt;br /&gt;
| •[[SD compat. list]] || •[[Formatting]] || •[[Backup SD inst.to SD]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Display]] || •[[LEDs and backlight]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[NAND‏]] || ‎•[[Swap]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[WiFi‏‎]] || •[[Wireless from the Terminal]] ||‏‎ •[[Bluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Audio system]] || •[[MIDI]]‏‎ || •[[Microphone‏]]‎&lt;br /&gt;
|-&lt;br /&gt;
| •[[Keyboard‏]]‎ || •[[Nubs‏‎]] || •[[Wiimote]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Power modes‏]] || •[[Overclocking‏‎]] || •[[Hardware defects]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[GPS‏]] || •[[Mobile Broadband]] || •[[dvb-t]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; |•[[Software projects|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;SOFTWARE PROJECTS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Ångström]] || •[[Basic Linux Guide‏]] || ‎•[[Reporting bugs]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Extend Utils]] || •[[Kernel build instructions]]‏ || •[[Interface]] •[[Status]]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| •[[Debian On SD‏‎]] •[[Android]]• || [[‎RISC OS‏]] ‎•[[Soleil]] || • [[Slackware]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[‎Games]]‏‎  •[[Unreleased]]‏‎ || •[[Pandora Bounties]]‏‎ || •[[Port Requests]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[PickleLauncher]] || ‏‎•[[MogsVsDogs]] || •[[Greyout]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[NetKeen]] ||  •[[Pencil]] || •[[NoteCase Pro‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Emulators|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;EMULATORS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Legal Emulation Resources‏‎]] || •[[Emulator List]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[QEMU‏‎]] || •[[QEMU Premade Images]]‏‎ || •[[QEMU Compatibility]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[DOSBox‏]] || •[[compat list]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PCSX-ReARMed‏‎]] || •[[Creating images of PSX games using Linux]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[UAE4ALL‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[MEME4ALL]] || ‏‎•[[MAME]] || ‏‎•[[PanMAME]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Mupen64plus dynamic recompiler‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PicoDrive]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[SNES9X4P‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[DraStic Compatibility List‏‎]] || •[[compat list 1.x]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Compo4All]] || •[[Compo4AllSDK‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[ResidualVM‏‎]] || •[[ScummVM‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Emul. ARM sys on win‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | •[[Gui|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;•GUI&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[OpenBox‏‎]] &lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Minimenu]]‏‎ || •[[Configuration‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Screenshot]] || •[[Wallpaper cronjob]]&lt;br /&gt;
|-&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27702</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27702"/>
		<updated>2013-09-13T22:36:46Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; | •[[Hardware documentation|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;HARDWARE DOCUMENTATION&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Hardware Hacking‏‎]] || •[[Configuring ext signals‏‎]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[USB reference‏‎]] || •[[USB compatibility list‏‎]] || &lt;br /&gt;
|- &lt;br /&gt;
| •[[SD compat. list]] || •[[Formatting]] || •[[Backup SD inst.to SD]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Display]] || •[[LEDs and backlight]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[NAND‏]] || ‎•[[Swap]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[WiFi‏‎]] || •[[Wireless from the Terminal]] ||‏‎ •[[Bluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Audio system]] || •[[MIDI]]‏‎ || •[[Microphone‏]]‎&lt;br /&gt;
|-&lt;br /&gt;
| •[[Keyboard‏]]‎ || •[[Nubs‏‎]] || •[[Wiimote]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Power modes‏]] || •[[Overclocking‏‎]] || •[[Hardware defects]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[GPS‏]] || •[[Mobile Broadband]] || •[[dvb-t]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; |•[[Software projects|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;SOFTWARE PROJECTS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Ångström]] || •[[Basic Linux Guide‏]] || ‎•[[Reporting bugs]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Extend Utils]] || •[[Kernel build instructions]]‏ || •[[Interface]] •[[Status]]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| •[[Debian On SD‏‎]] •[[Android]]• || [[‎RISC OS‏]] ‎•[[Soleil]] || • [[Slackware]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[‎Games]]‏‎  •[[Unreleased]]‏‎ || •[[Pandora Bounties]]‏‎ || •[[Port Requests]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[PickleLauncher]] || ‏‎•[[MogsVsDogs]] || •[[Greyout]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[NetKeen]] ||  •[[Pencil]] || •[[NoteCase Pro‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; | •[[Emulators|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;EMULATORS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Legal Emulation Resources‏‎]] || •[[Emulator List]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[QEMU‏‎]] || •[[QEMU Premade Images]]‏‎ || •[[QEMU Compatibility]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[DOSBox‏]] || •[[compat list]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PCSX-ReARMed‏‎]] || •[[Creating images of PSX games using Linux]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[UAE4ALL‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[MAME4ALL‏‎]] || •[[MAME‏]]‎ || •[[PanMAME]]&lt;br /&gt;
‏‎|-&lt;br /&gt;
| ‏‎•[[Mupen64plus dynamic recompiler‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[PicoDrive]]&lt;br /&gt;
‏‎|-&lt;br /&gt;
| ‏‎•[[SNES9X4P‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[DraStic Compatibility List‏‎]] || •[[compat list 1.x]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Compo4All]] || •[[Compo4AllSDK‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[ResidualVM‏‎]] || •[[ScummVM‏‎]]&lt;br /&gt;
|-&lt;br /&gt;
| ‏‎•[[Emul. ARM sys on win‏‎]]&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27699</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27699"/>
		<updated>2013-09-13T22:12:43Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; | •[[Hardware documentation|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;HARDWARE DOCUMENTATION&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Hardware Hacking‏‎]] || •[[Configuring ext signals‏‎]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[USB reference‏‎]] || •[[USB compatibility list‏‎]] || &lt;br /&gt;
|- &lt;br /&gt;
| •[[SD compat. list]] || •[[Formatting]] || •[[Backup SD inst.to SD]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Display]] || •[[LEDs and backlight]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[NAND‏]] || ‎•[[Swap]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[WiFi‏‎]] || •[[Wireless from the Terminal]] ||‏‎ •[[Bluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Audio system]] || •[[MIDI]]‏‎ || •[[Microphone‏]]‎&lt;br /&gt;
|-&lt;br /&gt;
| •[[Keyboard‏]]‎ || •[[Nubs‏‎]] || •[[Wiimote]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Power modes‏]] || •[[Overclocking‏‎]] || •[[Hardware defects]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[GPS‏]] || •[[Mobile Broadband]] || •[[dvb-t]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; |•[[Software projects|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;SOFTWARE PROJECTS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Ångström]] || •[[Basic Linux Guide‏]] || ‎•[[Reporting bugs]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Extend Utils]]&lt;br /&gt;
|-&lt;br /&gt;
•[[Kernel build instructions]]‏&lt;br /&gt;
|-&lt;br /&gt;
| •[[Interface]] || •[[Status]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Debian On SD‏‎]] •[[Android]]&lt;br /&gt;
|-&lt;br /&gt;
|• [[‎RISC OS‏]] || ‎•[[Soleil]] &lt;br /&gt;
|-&lt;br /&gt;
|• [[Slackware]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[‎Games]]‏‎ || •[[Unreleased]]‏‎ &lt;br /&gt;
|-&lt;br /&gt;
| •[[Pandora Bounties]]‏‎ || •[[Port Requests]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[PickleLauncher]] || ‏‎•[[MogsVsDogs]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Greyout]] || ‏‎•[[NetKeen]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Pencil]] || •[[NoteCase Pro‏‎]]&lt;br /&gt;
|-&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27698</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27698"/>
		<updated>2013-09-13T22:08:08Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; | •[[Hardware documentation|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;HARDWARE DOCUMENTATION&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Hardware Hacking‏‎]] || •[[Configuring ext signals‏‎]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[USB reference‏‎]] || •[[USB compatibility list‏‎]] || &lt;br /&gt;
|- &lt;br /&gt;
| •[[SD compat. list]] || •[[Formatting]] || •[[Backup SD inst.to SD]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Display]] || •[[LEDs and backlight]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[NAND‏]] || ‎•[[Swap]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[WiFi‏‎]] || •[[Wireless from the Terminal]] ||‏‎ •[[Bluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Audio system]] || •[[MIDI]]‏‎ || •[[Microphone‏]]‎&lt;br /&gt;
|-&lt;br /&gt;
| •[[Keyboard‏]]‎ || •[[Nubs‏‎]] || •[[Wiimote]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Power modes‏]] || •[[Overclocking‏‎]] || •[[Hardware defects]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[GPS‏]] || •[[Mobile Broadband]] || •[[dvb-t]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; |•[[Software projects|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;SOFTWARE PROJECTS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Ångström]] || •[[Basic Linux Guide‏]] || ‎•[[Reporting bugs]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Extend Utils]]&lt;br /&gt;
|-&lt;br /&gt;
•[[Kernel build instructions]]‏&lt;br /&gt;
|-&lt;br /&gt;
| •[[Interface]] || •[[Status]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Debian On SD‏‎]] •[[Android]]&lt;br /&gt;
|-&lt;br /&gt;
|• [[‎RISC OS‏]] || ‎•[[Soleil]] &lt;br /&gt;
|-&lt;br /&gt;
|• [[Slackware]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[‎Games]]‏‎ || •[[Unreleased]]‏‎ &lt;br /&gt;
|-&lt;br /&gt;
| •[[Pandora Bounties]]‏‎ || •[[Port Requests]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[PickleLauncher]] || ‏‎•[[MogsVsDogs]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Greyout]] || ‏‎•[[NetKeen]] || •[[Pencil]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[NoteCase Pro‏‎]]&lt;br /&gt;
|-&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27697</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27697"/>
		<updated>2013-09-13T22:06:55Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; | •[[Hardware documentation|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;HARDWARE DOCUMENTATION&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Hardware Hacking‏‎]] || •[[Configuring ext signals‏‎]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[USB reference‏‎]] || •[[USB compatibility list‏‎]] || &lt;br /&gt;
|- &lt;br /&gt;
| •[[SD compat. list]] || •[[Formatting]] || •[[Backup SD inst.to SD]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Display]] || •[[LEDs and backlight]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[NAND‏]] || ‎•[[Swap]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[WiFi‏‎]] || •[[Wireless from the Terminal]] ||‏‎ •[[Bluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Audio system]] || •[[MIDI]]‏‎ || •[[Microphone‏]]‎&lt;br /&gt;
|-&lt;br /&gt;
| •[[Keyboard‏]]‎ || •[[Nubs‏‎]] || •[[Wiimote]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Power modes‏]] || •[[Overclocking‏‎]] || •[[Hardware defects]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[GPS‏]] || •[[Mobile Broadband]] || •[[dvb-t]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; |•[[Software projects|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;SOFTWARE PROJECTS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Ångström]] || •[[Basic Linux Guide‏]] || ‎•[[Reporting bugs]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Extend Utils]]&lt;br /&gt;
|-&lt;br /&gt;
•[[Kernel build instructions]]‏&lt;br /&gt;
|-&lt;br /&gt;
| •[[Interface]] || •[[Status]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Debian On SD‏‎]] •[[Android]]&lt;br /&gt;
|-&lt;br /&gt;
|• [[‎RISC OS‏]] || ‎•[[Soleil]] &lt;br /&gt;
|-&lt;br /&gt;
|• [[Slackware]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[‎Games]]‏‎ || •[[Unreleased]]‏‎ &lt;br /&gt;
|-&lt;br /&gt;
| •[[Pandora Bounties]]‏‎ || •[[Port Requests]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[PickleLauncher]] || ‏‎•[[MogsVsDogs]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Greyout]] || ‏‎•[[NetKeen‏‎•Pencil]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[NoteCase Pro‏‎]]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| •[[‎Pandora Bounties]] ||&lt;br /&gt;
| •[[Greyout]] || ‏‎•[[NetKeen‏]] || ‎•[[Pencil‏‎•NoteCase Pro&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27696</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27696"/>
		<updated>2013-09-13T21:59:06Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; | •[[Hardware documentation|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;HARDWARE DOCUMENTATION&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Hardware Hacking‏‎]] || •[[Configuring ext signals‏‎]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[USB reference‏‎]] || •[[USB compatibility list‏‎]] || &lt;br /&gt;
|- &lt;br /&gt;
| •[[SD compat. list]] || •[[Formatting]] || •[[Backup SD inst.to SD]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Display]] || •[[LEDs and backlight]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[NAND‏]] || ‎•[[Swap]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[WiFi‏‎]] || •[[Wireless from the Terminal]] ||‏‎ •[[Bluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Audio system]] || •[[MIDI]]‏‎ || •[[Microphone‏]]‎&lt;br /&gt;
|-&lt;br /&gt;
| •[[Keyboard‏]]‎ || •[[Nubs‏‎]] || •[[Wiimote]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Power modes‏]] || •[[Overclocking‏‎]] || •[[Hardware defects]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[GPS‏]] || •[[Mobile Broadband]] || •[[dvb-t]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; |•[[Software projects|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;SOFTWARE PROJECTS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Ångström]] || •[[Basic Linux Guide‏]] || ‎•[[Reporting bugs]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Extend Utils]]&lt;br /&gt;
|-&lt;br /&gt;
•[[Kernel build instructions]]‏&lt;br /&gt;
|-&lt;br /&gt;
| •[[Interface]] || •[[Status]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Debian On SD‏‎]] •[[Android]]&lt;br /&gt;
|-&lt;br /&gt;
|• [[‎RISC OS‏]] || ‎•[[Soleil]] &lt;br /&gt;
|-&lt;br /&gt;
|• [[Slackware]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[‎Games]]‏‎ || •[[Unreleased]]‏‎ || •[[Pandora Bounties]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[‎Port Requests‏‎]] || •[[PickleLauncher]] || ‏‎•[[MogsVsDogs]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Greyout]]‏‎•NetKeen‏‎•Pencil‏‎•NoteCase Pro&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27695</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27695"/>
		<updated>2013-09-13T21:58:20Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; | •[[Hardware documentation|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;HARDWARE DOCUMENTATION&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Hardware Hacking‏‎]] || •[[Configuring ext signals‏‎]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[USB reference‏‎]] || •[[USB compatibility list‏‎]] || &lt;br /&gt;
|- &lt;br /&gt;
| •[[SD compat. list]] || •[[Formatting]] || •[[Backup SD inst.to SD]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Display]] || •[[LEDs and backlight]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[NAND‏]] || ‎•[[Swap]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[WiFi‏‎]] || •[[Wireless from the Terminal]] ||‏‎ •[[Bluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Audio system]] || •[[MIDI]]‏‎ || •[[Microphone‏]]‎&lt;br /&gt;
|-&lt;br /&gt;
| •[[Keyboard‏]]‎ || •[[Nubs‏‎]] || •[[Wiimote]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Power modes‏]] || •[[Overclocking‏‎]] || •[[Hardware defects]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[GPS‏]] || •[[Mobile Broadband]] || •[[dvb-t]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; |•[[Software projects|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;SOFTWARE PROJECTS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Ångström]] || •[[Basic Linux Guide‏]] || ‎•[[Reporting bugs]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Extend Utils]]&lt;br /&gt;
|-&lt;br /&gt;
•[[Kernel build instructions]]‏&lt;br /&gt;
|-&lt;br /&gt;
| •[[Interface]] || •[[Status]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Debian On SD‏‎]] •[[Android]]&lt;br /&gt;
|-&lt;br /&gt;
|• [[‎RISC OS‏]] || ‎•[[Soleil]] &lt;br /&gt;
|-&lt;br /&gt;
|• [[Slackware]]&lt;br /&gt;
| •[[‎Games]]‏‎ || •[[Unreleased]]‏‎ || •[[Pandora Bounties]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[‎Port Requests‏‎]] || •[[PickleLauncher]] || ‏‎•[[MogsVsDogs]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Greyout]]‏‎•NetKeen‏‎•Pencil‏‎•NoteCase Pro&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27694</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27694"/>
		<updated>2013-09-13T21:45:49Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; | •[[Hardware documentation|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;HARDWARE DOCUMENTATION&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Hardware Hacking‏‎]] || •[[Configuring ext signals‏‎]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[USB reference‏‎]] || •[[USB compatibility list‏‎]] || &lt;br /&gt;
|- &lt;br /&gt;
| •[[SD compat. list]] || •[[Formatting]] || •[[Backup SD inst.to SD]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Display]] || •[[LEDs and backlight]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[NAND‏]] || ‎•[[Swap]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[WiFi‏‎]] || •[[Wireless from the Terminal]] ||‏‎ •[[Bluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Audio system]] || •[[MIDI]]‏‎ || •[[Microphone‏]]‎&lt;br /&gt;
|-&lt;br /&gt;
| •[[Keyboard‏]]‎ || •[[Nubs‏‎]] || •[[Wiimote]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Power modes‏]] || •[[Overclocking‏‎]] || •[[Hardware defects]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[GPS‏]] || •[[Mobile Broadband]] || •[[dvb-t]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; |•[[Software projects|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;SOFTWARE PROJECTS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Ångström]] || •[[Basic Linux Guide‏]] || ‎•[[Reporting bugs]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Extend Utils]] ||‏‎ •[[Kernel build instructions]] ||‏‎ •[[Interface]]‏‎&lt;br /&gt;
|-&lt;br /&gt;
| •[[Status]] || •[[Debian On SD‏‎]] || •[[Android]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[‎RISC OS‏]] || ‎•[[Soleil]] || ‏‎•[[Slackware]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[‎Games]]‏‎ || •[[Unreleased]]‏‎ || •[[Pandora Bounties]]&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27693</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27693"/>
		<updated>2013-09-13T21:41:18Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; | •[[Hardware documentation|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;HARDWARE DOCUMENTATION&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Hardware Hacking‏‎]] || •[[Configuring ext signals‏‎]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[USB reference‏‎]] || •[[USB compatibility list‏‎]] || &lt;br /&gt;
|- &lt;br /&gt;
| •[[SD compat. list]] || •[[Formatting]] || •[[Backup SD inst.to SD]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Display]] || •[[LEDs and backlight]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[NAND‏]] || ‎•[[Swap]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[WiFi‏‎]] || •[[Wireless from the Terminal]] ||‏‎ •[[Bluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Audio system]] || •[[MIDI]]‏‎ || •[[Microphone‏]]‎&lt;br /&gt;
|-&lt;br /&gt;
| •[[Keyboard‏]]‎ || •[[Nubs‏‎]] || •[[Wiimote]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Power modes‏]] || •[[Overclocking‏‎]] || •[[Hardware defects]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[GPS‏]] || •[[Mobile Broadband]] || •[[dvb-t]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; |•[[Software projects|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;SOFTWARE PROJECTS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Ångström]] || •[[Basic Linux Guide‏]] || ‎•[[Reporting bugs]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Extend Utils]] ||‏‎ •[[Kernel build instructions]] ||‏‎ •[[Interface]]‏‎&lt;br /&gt;
|-&lt;br /&gt;
| •[[Status]] || •[[Debian On SD‏‎]] || •[[Android]]&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27692</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27692"/>
		<updated>2013-09-13T21:36:31Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; | •[[Hardware documentation|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;HARDWARE DOCUMENTATION&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Hardware Hacking‏‎]] || •[[Configuring ext signals‏‎]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[USB reference‏‎]] || •[[USB compatibility list‏‎]] || &lt;br /&gt;
|- &lt;br /&gt;
| •[[SD compat. list]] || •[[Formatting]] || •[[Backup SD inst.to SD]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Display]] || •[[LEDs and backlight]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[NAND‏]] || ‎•[[Swap]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[WiFi‏‎]] || •[[Wireless from the Terminal]] ||‏‎ •[[Bluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Audio system]] || •[[MIDI]]‏‎ || •[[Microphone‏]]‎&lt;br /&gt;
|-&lt;br /&gt;
| •[[Keyboard‏]]‎ || •[[Nubs‏‎]] || •[[Wiimote]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Power modes‏]] || •[[Overclocking‏‎]] || •[[Hardware defects]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[GPS‏]] || •[[Mobile Broadband]] || •[[dvb-t]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; |•[[Software projects|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;SOFTWARE PROJECTS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Ångström]] || •[[Basic Linux Guide‏]] || ‎•[[Reporting bugs]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Extend Utils]] ||‏‎ •[[Kernel build instructions]] ||‏‎ •[[Interface]]‏‎ || •[[Status]]&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27691</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27691"/>
		<updated>2013-09-13T21:34:15Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; | •[[Hardware documentation|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;HARDWARE DOCUMENTATION&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Hardware Hacking‏‎]] || •[[Configuring ext signals‏‎]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[USB reference‏‎]] || •[[USB compatibility list‏‎]] || &lt;br /&gt;
|- &lt;br /&gt;
| •[[SD compat. list]] || •[[Formatting]] || •[[Backup SD inst.to SD]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Display]] || •[[LEDs and backlight]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[NAND‏]] || ‎•[[Swap]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[WiFi‏‎]] || •[[Wireless from the Terminal]] ||‏‎ •[[Bluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Audio system]] || •[[MIDI]]‏‎ || •[[Microphone‏]]‎&lt;br /&gt;
|-&lt;br /&gt;
| •[[Keyboard‏]]‎ || •[[Nubs‏‎]] || •[[Wiimote]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Power modes‏]] || •[[Overclocking‏‎]] || •[[Hardware defects]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[GPS‏]] || •[[Mobile Broadband]] || •[[dvb-t]]&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; |•[[Software projects|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;SOFTWARE PROJECTS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Ångström]] || •[[Basic Linux Guide‏]] || ‎•[[Reporting bugs]]&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27688</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27688"/>
		<updated>2013-09-13T21:30:20Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; | •[[Hardware documentation|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;HARDWARE DOCUMENTATION&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Hardware Hacking‏‎]] || •[[Configuring ext signals‏‎]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[USB reference‏‎]] || •[[USB compatibility list‏‎]] || &lt;br /&gt;
|- &lt;br /&gt;
| •[[SD compat. list]] || •[[Formatting]] || •[[Backup SD inst.to SD]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Display]] || •[[LEDs and backlight]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[NAND‏]] || ‎•[[Swap]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[WiFi‏‎]] || •[[Wireless from the Terminal]] ||‏‎ •[[Bluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Audio system]] || •[[MIDI]]‏‎ || •[[Microphone‏]]‎&lt;br /&gt;
|-&lt;br /&gt;
| •[[Keyboard‏]]‎ || •[[Nubs‏‎]] || •[[Wiimote]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Power modes‏]] || •[[Overclocking‏‎]] || •[[Hardware defects]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[GPS‏]] || •[[Mobile Broadband]] || •[[dvb-t]]&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; | •[[Software projects|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;SOFTWARE PROJECTS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27685</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27685"/>
		<updated>2013-09-13T21:23:54Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; | •[[Hardware documentation|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;HARDWARE DOCUMENTATION&amp;lt;/span&amp;gt;]]&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; |&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; | EfSSSect&lt;br /&gt;
|-&lt;br /&gt;
| •[[Hardware Hacking‏‎]] || •[[Configuring ext signals‏‎]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[USB reference‏‎]] || •[[USB compatibility list‏‎]] || &lt;br /&gt;
|- &lt;br /&gt;
| •[[SD compat. list]] || •[[Formatting]] || •[[Backup SD inst.to SD]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Display]] || •[[LEDs and backlight]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[NAND‏]] || ‎•[[Swap]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[WiFi‏‎]] || •[[Wireless from the Terminal]] ||‏‎ •[[Bluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Audio system]] || •[[MIDI]]‏‎ || •[[Microphone‏]]‎&lt;br /&gt;
|-&lt;br /&gt;
| •[[Keyboard‏]]‎ || •[[Nubs‏‎]] || •[[Wiimote]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Power modes‏]] || •[[Overclocking‏‎]] || •[[Hardware defects]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[GPS‏]] || •[[Mobile Broadband]] || •[[dvb-t]]&lt;br /&gt;
‏&lt;br /&gt;
&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; |•[[Software projects‎|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;SOFTWARE PROJECTS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 ||[[File:Pandora_logo_small.png|link=Logo|left|97px|thumb]] 3&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || 3&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27684</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27684"/>
		<updated>2013-09-13T21:21:24Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; | •[[Hardware documentation|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;HARDWARE DOCUMENTATION&amp;lt;/span&amp;gt;]]&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; |&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; | EfSSSect&lt;br /&gt;
|-&lt;br /&gt;
| •[[Hardware Hacking‏‎]] || •[[Configuring ext signals‏‎]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[USB reference‏‎]] || •[[USB compatibility list‏‎]] || &lt;br /&gt;
|- &lt;br /&gt;
| •[[SD compat. list]] || •[[Formatting]] || •[[Backup SD inst.to SD]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Display]] || •[[LEDs and backlight]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[NAND‏]] || ‎•[[Swap]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[WiFi‏‎]] || •[[Wireless from the Terminal]] ||‏‎ •[[Bluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Audio system]] || •[[MIDI]]‏‎ || •[[Microphone‏]]‎&lt;br /&gt;
|-&lt;br /&gt;
| •[[Keyboard‏]]‎ || •[[Nubs‏‎]] || •[[Wiimote]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Power modes‏]] || •[[Overclocking‏‎]] || •[[Hardware defects]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[GPS‏]] || •[[Mobile Broadband•dvb-t]]&lt;br /&gt;
‏&lt;br /&gt;
&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; |•[[Software projects‎|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;SOFTWARE PROJECTS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 ||[[File:Pandora_logo_small.png|link=Logo|left|97px|thumb]] 3&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || 3&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27683</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27683"/>
		<updated>2013-09-13T21:15:58Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; | •[[Hardware documentation|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;HARDWARE DOCUMENTATION&amp;lt;/span&amp;gt;]]&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; |&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; | EfSSSect&lt;br /&gt;
|-&lt;br /&gt;
| •[[Hardware Hacking‏‎]] || •[[Configuring ext signals‏‎]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[USB reference‏‎]] || •[[USB compatibility list‏‎]] || &lt;br /&gt;
|- &lt;br /&gt;
| •[[SD compat. list]] || •[[Formatting]] || •[[Backup SD inst.to SD]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Display]] || •[[LEDs and backlight]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[NAND‏]] || ‎•[[Swap]] || &lt;br /&gt;
|-&lt;br /&gt;
| •[[WiFi‏‎]] || •[[Wireless from the Terminal]] ||‏‎ •[[Bluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Audio system]] || •[[MIDI]]‏‎ || •[[Microphone‏]]‎&lt;br /&gt;
&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; |•[[Software projects‎|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;SOFTWARE PROJECTS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 ||[[File:Pandora_logo_small.png|link=Logo|left|97px|thumb]] 3&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || 3&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
	<entry>
		<id>https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27682</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://pandorawiki.org/index.php?title=Main_Page&amp;diff=27682"/>
		<updated>2013-09-13T21:14:05Z</updated>

		<summary type="html">&lt;p&gt;Lolla: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; | •[[Hardware documentation|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;HARDWARE DOCUMENTATION&amp;lt;/span&amp;gt;]]&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; |&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; | EfSSSect&lt;br /&gt;
|-&lt;br /&gt;
| •[[Hardware Hacking‏‎]] || •[[Configuring ext signals‏‎]] || All versions&lt;br /&gt;
|-&lt;br /&gt;
| •[[USB reference‏‎]] || •[[USB compatibility list‏‎]] || All versions&lt;br /&gt;
|- &lt;br /&gt;
| •[[SD compat. list]] || •[[Formatting]] || •[[Backup SD inst.to SD]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Display]] || •[[LEDs and backlight]] || All versions&lt;br /&gt;
|-&lt;br /&gt;
| •[[NAND‏]] || ‎•[[Swap]] || All versions&lt;br /&gt;
|-&lt;br /&gt;
| •[[WiFi‏‎]] || •[[Wireless from the Terminal]] ||‏‎ •[[Bluetooth]]&lt;br /&gt;
|-&lt;br /&gt;
| •[[Audio system]] || •[[MIDI]]‏‎ || •[[Microphone‏]]‎&lt;br /&gt;
&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;225px&amp;quot; |•[[Software projects‎|&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;SOFTWARE PROJECTS&amp;lt;/span&amp;gt;]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 ||[[File:Pandora_logo_small.png|link=Logo|left|97px|thumb]] 3&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || 3&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Lolla</name></author>
		
	</entry>
</feed>