void DrawTileMap(sCanvas *canvas, const sCanvas *src, const u8 *map, int mapwbits, int maphbits, int tilebits, int x, int y, int w, int h, const cMat2Df *mat, u8 horizon)
void DrawTileMap(sCanvas *canvas, const sCanvas *src, const u8 *map, int mapwbits, int maphbits, int tilebits, int x, int y, int w, int h, const cMat2Df *mat, u8 horizon)
You need serial program to see demo text. Setup port to 115200 Baud, 8 bits, 1 stop bit, no parity, flow control None.
@@ -152,10 +151,8 @@ How to connect Pico to PC with serial port
Wiring diagram
I don't present here the overall circuit I used, because the library was created as part of a retro gaming computer with Raspberry Pico and is still under development. Here is a simplified wiring diagram of the VGA monitor output (with added audio PWM output):
-
-
-
-
The synchronization output is in the format of the CSYNC synchronization mix (composite synchro, HSYNC + VSYNC). Computer monitors support CSYNC mixed sync. The signal is fed to the HSYNC input (also referred to as CSYNC). An audio output is fed to the VSYNC pin of the VGA connector, for case of output to the TV. The VGA monitor has an input impedance of 75 ohms on this pin, this causes the audio signal to be attenuated and ignored by the VGA monitor and not considered as vertical sync. When the audio connector is inserted, the output to the VGA monitor is disconnected and the audio signal is output to the outside (e.g. to audio headphones).
+
+
The synchronization output is in the format of the CSYNC synchronization mix (composite synchro, HSYNC + VSYNC). Computer monitors support CSYNC mixed sync. The signal is fed to the HSYNC input (also referred to as CSYNC). An audio output is fed to the VSYNC pin of the VGA connector, for case of output to the TV. The VGA monitor has an input impedance of 75 ohms on this pin, this causes the audio signal to be attenuated and ignored by the VGA monitor and not considered as vertical sync. When the audio connector is inserted, the output to the VGA monitor is disconnected and the audio signal is output to the outside (e.g. to audio headphones).
The TV is connected to the VGA output via a reduction that simply connects the pins of the VGA connector to the corresponding pins of the SCART connector. In this case, the audio signal fed to the VGA connector is also used. Thus, it is not necessary for the device to include a special connector for the TV. The 5V voltage from pin 9 is used as the control voltage for the SCART connector - pin 16 of the SCART connector (Blanking) is connected via a 100 ohm resistor and pin 8 (Switch) is connected directly.
The keyboard connection is not draw here. All sample programs are set up so that program control can be used via the console on the USB virtual port. Simply connect the Pico to the PC via the USB cable used for programming, and run a console program that connects to the USB virtual COM port. For a more detailed description of the connection, see the SDK description.
174#define GF_OSCIL 18 // oscilloscope pixel graph (data=samples 0..255, par = 2 colors of palettes, par2 = height of pixels - 1)
+
175#define GF_OSCLINE 19 // oscilloscope line graph (data=samples 0..255, par = 2 colors of palettes)
+
176#define GF_PLANE2 20 // 4 colors on 2 graphic planes (data=graphic, par=offset of 2nd graphic plane,
177// par2 = pointer to 4-color palette translation table)
-
178#define GF_ATTRIB8 21 // 2x4 bit color attribute per 8x8 pixel sample (data=mono graphic, par=offset of color attributes,
+
178#define GF_ATTRIB8 21 // 2x4 bit color attribute per 8x8 pixel sample (data=mono graphic, par=offset of color attributes,
179// par2 = pointer to 16-color palette table)
-
180#define GF_GRAPH8MAT 22 // 8-bit graphics with 2D matrix transformation, using hardware interpolator inter1 (inter1 state is not saved during interrup)
+
180#define GF_GRAPH8MAT 22 // 8-bit graphics with 2D matrix transformation, using hardware interpolator inter1 (inter1 state is not saved during interrup)
181// (data=image, par=pointer to 6 matrix integer parameters m11,m12..m23 ((int)(m*FRACTMUL)),
182// par2 LOW=number of bits of image width, par2 HIGH=number of bits of image height)
-
183#define GF_GRAPH8PERSP 23 // 8-bit graphics with perspective, using hardware interpolator inter1 (inter1 state is not saved during interrup)
+
183#define GF_GRAPH8PERSP 23 // 8-bit graphics with perspective, using hardware interpolator inter1 (inter1 state is not saved during interrup)
184// (data=image, par=pointer to 6 matrix integer parameters m11,m12..m23 ((int)(m*FRACTMUL)),
185// par2 LOW=number of bits of image width, par2 HIGH=number of bits of image height,
186// par3=horizon offset)
-
187#define GF_TILEPERSP 24 // tiles with perspective, using hardware interpolators inter0 and inter1 (their state is not saved during interrup)
+
187#define GF_TILEPERSP 24 // tiles with perspective, using hardware interpolators inter0 and inter1 (their state is not saved during interrup)
188// (data=tile map, par=one column of tiles, par2=pointer to integer matrix,
189// wb LOW=number of bits of map width, wb HIGH=number of bits of map height,
190// par3 LOW=number of bits of tile size, par3 HIGH=horizon offset/4 or 0=no perspective or <0=ceilling,
191// wrapy=segment height)
-
192#define GF_TILEPERSP15 25 // tiles with perspective, 1.5 pixels (parameters as GF_TILEPERSP)
-
193#define GF_TILEPERSP2 26 // tiles with perspective, double pixels (parameters as GF_TILEPERSP)
-
194#define GF_TILEPERSP3 27 // tiles with perspective, triple pixels (parameters as GF_TILEPERSP)
-
195#define GF_TILEPERSP4 28 // tiles with perspective, quadruple pixels (parameters as GF_TILEPERSP)
+
192#define GF_TILEPERSP15 25 // tiles with perspective, 1.5 pixels (parameters as GF_TILEPERSP)
+
193#define GF_TILEPERSP2 26 // tiles with perspective, double pixels (parameters as GF_TILEPERSP)
+
194#define GF_TILEPERSP3 27 // tiles with perspective, triple pixels (parameters as GF_TILEPERSP)
+
195#define GF_TILEPERSP4 28 // tiles with perspective, quadruple pixels (parameters as GF_TILEPERSP)
196
-
197#define GF_GRP3MIN GF_GRAPH4 // 3rd group minimal format
-
198#define GF_GRP3MAX GF_TILEPERSP4 // 3rd group maximal format
+
197#define GF_GRP3MIN GF_GRAPH4 // 3rd group minimal format
+
198#define GF_GRP3MAX GF_TILEPERSP4 // 3rd group maximal format
199
200
-
201#define FRACT 12 // number of bits of fractional part of fractint number (use max. 13, min. 8)
+
201#define FRACT 12 // number of bits of fractional part of fractint number (use max. 13, min. 8)
+
+
diff --git a/docs/doxygen.css b/docs/doxygen.css
index 73ecbb2..ffbff02 100644
--- a/docs/doxygen.css
+++ b/docs/doxygen.css
@@ -1,4 +1,4 @@
-/* The standard CSS for doxygen 1.8.17 */
+/* The standard CSS for doxygen 1.9.1 */
body, table, div, p, dl {
font: 400 14px/22px Roboto,sans-serif;
@@ -66,7 +66,7 @@ p.startli, p.startdd {
margin-top: 2px;
}
-th p.starttd, p.intertd, p.endtd {
+th p.starttd, th p.intertd, th p.endtd {
font-size: 100%;
font-weight: 700;
}
@@ -103,30 +103,96 @@ caption {
}
span.legend {
- font-size: 70%;
- text-align: center;
-}
-
-h3.version {
- font-size: 90%;
- text-align: center;
-}
-
-div.qindex, div.navtab{
- background-color: #EBEFF6;
- border: 1px solid #A3B4D7;
+ font-size: 70%;
text-align: center;
}
-div.qindex, div.navpath {
- width: 100%;
- line-height: 140%;
+h3.version {
+ font-size: 90%;
+ text-align: center;
}
div.navtab {
- margin-right: 15px;
+ border-right: 1px solid #A3B4D7;
+ padding-right: 15px;
+ text-align: right;
+ line-height: 110%;
}
+div.navtab table {
+ border-spacing: 0;
+}
+
+td.navtab {
+ padding-right: 6px;
+ padding-left: 6px;
+}
+td.navtabHL {
+ background-image: url('tab_a.png');
+ background-repeat:repeat-x;
+ padding-right: 6px;
+ padding-left: 6px;
+}
+
+td.navtabHL a, td.navtabHL a:visited {
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
+
+a.navtab {
+ font-weight: bold;
+}
+
+div.qindex{
+ text-align: center;
+ width: 100%;
+ line-height: 140%;
+ font-size: 130%;
+ color: #A0A0A0;
+}
+
+dt.alphachar{
+ font-size: 180%;
+ font-weight: bold;
+}
+
+.alphachar a{
+ color: black;
+}
+
+.alphachar a:hover, .alphachar a:visited{
+ text-decoration: none;
+}
+
+.classindex dl {
+ padding: 25px;
+ column-count:1
+}
+
+.classindex dd {
+ display:inline-block;
+ margin-left: 50px;
+ width: 90%;
+ line-height: 1.15em;
+}
+
+.classindex dl.odd {
+ background-color: #F8F9FC;
+}
+
+@media(min-width: 1120px) {
+ .classindex dl {
+ column-count:2
+ }
+}
+
+@media(min-width: 1320px) {
+ .classindex dl {
+ column-count:3
+ }
+}
+
+
/* @group Link Styling */
a {
@@ -143,17 +209,6 @@ a:hover {
text-decoration: underline;
}
-a.qindex {
- font-weight: bold;
-}
-
-a.qindexHL {
- font-weight: bold;
- background-color: #9CAFD4;
- color: #FFFFFF;
- border: 1px double #869DCA;
-}
-
.contents a.qindexHL:visited {
color: #FFFFFF;
}
@@ -1358,10 +1413,12 @@ dl.citelist dt {
font-weight:bold;
margin-right:10px;
padding:5px;
+ text-align:right;
+ width:52px;
}
dl.citelist dd {
- margin:2px 0;
+ margin:2px 0 2px 72px;
padding:5px 0;
}
@@ -1424,6 +1481,12 @@ div.toc li.level4 {
margin-left: 45px;
}
+span.emoji {
+ /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html
+ * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort;
+ */
+}
+
.PageDocRTL-title div.toc li.level1 {
margin-left: 0 !important;
margin-right: 0;
@@ -1661,47 +1724,6 @@ tr.heading h2 {
/* @group Markdown */
-/*
-table.markdownTable {
- border-collapse:collapse;
- margin-top: 4px;
- margin-bottom: 4px;
-}
-
-table.markdownTable td, table.markdownTable th {
- border: 1px solid #2D4068;
- padding: 3px 7px 2px;
-}
-
-table.markdownTableHead tr {
-}
-
-table.markdownTableBodyLeft td, table.markdownTable th {
- border: 1px solid #2D4068;
- padding: 3px 7px 2px;
-}
-
-th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone {
- background-color: #374F7F;
- color: #FFFFFF;
- font-size: 110%;
- padding-bottom: 4px;
- padding-top: 5px;
-}
-
-th.markdownTableHeadLeft {
- text-align: left
-}
-
-th.markdownTableHeadRight {
- text-align: right
-}
-
-th.markdownTableHeadCenter {
- text-align: center
-}
-*/
-
table.markdownTable {
border-collapse:collapse;
margin-top: 4px;
diff --git a/docs/doxygen.png b/docs/doxygen.png
deleted file mode 100644
index 3ff17d8..0000000
Binary files a/docs/doxygen.png and /dev/null differ
diff --git a/docs/doxygen.svg b/docs/doxygen.svg
new file mode 100644
index 0000000..d42dad5
--- /dev/null
+++ b/docs/doxygen.svg
@@ -0,0 +1,26 @@
+
+
diff --git a/docs/dynsections.js b/docs/dynsections.js
index ea0a7b3..3174bd7 100644
--- a/docs/dynsections.js
+++ b/docs/dynsections.js
@@ -1,25 +1,26 @@
/*
- @licstart The following is the entire license notice for the
- JavaScript code in this file.
+ @licstart The following is the entire license notice for the JavaScript code in this file.
- Copyright (C) 1997-2017 by Dimitri van Heesch
+ The MIT License (MIT)
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
+ Copyright (C) 1997-2020 by Dimitri van Heesch
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
- @licend The above is the entire license notice
- for the JavaScript code in this file
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend The above is the entire license notice for the JavaScript code in this file
*/
function toggleVisibility(linkObj)
{
diff --git a/docs/files.html b/docs/files.html
index 7f5ac75..1d7d1d6 100644
--- a/docs/files.html
+++ b/docs/files.html
@@ -3,7 +3,7 @@
-
+
PicoVGA: File List
@@ -29,7 +29,7 @@
The vga_config.h contains the PicoVGA library settings, such as the size of the render buffers. You usually do not need to pay attention to this file. You usually only have to modify it in the following cases:
When you use a display resolution greater than 640x480 pixels. Typically, the configuration file sets the maximum resolution to 640x480. This must be adjusted at higher resolutions to allow the library to reserve larger buffers for rendering functions.
-
If there is not enough RAM. There is still some headroom where you can save some memory. First, you can reduce the MAXX, MAXY, and MAXLINE resolution settings down to a real values. Next, you can reduce the number of LAYERS down to the actual value used (in the range of 1 to 4). Finally, you can reduce the number of segments and stripes to the actual value SEGMAX and STRIPMAX (minimum is 1).
+
If there is not enough RAM. There is still some headroom where you can save some memory. First, you can reduce the MAXX, MAXY, and MAXLINE resolution settings down to a real values. Next, you can reduce the number of LAYERS down to the actual value used (in the range of 1 to 4). Finally, you can reduce the number of segments and stripes to the actual value SEGMAX and STRIPMAX (minimum is 1).
The third case is to use of a large number of display stripes and segments. Normally, the values here are set to 8 stripes (=horizontal strips) and 8 segments (=vertical division of each strip).
If you have an older monitor that requires VGA VSync, uncomment the line the CMakeLists.txt file that sets the vsync pin:
The following fonts are ready to use in programs. The fonts in PicoVGA are in monochrome image format (i.e. 1 pixel is 1 bit) with 256 characters per line and a character width of 8 pixels. The total width of the image is therefore 2048 pixels (256 bytes). The height of the font can be arbitrary, but by default there are 8, 14 and 16 line fonts in the library. Fonts are exported by the RaspPicoImg utility to *.cpp source text format, and are added to the program as a byte array.
Layer modes can only be combined together if they use the same program. CPP is the minimum required number of SMx clock cycles per pixel.
-
PROG_BASE
PROG_KEY
PROG_BLACK
PROG_WHITE
PROG_MONO
PROG_RLE
CPP
+
PROG_BASE
PROG_KEY
PROG_BLACK
PROG_WHITE
PROG_MONO
PROG_RLE
CPP
-
LAYERMODE_BASE
X
2
+
LAYERMODE_BASE
X
2
-
LAYERMODE_KEY
X
6
+
LAYERMODE_KEY
X
6
-
LAYERMODE_BLACK
X
4
+
LAYERMODE_BLACK
X
4
-
LAYERMODE_WHITE
X
4
+
LAYERMODE_WHITE
X
4
-
LAYERMODE_MONO
X
4
+
LAYERMODE_MONO
X
4
-
LAYERMODE_COLOR
X
2
+
LAYERMODE_COLOR
X
2
-
LAYERMODE_RLE
X
3
+
LAYERMODE_RLE
X
3
-
LAYERMODE_SPRITEKEY
X
6
+
LAYERMODE_SPRITEKEY
X
6
-
LAYERMODE_SPRITEBLACK
X
4
+
LAYERMODE_SPRITEBLACK
X
4
-
LAYERMODE_SPRITEWHITE
X
4
+
LAYERMODE_SPRITEWHITE
X
4
-
LAYERMODE_FASTSPRITEKEY
X
6
+
LAYERMODE_FASTSPRITEKEY
X
6
-
LAYERMODE_FASTSPRITEBLACK
X
4
+
LAYERMODE_FASTSPRITEBLACK
X
4
-
LAYERMODE_FASTSPRITEWHITE
X
4
+
LAYERMODE_FASTSPRITEWHITE
X
4
-
LAYERMODE_PERSPKEY
X
6
+
LAYERMODE_PERSPKEY
X
6
-
LAYERMODE_PERSPBLACK
X
4
+
LAYERMODE_PERSPBLACK
X
4
-
LAYERMODE_PERSPWHITE
X
4
+
LAYERMODE_PERSPWHITE
X
4
-
LAYERMODE_PERSP2KEY
X
6
+
LAYERMODE_PERSP2KEY
X
6
-
LAYERMODE_PERSP2BLACK
X
4
+
LAYERMODE_PERSP2BLACK
X
4
-
LAYERMODE_PERSP2WHITE
X
4
+
LAYERMODE_PERSP2WHITE
X
4
Selection of write planes
By default, the image is output from the layers to all output pins. This can be changed by redefining the LayerFirstPin and LayerNumPin fields (in vga_layer.cpp). It is possible to specify for each layer separately which output pins will be written to. This can create a kind of pseudo-transparency. For example, one layer will render curves in red, another layer in green, and the colors will blend independently. When redefining the pins, however, you must take into account that the offset of the pin mapping will shift. The output will always start from the lowest bits of the pixel.
This is a fork of the PicoVGA project created by Miroslav Nemecek (Panda.nosp@m.38@s.nosp@m.eznam.nosp@m..cz). It has been altered from the original to use the standard Linux-based Raspberry Pi Pico SDK. The header files have also been altered to support automatically generating this documentation.
The PicoVGA library enables the Raspberry Pico to output to a VGA monitor or PAL/NTSC TV with ease, making it ideal for technical and gaming applications. It provides four graphic overlay layers with transparency and supports nearly 30 frame buffer formats that can be freely combined while using limited RAM memory. The output is limited to 8 bits, which helps to save on RAM.
diff --git a/docs/menu.js b/docs/menu.js
index 433c15b..2fe2214 100644
--- a/docs/menu.js
+++ b/docs/menu.js
@@ -1,25 +1,26 @@
/*
- @licstart The following is the entire license notice for the
- JavaScript code in this file.
+ @licstart The following is the entire license notice for the JavaScript code in this file.
- Copyright (C) 1997-2017 by Dimitri van Heesch
+ The MIT License (MIT)
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
+ Copyright (C) 1997-2020 by Dimitri van Heesch
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
- @licend The above is the entire license notice
- for the JavaScript code in this file
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend The above is the entire license notice for the JavaScript code in this file
*/
function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
function makeTree(data,relPath) {
@@ -40,9 +41,9 @@ function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
$('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
if (searchEnabled) {
if (serverSide) {
- $('#main-menu').append('
');
+ $('#main-menu').append('
');
} else {
- $('#main-menu').append('
');
+ $('#main-menu').append('
');
}
}
$('#main-menu').smartmenus();
diff --git a/docs/menudata.js b/docs/menudata.js
index 59de2ca..bd079ad 100644
--- a/docs/menudata.js
+++ b/docs/menudata.js
@@ -1,24 +1,26 @@
/*
-@licstart The following is the entire license notice for the
-JavaScript code in this file.
+ @licstart The following is the entire license notice for the JavaScript code in this file.
-Copyright (C) 1997-2019 by Dimitri van Heesch
+ The MIT License (MIT)
-This program is free software; you can redistribute it and/or modify
-it under the terms of version 2 of the GNU General Public License as published by
-the Free Software Foundation
+ Copyright (C) 1997-2020 by Dimitri van Heesch
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
-You should have received a copy of the GNU General Public License along
-with this program; if not, write to the Free Software Foundation, Inc.,
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
-@licend The above is the entire license notice
-for the JavaScript code in this file
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend The above is the entire license notice for the JavaScript code in this file
*/
var menudata={children:[
{text:"Main Page",url:"index.html"},
diff --git a/docs/modules.html b/docs/modules.html
index 96ba4bd..62001da 100644
--- a/docs/modules.html
+++ b/docs/modules.html
@@ -3,7 +3,7 @@
-
+
PicoVGA: API Modules
@@ -29,7 +29,7 @@
diff --git a/docs/resize.js b/docs/resize.js
index a0bb5f4..e1ad0fe 100644
--- a/docs/resize.js
+++ b/docs/resize.js
@@ -1,25 +1,26 @@
/*
- @licstart The following is the entire license notice for the
- JavaScript code in this file.
+ @licstart The following is the entire license notice for the JavaScript code in this file.
- Copyright (C) 1997-2017 by Dimitri van Heesch
+ The MIT License (MIT)
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
+ Copyright (C) 1997-2020 by Dimitri van Heesch
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
- @licend The above is the entire license notice
- for the JavaScript code in this file
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend The above is the entire license notice for the JavaScript code in this file
*/
function initResizable()
{
@@ -91,7 +92,9 @@ function initResizable()
}
collapsedWidth=width;
}
- (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView();
+ if (location.hash.slice(1)) {
+ (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView();
+ }
}
function collapseExpand()
diff --git a/docs/search/all_0.html b/docs/search/all_0.html
index 26dd244..1ec5b2d 100644
--- a/docs/search/all_0.html
+++ b/docs/search/all_0.html
@@ -1,7 +1,8 @@
-
+
+
-
+
@@ -10,21 +11,27 @@
diff --git a/docs/search/all_3.js b/docs/search/all_3.js
index b37a352..010958c 100644
--- a/docs/search/all_3.js
+++ b/docs/search/all_3.js
@@ -1,36 +1,50 @@
var searchData=
[
- ['data_53',['data',['../structsSegm.html#a29fd56b2214e170d8e9a2f67c2ae778f',1,'sSegm']]],
- ['dbly_54',['dbly',['../structsSegm.html#a359b60c1de8f3aaefd3163c17fc57c37',1,'sSegm::dbly()'],['../structsVgaCfg.html#a21a20dab4d94ff69bd3777bc19d41e7a',1,'sVgaCfg::dbly()'],['../structsVmode.html#a124261ecab07b7aab8e6df91ea95d6f4',1,'sVmode::dbly()']]],
- ['decnum_55',['DecNum',['../group__UtilsGroup.html#ga31e41cec17ed79dc0bd026b6d45237a0',1,'DecNum(char *buf, s32 num): vga_util.cpp'],['../group__UtilsGroup.html#ga31e41cec17ed79dc0bd026b6d45237a0',1,'DecNum(char *buf, s32 num): vga_util.cpp']]],
- ['decunum_56',['DecUNum',['../group__UtilsGroup.html#ga6d2664ea6a63954346a80ca93cfb3b74',1,'DecUNum(char *buf, u32 num): vga_util.cpp'],['../group__UtilsGroup.html#ga6d2664ea6a63954346a80ca93cfb3b74',1,'DecUNum(char *buf, u32 num): vga_util.cpp']]],
- ['define_2eh_57',['define.h',['../define_8h.html',1,'']]],
- ['defpal16_58',['DefPal16',['../group__ColorsGroup.html#gaad8c5daca47d687a13a4e940727cbd08',1,'DefPal16(): vga_pal.cpp'],['../group__ColorsGroup.html#gaad8c5daca47d687a13a4e940727cbd08',1,'DefPal16(): vga_pal.cpp']]],
- ['dev_5fntsc_59',['DEV_NTSC',['../group__VideoModeGroup.html#ggadf764cbdea00d65edcd07bb9953ad2b7afbc7eef2e6768fa471d531d40acb4d7f',1,'vga_vmode.h']]],
- ['dev_5fpal_60',['DEV_PAL',['../group__VideoModeGroup.html#ggadf764cbdea00d65edcd07bb9953ad2b7a08d8d7aff466c770efaf041ad980b53d',1,'vga_vmode.h']]],
- ['dev_5fvga_61',['DEV_VGA',['../group__VideoModeGroup.html#ggadf764cbdea00d65edcd07bb9953ad2b7a4fdffdf8c8f5e50508fbd327b6443eac',1,'vga_vmode.h']]],
- ['div_62',['div',['../structsVmode.html#a57e1e848cf36ba4dbe232cff9ed4a5b5',1,'sVmode']]],
- ['double_63',['Double',['../classcRandom.html#ab6e855c6ad3f8d8a28f73ff31877901f',1,'cRandom']]],
- ['doublemax_64',['DoubleMax',['../classcRandom.html#a43d245705615c8855ca74528e8dfc1e3',1,'cRandom']]],
- ['doubleminmax_65',['DoubleMinMax',['../classcRandom.html#a78099006605ba8c4010db0583041c73c',1,'cRandom']]],
- ['drawblit_66',['DrawBlit',['../group__CanvasGroup.html#ga51e936c817f616d8118c1caeda0c1526',1,'DrawBlit(sCanvas *canvas, sCanvas *src, int xd, int yd, int xs, int ys, int w, int h, u8 col): canvas.cpp'],['../group__CanvasGroup.html#ga51e936c817f616d8118c1caeda0c1526',1,'DrawBlit(sCanvas *canvas, sCanvas *src, int xd, int yd, int xs, int ys, int w, int h, u8 col): canvas.cpp']]],
- ['drawcircle_67',['DrawCircle',['../group__CanvasGroup.html#ga3342dbc6a4cb8c330c5d52cd18d23fdf',1,'DrawCircle(sCanvas *canvas, int x0, int y0, int r, u8 col, u8 mask): canvas.cpp'],['../group__CanvasGroup.html#ga3342dbc6a4cb8c330c5d52cd18d23fdf',1,'DrawCircle(sCanvas *canvas, int x0, int y0, int r, u8 col, u8 mask=0xff): canvas.cpp']]],
- ['drawclear_68',['DrawClear',['../group__CanvasGroup.html#ga35996ee70491a2ec819411c659df99a6',1,'DrawClear(sCanvas *canvas): canvas.cpp'],['../group__CanvasGroup.html#ga35996ee70491a2ec819411c659df99a6',1,'DrawClear(sCanvas *canvas): canvas.cpp']]],
- ['drawfillcircle_69',['DrawFillCircle',['../group__CanvasGroup.html#gab482486182a41847f517b2e4904bad85',1,'DrawFillCircle(sCanvas *canvas, int x0, int y0, int r, u8 col, u8 mask): canvas.cpp'],['../group__CanvasGroup.html#gab482486182a41847f517b2e4904bad85',1,'DrawFillCircle(sCanvas *canvas, int x0, int y0, int r, u8 col, u8 mask=0xff): canvas.cpp']]],
- ['drawframe_70',['DrawFrame',['../group__CanvasGroup.html#ga030eb117917d9fa5e356fa5a5ac987a5',1,'DrawFrame(sCanvas *canvas, int x, int y, int w, int h, u8 col): canvas.cpp'],['../group__CanvasGroup.html#ga030eb117917d9fa5e356fa5a5ac987a5',1,'DrawFrame(sCanvas *canvas, int x, int y, int w, int h, u8 col): canvas.cpp']]],
- ['drawimg_71',['DrawImg',['../group__CanvasGroup.html#ga07403253f5e46116ae22ea94b4161c86',1,'DrawImg(sCanvas *canvas, sCanvas *src, int xd, int yd, int xs, int ys, int w, int h): canvas.cpp'],['../group__CanvasGroup.html#ga07403253f5e46116ae22ea94b4161c86',1,'DrawImg(sCanvas *canvas, sCanvas *src, int xd, int yd, int xs, int ys, int w, int h): canvas.cpp']]],
- ['drawimg_5fclamp_72',['DRAWIMG_CLAMP',['../group__CanvasGroup.html#gga06fc87d81c62e9abb8790b6e5713c55ba70b4c77115c7c9b4f5c0da3298e61816',1,'canvas.h']]],
- ['drawimg_5fnoborder_73',['DRAWIMG_NOBORDER',['../group__CanvasGroup.html#gga06fc87d81c62e9abb8790b6e5713c55bac2d993dee7c2bcd984acc5d1d866d7d1',1,'canvas.h']]],
- ['drawimg_5fpersp_74',['DRAWIMG_PERSP',['../group__CanvasGroup.html#gga06fc87d81c62e9abb8790b6e5713c55ba63b0d0919cc2fbf9e04f81c9bf206616',1,'canvas.h']]],
- ['drawimg_5ftransp_75',['DRAWIMG_TRANSP',['../group__CanvasGroup.html#gga06fc87d81c62e9abb8790b6e5713c55baf1ac512496407c856e86534f56f7220d',1,'canvas.h']]],
- ['drawimg_5fwrap_76',['DRAWIMG_WRAP',['../group__CanvasGroup.html#gga06fc87d81c62e9abb8790b6e5713c55bada988f101a668aa32ac8be4465a3c94f',1,'canvas.h']]],
- ['drawimgline_77',['DrawImgLine',['../group__CanvasGroup.html#ga8b38b2530c058e70233c8ae6c622cfef',1,'DrawImgLine(sCanvas *canvas, sCanvas *src, int xd, int yd, int xs, int ys, int wd, int ws): canvas.cpp'],['../group__CanvasGroup.html#ga8b38b2530c058e70233c8ae6c622cfef',1,'DrawImgLine(sCanvas *canvas, sCanvas *src, int xd, int yd, int xs, int ys, int wd, int ws): canvas.cpp']]],
- ['drawimgmat_78',['DrawImgMat',['../group__CanvasGroup.html#ga5d1db92659f6c11713cd0fb9c45f3637',1,'canvas.h']]],
- ['drawing_5fcolor_79',['DRAWING_COLOR',['../group__CanvasGroup.html#gga06fc87d81c62e9abb8790b6e5713c55baa1b8793cfd30dea692ac0944b189e833',1,'canvas.h']]],
- ['drawline_80',['DrawLine',['../group__CanvasGroup.html#ga3452639f8699459e2db4c8c07717ff8c',1,'DrawLine(sCanvas *canvas, int x1, int y1, int x2, int y2, u8 col): canvas.cpp'],['../group__CanvasGroup.html#ga3452639f8699459e2db4c8c07717ff8c',1,'DrawLine(sCanvas *canvas, int x1, int y1, int x2, int y2, u8 col): canvas.cpp']]],
- ['drawpoint_81',['DrawPoint',['../group__CanvasGroup.html#ga847429aa8ed956796cb0637b44fdcf9e',1,'DrawPoint(sCanvas *canvas, int x, int y, u8 col): canvas.cpp'],['../group__CanvasGroup.html#ga847429aa8ed956796cb0637b44fdcf9e',1,'DrawPoint(sCanvas *canvas, int x, int y, u8 col): canvas.cpp']]],
- ['drawrect_82',['DrawRect',['../group__CanvasGroup.html#gac8441b25105805be5e7da188957bd058',1,'DrawRect(sCanvas *canvas, int x, int y, int w, int h, u8 col): canvas.cpp'],['../group__CanvasGroup.html#gac8441b25105805be5e7da188957bd058',1,'DrawRect(sCanvas *canvas, int x, int y, int w, int h, u8 col): canvas.cpp']]],
- ['drawtext_83',['DrawText',['../group__CanvasGroup.html#ga4a2c127f6c6eca6425f074d2523c230a',1,'DrawText(sCanvas *canvas, const char *text, int x, int y, u8 col, const void *font, int fontheight, int scalex, int scaley): canvas.cpp'],['../group__CanvasGroup.html#ga4a2c127f6c6eca6425f074d2523c230a',1,'DrawText(sCanvas *canvas, const char *text, int x, int y, u8 col, const void *font, int fontheight=8, int scalex=1, int scaley=1): canvas.cpp']]],
- ['drawtextbg_84',['DrawTextBg',['../group__CanvasGroup.html#gac53e49cc83c30367199882379ba8fd92',1,'DrawTextBg(sCanvas *canvas, const char *text, int x, int y, u8 col, u8 bgcol, const void *font, int fontheight, int scalex, int scaley): canvas.cpp'],['../group__CanvasGroup.html#gac53e49cc83c30367199882379ba8fd92',1,'DrawTextBg(sCanvas *canvas, const char *text, int x, int y, u8 col, u8 bgcol, const void *font, int fontheight=8, int scalex=1, int scaley=1): canvas.cpp']]],
- ['drawtilemap_85',['DrawTileMap',['../group__CanvasGroup.html#gaab3620a5cf2c20a6d9fd0b05f5eaf934',1,'DrawTileMap(sCanvas *canvas, const sCanvas *src, const u8 *map, int mapwbits, int maphbits, int tilebits, int x, int y, int w, int h, const cMat2Df *mat, u8 horizon): canvas.cpp'],['../group__CanvasGroup.html#gaab3620a5cf2c20a6d9fd0b05f5eaf934',1,'DrawTileMap(sCanvas *canvas, const sCanvas *src, const u8 *map, int mapwbits, int maphbits, int tilebits, int x, int y, int w, int h, const cMat2Df *mat, u8 horizon): canvas.cpp']]]
+ ['canvas_7',['Canvas',['../group__VideoModeGroup.html#ga4b445e69b039011d96ef7276777f445c',1,'Canvas(): vga_vmode.cpp'],['../group__VideoModeGroup.html#ga4b445e69b039011d96ef7276777f445c',1,'Canvas(): vga_vmode.cpp'],['../group__CanvasGroup.html',1,'(Global Namespace)']]],
+ ['canvas_2eh_8',['canvas.h',['../canvas_8h.html',1,'']]],
+ ['canvas_5f2_9',['CANVAS_2',['../group__CanvasGroup.html#gafa90f4450178445079fccd1ddbf417e7',1,'canvas.h']]],
+ ['canvas_5f4_10',['CANVAS_4',['../group__CanvasGroup.html#ga0619d036103a78d619f4a8144d2c3317',1,'canvas.h']]],
+ ['canvas_5f8_11',['CANVAS_8',['../group__CanvasGroup.html#gac99b22ab3c8e5d3d7a461af409cb1c61',1,'canvas.h']]],
+ ['canvas_5fattrib8_12',['CANVAS_ATTRIB8',['../group__CanvasGroup.html#ga32b205271cce499f59589caf5fefe848',1,'canvas.h']]],
+ ['canvas_5fplane2_13',['CANVAS_PLANE2',['../group__CanvasGroup.html#gaa0fbfa9482a4b162600c5c66122a8173',1,'canvas.h']]],
+ ['cfg_14',['Cfg',['../group__VideoModeGroup.html#gabecd7c08a1f9ed4ca20d37d27324c9f9',1,'Cfg(): vga_vmode.cpp'],['../group__VideoModeGroup.html#gabecd7c08a1f9ed4ca20d37d27324c9f9',1,'Cfg(): vga_vmode.cpp']]],
+ ['cgacol_5f0_15',['CGACOL_0',['../group__ColorsGroup.html#gadd6ed012790320454ab9ce9801070fe6',1,'vga_pal.h']]],
+ ['cgacol_5f1_16',['CGACOL_1',['../group__ColorsGroup.html#ga4ffc1363d1a7fb89832d65bf50dceece',1,'vga_pal.h']]],
+ ['cgacol_5f10_17',['CGACOL_10',['../group__ColorsGroup.html#ga799d0c141031d500e1d8c374367cd848',1,'vga_pal.h']]],
+ ['cgacol_5f11_18',['CGACOL_11',['../group__ColorsGroup.html#ga82a5b42035ce5ade621c4273e96ac6b7',1,'vga_pal.h']]],
+ ['cgacol_5f12_19',['CGACOL_12',['../group__ColorsGroup.html#ga7f0eea2b5b9b02bbb51458d0d7b5cc75',1,'vga_pal.h']]],
+ ['cgacol_5f13_20',['CGACOL_13',['../group__ColorsGroup.html#gab15efd2b29192c9e35ca30ef075f9976',1,'vga_pal.h']]],
+ ['cgacol_5f14_21',['CGACOL_14',['../group__ColorsGroup.html#ga6f9c031f79e0e800f5b33b726cbe99d6',1,'vga_pal.h']]],
+ ['cgacol_5f15_22',['CGACOL_15',['../group__ColorsGroup.html#gab01da00edd299988b4b4f30893e84e51',1,'vga_pal.h']]],
+ ['cgacol_5f2_23',['CGACOL_2',['../group__ColorsGroup.html#gae7628f0f480ae146911ca32c5aa835a6',1,'vga_pal.h']]],
+ ['cgacol_5f3_24',['CGACOL_3',['../group__ColorsGroup.html#ga48bb5ce1116d39f7299dc5ca2a6aabe5',1,'vga_pal.h']]],
+ ['cgacol_5f4_25',['CGACOL_4',['../group__ColorsGroup.html#ga2f5a2e7e1486527ec030b3bc6a3c11fe',1,'vga_pal.h']]],
+ ['cgacol_5f5_26',['CGACOL_5',['../group__ColorsGroup.html#ga29b733fd6256191e93b754b3443a1320',1,'vga_pal.h']]],
+ ['cgacol_5f6_27',['CGACOL_6',['../group__ColorsGroup.html#gaddad66cfc2baf7a0d981fad105629b71',1,'vga_pal.h']]],
+ ['cgacol_5f7_28',['CGACOL_7',['../group__ColorsGroup.html#gab6f7163f4a62b6fd431ae8c3c2e4476b',1,'vga_pal.h']]],
+ ['cgacol_5f8_29',['CGACOL_8',['../group__ColorsGroup.html#ga527e54abf1e679d2ef6573d75a6e9009',1,'vga_pal.h']]],
+ ['cgacol_5f9_30',['CGACOL_9',['../group__ColorsGroup.html#ga7f32e59f92b3ac13320d52398083b573',1,'vga_pal.h']]],
+ ['cgaussdrandom_31',['cGaussDRandom',['../classcGaussDRandom.html',1,'']]],
+ ['cgaussfrandom_32',['cGaussFRandom',['../classcGaussFRandom.html',1,'']]],
+ ['char_5fframe_33',['CHAR_FRAME',['../group__TextGroup.html#ga08f1603ccb8c82f614bdd49b8c371482',1,'print.h']]],
+ ['char_5fframe_5ffirst_34',['CHAR_FRAME_FIRST',['../group__TextGroup.html#ga6f1b1fcf3220fb950d30acc1b41fa9ee',1,'print.h']]],
+ ['char_5fframe_5flast_35',['CHAR_FRAME_LAST',['../group__TextGroup.html#ga9736253678da381b7d0e76feb155ef4b',1,'print.h']]],
+ ['char_5fhline_36',['CHAR_HLINE',['../group__TextGroup.html#ga8328f65449a77cc11ae0302f709a33b5',1,'print.h']]],
+ ['char_5fvline_37',['CHAR_VLINE',['../group__TextGroup.html#ga1526153f29404eae222b6f97b4836ae6',1,'print.h']]],
+ ['cmat2d_38',['cMat2D',['../classcMat2D.html',1,'']]],
+ ['cmat2d_3c_20float_20_3e_39',['cMat2D< float >',['../classcMat2D.html',1,'']]],
+ ['cmat2df_40',['cMat2Df',['../classcMat2Df.html',1,'']]],
+ ['coldist_41',['ColDist',['../group__ColorsGroup.html#ga22e70505c42d3cf99fd0211f18014cf6',1,'ColDist(u8 col1, u8 col2): vga_pal.cpp'],['../group__ColorsGroup.html#ga22e70505c42d3cf99fd0211f18014cf6',1,'ColDist(u8 col1, u8 col2): vga_pal.cpp']]],
+ ['colors_20and_20palettes_42',['Colors and Palettes',['../group__ColorsGroup.html',1,'']]],
+ ['colrgb_43',['COLRGB',['../group__ColorsGroup.html#gabceaf8fb5d6638b2c0f9f398380e8feb',1,'vga_pal.h']]],
+ ['configurating_20video_20mode_44',['Configurating Video Mode',['../group__VideoModeGroup.html',1,'']]],
+ ['connections_45',['Connections',['../connections.html',1,'']]],
+ ['copy_46',['Copy',['../classcMat2D.html#a4127207cc8695b12793cc27f66cb9d7b',1,'cMat2D']]],
+ ['copywhiteimg_47',['CopyWhiteImg',['../group__UtilsGroup.html#ga49a4978da9e0f15dcdc9ebfc9d6c520e',1,'CopyWhiteImg(u8 *dst, const u8 *src, int num): vga_util.cpp'],['../group__UtilsGroup.html#ga49a4978da9e0f15dcdc9ebfc9d6c520e',1,'CopyWhiteImg(u8 *dst, const u8 *src, int num): vga_util.cpp']]],
+ ['core1busy_48',['Core1Busy',['../group__Core1Group.html#ga8304edb5a4c5f234724d4e6deeead917',1,'Core1Busy(): vga.cpp'],['../group__Core1Group.html#ga8304edb5a4c5f234724d4e6deeead917',1,'Core1Busy(): vga.cpp']]],
+ ['core1exec_49',['Core1Exec',['../group__Core1Group.html#gafe1c81149967385aa5284a90153c98b7',1,'Core1Exec(void(*fnc)()): vga.cpp'],['../group__Core1Group.html#gafe1c81149967385aa5284a90153c98b7',1,'Core1Exec(void(*fnc)()): vga.cpp']]],
+ ['core1wait_50',['Core1Wait',['../group__Core1Group.html#ga180966e085ce28347b335bde3d3d09ca',1,'Core1Wait(): vga.cpp'],['../group__Core1Group.html#ga180966e085ce28347b335bde3d3d09ca',1,'Core1Wait(): vga.cpp']]],
+ ['cpp_51',['cpp',['../structsLayer.html#a26daff2ecab64e079ff060f3b97db230',1,'sLayer::cpp()'],['../structsVmode.html#aa20b38a85cebf25e8624d09e33824ec3',1,'sVmode::cpp()']]],
+ ['cpu_20overclocking_52',['CPU Overclocking',['../group__OverclockGroup.html',1,'']]],
+ ['crandom_53',['cRandom',['../classcRandom.html',1,'']]]
];
diff --git a/docs/search/all_4.html b/docs/search/all_4.html
index 06de155..fc40463 100644
--- a/docs/search/all_4.html
+++ b/docs/search/all_4.html
@@ -1,7 +1,8 @@
-
+
+
-
+
@@ -10,21 +11,27 @@
Loading...
-
+
Searching...
No Matches
-
+
diff --git a/docs/search/all_4.js b/docs/search/all_4.js
index 09bf9cd..8689421 100644
--- a/docs/search/all_4.js
+++ b/docs/search/all_4.js
@@ -1,4 +1,36 @@
var searchData=
[
- ['exportint_86',['ExportInt',['../classcMat2Df.html#a3665cc793ee74c64da3186b9eaf86b57',1,'cMat2Df']]]
+ ['data_54',['data',['../structsSegm.html#a29fd56b2214e170d8e9a2f67c2ae778f',1,'sSegm']]],
+ ['dbly_55',['dbly',['../structsSegm.html#a359b60c1de8f3aaefd3163c17fc57c37',1,'sSegm::dbly()'],['../structsVgaCfg.html#a21a20dab4d94ff69bd3777bc19d41e7a',1,'sVgaCfg::dbly()'],['../structsVmode.html#a124261ecab07b7aab8e6df91ea95d6f4',1,'sVmode::dbly()']]],
+ ['decnum_56',['DecNum',['../group__UtilsGroup.html#ga31e41cec17ed79dc0bd026b6d45237a0',1,'DecNum(char *buf, s32 num): vga_util.cpp'],['../group__UtilsGroup.html#ga31e41cec17ed79dc0bd026b6d45237a0',1,'DecNum(char *buf, s32 num): vga_util.cpp']]],
+ ['decunum_57',['DecUNum',['../group__UtilsGroup.html#ga6d2664ea6a63954346a80ca93cfb3b74',1,'DecUNum(char *buf, u32 num): vga_util.cpp'],['../group__UtilsGroup.html#ga6d2664ea6a63954346a80ca93cfb3b74',1,'DecUNum(char *buf, u32 num): vga_util.cpp']]],
+ ['define_2eh_58',['define.h',['../define_8h.html',1,'']]],
+ ['defpal16_59',['DefPal16',['../group__ColorsGroup.html#gaad8c5daca47d687a13a4e940727cbd08',1,'DefPal16(): vga_pal.cpp'],['../group__ColorsGroup.html#gaad8c5daca47d687a13a4e940727cbd08',1,'DefPal16(): vga_pal.cpp']]],
+ ['dev_5fntsc_60',['DEV_NTSC',['../group__VideoModeGroup.html#ggadf764cbdea00d65edcd07bb9953ad2b7afbc7eef2e6768fa471d531d40acb4d7f',1,'vga_vmode.h']]],
+ ['dev_5fpal_61',['DEV_PAL',['../group__VideoModeGroup.html#ggadf764cbdea00d65edcd07bb9953ad2b7a08d8d7aff466c770efaf041ad980b53d',1,'vga_vmode.h']]],
+ ['dev_5fvga_62',['DEV_VGA',['../group__VideoModeGroup.html#ggadf764cbdea00d65edcd07bb9953ad2b7a4fdffdf8c8f5e50508fbd327b6443eac',1,'vga_vmode.h']]],
+ ['div_63',['div',['../structsVmode.html#a57e1e848cf36ba4dbe232cff9ed4a5b5',1,'sVmode']]],
+ ['double_64',['Double',['../classcRandom.html#ab6e855c6ad3f8d8a28f73ff31877901f',1,'cRandom']]],
+ ['doublemax_65',['DoubleMax',['../classcRandom.html#a43d245705615c8855ca74528e8dfc1e3',1,'cRandom']]],
+ ['doubleminmax_66',['DoubleMinMax',['../classcRandom.html#a78099006605ba8c4010db0583041c73c',1,'cRandom']]],
+ ['drawblit_67',['DrawBlit',['../group__CanvasGroup.html#ga51e936c817f616d8118c1caeda0c1526',1,'DrawBlit(sCanvas *canvas, sCanvas *src, int xd, int yd, int xs, int ys, int w, int h, u8 col): canvas.cpp'],['../group__CanvasGroup.html#ga51e936c817f616d8118c1caeda0c1526',1,'DrawBlit(sCanvas *canvas, sCanvas *src, int xd, int yd, int xs, int ys, int w, int h, u8 col): canvas.cpp']]],
+ ['drawcircle_68',['DrawCircle',['../group__CanvasGroup.html#ga3342dbc6a4cb8c330c5d52cd18d23fdf',1,'DrawCircle(sCanvas *canvas, int x0, int y0, int r, u8 col, u8 mask): canvas.cpp'],['../group__CanvasGroup.html#ga3342dbc6a4cb8c330c5d52cd18d23fdf',1,'DrawCircle(sCanvas *canvas, int x0, int y0, int r, u8 col, u8 mask=0xff): canvas.cpp']]],
+ ['drawclear_69',['DrawClear',['../group__CanvasGroup.html#ga35996ee70491a2ec819411c659df99a6',1,'DrawClear(sCanvas *canvas): canvas.cpp'],['../group__CanvasGroup.html#ga35996ee70491a2ec819411c659df99a6',1,'DrawClear(sCanvas *canvas): canvas.cpp']]],
+ ['drawfillcircle_70',['DrawFillCircle',['../group__CanvasGroup.html#gab482486182a41847f517b2e4904bad85',1,'DrawFillCircle(sCanvas *canvas, int x0, int y0, int r, u8 col, u8 mask=0xff): canvas.cpp'],['../group__CanvasGroup.html#gab482486182a41847f517b2e4904bad85',1,'DrawFillCircle(sCanvas *canvas, int x0, int y0, int r, u8 col, u8 mask): canvas.cpp']]],
+ ['drawframe_71',['DrawFrame',['../group__CanvasGroup.html#ga030eb117917d9fa5e356fa5a5ac987a5',1,'DrawFrame(sCanvas *canvas, int x, int y, int w, int h, u8 col): canvas.cpp'],['../group__CanvasGroup.html#ga030eb117917d9fa5e356fa5a5ac987a5',1,'DrawFrame(sCanvas *canvas, int x, int y, int w, int h, u8 col): canvas.cpp']]],
+ ['drawimg_72',['DrawImg',['../group__CanvasGroup.html#ga07403253f5e46116ae22ea94b4161c86',1,'DrawImg(sCanvas *canvas, sCanvas *src, int xd, int yd, int xs, int ys, int w, int h): canvas.cpp'],['../group__CanvasGroup.html#ga07403253f5e46116ae22ea94b4161c86',1,'DrawImg(sCanvas *canvas, sCanvas *src, int xd, int yd, int xs, int ys, int w, int h): canvas.cpp']]],
+ ['drawimg_5fclamp_73',['DRAWIMG_CLAMP',['../group__CanvasGroup.html#gga06fc87d81c62e9abb8790b6e5713c55ba70b4c77115c7c9b4f5c0da3298e61816',1,'canvas.h']]],
+ ['drawimg_5fnoborder_74',['DRAWIMG_NOBORDER',['../group__CanvasGroup.html#gga06fc87d81c62e9abb8790b6e5713c55bac2d993dee7c2bcd984acc5d1d866d7d1',1,'canvas.h']]],
+ ['drawimg_5fpersp_75',['DRAWIMG_PERSP',['../group__CanvasGroup.html#gga06fc87d81c62e9abb8790b6e5713c55ba63b0d0919cc2fbf9e04f81c9bf206616',1,'canvas.h']]],
+ ['drawimg_5ftransp_76',['DRAWIMG_TRANSP',['../group__CanvasGroup.html#gga06fc87d81c62e9abb8790b6e5713c55baf1ac512496407c856e86534f56f7220d',1,'canvas.h']]],
+ ['drawimg_5fwrap_77',['DRAWIMG_WRAP',['../group__CanvasGroup.html#gga06fc87d81c62e9abb8790b6e5713c55bada988f101a668aa32ac8be4465a3c94f',1,'canvas.h']]],
+ ['drawimgline_78',['DrawImgLine',['../group__CanvasGroup.html#ga8b38b2530c058e70233c8ae6c622cfef',1,'DrawImgLine(sCanvas *canvas, sCanvas *src, int xd, int yd, int xs, int ys, int wd, int ws): canvas.cpp'],['../group__CanvasGroup.html#ga8b38b2530c058e70233c8ae6c622cfef',1,'DrawImgLine(sCanvas *canvas, sCanvas *src, int xd, int yd, int xs, int ys, int wd, int ws): canvas.cpp']]],
+ ['drawimgmat_79',['DrawImgMat',['../group__CanvasGroup.html#ga5d1db92659f6c11713cd0fb9c45f3637',1,'canvas.h']]],
+ ['drawing_5fcolor_80',['DRAWING_COLOR',['../group__CanvasGroup.html#gga06fc87d81c62e9abb8790b6e5713c55baa1b8793cfd30dea692ac0944b189e833',1,'canvas.h']]],
+ ['drawline_81',['DrawLine',['../group__CanvasGroup.html#ga3452639f8699459e2db4c8c07717ff8c',1,'DrawLine(sCanvas *canvas, int x1, int y1, int x2, int y2, u8 col): canvas.cpp'],['../group__CanvasGroup.html#ga3452639f8699459e2db4c8c07717ff8c',1,'DrawLine(sCanvas *canvas, int x1, int y1, int x2, int y2, u8 col): canvas.cpp']]],
+ ['drawpoint_82',['DrawPoint',['../group__CanvasGroup.html#ga847429aa8ed956796cb0637b44fdcf9e',1,'DrawPoint(sCanvas *canvas, int x, int y, u8 col): canvas.cpp'],['../group__CanvasGroup.html#ga847429aa8ed956796cb0637b44fdcf9e',1,'DrawPoint(sCanvas *canvas, int x, int y, u8 col): canvas.cpp']]],
+ ['drawrect_83',['DrawRect',['../group__CanvasGroup.html#gac8441b25105805be5e7da188957bd058',1,'DrawRect(sCanvas *canvas, int x, int y, int w, int h, u8 col): canvas.cpp'],['../group__CanvasGroup.html#gac8441b25105805be5e7da188957bd058',1,'DrawRect(sCanvas *canvas, int x, int y, int w, int h, u8 col): canvas.cpp']]],
+ ['drawtext_84',['DrawText',['../group__CanvasGroup.html#ga4a2c127f6c6eca6425f074d2523c230a',1,'DrawText(sCanvas *canvas, const char *text, int x, int y, u8 col, const void *font, int fontheight, int scalex, int scaley): canvas.cpp'],['../group__CanvasGroup.html#ga4a2c127f6c6eca6425f074d2523c230a',1,'DrawText(sCanvas *canvas, const char *text, int x, int y, u8 col, const void *font, int fontheight=8, int scalex=1, int scaley=1): canvas.cpp']]],
+ ['drawtextbg_85',['DrawTextBg',['../group__CanvasGroup.html#gac53e49cc83c30367199882379ba8fd92',1,'DrawTextBg(sCanvas *canvas, const char *text, int x, int y, u8 col, u8 bgcol, const void *font, int fontheight, int scalex, int scaley): canvas.cpp'],['../group__CanvasGroup.html#gac53e49cc83c30367199882379ba8fd92',1,'DrawTextBg(sCanvas *canvas, const char *text, int x, int y, u8 col, u8 bgcol, const void *font, int fontheight=8, int scalex=1, int scaley=1): canvas.cpp']]],
+ ['drawtilemap_86',['DrawTileMap',['../group__CanvasGroup.html#gaab3620a5cf2c20a6d9fd0b05f5eaf934',1,'DrawTileMap(sCanvas *canvas, const sCanvas *src, const u8 *map, int mapwbits, int maphbits, int tilebits, int x, int y, int w, int h, const cMat2Df *mat, u8 horizon): canvas.cpp'],['../group__CanvasGroup.html#gaab3620a5cf2c20a6d9fd0b05f5eaf934',1,'DrawTileMap(sCanvas *canvas, const sCanvas *src, const u8 *map, int mapwbits, int maphbits, int tilebits, int x, int y, int w, int h, const cMat2Df *mat, u8 horizon): canvas.cpp']]]
];
diff --git a/docs/search/all_5.html b/docs/search/all_5.html
index 2544c4e..9dd9344 100644
--- a/docs/search/all_5.html
+++ b/docs/search/all_5.html
@@ -1,7 +1,8 @@
-
+
+
-
+
@@ -10,21 +11,27 @@
diff --git a/docs/search/all_c.js b/docs/search/all_c.js
index c4dc421..ce69aed 100644
--- a/docs/search/all_c.js
+++ b/docs/search/all_c.js
@@ -1,8 +1,6 @@
var searchData=
[
- ['name_190',['name',['../structsVideo.html#a783f8ced1e3a762ff38707044c758f28',1,'sVideo::name()'],['../structsVmode.html#a8178ecfe44d7ad15e01571628cbeafa5',1,'sVmode::name()']]],
- ['noise1d_191',['Noise1D',['../group__RandomGroup.html#gae6fe4d963031879338bc2e6419585b86',1,'Noise1D(int x, int seed): rand.cpp'],['../group__RandomGroup.html#gae6fe4d963031879338bc2e6419585b86',1,'Noise1D(int x, int seed): rand.cpp']]],
- ['noise2d_192',['Noise2D',['../group__RandomGroup.html#gaaf58bbb6ea1aa045c6dc5a09e14d08a8',1,'Noise2D(int x, int y, int seed): rand.cpp'],['../group__RandomGroup.html#gaaf58bbb6ea1aa045c6dc5a09e14d08a8',1,'Noise2D(int x, int y, int seed): rand.cpp']]],
- ['noise3d_193',['Noise3D',['../group__RandomGroup.html#ga83ee9be709d5f5ca29b51dcc2f614ec9',1,'Noise3D(int x, int y, int z, int seed): rand.cpp'],['../group__RandomGroup.html#ga83ee9be709d5f5ca29b51dcc2f614ec9',1,'Noise3D(int x, int y, int z, int seed): rand.cpp']]],
- ['num_194',['num',['../structsStrip.html#aa47041b6a6964f0f4fe4f882ffcdad9a',1,'sStrip::num()'],['../structsScreen.html#a0049f788cdd9cb8687e1bbb7c53b80a9',1,'sScreen::num()']]]
+ ['mat2d_2eh_188',['mat2d.h',['../mat2d_8h.html',1,'']]],
+ ['mode_189',['mode',['../structsLayer.html#ac44e73d69c6b028dd4274556f1e24846',1,'sLayer::mode()'],['../structsVgaCfg.html#a59bd4bc34f9e5fc1dae4aae2ca3b81d9',1,'sVgaCfg::mode()'],['../structsVmode.html#a178cf5eb0cde464aefa04358952c0fb0',1,'sVmode::mode()']]],
+ ['multicol_190',['MULTICOL',['../group__ColorsGroup.html#ga1b001f5410b19a37d5617451bcdc5a06',1,'vga_pal.h']]]
];
diff --git a/docs/search/all_d.html b/docs/search/all_d.html
index bc376fe..af7f2f0 100644
--- a/docs/search/all_d.html
+++ b/docs/search/all_d.html
@@ -1,7 +1,8 @@
-
+
+
-
+
@@ -10,21 +11,27 @@
Loading...
-
+
Searching...
No Matches
-
+
diff --git a/docs/search/all_d.js b/docs/search/all_d.js
index 917861c..14184a6 100644
--- a/docs/search/all_d.js
+++ b/docs/search/all_d.js
@@ -1,9 +1,8 @@
var searchData=
[
- ['overlay_20layers_195',['Overlay Layers',['../group__LayersGroup.html',1,'']]],
- ['odd_196',['odd',['../structsVideo.html#aef2abc3ba53e3fe876316c3eeb134aef',1,'sVideo::odd()'],['../structsVmode.html#a27ff3957746eec9103b12fd7b992dd24',1,'sVmode::odd()']]],
- ['offx_197',['offx',['../structsSegm.html#a7672a1689524ed4b8f9e11c8674def71',1,'sSegm']]],
- ['offy_198',['offy',['../structsSegm.html#a88452adfa558a8131a720df704fc4ef8',1,'sSegm']]],
- ['on_199',['on',['../structsLayer.html#ad39692fa5c6712f35d83b33b16ff50ee',1,'sLayer']]],
- ['overclock_2eh_200',['overclock.h',['../overclock_8h.html',1,'']]]
+ ['name_191',['name',['../structsVideo.html#a783f8ced1e3a762ff38707044c758f28',1,'sVideo::name()'],['../structsVmode.html#a8178ecfe44d7ad15e01571628cbeafa5',1,'sVmode::name()']]],
+ ['noise1d_192',['Noise1D',['../group__RandomGroup.html#gae6fe4d963031879338bc2e6419585b86',1,'Noise1D(int x, int seed): rand.cpp'],['../group__RandomGroup.html#gae6fe4d963031879338bc2e6419585b86',1,'Noise1D(int x, int seed): rand.cpp']]],
+ ['noise2d_193',['Noise2D',['../group__RandomGroup.html#gaaf58bbb6ea1aa045c6dc5a09e14d08a8',1,'Noise2D(int x, int y, int seed): rand.cpp'],['../group__RandomGroup.html#gaaf58bbb6ea1aa045c6dc5a09e14d08a8',1,'Noise2D(int x, int y, int seed): rand.cpp']]],
+ ['noise3d_194',['Noise3D',['../group__RandomGroup.html#ga83ee9be709d5f5ca29b51dcc2f614ec9',1,'Noise3D(int x, int y, int z, int seed): rand.cpp'],['../group__RandomGroup.html#ga83ee9be709d5f5ca29b51dcc2f614ec9',1,'Noise3D(int x, int y, int z, int seed): rand.cpp']]],
+ ['num_195',['num',['../structsStrip.html#aa47041b6a6964f0f4fe4f882ffcdad9a',1,'sStrip::num()'],['../structsScreen.html#a0049f788cdd9cb8687e1bbb7c53b80a9',1,'sScreen::num()']]]
];
diff --git a/docs/search/all_e.html b/docs/search/all_e.html
index 2e3c74d..e25df42 100644
--- a/docs/search/all_e.html
+++ b/docs/search/all_e.html
@@ -1,7 +1,8 @@
-
+
+
-
+
@@ -10,21 +11,27 @@
Loading...
-
+
Searching...
No Matches
-
+
diff --git a/docs/search/all_e.js b/docs/search/all_e.js
index 76290ef..1058736 100644
--- a/docs/search/all_e.js
+++ b/docs/search/all_e.js
@@ -1,43 +1,9 @@
var searchData=
[
- ['pal16trans_201',['Pal16Trans',['../group__VideoModeGroup.html#ga6f956ea6eda29ad819440c9ec402f519',1,'Pal16Trans(): vga_vmode.cpp'],['../group__VideoModeGroup.html#ga6f956ea6eda29ad819440c9ec402f519',1,'Pal16Trans(): vga_vmode.cpp']]],
- ['palcga1_202',['PalCGA1',['../group__ColorsGroup.html#ga9d9ef01f0c0939fcc763256a368ea628',1,'PalCGA1(): vga_pal.cpp'],['../group__ColorsGroup.html#ga9d9ef01f0c0939fcc763256a368ea628',1,'PalCGA1(): vga_pal.cpp']]],
- ['palcga2_203',['PalCGA2',['../group__ColorsGroup.html#ga8eda48e8cd9499cb396db80b8bf81545',1,'PalCGA2(): vga_pal.cpp'],['../group__ColorsGroup.html#ga8eda48e8cd9499cb396db80b8bf81545',1,'PalCGA2(): vga_pal.cpp']]],
- ['palcga3_204',['PalCGA3',['../group__ColorsGroup.html#ga37000ffffc318b6fec6060875bc94b65',1,'PalCGA3(): vga_pal.cpp'],['../group__ColorsGroup.html#ga37000ffffc318b6fec6060875bc94b65',1,'PalCGA3(): vga_pal.cpp']]],
- ['palcga4_205',['PalCGA4',['../group__ColorsGroup.html#ga40e2e47fbb625a5535a47affaae730f1',1,'PalCGA4(): vga_pal.cpp'],['../group__ColorsGroup.html#ga40e2e47fbb625a5535a47affaae730f1',1,'PalCGA4(): vga_pal.cpp']]],
- ['palcga5_206',['PalCGA5',['../group__ColorsGroup.html#gaae2a7f017313fe4f72efac08495338dc',1,'PalCGA5(): vga_pal.cpp'],['../group__ColorsGroup.html#gaae2a7f017313fe4f72efac08495338dc',1,'PalCGA5(): vga_pal.cpp']]],
- ['palcga6_207',['PalCGA6',['../group__ColorsGroup.html#gac3064d5b489648d8d5a4367697d66b26',1,'PalCGA6(): vga_pal.cpp'],['../group__ColorsGroup.html#gac3064d5b489648d8d5a4367697d66b26',1,'PalCGA6(): vga_pal.cpp']]],
- ['par_208',['par',['../structsLayer.html#a977fddc23e4e5ea1acc1e76b3288cc7d',1,'sLayer::par()'],['../structsSegm.html#a0ec9a4a62e748c3f11ebf2f56e4abcd1',1,'sSegm::par()']]],
- ['par2_209',['par2',['../structsSegm.html#a6d9275957e0b8c011c78fc707a252c9b',1,'sSegm']]],
- ['par3_210',['par3',['../structsSegm.html#a8eabc927a647f9aff75e85be4e0f8e79',1,'sSegm']]],
- ['pd1_211',['pd1',['../structsVmode.html#ac67fec8024efb1c217436fcfec5eee61',1,'sVmode']]],
- ['pd2_212',['pd2',['../structsVmode.html#a45757e2ed7722fb58fffb2ac65e0de3d',1,'sVmode']]],
- ['picovga_2eh_213',['picovga.h',['../picovga_8h.html',1,'']]],
- ['plane2conv_214',['Plane2Conv',['../group__UtilsGroup.html#ga9d2f98a08bf609f9969298eb2e9d7761',1,'Plane2Conv(u8 *plane0, u8 *plane1, const u8 *src, int w, int h): vga_util.cpp'],['../group__UtilsGroup.html#ga9d2f98a08bf609f9969298eb2e9d7761',1,'Plane2Conv(u8 *plane0, u8 *plane1, const u8 *src, int w, int h): vga_util.cpp']]],
- ['playingsound_215',['PlayingSound',['../group__PWMGroup.html#gac5cdc29178dd50bc69a6925a6af5c84a',1,'PlayingSound(): pwmsnd.cpp'],['../group__PWMGroup.html#gac5cdc29178dd50bc69a6925a6af5c84a',1,'PlayingSound(): pwmsnd.cpp']]],
- ['playsound_216',['PlaySound',['../group__PWMGroup.html#ga7d7587ed33cbb0e94588c96735b5e6d5',1,'PlaySound(const u8 *snd, int len, Bool rep, float speed): pwmsnd.cpp'],['../group__PWMGroup.html#ga7d7587ed33cbb0e94588c96735b5e6d5',1,'PlaySound(const u8 *snd, int len, Bool rep=False, float speed=1.0f): pwmsnd.cpp']]],
- ['prepdrawimg_217',['PrepDrawImg',['../classcMat2Df.html#a529afacb6148a067dd3a5a488cb97e13',1,'cMat2Df']]],
- ['print_2eh_218',['print.h',['../print_8h.html',1,'']]],
- ['printaddpos_219',['PrintAddPos',['../group__TextGroup.html#gaba693e4bd43c731c3c97ca303938a903',1,'PrintAddPos(int x, int y): print.cpp'],['../group__TextGroup.html#gaba693e4bd43c731c3c97ca303938a903',1,'PrintAddPos(int x, int y): print.cpp']]],
- ['printchar_220',['PrintChar',['../group__TextGroup.html#gad43a32dad63df05f21d3b2254c96f36d',1,'PrintChar(char ch): print.cpp'],['../group__TextGroup.html#gad43a32dad63df05f21d3b2254c96f36d',1,'PrintChar(char ch): print.cpp']]],
- ['printchar0_221',['PrintChar0',['../group__TextGroup.html#ga3c5c271811227b03d974171af2a243c4',1,'PrintChar0(char ch): print.cpp'],['../group__TextGroup.html#ga3c5c271811227b03d974171af2a243c4',1,'PrintChar0(char ch): print.cpp']]],
- ['printcharrep_222',['PrintCharRep',['../group__TextGroup.html#gab9231ede9d6a979f1b812b7667c34d29',1,'PrintCharRep(char ch, int num): print.cpp'],['../group__TextGroup.html#gab9231ede9d6a979f1b812b7667c34d29',1,'PrintCharRep(char ch, int num): print.cpp']]],
- ['printclear_223',['PrintClear',['../group__TextGroup.html#gad7b697700b999077439e537a2fef28f3',1,'PrintClear(): print.cpp'],['../group__TextGroup.html#gad7b697700b999077439e537a2fef28f3',1,'PrintClear(): print.cpp']]],
- ['printframe_224',['PrintFrame',['../group__TextGroup.html#ga2323e69f1ff2adaadf317eb220bd10db',1,'PrintFrame(int x, int y, int w, int h): print.cpp'],['../group__TextGroup.html#ga2323e69f1ff2adaadf317eb220bd10db',1,'PrintFrame(int x, int y, int w, int h): print.cpp']]],
- ['printhline_225',['PrintHLine',['../group__TextGroup.html#ga16e185e12dd782e3b69117386fe64dc9',1,'PrintHLine(int x, int y, int w): print.cpp'],['../group__TextGroup.html#ga16e185e12dd782e3b69117386fe64dc9',1,'PrintHLine(int x, int y, int w): print.cpp']]],
- ['printhome_226',['PrintHome',['../group__TextGroup.html#ga569987e642b3fa23427c126e649774ba',1,'PrintHome(): print.cpp'],['../group__TextGroup.html#ga569987e642b3fa23427c126e649774ba',1,'PrintHome(): print.cpp']]],
- ['printsetcol_227',['PrintSetCol',['../group__TextGroup.html#ga7ca8b785cd293ee0e1d20869dedf52a0',1,'PrintSetCol(u8 col): print.cpp'],['../group__TextGroup.html#ga7ca8b785cd293ee0e1d20869dedf52a0',1,'PrintSetCol(u8 col): print.cpp']]],
- ['printsetpos_228',['PrintSetPos',['../group__TextGroup.html#gacdf79045593025b8b51f841dd696094d',1,'PrintSetPos(int x, int y): print.cpp'],['../group__TextGroup.html#gacdf79045593025b8b51f841dd696094d',1,'PrintSetPos(int x, int y): print.cpp']]],
- ['printsetup_229',['PrintSetup',['../group__TextGroup.html#ga0275c150a5a12613afaef51f4bec2c89',1,'PrintSetup(u8 *buf, int bufw, int bufh, int bufwb): print.cpp'],['../group__TextGroup.html#ga0275c150a5a12613afaef51f4bec2c89',1,'PrintSetup(u8 *buf, int bufw, int bufh, int bufwb): print.cpp']]],
- ['printspc_230',['PrintSpc',['../group__TextGroup.html#gaf269b76cd7c06b18218aa5274ee3f990',1,'PrintSpc(): print.cpp'],['../group__TextGroup.html#gaf269b76cd7c06b18218aa5274ee3f990',1,'PrintSpc(): print.cpp']]],
- ['printspcrep_231',['PrintSpcRep',['../group__TextGroup.html#ga6862b40c6d8ef741e52e0e9ed1488647',1,'PrintSpcRep(int num): print.cpp'],['../group__TextGroup.html#ga6862b40c6d8ef741e52e0e9ed1488647',1,'PrintSpcRep(int num): print.cpp']]],
- ['printspcto_232',['PrintSpcTo',['../group__TextGroup.html#ga9794804d1b01d51df73144d3edc0150d',1,'PrintSpcTo(int pos): print.cpp'],['../group__TextGroup.html#ga9794804d1b01d51df73144d3edc0150d',1,'PrintSpcTo(int pos): print.cpp']]],
- ['printtext_233',['PrintText',['../group__TextGroup.html#ga351c19309ced4dc9310112ad2b8bae2c',1,'PrintText(const char *text): print.cpp'],['../group__TextGroup.html#ga351c19309ced4dc9310112ad2b8bae2c',1,'PrintText(const char *text): print.cpp']]],
- ['printvline_234',['PrintVLine',['../group__TextGroup.html#gac11665c9779895b57d0a9f853beff7b2',1,'PrintVLine(int x, int y, int h): print.cpp'],['../group__TextGroup.html#gac11665c9779895b57d0a9f853beff7b2',1,'PrintVLine(int x, int y, int h): print.cpp']]],
- ['prog_235',['prog',['../structsVmode.html#afe0b90adc1d51fb91e5d53c0751bd779',1,'sVmode']]],
- ['pscreen_236',['pScreen',['../group__ScreenGroup.html#ga9c8a0032cf1145c5a6c369193a134a78',1,'pScreen(): vga_screen.cpp'],['../group__ScreenGroup.html#ga9c8a0032cf1145c5a6c369193a134a78',1,'pScreen(): vga_screen.cpp']]],
- ['psync_237',['psync',['../structsVideo.html#a40e64aaa05eea3faaa8d1a334a37b483',1,'sVideo::psync()'],['../structsVmode.html#a69889f214cb6a82a18e406d0d060e239',1,'sVmode::psync()']]],
- ['pwm_20audio_238',['PWM Audio',['../group__PWMGroup.html',1,'']]],
- ['pwmsnd_2eh_239',['pwmsnd.h',['../pwmsnd_8h.html',1,'']]],
- ['pwmsndinit_240',['PWMSndInit',['../group__PWMGroup.html#ga125653aeeb2dc605e83d0927a635983c',1,'PWMSndInit(): pwmsnd.cpp'],['../group__PWMGroup.html#ga125653aeeb2dc605e83d0927a635983c',1,'PWMSndInit(): pwmsnd.cpp']]]
+ ['odd_196',['odd',['../structsVideo.html#aef2abc3ba53e3fe876316c3eeb134aef',1,'sVideo::odd()'],['../structsVmode.html#a27ff3957746eec9103b12fd7b992dd24',1,'sVmode::odd()']]],
+ ['offx_197',['offx',['../structsSegm.html#a7672a1689524ed4b8f9e11c8674def71',1,'sSegm']]],
+ ['offy_198',['offy',['../structsSegm.html#a88452adfa558a8131a720df704fc4ef8',1,'sSegm']]],
+ ['on_199',['on',['../structsLayer.html#ad39692fa5c6712f35d83b33b16ff50ee',1,'sLayer']]],
+ ['overclock_2eh_200',['overclock.h',['../overclock_8h.html',1,'']]],
+ ['overlay_20layers_201',['Overlay Layers',['../group__LayersGroup.html',1,'']]]
];
diff --git a/docs/search/all_f.html b/docs/search/all_f.html
index 246f8ab..b23da6c 100644
--- a/docs/search/all_f.html
+++ b/docs/search/all_f.html
@@ -1,7 +1,8 @@
-
+
+
-
+
@@ -10,21 +11,27 @@
Loading...
-
+
Searching...
No Matches
-
+
diff --git a/docs/search/all_f.js b/docs/search/all_f.js
index 883fad7..38b17a5 100644
--- a/docs/search/all_f.js
+++ b/docs/search/all_f.js
@@ -1,56 +1,43 @@
var searchData=
[
- ['rand_241',['Rand',['../group__RandomGroup.html#ga881352b59a6dc362d045d2da54227f9b',1,'Rand(): rand.cpp'],['../group__RandomGroup.html#ga881352b59a6dc362d045d2da54227f9b',1,'Rand(): rand.cpp']]],
- ['rand_2eh_242',['rand.h',['../rand_8h.html',1,'']]],
- ['randdouble_243',['RandDouble',['../group__RandomGroup.html#ga963cdb6b09d2ddea2d14feda32ce8535',1,'rand.h']]],
- ['randdoublemax_244',['RandDoubleMax',['../group__RandomGroup.html#ga1b3a9c6d4ac9c9c5e05449fd5db108af',1,'rand.h']]],
- ['randdoubleminmax_245',['RandDoubleMinMax',['../group__RandomGroup.html#ga2e6ff86910045660f94fe2b692234fde',1,'rand.h']]],
- ['randfloat_246',['RandFloat',['../group__RandomGroup.html#gafbe11ff06dbc741744c240a5ec813c1a',1,'rand.h']]],
- ['randfloatmax_247',['RandFloatMax',['../group__RandomGroup.html#gae0e7b6df0672d3ed4bd0f006aaa8a433',1,'rand.h']]],
- ['randfloatminmax_248',['RandFloatMinMax',['../group__RandomGroup.html#gaaff062ea558f1f84b660ed683a62b3be',1,'rand.h']]],
- ['randgaussd_249',['RandGaussD',['../group__RandomGroup.html#ga59dc774b8bf2cf99b74dd0257465e439',1,'rand.h']]],
- ['randgaussf_250',['RandGaussF',['../group__RandomGroup.html#gad94693d3f4366b6aa4df3e4b8ed6c9c9',1,'rand.h']]],
- ['randinitseed_251',['RandInitSeed',['../group__RandomGroup.html#gad5d0dd2bd3d638c1c129d17a317bf99a',1,'rand.h']]],
- ['random_20number_20generator_252',['Random Number Generator',['../group__RandomGroup.html',1,'']]],
- ['rands16_253',['RandS16',['../group__RandomGroup.html#ga82b0c4776715a071a801f9034996726d',1,'rand.h']]],
- ['rands16max_254',['RandS16Max',['../group__RandomGroup.html#gac8dda90ba8f66ef7cef223c0b928d8e6',1,'rand.h']]],
- ['rands16minmax_255',['RandS16MinMax',['../group__RandomGroup.html#gad5c7e52ca2c03cabe9d7cf6506553860',1,'rand.h']]],
- ['rands32_256',['RandS32',['../group__RandomGroup.html#ga84371af6ecd79834e3112c20b1294540',1,'rand.h']]],
- ['rands32max_257',['RandS32Max',['../group__RandomGroup.html#ga26f24f36afd8871c1ddaf1afdd89692d',1,'rand.h']]],
- ['rands32minmax_258',['RandS32MinMax',['../group__RandomGroup.html#ga46299e199f8b28f4226baf373f2b72aa',1,'rand.h']]],
- ['rands64_259',['RandS64',['../group__RandomGroup.html#ga6221fa4e97b56d719890da82c383b05d',1,'rand.h']]],
- ['rands64max_260',['RandS64Max',['../group__RandomGroup.html#ga8412b8e5b5443bb86226fab176933d9e',1,'rand.h']]],
- ['rands64minmax_261',['RandS64MinMax',['../group__RandomGroup.html#gaa8d1bc325d85ffae4ef0c41519a8a1b8',1,'rand.h']]],
- ['rands8_262',['RandS8',['../group__RandomGroup.html#gad7b52ed9e7d32319778077a9086b7d61',1,'rand.h']]],
- ['rands8max_263',['RandS8Max',['../group__RandomGroup.html#gaa76553b227b36950e0b0d36a2debf46d',1,'rand.h']]],
- ['rands8minmax_264',['RandS8MinMax',['../group__RandomGroup.html#ga59750d98de4d01fb3e4ab9a86c4bacc8',1,'rand.h']]],
- ['randseed_265',['RandSeed',['../group__RandomGroup.html#ga86d1d16affa02be75ab3a9b61495ee60',1,'rand.h']]],
- ['randsetseed_266',['RandSetSeed',['../group__RandomGroup.html#ga6a48ffb6e948d2cd746f3af5114229ba',1,'rand.h']]],
- ['randu16_267',['RandU16',['../group__RandomGroup.html#ga2ea05f671bc77231842afc114bd9de0a',1,'rand.h']]],
- ['randu16max_268',['RandU16Max',['../group__RandomGroup.html#ga2b99666937f51c0b976616b28856988d',1,'rand.h']]],
- ['randu16minmax_269',['RandU16MinMax',['../group__RandomGroup.html#ga1fb30520196dc9cd1617d05f43b4d91f',1,'rand.h']]],
- ['randu32_270',['RandU32',['../group__RandomGroup.html#ga5830dc8893a81aab902c0a7926c413ec',1,'rand.h']]],
- ['randu32max_271',['RandU32Max',['../group__RandomGroup.html#ga0580bc155d11536ce235db6fb52ae33c',1,'rand.h']]],
- ['randu32minmax_272',['RandU32MinMax',['../group__RandomGroup.html#ga968e03265d5b05b8f646590f790eed1e',1,'rand.h']]],
- ['randu64_273',['RandU64',['../group__RandomGroup.html#gaaf56c591f0c31fa8844fec716d9ae0b0',1,'rand.h']]],
- ['randu64max_274',['RandU64Max',['../group__RandomGroup.html#ga102f03a6daebe8b0dda720c69dd01a85',1,'rand.h']]],
- ['randu64minmax_275',['RandU64MinMax',['../group__RandomGroup.html#gab5b9f1ff786b4d4e953b6368a2092789',1,'rand.h']]],
- ['randu8_276',['RandU8',['../group__RandomGroup.html#ga75ddeee5b29274bf1735346dc1a4e0f8',1,'rand.h']]],
- ['randu8max_277',['RandU8Max',['../group__RandomGroup.html#ga151bf25e89de011b14c29fe38400bab0',1,'rand.h']]],
- ['randu8minmax_278',['RandU8MinMax',['../group__RandomGroup.html#gafd0ab6e19e841f2e91d0bd414372cf34',1,'rand.h']]],
- ['res_279',['res',['../structsSprite.html#a902fc00d68119698ac834ceafcb4f1e2',1,'sSprite']]],
- ['res_5fcga_280',['RES_CGA',['../group__VideoModeGroup.html#gga99fb83031ce9923c84392b4e92f956b5a3ac2b2f53a10630b3bb1ed4330849bf6',1,'vga_vmode.h']]],
- ['res_5fega_281',['RES_EGA',['../group__VideoModeGroup.html#gga99fb83031ce9923c84392b4e92f956b5addfd80f5555a10229f9d6a5d4a60c297',1,'vga_vmode.h']]],
- ['res_5fhd_282',['RES_HD',['../group__VideoModeGroup.html#gga99fb83031ce9923c84392b4e92f956b5a12e47b6dfb21b1ba0ecdba27e2f68a07',1,'vga_vmode.h']]],
- ['res_5fqvga_283',['RES_QVGA',['../group__VideoModeGroup.html#gga99fb83031ce9923c84392b4e92f956b5a72c695083948080b364156dcccb1496d',1,'vga_vmode.h']]],
- ['res_5fsvga_284',['RES_SVGA',['../group__VideoModeGroup.html#gga99fb83031ce9923c84392b4e92f956b5ab8b5ecc8fe866ef7d7919d3abb274ef5',1,'vga_vmode.h']]],
- ['res_5fvga_285',['RES_VGA',['../group__VideoModeGroup.html#gga99fb83031ce9923c84392b4e92f956b5a45e742ff1aa9511cc9c88aee89d66686',1,'vga_vmode.h']]],
- ['res_5fxga_286',['RES_XGA',['../group__VideoModeGroup.html#gga99fb83031ce9923c84392b4e92f956b5aa5d88b434b03a1da50c1f407f27ba759',1,'vga_vmode.h']]],
- ['res_5fzx_287',['RES_ZX',['../group__VideoModeGroup.html#gga99fb83031ce9923c84392b4e92f956b5a842b10900d0788304f0df0f1958bf994',1,'vga_vmode.h']]],
- ['rgval_288',['RGVal',['../group__ColorsGroup.html#ga4aece66f4cec223043e25968fbb5bef0',1,'RGVal(): vga_pal.cpp'],['../group__ColorsGroup.html#ga4aece66f4cec223043e25968fbb5bef0',1,'RGVal(): vga_pal.cpp']]],
- ['rot_289',['Rot',['../classcMat2D.html#a4d08fd444c5bc11af5f69d69a9853454',1,'cMat2D']]],
- ['rot180_290',['Rot180',['../classcMat2D.html#a4808e7a6806717eccd1bf783d13924fa',1,'cMat2D']]],
- ['rot270_291',['Rot270',['../classcMat2D.html#ab6801fcd2e70176ee42cea2dbb02d115',1,'cMat2D']]],
- ['rot90_292',['Rot90',['../classcMat2D.html#ade219f1406c1ca8b55d3d7202636824a',1,'cMat2D']]],
- ['rotsc_293',['RotSC',['../classcMat2D.html#a0f2893809c7da4e1e65ba83afdb39fbf',1,'cMat2D']]]
+ ['pal16trans_202',['Pal16Trans',['../group__VideoModeGroup.html#ga6f956ea6eda29ad819440c9ec402f519',1,'Pal16Trans(): vga_vmode.cpp'],['../group__VideoModeGroup.html#ga6f956ea6eda29ad819440c9ec402f519',1,'Pal16Trans(): vga_vmode.cpp']]],
+ ['palcga1_203',['PalCGA1',['../group__ColorsGroup.html#ga9d9ef01f0c0939fcc763256a368ea628',1,'PalCGA1(): vga_pal.cpp'],['../group__ColorsGroup.html#ga9d9ef01f0c0939fcc763256a368ea628',1,'PalCGA1(): vga_pal.cpp']]],
+ ['palcga2_204',['PalCGA2',['../group__ColorsGroup.html#ga8eda48e8cd9499cb396db80b8bf81545',1,'PalCGA2(): vga_pal.cpp'],['../group__ColorsGroup.html#ga8eda48e8cd9499cb396db80b8bf81545',1,'PalCGA2(): vga_pal.cpp']]],
+ ['palcga3_205',['PalCGA3',['../group__ColorsGroup.html#ga37000ffffc318b6fec6060875bc94b65',1,'PalCGA3(): vga_pal.cpp'],['../group__ColorsGroup.html#ga37000ffffc318b6fec6060875bc94b65',1,'PalCGA3(): vga_pal.cpp']]],
+ ['palcga4_206',['PalCGA4',['../group__ColorsGroup.html#ga40e2e47fbb625a5535a47affaae730f1',1,'PalCGA4(): vga_pal.cpp'],['../group__ColorsGroup.html#ga40e2e47fbb625a5535a47affaae730f1',1,'PalCGA4(): vga_pal.cpp']]],
+ ['palcga5_207',['PalCGA5',['../group__ColorsGroup.html#gaae2a7f017313fe4f72efac08495338dc',1,'PalCGA5(): vga_pal.cpp'],['../group__ColorsGroup.html#gaae2a7f017313fe4f72efac08495338dc',1,'PalCGA5(): vga_pal.cpp']]],
+ ['palcga6_208',['PalCGA6',['../group__ColorsGroup.html#gac3064d5b489648d8d5a4367697d66b26',1,'PalCGA6(): vga_pal.cpp'],['../group__ColorsGroup.html#gac3064d5b489648d8d5a4367697d66b26',1,'PalCGA6(): vga_pal.cpp']]],
+ ['par_209',['par',['../structsSegm.html#a0ec9a4a62e748c3f11ebf2f56e4abcd1',1,'sSegm::par()'],['../structsLayer.html#a977fddc23e4e5ea1acc1e76b3288cc7d',1,'sLayer::par()']]],
+ ['par2_210',['par2',['../structsSegm.html#a6d9275957e0b8c011c78fc707a252c9b',1,'sSegm']]],
+ ['par3_211',['par3',['../structsSegm.html#a8eabc927a647f9aff75e85be4e0f8e79',1,'sSegm']]],
+ ['pd1_212',['pd1',['../structsVmode.html#ac67fec8024efb1c217436fcfec5eee61',1,'sVmode']]],
+ ['pd2_213',['pd2',['../structsVmode.html#a45757e2ed7722fb58fffb2ac65e0de3d',1,'sVmode']]],
+ ['picovga_2eh_214',['picovga.h',['../picovga_8h.html',1,'']]],
+ ['plane2conv_215',['Plane2Conv',['../group__UtilsGroup.html#ga9d2f98a08bf609f9969298eb2e9d7761',1,'Plane2Conv(u8 *plane0, u8 *plane1, const u8 *src, int w, int h): vga_util.cpp'],['../group__UtilsGroup.html#ga9d2f98a08bf609f9969298eb2e9d7761',1,'Plane2Conv(u8 *plane0, u8 *plane1, const u8 *src, int w, int h): vga_util.cpp']]],
+ ['playingsound_216',['PlayingSound',['../group__PWMGroup.html#gac5cdc29178dd50bc69a6925a6af5c84a',1,'PlayingSound(): pwmsnd.cpp'],['../group__PWMGroup.html#gac5cdc29178dd50bc69a6925a6af5c84a',1,'PlayingSound(): pwmsnd.cpp']]],
+ ['playsound_217',['PlaySound',['../group__PWMGroup.html#ga7d7587ed33cbb0e94588c96735b5e6d5',1,'PlaySound(const u8 *snd, int len, Bool rep, float speed): pwmsnd.cpp'],['../group__PWMGroup.html#ga7d7587ed33cbb0e94588c96735b5e6d5',1,'PlaySound(const u8 *snd, int len, Bool rep=False, float speed=1.0f): pwmsnd.cpp']]],
+ ['prepdrawimg_218',['PrepDrawImg',['../classcMat2Df.html#a529afacb6148a067dd3a5a488cb97e13',1,'cMat2Df']]],
+ ['print_2eh_219',['print.h',['../print_8h.html',1,'']]],
+ ['printaddpos_220',['PrintAddPos',['../group__TextGroup.html#gaba693e4bd43c731c3c97ca303938a903',1,'PrintAddPos(int x, int y): print.cpp'],['../group__TextGroup.html#gaba693e4bd43c731c3c97ca303938a903',1,'PrintAddPos(int x, int y): print.cpp']]],
+ ['printchar_221',['PrintChar',['../group__TextGroup.html#gad43a32dad63df05f21d3b2254c96f36d',1,'PrintChar(char ch): print.cpp'],['../group__TextGroup.html#gad43a32dad63df05f21d3b2254c96f36d',1,'PrintChar(char ch): print.cpp']]],
+ ['printchar0_222',['PrintChar0',['../group__TextGroup.html#ga3c5c271811227b03d974171af2a243c4',1,'PrintChar0(char ch): print.cpp'],['../group__TextGroup.html#ga3c5c271811227b03d974171af2a243c4',1,'PrintChar0(char ch): print.cpp']]],
+ ['printcharrep_223',['PrintCharRep',['../group__TextGroup.html#gab9231ede9d6a979f1b812b7667c34d29',1,'PrintCharRep(char ch, int num): print.cpp'],['../group__TextGroup.html#gab9231ede9d6a979f1b812b7667c34d29',1,'PrintCharRep(char ch, int num): print.cpp']]],
+ ['printclear_224',['PrintClear',['../group__TextGroup.html#gad7b697700b999077439e537a2fef28f3',1,'PrintClear(): print.cpp'],['../group__TextGroup.html#gad7b697700b999077439e537a2fef28f3',1,'PrintClear(): print.cpp']]],
+ ['printframe_225',['PrintFrame',['../group__TextGroup.html#ga2323e69f1ff2adaadf317eb220bd10db',1,'PrintFrame(int x, int y, int w, int h): print.cpp'],['../group__TextGroup.html#ga2323e69f1ff2adaadf317eb220bd10db',1,'PrintFrame(int x, int y, int w, int h): print.cpp']]],
+ ['printhline_226',['PrintHLine',['../group__TextGroup.html#ga16e185e12dd782e3b69117386fe64dc9',1,'PrintHLine(int x, int y, int w): print.cpp'],['../group__TextGroup.html#ga16e185e12dd782e3b69117386fe64dc9',1,'PrintHLine(int x, int y, int w): print.cpp']]],
+ ['printhome_227',['PrintHome',['../group__TextGroup.html#ga569987e642b3fa23427c126e649774ba',1,'PrintHome(): print.cpp'],['../group__TextGroup.html#ga569987e642b3fa23427c126e649774ba',1,'PrintHome(): print.cpp']]],
+ ['printsetcol_228',['PrintSetCol',['../group__TextGroup.html#ga7ca8b785cd293ee0e1d20869dedf52a0',1,'PrintSetCol(u8 col): print.cpp'],['../group__TextGroup.html#ga7ca8b785cd293ee0e1d20869dedf52a0',1,'PrintSetCol(u8 col): print.cpp']]],
+ ['printsetpos_229',['PrintSetPos',['../group__TextGroup.html#gacdf79045593025b8b51f841dd696094d',1,'PrintSetPos(int x, int y): print.cpp'],['../group__TextGroup.html#gacdf79045593025b8b51f841dd696094d',1,'PrintSetPos(int x, int y): print.cpp']]],
+ ['printsetup_230',['PrintSetup',['../group__TextGroup.html#ga0275c150a5a12613afaef51f4bec2c89',1,'PrintSetup(u8 *buf, int bufw, int bufh, int bufwb): print.cpp'],['../group__TextGroup.html#ga0275c150a5a12613afaef51f4bec2c89',1,'PrintSetup(u8 *buf, int bufw, int bufh, int bufwb): print.cpp']]],
+ ['printspc_231',['PrintSpc',['../group__TextGroup.html#gaf269b76cd7c06b18218aa5274ee3f990',1,'PrintSpc(): print.cpp'],['../group__TextGroup.html#gaf269b76cd7c06b18218aa5274ee3f990',1,'PrintSpc(): print.cpp']]],
+ ['printspcrep_232',['PrintSpcRep',['../group__TextGroup.html#ga6862b40c6d8ef741e52e0e9ed1488647',1,'PrintSpcRep(int num): print.cpp'],['../group__TextGroup.html#ga6862b40c6d8ef741e52e0e9ed1488647',1,'PrintSpcRep(int num): print.cpp']]],
+ ['printspcto_233',['PrintSpcTo',['../group__TextGroup.html#ga9794804d1b01d51df73144d3edc0150d',1,'PrintSpcTo(int pos): print.cpp'],['../group__TextGroup.html#ga9794804d1b01d51df73144d3edc0150d',1,'PrintSpcTo(int pos): print.cpp']]],
+ ['printtext_234',['PrintText',['../group__TextGroup.html#ga351c19309ced4dc9310112ad2b8bae2c',1,'PrintText(const char *text): print.cpp'],['../group__TextGroup.html#ga351c19309ced4dc9310112ad2b8bae2c',1,'PrintText(const char *text): print.cpp']]],
+ ['printvline_235',['PrintVLine',['../group__TextGroup.html#gac11665c9779895b57d0a9f853beff7b2',1,'PrintVLine(int x, int y, int h): print.cpp'],['../group__TextGroup.html#gac11665c9779895b57d0a9f853beff7b2',1,'PrintVLine(int x, int y, int h): print.cpp']]],
+ ['prog_236',['prog',['../structsVmode.html#afe0b90adc1d51fb91e5d53c0751bd779',1,'sVmode']]],
+ ['pscreen_237',['pScreen',['../group__ScreenGroup.html#ga9c8a0032cf1145c5a6c369193a134a78',1,'pScreen(): vga_screen.cpp'],['../group__ScreenGroup.html#ga9c8a0032cf1145c5a6c369193a134a78',1,'pScreen(): vga_screen.cpp']]],
+ ['psync_238',['psync',['../structsVideo.html#a40e64aaa05eea3faaa8d1a334a37b483',1,'sVideo::psync()'],['../structsVmode.html#a69889f214cb6a82a18e406d0d060e239',1,'sVmode::psync()']]],
+ ['pwm_20audio_239',['PWM Audio',['../group__PWMGroup.html',1,'']]],
+ ['pwmsnd_2eh_240',['pwmsnd.h',['../pwmsnd_8h.html',1,'']]],
+ ['pwmsndinit_241',['PWMSndInit',['../group__PWMGroup.html#ga125653aeeb2dc605e83d0927a635983c',1,'PWMSndInit(): pwmsnd.cpp'],['../group__PWMGroup.html#ga125653aeeb2dc605e83d0927a635983c',1,'PWMSndInit(): pwmsnd.cpp']]]
];
diff --git a/docs/search/classes_0.html b/docs/search/classes_0.html
index f7e4c14..af8159e 100644
--- a/docs/search/classes_0.html
+++ b/docs/search/classes_0.html
@@ -1,7 +1,8 @@
-
+
+
-
+
@@ -10,21 +11,27 @@
diff --git a/docs/search/functions_2.js b/docs/search/functions_2.js
index 32a83fb..691a054 100644
--- a/docs/search/functions_2.js
+++ b/docs/search/functions_2.js
@@ -1,22 +1,22 @@
var searchData=
[
- ['decnum_498',['DecNum',['../group__UtilsGroup.html#ga31e41cec17ed79dc0bd026b6d45237a0',1,'DecNum(char *buf, s32 num): vga_util.cpp'],['../group__UtilsGroup.html#ga31e41cec17ed79dc0bd026b6d45237a0',1,'DecNum(char *buf, s32 num): vga_util.cpp']]],
- ['decunum_499',['DecUNum',['../group__UtilsGroup.html#ga6d2664ea6a63954346a80ca93cfb3b74',1,'DecUNum(char *buf, u32 num): vga_util.cpp'],['../group__UtilsGroup.html#ga6d2664ea6a63954346a80ca93cfb3b74',1,'DecUNum(char *buf, u32 num): vga_util.cpp']]],
- ['double_500',['Double',['../classcRandom.html#ab6e855c6ad3f8d8a28f73ff31877901f',1,'cRandom']]],
- ['doublemax_501',['DoubleMax',['../classcRandom.html#a43d245705615c8855ca74528e8dfc1e3',1,'cRandom']]],
- ['doubleminmax_502',['DoubleMinMax',['../classcRandom.html#a78099006605ba8c4010db0583041c73c',1,'cRandom']]],
- ['drawblit_503',['DrawBlit',['../group__CanvasGroup.html#ga51e936c817f616d8118c1caeda0c1526',1,'DrawBlit(sCanvas *canvas, sCanvas *src, int xd, int yd, int xs, int ys, int w, int h, u8 col): canvas.cpp'],['../group__CanvasGroup.html#ga51e936c817f616d8118c1caeda0c1526',1,'DrawBlit(sCanvas *canvas, sCanvas *src, int xd, int yd, int xs, int ys, int w, int h, u8 col): canvas.cpp']]],
- ['drawcircle_504',['DrawCircle',['../group__CanvasGroup.html#ga3342dbc6a4cb8c330c5d52cd18d23fdf',1,'DrawCircle(sCanvas *canvas, int x0, int y0, int r, u8 col, u8 mask): canvas.cpp'],['../group__CanvasGroup.html#ga3342dbc6a4cb8c330c5d52cd18d23fdf',1,'DrawCircle(sCanvas *canvas, int x0, int y0, int r, u8 col, u8 mask=0xff): canvas.cpp']]],
- ['drawclear_505',['DrawClear',['../group__CanvasGroup.html#ga35996ee70491a2ec819411c659df99a6',1,'DrawClear(sCanvas *canvas): canvas.cpp'],['../group__CanvasGroup.html#ga35996ee70491a2ec819411c659df99a6',1,'DrawClear(sCanvas *canvas): canvas.cpp']]],
- ['drawfillcircle_506',['DrawFillCircle',['../group__CanvasGroup.html#gab482486182a41847f517b2e4904bad85',1,'DrawFillCircle(sCanvas *canvas, int x0, int y0, int r, u8 col, u8 mask): canvas.cpp'],['../group__CanvasGroup.html#gab482486182a41847f517b2e4904bad85',1,'DrawFillCircle(sCanvas *canvas, int x0, int y0, int r, u8 col, u8 mask=0xff): canvas.cpp']]],
- ['drawframe_507',['DrawFrame',['../group__CanvasGroup.html#ga030eb117917d9fa5e356fa5a5ac987a5',1,'DrawFrame(sCanvas *canvas, int x, int y, int w, int h, u8 col): canvas.cpp'],['../group__CanvasGroup.html#ga030eb117917d9fa5e356fa5a5ac987a5',1,'DrawFrame(sCanvas *canvas, int x, int y, int w, int h, u8 col): canvas.cpp']]],
- ['drawimg_508',['DrawImg',['../group__CanvasGroup.html#ga07403253f5e46116ae22ea94b4161c86',1,'DrawImg(sCanvas *canvas, sCanvas *src, int xd, int yd, int xs, int ys, int w, int h): canvas.cpp'],['../group__CanvasGroup.html#ga07403253f5e46116ae22ea94b4161c86',1,'DrawImg(sCanvas *canvas, sCanvas *src, int xd, int yd, int xs, int ys, int w, int h): canvas.cpp']]],
- ['drawimgline_509',['DrawImgLine',['../group__CanvasGroup.html#ga8b38b2530c058e70233c8ae6c622cfef',1,'DrawImgLine(sCanvas *canvas, sCanvas *src, int xd, int yd, int xs, int ys, int wd, int ws): canvas.cpp'],['../group__CanvasGroup.html#ga8b38b2530c058e70233c8ae6c622cfef',1,'DrawImgLine(sCanvas *canvas, sCanvas *src, int xd, int yd, int xs, int ys, int wd, int ws): canvas.cpp']]],
- ['drawimgmat_510',['DrawImgMat',['../group__CanvasGroup.html#ga5d1db92659f6c11713cd0fb9c45f3637',1,'canvas.h']]],
- ['drawline_511',['DrawLine',['../group__CanvasGroup.html#ga3452639f8699459e2db4c8c07717ff8c',1,'DrawLine(sCanvas *canvas, int x1, int y1, int x2, int y2, u8 col): canvas.cpp'],['../group__CanvasGroup.html#ga3452639f8699459e2db4c8c07717ff8c',1,'DrawLine(sCanvas *canvas, int x1, int y1, int x2, int y2, u8 col): canvas.cpp']]],
- ['drawpoint_512',['DrawPoint',['../group__CanvasGroup.html#ga847429aa8ed956796cb0637b44fdcf9e',1,'DrawPoint(sCanvas *canvas, int x, int y, u8 col): canvas.cpp'],['../group__CanvasGroup.html#ga847429aa8ed956796cb0637b44fdcf9e',1,'DrawPoint(sCanvas *canvas, int x, int y, u8 col): canvas.cpp']]],
- ['drawrect_513',['DrawRect',['../group__CanvasGroup.html#gac8441b25105805be5e7da188957bd058',1,'DrawRect(sCanvas *canvas, int x, int y, int w, int h, u8 col): canvas.cpp'],['../group__CanvasGroup.html#gac8441b25105805be5e7da188957bd058',1,'DrawRect(sCanvas *canvas, int x, int y, int w, int h, u8 col): canvas.cpp']]],
- ['drawtext_514',['DrawText',['../group__CanvasGroup.html#ga4a2c127f6c6eca6425f074d2523c230a',1,'DrawText(sCanvas *canvas, const char *text, int x, int y, u8 col, const void *font, int fontheight, int scalex, int scaley): canvas.cpp'],['../group__CanvasGroup.html#ga4a2c127f6c6eca6425f074d2523c230a',1,'DrawText(sCanvas *canvas, const char *text, int x, int y, u8 col, const void *font, int fontheight=8, int scalex=1, int scaley=1): canvas.cpp']]],
- ['drawtextbg_515',['DrawTextBg',['../group__CanvasGroup.html#gac53e49cc83c30367199882379ba8fd92',1,'DrawTextBg(sCanvas *canvas, const char *text, int x, int y, u8 col, u8 bgcol, const void *font, int fontheight, int scalex, int scaley): canvas.cpp'],['../group__CanvasGroup.html#gac53e49cc83c30367199882379ba8fd92',1,'DrawTextBg(sCanvas *canvas, const char *text, int x, int y, u8 col, u8 bgcol, const void *font, int fontheight=8, int scalex=1, int scaley=1): canvas.cpp']]],
- ['drawtilemap_516',['DrawTileMap',['../group__CanvasGroup.html#gaab3620a5cf2c20a6d9fd0b05f5eaf934',1,'DrawTileMap(sCanvas *canvas, const sCanvas *src, const u8 *map, int mapwbits, int maphbits, int tilebits, int x, int y, int w, int h, const cMat2Df *mat, u8 horizon): canvas.cpp'],['../group__CanvasGroup.html#gaab3620a5cf2c20a6d9fd0b05f5eaf934',1,'DrawTileMap(sCanvas *canvas, const sCanvas *src, const u8 *map, int mapwbits, int maphbits, int tilebits, int x, int y, int w, int h, const cMat2Df *mat, u8 horizon): canvas.cpp']]]
+ ['decnum_513',['DecNum',['../group__UtilsGroup.html#ga31e41cec17ed79dc0bd026b6d45237a0',1,'DecNum(char *buf, s32 num): vga_util.cpp'],['../group__UtilsGroup.html#ga31e41cec17ed79dc0bd026b6d45237a0',1,'DecNum(char *buf, s32 num): vga_util.cpp']]],
+ ['decunum_514',['DecUNum',['../group__UtilsGroup.html#ga6d2664ea6a63954346a80ca93cfb3b74',1,'DecUNum(char *buf, u32 num): vga_util.cpp'],['../group__UtilsGroup.html#ga6d2664ea6a63954346a80ca93cfb3b74',1,'DecUNum(char *buf, u32 num): vga_util.cpp']]],
+ ['double_515',['Double',['../classcRandom.html#ab6e855c6ad3f8d8a28f73ff31877901f',1,'cRandom']]],
+ ['doublemax_516',['DoubleMax',['../classcRandom.html#a43d245705615c8855ca74528e8dfc1e3',1,'cRandom']]],
+ ['doubleminmax_517',['DoubleMinMax',['../classcRandom.html#a78099006605ba8c4010db0583041c73c',1,'cRandom']]],
+ ['drawblit_518',['DrawBlit',['../group__CanvasGroup.html#ga51e936c817f616d8118c1caeda0c1526',1,'DrawBlit(sCanvas *canvas, sCanvas *src, int xd, int yd, int xs, int ys, int w, int h, u8 col): canvas.cpp'],['../group__CanvasGroup.html#ga51e936c817f616d8118c1caeda0c1526',1,'DrawBlit(sCanvas *canvas, sCanvas *src, int xd, int yd, int xs, int ys, int w, int h, u8 col): canvas.cpp']]],
+ ['drawcircle_519',['DrawCircle',['../group__CanvasGroup.html#ga3342dbc6a4cb8c330c5d52cd18d23fdf',1,'DrawCircle(sCanvas *canvas, int x0, int y0, int r, u8 col, u8 mask): canvas.cpp'],['../group__CanvasGroup.html#ga3342dbc6a4cb8c330c5d52cd18d23fdf',1,'DrawCircle(sCanvas *canvas, int x0, int y0, int r, u8 col, u8 mask=0xff): canvas.cpp']]],
+ ['drawclear_520',['DrawClear',['../group__CanvasGroup.html#ga35996ee70491a2ec819411c659df99a6',1,'DrawClear(sCanvas *canvas): canvas.cpp'],['../group__CanvasGroup.html#ga35996ee70491a2ec819411c659df99a6',1,'DrawClear(sCanvas *canvas): canvas.cpp']]],
+ ['drawfillcircle_521',['DrawFillCircle',['../group__CanvasGroup.html#gab482486182a41847f517b2e4904bad85',1,'DrawFillCircle(sCanvas *canvas, int x0, int y0, int r, u8 col, u8 mask): canvas.cpp'],['../group__CanvasGroup.html#gab482486182a41847f517b2e4904bad85',1,'DrawFillCircle(sCanvas *canvas, int x0, int y0, int r, u8 col, u8 mask=0xff): canvas.cpp']]],
+ ['drawframe_522',['DrawFrame',['../group__CanvasGroup.html#ga030eb117917d9fa5e356fa5a5ac987a5',1,'DrawFrame(sCanvas *canvas, int x, int y, int w, int h, u8 col): canvas.cpp'],['../group__CanvasGroup.html#ga030eb117917d9fa5e356fa5a5ac987a5',1,'DrawFrame(sCanvas *canvas, int x, int y, int w, int h, u8 col): canvas.cpp']]],
+ ['drawimg_523',['DrawImg',['../group__CanvasGroup.html#ga07403253f5e46116ae22ea94b4161c86',1,'DrawImg(sCanvas *canvas, sCanvas *src, int xd, int yd, int xs, int ys, int w, int h): canvas.cpp'],['../group__CanvasGroup.html#ga07403253f5e46116ae22ea94b4161c86',1,'DrawImg(sCanvas *canvas, sCanvas *src, int xd, int yd, int xs, int ys, int w, int h): canvas.cpp']]],
+ ['drawimgline_524',['DrawImgLine',['../group__CanvasGroup.html#ga8b38b2530c058e70233c8ae6c622cfef',1,'DrawImgLine(sCanvas *canvas, sCanvas *src, int xd, int yd, int xs, int ys, int wd, int ws): canvas.cpp'],['../group__CanvasGroup.html#ga8b38b2530c058e70233c8ae6c622cfef',1,'DrawImgLine(sCanvas *canvas, sCanvas *src, int xd, int yd, int xs, int ys, int wd, int ws): canvas.cpp']]],
+ ['drawimgmat_525',['DrawImgMat',['../group__CanvasGroup.html#ga5d1db92659f6c11713cd0fb9c45f3637',1,'canvas.h']]],
+ ['drawline_526',['DrawLine',['../group__CanvasGroup.html#ga3452639f8699459e2db4c8c07717ff8c',1,'DrawLine(sCanvas *canvas, int x1, int y1, int x2, int y2, u8 col): canvas.cpp'],['../group__CanvasGroup.html#ga3452639f8699459e2db4c8c07717ff8c',1,'DrawLine(sCanvas *canvas, int x1, int y1, int x2, int y2, u8 col): canvas.cpp']]],
+ ['drawpoint_527',['DrawPoint',['../group__CanvasGroup.html#ga847429aa8ed956796cb0637b44fdcf9e',1,'DrawPoint(sCanvas *canvas, int x, int y, u8 col): canvas.cpp'],['../group__CanvasGroup.html#ga847429aa8ed956796cb0637b44fdcf9e',1,'DrawPoint(sCanvas *canvas, int x, int y, u8 col): canvas.cpp']]],
+ ['drawrect_528',['DrawRect',['../group__CanvasGroup.html#gac8441b25105805be5e7da188957bd058',1,'DrawRect(sCanvas *canvas, int x, int y, int w, int h, u8 col): canvas.cpp'],['../group__CanvasGroup.html#gac8441b25105805be5e7da188957bd058',1,'DrawRect(sCanvas *canvas, int x, int y, int w, int h, u8 col): canvas.cpp']]],
+ ['drawtext_529',['DrawText',['../group__CanvasGroup.html#ga4a2c127f6c6eca6425f074d2523c230a',1,'DrawText(sCanvas *canvas, const char *text, int x, int y, u8 col, const void *font, int fontheight, int scalex, int scaley): canvas.cpp'],['../group__CanvasGroup.html#ga4a2c127f6c6eca6425f074d2523c230a',1,'DrawText(sCanvas *canvas, const char *text, int x, int y, u8 col, const void *font, int fontheight=8, int scalex=1, int scaley=1): canvas.cpp']]],
+ ['drawtextbg_530',['DrawTextBg',['../group__CanvasGroup.html#gac53e49cc83c30367199882379ba8fd92',1,'DrawTextBg(sCanvas *canvas, const char *text, int x, int y, u8 col, u8 bgcol, const void *font, int fontheight, int scalex, int scaley): canvas.cpp'],['../group__CanvasGroup.html#gac53e49cc83c30367199882379ba8fd92',1,'DrawTextBg(sCanvas *canvas, const char *text, int x, int y, u8 col, u8 bgcol, const void *font, int fontheight=8, int scalex=1, int scaley=1): canvas.cpp']]],
+ ['drawtilemap_531',['DrawTileMap',['../group__CanvasGroup.html#gaab3620a5cf2c20a6d9fd0b05f5eaf934',1,'DrawTileMap(sCanvas *canvas, const sCanvas *src, const u8 *map, int mapwbits, int maphbits, int tilebits, int x, int y, int w, int h, const cMat2Df *mat, u8 horizon): canvas.cpp'],['../group__CanvasGroup.html#gaab3620a5cf2c20a6d9fd0b05f5eaf934',1,'DrawTileMap(sCanvas *canvas, const sCanvas *src, const u8 *map, int mapwbits, int maphbits, int tilebits, int x, int y, int w, int h, const cMat2Df *mat, u8 horizon): canvas.cpp']]]
];
diff --git a/docs/search/functions_3.html b/docs/search/functions_3.html
index 6da86e7..d79f55b 100644
--- a/docs/search/functions_3.html
+++ b/docs/search/functions_3.html
@@ -1,7 +1,8 @@
-
+
+
-
+
@@ -10,21 +11,27 @@
diff --git a/docs/search/functions_8.js b/docs/search/functions_8.js
index 44a0ef9..fa0858a 100644
--- a/docs/search/functions_8.js
+++ b/docs/search/functions_8.js
@@ -1,6 +1,6 @@
var searchData=
[
- ['noise1d_543',['Noise1D',['../group__RandomGroup.html#gae6fe4d963031879338bc2e6419585b86',1,'Noise1D(int x, int seed): rand.cpp'],['../group__RandomGroup.html#gae6fe4d963031879338bc2e6419585b86',1,'Noise1D(int x, int seed): rand.cpp']]],
- ['noise2d_544',['Noise2D',['../group__RandomGroup.html#gaaf58bbb6ea1aa045c6dc5a09e14d08a8',1,'Noise2D(int x, int y, int seed): rand.cpp'],['../group__RandomGroup.html#gaaf58bbb6ea1aa045c6dc5a09e14d08a8',1,'Noise2D(int x, int y, int seed): rand.cpp']]],
- ['noise3d_545',['Noise3D',['../group__RandomGroup.html#ga83ee9be709d5f5ca29b51dcc2f614ec9',1,'Noise3D(int x, int y, int z, int seed): rand.cpp'],['../group__RandomGroup.html#ga83ee9be709d5f5ca29b51dcc2f614ec9',1,'Noise3D(int x, int y, int z, int seed): rand.cpp']]]
+ ['noise1d_558',['Noise1D',['../group__RandomGroup.html#gae6fe4d963031879338bc2e6419585b86',1,'Noise1D(int x, int seed): rand.cpp'],['../group__RandomGroup.html#gae6fe4d963031879338bc2e6419585b86',1,'Noise1D(int x, int seed): rand.cpp']]],
+ ['noise2d_559',['Noise2D',['../group__RandomGroup.html#gaaf58bbb6ea1aa045c6dc5a09e14d08a8',1,'Noise2D(int x, int y, int seed): rand.cpp'],['../group__RandomGroup.html#gaaf58bbb6ea1aa045c6dc5a09e14d08a8',1,'Noise2D(int x, int y, int seed): rand.cpp']]],
+ ['noise3d_560',['Noise3D',['../group__RandomGroup.html#ga83ee9be709d5f5ca29b51dcc2f614ec9',1,'Noise3D(int x, int y, int z, int seed): rand.cpp'],['../group__RandomGroup.html#ga83ee9be709d5f5ca29b51dcc2f614ec9',1,'Noise3D(int x, int y, int z, int seed): rand.cpp']]]
];
diff --git a/docs/search/functions_9.html b/docs/search/functions_9.html
index befd4fa..9a8e429 100644
--- a/docs/search/functions_9.html
+++ b/docs/search/functions_9.html
@@ -1,7 +1,8 @@
-
+
+
-
+
@@ -10,21 +11,27 @@
Loading...
-
+
Searching...
No Matches
-
+
diff --git a/docs/search/functions_9.js b/docs/search/functions_9.js
index e78af96..2518b5e 100644
--- a/docs/search/functions_9.js
+++ b/docs/search/functions_9.js
@@ -1,24 +1,24 @@
var searchData=
[
- ['plane2conv_546',['Plane2Conv',['../group__UtilsGroup.html#ga9d2f98a08bf609f9969298eb2e9d7761',1,'Plane2Conv(u8 *plane0, u8 *plane1, const u8 *src, int w, int h): vga_util.cpp'],['../group__UtilsGroup.html#ga9d2f98a08bf609f9969298eb2e9d7761',1,'Plane2Conv(u8 *plane0, u8 *plane1, const u8 *src, int w, int h): vga_util.cpp']]],
- ['playingsound_547',['PlayingSound',['../group__PWMGroup.html#gac5cdc29178dd50bc69a6925a6af5c84a',1,'PlayingSound(): pwmsnd.cpp'],['../group__PWMGroup.html#gac5cdc29178dd50bc69a6925a6af5c84a',1,'PlayingSound(): pwmsnd.cpp']]],
- ['playsound_548',['PlaySound',['../group__PWMGroup.html#ga7d7587ed33cbb0e94588c96735b5e6d5',1,'PlaySound(const u8 *snd, int len, Bool rep, float speed): pwmsnd.cpp'],['../group__PWMGroup.html#ga7d7587ed33cbb0e94588c96735b5e6d5',1,'PlaySound(const u8 *snd, int len, Bool rep=False, float speed=1.0f): pwmsnd.cpp']]],
- ['prepdrawimg_549',['PrepDrawImg',['../classcMat2Df.html#a529afacb6148a067dd3a5a488cb97e13',1,'cMat2Df']]],
- ['printaddpos_550',['PrintAddPos',['../group__TextGroup.html#gaba693e4bd43c731c3c97ca303938a903',1,'PrintAddPos(int x, int y): print.cpp'],['../group__TextGroup.html#gaba693e4bd43c731c3c97ca303938a903',1,'PrintAddPos(int x, int y): print.cpp']]],
- ['printchar_551',['PrintChar',['../group__TextGroup.html#gad43a32dad63df05f21d3b2254c96f36d',1,'PrintChar(char ch): print.cpp'],['../group__TextGroup.html#gad43a32dad63df05f21d3b2254c96f36d',1,'PrintChar(char ch): print.cpp']]],
- ['printchar0_552',['PrintChar0',['../group__TextGroup.html#ga3c5c271811227b03d974171af2a243c4',1,'PrintChar0(char ch): print.cpp'],['../group__TextGroup.html#ga3c5c271811227b03d974171af2a243c4',1,'PrintChar0(char ch): print.cpp']]],
- ['printcharrep_553',['PrintCharRep',['../group__TextGroup.html#gab9231ede9d6a979f1b812b7667c34d29',1,'PrintCharRep(char ch, int num): print.cpp'],['../group__TextGroup.html#gab9231ede9d6a979f1b812b7667c34d29',1,'PrintCharRep(char ch, int num): print.cpp']]],
- ['printclear_554',['PrintClear',['../group__TextGroup.html#gad7b697700b999077439e537a2fef28f3',1,'PrintClear(): print.cpp'],['../group__TextGroup.html#gad7b697700b999077439e537a2fef28f3',1,'PrintClear(): print.cpp']]],
- ['printframe_555',['PrintFrame',['../group__TextGroup.html#ga2323e69f1ff2adaadf317eb220bd10db',1,'PrintFrame(int x, int y, int w, int h): print.cpp'],['../group__TextGroup.html#ga2323e69f1ff2adaadf317eb220bd10db',1,'PrintFrame(int x, int y, int w, int h): print.cpp']]],
- ['printhline_556',['PrintHLine',['../group__TextGroup.html#ga16e185e12dd782e3b69117386fe64dc9',1,'PrintHLine(int x, int y, int w): print.cpp'],['../group__TextGroup.html#ga16e185e12dd782e3b69117386fe64dc9',1,'PrintHLine(int x, int y, int w): print.cpp']]],
- ['printhome_557',['PrintHome',['../group__TextGroup.html#ga569987e642b3fa23427c126e649774ba',1,'PrintHome(): print.cpp'],['../group__TextGroup.html#ga569987e642b3fa23427c126e649774ba',1,'PrintHome(): print.cpp']]],
- ['printsetcol_558',['PrintSetCol',['../group__TextGroup.html#ga7ca8b785cd293ee0e1d20869dedf52a0',1,'PrintSetCol(u8 col): print.cpp'],['../group__TextGroup.html#ga7ca8b785cd293ee0e1d20869dedf52a0',1,'PrintSetCol(u8 col): print.cpp']]],
- ['printsetpos_559',['PrintSetPos',['../group__TextGroup.html#gacdf79045593025b8b51f841dd696094d',1,'PrintSetPos(int x, int y): print.cpp'],['../group__TextGroup.html#gacdf79045593025b8b51f841dd696094d',1,'PrintSetPos(int x, int y): print.cpp']]],
- ['printsetup_560',['PrintSetup',['../group__TextGroup.html#ga0275c150a5a12613afaef51f4bec2c89',1,'PrintSetup(u8 *buf, int bufw, int bufh, int bufwb): print.cpp'],['../group__TextGroup.html#ga0275c150a5a12613afaef51f4bec2c89',1,'PrintSetup(u8 *buf, int bufw, int bufh, int bufwb): print.cpp']]],
- ['printspc_561',['PrintSpc',['../group__TextGroup.html#gaf269b76cd7c06b18218aa5274ee3f990',1,'PrintSpc(): print.cpp'],['../group__TextGroup.html#gaf269b76cd7c06b18218aa5274ee3f990',1,'PrintSpc(): print.cpp']]],
- ['printspcrep_562',['PrintSpcRep',['../group__TextGroup.html#ga6862b40c6d8ef741e52e0e9ed1488647',1,'PrintSpcRep(int num): print.cpp'],['../group__TextGroup.html#ga6862b40c6d8ef741e52e0e9ed1488647',1,'PrintSpcRep(int num): print.cpp']]],
- ['printspcto_563',['PrintSpcTo',['../group__TextGroup.html#ga9794804d1b01d51df73144d3edc0150d',1,'PrintSpcTo(int pos): print.cpp'],['../group__TextGroup.html#ga9794804d1b01d51df73144d3edc0150d',1,'PrintSpcTo(int pos): print.cpp']]],
- ['printtext_564',['PrintText',['../group__TextGroup.html#ga351c19309ced4dc9310112ad2b8bae2c',1,'PrintText(const char *text): print.cpp'],['../group__TextGroup.html#ga351c19309ced4dc9310112ad2b8bae2c',1,'PrintText(const char *text): print.cpp']]],
- ['printvline_565',['PrintVLine',['../group__TextGroup.html#gac11665c9779895b57d0a9f853beff7b2',1,'PrintVLine(int x, int y, int h): print.cpp'],['../group__TextGroup.html#gac11665c9779895b57d0a9f853beff7b2',1,'PrintVLine(int x, int y, int h): print.cpp']]],
- ['pwmsndinit_566',['PWMSndInit',['../group__PWMGroup.html#ga125653aeeb2dc605e83d0927a635983c',1,'PWMSndInit(): pwmsnd.cpp'],['../group__PWMGroup.html#ga125653aeeb2dc605e83d0927a635983c',1,'PWMSndInit(): pwmsnd.cpp']]]
+ ['plane2conv_561',['Plane2Conv',['../group__UtilsGroup.html#ga9d2f98a08bf609f9969298eb2e9d7761',1,'Plane2Conv(u8 *plane0, u8 *plane1, const u8 *src, int w, int h): vga_util.cpp'],['../group__UtilsGroup.html#ga9d2f98a08bf609f9969298eb2e9d7761',1,'Plane2Conv(u8 *plane0, u8 *plane1, const u8 *src, int w, int h): vga_util.cpp']]],
+ ['playingsound_562',['PlayingSound',['../group__PWMGroup.html#gac5cdc29178dd50bc69a6925a6af5c84a',1,'PlayingSound(): pwmsnd.cpp'],['../group__PWMGroup.html#gac5cdc29178dd50bc69a6925a6af5c84a',1,'PlayingSound(): pwmsnd.cpp']]],
+ ['playsound_563',['PlaySound',['../group__PWMGroup.html#ga7d7587ed33cbb0e94588c96735b5e6d5',1,'PlaySound(const u8 *snd, int len, Bool rep, float speed): pwmsnd.cpp'],['../group__PWMGroup.html#ga7d7587ed33cbb0e94588c96735b5e6d5',1,'PlaySound(const u8 *snd, int len, Bool rep=False, float speed=1.0f): pwmsnd.cpp']]],
+ ['prepdrawimg_564',['PrepDrawImg',['../classcMat2Df.html#a529afacb6148a067dd3a5a488cb97e13',1,'cMat2Df']]],
+ ['printaddpos_565',['PrintAddPos',['../group__TextGroup.html#gaba693e4bd43c731c3c97ca303938a903',1,'PrintAddPos(int x, int y): print.cpp'],['../group__TextGroup.html#gaba693e4bd43c731c3c97ca303938a903',1,'PrintAddPos(int x, int y): print.cpp']]],
+ ['printchar_566',['PrintChar',['../group__TextGroup.html#gad43a32dad63df05f21d3b2254c96f36d',1,'PrintChar(char ch): print.cpp'],['../group__TextGroup.html#gad43a32dad63df05f21d3b2254c96f36d',1,'PrintChar(char ch): print.cpp']]],
+ ['printchar0_567',['PrintChar0',['../group__TextGroup.html#ga3c5c271811227b03d974171af2a243c4',1,'PrintChar0(char ch): print.cpp'],['../group__TextGroup.html#ga3c5c271811227b03d974171af2a243c4',1,'PrintChar0(char ch): print.cpp']]],
+ ['printcharrep_568',['PrintCharRep',['../group__TextGroup.html#gab9231ede9d6a979f1b812b7667c34d29',1,'PrintCharRep(char ch, int num): print.cpp'],['../group__TextGroup.html#gab9231ede9d6a979f1b812b7667c34d29',1,'PrintCharRep(char ch, int num): print.cpp']]],
+ ['printclear_569',['PrintClear',['../group__TextGroup.html#gad7b697700b999077439e537a2fef28f3',1,'PrintClear(): print.cpp'],['../group__TextGroup.html#gad7b697700b999077439e537a2fef28f3',1,'PrintClear(): print.cpp']]],
+ ['printframe_570',['PrintFrame',['../group__TextGroup.html#ga2323e69f1ff2adaadf317eb220bd10db',1,'PrintFrame(int x, int y, int w, int h): print.cpp'],['../group__TextGroup.html#ga2323e69f1ff2adaadf317eb220bd10db',1,'PrintFrame(int x, int y, int w, int h): print.cpp']]],
+ ['printhline_571',['PrintHLine',['../group__TextGroup.html#ga16e185e12dd782e3b69117386fe64dc9',1,'PrintHLine(int x, int y, int w): print.cpp'],['../group__TextGroup.html#ga16e185e12dd782e3b69117386fe64dc9',1,'PrintHLine(int x, int y, int w): print.cpp']]],
+ ['printhome_572',['PrintHome',['../group__TextGroup.html#ga569987e642b3fa23427c126e649774ba',1,'PrintHome(): print.cpp'],['../group__TextGroup.html#ga569987e642b3fa23427c126e649774ba',1,'PrintHome(): print.cpp']]],
+ ['printsetcol_573',['PrintSetCol',['../group__TextGroup.html#ga7ca8b785cd293ee0e1d20869dedf52a0',1,'PrintSetCol(u8 col): print.cpp'],['../group__TextGroup.html#ga7ca8b785cd293ee0e1d20869dedf52a0',1,'PrintSetCol(u8 col): print.cpp']]],
+ ['printsetpos_574',['PrintSetPos',['../group__TextGroup.html#gacdf79045593025b8b51f841dd696094d',1,'PrintSetPos(int x, int y): print.cpp'],['../group__TextGroup.html#gacdf79045593025b8b51f841dd696094d',1,'PrintSetPos(int x, int y): print.cpp']]],
+ ['printsetup_575',['PrintSetup',['../group__TextGroup.html#ga0275c150a5a12613afaef51f4bec2c89',1,'PrintSetup(u8 *buf, int bufw, int bufh, int bufwb): print.cpp'],['../group__TextGroup.html#ga0275c150a5a12613afaef51f4bec2c89',1,'PrintSetup(u8 *buf, int bufw, int bufh, int bufwb): print.cpp']]],
+ ['printspc_576',['PrintSpc',['../group__TextGroup.html#gaf269b76cd7c06b18218aa5274ee3f990',1,'PrintSpc(): print.cpp'],['../group__TextGroup.html#gaf269b76cd7c06b18218aa5274ee3f990',1,'PrintSpc(): print.cpp']]],
+ ['printspcrep_577',['PrintSpcRep',['../group__TextGroup.html#ga6862b40c6d8ef741e52e0e9ed1488647',1,'PrintSpcRep(int num): print.cpp'],['../group__TextGroup.html#ga6862b40c6d8ef741e52e0e9ed1488647',1,'PrintSpcRep(int num): print.cpp']]],
+ ['printspcto_578',['PrintSpcTo',['../group__TextGroup.html#ga9794804d1b01d51df73144d3edc0150d',1,'PrintSpcTo(int pos): print.cpp'],['../group__TextGroup.html#ga9794804d1b01d51df73144d3edc0150d',1,'PrintSpcTo(int pos): print.cpp']]],
+ ['printtext_579',['PrintText',['../group__TextGroup.html#ga351c19309ced4dc9310112ad2b8bae2c',1,'PrintText(const char *text): print.cpp'],['../group__TextGroup.html#ga351c19309ced4dc9310112ad2b8bae2c',1,'PrintText(const char *text): print.cpp']]],
+ ['printvline_580',['PrintVLine',['../group__TextGroup.html#gac11665c9779895b57d0a9f853beff7b2',1,'PrintVLine(int x, int y, int h): print.cpp'],['../group__TextGroup.html#gac11665c9779895b57d0a9f853beff7b2',1,'PrintVLine(int x, int y, int h): print.cpp']]],
+ ['pwmsndinit_581',['PWMSndInit',['../group__PWMGroup.html#ga125653aeeb2dc605e83d0927a635983c',1,'PWMSndInit(): pwmsnd.cpp'],['../group__PWMGroup.html#ga125653aeeb2dc605e83d0927a635983c',1,'PWMSndInit(): pwmsnd.cpp']]]
];
diff --git a/docs/search/functions_a.html b/docs/search/functions_a.html
index a81e963..5ecc152 100644
--- a/docs/search/functions_a.html
+++ b/docs/search/functions_a.html
@@ -1,7 +1,8 @@
-
+
+
-
+
@@ -10,21 +11,27 @@
object is the parent of the search bar */
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 36px;
+ margin-right: 1em;
+}
+
/*---------------- Search filter selection */
#MSearchSelectWindow {
@@ -220,19 +204,21 @@ a.SRScope:focus, a.SRScope:active {
span.SRScope {
padding-left: 4px;
+ font-family: Arial, Verdana, sans-serif;
}
.SRPage .SRStatus {
padding: 2px 5px;
font-size: 8pt;
font-style: italic;
+ font-family: Arial, Verdana, sans-serif;
}
.SRResult {
display: none;
}
-DIV.searchresults {
+div.searchresults {
margin-left: 10px;
margin-right: 10px;
}
diff --git a/docs/search/search.js b/docs/search/search.js
index a554ab9..fb226f7 100644
--- a/docs/search/search.js
+++ b/docs/search/search.js
@@ -1,25 +1,26 @@
/*
- @licstart The following is the entire license notice for the
- JavaScript code in this file.
+ @licstart The following is the entire license notice for the JavaScript code in this file.
- Copyright (C) 1997-2017 by Dimitri van Heesch
+ The MIT License (MIT)
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
+ Copyright (C) 1997-2020 by Dimitri van Heesch
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
- @licend The above is the entire license notice
- for the JavaScript code in this file
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend The above is the entire license notice for the JavaScript code in this file
*/
function convertToId(search)
{
@@ -79,9 +80,10 @@ function getYPos(item)
storing this instance. Is needed to be able to set timeouts.
resultPath - path to use for external files
*/
-function SearchBox(name, resultsPath, inFrame, label)
+function SearchBox(name, resultsPath, inFrame, label, extension)
{
if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); }
+ if (!extension || extension == "") { extension = ".html"; }
// ---------- Instance variables
this.name = name;
@@ -96,6 +98,7 @@ function SearchBox(name, resultsPath, inFrame, label)
this.searchActive = false;
this.insideFrame = inFrame;
this.searchLabel = label;
+ this.extension = extension;
// ----------- DOM Elements
@@ -200,10 +203,9 @@ function SearchBox(name, resultsPath, inFrame, label)
}
return;
}
- else if (window.frames.MSearchResults.searchResults)
+ else
{
- var elem = window.frames.MSearchResults.searchResults.NavNext(0);
- if (elem) elem.focus();
+ window.frames.MSearchResults.postMessage("take_focus", "*");
}
}
else if (e.keyCode==27) // Escape out of the search field
@@ -347,13 +349,13 @@ function SearchBox(name, resultsPath, inFrame, label)
if (idx!=-1)
{
var hexCode=idx.toString(16);
- resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';
+ resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension;
resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
hasResultsPage = true;
}
else // nothing available for this search term
{
- resultsPage = this.resultsPath + '/nomatches.html';
+ resultsPage = this.resultsPath + '/nomatches' + this.extension;
resultsPageWithSearch = resultsPage;
hasResultsPage = false;
}
@@ -364,7 +366,7 @@ function SearchBox(name, resultsPath, inFrame, label)
if (domPopupSearchResultsWindow.style.display!='block')
{
var domSearchBox = this.DOMSearchBox();
- this.DOMSearchClose().style.display = 'inline';
+ this.DOMSearchClose().style.display = 'inline-block';
if (this.insideFrame)
{
var domPopupSearchResults = this.DOMPopupSearchResults();
@@ -439,12 +441,12 @@ function SearchResults(name)
while (element && element!=parentElement)
{
- if (element.nodeName == 'DIV' && element.className == 'SRChildren')
+ if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren')
{
return element;
}
- if (element.nodeName == 'DIV' && element.hasChildNodes())
+ if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes())
{
element = element.firstChild;
}
diff --git a/docs/search/searchdata.js b/docs/search/searchdata.js
index 3d6ba3a..4125716 100644
--- a/docs/search/searchdata.js
+++ b/docs/search/searchdata.js
@@ -1,13 +1,13 @@
var indexSectionsWithContent =
{
- 0: "abcdefghiklmnoprstuvwxyz",
- 1: "cs",
+ 0: "_abcdefghiklmnoprstuvwxyz",
+ 1: "_csw",
2: "cdmoprv",
3: "acdefgilnprstuvw",
4: "bcdfghiklmnoprstvwxyz",
5: "dfr",
6: "bcfoprstuv",
- 7: "cgiu"
+ 7: "cgitu"
};
var indexSectionNames =
diff --git a/docs/search/variables_0.html b/docs/search/variables_0.html
index bf3eba5..1e477c0 100644
--- a/docs/search/variables_0.html
+++ b/docs/search/variables_0.html
@@ -1,7 +1,8 @@
-
+
+
-
+
@@ -10,21 +11,27 @@
The tools folder contains the support programs used to prepare images, palettes, and sounds for use with the PicoVGA library. These tools convert standard file formats (BMP, WAV, ACT) into optimized C arrays that can be compiled directly into PicoVGA projects.
+
+
The generated arrays provide graphics and audio data in formats tailored for the Raspberry Pi Pico’s hardware and the PicoVGA rendering pipeline. By using these utilities, you can ensure that assets created in common editors (e.g., Photoshop, GIMP, Audacity) are correctly formatted and ready to use without additional runtime conversion.
+
All tools are lightweight console applications that should compile for all platforms. Building the library will build these applications into the tools folder.
palettes - A collection of .act palette files for use in image editors.
+
+
+
+Image Conversion Tool
+
picovga_img is a command-line utility that converts Windows BMP images into C array data for use with the PicoVGA library on the Raspberry Pi Pico. It ensures that images are properly formatted and optimized for 8-bit, 4-bit, 2-bit, or 1-bit palette graphics.
+
+Usage
+
picovga_img input.bmp output.cpp arrayname
+
+
input.bmp – Source image file (must be a Windows BMP format).
+
+
output.cpp – Destination C++ file containing the image data.
+
+
arrayname – Name of the C++ array that will hold the image data.
+
+
+
The tool reads the BMP image, validates its format, and writes the pixel data into a const u8[] array that can be directly included in PicoVGA projects.
⚠️ Note: BMP does not natively support 2-bit images. Save as a 4-bit BMP with a 4-color palette, and RaspPicoImg will automatically detect and convert it to 2-bit format.
This array can be included in your PicoVGA project and drawn directly to the screen.
+
+RLE Compression Tool
+
picovga_rle is a command-line utility that compresses 8-bit PicoVGA images into a run-length encoded (RLE) format suitable for use with the PicoVGA library on the Raspberry Pi Pico. The compression significantly reduces image size while maintaining compatibility with the RLE PIO routines in PicoVGA.
input.bmp – Source image file (must be an 8-bit BMP using the PicoVGA palette pal332.act).
+
+
output.cpp – Destination C++ file containing the compressed image data.
+
+
arrayname – Name of the generated C array.
+
+
transparent_color – Index of the color to be used as transparency (0–255). Use -1 for no transparency.
+
+
+
The tool reads the BMP image, compresses it using RLE, and outputs a set of C arrays containing both pixel data and row offsets.
+
+Input Requirements
+
+
Format: Windows BMP.
+
+
Bit Depth: 8-bit palettized (must use PicoVGA's pal332.act).
+
+
Compression: None (must be saved uncompressed).
+
+
Row Order: Reverse line order enabled.
+
+
+
⚠️ If the input image does not meet these conditions, the tool will reject it.
+
+Transparency
+
The fourth parameter specifies which color index should be treated as transparent.
+
+
+
To enable transparency: supply the palette index of the color. For example, if a pixel color in Photoshop is #8080FF, locate it in pal332.csv to find the matching PicoVGA index.
+
+
To disable transparency: set the parameter to -1.
+
+
+
Example:
picovga_rle sprite.bmp sprite.c mysprite 120
+
This command compresses sprite.bmp, outputs to sprite.c, creates an array named mysprite, and treats color index 120 as transparent.
+
+Output
+
The generated .cpp file contains:
+
Image metadata – format, transparency, width, height, size, and compression ratio.
+
+
Row offset table – an array of u16 values marking where each scanline begins in the compressed data.
+
+
RLE data array – compressed image data aligned to 4 bytes.
+
The RLE compression encodes pixel sequences into tokens:
+
skip – Transparent runs of 2–257 pixels.
+
+
skip1 – Single transparent pixel.
+
+
run – Repeated color runs of 3–258 pixels.
+
+
raw / raw1 – Direct copies of pixel values (used when sequences are too short for run-length encoding).
+
+
+
Each scanline is terminated with an idle command and aligned to 32-bit boundaries for efficient processing on the Pico.
+
+Compatibility Warning
+
The compressed output is tightly coupled with the RLE PIO program in PicoVGA. Since the instruction format may change between library versions, always use picovga_rle from the same release as your PicoVGA library to avoid incompatibility issues.
+
+Sound Import Tool
+
picovga_snd is a command-line utility that converts WAV audio files into C array data for playback with the PicoVGA library on the Raspberry Pi Pico. It ensures that sound effects or music are properly formatted for the Pico’s audio playback routines.
+
+Usage
+
picovga_snd input.wav output.cpp arrayname
+
+
input.wav – Source WAV file.
+
+
output.cpp – Destination C++ file containing the audio data array.
+
+
arrayname – Name of the generated C array.
+
+
+
The tool validates the WAV file format and writes its sample data into a const u8[] array that can be directly included in PicoVGA projects.
+
+Input Requirements
+
The input WAV file must meet strict format requirements:
+
Format: PCM (uncompressed).
+
+
Channels: Mono (1 channel).
+
+
Bit depth: 8-bit unsigned (values 0–255, centered at 128).
+
+
Sample rate: 22050 Hz.
+
+
+
⚠️ If the file does not meet these conditions, the tool will reject it.
+
+Recommended Editors
+
+
Audacity (free) – provides full editing and sound effects, and supports exporting WAV in the correct format.
+
+
Cool Edit – a commercial editor that can also produce compatible WAV files.
+
+
+
These tools allow trimming, resampling, and converting audio to the exact format needed for PicoVGA.
+
+Output
+
The generated .cpp file contains:
+
A header comment describing the sound format.
+
+
A const u8[] array aligned to 4 bytes, containing all audio samples.
+
This array can be compiled into your PicoVGA program and played back using the sound routines in the library.
+
+8-bit Palette Generator
+
picvovga_pal332 is a utility program used to generate the standard 8-bit PicoVGA palette. This palette is the foundation for all 8-bit graphics in PicoVGA and defines a total of 256 colors based on a 3-3-2 bit RGB model:
+
3 bits red (0–7 levels)
+
3 bits green (0–7 levels)
+
2 bits blue (0–3 levels)
+
+
This RGB332 format allows compact color representation while providing a broad enough spectrum for retro-style graphics.
+
+Output Files
+
When you run picvovga_pal332, it generates two important files:
+
+
pal332.act – Adobe Color Table file containing the 256-color PicoVGA palette. This file can be imported into image editors such as Photoshop or GIMP to ensure images are created using PicoVGA’s 8-bit colors.
+
pal332.csv – A CSV table with detailed color information. Each row includes:
+
Palette index (0–255)
+
RGB hex value
+
Individual red, green, and blue component values
+
+
+
+
Example (excerpt from pal332.csv):
Index, HEX, R, G, B
+
0, #000000, 0, 0, 0
+
1, #000055, 0, 0, 85
+
2, #0000AA, 0, 0, 170
+
...
+
+Usage in Image Editors
+
+
In Photoshop or GIMP, load pal332.act as the palette before saving your image as an 8-bit BMP. This ensures the image uses the exact PicoVGA colors.
+
If you identify a color in an image by its HEX code (e.g., #8080FF), you can use pal332.csv to look up which PicoVGA color index corresponds to that HEX value.
+
+
This is especially useful when working with transparency or when preparing assets for use with other PicoVGA tools such as picovga_img or picovga_rle.
+
+Palettes
+
The PicoVGA project includes a set of predefined palettes located in the tools\palettes folder. These palettes (*.act files) can be used in Photoshop, GIMP, or other graphics editors to ensure images match PicoVGA’s supported color sets.
+
+Available Palettes
+
+
pal332.act – The primary 8-bit PicoVGA palette. This file defines the 256 standard colors used by PicoVGA.
+
palcga*.act – Variants of CGA palettes for different modes (used for 2-bit conversions).
+
+
pal1.act – Black & white palette for 1-bit images.
+
+
+
+Palette Details
+
The most important palette is pal332.act, which represents the 3-3-2 bit RGB layout (3 bits red, 3 bits green, 2 bits blue). It is generated by the picovga_pal332 tool and comes with an additional CSV file:
+
+
pal332.csv – Contains detailed information about each color entry:
+
Color index (palette order number).
+
+
RGB value of the color.
+
+
Separate red, green, and blue component values.
+
+
+
+
+
This CSV file can be opened in Excel, LibreOffice, or any text editor. It is especially useful if you want to map a color you’ve selected in Photoshop (by HEX code) to its exact PicoVGA color index. Simply search for the HEX value in pal332.csv and read the index number at the beginning of the corresponding line.
+
⚠️ Tip: Always apply the correct .act palette before saving your BMP images for conversion with picovga_img. This ensures the tool interprets the colors correctly.
Image generation on the Raspberry Pico is a matter of processor utilization limits and other processor activities must be subordinated to it. When using the PicoVGA library, there are several principles to keep in mind:
-
The library always runs on the second core of the processor and the program on the first core. Rendering the image can completely overload the CPU core and is usually unusable for other use. The separation of core functions also has the advantage that the cores do not affect each other and there is no need for mutual locking. The first core simply uses write to the frame buffers and the second core displays the contents of the frame buffers without any communication between them. This makes the overall work easier and faster.
-
If the second core is not very busy (e.g. when displaying 8-bit graphics that are simply transferred using DMA transfer), it can also be used for the main program work. However, some limitations should be taken into account - the program in the second core should not use interrupts (it would interfere with the rendering function), the interpolation unit should be used with caution (the rendering function does not save its state) and it must not disable interrupts.
-
An important rule is that all data to be accessed by the PicoVGA library must be stored in the RAM memory. External flash memory is slow and cannot be used for rendering functions. For example, if a flash image is to be displayed, it must first be copied to a buffer in RAM, and then a pointer to the RAM copy of the image will be passed to the rendering function. If a pointer to the image in flash were passed to it, slow access to flash would cause video dropouts. In addition to images, this also applies to fonts and tile patterns, for example.
-
The limited rendering speed must be taken into account when scheduling screen layout. Some modes render very fast (e.g. 8-bit graphics are just transferred from the frame buffer using DMA) and some modes are very rendering intensive - e.g. rendering sprites in slow mode. When using demanding rendering, some video lines may not render fast enough in the required time and the video image will break (drop out of sync). In such cases, it is necessary to use another mode, or to reduce the rendered area (add other modes, faster ones - e.g. add tile controls on the sides of the screen), reduce the screen resolution or increase the CPU clock speed. Video lines are rendered separately and therefore it is always just content on one video line about, video lines do not affect each other. For example, you can test the speed of sprite rendering by placing all the sprites horizontally next to each other (the most challenging case) and check if the video synchronization fails.
-
Care must also be taken when using DMA transfer. DMA is used to transfer data to the PIO. Although the transfer uses a FIFO cache, using a different DMA channel may cause the render DMA channel to be delayed and thus cause the video to drop out. A DMA overload can occur, for example, when a large block of data in RAM is transferred quickly. However, the biggest load is the DMA transfer of data from flash memory. In this case, the DMA channel waits for data to be read from flash via QSPI and thus blocks the DMA render channel.
-
The CPU clock frequency must also be subordinated to the image generator. Before initializing the video node, the library calculates the required system clock frequency so that the timing matches the requirements and the processor speed is sufficient for the required image resolution. It is a good idea to initially print out the calculated clock frequency for checking on the console. It is possible to prohibit the library from changing the system clock, or to prescribe only a certain range, in which case some modes may be unreachable (or the video image may break up).
-
Image buffers must be aligned to 4 bytes (32-bit CPU word) and image segments must be horizontally aligned to 4 pixels - this refers to the horizontal position of the segment, its width, alignment (wrapx) and offset (offx). Alignment does not apply to the vertical direction. This restriction is necessary because the image information is transferred to the PIO controller using a 32-bit DMA transfer, and this must be aligned to a 32-bit word. One 32-bit word contains 4 pixels (1 pixel has 8 bits), so the horizontal data in the image must also be aligned to 4 pixels. So you cannot do fine horizontal scrolling of the image in 1 pixel increments (the restriction does not apply to vertical scrolling), but only in 4 pixel increments. The exception to this is slow sprites, which are software rendered to the video line and can therefore be scrolled in 1 pixel increments. Similarly, the restriction does not apply to software rendering to framebuffer (e.g. rendering an image to video memory can be done to any coordinate).
-
The display of the image by the PicoVGA library is performed by the PIO controller (PIO0). The other controller, PIO1, is unused and can be used for other purposes.
+
Image generation on the Raspberry Pi Pico with PicoVGA is highly demanding on processor resources. The VGA signal must always be generated on time, which means other processor activities must be carefully designed around it. The following principles are critical for stable and reliable operation of the library:
+
+Core Utilization
+
+
The PicoVGA library always runs on the second core (core 1), while your application code runs on the first core (core 0). This separation ensures that rendering does not interfere with your main program logic.
+
Rendering can fully saturate core 1, making it unsuitable for other tasks in most cases. Your main program should interact with PicoVGA by writing to frame buffers on core 0, while core 1 continuously handles video output without synchronization overhead.
+
In lightweight modes (e.g., 8-bit graphics rendered via DMA transfers), core 1 may have spare capacity. Code dispatched to core 1 through the library should not use interrupts, be careful with the interpolation unit (its state is not preserved by the renderer), and never disable interrupts.
+
+
+Memory Rules
+
+
All data accessed by PicoVGA (images, fonts, tile patterns, etc.) must be stored in RAM, not flash. Flash memory is too slow and will cause video dropouts.
+
If assets are stored in external flash, copy them into a RAM buffer before passing them to the rendering functions.
+
+
+Rendering Performance
+
+
Some modes (e.g., 8-bit DMA transfers) render very quickly, while others (e.g., sprite rendering in slow mode) are CPU-intensive.
+
Rendering is performed per line. If a mode is too demanding, individual scanlines may fail to render on time, breaking video synchronization.
+
If rendering is too slow:
+
Switch to a faster video mode.
+
+
Reduce the resolution or rendered area.
+
+
Mix modes (e.g., add tile borders around the display area).
+
+
Increase the CPU clock speed.
+
+
+
+
+
A good stress test is to render many sprites side by side horizontally, which creates the most demanding case.
+
+DMA Considerations
+
+
PicoVGA uses DMA to stream pixel data into the PIO. Even though the PIO has a TX FIFO, competing DMA traffic can delay the render DMA and cause video dropouts.
+
Conflicts to watch:
+
Large, fast RAM↔RAM transfers on other DMA channels.
+
+
QSPI flash reads (e.g., XIP or DMA from external flash). In these cases, the non-render DMA may stall waiting on flash, effectively blocking the render DMA channel.
+
+
+
Minimize or schedule other DMA operations so they do not overlap with active rendering.
+
+
+CPU Clock Frequency
+
+
Before initializing video output, PicoVGA calculates and sets the required system clock frequency to ensure precise timing.
+
You should print the calculated frequency to the console at startup to verify configuration.
+
You may restrict the library from changing the system clock or limit its range. However, this can make some video modes unavailable or unstable.
+
+
+Memory Alignment
+
+
Image buffers must be aligned to 4 bytes (32-bit words).
+
Image segments must be horizontally aligned to 4 pixels. This applies to the segment’s X position, width, wrapping (wrapx), and horizontal offset (offx). Vertical alignment has no such restriction.
+
Pixel data is transferred to the PIO using 32‑bit DMA words; each word packs 4× 8‑bit pixels, so horizontal data must start on a 4‑pixel boundary.
+
Horizontal scrolling is limited to 4‑pixel steps. Exceptions:
+
Slow sprites – software-rendered per scanline; can scroll at 1‑pixel precision.
+
Framebuffer software rendering – drawing directly into video memory allows any pixel coordinate.
+
+
+
+
+PIO Usage
+
+
PicoVGA exclusively uses PIO0 for video output.
+
The second controller, PIO1, remains free and can be used for other purposes in your program.
+
+
+Summary
+
To use PicoVGA effectively:
+
Treat core 1 as dedicated to rendering.
+
+
Keep all rendering assets in RAM.
+
+
Match your rendering mode to the available performance.
+
+
Avoid DMA conflicts and verify clock settings.
+
+
Respect memory alignment rules (including wrapx and offx) for stable operation.
+
+
+
Following these principles ensures smooth VGA output and stable integration of PicoVGA into your Raspberry Pi Pico projects.
diff --git a/doxygen.cfg b/doxygen.cfg
index 68aacf0..2d03143 100644
--- a/doxygen.cfg
+++ b/doxygen.cfg
@@ -918,7 +918,7 @@ RECURSIVE = YES
# Note that relative paths are relative to the directory from which doxygen is
# run.
-EXCLUDE = .git .svn build Readme.md examples docs
+EXCLUDE = .git .svn build README.md CHANGELOG.md examples docs _deps tools/README.md pico-sdk pioasm pioasm-install
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
# directories that are symbolic links (a Unix file system feature) are excluded
diff --git a/examples/Readme.md b/examples/README.md
similarity index 100%
rename from examples/Readme.md
rename to examples/README.md
diff --git a/pages/GettingStarted.md b/pages/GettingStarted.md
index bb8e974..821ccc5 100644
--- a/pages/GettingStarted.md
+++ b/pages/GettingStarted.md
@@ -83,7 +83,7 @@ Run the command `cmake .` to generate the makefiles for the project and `make` t
The `vga_config.h` contains the PicoVGA library settings, such as the size of the render buffers. You usually do not need to pay attention to this file. You usually only have to modify it in the following cases:
* When you use a display resolution greater than 640x480 pixels. Typically, the configuration file sets the maximum resolution to 640x480. This must be adjusted at higher resolutions to allow the library to reserve larger buffers for rendering functions.
-* If there is not enough RAM. There is still some headroom where you can save some memory. First, you can reduce the MAXX, MAXY, and MAXLINE resolution settings down to a real values. Next, you can reduce the number of LAYERS down to the actual value used (in the range of 1 to 4). Finally, you can reduce the number of segments and stripes to the actual value SEGMAX and STRIPMAX (minimum is 1).
+* If there is not enough RAM. There is still some headroom where you can save some memory. First, you can reduce the `MAXX`, `MAXY`, and `MAXLINE` resolution settings down to a real values. Next, you can reduce the number of LAYERS down to the actual value used (in the range of 1 to 4). Finally, you can reduce the number of segments and stripes to the actual value `SEGMAX` and `STRIPMAX` (minimum is 1).
* The third case is to use of a large number of display stripes and segments. Normally, the values here are set to 8 stripes (=horizontal strips) and 8 segments (=vertical division of each strip).
If you have an older monitor that requires VGA VSync, uncomment the line the `CMakeLists.txt` file that sets the vsync pin:
diff --git a/pages/Tools.md b/pages/Tools.md
index a1204e0..0980415 100644
--- a/pages/Tools.md
+++ b/pages/Tools.md
@@ -6,24 +6,24 @@ The generated arrays provide graphics and audio data in formats tailored for the
All tools are lightweight console applications that should compile for all platforms. Building the library will build these applications into the `tools` folder.
-* [picovga_img](#picovga_img--image-conversion-tool) – Image Conversion Tool
-* [picovga_rle](#picovga_rle--rle-compression-tool) – RLE Compression Tool
-* [picovga_snd](#picovga_snd--sound-import-tool) – Sound Import Tool
-* [picvovga_pal332](#picvovga_pal332--picovga-8-bit-palette-generator) – PicoVGA 8-bit Palette Generator
-* [palettes](#palettes-1) - A collection of `.act` palette files for use in image editors.
+* [picovga_img](#picovga_img) – Image Conversion Tool
+* [picovga_rle](#picovga_rle) – RLE Compression Tool
+* [picovga_snd](#picovga_snd) – Sound Import Tool
+* [picvovga_pal332](#picvovga_pal332) – 8-bit Palette Generator
+* [palettes](#palettes) - A collection of `.act` palette files for use in image editors.
-## picovga_img – Image Conversion Tool
+## Image Conversion Tool {#picovga_img}
-**picovga_img** is a command-line utility that converts Windows BMP images into C array data for use with the PicoVGA library on the Raspberry Pi Pico. It ensures that images are properly formatted and optimized for 8-bit, 4-bit, 2-bit, or 1-bit palette graphics.
+`picovga_img` is a command-line utility that converts Windows BMP images into C array data for use with the PicoVGA library on the Raspberry Pi Pico. It ensures that images are properly formatted and optimized for 8-bit, 4-bit, 2-bit, or 1-bit palette graphics.
### Usage
```bash
picovga_img input.bmp output.cpp arrayname
```
-- **input.bmp** – Source image file (must be a Windows BMP format).
-- **output.cpp** – Destination C++ file containing the image data.
-- **arrayname** – Name of the C++ array that will hold the image data.
+- `input.bmp` – Source image file (must be a Windows BMP format).
+- `output.cpp` – Destination C++ file containing the image data.
+- `arrayname` – Name of the C++ array that will hold the image data.
The tool reads the BMP image, validates its format, and writes the pixel data into a `const u8[]` array that can be directly included in PicoVGA projects.
@@ -67,19 +67,19 @@ const u8 myimage[8192] __attribute__ ((aligned(4))) = {
This array can be included in your PicoVGA project and drawn directly to the screen.
-## picovga_rle – RLE Compression Tool
+## RLE Compression Tool {#picovga_rle}
-**picovga_rle** is a command-line utility that compresses 8-bit PicoVGA images into a run-length encoded (RLE) format suitable for use with the PicoVGA library on the Raspberry Pi Pico. The compression significantly reduces image size while maintaining compatibility with the RLE PIO routines in PicoVGA.
+`picovga_rle` is a command-line utility that compresses 8-bit PicoVGA images into a run-length encoded (RLE) format suitable for use with the PicoVGA library on the Raspberry Pi Pico. The compression significantly reduces image size while maintaining compatibility with the RLE PIO routines in PicoVGA.
### Usage
```bash
picovga_rle input.bmp output.c arrayname transparent_color
```
-- **input.bmp** – Source image file (must be an 8-bit BMP using the PicoVGA palette `pal332.act`).
-- **output.cpp** – Destination C++ file containing the compressed image data.
-- **arrayname** – Name of the generated C array.
-- **transparent_color** – Index of the color to be used as transparency (0–255). Use `-1` for no transparency.
+- `input.bmp` – Source image file (must be an 8-bit BMP using the PicoVGA palette `pal332.act`).
+- `output.cpp` – Destination C++ file containing the compressed image data.
+- `arrayname` – Name of the generated C array.
+- `transparent_color` – Index of the color to be used as transparency (0–255). Use `-1` for no transparency.
The tool reads the BMP image, compresses it using RLE, and outputs a set of C arrays containing both pixel data and row offsets.
@@ -140,18 +140,18 @@ Each scanline is terminated with an `idle` command and aligned to 32-bit boundar
### Compatibility Warning
The compressed output is tightly coupled with the **RLE PIO program** in PicoVGA. Since the instruction format may change between library versions, **always use picovga_rle from the same release as your PicoVGA library** to avoid incompatibility issues.
-## picovga_snd – Sound Import Tool
+## Sound Import Tool {#picovga_snd}
-**picovga_snd** is a command-line utility that converts WAV audio files into C array data for playback with the PicoVGA library on the Raspberry Pi Pico. It ensures that sound effects or music are properly formatted for the Pico’s audio playback routines.
+`picovga_snd` is a command-line utility that converts WAV audio files into C array data for playback with the PicoVGA library on the Raspberry Pi Pico. It ensures that sound effects or music are properly formatted for the Pico’s audio playback routines.
### Usage
```bash
picovga_snd input.wav output.cpp arrayname
```
-- **input.wav** – Source WAV file.
-- **output.cpp** – Destination C++ file containing the audio data array.
-- **arrayname** – Name of the generated C array.
+- `input.wav` – Source WAV file.
+- `output.cpp` – Destination C++ file containing the audio data array.
+- `arrayname` – Name of the generated C array.
The tool validates the WAV file format and writes its sample data into a `const u8[]` array that can be directly included in PicoVGA projects.
@@ -185,9 +185,9 @@ const u8 mysound[1024] __attribute__ ((aligned(4))) = {
This array can be compiled into your PicoVGA program and played back using the sound routines in the library.
-## picvovga_pal332 – PicoVGA 8-bit Palette Generator
+## 8-bit Palette Generator {#picvovga_pal332}
-**picvovga_pal332** is a utility program used to generate the standard 8-bit PicoVGA palette. This palette is the foundation for all 8-bit graphics in PicoVGA and defines a total of 256 colors based on a **3-3-2 bit RGB model**:
+`picvovga_pal332` is a utility program used to generate the standard 8-bit PicoVGA palette. This palette is the foundation for all 8-bit graphics in PicoVGA and defines a total of 256 colors based on a **3-3-2 bit RGB model**:
- **3 bits red (0–7 levels)**
- **3 bits green (0–7 levels)**
- **2 bits blue (0–3 levels)**
@@ -195,10 +195,10 @@ This array can be compiled into your PicoVGA program and played back using the s
This RGB332 format allows compact color representation while providing a broad enough spectrum for retro-style graphics.
### Output Files
-When you run **picvovga_pal332**, it generates two important files:
+When you run `picvovga_pal332`, it generates two important files:
-- **pal332.act** – Adobe Color Table file containing the 256-color PicoVGA palette. This file can be imported into image editors such as Photoshop or GIMP to ensure images are created using PicoVGA’s 8-bit colors.
-- **pal332.csv** – A CSV table with detailed color information. Each row includes:
+- `pal332.act` – Adobe Color Table file containing the 256-color PicoVGA palette. This file can be imported into image editors such as Photoshop or GIMP to ensure images are created using PicoVGA’s 8-bit colors.
+- `pal332.csv` – A CSV table with detailed color information. Each row includes:
- **Palette index (0–255)**
- **RGB hex value**
- **Individual red, green, and blue component values**
@@ -216,22 +216,22 @@ Index, HEX, R, G, B
- In **Photoshop** or **GIMP**, load `pal332.act` as the palette before saving your image as an 8-bit BMP. This ensures the image uses the exact PicoVGA colors.
- If you identify a color in an image by its **HEX code** (e.g., `#8080FF`), you can use `pal332.csv` to look up which PicoVGA color index corresponds to that HEX value.
-This is especially useful when working with transparency or when preparing assets for use with other PicoVGA tools such as [picovga_img](#picovga_img--image-conversion-tool) or [picovga_rle](#picovga_rle--rle-compression-tool).
+This is especially useful when working with transparency or when preparing assets for use with other PicoVGA tools such as `picovga_img` or `picovga_rle`.
-## Palettes
+## Palettes {#palettes}
The PicoVGA project includes a set of predefined palettes located in the `tools\palettes` folder. These palettes (`*.act` files) can be used in Photoshop, GIMP, or other graphics editors to ensure images match PicoVGA’s supported color sets.
### Available Palettes
-- **pal332.act** – The primary 8-bit PicoVGA palette. This file defines the 256 standard colors used by PicoVGA.
-- **pal4_PC.act** – Standard CGA 16-color palette.
-- **pal4_ZX.act** – ZX Spectrum–style 16-color palette.
-- **palcga\*.act** – Variants of CGA palettes for different modes (used for 2-bit conversions).
-- **pal1.act** – Black & white palette for 1-bit images.
+- `pal332.act` – The primary 8-bit PicoVGA palette. This file defines the 256 standard colors used by PicoVGA.
+- `pal4_PC.act` – Standard CGA 16-color palette.
+- `pal4_ZX.act` – ZX Spectrum–style 16-color palette.
+- `palcga*.act` – Variants of CGA palettes for different modes (used for 2-bit conversions).
+- `pal1.act` – Black & white palette for 1-bit images.
### Palette Details
-The most important palette is **pal332.act**, which represents the 3-3-2 bit RGB layout (3 bits red, 3 bits green, 2 bits blue). It is generated by the `pal332.exe` tool and comes with an additional CSV file:
+The most important palette is `pal332.act`, which represents the 3-3-2 bit RGB layout (3 bits red, 3 bits green, 2 bits blue). It is generated by the `picovga_pal332` tool and comes with an additional CSV file:
-- **pal332.csv** – Contains detailed information about each color entry:
+- `pal332.csv` – Contains detailed information about each color entry:
- Color index (palette order number).
- RGB value of the color.
- Separate red, green, and blue component values.
diff --git a/pages/UsageRules.md b/pages/UsageRules.md
index 3e8bcbd..c06847b 100644
--- a/pages/UsageRules.md
+++ b/pages/UsageRules.md
@@ -1,19 +1,58 @@
# Usage Rules {#usagerules}
-Image generation on the Raspberry Pico is a matter of processor utilization limits and other processor activities must be subordinated to it. When using the PicoVGA library, there are several principles to keep in mind:
+Image generation on the Raspberry Pi Pico with PicoVGA is highly demanding on processor resources. The VGA signal must always be generated on time, which means other processor activities must be carefully designed around it. The following principles are critical for stable and reliable operation of the library:
-The library always runs on the second core of the processor and the program on the first core. Rendering the image can completely overload the CPU core and is usually unusable for other use. The separation of core functions also has the advantage that the cores do not affect each other and there is no need for mutual locking. The first core simply uses write to the frame buffers and the second core displays the contents of the frame buffers without any communication between them. This makes the overall work easier and faster.
+## Core Utilization
+- The PicoVGA library always runs on the **second core (core 1)**, while your application code runs on the **first core (core 0)**. This separation ensures that rendering does not interfere with your main program logic.
+- Rendering can fully saturate core 1, making it unsuitable for other tasks in most cases. Your main program should interact with PicoVGA by writing to frame buffers on core 0, while core 1 continuously handles video output without synchronization overhead.
+- In lightweight modes (e.g., 8-bit graphics rendered via DMA transfers), core 1 may have spare capacity. Code dispatched to core 1 through the library should not use interrupts, be careful with the interpolation unit (its state is not preserved by the renderer), and never disable interrupts.
-If the second core is not very busy (e.g. when displaying 8-bit graphics that are simply transferred using DMA transfer), it can also be used for the main program work. However, some limitations should be taken into account - the program in the second core should not use interrupts (it would interfere with the rendering function), the interpolation unit should be used with caution (the rendering function does not save its state) and it must not disable interrupts.
+## Memory Rules
+- All data accessed by PicoVGA (images, fonts, tile patterns, etc.) must be stored in **RAM**, not flash. Flash memory is too slow and will cause video dropouts.
+- If assets are stored in external flash, copy them into a RAM buffer before passing them to the rendering functions.
-An important rule is that all data to be accessed by the PicoVGA library **must be stored in the RAM memory**. External flash memory is slow and cannot be used for rendering functions. For example, if a flash image is to be displayed, it must first be copied to a buffer in RAM, and then a pointer to the RAM copy of the image will be passed to the rendering function. If a pointer to the image in flash were passed to it, slow access to flash would cause video dropouts. In addition to images, this also applies to fonts and tile patterns, for example.
+## Rendering Performance
+- Some modes (e.g., 8-bit DMA transfers) render very quickly, while others (e.g., sprite rendering in slow mode) are CPU-intensive.
+- Rendering is performed per line. If a mode is too demanding, individual scanlines may fail to render on time, breaking video synchronization.
+- **If rendering is too slow:**
+ - Switch to a faster video mode.
+ - Reduce the resolution or rendered area.
+ - Mix modes (e.g., add tile borders around the display area).
+ - Increase the CPU clock speed.
-The limited rendering speed must be taken into account when scheduling screen layout. Some modes render very fast (e.g. 8-bit graphics are just transferred from the frame buffer using DMA) and some modes are very rendering intensive - e.g. rendering sprites in slow mode. When using demanding rendering, some video lines may not render fast enough in the required time and the video image will break (drop out of sync). In such cases, it is necessary to use another mode, or to reduce the rendered area (add other modes, faster ones - e.g. add tile controls on the sides of the screen), reduce the screen resolution or increase the CPU clock speed. Video lines are rendered separately and therefore it is always just content on one video line about, video lines do not affect each other. For example, you can test the speed of sprite rendering by placing all the sprites horizontally next to each other (the most challenging case) and check if the video synchronization fails.
+A good stress test is to render many sprites side by side horizontally, which creates the most demanding case.
-Care must also be taken when using DMA transfer. DMA is used to transfer data to the PIO. Although the transfer uses a FIFO cache, using a different DMA channel may cause the render DMA channel to be delayed and thus cause the video to drop out. A DMA overload can occur, for example, when a large block of data in RAM is transferred quickly. However, the biggest load is the DMA transfer of data from flash memory. In this case, the DMA channel waits for data to be read from flash via QSPI and thus blocks the DMA render channel.
+## DMA Considerations
+- PicoVGA uses DMA to stream pixel data into the PIO. Even though the PIO has a TX **FIFO**, competing DMA traffic can delay the render DMA and cause **video dropouts**.
+- **Conflicts to watch:**
+ - Large, fast **RAM↔RAM** transfers on other DMA channels.
+ - **QSPI flash** reads (e.g., XIP or DMA from external flash). In these cases, the non-render DMA may stall waiting on flash, effectively **blocking** the render DMA channel.
+- Minimize or schedule other DMA operations so they do not overlap with active rendering.
-The CPU clock frequency must also be subordinated to the image generator. Before initializing the video node, the library calculates the required system clock frequency so that the timing matches the requirements and the processor speed is sufficient for the required image resolution. It is a good idea to initially print out the calculated clock frequency for checking on the console. It is possible to prohibit the library from changing the system clock, or to prescribe only a certain range, in which case some modes may be unreachable (or the video image may break up).
+## CPU Clock Frequency
+- Before initializing video output, PicoVGA calculates and sets the required system clock frequency to ensure precise timing.
+- You should print the calculated frequency to the console at startup to verify configuration.
+- You may restrict the library from changing the system clock or limit its range. However, this can make some video modes unavailable or unstable.
-Image buffers must be aligned to 4 bytes (32-bit CPU word) and image segments must be horizontally aligned to 4 pixels - this refers to the horizontal position of the segment, its width, alignment (wrapx) and offset (offx). Alignment does not apply to the vertical direction. This restriction is necessary because the image information is transferred to the PIO controller using a 32-bit DMA transfer, and this must be aligned to a 32-bit word. One 32-bit word contains 4 pixels (1 pixel has 8 bits), so the horizontal data in the image must also be aligned to 4 pixels. So you cannot do fine horizontal scrolling of the image in 1 pixel increments (the restriction does not apply to vertical scrolling), but only in 4 pixel increments. The exception to this is slow sprites, which are software rendered to the video line and can therefore be scrolled in 1 pixel increments. Similarly, the restriction does not apply to software rendering to framebuffer (e.g. rendering an image to video memory can be done to any coordinate).
+## Memory Alignment
+- Image buffers must be aligned to **4 bytes** (32-bit words).
+- Image **segments must be horizontally aligned to 4 pixels**. This applies to the segment’s **X position**, **width**, **wrapping** (**wrapx**), and **horizontal offset** (**offx**). Vertical alignment has no such restriction.
+- Pixel data is transferred to the PIO using 32‑bit DMA words; each word packs **4× 8‑bit pixels**, so horizontal data must start on a 4‑pixel boundary.
+- Horizontal scrolling is limited to **4‑pixel steps**. Exceptions:
+ - **Slow sprites** – software-rendered per scanline; can scroll at **1‑pixel** precision.
+ - **Framebuffer software rendering** – drawing directly into video memory allows **any pixel coordinate**.
+
+## PIO Usage
+- PicoVGA exclusively uses **PIO0** for video output.
+- The second controller, **PIO1**, remains free and can be used for other purposes in your program.
+
+## Summary
+To use PicoVGA effectively:
+1. Treat core 1 as dedicated to rendering.
+2. Keep all rendering assets in RAM.
+3. Match your rendering mode to the available performance.
+4. Avoid DMA conflicts and verify clock settings.
+5. Respect memory alignment rules (including **wrapx** and **offx**) for stable operation.
+
+Following these principles ensures smooth VGA output and stable integration of PicoVGA into your Raspberry Pi Pico projects.
-The display of the image by the PicoVGA library is performed by the PIO controller (PIO0). The other controller, PIO1, is unused and can be used for other purposes.
diff --git a/tools/README.md b/tools/README.md
index f0bf01f..9264247 100644
--- a/tools/README.md
+++ b/tools/README.md
@@ -7,24 +7,24 @@ The generated arrays provide graphics and audio data in formats tailored for the
All tools are lightweight console applications that should compile for all platforms. Building the library will build these applications into the `tools` folder.
-* [picovga_img](#picovga_img--image-conversion-tool) – Image Conversion Tool
-* [picovga_rle](#picovga_rle--rle-compression-tool) – RLE Compression Tool
-* [picovga_snd](#picovga_snd--sound-import-tool) – Sound Import Tool
-* [picvovga_pal332](#picvovga_pal332--picovga-8-bit-palette-generator) – PicoVGA 8-bit Palette Generator
+* [picovga_img](#image-conversion-tool---picovga_img) – Image Conversion Tool
+* [picovga_rle](#rle-compression-tool---picovga_rle) – RLE Compression Tool
+* [picovga_snd](#sound-import-tool---picovga_snd) – Sound Import Tool
+* [picvovga_pal332](#8-bit-palette-generator---picvovga_pal332) – 8-bit Palette Generator
* [palettes](#palettes-1) - A collection of `.act` palette files for use in image editors.
-## picovga_img – Image Conversion Tool
+## Image Conversion Tool - `picovga_img`
-**picovga_img** is a command-line utility that converts Windows BMP images into C array data for use with the PicoVGA library on the Raspberry Pi Pico. It ensures that images are properly formatted and optimized for 8-bit, 4-bit, 2-bit, or 1-bit palette graphics.
+`picovga_img` is a command-line utility that converts Windows BMP images into C array data for use with the PicoVGA library on the Raspberry Pi Pico. It ensures that images are properly formatted and optimized for 8-bit, 4-bit, 2-bit, or 1-bit palette graphics.
### Usage
```bash
picovga_img input.bmp output.cpp arrayname
```
-- **input.bmp** – Source image file (must be a Windows BMP format).
-- **output.cpp** – Destination C++ file containing the image data.
-- **arrayname** – Name of the C++ array that will hold the image data.
+- `input.bmp` – Source image file (must be a Windows BMP format).
+- `output.cpp` – Destination C++ file containing the image data.
+- `arrayname` – Name of the C++ array that will hold the image data.
The tool reads the BMP image, validates its format, and writes the pixel data into a `const u8[]` array that can be directly included in PicoVGA projects.
@@ -68,19 +68,19 @@ const u8 myimage[8192] __attribute__ ((aligned(4))) = {
This array can be included in your PicoVGA project and drawn directly to the screen.
-## picovga_rle – RLE Compression Tool
+## RLE Compression Tool - `picovga_rle`
-**picovga_rle** is a command-line utility that compresses 8-bit PicoVGA images into a run-length encoded (RLE) format suitable for use with the PicoVGA library on the Raspberry Pi Pico. The compression significantly reduces image size while maintaining compatibility with the RLE PIO routines in PicoVGA.
+`picovga_rle` is a command-line utility that compresses 8-bit PicoVGA images into a run-length encoded (RLE) format suitable for use with the PicoVGA library on the Raspberry Pi Pico. The compression significantly reduces image size while maintaining compatibility with the RLE PIO routines in PicoVGA.
### Usage
```bash
picovga_rle input.bmp output.c arrayname transparent_color
```
-- **input.bmp** – Source image file (must be an 8-bit BMP using the PicoVGA palette `pal332.act`).
-- **output.cpp** – Destination C++ file containing the compressed image data.
-- **arrayname** – Name of the generated C array.
-- **transparent_color** – Index of the color to be used as transparency (0–255). Use `-1` for no transparency.
+- `input.bmp` – Source image file (must be an 8-bit BMP using the PicoVGA palette `pal332.act`).
+- `output.cpp` – Destination C++ file containing the compressed image data.
+- `arrayname` – Name of the generated C array.
+- `transparent_color` – Index of the color to be used as transparency (0–255). Use `-1` for no transparency.
The tool reads the BMP image, compresses it using RLE, and outputs a set of C arrays containing both pixel data and row offsets.
@@ -141,18 +141,18 @@ Each scanline is terminated with an `idle` command and aligned to 32-bit boundar
### Compatibility Warning
The compressed output is tightly coupled with the **RLE PIO program** in PicoVGA. Since the instruction format may change between library versions, **always use picovga_rle from the same release as your PicoVGA library** to avoid incompatibility issues.
-## picovga_snd – Sound Import Tool
+## Sound Import Tool - `picovga_snd`
-**picovga_snd** is a command-line utility that converts WAV audio files into C array data for playback with the PicoVGA library on the Raspberry Pi Pico. It ensures that sound effects or music are properly formatted for the Pico’s audio playback routines.
+`picovga_snd` is a command-line utility that converts WAV audio files into C array data for playback with the PicoVGA library on the Raspberry Pi Pico. It ensures that sound effects or music are properly formatted for the Pico’s audio playback routines.
### Usage
```bash
picovga_snd input.wav output.cpp arrayname
```
-- **input.wav** – Source WAV file.
-- **output.cpp** – Destination C++ file containing the audio data array.
-- **arrayname** – Name of the generated C array.
+- `input.wav` – Source WAV file.
+- `output.cpp` – Destination C++ file containing the audio data array.
+- `arrayname` – Name of the generated C array.
The tool validates the WAV file format and writes its sample data into a `const u8[]` array that can be directly included in PicoVGA projects.
@@ -186,9 +186,9 @@ const u8 mysound[1024] __attribute__ ((aligned(4))) = {
This array can be compiled into your PicoVGA program and played back using the sound routines in the library.
-## picvovga_pal332 – PicoVGA 8-bit Palette Generator
+## 8-bit Palette Generator - `picvovga_pal332`
-**picvovga_pal332** is a utility program used to generate the standard 8-bit PicoVGA palette. This palette is the foundation for all 8-bit graphics in PicoVGA and defines a total of 256 colors based on a **3-3-2 bit RGB model**:
+`picvovga_pal332` is a utility program used to generate the standard 8-bit PicoVGA palette. This palette is the foundation for all 8-bit graphics in PicoVGA and defines a total of 256 colors based on a **3-3-2 bit RGB model**:
- **3 bits red (0–7 levels)**
- **3 bits green (0–7 levels)**
- **2 bits blue (0–3 levels)**
@@ -196,10 +196,10 @@ This array can be compiled into your PicoVGA program and played back using the s
This RGB332 format allows compact color representation while providing a broad enough spectrum for retro-style graphics.
### Output Files
-When you run **picvovga_pal332**, it generates two important files:
+When you run `picvovga_pal332`, it generates two important files:
-- **pal332.act** – Adobe Color Table file containing the 256-color PicoVGA palette. This file can be imported into image editors such as Photoshop or GIMP to ensure images are created using PicoVGA’s 8-bit colors.
-- **pal332.csv** – A CSV table with detailed color information. Each row includes:
+- `pal332.act` – Adobe Color Table file containing the 256-color PicoVGA palette. This file can be imported into image editors such as Photoshop or GIMP to ensure images are created using PicoVGA’s 8-bit colors.
+- `pal332.csv` – A CSV table with detailed color information. Each row includes:
- **Palette index (0–255)**
- **RGB hex value**
- **Individual red, green, and blue component values**
@@ -217,22 +217,22 @@ Index, HEX, R, G, B
- In **Photoshop** or **GIMP**, load `pal332.act` as the palette before saving your image as an 8-bit BMP. This ensures the image uses the exact PicoVGA colors.
- If you identify a color in an image by its **HEX code** (e.g., `#8080FF`), you can use `pal332.csv` to look up which PicoVGA color index corresponds to that HEX value.
-This is especially useful when working with transparency or when preparing assets for use with other PicoVGA tools such as [picovga_img](#picovga_img--image-conversion-tool) or [picovga_rle](#picovga_rle--rle-compression-tool).
+This is especially useful when working with transparency or when preparing assets for use with other PicoVGA tools such as `picovga_img` or `picovga_rle`.
## Palettes
The PicoVGA project includes a set of predefined palettes located in the `tools\palettes` folder. These palettes (`*.act` files) can be used in Photoshop, GIMP, or other graphics editors to ensure images match PicoVGA’s supported color sets.
### Available Palettes
-- **pal332.act** – The primary 8-bit PicoVGA palette. This file defines the 256 standard colors used by PicoVGA.
-- **pal4_PC.act** – Standard CGA 16-color palette.
-- **pal4_ZX.act** – ZX Spectrum–style 16-color palette.
-- **palcga\*.act** – Variants of CGA palettes for different modes (used for 2-bit conversions).
-- **pal1.act** – Black & white palette for 1-bit images.
+- `pal332.act` – The primary 8-bit PicoVGA palette. This file defines the 256 standard colors used by PicoVGA.
+- `pal4_PC.act` – Standard CGA 16-color palette.
+- `pal4_ZX.act` – ZX Spectrum–style 16-color palette.
+- `palcga*.act` – Variants of CGA palettes for different modes (used for 2-bit conversions).
+- `pal1.act` – Black & white palette for 1-bit images.
### Palette Details
-The most important palette is **pal332.act**, which represents the 3-3-2 bit RGB layout (3 bits red, 3 bits green, 2 bits blue). It is generated by the `pal332.exe` tool and comes with an additional CSV file:
+The most important palette is `pal332.act`, which represents the 3-3-2 bit RGB layout (3 bits red, 3 bits green, 2 bits blue). It is generated by the `picovga_pal332` tool and comes with an additional CSV file:
-- **pal332.csv** – Contains detailed information about each color entry:
+- `pal332.csv` – Contains detailed information about each color entry:
- Color index (palette order number).
- RGB value of the color.
- Separate red, green, and blue component values.