<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.c256foenix.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Grenouye</id>
	<title>C256 Foenix Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.c256foenix.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Grenouye"/>
	<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=Special:Contributions/Grenouye"/>
	<updated>2026-05-17T17:27:09Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.32.0</generator>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=Main_Page&amp;diff=815</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=Main_Page&amp;diff=815"/>
		<updated>2022-10-19T18:53:40Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: Update Junior's User Manual link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= THE FOENIX WIKI = &lt;br /&gt;
&lt;br /&gt;
Welcome to the Foenix Project! Here you will find a series of brand new computers lovingly made by Stefany Allaire in the style of the early 8, 16 and 32 bit machines of lore!  This is your chance to be a participant in the development of a new platform -- to start with a brand new machine akin to a high-end Atari or Amiga, write its very first programs, see what it can do, push its limits, and experience something new!  Models are available with a 65C02 CPU, 65816 CPU, a 680x0 series CPU, or both, with more CPU options planned for the future.&lt;br /&gt;
&lt;br /&gt;
Order your computer at https://c256foenix.com&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
| || '''[[F256JR]]''' || '''[[C256-FMX]]''' || '''[[C256U]]'''  || '''[[A2560U]]''' || '''[[A2560K]]''' || '''[[Gen-X]]'''&lt;br /&gt;
|-&lt;br /&gt;
| || F256 Jr. || C256 Foenix FMX (legacy) || C256 Foenix U/U+ || A2560 Foenix U/U+ || A2560K || GEN X&lt;br /&gt;
|-&lt;br /&gt;
| || [[File:Final_F256Jr.jpg|200px]] || [[File:C256FoenixFMX_RevC4B.2.25.jpg|200px]] || [[File:C256FoenixUBare.jpg|200px]] || [[File:A2560U Board.jpg|200px]]&lt;br /&gt;
 || [[File:A2560K.png|200px]] || [[File:Gen X Cube - 50%.png|200px]] &lt;br /&gt;
|-&lt;br /&gt;
| Released Year: || 2022/2023 || 2019 || 2021 || 2021/2022 || 2021 || 2022 &lt;br /&gt;
|-&lt;br /&gt;
| Active: || Yes || &amp;lt;span style=&amp;quot;color:#C00000&amp;quot;&amp;gt; '''Discontinued''' || &amp;lt;span style=&amp;quot;color:#C0C000&amp;quot;&amp;gt;On Hold* || &amp;lt;span style=&amp;quot;color:#C0C000&amp;quot;&amp;gt;On Hold* || Yes || Yes&lt;br /&gt;
|-&lt;br /&gt;
| CPU: || W65C02 @ 6Mhz || W65C816 @ 14Mhz || W65C816 @ 14Mhz || MC68SEC000 @ 20Mhz || MC68040V @ 25Mhz || W65C816 @ 14Mhz + 32bits CPU**&lt;br /&gt;
|-&lt;br /&gt;
| System Memory: || 256K SRAM || 4M SRAM || 2/4M SRAM || 4M SRAM || 4M SRAM/64M SDRAM || 4M SRAM/64M SDRAM&lt;br /&gt;
|-&lt;br /&gt;
| Video Memory: || Shared || 4M SRAM || 2M SRAM || 2M SRAM || 8M SRAM || 8M SRAM&lt;br /&gt;
|-&lt;br /&gt;
| Graphic Chipset:  || TinyVICKY - [[CFP9599]] || VICKY II + GABE || FATVICKY - [[CFP95168B]] || FATVICKY - [[CFP95171-68k]] || VICKY III - [[CFP95179K]] || VICKY III - [[CFP95179X]]&lt;br /&gt;
|-&lt;br /&gt;
| Internal Audio: || 2x PSG (Sn76489) || TBD || 1x Gideon SID || 1x Gideon SID || 2x GideonSID / 1x OPM / 1x OPN2 / 2x PSG || 1x OPM / 1x OPN2 / 2x PSG&lt;br /&gt;
|-&lt;br /&gt;
| External Audio: || 2x SID^^ || 1x OPL3/1x OPM /1x OPN2/ 1x OPL3 || 1x OPL3 || 1x OPL3 || 2x SID^^/1x OPM /1x OPN2/1x PSG/1x OPL3 || 2x SID^^/1x OPM/1x OPN2/1x PSG/1x OPL3&lt;br /&gt;
|-&lt;br /&gt;
| CODEC : || TBD || 1x 48KHz ||  1x 48KHz || 1x 48KHz || 1x 48KHz/1x 44.1KHz ||  1x 48KHz/1x 44.1KHz&lt;br /&gt;
|-&lt;br /&gt;
| Audio I/O: || HP Jack/Line-Out || HP Jack/Line-In/Out || HP Jack/Line-Out || HP Jack/Line-Out || HP Jack/Line-In/Out || HP Jack/Line-In/Out&lt;br /&gt;
|- &lt;br /&gt;
| Media IO: || IEC/SDCARD || SDCARD/IDE/FLOPPY || SDCARD/IDE || SDCARD/IDE || SDCARD/IDE/FLOPPY || SDCARD/IDE/FLOPPY&lt;br /&gt;
|-&lt;br /&gt;
| COM IO: || Simple Serial/WIFI*** || 2x Serial/ 1x Parallel || 1x Simple Serial || 1x Simple Serial || 2x Serial/1x Parallel/Eth || 2x Serial/1x Parallel/Eth&lt;br /&gt;
|-&lt;br /&gt;
| Joystick Posts: || 2x ATARI + NES/SNES Port****^ || 4x ATARI / 2x NES/SNES^ || 2x ATARI And/Or NES/SNES^ || 2x ATARI And/Or NES/SNES^ || 2x ATARI And/Or NES/SNES^ || 4x ATARI &amp;amp; 4x NES &amp;amp; 4x SNES&lt;br /&gt;
|-&lt;br /&gt;
| PCB Form Factor: || 6.7&amp;quot; x 6.7&amp;quot; Mini-ITX || 10&amp;quot; x 6.2&amp;quot; || 7.13&amp;quot; x 4.4&amp;quot; || 7.13&amp;quot; x 4.4&amp;quot; || 12&amp;quot; x 5.5&amp;quot; || 9&amp;quot; x 9&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Power Supply: || ATX PS Plug || +12V 2.5mm Barrel || +12V 2.5mm Barrel || +12V 2.5mm Barrel || 4pins +5V/+12V || ATX PS Plug &lt;br /&gt;
|-&lt;br /&gt;
| Tech Manual: || [https://256-foenix.us-east-1.linodeobjects.com/C256_Foenix_JR_UM_Rev002.pdf JR TM] Preliminary ||  NONE || TBP Later || [https://256-foenix.us-east-1.linodeobjects.com/A2560U_UM_Rev0.0.2.pdf A2560U UM] Preliminary || [https://256-foenix.us-east-1.linodeobjects.com/A2560K_UM_Rev0.0.2.pdf A2560K UM] Preliminary || Coming Soon &lt;br /&gt;
|-&lt;br /&gt;
| User Manual: || [https://github.com/pweingar/C256jrManual/blob/main/tex/c256jr_um.pdf F256 JR UM] (WIP) || NONE ||   ||   ||  || &lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
(*): Due to FPGA's availability and abusive cost, those models are presently on hold.&lt;br /&gt;
&lt;br /&gt;
(**): The concept behind the GenX is its ability to support different processors through a modular system.&lt;br /&gt;
&lt;br /&gt;
(***): The WIFI communication is achieved through a ESP32/WIFI (Feather) Type board and it is optional.&lt;br /&gt;
&lt;br /&gt;
(****): The RevA of the board doesn't have an extra 9Pins connector to interface with NES/SNES Adapter.&lt;br /&gt;
&lt;br /&gt;
(^): An external NES/SNES interface box is needed, so this is extra.&lt;br /&gt;
&lt;br /&gt;
(^^): The External SIDs are Sockets only, they must be populated by the owner.&lt;br /&gt;
&lt;br /&gt;
OPM = YM2151, OPN2 = YM2612, PSG = SN76489&lt;br /&gt;
&lt;br /&gt;
= Emulators / Toolchain =&lt;br /&gt;
&lt;br /&gt;
''' EMULATORS '''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| CPU:&lt;br /&gt;
|- &lt;br /&gt;
| W65C02 (F256 Jr) || [https://github.com/paulscottrobson/junior-emulator.git] Paul's F256JR Emulator || [https://github.com/scttgs0/C256Jr.git] Scott's F256JR (WIP) Emulator&lt;br /&gt;
|-&lt;br /&gt;
| W65C816 (C256U/FMX/GEN X) || [https://github.com/Trinity-11/FoenixIDE.git] Daniel's Foenix IDE || [https://github.com/aniou/morfe] Aniou's Morfe for 816&lt;br /&gt;
|-&lt;br /&gt;
| M680xx (A2560U/A2560K/GEN X) || [https://github.com/paulscottrobson/f68-emulator.git] Paul's F68 Emulator || [https://github.com/aniou/morfe] Aniou's Morfe for 68K || [https://github.com/scttgs0/FoenixToolkitm68k.git] Scott's FnxToolKitm68&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' TOOL CHAINS '''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| CPU:&lt;br /&gt;
|- &lt;br /&gt;
| W65C02 (F256 Jr) || [https://www.calypsi.cc/] Calypsi for the 65C02 CPU || [https://sourceforge.net/projects/tass64/] 64TASS || [https://www.cc65.org/] CC65&lt;br /&gt;
|-&lt;br /&gt;
| W65C816 (C256U/FMX/GEN X) || [https://www.calypsi.cc/] Calypsi for the 65C816 CPU || [https://sourceforge.net/projects/tass64/] 64TASS || Merlin&lt;br /&gt;
|-&lt;br /&gt;
| M680xx (A2560U/A2560K/GEN X) || [https://www.calypsi.cc/] Calypsi for the 68K CPU || [http://sun.hasenbraten.de/vbcc/] VBCC || VBCC Foenix Target [https://github.com/daschewie/Foenix_vbcc_target]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Get Started =&lt;br /&gt;
Software Market Place [http://apps.emwhite.org/foenixmarketplace/] &lt;br /&gt;
Newsletters Repository [http://apps.emwhite.org/foenixmarketplace/]&lt;br /&gt;
&lt;br /&gt;
Compare the different [[models]]: [[F256JR]], [[C256-FMX]], [[C256U]], [[A2560U]], [[A2560K]], [[Gen-X]]&lt;br /&gt;
&lt;br /&gt;
Explore the [[documentation]]: [[C256]], [[A2560]], [[ICs]]&lt;br /&gt;
&lt;br /&gt;
Join the [https://discord.gg/WqtwuEtN3a Discord],&lt;br /&gt;
&lt;br /&gt;
Order your computer at https://c256foenix.com, and&lt;br /&gt;
&lt;br /&gt;
Join in the fun!&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
&lt;br /&gt;
Is this another FPGA Retro like the MiSTer?&lt;br /&gt;
&lt;br /&gt;
* No! These machines are the real thing. You'll be running on a real 65816, 68000, 68040, i486dx2, etc. :).&lt;br /&gt;
&lt;br /&gt;
Are these machines compatible with the C64? C128? Amiga? Atari-ST? IBM-PC?&lt;br /&gt;
&lt;br /&gt;
* No! This is not a MEGA65, a Vampire, or an Ultimate64.  We already have those platforms.  This is something new and different!&lt;br /&gt;
&lt;br /&gt;
Is there an emulator?&lt;br /&gt;
&lt;br /&gt;
* Yes!  See the [[Emulators]] page!&lt;br /&gt;
&lt;br /&gt;
Is the hardware &amp;quot;Open Source&amp;quot;?&lt;br /&gt;
&lt;br /&gt;
* The schematics are available for download from the Discord.  The FPGA code is presently closed-source to keep the platform from becoming fragmented.&lt;br /&gt;
&lt;br /&gt;
Are there any programming tutorials for the Foenix?&lt;br /&gt;
&lt;br /&gt;
* Stefany Allaire's videos: https://www.youtube.com/channel/UCNX2L8_enbRUAb8zKaR2KzQ&lt;br /&gt;
* Tail Recursive's videos: https://www.youtube.com/channel/UCMNLxfepc0xAZodcvOlVenQ&lt;br /&gt;
* You can also follow along with the development of the Gen-X on Stefany's [https://www.patreon.com/c256foenix?utm_medium=social&amp;amp;utm_source=twitter&amp;amp;utm_campaign=creatorshare Patreon] page.&lt;br /&gt;
&lt;br /&gt;
Happy hacking!&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=Main_Page&amp;diff=814</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=Main_Page&amp;diff=814"/>
		<updated>2022-10-19T18:52:36Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= THE FOENIX WIKI = &lt;br /&gt;
&lt;br /&gt;
Welcome to the Foenix Project! Here you will find a series of brand new computers lovingly made by Stefany Allaire in the style of the early 8, 16 and 32 bit machines of lore!  This is your chance to be a participant in the development of a new platform -- to start with a brand new machine akin to a high-end Atari or Amiga, write its very first programs, see what it can do, push its limits, and experience something new!  Models are available with a 65C02 CPU, 65816 CPU, a 680x0 series CPU, or both, with more CPU options planned for the future.&lt;br /&gt;
&lt;br /&gt;
Order your computer at https://c256foenix.com&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot; &lt;br /&gt;
| || '''[[F256JR]]''' || '''[[C256-FMX]]''' || '''[[C256U]]'''  || '''[[A2560U]]''' || '''[[A2560K]]''' || '''[[Gen-X]]'''&lt;br /&gt;
|-&lt;br /&gt;
| || F256 Jr. || C256 Foenix FMX (legacy) || C256 Foenix U/U+ || A2560 Foenix U/U+ || A2560K || GEN X&lt;br /&gt;
|-&lt;br /&gt;
| || [[File:Final_F256Jr.jpg|200px]] || [[File:C256FoenixFMX_RevC4B.2.25.jpg|200px]] || [[File:C256FoenixUBare.jpg|200px]] || [[File:A2560U Board.jpg|200px]]&lt;br /&gt;
 || [[File:A2560K.png|200px]] || [[File:Gen X Cube - 50%.png|200px]] &lt;br /&gt;
|-&lt;br /&gt;
| Released Year: || 2022/2023 || 2019 || 2021 || 2021/2022 || 2021 || 2022 &lt;br /&gt;
|-&lt;br /&gt;
| Active: || Yes || &amp;lt;span style=&amp;quot;color:#C00000&amp;quot;&amp;gt; '''Discontinued''' || &amp;lt;span style=&amp;quot;color:#C0C000&amp;quot;&amp;gt;On Hold* || &amp;lt;span style=&amp;quot;color:#C0C000&amp;quot;&amp;gt;On Hold* || Yes || Yes&lt;br /&gt;
|-&lt;br /&gt;
| CPU: || W65C02 @ 6Mhz || W65C816 @ 14Mhz || W65C816 @ 14Mhz || MC68SEC000 @ 20Mhz || MC68040V @ 25Mhz || W65C816 @ 14Mhz + 32bits CPU**&lt;br /&gt;
|-&lt;br /&gt;
| System Memory: || 256K SRAM || 4M SRAM || 2/4M SRAM || 4M SRAM || 4M SRAM/64M SDRAM || 4M SRAM/64M SDRAM&lt;br /&gt;
|-&lt;br /&gt;
| Video Memory: || Shared || 4M SRAM || 2M SRAM || 2M SRAM || 8M SRAM || 8M SRAM&lt;br /&gt;
|-&lt;br /&gt;
| Graphic Chipset:  || TinyVICKY - [[CFP9599]] || VICKY II + GABE || FATVICKY - [[CFP95168B]] || FATVICKY - [[CFP95171-68k]] || VICKY III - [[CFP95179K]] || VICKY III - [[CFP95179X]]&lt;br /&gt;
|-&lt;br /&gt;
| Internal Audio: || 2x PSG (Sn76489) || TBD || 1x Gideon SID || 1x Gideon SID || 2x GideonSID / 1x OPM / 1x OPN2 / 2x PSG || 1x OPM / 1x OPN2 / 2x PSG&lt;br /&gt;
|-&lt;br /&gt;
| External Audio: || 2x SID^^ || 1x OPL3/1x OPM /1x OPN2/ 1x OPL3 || 1x OPL3 || 1x OPL3 || 2x SID^^/1x OPM /1x OPN2/1x PSG/1x OPL3 || 2x SID^^/1x OPM/1x OPN2/1x PSG/1x OPL3&lt;br /&gt;
|-&lt;br /&gt;
| CODEC : || TBD || 1x 48KHz ||  1x 48KHz || 1x 48KHz || 1x 48KHz/1x 44.1KHz ||  1x 48KHz/1x 44.1KHz&lt;br /&gt;
|-&lt;br /&gt;
| Audio I/O: || HP Jack/Line-Out || HP Jack/Line-In/Out || HP Jack/Line-Out || HP Jack/Line-Out || HP Jack/Line-In/Out || HP Jack/Line-In/Out&lt;br /&gt;
|- &lt;br /&gt;
| Media IO: || IEC/SDCARD || SDCARD/IDE/FLOPPY || SDCARD/IDE || SDCARD/IDE || SDCARD/IDE/FLOPPY || SDCARD/IDE/FLOPPY&lt;br /&gt;
|-&lt;br /&gt;
| COM IO: || Simple Serial/WIFI*** || 2x Serial/ 1x Parallel || 1x Simple Serial || 1x Simple Serial || 2x Serial/1x Parallel/Eth || 2x Serial/1x Parallel/Eth&lt;br /&gt;
|-&lt;br /&gt;
| Joystick Posts: || 2x ATARI + NES/SNES Port****^ || 4x ATARI / 2x NES/SNES^ || 2x ATARI And/Or NES/SNES^ || 2x ATARI And/Or NES/SNES^ || 2x ATARI And/Or NES/SNES^ || 4x ATARI &amp;amp; 4x NES &amp;amp; 4x SNES&lt;br /&gt;
|-&lt;br /&gt;
| PCB Form Factor: || 6.7&amp;quot; x 6.7&amp;quot; Mini-ITX || 10&amp;quot; x 6.2&amp;quot; || 7.13&amp;quot; x 4.4&amp;quot; || 7.13&amp;quot; x 4.4&amp;quot; || 12&amp;quot; x 5.5&amp;quot; || 9&amp;quot; x 9&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Power Supply: || ATX PS Plug || +12V 2.5mm Barrel || +12V 2.5mm Barrel || +12V 2.5mm Barrel || 4pins +5V/+12V || ATX PS Plug &lt;br /&gt;
|-&lt;br /&gt;
| Tech Manual: || [https://256-foenix.us-east-1.linodeobjects.com/C256_Foenix_JR_UM_Rev002.pdf JR TM] Preliminary ||  NONE || TBP Later || [https://256-foenix.us-east-1.linodeobjects.com/A2560U_UM_Rev0.0.2.pdf A2560U UM] Preliminary || [https://256-foenix.us-east-1.linodeobjects.com/A2560K_UM_Rev0.0.2.pdf A2560K UM] Preliminary || Coming Soon &lt;br /&gt;
|-&lt;br /&gt;
| User Manual: || https://github.com/pweingar/C256jrManual/blob/main/tex/c256jr_um.pdf F256 JR UM] (WIP) || NONE ||   ||   ||  || &lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
(*): Due to FPGA's availability and abusive cost, those models are presently on hold.&lt;br /&gt;
&lt;br /&gt;
(**): The concept behind the GenX is its ability to support different processors through a modular system.&lt;br /&gt;
&lt;br /&gt;
(***): The WIFI communication is achieved through a ESP32/WIFI (Feather) Type board and it is optional.&lt;br /&gt;
&lt;br /&gt;
(****): The RevA of the board doesn't have an extra 9Pins connector to interface with NES/SNES Adapter.&lt;br /&gt;
&lt;br /&gt;
(^): An external NES/SNES interface box is needed, so this is extra.&lt;br /&gt;
&lt;br /&gt;
(^^): The External SIDs are Sockets only, they must be populated by the owner.&lt;br /&gt;
&lt;br /&gt;
OPM = YM2151, OPN2 = YM2612, PSG = SN76489&lt;br /&gt;
&lt;br /&gt;
= Emulators / Toolchain =&lt;br /&gt;
&lt;br /&gt;
''' EMULATORS '''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| CPU:&lt;br /&gt;
|- &lt;br /&gt;
| W65C02 (F256 Jr) || [https://github.com/paulscottrobson/junior-emulator.git] Paul's F256JR Emulator || [https://github.com/scttgs0/C256Jr.git] Scott's F256JR (WIP) Emulator&lt;br /&gt;
|-&lt;br /&gt;
| W65C816 (C256U/FMX/GEN X) || [https://github.com/Trinity-11/FoenixIDE.git] Daniel's Foenix IDE || [https://github.com/aniou/morfe] Aniou's Morfe for 816&lt;br /&gt;
|-&lt;br /&gt;
| M680xx (A2560U/A2560K/GEN X) || [https://github.com/paulscottrobson/f68-emulator.git] Paul's F68 Emulator || [https://github.com/aniou/morfe] Aniou's Morfe for 68K || [https://github.com/scttgs0/FoenixToolkitm68k.git] Scott's FnxToolKitm68&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' TOOL CHAINS '''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| CPU:&lt;br /&gt;
|- &lt;br /&gt;
| W65C02 (F256 Jr) || [https://www.calypsi.cc/] Calypsi for the 65C02 CPU || [https://sourceforge.net/projects/tass64/] 64TASS || [https://www.cc65.org/] CC65&lt;br /&gt;
|-&lt;br /&gt;
| W65C816 (C256U/FMX/GEN X) || [https://www.calypsi.cc/] Calypsi for the 65C816 CPU || [https://sourceforge.net/projects/tass64/] 64TASS || Merlin&lt;br /&gt;
|-&lt;br /&gt;
| M680xx (A2560U/A2560K/GEN X) || [https://www.calypsi.cc/] Calypsi for the 68K CPU || [http://sun.hasenbraten.de/vbcc/] VBCC || VBCC Foenix Target [https://github.com/daschewie/Foenix_vbcc_target]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Get Started =&lt;br /&gt;
Software Market Place [http://apps.emwhite.org/foenixmarketplace/] &lt;br /&gt;
Newsletters Repository [http://apps.emwhite.org/foenixmarketplace/]&lt;br /&gt;
&lt;br /&gt;
Compare the different [[models]]: [[F256JR]], [[C256-FMX]], [[C256U]], [[A2560U]], [[A2560K]], [[Gen-X]]&lt;br /&gt;
&lt;br /&gt;
Explore the [[documentation]]: [[C256]], [[A2560]], [[ICs]]&lt;br /&gt;
&lt;br /&gt;
Join the [https://discord.gg/WqtwuEtN3a Discord],&lt;br /&gt;
&lt;br /&gt;
Order your computer at https://c256foenix.com, and&lt;br /&gt;
&lt;br /&gt;
Join in the fun!&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
&lt;br /&gt;
Is this another FPGA Retro like the MiSTer?&lt;br /&gt;
&lt;br /&gt;
* No! These machines are the real thing. You'll be running on a real 65816, 68000, 68040, i486dx2, etc. :).&lt;br /&gt;
&lt;br /&gt;
Are these machines compatible with the C64? C128? Amiga? Atari-ST? IBM-PC?&lt;br /&gt;
&lt;br /&gt;
* No! This is not a MEGA65, a Vampire, or an Ultimate64.  We already have those platforms.  This is something new and different!&lt;br /&gt;
&lt;br /&gt;
Is there an emulator?&lt;br /&gt;
&lt;br /&gt;
* Yes!  See the [[Emulators]] page!&lt;br /&gt;
&lt;br /&gt;
Is the hardware &amp;quot;Open Source&amp;quot;?&lt;br /&gt;
&lt;br /&gt;
* The schematics are available for download from the Discord.  The FPGA code is presently closed-source to keep the platform from becoming fragmented.&lt;br /&gt;
&lt;br /&gt;
Are there any programming tutorials for the Foenix?&lt;br /&gt;
&lt;br /&gt;
* Stefany Allaire's videos: https://www.youtube.com/channel/UCNX2L8_enbRUAb8zKaR2KzQ&lt;br /&gt;
* Tail Recursive's videos: https://www.youtube.com/channel/UCMNLxfepc0xAZodcvOlVenQ&lt;br /&gt;
* You can also follow along with the development of the Gen-X on Stefany's [https://www.patreon.com/c256foenix?utm_medium=social&amp;amp;utm_source=twitter&amp;amp;utm_campaign=creatorshare Patreon] page.&lt;br /&gt;
&lt;br /&gt;
Happy hacking!&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=Executable_binary_file&amp;diff=683</id>
		<title>Executable binary file</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=Executable_binary_file&amp;diff=683"/>
		<updated>2021-08-18T02:06:50Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: /* PGZ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''F_RUN''' and '''F_LOAD''' kernel calls supports multiple binary formats. If you try to load a file in one of these formats without specifying a starting address, it will be loaded into the locations specified in the file. If you try to run a file in one of these formats, the file will be loaded into memory and executed.&lt;br /&gt;
&lt;br /&gt;
== PGX ==&lt;br /&gt;
&lt;br /&gt;
PGX is a simple, single segment format akin to Commodore's PRG format. The file starts with an eight byte header, followed by the contents to be loaded into memory. The header consists of three parts:&lt;br /&gt;
&lt;br /&gt;
* The first three bytes are the ASCII codes for &amp;quot;PGX&amp;quot;, serving as a file type signature.&lt;br /&gt;
* The fourth byte is the CPU code, indicating the target CPU. Currently, only the value $01 is supported and designates that the 65816 is the target CPU.&lt;br /&gt;
* The final four bytes of the header are the starting destination address in little-endian format. This address will be the location to store the first byte of the data (which is the ninth byte of the file).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Count !! Example !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 3 || &amp;quot;PGX&amp;quot; || Signature&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || $01 || CPU&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 4 || $010000 || Destination Address&lt;br /&gt;
|-&lt;br /&gt;
| 8 || - || $00 $01 $02 ... || The data to load&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PGZ ==&lt;br /&gt;
&lt;br /&gt;
PGZ is a multi-segment file format that can load data into multiple areas in memory. The format is derived from binary format used by Western Design Center's C compiler.&lt;br /&gt;
&lt;br /&gt;
* The first byte of the PGZ format is the ASCII code for &amp;quot;Z&amp;quot;. This serves as the file type signature.&lt;br /&gt;
* Next comes any number of segments, each following right after the previous segment with no separator. Each segment has the following format:&lt;br /&gt;
** Three bytes of address, in little endian format. This is the starting address for writing the data of the segment.&lt;br /&gt;
** Three bytes indicating the size of the segment, in little endian format.&lt;br /&gt;
** The bytes of data in the segment (same number of bytes as specified in the size).&lt;br /&gt;
* If final segment has a size of $000000 and no data bytes, then address specifies the starting address of the executable.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Segment !! Offset !! Count !! Example !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| N/A || 0 || 1 || &amp;quot;Z&amp;quot; || Signature&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot;| 1 || 1 || 3 || $010000 || Address of segment #1&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 3 || $000009 || Size of segment #1&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ... || ... || Data of Segment #1&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot;| 2 || 16 || 3 || $020000 || Address of segment #2&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 3 || $000008 || Size of segment #2&lt;br /&gt;
|-&lt;br /&gt;
| 22 || ... || ... || Data of Segment #2&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;| 3 || 30 || 3 || $010000 || Starting address&lt;br /&gt;
|-&lt;br /&gt;
| 33 || 3 || $000000 || 0 to indicate start address&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=Executable_binary_file&amp;diff=682</id>
		<title>Executable binary file</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=Executable_binary_file&amp;diff=682"/>
		<updated>2021-08-18T02:06:33Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: /* PGX */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''F_RUN''' and '''F_LOAD''' kernel calls supports multiple binary formats. If you try to load a file in one of these formats without specifying a starting address, it will be loaded into the locations specified in the file. If you try to run a file in one of these formats, the file will be loaded into memory and executed.&lt;br /&gt;
&lt;br /&gt;
== PGX ==&lt;br /&gt;
&lt;br /&gt;
PGX is a simple, single segment format akin to Commodore's PRG format. The file starts with an eight byte header, followed by the contents to be loaded into memory. The header consists of three parts:&lt;br /&gt;
&lt;br /&gt;
* The first three bytes are the ASCII codes for &amp;quot;PGX&amp;quot;, serving as a file type signature.&lt;br /&gt;
* The fourth byte is the CPU code, indicating the target CPU. Currently, only the value $01 is supported and designates that the 65816 is the target CPU.&lt;br /&gt;
* The final four bytes of the header are the starting destination address in little-endian format. This address will be the location to store the first byte of the data (which is the ninth byte of the file).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Count !! Example !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 3 || &amp;quot;PGX&amp;quot; || Signature&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || $01 || CPU&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 4 || $010000 || Destination Address&lt;br /&gt;
|-&lt;br /&gt;
| 8 || - || $00 $01 $02 ... || The data to load&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PGZ ==&lt;br /&gt;
&lt;br /&gt;
PGZ is a multi-segment file format that can load data into multiple areas in memory. The format is derived from binary format used by Western Design Center's C compiler.&lt;br /&gt;
&lt;br /&gt;
* The first byte of the PGZ format is the ASCII code for &amp;quot;Z&amp;quot;. This serves as the file type signature.&lt;br /&gt;
* Next comes any number of segments, each following right after the previous segment with no separator. Each segment has the following format:&lt;br /&gt;
** Three bytes of address, in little endian format. This is the starting address for writing the data of the segment.&lt;br /&gt;
** Three bytes indicating the size of the segment, in little endian format.&lt;br /&gt;
** The bytes of data in the segment (same number of bytes as specified in the size).&lt;br /&gt;
* If final segment has a size of $000000 and no data bytes, then address specifies the starting address of the executable.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Segment !! Offset !! Count !! Example !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| N/A || 0 || 1 || &amp;quot;Z&amp;quot; || Signature&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot;| 1 || 1 || 3 || $010000 || Address of segment #1&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 3 || $000009 || Size of segment #1&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ... || ... || Data of Segment #1&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot;| 2 || 16 || 3 || $020000 || Address of segment #2&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 3 || $000008 || Size of segment #2&lt;br /&gt;
|-&lt;br /&gt;
| 22 || ... || ... || Data of Segment #2&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;| START || 30 || 3 || $010000 || Starting address&lt;br /&gt;
|-&lt;br /&gt;
| 33 || 3 || $000000 || 0 to indicate start address&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=Talk:Executable_binary_file&amp;diff=681</id>
		<title>Talk:Executable binary file</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=Talk:Executable_binary_file&amp;diff=681"/>
		<updated>2021-08-18T01:57:54Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: Created page with &amp;quot;The PGX file header starts with &amp;quot;PGX&amp;quot;, not PGZ.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The PGX file header starts with &amp;quot;PGX&amp;quot;, not PGZ.&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=Tiles&amp;diff=637</id>
		<title>Tiles</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=Tiles&amp;diff=637"/>
		<updated>2021-06-28T03:53:02Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: /* Tilemap Registers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vicky II support 8 tilesets and 4 tilemaps.&lt;br /&gt;
&lt;br /&gt;
=== Tiles ===&lt;br /&gt;
Tiles are tiny reusable bitmaps that are 16 pixels wide by 16 pixels high.&lt;br /&gt;
&lt;br /&gt;
=== Tilesets ===&lt;br /&gt;
Tiles are combined in tilesets.  Tilesets usually contain only unique tiles to save memory.  Tilesets can contain a maximum of 256 tiles.  Each tile has a unique number in the tileset.&lt;br /&gt;
Tilesets must be stored in video RAM for Vicky II to be able to render them.&lt;br /&gt;
&lt;br /&gt;
=== Tilemaps ===&lt;br /&gt;
Tilemaps combine tiles from the tilesets to create a world map.  Tilemaps can be up to 1024 tiles wide by 1024 tiles high.&lt;br /&gt;
Tilemaps must be stored in video RAM in order for Vicky II to render them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tilemap Registers ==&lt;br /&gt;
&lt;br /&gt;
Each Tilemap has registers composed of a total of 12 bytes for manipulation, starting at $AF:0200 and spanning through to $AF:022F. &lt;br /&gt;
&lt;br /&gt;
The first set of Tilemap manipulation registers are shown below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribute&lt;br /&gt;
!Address&lt;br /&gt;
|-&lt;br /&gt;
|TL0_CONTROL_REG|| $AF:0200&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_L|| $AF:0201&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_M|| $AF:0202&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_H|| $AF:0203&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_X_SIZE_L|| $AF:0204&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_X_SIZE_H|| $AF:0205&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_Y_SIZE_L|| $AF:0206&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_Y_SIZE_H|| $AF:0207&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_X_POS_L|| $AF:0208&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_X_POS_H|| $AF:0209&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_Y_POS_L|| $AF:020A&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_Y_POS_H|| $AF:020B&lt;br /&gt;
|-&lt;br /&gt;
|TL1_CONTROL_REG || $AF:020C&lt;br /&gt;
|-&lt;br /&gt;
|TL2_CONTROL_REG || $AF:0218&lt;br /&gt;
|-&lt;br /&gt;
|TL3_CONTROL_REG || $AF:0224&lt;br /&gt;
|}&lt;br /&gt;
For each successive tilemap, add +12 to the address registers.&lt;br /&gt;
&lt;br /&gt;
The tilemap control register (TLx_CONTROL_REG) is always the first byte of the 12 byte block.  The register is configured as follows:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|TILE_Enable||= $01&lt;br /&gt;
|-&lt;br /&gt;
|TILE_Collision_On||= $40&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Tilemap Total Size X and Y must be less than 1024.&lt;br /&gt;
&lt;br /&gt;
The Tilemap Window Position X and Y are defined as follows:&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|Direction|| Bit 14 ($4000)&lt;br /&gt;
|-&lt;br /&gt;
|Scroll|| Bits 10-13 ($4xx to $3Cxx)&lt;br /&gt;
|-&lt;br /&gt;
|Position||= 0 to $3FF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''NOTE: each tile referenced by the tilemap uses 2 bytes (16 bits).'''  The first byte is the tile number.  The second byte is configured as follows:&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|Tileset|| Bit 0-2 (8 possible tileset)&lt;br /&gt;
|-&lt;br /&gt;
|LUT|| Bits 3-5 (8 possible LUTs)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tileset Registers ==&lt;br /&gt;
Each Tileset has registers composed of a total of 4 bytes for manipulation, starting at $AF:0280 and spanning through to $AF:029F. &lt;br /&gt;
&lt;br /&gt;
The first set of Tileset manipulation registers are shown below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribute&lt;br /&gt;
!Address&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_L||= $AF:0280&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_M||= $AF:0281&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_H||= $AF:0282&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_CFG||= $AF:0283&lt;br /&gt;
|-&lt;br /&gt;
|TILESET1_ADDY_L || = $AF0284&lt;br /&gt;
|-&lt;br /&gt;
|TILESET2_ADDY_L || = $AF0288&lt;br /&gt;
|-&lt;br /&gt;
|TILESET3_ADDY_L || = $AF028C&lt;br /&gt;
|-&lt;br /&gt;
|TILESET4_ADDY_L || = $AF0290&lt;br /&gt;
|-&lt;br /&gt;
|TILESET5_ADDY_L || = $AF0294&lt;br /&gt;
|-&lt;br /&gt;
|TILESET6_ADDY_L || = $AF0298&lt;br /&gt;
|-&lt;br /&gt;
|TILESET7_ADDY_L || = $AF029C &lt;br /&gt;
|}&lt;br /&gt;
For each successive tileset, add +4 to the address registers.&lt;br /&gt;
&lt;br /&gt;
The Addresses are specified with the Video RAM offset of $B0:0000 (i.e. substract $B0:0000 from the address when writing the address).&lt;br /&gt;
&lt;br /&gt;
The Tileset Configuration Register is shown below:&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|TileStride 256|| Bit 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Setting the TileStride allows designer to provide tiles as a bitmap sheet 256 pixel wide.&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=Tiles&amp;diff=636</id>
		<title>Tiles</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=Tiles&amp;diff=636"/>
		<updated>2021-06-28T03:52:20Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: /* Tileset Registers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vicky II support 8 tilesets and 4 tilemaps.&lt;br /&gt;
&lt;br /&gt;
=== Tiles ===&lt;br /&gt;
Tiles are tiny reusable bitmaps that are 16 pixels wide by 16 pixels high.&lt;br /&gt;
&lt;br /&gt;
=== Tilesets ===&lt;br /&gt;
Tiles are combined in tilesets.  Tilesets usually contain only unique tiles to save memory.  Tilesets can contain a maximum of 256 tiles.  Each tile has a unique number in the tileset.&lt;br /&gt;
Tilesets must be stored in video RAM for Vicky II to be able to render them.&lt;br /&gt;
&lt;br /&gt;
=== Tilemaps ===&lt;br /&gt;
Tilemaps combine tiles from the tilesets to create a world map.  Tilemaps can be up to 1024 tiles wide by 1024 tiles high.&lt;br /&gt;
Tilemaps must be stored in video RAM in order for Vicky II to render them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tilemap Registers ==&lt;br /&gt;
&lt;br /&gt;
Each Tilemap has registers composed of a total of 12 bytes for manipulation, starting at $AF:0200 and spanning through to $AF:022F. &lt;br /&gt;
&lt;br /&gt;
The first set of Tilemap manipulation registers are shown below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribute&lt;br /&gt;
!Address&lt;br /&gt;
|-&lt;br /&gt;
|TL0_CONTROL_REG||= $AF:0200&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_L||= $AF:0201&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_M||= $AF:0202&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_H||= $AF:0203&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_X_SIZE_L||= $AF:0204&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_X_SIZE_H||= $AF:0205&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_Y_SIZE_L||= $AF:0206&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_Y_SIZE_H||= $AF:0207&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_X_POS_L||= $AF:0208&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_X_POS_H||= $AF:0209&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_Y_POS_L||= $AF:020A&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_Y_POS_H||= $AF:020B&lt;br /&gt;
|-&lt;br /&gt;
|TL1_CONTROL_REG || $AF:020C&lt;br /&gt;
|-&lt;br /&gt;
|TL2_CONTROL_REG || $AF:0218&lt;br /&gt;
|-&lt;br /&gt;
|TL3_CONTROL_REG || $AF:0224&lt;br /&gt;
|}&lt;br /&gt;
For each successive tilemap, add +12 to the address registers.&lt;br /&gt;
&lt;br /&gt;
The tilemap control register (TLx_CONTROL_REG) is always the first byte of the 12 byte block.  The register is configured as follows:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|TILE_Enable||= $01&lt;br /&gt;
|-&lt;br /&gt;
|TILE_Collision_On||= $40&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Tilemap Total Size X and Y must be less than 1024.&lt;br /&gt;
&lt;br /&gt;
The Tilemap Window Position X and Y are defined as follows:&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|Direction|| Bit 14 ($4000)&lt;br /&gt;
|-&lt;br /&gt;
|Scroll|| Bits 10-13 ($4xx to $3Cxx)&lt;br /&gt;
|-&lt;br /&gt;
|Position||= 0 to $3FF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''NOTE: each tile referenced by the tilemap uses 2 bytes (16 bits).'''  The first byte is the tile number.  The second byte is configured as follows:&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|Tileset|| Bit 0-2 (8 possible tileset)&lt;br /&gt;
|-&lt;br /&gt;
|LUT|| Bits 3-5 (8 possible LUTs)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tileset Registers ==&lt;br /&gt;
Each Tileset has registers composed of a total of 4 bytes for manipulation, starting at $AF:0280 and spanning through to $AF:029F. &lt;br /&gt;
&lt;br /&gt;
The first set of Tileset manipulation registers are shown below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribute&lt;br /&gt;
!Address&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_L||= $AF:0280&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_M||= $AF:0281&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_H||= $AF:0282&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_CFG||= $AF:0283&lt;br /&gt;
|-&lt;br /&gt;
|TILESET1_ADDY_L || = $AF0284&lt;br /&gt;
|-&lt;br /&gt;
|TILESET2_ADDY_L || = $AF0288&lt;br /&gt;
|-&lt;br /&gt;
|TILESET3_ADDY_L || = $AF028C&lt;br /&gt;
|-&lt;br /&gt;
|TILESET4_ADDY_L || = $AF0290&lt;br /&gt;
|-&lt;br /&gt;
|TILESET5_ADDY_L || = $AF0294&lt;br /&gt;
|-&lt;br /&gt;
|TILESET6_ADDY_L || = $AF0298&lt;br /&gt;
|-&lt;br /&gt;
|TILESET7_ADDY_L || = $AF029C &lt;br /&gt;
|}&lt;br /&gt;
For each successive tileset, add +4 to the address registers.&lt;br /&gt;
&lt;br /&gt;
The Addresses are specified with the Video RAM offset of $B0:0000 (i.e. substract $B0:0000 from the address when writing the address).&lt;br /&gt;
&lt;br /&gt;
The Tileset Configuration Register is shown below:&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|TileStride 256|| Bit 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Setting the TileStride allows designer to provide tiles as a bitmap sheet 256 pixel wide.&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=Tiles&amp;diff=635</id>
		<title>Tiles</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=Tiles&amp;diff=635"/>
		<updated>2021-06-28T03:52:08Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: /* Tilemap Registers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vicky II support 8 tilesets and 4 tilemaps.&lt;br /&gt;
&lt;br /&gt;
=== Tiles ===&lt;br /&gt;
Tiles are tiny reusable bitmaps that are 16 pixels wide by 16 pixels high.&lt;br /&gt;
&lt;br /&gt;
=== Tilesets ===&lt;br /&gt;
Tiles are combined in tilesets.  Tilesets usually contain only unique tiles to save memory.  Tilesets can contain a maximum of 256 tiles.  Each tile has a unique number in the tileset.&lt;br /&gt;
Tilesets must be stored in video RAM for Vicky II to be able to render them.&lt;br /&gt;
&lt;br /&gt;
=== Tilemaps ===&lt;br /&gt;
Tilemaps combine tiles from the tilesets to create a world map.  Tilemaps can be up to 1024 tiles wide by 1024 tiles high.&lt;br /&gt;
Tilemaps must be stored in video RAM in order for Vicky II to render them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tilemap Registers ==&lt;br /&gt;
&lt;br /&gt;
Each Tilemap has registers composed of a total of 12 bytes for manipulation, starting at $AF:0200 and spanning through to $AF:022F. &lt;br /&gt;
&lt;br /&gt;
The first set of Tilemap manipulation registers are shown below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribute&lt;br /&gt;
!Address&lt;br /&gt;
|-&lt;br /&gt;
|TL0_CONTROL_REG||= $AF:0200&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_L||= $AF:0201&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_M||= $AF:0202&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_H||= $AF:0203&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_X_SIZE_L||= $AF:0204&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_X_SIZE_H||= $AF:0205&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_Y_SIZE_L||= $AF:0206&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_Y_SIZE_H||= $AF:0207&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_X_POS_L||= $AF:0208&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_X_POS_H||= $AF:0209&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_Y_POS_L||= $AF:020A&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_Y_POS_H||= $AF:020B&lt;br /&gt;
|-&lt;br /&gt;
|TL1_CONTROL_REG || $AF:020C&lt;br /&gt;
|-&lt;br /&gt;
|TL2_CONTROL_REG || $AF:0218&lt;br /&gt;
|-&lt;br /&gt;
|TL3_CONTROL_REG || $AF:0224&lt;br /&gt;
|}&lt;br /&gt;
For each successive tilemap, add +12 to the address registers.&lt;br /&gt;
&lt;br /&gt;
The tilemap control register (TLx_CONTROL_REG) is always the first byte of the 12 byte block.  The register is configured as follows:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|TILE_Enable||= $01&lt;br /&gt;
|-&lt;br /&gt;
|TILE_Collision_On||= $40&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Tilemap Total Size X and Y must be less than 1024.&lt;br /&gt;
&lt;br /&gt;
The Tilemap Window Position X and Y are defined as follows:&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|Direction|| Bit 14 ($4000)&lt;br /&gt;
|-&lt;br /&gt;
|Scroll|| Bits 10-13 ($4xx to $3Cxx)&lt;br /&gt;
|-&lt;br /&gt;
|Position||= 0 to $3FF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''NOTE: each tile referenced by the tilemap uses 2 bytes (16 bits).'''  The first byte is the tile number.  The second byte is configured as follows:&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|Tileset|| Bit 0-2 (8 possible tileset)&lt;br /&gt;
|-&lt;br /&gt;
|LUT|| Bits 3-5 (8 possible LUTs)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tileset Registers ==&lt;br /&gt;
Each Tileset has registers composed of a total of 4 bytes for manipulation, starting at $AF:0280 and spanning through to $AF:029F. &lt;br /&gt;
&lt;br /&gt;
The first set of Tileset manipulation registers are shown below:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Address&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_L||= $AF:0280&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_M||= $AF:0281&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_H||= $AF:0282&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_CFG||= $AF:0283&lt;br /&gt;
|-&lt;br /&gt;
|TILESET1_ADDY_L || = $AF0284&lt;br /&gt;
|-&lt;br /&gt;
|TILESET2_ADDY_L || = $AF0288&lt;br /&gt;
|-&lt;br /&gt;
|TILESET3_ADDY_L || = $AF028C&lt;br /&gt;
|-&lt;br /&gt;
|TILESET4_ADDY_L || = $AF0290&lt;br /&gt;
|-&lt;br /&gt;
|TILESET5_ADDY_L || = $AF0294&lt;br /&gt;
|-&lt;br /&gt;
|TILESET6_ADDY_L || = $AF0298&lt;br /&gt;
|-&lt;br /&gt;
|TILESET7_ADDY_L || = $AF029C &lt;br /&gt;
|}&lt;br /&gt;
For each successive tileset, add +4 to the address registers.&lt;br /&gt;
&lt;br /&gt;
The Addresses are specified with the Video RAM offset of $B0:0000 (i.e. substract $B0:0000 from the address when writing the address).&lt;br /&gt;
&lt;br /&gt;
The Tileset Configuration Register is shown below:&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|TileStride 256|| Bit 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Setting the TileStride allows designer to provide tiles as a bitmap sheet 256 pixel wide.&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=Tiles&amp;diff=634</id>
		<title>Tiles</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=Tiles&amp;diff=634"/>
		<updated>2021-06-28T03:51:28Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vicky II support 8 tilesets and 4 tilemaps.&lt;br /&gt;
&lt;br /&gt;
=== Tiles ===&lt;br /&gt;
Tiles are tiny reusable bitmaps that are 16 pixels wide by 16 pixels high.&lt;br /&gt;
&lt;br /&gt;
=== Tilesets ===&lt;br /&gt;
Tiles are combined in tilesets.  Tilesets usually contain only unique tiles to save memory.  Tilesets can contain a maximum of 256 tiles.  Each tile has a unique number in the tileset.&lt;br /&gt;
Tilesets must be stored in video RAM for Vicky II to be able to render them.&lt;br /&gt;
&lt;br /&gt;
=== Tilemaps ===&lt;br /&gt;
Tilemaps combine tiles from the tilesets to create a world map.  Tilemaps can be up to 1024 tiles wide by 1024 tiles high.&lt;br /&gt;
Tilemaps must be stored in video RAM in order for Vicky II to render them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tilemap Registers ==&lt;br /&gt;
&lt;br /&gt;
Each Tilemap has registers composed of a total of 12 bytes for manipulation, starting at $AF:0200 and spanning through to $AF:022F. &lt;br /&gt;
&lt;br /&gt;
The first set of Tilemap manipulation registers are shown below:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Address&lt;br /&gt;
|-&lt;br /&gt;
|TL0_CONTROL_REG||= $AF:0200&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_L||= $AF:0201&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_M||= $AF:0202&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_H||= $AF:0203&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_X_SIZE_L||= $AF:0204&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_X_SIZE_H||= $AF:0205&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_Y_SIZE_L||= $AF:0206&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_Y_SIZE_H||= $AF:0207&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_X_POS_L||= $AF:0208&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_X_POS_H||= $AF:0209&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_Y_POS_L||= $AF:020A&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_Y_POS_H||= $AF:020B&lt;br /&gt;
|-&lt;br /&gt;
|TL1_CONTROL_REG || $AF:020C&lt;br /&gt;
|-&lt;br /&gt;
|TL2_CONTROL_REG || $AF:0218&lt;br /&gt;
|-&lt;br /&gt;
|TL3_CONTROL_REG || $AF:0224&lt;br /&gt;
|}&lt;br /&gt;
For each successive tilemap, add +12 to the address registers.&lt;br /&gt;
&lt;br /&gt;
The tilemap control register (TLx_CONTROL_REG) is always the first byte of the 12 byte block.  The register is configured as follows:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|TILE_Enable||= $01&lt;br /&gt;
|-&lt;br /&gt;
|TILE_Collision_On||= $40&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Tilemap Total Size X and Y must be less than 1024.&lt;br /&gt;
&lt;br /&gt;
The Tilemap Window Position X and Y are defined as follows:&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|Direction|| Bit 14 ($4000)&lt;br /&gt;
|-&lt;br /&gt;
|Scroll|| Bits 10-13 ($4xx to $3Cxx)&lt;br /&gt;
|-&lt;br /&gt;
|Position||= 0 to $3FF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''NOTE: each tile referenced by the tilemap uses 2 bytes (16 bits).'''  The first byte is the tile number.  The second byte is configured as follows:&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|Tileset|| Bit 0-2 (8 possible tileset)&lt;br /&gt;
|-&lt;br /&gt;
|LUT|| Bits 3-5 (8 possible LUTs)&lt;br /&gt;
|}&lt;br /&gt;
== Tileset Registers ==&lt;br /&gt;
Each Tileset has registers composed of a total of 4 bytes for manipulation, starting at $AF:0280 and spanning through to $AF:029F. &lt;br /&gt;
&lt;br /&gt;
The first set of Tileset manipulation registers are shown below:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Address&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_L||= $AF:0280&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_M||= $AF:0281&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_H||= $AF:0282&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_CFG||= $AF:0283&lt;br /&gt;
|-&lt;br /&gt;
|TILESET1_ADDY_L || = $AF0284&lt;br /&gt;
|-&lt;br /&gt;
|TILESET2_ADDY_L || = $AF0288&lt;br /&gt;
|-&lt;br /&gt;
|TILESET3_ADDY_L || = $AF028C&lt;br /&gt;
|-&lt;br /&gt;
|TILESET4_ADDY_L || = $AF0290&lt;br /&gt;
|-&lt;br /&gt;
|TILESET5_ADDY_L || = $AF0294&lt;br /&gt;
|-&lt;br /&gt;
|TILESET6_ADDY_L || = $AF0298&lt;br /&gt;
|-&lt;br /&gt;
|TILESET7_ADDY_L || = $AF029C &lt;br /&gt;
|}&lt;br /&gt;
For each successive tileset, add +4 to the address registers.&lt;br /&gt;
&lt;br /&gt;
The Addresses are specified with the Video RAM offset of $B0:0000 (i.e. substract $B0:0000 from the address when writing the address).&lt;br /&gt;
&lt;br /&gt;
The Tileset Configuration Register is shown below:&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|TileStride 256|| Bit 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Setting the TileStride allows designer to provide tiles as a bitmap sheet 256 pixel wide.&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=Tiles&amp;diff=633</id>
		<title>Tiles</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=Tiles&amp;diff=633"/>
		<updated>2021-06-28T03:51:07Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tiles = &lt;br /&gt;
Vicky II support 8 tilesets and 4 tilemaps.&lt;br /&gt;
&lt;br /&gt;
=== Tiles ===&lt;br /&gt;
Tiles are tiny reusable bitmaps that are 16 pixels wide by 16 pixels high.&lt;br /&gt;
&lt;br /&gt;
=== Tilesets ===&lt;br /&gt;
Tiles are combined in tilesets.  Tilesets usually contain only unique tiles to save memory.  Tilesets can contain a maximum of 256 tiles.  Each tile has a unique number in the tileset.&lt;br /&gt;
Tilesets must be stored in video RAM for Vicky II to be able to render them.&lt;br /&gt;
&lt;br /&gt;
=== Tilemaps ===&lt;br /&gt;
Tilemaps combine tiles from the tilesets to create a world map.  Tilemaps can be up to 1024 tiles wide by 1024 tiles high.&lt;br /&gt;
Tilemaps must be stored in video RAM in order for Vicky II to render them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tilemap Registers ==&lt;br /&gt;
&lt;br /&gt;
Each Tilemap has registers composed of a total of 12 bytes for manipulation, starting at $AF:0200 and spanning through to $AF:022F. &lt;br /&gt;
&lt;br /&gt;
The first set of Tilemap manipulation registers are shown below:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Address&lt;br /&gt;
|-&lt;br /&gt;
|TL0_CONTROL_REG||= $AF:0200&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_L||= $AF:0201&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_M||= $AF:0202&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_H||= $AF:0203&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_X_SIZE_L||= $AF:0204&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_X_SIZE_H||= $AF:0205&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_Y_SIZE_L||= $AF:0206&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_Y_SIZE_H||= $AF:0207&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_X_POS_L||= $AF:0208&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_X_POS_H||= $AF:0209&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_Y_POS_L||= $AF:020A&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_Y_POS_H||= $AF:020B&lt;br /&gt;
|-&lt;br /&gt;
|TL1_CONTROL_REG || $AF:020C&lt;br /&gt;
|-&lt;br /&gt;
|TL2_CONTROL_REG || $AF:0218&lt;br /&gt;
|-&lt;br /&gt;
|TL3_CONTROL_REG || $AF:0224&lt;br /&gt;
|}&lt;br /&gt;
For each successive tilemap, add +12 to the address registers.&lt;br /&gt;
&lt;br /&gt;
The tilemap control register (TLx_CONTROL_REG) is always the first byte of the 12 byte block.  The register is configured as follows:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|TILE_Enable||= $01&lt;br /&gt;
|-&lt;br /&gt;
|TILE_Collision_On||= $40&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Tilemap Total Size X and Y must be less than 1024.&lt;br /&gt;
&lt;br /&gt;
The Tilemap Window Position X and Y are defined as follows:&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|Direction|| Bit 14 ($4000)&lt;br /&gt;
|-&lt;br /&gt;
|Scroll|| Bits 10-13 ($4xx to $3Cxx)&lt;br /&gt;
|-&lt;br /&gt;
|Position||= 0 to $3FF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''NOTE: each tile referenced by the tilemap uses 2 bytes (16 bits).'''  The first byte is the tile number.  The second byte is configured as follows:&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|Tileset|| Bit 0-2 (8 possible tileset)&lt;br /&gt;
|-&lt;br /&gt;
|LUT|| Bits 3-5 (8 possible LUTs)&lt;br /&gt;
|}&lt;br /&gt;
== Tileset Registers ==&lt;br /&gt;
Each Tileset has registers composed of a total of 4 bytes for manipulation, starting at $AF:0280 and spanning through to $AF:029F. &lt;br /&gt;
&lt;br /&gt;
The first set of Tileset manipulation registers are shown below:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Address&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_L||= $AF:0280&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_M||= $AF:0281&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_H||= $AF:0282&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_CFG||= $AF:0283&lt;br /&gt;
|-&lt;br /&gt;
|TILESET1_ADDY_L || = $AF0284&lt;br /&gt;
|-&lt;br /&gt;
|TILESET2_ADDY_L || = $AF0288&lt;br /&gt;
|-&lt;br /&gt;
|TILESET3_ADDY_L || = $AF028C&lt;br /&gt;
|-&lt;br /&gt;
|TILESET4_ADDY_L || = $AF0290&lt;br /&gt;
|-&lt;br /&gt;
|TILESET5_ADDY_L || = $AF0294&lt;br /&gt;
|-&lt;br /&gt;
|TILESET6_ADDY_L || = $AF0298&lt;br /&gt;
|-&lt;br /&gt;
|TILESET7_ADDY_L || = $AF029C &lt;br /&gt;
|}&lt;br /&gt;
For each successive tileset, add +4 to the address registers.&lt;br /&gt;
&lt;br /&gt;
The Addresses are specified with the Video RAM offset of $B0:0000 (i.e. substract $B0:0000 from the address when writing the address).&lt;br /&gt;
&lt;br /&gt;
The Tileset Configuration Register is shown below:&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|TileStride 256|| Bit 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Setting the TileStride allows designer to provide tiles as a bitmap sheet 256 pixel wide.&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=VICKY_II&amp;diff=632</id>
		<title>VICKY II</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=VICKY_II&amp;diff=632"/>
		<updated>2021-06-28T03:50:22Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= VICKY II - the graphics engine =&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Vicky&amp;quot; is the name of the graphics engine of the C256 Foenix. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Vicky II&amp;quot; is the upgraded version of the graphic engines that resides in the FMX Version.&lt;br /&gt;
&lt;br /&gt;
The major difference in between VICKY and VICKY II is the external bus @ 32Bits wide. (VICKY is only 16Bits)&lt;br /&gt;
The access time has been doubled which allow the chipset to have better access time and overall better performance. It also gave enough room to implement larger resolutions with faster GUI block move. &lt;br /&gt;
&lt;br /&gt;
Part Number: CFP9551&lt;br /&gt;
&lt;br /&gt;
It supports:&lt;br /&gt;
&lt;br /&gt;
* 320x240@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 400x300@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 640x480@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 800x600@60FPS Max Resolution @ 256 Colors (1 Byte per pixel) (GUI mode)&lt;br /&gt;
&lt;br /&gt;
* 64 [[Sprites]] with a resolution of 32x32 pixels&lt;br /&gt;
* 4 layers of [[Tiles]] with a resolution of 16x16 pixels for each tile&lt;br /&gt;
* Text Mode&lt;br /&gt;
&lt;br /&gt;
During the video layer composition, Vicky has to read 1 line of bitmap (640 pixels), 1 line of tiles for each layer (4x 640 pixels) and all the lines that are part of the 64 Sprites (worst case scenario 32 lines of 32 pixels), that are displayed on that line. Then a composition and priority encoding are done. In order to establish a priority, in other words, to know which pixel will be in front, Vicky needs to store 10 lines of 640 pixels then scan the lot and determine which one will be displayed.&lt;br /&gt;
&lt;br /&gt;
640 + 640 + 640 + 640 + 640 + (32 * 32) = 4224 Pixels are to be read during a single line interval. The pixel rate is 200Mbytes/sec, 5ns, so the overall operation takes 21.12us, without calculating the overhead in the FPGA to go from one process to the other.&lt;br /&gt;
&lt;br /&gt;
The pixel index value $00 is always transparent, regardless if it's bitmap, tile or sprite. The respective values of the first 4 bytes represented in the LUT are thus always ignored. &lt;br /&gt;
&lt;br /&gt;
Despite the fact that there is an ALPHA value in the LUT, it is not supported/used at all.&lt;br /&gt;
&lt;br /&gt;
The picture below shows how the graphics layers are arranged:&lt;br /&gt;
&lt;br /&gt;
[[File:Graphics layers.jpg|640px]]&lt;br /&gt;
&lt;br /&gt;
Vicky Gloabl Memory Map:&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Start Address &lt;br /&gt;
! Stop Address&lt;br /&gt;
! Register Description &lt;br /&gt;
! Additional Info&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0000 || $AF:0000 || MASTER_CTRL_REG_L || Vicky Master Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0001 || $AF:0001 || MASTER_CTRL_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0002 || $AF:0002 || GAMMA_CTRL_REG&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0003 || $AF:0003 || VKY_RESERVED_01&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0004 || $AF:0004 || BORDER_CTRL_REG || Border Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0005 || $AF:0005 || BORDER_COLOR_B&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0006 || $AF:0006 || BORDER_COLOR_G&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0007 || $AF:0007 || BORDER_COLOR_R&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0008 || $AF:0008 || BORDER_X_SIZE[5:0]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0009 || $AF:0009 || BORDER_Y_SIZE[5:0]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000A || $AF:000C || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000D || $AF:000D || BACKGROUND_COLOR_B || Background Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000E || $AF:000E || BACKGROUND_COLOR_G&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000F || $AF:000F || BACKGROUND_COLOR_R&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0010 || $AF:0010 || VKY_TXT_CURSOR_CTRL_REG || Cursor Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0011 || $AF:0011 || VKY_TXT_START_ADD_PTR   || This is an offset to change the Starting address of the Text Mode Buffer (in x)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0012 || $AF:0012 || VKY_TXT_CURSOR_CHAR_REG || Char used as the Cursor&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0013 || $AF:0013 || VKY_TXT_CURSOR_COLR_REG || Color Choice for the Cursor&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0014 || $AF:0014 || VKY_TXT_CURSOR_X_REG_L  || Cursor Position X&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0015 || $AF:0015 || VKY_TXT_CURSOR_X_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0016 || $AF:0016 || VKY_TXT_CURSOR_Y_REG_L || Cursor Position Y&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0017 || $AF:0017 || VKY_TXT_CURSOR_Y_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0018 || $AF:001B || VKY_LINE_IRQ_CTRL_REG  || Line Interrupt Registers: [0] - Enable Line 0, [1] -Enable Line 1&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001C || $AF:001C || VKY_INFO_CHIP_NUM_L || Read: Vicky Chip Part Number (L) - Write: LINE0_CMP_VALUE_LO&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001D || $AF:001D || VKY_INFO_CHIP_NUM_H  || Read: Vicky Chip Part Number (H) - Write: LINE0_CMP_VALUE_HI&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001E || $AF:001E || VKY_INFO_CHIP_VER_L || Read: Vicky Chip Version (L) - Write: LINE1_CMP_VALUE_LO&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001F || $AF:001F || VKY_INFO_CHIP_VER_H || Read: Vicky Chip Version (H) - Write: LINE1_CMP_VALUE_HI&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0020 || $AF:00FF || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0100 || $AF:0100 || BM0_CONTROL_REG || First BitMap Plane&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0101 || $AF:0101 || BM0_START_ADDY_L|| Start Address Within the Video Memory (offset by $B0:0000)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0102 || $AF:0102 || BM0_START_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0103 || $AF:0103 || BM0_START_ADDY_H&lt;br /&gt;
|- &lt;br /&gt;
| $AF:0104 || $AF:0104 || BM0_X_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0105 || $AF:0105 || BM0_Y_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0106 || $AF:0107 || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0108 || $AF:0108 || BM1_CONTROL_REG || Second BitMap Plane&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0109 || $AF:0109 || BM1_START_ADDY_L || Start Address Within the Video Memory (offset by $B0:0000)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010A || $AF:010A || BM1_START_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010B || $AF:010B || BM1_START_ADDY_H&lt;br /&gt;
|- &lt;br /&gt;
| $AF:010C || $AF:010C || BM1_X_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010D || $AF:010D || BM1_Y_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010E || $AF:010F || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0200 || $AF:02FF || TILES Memory Map || Refer to [[Tiles]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0300 || $AF:03FF || Collision Detection Memory Map || Refer to [[Collision Detection]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0400 || $AF:04FF || VDMA_CONTROL_REG || [[Video DMA Block]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0500 || $AF:05FF || MOUSE_PTR_GRAPH0 || 16x16 Mem Block 0 for Mouse Pointer &lt;br /&gt;
|-&lt;br /&gt;
| $AF:0600 || $AF:06FF || MOUSE_PTR_GRAPH1 || 16x16 Mem Block 1 for Mouse Pointer&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0700 || $AF:0700 || MOUSE_PTR_CTRL_REG_L || Mouse Pointer Registers Block&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0701 || $AF:0701 || MOUSE_PTR_CTRL_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0702 || $AF:0702 || MOUSE_PTR_X_POS_L || X Absolute Location of the Mouse&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0703 || $AF:0703 || MOUSE_PTR_X_POS_H || Presently Read Only&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0704 || $AF:0704 || MOUSE_PTR_Y_POS_L || Y Absolute Location of the Mouse&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0705 || $AF:0705 || MOUSE_PTR_Y_POS_H || Presently Read Only&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0706 || $AF:0706 || MOUSE_PTR_BYTE0 || PS2 Mouse Packet Byte 0&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0707 || $AF:0707 || MOUSE_PTR_BYTE1 || PS2 Mouse Packet Byte 1&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0708 || $AF:0708 || MOUSE_PTR_BYTE2 || PS2 Mouse Packet Byte 2&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0709 || $AF:070A || UNDEFINED MOUSE&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070B || $AF:070B || C256F_MODEL_MAJOR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070C || $AF:070C || C256F_MODEL_MINOR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070D || $AF:070D || FPGA_DOR (Day of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070E || $AF:070E || FPGA_MOR (Month of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070F || $AF:070F || FPGA_YOR (Year of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0710 || $AF:07FF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0800 || $AF:080F || RTC || See the RTC Section for more details&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0810 || $AF:0BFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0C00 || $AF:0DFF || Sprites Memory Map || Refer to [[Sprites]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0E00 || $AF:0FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1000 || $AF:13FF || SUPERIO || See the Super IO Section for more details&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1400 || $AF:1F3F || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1F40 || $AF:1F7F || FG_CHAR_LUT_PTR || Text Foreground Look-Up Table&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1F80 || $AF:1FFF || BG_CHAR_LUT_PTR || Text Background Look-Up Table&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2000 || $AF:23FF || GRPH_LUT0_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2400 || $AF:27FF || GRPH_LUT1_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2800 || $AF:2BFF || GRPH_LUT2_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2C00 || $AF:2FFF || GRPH_LUT3_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3000 || $AF:33FF || GRPH_LUT4_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3400 || $AF:37FF || GRPH_LUT5_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3800 || $AF:3BFF || GRPH_LUT6_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3C00 || $AF:3FFF || GRPH_LUT7_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4000 || $AF:40FF || GAMMA_B_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4100 || $AF:41FF || GAMMA_G_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4200 || $AF:42FF || GAMMA_R_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4300 || $AF:7FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:8000 || $AF:87FF || FONT_MEMORY_BANK0 || FONT Character Graphic Mem&lt;br /&gt;
|-&lt;br /&gt;
| $AF:8800 || $AF:9FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:A000 || $AF:BFFF || CS_TEXT_MEM_PTR || Text Memory Block&lt;br /&gt;
|-&lt;br /&gt;
| $AF:C000 || $AF:DFFF || CS_COLOR_MEM_PTR || Color Text Memory Block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Modes ==&lt;br /&gt;
Modes are enabled and disabled via the Vicky Master Control Register at $AF0000 via the control bits:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Mstr_Ctrl_Text_Mode__Lo_En&lt;br /&gt;
|= $01&lt;br /&gt;
|Enable the Text Mode&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Text_Overlay&lt;br /&gt;
|= $02&lt;br /&gt;
|Enable the Overlay of the text mode on top of Graphic Mode (the Background Color is ignored)&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Graph_Mode_En&lt;br /&gt;
|= $04&lt;br /&gt;
|Enable the Graphic Mode&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Bitmap_En&lt;br /&gt;
|= $08&lt;br /&gt;
|Enable the Bitmap Module In Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_TileMap_En&lt;br /&gt;
|= $10&lt;br /&gt;
|Enable the Tile Module in Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Sprite_En&lt;br /&gt;
|= $20&lt;br /&gt;
|Enable the Sprite Module in Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_GAMMA_En&lt;br /&gt;
|= $40&lt;br /&gt;
|Enable the GAMMA correction - The Analog and DVI have different color values, the GAMMA is great to correct the difference&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Disable_Vid&lt;br /&gt;
|= $80&lt;br /&gt;
|This will disable the Scanning of the Video information in the 4Meg of VideoRAM hence giving 100% bandwidth to the CPU&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Video mode enables hi-resolution and pixel doubling which yields 4 resolutions:&lt;br /&gt;
- 320 x 240 (pixel doubling, low res)&lt;br /&gt;
- 400 x 300 (pixel doubling, hi res)&lt;br /&gt;
- 640 x 480 (low res)&lt;br /&gt;
- 800 x 600 (hi res)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Mstr_Ctrl_Video_Mode0&lt;br /&gt;
|= $01&lt;br /&gt;
|0 - 640x480 (Clock @ 25.175Mhz), 1 - 800x600 (Clock @ 40Mhz)&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Video_Mode1&lt;br /&gt;
|= $02&lt;br /&gt;
|0 - No Pixel Doubling, 1- Pixel Doubling (Reduce the Pixel Resolution by 2)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Bitmap Layer ==&lt;br /&gt;
&lt;br /&gt;
The bitmaps are stored anywhere in video RAM, which starts at bank $B0. If the bitmap is starts at $B0:0000, the BM_START_ADDY has to be set to $00:0000.&lt;br /&gt;
There are two bitmap planes.  &lt;br /&gt;
&lt;br /&gt;
*BM_CONTROL_REG          = $AF:0100 and $AF:0108&lt;br /&gt;
**Bit 0 = disable/enable&lt;br /&gt;
**Bit 1-3 = Target LUT address located at AF:2000 and up.&lt;br /&gt;
**Bit 6 = Bitmap Collision On&lt;br /&gt;
*BM_START_ADDY_L         = $AF:0101 and $AF0109&lt;br /&gt;
*BM_START_ADDY_M         = $AF:0102 and $AF:010A&lt;br /&gt;
*BM_START_ADDY_H         = $AF:0103 and $AF:010B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Text Layer ==&lt;br /&gt;
&lt;br /&gt;
This layer is enabled by setting the Vicky master control register at $AF0000 to have bit 1 enabled. To overlay text on a bitmap display set bit 2 enabled. This will ignore the background color so this bitmap image can show through.&lt;br /&gt;
&lt;br /&gt;
The text layer text itself starts at address $AF:A000. At the moment this layer has 128 columns and 64 rows, of these 80 columns and 60 rows are visible on screen at any time. Do remember that Vicky is capable of displaying a border. Its up to the developer to account for the overlap of the border with the text screen and adjust the text position accordingly.&lt;br /&gt;
&lt;br /&gt;
The fore and background color can be set by setting the corresponding bytes for each character starting at $AFC000. The upper 4 bits of every byte specify the foreground of the character and the lower 4 bytes specify the background color. This means that only 16 colors are available for the fore and background each. Both index into the text LUT for either fore or background color.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Start of text screen    = $AF:A000&lt;br /&gt;
*Start of color screen   = $AF:C000&lt;br /&gt;
*Foreground LUT start    = $AF:1F40 (4-bytes per entry)&lt;br /&gt;
*Background LUT start    = $AF:1F80 (4-bytes per entry)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LUT ==&lt;br /&gt;
&lt;br /&gt;
A LUT, namely a Look-Up-Table, stores a selection of colors. 256 colors are supported in the video composition for the bitmap layer. The text overlay LUT is limited to 16 colors for foreground and background colors each. All re selectable out of 16.777.216 colors in the 24 Bit RGB color scheme. The LUT also contains an 8 Bit alpha channel, though it isn't supported. In summary, the LUT has $400 (1024) bytes - and the order for composing it is B -&amp;gt; G -&amp;gt; R -&amp;gt; A.&lt;br /&gt;
&lt;br /&gt;
As an example, if you would want to compose a LUT of 16 base colors, it would look like this:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Address&lt;br /&gt;
!Hex Values (BGRA)&lt;br /&gt;
!Decimal RGB Value&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2000||style=&amp;quot;text-align:center; background-color:#FFFFFF; color:#000000&amp;quot; | -- Transparent --||-- Transparent --&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2004||style=&amp;quot;text-align:center; background-color:#000000; color:#ffffff&amp;quot; | 00 00 00 00|| 0, 0, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2008||style=&amp;quot;text-align:center; background-color:#FFFFFF; color:#000000&amp;quot; | FF FF FF 00|| 255, 255, 255&lt;br /&gt;
|-&lt;br /&gt;
|$AF:200C||style=&amp;quot;text-align:center; background-color:#880000; color:#ffffff&amp;quot; | 00 00 88 00|| 0, 0, 136&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2010||style=&amp;quot;text-align:center; background-color:#AAFFEE; color:#000000&amp;quot; | EE FF AA 00|| 238, 255, 170&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2014||style=&amp;quot;text-align:center; background-color:#CC44CC; color:#ffffff&amp;quot; | CC 44 CC 00|| 204, 68, 204&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2018||style=&amp;quot;text-align:center; background-color:#00CC55; color:#000000&amp;quot; | 55 CC 00 00|| 85, 204, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:201C||style=&amp;quot;text-align:center; background-color:#0000AA; color:#ffffff&amp;quot; | AA 00 00 00|| 170, 0, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2020||style=&amp;quot;text-align:center; background-color:#EEEE77; color:#000000&amp;quot; | 77 EE EE 00|| 119, 238, 238&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2024||style=&amp;quot;text-align:center; background-color:#DD8855; color:#000000&amp;quot; | 55 88 DD 00|| 85, 136, 221&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2028||style=&amp;quot;text-align:center; background-color:#664400; color:#ffffff&amp;quot; | 00 44 66 00|| 0, 68, 102&lt;br /&gt;
|-&lt;br /&gt;
|$AF:202C||style=&amp;quot;text-align:center; background-color:#FF7777; color:#000000&amp;quot; | 77 77 FF 00|| 119, 119, 255&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2030||style=&amp;quot;text-align:center; background-color:#333333; color:#ffffff&amp;quot; | 33 33 33 00|| 51, 51, 51&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2034||style=&amp;quot;text-align:center; background-color:#777777; color:#ffffff&amp;quot; | 77 77 77 00|| 119, 119, 119&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2038||style=&amp;quot;text-align:center; background-color:#AAFF66; color:#000000&amp;quot; | 66 FF AA 00|| 102, 255, 170&lt;br /&gt;
|-&lt;br /&gt;
|$AF:203C||style=&amp;quot;text-align:center; background-color:#0088FF; color:#ffffff&amp;quot; | FF 88 00 00|| 255, 136, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2040||style=&amp;quot;text-align:center; background-color:#BBBBBB; color:#000000&amp;quot; | BB BB BB 00|| 187, 187, 187&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Adressing anything in the LUT is achieved by simply dividing the lower 10 bits of target color address by 4.&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=Sprites&amp;diff=631</id>
		<title>Sprites</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=Sprites&amp;diff=631"/>
		<updated>2021-06-28T03:49:13Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: /* Sprite Registers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sprite is a computer graphics term for a two-dimensional bitmap that is integrated into a larger scene.&lt;br /&gt;
&lt;br /&gt;
Originally sprites referred to independent objects that are composited together, by hardware, with other elements such as a background or tiles. The composition occurs as each scan line is prepared for the video output device, without involvement of the main CPU and without the need for a full-screen frame buffer. Sprites can be positioned or altered by setting attributes used during the hardware composition process. &lt;br /&gt;
&lt;br /&gt;
Vicky is able to render 64 non-multiplexed sprites with a resolution of 32x32 pixels each. Just as bitmaps, a [[LUT]] is required for selecting 256 out of 16.777.216 colors.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: The upper left corner of the sprite is offset by 32 pixels.  Using (0,0) will hide the sprite.  Position (32,32) is mapped to the upper left corner of the screen.'''&lt;br /&gt;
&lt;br /&gt;
== Sprite Registers ==&lt;br /&gt;
&lt;br /&gt;
Each Sprite has registers composed of a total of 8 bytes for manipulation, starting at $AF:0C00 and spanning through to $AF:0DFF. &lt;br /&gt;
&lt;br /&gt;
The first set of sprite manipulation registers are shown below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribute&lt;br /&gt;
!Address&lt;br /&gt;
|-&lt;br /&gt;
|SP00_CONTROL_REG||= $AF:0C00&lt;br /&gt;
|-&lt;br /&gt;
|SP00_ADDY_PTR_L||= $AF:0C01&lt;br /&gt;
|-&lt;br /&gt;
|SP00_ADDY_PTR_M||= $AF:0C02&lt;br /&gt;
|-&lt;br /&gt;
|SP00_ADDY_PTR_H||= $AF:0C03&lt;br /&gt;
|-&lt;br /&gt;
|SP00_X_POS_L||= $AF:0C04&lt;br /&gt;
|-&lt;br /&gt;
|SP00_X_POS_H||= $AF:0C05&lt;br /&gt;
|-&lt;br /&gt;
|SP00_Y_POS_L||= $AF:0C06&lt;br /&gt;
|-&lt;br /&gt;
|SP00_Y_POS_H||= $AF:0C07&lt;br /&gt;
|}&lt;br /&gt;
For each successive sprite, add +8 to the address registers.&lt;br /&gt;
&lt;br /&gt;
The sprite control register (SPxy_CONTROL_REG) is always the first byte of the 8 byte block.  The register is configured as follows:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_Enable||= $01&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_LUT0||= $02&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_LUT1||= $04&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_LUT2||= $08&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_DEPTH0||= $10&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_DEPTH1||= $20&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_DEPTH2||= $40&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_Collision_On||= $80&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=VICKY_II&amp;diff=630</id>
		<title>VICKY II</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=VICKY_II&amp;diff=630"/>
		<updated>2021-06-28T03:48:36Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: /* Modes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VICKY II - the graphics engine ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Vicky&amp;quot; is the name of the graphics engine of the C256 Foenix. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Vicky II&amp;quot; is the upgraded version of the graphic engines that resides in the FMX Version.&lt;br /&gt;
&lt;br /&gt;
The major difference in between VICKY and VICKY II is the external bus @ 32Bits wide. (VICKY is only 16Bits)&lt;br /&gt;
The access time has been doubled which allow the chipset to have better access time and overall better performance. It also gave enough room to implement larger resolutions with faster GUI block move. &lt;br /&gt;
&lt;br /&gt;
Part Number: CFP9551&lt;br /&gt;
&lt;br /&gt;
It supports:&lt;br /&gt;
&lt;br /&gt;
* 320x240@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 400x300@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 640x480@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 800x600@60FPS Max Resolution @ 256 Colors (1 Byte per pixel) (GUI mode)&lt;br /&gt;
&lt;br /&gt;
* 64 [[Sprites]] with a resolution of 32x32 pixels&lt;br /&gt;
* 4 layers of [[Tiles]] with a resolution of 16x16 pixels for each tile&lt;br /&gt;
* Text Mode&lt;br /&gt;
&lt;br /&gt;
During the video layer composition, Vicky has to read 1 line of bitmap (640 pixels), 1 line of tiles for each layer (4x 640 pixels) and all the lines that are part of the 64 Sprites (worst case scenario 32 lines of 32 pixels), that are displayed on that line. Then a composition and priority encoding are done. In order to establish a priority, in other words, to know which pixel will be in front, Vicky needs to store 10 lines of 640 pixels then scan the lot and determine which one will be displayed.&lt;br /&gt;
&lt;br /&gt;
640 + 640 + 640 + 640 + 640 + (32 * 32) = 4224 Pixels are to be read during a single line interval. The pixel rate is 200Mbytes/sec, 5ns, so the overall operation takes 21.12us, without calculating the overhead in the FPGA to go from one process to the other.&lt;br /&gt;
&lt;br /&gt;
The pixel index value $00 is always transparent, regardless if it's bitmap, tile or sprite. The respective values of the first 4 bytes represented in the LUT are thus always ignored. &lt;br /&gt;
&lt;br /&gt;
Despite the fact that there is an ALPHA value in the LUT, it is not supported/used at all.&lt;br /&gt;
&lt;br /&gt;
The picture below shows how the graphics layers are arranged:&lt;br /&gt;
&lt;br /&gt;
[[File:Graphics layers.jpg|640px]]&lt;br /&gt;
&lt;br /&gt;
Vicky Gloabl Memory Map:&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Start Address &lt;br /&gt;
! Stop Address&lt;br /&gt;
! Register Description &lt;br /&gt;
! Additional Info&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0000 || $AF:0000 || MASTER_CTRL_REG_L || Vicky Master Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0001 || $AF:0001 || MASTER_CTRL_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0002 || $AF:0002 || GAMMA_CTRL_REG&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0003 || $AF:0003 || VKY_RESERVED_01&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0004 || $AF:0004 || BORDER_CTRL_REG || Border Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0005 || $AF:0005 || BORDER_COLOR_B&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0006 || $AF:0006 || BORDER_COLOR_G&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0007 || $AF:0007 || BORDER_COLOR_R&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0008 || $AF:0008 || BORDER_X_SIZE[5:0]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0009 || $AF:0009 || BORDER_Y_SIZE[5:0]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000A || $AF:000C || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000D || $AF:000D || BACKGROUND_COLOR_B || Background Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000E || $AF:000E || BACKGROUND_COLOR_G&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000F || $AF:000F || BACKGROUND_COLOR_R&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0010 || $AF:0010 || VKY_TXT_CURSOR_CTRL_REG || Cursor Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0011 || $AF:0011 || VKY_TXT_START_ADD_PTR   || This is an offset to change the Starting address of the Text Mode Buffer (in x)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0012 || $AF:0012 || VKY_TXT_CURSOR_CHAR_REG || Char used as the Cursor&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0013 || $AF:0013 || VKY_TXT_CURSOR_COLR_REG || Color Choice for the Cursor&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0014 || $AF:0014 || VKY_TXT_CURSOR_X_REG_L  || Cursor Position X&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0015 || $AF:0015 || VKY_TXT_CURSOR_X_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0016 || $AF:0016 || VKY_TXT_CURSOR_Y_REG_L || Cursor Position Y&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0017 || $AF:0017 || VKY_TXT_CURSOR_Y_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0018 || $AF:001B || VKY_LINE_IRQ_CTRL_REG  || Line Interrupt Registers: [0] - Enable Line 0, [1] -Enable Line 1&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001C || $AF:001C || VKY_INFO_CHIP_NUM_L || Read: Vicky Chip Part Number (L) - Write: LINE0_CMP_VALUE_LO&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001D || $AF:001D || VKY_INFO_CHIP_NUM_H  || Read: Vicky Chip Part Number (H) - Write: LINE0_CMP_VALUE_HI&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001E || $AF:001E || VKY_INFO_CHIP_VER_L || Read: Vicky Chip Version (L) - Write: LINE1_CMP_VALUE_LO&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001F || $AF:001F || VKY_INFO_CHIP_VER_H || Read: Vicky Chip Version (H) - Write: LINE1_CMP_VALUE_HI&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0020 || $AF:00FF || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0100 || $AF:0100 || BM0_CONTROL_REG || First BitMap Plane&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0101 || $AF:0101 || BM0_START_ADDY_L|| Start Address Within the Video Memory (offset by $B0:0000)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0102 || $AF:0102 || BM0_START_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0103 || $AF:0103 || BM0_START_ADDY_H&lt;br /&gt;
|- &lt;br /&gt;
| $AF:0104 || $AF:0104 || BM0_X_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0105 || $AF:0105 || BM0_Y_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0106 || $AF:0107 || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0108 || $AF:0108 || BM1_CONTROL_REG || Second BitMap Plane&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0109 || $AF:0109 || BM1_START_ADDY_L || Start Address Within the Video Memory (offset by $B0:0000)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010A || $AF:010A || BM1_START_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010B || $AF:010B || BM1_START_ADDY_H&lt;br /&gt;
|- &lt;br /&gt;
| $AF:010C || $AF:010C || BM1_X_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010D || $AF:010D || BM1_Y_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010E || $AF:010F || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0200 || $AF:02FF || TILES Memory Map || Refer to [[Tiles]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0300 || $AF:03FF || Collision Detection Memory Map || Refer to [[Collision Detection]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0400 || $AF:04FF || VDMA_CONTROL_REG || [[Video DMA Block]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0500 || $AF:05FF || MOUSE_PTR_GRAPH0 || 16x16 Mem Block 0 for Mouse Pointer &lt;br /&gt;
|-&lt;br /&gt;
| $AF:0600 || $AF:06FF || MOUSE_PTR_GRAPH1 || 16x16 Mem Block 1 for Mouse Pointer&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0700 || $AF:0700 || MOUSE_PTR_CTRL_REG_L || Mouse Pointer Registers Block&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0701 || $AF:0701 || MOUSE_PTR_CTRL_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0702 || $AF:0702 || MOUSE_PTR_X_POS_L || X Absolute Location of the Mouse&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0703 || $AF:0703 || MOUSE_PTR_X_POS_H || Presently Read Only&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0704 || $AF:0704 || MOUSE_PTR_Y_POS_L || Y Absolute Location of the Mouse&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0705 || $AF:0705 || MOUSE_PTR_Y_POS_H || Presently Read Only&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0706 || $AF:0706 || MOUSE_PTR_BYTE0 || PS2 Mouse Packet Byte 0&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0707 || $AF:0707 || MOUSE_PTR_BYTE1 || PS2 Mouse Packet Byte 1&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0708 || $AF:0708 || MOUSE_PTR_BYTE2 || PS2 Mouse Packet Byte 2&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0709 || $AF:070A || UNDEFINED MOUSE&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070B || $AF:070B || C256F_MODEL_MAJOR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070C || $AF:070C || C256F_MODEL_MINOR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070D || $AF:070D || FPGA_DOR (Day of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070E || $AF:070E || FPGA_MOR (Month of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070F || $AF:070F || FPGA_YOR (Year of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0710 || $AF:07FF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0800 || $AF:080F || RTC || See the RTC Section for more details&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0810 || $AF:0BFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0C00 || $AF:0DFF || Sprites Memory Map || Refer to [[Sprites]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0E00 || $AF:0FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1000 || $AF:13FF || SUPERIO || See the Super IO Section for more details&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1400 || $AF:1F3F || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1F40 || $AF:1F7F || FG_CHAR_LUT_PTR || Text Foreground Look-Up Table&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1F80 || $AF:1FFF || BG_CHAR_LUT_PTR || Text Background Look-Up Table&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2000 || $AF:23FF || GRPH_LUT0_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2400 || $AF:27FF || GRPH_LUT1_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2800 || $AF:2BFF || GRPH_LUT2_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2C00 || $AF:2FFF || GRPH_LUT3_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3000 || $AF:33FF || GRPH_LUT4_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3400 || $AF:37FF || GRPH_LUT5_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3800 || $AF:3BFF || GRPH_LUT6_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3C00 || $AF:3FFF || GRPH_LUT7_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4000 || $AF:40FF || GAMMA_B_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4100 || $AF:41FF || GAMMA_G_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4200 || $AF:42FF || GAMMA_R_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4300 || $AF:7FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:8000 || $AF:87FF || FONT_MEMORY_BANK0 || FONT Character Graphic Mem&lt;br /&gt;
|-&lt;br /&gt;
| $AF:8800 || $AF:9FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:A000 || $AF:BFFF || CS_TEXT_MEM_PTR || Text Memory Block&lt;br /&gt;
|-&lt;br /&gt;
| $AF:C000 || $AF:DFFF || CS_COLOR_MEM_PTR || Color Text Memory Block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Modes ==&lt;br /&gt;
Modes are enabled and disabled via the Vicky Master Control Register at $AF0000 via the control bits:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Mstr_Ctrl_Text_Mode__Lo_En&lt;br /&gt;
|= $01&lt;br /&gt;
|Enable the Text Mode&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Text_Overlay&lt;br /&gt;
|= $02&lt;br /&gt;
|Enable the Overlay of the text mode on top of Graphic Mode (the Background Color is ignored)&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Graph_Mode_En&lt;br /&gt;
|= $04&lt;br /&gt;
|Enable the Graphic Mode&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Bitmap_En&lt;br /&gt;
|= $08&lt;br /&gt;
|Enable the Bitmap Module In Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_TileMap_En&lt;br /&gt;
|= $10&lt;br /&gt;
|Enable the Tile Module in Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Sprite_En&lt;br /&gt;
|= $20&lt;br /&gt;
|Enable the Sprite Module in Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_GAMMA_En&lt;br /&gt;
|= $40&lt;br /&gt;
|Enable the GAMMA correction - The Analog and DVI have different color values, the GAMMA is great to correct the difference&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Disable_Vid&lt;br /&gt;
|= $80&lt;br /&gt;
|This will disable the Scanning of the Video information in the 4Meg of VideoRAM hence giving 100% bandwidth to the CPU&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Video mode enables hi-resolution and pixel doubling which yields 4 resolutions:&lt;br /&gt;
- 320 x 240 (pixel doubling, low res)&lt;br /&gt;
- 400 x 300 (pixel doubling, hi res)&lt;br /&gt;
- 640 x 480 (low res)&lt;br /&gt;
- 800 x 600 (hi res)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Mstr_Ctrl_Video_Mode0&lt;br /&gt;
|= $01&lt;br /&gt;
|0 - 640x480 (Clock @ 25.175Mhz), 1 - 800x600 (Clock @ 40Mhz)&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Video_Mode1&lt;br /&gt;
|= $02&lt;br /&gt;
|0 - No Pixel Doubling, 1- Pixel Doubling (Reduce the Pixel Resolution by 2)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Bitmap Layer ==&lt;br /&gt;
&lt;br /&gt;
The bitmaps are stored anywhere in video RAM, which starts at bank $B0. If the bitmap is starts at $B0:0000, the BM_START_ADDY has to be set to $00:0000.&lt;br /&gt;
There are two bitmap planes.  &lt;br /&gt;
&lt;br /&gt;
*BM_CONTROL_REG          = $AF:0100 and $AF:0108&lt;br /&gt;
**Bit 0 = disable/enable&lt;br /&gt;
**Bit 1-3 = Target LUT address located at AF:2000 and up.&lt;br /&gt;
**Bit 6 = Bitmap Collision On&lt;br /&gt;
*BM_START_ADDY_L         = $AF:0101 and $AF0109&lt;br /&gt;
*BM_START_ADDY_M         = $AF:0102 and $AF:010A&lt;br /&gt;
*BM_START_ADDY_H         = $AF:0103 and $AF:010B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Text Layer ==&lt;br /&gt;
&lt;br /&gt;
This layer is enabled by setting the Vicky master control register at $AF0000 to have bit 1 enabled. To overlay text on a bitmap display set bit 2 enabled. This will ignore the background color so this bitmap image can show through.&lt;br /&gt;
&lt;br /&gt;
The text layer text itself starts at address $AF:A000. At the moment this layer has 128 columns and 64 rows, of these 80 columns and 60 rows are visible on screen at any time. Do remember that Vicky is capable of displaying a border. Its up to the developer to account for the overlap of the border with the text screen and adjust the text position accordingly.&lt;br /&gt;
&lt;br /&gt;
The fore and background color can be set by setting the corresponding bytes for each character starting at $AFC000. The upper 4 bits of every byte specify the foreground of the character and the lower 4 bytes specify the background color. This means that only 16 colors are available for the fore and background each. Both index into the text LUT for either fore or background color.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Start of text screen    = $AF:A000&lt;br /&gt;
*Start of color screen   = $AF:C000&lt;br /&gt;
*Foreground LUT start    = $AF:1F40 (4-bytes per entry)&lt;br /&gt;
*Background LUT start    = $AF:1F80 (4-bytes per entry)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LUT ==&lt;br /&gt;
&lt;br /&gt;
A LUT, namely a Look-Up-Table, stores a selection of colors. 256 colors are supported in the video composition for the bitmap layer. The text overlay LUT is limited to 16 colors for foreground and background colors each. All re selectable out of 16.777.216 colors in the 24 Bit RGB color scheme. The LUT also contains an 8 Bit alpha channel, though it isn't supported. In summary, the LUT has $400 (1024) bytes - and the order for composing it is B -&amp;gt; G -&amp;gt; R -&amp;gt; A.&lt;br /&gt;
&lt;br /&gt;
As an example, if you would want to compose a LUT of 16 base colors, it would look like this:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Address&lt;br /&gt;
!Hex Values (BGRA)&lt;br /&gt;
!Decimal RGB Value&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2000||style=&amp;quot;text-align:center; background-color:#FFFFFF; color:#000000&amp;quot; | -- Transparent --||-- Transparent --&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2004||style=&amp;quot;text-align:center; background-color:#000000; color:#ffffff&amp;quot; | 00 00 00 00|| 0, 0, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2008||style=&amp;quot;text-align:center; background-color:#FFFFFF; color:#000000&amp;quot; | FF FF FF 00|| 255, 255, 255&lt;br /&gt;
|-&lt;br /&gt;
|$AF:200C||style=&amp;quot;text-align:center; background-color:#880000; color:#ffffff&amp;quot; | 00 00 88 00|| 0, 0, 136&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2010||style=&amp;quot;text-align:center; background-color:#AAFFEE; color:#000000&amp;quot; | EE FF AA 00|| 238, 255, 170&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2014||style=&amp;quot;text-align:center; background-color:#CC44CC; color:#ffffff&amp;quot; | CC 44 CC 00|| 204, 68, 204&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2018||style=&amp;quot;text-align:center; background-color:#00CC55; color:#000000&amp;quot; | 55 CC 00 00|| 85, 204, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:201C||style=&amp;quot;text-align:center; background-color:#0000AA; color:#ffffff&amp;quot; | AA 00 00 00|| 170, 0, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2020||style=&amp;quot;text-align:center; background-color:#EEEE77; color:#000000&amp;quot; | 77 EE EE 00|| 119, 238, 238&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2024||style=&amp;quot;text-align:center; background-color:#DD8855; color:#000000&amp;quot; | 55 88 DD 00|| 85, 136, 221&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2028||style=&amp;quot;text-align:center; background-color:#664400; color:#ffffff&amp;quot; | 00 44 66 00|| 0, 68, 102&lt;br /&gt;
|-&lt;br /&gt;
|$AF:202C||style=&amp;quot;text-align:center; background-color:#FF7777; color:#000000&amp;quot; | 77 77 FF 00|| 119, 119, 255&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2030||style=&amp;quot;text-align:center; background-color:#333333; color:#ffffff&amp;quot; | 33 33 33 00|| 51, 51, 51&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2034||style=&amp;quot;text-align:center; background-color:#777777; color:#ffffff&amp;quot; | 77 77 77 00|| 119, 119, 119&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2038||style=&amp;quot;text-align:center; background-color:#AAFF66; color:#000000&amp;quot; | 66 FF AA 00|| 102, 255, 170&lt;br /&gt;
|-&lt;br /&gt;
|$AF:203C||style=&amp;quot;text-align:center; background-color:#0088FF; color:#ffffff&amp;quot; | FF 88 00 00|| 255, 136, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2040||style=&amp;quot;text-align:center; background-color:#BBBBBB; color:#000000&amp;quot; | BB BB BB 00|| 187, 187, 187&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Adressing anything in the LUT is achieved by simply dividing the lower 10 bits of target color address by 4.&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=VICKY_II&amp;diff=629</id>
		<title>VICKY II</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=VICKY_II&amp;diff=629"/>
		<updated>2021-06-28T03:48:16Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: /* Modes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VICKY II - the graphics engine ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Vicky&amp;quot; is the name of the graphics engine of the C256 Foenix. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Vicky II&amp;quot; is the upgraded version of the graphic engines that resides in the FMX Version.&lt;br /&gt;
&lt;br /&gt;
The major difference in between VICKY and VICKY II is the external bus @ 32Bits wide. (VICKY is only 16Bits)&lt;br /&gt;
The access time has been doubled which allow the chipset to have better access time and overall better performance. It also gave enough room to implement larger resolutions with faster GUI block move. &lt;br /&gt;
&lt;br /&gt;
Part Number: CFP9551&lt;br /&gt;
&lt;br /&gt;
It supports:&lt;br /&gt;
&lt;br /&gt;
* 320x240@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 400x300@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 640x480@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 800x600@60FPS Max Resolution @ 256 Colors (1 Byte per pixel) (GUI mode)&lt;br /&gt;
&lt;br /&gt;
* 64 [[Sprites]] with a resolution of 32x32 pixels&lt;br /&gt;
* 4 layers of [[Tiles]] with a resolution of 16x16 pixels for each tile&lt;br /&gt;
* Text Mode&lt;br /&gt;
&lt;br /&gt;
During the video layer composition, Vicky has to read 1 line of bitmap (640 pixels), 1 line of tiles for each layer (4x 640 pixels) and all the lines that are part of the 64 Sprites (worst case scenario 32 lines of 32 pixels), that are displayed on that line. Then a composition and priority encoding are done. In order to establish a priority, in other words, to know which pixel will be in front, Vicky needs to store 10 lines of 640 pixels then scan the lot and determine which one will be displayed.&lt;br /&gt;
&lt;br /&gt;
640 + 640 + 640 + 640 + 640 + (32 * 32) = 4224 Pixels are to be read during a single line interval. The pixel rate is 200Mbytes/sec, 5ns, so the overall operation takes 21.12us, without calculating the overhead in the FPGA to go from one process to the other.&lt;br /&gt;
&lt;br /&gt;
The pixel index value $00 is always transparent, regardless if it's bitmap, tile or sprite. The respective values of the first 4 bytes represented in the LUT are thus always ignored. &lt;br /&gt;
&lt;br /&gt;
Despite the fact that there is an ALPHA value in the LUT, it is not supported/used at all.&lt;br /&gt;
&lt;br /&gt;
The picture below shows how the graphics layers are arranged:&lt;br /&gt;
&lt;br /&gt;
[[File:Graphics layers.jpg|640px]]&lt;br /&gt;
&lt;br /&gt;
Vicky Gloabl Memory Map:&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Start Address &lt;br /&gt;
! Stop Address&lt;br /&gt;
! Register Description &lt;br /&gt;
! Additional Info&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0000 || $AF:0000 || MASTER_CTRL_REG_L || Vicky Master Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0001 || $AF:0001 || MASTER_CTRL_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0002 || $AF:0002 || GAMMA_CTRL_REG&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0003 || $AF:0003 || VKY_RESERVED_01&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0004 || $AF:0004 || BORDER_CTRL_REG || Border Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0005 || $AF:0005 || BORDER_COLOR_B&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0006 || $AF:0006 || BORDER_COLOR_G&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0007 || $AF:0007 || BORDER_COLOR_R&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0008 || $AF:0008 || BORDER_X_SIZE[5:0]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0009 || $AF:0009 || BORDER_Y_SIZE[5:0]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000A || $AF:000C || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000D || $AF:000D || BACKGROUND_COLOR_B || Background Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000E || $AF:000E || BACKGROUND_COLOR_G&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000F || $AF:000F || BACKGROUND_COLOR_R&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0010 || $AF:0010 || VKY_TXT_CURSOR_CTRL_REG || Cursor Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0011 || $AF:0011 || VKY_TXT_START_ADD_PTR   || This is an offset to change the Starting address of the Text Mode Buffer (in x)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0012 || $AF:0012 || VKY_TXT_CURSOR_CHAR_REG || Char used as the Cursor&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0013 || $AF:0013 || VKY_TXT_CURSOR_COLR_REG || Color Choice for the Cursor&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0014 || $AF:0014 || VKY_TXT_CURSOR_X_REG_L  || Cursor Position X&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0015 || $AF:0015 || VKY_TXT_CURSOR_X_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0016 || $AF:0016 || VKY_TXT_CURSOR_Y_REG_L || Cursor Position Y&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0017 || $AF:0017 || VKY_TXT_CURSOR_Y_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0018 || $AF:001B || VKY_LINE_IRQ_CTRL_REG  || Line Interrupt Registers: [0] - Enable Line 0, [1] -Enable Line 1&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001C || $AF:001C || VKY_INFO_CHIP_NUM_L || Read: Vicky Chip Part Number (L) - Write: LINE0_CMP_VALUE_LO&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001D || $AF:001D || VKY_INFO_CHIP_NUM_H  || Read: Vicky Chip Part Number (H) - Write: LINE0_CMP_VALUE_HI&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001E || $AF:001E || VKY_INFO_CHIP_VER_L || Read: Vicky Chip Version (L) - Write: LINE1_CMP_VALUE_LO&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001F || $AF:001F || VKY_INFO_CHIP_VER_H || Read: Vicky Chip Version (H) - Write: LINE1_CMP_VALUE_HI&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0020 || $AF:00FF || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0100 || $AF:0100 || BM0_CONTROL_REG || First BitMap Plane&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0101 || $AF:0101 || BM0_START_ADDY_L|| Start Address Within the Video Memory (offset by $B0:0000)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0102 || $AF:0102 || BM0_START_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0103 || $AF:0103 || BM0_START_ADDY_H&lt;br /&gt;
|- &lt;br /&gt;
| $AF:0104 || $AF:0104 || BM0_X_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0105 || $AF:0105 || BM0_Y_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0106 || $AF:0107 || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0108 || $AF:0108 || BM1_CONTROL_REG || Second BitMap Plane&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0109 || $AF:0109 || BM1_START_ADDY_L || Start Address Within the Video Memory (offset by $B0:0000)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010A || $AF:010A || BM1_START_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010B || $AF:010B || BM1_START_ADDY_H&lt;br /&gt;
|- &lt;br /&gt;
| $AF:010C || $AF:010C || BM1_X_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010D || $AF:010D || BM1_Y_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010E || $AF:010F || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0200 || $AF:02FF || TILES Memory Map || Refer to [[Tiles]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0300 || $AF:03FF || Collision Detection Memory Map || Refer to [[Collision Detection]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0400 || $AF:04FF || VDMA_CONTROL_REG || [[Video DMA Block]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0500 || $AF:05FF || MOUSE_PTR_GRAPH0 || 16x16 Mem Block 0 for Mouse Pointer &lt;br /&gt;
|-&lt;br /&gt;
| $AF:0600 || $AF:06FF || MOUSE_PTR_GRAPH1 || 16x16 Mem Block 1 for Mouse Pointer&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0700 || $AF:0700 || MOUSE_PTR_CTRL_REG_L || Mouse Pointer Registers Block&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0701 || $AF:0701 || MOUSE_PTR_CTRL_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0702 || $AF:0702 || MOUSE_PTR_X_POS_L || X Absolute Location of the Mouse&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0703 || $AF:0703 || MOUSE_PTR_X_POS_H || Presently Read Only&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0704 || $AF:0704 || MOUSE_PTR_Y_POS_L || Y Absolute Location of the Mouse&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0705 || $AF:0705 || MOUSE_PTR_Y_POS_H || Presently Read Only&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0706 || $AF:0706 || MOUSE_PTR_BYTE0 || PS2 Mouse Packet Byte 0&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0707 || $AF:0707 || MOUSE_PTR_BYTE1 || PS2 Mouse Packet Byte 1&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0708 || $AF:0708 || MOUSE_PTR_BYTE2 || PS2 Mouse Packet Byte 2&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0709 || $AF:070A || UNDEFINED MOUSE&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070B || $AF:070B || C256F_MODEL_MAJOR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070C || $AF:070C || C256F_MODEL_MINOR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070D || $AF:070D || FPGA_DOR (Day of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070E || $AF:070E || FPGA_MOR (Month of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070F || $AF:070F || FPGA_YOR (Year of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0710 || $AF:07FF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0800 || $AF:080F || RTC || See the RTC Section for more details&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0810 || $AF:0BFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0C00 || $AF:0DFF || Sprites Memory Map || Refer to [[Sprites]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0E00 || $AF:0FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1000 || $AF:13FF || SUPERIO || See the Super IO Section for more details&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1400 || $AF:1F3F || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1F40 || $AF:1F7F || FG_CHAR_LUT_PTR || Text Foreground Look-Up Table&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1F80 || $AF:1FFF || BG_CHAR_LUT_PTR || Text Background Look-Up Table&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2000 || $AF:23FF || GRPH_LUT0_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2400 || $AF:27FF || GRPH_LUT1_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2800 || $AF:2BFF || GRPH_LUT2_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2C00 || $AF:2FFF || GRPH_LUT3_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3000 || $AF:33FF || GRPH_LUT4_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3400 || $AF:37FF || GRPH_LUT5_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3800 || $AF:3BFF || GRPH_LUT6_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3C00 || $AF:3FFF || GRPH_LUT7_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4000 || $AF:40FF || GAMMA_B_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4100 || $AF:41FF || GAMMA_G_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4200 || $AF:42FF || GAMMA_R_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4300 || $AF:7FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:8000 || $AF:87FF || FONT_MEMORY_BANK0 || FONT Character Graphic Mem&lt;br /&gt;
|-&lt;br /&gt;
| $AF:8800 || $AF:9FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:A000 || $AF:BFFF || CS_TEXT_MEM_PTR || Text Memory Block&lt;br /&gt;
|-&lt;br /&gt;
| $AF:C000 || $AF:DFFF || CS_COLOR_MEM_PTR || Color Text Memory Block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Modes ==&lt;br /&gt;
Modes are enabled and disabled via the Vicky Master Control Register at $AF0000 via the control bits:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Mstr_Ctrl_Text_Mode__Lo_En&lt;br /&gt;
|= $01&lt;br /&gt;
|Enable the Text Mode&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Text_Overlay&lt;br /&gt;
|= $02&lt;br /&gt;
|Enable the Overlay of the text mode on top of Graphic Mode (the Background Color is ignored)&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Graph_Mode_En&lt;br /&gt;
|= $04&lt;br /&gt;
|Enable the Graphic Mode&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Bitmap_En&lt;br /&gt;
|= $08&lt;br /&gt;
|Enable the Bitmap Module In Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_TileMap_En&lt;br /&gt;
|= $10&lt;br /&gt;
|Enable the Tile Module in Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Sprite_En&lt;br /&gt;
|= $20&lt;br /&gt;
|Enable the Sprite Module in Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_GAMMA_En&lt;br /&gt;
|= $40&lt;br /&gt;
|Enable the GAMMA correction - The Analog and DVI have different color values, the GAMMA is great to correct the difference&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Disable_Vid&lt;br /&gt;
|= $80&lt;br /&gt;
|This will disable the Scanning of the Video information in the 4Meg of VideoRAM hence giving 100% bandwidth to the CPU&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Video mode enables hi-resolution and pixel doubling which yields 4 resolutions:&lt;br /&gt;
- 320 x 240 (pixel doubling, low res)&lt;br /&gt;
- 400 x 300 (pixel doubling, hi res)&lt;br /&gt;
- 640 x 480 (low res)&lt;br /&gt;
- 800 x 600 (hi res)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Mstr_Ctrl_Video_Mode0&lt;br /&gt;
|= $01&lt;br /&gt;
|0 - 640x480 (Clock @ 25.175Mhz), 1 - 800x600 (Clock @ 40Mhz)&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Video_Mode1&lt;br /&gt;
|= $02&lt;br /&gt;
|0 - No Pixel Doubling, 1- Pixel Doubling (Reduce the Pixel Resolution by 2)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Bitmap Layer ==&lt;br /&gt;
&lt;br /&gt;
The bitmaps are stored anywhere in video RAM, which starts at bank $B0. If the bitmap is starts at $B0:0000, the BM_START_ADDY has to be set to $00:0000.&lt;br /&gt;
There are two bitmap planes.  &lt;br /&gt;
&lt;br /&gt;
*BM_CONTROL_REG          = $AF:0100 and $AF:0108&lt;br /&gt;
**Bit 0 = disable/enable&lt;br /&gt;
**Bit 1-3 = Target LUT address located at AF:2000 and up.&lt;br /&gt;
**Bit 6 = Bitmap Collision On&lt;br /&gt;
*BM_START_ADDY_L         = $AF:0101 and $AF0109&lt;br /&gt;
*BM_START_ADDY_M         = $AF:0102 and $AF:010A&lt;br /&gt;
*BM_START_ADDY_H         = $AF:0103 and $AF:010B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Text Layer ==&lt;br /&gt;
&lt;br /&gt;
This layer is enabled by setting the Vicky master control register at $AF0000 to have bit 1 enabled. To overlay text on a bitmap display set bit 2 enabled. This will ignore the background color so this bitmap image can show through.&lt;br /&gt;
&lt;br /&gt;
The text layer text itself starts at address $AF:A000. At the moment this layer has 128 columns and 64 rows, of these 80 columns and 60 rows are visible on screen at any time. Do remember that Vicky is capable of displaying a border. Its up to the developer to account for the overlap of the border with the text screen and adjust the text position accordingly.&lt;br /&gt;
&lt;br /&gt;
The fore and background color can be set by setting the corresponding bytes for each character starting at $AFC000. The upper 4 bits of every byte specify the foreground of the character and the lower 4 bytes specify the background color. This means that only 16 colors are available for the fore and background each. Both index into the text LUT for either fore or background color.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Start of text screen    = $AF:A000&lt;br /&gt;
*Start of color screen   = $AF:C000&lt;br /&gt;
*Foreground LUT start    = $AF:1F40 (4-bytes per entry)&lt;br /&gt;
*Background LUT start    = $AF:1F80 (4-bytes per entry)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LUT ==&lt;br /&gt;
&lt;br /&gt;
A LUT, namely a Look-Up-Table, stores a selection of colors. 256 colors are supported in the video composition for the bitmap layer. The text overlay LUT is limited to 16 colors for foreground and background colors each. All re selectable out of 16.777.216 colors in the 24 Bit RGB color scheme. The LUT also contains an 8 Bit alpha channel, though it isn't supported. In summary, the LUT has $400 (1024) bytes - and the order for composing it is B -&amp;gt; G -&amp;gt; R -&amp;gt; A.&lt;br /&gt;
&lt;br /&gt;
As an example, if you would want to compose a LUT of 16 base colors, it would look like this:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Address&lt;br /&gt;
!Hex Values (BGRA)&lt;br /&gt;
!Decimal RGB Value&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2000||style=&amp;quot;text-align:center; background-color:#FFFFFF; color:#000000&amp;quot; | -- Transparent --||-- Transparent --&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2004||style=&amp;quot;text-align:center; background-color:#000000; color:#ffffff&amp;quot; | 00 00 00 00|| 0, 0, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2008||style=&amp;quot;text-align:center; background-color:#FFFFFF; color:#000000&amp;quot; | FF FF FF 00|| 255, 255, 255&lt;br /&gt;
|-&lt;br /&gt;
|$AF:200C||style=&amp;quot;text-align:center; background-color:#880000; color:#ffffff&amp;quot; | 00 00 88 00|| 0, 0, 136&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2010||style=&amp;quot;text-align:center; background-color:#AAFFEE; color:#000000&amp;quot; | EE FF AA 00|| 238, 255, 170&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2014||style=&amp;quot;text-align:center; background-color:#CC44CC; color:#ffffff&amp;quot; | CC 44 CC 00|| 204, 68, 204&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2018||style=&amp;quot;text-align:center; background-color:#00CC55; color:#000000&amp;quot; | 55 CC 00 00|| 85, 204, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:201C||style=&amp;quot;text-align:center; background-color:#0000AA; color:#ffffff&amp;quot; | AA 00 00 00|| 170, 0, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2020||style=&amp;quot;text-align:center; background-color:#EEEE77; color:#000000&amp;quot; | 77 EE EE 00|| 119, 238, 238&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2024||style=&amp;quot;text-align:center; background-color:#DD8855; color:#000000&amp;quot; | 55 88 DD 00|| 85, 136, 221&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2028||style=&amp;quot;text-align:center; background-color:#664400; color:#ffffff&amp;quot; | 00 44 66 00|| 0, 68, 102&lt;br /&gt;
|-&lt;br /&gt;
|$AF:202C||style=&amp;quot;text-align:center; background-color:#FF7777; color:#000000&amp;quot; | 77 77 FF 00|| 119, 119, 255&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2030||style=&amp;quot;text-align:center; background-color:#333333; color:#ffffff&amp;quot; | 33 33 33 00|| 51, 51, 51&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2034||style=&amp;quot;text-align:center; background-color:#777777; color:#ffffff&amp;quot; | 77 77 77 00|| 119, 119, 119&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2038||style=&amp;quot;text-align:center; background-color:#AAFF66; color:#000000&amp;quot; | 66 FF AA 00|| 102, 255, 170&lt;br /&gt;
|-&lt;br /&gt;
|$AF:203C||style=&amp;quot;text-align:center; background-color:#0088FF; color:#ffffff&amp;quot; | FF 88 00 00|| 255, 136, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2040||style=&amp;quot;text-align:center; background-color:#BBBBBB; color:#000000&amp;quot; | BB BB BB 00|| 187, 187, 187&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Adressing anything in the LUT is achieved by simply dividing the lower 10 bits of target color address by 4.&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=Tiles&amp;diff=628</id>
		<title>Tiles</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=Tiles&amp;diff=628"/>
		<updated>2021-06-28T03:46:30Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vicky II support 8 tilesets and 4 tilemaps.&lt;br /&gt;
&lt;br /&gt;
=== Tiles ===&lt;br /&gt;
Tiles are tiny reusable bitmaps that are 16 pixels wide by 16 pixels high.&lt;br /&gt;
&lt;br /&gt;
=== Tilesets ===&lt;br /&gt;
Tiles are combined in tilesets.  Tilesets usually contain only unique tiles to save memory.  Tilesets can contain a maximum of 256 tiles.  Each tile has a unique number in the tileset.&lt;br /&gt;
Tilesets must be stored in video RAM for Vicky II to be able to render them.&lt;br /&gt;
&lt;br /&gt;
=== Tilemaps ===&lt;br /&gt;
Tilemaps combine tiles from the tilesets to create a world map.  Tilemaps can be up to 1024 tiles wide by 1024 tiles high.&lt;br /&gt;
Tilemaps must be stored in video RAM in order for Vicky II to render them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tilemap Registers ==&lt;br /&gt;
&lt;br /&gt;
Each Tilemap has registers composed of a total of 12 bytes for manipulation, starting at $AF:0200 and spanning through to $AF:022F. &lt;br /&gt;
&lt;br /&gt;
The first set of Tilemap manipulation registers are shown below:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Address&lt;br /&gt;
|-&lt;br /&gt;
|TL0_CONTROL_REG||= $AF:0200&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_L||= $AF:0201&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_M||= $AF:0202&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_H||= $AF:0203&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_X_SIZE_L||= $AF:0204&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_X_SIZE_H||= $AF:0205&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_Y_SIZE_L||= $AF:0206&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_Y_SIZE_H||= $AF:0207&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_X_POS_L||= $AF:0208&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_X_POS_H||= $AF:0209&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_Y_POS_L||= $AF:020A&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_Y_POS_H||= $AF:020B&lt;br /&gt;
|-&lt;br /&gt;
|TL1_CONTROL_REG || $AF:020C&lt;br /&gt;
|-&lt;br /&gt;
|TL2_CONTROL_REG || $AF:0218&lt;br /&gt;
|-&lt;br /&gt;
|TL3_CONTROL_REG || $AF:0224&lt;br /&gt;
|}&lt;br /&gt;
For each successive tilemap, add +12 to the address registers.&lt;br /&gt;
&lt;br /&gt;
The tilemap control register (TLx_CONTROL_REG) is always the first byte of the 12 byte block.  The register is configured as follows:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|TILE_Enable||= $01&lt;br /&gt;
|-&lt;br /&gt;
|TILE_Collision_On||= $40&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Tilemap Total Size X and Y must be less than 1024.&lt;br /&gt;
&lt;br /&gt;
The Tilemap Window Position X and Y are defined as follows:&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|Direction|| Bit 14 ($4000)&lt;br /&gt;
|-&lt;br /&gt;
|Scroll|| Bits 10-13 ($4xx to $3Cxx)&lt;br /&gt;
|-&lt;br /&gt;
|Position||= 0 to $3FF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''NOTE: each tile referenced by the tilemap uses 2 bytes (16 bits).'''  The first byte is the tile number.  The second byte is configured as follows:&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|Tileset|| Bit 0-2 (8 possible tileset)&lt;br /&gt;
|-&lt;br /&gt;
|LUT|| Bits 3-5 (8 possible LUTs)&lt;br /&gt;
|}&lt;br /&gt;
== Tileset Registers ==&lt;br /&gt;
Each Tileset has registers composed of a total of 4 bytes for manipulation, starting at $AF:0280 and spanning through to $AF:029F. &lt;br /&gt;
&lt;br /&gt;
The first set of Tileset manipulation registers are shown below:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Address&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_L||= $AF:0280&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_M||= $AF:0281&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_H||= $AF:0282&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_CFG||= $AF:0283&lt;br /&gt;
|-&lt;br /&gt;
|TILESET1_ADDY_L || = $AF0284&lt;br /&gt;
|-&lt;br /&gt;
|TILESET2_ADDY_L || = $AF0288&lt;br /&gt;
|-&lt;br /&gt;
|TILESET3_ADDY_L || = $AF028C&lt;br /&gt;
|-&lt;br /&gt;
|TILESET4_ADDY_L || = $AF0290&lt;br /&gt;
|-&lt;br /&gt;
|TILESET5_ADDY_L || = $AF0294&lt;br /&gt;
|-&lt;br /&gt;
|TILESET6_ADDY_L || = $AF0298&lt;br /&gt;
|-&lt;br /&gt;
|TILESET7_ADDY_L || = $AF029C &lt;br /&gt;
|}&lt;br /&gt;
For each successive tileset, add +4 to the address registers.&lt;br /&gt;
&lt;br /&gt;
The Addresses are specified with the Video RAM offset of $B0:0000 (i.e. substract $B0:0000 from the address when writing the address).&lt;br /&gt;
&lt;br /&gt;
The Tileset Configuration Register is shown below:&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|TileStride 256|| Bit 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Setting the TileStride allows designer to provide tiles as a bitmap sheet 256 pixel wide.&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=Tiles&amp;diff=627</id>
		<title>Tiles</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=Tiles&amp;diff=627"/>
		<updated>2021-06-28T03:42:19Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vicky II support 8 tilesets and 4 tilemaps.&lt;br /&gt;
&lt;br /&gt;
=== Tiles ===&lt;br /&gt;
Tiles are tiny reusable bitmaps that are 16 pixels wide by 16 pixels high.&lt;br /&gt;
&lt;br /&gt;
=== Tilesets ===&lt;br /&gt;
Tiles are combined in tilesets.  Tilesets usually contain only unique tiles to save memory.  Tilesets can contain a maximum of 256 tiles.  Each tile has a unique number in the tileset.&lt;br /&gt;
Tilesets must be stored in video RAM for Vicky II to be able to render them.&lt;br /&gt;
&lt;br /&gt;
=== Tilemaps ===&lt;br /&gt;
Tilemaps combine tiles from the tilesets to create a world map.  Tilemaps can be up to 1024 tiles wide by 1024 tiles high.&lt;br /&gt;
Tilemaps must be stored in video RAM in order for Vicky II to render them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tilemap Registers ==&lt;br /&gt;
&lt;br /&gt;
Each Tilemap has registers composed of a total of 12 bytes for manipulation, starting at $AF:0200 and spanning through to $AF:022F. &lt;br /&gt;
&lt;br /&gt;
The first set of Tilemap manipulation registers are shown below:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Address&lt;br /&gt;
|-&lt;br /&gt;
|TL0_CONTROL_REG||= $AF:0200&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_L||= $AF:0201&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_M||= $AF:0202&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_H||= $AF:0203&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_X_SIZE_L||= $AF:0204&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_X_SIZE_H||= $AF:0205&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_Y_SIZE_L||= $AF:0206&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_Y_SIZE_H||= $AF:0207&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_X_POS_L||= $AF:0208&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_X_POS_H||= $AF:0209&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_Y_POS_L||= $AF:020A&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_Y_POS_H||= $AF:020B&lt;br /&gt;
|-&lt;br /&gt;
|TL1_CONTROL_REG || $AF:020C&lt;br /&gt;
|-&lt;br /&gt;
|TL2_CONTROL_REG || $AF:0218&lt;br /&gt;
|-&lt;br /&gt;
|TL3_CONTROL_REG || $AF:0224&lt;br /&gt;
|}&lt;br /&gt;
For each successive tilemap, add +12 to the address registers.&lt;br /&gt;
&lt;br /&gt;
The tilemap control register (TLx_CONTROL_REG) is always the first byte of the 12 byte block.  The register is configured as follows:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|TILE_Enable||= $01&lt;br /&gt;
|-&lt;br /&gt;
|TILE_Collision_On||= $40&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Tilemap Total Size X and Y must be less than 1024.&lt;br /&gt;
&lt;br /&gt;
The Tilemap Window Position X and Y are defined as follows:&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|Direction|| Bit 14 ($4000)&lt;br /&gt;
|-&lt;br /&gt;
|Scroll|| Bits 10-13 ($4xx to $3Cxx)&lt;br /&gt;
|-&lt;br /&gt;
|Position||= 0 to $3FF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''NOTE: each tile referenced by the tilemap uses 2 bytes (16 bits).'''  The first byte is the tile number.  The second byte is configured as follows:&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|Tileset|| Bit 0-2 (8 possible tileset)&lt;br /&gt;
|-&lt;br /&gt;
|LUT|| Bits 3-5 (8 possible LUTs)&lt;br /&gt;
|}&lt;br /&gt;
== Tileset Registers ==&lt;br /&gt;
Each Tileset has registers composed of a total of 4 bytes for manipulation, starting at $AF:0280 and spanning through to $AF:029F. &lt;br /&gt;
&lt;br /&gt;
The first set of Tileset manipulation registers are shown below:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Address&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_L||= $AF:0280&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_M||= $AF:0281&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_H||= $AF:0282&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_CFG||= $AF:0283&lt;br /&gt;
|-&lt;br /&gt;
|TILESET1_ADDY_L || = $AF0284&lt;br /&gt;
|-&lt;br /&gt;
|TILESET2_ADDY_L || = $AF0288&lt;br /&gt;
|-&lt;br /&gt;
|TILESET3_ADDY_L || = $AF028C&lt;br /&gt;
|-&lt;br /&gt;
|TILESET4_ADDY_L || = $AF0290&lt;br /&gt;
|-&lt;br /&gt;
|TILESET5_ADDY_L || = $AF0294&lt;br /&gt;
|-&lt;br /&gt;
|TILESET6_ADDY_L || = $AF0298&lt;br /&gt;
|-&lt;br /&gt;
|TILESET7_ADDY_L || = $AF029C &lt;br /&gt;
|}&lt;br /&gt;
For each successive tileset, add +4 to the address registers.&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=Tiles&amp;diff=626</id>
		<title>Tiles</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=Tiles&amp;diff=626"/>
		<updated>2021-06-28T03:41:34Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vicky II support 8 tilesets and 4 tilemaps.&lt;br /&gt;
&lt;br /&gt;
=== Tiles ===&lt;br /&gt;
Tiles are tiny reusable bitmaps that are 16 pixels wide by 16 pixels high.&lt;br /&gt;
&lt;br /&gt;
=== Tilesets ===&lt;br /&gt;
Tiles are combined in tilesets.  Tilesets usually contain only unique tiles to save memory.  Tilesets can contain a maximum of 256 tiles.  Each tile has a unique number in the tileset.&lt;br /&gt;
Tilesets must be stored in video RAM for Vicky II to be able to render them.&lt;br /&gt;
&lt;br /&gt;
=== Tilemaps ===&lt;br /&gt;
Tilemaps combine tiles from the tilesets to create a world map.  Tilemaps can be up to 1024 tiles wide by 1024 tiles high.&lt;br /&gt;
Tilemaps must be stored in video RAM in order for Vicky II to render them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tilemap Registers ==&lt;br /&gt;
&lt;br /&gt;
Each Tilemap has registers composed of a total of 12 bytes for manipulation, starting at $AF:0200 and spanning through to $AF:022F. &lt;br /&gt;
&lt;br /&gt;
The first set of Tilemap manipulation registers are shown below:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Address&lt;br /&gt;
|-&lt;br /&gt;
|TL0_CONTROL_REG||= $AF:0200&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_L||= $AF:0201&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_M||= $AF:0202&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_H||= $AF:0203&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_X_SIZE_L||= $AF:0204&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_X_SIZE_H||= $AF:0205&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_Y_SIZE_L||= $AF:0206&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_Y_SIZE_H||= $AF:0207&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_X_POS_L||= $AF:0208&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_X_POS_H||= $AF:0209&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_Y_POS_L||= $AF:020A&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_Y_POS_H||= $AF:020B&lt;br /&gt;
|-&lt;br /&gt;
|TL1_CONTROL_REG || $AF:020C&lt;br /&gt;
|-&lt;br /&gt;
|TL2_CONTROL_REG || $AF:0218&lt;br /&gt;
|-&lt;br /&gt;
|TL3_CONTROL_REG || $AF:0224&lt;br /&gt;
|}&lt;br /&gt;
For each successive tilemap, add +12 to the address registers.&lt;br /&gt;
&lt;br /&gt;
The tilemap control register (TLx_CONTROL_REG) is always the first byte of the 12 byte block.  The register is configured as follows:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|TILE_Enable||= $01&lt;br /&gt;
|-&lt;br /&gt;
|TILE_Collision_On||= $40&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Tilemap Total Size X and Y must be less than 1024.&lt;br /&gt;
&lt;br /&gt;
The Tilemap Window Position X and Y are defined as follows:&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|Direction|| Bit 14 ($4000)&lt;br /&gt;
|-&lt;br /&gt;
|Scroll|| Bits 10-13 ($4xx to $3Cxx)&lt;br /&gt;
|-&lt;br /&gt;
|Position||= 0 to $3FF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''NOTE: each tile referenced by the tilemap uses 2 bytes (16 bits).'''  The first byte is the tile number.  The second byte is configured as follows:&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|Tileset|| Bit 0-2 (8 possible tileset)&lt;br /&gt;
|-&lt;br /&gt;
|LUT|| Bits 3-5 (8 possible LUTs)&lt;br /&gt;
|}&lt;br /&gt;
== Tileset Registers ==&lt;br /&gt;
Each Tileset has registers composed of a total of 4 bytes for manipulation, starting at $AF:0280 and spanning through to $AF:029F. &lt;br /&gt;
&lt;br /&gt;
The first set of Tileset manipulation registers are shown below:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Address&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_L||= $AF:0280&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_M||= $AF:0281&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_H||= $AF:0282&lt;br /&gt;
|-&lt;br /&gt;
|TILESET0_ADDY_CFG||= $AF:0283&lt;br /&gt;
|-&lt;br /&gt;
|TILESET1_ADDY_L || = $AF0284 |-&lt;br /&gt;
|TILESET2_ADDY_L || = $AF0288 |-&lt;br /&gt;
|TILESET3_ADDY_L || = $AF028C |-&lt;br /&gt;
|TILESET4_ADDY_L || = $AF0290 |-&lt;br /&gt;
|TILESET5_ADDY_L || = $AF0294 |-&lt;br /&gt;
|TILESET6_ADDY_L || = $AF0298 |-&lt;br /&gt;
|TILESET7_ADDY_L || = $AF029C &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=Tiles&amp;diff=625</id>
		<title>Tiles</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=Tiles&amp;diff=625"/>
		<updated>2021-06-28T03:27:37Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: Created page with &amp;quot;Vicky II support 8 tilesets and 4 tilemaps.  === Tiles === Tiles are tiny reusable bitmaps that are 16 pixels wide by 16 pixels high.  === Tilesets === Tiles are combined in t...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vicky II support 8 tilesets and 4 tilemaps.&lt;br /&gt;
&lt;br /&gt;
=== Tiles ===&lt;br /&gt;
Tiles are tiny reusable bitmaps that are 16 pixels wide by 16 pixels high.&lt;br /&gt;
&lt;br /&gt;
=== Tilesets ===&lt;br /&gt;
Tiles are combined in tilesets.  Tilesets usually contain only unique tiles to save memory.  Tilesets can contain a maximum of 256 tiles.  Each tile has a unique number in the tileset.&lt;br /&gt;
Tilesets must be stored in video RAM for Vicky II to be able to render them.&lt;br /&gt;
&lt;br /&gt;
=== Tilemaps ===&lt;br /&gt;
Tilemaps combine tiles from the tilesets to create a world map.  Tilemaps can be up to 1024 tiles wide by 1024 tiles high.&lt;br /&gt;
Tilemaps must be stored in video RAM in order for Vicky II to render them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tilemap Registers ==&lt;br /&gt;
&lt;br /&gt;
Each Tilemap has registers composed of a total of 12 bytes for manipulation, starting at $AF:0200 and spanning through to $AF:022F. &lt;br /&gt;
&lt;br /&gt;
The first set of sprite manipulation registers are shown below:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Address&lt;br /&gt;
|-&lt;br /&gt;
|TL0_CONTROL_REG||= $AF:0200&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_L||= $AF:0201&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_M||= $AF:0202&lt;br /&gt;
|-&lt;br /&gt;
|TL0_START_ADDY_H||= $AF:0203&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_X_SIZE_L||= $AF:0204&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_X_SIZE_H||= $AF:0205&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_Y_SIZE_L||= $AF:0206&lt;br /&gt;
|-&lt;br /&gt;
|TL0_TOTAL_Y_SIZE_H||= $AF:0207&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_X_POS_L||= $AF:0208&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_X_POS_H||= $AF:0209&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_Y_POS_L||= $AF:020A&lt;br /&gt;
|-&lt;br /&gt;
|TL0_WINDOW_Y_POS_H||= $AF:020B&lt;br /&gt;
|-&lt;br /&gt;
|TL1_CONTROL_REG || $AF:020C&lt;br /&gt;
|-&lt;br /&gt;
|TL2_CONTROL_REG || $AF:0218&lt;br /&gt;
|-&lt;br /&gt;
|TL3_CONTROL_REG || $AF:0224&lt;br /&gt;
|}&lt;br /&gt;
For each successive tilemap, add +12 to the address registers.&lt;br /&gt;
&lt;br /&gt;
The tilemap control register (TLx_CONTROL_REG) is always the first byte of the 12 byte block.  The register is configured as follows:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|TILE_Enable||= $01&lt;br /&gt;
|-&lt;br /&gt;
|TILE_Collision_On||= $40&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Tilemap Total Size X and Y must be less than 1024.&lt;br /&gt;
&lt;br /&gt;
The Tilemap Window Position X and Y are defined as follows:&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|Direction|| Bit 14 ($4000)&lt;br /&gt;
|-&lt;br /&gt;
|Scroll|| Bits 10-13 ($4xx to $3Cxx)&lt;br /&gt;
|-&lt;br /&gt;
|Position||= 0 to $3FF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tileset Registers ==&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=Sprites&amp;diff=624</id>
		<title>Sprites</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=Sprites&amp;diff=624"/>
		<updated>2021-06-28T03:01:13Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sprite is a computer graphics term for a two-dimensional bitmap that is integrated into a larger scene.&lt;br /&gt;
&lt;br /&gt;
Originally sprites referred to independent objects that are composited together, by hardware, with other elements such as a background or tiles. The composition occurs as each scan line is prepared for the video output device, without involvement of the main CPU and without the need for a full-screen frame buffer. Sprites can be positioned or altered by setting attributes used during the hardware composition process. &lt;br /&gt;
&lt;br /&gt;
Vicky is able to render 64 non-multiplexed sprites with a resolution of 32x32 pixels each. Just as bitmaps, a [[LUT]] is required for selecting 256 out of 16.777.216 colors.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: The upper left corner of the sprite is offset by 32 pixels.  Using (0,0) will hide the sprite.  Position (32,32) is mapped to the upper left corner of the screen.'''&lt;br /&gt;
&lt;br /&gt;
== Sprite Registers ==&lt;br /&gt;
&lt;br /&gt;
Each Sprite has registers composed of a total of 8 bytes for manipulation, starting at $AF:0C00 and spanning through to $AF:0DFF. &lt;br /&gt;
&lt;br /&gt;
The first set of sprite manipulation registers are shown below:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Address&lt;br /&gt;
|-&lt;br /&gt;
|SP00_CONTROL_REG||= $AF:0C00&lt;br /&gt;
|-&lt;br /&gt;
|SP00_ADDY_PTR_L||= $AF:0C01&lt;br /&gt;
|-&lt;br /&gt;
|SP00_ADDY_PTR_M||= $AF:0C02&lt;br /&gt;
|-&lt;br /&gt;
|SP00_ADDY_PTR_H||= $AF:0C03&lt;br /&gt;
|-&lt;br /&gt;
|SP00_X_POS_L||= $AF:0C04&lt;br /&gt;
|-&lt;br /&gt;
|SP00_X_POS_H||= $AF:0C05&lt;br /&gt;
|-&lt;br /&gt;
|SP00_Y_POS_L||= $AF:0C06&lt;br /&gt;
|-&lt;br /&gt;
|SP00_Y_POS_H||= $AF:0C07&lt;br /&gt;
|}&lt;br /&gt;
For each successive sprite, add +8 to the address registers.&lt;br /&gt;
&lt;br /&gt;
The sprite control register (SPxy_CONTROL_REG) is always the first byte of the 8 byte block.  The register is configured as follows:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_Enable||= $01&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_LUT0||= $02&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_LUT1||= $04&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_LUT2||= $08&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_DEPTH0||= $10&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_DEPTH1||= $20&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_DEPTH2||= $40&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_Collision_On||= $80&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=Sprites&amp;diff=623</id>
		<title>Sprites</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=Sprites&amp;diff=623"/>
		<updated>2021-06-28T03:00:06Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sprite is a computer graphics term for a two-dimensional bitmap that is integrated into a larger scene.&lt;br /&gt;
&lt;br /&gt;
Originally sprites referred to independent objects that are composited together, by hardware, with other elements such as a background or tiles. The composition occurs as each scan line is prepared for the video output device, without involvement of the main CPU and without the need for a full-screen frame buffer. Sprites can be positioned or altered by setting attributes used during the hardware composition process. &lt;br /&gt;
&lt;br /&gt;
Vicky is able to render 64 non-multiplexed sprites with a resolution of 32x32 pixels each. Just as bitmaps, a [[LUT]] is required for selecting 256 out of 16.777.216 colors.&lt;br /&gt;
&lt;br /&gt;
== Sprite Registers ==&lt;br /&gt;
&lt;br /&gt;
Each Sprite has registers composed of a total of 8 bytes for manipulation, starting at $AF:0C00 and spanning through to $AF:0DFF. &lt;br /&gt;
&lt;br /&gt;
The first set of sprite manipulation registers are shown below:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Address&lt;br /&gt;
|-&lt;br /&gt;
|SP00_CONTROL_REG||= $AF:0C00&lt;br /&gt;
|-&lt;br /&gt;
|SP00_ADDY_PTR_L||= $AF:0C01&lt;br /&gt;
|-&lt;br /&gt;
|SP00_ADDY_PTR_M||= $AF:0C02&lt;br /&gt;
|-&lt;br /&gt;
|SP00_ADDY_PTR_H||= $AF:0C03&lt;br /&gt;
|-&lt;br /&gt;
|SP00_X_POS_L||= $AF:0C04&lt;br /&gt;
|-&lt;br /&gt;
|SP00_X_POS_H||= $AF:0C05&lt;br /&gt;
|-&lt;br /&gt;
|SP00_Y_POS_L||= $AF:0C06&lt;br /&gt;
|-&lt;br /&gt;
|SP00_Y_POS_H||= $AF:0C07&lt;br /&gt;
|}&lt;br /&gt;
For each successive sprite, add +8 to the address registers.&lt;br /&gt;
&lt;br /&gt;
The sprite control register (SPxy_CONTROL_REG) is always the first byte of the 8 byte block.  The register is configured as follows:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_Enable||= $01&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_LUT0||= $02&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_LUT1||= $04&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_LUT2||= $08&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_DEPTH0||= $10&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_DEPTH1||= $20&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_DEPTH2||= $40&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_Collision_On||= $80&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
NOTE: The upper left corner of the sprite is offset by 32 pixels.  Using (0,0) will hide the sprite.  Position (32,32) is mapped to the upper left corner of the screen.&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=VICKY_II&amp;diff=622</id>
		<title>VICKY II</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=VICKY_II&amp;diff=622"/>
		<updated>2021-06-28T02:55:55Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VICKY II - the graphics engine ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Vicky&amp;quot; is the name of the graphics engine of the C256 Foenix. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Vicky II&amp;quot; is the upgraded version of the graphic engines that resides in the FMX Version.&lt;br /&gt;
&lt;br /&gt;
The major difference in between VICKY and VICKY II is the external bus @ 32Bits wide. (VICKY is only 16Bits)&lt;br /&gt;
The access time has been doubled which allow the chipset to have better access time and overall better performance. It also gave enough room to implement larger resolutions with faster GUI block move. &lt;br /&gt;
&lt;br /&gt;
Part Number: CFP9551&lt;br /&gt;
&lt;br /&gt;
It supports:&lt;br /&gt;
&lt;br /&gt;
* 320x240@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 400x300@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 640x480@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 800x600@60FPS Max Resolution @ 256 Colors (1 Byte per pixel) (GUI mode)&lt;br /&gt;
&lt;br /&gt;
* 64 [[Sprites]] with a resolution of 32x32 pixels&lt;br /&gt;
* 4 layers of [[Tiles]] with a resolution of 16x16 pixels for each tile&lt;br /&gt;
* Text Mode&lt;br /&gt;
&lt;br /&gt;
During the video layer composition, Vicky has to read 1 line of bitmap (640 pixels), 1 line of tiles for each layer (4x 640 pixels) and all the lines that are part of the 64 Sprites (worst case scenario 32 lines of 32 pixels), that are displayed on that line. Then a composition and priority encoding are done. In order to establish a priority, in other words, to know which pixel will be in front, Vicky needs to store 10 lines of 640 pixels then scan the lot and determine which one will be displayed.&lt;br /&gt;
&lt;br /&gt;
640 + 640 + 640 + 640 + 640 + (32 * 32) = 4224 Pixels are to be read during a single line interval. The pixel rate is 200Mbytes/sec, 5ns, so the overall operation takes 21.12us, without calculating the overhead in the FPGA to go from one process to the other.&lt;br /&gt;
&lt;br /&gt;
The pixel index value $00 is always transparent, regardless if it's bitmap, tile or sprite. The respective values of the first 4 bytes represented in the LUT are thus always ignored. &lt;br /&gt;
&lt;br /&gt;
Despite the fact that there is an ALPHA value in the LUT, it is not supported/used at all.&lt;br /&gt;
&lt;br /&gt;
The picture below shows how the graphics layers are arranged:&lt;br /&gt;
&lt;br /&gt;
[[File:Graphics layers.jpg|640px]]&lt;br /&gt;
&lt;br /&gt;
Vicky Gloabl Memory Map:&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Start Address &lt;br /&gt;
! Stop Address&lt;br /&gt;
! Register Description &lt;br /&gt;
! Additional Info&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0000 || $AF:0000 || MASTER_CTRL_REG_L || Vicky Master Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0001 || $AF:0001 || MASTER_CTRL_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0002 || $AF:0002 || GAMMA_CTRL_REG&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0003 || $AF:0003 || VKY_RESERVED_01&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0004 || $AF:0004 || BORDER_CTRL_REG || Border Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0005 || $AF:0005 || BORDER_COLOR_B&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0006 || $AF:0006 || BORDER_COLOR_G&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0007 || $AF:0007 || BORDER_COLOR_R&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0008 || $AF:0008 || BORDER_X_SIZE[5:0]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0009 || $AF:0009 || BORDER_Y_SIZE[5:0]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000A || $AF:000C || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000D || $AF:000D || BACKGROUND_COLOR_B || Background Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000E || $AF:000E || BACKGROUND_COLOR_G&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000F || $AF:000F || BACKGROUND_COLOR_R&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0010 || $AF:0010 || VKY_TXT_CURSOR_CTRL_REG || Cursor Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0011 || $AF:0011 || VKY_TXT_START_ADD_PTR   || This is an offset to change the Starting address of the Text Mode Buffer (in x)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0012 || $AF:0012 || VKY_TXT_CURSOR_CHAR_REG || Char used as the Cursor&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0013 || $AF:0013 || VKY_TXT_CURSOR_COLR_REG || Color Choice for the Cursor&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0014 || $AF:0014 || VKY_TXT_CURSOR_X_REG_L  || Cursor Position X&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0015 || $AF:0015 || VKY_TXT_CURSOR_X_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0016 || $AF:0016 || VKY_TXT_CURSOR_Y_REG_L || Cursor Position Y&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0017 || $AF:0017 || VKY_TXT_CURSOR_Y_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0018 || $AF:001B || VKY_LINE_IRQ_CTRL_REG  || Line Interrupt Registers: [0] - Enable Line 0, [1] -Enable Line 1&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001C || $AF:001C || VKY_INFO_CHIP_NUM_L || Read: Vicky Chip Part Number (L) - Write: LINE0_CMP_VALUE_LO&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001D || $AF:001D || VKY_INFO_CHIP_NUM_H  || Read: Vicky Chip Part Number (H) - Write: LINE0_CMP_VALUE_HI&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001E || $AF:001E || VKY_INFO_CHIP_VER_L || Read: Vicky Chip Version (L) - Write: LINE1_CMP_VALUE_LO&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001F || $AF:001F || VKY_INFO_CHIP_VER_H || Read: Vicky Chip Version (H) - Write: LINE1_CMP_VALUE_HI&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0020 || $AF:00FF || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0100 || $AF:0100 || BM0_CONTROL_REG || First BitMap Plane&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0101 || $AF:0101 || BM0_START_ADDY_L|| Start Address Within the Video Memory (offset by $B0:0000)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0102 || $AF:0102 || BM0_START_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0103 || $AF:0103 || BM0_START_ADDY_H&lt;br /&gt;
|- &lt;br /&gt;
| $AF:0104 || $AF:0104 || BM0_X_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0105 || $AF:0105 || BM0_Y_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0106 || $AF:0107 || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0108 || $AF:0108 || BM1_CONTROL_REG || Second BitMap Plane&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0109 || $AF:0109 || BM1_START_ADDY_L || Start Address Within the Video Memory (offset by $B0:0000)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010A || $AF:010A || BM1_START_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010B || $AF:010B || BM1_START_ADDY_H&lt;br /&gt;
|- &lt;br /&gt;
| $AF:010C || $AF:010C || BM1_X_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010D || $AF:010D || BM1_Y_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010E || $AF:010F || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0200 || $AF:02FF || TILES Memory Map || Refer to [[Tiles]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0300 || $AF:03FF || Collision Detection Memory Map || Refer to [[Collision Detection]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0400 || $AF:04FF || VDMA_CONTROL_REG || [[Video DMA Block]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0500 || $AF:05FF || MOUSE_PTR_GRAPH0 || 16x16 Mem Block 0 for Mouse Pointer &lt;br /&gt;
|-&lt;br /&gt;
| $AF:0600 || $AF:06FF || MOUSE_PTR_GRAPH1 || 16x16 Mem Block 1 for Mouse Pointer&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0700 || $AF:0700 || MOUSE_PTR_CTRL_REG_L || Mouse Pointer Registers Block&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0701 || $AF:0701 || MOUSE_PTR_CTRL_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0702 || $AF:0702 || MOUSE_PTR_X_POS_L || X Absolute Location of the Mouse&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0703 || $AF:0703 || MOUSE_PTR_X_POS_H || Presently Read Only&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0704 || $AF:0704 || MOUSE_PTR_Y_POS_L || Y Absolute Location of the Mouse&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0705 || $AF:0705 || MOUSE_PTR_Y_POS_H || Presently Read Only&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0706 || $AF:0706 || MOUSE_PTR_BYTE0 || PS2 Mouse Packet Byte 0&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0707 || $AF:0707 || MOUSE_PTR_BYTE1 || PS2 Mouse Packet Byte 1&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0708 || $AF:0708 || MOUSE_PTR_BYTE2 || PS2 Mouse Packet Byte 2&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0709 || $AF:070A || UNDEFINED MOUSE&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070B || $AF:070B || C256F_MODEL_MAJOR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070C || $AF:070C || C256F_MODEL_MINOR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070D || $AF:070D || FPGA_DOR (Day of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070E || $AF:070E || FPGA_MOR (Month of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070F || $AF:070F || FPGA_YOR (Year of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0710 || $AF:07FF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0800 || $AF:080F || RTC || See the RTC Section for more details&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0810 || $AF:0BFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0C00 || $AF:0DFF || Sprites Memory Map || Refer to [[Sprites]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0E00 || $AF:0FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1000 || $AF:13FF || SUPERIO || See the Super IO Section for more details&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1400 || $AF:1F3F || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1F40 || $AF:1F7F || FG_CHAR_LUT_PTR || Text Foreground Look-Up Table&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1F80 || $AF:1FFF || BG_CHAR_LUT_PTR || Text Background Look-Up Table&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2000 || $AF:23FF || GRPH_LUT0_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2400 || $AF:27FF || GRPH_LUT1_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2800 || $AF:2BFF || GRPH_LUT2_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2C00 || $AF:2FFF || GRPH_LUT3_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3000 || $AF:33FF || GRPH_LUT4_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3400 || $AF:37FF || GRPH_LUT5_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3800 || $AF:3BFF || GRPH_LUT6_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3C00 || $AF:3FFF || GRPH_LUT7_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4000 || $AF:40FF || GAMMA_B_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4100 || $AF:41FF || GAMMA_G_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4200 || $AF:42FF || GAMMA_R_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4300 || $AF:7FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:8000 || $AF:87FF || FONT_MEMORY_BANK0 || FONT Character Graphic Mem&lt;br /&gt;
|-&lt;br /&gt;
| $AF:8800 || $AF:9FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:A000 || $AF:BFFF || CS_TEXT_MEM_PTR || Text Memory Block&lt;br /&gt;
|-&lt;br /&gt;
| $AF:C000 || $AF:DFFF || CS_COLOR_MEM_PTR || Color Text Memory Block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Modes ==&lt;br /&gt;
Modes are enabled and disabled via the Vicky Master Control Register at $AF0000 via the control bits:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Mstr_Ctrl_Text_Mode__Lo_En&lt;br /&gt;
|= $01&lt;br /&gt;
|Enable the Text Mode&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Text_Overlay&lt;br /&gt;
|= $02&lt;br /&gt;
|Enable the Overlay of the text mode on top of Graphic Mode (the Background Color is ignored)&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Graph_Mode_En&lt;br /&gt;
|= $04&lt;br /&gt;
|Enable the Graphic Mode&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Bitmap_En&lt;br /&gt;
|= $08&lt;br /&gt;
|Enable the Bitmap Module In Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_TileMap_En&lt;br /&gt;
|= $10&lt;br /&gt;
|Enable the Tile Module in Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Sprite_En&lt;br /&gt;
|= $20&lt;br /&gt;
|Enable the Sprite Module in Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_GAMMA_En&lt;br /&gt;
|= $40&lt;br /&gt;
|Enable the GAMMA correction - The Analog and DVI have different color values, the GAMMA is great to correct the difference&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Disable_Vid&lt;br /&gt;
|= $80&lt;br /&gt;
|This will disable the Scanning of the Video information in the 4Meg of VideoRAM hence giving 100% bandwidth to the CPU&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Video mode enables hi-resolution and pixel doubling which yields 4 resolutions:&lt;br /&gt;
- 320 x 240 (pixel doubling, low res)&lt;br /&gt;
- 400 x 300 (pixel doubling, hi res)&lt;br /&gt;
- 640 x 480 (low res)&lt;br /&gt;
- 800 x 600 (hi res)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Mstr_Ctrl_Video_Mode0&lt;br /&gt;
|= $01&lt;br /&gt;
|0 - 640x480 (Clock @ 25.175Mhz), 1 - 800x600 (Clock @ 40Mhz)&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Video_Mode1&lt;br /&gt;
|= $02&lt;br /&gt;
|0 - No Pixel Doubling, 1- Pixel Doubling (Reduce the Pixel Resolution by 2)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bitmap Layer ==&lt;br /&gt;
&lt;br /&gt;
The bitmaps are stored anywhere in video RAM, which starts at bank $B0. If the bitmap is starts at $B0:0000, the BM_START_ADDY has to be set to $00:0000.&lt;br /&gt;
There are two bitmap planes.  &lt;br /&gt;
&lt;br /&gt;
*BM_CONTROL_REG          = $AF:0100 and $AF:0108&lt;br /&gt;
**Bit 0 = disable/enable&lt;br /&gt;
**Bit 1-3 = Target LUT address located at AF:2000 and up.&lt;br /&gt;
**Bit 6 = Bitmap Collision On&lt;br /&gt;
*BM_START_ADDY_L         = $AF:0101 and $AF0109&lt;br /&gt;
*BM_START_ADDY_M         = $AF:0102 and $AF:010A&lt;br /&gt;
*BM_START_ADDY_H         = $AF:0103 and $AF:010B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Text Layer ==&lt;br /&gt;
&lt;br /&gt;
This layer is enabled by setting the Vicky master control register at $AF0000 to have bit 1 enabled. To overlay text on a bitmap display set bit 2 enabled. This will ignore the background color so this bitmap image can show through.&lt;br /&gt;
&lt;br /&gt;
The text layer text itself starts at address $AF:A000. At the moment this layer has 128 columns and 64 rows, of these 80 columns and 60 rows are visible on screen at any time. Do remember that Vicky is capable of displaying a border. Its up to the developer to account for the overlap of the border with the text screen and adjust the text position accordingly.&lt;br /&gt;
&lt;br /&gt;
The fore and background color can be set by setting the corresponding bytes for each character starting at $AFC000. The upper 4 bits of every byte specify the foreground of the character and the lower 4 bytes specify the background color. This means that only 16 colors are available for the fore and background each. Both index into the text LUT for either fore or background color.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Start of text screen    = $AF:A000&lt;br /&gt;
*Start of color screen   = $AF:C000&lt;br /&gt;
*Foreground LUT start    = $AF:1F40 (4-bytes per entry)&lt;br /&gt;
*Background LUT start    = $AF:1F80 (4-bytes per entry)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LUT ==&lt;br /&gt;
&lt;br /&gt;
A LUT, namely a Look-Up-Table, stores a selection of colors. 256 colors are supported in the video composition for the bitmap layer. The text overlay LUT is limited to 16 colors for foreground and background colors each. All re selectable out of 16.777.216 colors in the 24 Bit RGB color scheme. The LUT also contains an 8 Bit alpha channel, though it isn't supported. In summary, the LUT has $400 (1024) bytes - and the order for composing it is B -&amp;gt; G -&amp;gt; R -&amp;gt; A.&lt;br /&gt;
&lt;br /&gt;
As an example, if you would want to compose a LUT of 16 base colors, it would look like this:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Address&lt;br /&gt;
!Hex Values (BGRA)&lt;br /&gt;
!Decimal RGB Value&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2000||style=&amp;quot;text-align:center; background-color:#FFFFFF; color:#000000&amp;quot; | -- Transparent --||-- Transparent --&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2004||style=&amp;quot;text-align:center; background-color:#000000; color:#ffffff&amp;quot; | 00 00 00 00|| 0, 0, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2008||style=&amp;quot;text-align:center; background-color:#FFFFFF; color:#000000&amp;quot; | FF FF FF 00|| 255, 255, 255&lt;br /&gt;
|-&lt;br /&gt;
|$AF:200C||style=&amp;quot;text-align:center; background-color:#880000; color:#ffffff&amp;quot; | 00 00 88 00|| 0, 0, 136&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2010||style=&amp;quot;text-align:center; background-color:#AAFFEE; color:#000000&amp;quot; | EE FF AA 00|| 238, 255, 170&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2014||style=&amp;quot;text-align:center; background-color:#CC44CC; color:#ffffff&amp;quot; | CC 44 CC 00|| 204, 68, 204&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2018||style=&amp;quot;text-align:center; background-color:#00CC55; color:#000000&amp;quot; | 55 CC 00 00|| 85, 204, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:201C||style=&amp;quot;text-align:center; background-color:#0000AA; color:#ffffff&amp;quot; | AA 00 00 00|| 170, 0, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2020||style=&amp;quot;text-align:center; background-color:#EEEE77; color:#000000&amp;quot; | 77 EE EE 00|| 119, 238, 238&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2024||style=&amp;quot;text-align:center; background-color:#DD8855; color:#000000&amp;quot; | 55 88 DD 00|| 85, 136, 221&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2028||style=&amp;quot;text-align:center; background-color:#664400; color:#ffffff&amp;quot; | 00 44 66 00|| 0, 68, 102&lt;br /&gt;
|-&lt;br /&gt;
|$AF:202C||style=&amp;quot;text-align:center; background-color:#FF7777; color:#000000&amp;quot; | 77 77 FF 00|| 119, 119, 255&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2030||style=&amp;quot;text-align:center; background-color:#333333; color:#ffffff&amp;quot; | 33 33 33 00|| 51, 51, 51&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2034||style=&amp;quot;text-align:center; background-color:#777777; color:#ffffff&amp;quot; | 77 77 77 00|| 119, 119, 119&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2038||style=&amp;quot;text-align:center; background-color:#AAFF66; color:#000000&amp;quot; | 66 FF AA 00|| 102, 255, 170&lt;br /&gt;
|-&lt;br /&gt;
|$AF:203C||style=&amp;quot;text-align:center; background-color:#0088FF; color:#ffffff&amp;quot; | FF 88 00 00|| 255, 136, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2040||style=&amp;quot;text-align:center; background-color:#BBBBBB; color:#000000&amp;quot; | BB BB BB 00|| 187, 187, 187&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Adressing anything in the LUT is achieved by simply dividing the lower 10 bits of target color address by 4.&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=VICKY_II&amp;diff=621</id>
		<title>VICKY II</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=VICKY_II&amp;diff=621"/>
		<updated>2021-06-28T02:55:34Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VICKY II - the graphics engine ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Vicky&amp;quot; is the name of the graphics engine of the C256 Foenix. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Vicky II&amp;quot; is the upgraded version of the graphic engines that resides in the FMX Version.&lt;br /&gt;
&lt;br /&gt;
The major difference in between VICKY and VICKY II is the external bus @ 32Bits wide. (VICKY is only 16Bits)&lt;br /&gt;
The access time has been doubled which allow the chipset to have better access time and overall better performance. It also gave enough room to implement larger resolutions with faster GUI block move. &lt;br /&gt;
&lt;br /&gt;
Part Number: CFP9551&lt;br /&gt;
&lt;br /&gt;
It supports:&lt;br /&gt;
&lt;br /&gt;
* 320x240@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 400x300@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 640x480@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 800x600@60FPS Max Resolution @ 256 Colors (1 Byte per pixel) (GUI mode)&lt;br /&gt;
&lt;br /&gt;
* 64 [[Sprites]] with a resolution of 32x32 pixels&lt;br /&gt;
* 4 layers of [[Tiles]] with a resolution of 16x16 pixels for each tile&lt;br /&gt;
* Text Mode&lt;br /&gt;
&lt;br /&gt;
During the video layer composition, Vicky has to read 1 line of bitmap (640 pixels), 1 line of tiles for each layer (4x 640 pixels) and all the lines that are part of the 64 Sprites (worst case scenario 32 lines of 32 pixels), that are displayed on that line. Then a composition and priority encoding are done. In order to establish a priority, in other words, to know which pixel will be in front, Vicky needs to store 10 lines of 640 pixels then scan the lot and determine which one will be displayed.&lt;br /&gt;
&lt;br /&gt;
640 + 640 + 640 + 640 + 640 + (32 * 32) = 4224 Pixels are to be read during a single line interval. The pixel rate is 200Mbytes/sec, 5ns, so the overall operation takes 21.12us, without calculating the overhead in the FPGA to go from one process to the other.&lt;br /&gt;
&lt;br /&gt;
The pixel index value $00 is always transparent, regardless if it's bitmap, tile or sprite. The respective values of the first 4 bytes represented in the LUT are thus always ignored. &lt;br /&gt;
&lt;br /&gt;
Despite the fact that there is an ALPHA value in the LUT, it is not supported/used at all.&lt;br /&gt;
&lt;br /&gt;
The picture below shows how the graphics layers are arranged:&lt;br /&gt;
&lt;br /&gt;
[[File:Graphics layers.jpg:640px]]&lt;br /&gt;
&lt;br /&gt;
Vicky Gloabl Memory Map:&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Start Address &lt;br /&gt;
! Stop Address&lt;br /&gt;
! Register Description &lt;br /&gt;
! Additional Info&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0000 || $AF:0000 || MASTER_CTRL_REG_L || Vicky Master Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0001 || $AF:0001 || MASTER_CTRL_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0002 || $AF:0002 || GAMMA_CTRL_REG&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0003 || $AF:0003 || VKY_RESERVED_01&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0004 || $AF:0004 || BORDER_CTRL_REG || Border Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0005 || $AF:0005 || BORDER_COLOR_B&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0006 || $AF:0006 || BORDER_COLOR_G&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0007 || $AF:0007 || BORDER_COLOR_R&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0008 || $AF:0008 || BORDER_X_SIZE[5:0]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0009 || $AF:0009 || BORDER_Y_SIZE[5:0]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000A || $AF:000C || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000D || $AF:000D || BACKGROUND_COLOR_B || Background Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000E || $AF:000E || BACKGROUND_COLOR_G&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000F || $AF:000F || BACKGROUND_COLOR_R&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0010 || $AF:0010 || VKY_TXT_CURSOR_CTRL_REG || Cursor Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0011 || $AF:0011 || VKY_TXT_START_ADD_PTR   || This is an offset to change the Starting address of the Text Mode Buffer (in x)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0012 || $AF:0012 || VKY_TXT_CURSOR_CHAR_REG || Char used as the Cursor&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0013 || $AF:0013 || VKY_TXT_CURSOR_COLR_REG || Color Choice for the Cursor&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0014 || $AF:0014 || VKY_TXT_CURSOR_X_REG_L  || Cursor Position X&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0015 || $AF:0015 || VKY_TXT_CURSOR_X_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0016 || $AF:0016 || VKY_TXT_CURSOR_Y_REG_L || Cursor Position Y&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0017 || $AF:0017 || VKY_TXT_CURSOR_Y_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0018 || $AF:001B || VKY_LINE_IRQ_CTRL_REG  || Line Interrupt Registers: [0] - Enable Line 0, [1] -Enable Line 1&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001C || $AF:001C || VKY_INFO_CHIP_NUM_L || Read: Vicky Chip Part Number (L) - Write: LINE0_CMP_VALUE_LO&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001D || $AF:001D || VKY_INFO_CHIP_NUM_H  || Read: Vicky Chip Part Number (H) - Write: LINE0_CMP_VALUE_HI&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001E || $AF:001E || VKY_INFO_CHIP_VER_L || Read: Vicky Chip Version (L) - Write: LINE1_CMP_VALUE_LO&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001F || $AF:001F || VKY_INFO_CHIP_VER_H || Read: Vicky Chip Version (H) - Write: LINE1_CMP_VALUE_HI&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0020 || $AF:00FF || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0100 || $AF:0100 || BM0_CONTROL_REG || First BitMap Plane&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0101 || $AF:0101 || BM0_START_ADDY_L|| Start Address Within the Video Memory (offset by $B0:0000)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0102 || $AF:0102 || BM0_START_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0103 || $AF:0103 || BM0_START_ADDY_H&lt;br /&gt;
|- &lt;br /&gt;
| $AF:0104 || $AF:0104 || BM0_X_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0105 || $AF:0105 || BM0_Y_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0106 || $AF:0107 || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0108 || $AF:0108 || BM1_CONTROL_REG || Second BitMap Plane&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0109 || $AF:0109 || BM1_START_ADDY_L || Start Address Within the Video Memory (offset by $B0:0000)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010A || $AF:010A || BM1_START_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010B || $AF:010B || BM1_START_ADDY_H&lt;br /&gt;
|- &lt;br /&gt;
| $AF:010C || $AF:010C || BM1_X_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010D || $AF:010D || BM1_Y_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010E || $AF:010F || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0200 || $AF:02FF || TILES Memory Map || Refer to [[Tiles]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0300 || $AF:03FF || Collision Detection Memory Map || Refer to [[Collision Detection]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0400 || $AF:04FF || VDMA_CONTROL_REG || [[Video DMA Block]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0500 || $AF:05FF || MOUSE_PTR_GRAPH0 || 16x16 Mem Block 0 for Mouse Pointer &lt;br /&gt;
|-&lt;br /&gt;
| $AF:0600 || $AF:06FF || MOUSE_PTR_GRAPH1 || 16x16 Mem Block 1 for Mouse Pointer&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0700 || $AF:0700 || MOUSE_PTR_CTRL_REG_L || Mouse Pointer Registers Block&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0701 || $AF:0701 || MOUSE_PTR_CTRL_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0702 || $AF:0702 || MOUSE_PTR_X_POS_L || X Absolute Location of the Mouse&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0703 || $AF:0703 || MOUSE_PTR_X_POS_H || Presently Read Only&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0704 || $AF:0704 || MOUSE_PTR_Y_POS_L || Y Absolute Location of the Mouse&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0705 || $AF:0705 || MOUSE_PTR_Y_POS_H || Presently Read Only&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0706 || $AF:0706 || MOUSE_PTR_BYTE0 || PS2 Mouse Packet Byte 0&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0707 || $AF:0707 || MOUSE_PTR_BYTE1 || PS2 Mouse Packet Byte 1&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0708 || $AF:0708 || MOUSE_PTR_BYTE2 || PS2 Mouse Packet Byte 2&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0709 || $AF:070A || UNDEFINED MOUSE&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070B || $AF:070B || C256F_MODEL_MAJOR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070C || $AF:070C || C256F_MODEL_MINOR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070D || $AF:070D || FPGA_DOR (Day of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070E || $AF:070E || FPGA_MOR (Month of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070F || $AF:070F || FPGA_YOR (Year of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0710 || $AF:07FF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0800 || $AF:080F || RTC || See the RTC Section for more details&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0810 || $AF:0BFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0C00 || $AF:0DFF || Sprites Memory Map || Refer to [[Sprites]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0E00 || $AF:0FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1000 || $AF:13FF || SUPERIO || See the Super IO Section for more details&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1400 || $AF:1F3F || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1F40 || $AF:1F7F || FG_CHAR_LUT_PTR || Text Foreground Look-Up Table&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1F80 || $AF:1FFF || BG_CHAR_LUT_PTR || Text Background Look-Up Table&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2000 || $AF:23FF || GRPH_LUT0_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2400 || $AF:27FF || GRPH_LUT1_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2800 || $AF:2BFF || GRPH_LUT2_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2C00 || $AF:2FFF || GRPH_LUT3_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3000 || $AF:33FF || GRPH_LUT4_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3400 || $AF:37FF || GRPH_LUT5_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3800 || $AF:3BFF || GRPH_LUT6_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3C00 || $AF:3FFF || GRPH_LUT7_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4000 || $AF:40FF || GAMMA_B_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4100 || $AF:41FF || GAMMA_G_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4200 || $AF:42FF || GAMMA_R_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4300 || $AF:7FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:8000 || $AF:87FF || FONT_MEMORY_BANK0 || FONT Character Graphic Mem&lt;br /&gt;
|-&lt;br /&gt;
| $AF:8800 || $AF:9FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:A000 || $AF:BFFF || CS_TEXT_MEM_PTR || Text Memory Block&lt;br /&gt;
|-&lt;br /&gt;
| $AF:C000 || $AF:DFFF || CS_COLOR_MEM_PTR || Color Text Memory Block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Modes ==&lt;br /&gt;
Modes are enabled and disabled via the Vicky Master Control Register at $AF0000 via the control bits:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Mstr_Ctrl_Text_Mode__Lo_En&lt;br /&gt;
|= $01&lt;br /&gt;
|Enable the Text Mode&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Text_Overlay&lt;br /&gt;
|= $02&lt;br /&gt;
|Enable the Overlay of the text mode on top of Graphic Mode (the Background Color is ignored)&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Graph_Mode_En&lt;br /&gt;
|= $04&lt;br /&gt;
|Enable the Graphic Mode&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Bitmap_En&lt;br /&gt;
|= $08&lt;br /&gt;
|Enable the Bitmap Module In Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_TileMap_En&lt;br /&gt;
|= $10&lt;br /&gt;
|Enable the Tile Module in Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Sprite_En&lt;br /&gt;
|= $20&lt;br /&gt;
|Enable the Sprite Module in Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_GAMMA_En&lt;br /&gt;
|= $40&lt;br /&gt;
|Enable the GAMMA correction - The Analog and DVI have different color values, the GAMMA is great to correct the difference&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Disable_Vid&lt;br /&gt;
|= $80&lt;br /&gt;
|This will disable the Scanning of the Video information in the 4Meg of VideoRAM hence giving 100% bandwidth to the CPU&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Video mode enables hi-resolution and pixel doubling which yields 4 resolutions:&lt;br /&gt;
- 320 x 240 (pixel doubling, low res)&lt;br /&gt;
- 400 x 300 (pixel doubling, hi res)&lt;br /&gt;
- 640 x 480 (low res)&lt;br /&gt;
- 800 x 600 (hi res)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Mstr_Ctrl_Video_Mode0&lt;br /&gt;
|= $01&lt;br /&gt;
|0 - 640x480 (Clock @ 25.175Mhz), 1 - 800x600 (Clock @ 40Mhz)&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Video_Mode1&lt;br /&gt;
|= $02&lt;br /&gt;
|0 - No Pixel Doubling, 1- Pixel Doubling (Reduce the Pixel Resolution by 2)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bitmap Layer ==&lt;br /&gt;
&lt;br /&gt;
The bitmaps are stored anywhere in video RAM, which starts at bank $B0. If the bitmap is starts at $B0:0000, the BM_START_ADDY has to be set to $00:0000.&lt;br /&gt;
There are two bitmap planes.  &lt;br /&gt;
&lt;br /&gt;
*BM_CONTROL_REG          = $AF:0100 and $AF:0108&lt;br /&gt;
**Bit 0 = disable/enable&lt;br /&gt;
**Bit 1-3 = Target LUT address located at AF:2000 and up.&lt;br /&gt;
**Bit 6 = Bitmap Collision On&lt;br /&gt;
*BM_START_ADDY_L         = $AF:0101 and $AF0109&lt;br /&gt;
*BM_START_ADDY_M         = $AF:0102 and $AF:010A&lt;br /&gt;
*BM_START_ADDY_H         = $AF:0103 and $AF:010B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Text Layer ==&lt;br /&gt;
&lt;br /&gt;
This layer is enabled by setting the Vicky master control register at $AF0000 to have bit 1 enabled. To overlay text on a bitmap display set bit 2 enabled. This will ignore the background color so this bitmap image can show through.&lt;br /&gt;
&lt;br /&gt;
The text layer text itself starts at address $AF:A000. At the moment this layer has 128 columns and 64 rows, of these 80 columns and 60 rows are visible on screen at any time. Do remember that Vicky is capable of displaying a border. Its up to the developer to account for the overlap of the border with the text screen and adjust the text position accordingly.&lt;br /&gt;
&lt;br /&gt;
The fore and background color can be set by setting the corresponding bytes for each character starting at $AFC000. The upper 4 bits of every byte specify the foreground of the character and the lower 4 bytes specify the background color. This means that only 16 colors are available for the fore and background each. Both index into the text LUT for either fore or background color.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Start of text screen    = $AF:A000&lt;br /&gt;
*Start of color screen   = $AF:C000&lt;br /&gt;
*Foreground LUT start    = $AF:1F40 (4-bytes per entry)&lt;br /&gt;
*Background LUT start    = $AF:1F80 (4-bytes per entry)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LUT ==&lt;br /&gt;
&lt;br /&gt;
A LUT, namely a Look-Up-Table, stores a selection of colors. 256 colors are supported in the video composition for the bitmap layer. The text overlay LUT is limited to 16 colors for foreground and background colors each. All re selectable out of 16.777.216 colors in the 24 Bit RGB color scheme. The LUT also contains an 8 Bit alpha channel, though it isn't supported. In summary, the LUT has $400 (1024) bytes - and the order for composing it is B -&amp;gt; G -&amp;gt; R -&amp;gt; A.&lt;br /&gt;
&lt;br /&gt;
As an example, if you would want to compose a LUT of 16 base colors, it would look like this:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Address&lt;br /&gt;
!Hex Values (BGRA)&lt;br /&gt;
!Decimal RGB Value&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2000||style=&amp;quot;text-align:center; background-color:#FFFFFF; color:#000000&amp;quot; | -- Transparent --||-- Transparent --&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2004||style=&amp;quot;text-align:center; background-color:#000000; color:#ffffff&amp;quot; | 00 00 00 00|| 0, 0, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2008||style=&amp;quot;text-align:center; background-color:#FFFFFF; color:#000000&amp;quot; | FF FF FF 00|| 255, 255, 255&lt;br /&gt;
|-&lt;br /&gt;
|$AF:200C||style=&amp;quot;text-align:center; background-color:#880000; color:#ffffff&amp;quot; | 00 00 88 00|| 0, 0, 136&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2010||style=&amp;quot;text-align:center; background-color:#AAFFEE; color:#000000&amp;quot; | EE FF AA 00|| 238, 255, 170&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2014||style=&amp;quot;text-align:center; background-color:#CC44CC; color:#ffffff&amp;quot; | CC 44 CC 00|| 204, 68, 204&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2018||style=&amp;quot;text-align:center; background-color:#00CC55; color:#000000&amp;quot; | 55 CC 00 00|| 85, 204, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:201C||style=&amp;quot;text-align:center; background-color:#0000AA; color:#ffffff&amp;quot; | AA 00 00 00|| 170, 0, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2020||style=&amp;quot;text-align:center; background-color:#EEEE77; color:#000000&amp;quot; | 77 EE EE 00|| 119, 238, 238&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2024||style=&amp;quot;text-align:center; background-color:#DD8855; color:#000000&amp;quot; | 55 88 DD 00|| 85, 136, 221&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2028||style=&amp;quot;text-align:center; background-color:#664400; color:#ffffff&amp;quot; | 00 44 66 00|| 0, 68, 102&lt;br /&gt;
|-&lt;br /&gt;
|$AF:202C||style=&amp;quot;text-align:center; background-color:#FF7777; color:#000000&amp;quot; | 77 77 FF 00|| 119, 119, 255&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2030||style=&amp;quot;text-align:center; background-color:#333333; color:#ffffff&amp;quot; | 33 33 33 00|| 51, 51, 51&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2034||style=&amp;quot;text-align:center; background-color:#777777; color:#ffffff&amp;quot; | 77 77 77 00|| 119, 119, 119&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2038||style=&amp;quot;text-align:center; background-color:#AAFF66; color:#000000&amp;quot; | 66 FF AA 00|| 102, 255, 170&lt;br /&gt;
|-&lt;br /&gt;
|$AF:203C||style=&amp;quot;text-align:center; background-color:#0088FF; color:#ffffff&amp;quot; | FF 88 00 00|| 255, 136, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2040||style=&amp;quot;text-align:center; background-color:#BBBBBB; color:#000000&amp;quot; | BB BB BB 00|| 187, 187, 187&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Adressing anything in the LUT is achieved by simply dividing the lower 10 bits of target color address by 4.&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=VICKY_II&amp;diff=620</id>
		<title>VICKY II</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=VICKY_II&amp;diff=620"/>
		<updated>2021-06-28T02:52:38Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VICKY II - the graphics engine ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Vicky&amp;quot; is the name of the graphics engine of the C256 Foenix. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Vicky II&amp;quot; is the upgraded version of the graphic engines that resides in the FMX Version.&lt;br /&gt;
&lt;br /&gt;
The major difference in between VICKY and VICKY II is the external bus @ 32Bits wide. (VICKY is only 16Bits)&lt;br /&gt;
The access time has been doubled which allow the chipset to have better access time and overall better performance. It also gave enough room to implement larger resolutions with faster GUI block move. &lt;br /&gt;
&lt;br /&gt;
Part Number: CFP9551&lt;br /&gt;
&lt;br /&gt;
It supports:&lt;br /&gt;
&lt;br /&gt;
* 320x240@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 400x300@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 640x480@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 800x600@60FPS Max Resolution @ 256 Colors (1 Byte per pixel) (GUI mode)&lt;br /&gt;
&lt;br /&gt;
* 64 [[Sprites]] with a resolution of 32x32 pixels&lt;br /&gt;
* 4 layers of [[Tiles]] with a resolution of 16x16 pixels for each tile&lt;br /&gt;
* Text Mode&lt;br /&gt;
&lt;br /&gt;
During the video layer composition, Vicky has to read 1 line of bitmap (640 pixels), 1 line of tiles for each layer (4x 640 pixels) and all the lines that are part of the 64 Sprites (worst case scenario 32 lines of 32 pixels), that are displayed on that line. Then a composition and priority encoding are done. In order to establish a priority, in other words, to know which pixel will be in front, Vicky needs to store 10 lines of 640 pixels then scan the lot and determine which one will be displayed.&lt;br /&gt;
&lt;br /&gt;
640 + 640 + 640 + 640 + 640 + (32 * 32) = 4224 Pixels are to be read during a single line interval. The pixel rate is 200Mbytes/sec, 5ns, so the overall operation takes 21.12us, without calculating the overhead in the FPGA to go from one process to the other.&lt;br /&gt;
&lt;br /&gt;
The pixel index value $00 is always transparent, regardless if it's bitmap, tile or sprite. The respective values of the first 4 bytes represented in the LUT are thus always ignored. &lt;br /&gt;
&lt;br /&gt;
Despite the fact that there is an ALPHA value in the LUT, it is not supported/used at all.&lt;br /&gt;
&lt;br /&gt;
The picture below shows how the graphics layers are arranged:&lt;br /&gt;
&lt;br /&gt;
[[File:Graphics layers.jpg]]&lt;br /&gt;
&lt;br /&gt;
Vicky Gloabl Memory Map:&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Start Address &lt;br /&gt;
! Stop Address&lt;br /&gt;
! Register Description &lt;br /&gt;
! Additional Info&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0000 || $AF:0000 || MASTER_CTRL_REG_L || Vicky Master Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0001 || $AF:0001 || MASTER_CTRL_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0002 || $AF:0002 || GAMMA_CTRL_REG&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0003 || $AF:0003 || VKY_RESERVED_01&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0004 || $AF:0004 || BORDER_CTRL_REG || Border Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0005 || $AF:0005 || BORDER_COLOR_B&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0006 || $AF:0006 || BORDER_COLOR_G&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0007 || $AF:0007 || BORDER_COLOR_R&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0008 || $AF:0008 || BORDER_X_SIZE[5:0]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0009 || $AF:0009 || BORDER_Y_SIZE[5:0]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000A || $AF:000C || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000D || $AF:000D || BACKGROUND_COLOR_B || Background Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000E || $AF:000E || BACKGROUND_COLOR_G&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000F || $AF:000F || BACKGROUND_COLOR_R&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0010 || $AF:0010 || VKY_TXT_CURSOR_CTRL_REG || Cursor Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0011 || $AF:0011 || VKY_TXT_START_ADD_PTR   || This is an offset to change the Starting address of the Text Mode Buffer (in x)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0012 || $AF:0012 || VKY_TXT_CURSOR_CHAR_REG || Char used as the Cursor&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0013 || $AF:0013 || VKY_TXT_CURSOR_COLR_REG || Color Choice for the Cursor&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0014 || $AF:0014 || VKY_TXT_CURSOR_X_REG_L  || Cursor Position X&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0015 || $AF:0015 || VKY_TXT_CURSOR_X_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0016 || $AF:0016 || VKY_TXT_CURSOR_Y_REG_L || Cursor Position Y&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0017 || $AF:0017 || VKY_TXT_CURSOR_Y_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0018 || $AF:001B || VKY_LINE_IRQ_CTRL_REG  || Line Interrupt Registers: [0] - Enable Line 0, [1] -Enable Line 1&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001C || $AF:001C || VKY_INFO_CHIP_NUM_L || Read: Vicky Chip Part Number (L) - Write: LINE0_CMP_VALUE_LO&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001D || $AF:001D || VKY_INFO_CHIP_NUM_H  || Read: Vicky Chip Part Number (H) - Write: LINE0_CMP_VALUE_HI&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001E || $AF:001E || VKY_INFO_CHIP_VER_L || Read: Vicky Chip Version (L) - Write: LINE1_CMP_VALUE_LO&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001F || $AF:001F || VKY_INFO_CHIP_VER_H || Read: Vicky Chip Version (H) - Write: LINE1_CMP_VALUE_HI&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0020 || $AF:00FF || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0100 || $AF:0100 || BM0_CONTROL_REG || First BitMap Plane&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0101 || $AF:0101 || BM0_START_ADDY_L|| Start Address Within the Video Memory (offset by $B0:0000)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0102 || $AF:0102 || BM0_START_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0103 || $AF:0103 || BM0_START_ADDY_H&lt;br /&gt;
|- &lt;br /&gt;
| $AF:0104 || $AF:0104 || BM0_X_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0105 || $AF:0105 || BM0_Y_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0106 || $AF:0107 || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0108 || $AF:0108 || BM1_CONTROL_REG || Second BitMap Plane&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0109 || $AF:0109 || BM1_START_ADDY_L || Start Address Within the Video Memory (offset by $B0:0000)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010A || $AF:010A || BM1_START_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010B || $AF:010B || BM1_START_ADDY_H&lt;br /&gt;
|- &lt;br /&gt;
| $AF:010C || $AF:010C || BM1_X_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010D || $AF:010D || BM1_Y_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010E || $AF:010F || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0200 || $AF:02FF || TILES Memory Map || Refer to [[Tiles]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0300 || $AF:03FF || Collision Detection Memory Map || Refer to [[Collision Detection]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0400 || $AF:04FF || VDMA_CONTROL_REG || [[Video DMA Block]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0500 || $AF:05FF || MOUSE_PTR_GRAPH0 || 16x16 Mem Block 0 for Mouse Pointer &lt;br /&gt;
|-&lt;br /&gt;
| $AF:0600 || $AF:06FF || MOUSE_PTR_GRAPH1 || 16x16 Mem Block 1 for Mouse Pointer&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0700 || $AF:0700 || MOUSE_PTR_CTRL_REG_L || Mouse Pointer Registers Block&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0701 || $AF:0701 || MOUSE_PTR_CTRL_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0702 || $AF:0702 || MOUSE_PTR_X_POS_L || X Absolute Location of the Mouse&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0703 || $AF:0703 || MOUSE_PTR_X_POS_H || Presently Read Only&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0704 || $AF:0704 || MOUSE_PTR_Y_POS_L || Y Absolute Location of the Mouse&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0705 || $AF:0705 || MOUSE_PTR_Y_POS_H || Presently Read Only&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0706 || $AF:0706 || MOUSE_PTR_BYTE0 || PS2 Mouse Packet Byte 0&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0707 || $AF:0707 || MOUSE_PTR_BYTE1 || PS2 Mouse Packet Byte 1&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0708 || $AF:0708 || MOUSE_PTR_BYTE2 || PS2 Mouse Packet Byte 2&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0709 || $AF:070A || UNDEFINED MOUSE&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070B || $AF:070B || C256F_MODEL_MAJOR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070C || $AF:070C || C256F_MODEL_MINOR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070D || $AF:070D || FPGA_DOR (Day of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070E || $AF:070E || FPGA_MOR (Month of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070F || $AF:070F || FPGA_YOR (Year of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0710 || $AF:07FF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0800 || $AF:080F || RTC || See the RTC Section for more details&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0810 || $AF:0BFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0C00 || $AF:0DFF || Sprites Memory Map || Refer to [[Sprites]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0E00 || $AF:0FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1000 || $AF:13FF || SUPERIO || See the Super IO Section for more details&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1400 || $AF:1F3F || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1F40 || $AF:1F7F || FG_CHAR_LUT_PTR || Text Foreground Look-Up Table&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1F80 || $AF:1FFF || BG_CHAR_LUT_PTR || Text Background Look-Up Table&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2000 || $AF:23FF || GRPH_LUT0_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2400 || $AF:27FF || GRPH_LUT1_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2800 || $AF:2BFF || GRPH_LUT2_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2C00 || $AF:2FFF || GRPH_LUT3_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3000 || $AF:33FF || GRPH_LUT4_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3400 || $AF:37FF || GRPH_LUT5_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3800 || $AF:3BFF || GRPH_LUT6_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3C00 || $AF:3FFF || GRPH_LUT7_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4000 || $AF:40FF || GAMMA_B_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4100 || $AF:41FF || GAMMA_G_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4200 || $AF:42FF || GAMMA_R_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4300 || $AF:7FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:8000 || $AF:87FF || FONT_MEMORY_BANK0 || FONT Character Graphic Mem&lt;br /&gt;
|-&lt;br /&gt;
| $AF:8800 || $AF:9FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:A000 || $AF:BFFF || CS_TEXT_MEM_PTR || Text Memory Block&lt;br /&gt;
|-&lt;br /&gt;
| $AF:C000 || $AF:DFFF || CS_COLOR_MEM_PTR || Color Text Memory Block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Modes ==&lt;br /&gt;
Modes are enabled and disabled via the Vicky Master Control Register at $AF0000 via the control bits:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Mstr_Ctrl_Text_Mode__Lo_En&lt;br /&gt;
|= $01&lt;br /&gt;
|Enable the Text Mode&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Text_Overlay&lt;br /&gt;
|= $02&lt;br /&gt;
|Enable the Overlay of the text mode on top of Graphic Mode (the Background Color is ignored)&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Graph_Mode_En&lt;br /&gt;
|= $04&lt;br /&gt;
|Enable the Graphic Mode&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Bitmap_En&lt;br /&gt;
|= $08&lt;br /&gt;
|Enable the Bitmap Module In Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_TileMap_En&lt;br /&gt;
|= $10&lt;br /&gt;
|Enable the Tile Module in Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Sprite_En&lt;br /&gt;
|= $20&lt;br /&gt;
|Enable the Sprite Module in Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_GAMMA_En&lt;br /&gt;
|= $40&lt;br /&gt;
|Enable the GAMMA correction - The Analog and DVI have different color values, the GAMMA is great to correct the difference&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Disable_Vid&lt;br /&gt;
|= $80&lt;br /&gt;
|This will disable the Scanning of the Video information in the 4Meg of VideoRAM hence giving 100% bandwidth to the CPU&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Video mode enables hi-resolution and pixel doubling which yields 4 resolutions:&lt;br /&gt;
- 320 x 240 (pixel doubling, low res)&lt;br /&gt;
- 400 x 300 (pixel doubling, hi res)&lt;br /&gt;
- 640 x 480 (low res)&lt;br /&gt;
- 800 x 600 (hi res)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Mstr_Ctrl_Video_Mode0&lt;br /&gt;
|= $01&lt;br /&gt;
|0 - 640x480 (Clock @ 25.175Mhz), 1 - 800x600 (Clock @ 40Mhz)&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Video_Mode1&lt;br /&gt;
|= $02&lt;br /&gt;
|0 - No Pixel Doubling, 1- Pixel Doubling (Reduce the Pixel Resolution by 2)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bitmap Layer ==&lt;br /&gt;
&lt;br /&gt;
The bitmaps are stored anywhere in video RAM, which starts at bank $B0. If the bitmap is starts at $B0:0000, the BM_START_ADDY has to be set to $00:0000.&lt;br /&gt;
There are two bitmap planes.  &lt;br /&gt;
&lt;br /&gt;
*BM_CONTROL_REG          = $AF:0100 and $AF:0108&lt;br /&gt;
**Bit 0 = disable/enable&lt;br /&gt;
**Bit 1-3 = Target LUT address located at AF:2000 and up.&lt;br /&gt;
**Bit 6 = Bitmap Collision On&lt;br /&gt;
*BM_START_ADDY_L         = $AF:0101 and $AF0109&lt;br /&gt;
*BM_START_ADDY_M         = $AF:0102 and $AF:010A&lt;br /&gt;
*BM_START_ADDY_H         = $AF:0103 and $AF:010B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Text Layer ==&lt;br /&gt;
&lt;br /&gt;
This layer is enabled by setting the Vicky master control register at $AF0000 to have bit 1 enabled. To overlay text on a bitmap display set bit 2 enabled. This will ignore the background color so this bitmap image can show through.&lt;br /&gt;
&lt;br /&gt;
The text layer text itself starts at address $AF:A000. At the moment this layer has 128 columns and 64 rows, of these 80 columns and 60 rows are visible on screen at any time. Do remember that Vicky is capable of displaying a border. Its up to the developer to account for the overlap of the border with the text screen and adjust the text position accordingly.&lt;br /&gt;
&lt;br /&gt;
The fore and background color can be set by setting the corresponding bytes for each character starting at $AFC000. The upper 4 bits of every byte specify the foreground of the character and the lower 4 bytes specify the background color. This means that only 16 colors are available for the fore and background each. Both index into the text LUT for either fore or background color.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Start of text screen    = $AF:A000&lt;br /&gt;
*Start of color screen   = $AF:C000&lt;br /&gt;
*Foreground LUT start    = $AF:1F40 (4-bytes per entry)&lt;br /&gt;
*Background LUT start    = $AF:1F80 (4-bytes per entry)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LUT ==&lt;br /&gt;
&lt;br /&gt;
A LUT, namely a Look-Up-Table, stores a selection of colors. 256 colors are supported in the video composition for the bitmap layer. The text overlay LUT is limited to 16 colors for foreground and background colors each. All re selectable out of 16.777.216 colors in the 24 Bit RGB color scheme. The LUT also contains an 8 Bit alpha channel, though it isn't supported. In summary, the LUT has $400 (1024) bytes - and the order for composing it is B -&amp;gt; G -&amp;gt; R -&amp;gt; A.&lt;br /&gt;
&lt;br /&gt;
As an example, if you would want to compose a LUT of 16 base colors, it would look like this:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Address&lt;br /&gt;
!Hex Values (BGRA)&lt;br /&gt;
!Decimal RGB Value&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2000||style=&amp;quot;text-align:center; background-color:#FFFFFF; color:#000000&amp;quot; | -- Transparent --||-- Transparent --&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2004||style=&amp;quot;text-align:center; background-color:#000000; color:#ffffff&amp;quot; | 00 00 00 00|| 0, 0, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2008||style=&amp;quot;text-align:center; background-color:#FFFFFF; color:#000000&amp;quot; | FF FF FF 00|| 255, 255, 255&lt;br /&gt;
|-&lt;br /&gt;
|$AF:200C||style=&amp;quot;text-align:center; background-color:#880000; color:#ffffff&amp;quot; | 00 00 88 00|| 0, 0, 136&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2010||style=&amp;quot;text-align:center; background-color:#AAFFEE; color:#000000&amp;quot; | EE FF AA 00|| 238, 255, 170&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2014||style=&amp;quot;text-align:center; background-color:#CC44CC; color:#ffffff&amp;quot; | CC 44 CC 00|| 204, 68, 204&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2018||style=&amp;quot;text-align:center; background-color:#00CC55; color:#000000&amp;quot; | 55 CC 00 00|| 85, 204, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:201C||style=&amp;quot;text-align:center; background-color:#0000AA; color:#ffffff&amp;quot; | AA 00 00 00|| 170, 0, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2020||style=&amp;quot;text-align:center; background-color:#EEEE77; color:#000000&amp;quot; | 77 EE EE 00|| 119, 238, 238&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2024||style=&amp;quot;text-align:center; background-color:#DD8855; color:#000000&amp;quot; | 55 88 DD 00|| 85, 136, 221&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2028||style=&amp;quot;text-align:center; background-color:#664400; color:#ffffff&amp;quot; | 00 44 66 00|| 0, 68, 102&lt;br /&gt;
|-&lt;br /&gt;
|$AF:202C||style=&amp;quot;text-align:center; background-color:#FF7777; color:#000000&amp;quot; | 77 77 FF 00|| 119, 119, 255&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2030||style=&amp;quot;text-align:center; background-color:#333333; color:#ffffff&amp;quot; | 33 33 33 00|| 51, 51, 51&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2034||style=&amp;quot;text-align:center; background-color:#777777; color:#ffffff&amp;quot; | 77 77 77 00|| 119, 119, 119&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2038||style=&amp;quot;text-align:center; background-color:#AAFF66; color:#000000&amp;quot; | 66 FF AA 00|| 102, 255, 170&lt;br /&gt;
|-&lt;br /&gt;
|$AF:203C||style=&amp;quot;text-align:center; background-color:#0088FF; color:#ffffff&amp;quot; | FF 88 00 00|| 255, 136, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2040||style=&amp;quot;text-align:center; background-color:#BBBBBB; color:#000000&amp;quot; | BB BB BB 00|| 187, 187, 187&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Adressing anything in the LUT is achieved by simply dividing the lower 10 bits of target color address by 4.&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=File:Graphics_layers.jpg&amp;diff=619</id>
		<title>File:Graphics layers.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=File:Graphics_layers.jpg&amp;diff=619"/>
		<updated>2021-06-28T02:51:48Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: Grenouye uploaded a new version of File:Graphics layers.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=VICKY_II&amp;diff=618</id>
		<title>VICKY II</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=VICKY_II&amp;diff=618"/>
		<updated>2021-06-28T02:46:15Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VICKY II - the graphics engine ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Vicky&amp;quot; is the name of the graphics engine of the C256 Foenix. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Vicky II&amp;quot; is the upgraded version of the graphic engines that resides in the FMX Version.&lt;br /&gt;
&lt;br /&gt;
The major difference in between VICKY and VICKY II is the external bus @ 32Bits wide. (VICKY is only 16Bits)&lt;br /&gt;
The access time has been doubled which allow the chipset to have better access time and overall better performance. It also gave enough room to implement larger resolutions with faster GUI block move. &lt;br /&gt;
&lt;br /&gt;
Part Number: CFP9551&lt;br /&gt;
&lt;br /&gt;
It supports:&lt;br /&gt;
&lt;br /&gt;
* 320x240@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 400x300@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 640x480@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 800x600@60FPS Max Resolution @ 256 Colors (1 Byte per pixel) (GUI mode)&lt;br /&gt;
&lt;br /&gt;
* 64 [[Sprites]] with a resolution of 32x32 pixels&lt;br /&gt;
* 4 layers of [[Tiles]] with a resolution of 16x16 pixels for each tile&lt;br /&gt;
* Text Mode&lt;br /&gt;
&lt;br /&gt;
During the video layer composition, Vicky has to read 1 line of bitmap (640 pixels), 1 line of tiles for each layer (4x 640 pixels) and all the lines that are part of the 64 Sprites (worst case scenario 32 lines of 32 pixels), that are displayed on that line. Then a composition and priority encoding are done. In order to establish a priority, in other words, to know which pixel will be in front, Vicky needs to store 10 lines of 640 pixels then scan the lot and determine which one will be displayed.&lt;br /&gt;
&lt;br /&gt;
640 + 640 + 640 + 640 + 640 + (32 * 32) = 4224 Pixels are to be read during a single line interval. The pixel rate is 200Mbytes/sec, 5ns, so the overall operation takes 21.12us, without calculating the overhead in the FPGA to go from one process to the other.&lt;br /&gt;
&lt;br /&gt;
The pixel index value $00 is always transparent, regardless if it's bitmap, tile or sprite. The respective values of the first 4 bytes represented in the LUT are thus always ignored. &lt;br /&gt;
&lt;br /&gt;
Despite the fact that there is an ALPHA value in the LUT, it is not supported/used at all.&lt;br /&gt;
&lt;br /&gt;
The picture below shows how the graphics layers are arranged:&lt;br /&gt;
[[File:Graphics layers.jpg]]&lt;br /&gt;
&lt;br /&gt;
Vicky Gloabl Memory Map:&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Start Address &lt;br /&gt;
! Stop Address&lt;br /&gt;
! Register Description &lt;br /&gt;
! Additional Info&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0000 || $AF:0000 || MASTER_CTRL_REG_L || Vicky Master Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0001 || $AF:0001 || MASTER_CTRL_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0002 || $AF:0002 || GAMMA_CTRL_REG&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0003 || $AF:0003 || VKY_RESERVED_01&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0004 || $AF:0004 || BORDER_CTRL_REG || Border Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0005 || $AF:0005 || BORDER_COLOR_B&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0006 || $AF:0006 || BORDER_COLOR_G&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0007 || $AF:0007 || BORDER_COLOR_R&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0008 || $AF:0008 || BORDER_X_SIZE[5:0]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0009 || $AF:0009 || BORDER_Y_SIZE[5:0]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000A || $AF:000C || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000D || $AF:000D || BACKGROUND_COLOR_B || Background Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000E || $AF:000E || BACKGROUND_COLOR_G&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000F || $AF:000F || BACKGROUND_COLOR_R&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0010 || $AF:0010 || VKY_TXT_CURSOR_CTRL_REG || Cursor Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0011 || $AF:0011 || VKY_TXT_START_ADD_PTR   || This is an offset to change the Starting address of the Text Mode Buffer (in x)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0012 || $AF:0012 || VKY_TXT_CURSOR_CHAR_REG || Char used as the Cursor&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0013 || $AF:0013 || VKY_TXT_CURSOR_COLR_REG || Color Choice for the Cursor&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0014 || $AF:0014 || VKY_TXT_CURSOR_X_REG_L  || Cursor Position X&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0015 || $AF:0015 || VKY_TXT_CURSOR_X_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0016 || $AF:0016 || VKY_TXT_CURSOR_Y_REG_L || Cursor Position Y&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0017 || $AF:0017 || VKY_TXT_CURSOR_Y_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0018 || $AF:001B || VKY_LINE_IRQ_CTRL_REG  || Line Interrupt Registers: [0] - Enable Line 0, [1] -Enable Line 1&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001C || $AF:001C || VKY_INFO_CHIP_NUM_L || Read: Vicky Chip Part Number (L) - Write: LINE0_CMP_VALUE_LO&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001D || $AF:001D || VKY_INFO_CHIP_NUM_H  || Read: Vicky Chip Part Number (H) - Write: LINE0_CMP_VALUE_HI&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001E || $AF:001E || VKY_INFO_CHIP_VER_L || Read: Vicky Chip Version (L) - Write: LINE1_CMP_VALUE_LO&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001F || $AF:001F || VKY_INFO_CHIP_VER_H || Read: Vicky Chip Version (H) - Write: LINE1_CMP_VALUE_HI&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0020 || $AF:00FF || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0100 || $AF:0100 || BM0_CONTROL_REG || First BitMap Plane&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0101 || $AF:0101 || BM0_START_ADDY_L|| Start Address Within the Video Memory (offset by $B0:0000)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0102 || $AF:0102 || BM0_START_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0103 || $AF:0103 || BM0_START_ADDY_H&lt;br /&gt;
|- &lt;br /&gt;
| $AF:0104 || $AF:0104 || BM0_X_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0105 || $AF:0105 || BM0_Y_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0106 || $AF:0107 || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0108 || $AF:0108 || BM1_CONTROL_REG || Second BitMap Plane&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0109 || $AF:0109 || BM1_START_ADDY_L || Start Address Within the Video Memory (offset by $B0:0000)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010A || $AF:010A || BM1_START_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010B || $AF:010B || BM1_START_ADDY_H&lt;br /&gt;
|- &lt;br /&gt;
| $AF:010C || $AF:010C || BM1_X_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010D || $AF:010D || BM1_Y_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010E || $AF:010F || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0200 || $AF:02FF || TILES Memory Map || Refer to [[Tiles]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0300 || $AF:03FF || Collision Detection Memory Map || Refer to [[Collision Detection]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0400 || $AF:04FF || VDMA_CONTROL_REG || [[Video DMA Block]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0500 || $AF:05FF || MOUSE_PTR_GRAPH0 || 16x16 Mem Block 0 for Mouse Pointer &lt;br /&gt;
|-&lt;br /&gt;
| $AF:0600 || $AF:06FF || MOUSE_PTR_GRAPH1 || 16x16 Mem Block 1 for Mouse Pointer&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0700 || $AF:0700 || MOUSE_PTR_CTRL_REG_L || Mouse Pointer Registers Block&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0701 || $AF:0701 || MOUSE_PTR_CTRL_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0702 || $AF:0702 || MOUSE_PTR_X_POS_L || X Absolute Location of the Mouse&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0703 || $AF:0703 || MOUSE_PTR_X_POS_H || Presently Read Only&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0704 || $AF:0704 || MOUSE_PTR_Y_POS_L || Y Absolute Location of the Mouse&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0705 || $AF:0705 || MOUSE_PTR_Y_POS_H || Presently Read Only&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0706 || $AF:0706 || MOUSE_PTR_BYTE0 || PS2 Mouse Packet Byte 0&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0707 || $AF:0707 || MOUSE_PTR_BYTE1 || PS2 Mouse Packet Byte 1&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0708 || $AF:0708 || MOUSE_PTR_BYTE2 || PS2 Mouse Packet Byte 2&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0709 || $AF:070A || UNDEFINED MOUSE&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070B || $AF:070B || C256F_MODEL_MAJOR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070C || $AF:070C || C256F_MODEL_MINOR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070D || $AF:070D || FPGA_DOR (Day of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070E || $AF:070E || FPGA_MOR (Month of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070F || $AF:070F || FPGA_YOR (Year of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0710 || $AF:07FF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0800 || $AF:080F || RTC || See the RTC Section for more details&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0810 || $AF:0BFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0C00 || $AF:0DFF || Sprites Memory Map || Refer to [[Sprites]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0E00 || $AF:0FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1000 || $AF:13FF || SUPERIO || See the Super IO Section for more details&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1400 || $AF:1F3F || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1F40 || $AF:1F7F || FG_CHAR_LUT_PTR || Text Foreground Look-Up Table&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1F80 || $AF:1FFF || BG_CHAR_LUT_PTR || Text Background Look-Up Table&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2000 || $AF:23FF || GRPH_LUT0_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2400 || $AF:27FF || GRPH_LUT1_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2800 || $AF:2BFF || GRPH_LUT2_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2C00 || $AF:2FFF || GRPH_LUT3_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3000 || $AF:33FF || GRPH_LUT4_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3400 || $AF:37FF || GRPH_LUT5_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3800 || $AF:3BFF || GRPH_LUT6_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3C00 || $AF:3FFF || GRPH_LUT7_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4000 || $AF:40FF || GAMMA_B_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4100 || $AF:41FF || GAMMA_G_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4200 || $AF:42FF || GAMMA_R_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4300 || $AF:7FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:8000 || $AF:87FF || FONT_MEMORY_BANK0 || FONT Character Graphic Mem&lt;br /&gt;
|-&lt;br /&gt;
| $AF:8800 || $AF:9FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:A000 || $AF:BFFF || CS_TEXT_MEM_PTR || Text Memory Block&lt;br /&gt;
|-&lt;br /&gt;
| $AF:C000 || $AF:DFFF || CS_COLOR_MEM_PTR || Color Text Memory Block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Modes ==&lt;br /&gt;
Modes are enabled and disabled via the Vicky Master Control Register at $AF0000 via the control bits:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Mstr_Ctrl_Text_Mode__Lo_En&lt;br /&gt;
|= $01&lt;br /&gt;
|Enable the Text Mode&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Text_Overlay&lt;br /&gt;
|= $02&lt;br /&gt;
|Enable the Overlay of the text mode on top of Graphic Mode (the Background Color is ignored)&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Graph_Mode_En&lt;br /&gt;
|= $04&lt;br /&gt;
|Enable the Graphic Mode&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Bitmap_En&lt;br /&gt;
|= $08&lt;br /&gt;
|Enable the Bitmap Module In Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_TileMap_En&lt;br /&gt;
|= $10&lt;br /&gt;
|Enable the Tile Module in Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Sprite_En&lt;br /&gt;
|= $20&lt;br /&gt;
|Enable the Sprite Module in Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_GAMMA_En&lt;br /&gt;
|= $40&lt;br /&gt;
|Enable the GAMMA correction - The Analog and DVI have different color values, the GAMMA is great to correct the difference&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Disable_Vid&lt;br /&gt;
|= $80&lt;br /&gt;
|This will disable the Scanning of the Video information in the 4Meg of VideoRAM hence giving 100% bandwidth to the CPU&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Video mode enables hi-resolution and pixel doubling which yields 4 resolutions:&lt;br /&gt;
- 320 x 240 (pixel doubling, low res)&lt;br /&gt;
- 400 x 300 (pixel doubling, hi res)&lt;br /&gt;
- 640 x 480 (low res)&lt;br /&gt;
- 800 x 600 (hi res)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Mstr_Ctrl_Video_Mode0&lt;br /&gt;
|= $01&lt;br /&gt;
|0 - 640x480 (Clock @ 25.175Mhz), 1 - 800x600 (Clock @ 40Mhz)&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Video_Mode1&lt;br /&gt;
|= $02&lt;br /&gt;
|0 - No Pixel Doubling, 1- Pixel Doubling (Reduce the Pixel Resolution by 2)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bitmap Layer ==&lt;br /&gt;
&lt;br /&gt;
The bitmaps are stored anywhere in video RAM, which starts at bank $B0. If the bitmap is starts at $B0:0000, the BM_START_ADDY has to be set to $00:0000.&lt;br /&gt;
There are two bitmap planes.  &lt;br /&gt;
&lt;br /&gt;
*BM_CONTROL_REG          = $AF:0100 and $AF:0108&lt;br /&gt;
**Bit 0 = disable/enable&lt;br /&gt;
**Bit 1-3 = Target LUT address located at AF:2000 and up.&lt;br /&gt;
**Bit 6 = Bitmap Collision On&lt;br /&gt;
*BM_START_ADDY_L         = $AF:0101 and $AF0109&lt;br /&gt;
*BM_START_ADDY_M         = $AF:0102 and $AF:010A&lt;br /&gt;
*BM_START_ADDY_H         = $AF:0103 and $AF:010B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Text Layer ==&lt;br /&gt;
&lt;br /&gt;
This layer is enabled by setting the Vicky master control register at $AF0000 to have bit 1 enabled. To overlay text on a bitmap display set bit 2 enabled. This will ignore the background color so this bitmap image can show through.&lt;br /&gt;
&lt;br /&gt;
The text layer text itself starts at address $AF:A000. At the moment this layer has 128 columns and 64 rows, of these 80 columns and 60 rows are visible on screen at any time. Do remember that Vicky is capable of displaying a border. Its up to the developer to account for the overlap of the border with the text screen and adjust the text position accordingly.&lt;br /&gt;
&lt;br /&gt;
The fore and background color can be set by setting the corresponding bytes for each character starting at $AFC000. The upper 4 bits of every byte specify the foreground of the character and the lower 4 bytes specify the background color. This means that only 16 colors are available for the fore and background each. Both index into the text LUT for either fore or background color.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Start of text screen    = $AF:A000&lt;br /&gt;
*Start of color screen   = $AF:C000&lt;br /&gt;
*Foreground LUT start    = $AF:1F40 (4-bytes per entry)&lt;br /&gt;
*Background LUT start    = $AF:1F80 (4-bytes per entry)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LUT ==&lt;br /&gt;
&lt;br /&gt;
A LUT, namely a Look-Up-Table, stores a selection of colors. 256 colors are supported in the video composition for the bitmap layer. The text overlay LUT is limited to 16 colors for foreground and background colors each. All re selectable out of 16.777.216 colors in the 24 Bit RGB color scheme. The LUT also contains an 8 Bit alpha channel, though it isn't supported. In summary, the LUT has $400 (1024) bytes - and the order for composing it is B -&amp;gt; G -&amp;gt; R -&amp;gt; A.&lt;br /&gt;
&lt;br /&gt;
As an example, if you would want to compose a LUT of 16 base colors, it would look like this:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Address&lt;br /&gt;
!Hex Values (BGRA)&lt;br /&gt;
!Decimal RGB Value&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2000||style=&amp;quot;text-align:center; background-color:#FFFFFF; color:#000000&amp;quot; | -- Transparent --||-- Transparent --&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2004||style=&amp;quot;text-align:center; background-color:#000000; color:#ffffff&amp;quot; | 00 00 00 00|| 0, 0, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2008||style=&amp;quot;text-align:center; background-color:#FFFFFF; color:#000000&amp;quot; | FF FF FF 00|| 255, 255, 255&lt;br /&gt;
|-&lt;br /&gt;
|$AF:200C||style=&amp;quot;text-align:center; background-color:#880000; color:#ffffff&amp;quot; | 00 00 88 00|| 0, 0, 136&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2010||style=&amp;quot;text-align:center; background-color:#AAFFEE; color:#000000&amp;quot; | EE FF AA 00|| 238, 255, 170&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2014||style=&amp;quot;text-align:center; background-color:#CC44CC; color:#ffffff&amp;quot; | CC 44 CC 00|| 204, 68, 204&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2018||style=&amp;quot;text-align:center; background-color:#00CC55; color:#000000&amp;quot; | 55 CC 00 00|| 85, 204, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:201C||style=&amp;quot;text-align:center; background-color:#0000AA; color:#ffffff&amp;quot; | AA 00 00 00|| 170, 0, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2020||style=&amp;quot;text-align:center; background-color:#EEEE77; color:#000000&amp;quot; | 77 EE EE 00|| 119, 238, 238&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2024||style=&amp;quot;text-align:center; background-color:#DD8855; color:#000000&amp;quot; | 55 88 DD 00|| 85, 136, 221&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2028||style=&amp;quot;text-align:center; background-color:#664400; color:#ffffff&amp;quot; | 00 44 66 00|| 0, 68, 102&lt;br /&gt;
|-&lt;br /&gt;
|$AF:202C||style=&amp;quot;text-align:center; background-color:#FF7777; color:#000000&amp;quot; | 77 77 FF 00|| 119, 119, 255&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2030||style=&amp;quot;text-align:center; background-color:#333333; color:#ffffff&amp;quot; | 33 33 33 00|| 51, 51, 51&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2034||style=&amp;quot;text-align:center; background-color:#777777; color:#ffffff&amp;quot; | 77 77 77 00|| 119, 119, 119&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2038||style=&amp;quot;text-align:center; background-color:#AAFF66; color:#000000&amp;quot; | 66 FF AA 00|| 102, 255, 170&lt;br /&gt;
|-&lt;br /&gt;
|$AF:203C||style=&amp;quot;text-align:center; background-color:#0088FF; color:#ffffff&amp;quot; | FF 88 00 00|| 255, 136, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2040||style=&amp;quot;text-align:center; background-color:#BBBBBB; color:#000000&amp;quot; | BB BB BB 00|| 187, 187, 187&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Adressing anything in the LUT is achieved by simply dividing the lower 10 bits of target color address by 4.&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=File:Graphics_layers.jpg&amp;diff=617</id>
		<title>File:Graphics layers.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=File:Graphics_layers.jpg&amp;diff=617"/>
		<updated>2021-06-28T02:44:44Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=VICKY_II&amp;diff=616</id>
		<title>VICKY II</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=VICKY_II&amp;diff=616"/>
		<updated>2021-06-28T02:43:31Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VICKY II - the graphics engine ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Vicky&amp;quot; is the name of the graphics engine of the C256 Foenix. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Vicky II&amp;quot; is the upgraded version of the graphic engines that resides in the FMX Version.&lt;br /&gt;
&lt;br /&gt;
The major difference in between VICKY and VICKY II is the external bus @ 32Bits wide. (VICKY is only 16Bits)&lt;br /&gt;
The access time has been doubled which allow the chipset to have better access time and overall better performance. It also gave enough room to implement larger resolutions with faster GUI block move. &lt;br /&gt;
&lt;br /&gt;
Part Number: CFP9551&lt;br /&gt;
&lt;br /&gt;
It supports:&lt;br /&gt;
&lt;br /&gt;
* 320x240@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 400x300@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 640x480@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 800x600@60FPS Max Resolution @ 256 Colors (1 Byte per pixel) (GUI mode)&lt;br /&gt;
&lt;br /&gt;
* 64 [[Sprites]] with a resolution of 32x32 pixels&lt;br /&gt;
* 4 layers of [[Tiles]] with a resolution of 16x16 pixels for each tile&lt;br /&gt;
* Text Mode&lt;br /&gt;
&lt;br /&gt;
During the video layer composition, Vicky has to read 1 line of bitmap (640 pixels), 1 line of tiles for each layer (4x 640 pixels) and all the lines that are part of the 64 Sprites (worst case scenario 32 lines of 32 pixels), that are displayed on that line. Then a composition and priority encoding are done. In order to establish a priority, in other words, to know which pixel will be in front, Vicky needs to store 10 lines of 640 pixels then scan the lot and determine which one will be displayed.&lt;br /&gt;
&lt;br /&gt;
640 + 640 + 640 + 640 + 640 + (32 * 32) = 4224 Pixels are to be read during a single line interval. The pixel rate is 200Mbytes/sec, 5ns, so the overall operation takes 21.12us, without calculating the overhead in the FPGA to go from one process to the other.&lt;br /&gt;
&lt;br /&gt;
The pixel index value $00 is always transparent, regardless if it's bitmap, tile or sprite. The respective values of the first 4 bytes represented in the LUT are thus always ignored. &lt;br /&gt;
&lt;br /&gt;
Despite the fact that there is an ALPHA value in the LUT, it is not supported/used at all.&lt;br /&gt;
&lt;br /&gt;
The picture below shows how the graphics layers are arranged:&lt;br /&gt;
[[File:graphics_layers.jpg]]&lt;br /&gt;
&lt;br /&gt;
Vicky Gloabl Memory Map:&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Start Address &lt;br /&gt;
! Stop Address&lt;br /&gt;
! Register Description &lt;br /&gt;
! Additional Info&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0000 || $AF:0000 || MASTER_CTRL_REG_L || Vicky Master Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0001 || $AF:0001 || MASTER_CTRL_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0002 || $AF:0002 || GAMMA_CTRL_REG&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0003 || $AF:0003 || VKY_RESERVED_01&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0004 || $AF:0004 || BORDER_CTRL_REG || Border Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0005 || $AF:0005 || BORDER_COLOR_B&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0006 || $AF:0006 || BORDER_COLOR_G&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0007 || $AF:0007 || BORDER_COLOR_R&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0008 || $AF:0008 || BORDER_X_SIZE[5:0]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0009 || $AF:0009 || BORDER_Y_SIZE[5:0]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000A || $AF:000C || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000D || $AF:000D || BACKGROUND_COLOR_B || Background Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000E || $AF:000E || BACKGROUND_COLOR_G&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000F || $AF:000F || BACKGROUND_COLOR_R&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0010 || $AF:0010 || VKY_TXT_CURSOR_CTRL_REG || Cursor Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0011 || $AF:0011 || VKY_TXT_START_ADD_PTR   || This is an offset to change the Starting address of the Text Mode Buffer (in x)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0012 || $AF:0012 || VKY_TXT_CURSOR_CHAR_REG || Char used as the Cursor&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0013 || $AF:0013 || VKY_TXT_CURSOR_COLR_REG || Color Choice for the Cursor&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0014 || $AF:0014 || VKY_TXT_CURSOR_X_REG_L  || Cursor Position X&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0015 || $AF:0015 || VKY_TXT_CURSOR_X_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0016 || $AF:0016 || VKY_TXT_CURSOR_Y_REG_L || Cursor Position Y&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0017 || $AF:0017 || VKY_TXT_CURSOR_Y_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0018 || $AF:001B || VKY_LINE_IRQ_CTRL_REG  || Line Interrupt Registers: [0] - Enable Line 0, [1] -Enable Line 1&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001C || $AF:001C || VKY_INFO_CHIP_NUM_L || Read: Vicky Chip Part Number (L) - Write: LINE0_CMP_VALUE_LO&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001D || $AF:001D || VKY_INFO_CHIP_NUM_H  || Read: Vicky Chip Part Number (H) - Write: LINE0_CMP_VALUE_HI&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001E || $AF:001E || VKY_INFO_CHIP_VER_L || Read: Vicky Chip Version (L) - Write: LINE1_CMP_VALUE_LO&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001F || $AF:001F || VKY_INFO_CHIP_VER_H || Read: Vicky Chip Version (H) - Write: LINE1_CMP_VALUE_HI&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0020 || $AF:00FF || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0100 || $AF:0100 || BM0_CONTROL_REG || First BitMap Plane&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0101 || $AF:0101 || BM0_START_ADDY_L|| Start Address Within the Video Memory (offset by $B0:0000)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0102 || $AF:0102 || BM0_START_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0103 || $AF:0103 || BM0_START_ADDY_H&lt;br /&gt;
|- &lt;br /&gt;
| $AF:0104 || $AF:0104 || BM0_X_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0105 || $AF:0105 || BM0_Y_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0106 || $AF:0107 || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0108 || $AF:0108 || BM1_CONTROL_REG || Second BitMap Plane&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0109 || $AF:0109 || BM1_START_ADDY_L || Start Address Within the Video Memory (offset by $B0:0000)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010A || $AF:010A || BM1_START_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010B || $AF:010B || BM1_START_ADDY_H&lt;br /&gt;
|- &lt;br /&gt;
| $AF:010C || $AF:010C || BM1_X_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010D || $AF:010D || BM1_Y_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010E || $AF:010F || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0200 || $AF:02FF || TILES Memory Map || Refer to [[Tiles]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0300 || $AF:03FF || Collision Detection Memory Map || Refer to [[Collision Detection]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0400 || $AF:04FF || VDMA_CONTROL_REG || [[Video DMA Block]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0500 || $AF:05FF || MOUSE_PTR_GRAPH0 || 16x16 Mem Block 0 for Mouse Pointer &lt;br /&gt;
|-&lt;br /&gt;
| $AF:0600 || $AF:06FF || MOUSE_PTR_GRAPH1 || 16x16 Mem Block 1 for Mouse Pointer&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0700 || $AF:0700 || MOUSE_PTR_CTRL_REG_L || Mouse Pointer Registers Block&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0701 || $AF:0701 || MOUSE_PTR_CTRL_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0702 || $AF:0702 || MOUSE_PTR_X_POS_L || X Absolute Location of the Mouse&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0703 || $AF:0703 || MOUSE_PTR_X_POS_H || Presently Read Only&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0704 || $AF:0704 || MOUSE_PTR_Y_POS_L || Y Absolute Location of the Mouse&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0705 || $AF:0705 || MOUSE_PTR_Y_POS_H || Presently Read Only&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0706 || $AF:0706 || MOUSE_PTR_BYTE0 || PS2 Mouse Packet Byte 0&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0707 || $AF:0707 || MOUSE_PTR_BYTE1 || PS2 Mouse Packet Byte 1&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0708 || $AF:0708 || MOUSE_PTR_BYTE2 || PS2 Mouse Packet Byte 2&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0709 || $AF:070A || UNDEFINED MOUSE&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070B || $AF:070B || C256F_MODEL_MAJOR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070C || $AF:070C || C256F_MODEL_MINOR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070D || $AF:070D || FPGA_DOR (Day of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070E || $AF:070E || FPGA_MOR (Month of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070F || $AF:070F || FPGA_YOR (Year of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0710 || $AF:07FF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0800 || $AF:080F || RTC || See the RTC Section for more details&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0810 || $AF:0BFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0C00 || $AF:0DFF || Sprites Memory Map || Refer to [[Sprites]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0E00 || $AF:0FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1000 || $AF:13FF || SUPERIO || See the Super IO Section for more details&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1400 || $AF:1F3F || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1F40 || $AF:1F7F || FG_CHAR_LUT_PTR || Text Foreground Look-Up Table&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1F80 || $AF:1FFF || BG_CHAR_LUT_PTR || Text Background Look-Up Table&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2000 || $AF:23FF || GRPH_LUT0_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2400 || $AF:27FF || GRPH_LUT1_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2800 || $AF:2BFF || GRPH_LUT2_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2C00 || $AF:2FFF || GRPH_LUT3_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3000 || $AF:33FF || GRPH_LUT4_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3400 || $AF:37FF || GRPH_LUT5_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3800 || $AF:3BFF || GRPH_LUT6_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3C00 || $AF:3FFF || GRPH_LUT7_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4000 || $AF:40FF || GAMMA_B_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4100 || $AF:41FF || GAMMA_G_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4200 || $AF:42FF || GAMMA_R_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4300 || $AF:7FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:8000 || $AF:87FF || FONT_MEMORY_BANK0 || FONT Character Graphic Mem&lt;br /&gt;
|-&lt;br /&gt;
| $AF:8800 || $AF:9FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:A000 || $AF:BFFF || CS_TEXT_MEM_PTR || Text Memory Block&lt;br /&gt;
|-&lt;br /&gt;
| $AF:C000 || $AF:DFFF || CS_COLOR_MEM_PTR || Color Text Memory Block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Modes ==&lt;br /&gt;
Modes are enabled and disabled via the Vicky Master Control Register at $AF0000 via the control bits:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Mstr_Ctrl_Text_Mode__Lo_En&lt;br /&gt;
|= $01&lt;br /&gt;
|Enable the Text Mode&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Text_Overlay&lt;br /&gt;
|= $02&lt;br /&gt;
|Enable the Overlay of the text mode on top of Graphic Mode (the Background Color is ignored)&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Graph_Mode_En&lt;br /&gt;
|= $04&lt;br /&gt;
|Enable the Graphic Mode&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Bitmap_En&lt;br /&gt;
|= $08&lt;br /&gt;
|Enable the Bitmap Module In Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_TileMap_En&lt;br /&gt;
|= $10&lt;br /&gt;
|Enable the Tile Module in Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Sprite_En&lt;br /&gt;
|= $20&lt;br /&gt;
|Enable the Sprite Module in Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_GAMMA_En&lt;br /&gt;
|= $40&lt;br /&gt;
|Enable the GAMMA correction - The Analog and DVI have different color values, the GAMMA is great to correct the difference&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Disable_Vid&lt;br /&gt;
|= $80&lt;br /&gt;
|This will disable the Scanning of the Video information in the 4Meg of VideoRAM hence giving 100% bandwidth to the CPU&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Video mode enables hi-resolution and pixel doubling which yields 4 resolutions:&lt;br /&gt;
- 320 x 240 (pixel doubling, low res)&lt;br /&gt;
- 400 x 300 (pixel doubling, hi res)&lt;br /&gt;
- 640 x 480 (low res)&lt;br /&gt;
- 800 x 600 (hi res)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Mstr_Ctrl_Video_Mode0&lt;br /&gt;
|= $01&lt;br /&gt;
|0 - 640x480 (Clock @ 25.175Mhz), 1 - 800x600 (Clock @ 40Mhz)&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Video_Mode1&lt;br /&gt;
|= $02&lt;br /&gt;
|0 - No Pixel Doubling, 1- Pixel Doubling (Reduce the Pixel Resolution by 2)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bitmap Layer ==&lt;br /&gt;
&lt;br /&gt;
The bitmaps are stored anywhere in video RAM, which starts at bank $B0. If the bitmap is starts at $B0:0000, the BM_START_ADDY has to be set to $00:0000.&lt;br /&gt;
There are two bitmap planes.  &lt;br /&gt;
&lt;br /&gt;
*BM_CONTROL_REG          = $AF:0100 and $AF:0108&lt;br /&gt;
**Bit 0 = disable/enable&lt;br /&gt;
**Bit 1-3 = Target LUT address located at AF:2000 and up.&lt;br /&gt;
**Bit 6 = Bitmap Collision On&lt;br /&gt;
*BM_START_ADDY_L         = $AF:0101 and $AF0109&lt;br /&gt;
*BM_START_ADDY_M         = $AF:0102 and $AF:010A&lt;br /&gt;
*BM_START_ADDY_H         = $AF:0103 and $AF:010B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Text Layer ==&lt;br /&gt;
&lt;br /&gt;
This layer is enabled by setting the Vicky master control register at $AF0000 to have bit 1 enabled. To overlay text on a bitmap display set bit 2 enabled. This will ignore the background color so this bitmap image can show through.&lt;br /&gt;
&lt;br /&gt;
The text layer text itself starts at address $AF:A000. At the moment this layer has 128 columns and 64 rows, of these 80 columns and 60 rows are visible on screen at any time. Do remember that Vicky is capable of displaying a border. Its up to the developer to account for the overlap of the border with the text screen and adjust the text position accordingly.&lt;br /&gt;
&lt;br /&gt;
The fore and background color can be set by setting the corresponding bytes for each character starting at $AFC000. The upper 4 bits of every byte specify the foreground of the character and the lower 4 bytes specify the background color. This means that only 16 colors are available for the fore and background each. Both index into the text LUT for either fore or background color.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Start of text screen    = $AF:A000&lt;br /&gt;
*Start of color screen   = $AF:C000&lt;br /&gt;
*Foreground LUT start    = $AF:1F40 (4-bytes per entry)&lt;br /&gt;
*Background LUT start    = $AF:1F80 (4-bytes per entry)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LUT ==&lt;br /&gt;
&lt;br /&gt;
A LUT, namely a Look-Up-Table, stores a selection of colors. 256 colors are supported in the video composition for the bitmap layer. The text overlay LUT is limited to 16 colors for foreground and background colors each. All re selectable out of 16.777.216 colors in the 24 Bit RGB color scheme. The LUT also contains an 8 Bit alpha channel, though it isn't supported. In summary, the LUT has $400 (1024) bytes - and the order for composing it is B -&amp;gt; G -&amp;gt; R -&amp;gt; A.&lt;br /&gt;
&lt;br /&gt;
As an example, if you would want to compose a LUT of 16 base colors, it would look like this:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Address&lt;br /&gt;
!Hex Values (BGRA)&lt;br /&gt;
!Decimal RGB Value&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2000||style=&amp;quot;text-align:center; background-color:#FFFFFF; color:#000000&amp;quot; | -- Transparent --||-- Transparent --&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2004||style=&amp;quot;text-align:center; background-color:#000000; color:#ffffff&amp;quot; | 00 00 00 00|| 0, 0, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2008||style=&amp;quot;text-align:center; background-color:#FFFFFF; color:#000000&amp;quot; | FF FF FF 00|| 255, 255, 255&lt;br /&gt;
|-&lt;br /&gt;
|$AF:200C||style=&amp;quot;text-align:center; background-color:#880000; color:#ffffff&amp;quot; | 00 00 88 00|| 0, 0, 136&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2010||style=&amp;quot;text-align:center; background-color:#AAFFEE; color:#000000&amp;quot; | EE FF AA 00|| 238, 255, 170&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2014||style=&amp;quot;text-align:center; background-color:#CC44CC; color:#ffffff&amp;quot; | CC 44 CC 00|| 204, 68, 204&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2018||style=&amp;quot;text-align:center; background-color:#00CC55; color:#000000&amp;quot; | 55 CC 00 00|| 85, 204, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:201C||style=&amp;quot;text-align:center; background-color:#0000AA; color:#ffffff&amp;quot; | AA 00 00 00|| 170, 0, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2020||style=&amp;quot;text-align:center; background-color:#EEEE77; color:#000000&amp;quot; | 77 EE EE 00|| 119, 238, 238&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2024||style=&amp;quot;text-align:center; background-color:#DD8855; color:#000000&amp;quot; | 55 88 DD 00|| 85, 136, 221&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2028||style=&amp;quot;text-align:center; background-color:#664400; color:#ffffff&amp;quot; | 00 44 66 00|| 0, 68, 102&lt;br /&gt;
|-&lt;br /&gt;
|$AF:202C||style=&amp;quot;text-align:center; background-color:#FF7777; color:#000000&amp;quot; | 77 77 FF 00|| 119, 119, 255&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2030||style=&amp;quot;text-align:center; background-color:#333333; color:#ffffff&amp;quot; | 33 33 33 00|| 51, 51, 51&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2034||style=&amp;quot;text-align:center; background-color:#777777; color:#ffffff&amp;quot; | 77 77 77 00|| 119, 119, 119&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2038||style=&amp;quot;text-align:center; background-color:#AAFF66; color:#000000&amp;quot; | 66 FF AA 00|| 102, 255, 170&lt;br /&gt;
|-&lt;br /&gt;
|$AF:203C||style=&amp;quot;text-align:center; background-color:#0088FF; color:#ffffff&amp;quot; | FF 88 00 00|| 255, 136, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2040||style=&amp;quot;text-align:center; background-color:#BBBBBB; color:#000000&amp;quot; | BB BB BB 00|| 187, 187, 187&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Adressing anything in the LUT is achieved by simply dividing the lower 10 bits of target color address by 4.&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=Sprites&amp;diff=615</id>
		<title>Sprites</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=Sprites&amp;diff=615"/>
		<updated>2021-06-28T02:37:57Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sprite is a computer graphics term for a two-dimensional bitmap that is integrated into a larger scene.&lt;br /&gt;
&lt;br /&gt;
Originally sprites referred to independent objects that are composited together, by hardware, with other elements such as a background or tiles. The composition occurs as each scan line is prepared for the video output device, without involvement of the main CPU and without the need for a full-screen frame buffer. Sprites can be positioned or altered by setting attributes used during the hardware composition process. &lt;br /&gt;
&lt;br /&gt;
Vicky is able to render 64 non-multiplexed sprites with a resolution of 32x32 pixels each. Just as bitmaps, a [[LUT]] is required for selecting 256 out of 16.777.216 colors.&lt;br /&gt;
&lt;br /&gt;
== Sprite Registers ==&lt;br /&gt;
&lt;br /&gt;
Each Sprite has registers composed of a total of 8 bytes for manipulation, starting at $AF:0C00 and spanning through to $AF:0DFF. &lt;br /&gt;
&lt;br /&gt;
The first set of sprite manipulation registers are shown below:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Address&lt;br /&gt;
|-&lt;br /&gt;
|SP00_CONTROL_REG||= $AF:0C00&lt;br /&gt;
|-&lt;br /&gt;
|SP00_ADDY_PTR_L||= $AF:0C01&lt;br /&gt;
|-&lt;br /&gt;
|SP00_ADDY_PTR_M||= $AF:0C02&lt;br /&gt;
|-&lt;br /&gt;
|SP00_ADDY_PTR_H||= $AF:0C03&lt;br /&gt;
|-&lt;br /&gt;
|SP00_X_POS_L||= $AF:0C04&lt;br /&gt;
|-&lt;br /&gt;
|SP00_X_POS_H||= $AF:0C05&lt;br /&gt;
|-&lt;br /&gt;
|SP00_Y_POS_L||= $AF:0C06&lt;br /&gt;
|-&lt;br /&gt;
|SP00_Y_POS_H||= $AF:0C07&lt;br /&gt;
|}&lt;br /&gt;
For each successive sprite, add +8 to the address registers.&lt;br /&gt;
&lt;br /&gt;
The sprite control register (SPxy_CONTROL_REG) is always the first byte of the 8 byte block.  The register is configured as follows:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Attribute&lt;br /&gt;
!Bit&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_Enable||= $01&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_LUT0||= $02&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_LUT1||= $04&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_LUT2||= $08&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_DEPTH0||= $10&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_DEPTH1||= $20&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_DEPTH2||= $40&lt;br /&gt;
|-&lt;br /&gt;
|SPRITE_Collision_On||= $80&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=VICKY_II&amp;diff=614</id>
		<title>VICKY II</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=VICKY_II&amp;diff=614"/>
		<updated>2021-06-28T02:30:00Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VICKY II - the graphics engine ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Vicky&amp;quot; is the name of the graphics engine of the C256 Foenix. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Vicky II&amp;quot; is the upgraded version of the graphic engines that resides in the FMX Version.&lt;br /&gt;
&lt;br /&gt;
The major difference in between VICKY and VICKY II is the external bus @ 32Bits wide. (VICKY is only 16Bits)&lt;br /&gt;
The access time has been doubled which allow the chipset to have better access time and overall better performance. It also gave enough room to implement larger resolutions with faster GUI block move. &lt;br /&gt;
&lt;br /&gt;
Part Number: CFP9551&lt;br /&gt;
&lt;br /&gt;
It supports:&lt;br /&gt;
&lt;br /&gt;
* 320x240@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 400x300@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 640x480@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 800x600@60FPS Max Resolution @ 256 Colors (1 Byte per pixel) (GUI mode)&lt;br /&gt;
&lt;br /&gt;
* 64 [[Sprites]] with a resolution of 32x32 pixels&lt;br /&gt;
* 4 layers of [[Tiles]] with a resolution of 16x16 pixels for each tile&lt;br /&gt;
* Text Mode&lt;br /&gt;
&lt;br /&gt;
During the video layer composition, Vicky has to read 1 line of bitmap (640 pixels), 1 line of tiles for each layer (4x 640 pixels) and all the lines that are part of the 64 Sprites (worst case scenario 32 lines of 32 pixels), that are displayed on that line. Then a composition and priority encoding are done. In order to establish a priority, in other words, to know which pixel will be in front, Vicky needs to store 10 lines of 640 pixels then scan the lot and determine which one will be displayed.&lt;br /&gt;
&lt;br /&gt;
640 + 640 + 640 + 640 + 640 + (32 * 32) = 4224 Pixels are to be read during a single line interval. The pixel rate is 200Mbytes/sec, 5ns, so the overall operation takes 21.12us, without calculating the overhead in the FPGA to go from one process to the other.&lt;br /&gt;
&lt;br /&gt;
The pixel index value $00 is always transparent, regardless if it's bitmap, tile or sprite. The respective values of the first 4 bytes represented in the LUT are thus always ignored. &lt;br /&gt;
&lt;br /&gt;
Despite the fact that there is an ALPHA value in the LUT, it is not supported/used at all.&lt;br /&gt;
&lt;br /&gt;
Vicky Gloabl Memory Map:&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Start Address &lt;br /&gt;
! Stop Address&lt;br /&gt;
! Register Description &lt;br /&gt;
! Additional Info&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0000 || $AF:0000 || MASTER_CTRL_REG_L || Vicky Master Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0001 || $AF:0001 || MASTER_CTRL_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0002 || $AF:0002 || GAMMA_CTRL_REG&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0003 || $AF:0003 || VKY_RESERVED_01&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0004 || $AF:0004 || BORDER_CTRL_REG || Border Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0005 || $AF:0005 || BORDER_COLOR_B&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0006 || $AF:0006 || BORDER_COLOR_G&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0007 || $AF:0007 || BORDER_COLOR_R&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0008 || $AF:0008 || BORDER_X_SIZE[5:0]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0009 || $AF:0009 || BORDER_Y_SIZE[5:0]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000A || $AF:000C || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000D || $AF:000D || BACKGROUND_COLOR_B || Background Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000E || $AF:000E || BACKGROUND_COLOR_G&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000F || $AF:000F || BACKGROUND_COLOR_R&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0010 || $AF:0010 || VKY_TXT_CURSOR_CTRL_REG || Cursor Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0011 || $AF:0011 || VKY_TXT_START_ADD_PTR   || This is an offset to change the Starting address of the Text Mode Buffer (in x)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0012 || $AF:0012 || VKY_TXT_CURSOR_CHAR_REG || Char used as the Cursor&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0013 || $AF:0013 || VKY_TXT_CURSOR_COLR_REG || Color Choice for the Cursor&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0014 || $AF:0014 || VKY_TXT_CURSOR_X_REG_L  || Cursor Position X&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0015 || $AF:0015 || VKY_TXT_CURSOR_X_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0016 || $AF:0016 || VKY_TXT_CURSOR_Y_REG_L || Cursor Position Y&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0017 || $AF:0017 || VKY_TXT_CURSOR_Y_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0018 || $AF:001B || VKY_LINE_IRQ_CTRL_REG  || Line Interrupt Registers: [0] - Enable Line 0, [1] -Enable Line 1&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001C || $AF:001C || VKY_INFO_CHIP_NUM_L || Read: Vicky Chip Part Number (L) - Write: LINE0_CMP_VALUE_LO&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001D || $AF:001D || VKY_INFO_CHIP_NUM_H  || Read: Vicky Chip Part Number (H) - Write: LINE0_CMP_VALUE_HI&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001E || $AF:001E || VKY_INFO_CHIP_VER_L || Read: Vicky Chip Version (L) - Write: LINE1_CMP_VALUE_LO&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001F || $AF:001F || VKY_INFO_CHIP_VER_H || Read: Vicky Chip Version (H) - Write: LINE1_CMP_VALUE_HI&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0020 || $AF:00FF || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0100 || $AF:0100 || BM0_CONTROL_REG || First BitMap Plane&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0101 || $AF:0101 || BM0_START_ADDY_L|| Start Address Within the Video Memory (offset by $B0:0000)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0102 || $AF:0102 || BM0_START_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0103 || $AF:0103 || BM0_START_ADDY_H&lt;br /&gt;
|- &lt;br /&gt;
| $AF:0104 || $AF:0104 || BM0_X_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0105 || $AF:0105 || BM0_Y_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0106 || $AF:0107 || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0108 || $AF:0108 || BM1_CONTROL_REG || Second BitMap Plane&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0109 || $AF:0109 || BM1_START_ADDY_L || Start Address Within the Video Memory (offset by $B0:0000)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010A || $AF:010A || BM1_START_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010B || $AF:010B || BM1_START_ADDY_H&lt;br /&gt;
|- &lt;br /&gt;
| $AF:010C || $AF:010C || BM1_X_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010D || $AF:010D || BM1_Y_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010E || $AF:010F || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0200 || $AF:02FF || TILES Memory Map || Refer to [[Tiles]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0300 || $AF:03FF || Collision Detection Memory Map || Refer to [[Collision Detection]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0400 || $AF:04FF || VDMA_CONTROL_REG || [[Video DMA Block]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0500 || $AF:05FF || MOUSE_PTR_GRAPH0 || 16x16 Mem Block 0 for Mouse Pointer &lt;br /&gt;
|-&lt;br /&gt;
| $AF:0600 || $AF:06FF || MOUSE_PTR_GRAPH1 || 16x16 Mem Block 1 for Mouse Pointer&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0700 || $AF:0700 || MOUSE_PTR_CTRL_REG_L || Mouse Pointer Registers Block&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0701 || $AF:0701 || MOUSE_PTR_CTRL_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0702 || $AF:0702 || MOUSE_PTR_X_POS_L || X Absolute Location of the Mouse&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0703 || $AF:0703 || MOUSE_PTR_X_POS_H || Presently Read Only&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0704 || $AF:0704 || MOUSE_PTR_Y_POS_L || Y Absolute Location of the Mouse&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0705 || $AF:0705 || MOUSE_PTR_Y_POS_H || Presently Read Only&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0706 || $AF:0706 || MOUSE_PTR_BYTE0 || PS2 Mouse Packet Byte 0&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0707 || $AF:0707 || MOUSE_PTR_BYTE1 || PS2 Mouse Packet Byte 1&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0708 || $AF:0708 || MOUSE_PTR_BYTE2 || PS2 Mouse Packet Byte 2&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0709 || $AF:070A || UNDEFINED MOUSE&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070B || $AF:070B || C256F_MODEL_MAJOR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070C || $AF:070C || C256F_MODEL_MINOR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070D || $AF:070D || FPGA_DOR (Day of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070E || $AF:070E || FPGA_MOR (Month of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070F || $AF:070F || FPGA_YOR (Year of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0710 || $AF:07FF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0800 || $AF:080F || RTC || See the RTC Section for more details&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0810 || $AF:0BFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0C00 || $AF:0DFF || Sprites Memory Map || Refer to [[Sprites]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0E00 || $AF:0FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1000 || $AF:13FF || SUPERIO || See the Super IO Section for more details&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1400 || $AF:1F3F || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1F40 || $AF:1F7F || FG_CHAR_LUT_PTR || Text Foreground Look-Up Table&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1F80 || $AF:1FFF || BG_CHAR_LUT_PTR || Text Background Look-Up Table&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2000 || $AF:23FF || GRPH_LUT0_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2400 || $AF:27FF || GRPH_LUT1_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2800 || $AF:2BFF || GRPH_LUT2_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2C00 || $AF:2FFF || GRPH_LUT3_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3000 || $AF:33FF || GRPH_LUT4_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3400 || $AF:37FF || GRPH_LUT5_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3800 || $AF:3BFF || GRPH_LUT6_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3C00 || $AF:3FFF || GRPH_LUT7_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4000 || $AF:40FF || GAMMA_B_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4100 || $AF:41FF || GAMMA_G_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4200 || $AF:42FF || GAMMA_R_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4300 || $AF:7FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:8000 || $AF:87FF || FONT_MEMORY_BANK0 || FONT Character Graphic Mem&lt;br /&gt;
|-&lt;br /&gt;
| $AF:8800 || $AF:9FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:A000 || $AF:BFFF || CS_TEXT_MEM_PTR || Text Memory Block&lt;br /&gt;
|-&lt;br /&gt;
| $AF:C000 || $AF:DFFF || CS_COLOR_MEM_PTR || Color Text Memory Block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Modes ==&lt;br /&gt;
Modes are enabled and disabled via the Vicky Master Control Register at $AF0000 via the control bits:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Mstr_Ctrl_Text_Mode__Lo_En&lt;br /&gt;
|= $01&lt;br /&gt;
|Enable the Text Mode&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Text_Overlay&lt;br /&gt;
|= $02&lt;br /&gt;
|Enable the Overlay of the text mode on top of Graphic Mode (the Background Color is ignored)&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Graph_Mode_En&lt;br /&gt;
|= $04&lt;br /&gt;
|Enable the Graphic Mode&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Bitmap_En&lt;br /&gt;
|= $08&lt;br /&gt;
|Enable the Bitmap Module In Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_TileMap_En&lt;br /&gt;
|= $10&lt;br /&gt;
|Enable the Tile Module in Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Sprite_En&lt;br /&gt;
|= $20&lt;br /&gt;
|Enable the Sprite Module in Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_GAMMA_En&lt;br /&gt;
|= $40&lt;br /&gt;
|Enable the GAMMA correction - The Analog and DVI have different color values, the GAMMA is great to correct the difference&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Disable_Vid&lt;br /&gt;
|= $80&lt;br /&gt;
|This will disable the Scanning of the Video information in the 4Meg of VideoRAM hence giving 100% bandwidth to the CPU&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Video mode enables hi-resolution and pixel doubling which yields 4 resolutions:&lt;br /&gt;
- 320 x 240 (pixel doubling, low res)&lt;br /&gt;
- 400 x 300 (pixel doubling, hi res)&lt;br /&gt;
- 640 x 480 (low res)&lt;br /&gt;
- 800 x 600 (hi res)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Mstr_Ctrl_Video_Mode0&lt;br /&gt;
|= $01&lt;br /&gt;
|0 - 640x480 (Clock @ 25.175Mhz), 1 - 800x600 (Clock @ 40Mhz)&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Video_Mode1&lt;br /&gt;
|= $02&lt;br /&gt;
|0 - No Pixel Doubling, 1- Pixel Doubling (Reduce the Pixel Resolution by 2)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bitmap Layer ==&lt;br /&gt;
&lt;br /&gt;
The bitmaps are stored anywhere in video RAM, which starts at bank $B0. If the bitmap is starts at $B0:0000, the BM_START_ADDY has to be set to $00:0000.&lt;br /&gt;
There are two bitmap planes.  &lt;br /&gt;
&lt;br /&gt;
*BM_CONTROL_REG          = $AF:0100 and $AF:0108&lt;br /&gt;
**Bit 0 = disable/enable&lt;br /&gt;
**Bit 1-3 = Target LUT address located at AF:2000 and up.&lt;br /&gt;
**Bit 6 = Bitmap Collision On&lt;br /&gt;
*BM_START_ADDY_L         = $AF:0101 and $AF0109&lt;br /&gt;
*BM_START_ADDY_M         = $AF:0102 and $AF:010A&lt;br /&gt;
*BM_START_ADDY_H         = $AF:0103 and $AF:010B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Text Layer ==&lt;br /&gt;
&lt;br /&gt;
This layer is enabled by setting the Vicky master control register at $AF0000 to have bit 1 enabled. To overlay text on a bitmap display set bit 2 enabled. This will ignore the background color so this bitmap image can show through.&lt;br /&gt;
&lt;br /&gt;
The text layer text itself starts at address $AF:A000. At the moment this layer has 128 columns and 64 rows, of these 80 columns and 60 rows are visible on screen at any time. Do remember that Vicky is capable of displaying a border. Its up to the developer to account for the overlap of the border with the text screen and adjust the text position accordingly.&lt;br /&gt;
&lt;br /&gt;
The fore and background color can be set by setting the corresponding bytes for each character starting at $AFC000. The upper 4 bits of every byte specify the foreground of the character and the lower 4 bytes specify the background color. This means that only 16 colors are available for the fore and background each. Both index into the text LUT for either fore or background color.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Start of text screen    = $AF:A000&lt;br /&gt;
*Start of color screen   = $AF:C000&lt;br /&gt;
*Foreground LUT start    = $AF:1F40 (4-bytes per entry)&lt;br /&gt;
*Background LUT start    = $AF:1F80 (4-bytes per entry)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LUT ==&lt;br /&gt;
&lt;br /&gt;
A LUT, namely a Look-Up-Table, stores a selection of colors. 256 colors are supported in the video composition for the bitmap layer. The text overlay LUT is limited to 16 colors for foreground and background colors each. All re selectable out of 16.777.216 colors in the 24 Bit RGB color scheme. The LUT also contains an 8 Bit alpha channel, though it isn't supported. In summary, the LUT has $400 (1024) bytes - and the order for composing it is B -&amp;gt; G -&amp;gt; R -&amp;gt; A.&lt;br /&gt;
&lt;br /&gt;
As an example, if you would want to compose a LUT of 16 base colors, it would look like this:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Address&lt;br /&gt;
!Hex Values (BGRA)&lt;br /&gt;
!Decimal RGB Value&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2000||style=&amp;quot;text-align:center; background-color:#FFFFFF; color:#000000&amp;quot; | -- Transparent --||-- Transparent --&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2004||style=&amp;quot;text-align:center; background-color:#000000; color:#ffffff&amp;quot; | 00 00 00 00|| 0, 0, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2008||style=&amp;quot;text-align:center; background-color:#FFFFFF; color:#000000&amp;quot; | FF FF FF 00|| 255, 255, 255&lt;br /&gt;
|-&lt;br /&gt;
|$AF:200C||style=&amp;quot;text-align:center; background-color:#880000; color:#ffffff&amp;quot; | 00 00 88 00|| 0, 0, 136&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2010||style=&amp;quot;text-align:center; background-color:#AAFFEE; color:#000000&amp;quot; | EE FF AA 00|| 238, 255, 170&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2014||style=&amp;quot;text-align:center; background-color:#CC44CC; color:#ffffff&amp;quot; | CC 44 CC 00|| 204, 68, 204&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2018||style=&amp;quot;text-align:center; background-color:#00CC55; color:#000000&amp;quot; | 55 CC 00 00|| 85, 204, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:201C||style=&amp;quot;text-align:center; background-color:#0000AA; color:#ffffff&amp;quot; | AA 00 00 00|| 170, 0, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2020||style=&amp;quot;text-align:center; background-color:#EEEE77; color:#000000&amp;quot; | 77 EE EE 00|| 119, 238, 238&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2024||style=&amp;quot;text-align:center; background-color:#DD8855; color:#000000&amp;quot; | 55 88 DD 00|| 85, 136, 221&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2028||style=&amp;quot;text-align:center; background-color:#664400; color:#ffffff&amp;quot; | 00 44 66 00|| 0, 68, 102&lt;br /&gt;
|-&lt;br /&gt;
|$AF:202C||style=&amp;quot;text-align:center; background-color:#FF7777; color:#000000&amp;quot; | 77 77 FF 00|| 119, 119, 255&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2030||style=&amp;quot;text-align:center; background-color:#333333; color:#ffffff&amp;quot; | 33 33 33 00|| 51, 51, 51&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2034||style=&amp;quot;text-align:center; background-color:#777777; color:#ffffff&amp;quot; | 77 77 77 00|| 119, 119, 119&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2038||style=&amp;quot;text-align:center; background-color:#AAFF66; color:#000000&amp;quot; | 66 FF AA 00|| 102, 255, 170&lt;br /&gt;
|-&lt;br /&gt;
|$AF:203C||style=&amp;quot;text-align:center; background-color:#0088FF; color:#ffffff&amp;quot; | FF 88 00 00|| 255, 136, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2040||style=&amp;quot;text-align:center; background-color:#BBBBBB; color:#000000&amp;quot; | BB BB BB 00|| 187, 187, 187&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Adressing anything in the LUT is achieved by simply dividing the lower 10 bits of target color address by 4.&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=VICKY_II&amp;diff=613</id>
		<title>VICKY II</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=VICKY_II&amp;diff=613"/>
		<updated>2021-06-28T02:24:30Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VICKY II - the graphics engine ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Vicky&amp;quot; is the name of the graphics engine of the C256 Foenix. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Vicky II&amp;quot; is the upgraded version of the graphic engines that resides in the FMX Version.&lt;br /&gt;
&lt;br /&gt;
The major difference in between VICKY and VICKY II is the external bus @ 32Bits wide. (VICKY is only 16Bits)&lt;br /&gt;
The access time has been doubled which allow the chipset to have better access time and overall better performance. It also gave enough room to implement larger resolutions with faster GUI block move. &lt;br /&gt;
&lt;br /&gt;
Part Number: CFP9551&lt;br /&gt;
&lt;br /&gt;
It supports:&lt;br /&gt;
&lt;br /&gt;
* 320x240@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 400x300@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 640x480@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 800x600@60FPS Max Resolution @ 256 Colors (1 Byte per pixel) (GUI mode)&lt;br /&gt;
&lt;br /&gt;
* 64 [[Sprites]] with a resolution of 32x32 pixels&lt;br /&gt;
* 4 layers of [[Tiles]] with a resolution of 16x16 pixels for each tile&lt;br /&gt;
* Text Mode&lt;br /&gt;
&lt;br /&gt;
During the video layer composition, Vicky has to read 1 line of bitmap (640 pixels), 1 line of tiles for each layer (4x 640 pixels) and all the lines that are part of the 64 Sprites (worst case scenario 32 lines of 32 pixels), that are displayed on that line. Then a composition and priority encoding are done. In order to establish a priority, in other words, to know which pixel will be in front, Vicky needs to store 10 lines of 640 pixels then scan the lot and determine which one will be displayed.&lt;br /&gt;
&lt;br /&gt;
640 + 640 + 640 + 640 + 640 + (32 * 32) = 4224 Pixels are to be read during a single line interval. The pixel rate is 200Mbytes/sec, 5ns, so the overall operation takes 21.12us, without calculating the overhead in the FPGA to go from one process to the other.&lt;br /&gt;
&lt;br /&gt;
The pixel index value $00 is always transparent, regardless if it's bitmap, tile or sprite. The respective values of the first 4 bytes represented in the LUT are thus always ignored. &lt;br /&gt;
&lt;br /&gt;
Despite the fact that there is an ALPHA value in the LUT, it is not supported/used at all.&lt;br /&gt;
&lt;br /&gt;
Vicky Gloabl Memory Map:&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Start Address &lt;br /&gt;
! Stop Address&lt;br /&gt;
! Register Description &lt;br /&gt;
! Additional Info&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0000 || $AF:0000 || MASTER_CTRL_REG_L || Vicky Master Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0001 || $AF:0001 || MASTER_CTRL_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0002 || $AF:0002 || GAMMA_CTRL_REG&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0003 || $AF:0003 || VKY_RESERVED_01&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0004 || $AF:0004 || BORDER_CTRL_REG || Border Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0005 || $AF:0005 || BORDER_COLOR_B&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0006 || $AF:0006 || BORDER_COLOR_G&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0007 || $AF:0007 || BORDER_COLOR_R&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0008 || $AF:0008 || BORDER_X_SIZE[5:0]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0009 || $AF:0009 || BORDER_Y_SIZE[5:0]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000A || $AF:000C || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000D || $AF:000D || BACKGROUND_COLOR_B || Background Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000E || $AF:000E || BACKGROUND_COLOR_G&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000F || $AF:000F || BACKGROUND_COLOR_R&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0010 || $AF:0010 || VKY_TXT_CURSOR_CTRL_REG || Cursor Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0011 || $AF:0011 || VKY_TXT_START_ADD_PTR   || This is an offset to change the Starting address of the Text Mode Buffer (in x)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0012 || $AF:0012 || VKY_TXT_CURSOR_CHAR_REG || Char used as the Cursor&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0013 || $AF:0013 || VKY_TXT_CURSOR_COLR_REG || Color Choice for the Cursor&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0014 || $AF:0014 || VKY_TXT_CURSOR_X_REG_L  || Cursor Position X&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0015 || $AF:0015 || VKY_TXT_CURSOR_X_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0016 || $AF:0016 || VKY_TXT_CURSOR_Y_REG_L || Cursor Position Y&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0017 || $AF:0017 || VKY_TXT_CURSOR_Y_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0018 || $AF:001B || VKY_LINE_IRQ_CTRL_REG  || Line Interrupt Registers: [0] - Enable Line 0, [1] -Enable Line 1&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001C || $AF:001C || VKY_INFO_CHIP_NUM_L || Read: Vicky Chip Part Number (L) - Write: LINE0_CMP_VALUE_LO&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001D || $AF:001D || VKY_INFO_CHIP_NUM_H  || Read: Vicky Chip Part Number (H) - Write: LINE0_CMP_VALUE_HI&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001E || $AF:001E || VKY_INFO_CHIP_VER_L || Read: Vicky Chip Version (L) - Write: LINE1_CMP_VALUE_LO&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001F || $AF:001F || VKY_INFO_CHIP_VER_H || Read: Vicky Chip Version (H) - Write: LINE1_CMP_VALUE_HI&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0020 || $AF:00FF || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0100 || $AF:0100 || BM0_CONTROL_REG || First BitMap Plane&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0101 || $AF:0101 || BM0_START_ADDY_L|| Start Address Within the Video Memory (offset by $B0:0000)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0102 || $AF:0102 || BM0_START_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0103 || $AF:0103 || BM0_START_ADDY_H&lt;br /&gt;
|- &lt;br /&gt;
| $AF:0104 || $AF:0104 || BM0_X_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0105 || $AF:0105 || BM0_Y_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0106 || $AF:0107 || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0108 || $AF:0108 || BM1_CONTROL_REG || Second BitMap Plane&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0109 || $AF:0109 || BM1_START_ADDY_L || Start Address Within the Video Memory (offset by $B0:0000)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010A || $AF:010A || BM1_START_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010B || $AF:010B || BM1_START_ADDY_H&lt;br /&gt;
|- &lt;br /&gt;
| $AF:010C || $AF:010C || BM1_X_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010D || $AF:010D || BM1_Y_OFFSET || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010E || $AF:010F || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0200 || $AF:02FF || TILES Memory Map || Refer to [[Tiles]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0300 || $AF:03FF || Collision Detection Memory Map || Refer to [[Collision Detection]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0400 || $AF:04FF || VDMA_CONTROL_REG || [[Video DMA Block]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0500 || $AF:05FF || MOUSE_PTR_GRAPH0 || 16x16 Mem Block 0 for Mouse Pointer &lt;br /&gt;
|-&lt;br /&gt;
| $AF:0600 || $AF:06FF || MOUSE_PTR_GRAPH1 || 16x16 Mem Block 1 for Mouse Pointer&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0700 || $AF:0700 || MOUSE_PTR_CTRL_REG_L || Mouse Pointer Registers Block&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0701 || $AF:0701 || MOUSE_PTR_CTRL_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0702 || $AF:0702 || MOUSE_PTR_X_POS_L || X Absolute Location of the Mouse&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0703 || $AF:0703 || MOUSE_PTR_X_POS_H || Presently Read Only&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0704 || $AF:0704 || MOUSE_PTR_Y_POS_L || Y Absolute Location of the Mouse&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0705 || $AF:0705 || MOUSE_PTR_Y_POS_H || Presently Read Only&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0706 || $AF:0706 || MOUSE_PTR_BYTE0 || PS2 Mouse Packet Byte 0&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0707 || $AF:0707 || MOUSE_PTR_BYTE1 || PS2 Mouse Packet Byte 1&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0708 || $AF:0708 || MOUSE_PTR_BYTE2 || PS2 Mouse Packet Byte 2&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0709 || $AF:070A || UNDEFINED MOUSE&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070B || $AF:070B || C256F_MODEL_MAJOR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070C || $AF:070C || C256F_MODEL_MINOR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070D || $AF:070D || FPGA_DOR (Day of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070E || $AF:070E || FPGA_MOR (Month of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070F || $AF:070F || FPGA_YOR (Year of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0710 || $AF:07FF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0800 || $AF:080F || RTC || See the RTC Section for more details&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0810 || $AF:0BFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0C00 || $AF:0DFF || Sprites Memory Map || Refer to [[Sprites]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0E00 || $AF:0FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1000 || $AF:13FF || SUPERIO || See the Super IO Section for more details&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1400 || $AF:1F3F || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1F40 || $AF:1F7F || FG_CHAR_LUT_PTR || Text Foreground Look-Up Table&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1F80 || $AF:1FFF || BG_CHAR_LUT_PTR || Text Background Look-Up Table&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2000 || $AF:23FF || GRPH_LUT0_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2400 || $AF:27FF || GRPH_LUT1_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2800 || $AF:2BFF || GRPH_LUT2_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2C00 || $AF:2FFF || GRPH_LUT3_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3000 || $AF:33FF || GRPH_LUT4_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3400 || $AF:37FF || GRPH_LUT5_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3800 || $AF:3BFF || GRPH_LUT6_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3C00 || $AF:3FFF || GRPH_LUT7_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4000 || $AF:40FF || GAMMA_B_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4100 || $AF:41FF || GAMMA_G_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4200 || $AF:42FF || GAMMA_R_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4300 || $AF:7FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:8000 || $AF:87FF || FONT_MEMORY_BANK0 || FONT Character Graphic Mem&lt;br /&gt;
|-&lt;br /&gt;
| $AF:8800 || $AF:9FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:A000 || $AF:BFFF || CS_TEXT_MEM_PTR || Text Memory Block&lt;br /&gt;
|-&lt;br /&gt;
| $AF:C000 || $AF:DFFF || CS_COLOR_MEM_PTR || Color Text Memory Block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Modes ==&lt;br /&gt;
Modes are enabled and disabled via the Vicky Master Control Register at $AF0000 via the control bits:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Mstr_Ctrl_Text_Mode__Lo_En&lt;br /&gt;
|= $01&lt;br /&gt;
|Enable the Text Mode&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Text_Overlay&lt;br /&gt;
|= $02&lt;br /&gt;
|Enable the Overlay of the text mode on top of Graphic Mode (the Background Color is ignored)&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Graph_Mode_En&lt;br /&gt;
|= $04&lt;br /&gt;
|Enable the Graphic Mode&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Bitmap_En&lt;br /&gt;
|= $08&lt;br /&gt;
|Enable the Bitmap Module In Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_TileMap_En&lt;br /&gt;
|= $10&lt;br /&gt;
|Enable the Tile Module in Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Sprite_En&lt;br /&gt;
|= $20&lt;br /&gt;
|Enable the Sprite Module in Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_GAMMA_En&lt;br /&gt;
|= $40&lt;br /&gt;
|Enable the GAMMA correction - The Analog and DVI have different color values, the GAMMA is great to correct the difference&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Disable_Vid&lt;br /&gt;
|= $80&lt;br /&gt;
|This will disable the Scanning of the Video information in the 4Meg of VideoRAM hence giving 100% bandwidth to the CPU&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Video mode enables hi-resolution and pixel doubling which yields 4 resolutions:&lt;br /&gt;
- 320 x 240 (pixel doubling, low res)&lt;br /&gt;
- 400 x 300 (pixel doubling, hi res)&lt;br /&gt;
- 640 x 480 (low res)&lt;br /&gt;
- 800 x 600 (hi res)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Mstr_Ctrl_Video_Mode0&lt;br /&gt;
|= $01&lt;br /&gt;
|0 - 640x480 (Clock @ 25.175Mhz), 1 - 800x600 (Clock @ 40Mhz)&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Video_Mode1&lt;br /&gt;
|= $02&lt;br /&gt;
|0 - No Pixel Doubling, 1- Pixel Doubling (Reduce the Pixel Resolution by 2)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Video mode supports hi-res mode: 800 x 600 by&lt;br /&gt;
&lt;br /&gt;
== Bitmap Layer ==&lt;br /&gt;
&lt;br /&gt;
The bitmap is stored anywhere in video RAM, which starts at bank $B0. If the bitmap is supposed to start at $B0:0000, the BM_START_ADDY has to be set to $00:0000.&lt;br /&gt;
&lt;br /&gt;
*BM_CONTROL_REG          = $AF0140&lt;br /&gt;
**Bit 0 = disable/enable&lt;br /&gt;
**Bit 1-3 = Target LUT address located at AF:2000 and up.&lt;br /&gt;
*BM_START_ADDY_L         = $AF0141&lt;br /&gt;
*BM_START_ADDY_M         = $AF0142&lt;br /&gt;
*BM_START_ADDY_H         = $AF0143&lt;br /&gt;
&lt;br /&gt;
== Text Layer ==&lt;br /&gt;
&lt;br /&gt;
This layer is enabled by setting the Vicky master control register at $AF0000 to have bit 1 enabled. To overlay text on a bitmap display set bit 2 enabled. This will ignore the background color so this bitmap image can show thru.&lt;br /&gt;
&lt;br /&gt;
The text layer text itself starts at address $AFA000. At the moment this layer has 128 columns and 64 rows, of these 80 columns and 60 rows are visible on screen at any time. Do remember that Vicky is capable of displaying a border. Its up to the developer to account for the overlap of the border with the text screen and adjust the text position accordingly.&lt;br /&gt;
&lt;br /&gt;
The fore and background color can be set by setting the corresponding bytes for each character starting at $AFC000. The upper 4 bits of every byte specify the foreground of the character and the lower 4 bytes specify the background color. This means that only 16 colors are available for the fore and background each. Both index into the text LUT for either fore or background color.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Start of text screen    = $AFA000&lt;br /&gt;
*Start of color screen   = $AFC000&lt;br /&gt;
*Foreground LUT start    = $AF1F40 (4-bytes per entry)&lt;br /&gt;
*Background LUT start    = $AF1F80 (4-bytes per entry)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LUT ==&lt;br /&gt;
&lt;br /&gt;
A LUT, namely a Look-Up-Table, stores a selection of colors. 256 colors are supported in the video composition for the bitmap layer. The text overlay LUT is limited to 16 colors for foreground and background colors each. All re selectable out of 16.777.216 colors in the 24 Bit RGB color scheme. The LUT also contains an 8 Bit alpha channel, though it isn't supported. In summary, the LUT has $400 (1024) bytes - and the order for composing it is B -&amp;gt; G -&amp;gt; R -&amp;gt; A.&lt;br /&gt;
&lt;br /&gt;
As an example, if you would want to compose a LUT of 16 base colors, it would look like this:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Address&lt;br /&gt;
!Hex Values (BGRA)&lt;br /&gt;
!Decimal RGB Value&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2000||style=&amp;quot;text-align:center; background-color:#FFFFFF; color:#000000&amp;quot; | -- Transparent --||-- Transparent --&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2004||style=&amp;quot;text-align:center; background-color:#000000; color:#ffffff&amp;quot; | 00 00 00 00|| 0, 0, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2008||style=&amp;quot;text-align:center; background-color:#FFFFFF; color:#000000&amp;quot; | FF FF FF 00|| 255, 255, 255&lt;br /&gt;
|-&lt;br /&gt;
|$AF:200C||style=&amp;quot;text-align:center; background-color:#880000; color:#ffffff&amp;quot; | 00 00 88 00|| 0, 0, 136&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2010||style=&amp;quot;text-align:center; background-color:#AAFFEE; color:#000000&amp;quot; | EE FF AA 00|| 238, 255, 170&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2014||style=&amp;quot;text-align:center; background-color:#CC44CC; color:#ffffff&amp;quot; | CC 44 CC 00|| 204, 68, 204&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2018||style=&amp;quot;text-align:center; background-color:#00CC55; color:#000000&amp;quot; | 55 CC 00 00|| 85, 204, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:201C||style=&amp;quot;text-align:center; background-color:#0000AA; color:#ffffff&amp;quot; | AA 00 00 00|| 170, 0, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2020||style=&amp;quot;text-align:center; background-color:#EEEE77; color:#000000&amp;quot; | 77 EE EE 00|| 119, 238, 238&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2024||style=&amp;quot;text-align:center; background-color:#DD8855; color:#000000&amp;quot; | 55 88 DD 00|| 85, 136, 221&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2028||style=&amp;quot;text-align:center; background-color:#664400; color:#ffffff&amp;quot; | 00 44 66 00|| 0, 68, 102&lt;br /&gt;
|-&lt;br /&gt;
|$AF:202C||style=&amp;quot;text-align:center; background-color:#FF7777; color:#000000&amp;quot; | 77 77 FF 00|| 119, 119, 255&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2030||style=&amp;quot;text-align:center; background-color:#333333; color:#ffffff&amp;quot; | 33 33 33 00|| 51, 51, 51&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2034||style=&amp;quot;text-align:center; background-color:#777777; color:#ffffff&amp;quot; | 77 77 77 00|| 119, 119, 119&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2038||style=&amp;quot;text-align:center; background-color:#AAFF66; color:#000000&amp;quot; | 66 FF AA 00|| 102, 255, 170&lt;br /&gt;
|-&lt;br /&gt;
|$AF:203C||style=&amp;quot;text-align:center; background-color:#0088FF; color:#ffffff&amp;quot; | FF 88 00 00|| 255, 136, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2040||style=&amp;quot;text-align:center; background-color:#BBBBBB; color:#000000&amp;quot; | BB BB BB 00|| 187, 187, 187&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Adressing anything in the LUT is achieved by simply dividing the lower 10 bits of target color address by 4.&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=VICKY_II&amp;diff=612</id>
		<title>VICKY II</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=VICKY_II&amp;diff=612"/>
		<updated>2021-06-28T01:59:22Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== VICKY II - the graphics engine ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Vicky&amp;quot; is the name of the graphics engine of the C256 Foenix. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Vicky II&amp;quot; is the upgraded version of the graphic engines that resides in the FMX Version.&lt;br /&gt;
&lt;br /&gt;
The major difference in between VICKY and VICKY II is the external bus @ 32Bits wide. (VICKY is only 16Bits)&lt;br /&gt;
The access time has been doubled which allow the chipset to have better access time and overall better performance. It also gave enough room to implement larger resolutions with faster GUI block move. &lt;br /&gt;
&lt;br /&gt;
Part Number: CFP9551&lt;br /&gt;
&lt;br /&gt;
It supports:&lt;br /&gt;
&lt;br /&gt;
* 320x240@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 400x300@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 640x480@60FPS Max Resolution @ 256 Colors (1 Byte per pixel)&lt;br /&gt;
* 800x600@60FPS Max Resolution @ 256 Colors (1 Byte per pixel) (GUI mode)&lt;br /&gt;
&lt;br /&gt;
* 64 [[Sprites]] with a resolution of 32x32 pixels&lt;br /&gt;
* 4 layers of [[tiles]] with a resolution of 16x16 pixels for each tile&lt;br /&gt;
* Text Mode&lt;br /&gt;
&lt;br /&gt;
During the video layer composition, Vicky has to read 1 line of bitmap (640 pixels), 1 line of tiles for each layer (4x 640 pixels) and all the lines that are part of the 64 Sprites (worst case scenario 32 lines of 32 pixels), that are displayed on that line. Then a composition and priority encoding are done. In order to establish a priority, in other words, to know which pixel will be in front, Vicky needs to store 10 lines of 640 pixels then scan the lot and determine which one will be displayed.&lt;br /&gt;
&lt;br /&gt;
640 + 640 + 640 + 640 + 640 + (32 * 32) = 4224 Pixels are to be read during a single line interval. The pixel rate is 200Mbytes/sec, 5ns, so the overall operation takes 21.12us, without calculating the overhead in the FPGA to go from one process to the other.&lt;br /&gt;
&lt;br /&gt;
The pixel index value $00 is always transparent, regardless if it's bitmap, tile or sprite. The respective values of the first 4 bytes represented in the LUT are thus always ignored. &lt;br /&gt;
&lt;br /&gt;
Despite the fact that there is an ALPHA value in the LUT, it is not supported/used at all.&lt;br /&gt;
&lt;br /&gt;
Vicky Gloabl Memory Map:&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Start Address &lt;br /&gt;
! Stop Address&lt;br /&gt;
! Register Description &lt;br /&gt;
! Additional Info&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0000 || $AF:0000 || MASTER_CTRL_REG_L || Vicky Master Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0001 || $AF:0001 || MASTER_CTRL_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0002 || $AF:0002 || GAMMA_CTRL_REG&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0003 || $AF:0003 || VKY_RESERVED_01&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0004 || $AF:0004 || BORDER_CTRL_REG || Border Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0005 || $AF:0005 || BORDER_COLOR_B&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0006 || $AF:0006 || BORDER_COLOR_G&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0007 || $AF:0007 || BORDER_COLOR_R&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0008 || $AF:0008 || BORDER_X_SIZE[5:0]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0009 || $AF:0009 || BORDER_Y_SIZE[5:0]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000A || $AF:000C || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000D || $AF:000D || BACKGROUND_COLOR_B || Background Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000E || $AF:000E || BACKGROUND_COLOR_G&lt;br /&gt;
|-&lt;br /&gt;
| $AF:000F || $AF:000F || BACKGROUND_COLOR_R&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0010 || $AF:0010 || VKY_TXT_CURSOR_CTRL_REG || Cursor Control Registers&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0011 || $AF:0011 || VKY_TXT_START_ADD_PTR   || This is an offset to change the Starting address of the Text Mode Buffer (in x)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0012 || $AF:0012 || VKY_TXT_CURSOR_CHAR_REG || Char used as the Cursor&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0013 || $AF:0013 || VKY_TXT_CURSOR_COLR_REG || Color Choice for the Cursor&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0014 || $AF:0014 || VKY_TXT_CURSOR_X_REG_L  || Cursor Position X&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0015 || $AF:0015 || VKY_TXT_CURSOR_X_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0016 || $AF:0016 || VKY_TXT_CURSOR_Y_REG_L || Cursor Position Y&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0017 || $AF:0017 || VKY_TXT_CURSOR_Y_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0018 || $AF:001B || VKY_LINE_IRQ_CTRL_REG  || Line Interrupt Registers: [0] - Enable Line 0, [1] -Enable Line 1&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001C || $AF:001C || VKY_INFO_CHIP_NUM_L || Read: Vicky Chip Part Number (L) - Write: LINE0_CMP_VALUE_LO&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001D || $AF:001D || VKY_INFO_CHIP_NUM_H  || Read: Vicky Chip Part Number (H) - Write: LINE0_CMP_VALUE_HI&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001E || $AF:001E || VKY_INFO_CHIP_VER_L || Read: Vicky Chip Version (L) - Write: LINE1_CMP_VALUE_LO&lt;br /&gt;
|-&lt;br /&gt;
| $AF:001F || $AF:001F || VKY_INFO_CHIP_VER_H || Read: Vicky Chip Version (H) - Write: LINE1_CMP_VALUE_HI&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0020 || $AF:00FF || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0100 || $AF:0100 || TL0_CONTROL_REG || Tile 0 Register Set&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0101 || $AF:0101 || TL0_START_ADDY_L || Start Address Within the Video Memory&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0102 || $AF:0102 || TL0_START_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0103 || $AF:0103 || TL0_START_ADDY_H&lt;br /&gt;
|- &lt;br /&gt;
| $AF:0104 || $AF:0104 || TL0_SCROLL_X&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0105 || $AF:0105 || TL0_SCROLL_Y&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0106 || $AF:0107 || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0108 || $AF:0108 || TL1_CONTROL_REG || Tile 1 Register Set&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0109 || $AF:0109 || TL1_START_ADDY_L || Start Address Within the Video Memory&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010A || $AF:010A || TL1_START_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010B || $AF:010B || TL1_START_ADDY_H&lt;br /&gt;
|- &lt;br /&gt;
| $AF:010C || $AF:010C || TL1_SCROLL_X&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010D || $AF:010D || TL1_SCROLL_Y&lt;br /&gt;
|-&lt;br /&gt;
| $AF:010E || $AF:010F || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0110 || $AF:0110 || TL2_CONTROL_REG || Tile 2 Register Set&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0111 || $AF:0111 || TL2_START_ADDY_L || Start Address Within the Video Memory&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0112 || $AF:0112 || TL2_START_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0113 || $AF:0113 || TL2_START_ADDY_H&lt;br /&gt;
|- &lt;br /&gt;
| $AF:0114 || $AF:0114 || TL2_SCROLL_X&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0115 || $AF:0115 || TL2_SCROLL_Y&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0116 || $AF:0117 || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0118 || $AF:0118 || TL3_CONTROL_REG || Tile 3 Register Set&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0119 || $AF:0119 || TL3_START_ADDY_L || Start Address Within the Video Memory&lt;br /&gt;
|-&lt;br /&gt;
| $AF:011A || $AF:011A || TL3_START_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:011B || $AF:011B || TL3_START_ADDY_H&lt;br /&gt;
|- &lt;br /&gt;
| $AF:011C || $AF:011C || TL3_SCROLL_X&lt;br /&gt;
|-&lt;br /&gt;
| $AF:011D || $AF:011D || TL3_SCROLL_Y&lt;br /&gt;
|-&lt;br /&gt;
| $AF:011E || $AF:011F || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0120 || $AF:013F || UNDEFINED - RESERVED&lt;br /&gt;
|- &lt;br /&gt;
| $AF:0140 || $AF:0140 || BM_CONTROL_REG || Bitmap Registers Set&lt;br /&gt;
|- &lt;br /&gt;
| $AF:0141 || $AF:0141 || BM_START_ADDY_L || Start Address Within the Video Memory&lt;br /&gt;
|- &lt;br /&gt;
| $AF:0142 || $AF:0142 || BM_START_ADDY_M&lt;br /&gt;
|- &lt;br /&gt;
| $AF:0143 || $AF:0143 || BM_START_ADDY_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0144 || $AF:0144 || BM_X_SIZE_L || Needs to be set to 640&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0145 || $AF:0145 || BM_X_SIZE_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0146 || $AF:0146 || BM_Y_SIZE_L || Needs to be set to 480&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0147 || $AF:0147 || BM_Y_SIZE_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0148 || $AF:014F || BM_RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0150 || $AF:01FF || UNDEFINED - RESERVED&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0200 || $AF:0200 || SP00_CONTROL_REG || Sprite 0 (Highest Priority)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0201 || $AF:0201 || SP00_ADDY_PTR_L || Start Address Within the Video Memory&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0202 || $AF:0202 || SP00_ADDY_PTR_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0203 || $AF:0203 || SP00_ADDY_PTR_H&lt;br /&gt;
|-  &lt;br /&gt;
| $AF:0204 || $AF:0204 || SP00_X_POS_L&lt;br /&gt;
|-  &lt;br /&gt;
| $AF:0205 || $AF:0205 || SP00_X_POS_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0206 || $AF:0206 || SP00_Y_POS_L&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0207 || $AF:0207 || SP00_Y_POS_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0208 || $AF:020F || || SP01 - Sprite 1&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0210 || $AF:0217 || || SP02 - Sprite 2&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0218 || $AF:021F || || SP03 - Sprite 3&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0220 || $AF:0227 || || SP04 - Sprite 4&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0228 || $AF:022F || || SP05 - Sprite 5&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0230 || $AF:0237 || || SP06 - Sprite 6&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0238 || $AF:023F || || SP07 - Sprite 7&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0240 || $AF:0247 || || SP08 - Sprite 8&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0248 || $AF:024F || || SP09 - Sprite 9&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0250 || $AF:0257 || || SP10 - Sprite 10&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0258 || $AF:025F || || SP11 - Sprite 11&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0260 || $AF:0267 || || SP12 - Sprite 12&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0268 || $AF:026F || || SP13 - Sprite 13&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0270 || $AF:0277 || || SP14 - Sprite 14&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0278 || $AF:027F || || SP15 - Sprite 15&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0280 || $AF:0287 || || SP16 - Sprite 16&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0288 || $AF:028F || || SP17 - Sprite 17&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0290 || $AF:0297 || || SP18 - Sprite 18&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0298 || $AF:029F || || SP19 - Sprite 19&lt;br /&gt;
|-&lt;br /&gt;
| $AF:02A0 || $AF:02A7 || || SP20 - Sprite 20&lt;br /&gt;
|-&lt;br /&gt;
| $AF:02A8 || $AF:02AF || || SP21 - Sprite 21&lt;br /&gt;
|-&lt;br /&gt;
| $AF:02B0 || $AF:02B7 || || SP22 - Sprite 22&lt;br /&gt;
|-&lt;br /&gt;
| $AF:02B8 || $AF:02BF || || SP23 - Sprite 23&lt;br /&gt;
|-&lt;br /&gt;
| $AF:02C0 || $AF:02C7 || || SP24 - Sprite 24&lt;br /&gt;
|-&lt;br /&gt;
| $AF:02C8 || $AF:02CF || || SP25 - Sprite 25&lt;br /&gt;
|-&lt;br /&gt;
| $AF:02D0 || $AF:02D7 || || SP26 - Sprite 26&lt;br /&gt;
|-&lt;br /&gt;
| $AF:02D8 || $AF:02DF || || SP27 - Sprite 27&lt;br /&gt;
|-&lt;br /&gt;
| $AF:02E0 || $AF:02E7 || || SP28 - Sprite 28&lt;br /&gt;
|-&lt;br /&gt;
| $AF:02E8 || $AF:02EF || || SP29 - Sprite 29&lt;br /&gt;
|-&lt;br /&gt;
| $AF:02F0 || $AF:02F7 || || SP30 - Sprite 30&lt;br /&gt;
|-&lt;br /&gt;
| $AF:02F8 || $AF:02FF || || SP31 - Sprite 31&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0300 || $AF:03FF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0400 || $AF:0400 || VDMA_CONTROL_REG || [[Video DMA Block]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0401 || $AF:0401 || VDMA_STATUS_REG&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0402 || $AF:0402 || VDMA_SRC_ADDY_L&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0403 || $AF:0403 || VDMA_SRC_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0404 || $AF:0404 || VDMA_SRC_ADDY_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0405 || $AF:0405 || VDMA_DST_ADDY_L&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0406 || $AF:0406 || VDMA_DST_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0407 || $AF:0407 || VDMA_DST_ADDY_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0408 || $AF:0408 || VDMA_SIZE_L / VDMA_X_SIZE_L&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0409 || $AF:0409 || VDMA_SIZE_M / VDMA_X_SIZE_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:040A || $AF:040A || VDMA_SIZE_H / VDMA_Y_SIZE_L&lt;br /&gt;
|-&lt;br /&gt;
| $AF:040B || $AF:040B || VDMA_RESERVED_0 / VDMA_Y_SIZE_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:040C || $AF:040C || VDMA_SRC_STRIDE_L&lt;br /&gt;
|-&lt;br /&gt;
| $AF:040D || $AF:040D || VDMA_SRC_STRIDE_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:040E || $AF:040E || VDMA_DST_STRIDE_L&lt;br /&gt;
|-&lt;br /&gt;
| $AF:040F || $AF:040F || VDMA_DST_STRIDE_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0410 || $AF:041F || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0420 || $AF:0420 || SDMA_CTRL_REG0 || [[System DMA Block]]&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0421 || $AF:0421 || SDMA_CTRL_REG1&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0422 || $AF:0422 || SDMA_SRC_ADDY_L&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0423 || $AF:0423 || SDMA_SRC_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0424 || $AF:0424 || SDMA_SRC_ADDY_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0425 || $AF:0425 || SDMA_DST_ADDY_L&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0426 || $AF:0426 || SDMA_DST_ADDY_M&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0427 || $AF:0427 || SDMA_DST_ADDY_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0428 || $AF:0428 || SDMA_SIZE_L / SDMA_X_SIZE_L&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0429 || $AF:0429 || SDMA_SIZE_M / SDMA_X_SIZE_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:042A || $AF:042A || SDMA_SIZE_H / SDMA_Y_SIZE_L&lt;br /&gt;
|-&lt;br /&gt;
| $AF:042B || $AF:042B || Ignored / SDMA_Y_SIZE_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:042C || $AF:042C || SDMA_SRC_STRIDE_L&lt;br /&gt;
|-&lt;br /&gt;
| $AF:042D || $AF:042D || SDMA_SRC_STRIDE_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:042E || $AF:042E || SDMA_DST_STRIDE_L&lt;br /&gt;
|-&lt;br /&gt;
| $AF:042F || $AF:042F || SDMA_DST_STRIDE_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0430 || $AF:0430 || SDMA_STATUS_REG / SDMA_BYTE_2_WRITE&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0431 || $AF:04FF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0500 || $AF:05FF || MOUSE_PTR_GRAPH0 || 16x16 Mem Block 0 for Mouse Pointer &lt;br /&gt;
|-&lt;br /&gt;
| $AF:0600 || $AF:06FF || MOUSE_PTR_GRAPH1 || 16x16 Mem Block 1 for Mouse Pointer&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0700 || $AF:0700 || MOUSE_PTR_CTRL_REG_L || Mouse Pointer Registers Block&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0701 || $AF:0701 || MOUSE_PTR_CTRL_REG_H&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0702 || $AF:0702 || MOUSE_PTR_X_POS_L || X Absolute Location of the Mouse&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0703 || $AF:0703 || MOUSE_PTR_X_POS_H || Presently Read Only&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0704 || $AF:0704 || MOUSE_PTR_Y_POS_L || Y Absolute Location of the Mouse&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0705 || $AF:0705 || MOUSE_PTR_Y_POS_H || Presently Read Only&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0706 || $AF:0706 || MOUSE_PTR_BYTE0 || PS2 Mouse Packet Byte 0&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0707 || $AF:0707 || MOUSE_PTR_BYTE1 || PS2 Mouse Packet Byte 1&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0708 || $AF:0708 || MOUSE_PTR_BYTE2 || PS2 Mouse Packet Byte 2&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0709 || $AF:070A || UNDEFINED MOUSE&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070B || $AF:070B || C256F_MODEL_MAJOR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070C || $AF:070C || C256F_MODEL_MINOR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070D || $AF:070D || FPGA_DOR (Date of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070E || $AF:070E || FPGA_MOR (Date of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:070F || $AF:070F || FPGA_YOR (Date of Release)&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0710 || $AF:07FF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0800 || $AF:080F || RTC || See the RTC Section for more details&lt;br /&gt;
|-&lt;br /&gt;
| $AF:0810 || $AF:0FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1000 || $AF:13FF || SUPERIO || See the Super IO Section for more details&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1400 || $AF:1F3F || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1F40 || $AF:1F7F || FG_CHAR_LUT_PTR || Text Foreground Look-Up Table&lt;br /&gt;
|-&lt;br /&gt;
| $AF:1F80 || $AF:1FFF || BG_CHAR_LUT_PTR || Text Background Look-Up Table&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2000 || $AF:23FF || GRPH_LUT0_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2400 || $AF:27FF || GRPH_LUT1_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2800 || $AF:2BFF || GRPH_LUT2_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:2C00 || $AF:2FFF || GRPH_LUT3_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3000 || $AF:33FF || GRPH_LUT4_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3400 || $AF:37FF || GRPH_LUT5_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3800 || $AF:3BFF || GRPH_LUT6_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:3C00 || $AF:3FFF || GRPH_LUT7_PTR || Not Implemented Yet&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4000 || $AF:40FF || GAMMA_B_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4100 || $AF:41FF || GAMMA_G_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4200 || $AF:42FF || GAMMA_R_LUT_PTR&lt;br /&gt;
|-&lt;br /&gt;
| $AF:4300 || $AF:4FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:5000 || $AF:57FF || TILE_MAP0 || Tile Map 0 Memory Block&lt;br /&gt;
|-&lt;br /&gt;
| $AF:5800 || $AF:5FFF || TILE_MAP1 || Tile Map 1 Memory Block&lt;br /&gt;
|-&lt;br /&gt;
| $AF:6000 || $AF:67FF || TILE_MAP2 || Tile Map 2 Memory Block&lt;br /&gt;
|-&lt;br /&gt;
| $AF:6800 || $AF:6FFF || TILE_MAP3 || Tile Map 3 Memory Block&lt;br /&gt;
|-&lt;br /&gt;
| $AF:7000 || $AF:7FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:8000 || $AF:87FF || FONT_MEMORY_BANK0 || FONT Character Graphic Mem&lt;br /&gt;
|-&lt;br /&gt;
| $AF:8800 || $AF:8FFF || FONT_MEMORY_BANK1 || FONT Character Graphic Mem&lt;br /&gt;
|-&lt;br /&gt;
| $AF:9000 || $AF:9FFF || UNDEFINED - RESERVED || ------------------------&lt;br /&gt;
|-&lt;br /&gt;
| $AF:A000 || $AF:BFFF || CS_TEXT_MEM_PTR || Text Memory Block&lt;br /&gt;
|-&lt;br /&gt;
| $AF:C000 || $AF:DFFF || CS_COLOR_MEM_PTR || Color Text Memory Block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Modes ==&lt;br /&gt;
Modes are enabled and disabled via the Vicky Master Control Register at $AF0000 via the control bits:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|Mstr_Ctrl_Text_Mode_En&lt;br /&gt;
|= $01&lt;br /&gt;
|Enable the Text Mode&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Text_Overlay&lt;br /&gt;
|= $02&lt;br /&gt;
|Enable the Overlay of the text mode on top of Graphic Mode (the Background Color is ignored)&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Graph_Mode_En&lt;br /&gt;
|= $04&lt;br /&gt;
|Enable the Graphic Mode&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Bitmap_En&lt;br /&gt;
|= $08&lt;br /&gt;
|Enable the Bitmap Module In Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_TileMap_En&lt;br /&gt;
|= $10&lt;br /&gt;
|Enable the Tile Module in Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Sprite_En&lt;br /&gt;
|= $20&lt;br /&gt;
|Enable the Sprite Module in Vicky&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_GAMMA_En&lt;br /&gt;
|= $40&lt;br /&gt;
|Enable the GAMMA correction - The Analog and DVI have different color values, the GAMMA is great to correct the difference&lt;br /&gt;
|-&lt;br /&gt;
|Mstr_Ctrl_Disable_Vid&lt;br /&gt;
|= $80&lt;br /&gt;
|This will disable the Scanning of the Video information in the 4Meg of VideoRAM hence giving 100% bandwidth to the CPU&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Bitmap Layer ==&lt;br /&gt;
&lt;br /&gt;
The bitmap is stored anywhere in video RAM, which starts at bank $B0. If the bitmap is supposed to start at $B0:0000, the BM_START_ADDY has to be set to $00:0000.&lt;br /&gt;
&lt;br /&gt;
*BM_CONTROL_REG          = $AF0140&lt;br /&gt;
**Bit 0 = disable/enable&lt;br /&gt;
**Bit 1-3 = Target LUT address located at AF:2000 and up.&lt;br /&gt;
*BM_START_ADDY_L         = $AF0141&lt;br /&gt;
*BM_START_ADDY_M         = $AF0142&lt;br /&gt;
*BM_START_ADDY_H         = $AF0143&lt;br /&gt;
&lt;br /&gt;
== Text Layer ==&lt;br /&gt;
&lt;br /&gt;
This layer is enabled by setting the Vicky master control register at $AF0000 to have bit 1 enabled. To overlay text on a bitmap display set bit 2 enabled. This will ignore the background color so this bitmap image can show thru.&lt;br /&gt;
&lt;br /&gt;
The text layer text itself starts at address $AFA000. At the moment this layer has 128 columns and 64 rows, of these 80 columns and 60 rows are visible on screen at any time. Do remember that Vicky is capable of displaying a border. Its up to the developer to account for the overlap of the border with the text screen and adjust the text position accordingly.&lt;br /&gt;
&lt;br /&gt;
The fore and background color can be set by setting the corresponding bytes for each character starting at $AFC000. The upper 4 bits of every byte specify the foreground of the character and the lower 4 bytes specify the background color. This means that only 16 colors are available for the fore and background each. Both index into the text LUT for either fore or background color.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Start of text screen    = $AFA000&lt;br /&gt;
*Start of color screen   = $AFC000&lt;br /&gt;
*Foreground LUT start    = $AF1F40 (4-bytes per entry)&lt;br /&gt;
*Background LUT start    = $AF1F80 (4-bytes per entry)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LUT ==&lt;br /&gt;
&lt;br /&gt;
A LUT, namely a Look-Up-Table, stores a selection of colors. 256 colors are supported in the video composition for the bitmap layer. The text overlay LUT is limited to 16 colors for foreground and background colors each. All re selectable out of 16.777.216 colors in the 24 Bit RGB color scheme. The LUT also contains an 8 Bit alpha channel, though it isn't supported. In summary, the LUT has $400 (1024) bytes - and the order for composing it is B -&amp;gt; G -&amp;gt; R -&amp;gt; A.&lt;br /&gt;
&lt;br /&gt;
As an example, if you would want to compose a LUT of 16 base colors, it would look like this:&lt;br /&gt;
&lt;br /&gt;
{| {{Wikitable}}&lt;br /&gt;
!Address&lt;br /&gt;
!Hex Values (BGRA)&lt;br /&gt;
!Decimal RGB Value&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2000||style=&amp;quot;text-align:center; background-color:#FFFFFF; color:#000000&amp;quot; | -- Transparent --||-- Transparent --&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2004||style=&amp;quot;text-align:center; background-color:#000000; color:#ffffff&amp;quot; | 00 00 00 00|| 0, 0, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2008||style=&amp;quot;text-align:center; background-color:#FFFFFF; color:#000000&amp;quot; | FF FF FF 00|| 255, 255, 255&lt;br /&gt;
|-&lt;br /&gt;
|$AF:200C||style=&amp;quot;text-align:center; background-color:#880000; color:#ffffff&amp;quot; | 00 00 88 00|| 0, 0, 136&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2010||style=&amp;quot;text-align:center; background-color:#AAFFEE; color:#000000&amp;quot; | EE FF AA 00|| 238, 255, 170&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2014||style=&amp;quot;text-align:center; background-color:#CC44CC; color:#ffffff&amp;quot; | CC 44 CC 00|| 204, 68, 204&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2018||style=&amp;quot;text-align:center; background-color:#00CC55; color:#000000&amp;quot; | 55 CC 00 00|| 85, 204, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:201C||style=&amp;quot;text-align:center; background-color:#0000AA; color:#ffffff&amp;quot; | AA 00 00 00|| 170, 0, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2020||style=&amp;quot;text-align:center; background-color:#EEEE77; color:#000000&amp;quot; | 77 EE EE 00|| 119, 238, 238&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2024||style=&amp;quot;text-align:center; background-color:#DD8855; color:#000000&amp;quot; | 55 88 DD 00|| 85, 136, 221&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2028||style=&amp;quot;text-align:center; background-color:#664400; color:#ffffff&amp;quot; | 00 44 66 00|| 0, 68, 102&lt;br /&gt;
|-&lt;br /&gt;
|$AF:202C||style=&amp;quot;text-align:center; background-color:#FF7777; color:#000000&amp;quot; | 77 77 FF 00|| 119, 119, 255&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2030||style=&amp;quot;text-align:center; background-color:#333333; color:#ffffff&amp;quot; | 33 33 33 00|| 51, 51, 51&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2034||style=&amp;quot;text-align:center; background-color:#777777; color:#ffffff&amp;quot; | 77 77 77 00|| 119, 119, 119&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2038||style=&amp;quot;text-align:center; background-color:#AAFF66; color:#000000&amp;quot; | 66 FF AA 00|| 102, 255, 170&lt;br /&gt;
|-&lt;br /&gt;
|$AF:203C||style=&amp;quot;text-align:center; background-color:#0088FF; color:#ffffff&amp;quot; | FF 88 00 00|| 255, 136, 0&lt;br /&gt;
|-&lt;br /&gt;
|$AF:2040||style=&amp;quot;text-align:center; background-color:#BBBBBB; color:#000000&amp;quot; | BB BB BB 00|| 187, 187, 187&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Adressing anything in the LUT is achieved by simply dividing the lower 10 bits of target color address by 4.&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=Main_Page&amp;diff=437</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=Main_Page&amp;diff=437"/>
		<updated>2020-09-21T00:05:22Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: /* Early Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= C256 FOENIX (FMX) WIKI = &lt;br /&gt;
----&lt;br /&gt;
=== Hardware Overview ===&lt;br /&gt;
'''WDC 65C816 CPU @ 14.318Mhz, 4MB System RAM, 512K flash'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| || '''Graphics'''           || '''Storage'''               || '''Ports'''             ||&lt;br /&gt;
|-&lt;br /&gt;
| || 4MB Video RAM            || SD Card slot (front)        || DVI-I Video             ||&lt;br /&gt;
|-&lt;br /&gt;
| || 320x240x60fps            || 2.5&amp;quot; internal IDE HDD       || 2x PS/2 (kbd/mouse)     ||&lt;br /&gt;
|-&lt;br /&gt;
| || 400x300x60fps            || 3.5&amp;quot; 1.44MB floppy (side)   || Stereo RCA Line In      ||&lt;br /&gt;
|-&lt;br /&gt;
| || 640x480x60fps            ||                             || Stereo RCA Line Out     ||&lt;br /&gt;
|-&lt;br /&gt;
| || 800x600x60fps            || '''Sound'''                 || Stereo 1/8&amp;quot; headphone   ||&lt;br /&gt;
|-&lt;br /&gt;
| || 24-bit RGB color space   || 16-bit stereo CODEC         || 2x ATARI/C64 Joysticks  ||&lt;br /&gt;
|-&lt;br /&gt;
| || 256-color bitmap plane   || 16 Voice Gideon FPGASID     || 2x TTL/(S)NES Joysticks ||&lt;br /&gt;
|-&lt;br /&gt;
| || 8x8 character plane      || Yamaha OPM (keyboards)      || MIDI in/out             ||&lt;br /&gt;
|-&lt;br /&gt;
| || 4x 16x16x256 tile planes || Yamaha OPN2 (Sega games)    || DB9 RS232               ||&lt;br /&gt;
|-&lt;br /&gt;
| || 32x 32x32x256 sprites    || Yamaha OPL3 (Sound Blaster) || DB25 EPP                ||&lt;br /&gt;
|-&lt;br /&gt;
| || 4x sprite planes         || TI SN76489 (Sega, Cabinets) || Bus Expansion Port      ||&lt;br /&gt;
|-&lt;br /&gt;
| || 16x16x256 mouse pointer  || Internal 3KHz piezo beeper  || 12v DC Power            ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
[[Errata]]&lt;br /&gt;
&lt;br /&gt;
[[Hardware Setup]]&lt;br /&gt;
&lt;br /&gt;
[[Using Foenix BASIC816]]&lt;br /&gt;
&lt;br /&gt;
[[FMX Ports and Connectors]]&lt;br /&gt;
&lt;br /&gt;
[[Binary Development Resources]]&lt;br /&gt;
&lt;br /&gt;
[[Memory Map]]&lt;br /&gt;
&lt;br /&gt;
== Technical Documentation ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| [[65816]]     || || CPU&lt;br /&gt;
|-&lt;br /&gt;
| [[bq4802ly]]  || || RTC&lt;br /&gt;
|-&lt;br /&gt;
| [[GABE]]      || || System / IO / Timers / Sound Chip Controller / Math Co-Processor&lt;br /&gt;
|-&lt;br /&gt;
| [[LPC47M10x]] || || SuperIO (Analog inputs, MIDI, EPP, PS2, Serial)&lt;br /&gt;
|-&lt;br /&gt;
| [[SN76489]]   || || PSG Audio&lt;br /&gt;
|-&lt;br /&gt;
| [[YM2151]]    || || Yamaha OPM1 - FM Operator Type I&lt;br /&gt;
|-&lt;br /&gt;
| [[YM2612]]    || || Yamaha OPN2 - FM Operator Type II&lt;br /&gt;
|-&lt;br /&gt;
| [[YMF262]]    || || Yamaha OPL3 - FM Operator Type III&lt;br /&gt;
|-&lt;br /&gt;
| [[WM8776]]    || || 24-bit 192kHz Stereo CODEC&lt;br /&gt;
|-&lt;br /&gt;
| [[VICKY II]]  || || Graphics Engine&lt;br /&gt;
|-&lt;br /&gt;
| [[Unity]]     || || IDE Hard-disk control&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Early Software ==&lt;br /&gt;
&lt;br /&gt;
You will need to reset (or even power cycle) the Foenix between uploads to clear the memory and restore the default configuration.  These are early days!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Program'''      || '''Notes'''       || '''Author'''    || '''Sources'''&lt;br /&gt;
|-&lt;br /&gt;
| BASIC816           || Bundled           || PJW             || https://github.com/pweingar/BASIC816&lt;br /&gt;
|-&lt;br /&gt;
| MONITOR            || Bundled           || PJW             || https://github.com/pweingar/BASIC816&lt;br /&gt;
|-&lt;br /&gt;
| [[matrix.hex]]     || Matrix demo       || Piotr Meyer     || &lt;br /&gt;
|-&lt;br /&gt;
| [[Tracker_2.hex]]  || Music player      || Daniel Tremblay || https://github.com/dtremblay/c256-tracker&lt;br /&gt;
|-&lt;br /&gt;
| [[Tracker_3.hex]]  || Music player      || Daniel Tremblay || https://github.com/dtremblay/c256-tracker&lt;br /&gt;
|-&lt;br /&gt;
| [[fraggy.hex]]     || Frogger like game || Daniel Tremblay || https://github.com/dtremblay/fraggy&lt;br /&gt;
|-&lt;br /&gt;
| [[jumpman_sr.hex]] || Splash screen     || Stefany Allaire || Too busy working on the system!&lt;br /&gt;
|-&lt;br /&gt;
| C256 Tetris        || Full Tetris Game  || Daniel Tremblay || https://github.com/dtremblay/c256-tetris&lt;br /&gt;
|-&lt;br /&gt;
| VGM Player        || Video Game Music Player || Daniel Tremblay || https://github.com/dtremblay/c256-vgm-player&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=Main_Page&amp;diff=436</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=Main_Page&amp;diff=436"/>
		<updated>2020-09-21T00:05:09Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: /* Early Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= C256 FOENIX (FMX) WIKI = &lt;br /&gt;
----&lt;br /&gt;
=== Hardware Overview ===&lt;br /&gt;
'''WDC 65C816 CPU @ 14.318Mhz, 4MB System RAM, 512K flash'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| || '''Graphics'''           || '''Storage'''               || '''Ports'''             ||&lt;br /&gt;
|-&lt;br /&gt;
| || 4MB Video RAM            || SD Card slot (front)        || DVI-I Video             ||&lt;br /&gt;
|-&lt;br /&gt;
| || 320x240x60fps            || 2.5&amp;quot; internal IDE HDD       || 2x PS/2 (kbd/mouse)     ||&lt;br /&gt;
|-&lt;br /&gt;
| || 400x300x60fps            || 3.5&amp;quot; 1.44MB floppy (side)   || Stereo RCA Line In      ||&lt;br /&gt;
|-&lt;br /&gt;
| || 640x480x60fps            ||                             || Stereo RCA Line Out     ||&lt;br /&gt;
|-&lt;br /&gt;
| || 800x600x60fps            || '''Sound'''                 || Stereo 1/8&amp;quot; headphone   ||&lt;br /&gt;
|-&lt;br /&gt;
| || 24-bit RGB color space   || 16-bit stereo CODEC         || 2x ATARI/C64 Joysticks  ||&lt;br /&gt;
|-&lt;br /&gt;
| || 256-color bitmap plane   || 16 Voice Gideon FPGASID     || 2x TTL/(S)NES Joysticks ||&lt;br /&gt;
|-&lt;br /&gt;
| || 8x8 character plane      || Yamaha OPM (keyboards)      || MIDI in/out             ||&lt;br /&gt;
|-&lt;br /&gt;
| || 4x 16x16x256 tile planes || Yamaha OPN2 (Sega games)    || DB9 RS232               ||&lt;br /&gt;
|-&lt;br /&gt;
| || 32x 32x32x256 sprites    || Yamaha OPL3 (Sound Blaster) || DB25 EPP                ||&lt;br /&gt;
|-&lt;br /&gt;
| || 4x sprite planes         || TI SN76489 (Sega, Cabinets) || Bus Expansion Port      ||&lt;br /&gt;
|-&lt;br /&gt;
| || 16x16x256 mouse pointer  || Internal 3KHz piezo beeper  || 12v DC Power            ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
[[Errata]]&lt;br /&gt;
&lt;br /&gt;
[[Hardware Setup]]&lt;br /&gt;
&lt;br /&gt;
[[Using Foenix BASIC816]]&lt;br /&gt;
&lt;br /&gt;
[[FMX Ports and Connectors]]&lt;br /&gt;
&lt;br /&gt;
[[Binary Development Resources]]&lt;br /&gt;
&lt;br /&gt;
[[Memory Map]]&lt;br /&gt;
&lt;br /&gt;
== Technical Documentation ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| [[65816]]     || || CPU&lt;br /&gt;
|-&lt;br /&gt;
| [[bq4802ly]]  || || RTC&lt;br /&gt;
|-&lt;br /&gt;
| [[GABE]]      || || System / IO / Timers / Sound Chip Controller / Math Co-Processor&lt;br /&gt;
|-&lt;br /&gt;
| [[LPC47M10x]] || || SuperIO (Analog inputs, MIDI, EPP, PS2, Serial)&lt;br /&gt;
|-&lt;br /&gt;
| [[SN76489]]   || || PSG Audio&lt;br /&gt;
|-&lt;br /&gt;
| [[YM2151]]    || || Yamaha OPM1 - FM Operator Type I&lt;br /&gt;
|-&lt;br /&gt;
| [[YM2612]]    || || Yamaha OPN2 - FM Operator Type II&lt;br /&gt;
|-&lt;br /&gt;
| [[YMF262]]    || || Yamaha OPL3 - FM Operator Type III&lt;br /&gt;
|-&lt;br /&gt;
| [[WM8776]]    || || 24-bit 192kHz Stereo CODEC&lt;br /&gt;
|-&lt;br /&gt;
| [[VICKY II]]  || || Graphics Engine&lt;br /&gt;
|-&lt;br /&gt;
| [[Unity]]     || || IDE Hard-disk control&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Early Software ==&lt;br /&gt;
&lt;br /&gt;
You will need to reset (or even power cycle) the Foenix between uploads to clear the memory and restore the default configuration.  These are early days!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Program'''      || '''Notes'''       || '''Author'''    || '''Sources'''&lt;br /&gt;
|-&lt;br /&gt;
| BASIC816           || Bundled           || PJW             || https://github.com/pweingar/BASIC816&lt;br /&gt;
|-&lt;br /&gt;
| MONITOR            || Bundled           || PJW             || https://github.com/pweingar/BASIC816&lt;br /&gt;
|-&lt;br /&gt;
| [[matrix.hex]]     || Matrix demo       || Piotr Meyer     || &lt;br /&gt;
|-&lt;br /&gt;
| [[Tracker_2.hex]]  || Music player      || Daniel Tremblay || https://github.com/dtremblay/c256-tracker&lt;br /&gt;
|-&lt;br /&gt;
| [[Tracker_3.hex]]  || Music player      || Daniel Tremblay || https://github.com/dtremblay/c256-tracker&lt;br /&gt;
|-&lt;br /&gt;
| [[fraggy.hex]]     || Frogger like game || Daniel Tremblay || https://github.com/dtremblay/fraggy&lt;br /&gt;
|-&lt;br /&gt;
| [[jumpman_sr.hex]] || Splash screen     || Stefany Allaire || Too busy working on the system!&lt;br /&gt;
|-&lt;br /&gt;
| C256 Tetris        || Full Tetris Game  || Daniel Tremblay || https://github.com/dtremblay/c256-tetris&lt;br /&gt;
|-&lt;br /&gt;
| VGM Playeer        || Video Game Music Player || Daniel Tremblay || https://github.com/dtremblay/c256-vgm-player&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.c256foenix.com/index.php?title=Main_Page&amp;diff=435</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.c256foenix.com/index.php?title=Main_Page&amp;diff=435"/>
		<updated>2020-09-21T00:03:57Z</updated>

		<summary type="html">&lt;p&gt;Grenouye: /* Early Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= C256 FOENIX (FMX) WIKI = &lt;br /&gt;
----&lt;br /&gt;
=== Hardware Overview ===&lt;br /&gt;
'''WDC 65C816 CPU @ 14.318Mhz, 4MB System RAM, 512K flash'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| || '''Graphics'''           || '''Storage'''               || '''Ports'''             ||&lt;br /&gt;
|-&lt;br /&gt;
| || 4MB Video RAM            || SD Card slot (front)        || DVI-I Video             ||&lt;br /&gt;
|-&lt;br /&gt;
| || 320x240x60fps            || 2.5&amp;quot; internal IDE HDD       || 2x PS/2 (kbd/mouse)     ||&lt;br /&gt;
|-&lt;br /&gt;
| || 400x300x60fps            || 3.5&amp;quot; 1.44MB floppy (side)   || Stereo RCA Line In      ||&lt;br /&gt;
|-&lt;br /&gt;
| || 640x480x60fps            ||                             || Stereo RCA Line Out     ||&lt;br /&gt;
|-&lt;br /&gt;
| || 800x600x60fps            || '''Sound'''                 || Stereo 1/8&amp;quot; headphone   ||&lt;br /&gt;
|-&lt;br /&gt;
| || 24-bit RGB color space   || 16-bit stereo CODEC         || 2x ATARI/C64 Joysticks  ||&lt;br /&gt;
|-&lt;br /&gt;
| || 256-color bitmap plane   || 16 Voice Gideon FPGASID     || 2x TTL/(S)NES Joysticks ||&lt;br /&gt;
|-&lt;br /&gt;
| || 8x8 character plane      || Yamaha OPM (keyboards)      || MIDI in/out             ||&lt;br /&gt;
|-&lt;br /&gt;
| || 4x 16x16x256 tile planes || Yamaha OPN2 (Sega games)    || DB9 RS232               ||&lt;br /&gt;
|-&lt;br /&gt;
| || 32x 32x32x256 sprites    || Yamaha OPL3 (Sound Blaster) || DB25 EPP                ||&lt;br /&gt;
|-&lt;br /&gt;
| || 4x sprite planes         || TI SN76489 (Sega, Cabinets) || Bus Expansion Port      ||&lt;br /&gt;
|-&lt;br /&gt;
| || 16x16x256 mouse pointer  || Internal 3KHz piezo beeper  || 12v DC Power            ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
[[Errata]]&lt;br /&gt;
&lt;br /&gt;
[[Hardware Setup]]&lt;br /&gt;
&lt;br /&gt;
[[Using Foenix BASIC816]]&lt;br /&gt;
&lt;br /&gt;
[[FMX Ports and Connectors]]&lt;br /&gt;
&lt;br /&gt;
[[Binary Development Resources]]&lt;br /&gt;
&lt;br /&gt;
[[Memory Map]]&lt;br /&gt;
&lt;br /&gt;
== Technical Documentation ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| [[65816]]     || || CPU&lt;br /&gt;
|-&lt;br /&gt;
| [[bq4802ly]]  || || RTC&lt;br /&gt;
|-&lt;br /&gt;
| [[GABE]]      || || System / IO / Timers / Sound Chip Controller / Math Co-Processor&lt;br /&gt;
|-&lt;br /&gt;
| [[LPC47M10x]] || || SuperIO (Analog inputs, MIDI, EPP, PS2, Serial)&lt;br /&gt;
|-&lt;br /&gt;
| [[SN76489]]   || || PSG Audio&lt;br /&gt;
|-&lt;br /&gt;
| [[YM2151]]    || || Yamaha OPM1 - FM Operator Type I&lt;br /&gt;
|-&lt;br /&gt;
| [[YM2612]]    || || Yamaha OPN2 - FM Operator Type II&lt;br /&gt;
|-&lt;br /&gt;
| [[YMF262]]    || || Yamaha OPL3 - FM Operator Type III&lt;br /&gt;
|-&lt;br /&gt;
| [[WM8776]]    || || 24-bit 192kHz Stereo CODEC&lt;br /&gt;
|-&lt;br /&gt;
| [[VICKY II]]  || || Graphics Engine&lt;br /&gt;
|-&lt;br /&gt;
| [[Unity]]     || || IDE Hard-disk control&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Early Software ==&lt;br /&gt;
&lt;br /&gt;
You will need to reset (or even power cycle) the Foenix between uploads to clear the memory and restore the default configuration.  These are early days!&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Program'''      || '''Notes'''       || '''Author'''    || '''Sources'''&lt;br /&gt;
|-&lt;br /&gt;
| BASIC816           || Bundled           || PJW             || https://github.com/pweingar/BASIC816&lt;br /&gt;
|-&lt;br /&gt;
| MONITOR            || Bundled           || PJW             || https://github.com/pweingar/BASIC816&lt;br /&gt;
|-&lt;br /&gt;
| [[matrix.hex]]     || Matrix demo       || Piotr Meyer     || &lt;br /&gt;
|-&lt;br /&gt;
| [[Tracker_2.hex]]  || Music player      || Daniel Tremblay || https://github.com/dtremblay/c256-tracker&lt;br /&gt;
|-&lt;br /&gt;
| [[Tracker_3.hex]]  || Music player      || Daniel Tremblay || https://github.com/dtremblay/c256-tracker&lt;br /&gt;
|-&lt;br /&gt;
| [[fraggy.hex]]     || Frogger like game || Daniel Tremblay || https://github.com/dtremblay/fraggy&lt;br /&gt;
|-&lt;br /&gt;
| [[jumpman_sr.hex]] || Splash screen     || Stefany Allaire || Too busy working on the system!&lt;br /&gt;
|-&lt;br /&gt;
| C256 Tetris        || Full Tetris Game  || Daniel Tremblay || https://github.com/dtremblay/c256-tetris&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Grenouye</name></author>
		
	</entry>
</feed>